diff --git a/.changeset/easy-apples-yawn.md b/.changeset/easy-apples-yawn.md new file mode 100644 index 00000000..18267660 --- /dev/null +++ b/.changeset/easy-apples-yawn.md @@ -0,0 +1,5 @@ +--- +"permissionless": patch +--- + +Added SimpleAccount 0.8 diff --git a/.github/workflows/on-pull-request.yml b/.github/workflows/on-pull-request.yml index f50ca0c4..be549f17 100644 --- a/.github/workflows/on-pull-request.yml +++ b/.github/workflows/on-pull-request.yml @@ -46,7 +46,7 @@ jobs: size: name: Size runs-on: ubuntu-latest - timeout-minutes: 5 + timeout-minutes: 15 steps: - name: Clone repository diff --git a/.github/workflows/on-push-to-main.yml b/.github/workflows/on-push-to-main.yml index 91e886c1..823b6528 100644 --- a/.github/workflows/on-push-to-main.yml +++ b/.github/workflows/on-push-to-main.yml @@ -17,7 +17,7 @@ jobs: changesets: name: Changesets runs-on: ubuntu-latest - timeout-minutes: 5 + timeout-minutes: 15 steps: - name: Clone repository @@ -42,7 +42,7 @@ jobs: name: Release needs: verify runs-on: ubuntu-latest - timeout-minutes: 5 + timeout-minutes: 15 steps: - name: Clone repository diff --git a/.github/workflows/verify.yml b/.github/workflows/verify.yml index cf70afac..8a42d475 100644 --- a/.github/workflows/verify.yml +++ b/.github/workflows/verify.yml @@ -31,7 +31,7 @@ jobs: name: Build needs: lint runs-on: ubuntu-latest - timeout-minutes: 5 + timeout-minutes: 15 steps: - name: Clone repository diff --git a/bun.lock b/bun.lock index 39d455e0..c9ca9dbb 100644 --- a/bun.lock +++ b/bun.lock @@ -8,7 +8,7 @@ "@changesets/changelog-github": "^0.4.8", "@changesets/cli": "^2.26.2", "@permissionless/wagmi": "workspace:packages/wagmi", - "@pimlico/alto": "^0.0.11", + "@pimlico/alto": "^0.0.18", "@pimlico/mock-paymaster": "workspace:packages/mock-paymaster", "@size-limit/esbuild-why": "^9.0.0", "@size-limit/preset-small-lib": "^9.0.0", @@ -23,7 +23,7 @@ "bun-types": "^1.0.7", "get-port": "^7.0.0", "ox": "0.6.7", - "prool": "^0.0.12", + "prool": "^0.0.23", "react": "^18.3.1", "react-dom": "^18.3.1", "rimraf": "^6.0.1", @@ -32,31 +32,31 @@ "tsc-alias": "^1.8.8", "tslib": "^2.6.2", "typescript": "^5.2.2", - "viem": "2.23.2", + "viem": "2.28.1", "vite": "^5.4.10", "vitest": "^2.1.5", - "wagmi": "^2.14.11", + "wagmi": "^2.15.1", }, }, "packages/mock-paymaster": { "name": "@pimlico/mock-paymaster", - "version": "0.0.1", + "version": "0.0.2", "dependencies": { - "@fastify/cors": "^11.0.0", - "fastify": "^5.2.1", + "@fastify/cors": "^8.5.0", + "fastify": "^4.28.1", "zod": "^3.24.2", }, "peerDependencies": { "prool": "^0.0.23", - "viem": "^2.23.2", + "viem": "^2.28.1", }, }, "packages/permissionless": { "name": "permissionless", - "version": "0.2.36", + "version": "0.2.45", "peerDependencies": { "ox": "0.6.7", - "viem": "^2.23.2", + "viem": "^2.28.1", }, "optionalPeers": [ "ox", @@ -64,9 +64,9 @@ }, "packages/wagmi": { "name": "@permissionless/wagmi", - "version": "0.1.3", + "version": "0.1.4", "peerDependencies": { - "wagmi": "^2.12.8", + "wagmi": "^2.15.1", }, }, "packages/wagmi-demo": { @@ -237,19 +237,15 @@ "@ethereumjs/util": ["@ethereumjs/util@8.1.0", "", { "dependencies": { "@ethereumjs/rlp": "^4.0.1", "ethereum-cryptography": "^2.0.0", "micro-ftch": "^0.3.1" } }, "sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA=="], - "@fastify/ajv-compiler": ["@fastify/ajv-compiler@4.0.2", "", { "dependencies": { "ajv": "^8.12.0", "ajv-formats": "^3.0.1", "fast-uri": "^3.0.0" } }, "sha512-Rkiu/8wIjpsf46Rr+Fitd3HRP+VsxUFDDeag0hs9L0ksfnwx2g7SPQQTFL0E8Qv+rfXzQOxBJnjUB9ITUDjfWQ=="], - - "@fastify/cors": ["@fastify/cors@11.0.0", "", { "dependencies": { "fastify-plugin": "^5.0.0", "mnemonist": "0.40.0" } }, "sha512-41Bx0LVGr2a6DnnhDN/SgfDlTRNZtEs8niPxyoymV6Hw09AIdz/9Rn/0Fpu+pBOs6kviwS44JY2mB8NcU2qSAA=="], - - "@fastify/error": ["@fastify/error@4.0.0", "", {}, "sha512-OO/SA8As24JtT1usTUTKgGH7uLvhfwZPwlptRi2Dp5P4KKmJI3gvsZ8MIHnNwDs4sLf/aai5LzTyl66xr7qMxA=="], + "@fastify/ajv-compiler": ["@fastify/ajv-compiler@3.6.0", "", { "dependencies": { "ajv": "^8.11.0", "ajv-formats": "^2.1.1", "fast-uri": "^2.0.0" } }, "sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ=="], - "@fastify/fast-json-stringify-compiler": ["@fastify/fast-json-stringify-compiler@5.0.2", "", { "dependencies": { "fast-json-stringify": "^6.0.0" } }, "sha512-YdR7gqlLg1xZAQa+SX4sMNzQHY5pC54fu9oC5aYSUqBhyn6fkLkrdtKlpVdCNPlwuUuXA1PjFTEmvMF6ZVXVGw=="], + "@fastify/cors": ["@fastify/cors@8.5.0", "", { "dependencies": { "fastify-plugin": "^4.0.0", "mnemonist": "0.39.6" } }, "sha512-/oZ1QSb02XjP0IK1U0IXktEsw/dUBTxJOW7IpIeO8c/tNalw/KjoNSJv1Sf6eqoBPO+TDGkifq6ynFK3v68HFQ=="], - "@fastify/forwarded": ["@fastify/forwarded@3.0.0", "", {}, "sha512-kJExsp4JCms7ipzg7SJ3y8DwmePaELHxKYtg+tZow+k0znUTf3cb+npgyqm8+ATZOdmfgfydIebPDWM172wfyA=="], + "@fastify/error": ["@fastify/error@3.4.1", "", {}, "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ=="], - "@fastify/merge-json-schemas": ["@fastify/merge-json-schemas@0.2.1", "", { "dependencies": { "dequal": "^2.0.3" } }, "sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A=="], + "@fastify/fast-json-stringify-compiler": ["@fastify/fast-json-stringify-compiler@4.3.0", "", { "dependencies": { "fast-json-stringify": "^5.7.0" } }, "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA=="], - "@fastify/proxy-addr": ["@fastify/proxy-addr@5.0.0", "", { "dependencies": { "@fastify/forwarded": "^3.0.0", "ipaddr.js": "^2.1.0" } }, "sha512-37qVVA1qZ5sgH7KpHkkC4z9SK6StIsIcOmpjvMPXNb3vx2GQxhZocogVYbr2PbbeLCQxYIPDok307xEvRZOzGA=="], + "@fastify/merge-json-schemas": ["@fastify/merge-json-schemas@0.1.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3" } }, "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA=="], "@fastify/websocket": ["@fastify/websocket@10.0.1", "", { "dependencies": { "duplexify": "^4.1.2", "fastify-plugin": "^4.0.0", "ws": "^8.0.0" } }, "sha512-8/pQIxTPRD8U94aILTeJ+2O3el/r19+Ej5z1O1mXlqplsUH7KzCjAI0sgd5DM/NoPjAi5qLFNIjgM5+9/rGSNw=="], @@ -261,6 +257,8 @@ "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "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" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], + "@isaacs/fs-minipass": ["@isaacs/fs-minipass@4.0.1", "", { "dependencies": { "minipass": "^7.0.4" } }, "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w=="], + "@istanbuljs/schema": ["@istanbuljs/schema@0.1.3", "", {}, "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA=="], "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.8", "", { "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA=="], @@ -277,7 +275,7 @@ "@lit-labs/ssr-dom-shim": ["@lit-labs/ssr-dom-shim@1.3.0", "", {}, "sha512-nQIWonJ6eFAvUUrSlwyHDm/aE8PBDu5kRpL0vHMg6K8fK3Diq1xdPjTnsJSwxABhaZ+5eBi1btQB5ShUTKo4nQ=="], - "@lit/reactive-element": ["@lit/reactive-element@1.6.3", "", { "dependencies": { "@lit-labs/ssr-dom-shim": "^1.0.0" } }, "sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ=="], + "@lit/reactive-element": ["@lit/reactive-element@2.1.0", "", { "dependencies": { "@lit-labs/ssr-dom-shim": "^1.2.0" } }, "sha512-L2qyoZSQClcBmq0qajBVbhYEcG6iK0XfLn66ifLe/RfC0/ihpc+pl0Wdn8bJ8o+hj38cG0fGXRgSS20MuXn7qA=="], "@manypkg/find-root": ["@manypkg/find-root@1.1.0", "", { "dependencies": { "@babel/runtime": "^7.5.5", "@types/node": "^12.7.1", "find-up": "^4.1.0", "fs-extra": "^8.1.0" } }, "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA=="], @@ -309,22 +307,6 @@ "@metamask/utils": ["@metamask/utils@8.5.0", "", { "dependencies": { "@ethereumjs/tx": "^4.2.0", "@metamask/superstruct": "^3.0.0", "@noble/hashes": "^1.3.1", "@scure/base": "^1.1.3", "@types/debug": "^4.1.7", "debug": "^4.3.4", "pony-cause": "^2.1.10", "semver": "^7.5.4", "uuid": "^9.0.1" } }, "sha512-I6bkduevXb72TIM9q2LRO63JSsF9EXduh3sBr9oybNX2hNNpr/j1tEjXrsG0Uabm4MJ1xkGAQEMwifvKZIkyxQ=="], - "@motionone/animation": ["@motionone/animation@10.18.0", "", { "dependencies": { "@motionone/easing": "^10.18.0", "@motionone/types": "^10.17.1", "@motionone/utils": "^10.18.0", "tslib": "^2.3.1" } }, "sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw=="], - - "@motionone/dom": ["@motionone/dom@10.18.0", "", { "dependencies": { "@motionone/animation": "^10.18.0", "@motionone/generators": "^10.18.0", "@motionone/types": "^10.17.1", "@motionone/utils": "^10.18.0", "hey-listen": "^1.0.8", "tslib": "^2.3.1" } }, "sha512-bKLP7E0eyO4B2UaHBBN55tnppwRnaE3KFfh3Ps9HhnAkar3Cb69kUCJY9as8LrccVYKgHA+JY5dOQqJLOPhF5A=="], - - "@motionone/easing": ["@motionone/easing@10.18.0", "", { "dependencies": { "@motionone/utils": "^10.18.0", "tslib": "^2.3.1" } }, "sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg=="], - - "@motionone/generators": ["@motionone/generators@10.18.0", "", { "dependencies": { "@motionone/types": "^10.17.1", "@motionone/utils": "^10.18.0", "tslib": "^2.3.1" } }, "sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg=="], - - "@motionone/svelte": ["@motionone/svelte@10.16.4", "", { "dependencies": { "@motionone/dom": "^10.16.4", "tslib": "^2.3.1" } }, "sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA=="], - - "@motionone/types": ["@motionone/types@10.17.1", "", {}, "sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A=="], - - "@motionone/utils": ["@motionone/utils@10.18.0", "", { "dependencies": { "@motionone/types": "^10.17.1", "hey-listen": "^1.0.8", "tslib": "^2.3.1" } }, "sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw=="], - - "@motionone/vue": ["@motionone/vue@10.16.4", "", { "dependencies": { "@motionone/dom": "^10.16.4", "tslib": "^2.3.1" } }, "sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg=="], - "@msgpackr-extract/msgpackr-extract-darwin-arm64": ["@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-QZHtlVgbAdy2zAqNA9Gu1UpIuI8Xvsd1v8ic6B2pZmeFnFcMWiPLfWXh7TVw4eGEZ/C9TH281KwhVoeQUKbyjw=="], "@msgpackr-extract/msgpackr-extract-darwin-x64": ["@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-mdzd3AVzYKuUmiWOQ8GNhl64/IoFGol569zNRdkLReh6LRLHOXxU4U8eq0JwaD8iFHdVGqSy4IjFL4reoWCDFw=="], @@ -407,10 +389,12 @@ "@permissionless/wagmi": ["@permissionless/wagmi@workspace:packages/wagmi"], - "@pimlico/alto": ["@pimlico/alto@0.0.11", "", { "dependencies": { "@fastify/cors": "^9.0.1", "@fastify/websocket": "^10.0.1", "@opentelemetry/api": "^1.9.0", "@opentelemetry/core": "^1.25.1", "@opentelemetry/exporter-trace-otlp-proto": "^0.52.1", "@opentelemetry/instrumentation-fastify": "^0.38.0", "@opentelemetry/instrumentation-http": "^0.52.1", "@opentelemetry/instrumentation-ioredis": "^0.42.0", "@opentelemetry/instrumentation-pino": "^0.41.0", "@opentelemetry/instrumentation-undici": "^0.4.0", "@opentelemetry/sdk-node": "^0.52.1", "@opentelemetry/sdk-trace-base": "^1.25.1", "@opentelemetry/semantic-conventions": "^1.25.1", "@sentry/node": "^7.83.0", "@types/node": "^18.16.3", "@types/ws": "^8.5.10", "abitype": "^0.8.0", "async-mutex": "^0.4.0", "bull": "^4.15.1", "dotenv": "^16.0.3", "fastify": "^4.25.2", "ioredis": "^5.4.1", "opentelemetry-instrumentation-fetch-node": "^1.2.3", "pino": "^8.15.0", "pino-http": "^8.4.0", "pino-pretty": "^10.0.0", "prom-client": "^14.2.0", "viem": "^2.19.0", "yargs": "^17.7.1", "zod": "^3.21.4", "zod-validation-error": "^1.3.0" } }, "sha512-6+7MfbgiIivEQBXRo4lR5o9gpPn3c1lwTJhF4nTIByGsJYL5YW8pWvlkzcC2sRfLyft0opbiOZW53ReC9ftrbA=="], + "@pimlico/alto": ["@pimlico/alto@0.0.18", "", { "dependencies": { "@fastify/websocket": "^10.0.1", "@opentelemetry/api": "^1.9.0", "@opentelemetry/core": "^1.25.1", "@opentelemetry/exporter-trace-otlp-proto": "^0.52.1", "@opentelemetry/instrumentation-fastify": "^0.38.0", "@opentelemetry/instrumentation-http": "^0.52.1", "@opentelemetry/instrumentation-ioredis": "^0.42.0", "@opentelemetry/instrumentation-pino": "^0.41.0", "@opentelemetry/instrumentation-undici": "^0.4.0", "@opentelemetry/sdk-node": "^0.52.1", "@opentelemetry/sdk-trace-base": "^1.25.1", "@opentelemetry/semantic-conventions": "^1.25.1", "@pimlico/opentelemetry-instrumentation-viem": "^0.0.4", "@sentry/node": "^7.83.0", "@types/node": "^18.16.3", "@types/ws": "^8.5.10", "abitype": "^0.8.0", "async-mutex": "^0.4.0", "bull": "^4.15.1", "dotenv": "^16.0.3", "fastify": "^4.25.2", "ioredis": "^5.4.1", "opentelemetry-instrumentation-fetch-node": "^1.2.3", "pino": "^8.15.0", "pino-http": "^8.4.0", "pino-pretty": "^10.0.0", "prom-client": "^14.2.0", "type-fest": "^4.35.0", "viem": "^2.24.3", "yargs": "^17.7.1", "zod": "^3.21.4", "zod-validation-error": "^1.3.0" }, "bin": { "alto": "esm/cli/alto.js" } }, "sha512-JIDEEYgdnkT7+wdxk0OBLSVwhm2CaLSbCw4474C9ZFmBggKBOByzaYCeIAJPb+Tag3WVBDXrXb2lYi2aRT9phQ=="], "@pimlico/mock-paymaster": ["@pimlico/mock-paymaster@workspace:packages/mock-paymaster"], + "@pimlico/opentelemetry-instrumentation-viem": ["@pimlico/opentelemetry-instrumentation-viem@0.0.4", "", { "dependencies": { "@opentelemetry/instrumentation": "^0.200.0" } }, "sha512-FlFIXU7CVgfDAn0ay2JeV3F6mO7pLR6UgP/DZMx/gN7RZ/HV2rW+ibk1QmcKAF7NGPk5II8vYyu02irb0u158A=="], + "@pkgjs/parseargs": ["@pkgjs/parseargs@0.11.0", "", {}, "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg=="], "@protobufjs/aspromise": ["@protobufjs/aspromise@1.1.2", "", {}, "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ=="], @@ -433,6 +417,22 @@ "@protobufjs/utf8": ["@protobufjs/utf8@1.1.0", "", {}, "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw=="], + "@reown/appkit": ["@reown/appkit@1.7.3", "", { "dependencies": { "@reown/appkit-common": "1.7.3", "@reown/appkit-controllers": "1.7.3", "@reown/appkit-polyfills": "1.7.3", "@reown/appkit-scaffold-ui": "1.7.3", "@reown/appkit-ui": "1.7.3", "@reown/appkit-utils": "1.7.3", "@reown/appkit-wallet": "1.7.3", "@walletconnect/types": "2.19.2", "@walletconnect/universal-provider": "2.19.2", "bs58": "6.0.0", "valtio": "1.13.2", "viem": ">=2.23.11" } }, "sha512-aA/UIwi/dVzxEB62xlw3qxHa3RK1YcPMjNxoGj/fHNCqL2qWmbcOXT7coCUa9RG7/Bh26FZ3vdVT2v71j6hebQ=="], + + "@reown/appkit-common": ["@reown/appkit-common@1.7.3", "", { "dependencies": { "big.js": "6.2.2", "dayjs": "1.11.13", "viem": ">=2.23.11" } }, "sha512-wKTr6N3z8ly17cc51xBEVkZK4zAd8J1m7RubgsdQ1olFY9YJGe61RYoNv9yFjt6tUVeYT+z7iMUwPhX2PziefQ=="], + + "@reown/appkit-controllers": ["@reown/appkit-controllers@1.7.3", "", { "dependencies": { "@reown/appkit-common": "1.7.3", "@reown/appkit-wallet": "1.7.3", "@walletconnect/universal-provider": "2.19.2", "valtio": "1.13.2", "viem": ">=2.23.11" } }, "sha512-aqAcX/nZe0gwqjncyCkVrAk3lEw0qZ9xGrdLOmA207RreO4J0Vxu8OJXCBn4C2AUI2OpBxCPah+vyuKTUJTeHQ=="], + + "@reown/appkit-polyfills": ["@reown/appkit-polyfills@1.7.3", "", { "dependencies": { "buffer": "6.0.3" } }, "sha512-vQUiAyI7WiNTUV4iNwv27iigdeg8JJTEo6ftUowIrKZ2/gtE2YdMtGpavuztT/qrXhrIlTjDGp5CIyv9WOTu4g=="], + + "@reown/appkit-scaffold-ui": ["@reown/appkit-scaffold-ui@1.7.3", "", { "dependencies": { "@reown/appkit-common": "1.7.3", "@reown/appkit-controllers": "1.7.3", "@reown/appkit-ui": "1.7.3", "@reown/appkit-utils": "1.7.3", "@reown/appkit-wallet": "1.7.3", "lit": "3.1.0" } }, "sha512-ssB15fcjmoKQ+VfoCo7JIIK66a4SXFpCH8uK1CsMmXmKIKqPN54ohLo291fniV6mKtnJxh5Xm68slGtGrO3bmA=="], + + "@reown/appkit-ui": ["@reown/appkit-ui@1.7.3", "", { "dependencies": { "@reown/appkit-common": "1.7.3", "@reown/appkit-controllers": "1.7.3", "@reown/appkit-wallet": "1.7.3", "lit": "3.1.0", "qrcode": "1.5.3" } }, "sha512-zKmFIjLp0X24pF9KtPtSHmdsh/RjEWIvz+faIbPGm4tQbwcxdg9A35HeoP0rMgKYx49SX51LgPwVXne2gYacqQ=="], + + "@reown/appkit-utils": ["@reown/appkit-utils@1.7.3", "", { "dependencies": { "@reown/appkit-common": "1.7.3", "@reown/appkit-controllers": "1.7.3", "@reown/appkit-polyfills": "1.7.3", "@reown/appkit-wallet": "1.7.3", "@walletconnect/logger": "2.1.2", "@walletconnect/universal-provider": "2.19.2", "valtio": "1.13.2", "viem": ">=2.23.11" } }, "sha512-8/MNhmfri+2uu8WzBhZ5jm5llofOIa1dyXDXRC/hfrmGmCFJdrQKPpuqOFYoimo2s2g70pK4PYefvOKgZOWzgg=="], + + "@reown/appkit-wallet": ["@reown/appkit-wallet@1.7.3", "", { "dependencies": { "@reown/appkit-common": "1.7.3", "@reown/appkit-polyfills": "1.7.3", "@walletconnect/logger": "2.1.2", "zod": "3.22.4" } }, "sha512-D0pExd0QUE71ursQPp3pq/0iFrz2oz87tOyFifrPANvH5X0RQCYn/34/kXr+BFVQzNFfCBDlYP+CniNA/S0KiQ=="], + "@rollup/rollup-android-arm-eabi": ["@rollup/rollup-android-arm-eabi@4.35.0", "", { "os": "android", "cpu": "arm" }, "sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ=="], "@rollup/rollup-android-arm64": ["@rollup/rollup-android-arm64@4.35.0", "", { "os": "android", "cpu": "arm64" }, "sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA=="], @@ -471,7 +471,7 @@ "@rollup/rollup-win32-x64-msvc": ["@rollup/rollup-win32-x64-msvc@4.35.0", "", { "os": "win32", "cpu": "x64" }, "sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw=="], - "@safe-global/safe-apps-provider": ["@safe-global/safe-apps-provider@0.18.5", "", { "dependencies": { "@safe-global/safe-apps-sdk": "^9.1.0", "events": "^3.3.0" } }, "sha512-9v9wjBi3TwLsEJ3C2ujYoexp3pFJ0omDLH/GX91e2QB+uwCKTBYyhxFSrTQ9qzoyQd+bfsk4gjOGW87QcJhf7g=="], + "@safe-global/safe-apps-provider": ["@safe-global/safe-apps-provider@0.18.6", "", { "dependencies": { "@safe-global/safe-apps-sdk": "^9.1.0", "events": "^3.3.0" } }, "sha512-4LhMmjPWlIO8TTDC2AwLk44XKXaK6hfBTWyljDm0HQ6TWlOEijVWNrt2s3OCVMSxlXAcEzYfqyu1daHZooTC2Q=="], "@safe-global/safe-apps-sdk": ["@safe-global/safe-apps-sdk@9.1.0", "", { "dependencies": { "@safe-global/safe-gateway-typescript-sdk": "^3.5.3", "viem": "^2.1.1" } }, "sha512-N5p/ulfnnA2Pi2M3YeWjULeWbjo7ei22JwU/IXnhoHzKq3pYCN6ynL9mJBOlvDVv892EgLPCWCOwQk/uBT2v0Q=="], @@ -509,42 +509,6 @@ "@socket.io/component-emitter": ["@socket.io/component-emitter@3.1.2", "", {}, "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA=="], - "@stablelib/aead": ["@stablelib/aead@1.0.1", "", {}, "sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg=="], - - "@stablelib/binary": ["@stablelib/binary@1.0.1", "", { "dependencies": { "@stablelib/int": "^1.0.1" } }, "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q=="], - - "@stablelib/bytes": ["@stablelib/bytes@1.0.1", "", {}, "sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ=="], - - "@stablelib/chacha": ["@stablelib/chacha@1.0.1", "", { "dependencies": { "@stablelib/binary": "^1.0.1", "@stablelib/wipe": "^1.0.1" } }, "sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg=="], - - "@stablelib/chacha20poly1305": ["@stablelib/chacha20poly1305@1.0.1", "", { "dependencies": { "@stablelib/aead": "^1.0.1", "@stablelib/binary": "^1.0.1", "@stablelib/chacha": "^1.0.1", "@stablelib/constant-time": "^1.0.1", "@stablelib/poly1305": "^1.0.1", "@stablelib/wipe": "^1.0.1" } }, "sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA=="], - - "@stablelib/constant-time": ["@stablelib/constant-time@1.0.1", "", {}, "sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg=="], - - "@stablelib/ed25519": ["@stablelib/ed25519@1.0.3", "", { "dependencies": { "@stablelib/random": "^1.0.2", "@stablelib/sha512": "^1.0.1", "@stablelib/wipe": "^1.0.1" } }, "sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg=="], - - "@stablelib/hash": ["@stablelib/hash@1.0.1", "", {}, "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg=="], - - "@stablelib/hkdf": ["@stablelib/hkdf@1.0.1", "", { "dependencies": { "@stablelib/hash": "^1.0.1", "@stablelib/hmac": "^1.0.1", "@stablelib/wipe": "^1.0.1" } }, "sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g=="], - - "@stablelib/hmac": ["@stablelib/hmac@1.0.1", "", { "dependencies": { "@stablelib/constant-time": "^1.0.1", "@stablelib/hash": "^1.0.1", "@stablelib/wipe": "^1.0.1" } }, "sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA=="], - - "@stablelib/int": ["@stablelib/int@1.0.1", "", {}, "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w=="], - - "@stablelib/keyagreement": ["@stablelib/keyagreement@1.0.1", "", { "dependencies": { "@stablelib/bytes": "^1.0.1" } }, "sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg=="], - - "@stablelib/poly1305": ["@stablelib/poly1305@1.0.1", "", { "dependencies": { "@stablelib/constant-time": "^1.0.1", "@stablelib/wipe": "^1.0.1" } }, "sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA=="], - - "@stablelib/random": ["@stablelib/random@1.0.2", "", { "dependencies": { "@stablelib/binary": "^1.0.1", "@stablelib/wipe": "^1.0.1" } }, "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w=="], - - "@stablelib/sha256": ["@stablelib/sha256@1.0.1", "", { "dependencies": { "@stablelib/binary": "^1.0.1", "@stablelib/hash": "^1.0.1", "@stablelib/wipe": "^1.0.1" } }, "sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ=="], - - "@stablelib/sha512": ["@stablelib/sha512@1.0.1", "", { "dependencies": { "@stablelib/binary": "^1.0.1", "@stablelib/hash": "^1.0.1", "@stablelib/wipe": "^1.0.1" } }, "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw=="], - - "@stablelib/wipe": ["@stablelib/wipe@1.0.1", "", {}, "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg=="], - - "@stablelib/x25519": ["@stablelib/x25519@1.0.3", "", { "dependencies": { "@stablelib/keyagreement": "^1.0.1", "@stablelib/random": "^1.0.2", "@stablelib/wipe": "^1.0.1" } }, "sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw=="], - "@tanstack/query-core": ["@tanstack/query-core@5.45.0", "", {}, "sha512-RVfIZQmFUTdjhSAAblvueimfngYyfN6HlwaJUPK71PKd7yi43Vs1S/rdimmZedPWX/WGppcq/U1HOj7O7FwYxw=="], "@tanstack/react-query": ["@tanstack/react-query@5.45.1", "", { "dependencies": { "@tanstack/query-core": "5.45.0" }, "peerDependencies": { "react": "^18.0.0" } }, "sha512-mYYfJujKg2kxmkRRjA6nn4YKG3ITsKuH22f1kteJ5IuVQqgKUgbaSQfYwVP0gBS05mhwxO03HVpD0t7BMN7WOA=="], @@ -597,15 +561,15 @@ "@wagmi/cli": ["@wagmi/cli@2.2.0", "", { "dependencies": { "abitype": "^1.0.4", "bundle-require": "^4.0.2", "cac": "^6.7.14", "change-case": "^5.4.4", "chokidar": "4.0.1", "dedent": "^0.7.0", "dotenv": "^16.3.1", "dotenv-expand": "^10.0.0", "esbuild": "^0.19.0", "escalade": "3.2.0", "fdir": "^6.1.1", "nanospinner": "1.2.2", "pathe": "^1.1.2", "picocolors": "^1.0.0", "picomatch": "^3.0.0", "prettier": "^3.0.3", "viem": "2.x", "zod": "^3.22.2" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"], "bin": { "wagmi": "dist/esm/cli.js" } }, "sha512-24U9wgmeKjs+lbnswYcWjic6leuKV/JduK2T8hGXO1fxUWzcoZ3tDtb7KQq+DmgbnJm49uaa7iKcB4K7SxN4Ag=="], - "@wagmi/connectors": ["@wagmi/connectors@5.7.8", "", { "dependencies": { "@coinbase/wallet-sdk": "4.3.0", "@metamask/sdk": "0.32.0", "@safe-global/safe-apps-provider": "0.18.5", "@safe-global/safe-apps-sdk": "9.1.0", "@walletconnect/ethereum-provider": "2.17.0", "cbw-sdk": "npm:@coinbase/wallet-sdk@3.9.3" }, "peerDependencies": { "@wagmi/core": "2.16.5", "typescript": ">=5.0.4", "viem": "2.x" }, "optionalPeers": ["typescript"] }, "sha512-idLCc+GQ/GcGgxakEMC7/NSbpD6r1GB07lfDyEjvI5TMzl18pOZhKiqOTENzNi3hDas6ZMvS1xaGwrWufsb1rA=="], + "@wagmi/connectors": ["@wagmi/connectors@5.8.1", "", { "dependencies": { "@coinbase/wallet-sdk": "4.3.0", "@metamask/sdk": "0.32.0", "@safe-global/safe-apps-provider": "0.18.6", "@safe-global/safe-apps-sdk": "9.1.0", "@walletconnect/ethereum-provider": "2.20.0", "cbw-sdk": "npm:@coinbase/wallet-sdk@3.9.3" }, "peerDependencies": { "@wagmi/core": "2.17.1", "typescript": ">=5.0.4", "viem": "2.x" }, "optionalPeers": ["typescript"] }, "sha512-SGbodB8a/Yr3SHPzWO1cWg/PFXTpimsxbR59q1usv0Nsj+5imocVtP3ba9KnSqOfv5wEvP4ljyQhHHa7ALoJOw=="], - "@wagmi/core": ["@wagmi/core@2.16.5", "", { "dependencies": { "eventemitter3": "5.0.1", "mipd": "0.0.7", "zustand": "5.0.0" }, "peerDependencies": { "@tanstack/query-core": ">=5.0.0", "typescript": ">=5.0.4", "viem": "2.x" }, "optionalPeers": ["@tanstack/query-core", "typescript"] }, "sha512-7WlsxIvcS2WXO/8KnIkutCfY6HACsPsEuZHoYGu2TbwM7wlJv2HmR9zSvmyeEDsTBDPva/tuFbmJo4HJ9llkWA=="], + "@wagmi/core": ["@wagmi/core@2.17.1", "", { "dependencies": { "eventemitter3": "5.0.1", "mipd": "0.0.7", "zustand": "5.0.0" }, "peerDependencies": { "@tanstack/query-core": ">=5.0.0", "typescript": ">=5.0.4", "viem": "2.x" }, "optionalPeers": ["@tanstack/query-core", "typescript"] }, "sha512-tbeNv8HquzrVj2Inv0bv229SejPABnWAmbBNvPJJedYpKStgXlbK4jnRhCf5qG5un3ZO/KYFGQYaghTzWSULGg=="], - "@walletconnect/core": ["@walletconnect/core@2.17.0", "", { "dependencies": { "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-provider": "1.0.14", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/jsonrpc-ws-connection": "1.0.14", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.0.4", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.17.0", "@walletconnect/utils": "2.17.0", "events": "3.3.0", "lodash.isequal": "4.5.0", "uint8arrays": "3.1.0" } }, "sha512-On+uSaCfWdsMIQsECwWHZBmUXfrnqmv6B8SXRRuTJgd8tUpEvBkLQH4X7XkSm3zW6ozEkQTCagZ2ox2YPn3kbw=="], + "@walletconnect/core": ["@walletconnect/core@2.20.0", "", { "dependencies": { "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-provider": "1.0.14", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/jsonrpc-ws-connection": "1.0.16", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.1.0", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.20.0", "@walletconnect/utils": "2.20.0", "@walletconnect/window-getters": "1.0.1", "es-toolkit": "1.33.0", "events": "3.3.0", "uint8arrays": "3.1.0" } }, "sha512-MpCx9WthaAJ9pA2oHC84oTFUtntjj9mCmevwBDPVsQ2Q/pYeh2+THDPaaw6fzTbNTXyGCvJXRyLQkN9xO+Vmzw=="], "@walletconnect/environment": ["@walletconnect/environment@1.0.1", "", { "dependencies": { "tslib": "1.14.1" } }, "sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg=="], - "@walletconnect/ethereum-provider": ["@walletconnect/ethereum-provider@2.17.0", "", { "dependencies": { "@walletconnect/jsonrpc-http-connection": "1.0.8", "@walletconnect/jsonrpc-provider": "1.0.14", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/modal": "2.7.0", "@walletconnect/sign-client": "2.17.0", "@walletconnect/types": "2.17.0", "@walletconnect/universal-provider": "2.17.0", "@walletconnect/utils": "2.17.0", "events": "3.3.0" } }, "sha512-b+KTAXOb6JjoxkwpgYQQKPUcTwENGmdEdZoIDLeRicUmZTn/IQKfkMoC2frClB4YxkyoVMtj1oMV2JAax+yu9A=="], + "@walletconnect/ethereum-provider": ["@walletconnect/ethereum-provider@2.20.0", "", { "dependencies": { "@reown/appkit": "1.7.3", "@walletconnect/jsonrpc-http-connection": "1.0.8", "@walletconnect/jsonrpc-provider": "1.0.14", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/sign-client": "2.20.0", "@walletconnect/types": "2.20.0", "@walletconnect/universal-provider": "2.20.0", "@walletconnect/utils": "2.20.0", "events": "3.3.0" } }, "sha512-TSu1nr+AzCjM5u7xdnWTGX8ryKuHHb1Za56BD6UU0UPS7ZC2fZ99TVa5Q3Sng9JyksY5p99Iwg7fOtlozc3QYQ=="], "@walletconnect/events": ["@walletconnect/events@1.0.1", "", { "dependencies": { "keyvaluestorage-interface": "^1.0.0", "tslib": "1.14.1" } }, "sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ=="], @@ -619,33 +583,27 @@ "@walletconnect/jsonrpc-utils": ["@walletconnect/jsonrpc-utils@1.0.8", "", { "dependencies": { "@walletconnect/environment": "^1.0.1", "@walletconnect/jsonrpc-types": "^1.0.3", "tslib": "1.14.1" } }, "sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw=="], - "@walletconnect/jsonrpc-ws-connection": ["@walletconnect/jsonrpc-ws-connection@1.0.14", "", { "dependencies": { "@walletconnect/jsonrpc-utils": "^1.0.6", "@walletconnect/safe-json": "^1.0.2", "events": "^3.3.0", "ws": "^7.5.1" } }, "sha512-Jsl6fC55AYcbkNVkwNM6Jo+ufsuCQRqViOQ8ZBPH9pRREHH9welbBiszuTLqEJiQcO/6XfFDl6bzCJIkrEi8XA=="], + "@walletconnect/jsonrpc-ws-connection": ["@walletconnect/jsonrpc-ws-connection@1.0.16", "", { "dependencies": { "@walletconnect/jsonrpc-utils": "^1.0.6", "@walletconnect/safe-json": "^1.0.2", "events": "^3.3.0", "ws": "^7.5.1" } }, "sha512-G81JmsMqh5nJheE1mPst1W0WfVv0SG3N7JggwLLGnI7iuDZJq8cRJvQwLGKHn5H1WTW7DEPCo00zz5w62AbL3Q=="], "@walletconnect/keyvaluestorage": ["@walletconnect/keyvaluestorage@1.1.1", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.1", "idb-keyval": "^6.2.1", "unstorage": "^1.9.0" }, "peerDependencies": { "@react-native-async-storage/async-storage": "1.x" }, "optionalPeers": ["@react-native-async-storage/async-storage"] }, "sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA=="], "@walletconnect/logger": ["@walletconnect/logger@2.1.2", "", { "dependencies": { "@walletconnect/safe-json": "^1.0.2", "pino": "7.11.0" } }, "sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw=="], - "@walletconnect/modal": ["@walletconnect/modal@2.7.0", "", { "dependencies": { "@walletconnect/modal-core": "2.7.0", "@walletconnect/modal-ui": "2.7.0" } }, "sha512-RQVt58oJ+rwqnPcIvRFeMGKuXb9qkgSmwz4noF8JZGUym3gUAzVs+uW2NQ1Owm9XOJAV+sANrtJ+VoVq1ftElw=="], - - "@walletconnect/modal-core": ["@walletconnect/modal-core@2.7.0", "", { "dependencies": { "valtio": "1.11.2" } }, "sha512-oyMIfdlNdpyKF2kTJowTixZSo0PGlCJRdssUN/EZdA6H6v03hZnf09JnwpljZNfir2M65Dvjm/15nGrDQnlxSA=="], - - "@walletconnect/modal-ui": ["@walletconnect/modal-ui@2.7.0", "", { "dependencies": { "@walletconnect/modal-core": "2.7.0", "lit": "2.8.0", "motion": "10.16.2", "qrcode": "1.5.3" } }, "sha512-gERYvU7D7K1ANCN/8vUgsE0d2hnRemfAFZ2novm9aZBg7TEd/4EgB+AqbJ+1dc7GhOL6dazckVq78TgccHb7mQ=="], - "@walletconnect/relay-api": ["@walletconnect/relay-api@1.0.11", "", { "dependencies": { "@walletconnect/jsonrpc-types": "^1.0.2" } }, "sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q=="], - "@walletconnect/relay-auth": ["@walletconnect/relay-auth@1.0.4", "", { "dependencies": { "@stablelib/ed25519": "^1.0.2", "@stablelib/random": "^1.0.1", "@walletconnect/safe-json": "^1.0.1", "@walletconnect/time": "^1.0.2", "tslib": "1.14.1", "uint8arrays": "^3.0.0" } }, "sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ=="], + "@walletconnect/relay-auth": ["@walletconnect/relay-auth@1.1.0", "", { "dependencies": { "@noble/curves": "1.8.0", "@noble/hashes": "1.7.0", "@walletconnect/safe-json": "^1.0.1", "@walletconnect/time": "^1.0.2", "uint8arrays": "^3.0.0" } }, "sha512-qFw+a9uRz26jRCDgL7Q5TA9qYIgcNY8jpJzI1zAWNZ8i7mQjaijRnWFKsCHAU9CyGjvt6RKrRXyFtFOpWTVmCQ=="], "@walletconnect/safe-json": ["@walletconnect/safe-json@1.0.2", "", { "dependencies": { "tslib": "1.14.1" } }, "sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA=="], - "@walletconnect/sign-client": ["@walletconnect/sign-client@2.17.0", "", { "dependencies": { "@walletconnect/core": "2.17.0", "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/logger": "2.1.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.17.0", "@walletconnect/utils": "2.17.0", "events": "3.3.0" } }, "sha512-sErYwvSSHQolNXni47L3Bm10ptJc1s1YoJvJd34s5E9h9+d3rj7PrhbiW9X82deN+Dm5oA8X9tC4xty1yIBrVg=="], + "@walletconnect/sign-client": ["@walletconnect/sign-client@2.20.0", "", { "dependencies": { "@walletconnect/core": "2.20.0", "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/logger": "2.1.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.20.0", "@walletconnect/utils": "2.20.0", "events": "3.3.0" } }, "sha512-5Ao9RVGsgpMTLjVByFfjMbX7RwJM0HvKV7P9ONJwPPo4OiviNyneeOufr2KKZhuwF+QUu5mTE0Lj/euGWSNaOQ=="], "@walletconnect/time": ["@walletconnect/time@1.0.2", "", { "dependencies": { "tslib": "1.14.1" } }, "sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g=="], - "@walletconnect/types": ["@walletconnect/types@2.17.0", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "events": "3.3.0" } }, "sha512-i1pn9URpvt9bcjRDkabuAmpA9K7mzyKoLJlbsAujRVX7pfaG7wur7u9Jz0bk1HxvuABL5LHNncTnVKSXKQ5jZA=="], + "@walletconnect/types": ["@walletconnect/types@2.20.0", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "events": "3.3.0" } }, "sha512-oFGHRL/yQbZqBiTA8yvV+PGJYBU/laDAQWFiJZ9Xlv+qN5EzHipW39Ru6qyp8P4DGnbQI6bHPs9bizJ7hkDRKA=="], - "@walletconnect/universal-provider": ["@walletconnect/universal-provider@2.17.0", "", { "dependencies": { "@walletconnect/jsonrpc-http-connection": "1.0.8", "@walletconnect/jsonrpc-provider": "1.0.14", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/logger": "2.1.2", "@walletconnect/sign-client": "2.17.0", "@walletconnect/types": "2.17.0", "@walletconnect/utils": "2.17.0", "events": "3.3.0" } }, "sha512-d3V5Be7AqLrvzcdMZSBS8DmGDRdqnyLk1DWmRKAGgR6ieUWykhhUKlvfeoZtvJrIXrY7rUGYpH1X41UtFkW5Pw=="], + "@walletconnect/universal-provider": ["@walletconnect/universal-provider@2.20.0", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@walletconnect/jsonrpc-http-connection": "1.0.8", "@walletconnect/jsonrpc-provider": "1.0.14", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "@walletconnect/sign-client": "2.20.0", "@walletconnect/types": "2.20.0", "@walletconnect/utils": "2.20.0", "es-toolkit": "1.33.0", "events": "3.3.0" } }, "sha512-kzMWXao+RyWfv46nS/owJ99/QhObGkYHhpMxdzl4bae98JXdQ0xhmov3Rvy3GRt5csgJXldoM2VO44B/Fsuj4Q=="], - "@walletconnect/utils": ["@walletconnect/utils@2.17.0", "", { "dependencies": { "@stablelib/chacha20poly1305": "1.0.1", "@stablelib/hkdf": "1.0.1", "@stablelib/random": "1.0.2", "@stablelib/sha256": "1.0.1", "@stablelib/x25519": "1.0.3", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.0.4", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.17.0", "@walletconnect/window-getters": "1.0.1", "@walletconnect/window-metadata": "1.0.1", "detect-browser": "5.3.0", "elliptic": "^6.5.7", "query-string": "7.1.3", "uint8arrays": "3.1.0" } }, "sha512-1aeQvjwsXy4Yh9G6g2eGmXrEl+BzkNjHRdCrGdMYqFTFa8ROEJfTGsSH3pLsNDlOY94CoBUvJvM55q/PMoN/FQ=="], + "@walletconnect/utils": ["@walletconnect/utils@2.20.0", "", { "dependencies": { "@noble/ciphers": "1.2.1", "@noble/curves": "1.8.1", "@noble/hashes": "1.7.1", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.1.0", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.20.0", "@walletconnect/window-getters": "1.0.1", "@walletconnect/window-metadata": "1.0.1", "bs58": "6.0.0", "detect-browser": "5.3.0", "query-string": "7.1.3", "uint8arrays": "3.1.0", "viem": "2.23.2" } }, "sha512-PlglakJ/zhBRUg7yfulfedWgPC0ZoVEYCiniFkCeWfTq03ufvkB3tgBJQkNoHUV7ZgPYxAdSbO3KsKceZzjufw=="], "@walletconnect/window-getters": ["@walletconnect/window-getters@1.0.1", "", { "dependencies": { "tslib": "1.14.1" } }, "sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q=="], @@ -665,7 +623,7 @@ "ajv": ["ajv@8.17.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g=="], - "ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="], + "ajv-formats": ["ajv-formats@2.1.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="], "ansi-colors": ["ansi-colors@4.1.3", "", {}, "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw=="], @@ -687,14 +645,18 @@ "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="], - "avvio": ["avvio@9.1.0", "", { "dependencies": { "@fastify/error": "^4.0.0", "fastq": "^1.17.1" } }, "sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw=="], + "avvio": ["avvio@8.4.0", "", { "dependencies": { "@fastify/error": "^3.3.0", "fastq": "^1.17.1" } }, "sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA=="], "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="], + "base-x": ["base-x@5.0.1", "", {}, "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg=="], + "base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="], "better-path-resolve": ["better-path-resolve@1.0.0", "", { "dependencies": { "is-windows": "^1.0.0" } }, "sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g=="], + "big.js": ["big.js@6.2.2", "", {}, "sha512-y/ie+Faknx7sZA5MfGA2xKlu0GDv8RWrXGsmlteyJQ2lvoKv9GBK/fpRMc2qlSoBAgNxrixICFCBefIq8WCQpQ=="], + "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="], "bintrees": ["bintrees@1.0.2", "", {}, "sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw=="], @@ -707,10 +669,10 @@ "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="], - "brorand": ["brorand@1.1.0", "", {}, "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w=="], - "browserslist": ["browserslist@4.24.4", "", { "dependencies": { "caniuse-lite": "^1.0.30001688", "electron-to-chromium": "^1.5.73", "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" } }, "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A=="], + "bs58": ["bs58@6.0.0", "", { "dependencies": { "base-x": "^5.0.0" } }, "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw=="], + "buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="], "bufferutil": ["bufferutil@4.0.9", "", { "dependencies": { "node-gyp-build": "^4.3.0" } }, "sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw=="], @@ -747,6 +709,8 @@ "chokidar": ["chokidar@4.0.1", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA=="], + "chownr": ["chownr@3.0.0", "", {}, "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g=="], + "ci-info": ["ci-info@3.9.0", "", {}, "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ=="], "cjs-module-lexer": ["cjs-module-lexer@1.4.3", "", {}, "sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q=="], @@ -767,7 +731,7 @@ "convert-source-map": ["convert-source-map@2.0.0", "", {}, "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg=="], - "cookie": ["cookie@1.0.2", "", {}, "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA=="], + "cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], "cookie-es": ["cookie-es@1.2.2", "", {}, "sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg=="], @@ -791,6 +755,8 @@ "dateformat": ["dateformat@4.6.3", "", {}, "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA=="], + "dayjs": ["dayjs@1.11.13", "", {}, "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg=="], + "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="], "decamelize": ["decamelize@1.2.0", "", {}, "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA=="], @@ -809,7 +775,7 @@ "denque": ["denque@2.1.0", "", {}, "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw=="], - "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], + "derive-valtio": ["derive-valtio@0.1.0", "", { "peerDependencies": { "valtio": "*" } }, "sha512-OCg2UsLbXK7GmmpzMXhYkdO64vhJ1ROUUGaTFyHjVwEdMEcTTRj7W1TxLbSBxdY8QLBPCcp66MTyaSy0RpO17A=="], "destr": ["destr@2.0.3", "", {}, "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ=="], @@ -837,8 +803,6 @@ "electron-to-chromium": ["electron-to-chromium@1.5.114", "", {}, "sha512-DFptFef3iktoKlFQK/afbo274/XNWD00Am0xa7M8FZUepHlHT8PEuiNBoRfFHbH1okqN58AlhbJ4QTkcnXorjA=="], - "elliptic": ["elliptic@6.6.1", "", { "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" } }, "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g=="], - "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], "encode-utf8": ["encode-utf8@1.0.3", "", {}, "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw=="], @@ -859,6 +823,8 @@ "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], + "es-toolkit": ["es-toolkit@1.33.0", "", {}, "sha512-X13Q/ZSc+vsO1q600bvNK4bxgXMkHcf//RxCmYDaRY5DAcT+eoXjY5hoAPGMdRnWQjvyLEcyauG3b6hz76LNqg=="], + "esbuild": ["esbuild@0.19.12", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.19.12", "@esbuild/android-arm": "0.19.12", "@esbuild/android-arm64": "0.19.12", "@esbuild/android-x64": "0.19.12", "@esbuild/darwin-arm64": "0.19.12", "@esbuild/darwin-x64": "0.19.12", "@esbuild/freebsd-arm64": "0.19.12", "@esbuild/freebsd-x64": "0.19.12", "@esbuild/linux-arm": "0.19.12", "@esbuild/linux-arm64": "0.19.12", "@esbuild/linux-ia32": "0.19.12", "@esbuild/linux-loong64": "0.19.12", "@esbuild/linux-mips64el": "0.19.12", "@esbuild/linux-ppc64": "0.19.12", "@esbuild/linux-riscv64": "0.19.12", "@esbuild/linux-s390x": "0.19.12", "@esbuild/linux-x64": "0.19.12", "@esbuild/netbsd-x64": "0.19.12", "@esbuild/openbsd-x64": "0.19.12", "@esbuild/sunos-x64": "0.19.12", "@esbuild/win32-arm64": "0.19.12", "@esbuild/win32-ia32": "0.19.12", "@esbuild/win32-x64": "0.19.12" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg=="], "esbuild-visualizer": ["esbuild-visualizer@0.4.1", "", { "dependencies": { "open": "^8.4.0", "yargs": "^17.6.2" }, "bin": { "esbuild-visualizer": "dist/bin/cli.js" } }, "sha512-5XI3unzqPr3xqfzR/mzK3LhoAJs3FQhiIXBsKJ3Oh6CjyjuXz6HVmhJMoisrcpeTZip65fR54Dk53MZncA0AUQ=="], @@ -907,7 +873,7 @@ "fast-glob": ["fast-glob@3.3.3", "", { "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.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="], - "fast-json-stringify": ["fast-json-stringify@6.0.1", "", { "dependencies": { "@fastify/merge-json-schemas": "^0.2.0", "ajv": "^8.12.0", "ajv-formats": "^3.0.1", "fast-uri": "^3.0.0", "json-schema-ref-resolver": "^2.0.0", "rfdc": "^1.2.0" } }, "sha512-s7SJE83QKBZwg54dIbD5rCtzOBVD43V1ReWXXYqBgwCwHLYAAT0RQc/FmrQglXqWPpz6omtryJQOau5jI4Nrvg=="], + "fast-json-stringify": ["fast-json-stringify@5.16.1", "", { "dependencies": { "@fastify/merge-json-schemas": "^0.1.0", "ajv": "^8.10.0", "ajv-formats": "^3.0.1", "fast-deep-equal": "^3.1.3", "fast-uri": "^2.1.0", "json-schema-ref-resolver": "^1.0.1", "rfdc": "^1.2.0" } }, "sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g=="], "fast-querystring": ["fast-querystring@1.1.2", "", { "dependencies": { "fast-decode-uri-component": "^1.0.1" } }, "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg=="], @@ -915,11 +881,11 @@ "fast-safe-stringify": ["fast-safe-stringify@2.1.1", "", {}, "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA=="], - "fast-uri": ["fast-uri@3.0.6", "", {}, "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw=="], + "fast-uri": ["fast-uri@2.4.0", "", {}, "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA=="], - "fastify": ["fastify@5.2.1", "", { "dependencies": { "@fastify/ajv-compiler": "^4.0.0", "@fastify/error": "^4.0.0", "@fastify/fast-json-stringify-compiler": "^5.0.0", "@fastify/proxy-addr": "^5.0.0", "abstract-logging": "^2.0.1", "avvio": "^9.0.0", "fast-json-stringify": "^6.0.0", "find-my-way": "^9.0.0", "light-my-request": "^6.0.0", "pino": "^9.0.0", "process-warning": "^4.0.0", "rfdc": "^1.3.1", "secure-json-parse": "^3.0.1", "semver": "^7.6.0", "toad-cache": "^3.7.0" } }, "sha512-rslrNBF67eg8/Gyn7P2URV8/6pz8kSAscFL4EThZJ8JBMaXacVdVE4hmUcnPNKERl5o/xTiBSLfdowBRhVF1WA=="], + "fastify": ["fastify@4.29.0", "", { "dependencies": { "@fastify/ajv-compiler": "^3.5.0", "@fastify/error": "^3.4.0", "@fastify/fast-json-stringify-compiler": "^4.3.0", "abstract-logging": "^2.0.1", "avvio": "^8.3.0", "fast-content-type-parse": "^1.1.0", "fast-json-stringify": "^5.8.0", "find-my-way": "^8.0.0", "light-my-request": "^5.11.0", "pino": "^9.0.0", "process-warning": "^3.0.0", "proxy-addr": "^2.0.7", "rfdc": "^1.3.0", "secure-json-parse": "^2.7.0", "semver": "^7.5.4", "toad-cache": "^3.3.0" } }, "sha512-MaaUHUGcCgC8fXQDsDtioaCcag1fmPJ9j64vAKunqZF4aSub040ZGi/ag8NGE2714yREPOKZuHCfpPzuUD3UQQ=="], - "fastify-plugin": ["fastify-plugin@5.0.1", "", {}, "sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ=="], + "fastify-plugin": ["fastify-plugin@4.5.1", "", {}, "sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ=="], "fastq": ["fastq@1.19.1", "", { "dependencies": { "reusify": "^1.0.4" } }, "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ=="], @@ -931,7 +897,7 @@ "filter-obj": ["filter-obj@1.1.0", "", {}, "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ=="], - "find-my-way": ["find-my-way@9.2.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-querystring": "^1.0.0", "safe-regex2": "^4.0.0" } }, "sha512-d3uCir8Hmg7W1Ywp8nKf2lJJYU9Nwinvo+1D39Dn09nz65UKXIxUh7j7K8zeWhxqe1WrkS7FJyON/Q/3lPoc6w=="], + "find-my-way": ["find-my-way@8.2.2", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-querystring": "^1.0.0", "safe-regex2": "^3.1.0" } }, "sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA=="], "find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], @@ -983,16 +949,10 @@ "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], - "hash.js": ["hash.js@1.1.7", "", { "dependencies": { "inherits": "^2.0.3", "minimalistic-assert": "^1.0.1" } }, "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA=="], - "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], "help-me": ["help-me@5.0.0", "", {}, "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg=="], - "hey-listen": ["hey-listen@1.0.8", "", {}, "sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q=="], - - "hmac-drbg": ["hmac-drbg@1.0.1", "", { "dependencies": { "hash.js": "^1.0.3", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.1" } }, "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg=="], - "html-escaper": ["html-escaper@2.0.2", "", {}, "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg=="], "http-proxy": ["http-proxy@1.18.1", "", { "dependencies": { "eventemitter3": "^4.0.0", "follow-redirects": "^1.0.0", "requires-port": "^1.0.0" } }, "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ=="], @@ -1017,7 +977,7 @@ "ioredis": ["ioredis@5.6.0", "", { "dependencies": { "@ioredis/commands": "^1.1.1", "cluster-key-slot": "^1.1.0", "debug": "^4.3.4", "denque": "^2.1.0", "lodash.defaults": "^4.2.0", "lodash.isarguments": "^3.1.0", "redis-errors": "^1.2.0", "redis-parser": "^3.0.0", "standard-as-callback": "^2.1.0" } }, "sha512-tBZlIIWbndeWBWCXWZiqtOF/yxf6yZX3tAlTJ7nfo5jhd6dctNxF7QnYlZLZ1a0o0pDoen7CgZqO+zjNaFbJAg=="], - "ipaddr.js": ["ipaddr.js@2.2.0", "", {}, "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA=="], + "ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], "iron-webcrypto": ["iron-webcrypto@1.2.1", "", {}, "sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg=="], @@ -1085,7 +1045,7 @@ "json-rpc-random-id": ["json-rpc-random-id@1.0.1", "", {}, "sha512-RJ9YYNCkhVDBuP4zN5BBtYAzEl03yq/jIIsyif0JY9qyJuQQZNeDK7anAPKKlyEtLSj2s8h6hNh2F8zO5q7ScA=="], - "json-schema-ref-resolver": ["json-schema-ref-resolver@2.0.1", "", { "dependencies": { "dequal": "^2.0.3" } }, "sha512-HG0SIB9X4J8bwbxCbnd5FfPEbcXAJYTi1pBJeP/QPON+w8ovSME8iRG+ElHNxZNX2Qh6eYn1GdzJFS4cDFfx0Q=="], + "json-schema-ref-resolver": ["json-schema-ref-resolver@1.0.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3" } }, "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw=="], "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="], @@ -1099,15 +1059,15 @@ "lie": ["lie@3.1.1", "", { "dependencies": { "immediate": "~3.0.5" } }, "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw=="], - "light-my-request": ["light-my-request@6.6.0", "", { "dependencies": { "cookie": "^1.0.1", "process-warning": "^4.0.0", "set-cookie-parser": "^2.6.0" } }, "sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A=="], + "light-my-request": ["light-my-request@5.14.0", "", { "dependencies": { "cookie": "^0.7.0", "process-warning": "^3.0.0", "set-cookie-parser": "^2.4.1" } }, "sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA=="], "lilconfig": ["lilconfig@2.1.0", "", {}, "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ=="], - "lit": ["lit@2.8.0", "", { "dependencies": { "@lit/reactive-element": "^1.6.0", "lit-element": "^3.3.0", "lit-html": "^2.8.0" } }, "sha512-4Sc3OFX9QHOJaHbmTMk28SYgVxLN3ePDjg7hofEft2zWlehFL3LiAuapWc4U/kYwMYJSh2hTCPZ6/LIC7ii0MA=="], + "lit": ["lit@3.1.0", "", { "dependencies": { "@lit/reactive-element": "^2.0.0", "lit-element": "^4.0.0", "lit-html": "^3.1.0" } }, "sha512-rzo/hmUqX8zmOdamDAeydfjsGXbbdtAFqMhmocnh2j9aDYqbu0fjXygjCa0T99Od9VQ/2itwaGrjZz/ZELVl7w=="], - "lit-element": ["lit-element@3.3.3", "", { "dependencies": { "@lit-labs/ssr-dom-shim": "^1.1.0", "@lit/reactive-element": "^1.3.0", "lit-html": "^2.8.0" } }, "sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA=="], + "lit-element": ["lit-element@4.2.0", "", { "dependencies": { "@lit-labs/ssr-dom-shim": "^1.2.0", "@lit/reactive-element": "^2.1.0", "lit-html": "^3.3.0" } }, "sha512-MGrXJVAI5x+Bfth/pU9Kst1iWID6GHDLEzFEnyULB/sFiRLgkd8NPK/PeeXxktA3T6EIIaq8U3KcbTU5XFcP2Q=="], - "lit-html": ["lit-html@2.8.0", "", { "dependencies": { "@types/trusted-types": "^2.0.2" } }, "sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q=="], + "lit-html": ["lit-html@3.3.0", "", { "dependencies": { "@types/trusted-types": "^2.0.2" } }, "sha512-RHoswrFAxY2d8Cf2mm4OZ1DgzCoBKUKSPvA1fhtSELxUERq2aQQ2h05pO9j81gS1o7RIRJ+CePLogfyahwmynw=="], "load-tsconfig": ["load-tsconfig@0.2.5", "", {}, "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg=="], @@ -1123,8 +1083,6 @@ "lodash.isarguments": ["lodash.isarguments@3.1.0", "", {}, "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg=="], - "lodash.isequal": ["lodash.isequal@4.5.0", "", {}, "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="], - "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="], "lodash.startcase": ["lodash.startcase@4.4.0", "", {}, "sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg=="], @@ -1153,23 +1111,21 @@ "micromatch": ["micromatch@4.0.8", "", { "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" } }, "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA=="], - "minimalistic-assert": ["minimalistic-assert@1.0.1", "", {}, "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="], - - "minimalistic-crypto-utils": ["minimalistic-crypto-utils@1.0.1", "", {}, "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg=="], - "minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], "minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="], "minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], + "minizlib": ["minizlib@3.0.2", "", { "dependencies": { "minipass": "^7.1.2" } }, "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA=="], + "mipd": ["mipd@0.0.7", "", { "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-aAPZPNDQ3uMTdKbuO2YmAw2TxLHO0moa4YKAyETM/DTj5FloZo+a+8tU+iv4GmW+sOxKLSRwcSFuczk+Cpt6fg=="], - "mnemonist": ["mnemonist@0.40.0", "", { "dependencies": { "obliterator": "^2.0.4" } }, "sha512-kdd8AFNig2AD5Rkih7EPCXhu/iMvwevQFX/uEiGhZyPZi7fHqOoF4V4kHLpCfysxXMgQ4B52kdPMCwARshKvEg=="], + "mkdirp": ["mkdirp@3.0.1", "", { "bin": { "mkdirp": "dist/cjs/src/bin.js" } }, "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg=="], - "module-details-from-path": ["module-details-from-path@1.0.3", "", {}, "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A=="], + "mnemonist": ["mnemonist@0.39.6", "", { "dependencies": { "obliterator": "^2.0.1" } }, "sha512-A/0v5Z59y63US00cRSLiloEIw3t5G+MiKz4BhX21FI+YBJXBOGW0ohFxTxO08dsOYlzxo87T7vGfZKYp2bcAWA=="], - "motion": ["motion@10.16.2", "", { "dependencies": { "@motionone/animation": "^10.15.1", "@motionone/dom": "^10.16.2", "@motionone/svelte": "^10.16.2", "@motionone/types": "^10.15.1", "@motionone/utils": "^10.15.1", "@motionone/vue": "^10.16.2" } }, "sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ=="], + "module-details-from-path": ["module-details-from-path@1.0.3", "", {}, "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A=="], "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="], @@ -1293,17 +1249,17 @@ "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], - "process-warning": ["process-warning@4.0.1", "", {}, "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q=="], + "process-warning": ["process-warning@3.0.0", "", {}, "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ=="], "prom-client": ["prom-client@14.2.0", "", { "dependencies": { "tdigest": "^0.1.1" } }, "sha512-sF308EhTenb/pDRPakm+WgiN+VdM/T1RaHj1x+MvAuT8UiQP8JmOEbxVqtkbfR4LrvOg5n7ic01kRBDGXjYikA=="], - "prool": ["prool@0.0.12", "", { "dependencies": { "eventemitter3": "^5.0.1", "execa": "^9.1.0", "get-port": "^7.1.0", "http-proxy": "^1.18.1" }, "peerDependencies": { "@pimlico/alto": "*" }, "optionalPeers": ["@pimlico/alto"] }, "sha512-LexSbz4pfJHtjEV3rFKb6Y2G85k8heVUhoEeBZpet222hJs7cf3ZHMFaNUhrrpFpHF7pzCgJwJddwd9abiK1Yw=="], + "prool": ["prool@0.0.23", "", { "dependencies": { "change-case": "5.4.4", "eventemitter3": "^5.0.1", "execa": "^9.1.0", "get-port": "^7.1.0", "http-proxy": "^1.18.1", "tar": "7.2.0" }, "peerDependencies": { "@pimlico/alto": "*" }, "optionalPeers": ["@pimlico/alto"] }, "sha512-r1d0DIiVsp7aXqGiNGKmgrqJZa8GjMGEjsgjQO22DEClYYvK+HMPZTQ9diBqleGuwfiRk3lnsWRMbFTRmFbk9g=="], "protobufjs": ["protobufjs@7.4.0", "", { "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", "@protobufjs/codegen": "^2.0.4", "@protobufjs/eventemitter": "^1.1.0", "@protobufjs/fetch": "^1.1.0", "@protobufjs/float": "^1.0.2", "@protobufjs/inquire": "^1.1.0", "@protobufjs/path": "^1.1.2", "@protobufjs/pool": "^1.1.0", "@protobufjs/utf8": "^1.1.0", "@types/node": ">=13.7.0", "long": "^5.0.0" } }, "sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw=="], "proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="], - "proxy-compare": ["proxy-compare@2.5.1", "", {}, "sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA=="], + "proxy-compare": ["proxy-compare@2.6.0", "", {}, "sha512-8xuCeM3l8yqdmbPoYeLbrAXCBWu19XEYc5/F28f5qOaoAIMyfmBUkl5axiK+x9olUvRlcekvnm98AP9RDngOIw=="], "pump": ["pump@3.0.2", "", { "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw=="], @@ -1355,7 +1311,7 @@ "resolve-from": ["resolve-from@5.0.0", "", {}, "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw=="], - "ret": ["ret@0.5.0", "", {}, "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw=="], + "ret": ["ret@0.4.3", "", {}, "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ=="], "reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="], @@ -1371,7 +1327,7 @@ "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="], - "safe-regex2": ["safe-regex2@4.0.1", "", { "dependencies": { "ret": "~0.5.0" } }, "sha512-goqsB+bSlOmVX+CiFX2PFc1OV88j5jvBqIM+DgqrucHnUguAUNtiNOs+aTadq2NqsLQ+TQ3UEVG3gtSFcdlkCg=="], + "safe-regex2": ["safe-regex2@3.1.0", "", { "dependencies": { "ret": "~0.4.0" } }, "sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug=="], "safe-stable-stringify": ["safe-stable-stringify@2.5.0", "", {}, "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA=="], @@ -1379,7 +1335,7 @@ "scheduler": ["scheduler@0.23.2", "", { "dependencies": { "loose-envify": "^1.1.0" } }, "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ=="], - "secure-json-parse": ["secure-json-parse@3.0.2", "", {}, "sha512-H6nS2o8bWfpFEV6U38sOSjS7bTbdgbCGU9wEM6W14P5H0QOsz94KCusifV44GpHDTu2nqZbuDNhTzu+mjDSw1w=="], + "secure-json-parse": ["secure-json-parse@2.7.0", "", {}, "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="], "semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], @@ -1455,6 +1411,8 @@ "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="], + "tar": ["tar@7.2.0", "", { "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", "minipass": "^7.1.0", "minizlib": "^3.0.1", "mkdirp": "^3.0.1", "yallist": "^5.0.0" } }, "sha512-hctwP0Nb4AB60bj8WQgRYaMOuJYRAPMGiQUAotms5igN8ppfQM+IvjQ5HcKu1MaZh2Wy2KWVTe563Yj8dfc14w=="], + "tdigest": ["tdigest@0.1.2", "", { "dependencies": { "bintrees": "1.0.2" } }, "sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA=="], "term-size": ["term-size@2.2.1", "", {}, "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg=="], @@ -1485,6 +1443,8 @@ "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], + "type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], + "typescript": ["typescript@5.8.2", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ=="], "ufo": ["ufo@1.5.4", "", {}, "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ=="], @@ -1513,9 +1473,9 @@ "uuid": ["uuid@8.3.2", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="], - "valtio": ["valtio@1.11.2", "", { "dependencies": { "proxy-compare": "2.5.1", "use-sync-external-store": "1.2.0" }, "peerDependencies": { "@types/react": ">=16.8", "react": ">=16.8" }, "optionalPeers": ["@types/react", "react"] }, "sha512-1XfIxnUXzyswPAPXo1P3Pdx2mq/pIqZICkWN60Hby0d9Iqb+MEIpqgYVlbflvHdrp2YR/q3jyKWRPJJ100yxaw=="], + "valtio": ["valtio@1.13.2", "", { "dependencies": { "derive-valtio": "0.1.0", "proxy-compare": "2.6.0", "use-sync-external-store": "1.2.0" }, "peerDependencies": { "@types/react": ">=16.8", "react": ">=16.8" }, "optionalPeers": ["@types/react", "react"] }, "sha512-Qik0o+DSy741TmkqmRfjq+0xpZBXi/Y6+fXZLn0xNF1z/waFMbE3rkivv5Zcf9RrMUp6zswf2J7sbh2KBlba5A=="], - "viem": ["viem@2.23.2", "", { "dependencies": { "@noble/curves": "1.8.1", "@noble/hashes": "1.7.1", "@scure/bip32": "1.6.2", "@scure/bip39": "1.5.4", "abitype": "1.0.8", "isows": "1.0.6", "ox": "0.6.7", "ws": "8.18.0" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-NVmW/E0c5crMOtbEAqMF0e3NmvQykFXhLOc/CkLIXOlzHSA6KXVz3CYVmaKqBF8/xtjsjHAGjdJN3Ru1kFJLaA=="], + "viem": ["viem@2.28.1", "", { "dependencies": { "@noble/curves": "1.8.2", "@noble/hashes": "1.7.2", "@scure/bip32": "1.6.2", "@scure/bip39": "1.5.4", "abitype": "1.0.8", "isows": "1.0.6", "ox": "0.6.9", "ws": "8.18.1" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-7eqGfxAPlMW9u9aE3SMEFPzNYqqU7uFLKUQyd/GwccyW4OAdq7VqJkPIpdULUePN9m3XmfBunA9mswYFp9sUuQ=="], "vite": ["vite@5.4.14", "", { "dependencies": { "esbuild": "^0.21.3", "postcss": "^8.4.43", "rollup": "^4.20.0" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^18.0.0 || >=20.0.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" }, "optionalPeers": ["@types/node", "less", "lightningcss", "sass", "sass-embedded", "stylus", "sugarss", "terser"], "bin": { "vite": "bin/vite.js" } }, "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA=="], @@ -1523,7 +1483,7 @@ "vitest": ["vitest@2.1.9", "", { "dependencies": { "@vitest/expect": "2.1.9", "@vitest/mocker": "2.1.9", "@vitest/pretty-format": "^2.1.9", "@vitest/runner": "2.1.9", "@vitest/snapshot": "2.1.9", "@vitest/spy": "2.1.9", "@vitest/utils": "2.1.9", "chai": "^5.1.2", "debug": "^4.3.7", "expect-type": "^1.1.0", "magic-string": "^0.30.12", "pathe": "^1.1.2", "std-env": "^3.8.0", "tinybench": "^2.9.0", "tinyexec": "^0.3.1", "tinypool": "^1.0.1", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", "vite-node": "2.1.9", "why-is-node-running": "^2.3.0" }, "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", "@vitest/browser": "2.1.9", "@vitest/ui": "2.1.9", "happy-dom": "*", "jsdom": "*" }, "optionalPeers": ["@edge-runtime/vm", "@types/node", "@vitest/browser", "@vitest/ui", "happy-dom", "jsdom"], "bin": { "vitest": "vitest.mjs" } }, "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q=="], - "wagmi": ["wagmi@2.14.12", "", { "dependencies": { "@wagmi/connectors": "5.7.8", "@wagmi/core": "2.16.5", "use-sync-external-store": "1.4.0" }, "peerDependencies": { "@tanstack/react-query": ">=5.0.0", "react": ">=18", "typescript": ">=5.0.4", "viem": "2.x" }, "optionalPeers": ["typescript"] }, "sha512-HSX7CkwF7YWecV5EqcOQrHUSGqZ+f8GJ8FWRYktVcxitfaAd0YofwfJNJB+zEsV17hV6uZ5Tu1nP32tgz+1eTQ=="], + "wagmi": ["wagmi@2.15.2", "", { "dependencies": { "@wagmi/connectors": "5.8.1", "@wagmi/core": "2.17.1", "use-sync-external-store": "1.4.0" }, "peerDependencies": { "@tanstack/react-query": ">=5.0.0", "react": ">=18", "typescript": ">=5.0.4", "viem": "2.x" }, "optionalPeers": ["typescript"] }, "sha512-LbPr4QnZ9ixhlLyPhN2ajzMJaLKBArD2e9oVXDIEXe2qk+X8lviNRPmwymy9eF25S8B4kL7v4eeEbxQQLNw9XQ=="], "wagmi-demo": ["wagmi-demo@workspace:packages/wagmi-demo"], @@ -1547,7 +1507,7 @@ "wrappy": ["wrappy@1.0.2", "", {}, "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="], - "ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], + "ws": ["ws@8.18.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w=="], "xmlhttprequest-ssl": ["xmlhttprequest-ssl@2.1.2", "", {}, "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ=="], @@ -1555,7 +1515,7 @@ "y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="], - "yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + "yallist": ["yallist@5.0.0", "", {}, "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw=="], "yargs": ["yargs@17.7.2", "", { "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" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], @@ -1603,7 +1563,7 @@ "@changesets/write/prettier": ["prettier@2.8.8", "", { "bin": { "prettier": "bin-prettier.js" } }, "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q=="], - "@fastify/websocket/fastify-plugin": ["fastify-plugin@4.5.1", "", {}, "sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ=="], + "@fastify/websocket/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], "@isaacs/cliui/string-width": ["string-width@5.1.2", "", { "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", "strip-ansi": "^7.0.1" } }, "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA=="], @@ -1697,13 +1657,23 @@ "@opentelemetry/sdk-trace-node/@opentelemetry/sdk-trace-base": ["@opentelemetry/sdk-trace-base@1.25.1", "", { "dependencies": { "@opentelemetry/core": "1.25.1", "@opentelemetry/resources": "1.25.1", "@opentelemetry/semantic-conventions": "1.25.1" }, "peerDependencies": { "@opentelemetry/api": ">=1.0.0 <1.10.0" } }, "sha512-C8k4hnEbc5FamuZQ92nTOp8X/diCY56XUTnMiv9UTuJitCzaNNHAVsdm5+HLCdI8SLQsLWIrG38tddMxLVoftw=="], - "@pimlico/alto/@fastify/cors": ["@fastify/cors@9.0.1", "", { "dependencies": { "fastify-plugin": "^4.0.0", "mnemonist": "0.39.6" } }, "sha512-YY9Ho3ovI+QHIL2hW+9X4XqQjXLjJqsU+sMV/xFsxZkE8p3GNnYVFpoOxF7SsP5ZL76gwvbo3V9L+FIekBGU4Q=="], - "@pimlico/alto/async-mutex": ["async-mutex@0.4.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-WfoBo4E/TbCX1G95XTjbWTE3X2XLG0m1Xbv2cwOtuPdyH9CZvnaA5nCt1ucjaKEgW2A5IF71hxrRhr83Je5xjA=="], "@pimlico/alto/dotenv": ["dotenv@16.4.7", "", {}, "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ=="], - "@pimlico/alto/fastify": ["fastify@4.29.0", "", { "dependencies": { "@fastify/ajv-compiler": "^3.5.0", "@fastify/error": "^3.4.0", "@fastify/fast-json-stringify-compiler": "^4.3.0", "abstract-logging": "^2.0.1", "avvio": "^8.3.0", "fast-content-type-parse": "^1.1.0", "fast-json-stringify": "^5.8.0", "find-my-way": "^8.0.0", "light-my-request": "^5.11.0", "pino": "^9.0.0", "process-warning": "^3.0.0", "proxy-addr": "^2.0.7", "rfdc": "^1.3.0", "secure-json-parse": "^2.7.0", "semver": "^7.5.4", "toad-cache": "^3.3.0" } }, "sha512-MaaUHUGcCgC8fXQDsDtioaCcag1fmPJ9j64vAKunqZF4aSub040ZGi/ag8NGE2714yREPOKZuHCfpPzuUD3UQQ=="], + "@pimlico/opentelemetry-instrumentation-viem/@opentelemetry/instrumentation": ["@opentelemetry/instrumentation@0.200.0", "", { "dependencies": { "@opentelemetry/api-logs": "0.200.0", "@types/shimmer": "^1.2.0", "import-in-the-middle": "^1.8.1", "require-in-the-middle": "^7.1.1", "shimmer": "^1.2.1" }, "peerDependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-pmPlzfJd+vvgaZd/reMsC8RWgTXn2WY1OWT5RT42m3aOn5532TozwXNDhg1vzqJ+jnvmkREcdLr27ebJEQt0Jg=="], + + "@reown/appkit/@walletconnect/types": ["@walletconnect/types@2.19.2", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "events": "3.3.0" } }, "sha512-/LZWhkVCUN+fcTgQUxArxhn2R8DF+LSd/6Wh9FnpjeK/Sdupx1EPS8okWG6WPAqq2f404PRoNAfQytQ82Xdl3g=="], + + "@reown/appkit/@walletconnect/universal-provider": ["@walletconnect/universal-provider@2.19.2", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@walletconnect/jsonrpc-http-connection": "1.0.8", "@walletconnect/jsonrpc-provider": "1.0.14", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "@walletconnect/sign-client": "2.19.2", "@walletconnect/types": "2.19.2", "@walletconnect/utils": "2.19.2", "es-toolkit": "1.33.0", "events": "3.3.0" } }, "sha512-LkKg+EjcSUpPUhhvRANgkjPL38wJPIWumAYD8OK/g4OFuJ4W3lS/XTCKthABQfFqmiNbNbVllmywiyE44KdpQg=="], + + "@reown/appkit-controllers/@walletconnect/universal-provider": ["@walletconnect/universal-provider@2.19.2", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@walletconnect/jsonrpc-http-connection": "1.0.8", "@walletconnect/jsonrpc-provider": "1.0.14", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "@walletconnect/sign-client": "2.19.2", "@walletconnect/types": "2.19.2", "@walletconnect/utils": "2.19.2", "es-toolkit": "1.33.0", "events": "3.3.0" } }, "sha512-LkKg+EjcSUpPUhhvRANgkjPL38wJPIWumAYD8OK/g4OFuJ4W3lS/XTCKthABQfFqmiNbNbVllmywiyE44KdpQg=="], + + "@reown/appkit-utils/@walletconnect/universal-provider": ["@walletconnect/universal-provider@2.19.2", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@walletconnect/jsonrpc-http-connection": "1.0.8", "@walletconnect/jsonrpc-provider": "1.0.14", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "@walletconnect/sign-client": "2.19.2", "@walletconnect/types": "2.19.2", "@walletconnect/utils": "2.19.2", "es-toolkit": "1.33.0", "events": "3.3.0" } }, "sha512-LkKg+EjcSUpPUhhvRANgkjPL38wJPIWumAYD8OK/g4OFuJ4W3lS/XTCKthABQfFqmiNbNbVllmywiyE44KdpQg=="], + + "@reown/appkit-wallet/zod": ["zod@3.22.4", "", {}, "sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg=="], + + "@safe-global/safe-apps-sdk/viem": ["viem@2.23.2", "", { "dependencies": { "@noble/curves": "1.8.1", "@noble/hashes": "1.7.1", "@scure/bip32": "1.6.2", "@scure/bip39": "1.5.4", "abitype": "1.0.8", "isows": "1.0.6", "ox": "0.6.7", "ws": "8.18.0" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-NVmW/E0c5crMOtbEAqMF0e3NmvQykFXhLOc/CkLIXOlzHSA6KXVz3CYVmaKqBF8/xtjsjHAGjdJN3Ru1kFJLaA=="], "@size-limit/file/semver": ["semver@7.5.4", "", { "dependencies": { "lru-cache": "^6.0.0" }, "bin": { "semver": "bin/semver.js" } }, "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA=="], @@ -1711,6 +1681,8 @@ "@wagmi/cli/dotenv": ["dotenv@16.4.7", "", {}, "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ=="], + "@wagmi/cli/viem": ["viem@2.23.2", "", { "dependencies": { "@noble/curves": "1.8.1", "@noble/hashes": "1.7.1", "@scure/bip32": "1.6.2", "@scure/bip39": "1.5.4", "abitype": "1.0.8", "isows": "1.0.6", "ox": "0.6.7", "ws": "8.18.0" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-NVmW/E0c5crMOtbEAqMF0e3NmvQykFXhLOc/CkLIXOlzHSA6KXVz3CYVmaKqBF8/xtjsjHAGjdJN3Ru1kFJLaA=="], + "@walletconnect/environment/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], "@walletconnect/events/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], @@ -1723,16 +1695,22 @@ "@walletconnect/logger/pino": ["pino@7.11.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.0.0", "on-exit-leak-free": "^0.2.0", "pino-abstract-transport": "v0.5.0", "pino-std-serializers": "^4.0.0", "process-warning": "^1.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.1.0", "safe-stable-stringify": "^2.1.0", "sonic-boom": "^2.2.1", "thread-stream": "^0.15.1" }, "bin": { "pino": "bin.js" } }, "sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg=="], - "@walletconnect/relay-auth/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], + "@walletconnect/relay-auth/@noble/curves": ["@noble/curves@1.8.0", "", { "dependencies": { "@noble/hashes": "1.7.0" } }, "sha512-j84kjAbzEnQHaSIhRPUmB3/eVXu2k3dKPl2LOrR8fSOIL+89U+7lV117EWHtq/GHM3ReGHM46iRBdZfpc4HRUQ=="], + + "@walletconnect/relay-auth/@noble/hashes": ["@noble/hashes@1.7.0", "", {}, "sha512-HXydb0DgzTpDPwbVeDGCG1gIu7X6+AuU6Zl6av/E/KG8LMsvPntvq+w17CHRpKBmN6Ybdrt1eP3k4cj8DJa78w=="], "@walletconnect/safe-json/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], "@walletconnect/time/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], + "@walletconnect/utils/viem": ["viem@2.23.2", "", { "dependencies": { "@noble/curves": "1.8.1", "@noble/hashes": "1.7.1", "@scure/bip32": "1.6.2", "@scure/bip39": "1.5.4", "abitype": "1.0.8", "isows": "1.0.6", "ox": "0.6.7", "ws": "8.18.0" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-NVmW/E0c5crMOtbEAqMF0e3NmvQykFXhLOc/CkLIXOlzHSA6KXVz3CYVmaKqBF8/xtjsjHAGjdJN3Ru1kFJLaA=="], + "@walletconnect/window-getters/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], "@walletconnect/window-metadata/tslib": ["tslib@1.14.1", "", {}, "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg=="], + "ajv/fast-uri": ["fast-uri@3.0.6", "", {}, "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw=="], + "anymatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "bull/get-port": ["get-port@5.1.1", "", {}, "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ=="], @@ -1741,8 +1719,6 @@ "duplexify/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], - "elliptic/bn.js": ["bn.js@4.12.1", "", {}, "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg=="], - "engine.io-client/debug": ["debug@4.3.7", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ=="], "engine.io-client/ws": ["ws@8.17.1", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ=="], @@ -1763,6 +1739,8 @@ "ethereum-cryptography/@scure/bip39": ["@scure/bip39@1.3.0", "", { "dependencies": { "@noble/hashes": "~1.4.0", "@scure/base": "~1.1.6" } }, "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ=="], + "fast-json-stringify/ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="], + "fastify/pino": ["pino@9.6.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^4.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "sonic-boom": "^4.0.1", "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg=="], "glob/minimatch": ["minimatch@10.0.1", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ=="], @@ -1773,6 +1751,8 @@ "keccak/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="], + "lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], + "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], @@ -1785,14 +1765,6 @@ "path-scurry/lru-cache": ["lru-cache@11.0.2", "", {}, "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA=="], - "pino/process-warning": ["process-warning@3.0.0", "", {}, "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ=="], - - "pino-http/process-warning": ["process-warning@3.0.0", "", {}, "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ=="], - - "pino-pretty/secure-json-parse": ["secure-json-parse@2.7.0", "", {}, "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="], - - "proxy-addr/ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="], - "qrcode/yargs": ["yargs@15.4.1", "", { "dependencies": { "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" } }, "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A=="], "size-limit/chokidar": ["chokidar@3.6.0", "", { "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" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="], @@ -1811,8 +1783,14 @@ "valtio/use-sync-external-store": ["use-sync-external-store@1.2.0", "", { "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0" } }, "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA=="], + "viem/@noble/curves": ["@noble/curves@1.8.2", "", { "dependencies": { "@noble/hashes": "1.7.2" } }, "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g=="], + + "viem/@noble/hashes": ["@noble/hashes@1.7.2", "", {}, "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ=="], + "viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], + "viem/ox": ["ox@0.6.9", "", { "dependencies": { "@adraffy/ens-normalize": "^1.10.1", "@noble/curves": "^1.6.0", "@noble/hashes": "^1.5.0", "@scure/bip32": "^1.5.0", "@scure/bip39": "^1.4.0", "abitype": "^1.0.6", "eventemitter3": "5.0.1" }, "peerDependencies": { "typescript": ">=5.4.0" }, "optionalPeers": ["typescript"] }, "sha512-wi5ShvzE4eOcTwQVsIPdFr+8ycyX+5le/96iAJutaZAvCes1J0+RvpEPg5QDPDiaR0XQQAvZVl7AwqQcINuUug=="], + "vite/esbuild": ["esbuild@0.21.5", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.21.5", "@esbuild/android-arm": "0.21.5", "@esbuild/android-arm64": "0.21.5", "@esbuild/android-x64": "0.21.5", "@esbuild/darwin-arm64": "0.21.5", "@esbuild/darwin-x64": "0.21.5", "@esbuild/freebsd-arm64": "0.21.5", "@esbuild/freebsd-x64": "0.21.5", "@esbuild/linux-arm": "0.21.5", "@esbuild/linux-arm64": "0.21.5", "@esbuild/linux-ia32": "0.21.5", "@esbuild/linux-loong64": "0.21.5", "@esbuild/linux-mips64el": "0.21.5", "@esbuild/linux-ppc64": "0.21.5", "@esbuild/linux-riscv64": "0.21.5", "@esbuild/linux-s390x": "0.21.5", "@esbuild/linux-x64": "0.21.5", "@esbuild/netbsd-x64": "0.21.5", "@esbuild/openbsd-x64": "0.21.5", "@esbuild/sunos-x64": "0.21.5", "@esbuild/win32-arm64": "0.21.5", "@esbuild/win32-ia32": "0.21.5", "@esbuild/win32-x64": "0.21.5" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw=="], "@babel/helper-compilation-targets/lru-cache/yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="], @@ -1859,29 +1837,29 @@ "@opentelemetry/sdk-trace-node/@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.25.1", "", {}, "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ=="], - "@pimlico/alto/@fastify/cors/fastify-plugin": ["fastify-plugin@4.5.1", "", {}, "sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ=="], + "@pimlico/opentelemetry-instrumentation-viem/@opentelemetry/instrumentation/@opentelemetry/api-logs": ["@opentelemetry/api-logs@0.200.0", "", { "dependencies": { "@opentelemetry/api": "^1.3.0" } }, "sha512-IKJBQxh91qJ+3ssRly5hYEJ8NDHu9oY/B1PXVSCWf7zytmYO9RNLB0Ox9XQ/fJ8m6gY6Q6NtBWlmXfaXt5Uc4Q=="], - "@pimlico/alto/@fastify/cors/mnemonist": ["mnemonist@0.39.6", "", { "dependencies": { "obliterator": "^2.0.1" } }, "sha512-A/0v5Z59y63US00cRSLiloEIw3t5G+MiKz4BhX21FI+YBJXBOGW0ohFxTxO08dsOYlzxo87T7vGfZKYp2bcAWA=="], + "@reown/appkit-controllers/@walletconnect/universal-provider/@walletconnect/sign-client": ["@walletconnect/sign-client@2.19.2", "", { "dependencies": { "@walletconnect/core": "2.19.2", "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/logger": "2.1.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.19.2", "@walletconnect/utils": "2.19.2", "events": "3.3.0" } }, "sha512-a/K5PRIFPCjfHq5xx3WYKHAAF8Ft2I1LtxloyibqiQOoUtNLfKgFB1r8sdMvXM7/PADNPe4iAw4uSE6PrARrfg=="], - "@pimlico/alto/fastify/@fastify/ajv-compiler": ["@fastify/ajv-compiler@3.6.0", "", { "dependencies": { "ajv": "^8.11.0", "ajv-formats": "^2.1.1", "fast-uri": "^2.0.0" } }, "sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ=="], + "@reown/appkit-controllers/@walletconnect/universal-provider/@walletconnect/types": ["@walletconnect/types@2.19.2", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "events": "3.3.0" } }, "sha512-/LZWhkVCUN+fcTgQUxArxhn2R8DF+LSd/6Wh9FnpjeK/Sdupx1EPS8okWG6WPAqq2f404PRoNAfQytQ82Xdl3g=="], - "@pimlico/alto/fastify/@fastify/error": ["@fastify/error@3.4.1", "", {}, "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ=="], + "@reown/appkit-controllers/@walletconnect/universal-provider/@walletconnect/utils": ["@walletconnect/utils@2.19.2", "", { "dependencies": { "@noble/ciphers": "1.2.1", "@noble/curves": "1.8.1", "@noble/hashes": "1.7.1", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.1.0", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.19.2", "@walletconnect/window-getters": "1.0.1", "@walletconnect/window-metadata": "1.0.1", "bs58": "6.0.0", "detect-browser": "5.3.0", "query-string": "7.1.3", "uint8arrays": "3.1.0", "viem": "2.23.2" } }, "sha512-VU5CcUF4sZDg8a2/ov29OJzT3KfLuZqJUM0GemW30dlipI5fkpb0VPenZK7TcdLPXc1LN+Q+7eyTqHRoAu/BIA=="], - "@pimlico/alto/fastify/@fastify/fast-json-stringify-compiler": ["@fastify/fast-json-stringify-compiler@4.3.0", "", { "dependencies": { "fast-json-stringify": "^5.7.0" } }, "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA=="], + "@reown/appkit-utils/@walletconnect/universal-provider/@walletconnect/sign-client": ["@walletconnect/sign-client@2.19.2", "", { "dependencies": { "@walletconnect/core": "2.19.2", "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/logger": "2.1.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.19.2", "@walletconnect/utils": "2.19.2", "events": "3.3.0" } }, "sha512-a/K5PRIFPCjfHq5xx3WYKHAAF8Ft2I1LtxloyibqiQOoUtNLfKgFB1r8sdMvXM7/PADNPe4iAw4uSE6PrARrfg=="], - "@pimlico/alto/fastify/avvio": ["avvio@8.4.0", "", { "dependencies": { "@fastify/error": "^3.3.0", "fastq": "^1.17.1" } }, "sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA=="], + "@reown/appkit-utils/@walletconnect/universal-provider/@walletconnect/types": ["@walletconnect/types@2.19.2", "", { "dependencies": { "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "events": "3.3.0" } }, "sha512-/LZWhkVCUN+fcTgQUxArxhn2R8DF+LSd/6Wh9FnpjeK/Sdupx1EPS8okWG6WPAqq2f404PRoNAfQytQ82Xdl3g=="], - "@pimlico/alto/fastify/fast-json-stringify": ["fast-json-stringify@5.16.1", "", { "dependencies": { "@fastify/merge-json-schemas": "^0.1.0", "ajv": "^8.10.0", "ajv-formats": "^3.0.1", "fast-deep-equal": "^3.1.3", "fast-uri": "^2.1.0", "json-schema-ref-resolver": "^1.0.1", "rfdc": "^1.2.0" } }, "sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g=="], + "@reown/appkit-utils/@walletconnect/universal-provider/@walletconnect/utils": ["@walletconnect/utils@2.19.2", "", { "dependencies": { "@noble/ciphers": "1.2.1", "@noble/curves": "1.8.1", "@noble/hashes": "1.7.1", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.1.0", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.19.2", "@walletconnect/window-getters": "1.0.1", "@walletconnect/window-metadata": "1.0.1", "bs58": "6.0.0", "detect-browser": "5.3.0", "query-string": "7.1.3", "uint8arrays": "3.1.0", "viem": "2.23.2" } }, "sha512-VU5CcUF4sZDg8a2/ov29OJzT3KfLuZqJUM0GemW30dlipI5fkpb0VPenZK7TcdLPXc1LN+Q+7eyTqHRoAu/BIA=="], - "@pimlico/alto/fastify/find-my-way": ["find-my-way@8.2.2", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-querystring": "^1.0.0", "safe-regex2": "^3.1.0" } }, "sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA=="], + "@reown/appkit/@walletconnect/universal-provider/@walletconnect/sign-client": ["@walletconnect/sign-client@2.19.2", "", { "dependencies": { "@walletconnect/core": "2.19.2", "@walletconnect/events": "1.0.1", "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/logger": "2.1.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.19.2", "@walletconnect/utils": "2.19.2", "events": "3.3.0" } }, "sha512-a/K5PRIFPCjfHq5xx3WYKHAAF8Ft2I1LtxloyibqiQOoUtNLfKgFB1r8sdMvXM7/PADNPe4iAw4uSE6PrARrfg=="], - "@pimlico/alto/fastify/light-my-request": ["light-my-request@5.14.0", "", { "dependencies": { "cookie": "^0.7.0", "process-warning": "^3.0.0", "set-cookie-parser": "^2.4.1" } }, "sha512-aORPWntbpH5esaYpGOOmri0OHDOe3wC5M2MQxZ9dvMLZm6DnaAn0kJlcbU9hwsQgLzmZyReKwFwwPkR+nHu5kA=="], + "@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils": ["@walletconnect/utils@2.19.2", "", { "dependencies": { "@noble/ciphers": "1.2.1", "@noble/curves": "1.8.1", "@noble/hashes": "1.7.1", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.1.0", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.19.2", "@walletconnect/window-getters": "1.0.1", "@walletconnect/window-metadata": "1.0.1", "bs58": "6.0.0", "detect-browser": "5.3.0", "query-string": "7.1.3", "uint8arrays": "3.1.0", "viem": "2.23.2" } }, "sha512-VU5CcUF4sZDg8a2/ov29OJzT3KfLuZqJUM0GemW30dlipI5fkpb0VPenZK7TcdLPXc1LN+Q+7eyTqHRoAu/BIA=="], - "@pimlico/alto/fastify/pino": ["pino@9.6.0", "", { "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", "on-exit-leak-free": "^2.1.0", "pino-abstract-transport": "^2.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^4.0.0", "quick-format-unescaped": "^4.0.3", "real-require": "^0.2.0", "safe-stable-stringify": "^2.3.1", "sonic-boom": "^4.0.1", "thread-stream": "^3.0.0" }, "bin": { "pino": "bin.js" } }, "sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg=="], + "@safe-global/safe-apps-sdk/viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], - "@pimlico/alto/fastify/process-warning": ["process-warning@3.0.0", "", {}, "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ=="], + "@safe-global/safe-apps-sdk/viem/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], - "@pimlico/alto/fastify/secure-json-parse": ["secure-json-parse@2.7.0", "", {}, "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="], + "@wagmi/cli/viem/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], "@walletconnect/logger/pino/on-exit-leak-free": ["on-exit-leak-free@0.2.0", "", {}, "sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg=="], @@ -1897,6 +1875,10 @@ "@walletconnect/logger/pino/thread-stream": ["thread-stream@0.15.2", "", { "dependencies": { "real-require": "^0.1.0" } }, "sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA=="], + "@walletconnect/utils/viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], + + "@walletconnect/utils/viem/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], + "ethereum-cryptography/@scure/bip32/@scure/base": ["@scure/base@1.1.9", "", {}, "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg=="], "ethereum-cryptography/@scure/bip39/@scure/base": ["@scure/base@1.1.9", "", {}, "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg=="], @@ -1905,6 +1887,8 @@ "fastify/pino/pino-std-serializers": ["pino-std-serializers@7.0.0", "", {}, "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA=="], + "fastify/pino/process-warning": ["process-warning@4.0.1", "", {}, "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q=="], + "fastify/pino/sonic-boom": ["sonic-boom@4.2.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww=="], "fastify/pino/thread-stream": ["thread-stream@3.1.0", "", { "dependencies": { "real-require": "^0.2.0" } }, "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A=="], @@ -1977,38 +1961,36 @@ "@metamask/eth-json-rpc-provider/@metamask/json-rpc-engine/@metamask/utils/uuid": ["uuid@9.0.1", "", { "bin": { "uuid": "dist/bin/uuid" } }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="], - "@pimlico/alto/fastify/@fastify/ajv-compiler/ajv-formats": ["ajv-formats@2.1.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA=="], - - "@pimlico/alto/fastify/@fastify/ajv-compiler/fast-uri": ["fast-uri@2.4.0", "", {}, "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA=="], + "@reown/appkit-controllers/@walletconnect/universal-provider/@walletconnect/sign-client/@walletconnect/core": ["@walletconnect/core@2.19.2", "", { "dependencies": { "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-provider": "1.0.14", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/jsonrpc-ws-connection": "1.0.16", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.1.0", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.19.2", "@walletconnect/utils": "2.19.2", "@walletconnect/window-getters": "1.0.1", "es-toolkit": "1.33.0", "events": "3.3.0", "uint8arrays": "3.1.0" } }, "sha512-iu0mgLj51AXcKpdNj8+4EdNNBd/mkNjLEhZn6UMc/r7BM9WbmpPMEydA39WeRLbdLO4kbpmq4wTbiskI1rg+HA=="], - "@pimlico/alto/fastify/fast-json-stringify/@fastify/merge-json-schemas": ["@fastify/merge-json-schemas@0.1.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3" } }, "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA=="], + "@reown/appkit-controllers/@walletconnect/universal-provider/@walletconnect/utils/viem": ["viem@2.23.2", "", { "dependencies": { "@noble/curves": "1.8.1", "@noble/hashes": "1.7.1", "@scure/bip32": "1.6.2", "@scure/bip39": "1.5.4", "abitype": "1.0.8", "isows": "1.0.6", "ox": "0.6.7", "ws": "8.18.0" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-NVmW/E0c5crMOtbEAqMF0e3NmvQykFXhLOc/CkLIXOlzHSA6KXVz3CYVmaKqBF8/xtjsjHAGjdJN3Ru1kFJLaA=="], - "@pimlico/alto/fastify/fast-json-stringify/fast-uri": ["fast-uri@2.4.0", "", {}, "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA=="], + "@reown/appkit-utils/@walletconnect/universal-provider/@walletconnect/sign-client/@walletconnect/core": ["@walletconnect/core@2.19.2", "", { "dependencies": { "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-provider": "1.0.14", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/jsonrpc-ws-connection": "1.0.16", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.1.0", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.19.2", "@walletconnect/utils": "2.19.2", "@walletconnect/window-getters": "1.0.1", "es-toolkit": "1.33.0", "events": "3.3.0", "uint8arrays": "3.1.0" } }, "sha512-iu0mgLj51AXcKpdNj8+4EdNNBd/mkNjLEhZn6UMc/r7BM9WbmpPMEydA39WeRLbdLO4kbpmq4wTbiskI1rg+HA=="], - "@pimlico/alto/fastify/fast-json-stringify/json-schema-ref-resolver": ["json-schema-ref-resolver@1.0.1", "", { "dependencies": { "fast-deep-equal": "^3.1.3" } }, "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw=="], + "@reown/appkit-utils/@walletconnect/universal-provider/@walletconnect/utils/viem": ["viem@2.23.2", "", { "dependencies": { "@noble/curves": "1.8.1", "@noble/hashes": "1.7.1", "@scure/bip32": "1.6.2", "@scure/bip39": "1.5.4", "abitype": "1.0.8", "isows": "1.0.6", "ox": "0.6.7", "ws": "8.18.0" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-NVmW/E0c5crMOtbEAqMF0e3NmvQykFXhLOc/CkLIXOlzHSA6KXVz3CYVmaKqBF8/xtjsjHAGjdJN3Ru1kFJLaA=="], - "@pimlico/alto/fastify/find-my-way/safe-regex2": ["safe-regex2@3.1.0", "", { "dependencies": { "ret": "~0.4.0" } }, "sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug=="], + "@reown/appkit/@walletconnect/universal-provider/@walletconnect/sign-client/@walletconnect/core": ["@walletconnect/core@2.19.2", "", { "dependencies": { "@walletconnect/heartbeat": "1.2.2", "@walletconnect/jsonrpc-provider": "1.0.14", "@walletconnect/jsonrpc-types": "1.0.4", "@walletconnect/jsonrpc-utils": "1.0.8", "@walletconnect/jsonrpc-ws-connection": "1.0.16", "@walletconnect/keyvaluestorage": "1.1.1", "@walletconnect/logger": "2.1.2", "@walletconnect/relay-api": "1.0.11", "@walletconnect/relay-auth": "1.1.0", "@walletconnect/safe-json": "1.0.2", "@walletconnect/time": "1.0.2", "@walletconnect/types": "2.19.2", "@walletconnect/utils": "2.19.2", "@walletconnect/window-getters": "1.0.1", "es-toolkit": "1.33.0", "events": "3.3.0", "uint8arrays": "3.1.0" } }, "sha512-iu0mgLj51AXcKpdNj8+4EdNNBd/mkNjLEhZn6UMc/r7BM9WbmpPMEydA39WeRLbdLO4kbpmq4wTbiskI1rg+HA=="], - "@pimlico/alto/fastify/light-my-request/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], + "@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem": ["viem@2.23.2", "", { "dependencies": { "@noble/curves": "1.8.1", "@noble/hashes": "1.7.1", "@scure/bip32": "1.6.2", "@scure/bip39": "1.5.4", "abitype": "1.0.8", "isows": "1.0.6", "ox": "0.6.7", "ws": "8.18.0" }, "peerDependencies": { "typescript": ">=5.0.4" }, "optionalPeers": ["typescript"] }, "sha512-NVmW/E0c5crMOtbEAqMF0e3NmvQykFXhLOc/CkLIXOlzHSA6KXVz3CYVmaKqBF8/xtjsjHAGjdJN3Ru1kFJLaA=="], - "@pimlico/alto/fastify/pino/pino-abstract-transport": ["pino-abstract-transport@2.0.0", "", { "dependencies": { "split2": "^4.0.0" } }, "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw=="], + "qrcode/yargs/cliui/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], - "@pimlico/alto/fastify/pino/pino-std-serializers": ["pino-std-serializers@7.0.0", "", {}, "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA=="], + "size-limit/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "@pimlico/alto/fastify/pino/process-warning": ["process-warning@4.0.1", "", {}, "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q=="], + "test-exclude/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], - "@pimlico/alto/fastify/pino/sonic-boom": ["sonic-boom@4.2.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww=="], + "tsc-alias/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "@pimlico/alto/fastify/pino/thread-stream": ["thread-stream@3.1.0", "", { "dependencies": { "real-require": "^0.2.0" } }, "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A=="], + "@reown/appkit-controllers/@walletconnect/universal-provider/@walletconnect/utils/viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], - "qrcode/yargs/cliui/wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="], + "@reown/appkit-controllers/@walletconnect/universal-provider/@walletconnect/utils/viem/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], - "size-limit/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "@reown/appkit-utils/@walletconnect/universal-provider/@walletconnect/utils/viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], - "test-exclude/glob/path-scurry/lru-cache": ["lru-cache@10.4.3", "", {}, "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ=="], + "@reown/appkit-utils/@walletconnect/universal-provider/@walletconnect/utils/viem/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], - "tsc-alias/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], + "@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], - "@pimlico/alto/fastify/find-my-way/safe-regex2/ret": ["ret@0.4.3", "", {}, "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ=="], + "@reown/appkit/@walletconnect/universal-provider/@walletconnect/utils/viem/ws": ["ws@8.18.0", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": ">=5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw=="], } } diff --git a/bun.lockb b/bun.lockb index 417ed38a..1acb1905 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/package.json b/package.json index f4a4a9ba..557ea6a6 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "@changesets/cli": "^2.26.2", "@permissionless/wagmi": "workspace:packages/wagmi", "@pimlico/mock-paymaster": "workspace:packages/mock-paymaster", - "@pimlico/alto": "^0.0.11", + "@pimlico/alto": "^0.0.18", "@size-limit/esbuild-why": "^9.0.0", "@size-limit/preset-small-lib": "^9.0.0", "@tanstack/react-query": "5.45.1", @@ -30,7 +30,7 @@ "bun-types": "^1.0.7", "get-port": "^7.0.0", "ox": "0.6.7", - "prool": "^0.0.12", + "prool": "^0.0.23", "react": "^18.3.1", "react-dom": "^18.3.1", "rimraf": "^6.0.1", @@ -39,10 +39,10 @@ "tsc-alias": "^1.8.8", "tslib": "^2.6.2", "typescript": "^5.2.2", - "viem": "2.23.2", + "viem": "2.28.1", "vite": "^5.4.10", "vitest": "^2.1.5", - "wagmi": "^2.14.11" + "wagmi": "^2.15.1" }, "description": "", "keywords": [], @@ -73,8 +73,7 @@ "test": "vitest dev -c ./packages/permissionless/vitest.config.ts", "test:ci-no-coverage": "CI=true && vitest -c ./packages/permissionless/vitest.config.ts --pool=forks", "test:ci": "CI=true && vitest -c ./packages/permissionless/vitest.config.ts --coverage --pool=forks", - "wagmi-demo": "bun run --cwd packages/wagmi-demo dev", - "test:setup": "docker compose -f \"packages/permissionless-test/mock-aa-infra/docker-compose.yml\" up" + "wagmi-demo": "bun run --cwd packages/wagmi-demo dev" }, "simple-git-hooks": { "pre-commit": "bun run format && bun run lint:fix" diff --git a/packages/mock-paymaster/constants.ts b/packages/mock-paymaster/constants.ts new file mode 100644 index 00000000..c95543d4 --- /dev/null +++ b/packages/mock-paymaster/constants.ts @@ -0,0 +1,84 @@ +import { + type Address, + type Hex, + concat, + getAddress, + getCreate2Address, + pad +} from "viem" +import { + entryPoint06Address, + entryPoint07Address, + entryPoint08Address +} from "viem/account-abstraction" + +export const constants = { + deterministicDeployer: getAddress( + "0x4e59b44847b379578588920ca78fbf26c0b4956c" + ), + exchangeRate: 30_000_000n, + validForSeconds: 60_000, + postOpGasOverhead: 100_000n, + treasury: getAddress("0xD8Baa107006C93a030d1455A2eF43261b384F21c"), + dummySignature: + "0xcd91f19f0f19ce862d7bec7b7d9b95457145afc6f639c28fd0360f488937bfa41e6eedcd3a46054fd95fcd0e3ef6b0bc0a615c4d975eef55c8a3517257904d5b1c" as Hex, + create2Salt: + "0x0000000000000000000000000000000000000000000000000000000000000000" as Hex +} + +export const getSingletonPaymaster08InitCode = (owner: Address): Hex => + concat([ + "0x6101806040525f60a052600160c081905260e052607561010052600c61012052603461014052601461016052348015610036575f5ffd5b50604051613e2a380380613e2a833981016040819052610055916102f4565b6001600160a01b0384166080528383838383838383808484846100785f83610115565b506100a37f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0882610115565b505f925050505b8151811015610102576001805f8484815181106100c9576100c961036d565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790556001016100aa565b5050505050505050505050505050610381565b5f828152602081815260408083206001600160a01b038516845290915281205460ff166101b5575f838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561016d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101b8565b505f5b92915050565b5f6001600160a01b0382166101b8565b6101d7816101be565b81146101e1575f5ffd5b50565b80516101b8816101ce565b634e487b7160e01b5f52604160045260245ffd5b601f19601f83011681018181106001600160401b0382111715610228576102286101ef565b6040525050565b5f61023960405190565b90506102458282610203565b919050565b5f6001600160401b03821115610262576102626101ef565b5060209081020190565b5f61027e6102798461024a565b61022f565b8381529050602080820190840283018581111561029c5761029c5f5ffd5b835b818110156102c057806102b188826101e4565b8452506020928301920161029e565b5050509392505050565b5f82601f8301126102dc576102dc5f5ffd5b81516102ec84826020860161026c565b949350505050565b5f5f5f5f6080858703121561030a5761030a5f5ffd5b5f61031587876101e4565b9450506020610326878288016101e4565b9350506040610337878288016101e4565b92505060608501516001600160401b03811115610355576103555f5ffd5b610361878288016102ca565b91505092959194509250565b634e487b7160e01b5f52603260045260245ffd5b60805160a05160c05160e051610100516101205161014051610160516139cc61045e5f395f50505f8181610b1c0152818161146b015261168801525f8181610a440152611e3f01525f8181610a9e0152611ff701525f8181610a6501528181610abf0152610afa01525f81816114ef015281816115c401526118c601525f8181610a10015281816115200152818161158501528181611a4f0152611b6001525f818161040b015281816106c3015281816108be01528181610e5b01528181610f1701528181610fa20152818161105801526113f901526139cc5ff3fe60806040526004361061018e575f3560e01c80637c627b21116100dc578063c23a5cea11610087578063d547741f11610062578063d547741f14610489578063eb12d61e146104a8578063ec87621c146104c7578063feaf513e146104fa575f5ffd5b8063c23a5cea1461044e578063c399ec881461046d578063d0e30db014610481575f5ffd5b8063a217fddf116100b7578063a217fddf146103e7578063b0d691fe146103fa578063bb9fe6bf1461043a575f5ffd5b80637c627b211461035a5780637dd345cb1461037957806391d1485414610398575f5ffd5b806336568abe1161013c5780635525dcfb116101175780635525dcfb146102ee57806363b241aa1461030d578063736c0d5b1461032c575f5ffd5b806336568abe146102745780634031c20e1461029357806352b7512c146102c1575f5ffd5b8063205c28781161016c578063205c2878146101fb578063248a9ca31461021a5780632f2ff15d14610255575f5ffd5b806301ffc9a7146101925780630396cb60146101c75780630e316ab7146101dc575b5f5ffd5b34801561019d575f5ffd5b506101b16101ac366004612b49565b61051e565b6040516101be9190612b79565b60405180910390f35b6101da6101d5366004612b9e565b6105b6565b005b3480156101e7575f5ffd5b506101da6101f6366004612bed565b61072b565b348015610206575f5ffd5b506101da610215366004612c1c565b610877565b348015610225575f5ffd5b50610248610234366004612c56565b5f9081526020819052604090206001015490565b6040516101be9190612c7a565b348015610260575f5ffd5b506101da61026f366004612c88565b610927565b34801561027f575f5ffd5b506101da61028e366004612c88565b610951565b34801561029e575f5ffd5b506101b16102ad366004612bed565b60026020525f908152604090205460ff1681565b3480156102cc575f5ffd5b506102e06102db366004612cd2565b6109af565b6040516101be929190612d92565b3480156102f9575f5ffd5b50610248610308366004612db2565b6109d1565b348015610318575f5ffd5b50610248610327366004612e26565b610a0d565b348015610337575f5ffd5b506101b1610346366004612bed565b60016020525f908152604090205460ff1681565b348015610365575f5ffd5b506101da610374366004612ed5565b610bc1565b348015610384575f5ffd5b506101da610393366004612fad565b610bdd565b3480156103a3575f5ffd5b506101b16103b2366004612c88565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156103f2575f5ffd5b506102485f81565b348015610405575f5ffd5b5061042d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101be9190613053565b348015610445575f5ffd5b506101da610d92565b348015610459575f5ffd5b506101da610468366004612bed565b610ed0565b348015610478575f5ffd5b50610248610f63565b6101da61101b565b348015610494575f5ffd5b506101da6104a3366004612c88565b6110b8565b3480156104b3575f5ffd5b506101da6104c2366004612bed565b6110dc565b3480156104d2575f5ffd5b506102487f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b348015610505575f5ffd5b50610248610514366004613084565b5f95945050505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806105b057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156106225750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b1561068657337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d9291906130f3565b60405180910390fd5b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630396cb609034906106fa90859060040161311a565b5f604051808303818588803b158015610711575f5ffd5b505af1158015610723573d5f5f3e3d5ffd5b505050505050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156107975750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b156107f257337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d9291906130f3565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600160205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b9061086c908390613128565b60405180910390a150565b5f61088181611222565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063205c2878906108f590869086906004016130f3565b5f604051808303815f87803b15801561090c575f5ffd5b505af115801561091e573d5f5f3e3d5ffd5b50505050505050565b5f8281526020819052604090206001015461094181611222565b61094b838361122f565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109a0576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109aa8282611328565b505050565b60605f6109ba6113e1565b6109c5858585611452565b91509150935093915050565b5f670de0b6b3a7640000826109e68587613163565b6109f09088613182565b6109fa9190613163565b610a0491906131c2565b95945050505050565b5f7f000000000000000000000000000000000000000000000000000000000000000060ff168360ff1603610a9857610a9182610a897f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006131d5565b60ff16611613565b90506105b0565b5f610ae37f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006131d5565b90505f610af360e08501856131f2565b610b4060ff7f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000613182565b818110610b4f57610b4f61326b565b919091013560f81c9150506001811615156002821615156004831615801590610b8057610b7d6010866131d5565b94505b8215610b9457610b916010866131d5565b94505b8115610ba857610ba56014866131d5565b94505b610bb5878660ff16611613565b98975050505050505050565b610bc96113e1565b610bd6858585858561172d565b5050505050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610c495750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610ca457337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d9291906130f3565b5f5b8281101561094b578160025f868685818110610cc457610cc461326b565b9050602002016020810190610cd99190612bed565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790557f8ff8c5211f68ef53b4bdd15ab2ea6d87be8a3dbf58865bd8325c984057e4fcb4848483818110610d5e57610d5e61326b565b9050602002016020810190610d739190612bed565b83604051610d82929190613298565b60405180910390a1600101610ca6565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610dfe5750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610e5957337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d9291906130f3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610ebe575f5ffd5b505af115801561094b573d5f5f3e3d5ffd5b5f610eda81611222565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90610f4c908590600401613128565b5f604051808303815f87803b158015610711575f5ffd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190610fd7903090600401613128565b602060405180830381865afa158015610ff2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101691906132be565b905090565b6040517fb760faf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b760faf990349061108f903090600401613128565b5f604051808303818588803b1580156110a6575f5ffd5b505af1158015610bd6573d5f5f3e3d5ffd5b5f828152602081905260409020600101546110d281611222565b61094b8383611328565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156111485750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b156111a357337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d9291906130f3565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602081905260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055517f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f249061086c908390613128565b61122c8133611915565b50565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16611321575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112bf3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016105b0565b505f6105b0565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615611321575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016105b0565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067d906132dc565b565b60605f8080368161148f61146960e08b018b6131f2565b7f0000000000000000000000000000000000000000000000000000000000000000611983565b9350935093509350821580156114b45750325f9081526002602052604090205460ff16155b156114ed57326040517f55d3ab4600000000000000000000000000000000000000000000000000000000815260040161067d9190613128565b7f000000000000000000000000000000000000000000000000000000000000000060ff168460ff161415801561154957507f000000000000000000000000000000000000000000000000000000000000000060ff168460ff1614155b15611580576040517f654a4f2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60605f7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff16036115c2576115bc8b85858d611a2d565b90925090505b7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff1603611603576115fd868c86868e8e611bbb565b90925090505b909a909950975050505050505050565b5f8083356020850135608086013560a087013560c088013561163860408a018a6131f2565b604051611646929190613334565b60405190819003902061165c60608b018b6131f2565b60405161166a929190613334565b60405190819003902061168060e08c018c6131f2565b5f906116ac8d7f0000000000000000000000000000000000000000000000000000000000000000613182565b926116b993929190613340565b6040516116c7929190613334565b6040519081900381206116e3989796959493929160200161336d565b604051602081830303815290604052805190602001209050804660405160200161170e9291906133e4565b6040516020818303038152906040528051906020012091505092915050565b5f6117388585611cec565b90505f5f6117468286613182565b90505f8361018001516fffffffffffffffffffffffffffffffff166117878386608001516fffffffffffffffffffffffffffffffff168888606001516109d1565b6117919190613182565b90505f84610120015182116117b657818561012001516117b191906133f2565b6117c6565b6101208501516117c690836133f2565b9050611808856020015186610120015184116117e65786604001516117e9565b86515b87610120015185116117fc578751611802565b87604001515b84611ddf565b5f670de0b6b3a764000086606001518761010001516118279190613163565b61183191906131c2565b6101a087015190915073ffffffffffffffffffffffffffffffffffffffff161580159061185d57508281115b1561188457602086015186516101a088015161188492919061187f87866133f2565b611ddf565b855f015173ffffffffffffffffffffffffffffffffffffffff168660a001517f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000008960200151878b60600151604051611900949392919061340e565b60405180910390a35050505050505050505050565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661197f5780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d9291906130f3565b5050565b5f803681611992856001613182565b8610156119cb576040517fcc32193e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8787878181106119de576119de61326b565b919091013560f881901c925060018084161515925060f99190911c9036905f908c908c90611a0d908d90613182565b611a18928290613340565b939d949c509a50919850919650505050505050565b60605f5f5f365f611a3e8989611e37565b93509350935093505f611aa6611a747f00000000000000000000000000000000000000000000000000000000000000008d610a0d565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b90505f611ae88285858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611f3e92505050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205491925060ff90911690611b2282158989611f66565b90508d3573ffffffffffffffffffffffffffffffffffffffff168b7f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000005f5f5f604051611b929493929190613457565b60405180910390a360408051602081019091525f81529e909d509b505050505050505050505050565b60605f5f611bc98787611f9c565b90505f611bd9611a748b8b610a0d565b90505f611bea828460c00151611f3e565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260016020908152604080832054918701519087015193945060ff90911692611c2f91841591611f66565b90505f611c3e8d8b888c6126f9565b905082611c535796509450611ce19350505050565b5f611c648a5f5f8a60a001516109d1565b9050808761010001511115611ca5576040517f79183c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010087015115611cd757611cd787608001518f5f016020810190611cca9190612bed565b89516101008b0151611ddf565b5096509450505050505b965096945050505050565b611dcc604051806101c001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f6fffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f6fffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b611dd882840184613664565b9392505050565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c5260205f6064601c5f895af13d1560015f51141716611e2a57637939f4245f526004601cfd5b5f60605260405250505050565b5f80368160ff7f000000000000000000000000000000000000000000000000000000000000000016851015611e98576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611ea6600682888a613340565b611eaf91613683565b60d01c90505f611ec3600c6006898b613340565b611ecc91613683565b60d01c9050365f611ee089600c818d613340565b909250905060408114801590611ef7575060418114155b15611f2e576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9299919850965090945092505050565b5f5f5f5f611f4c8686612886565b925092509250611f5c82826128cf565b5090949350505050565b5f60d08265ffffffffffff16901b60a08465ffffffffffff16901b85611f8c575f611f8f565b60015b60ff161717949350505050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e081018290526101008101829052610120810182905261014081019190915260ff7f000000000000000000000000000000000000000000000000000000000000000016821015612050576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80848482816120625761206261326b565b919091013560f81c9150506001808216151590600283161515906004841615159061208d90866136ee565b9450876fffffffffffffffffffffffffffffffff8616886120af8860066136ee565b6fffffffffffffffffffffffffffffffff16926120ce93929190613340565b6120d791613683565b60d01c60208701526120ea6006866136ee565b9450876fffffffffffffffffffffffffffffffff86168861210c8860066136ee565b6fffffffffffffffffffffffffffffffff169261212b93929190613340565b61213491613683565b60d01c60408701526121476006866136ee565b9450876fffffffffffffffffffffffffffffffff8616886121698860146136ee565b6fffffffffffffffffffffffffffffffff169261218893929190613340565b6121919161371a565b60601c60808701526121a46014866136ee565b9450876fffffffffffffffffffffffffffffffff8616886121c68860106136ee565b6fffffffffffffffffffffffffffffffff16926121e593929190613340565b6121ee91613778565b60801c60608701526122016010866136ee565b9450876fffffffffffffffffffffffffffffffff8616886122238860206136ee565b6fffffffffffffffffffffffffffffffff169261224293929190613340565b61224b916137d6565b60a087015261225b6020866136ee565b9450876fffffffffffffffffffffffffffffffff86168861227d8860106136ee565b6fffffffffffffffffffffffffffffffff169261229c93929190613340565b6122a591613778565b60801c60e08701526122b86010866136ee565b9450876fffffffffffffffffffffffffffffffff8616886122da8860146136ee565b6fffffffffffffffffffffffffffffffff16926122f993929190613340565b6123029161371a565b60601c86526123126014866136ee565b5f610100880152945080156123d65761232c8560106136ee565b6fffffffffffffffffffffffffffffffff16871015612377576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff8616886123978860106136ee565b6fffffffffffffffffffffffffffffffff16926123b693929190613340565b6123bf91613778565b60801c6101008701526123d36010866136ee565b94505b5f6101208701528215612498576123ee8560106136ee565b6fffffffffffffffffffffffffffffffff16871015612439576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff8616886124598860106136ee565b6fffffffffffffffffffffffffffffffff169261247893929190613340565b61248191613778565b60801c6101208701526124956010866136ee565b94505b5f610140870152811561255a576124b08560146136ee565b6fffffffffffffffffffffffffffffffff168710156124fb576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff86168861251b8860146136ee565b6fffffffffffffffffffffffffffffffff169261253a93929190613340565b6125439161371a565b60601c6101408701526125576014866136ee565b94505b612578876fffffffffffffffffffffffffffffffff8716818b613340565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050505060c0870152608086015173ffffffffffffffffffffffffffffffffffffffff16612601576040517f33c1dac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560a001515f0361263e576040517f5b33c69600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818015612664575061014086015173ffffffffffffffffffffffffffffffffffffffff16155b1561269b576040517f497189f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560c00151516040141580156126b757508560c0015151604114155b156126ee576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505092915050565b60605f612705866129d0565b61270e876129ff565b6127189190613182565b90505f8460e001516fffffffffffffffffffffffffffffffff1661273b88612a1c565b6127499060a08a0135613182565b6127539190613182565b604080516101c081019091529091508061277060208a018a612bed565b73ffffffffffffffffffffffffffffffffffffffff168152602001866080015173ffffffffffffffffffffffffffffffffffffffff168152602001865f015173ffffffffffffffffffffffffffffffffffffffff1681526020018660a00151815260200186606001516fffffffffffffffffffffffffffffffff1681526020018781526020015f81526020015f815260200185815260200186610100015181526020018381526020018281526020018661012001516fffffffffffffffffffffffffffffffff16815260200186610140015173ffffffffffffffffffffffffffffffffffffffff1681525060405160200161286b919061393f565b60405160208183030381529060405292505050949350505050565b5f5f5f83516041036128bd576020840151604085015160608601515f1a6128af88828585612a2b565b9550955095505050506128c8565b505081515f91506002905b9250925092565b5f8260038111156128e2576128e261394e565b036128eb575050565b60018260038111156128ff576128ff61394e565b03612936576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111561294a5761294a61394e565b03612983576040517ffce698f700000000000000000000000000000000000000000000000000000000815261067d908290600401612c7a565b60038260038111156129975761299761394e565b0361197f57806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161067d9190612c7a565b5f6129de60e08301836131f2565b6129ed91603491602491613340565b6129f691613778565b60801c92915050565b5f6fffffffffffffffffffffffffffffffff6080830135166105b0565b5f6105b0826080013560801c90565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612a6457505f91506003905082612b06565b5f6001888888886040515f8152602001604052604051612a87949392919061397b565b6020604051602081039080840390855afa158015612aa7573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612afd57505f925060019150829050612b06565b92505f91508190505b9450945094915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461122c575f5ffd5b80356105b081612b10565b5f60208284031215612b5c57612b5c5f5ffd5b5f612b678484612b3e565b949350505050565b8015155b82525050565b602081016105b08284612b6f565b63ffffffff8116612b34565b80356105b081612b87565b5f60208284031215612bb157612bb15f5ffd5b5f612b678484612b93565b5f73ffffffffffffffffffffffffffffffffffffffff82166105b0565b612b3481612bbc565b80356105b081612bd9565b5f60208284031215612c0057612c005f5ffd5b5f612b678484612be2565b80612b34565b80356105b081612c0b565b5f5f60408385031215612c3057612c305f5ffd5b5f612c3b8585612be2565b9250506020612c4c85828601612c11565b9150509250929050565b5f60208284031215612c6957612c695f5ffd5b5f612b678484612c11565b80612b73565b602081016105b08284612c74565b5f5f60408385031215612c9c57612c9c5f5ffd5b5f612ca78585612c11565b9250506020612c4c85828601612be2565b5f6101208284031215612ccc57612ccc5f5ffd5b50919050565b5f5f5f60608486031215612ce757612ce75f5ffd5b833567ffffffffffffffff811115612d0057612d005f5ffd5b612d0c86828701612cb8565b9350506020612d1d86828701612c11565b9250506040612d2e86828701612c11565b9150509250925092565b8281835e505f910152565b5f612d4c825190565b808452602084019350612d63818560208601612d38565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920192915050565b60408082528101612da38185612d43565b9050611dd86020830184612c74565b5f5f5f5f60808587031215612dc857612dc85f5ffd5b5f612dd38787612c11565b9450506020612de487828801612c11565b9350506040612df587828801612c11565b9250506060612e0687828801612c11565b91505092959194509250565b60ff8116612b34565b80356105b081612e12565b5f5f60408385031215612e3a57612e3a5f5ffd5b5f612e458585612e1b565b925050602083013567ffffffffffffffff811115612e6457612e645f5ffd5b612c4c85828601612cb8565b6003811061122c575f5ffd5b80356105b081612e70565b5f5f83601f840112612e9a57612e9a5f5ffd5b50813567ffffffffffffffff811115612eb457612eb45f5ffd5b602083019150836001820283011115612ece57612ece5f5ffd5b9250929050565b5f5f5f5f5f60808688031215612eec57612eec5f5ffd5b5f612ef78888612e7c565b955050602086013567ffffffffffffffff811115612f1657612f165f5ffd5b612f2288828901612e87565b94509450506040612f3588828901612c11565b9250506060612f4688828901612c11565b9150509295509295909350565b5f5f83601f840112612f6657612f665f5ffd5b50813567ffffffffffffffff811115612f8057612f805f5ffd5b602083019150836020820283011115612ece57612ece5f5ffd5b801515612b34565b80356105b081612f9a565b5f5f5f60408486031215612fc257612fc25f5ffd5b833567ffffffffffffffff811115612fdb57612fdb5f5ffd5b612fe786828701612f53565b93509350506020612d2e86828701612fa2565b5f6105b073ffffffffffffffffffffffffffffffffffffffff831661301d565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b5f6105b082612ffa565b5f6105b082613036565b612b7381613040565b602081016105b0828461304a565b6fffffffffffffffffffffffffffffffff8116612b34565b80356105b081613061565b5f5f5f5f5f60a0868803121561309b5761309b5f5ffd5b5f6130a68888612c11565b95505060206130b788828901612c11565b94505060406130c888828901613079565b93505060606130d988828901612c11565b9250506080612f4688828901612c11565b612b7381612bbc565b6040810161310182856130ea565b611dd86020830184612c74565b63ffffffff8116612b73565b602081016105b0828461310e565b602081016105b082846130ea565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810280821583820485141761317b5761317b613136565b5092915050565b808201808211156105b0576105b0613136565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826131d0576131d0613195565b500490565b60ff9182169190811690828201908111156105b0576105b0613136565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe136859003018112613229576132295f5ffd5b80840192508235915067ffffffffffffffff821115613249576132495f5ffd5b602083019250600182023603831315613263576132635f5ffd5b509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b604081016132a682856130ea565b611dd86020830184612b6f565b80516105b081612c0b565b5f602082840312156132d1576132d15f5ffd5b5f612b6784846132b3565b602080825281016105b081601581527f53656e646572206e6f7420456e747279506f696e740000000000000000000000602082015260400190565b82818337505f910152565b5f61332e838584613317565b50500190565b5f612b67828486613322565b5f5f85851115613351576133515f5ffd5b83861115613360576133605f5ffd5b5050820193919092039150565b610100810161337c828b6130ea565b613389602083018a612c74565b6133966040830189612c74565b6133a36060830188612c74565b6133b06080830187612c74565b6133bd60a0830186612c74565b6133ca60c0830185612c74565b6133d760e0830184612c74565b9998505050505050505050565b604081016131018285612c74565b818103818111156105b0576105b0613136565b60ff8116612b73565b6080810161341c8287613405565b61342960208301866130ea565b6134366040830185612c74565b610a046060830184612c74565b5f6105b061301a8381565b612b7381613443565b608081016134658287613405565b61347260208301866130ea565b61347f604083018561344e565b610a04606083018461344e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff821117156134fd576134fd61348c565b6040525050565b5f61350e60405190565b905061351a82826134b9565b919050565b5f6101c08284031215613533576135335f5ffd5b61353e6101c0613504565b90505f61354b8484612be2565b825250602061355c84848301612be2565b602083015250604061357084828501612be2565b604083015250606061358484828501612c11565b606083015250608061359884828501613079565b60808301525060a06135ac84828501612c11565b60a08301525060c06135c084828501612c11565b60c08301525060e06135d484828501612c11565b60e0830152506101006135e984828501612c11565b610100830152506101206135ff84828501612c11565b6101208301525061014061361584828501612c11565b6101408301525061016061362b84828501612c11565b6101608301525061018061364184828501613079565b610180830152506101a061365784828501612be2565b6101a08301525092915050565b5f6101c08284031215613678576136785f5ffd5b5f612b67848461351f565b80357fffffffffffff000000000000000000000000000000000000000000000000000016828260068210156136e6576136e17fffffffffffff0000000000000000000000000000000000000000000000000000836006036008021b90565b831692505b505092915050565b6fffffffffffffffffffffffffffffffff9182169190811690828201908111156105b0576105b0613136565b80357fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016828260148210156136e6576136e17fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008021b90565b80357fffffffffffffffffffffffffffffffff0000000000000000000000000000000016828260108210156136e6576136e17fffffffffffffffffffffffffffffffff00000000000000000000000000000000836010036008021b90565b8035828260208210156136e6576136e17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008021b90565b6fffffffffffffffffffffffffffffffff8116612b73565b80516101c083019061383c84826130ea565b50602082015161384f60208501826130ea565b50604082015161386260408501826130ea565b5060608201516138756060850182612c74565b5060808201516138886080850182613812565b5060a082015161389b60a0850182612c74565b5060c08201516138ae60c0850182612c74565b5060e08201516138c160e0850182612c74565b506101008201516138d6610100850182612c74565b506101208201516138eb610120850182612c74565b50610140820151613900610140850182612c74565b50610160820151613915610160850182612c74565b5061018082015161392a610180850182613812565b506101a082015161094b6101a08501826130ea565b6101c081016105b0828461382a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b608081016139898287612c74565b613429602083018661340556fea26469706673582212208a15a0763d0e9e3763499efb24664c89aecc3b170e7b24ffc642014b6ca6baa764736f6c634300081c0033", + pad(entryPoint08Address), // entrypoint + pad(owner), // owner + pad(owner), // manager + // couldn't get encodeAbiParameters with type address[] to work + "0x00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001", + pad(owner) // signer + ]) + +export const getSingletonPaymaster07InitCode = (owner: Address): Hex => + concat([ + "0x610180604052600060a052600160c081905260e052607561010052600c6101205260346101405260146101605234801561003857600080fd5b50604051613f87380380613f87833981016040819052610057916102fe565b6001600160a01b0384166080528383838380848484610077600083610112565b506100a27f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0882610112565b5050505060005b81518110156101035760018060008484815181106100c9576100c961037c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016100a9565b50505050505050505050610392565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166101b4576000838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561016c3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101b8565b5060005b92915050565b60006001600160a01b0382166101b8565b6101d8816101be565b81146101e357600080fd5b50565b80516101b8816101cf565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b038211171561022c5761022c6101f1565b6040525050565b600061023e60405190565b905061024a8282610207565b919050565b60006001600160401b03821115610268576102686101f1565b5060209081020190565b60006102856102808461024f565b610233565b838152905060208082019084028301858111156102a4576102a4600080fd5b835b818110156102c857806102b988826101e6565b845250602092830192016102a6565b5050509392505050565b600082601f8301126102e6576102e6600080fd5b81516102f6848260208601610272565b949350505050565b6000806000806080858703121561031757610317600080fd5b600061032387876101e6565b9450506020610334878288016101e6565b9350506040610345878288016101e6565b92505060608501516001600160401b0381111561036457610364600080fd5b610370878288016102d2565b91505092959194509250565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e05161010051610120516101405161016051613b0e6104796000396000505060008181610b520152818161154a015261176b015260008181610a780152611ef4015260008181610ad301526120b4015260008181610a9901528181610af40152610b300152600081816115cf015281816116a501526119cd015260008181610a44015281816116000152818161166601528181611b5e0152611c73015260008181610429015281816106e6015281816108e901528181610e9801528181610f5a01528181610fe9015281816110a101526114d70152613b0e6000f3fe6080604052600436106101965760003560e01c80637c627b21116100e1578063c23a5cea1161008a578063d547741f11610064578063d547741f146104aa578063eb12d61e146104ca578063ec87621c146104ea578063feaf513e1461051e57600080fd5b8063c23a5cea1461046d578063c399ec881461048d578063d0e30db0146104a257600080fd5b8063a217fddf116100bb578063a217fddf14610402578063b0d691fe14610417578063bb9fe6bf1461045857600080fd5b80637c627b21146103715780637dd345cb1461039157806391d14854146103b157600080fd5b806336568abe116101435780635525dcfb1161011d5780635525dcfb1461030157806363b241aa14610321578063736c0d5b1461034157600080fd5b806336568abe146102835780634031c20e146102a357806352b7512c146102d357600080fd5b8063205c287811610174578063205c287814610206578063248a9ca3146102265780632f2ff15d1461026357600080fd5b806301ffc9a71461019b5780630396cb60146101d15780630e316ab7146101e6575b600080fd5b3480156101a757600080fd5b506101bb6101b6366004612c22565b61053e565b6040516101c89190612c55565b60405180910390f35b6101e46101df366004612c7a565b6105d7565b005b3480156101f257600080fd5b506101e4610201366004612ccd565b610752565b34801561021257600080fd5b506101e4610221366004612cff565b6108a1565b34801561023257600080fd5b50610256610241366004612d3c565b60009081526020819052604090206001015490565b6040516101c89190612d63565b34801561026f57600080fd5b506101e461027e366004612d71565b610957565b34801561028f57600080fd5b506101e461029e366004612d71565b610982565b3480156102af57600080fd5b506101bb6102be366004612ccd565b60026020526000908152604090205460ff1681565b3480156102df57600080fd5b506102f36102ee366004612dc0565b6109e0565b6040516101c8929190612e9e565b34801561030d57600080fd5b5061025661031c366004612ebe565b610a03565b34801561032d57600080fd5b5061025661033c366004612f36565b610a40565b34801561034d57600080fd5b506101bb61035c366004612ccd565b60016020526000908152604090205460ff1681565b34801561037d57600080fd5b506101e461038c366004612fee565b610bf7565b34801561039d57600080fd5b506101e46103ac3660046130d0565b610c13565b3480156103bd57600080fd5b506101bb6103cc366004612d71565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561040e57600080fd5b50610256600081565b34801561042357600080fd5b5061044b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101c8919061317d565b34801561046457600080fd5b506101e4610dcd565b34801561047957600080fd5b506101e4610488366004612ccd565b610f12565b34801561049957600080fd5b50610256610fa9565b6101e4611064565b3480156104b657600080fd5b506101e46104c5366004612d71565b611105565b3480156104d657600080fd5b506101e46104e5366004612ccd565b61112a565b3480156104f657600080fd5b506102567f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b34801561052a57600080fd5b506102566105393660046131ae565b611273565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806105d157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1615801561064557503360009081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b156106a957337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016106a0929190613222565b60405180910390fd5b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630396cb6090349061071d908590600401613249565b6000604051808303818588803b15801561073657600080fd5b505af115801561074a573d6000803e3d6000fd5b505050505050565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156107c057503360009081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b1561081b57337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016106a0929190613222565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b90610896908390613257565b60405180910390a150565b60006108ac816112fb565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063205c2878906109209086908690600401613222565b600060405180830381600087803b15801561093a57600080fd5b505af115801561094e573d6000803e3d6000fd5b50505050505050565b600082815260208190526040902060010154610972816112fb565b61097c8383611308565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109d1576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109db8282611404565b505050565b606060006109ec6114bf565b6109f7858585611530565b91509150935093915050565b6000670de0b6b3a764000082610a198587613294565b610a2390886132b3565b610a2d9190613294565b610a3791906132f5565b95945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000060ff168360ff1603610acc57610ac582610abd7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613309565b60ff166116f4565b90506105d1565b6000610b187f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613309565b90506000610b2960e0850185613326565b610b7660ff7f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000006132b3565b818110610b8557610b856133a3565b919091013560f81c9150506001811615156002821615156004831615801590610bb657610bb3601086613309565b94505b8215610bca57610bc7601086613309565b94505b8115610bde57610bdb601486613309565b94505b610beb878660ff166116f4565b98975050505050505050565b610bff6114bf565b610c0c8585858585611810565b5050505050565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610c8157503360009081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610cdc57337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016106a0929190613222565b60005b8281101561097c578160026000868685818110610cfe57610cfe6133a3565b9050602002016020810190610d139190612ccd565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790557f8ff8c5211f68ef53b4bdd15ab2ea6d87be8a3dbf58865bd8325c984057e4fcb4848483818110610d9957610d996133a3565b9050602002016020810190610dae9190612ccd565b83604051610dbd9291906133d2565b60405180910390a1600101610cdf565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610e3b57503360009081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610e9657337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016106a0929190613222565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610efe57600080fd5b505af115801561097c573d6000803e3d6000fd5b6000610f1d816112fb565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90610f8f908590600401613257565b600060405180830381600087803b15801561073657600080fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a082319061101e903090600401613257565b602060405180830381865afa15801561103b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105f91906133f8565b905090565b6040517fb760faf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b760faf99034906110d8903090600401613257565b6000604051808303818588803b1580156110f157600080fd5b505af1158015610c0c573d6000803e3d6000fd5b600082815260208190526040902060010154611120816112fb565b61097c8383611404565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1615801561119857503360009081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b156111f357337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016106a0929190613222565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602081905260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055517f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f2490610896908390613257565b600080806fffffffffffffffffffffffffffffffff8616611294888a6132f5565b61129e91906132b3565b9050848111156112b5576112b28582613419565b91505b6000828511156112e4576064600a6112cd8588613419565b6112d79190613294565b6112e191906132f5565b90505b6112ee8882613294565b9998505050505050505050565b6113058133611a1c565b50565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166113fc5760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561139a3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016105d1565b5060006105d1565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156113fc5760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016105d1565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461152e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a09061342c565b565b606060008080368161156e61154860e08b018b613326565b7f0000000000000000000000000000000000000000000000000000000000000000611a8b565b93509350935093508215801561159457503260009081526002602052604090205460ff16155b156115cd57326040517f55d3ab460000000000000000000000000000000000000000000000000000000081526004016106a09190613257565b7f000000000000000000000000000000000000000000000000000000000000000060ff168460ff161415801561162957507f000000000000000000000000000000000000000000000000000000000000000060ff168460ff1614155b15611660576040517f654a4f2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606060007f000000000000000000000000000000000000000000000000000000000000000060ff168660ff16036116a35761169d8b85858d611b38565b90925090505b7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff16036116e4576116de868c86868e8e611cd1565b90925090505b909a909950975050505050505050565b60008083356020850135608086013560a087013560c088013561171a60408a018a613326565b604051611728929190613486565b60405190819003902061173e60608b018b613326565b60405161174c929190613486565b60405190819003902061176260e08c018c613326565b60009061178f8d7f00000000000000000000000000000000000000000000000000000000000000006132b3565b9261179c93929190613493565b6040516117aa929190613486565b6040519081900381206117c698979695949392916020016134c3565b60405160208183030381529060405280519060200120905080466040516020016117f192919061352d565b6040516020818303038152906040528051906020012091505092915050565b600061181c8585611e0a565b9050600061183b84848460800151856101600151866101400151611273565b9050600061184982866132b3565b905060008361018001516fffffffffffffffffffffffffffffffff1661188b8386608001516fffffffffffffffffffffffffffffffff16888860600151610a03565b61189591906132b3565b9050600084610120015182116118bb57818561012001516118b69190613419565b6118cb565b6101208501516118cb9083613419565b905061190d856020015186610120015184116118eb5786604001516118ee565b86515b8761012001518511611901578751611907565b87604001515b84611e8e565b6000670de0b6b3a7640000866060015187610100015161192d9190613294565b61193791906132f5565b6101a087015190915073ffffffffffffffffffffffffffffffffffffffff161580159061196357508281115b1561198a57602086015186516101a088015161198a9291906119858786613419565b611e8e565b856000015173ffffffffffffffffffffffffffffffffffffffff168660a001517f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000008960200151878b60600151604051611a079493929190613544565b60405180910390a35050505050505050505050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611a875780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016106a0929190613222565b5050565b6000803681611a9b8560016132b3565b861015611ad4576040517fcc32193e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000878787818110611ae857611ae86133a3565b919091013560f881901c925060018084161515925060f99190911c9036906000908c908c90611b18908d906132b3565b611b23928290613493565b939d949c509a50919850919650505050505050565b60606000806000366000611b4c8989611eeb565b93509350935093506000611bb6611b837f00000000000000000000000000000000000000000000000000000000000000008d610a40565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b90506000611bfa8285858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ff692505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205491925060ff90911690611c3582158989612020565b90508d3573ffffffffffffffffffffffffffffffffffffffff168b7f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000006000806000604051611ca7949392919061358e565b60405180910390a36040805160208101909152600081529e909d509b505050505050505050505050565b6060600080611ce08787612058565b90506000611cf1611b838b8b610a40565b90506000611d03828460c00151611ff6565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604080832054918701519087015193945060ff90911692611d4991841591612020565b90506000611d598d8b888c6127bc565b905082611d6e5796509450611dff9350505050565b6000611d818a6000808a60a00151610a03565b9050808761010001511115611dc2576040517f79183c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010087015115611df557611df587608001518f6000016020810190611de89190612ccd565b89516101008b0151611e8e565b5096509450505050505b965096945050505050565b604080516101c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a0810191909152611e87828401846137a1565b9392505050565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c52602060006064601c6000895af13d156001600051141716611edd57637939f4246000526004601cfd5b600060605260405250505050565b600080368160ff7f000000000000000000000000000000000000000000000000000000000000000016851015611f4d576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611f5c600682888a613493565b611f65916137c3565b60d01c90506000611f7a600c6006898b613493565b611f83916137c3565b60d01c9050366000611f9889600c818d613493565b909250905060408114801590611faf575060418114155b15611fe6576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9299919850965090945092505050565b600080600080612006868661294e565b925092509250612016828261299b565b5090949350505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561204857600061204b565b60015b60ff161717949350505050565b604080516101608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e081018290526101008101829052610120810182905261014081019190915260ff7f00000000000000000000000000000000000000000000000000000000000000001682101561210d576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008084848281612120576121206133a3565b919091013560f81c9150506001808216151590600283161515906004841615159061214b908661382e565b9450876fffffffffffffffffffffffffffffffff86168861216d88600661382e565b6fffffffffffffffffffffffffffffffff169261218c93929190613493565b612195916137c3565b60d01c60208701526121a860068661382e565b9450876fffffffffffffffffffffffffffffffff8616886121ca88600661382e565b6fffffffffffffffffffffffffffffffff16926121e993929190613493565b6121f2916137c3565b60d01c604087015261220560068661382e565b9450876fffffffffffffffffffffffffffffffff86168861222788601461382e565b6fffffffffffffffffffffffffffffffff169261224693929190613493565b61224f9161385a565b60601c608087015261226260148661382e565b9450876fffffffffffffffffffffffffffffffff86168861228488601061382e565b6fffffffffffffffffffffffffffffffff16926122a393929190613493565b6122ac916138b8565b60801c60608701526122bf60108661382e565b9450876fffffffffffffffffffffffffffffffff8616886122e188602061382e565b6fffffffffffffffffffffffffffffffff169261230093929190613493565b61230991613916565b60a087015261231960208661382e565b9450876fffffffffffffffffffffffffffffffff86168861233b88601061382e565b6fffffffffffffffffffffffffffffffff169261235a93929190613493565b612363916138b8565b60801c60e087015261237660108661382e565b9450876fffffffffffffffffffffffffffffffff86168861239888601461382e565b6fffffffffffffffffffffffffffffffff16926123b793929190613493565b6123c09161385a565b60601c86526123d060148661382e565b600061010088015294508015612495576123eb85601061382e565b6fffffffffffffffffffffffffffffffff16871015612436576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff86168861245688601061382e565b6fffffffffffffffffffffffffffffffff169261247593929190613493565b61247e916138b8565b60801c61010087015261249260108661382e565b94505b60006101208701528215612558576124ae85601061382e565b6fffffffffffffffffffffffffffffffff168710156124f9576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff86168861251988601061382e565b6fffffffffffffffffffffffffffffffff169261253893929190613493565b612541916138b8565b60801c61012087015261255560108661382e565b94505b6000610140870152811561261b5761257185601461382e565b6fffffffffffffffffffffffffffffffff168710156125bc576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff8616886125dc88601461382e565b6fffffffffffffffffffffffffffffffff16926125fb93929190613493565b6126049161385a565b60601c61014087015261261860148661382e565b94505b612639876fffffffffffffffffffffffffffffffff8716818b613493565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c0870152608086015173ffffffffffffffffffffffffffffffffffffffff166126c3576040517f33c1dac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560a00151600003612701576040517f5b33c69600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818015612727575061014086015173ffffffffffffffffffffffffffffffffffffffff16155b1561275e576040517f497189f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560c001515160401415801561277a57508560c0015151604114155b156127b1576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505092915050565b606060006127c986612a9d565b6127d287612acd565b6127dc91906132b3565b905060008460e001516fffffffffffffffffffffffffffffffff1661280088612aeb565b61280e9060a08a01356132b3565b61281891906132b3565b604080516101c081019091529091508061283560208a018a612ccd565b73ffffffffffffffffffffffffffffffffffffffff168152602001866080015173ffffffffffffffffffffffffffffffffffffffff168152602001866000015173ffffffffffffffffffffffffffffffffffffffff1681526020018660a00151815260200186606001516fffffffffffffffffffffffffffffffff168152602001878152602001600081526020016000815260200185815260200186610100015181526020018381526020018281526020018661012001516fffffffffffffffffffffffffffffffff16815260200186610140015173ffffffffffffffffffffffffffffffffffffffff168152506040516020016129339190613a7f565b60405160208183030381529060405292505050949350505050565b600080600083516041036129885760208401516040850151606086015160001a61297a88828585612afb565b955095509550505050612994565b50508151600091506002905b9250925092565b60008260038111156129af576129af613a8e565b036129b8575050565b60018260038111156129cc576129cc613a8e565b03612a03576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115612a1757612a17613a8e565b03612a50576040517ffce698f70000000000000000000000000000000000000000000000000000000081526106a0908290600401612d63565b6003826003811115612a6457612a64613a8e565b03611a8757806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016106a09190612d63565b6000612aac60e0830183613326565b612abb91603491602491613493565b612ac4916138b8565b60801c92915050565b60006fffffffffffffffffffffffffffffffff6080830135166105d1565b60006105d1826080013560801c90565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612b365750600091506003905082612bde565b600060018888888860405160008152602001604052604051612b5b9493929190613abd565b6020604051602081039080840390855afa158015612b7d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612bd457506000925060019150829050612bde565b9250600091508190505b9450945094915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461130557600080fd5b80356105d181612be8565b600060208284031215612c3757612c37600080fd5b6000612c438484612c17565b949350505050565b8015155b82525050565b602081016105d18284612c4b565b63ffffffff8116612c0c565b80356105d181612c63565b600060208284031215612c8f57612c8f600080fd5b6000612c438484612c6f565b600073ffffffffffffffffffffffffffffffffffffffff82166105d1565b612c0c81612c9b565b80356105d181612cb9565b600060208284031215612ce257612ce2600080fd5b6000612c438484612cc2565b80612c0c565b80356105d181612cee565b60008060408385031215612d1557612d15600080fd5b6000612d218585612cc2565b9250506020612d3285828601612cf4565b9150509250929050565b600060208284031215612d5157612d51600080fd5b6000612c438484612cf4565b80612c4f565b602081016105d18284612d5d565b60008060408385031215612d8757612d87600080fd5b6000612d938585612cf4565b9250506020612d3285828601612cc2565b60006101208284031215612dba57612dba600080fd5b50919050565b600080600060608486031215612dd857612dd8600080fd5b833567ffffffffffffffff811115612df257612df2600080fd5b612dfe86828701612da4565b9350506020612e0f86828701612cf4565b9250506040612e2086828701612cf4565b9150509250925092565b60005b83811015612e45578181015183820152602001612e2d565b50506000910152565b6000612e58825190565b808452602084019350612e6f818560208601612e2a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920192915050565b60408082528101612eaf8185612e4e565b9050611e876020830184612d5d565b60008060008060808587031215612ed757612ed7600080fd5b6000612ee38787612cf4565b9450506020612ef487828801612cf4565b9350506040612f0587828801612cf4565b9250506060612f1687828801612cf4565b91505092959194509250565b60ff8116612c0c565b80356105d181612f22565b60008060408385031215612f4c57612f4c600080fd5b6000612f588585612f2b565b925050602083013567ffffffffffffffff811115612f7857612f78600080fd5b612d3285828601612da4565b6003811061130557600080fd5b80356105d181612f84565b60008083601f840112612fb157612fb1600080fd5b50813567ffffffffffffffff811115612fcc57612fcc600080fd5b602083019150836001820283011115612fe757612fe7600080fd5b9250929050565b60008060008060006080868803121561300957613009600080fd5b60006130158888612f91565b955050602086013567ffffffffffffffff81111561303557613035600080fd5b61304188828901612f9c565b9450945050604061305488828901612cf4565b925050606061306588828901612cf4565b9150509295509295909350565b60008083601f84011261308757613087600080fd5b50813567ffffffffffffffff8111156130a2576130a2600080fd5b602083019150836020820283011115612fe757612fe7600080fd5b801515612c0c565b80356105d1816130bd565b6000806000604084860312156130e8576130e8600080fd5b833567ffffffffffffffff81111561310257613102600080fd5b61310e86828701613072565b93509350506020612e20868287016130c5565b60006105d173ffffffffffffffffffffffffffffffffffffffff8316613145565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b60006105d182613121565b60006105d18261315e565b612c4f81613169565b602081016105d18284613174565b6fffffffffffffffffffffffffffffffff8116612c0c565b80356105d18161318b565b600080600080600060a086880312156131c9576131c9600080fd5b60006131d58888612cf4565b95505060206131e688828901612cf4565b94505060406131f7888289016131a3565b935050606061320888828901612cf4565b925050608061306588828901612cf4565b612c4f81612c9b565b604081016132308285613219565b611e876020830184612d5d565b63ffffffff8116612c4f565b602081016105d1828461323d565b602081016105d18284613219565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181028082158382048514176132ac576132ac613265565b5092915050565b808201808211156105d1576105d1613265565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613304576133046132c6565b500490565b60ff9182169190811690828201908111156105d1576105d1613265565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe13685900301811261335f5761335f600080fd5b80840192508235915067ffffffffffffffff82111561338057613380600080fd5b60208301925060018202360383131561339b5761339b600080fd5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b604081016133e08285613219565b611e876020830184612c4b565b80516105d181612cee565b60006020828403121561340d5761340d600080fd5b6000612c4384846133ed565b818103818111156105d1576105d1613265565b602080825281016105d181601581527f53656e646572206e6f7420456e747279506f696e740000000000000000000000602082015260400190565b82818337506000910152565b6000613480838584613467565b50500190565b6000612c43828486613473565b600080858511156134a6576134a6600080fd5b838611156134b6576134b6600080fd5b5050820193919092039150565b61010081016134d2828b613219565b6134df602083018a612d5d565b6134ec6040830189612d5d565b6134f96060830188612d5d565b6135066080830187612d5d565b61351360a0830186612d5d565b61352060c0830185612d5d565b6112ee60e0830184612d5d565b604081016132308285612d5d565b60ff8116612c4f565b60808101613552828761353b565b61355f6020830186613219565b61356c6040830185612d5d565b610a376060830184612d5d565b60006105d16131428381565b612c4f81613579565b6080810161359c828761353b565b6135a96020830186613219565b6135b66040830185613585565b610a376060830184613585565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff82111715613636576136366135c3565b6040525050565b600061364860405190565b905061365482826135f2565b919050565b60006101c0828403121561366f5761366f600080fd5b61367a6101c061363d565b905060006136888484612cc2565b825250602061369984848301612cc2565b60208301525060406136ad84828501612cc2565b60408301525060606136c184828501612cf4565b60608301525060806136d5848285016131a3565b60808301525060a06136e984828501612cf4565b60a08301525060c06136fd84828501612cf4565b60c08301525060e061371184828501612cf4565b60e08301525061010061372684828501612cf4565b6101008301525061012061373c84828501612cf4565b6101208301525061014061375284828501612cf4565b6101408301525061016061376884828501612cf4565b6101608301525061018061377e848285016131a3565b610180830152506101a061379484828501612cc2565b6101a08301525092915050565b60006101c082840312156137b7576137b7600080fd5b6000612c438484613659565b80357fffffffffffff00000000000000000000000000000000000000000000000000001682826006821015613826576138217fffffffffffff0000000000000000000000000000000000000000000000000000836006036008021b90565b831692505b505092915050565b6fffffffffffffffffffffffffffffffff9182169190811690828201908111156105d1576105d1613265565b80357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001682826014821015613826576138217fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008021b90565b80357fffffffffffffffffffffffffffffffff000000000000000000000000000000001682826010821015613826576138217fffffffffffffffffffffffffffffffff00000000000000000000000000000000836010036008021b90565b803582826020821015613826576138217fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008021b90565b6fffffffffffffffffffffffffffffffff8116612c4f565b80516101c083019061397c8482613219565b50602082015161398f6020850182613219565b5060408201516139a26040850182613219565b5060608201516139b56060850182612d5d565b5060808201516139c86080850182613952565b5060a08201516139db60a0850182612d5d565b5060c08201516139ee60c0850182612d5d565b5060e0820151613a0160e0850182612d5d565b50610100820151613a16610100850182612d5d565b50610120820151613a2b610120850182612d5d565b50610140820151613a40610140850182612d5d565b50610160820151613a55610160850182612d5d565b50610180820151613a6a610180850182613952565b506101a082015161097c6101a0850182613219565b6101c081016105d1828461396a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60808101613acb8287612d5d565b61355f602083018661353b56fea2646970667358221220e0ac4cfab19cb7c97427e7c850ed5c509238b8485841fe4834625b6cb3b2d04c64736f6c634300081a0033", + pad(entryPoint07Address), // entrypoint + pad(owner), // owner + pad(owner), // manager + // couldn't get encodeAbiParameters with type address[] to work + "0x00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001", + pad(owner) // signer + ]) + +export const getSingletonPaymaster06InitCode = (owner: Address): Hex => + concat([ + "0x610160604052600060a052600160c081905260e052607561010052600c6101205260146101405234801561003257600080fd5b50604051613f94380380613f94833981016040819052610051916102f8565b6001600160a01b038416608052838383838084848461007160008361010c565b5061009c7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b088261010c565b5050505060005b81518110156100fd5760018060008484815181106100c3576100c3610376565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016100a3565b5050505050505050505061038c565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166101ae576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101663390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101b2565b5060005b92915050565b60006001600160a01b0382166101b2565b6101d2816101b8565b81146101dd57600080fd5b50565b80516101b2816101c9565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b0382111715610226576102266101eb565b6040525050565b600061023860405190565b90506102448282610201565b919050565b60006001600160401b03821115610262576102626101eb565b5060209081020190565b600061027f61027a84610249565b61022d565b8381529050602080820190840283018581111561029e5761029e600080fd5b835b818110156102c257806102b388826101e0565b845250602092830192016102a0565b5050509392505050565b600082601f8301126102e0576102e0600080fd5b81516102f084826020860161026c565b949350505050565b6000806000806080858703121561031157610311600080fd5b600061031d87876101e0565b945050602061032e878288016101e0565b935050604061033f878288016101e0565b92505060608501516001600160401b0381111561035e5761035e600080fd5b61036a878288016102cc565b91505092959194509250565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e051610100516101205161014051613b22610472600039600081816110370152818161173c01526117fe015260008181610f7d0152611f1f015260008181610fd801526120df015260008181610f5c01528181610fb7015261101501526000818161165e01528181611883015281816119590152611dc3015260008181610f28015281816118b40152818161191a01528181611c2a0152611d4a0152600081816103d0015281816106bb015281816108be01528181610c8b01528181610d4d01528181610ddc01528181610e9401526114240152613b226000f3fe60806040526004361061018b5760003560e01c8063a217fddf116100d6578063d0e30db01161007f578063eb12d61e11610059578063eb12d61e14610491578063ec87621c146104b1578063f465c77e146104e557600080fd5b8063d0e30db014610449578063d547741f14610451578063dd16f8471461047157600080fd5b8063bb9fe6bf116100b0578063bb9fe6bf146103ff578063c23a5cea14610414578063c399ec881461043457600080fd5b8063a217fddf14610389578063a9a234091461039e578063b0d691fe146103be57600080fd5b806336568abe11610138578063736c0d5b11610112578063736c0d5b146102e85780637dd345cb1461031857806391d148541461033857600080fd5b806336568abe146102785780634031c20e146102985780635525dcfb146102c857600080fd5b8063205c287811610169578063205c2878146101fb578063248a9ca31461021b5780632f2ff15d1461025857600080fd5b806301ffc9a7146101905780630396cb60146101c65780630e316ab7146101db575b600080fd5b34801561019c57600080fd5b506101b06101ab366004612c02565b610513565b6040516101bd9190612c35565b60405180910390f35b6101d96101d4366004612c5a565b6105ac565b005b3480156101e757600080fd5b506101d96101f6366004612cad565b610727565b34801561020757600080fd5b506101d9610216366004612cdf565b610876565b34801561022757600080fd5b5061024b610236366004612d1c565b60009081526020819052604090206001015490565b6040516101bd9190612d43565b34801561026457600080fd5b506101d9610273366004612d51565b61092c565b34801561028457600080fd5b506101d9610293366004612d51565b610957565b3480156102a457600080fd5b506101b06102b3366004612cad565b60026020526000908152604090205460ff1681565b3480156102d457600080fd5b5061024b6102e3366004612d84565b6109b5565b3480156102f457600080fd5b506101b0610303366004612cad565b60016020526000908152604090205460ff1681565b34801561032457600080fd5b506101d9610333366004612e4d565b6109f2565b34801561034457600080fd5b506101b0610353366004612d51565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561039557600080fd5b5061024b600081565b3480156103aa57600080fd5b506101d96103b9366004612f0b565b610bac565b3480156103ca57600080fd5b506103f27f000000000000000000000000000000000000000000000000000000000000000081565b6040516101bd9190612fcb565b34801561040b57600080fd5b506101d9610bc0565b34801561042057600080fd5b506101d961042f366004612cad565b610d05565b34801561044057600080fd5b5061024b610d9c565b6101d9610e57565b34801561045d57600080fd5b506101d961046c366004612d51565b610eff565b34801561047d57600080fd5b5061024b61048c366004613009565b610f24565b34801561049d57600080fd5b506101d96104ac366004612cad565b6110dc565b3480156104bd57600080fd5b5061024b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b3480156104f157600080fd5b50610505610500366004613057565b611225565b6040516101bd92919061312b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806105a657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1615801561061a57503360009081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b1561067e57337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610675929190613154565b60405180910390fd5b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630396cb609034906106f290859060040161317b565b6000604051808303818588803b15801561070b57600080fd5b505af115801561071f573d6000803e3d6000fd5b505050505050565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1615801561079557503360009081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b156107f057337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610675929190613154565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b9061086b908390613189565b60405180910390a150565b600061088181611248565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063205c2878906108f59086908690600401613154565b600060405180830381600087803b15801561090f57600080fd5b505af1158015610923573d6000803e3d6000fd5b50505050505050565b60008281526020819052604090206001015461094781611248565b6109518383611255565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109a6576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b08282611351565b505050565b6000670de0b6b3a7640000826109cb85876131c6565b6109d590886131e5565b6109df91906131c6565b6109e99190613227565b95945050505050565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610a6057503360009081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610abb57337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610675929190613154565b60005b82811015610951578160026000868685818110610add57610add61323b565b9050602002016020810190610af29190612cad565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790557f8ff8c5211f68ef53b4bdd15ab2ea6d87be8a3dbf58865bd8325c984057e4fcb4848483818110610b7857610b7861323b565b9050602002016020810190610b8d9190612cad565b83604051610b9c92919061326a565b60405180910390a1600101610abe565b610bb461140c565b6109518484848461147d565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610c2e57503360009081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610c8957337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610675929190613154565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610cf157600080fd5b505af1158015610951573d6000803e3d6000fd5b6000610d1081611248565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90610d82908590600401613189565b600060405180830381600087803b15801561070b57600080fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190610e11903090600401613189565b602060405180830381865afa158015610e2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e529190613290565b905090565b6040517fb760faf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b760faf9903490610ecb903090600401613189565b6000604051808303818588803b158015610ee457600080fd5b505af1158015610ef8573d6000803e3d6000fd5b5050505050565b600082815260208190526040902060010154610f1a81611248565b6109518383611351565b60007f000000000000000000000000000000000000000000000000000000000000000060ff168360ff1603610fb057610fa982610fa17f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006132b1565b60ff166116ac565b90506105a6565b6000610ffc7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006132b1565b9050600061100e6101208501856132ce565b61105b60ff7f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000006131e5565b81811061106a5761106a61323b565b919091013560f81c915050600181161515600282161515600483161580159061109b576110986010866132b1565b94505b82156110af576110ac6010866132b1565b94505b81156110c3576110c06014866132b1565b94505b6110d0878660ff166116ac565b955050505050506105a6565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1615801561114a57503360009081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b156111a557337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610675929190613154565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602081905260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055517f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f249061086b908390613189565b6060600061123161140c565b61123c8585856117e3565b91509150935093915050565b61125281336119a7565b50565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166113495760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112e73390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016105a6565b5060006105a6565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156113495760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016105a6565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461147b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067590613382565b565b60006114898484611a16565b9050600061149f8260c001518360e00151611a9a565b905060008261018001516fffffffffffffffffffffffffffffffff166114e18585608001516fffffffffffffffffffffffffffffffff168587606001516109b5565b6114eb91906131e5565b905060008361012001518211611511578184610120015161150c9190613392565b611521565b6101208401516115219083613392565b9050600061156585602001518661012001518511611543578660400151611546565b86515b876101200151861161155957875161155f565b87604001515b85611abd565b90508061159e576040517f1db0f4fb000000000000000000000000000000000000000000000000000000008152600401610675906133d9565b6000670de0b6b3a764000086606001518761010001516115be91906131c6565b6115c89190613227565b6101a087015190915073ffffffffffffffffffffffffffffffffffffffff16158015906115f457508381115b1561161b57602086015186516101a088015161161b9291906116168886613392565b611b10565b856000015173ffffffffffffffffffffffffffffffffffffffff168660a001517f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000008960200151888b6060015160405161169894939291906133f2565b60405180910390a350505050505050505050565b6000806116bc6020850185612cad565b6020850135608086013560a087013560c088013560e08901356101008a01356116e860608c018c6132ce565b6040516116f6929190613446565b60405180910390208b806040019061170e91906132ce565b60405161171c929190613446565b6040519081900390206117336101208e018e6132ce565b6000906117608f7f00000000000000000000000000000000000000000000000000000000000000006131e5565b9261176d93929190613453565b60405161177b929190613446565b6040519081900381206117999a999897969594939291602001613483565b60405160208183030381529060405280519060200120905080466040516020016117c4929190613518565b6040516020818303038152906040528051906020012091505092915050565b60606000808036816118226117fc6101208b018b6132ce565b7f0000000000000000000000000000000000000000000000000000000000000000611b57565b93509350935093508215801561184857503260009081526002602052604090205460ff16155b1561188157326040517f55d3ab460000000000000000000000000000000000000000000000000000000081526004016106759190613189565b7f000000000000000000000000000000000000000000000000000000000000000060ff168460ff16141580156118dd57507f000000000000000000000000000000000000000000000000000000000000000060ff168460ff1614155b15611914576040517f654a4f2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606060007f000000000000000000000000000000000000000000000000000000000000000060ff168660ff1603611957576119518b85858d611c04565b90925090505b7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff1603611997576119918b85858d8d611da8565b90925090505b909a909950975050505050505050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611a125780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610675929190613154565b5050565b604080516101c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a0810191909152611a9382840184613727565b9392505050565b6000818303611aaa5750816105a6565b610fa983611ab848856131e5565b611f00565b600060405182606052836040528460601b602c526f23b872dd000000000000000000000000600c52602060006064601c60008a5af13d156001600051141716915060006060528060405250949350505050565b6000611b1e85858585611abd565b905080610ef8576040517f1db0f4fb0000000000000000000000000000000000000000000000000000000081526004016106759061377d565b6000803681611b678560016131e5565b861015611ba0576040517fcc32193e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000878787818110611bb457611bb461323b565b919091013560f881901c925060018084161515925060f99190911c9036906000908c908c90611be4908d906131e5565b611bef928290613453565b939d949c509a50919850919650505050505050565b60606000806000366000611c188989611f16565b93509350935093506000611c82611c4f7f00000000000000000000000000000000000000000000000000000000000000008d610f24565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b90506000611cc68285858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061202192505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205491925060ff90911690611d018215898961204b565b9050611d1060208f018f612cad565b73ffffffffffffffffffffffffffffffffffffffff168b7f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000006000806000604051611d7e94939291906137a2565b60405180910390a36040805160208101909152600081529e909d509b505050505050505050505050565b6060600080611db78787612083565b90506000611de8611c4f7f00000000000000000000000000000000000000000000000000000000000000008b610f24565b90506000611dfa828460c00151612021565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604080832054918701519087015193945060ff90911692611e409184159161204b565b90506000611e508d8b888c6127e7565b905082611e655796509450611ef69350505050565b6000611e788a6000808a60a001516109b5565b9050808761010001511115611eb9576040517f79183c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010087015115611eec57611eec87608001518f6000016020810190611edf9190612cad565b89516101008b015161292f565b5096509450505050505b9550959350505050565b6000818310611f0f5781611a93565b5090919050565b600080368160ff7f000000000000000000000000000000000000000000000000000000000000000016851015611f78576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611f87600682888a613453565b611f90916137d7565b60d01c90506000611fa5600c6006898b613453565b611fae916137d7565b60d01c9050366000611fc389600c818d613453565b909250905060408114801590611fda575060418114155b15612011576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9299919850965090945092505050565b600080600080612031868661298c565b92509250925061204182826129d9565b5090949350505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b85612073576000612076565b60015b60ff161717949350505050565b604080516101608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e081018290526101008101829052610120810182905261014081019190915260ff7f000000000000000000000000000000000000000000000000000000000000000016821015612138576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808484828161214b5761214b61323b565b919091013560f81c915050600180821615159060028316151590600484161515906121769086613842565b9450876fffffffffffffffffffffffffffffffff861688612198886006613842565b6fffffffffffffffffffffffffffffffff16926121b793929190613453565b6121c0916137d7565b60d01c60208701526121d3600686613842565b9450876fffffffffffffffffffffffffffffffff8616886121f5886006613842565b6fffffffffffffffffffffffffffffffff169261221493929190613453565b61221d916137d7565b60d01c6040870152612230600686613842565b9450876fffffffffffffffffffffffffffffffff861688612252886014613842565b6fffffffffffffffffffffffffffffffff169261227193929190613453565b61227a9161386e565b60601c608087015261228d601486613842565b9450876fffffffffffffffffffffffffffffffff8616886122af886010613842565b6fffffffffffffffffffffffffffffffff16926122ce93929190613453565b6122d7916138cc565b60801c60608701526122ea601086613842565b9450876fffffffffffffffffffffffffffffffff86168861230c886020613842565b6fffffffffffffffffffffffffffffffff169261232b93929190613453565b6123349161392a565b60a0870152612344602086613842565b9450876fffffffffffffffffffffffffffffffff861688612366886010613842565b6fffffffffffffffffffffffffffffffff169261238593929190613453565b61238e916138cc565b60801c60e08701526123a1601086613842565b9450876fffffffffffffffffffffffffffffffff8616886123c3886014613842565b6fffffffffffffffffffffffffffffffff16926123e293929190613453565b6123eb9161386e565b60601c86526123fb601486613842565b6000610100880152945080156124c057612416856010613842565b6fffffffffffffffffffffffffffffffff16871015612461576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff861688612481886010613842565b6fffffffffffffffffffffffffffffffff16926124a093929190613453565b6124a9916138cc565b60801c6101008701526124bd601086613842565b94505b60006101208701528215612583576124d9856010613842565b6fffffffffffffffffffffffffffffffff16871015612524576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff861688612544886010613842565b6fffffffffffffffffffffffffffffffff169261256393929190613453565b61256c916138cc565b60801c610120870152612580601086613842565b94505b600061014087015281156126465761259c856014613842565b6fffffffffffffffffffffffffffffffff168710156125e7576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff861688612607886014613842565b6fffffffffffffffffffffffffffffffff169261262693929190613453565b61262f9161386e565b60601c610140870152612643601486613842565b94505b612664876fffffffffffffffffffffffffffffffff8716818b613453565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c0870152608086015173ffffffffffffffffffffffffffffffffffffffff166126ee576040517f33c1dac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560a0015160000361272c576040517f5b33c69600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818015612752575061014086015173ffffffffffffffffffffffffffffffffffffffff16155b15612789576040517f497189f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560c00151516040141580156127a557508560c0015151604114155b156127dc576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505092915050565b608082015160a08301516060848101518551610120870151610140880151604080516101c08101909152949695948061282360208e018e612cad565b73ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001868152602001856fffffffffffffffffffffffffffffffff1681526020018b81526020018c60e0013581526020018c610100013581526020018981526020018a610100015181526020016000815260200160008152602001836fffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff168152506040516020016129109190613a93565b6040516020818303038152906040529650505050505050949350505050565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c52602060006064601c6000895af13d15600160005114171661297e57637939f4246000526004601cfd5b600060605260405250505050565b600080600083516041036129c65760208401516040850151606086015160001a6129b888828585612adb565b9550955095505050506129d2565b50508151600091506002905b9250925092565b60008260038111156129ed576129ed613aa2565b036129f6575050565b6001826003811115612a0a57612a0a613aa2565b03612a41576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115612a5557612a55613aa2565b03612a8e576040517ffce698f7000000000000000000000000000000000000000000000000000000008152610675908290600401612d43565b6003826003811115612aa257612aa2613aa2565b03611a1257806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016106759190612d43565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612b165750600091506003905082612bbe565b600060018888888860405160008152602001604052604051612b3b9493929190613ad1565b6020604051602081039080840390855afa158015612b5d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612bb457506000925060019150829050612bbe565b9250600091508190505b9450945094915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461125257600080fd5b80356105a681612bc8565b600060208284031215612c1757612c17600080fd5b6000612c238484612bf7565b949350505050565b8015155b82525050565b602081016105a68284612c2b565b63ffffffff8116612bec565b80356105a681612c43565b600060208284031215612c6f57612c6f600080fd5b6000612c238484612c4f565b600073ffffffffffffffffffffffffffffffffffffffff82166105a6565b612bec81612c7b565b80356105a681612c99565b600060208284031215612cc257612cc2600080fd5b6000612c238484612ca2565b80612bec565b80356105a681612cce565b60008060408385031215612cf557612cf5600080fd5b6000612d018585612ca2565b9250506020612d1285828601612cd4565b9150509250929050565b600060208284031215612d3157612d31600080fd5b6000612c238484612cd4565b80612c2f565b602081016105a68284612d3d565b60008060408385031215612d6757612d67600080fd5b6000612d738585612cd4565b9250506020612d1285828601612ca2565b60008060008060808587031215612d9d57612d9d600080fd5b6000612da98787612cd4565b9450506020612dba87828801612cd4565b9350506040612dcb87828801612cd4565b9250506060612ddc87828801612cd4565b91505092959194509250565b60008083601f840112612dfd57612dfd600080fd5b50813567ffffffffffffffff811115612e1857612e18600080fd5b602083019150836020820283011115612e3357612e33600080fd5b9250929050565b801515612bec565b80356105a681612e3a565b600080600060408486031215612e6557612e65600080fd5b833567ffffffffffffffff811115612e7f57612e7f600080fd5b612e8b86828701612de8565b93509350506020612e9e86828701612e42565b9150509250925092565b6003811061125257600080fd5b80356105a681612ea8565b60008083601f840112612ed557612ed5600080fd5b50813567ffffffffffffffff811115612ef057612ef0600080fd5b602083019150836001820283011115612e3357612e33600080fd5b60008060008060608587031215612f2457612f24600080fd5b6000612f308787612eb5565b945050602085013567ffffffffffffffff811115612f5057612f50600080fd5b612f5c87828801612ec0565b93509350506040612ddc87828801612cd4565b60006105a673ffffffffffffffffffffffffffffffffffffffff8316612f93565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b60006105a682612f6f565b60006105a682612fac565b612c2f81612fb7565b602081016105a68284612fc2565b60ff8116612bec565b80356105a681612fd9565b6000610160828403121561300357613003600080fd5b50919050565b6000806040838503121561301f5761301f600080fd5b600061302b8585612fe2565b925050602083013567ffffffffffffffff81111561304b5761304b600080fd5b612d1285828601612fed565b60008060006060848603121561306f5761306f600080fd5b833567ffffffffffffffff81111561308957613089600080fd5b61309586828701612fed565b93505060206130a686828701612cd4565b9250506040612e9e86828701612cd4565b60005b838110156130d25781810151838201526020016130ba565b50506000910152565b60006130e5825190565b8084526020840193506130fc8185602086016130b7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920192915050565b6040808252810161313c81856130db565b9050611a936020830184612d3d565b612c2f81612c7b565b60408101613162828561314b565b611a936020830184612d3d565b63ffffffff8116612c2f565b602081016105a6828461316f565b602081016105a6828461314b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181028082158382048514176131de576131de613197565b5092915050565b808201808211156105a6576105a6613197565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613236576132366131f8565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60408101613278828561314b565b611a936020830184612c2b565b80516105a681612cce565b6000602082840312156132a5576132a5600080fd5b6000612c238484613285565b60ff9182169190811690828201908111156105a6576105a6613197565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe13685900301811261330757613307600080fd5b80840192508235915067ffffffffffffffff82111561332857613328600080fd5b60208301925060018202360383131561334357613343600080fd5b509250929050565b601581526000602082017f53656e646572206e6f7420456e747279506f696e740000000000000000000000815291505b5060200190565b602080825281016105a68161334b565b818103818111156105a6576105a6613197565b601481526000602082017f5452414e534645525f46524f4d5f4641494c45440000000000000000000000008152915061337b565b602080825281016105a6816133a5565b60ff8116612c2f565b6080810161340082876133e9565b61340d602083018661314b565b61341a6040830185612d3d565b6109e96060830184612d3d565b82818337506000910152565b6000613440838584613427565b50500190565b6000612c23828486613433565b6000808585111561346657613466600080fd5b8386111561347657613476600080fd5b5050820193919092039150565b6101408101613492828d61314b565b61349f602083018c612d3d565b6134ac604083018b612d3d565b6134b9606083018a612d3d565b6134c66080830189612d3d565b6134d360a0830188612d3d565b6134e060c0830187612d3d565b6134ed60e0830186612d3d565b6134fb610100830185612d3d565b613509610120830184612d3d565b9b9a5050505050505050505050565b604081016131628285612d3d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff8211171561359957613599613526565b6040525050565b60006135ab60405190565b90506135b78282613555565b919050565b6fffffffffffffffffffffffffffffffff8116612bec565b80356105a6816135bc565b60006101c082840312156135f5576135f5600080fd5b6136006101c06135a0565b9050600061360e8484612ca2565b825250602061361f84848301612ca2565b602083015250604061363384828501612ca2565b604083015250606061364784828501612cd4565b606083015250608061365b848285016135d4565b60808301525060a061366f84828501612cd4565b60a08301525060c061368384828501612cd4565b60c08301525060e061369784828501612cd4565b60e0830152506101006136ac84828501612cd4565b610100830152506101206136c284828501612cd4565b610120830152506101406136d884828501612cd4565b610140830152506101606136ee84828501612cd4565b61016083015250610180613704848285016135d4565b610180830152506101a061371a84828501612ca2565b6101a08301525092915050565b60006101c0828403121561373d5761373d600080fd5b6000612c2384846135df565b601c81526000602082017f5452414e534645525f544f5f524543495049454e545f4641494c4544000000008152915061337b565b602080825281016105a681613749565b60006105a6612f908381565b612c2f8161378d565b608081016137b082876133e9565b6137bd602083018661314b565b6137ca6040830185613799565b6109e96060830184613799565b80357fffffffffffff0000000000000000000000000000000000000000000000000000168282600682101561383a576138357fffffffffffff0000000000000000000000000000000000000000000000000000836006036008021b90565b831692505b505092915050565b6fffffffffffffffffffffffffffffffff9182169190811690828201908111156105a6576105a6613197565b80357fffffffffffffffffffffffffffffffffffffffff000000000000000000000000168282601482101561383a576138357fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008021b90565b80357fffffffffffffffffffffffffffffffff00000000000000000000000000000000168282601082101561383a576138357fffffffffffffffffffffffffffffffff00000000000000000000000000000000836010036008021b90565b80358282602082101561383a576138357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008021b90565b6fffffffffffffffffffffffffffffffff8116612c2f565b80516101c0830190613990848261314b565b5060208201516139a3602085018261314b565b5060408201516139b6604085018261314b565b5060608201516139c96060850182612d3d565b5060808201516139dc6080850182613966565b5060a08201516139ef60a0850182612d3d565b5060c0820151613a0260c0850182612d3d565b5060e0820151613a1560e0850182612d3d565b50610100820151613a2a610100850182612d3d565b50610120820151613a3f610120850182612d3d565b50610140820151613a54610140850182612d3d565b50610160820151613a69610160850182612d3d565b50610180820151613a7e610180850182613966565b506101a08201516109516101a085018261314b565b6101c081016105a6828461397e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60808101613adf8287612d3d565b61340d60208301866133e956fea264697066735822122049a9c1a3dcf5fa2782f0d7c004b87ccc2187f4a4dd5ee7f6ca1aa008a0f70ea964736f6c634300081a0033", + pad(entryPoint06Address), // entrypoint + pad(owner), // owner + pad(owner), // manager + // couldn't get encodeAbiParameters with type address[] to work + "0x00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000001", + pad(owner) // signer + ]) + +export const getSingletonPaymaster08Address = (owner: Address) => + getCreate2Address({ + from: constants.deterministicDeployer, + salt: constants.create2Salt, + bytecode: getSingletonPaymaster08InitCode(owner) + }) + +export const getSingletonPaymaster07Address = (owner: Address) => + getCreate2Address({ + from: constants.deterministicDeployer, + salt: constants.create2Salt, + bytecode: getSingletonPaymaster07InitCode(owner) + }) + +export const getSingletonPaymaster06Address = (owner: Address) => + getCreate2Address({ + from: constants.deterministicDeployer, + salt: constants.create2Salt, + bytecode: getSingletonPaymaster06InitCode(owner) + }) + +export const sponsorshipIcon = + "data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEAkACQAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCADEAMQDAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+IOv6OP1MKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAHL3pMljsD0FIV2GB6CgLsMD0FAXYYHoKAuwwPQUBdhgegoC7DA9BQF2GB6CgLsa3amhobTKCgAoAKACgAoAKACgAoAKACgAoAKACgAoAcvekyZdB9Ik7fw18M/iR4zsZtU8H/D7xv4r023u3sJ9R8NeFNe12xgvooLe5kspbvS7C6t47uO3u7W4e3eQTJDc28rIEmjZsp1qNN2qVaUHa9p1IRdtr2k07XTXyJlOEHaU4xe9pSSdu+rR0P/ChPjn/ANEX+LH/AIbnxh/8pqj63hf+gmh/4Op//JC9rS/5+0//AAOP+Yv/AAoT46f9EX+LH/hufGH/AMpqPreF/wCgmh/4Op//ACQe1pf8/af/AIGv8w/4UJ8dP+iL/Fj/AMNz4w/+U1H1vC/9BND/AMHU/wD5IPa0v+ftP/wNf5h/woT46f8ARF/ix/4bnxh/8pqPreF/6CaH/g6n/wDJB7Wl/wA/af8A4Gv8w/4UJ8dP+iL/ABY/8Nz4w/8AlNR9bwv/AEE0P/B1P/5IPa0v+ftP/wADX+Yf8KE+On/RF/ix/wCG58Yf/Kaj63hf+gmh/wCDqf8A8kHtaX/P2n/4Gv8AMafgH8dTjHwW+LJ/7pz4w/8AlNVRxOGe2IoP/uNT/wDkhqtR1/e0/wDwOP8AmO/4Z/8Ajp/0Rf4s/wDhufGH/wApqv6xh/8An/R/8G0//kifrNH/AJ+0/wDwOP8A8kH/AAz/APHT/oi/xZ/8N14w/wDlNR9Yw/8Az/o/+Daf/wAkH1mj/wA/af8A4HH/AOSD/hn/AOOn/RF/iz/4brxh/wDKal9Yw/8Az/o/+Daf/wAkH1ml/wA/Kf8A4HH/AOSOc8S/C74k+DbNNR8XfD7xx4V0+SUQR3/iTwnr2h2ckxGRCl1qdhawPKeojVy+O1XGrSm7Qq05vtCcZP7otsuFanN2jOEn2jJN/cmzhtp9q0sXzLzDafaiwcy8xdnvRYObyDZ7/p/9eiwc3kGz3/T/AOvRYObyDZ7/AKf/AF6LBzeQbPf9P/r0WDm8hlIoKACgAoAcvekyZdB9Ik/0pP8AgzjBP/BMv46+37dvxLA+n/DPn7MB/LJNfk/HkIxzjDWWkstpSbu9/rWMWmvkrnx/ETf12mv+oal/6VM/rKxXxVl5/e/8z5+3mvuQYosvP73/AJhbzX3IMUWXn97/AMwt5r7kGKLLz+9/5hbzX3IMUWXn97/zC3mvuQYosvP73/mFvNfcg2juAfqKa02uvm/8xrT+rBtX0H5Ua9397/zANq+g/KjXu/vf+YWXZfcG1fQflRr3f3v/ADCy7L7jj/H/AMPfAnxU8G+Ifh58S/B3hnx94F8V6dPpPiXwf4v0XT/EPhzXdNuBiWy1TR9Ut7mxvIGIV1WeF/LlRJYyksaOulKrVoVI1aNSdOpB3hOE5RlFrqmndf0ioTlTkp05OEou6lF2afk0f463/BWr9l3wT+xh/wAFG/2sf2bPhqblPh78O/iRBP4IsbueS7n0Xwp468K+HfiPoPhxryYme9Xw1pfi+18PxXlyz3V1FpqT3UstzJLI37pkWMq5hleExddp1atN+0cVZOcJzpylbZOXJzNKyu3ZJWR+g5fXnicHQrVHecoe80rXcW4N/Plv89NND8669g7AoAKACgAoAKAIak0CgAoAKAHL3pMmXQfSJP6pv+CHH/BwJ8Ef+CU37KHxD/Z5+JXwE+KnxS1zxn+0P4q+M9p4g8D634U0zSbPSvEPw1+EvgaHRriDXriK7fULe8+HV9fSzRKbZrbUbREJljmx8dxHw1iM7xtHE0cTQoxpYSGHcaqm5OUa1eq5LlTVrVku90zxMzyqrj8RCtCrTpqNGFO01K94uTvov7x+zH/EZz+yf/0Z3+0L/wCFX8Of/k2vA/1Cxv8A0H4T/wABrf8AyJ53+rmI/wCgmh90/wDIP+Izn9k//ozv9oX/AMKv4c//ACbR/qFjf+g/Cf8AgNb/AORD/VzEf9BND7p/5B/xGc/sn/8ARnf7Qv8A4Vfw5/8Ak2j/AFCxv/QfhP8AwGt/8iH+rmI/6CaH3T/yD/iM5/ZP/wCjO/2hf/Cr+HP/AMm0f6hY3/oPwn/gNb/5EP8AVzEf9BND7p/5B/xGc/sn/wDRnf7Qv/hV/Dn/AOTaP9Qsb/0H4T/wGt/8iH+rmI/6CaH3T/yD/iM5/ZP/AOjO/wBoX/wq/hz/APJtH+oWN/6D8J/4DW/+RD/VzEf9BND7p/5B/wARnH7KHb9jv9oT8fF3w3X8gb3JqJcCY6P/ADG4V+kav6oT4dxC/wCYik/SM/8AIT/iM5/ZR/6M5/aF/wDCu+G3/wAnUf6i43/oMof+C6ov9Xa//P8Apf8AgMg/4jOf2Uf+jOf2hf8Awrvht/8AJ1H+ouN/6DKH/gqqH+rtf/n/AEv/AAGR+nf/AASn/wCC/fwU/wCCrfx58cfAX4bfAX4o/CzWfA3wk1X4uXeu+ONd8J6npl9pmk+MfBXg6XSbaDQLia6S+luvG1peJNKBbrb2VwjHzJIgfHzjh3EZPQp161elVjUrKilCM4yTdOdTmfMrWtBrvdo48blVXBU1VnVhNOSjaKknqm7u+nQ/fevnjyj/ACR/+DjYAf8ABaP9uHHfxN8JCfr/AMM8fCGv2rhV2yLA6/Yq/wDqRWPvMn/5F+H/AMM//Tkz8SK+kT7s9MWmAUwCgAoAKAIak0CgAoAKAHKQM0mS0O3D1pWYrM6zwN4D8cfE7xVo3gX4beDfFXxA8a+Irn7FoHhDwV4e1fxT4n1u72NKbbSdB0OzvtU1CdYkkleO0tZXSKOSVgERmGdWpToQlVrVIUqcfinUlGEFfRXlJqK+bRM5Rpxc5yjCK3lKUYxXrKTSXzZ95R/8Eff+CqEsaSp/wT2/a8KSIrrv+BPxAibawBG6OXRUkjYA/MjorKcggGvNee5Mrp5ngrrp7aL19Y3T+TON5ll6dnjMPfyqxf4q6+5jv+HPf/BVL/pHt+11/wCGN8ef/Keo/t/KOuY4O3lWiV/aGAf/ADG4b/wdD8r3D/hz3/wVS/6R7ftdf+GN8ef/ACno/wBYck/6GWE/8HwD6/gf+gzDf+DY/wCYf8Oe/wDgql/0j2/a6/8ADG+PP/lPR/rDkn/Qywn/AIPgH1/A/wDQZhv/AAbH/MP+HPf/AAVS/wCke37XX/hjfHn/AMp6P9Yck/6GWE/8HwD6/gf+gzDf+DY/5h/w57/4Kpf9I9v2uv8Awxvjz/5T0f6w5J/0MsJ/4PgH1/A/9BmG/wDBsf8AMX/hz1/wVR7/APBPf9rkfX4G+PP/AJT0f29k0vhzLB6d8RTX5tB/aOAW+MofKfN+V7B/w56/4Kof9I+f2uP/AAxvj3/5TVazzJ7X/tLBf+FNL9ZC/tLLv+gyj97/AMj49+N3wA+N37NfjY/Db9oD4U+Pfg34/XSbDXm8G/EbwzqnhPxGNF1UzrpuqHStXt7W7+w3xtbkWtyIzFMYJQjEowHbhsXhsbT9thK9LEUlKUHUpSU4c8fijzLS66nTTq0q0eelUjUg9pRd0f0//wDBm/8A8pGv2gv+zK/GZ/L45fAOvkOPP+RXhP8AsYQX/ltif8jxeIP90g/+nyX/AJJI/wBJKvys+NP8kf8A4ON/+U0f7cH/AGMvwj/9Z4+EVftHC/8AyIsB/gq/+pFY+9yf/kXYbzjP/wBO1F+h+JFfSHpC1a2QBTAKACgAoAhqTQKACgAoAKACgD/Qv/4M2v2cfhjD+zH+0j+1hceHNMvfjBq/x/1T4C2Pie8s4LjVPD3gLwd8Nvhf47n0vRLyRWl02DxJrfxHefXUtTGdQXQNEW5aRLKFV/MOPMXW+uYTBKclh/qqxMoKVoyqyrV6alJLdxjTtG+15NbnyHEVaft6VDmfs/ZKpyptJyc5xu+9lGy7Xfc/tD2+7fma/P7I+b+YbR6n8zRyoPn+X+QbR7/nRZef3k8q8/vDaPf86LLz+8OVef3htHv+dFl5/eHKvP7w2j3/ADosvP7w5V5/eKBimlYaVhaBn+X7/wAHaf8Aylmuv+zbvg3/AOlnjSv1vge39iK3/QXXv62p/pY+1yD/AHF/9f6n/tp7j/wZvf8AKRv9oL/syrxn/wCry+AVYcef8ivB/wDYxp/+o2KI4g/3OH/X+P8A6RM/0ka/Kz40/wAkb/g42/5TR/tw/wDYzfCT/wBZ4+ENftHC/wDyIsv/AMFX/wBSax97k/8AyLsL/hqf+n6p+JNfSHpC1a2QBTAKACgAoAhqTQKACgAoAKACgD/Sq/4M5P8AlGX8df8As+z4l/8ArP37MNfk/Hf/ACNsN/2LqX/qVjD4riL/AH2l/wBgy/8ATtU/q91K7Nhp1/fLGJTZ2dzdCItsEht4Xl2b9rbN+zbu2ttznacYPxcVzSiu7S+88JK7S7tL72kfwNzf8HpPxRilljH7APgIiOR0BP7QfiAEhGK5IHwnwCcZx26V+kf6gU3qszqRXZ4WEmvV/WF+R9T/AKtJaPFyb6tU4pfL3mR/8RpnxR/6MA8Bf+JB+IP/AJ09L/iH8P8AoaT/APCOP/zSH+ra/wCgqX/guP8A8kH/ABGmfFH/AKMA8Bf+JB+IP/nT0f8AEP4f9DSf/hHH/wCaQ/1bX/QVL/wXH/5IP+I0z4o/9GAeAv8AxIPxB/8AOno/4h/D/oaT/wDCOP8A80h/q2v+gqX/AILj/wDJB/xGmfFH/owDwF/4kH4g/wDnT0f8Q/h/0NJ/+Ecf/mkP9W1/0FS/8Fx/+SD/AIjTfih3/YB8Bj6ftB+IP/nTVMuAoRt/wpTf/crFf+52H+rcOuLqL0owl+c0L/xGm/E7/owHwH/4kH4g/wDnTVP+ocf+hjP/AMJo/wDy4P8AVun/ANBtX/wRD/5afzTf8FUv+Cimt/8ABUH9qmb9p/Xvhbpfwfvpfh34Q+Hw8H6R4qu/GNosHhKTWJY9TOs3uh+Hpmlvm1eQPbf2cqQCFAsspckfXZHlSyfA/U1Wdde2qVfaSgoP31FcvKpSWnLvfXsezgcHHA0PYxqSq+/KfNKCh8SWllKXbv1P28/4M3v+UjX7QX/ZlXjP/wBXl8Aq8Djz/kV4P/sY0/8A1GxR53EH+50/+v8AH/0iZ/pI1+Vnxp/kjf8ABxt/ymj/AG4f+xm+Ef8A6zx8Ia/aOF/+RFl/+Cr/AOpNY+9yf/kXYX/DU/8AT9U/EmvpD0hatbIApgFABQAUAQ1JoFABQAUAFABQB/pV/wDBnJ/yjK+On/Z9nxM/9Z+/Zhr8n48/5G+G/wCxdR/9ScWfFcRf77R/7BY/+nqx/Vj4h/5AGuf9gjUv/SOavidtTwo/FH/FH/0pH+Fnd/8AH1c/9d5v/RjV/RkPgj6I/U3v935H0p+yx+xn+1D+2z48uvhr+yz8FvGXxl8XadYx6prNp4Zt7O30zw9pcs62sWpeJvE2t3mleGPDVlPct9ntbnXtY06K7uA0Fs0sqOg5MdmOCy2kq2NxEMPTk+WLlduTte0YxTlJ+idupzV8TQw0eatUUE3ZX1bfWyV27eh+oH/ENN/wWfPP/DIQH1+NvwAz9Dj4nkZHfHHpXj/63ZB/0G/+Ua3/AMrOP+2cu/6CEvWE/wD5EX/iGl/4LQf9Ghr/AOHt+AP/AM8+k+L8gX/MY36UK/8A8rE86y5f8v7+kJ//ACIf8Q0v/BaD/o0Nf/D2/AH/AOefT/1vyD/oNf8A4Ir/APysP7ay7/n/AP8AlOf/AMiH/ENJ/wAFnz1/ZDH4fG34Af1+J9TLizIpbYz/AMo1/wD5WJ51l3/P/wD8kn/8iJ/xDR/8Fnv+jQx/4e34Af8Azz6n/WvIv+gz/wAo1v8A5WL+2cu/5/8A/kk//kRf+IaP/gs9/wBGh/8AmbfgB/8APPqlxZkXXG/+Ua//AMrD+2cu/wCf/wD5JP8A+RP6JP8Ag2p/4JGft/fsA/tp/GH4s/tXfAv/AIVh4C8U/sweJvh5oWuf8LC+GPi77b4u1D4q/CLxJaaV9g8E+MfEOp2/m6N4Y1u8+2XNnFYr9i8h7lbie3im+X4tzvLczwOGo4LEe2qQxkas4+zqQtTVCvByvOEU/enFW31v0PJzjMMLisPCFCrzyVTma5ZxsuWSv70Ut2j+2uvgD5k/yR/+Djf/AJTR/twf9jL8I/8A1nn4RV+0cL/8iLAf4Kv/AKkVj73J/wDkX4f0n/6cmfiRX0h6QtWtkAUwCgAoAKAIak0CgAoAKACgAoA/0q/+DOT/AJRlfHT/ALPs+Jn/AKz9+zDX5Px5/wAjfDf9i6j/AOpOLPiuIv8AfaP/AGCx/wDT1Y/qx8Q/8gDXP+wRqX/pHNXxJ4Ufij/ij/6Uj/Czu/8Aj6uf+u83/oxq/oyn8EfRH6m9/u/I/wBRH/g1L+FfgjwT/wAEmfAvjzw/oVjZeLfjH8U/i54n8fa8lvENT12+8MeNtW8AeH4Lq92/aJLDR/D3hiyh0+xaQ2tpc3WqXUEUc+pXsk/4/wAaVqtXOqlOdSTp4ejRp0qd/cgpU1Uk0tlKUptyfxNcqbskl8JntWc8wlBv3adOEYLtdKUvvuv62/pTr5KyPGCjlXmAUcq8wCmlYAoAKACgAPAoA/yI/wDg4K8X+HPHP/BYz9ubXvCurWOt6TB8RfCPheS+0+5iurddd8C/CT4e+B/FenGWFnT7Ro3inw7rOj3ke7dDeWE8MgWSN1X9t4XpuOR4CM4yi/ZSmk1a8alWpUhJd1KEoyT6ppn32Uxccvwye7hKVvJ1JNP5ppo/G0CvfaZ6aSYuBVLZDsgwKYWQYFAWQYFAWQYFAWRBSGFABQAUAOXvSZLHYHoKQrs/0pf+DOMk/wDBMv46f9n2fEz/ANZ//ZiH9K/JuOZXzahfpgKa+7EYr/M+L4gk3jqflh4r/wAq1f1/U/qz8Q/8gDW/+wRqP/pHNXxqV2l30+88RfFH/HD/ANKR/hZ3nF3c/wDXxMPykav6LgnyRT0aSUl2fVH6i5aJ23S/JH+qv/wa85/4c0fs4k/9Df8AHr/1dnjj/P4V+NcY6Z/i49PZ4WXzlh6bZ8DnOuY1319xf+SR/wAj9h/2ufiv4j+A/wCyp+0x8cPB9po9/wCLfg3+z98Zvir4XsfEVveXfh+98RfDz4c+JPF2i2mu2mnX+lahdaNc6lpFtDqdtY6ppl5PZPNFa6hZzulxH4ODowxGLw2Hm2oV69GlJxaUlGpUhCTi2mk0pNptNJ7pnBQp+1rUabvy1KtOEmt1GclFtX6q5/nq/wDEYn/wU7/6I3+w9/4bD44//RH1+lrgLKGrvE5nrr/Hw3/zIfWf6vYP/n7iP/Aqf/yoT/iMT/4Kd/8ARGv2Hv8Aw2Hxx/8Aoj6P9Qsn/wCgnM//AAfhv/mQf+r2D/5+4j/wKn/8qEb/AIPFP+Cnf/RGv2H/APw2PxyH8v2kKuPAeUL/AJiMxfrXo/8AtuGiC4dwb/5e4j/wKn/8rG/8Rin/AAU8/wCiN/sP/wDhsvjn/wDRIU/9Q8o/5/5h/wCD6f8A8pH/AKu4P/n7iPvp/wDysP8AiMU/4Kef9Eb/AGH/APw2Pxz/APokKP8AUPKP+f8AmH/g+n/8oD/V3B/8/cR99L/5WH/EYr/wU8/6I1+w9/4bH45//RI0f6hZP/0EZj/4Ppf/ADOH+ruD/wCfuI++j/8AKjyT41f8HYv/AAVY+L3gTWfA+hv+zx8C5tbs7rT7nxv8Fvhx4wsPHVnaXsLW840bV/iJ8TfiRYaLeCN3Ntq+l6Ra6zp8xW607ULS7igni2ocEZNRqRqSeLxCi7+yr1oypS7c8YU6bkv7rfK1pJNG1LIcDTalL2tWzTSqSjy6d1CEb+jdu6Z/NXqeralreo3+saxf3uravqt7danquq6nd3F/qWp6lfTyXV9qGoX128t1e315cyy3F3d3MstxczySTTSPI7MfroQjTioxSUUlGMUkoxilZJJaJJaJLRJJJaHr8iW1klskv8ijv9v1qxpW6/h/wRfM9qQ9f6X/AAQ8z2oDX+l/wQ8z2oDX+l/wQ8z2oDX+l/wQ8z2oDX+l/wAEjoGFABQAUAOXvSZMug+kSf6Uv/BnH/yjK+On/Z9nxM/9Z/8A2Yf/AK9fknHP/I2w/wD2BUv/AFKxif4JHxeff77H/rxH/wBO1v8AgH9WfiD/AJAOt/8AYJ1H/wBI5q+Pjo0+zPEW8f8AFH/0pH+Fje/8fd37XM//AKNav6Hpzbpxvq+VXfXY/UUrxj6L8kf6rX/Br1/yhn/Zw/7G/wCPf/q7fHNfjvF//I/xn+DC/wDqPTPg87/5GVf0p/8Apqmfpx/wUk/5R3/t5H0/Yx/ai/8AVH+Oa8jK/wDkZYD/ALDMN/6fpnFhL/W8Kl1xNH/04j/FjJya/eo6JI/R99T+in9mf/g2J/4KLftW/AL4TftHfDPxZ+y/Z+APjL4L0jx54StfFnxL8daX4kg0XWofPs49Z07TvhRrFlZ36p/r4LbVL6JG4W4frXy+M4wyzBYqvhKtPFuph6jpzlClFwcla/K3NXS2vbdM8itnWDoVp0ZqrzQk4ytBWTXrJP8AAxv2t/8Ag2k/4KEfsY/s6fFH9p74t+K/2Z774c/CHRLPX/FVp4L+I3jfWPFE1jfa3pWgQro+map8LNCsby4F9q9q7x3GrWSi3WZ1kaREik0wHFuV4/F0MHRhi1VxE1CMp0qagnZv3mqsmlZfyvoOhnWFr1oUacK3NUdk3GCXf/n43t5H89VfUntBQAUAFABQAUAFABQAUAFABQAUAFABQAUAKDii1xNXF3H2pWFZH+lR/wAGcf8AyjK+On/Z9nxM/wDWf/2Y/wDCvyPjj/kbUP8AsCh/6lYo+Jz7/fYf9eF+FWsf1Z+IP+QDrf8A2CdR/wDSOavj1ueIt4/4o/8ApSP8LK8/4/Lv/r5n/wDRr1/QlL+HH/CvyP1KPwx/wr8kf6A3/BBj/gtl/wAExv2NP+CZXwT/AGf/ANpT9puL4a/F3wl4l+Lt94g8Iv8ACH49eLGsLTxN8UvFfiLQ5v7b8C/C7xP4buhfaNqVleBLPWLiS3E/kXaQXMcsKfnHEnD+b47N8TicJg51qFSGHUKiqUYqThRhCWk6kZaSTTut12Pks0yvHYjHVq1GhKdOShaXNBXtTgno5J6NNao+6/23P+DhX/gj78XP2Mv2t/hT8Pf2v4PEPj74mfsyfHr4feCNAHwL/aW0s634v8Z/CrxX4c8NaQNS1r4Nado+nnUtZ1KyshfarqFjptoZ/tF9eWtrHLOnnYDhnPaGNwlapgJxp0sVh6lSXtaD5acK0JTlZVW3aKbsk32Ry4bJ8xp4nDVJ4aShTrU5zfPDSMZxcnpJt2Sb0XQ/zBO9frii7X9T7VKzS8z/AGJv+CJ3/KJr9gH/ALNr+Hv/AKQPX4dxF/yOcx/7Cqn5n55mf/Ixxn/X9nnP/BwL/wAoc/26/wDsmHh7/wBWf4Eq+Gv+R5l7Wlqz/wDTVT8uhWWaY/Df4p/+m5H+QzX7mfogUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAf6VP/BnH/yjK+On/Z9nxL/9UB+zHX5Fxx/yNqH/AGBw/wDUnFHxGff75D/rwv8A09WP6s/EP/IB1v8A7BGo9Bk/8ec3Ycn8K+PW6XdpfN6I8Nbx/wAUf/Skf4gt38DfjWbq6YfB/wCKJBuJiCPAHisggyMQeNJ7iv6BpVaSpxbrUkuVaurC2i6Pm1P06NWi4Raq0mnFf8vI9vW5X/4UZ8bP+iPfFL/w3/iz/wCVNX7eh/z/AKH/AIOp/wDyRXtaX/P2n/4HH/MP+FGfGz/oj3xS/wDDf+LP/lTR7eh/z/of+Dqf/wAkHtaX/P2n/wCBx/zA/A341gZPwe+KWPX/AIV/4s/+VFCxOHWn1ih6e2pdv8QvaUv+flK/+OH+Z/rwf8EYdM1LRf8AglT+wZpWsaffaVqlh+zj4Atb/TdStJ7G/srmKxdZbe7s7qOK4tp42yskU0aSIwIZQa/EeIZRlnGYyi1KLxVS0otNPXo1dM/PMyaeYYtppp13Zp3T801o0eV/8HAv/KHP9uz/ALJh4e/9Wf4Eq+Gf+R5l/wD1+f8A6bqFZZ/yMML/AIp/+m5H+QzX7ofooUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAf6Uv8AwZxTRN/wTP8AjvCHQyx/t0/EiR4wwLrHL8AP2ZxE7LnIR2ilVGIwxjcAnacfkfHC/wCFWh/2BR+9YrF/193c+Hz92xsE+tBf+nax/WfXxp4g3aOwA+gFLbRILJ77+i/UNopXfZfcKy8vuj/kG0UXfZfcFl5fdH/INopqUu1vkFl5fdH/ACFxQ1f/AIYLL+v+AfjX/wAHBtzbWn/BHD9umS5nit0k+G/hW1RppFjV7i9+K/w/s7SBSxAMtzdTw28KD5pJpUjUFmAr3eGYt57l1tf3s2/SNCrJ/gj0MrV8ww1t+af/AKbmf5EJUjtX7kfod/kGD6H8qAuu4YPofyoC67hg+h/KgLruGD6H8qAuu4YPofyoC67hg+h/KgLruGD6H8qAuu4YPofyoC67hg+h/KgLruGD6H8qAuu4lAwoAKACgAoAKAP22/4I1f8ABar4tf8ABJPxv41tbPwRbfGX4A/FifS734i/Cq716fw1qtp4g0a2ns9M8a+A/EX2PV7LRfEMdpOthrVrqOh6lp/ibSbWz0+4Om3dlpmsad87nuQUc5hBup7DE0rqnWUOdOL3hUhzR5o3V01JSi7tXu0/IzLLKePUXz+yrU78tTl5k4veEldNq6umndO71u0/6mYv+DzX9kAxp5v7In7SKSlV8xI9f+GMiK+PmVJG16FnUHhWaKMsMEopOB8a+A8fd2x2Da6Nxrpv5KnK33v1PE/1dxP/AD/oP5VF/wC2kn/EZn+x9/0aL+0p/wCDz4X/APzRUv8AUTH/APQdg/ur/wDyoP8AV3Ff8/8AD/8AlX/5WH/EZn+x9/0aL+0p/wCDz4Xf/NFR/qJj/wDoOwf3V/8A5UH+ruK/5/4f/wAq/wDysP8AiMz/AGPv+jRf2lP/AAefC/8A+aKj/UTH/wDQdg/ur/8AyoP9XcV/z/w//lX/AOVh/wARmX7H3/Rov7Sn/g8+F/8A80VH+omP/wCg3B/dX/8AlQv9XcV/z/w//lT/AOQF/wCIzL9j7/o0b9pP/wAHnwv/APmio/1Ex/8A0G4P7q//AMrH/q7iv+f9D/yp/wDIH4G/8Fnf+Divx/8A8FOfhtZ/s3/Cf4VXfwG/Z0bXNL8SeNrTXvEVv4n+IHxQ1Xw/eJqPhu01y50yz0/RPD3hTRNUjt9Zj8OWQ1u5v9e07StWudeSOwg01PpMg4Wp5RWeLr11icVyuNPli4U6KmnGbjduU5Si+XmkopRcko63PVy3J1g5+2qTVSrZqPKnGME97Xd5SfdpWTtbqfzSV9fHqe41cMVdxcq8wxRcOVeYYouHKvMMUXDlXmGKLhyrzDFFw5V5hii4cq8wxRcOVeYYouHKvMMUXDlXmQUigoAKACgAoAKAJR0H0FHL5kPdhRy+Ygo5fMAo5fMAo5fMAo5fMAo5fMBRUtWLjt8x1EeowqgCgAoAKACgAoAKACgAoAKAK9ABQAUAFABQAUASjoPoKZm936i0wCgAoAKACgAoAUVEuhcdvmLSj1GFUAUAFABQAUAFABQAUAFABQBXoAKACgAoAKACgCUdB9BTM3u/UWmAUAFABQAUAFACiol0Ljt8xaUeowqgCgAoAKACgAoAKACgAoAKAK9ABQAUAFABQAUASjoPoKZm936i0wCgAoAKACgAoAUVEuhcdvmLSj1GFUAUAFABQAUAFABQAUAFABQBXoAKACgAoAKACgCUdB9BTM3u/UWmAUAFABQAUAFACiol0Ljt8xaUeowqgCgAoAKACgAoAKACgAoAKAK9ABQAUAFABQAUASjoPoKZm936i0wCgAoAKACgAoAUVEuhcdvmLSj1GFUAUAFABQAUAFABQAUAFABQAP/Z" diff --git a/packages/mock-paymaster/helpers/abi.ts b/packages/mock-paymaster/helpers/abi.ts index 79f4b41f..f216b457 100644 --- a/packages/mock-paymaster/helpers/abi.ts +++ b/packages/mock-paymaster/helpers/abi.ts @@ -1,1046 +1,1048 @@ -export const SINGLETON_PAYMASTER_V07_ABI = [ +export const singletonPaymaster06Abi = [ { - type: "constructor", + inputs: [ + { internalType: "address", name: "_entryPoint", type: "address" }, + { internalType: "address", name: "_owner", type: "address" }, + { internalType: "address[]", name: "_signers", type: "address[]" } + ], + stateMutability: "nonpayable", + type: "constructor" + }, + { inputs: [], name: "ECDSAInvalidSignature", type: "error" }, + { + inputs: [{ internalType: "uint256", name: "length", type: "uint256" }], + name: "ECDSAInvalidSignatureLength", + type: "error" + }, + { + inputs: [{ internalType: "bytes32", name: "s", type: "bytes32" }], + name: "ECDSAInvalidSignatureS", + type: "error" + }, + { inputs: [], name: "ExchangeRateInvalid", type: "error" }, + { + inputs: [{ internalType: "address", name: "owner", type: "address" }], + name: "OwnableInvalidOwner", + type: "error" + }, + { + inputs: [{ internalType: "address", name: "account", type: "address" }], + name: "OwnableUnauthorizedAccount", + type: "error" + }, + { inputs: [], name: "PaymasterAndDataLengthInvalid", type: "error" }, + { inputs: [], name: "PaymasterConfigLengthInvalid", type: "error" }, + { inputs: [], name: "PaymasterModeInvalid", type: "error" }, + { inputs: [], name: "PaymasterSignatureLengthInvalid", type: "error" }, + { + inputs: [{ internalType: "string", name: "msg", type: "string" }], + name: "PostOpTransferFromFailed", + type: "error" + }, + { inputs: [], name: "TokenAddressInvalid", type: "error" }, + { + anonymous: false, inputs: [ { - name: "_entryPoint", - type: "address", - internalType: "address" - }, - { - name: "_owner", - type: "address", - internalType: "address" + indexed: true, + internalType: "address", + name: "previousOwner", + type: "address" }, { - name: "_signers", - type: "address[]", - internalType: "address[]" + indexed: true, + internalType: "address", + name: "newOwner", + type: "address" } ], - stateMutability: "nonpayable" + name: "OwnershipTransferred", + type: "event" }, { - type: "function", - name: "addSigner", + anonymous: false, inputs: [ { - name: "_signer", - type: "address", - internalType: "address" + indexed: false, + internalType: "address", + name: "signer", + type: "address" } ], - outputs: [], - stateMutability: "nonpayable" + name: "SignerAdded", + type: "event" }, { - type: "function", - name: "addStake", + anonymous: false, inputs: [ { - name: "unstakeDelaySec", - type: "uint32", - internalType: "uint32" + indexed: false, + internalType: "address", + name: "signer", + type: "address" } ], - outputs: [], - stateMutability: "payable" - }, - { - type: "function", - name: "deposit", - inputs: [], - outputs: [], - stateMutability: "payable" + name: "SignerRemoved", + type: "event" }, { - type: "function", - name: "entryPoint", - inputs: [], - outputs: [ + anonymous: false, + inputs: [ { - name: "", - type: "address", - internalType: "contract IEntryPoint" + indexed: false, + internalType: "address", + name: "oldTreasury", + type: "address" + }, + { + indexed: false, + internalType: "address", + name: "newTreasury", + type: "address" } ], - stateMutability: "view" + name: "TreasuryUpdated", + type: "event" }, { - type: "function", - name: "getCostInToken", + anonymous: false, inputs: [ { - name: "_actualGasCost", - type: "uint256", - internalType: "uint256" + indexed: true, + internalType: "bytes32", + name: "userOpHash", + type: "bytes32" }, { - name: "_postOpGas", - type: "uint256", - internalType: "uint256" + indexed: true, + internalType: "address", + name: "user", + type: "address" }, { - name: "_actualUserOpFeePerGas", - type: "uint256", - internalType: "uint256" + indexed: false, + internalType: "uint8", + name: "paymasterMode", + type: "uint8" }, { - name: "_exchangeRate", - type: "uint256", - internalType: "uint256" - } - ], - outputs: [ + indexed: false, + internalType: "address", + name: "token", + type: "address" + }, { - name: "", - type: "uint256", - internalType: "uint256" + indexed: false, + internalType: "uint256", + name: "tokenAmountPaid", + type: "uint256" + }, + { + indexed: false, + internalType: "uint256", + name: "exchangeRate", + type: "uint256" } ], - stateMutability: "pure" + name: "UserOperationSponsored", + type: "event" + }, + { + inputs: [{ internalType: "address", name: "_signer", type: "address" }], + name: "addSigner", + outputs: [], + stateMutability: "nonpayable", + type: "function" + }, + { + inputs: [ + { internalType: "uint32", name: "unstakeDelaySec", type: "uint32" } + ], + name: "addStake", + outputs: [], + stateMutability: "payable", + type: "function" + }, + { + inputs: [], + name: "deposit", + outputs: [], + stateMutability: "payable", + type: "function" }, { - type: "function", - name: "getDeposit", inputs: [], + name: "entryPoint", outputs: [ - { - name: "", - type: "uint256", - internalType: "uint256" - } + { internalType: "contract IEntryPoint", name: "", type: "address" } ], - stateMutability: "view" + stateMutability: "view", + type: "function" }, { - type: "function", - name: "getHash", inputs: [ { - name: "_mode", - type: "uint8", - internalType: "uint8" + internalType: "uint256", + name: "_actualGasCost", + type: "uint256" }, + { internalType: "uint256", name: "_postOpGas", type: "uint256" }, + { + internalType: "uint256", + name: "_actualUserOpFeePerGas", + type: "uint256" + }, + { internalType: "uint256", name: "_exchangeRate", type: "uint256" } + ], + name: "getCostInToken", + outputs: [{ internalType: "uint256", name: "", type: "uint256" }], + stateMutability: "pure", + type: "function" + }, + { + inputs: [], + name: "getDeposit", + outputs: [{ internalType: "uint256", name: "", type: "uint256" }], + stateMutability: "view", + type: "function" + }, + { + inputs: [ + { internalType: "uint8", name: "_mode", type: "uint8" }, { - name: "_userOp", - type: "tuple", - internalType: "struct PackedUserOperation", components: [ { + internalType: "address", name: "sender", - type: "address", - internalType: "address" + type: "address" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, + { internalType: "bytes", name: "initCode", type: "bytes" }, + { internalType: "bytes", name: "callData", type: "bytes" }, { - name: "nonce", - type: "uint256", - internalType: "uint256" + internalType: "uint256", + name: "callGasLimit", + type: "uint256" }, { - name: "initCode", - type: "bytes", - internalType: "bytes" - }, - { - name: "callData", - type: "bytes", - internalType: "bytes" + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256" }, { - name: "accountGasLimits", - type: "bytes32", - internalType: "bytes32" + internalType: "uint256", + name: "preVerificationGas", + type: "uint256" }, { - name: "preVerificationGas", - type: "uint256", - internalType: "uint256" + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256" }, { - name: "gasFees", - type: "bytes32", - internalType: "bytes32" + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256" }, { + internalType: "bytes", name: "paymasterAndData", - type: "bytes", - internalType: "bytes" + type: "bytes" }, - { - name: "signature", - type: "bytes", - internalType: "bytes" - } - ] - } - ], - outputs: [ - { - name: "", - type: "bytes32", - internalType: "bytes32" + { internalType: "bytes", name: "signature", type: "bytes" } + ], + internalType: "struct UserOperation", + name: "_userOp", + type: "tuple" } ], - stateMutability: "view" + name: "getHash", + outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], + stateMutability: "view", + type: "function" }, { - type: "function", - name: "owner", inputs: [], - outputs: [ - { - name: "", - type: "address", - internalType: "address" - } - ], - stateMutability: "view" + name: "owner", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "view", + type: "function" }, { - type: "function", - name: "postOp", inputs: [ - { - name: "mode", - type: "uint8", - internalType: "enum PostOpMode" - }, - { - name: "context", - type: "bytes", - internalType: "bytes" - }, - { - name: "actualGasCost", - type: "uint256", - internalType: "uint256" - }, - { - name: "actualUserOpFeePerGas", - type: "uint256", - internalType: "uint256" - } + { internalType: "enum PostOpMode", name: "mode", type: "uint8" }, + { internalType: "bytes", name: "context", type: "bytes" }, + { internalType: "uint256", name: "actualGasCost", type: "uint256" } ], + name: "postOp", outputs: [], - stateMutability: "nonpayable" + stateMutability: "nonpayable", + type: "function" }, { - type: "function", + inputs: [{ internalType: "address", name: "_signer", type: "address" }], name: "removeSigner", - inputs: [ - { - name: "_signer", - type: "address", - internalType: "address" - } - ], outputs: [], - stateMutability: "nonpayable" + stateMutability: "nonpayable", + type: "function" }, { - type: "function", - name: "renounceOwnership", inputs: [], + name: "renounceOwnership", outputs: [], - stateMutability: "nonpayable" + stateMutability: "nonpayable", + type: "function" }, { - type: "function", - name: "setTreasury", inputs: [ - { - name: "_treasury", - type: "address", - internalType: "address" - } + { internalType: "address", name: "_treasury", type: "address" } ], + name: "setTreasury", outputs: [], - stateMutability: "nonpayable" + stateMutability: "nonpayable", + type: "function" }, { - type: "function", + inputs: [{ internalType: "address", name: "account", type: "address" }], name: "signers", - inputs: [ - { - name: "account", - type: "address", - internalType: "address" - } - ], outputs: [ - { - name: "isValidSigner", - type: "bool", - internalType: "bool" - } + { internalType: "bool", name: "isValidSigner", type: "bool" } ], - stateMutability: "view" + stateMutability: "view", + type: "function" }, { - type: "function", - name: "transferOwnership", inputs: [ - { - name: "newOwner", - type: "address", - internalType: "address" - } + { internalType: "address", name: "newOwner", type: "address" } ], + name: "transferOwnership", outputs: [], - stateMutability: "nonpayable" + stateMutability: "nonpayable", + type: "function" }, { - type: "function", - name: "treasury", inputs: [], - outputs: [ - { - name: "", - type: "address", - internalType: "address" - } - ], - stateMutability: "view" + name: "treasury", + outputs: [{ internalType: "address", name: "", type: "address" }], + stateMutability: "view", + type: "function" }, { - type: "function", - name: "unlockStake", inputs: [], + name: "unlockStake", outputs: [], - stateMutability: "nonpayable" + stateMutability: "nonpayable", + type: "function" }, { - type: "function", - name: "validatePaymasterUserOp", inputs: [ { - name: "userOp", - type: "tuple", - internalType: "struct PackedUserOperation", components: [ { + internalType: "address", name: "sender", - type: "address", - internalType: "address" - }, - { - name: "nonce", - type: "uint256", - internalType: "uint256" + type: "address" }, + { internalType: "uint256", name: "nonce", type: "uint256" }, + { internalType: "bytes", name: "initCode", type: "bytes" }, + { internalType: "bytes", name: "callData", type: "bytes" }, { - name: "initCode", - type: "bytes", - internalType: "bytes" + internalType: "uint256", + name: "callGasLimit", + type: "uint256" }, { - name: "callData", - type: "bytes", - internalType: "bytes" + internalType: "uint256", + name: "verificationGasLimit", + type: "uint256" }, { - name: "accountGasLimits", - type: "bytes32", - internalType: "bytes32" + internalType: "uint256", + name: "preVerificationGas", + type: "uint256" }, { - name: "preVerificationGas", - type: "uint256", - internalType: "uint256" + internalType: "uint256", + name: "maxFeePerGas", + type: "uint256" }, { - name: "gasFees", - type: "bytes32", - internalType: "bytes32" + internalType: "uint256", + name: "maxPriorityFeePerGas", + type: "uint256" }, { + internalType: "bytes", name: "paymasterAndData", - type: "bytes", - internalType: "bytes" + type: "bytes" }, - { - name: "signature", - type: "bytes", - internalType: "bytes" - } - ] - }, - { - name: "userOpHash", - type: "bytes32", - internalType: "bytes32" + { internalType: "bytes", name: "signature", type: "bytes" } + ], + internalType: "struct UserOperation", + name: "userOp", + type: "tuple" }, - { - name: "maxCost", - type: "uint256", - internalType: "uint256" - } + { internalType: "bytes32", name: "userOpHash", type: "bytes32" }, + { internalType: "uint256", name: "maxCost", type: "uint256" } ], + name: "validatePaymasterUserOp", outputs: [ - { - name: "context", - type: "bytes", - internalType: "bytes" - }, - { - name: "validationData", - type: "uint256", - internalType: "uint256" - } + { internalType: "bytes", name: "context", type: "bytes" }, + { internalType: "uint256", name: "validationData", type: "uint256" } ], - stateMutability: "nonpayable" + stateMutability: "nonpayable", + type: "function" }, { - type: "function", - name: "withdrawStake", inputs: [ { + internalType: "address payable", name: "withdrawAddress", - type: "address", - internalType: "address payable" + type: "address" } ], + name: "withdrawStake", outputs: [], - stateMutability: "nonpayable" + stateMutability: "nonpayable", + type: "function" }, { - type: "function", - name: "withdrawTo", inputs: [ { + internalType: "address payable", name: "withdrawAddress", - type: "address", - internalType: "address payable" + type: "address" }, - { - name: "amount", - type: "uint256", - internalType: "uint256" - } + { internalType: "uint256", name: "amount", type: "uint256" } ], + name: "withdrawTo", outputs: [], - stateMutability: "nonpayable" - }, + stateMutability: "nonpayable", + type: "function" + } +] as const + +export const singletonPaymaster07Abi = [ { - type: "event", - name: "OwnershipTransferred", + type: "constructor", inputs: [ { - name: "previousOwner", + name: "_entryPoint", type: "address", - indexed: true, internalType: "address" }, { - name: "newOwner", + name: "_owner", type: "address", - indexed: true, internalType: "address" + }, + { + name: "_signers", + type: "address[]", + internalType: "address[]" } ], - anonymous: false + stateMutability: "nonpayable" }, { - type: "event", - name: "SignerAdded", + type: "function", + name: "addSigner", inputs: [ { - name: "signer", + name: "_signer", type: "address", - indexed: false, internalType: "address" } ], - anonymous: false + outputs: [], + stateMutability: "nonpayable" }, { - type: "event", - name: "SignerRemoved", + type: "function", + name: "addStake", inputs: [ { - name: "signer", - type: "address", - indexed: false, - internalType: "address" + name: "unstakeDelaySec", + type: "uint32", + internalType: "uint32" } ], - anonymous: false + outputs: [], + stateMutability: "payable" }, { - type: "event", - name: "TreasuryUpdated", - inputs: [ - { - name: "oldTreasury", - type: "address", - indexed: false, - internalType: "address" - }, + type: "function", + name: "deposit", + inputs: [], + outputs: [], + stateMutability: "payable" + }, + { + type: "function", + name: "entryPoint", + inputs: [], + outputs: [ { - name: "newTreasury", + name: "", type: "address", - indexed: false, - internalType: "address" + internalType: "contract IEntryPoint" } ], - anonymous: false + stateMutability: "view" }, { - type: "event", - name: "UserOperationSponsored", + type: "function", + name: "getCostInToken", inputs: [ { - name: "userOpHash", - type: "bytes32", - indexed: true, - internalType: "bytes32" - }, - { - name: "user", - type: "address", - indexed: true, - internalType: "address" + name: "_actualGasCost", + type: "uint256", + internalType: "uint256" }, { - name: "paymasterMode", - type: "uint8", - indexed: false, - internalType: "uint8" + name: "_postOpGas", + type: "uint256", + internalType: "uint256" }, { - name: "token", - type: "address", - indexed: false, - internalType: "address" + name: "_actualUserOpFeePerGas", + type: "uint256", + internalType: "uint256" }, { - name: "tokenAmountPaid", + name: "_exchangeRate", type: "uint256", - indexed: false, internalType: "uint256" - }, + } + ], + outputs: [ { - name: "exchangeRate", + name: "", type: "uint256", - indexed: false, internalType: "uint256" } ], - anonymous: false - }, - { - type: "error", - name: "ECDSAInvalidSignature", - inputs: [] + stateMutability: "pure" }, { - type: "error", - name: "ECDSAInvalidSignatureLength", - inputs: [ + type: "function", + name: "getDeposit", + inputs: [], + outputs: [ { - name: "length", + name: "", type: "uint256", internalType: "uint256" } - ] + ], + stateMutability: "view" }, { - type: "error", - name: "ECDSAInvalidSignatureS", + type: "function", + name: "getHash", inputs: [ { - name: "s", + name: "_mode", + type: "uint8", + internalType: "uint8" + }, + { + name: "_userOp", + type: "tuple", + internalType: "struct PackedUserOperation", + components: [ + { + name: "sender", + type: "address", + internalType: "address" + }, + { + name: "nonce", + type: "uint256", + internalType: "uint256" + }, + { + name: "initCode", + type: "bytes", + internalType: "bytes" + }, + { + name: "callData", + type: "bytes", + internalType: "bytes" + }, + { + name: "accountGasLimits", + type: "bytes32", + internalType: "bytes32" + }, + { + name: "preVerificationGas", + type: "uint256", + internalType: "uint256" + }, + { + name: "gasFees", + type: "bytes32", + internalType: "bytes32" + }, + { + name: "paymasterAndData", + type: "bytes", + internalType: "bytes" + }, + { + name: "signature", + type: "bytes", + internalType: "bytes" + } + ] + } + ], + outputs: [ + { + name: "", type: "bytes32", internalType: "bytes32" } - ] - }, - { - type: "error", - name: "ExchangeRateInvalid", - inputs: [] + ], + stateMutability: "view" }, { - type: "error", - name: "OwnableInvalidOwner", - inputs: [ + type: "function", + name: "owner", + inputs: [], + outputs: [ { - name: "owner", + name: "", type: "address", internalType: "address" } - ] + ], + stateMutability: "view" }, { - type: "error", - name: "OwnableUnauthorizedAccount", + type: "function", + name: "postOp", inputs: [ { - name: "account", - type: "address", - internalType: "address" - } - ] - }, - { - type: "error", - name: "PaymasterAndDataLengthInvalid", - inputs: [] - }, - { - type: "error", - name: "PaymasterConfigLengthInvalid", - inputs: [] - }, - { - type: "error", - name: "PaymasterModeInvalid", - inputs: [] - }, - { - type: "error", - name: "PaymasterSignatureLengthInvalid", - inputs: [] - }, - { - type: "error", - name: "PostOpTransferFromFailed", - inputs: [ + name: "mode", + type: "uint8", + internalType: "enum PostOpMode" + }, { - name: "msg", - type: "string", - internalType: "string" - } - ] - }, - { - type: "error", - name: "TokenAddressInvalid", - inputs: [] - } -] as const - -export const SINGLETON_PAYMASTER_V06_ABI = [ - { - inputs: [ - { internalType: "address", name: "_entryPoint", type: "address" }, - { internalType: "address", name: "_owner", type: "address" }, - { internalType: "address[]", name: "_signers", type: "address[]" } - ], - stateMutability: "nonpayable", - type: "constructor" - }, - { inputs: [], name: "ECDSAInvalidSignature", type: "error" }, - { - inputs: [{ internalType: "uint256", name: "length", type: "uint256" }], - name: "ECDSAInvalidSignatureLength", - type: "error" - }, - { - inputs: [{ internalType: "bytes32", name: "s", type: "bytes32" }], - name: "ECDSAInvalidSignatureS", - type: "error" - }, - { inputs: [], name: "ExchangeRateInvalid", type: "error" }, - { - inputs: [{ internalType: "address", name: "owner", type: "address" }], - name: "OwnableInvalidOwner", - type: "error" - }, - { - inputs: [{ internalType: "address", name: "account", type: "address" }], - name: "OwnableUnauthorizedAccount", - type: "error" - }, - { inputs: [], name: "PaymasterAndDataLengthInvalid", type: "error" }, - { inputs: [], name: "PaymasterConfigLengthInvalid", type: "error" }, - { inputs: [], name: "PaymasterModeInvalid", type: "error" }, - { inputs: [], name: "PaymasterSignatureLengthInvalid", type: "error" }, - { - inputs: [{ internalType: "string", name: "msg", type: "string" }], - name: "PostOpTransferFromFailed", - type: "error" - }, - { inputs: [], name: "TokenAddressInvalid", type: "error" }, - { - anonymous: false, - inputs: [ + name: "context", + type: "bytes", + internalType: "bytes" + }, { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address" + name: "actualGasCost", + type: "uint256", + internalType: "uint256" }, { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address" + name: "actualUserOpFeePerGas", + type: "uint256", + internalType: "uint256" } ], - name: "OwnershipTransferred", - type: "event" + outputs: [], + stateMutability: "nonpayable" }, { - anonymous: false, + type: "function", + name: "removeSigner", inputs: [ { - indexed: false, - internalType: "address", - name: "signer", - type: "address" + name: "_signer", + type: "address", + internalType: "address" } ], - name: "SignerAdded", - type: "event" + outputs: [], + stateMutability: "nonpayable" }, { - anonymous: false, + type: "function", + name: "renounceOwnership", + inputs: [], + outputs: [], + stateMutability: "nonpayable" + }, + { + type: "function", + name: "setTreasury", inputs: [ { - indexed: false, - internalType: "address", - name: "signer", - type: "address" + name: "_treasury", + type: "address", + internalType: "address" } ], - name: "SignerRemoved", - type: "event" + outputs: [], + stateMutability: "nonpayable" }, { - anonymous: false, + type: "function", + name: "signers", inputs: [ { - indexed: false, - internalType: "address", - name: "oldTreasury", - type: "address" - }, + name: "account", + type: "address", + internalType: "address" + } + ], + outputs: [ { - indexed: false, - internalType: "address", - name: "newTreasury", - type: "address" + name: "isValidSigner", + type: "bool", + internalType: "bool" } ], - name: "TreasuryUpdated", - type: "event" + stateMutability: "view" }, { - anonymous: false, + type: "function", + name: "transferOwnership", inputs: [ { - indexed: true, - internalType: "bytes32", - name: "userOpHash", - type: "bytes32" - }, - { - indexed: true, - internalType: "address", - name: "user", - type: "address" - }, - { - indexed: false, - internalType: "uint8", - name: "paymasterMode", - type: "uint8" - }, - { - indexed: false, - internalType: "address", - name: "token", - type: "address" - }, - { - indexed: false, - internalType: "uint256", - name: "tokenAmountPaid", - type: "uint256" - }, - { - indexed: false, - internalType: "uint256", - name: "exchangeRate", - type: "uint256" + name: "newOwner", + type: "address", + internalType: "address" } ], - name: "UserOperationSponsored", - type: "event" - }, - { - inputs: [{ internalType: "address", name: "_signer", type: "address" }], - name: "addSigner", outputs: [], - stateMutability: "nonpayable", - type: "function" + stateMutability: "nonpayable" }, { - inputs: [ - { internalType: "uint32", name: "unstakeDelaySec", type: "uint32" } + type: "function", + name: "treasury", + inputs: [], + outputs: [ + { + name: "", + type: "address", + internalType: "address" + } ], - name: "addStake", - outputs: [], - stateMutability: "payable", - type: "function" + stateMutability: "view" }, { + type: "function", + name: "unlockStake", inputs: [], - name: "deposit", outputs: [], - stateMutability: "payable", - type: "function" - }, - { - inputs: [], - name: "entryPoint", - outputs: [ - { internalType: "contract IEntryPoint", name: "", type: "address" } - ], - stateMutability: "view", - type: "function" + stateMutability: "nonpayable" }, { + type: "function", + name: "validatePaymasterUserOp", inputs: [ { - internalType: "uint256", - name: "_actualGasCost", - type: "uint256" - }, - { internalType: "uint256", name: "_postOpGas", type: "uint256" }, - { - internalType: "uint256", - name: "_actualUserOpFeePerGas", - type: "uint256" - }, - { internalType: "uint256", name: "_exchangeRate", type: "uint256" } - ], - name: "getCostInToken", - outputs: [{ internalType: "uint256", name: "", type: "uint256" }], - stateMutability: "pure", - type: "function" - }, - { - inputs: [], - name: "getDeposit", - outputs: [{ internalType: "uint256", name: "", type: "uint256" }], - stateMutability: "view", - type: "function" - }, - { - inputs: [ - { internalType: "uint8", name: "_mode", type: "uint8" }, - { + name: "userOp", + type: "tuple", + internalType: "struct PackedUserOperation", components: [ { - internalType: "address", name: "sender", - type: "address" + type: "address", + internalType: "address" }, - { internalType: "uint256", name: "nonce", type: "uint256" }, - { internalType: "bytes", name: "initCode", type: "bytes" }, - { internalType: "bytes", name: "callData", type: "bytes" }, { - internalType: "uint256", - name: "callGasLimit", - type: "uint256" + name: "nonce", + type: "uint256", + internalType: "uint256" }, { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256" + name: "initCode", + type: "bytes", + internalType: "bytes" }, { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256" + name: "callData", + type: "bytes", + internalType: "bytes" }, { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256" + name: "accountGasLimits", + type: "bytes32", + internalType: "bytes32" }, { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256" + name: "preVerificationGas", + type: "uint256", + internalType: "uint256" + }, + { + name: "gasFees", + type: "bytes32", + internalType: "bytes32" }, { - internalType: "bytes", name: "paymasterAndData", - type: "bytes" + type: "bytes", + internalType: "bytes" }, - { internalType: "bytes", name: "signature", type: "bytes" } - ], - internalType: "struct UserOperation", - name: "_userOp", - type: "tuple" + { + name: "signature", + type: "bytes", + internalType: "bytes" + } + ] + }, + { + name: "userOpHash", + type: "bytes32", + internalType: "bytes32" + }, + { + name: "maxCost", + type: "uint256", + internalType: "uint256" } ], - name: "getHash", - outputs: [{ internalType: "bytes32", name: "", type: "bytes32" }], - stateMutability: "view", - type: "function" + outputs: [ + { + name: "context", + type: "bytes", + internalType: "bytes" + }, + { + name: "validationData", + type: "uint256", + internalType: "uint256" + } + ], + stateMutability: "nonpayable" }, { - inputs: [], - name: "owner", - outputs: [{ internalType: "address", name: "", type: "address" }], - stateMutability: "view", - type: "function" + type: "function", + name: "withdrawStake", + inputs: [ + { + name: "withdrawAddress", + type: "address", + internalType: "address payable" + } + ], + outputs: [], + stateMutability: "nonpayable" }, { + type: "function", + name: "withdrawTo", inputs: [ - { internalType: "enum PostOpMode", name: "mode", type: "uint8" }, - { internalType: "bytes", name: "context", type: "bytes" }, - { internalType: "uint256", name: "actualGasCost", type: "uint256" } + { + name: "withdrawAddress", + type: "address", + internalType: "address payable" + }, + { + name: "amount", + type: "uint256", + internalType: "uint256" + } ], - name: "postOp", outputs: [], - stateMutability: "nonpayable", - type: "function" + stateMutability: "nonpayable" }, { - inputs: [{ internalType: "address", name: "_signer", type: "address" }], - name: "removeSigner", - outputs: [], - stateMutability: "nonpayable", - type: "function" + type: "event", + name: "OwnershipTransferred", + inputs: [ + { + name: "previousOwner", + type: "address", + indexed: true, + internalType: "address" + }, + { + name: "newOwner", + type: "address", + indexed: true, + internalType: "address" + } + ], + anonymous: false }, { - inputs: [], - name: "renounceOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function" + type: "event", + name: "SignerAdded", + inputs: [ + { + name: "signer", + type: "address", + indexed: false, + internalType: "address" + } + ], + anonymous: false }, { + type: "event", + name: "SignerRemoved", inputs: [ - { internalType: "address", name: "_treasury", type: "address" } + { + name: "signer", + type: "address", + indexed: false, + internalType: "address" + } ], - name: "setTreasury", - outputs: [], - stateMutability: "nonpayable", - type: "function" + anonymous: false }, { - inputs: [{ internalType: "address", name: "account", type: "address" }], - name: "signers", - outputs: [ - { internalType: "bool", name: "isValidSigner", type: "bool" } + type: "event", + name: "TreasuryUpdated", + inputs: [ + { + name: "oldTreasury", + type: "address", + indexed: false, + internalType: "address" + }, + { + name: "newTreasury", + type: "address", + indexed: false, + internalType: "address" + } ], - stateMutability: "view", - type: "function" + anonymous: false }, { + type: "event", + name: "UserOperationSponsored", inputs: [ - { internalType: "address", name: "newOwner", type: "address" } + { + name: "userOpHash", + type: "bytes32", + indexed: true, + internalType: "bytes32" + }, + { + name: "user", + type: "address", + indexed: true, + internalType: "address" + }, + { + name: "paymasterMode", + type: "uint8", + indexed: false, + internalType: "uint8" + }, + { + name: "token", + type: "address", + indexed: false, + internalType: "address" + }, + { + name: "tokenAmountPaid", + type: "uint256", + indexed: false, + internalType: "uint256" + }, + { + name: "exchangeRate", + type: "uint256", + indexed: false, + internalType: "uint256" + } ], - name: "transferOwnership", - outputs: [], - stateMutability: "nonpayable", - type: "function" + anonymous: false }, { - inputs: [], - name: "treasury", - outputs: [{ internalType: "address", name: "", type: "address" }], - stateMutability: "view", - type: "function" + type: "error", + name: "ECDSAInvalidSignature", + inputs: [] }, { - inputs: [], - name: "unlockStake", - outputs: [], - stateMutability: "nonpayable", - type: "function" + type: "error", + name: "ECDSAInvalidSignatureLength", + inputs: [ + { + name: "length", + type: "uint256", + internalType: "uint256" + } + ] }, { + type: "error", + name: "ECDSAInvalidSignatureS", inputs: [ { - components: [ - { - internalType: "address", - name: "sender", - type: "address" - }, - { internalType: "uint256", name: "nonce", type: "uint256" }, - { internalType: "bytes", name: "initCode", type: "bytes" }, - { internalType: "bytes", name: "callData", type: "bytes" }, - { - internalType: "uint256", - name: "callGasLimit", - type: "uint256" - }, - { - internalType: "uint256", - name: "verificationGasLimit", - type: "uint256" - }, - { - internalType: "uint256", - name: "preVerificationGas", - type: "uint256" - }, - { - internalType: "uint256", - name: "maxFeePerGas", - type: "uint256" - }, - { - internalType: "uint256", - name: "maxPriorityFeePerGas", - type: "uint256" - }, - { - internalType: "bytes", - name: "paymasterAndData", - type: "bytes" - }, - { internalType: "bytes", name: "signature", type: "bytes" } - ], - internalType: "struct UserOperation", - name: "userOp", - type: "tuple" - }, - { internalType: "bytes32", name: "userOpHash", type: "bytes32" }, - { internalType: "uint256", name: "maxCost", type: "uint256" } - ], - name: "validatePaymasterUserOp", - outputs: [ - { internalType: "bytes", name: "context", type: "bytes" }, - { internalType: "uint256", name: "validationData", type: "uint256" } - ], - stateMutability: "nonpayable", - type: "function" + name: "s", + type: "bytes32", + internalType: "bytes32" + } + ] }, { + type: "error", + name: "ExchangeRateInvalid", + inputs: [] + }, + { + type: "error", + name: "OwnableInvalidOwner", inputs: [ { - internalType: "address payable", - name: "withdrawAddress", - type: "address" + name: "owner", + type: "address", + internalType: "address" } - ], - name: "withdrawStake", - outputs: [], - stateMutability: "nonpayable", - type: "function" + ] + }, + { + type: "error", + name: "OwnableUnauthorizedAccount", + inputs: [ + { + name: "account", + type: "address", + internalType: "address" + } + ] }, { + type: "error", + name: "PaymasterAndDataLengthInvalid", + inputs: [] + }, + { + type: "error", + name: "PaymasterConfigLengthInvalid", + inputs: [] + }, + { + type: "error", + name: "PaymasterModeInvalid", + inputs: [] + }, + { + type: "error", + name: "PaymasterSignatureLengthInvalid", + inputs: [] + }, + { + type: "error", + name: "PostOpTransferFromFailed", inputs: [ { - internalType: "address payable", - name: "withdrawAddress", - type: "address" - }, - { internalType: "uint256", name: "amount", type: "uint256" } - ], - name: "withdrawTo", - outputs: [], - stateMutability: "nonpayable", - type: "function" + name: "msg", + type: "string", + internalType: "string" + } + ] + }, + { + type: "error", + name: "TokenAddressInvalid", + inputs: [] } ] as const + +export const singletonPaymaster08Abi = singletonPaymaster07Abi diff --git a/packages/mock-paymaster/helpers/erc20-utils.ts b/packages/mock-paymaster/helpers/erc20-utils.ts index 76fa1657..c09a4540 100644 --- a/packages/mock-paymaster/helpers/erc20-utils.ts +++ b/packages/mock-paymaster/helpers/erc20-utils.ts @@ -15,24 +15,22 @@ import { } from "viem" import { getAnvilWalletClient, getPublicClient } from "./utils.js" -const ERC20_BYTECODE = concat([ +const erc20Bytecode = concat([ "0x60a060405234801561001057600080fd5b50604051610ff0380380610ff083398101604081905261002f9161022c565b6040518060400160405280600981526020016805465737445524332360bc1b8152506040518060400160405280600381526020016205432360ec1b815250816003908161007c919061034d565b506004610089828261034d565b5050506100a63369d3c21bcecceda10000006100b160201b60201c565b60ff166080526104a3565b6001600160a01b0382166100e457600060405163ec442f0560e01b81526004016100db9190610430565b60405180910390fd5b6100f0600083836100f4565b5050565b6001600160a01b03831661011f5780600260008282546101149190610454565b9091555061017e9050565b6001600160a01b0383166000908152602081905260409020548181101561015f5783818360405163391434e360e21b81526004016100db9392919061046d565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b03821661019a576002805482900390556101b9565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516101fc9190610495565b60405180910390a3505050565b60ff8116811461021857600080fd5b50565b805161022681610209565b92915050565b60006020828403121561024157610241600080fd5b600061024d848461021b565b949350505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052602260045260246000fd5b60028104600182168061029557607f821691505b6020821081036102a7576102a761026b565b50919050565b60006102266102b98381565b90565b6102c5836102ad565b815460001960089490940293841b1916921b91909117905550565b60006102ed8184846102bc565b505050565b818110156100f0576103056000826102e0565b6001016102f2565b601f8211156102ed576000818152602090206020601f850104810160208510156103345750805b6103466020601f8601048301826102f2565b5050505050565b81516001600160401b0381111561036657610366610255565b6103708254610281565b61037b82828561030d565b6020601f8311600181146103af57600084156103975750858201515b600019600886021c1981166002860217865550610408565b600085815260208120601f198616915b828110156103df57888501518255602094850194600190920191016103bf565b868310156103fb5784890151600019601f89166008021c191682555b6001600288020188555050505b505050505050565b60006001600160a01b038216610226565b61042a81610410565b82525050565b602081016102268284610421565b634e487b7160e01b600052601160045260246000fd5b808201808211156102265761022661043e565b8061042a565b6060810161047b8286610421565b6104886020830185610467565b61024d6040830184610467565b602081016102268284610467565b608051610b326104be60003960006101650152610b326000f3fe608060405234801561001057600080fd5b50600436106100d45760003560e01c8063313ce56711610081578063a9059cbb1161005b578063a9059cbb146101cf578063dd62ed3e146101e2578063fb4dcefa1461022857600080fd5b8063313ce5671461016357806370a082311461019157806395d89b41146101c757600080fd5b806318160ddd116100b257806318160ddd1461012c57806323b872dd1461013d5780632d688ca81461015057600080fd5b806305ea5c22146100d957806306fdde03146100ee578063095ea7b31461010c575b600080fd5b6100ec6100e7366004610868565b61023b565b005b6100f661024b565b604051610103919061092c565b60405180910390f35b61011f61011a366004610944565b6102dd565b604051610103919061098b565b6002545b604051610103919061099f565b61011f61014b366004610868565b6102f7565b6100ec61015e366004610944565b61031b565b7f000000000000000000000000000000000000000000000000000000000000000060405161010391906109b6565b61013061019f3660046109c4565b73ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b6100f6610329565b61011f6101dd366004610944565b610338565b6101306101f03660046109ed565b73ffffffffffffffffffffffffffffffffffffffff918216600090815260016020908152604080832093909416825291909152205490565b6100ec6102363660046109ed565b610346565b61024683838361037c565b505050565b60606003805461025a90610a4f565b80601f016020809104026020016040519081016040528092919081815260200182805461028690610a4f565b80156102d35780601f106102a8576101008083540402835291602001916102d3565b820191906000526020600020905b8154815290600101906020018083116102b657829003601f168201915b5050505050905090565b6000336102eb81858561037c565b60019150505b92915050565b600033610305858285610389565b610310858585610441565b506001949350505050565b61032582826104ec565b5050565b60606004805461025a90610a4f565b6000336102eb818585610441565b61032582826103778573ffffffffffffffffffffffffffffffffffffffff1660009081526020819052604090205490565b610441565b6102468383836001610548565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600160209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461043b578181101561042c578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161042393929190610a84565b60405180910390fd5b61043b84848484036000610548565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166104915760006040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016104239190610aac565b73ffffffffffffffffffffffffffffffffffffffff82166104e15760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016104239190610aac565b61024683838361068e565b73ffffffffffffffffffffffffffffffffffffffff821661053c5760006040517fec442f050000000000000000000000000000000000000000000000000000000081526004016104239190610aac565b6103256000838361068e565b73ffffffffffffffffffffffffffffffffffffffff84166105985760006040517fe602df050000000000000000000000000000000000000000000000000000000081526004016104239190610aac565b73ffffffffffffffffffffffffffffffffffffffff83166105e85760006040517f94280d620000000000000000000000000000000000000000000000000000000081526004016104239190610aac565b73ffffffffffffffffffffffffffffffffffffffff8085166000908152600160209081526040808320938716835292905220829055801561043b578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051610680919061099f565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff83166106c65780600260008282546106bb9190610ae9565b909155506107589050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152602081905260409020548181101561072c578381836040517fe450d38c00000000000000000000000000000000000000000000000000000000815260040161042393929190610a84565b73ffffffffffffffffffffffffffffffffffffffff841660009081526020819052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff8216610781576002805482900390556107ad565b73ffffffffffffffffffffffffffffffffffffffff821660009081526020819052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161080a919061099f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff82166102f1565b61083e81610817565b811461084957600080fd5b50565b80356102f181610835565b8061083e565b80356102f181610857565b60008060006060848603121561088057610880600080fd5b600061088c868661084c565b935050602061089d8682870161084c565b92505060406108ae8682870161085d565b9150509250925092565b60005b838110156108d35781810151838201526020016108bb565b50506000910152565b60006108e6825190565b8084526020840193506108fd8185602086016108b8565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920192915050565b6020808252810161093d81846108dc565b9392505050565b6000806040838503121561095a5761095a600080fd5b6000610966858561084c565b92505060206109778582860161085d565b9150509250929050565b8015155b82525050565b602081016102f18284610981565b80610985565b602081016102f18284610999565b60ff8116610985565b602081016102f182846109ad565b6000602082840312156109d9576109d9600080fd5b60006109e5848461084c565b949350505050565b60008060408385031215610a0357610a03600080fd5b6000610a0f858561084c565b92505060206109778582860161084c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600281046001821680610a6357607f821691505b602082108103610a7557610a75610a20565b50919050565b61098581610817565b60608101610a928286610a7b565b610a9f6020830185610999565b6109e56040830184610999565b602081016102f18284610a7b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156102f1576102f1610aba56fea2646970667358221220d40f68e247510ec8b7876d327ac47b949de248d0626aaf2670151c5e84ee6b4a64736f6c634300081a0033", pad(toHex(18n)) // constructor args (token_decimals) ]) +const create2Salt = + "0x0000000000000000000000000000000000000000000000000000000000000000" + export const deployErc20Token = async ( walletClient: WalletClient, publicClient: PublicClient ) => { - if ( - (await publicClient.getCode({ address: ERC20_ADDRESS })) === undefined - ) { + if ((await publicClient.getCode({ address: erc20Address })) === undefined) { await walletClient.sendTransaction({ to: "0x4e59b44847b379578588920ca78fbf26c0b4956c", - data: concat([ - "0x0000000000000000000000000000000000000000000000000000000000000000", - ERC20_BYTECODE - ]) + data: concat([create2Salt, erc20Bytecode]) }) } } @@ -41,7 +39,7 @@ export const tokenBalanceOf = async (holder: Address, anvilRpc: string) => { const publicClient = getPublicClient(anvilRpc) const balance = await publicClient.call({ - to: ERC20_ADDRESS, + to: erc20Address, value: 0n, data: encodeFunctionData({ abi: parseAbi(["function balanceOf(address)"]), @@ -64,7 +62,7 @@ export const sudoMintTokens = async ({ const walletClient = getAnvilWalletClient({ addressIndex: 0, anvilRpc }) await walletClient.sendTransaction({ - to: ERC20_ADDRESS, + to: erc20Address, value: 0n, data: encodeFunctionData({ abi: parseAbi(["function sudoMint(address, uint256)"]), @@ -73,8 +71,8 @@ export const sudoMintTokens = async ({ }) } -export const ERC20_ADDRESS = getCreate2Address({ +export const erc20Address = getCreate2Address({ from: "0x4e59b44847b379578588920ca78fbf26c0b4956c", - salt: "0x0000000000000000000000000000000000000000000000000000000000000000", - bytecode: ERC20_BYTECODE + salt: create2Salt, + bytecode: erc20Bytecode }) diff --git a/packages/mock-paymaster/helpers/schema.ts b/packages/mock-paymaster/helpers/schema.ts index 1bee9706..fe8ff27c 100644 --- a/packages/mock-paymaster/helpers/schema.ts +++ b/packages/mock-paymaster/helpers/schema.ts @@ -231,13 +231,23 @@ const eip7677UserOperationSchema = z.union([ eip7677UserOperationSchemaV7 ]) +const paymasterContextSchema = z.union([ + z.object({ token: addressSchema }), + z.object({ + sponsorshipPolicyId: z.string().optional(), + validForSeconds: z.number().optional(), + meta: z.record(z.string(), z.string()).optional() + }), + z.null() +]) + export const pmGetPaymasterData = z .union([ z.tuple([ eip7677UserOperationSchema, addressSchema, hexNumberSchema, - z.union([z.object({ token: addressSchema }), z.null()]) + paymasterContextSchema.nullable() ]), z.tuple([eip7677UserOperationSchema, addressSchema, hexNumberSchema]) ]) @@ -251,7 +261,7 @@ export const pmGetPaymasterStubDataParamsSchema = z eip7677UserOperationSchema, addressSchema, hexNumberSchema, - z.union([z.object({ token: addressSchema }), z.null()]) + paymasterContextSchema.nullable() ]), z.tuple([eip7677UserOperationSchema, addressSchema, hexNumberSchema]) ]) diff --git a/packages/mock-paymaster/helpers/utils.ts b/packages/mock-paymaster/helpers/utils.ts index a6901c5e..2b4b3f68 100644 --- a/packages/mock-paymaster/helpers/utils.ts +++ b/packages/mock-paymaster/helpers/utils.ts @@ -11,7 +11,7 @@ import { } from "viem" import { mnemonicToAccount } from "viem/accounts" import { foundry } from "viem/chains" -import { ERC20_ADDRESS } from "./erc20-utils.js" +import { erc20Address } from "./erc20-utils.js" import { RpcError, ValidationErrors } from "./schema.js" /// Returns the bigger of two BigInts. @@ -59,7 +59,7 @@ export const getAnvilWalletClient = ({ } export const isTokenSupported = async (token: Address) => { - if (token !== ERC20_ADDRESS) { + if (token !== erc20Address) { throw new RpcError( "Token is not supported", ValidationErrors.InvalidFields diff --git a/packages/mock-paymaster/index.ts b/packages/mock-paymaster/index.ts index 630eb034..14450e14 100644 --- a/packages/mock-paymaster/index.ts +++ b/packages/mock-paymaster/index.ts @@ -7,10 +7,7 @@ import { foundry } from "viem/chains" import { deployErc20Token } from "./helpers/erc20-utils.js" import { getAnvilWalletClient } from "./helpers/utils.js" import { createRpcHandler } from "./relay.js" -import { - SingletonPaymasterV06, - SingletonPaymasterV07 -} from "./singletonPaymasters.js" +import { deployPaymasters } from "./singletonPaymasters.js" export const paymaster = defineInstance( ({ @@ -39,17 +36,7 @@ export const paymaster = defineInstance( transport: http(altoRpc) }) - const singletonPaymasterV07 = new SingletonPaymasterV07( - walletClient, - anvilRpc - ) - const singletonPaymasterV06 = new SingletonPaymasterV06( - walletClient, - anvilRpc - ) - - await singletonPaymasterV06.setup() - await singletonPaymasterV07.setup() + await deployPaymasters({ walletClient, publicClient }) await deployErc20Token(walletClient, publicClient) app.register(cors, { @@ -57,11 +44,11 @@ export const paymaster = defineInstance( methods: ["POST", "GET", "OPTIONS"] }) - const rpcHandler = createRpcHandler( + const rpcHandler = createRpcHandler({ bundler, - singletonPaymasterV07, - singletonPaymasterV06 - ) + publicClient, + paymasterSigner: walletClient + }) app.post("/", {}, rpcHandler) app.get("/ping", async (_request, reply) => { diff --git a/packages/mock-paymaster/package.json b/packages/mock-paymaster/package.json index 6a0a720e..b1849852 100644 --- a/packages/mock-paymaster/package.json +++ b/packages/mock-paymaster/package.json @@ -21,12 +21,12 @@ } }, "peerDependencies": { - "viem": "^2.23.2", + "viem": "^2.28.1", "prool": "^0.0.23" }, "dependencies": { - "@fastify/cors": "^11.0.0", - "fastify": "^5.2.1", + "@fastify/cors": "^8.5.0", + "fastify": "^4.28.1", "zod": "^3.24.2" } } diff --git a/packages/mock-paymaster/relay.ts b/packages/mock-paymaster/relay.ts index e32466a2..8941d93d 100644 --- a/packages/mock-paymaster/relay.ts +++ b/packages/mock-paymaster/relay.ts @@ -1,9 +1,14 @@ import * as util from "node:util" import type { FastifyReply, FastifyRequest } from "fastify" import { + type Account, type Address, BaseError, + type Chain, + type PublicClient, type RpcRequestError, + type Transport, + type WalletClient, getAddress, toHex } from "viem" @@ -11,10 +16,17 @@ import { type BundlerClient, type UserOperation, entryPoint06Address, - entryPoint07Address + entryPoint07Address, + entryPoint08Address } from "viem/account-abstraction" import { fromZodError } from "zod-validation-error" -import { ERC20_ADDRESS } from "./helpers/erc20-utils.js" +import { + getSingletonPaymaster06Address, + getSingletonPaymaster07Address, + getSingletonPaymaster08Address, + sponsorshipIcon +} from "./constants.js" +import { erc20Address } from "./helpers/erc20-utils.js" import { InternalBundlerError, type JsonRpcSchema, @@ -32,87 +44,35 @@ import { maxBigInt } from "./helpers/utils.js" import { - type SingletonPaymasterV06, - type SingletonPaymasterV07, - getDummyPaymasterData + getDummyPaymasterData, + getSignedPaymasterData } from "./singletonPaymasters.js" -const handleMethodV06 = async ( - userOperation: UserOperation<"0.6">, - paymasterMode: PaymasterMode, - bundler: BundlerClient, - singletonPaymasterV06: SingletonPaymasterV06, +const handlePmSponsor = async ({ + entryPoint, + userOperation, + paymasterMode, + bundler, + paymaster, + publicClient, + paymasterSigner, + estimateGas +}: { + entryPoint: Address + userOperation: UserOperation + paymasterMode: PaymasterMode + bundler: BundlerClient + paymaster: Address + publicClient: PublicClient + paymasterSigner: WalletClient estimateGas: boolean -) => { - let op: UserOperation<"0.6"> = { - ...userOperation, - ...getDummyPaymasterData( - true, - singletonPaymasterV06.singletonPaymaster.address, - paymasterMode - ) - } +}) => { + const is06 = entryPoint === entryPoint06Address - const callGasLimit = userOperation.callGasLimit - const verificationGasLimit = userOperation.verificationGasLimit - const preVerificationGas = userOperation.preVerificationGas - - if (estimateGas) { - try { - const gasEstimates = await bundler.estimateUserOperationGas({ - ...op - }) - op = { - ...op, - ...gasEstimates - } - - op.callGasLimit = maxBigInt(op.callGasLimit, callGasLimit) - op.preVerificationGas = maxBigInt( - op.preVerificationGas, - preVerificationGas - ) - op.verificationGasLimit = maxBigInt( - op.verificationGasLimit, - verificationGasLimit - ) - } catch (e: unknown) { - if (!(e instanceof BaseError)) throw new InternalBundlerError() - const err = e.walk() as RpcRequestError - throw err - } - } else if ( - userOperation.preVerificationGas === 1n || - userOperation.verificationGasLimit === 1n || - userOperation.callGasLimit === 1n - ) { - throw new RpcError( - "Gas Limit values (preVerificationGas, verificationGasLimit, callGasLimit) must be set", - ValidationErrors.InvalidFields - ) - } - - const result = { - preVerificationGas: toHex(op.preVerificationGas), - callGasLimit: toHex(op.callGasLimit), - verificationGasLimit: toHex(op.verificationGasLimit || 0), - ...(await singletonPaymasterV06.encodePaymasterData(op, paymasterMode)) - } - - return result -} - -const handleMethodV07 = async ( - userOperation: UserOperation<"0.7">, - paymasterMode: PaymasterMode, - bundler: BundlerClient, - singletonPaymasterV07: SingletonPaymasterV07, - estimateGas: boolean -) => { let op = { ...userOperation, - ...singletonPaymasterV07.getDummyPaymasterData(paymasterMode) - } + ...getDummyPaymasterData({ is06, paymaster, paymasterMode }) + } as UserOperation const callGasLimit = userOperation.callGasLimit const verificationGasLimit = userOperation.verificationGasLimit @@ -121,13 +81,14 @@ const handleMethodV07 = async ( if (estimateGas) { try { const gasEstimates = await bundler.estimateUserOperationGas({ - ...op + ...op, + entryPointAddress: entryPoint }) op = { ...op, ...gasEstimates - } + } as UserOperation op.callGasLimit = maxBigInt(op.callGasLimit, callGasLimit) op.preVerificationGas = maxBigInt( @@ -162,18 +123,54 @@ const handleMethodV07 = async ( ), paymasterPostOpGasLimit: toHex(op.paymasterPostOpGasLimit || 0), verificationGasLimit: toHex(op.verificationGasLimit || 0), - ...(await singletonPaymasterV07.encodePaymasterData(op, paymasterMode)) + ...(await getSignedPaymasterData({ + publicClient, + signer: paymasterSigner, + userOp: userOperation, + paymaster, + paymasterMode + })) } return result } -const handleMethod = async ( - bundler: BundlerClient, - singletonPaymasterV07: SingletonPaymasterV07, - singletonPaymasterV06: SingletonPaymasterV06, +const validateEntryPoint = (entryPoint: Address) => { + if ( + entryPoint !== entryPoint06Address && + entryPoint !== entryPoint07Address && + entryPoint !== entryPoint08Address + ) { + throw new RpcError( + "EntryPoint not supported", + ValidationErrors.InvalidFields + ) + } +} + +const handleMethod = async ({ + parsedBody, + paymasterSigner, + publicClient, + bundler +}: { + bundler: BundlerClient + paymasterSigner: WalletClient + publicClient: PublicClient parsedBody: JsonRpcSchema -) => { +}) => { + const [paymaster06, paymaster07, paymaster08] = [ + getSingletonPaymaster06Address(paymasterSigner.account.address), + getSingletonPaymaster07Address(paymasterSigner.account.address), + getSingletonPaymaster08Address(paymasterSigner.account.address) + ] + + const epToPaymaster: Record<`0x${string}`, `0x${string}`> = { + [entryPoint06Address]: paymaster06, + [entryPoint07Address]: paymaster07, + [entryPoint08Address]: paymaster08 + } + if (parsedBody.method === "pm_sponsorUserOperation") { const params = pmSponsorUserOperationParamsSchema.safeParse( parsedBody.params @@ -187,31 +184,18 @@ const handleMethod = async ( } const [userOperation, entryPoint] = params.data - - if (entryPoint === entryPoint07Address) { - return await handleMethodV07( - userOperation, - { mode: "verifying" }, - bundler, - singletonPaymasterV07, - true - ) - } - - if (entryPoint === entryPoint06Address) { - return await handleMethodV06( - userOperation, - { mode: "verifying" }, - bundler, - singletonPaymasterV06, - true - ) - } - - throw new RpcError( - "EntryPoint not supported", - ValidationErrors.InvalidFields - ) + validateEntryPoint(entryPoint) + + return await handlePmSponsor({ + entryPoint, + userOperation, + paymasterMode: { mode: "verifying" }, + bundler, + paymaster: epToPaymaster[entryPoint], + publicClient, + paymasterSigner, + estimateGas: true + }) } if (parsedBody.method === "pm_getPaymasterStubData") { @@ -227,36 +211,34 @@ const handleMethod = async ( } const [, entryPoint, , data] = params.data + validateEntryPoint(entryPoint) const paymasterMode = getPaymasterMode(data) const sponsorData = { name: "Pimlico", - icon: "data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEAkACQAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/2wBDAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQH/wAARCADEAMQDAREAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD+IOv6OP1MKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKAHL3pMljsD0FIV2GB6CgLsMD0FAXYYHoKAuwwPQUBdhgegoC7DA9BQF2GB6CgLsa3amhobTKCgAoAKACgAoAKACgAoAKACgAoAKACgAoAcvekyZdB9Ik7fw18M/iR4zsZtU8H/D7xv4r023u3sJ9R8NeFNe12xgvooLe5kspbvS7C6t47uO3u7W4e3eQTJDc28rIEmjZsp1qNN2qVaUHa9p1IRdtr2k07XTXyJlOEHaU4xe9pSSdu+rR0P/ChPjn/ANEX+LH/AIbnxh/8pqj63hf+gmh/4Op//JC9rS/5+0//AAOP+Yv/AAoT46f9EX+LH/hufGH/AMpqPreF/wCgmh/4Op//ACQe1pf8/af/AIGv8w/4UJ8dP+iL/Fj/AMNz4w/+U1H1vC/9BND/AMHU/wD5IPa0v+ftP/wNf5h/woT46f8ARF/ix/4bnxh/8pqPreF/6CaH/g6n/wDJB7Wl/wA/af8A4Gv8w/4UJ8dP+iL/ABY/8Nz4w/8AlNR9bwv/AEE0P/B1P/5IPa0v+ftP/wADX+Yf8KE+On/RF/ix/wCG58Yf/Kaj63hf+gmh/wCDqf8A8kHtaX/P2n/4Gv8AMafgH8dTjHwW+LJ/7pz4w/8AlNVRxOGe2IoP/uNT/wDkhqtR1/e0/wDwOP8AmO/4Z/8Ajp/0Rf4s/wDhufGH/wApqv6xh/8An/R/8G0//kifrNH/AJ+0/wDwOP8A8kH/AAz/APHT/oi/xZ/8N14w/wDlNR9Yw/8Az/o/+Daf/wAkH1mj/wA/af8A4HH/AOSD/hn/AOOn/RF/iz/4brxh/wDKal9Yw/8Az/o/+Daf/wAkH1ml/wA/Kf8A4HH/AOSOc8S/C74k+DbNNR8XfD7xx4V0+SUQR3/iTwnr2h2ckxGRCl1qdhawPKeojVy+O1XGrSm7Qq05vtCcZP7otsuFanN2jOEn2jJN/cmzhtp9q0sXzLzDafaiwcy8xdnvRYObyDZ7/p/9eiwc3kGz3/T/AOvRYObyDZ7/AKf/AF6LBzeQbPf9P/r0WDm8hlIoKACgAoAcvekyZdB9Ik/0pP8AgzjBP/BMv46+37dvxLA+n/DPn7MB/LJNfk/HkIxzjDWWkstpSbu9/rWMWmvkrnx/ETf12mv+oal/6VM/rKxXxVl5/e/8z5+3mvuQYosvP73/AJhbzX3IMUWXn97/AMwt5r7kGKLLz+9/5hbzX3IMUWXn97/zC3mvuQYosvP73/mFvNfcg2juAfqKa02uvm/8xrT+rBtX0H5Ua9397/zANq+g/KjXu/vf+YWXZfcG1fQflRr3f3v/ADCy7L7jj/H/AMPfAnxU8G+Ifh58S/B3hnx94F8V6dPpPiXwf4v0XT/EPhzXdNuBiWy1TR9Ut7mxvIGIV1WeF/LlRJYyksaOulKrVoVI1aNSdOpB3hOE5RlFrqmndf0ioTlTkp05OEou6lF2afk0f463/BWr9l3wT+xh/wAFG/2sf2bPhqblPh78O/iRBP4IsbueS7n0Xwp468K+HfiPoPhxryYme9Xw1pfi+18PxXlyz3V1FpqT3UstzJLI37pkWMq5hleExddp1atN+0cVZOcJzpylbZOXJzNKyu3ZJWR+g5fXnicHQrVHecoe80rXcW4N/Plv89NND8669g7AoAKACgAoAKAIak0CgAoAKAHL3pMmXQfSJP6pv+CHH/BwJ8Ef+CU37KHxD/Z5+JXwE+KnxS1zxn+0P4q+M9p4g8D634U0zSbPSvEPw1+EvgaHRriDXriK7fULe8+HV9fSzRKbZrbUbREJljmx8dxHw1iM7xtHE0cTQoxpYSGHcaqm5OUa1eq5LlTVrVku90zxMzyqrj8RCtCrTpqNGFO01K94uTvov7x+zH/EZz+yf/0Z3+0L/wCFX8Of/k2vA/1Cxv8A0H4T/wABrf8AyJ53+rmI/wCgmh90/wDIP+Izn9k//ozv9oX/AMKv4c//ACbR/qFjf+g/Cf8AgNb/AORD/VzEf9BND7p/5B/xGc/sn/8ARnf7Qv8A4Vfw5/8Ak2j/AFCxv/QfhP8AwGt/8iH+rmI/6CaH3T/yD/iM5/ZP/wCjO/2hf/Cr+HP/AMm0f6hY3/oPwn/gNb/5EP8AVzEf9BND7p/5B/xGc/sn/wDRnf7Qv/hV/Dn/AOTaP9Qsb/0H4T/wGt/8iH+rmI/6CaH3T/yD/iM5/ZP/AOjO/wBoX/wq/hz/APJtH+oWN/6D8J/4DW/+RD/VzEf9BND7p/5B/wARnH7KHb9jv9oT8fF3w3X8gb3JqJcCY6P/ADG4V+kav6oT4dxC/wCYik/SM/8AIT/iM5/ZR/6M5/aF/wDCu+G3/wAnUf6i43/oMof+C6ov9Xa//P8Apf8AgMg/4jOf2Uf+jOf2hf8Awrvht/8AJ1H+ouN/6DKH/gqqH+rtf/n/AEv/AAGR+nf/AASn/wCC/fwU/wCCrfx58cfAX4bfAX4o/CzWfA3wk1X4uXeu+ONd8J6npl9pmk+MfBXg6XSbaDQLia6S+luvG1peJNKBbrb2VwjHzJIgfHzjh3EZPQp161elVjUrKilCM4yTdOdTmfMrWtBrvdo48blVXBU1VnVhNOSjaKknqm7u+nQ/fevnjyj/ACR/+DjYAf8ABaP9uHHfxN8JCfr/AMM8fCGv2rhV2yLA6/Yq/wDqRWPvMn/5F+H/AMM//Tkz8SK+kT7s9MWmAUwCgAoAKAIak0CgAoAKAHKQM0mS0O3D1pWYrM6zwN4D8cfE7xVo3gX4beDfFXxA8a+Irn7FoHhDwV4e1fxT4n1u72NKbbSdB0OzvtU1CdYkkleO0tZXSKOSVgERmGdWpToQlVrVIUqcfinUlGEFfRXlJqK+bRM5Rpxc5yjCK3lKUYxXrKTSXzZ95R/8Eff+CqEsaSp/wT2/a8KSIrrv+BPxAibawBG6OXRUkjYA/MjorKcggGvNee5Mrp5ngrrp7aL19Y3T+TON5ll6dnjMPfyqxf4q6+5jv+HPf/BVL/pHt+11/wCGN8ef/Keo/t/KOuY4O3lWiV/aGAf/ADG4b/wdD8r3D/hz3/wVS/6R7ftdf+GN8ef/ACno/wBYck/6GWE/8HwD6/gf+gzDf+DY/wCYf8Oe/wDgql/0j2/a6/8ADG+PP/lPR/rDkn/Qywn/AIPgH1/A/wDQZhv/AAbH/MP+HPf/AAVS/wCke37XX/hjfHn/AMp6P9Yck/6GWE/8HwD6/gf+gzDf+DY/5h/w57/4Kpf9I9v2uv8Awxvjz/5T0f6w5J/0MsJ/4PgH1/A/9BmG/wDBsf8AMX/hz1/wVR7/APBPf9rkfX4G+PP/AJT0f29k0vhzLB6d8RTX5tB/aOAW+MofKfN+V7B/w56/4Kof9I+f2uP/AAxvj3/5TVazzJ7X/tLBf+FNL9ZC/tLLv+gyj97/AMj49+N3wA+N37NfjY/Db9oD4U+Pfg34/XSbDXm8G/EbwzqnhPxGNF1UzrpuqHStXt7W7+w3xtbkWtyIzFMYJQjEowHbhsXhsbT9thK9LEUlKUHUpSU4c8fijzLS66nTTq0q0eelUjUg9pRd0f0//wDBm/8A8pGv2gv+zK/GZ/L45fAOvkOPP+RXhP8AsYQX/ltif8jxeIP90g/+nyX/AJJI/wBJKvys+NP8kf8A4ON/+U0f7cH/AGMvwj/9Z4+EVftHC/8AyIsB/gq/+pFY+9yf/kXYbzjP/wBO1F+h+JFfSHpC1a2QBTAKACgAoAhqTQKACgAoAKACgD/Qv/4M2v2cfhjD+zH+0j+1hceHNMvfjBq/x/1T4C2Pie8s4LjVPD3gLwd8Nvhf47n0vRLyRWl02DxJrfxHefXUtTGdQXQNEW5aRLKFV/MOPMXW+uYTBKclh/qqxMoKVoyqyrV6alJLdxjTtG+15NbnyHEVaft6VDmfs/ZKpyptJyc5xu+9lGy7Xfc/tD2+7fma/P7I+b+YbR6n8zRyoPn+X+QbR7/nRZef3k8q8/vDaPf86LLz+8OVef3htHv+dFl5/eHKvP7w2j3/ADosvP7w5V5/eKBimlYaVhaBn+X7/wAHaf8Aylmuv+zbvg3/AOlnjSv1vge39iK3/QXXv62p/pY+1yD/AHF/9f6n/tp7j/wZvf8AKRv9oL/syrxn/wCry+AVYcef8ivB/wDYxp/+o2KI4g/3OH/X+P8A6RM/0ka/Kz40/wAkb/g42/5TR/tw/wDYzfCT/wBZ4+ENftHC/wDyIsv/AMFX/wBSax97k/8AyLsL/hqf+n6p+JNfSHpC1a2QBTAKACgAoAhqTQKACgAoAKACgD/Sq/4M5P8AlGX8df8As+z4l/8ArP37MNfk/Hf/ACNsN/2LqX/qVjD4riL/AH2l/wBgy/8ATtU/q91K7Nhp1/fLGJTZ2dzdCItsEht4Xl2b9rbN+zbu2ttznacYPxcVzSiu7S+88JK7S7tL72kfwNzf8HpPxRilljH7APgIiOR0BP7QfiAEhGK5IHwnwCcZx26V+kf6gU3qszqRXZ4WEmvV/WF+R9T/AKtJaPFyb6tU4pfL3mR/8RpnxR/6MA8Bf+JB+IP/AJ09L/iH8P8AoaT/APCOP/zSH+ra/wCgqX/guP8A8kH/ABGmfFH/AKMA8Bf+JB+IP/nT0f8AEP4f9DSf/hHH/wCaQ/1bX/QVL/wXH/5IP+I0z4o/9GAeAv8AxIPxB/8AOno/4h/D/oaT/wDCOP8A80h/q2v+gqX/AILj/wDJB/xGmfFH/owDwF/4kH4g/wDnT0f8Q/h/0NJ/+Ecf/mkP9W1/0FS/8Fx/+SD/AIjTfih3/YB8Bj6ftB+IP/nTVMuAoRt/wpTf/crFf+52H+rcOuLqL0owl+c0L/xGm/E7/owHwH/4kH4g/wDnTVP+ocf+hjP/AMJo/wDy4P8AVun/ANBtX/wRD/5afzTf8FUv+Cimt/8ABUH9qmb9p/Xvhbpfwfvpfh34Q+Hw8H6R4qu/GNosHhKTWJY9TOs3uh+Hpmlvm1eQPbf2cqQCFAsspckfXZHlSyfA/U1Wdde2qVfaSgoP31FcvKpSWnLvfXsezgcHHA0PYxqSq+/KfNKCh8SWllKXbv1P28/4M3v+UjX7QX/ZlXjP/wBXl8Aq8Djz/kV4P/sY0/8A1GxR53EH+50/+v8AH/0iZ/pI1+Vnxp/kjf8ABxt/ymj/AG4f+xm+Ef8A6zx8Ia/aOF/+RFl/+Cr/AOpNY+9yf/kXYX/DU/8AT9U/EmvpD0hatbIApgFABQAUAQ1JoFABQAUAFABQB/pV/wDBnJ/yjK+On/Z9nxM/9Z+/Zhr8n48/5G+G/wCxdR/9ScWfFcRf77R/7BY/+nqx/Vj4h/5AGuf9gjUv/SOavidtTwo/FH/FH/0pH+Fnd/8AH1c/9d5v/RjV/RkPgj6I/U3v935H0p+yx+xn+1D+2z48uvhr+yz8FvGXxl8XadYx6prNp4Zt7O30zw9pcs62sWpeJvE2t3mleGPDVlPct9ntbnXtY06K7uA0Fs0sqOg5MdmOCy2kq2NxEMPTk+WLlduTte0YxTlJ+idupzV8TQw0eatUUE3ZX1bfWyV27eh+oH/ENN/wWfPP/DIQH1+NvwAz9Dj4nkZHfHHpXj/63ZB/0G/+Ua3/AMrOP+2cu/6CEvWE/wD5EX/iGl/4LQf9Ghr/AOHt+AP/AM8+k+L8gX/MY36UK/8A8rE86y5f8v7+kJ//ACIf8Q0v/BaD/o0Nf/D2/AH/AOefT/1vyD/oNf8A4Ir/APysP7ay7/n/AP8AlOf/AMiH/ENJ/wAFnz1/ZDH4fG34Af1+J9TLizIpbYz/AMo1/wD5WJ51l3/P/wD8kn/8iJ/xDR/8Fnv+jQx/4e34Af8Azz6n/WvIv+gz/wAo1v8A5WL+2cu/5/8A/kk//kRf+IaP/gs9/wBGh/8AmbfgB/8APPqlxZkXXG/+Ua//AMrD+2cu/wCf/wD5JP8A+RP6JP8Ag2p/4JGft/fsA/tp/GH4s/tXfAv/AIVh4C8U/sweJvh5oWuf8LC+GPi77b4u1D4q/CLxJaaV9g8E+MfEOp2/m6N4Y1u8+2XNnFYr9i8h7lbie3im+X4tzvLczwOGo4LEe2qQxkas4+zqQtTVCvByvOEU/enFW31v0PJzjMMLisPCFCrzyVTma5ZxsuWSv70Ut2j+2uvgD5k/yR/+Djf/AJTR/twf9jL8I/8A1nn4RV+0cL/8iLAf4Kv/AKkVj73J/wDkX4f0n/6cmfiRX0h6QtWtkAUwCgAoAKAIak0CgAoAKACgAoA/0q/+DOT/AJRlfHT/ALPs+Jn/AKz9+zDX5Px5/wAjfDf9i6j/AOpOLPiuIv8AfaP/AGCx/wDT1Y/qx8Q/8gDXP+wRqX/pHNXxJ4Ufij/ij/6Uj/Czu/8Aj6uf+u83/oxq/oyn8EfRH6m9/u/I/wBRH/g1L+FfgjwT/wAEmfAvjzw/oVjZeLfjH8U/i54n8fa8lvENT12+8MeNtW8AeH4Lq92/aJLDR/D3hiyh0+xaQ2tpc3WqXUEUc+pXsk/4/wAaVqtXOqlOdSTp4ejRp0qd/cgpU1Uk0tlKUptyfxNcqbskl8JntWc8wlBv3adOEYLtdKUvvuv62/pTr5KyPGCjlXmAUcq8wCmlYAoAKACgAPAoA/yI/wDg4K8X+HPHP/BYz9ubXvCurWOt6TB8RfCPheS+0+5iurddd8C/CT4e+B/FenGWFnT7Ro3inw7rOj3ke7dDeWE8MgWSN1X9t4XpuOR4CM4yi/ZSmk1a8alWpUhJd1KEoyT6ppn32Uxccvwye7hKVvJ1JNP5ppo/G0CvfaZ6aSYuBVLZDsgwKYWQYFAWQYFAWQYFAWRBSGFABQAUAOXvSZLHYHoKQrs/0pf+DOMk/wDBMv46f9n2fEz/ANZ//ZiH9K/JuOZXzahfpgKa+7EYr/M+L4gk3jqflh4r/wAq1f1/U/qz8Q/8gDW/+wRqP/pHNXxqV2l30+88RfFH/HD/ANKR/hZ3nF3c/wDXxMPykav6LgnyRT0aSUl2fVH6i5aJ23S/JH+qv/wa85/4c0fs4k/9Df8AHr/1dnjj/P4V+NcY6Z/i49PZ4WXzlh6bZ8DnOuY1319xf+SR/wAj9h/2ufiv4j+A/wCyp+0x8cPB9po9/wCLfg3+z98Zvir4XsfEVveXfh+98RfDz4c+JPF2i2mu2mnX+lahdaNc6lpFtDqdtY6ppl5PZPNFa6hZzulxH4ODowxGLw2Hm2oV69GlJxaUlGpUhCTi2mk0pNptNJ7pnBQp+1rUabvy1KtOEmt1GclFtX6q5/nq/wDEYn/wU7/6I3+w9/4bD44//RH1+lrgLKGrvE5nrr/Hw3/zIfWf6vYP/n7iP/Aqf/yoT/iMT/4Kd/8ARGv2Hv8Aw2Hxx/8Aoj6P9Qsn/wCgnM//AAfhv/mQf+r2D/5+4j/wKn/8qEb/AIPFP+Cnf/RGv2H/APw2PxyH8v2kKuPAeUL/AJiMxfrXo/8AtuGiC4dwb/5e4j/wKn/8rG/8Rin/AAU8/wCiN/sP/wDhsvjn/wDRIU/9Q8o/5/5h/wCD6f8A8pH/AKu4P/n7iPvp/wDysP8AiMU/4Kef9Eb/AGH/APw2Pxz/APokKP8AUPKP+f8AmH/g+n/8oD/V3B/8/cR99L/5WH/EYr/wU8/6I1+w9/4bH45//RI0f6hZP/0EZj/4Ppf/ADOH+ruD/wCfuI++j/8AKjyT41f8HYv/AAVY+L3gTWfA+hv+zx8C5tbs7rT7nxv8Fvhx4wsPHVnaXsLW840bV/iJ8TfiRYaLeCN3Ntq+l6Ra6zp8xW607ULS7igni2ocEZNRqRqSeLxCi7+yr1oypS7c8YU6bkv7rfK1pJNG1LIcDTalL2tWzTSqSjy6d1CEb+jdu6Z/NXqeralreo3+saxf3uravqt7danquq6nd3F/qWp6lfTyXV9qGoX128t1e315cyy3F3d3MstxczySTTSPI7MfroQjTioxSUUlGMUkoxilZJJaJJaJLRJJJaHr8iW1klskv8ijv9v1qxpW6/h/wRfM9qQ9f6X/AAQ8z2oDX+l/wQ8z2oDX+l/wQ8z2oDX+l/wQ8z2oDX+l/wAEjoGFABQAUAOXvSZMug+kSf6Uv/BnH/yjK+On/Z9nxM/9Z/8A2Yf/AK9fknHP/I2w/wD2BUv/AFKxif4JHxeff77H/rxH/wBO1v8AgH9WfiD/AJAOt/8AYJ1H/wBI5q+Pjo0+zPEW8f8AFH/0pH+Fje/8fd37XM//AKNav6Hpzbpxvq+VXfXY/UUrxj6L8kf6rX/Br1/yhn/Zw/7G/wCPf/q7fHNfjvF//I/xn+DC/wDqPTPg87/5GVf0p/8Apqmfpx/wUk/5R3/t5H0/Yx/ai/8AVH+Oa8jK/wDkZYD/ALDMN/6fpnFhL/W8Kl1xNH/04j/FjJya/eo6JI/R99T+in9mf/g2J/4KLftW/AL4TftHfDPxZ+y/Z+APjL4L0jx54StfFnxL8daX4kg0XWofPs49Z07TvhRrFlZ36p/r4LbVL6JG4W4frXy+M4wyzBYqvhKtPFuph6jpzlClFwcla/K3NXS2vbdM8itnWDoVp0ZqrzQk4ytBWTXrJP8AAxv2t/8Ag2k/4KEfsY/s6fFH9p74t+K/2Z774c/CHRLPX/FVp4L+I3jfWPFE1jfa3pWgQro+map8LNCsby4F9q9q7x3GrWSi3WZ1kaREik0wHFuV4/F0MHRhi1VxE1CMp0qagnZv3mqsmlZfyvoOhnWFr1oUacK3NUdk3GCXf/n43t5H89VfUntBQAUAFABQAUAFABQAUAFABQAUAFABQAUAKDii1xNXF3H2pWFZH+lR/wAGcf8AyjK+On/Z9nxM/wDWf/2Y/wDCvyPjj/kbUP8AsCh/6lYo+Jz7/fYf9eF+FWsf1Z+IP+QDrf8A2CdR/wDSOavj1ueIt4/4o/8ApSP8LK8/4/Lv/r5n/wDRr1/QlL+HH/CvyP1KPwx/wr8kf6A3/BBj/gtl/wAExv2NP+CZXwT/AGf/ANpT9puL4a/F3wl4l+Lt94g8Iv8ACH49eLGsLTxN8UvFfiLQ5v7b8C/C7xP4buhfaNqVleBLPWLiS3E/kXaQXMcsKfnHEnD+b47N8TicJg51qFSGHUKiqUYqThRhCWk6kZaSTTut12Pks0yvHYjHVq1GhKdOShaXNBXtTgno5J6NNao+6/23P+DhX/gj78XP2Mv2t/hT8Pf2v4PEPj74mfsyfHr4feCNAHwL/aW0s634v8Z/CrxX4c8NaQNS1r4Nado+nnUtZ1KyshfarqFjptoZ/tF9eWtrHLOnnYDhnPaGNwlapgJxp0sVh6lSXtaD5acK0JTlZVW3aKbsk32Ry4bJ8xp4nDVJ4aShTrU5zfPDSMZxcnpJt2Sb0XQ/zBO9frii7X9T7VKzS8z/AGJv+CJ3/KJr9gH/ALNr+Hv/AKQPX4dxF/yOcx/7Cqn5n55mf/Ixxn/X9nnP/BwL/wAoc/26/wDsmHh7/wBWf4Eq+Gv+R5l7Wlqz/wDTVT8uhWWaY/Df4p/+m5H+QzX7mfogUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAf6VP/BnH/yjK+On/Z9nxL/9UB+zHX5Fxx/yNqH/AGBw/wDUnFHxGff75D/rwv8A09WP6s/EP/IB1v8A7BGo9Bk/8ec3Ycn8K+PW6XdpfN6I8Nbx/wAUf/Skf4gt38DfjWbq6YfB/wCKJBuJiCPAHisggyMQeNJ7iv6BpVaSpxbrUkuVaurC2i6Pm1P06NWi4Raq0mnFf8vI9vW5X/4UZ8bP+iPfFL/w3/iz/wCVNX7eh/z/AKH/AIOp/wDyRXtaX/P2n/4HH/MP+FGfGz/oj3xS/wDDf+LP/lTR7eh/z/of+Dqf/wAkHtaX/P2n/wCBx/zA/A341gZPwe+KWPX/AIV/4s/+VFCxOHWn1ih6e2pdv8QvaUv+flK/+OH+Z/rwf8EYdM1LRf8AglT+wZpWsaffaVqlh+zj4Atb/TdStJ7G/srmKxdZbe7s7qOK4tp42yskU0aSIwIZQa/EeIZRlnGYyi1KLxVS0otNPXo1dM/PMyaeYYtppp13Zp3T801o0eV/8HAv/KHP9uz/ALJh4e/9Wf4Eq+Gf+R5l/wD1+f8A6bqFZZ/yMML/AIp/+m5H+QzX7ofooUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAf6Uv8AwZxTRN/wTP8AjvCHQyx/t0/EiR4wwLrHL8AP2ZxE7LnIR2ilVGIwxjcAnacfkfHC/wCFWh/2BR+9YrF/193c+Hz92xsE+tBf+nax/WfXxp4g3aOwA+gFLbRILJ77+i/UNopXfZfcKy8vuj/kG0UXfZfcFl5fdH/INopqUu1vkFl5fdH/ACFxQ1f/AIYLL+v+AfjX/wAHBtzbWn/BHD9umS5nit0k+G/hW1RppFjV7i9+K/w/s7SBSxAMtzdTw28KD5pJpUjUFmAr3eGYt57l1tf3s2/SNCrJ/gj0MrV8ww1t+af/AKbmf5EJUjtX7kfod/kGD6H8qAuu4YPofyoC67hg+h/KgLruGD6H8qAuu4YPofyoC67hg+h/KgLruGD6H8qAuu4YPofyoC67hg+h/KgLruGD6H8qAuu4lAwoAKACgAoAKAP22/4I1f8ABar4tf8ABJPxv41tbPwRbfGX4A/FifS734i/Cq716fw1qtp4g0a2ns9M8a+A/EX2PV7LRfEMdpOthrVrqOh6lp/ibSbWz0+4Om3dlpmsad87nuQUc5hBup7DE0rqnWUOdOL3hUhzR5o3V01JSi7tXu0/IzLLKePUXz+yrU78tTl5k4veEldNq6umndO71u0/6mYv+DzX9kAxp5v7In7SKSlV8xI9f+GMiK+PmVJG16FnUHhWaKMsMEopOB8a+A8fd2x2Da6Nxrpv5KnK33v1PE/1dxP/AD/oP5VF/wC2kn/EZn+x9/0aL+0p/wCDz4X/APzRUv8AUTH/APQdg/ur/wDyoP8AV3Ff8/8AD/8AlX/5WH/EZn+x9/0aL+0p/wCDz4Xf/NFR/qJj/wDoOwf3V/8A5UH+ruK/5/4f/wAq/wDysP8AiMz/AGPv+jRf2lP/AAefC/8A+aKj/UTH/wDQdg/ur/8AyoP9XcV/z/w//lX/AOVh/wARmX7H3/Rov7Sn/g8+F/8A80VH+omP/wCg3B/dX/8AlQv9XcV/z/w//lT/AOQF/wCIzL9j7/o0b9pP/wAHnwv/APmio/1Ex/8A0G4P7q//AMrH/q7iv+f9D/yp/wDIH4G/8Fnf+Divx/8A8FOfhtZ/s3/Cf4VXfwG/Z0bXNL8SeNrTXvEVv4n+IHxQ1Xw/eJqPhu01y50yz0/RPD3hTRNUjt9Zj8OWQ1u5v9e07StWudeSOwg01PpMg4Wp5RWeLr11icVyuNPli4U6KmnGbjduU5Si+XmkopRcko63PVy3J1g5+2qTVSrZqPKnGME97Xd5SfdpWTtbqfzSV9fHqe41cMVdxcq8wxRcOVeYYouHKvMMUXDlXmGKLhyrzDFFw5V5hii4cq8wxRcOVeYYouHKvMMUXDlXmQUigoAKACgAoAKAJR0H0FHL5kPdhRy+Ygo5fMAo5fMAo5fMAo5fMAo5fMBRUtWLjt8x1EeowqgCgAoAKACgAoAKACgAoAKAK9ABQAUAFABQAUASjoPoKZm936i0wCgAoAKACgAoAUVEuhcdvmLSj1GFUAUAFABQAUAFABQAUAFABQBXoAKACgAoAKACgCUdB9BTM3u/UWmAUAFABQAUAFACiol0Ljt8xaUeowqgCgAoAKACgAoAKACgAoAKAK9ABQAUAFABQAUASjoPoKZm936i0wCgAoAKACgAoAUVEuhcdvmLSj1GFUAUAFABQAUAFABQAUAFABQBXoAKACgAoAKACgCUdB9BTM3u/UWmAUAFABQAUAFACiol0Ljt8xaUeowqgCgAoAKACgAoAKACgAoAKAK9ABQAUAFABQAUASjoPoKZm936i0wCgAoAKACgAoAUVEuhcdvmLSj1GFUAUAFABQAUAFABQAUAFABQAP/Z" + icon: sponsorshipIcon } - if (entryPoint === entryPoint07Address) { - return { - ...singletonPaymasterV07.getDummyPaymasterData(paymasterMode), - paymasterVerificationGasLimit: toHex(50_000n), - paymasterPostOpGasLimit: toHex(100_000n), - sponsor: sponsorData, - isFinal: false - } - } + const is06 = entryPoint === entryPoint06Address - if (entryPoint === entryPoint06Address) { - return { - ...singletonPaymasterV06.getDummyPaymasterData(paymasterMode), - sponsor: sponsorData, - isFinal: false - } - } + const dummyPaymasterGas = is06 + ? {} + : { + paymasterVerificationGasLimit: toHex(50_000n), + paymasterPostOpGasLimit: toHex(100_000n) + } - throw new RpcError( - "EntryPoint not supported", - ValidationErrors.InvalidFields - ) + return { + ...getDummyPaymasterData({ + is06, + paymaster: epToPaymaster[entryPoint], + paymasterMode + }), + ...dummyPaymasterGas, + sponsor: sponsorData, + isFinal: false + } } if (parsedBody.method === "pm_getPaymasterData") { @@ -270,36 +252,15 @@ const handleMethod = async ( } const [userOperation, entryPoint, , data] = params.data - const paymasterMode = getPaymasterMode(data) - - if (entryPoint === entryPoint07Address) { - const { paymaster, paymasterData } = await handleMethodV07( - userOperation as UserOperation<"0.7">, - paymasterMode, - bundler, - singletonPaymasterV07, - false - ) - - return { paymaster, paymasterData } - } - - if (entryPoint === entryPoint06Address) { - const { paymasterAndData } = await handleMethodV06( - userOperation, - paymasterMode, - bundler, - singletonPaymasterV06, - false - ) - - return { paymasterAndData } - } - - throw new RpcError( - "EntryPoint not supported", - ValidationErrors.InvalidFields - ) + validateEntryPoint(entryPoint) + + return await getSignedPaymasterData({ + signer: paymasterSigner, + userOp: userOperation as UserOperation, + paymasterMode: getPaymasterMode(data), + paymaster: epToPaymaster[entryPoint], + publicClient + }) } if (parsedBody.method === "pm_validateSponsorshipPolicies") { @@ -309,7 +270,7 @@ const handleMethod = async ( data: { name: "Free ops for devs", author: "foo", - icon: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==", + icon: sponsorshipIcon, description: "Free userOps :)" } } @@ -337,7 +298,7 @@ const handleMethod = async ( allowanceSlot: "0x1", postOpGas: "0x1a2b3c" }, - [ERC20_ADDRESS]: { + [erc20Address]: { exchangeRateNativeToUsd: "0x5cc717fbb3450c0000000", exchangeRate: "0x5cc717fbb3450c0000", balanceSlot: "0x5", @@ -346,19 +307,12 @@ const handleMethod = async ( } } - let paymaster: Address - if (entryPoint === entryPoint07Address) { - paymaster = singletonPaymasterV07.singletonPaymaster.address - } else { - paymaster = singletonPaymasterV06.singletonPaymaster.address - } - return { quotes: tokens .filter((t) => quotes[t]) // Filter out unrecongized tokens .map((token) => ({ ...quotes[token], - paymaster, + paymaster: epToPaymaster[entryPoint], token })) } @@ -370,11 +324,15 @@ const handleMethod = async ( ) } -export const createRpcHandler = ( - bundler: BundlerClient, - singletonPaymasterV07: SingletonPaymasterV07, - singletonPaymasterV06: SingletonPaymasterV06 -) => { +export const createRpcHandler = ({ + bundler, + publicClient, + paymasterSigner +}: { + bundler: BundlerClient + publicClient: PublicClient + paymasterSigner: WalletClient +}) => { return async (request: FastifyRequest, _reply: FastifyReply) => { const body = request.body const parsedBody = jsonRpcSchema.safeParse(body) @@ -386,12 +344,12 @@ export const createRpcHandler = ( } try { - const result = await handleMethod( + const result = await handleMethod({ bundler, - singletonPaymasterV07, - singletonPaymasterV06, - parsedBody.data - ) + paymasterSigner, + parsedBody: parsedBody.data, + publicClient + }) return { jsonrpc: "2.0", @@ -422,7 +380,6 @@ export const createRpcHandler = ( const getPaymasterMode = (data: any): PaymasterMode => { if (data !== null && "token" in data) { isTokenSupported(data.token) - return { mode: "erc20", token: data.token } } diff --git a/packages/mock-paymaster/singletonPaymasters.ts b/packages/mock-paymaster/singletonPaymasters.ts index b58b6852..d4b05fa4 100644 --- a/packages/mock-paymaster/singletonPaymasters.ts +++ b/packages/mock-paymaster/singletonPaymasters.ts @@ -1,91 +1,102 @@ import { - http, type Account, type Address, type Chain, - type GetContractReturnType, type Hex, type PublicClient, type Transport, type WalletClient, concat, - createPublicClient, encodePacked, getContract, - getContractAddress, - getCreate2Address, - pad, parseEther, - slice, toBytes } from "viem" import { type UserOperation, toPackedUserOperation } from "viem/account-abstraction" -import { foundry } from "viem/chains" import { - SINGLETON_PAYMASTER_V06_ABI, - SINGLETON_PAYMASTER_V07_ABI + constants, + getSingletonPaymaster06Address, + getSingletonPaymaster06InitCode, + getSingletonPaymaster07Address, + getSingletonPaymaster07InitCode, + getSingletonPaymaster08Address, + getSingletonPaymaster08InitCode +} from "./constants.js" +import { + singletonPaymaster06Abi, + singletonPaymaster07Abi, + singletonPaymaster08Abi } from "./helpers/abi.js" -import { getPublicClient } from "./helpers/utils.js" import type { PaymasterMode } from "./helpers/utils.js" -const DETERMINISTIC_DEPLOYER = "0x4e59b44847b379578588920ca78fbf26c0b4956c" - -const EXCHANGE_RATE = 30_000_000n -const POST_OP_GAS_OVERHEAD = 100_000n - -export const getDummyPaymasterData = ( - isV6: boolean, - paymaster: Address, - paymasterMode: PaymasterMode -): { paymaster: Address; paymasterData: Hex } | { paymasterAndData: Hex } => { +export const getDummyPaymasterData = ({ + is06, + paymaster, + paymasterMode +}: { is06: boolean; paymaster: Address; paymasterMode: PaymasterMode }): + | { paymaster: Address; paymasterData: Hex } + | { paymasterAndData: Hex } => { let encodedDummyData: Hex const validUntil = 0 const validAfter = 0 + const paymasterValidationGasLimit = 1n const mode = paymasterMode.mode === "verifying" ? 0 : 1 + const allowAllBundlers = true + const modeAndAllowBundlers = (mode << 1) | (allowAllBundlers ? 1 : 0) + if (paymasterMode.mode === "verifying") { encodedDummyData = encodePacked( [ - "uint8", // mode + "uint8", // mode and allowAllBundler "uint48", // validUntil "uint48", // validAfter "bytes" // signature ], [ - mode, + modeAndAllowBundlers, validUntil, validAfter, - "0xcd91f19f0f19ce862d7bec7b7d9b95457145afc6f639c28fd0360f488937bfa41e6eedcd3a46054fd95fcd0e3ef6b0bc0a615c4d975eef55c8a3517257904d5b1c" + constants.dummySignature ] ) } else { encodedDummyData = encodePacked( [ - "uint8", // mode + "uint8", // combined byte (mode and allowAllBundlers) + "uint8", // constantFeePresent and recipientPresent and preFundPresent (1 byte) - 0000{preFundPresent bit}{recipientPresent bit}{constantFeePresent bit} "uint48", // validUntil "uint48", // validAfter - "address", // token - "uint128", // postOpGasOverhead + "address", // token address + "uint128", // postOpGas "uint256", // exchangeRate - "bytes" // signature + "uint128", // paymasterValidationGasLimit + "address" // treasury ], [ - mode, + modeAndAllowBundlers, + 0, validUntil, validAfter, paymasterMode.token, - POST_OP_GAS_OVERHEAD, - EXCHANGE_RATE, - "0xcd91f19f0f19ce862d7bec7b7d9b95457145afc6f639c28fd0360f488937bfa41e6eedcd3a46054fd95fcd0e3ef6b0bc0a615c4d975eef55c8a3517257904d5b1c" + constants.postOpGasOverhead, + constants.exchangeRate, + paymasterValidationGasLimit, + constants.treasury ] ) + + encodedDummyData = encodePacked( + ["bytes", "bytes"], + [encodedDummyData, constants.dummySignature] + ) } - if (isV6) { + if (is06) { return { paymasterAndData: concat([paymaster, encodedDummyData]) } @@ -97,285 +108,212 @@ export const getDummyPaymasterData = ( } } -// Creates the call that deploys the SingletonPaymaster v0.7 -const SINGLETON_PAYMASTER_V07_CALL = (owner: Address): Hex => - concat([ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x610160604052600060a052600160c052605060e052600c6101005260346101205260146101405234801561003257600080fd5b50604051612634380380612634833981016040819052610051916101aa565b828282808383806001600160a01b03811661008657604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61008f81610128565b50506001600160a01b031660805260005b81518110156100fa5760018060008484815181106100c0576100c061029d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016100a0565b5050600280546001600160a01b0319166001600160a01b039390931692909217909155506102b39350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461018f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156101bf57600080fd5b6101c884610178565b92506101d660208501610178565b60408501519092506001600160401b038111156101f257600080fd5b8401601f8101861361020357600080fd5b80516001600160401b0381111561021c5761021c610194565b604051600582901b90603f8201601f191681016001600160401b038111828210171561024a5761024a610194565b60405291825260208184018101929081018984111561026857600080fd5b6020850194505b8385101561028e5761028085610178565b81526020948501940161026f565b50809450505050509250925092565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e0516101005161012051610140516122b36103816000396000505060008181610c020152610dc7015260008181610665015261140801526000818161069901526115a4015260008181610c2e01528181610d0401528181610fb201526112a601526000818161063401528181610c5f01528181610cc50152818161110401526111e7015260008181610327015281816104370152818161058c01528181610700015281816107cd01528181610856015281816109090152610b6201526122b36000f3fe6080604052600436106101445760003560e01c80637c627b21116100c0578063c399ec8811610074578063eb12d61e11610059578063eb12d61e1461039b578063f0f44260146103bb578063f2fde38b146103db57600080fd5b8063c399ec881461037e578063d0e30db01461039357600080fd5b8063b0d691fe116100a5578063b0d691fe14610315578063bb9fe6bf14610349578063c23a5cea1461035e57600080fd5b80637c627b21146102ca5780638da5cb5b146102ea57600080fd5b80635525dcfb1161011757806363b241aa116100fc57806363b241aa14610255578063715018a614610275578063736c0d5b1461028a57600080fd5b80635525dcfb146101d557806361d027b31461020357600080fd5b80630396cb60146101495780630e316ab71461015e578063205c28781461017e57806352b7512c1461019e575b600080fd5b61015c610157366004611ba1565b6103fb565b005b34801561016a57600080fd5b5061015c610179366004611c00565b6104ad565b34801561018a57600080fd5b5061015c610199366004611c1d565b610538565b3480156101aa57600080fd5b506101be6101b9366004611c62565b6105d0565b6040516101cc929190611cb0565b60405180910390f35b3480156101e157600080fd5b506101f56101f0366004611d23565b6105f3565b6040519081526020016101cc565b34801561020f57600080fd5b506002546102309073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101cc565b34801561026157600080fd5b506101f5610270366004611d55565b610630565b34801561028157600080fd5b5061015c6106c6565b34801561029657600080fd5b506102ba6102a5366004611c00565b60016020526000908152604090205460ff1681565b60405190151581526020016101cc565b3480156102d657600080fd5b5061015c6102e5366004611dab565b6106da565b3480156102f657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610230565b34801561032157600080fd5b506102307f000000000000000000000000000000000000000000000000000000000000000081565b34801561035557600080fd5b5061015c6106f6565b34801561036a57600080fd5b5061015c610379366004611c00565b610780565b34801561038a57600080fd5b506101f5610825565b61015c6108db565b3480156103a757600080fd5b5061015c6103b6366004611c00565b610963565b3480156103c757600080fd5b5061015c6103d6366004611c00565b6109eb565b3480156103e757600080fd5b5061015c6103f6366004611c00565b610a8e565b610403610af7565b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815263ffffffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690630396cb609034906024016000604051808303818588803b15801561049157600080fd5b505af11580156104a5573d6000803e3d6000fd5b505050505050565b6104b5610af7565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b91015b60405180910390a150565b610540610af7565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063205c287890604401600060405180830381600087803b15801561049157600080fd5b606060006105dc610b4a565b6105e7858585610be9565b91509150935093915050565b6000670de0b6b3a7640000826106098587611e77565b6106139088611e8e565b61061d9190611e77565b6106279190611ea1565b95945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000060ff168360ff16036106935761068c827f000000000000000000000000000000000000000000000000000000000000000060ff16610d50565b90506106c0565b61068c827f000000000000000000000000000000000000000000000000000000000000000060ff16610d50565b92915050565b6106ce610af7565b6106d86000610ecd565b565b6106e2610b4a565b6106ef8585858585610f42565b5050505050565b6106fe610af7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561076657600080fd5b505af115801561077a573d6000803e3d6000fd5b50505050565b610788610af7565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90602401600060405180830381600087803b15801561081157600080fd5b505af11580156106ef573d6000803e3d6000fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156108b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d69190611edc565b905090565b6040517fb760faf90000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b760faf99034906024016000604051808303818588803b15801561081157600080fd5b61096b610af7565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602081815260409283902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690921790915590519182527f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f24910161052d565b6109f3610af7565b6002546040805173ffffffffffffffffffffffffffffffffffffffff928316815291831660208301527f4ab5be82436d353e61ca18726e984e561f5c1cc7c6d38b29d2553c790434705a910160405180910390a1600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610a96610af7565b73ffffffffffffffffffffffffffffffffffffffff8116610aeb576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b610af481610ecd565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106d8576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610ae2565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f53656e646572206e6f7420456e747279506f696e7400000000000000000000006044820152606401610ae2565b60606000803681610c26610c0060e08a018a611ef5565b7f000000000000000000000000000000000000000000000000000000000000000061103e565b9250925092507f000000000000000000000000000000000000000000000000000000000000000060ff168360ff1614158015610c8857507f000000000000000000000000000000000000000000000000000000000000000060ff168360ff1614155b15610cbf576040517f654a4f2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606060007f000000000000000000000000000000000000000000000000000000000000000060ff168560ff1603610d0257610cfc8a85858c6110de565b90925090505b7f000000000000000000000000000000000000000000000000000000000000000060ff168560ff1603610d4157610d3b8a85858c61128b565b90925090505b90999098509650505050505050565b60008083356020850135608086013560a087013560c0880135610d7660408a018a611ef5565b604051610d84929190611f61565b604051908190039020610d9a60608b018b611ef5565b604051610da8929190611f61565b604051908190039020610dbe60e08c018c611ef5565b600090610deb8d7f0000000000000000000000000000000000000000000000000000000000000000611e8e565b92610df893929190611f71565b604051610e06929190611f61565b6040805191829003822073ffffffffffffffffffffffffffffffffffffffff90991660208301528101969096526060860194909452608085019290925260a084015260c083015260e082015261010081019190915261012001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120908301819052469183019190915230606083015291506080016040516020818303038152906040528051906020012091505092915050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806000806000610f54898961134d565b5050945094509450945094506000610f8088846fffffffffffffffffffffffffffffffff1689876105f3565b600254909150610faa908690889073ffffffffffffffffffffffffffffffffffffffff16846113a2565b6040805160ff7f000000000000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff8781166020830152918101839052606081018690529087169083907f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd29060800160405180910390a35050505050505050505050565b6000368161104d846001611e8e565b851015611086576040517fcc32193e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000868587611096826001611e8e565b926110a393929190611f71565b6110ac91611f9b565b60f81c905036600088886110c1896001611e8e565b6110cc928290611f71565b939a9099509297509195505050505050565b606060008060003660006110f289896113ff565b9350935093509350600061115c6111297f00000000000000000000000000000000000000000000000000000000000000008d610630565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b905060006111a08285858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150a92505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205491925060ff909116906111db82158989611534565b90508d356040805160ff7f0000000000000000000000000000000000000000000000000000000000000000168152600060208201819052918101829052606081019190915273ffffffffffffffffffffffffffffffffffffffff91909116908c907f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd29060800160405180910390a36040805160208101909152600081529e909d509b505050505050505050505050565b606060008061129a868661156c565b905060006112cb6111297f00000000000000000000000000000000000000000000000000000000000000008a610630565b905060006112dd828460a0015161150a565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604082205486519187015193945060ff169261131e91841591611534565b9050600061133b8c8760600151886080015189604001518d61181e565b9c919b50909950505050505050505050565b600080808080808080611362898b018b612021565b9050806000015181602001518260400151836060015184608001518560a001518660c0015197509750975097509750975097505092959891949750929550565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c52602060006064601c6000895af13d1560016000511417166113f157637939f4246000526004601cfd5b600060605260405250505050565b600080368160ff7f000000000000000000000000000000000000000000000000000000000000000016851015611461576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611470600682888a611f71565b611479916120e3565b60d01c9050600061148e600c6006898b611f71565b611497916120e3565b60d01c90503660006114ac89600c818d611f71565b9092509050604081148015906114c3575060418114155b156114fa576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9299919850965090945092505050565b60008060008061151a8686611952565b92509250925061152a828261199f565b5090949350505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561155c57600061155f565b60015b60ff161717949350505050565b6040805160c0810182526000808252602082018190529181018290526060808201839052608082019290925260a081019190915260ff7f0000000000000000000000000000000000000000000000000000000000000000168210156115fd576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061160c6006828587611f71565b611615916120e3565b60d01c9050600061162a600c60068688611f71565b611633916120e3565b60d01c905060006116486020600c8789611f71565b61165191612148565b60601c9050600061166660306020888a611f71565b61166f916121ad565b60801c9050600061168460506030898b611f71565b61168d91612212565b905036600061169f896050818d611f71565b909250905073ffffffffffffffffffffffffffffffffffffffff85166116f1576040517f33c1dac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361172b576040517f5b33c69600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040811480159061173d575060418114155b15611774576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518060c001604052808965ffffffffffff1681526020018865ffffffffffff168152602001866fffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509b9a5050505050505050505050565b6040805160e081019091526060908061183a6020890189611c00565b73ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001846fffffffffffffffffffffffffffffffff1681526020018381526020016000815260200160008152506040516020016119389190600060e08201905073ffffffffffffffffffffffffffffffffffffffff835116825273ffffffffffffffffffffffffffffffffffffffff6020840151166020830152604083015160408301526fffffffffffffffffffffffffffffffff60608401511660608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b604051602081830303815290604052905095945050505050565b6000806000835160410361198c5760208401516040850151606086015160001a61197e88828585611aa7565b955095509550505050611998565b50508151600091506002905b9250925092565b60008260038111156119b3576119b361224e565b036119bc575050565b60018260038111156119d0576119d061224e565b03611a07576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611a1b57611a1b61224e565b03611a55576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610ae2565b6003826003811115611a6957611a6961224e565b03611aa3576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610ae2565b5050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115611ae25750600091506003905082611b97565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611b36573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611b8d57506000925060019150829050611b97565b9250600091508190505b9450945094915050565b600060208284031215611bb357600080fd5b813563ffffffff81168114611bc757600080fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610af457600080fd5b8035611bfb81611bce565b919050565b600060208284031215611c1257600080fd5b8135611bc781611bce565b60008060408385031215611c3057600080fd5b8235611c3b81611bce565b946020939093013593505050565b60006101208284031215611c5c57600080fd5b50919050565b600080600060608486031215611c7757600080fd5b833567ffffffffffffffff811115611c8e57600080fd5b611c9a86828701611c49565b9660208601359650604090950135949350505050565b604081526000835180604084015260005b81811015611cde5760208187018101516060868401015201611cc1565b5060006060828501015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168401019150508260208301529392505050565b60008060008060808587031215611d3957600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215611d6857600080fd5b823560ff81168114611d7957600080fd5b9150602083013567ffffffffffffffff811115611d9557600080fd5b611da185828601611c49565b9150509250929050565b600080600080600060808688031215611dc357600080fd5b853560038110611dd257600080fd5b9450602086013567ffffffffffffffff811115611dee57600080fd5b8601601f81018813611dff57600080fd5b803567ffffffffffffffff811115611e1657600080fd5b886020828401011115611e2857600080fd5b959860209190910197509495604081013595606090910135945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176106c0576106c0611e48565b808201808211156106c0576106c0611e48565b600082611ed7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611eee57600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611f2a57600080fd5b83018035915067ffffffffffffffff821115611f4557600080fd5b602001915036819003821315611f5a57600080fd5b9250929050565b8183823760009101908152919050565b60008085851115611f8157600080fd5b83861115611f8e57600080fd5b5050820193919092039150565b80357fff000000000000000000000000000000000000000000000000000000000000008116906001841015611ffa577fff00000000000000000000000000000000000000000000000000000000000000808560010360031b1b82161691505b5092915050565b80356fffffffffffffffffffffffffffffffff81168114611bfb57600080fd5b600060e082840312801561203457600080fd5b6000905060405160e0810181811067ffffffffffffffff82111715612080577f4e487b710000000000000000000000000000000000000000000000000000000083526041600452602483fd5b60405261208c84611bf0565b815261209a60208501611bf0565b6020820152604084810135908201526120b560608501612001565b60608201526080848101359082015260a0808501359082015260c09384013593810193909352509092915050565b80357fffffffffffff00000000000000000000000000000000000000000000000000008116906006841015611ffa577fffffffffffff0000000000000000000000000000000000000000000000000000808560060360031b1b82161691505092915050565b80357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116906014841015611ffa577fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808560140360031b1b82161691505092915050565b80357fffffffffffffffffffffffffffffffff000000000000000000000000000000008116906010841015611ffa577fffffffffffffffffffffffffffffffff00000000000000000000000000000000808560100360031b1b82161691505092915050565b803560208310156106c0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea2646970667358221220d4b47765504d1aee07971ecb33f299cd13465059fbfeb55e32bdeb75ec9e629264736f6c634300081a00330000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", - pad(owner), - "0x00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001", // couldn't get encodeAbiParameters with type address[] to work - pad(owner) - ]) +export const getSignedPaymasterData = async ({ + publicClient, + signer, + userOp, + paymaster, + paymasterMode +}: { + publicClient: PublicClient + signer: WalletClient + userOp: UserOperation + paymaster: Address + paymasterMode: PaymasterMode +}) => { + let paymasterData: Hex -// Creates the call that deploys the SingletonPaymaster v0.6 -const SINGLETON_PAYMASTER_V06_CALL = (owner: Address): Hex => - concat([ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x610140604052600060a052600160c052605060e052600c6101005260146101205234801561002c57600080fd5b5060405161270838038061270883398101604081905261004b916101a4565b828282808383806001600160a01b03811661008057604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61008981610122565b50506001600160a01b031660805260005b81518110156100f45760018060008484815181106100ba576100ba610297565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010161009a565b5050600280546001600160a01b0319166001600160a01b039390931692909217909155506102ad9350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461018957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156101b957600080fd5b6101c284610172565b92506101d060208501610172565b60408501519092506001600160401b038111156101ec57600080fd5b8401601f810186136101fd57600080fd5b80516001600160401b038111156102165761021661018e565b604051600582901b90603f8201601f191681016001600160401b03811182821017156102445761024461018e565b60405291825260208184018101929081018984111561026257600080fd5b6020850194505b838510156102885761027a85610172565b815260209485019401610269565b50809450505050509250925092565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e051610100516101205161239561037360003960008181610e980152610fc70152600081816108da01526114f501526000818161090e0152611691015260008181610d7801528181610ff3015281816110c901526114450152600081816108a9015281816110240152818161108a0152818161129b01526113870152600081816102d501528181610433015281816105880152818161064101528181610708015281816107980152818161084b0152610bd201526123956000f3fe6080604052600436106101445760003560e01c8063b0d691fe116100c0578063dd16f84711610074578063f0f4426011610059578063f0f4426014610389578063f2fde38b146103a9578063f465c77e146103c957600080fd5b8063dd16f84714610349578063eb12d61e1461036957600080fd5b8063c23a5cea116100a5578063c23a5cea1461030c578063c399ec881461032c578063d0e30db01461034157600080fd5b8063b0d691fe146102c3578063bb9fe6bf146102f757600080fd5b806361d027b311610117578063736c0d5b116100fc578063736c0d5b146102385780638da5cb5b14610278578063a9a23409146102a357600080fd5b806361d027b3146101d1578063715018a61461022357600080fd5b80630396cb60146101495780630e316ab71461015e578063205c28781461017e5780635525dcfb1461019e575b600080fd5b61015c610157366004611c95565b6103f7565b005b34801561016a57600080fd5b5061015c610179366004611ced565b6104a9565b34801561018a57600080fd5b5061015c610199366004611d0a565b610534565b3480156101aa57600080fd5b506101be6101b9366004611d36565b6105cc565b6040519081526020015b60405180910390f35b3480156101dd57600080fd5b506002546101fe9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c8565b34801561022f57600080fd5b5061015c610609565b34801561024457600080fd5b50610268610253366004611ced565b60016020526000908152604090205460ff1681565b60405190151581526020016101c8565b34801561028457600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166101fe565b3480156102af57600080fd5b5061015c6102be366004611d68565b61061d565b3480156102cf57600080fd5b506101fe7f000000000000000000000000000000000000000000000000000000000000000081565b34801561030357600080fd5b5061015c610637565b34801561031857600080fd5b5061015c610327366004611ced565b6106bb565b34801561033857600080fd5b506101be610767565b61015c61081d565b34801561035557600080fd5b506101be610364366004611e13565b6108a5565b34801561037557600080fd5b5061015c610384366004611ced565b61093b565b34801561039557600080fd5b5061015c6103a4366004611ced565b6109c3565b3480156103b557600080fd5b5061015c6103c4366004611ced565b610a66565b3480156103d557600080fd5b506103e96103e4366004611e69565b610acf565b6040516101c8929190611eb7565b6103ff610af2565b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815263ffffffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690630396cb609034906024016000604051808303818588803b15801561048d57600080fd5b505af11580156104a1573d6000803e3d6000fd5b505050505050565b6104b1610af2565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b91015b60405180910390a150565b61053c610af2565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063205c287890604401600060405180830381600087803b15801561048d57600080fd5b6000670de0b6b3a7640000826105e28587611f59565b6105ec9088611f70565b6105f69190611f59565b6106009190611f83565b95945050505050565b610611610af2565b61061b6000610b45565b565b610625610bba565b61063184848484610c59565b50505050565b61063f610af2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156106a757600080fd5b505af1158015610631573d6000803e3d6000fd5b6106c3610af2565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90602401600060405180830381600087803b15801561074c57600080fd5b505af1158015610760573d6000803e3d6000fd5b5050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156107f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108189190611fbe565b905090565b6040517fb760faf90000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b760faf99034906024016000604051808303818588803b15801561074c57600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000060ff168360ff160361090857610901827f000000000000000000000000000000000000000000000000000000000000000060ff16610e08565b9050610935565b610901827f000000000000000000000000000000000000000000000000000000000000000060ff16610e08565b92915050565b610943610af2565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602081815260409283902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690921790915590519182527f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f249101610529565b6109cb610af2565b6002546040805173ffffffffffffffffffffffffffffffffffffffff928316815291831660208301527f4ab5be82436d353e61ca18726e984e561f5c1cc7c6d38b29d2553c790434705a910160405180910390a1600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610a6e610af2565b73ffffffffffffffffffffffffffffffffffffffff8116610ac3576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b610acc81610b45565b50565b60606000610adb610bba565b610ae6858585610fad565b91509150935093915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461061b576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610aba565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461061b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f53656e646572206e6f7420456e747279506f696e7400000000000000000000006044820152606401610aba565b6000806000806000806000610c6e8a8a611115565b96509650965096509650965096506000818303610c8c575081610ca2565b610c9f83610c9a4885611f70565b61116a565b90505b6000610cc28a876fffffffffffffffffffffffffffffffff16848a6105cc565b905060028d6002811115610cd857610cd8611fd7565b14610df957600254600090610d07908a908c9073ffffffffffffffffffffffffffffffffffffffff1685611182565b905080610d70576040517f1db0f4fb00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610aba565b6040805160ff7f000000000000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff8b81166020830152918101849052606081018a9052908b169087907f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd29060800160405180910390a3505b50505050505050505050505050565b600080610e186020850185611ced565b6020850135608086013560a087013560c088013560e08901356101008a0135610e4460608c018c612006565b604051610e52929190612072565b60405180910390208b8060400190610e6a9190612006565b604051610e78929190612072565b604051908190039020610e8f6101208e018e612006565b600090610ebc8f7f0000000000000000000000000000000000000000000000000000000000000000611f70565b92610ec993929190612082565b604051610ed7929190612072565b6040805191829003822073ffffffffffffffffffffffffffffffffffffffff909b1660208301528101989098526060880196909652608087019490945260a086019290925260c085015260e084015261010083015261012082015261014081019190915261016001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120908301819052469183019190915230606083015291506080016040516020818303038152906040528051906020012091505092915050565b60606000803681610feb610fc56101208a018a612006565b7f00000000000000000000000000000000000000000000000000000000000000006111d5565b9250925092507f000000000000000000000000000000000000000000000000000000000000000060ff168360ff161415801561104d57507f000000000000000000000000000000000000000000000000000000000000000060ff168360ff1614155b15611084576040517f654a4f2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606060007f000000000000000000000000000000000000000000000000000000000000000060ff168560ff16036110c7576110c18a85858c611275565b90925090505b7f000000000000000000000000000000000000000000000000000000000000000060ff168560ff1603611106576111008a85858c61142a565b90925090505b90999098509650505050505050565b60008080808080808061112a898b018b6120cc565b9050806000015181602001518260400151836060015184608001518560a001518660c0015197509750975097509750975097505092959891949750929550565b6000818310611179578161117b565b825b9392505050565b600060405182606052836040528460601b602c526f23b872dd000000000000000000000000600c52602060006064601c60008a5af13d156001600051141716915060006060528060405250949350505050565b600036816111e4846001611f70565b85101561121d576040517fcc32193e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600086858761122d826001611f70565b9261123a93929190612082565b6112439161218e565b60f81c90503660008888611258896001611f70565b611263928290612082565b939a9099509297509195505050505050565b6060600080600036600061128989896114ec565b935093509350935060006112f36112c07f00000000000000000000000000000000000000000000000000000000000000008d6108a5565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b905060006113378285858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115f792505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205491925060ff9091169061137282158989611621565b905061138160208f018f611ced565b604080517f000000000000000000000000000000000000000000000000000000000000000060ff1681526000602082018190528183018190526060820152905173ffffffffffffffffffffffffffffffffffffffff92909216918d917f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd2919081900360800190a36040805160208101909152600081529e909d509b505050505050505050505050565b60606000806114398686611659565b9050600061146a6112c07f00000000000000000000000000000000000000000000000000000000000000008a6108a5565b9050600061147c828460a001516115f7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604082205486519187015193945060ff16926114bd91841591611621565b905060006114da8c8760600151886080015189604001518d61190b565b9c919b50909950505050505050505050565b600080368160ff7f00000000000000000000000000000000000000000000000000000000000000001685101561154e576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061155d600682888a612082565b611566916121f4565b60d01c9050600061157b600c6006898b612082565b611584916121f4565b60d01c905036600061159989600c818d612082565b9092509050604081148015906115b0575060418114155b156115e7576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9299919850965090945092505050565b6000806000806116078686611a46565b9250925092506116178282611a93565b5090949350505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561164957600061164c565b60015b60ff161717949350505050565b6040805160c0810182526000808252602082018190529181018290526060808201839052608082019290925260a081019190915260ff7f0000000000000000000000000000000000000000000000000000000000000000168210156116ea576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116f96006828587612082565b611702916121f4565b60d01c90506000611717600c60068688612082565b611720916121f4565b60d01c905060006117356020600c8789612082565b61173e91612259565b60601c9050600061175360306020888a612082565b61175c916122be565b60801c9050600061177160506030898b612082565b61177a91612323565b905036600061178c896050818d612082565b909250905073ffffffffffffffffffffffffffffffffffffffff85166117de576040517f33c1dac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003611818576040517f5b33c69600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040811480159061182a575060418114155b15611861576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518060c001604052808965ffffffffffff1681526020018865ffffffffffff168152602001866fffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509b9a5050505050505050505050565b6040805160e08101909152606090806119276020890189611ced565b73ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001846fffffffffffffffffffffffffffffffff1681526020018381526020018760e001358152602001876101000135815250604051602001611a2c9190600060e08201905073ffffffffffffffffffffffffffffffffffffffff835116825273ffffffffffffffffffffffffffffffffffffffff6020840151166020830152604083015160408301526fffffffffffffffffffffffffffffffff60608401511660608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b604051602081830303815290604052905095945050505050565b60008060008351604103611a805760208401516040850151606086015160001a611a7288828585611b9b565b955095509550505050611a8c565b50508151600091506002905b9250925092565b6000826003811115611aa757611aa7611fd7565b03611ab0575050565b6001826003811115611ac457611ac4611fd7565b03611afb576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611b0f57611b0f611fd7565b03611b49576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610aba565b6003826003811115611b5d57611b5d611fd7565b03611b97576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610aba565b5050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115611bd65750600091506003905082611c8b565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611c2a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611c8157506000925060019150829050611c8b565b9250600091508190505b9450945094915050565b600060208284031215611ca757600080fd5b813563ffffffff8116811461117b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff81168114610acc57600080fd5b8035611ce881611cbb565b919050565b600060208284031215611cff57600080fd5b813561117b81611cbb565b60008060408385031215611d1d57600080fd5b8235611d2881611cbb565b946020939093013593505050565b60008060008060808587031215611d4c57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060008060608587031215611d7e57600080fd5b843560038110611d8d57600080fd5b9350602085013567ffffffffffffffff811115611da957600080fd5b8501601f81018713611dba57600080fd5b803567ffffffffffffffff811115611dd157600080fd5b876020828401011115611de357600080fd5b949760209190910196509394604001359392505050565b60006101608284031215611e0d57600080fd5b50919050565b60008060408385031215611e2657600080fd5b823560ff81168114611e3757600080fd5b9150602083013567ffffffffffffffff811115611e5357600080fd5b611e5f85828601611dfa565b9150509250929050565b600080600060608486031215611e7e57600080fd5b833567ffffffffffffffff811115611e9557600080fd5b611ea186828701611dfa565b9660208601359650604090950135949350505050565b604081526000835180604084015260005b81811015611ee55760208187018101516060868401015201611ec8565b5060006060828501015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168401019150508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761093557610935611f2a565b8082018082111561093557610935611f2a565b600082611fb9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611fd057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261203b57600080fd5b83018035915067ffffffffffffffff82111561205657600080fd5b60200191503681900382131561206b57600080fd5b9250929050565b8183823760009101908152919050565b6000808585111561209257600080fd5b8386111561209f57600080fd5b5050820193919092039150565b80356fffffffffffffffffffffffffffffffff81168114611ce857600080fd5b600060e08284031280156120df57600080fd5b6000905060405160e0810181811067ffffffffffffffff8211171561212b577f4e487b710000000000000000000000000000000000000000000000000000000083526041600452602483fd5b60405261213784611cdd565b815261214560208501611cdd565b602082015260408481013590820152612160606085016120ac565b60608201526080848101359082015260a0808501359082015260c09384013593810193909352509092915050565b80357fff0000000000000000000000000000000000000000000000000000000000000081169060018410156121ed577fff00000000000000000000000000000000000000000000000000000000000000808560010360031b1b82161691505b5092915050565b80357fffffffffffff000000000000000000000000000000000000000000000000000081169060068410156121ed577fffffffffffff0000000000000000000000000000000000000000000000000000808560060360031b1b82161691505092915050565b80357fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081169060148410156121ed577fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808560140360031b1b82161691505092915050565b80357fffffffffffffffffffffffffffffffff0000000000000000000000000000000081169060108410156121ed577fffffffffffffffffffffffffffffffff00000000000000000000000000000000808560100360031b1b82161691505092915050565b80356020831015610935577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b169291505056fea2646970667358221220b198dacaa988aafcb9441005f2a899880d533689da493c4dc98e301d7822f21a64736f6c634300081a00330000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", - pad(owner), - "0x00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001", // couldn't get encodeAbiParameters with type address[] to work - pad(owner) - ]) + const validAfter = 0 + const validUntil = Math.floor(Date.now() / 1000) + constants.validForSeconds -const SINGLETON_PAYMASTER_V06_ADDRESS = (owner: Address) => - getCreate2Address({ - from: DETERMINISTIC_DEPLOYER, - salt: slice(SINGLETON_PAYMASTER_V06_CALL(owner), 0, 32), - bytecode: slice(SINGLETON_PAYMASTER_V06_CALL(owner), 32) - }) + const mode = paymasterMode.mode === "verifying" ? 0 : 1 + const allowAllBundlers = true + const modeAndAllowBundlers = (mode << 1) | (allowAllBundlers ? 1 : 0) -const SINGLETON_PAYMASTER_V07_ADDRESS = (owner: Address) => - getCreate2Address({ - from: DETERMINISTIC_DEPLOYER, - salt: slice(SINGLETON_PAYMASTER_V07_CALL(owner), 0, 32), - bytecode: slice(SINGLETON_PAYMASTER_V07_CALL(owner), 32) - }) + if (paymasterMode.mode === "verifying") { + paymasterData = encodePacked( + [ + "uint8", // mode and allowAllBundler + "uint48", // validUntil + "uint48" // validAfter + ], + [modeAndAllowBundlers, validUntil, validAfter] + ) + } else { + const paymasterValidationGasLimit = 1n -export class SingletonPaymasterV07 { - private anvilRpc: string - private walletClient: WalletClient - public singletonPaymaster: GetContractReturnType< - typeof SINGLETON_PAYMASTER_V07_ABI, - { - public: PublicClient - wallet: WalletClient - } - > - - constructor( - walletClient: WalletClient, - anvilRpc: string - ) { - this.walletClient = walletClient - this.singletonPaymaster = getContract({ - address: SINGLETON_PAYMASTER_V07_ADDRESS( - walletClient.account.address - ), - abi: SINGLETON_PAYMASTER_V07_ABI, - client: { - wallet: walletClient as WalletClient, - public: getPublicClient(anvilRpc) - } - }) - this.anvilRpc = anvilRpc - } + const constantFeePresent = false + const recipientPresent = false + const preFundPresent = false - public getDummyPaymasterData(paymasterMode: PaymasterMode): { - paymaster: Address - paymasterData: Hex - } { - return getDummyPaymasterData( - false, - this.singletonPaymaster.address, - paymasterMode - ) as { - paymaster: Address - paymasterData: Hex - } - } + const constantFeeAndRecipientAndPreFund = + ((preFundPresent ? 1 : 0) << 2) | + ((recipientPresent ? 1 : 0) << 1) | + (constantFeePresent ? 1 : 0) - async encodePaymasterData( - op: UserOperation<"0.7">, - paymasterMode: PaymasterMode - ) { - const validAfter = 0 - const validUntil = Math.floor(Date.now() / 1000) + 60_000 - - const mode = paymasterMode.mode === "verifying" ? 0 : 1 - op.paymaster = this.singletonPaymaster.address - op.paymasterData = encodePacked( - ["uint8", "uint48", "uint48"], - [mode, validUntil, validAfter] + paymasterData = encodePacked( + [ + "uint8", // combined byte (mode and allowAllBundlers) + "uint8", // constantFeePresent and recipientPresent and preFundPresent (1 byte) - 0000{preFundPresent bit}{recipientPresent bit}{constantFeePresent bit} + "uint48", // validUntil + "uint48", // validAfter + "address", // token address + "uint128", // postOpGas + "uint256", // exchangeRate + "uint128", // paymasterValidationGasLimit + "address" // treasury + ], + [ + modeAndAllowBundlers, + constantFeeAndRecipientAndPreFund, + validUntil, + validAfter, + paymasterMode.token, + constants.postOpGasOverhead, + constants.exchangeRate, + paymasterValidationGasLimit, + constants.treasury + ] ) + } - // if ERC-20 mode, add extra ERC-20 fields - if (paymasterMode.mode === "erc20") { - op.paymasterData = encodePacked( - ["bytes", "address", "uint128", "uint256"], - [ - op.paymasterData, - paymasterMode.token, - POST_OP_GAS_OVERHEAD, - EXCHANGE_RATE - ] - ) - } + if ("initCode" in userOp && "paymasterAndData" in userOp) { + const singletonPaymaster = getContract({ + address: paymaster, + abi: singletonPaymaster06Abi, + client: publicClient + }) - const hash = await this.singletonPaymaster.read.getHash([ + const hash = await singletonPaymaster.read.getHash([ mode, - toPackedUserOperation(op) + { + sender: userOp.sender, + nonce: userOp.nonce, + initCode: userOp.initCode || "0x", + callData: userOp.callData, + callGasLimit: userOp.callGasLimit, + verificationGasLimit: userOp.verificationGasLimit, + preVerificationGas: userOp.preVerificationGas, + maxFeePerGas: userOp.maxFeePerGas, + maxPriorityFeePerGas: userOp.maxPriorityFeePerGas, + paymasterAndData: concat([paymaster, paymasterData]), + signature: userOp.signature + } ]) - const sig = await this.walletClient.signMessage({ + const sig = await signer.signMessage({ message: { raw: toBytes(hash) } }) return { - paymaster: this.singletonPaymaster.address, - paymasterData: encodePacked( - ["bytes", "bytes"], - [op.paymasterData, sig] - ) + paymasterAndData: concat([paymaster, paymasterData, sig]) } } - async setup() { - const data = SINGLETON_PAYMASTER_V07_CALL( - this.walletClient.account.address - ) - - const publicClient = createPublicClient({ - transport: http(this.anvilRpc), - chain: foundry - }) + // userOperation is v07 + const singletonPaymaster = getContract({ + address: paymaster, + abi: singletonPaymaster07Abi, + client: publicClient + }) - await this.walletClient - .sendTransaction({ - to: DETERMINISTIC_DEPLOYER, - data - }) - .then((hash) => publicClient.waitForTransactionReceipt({ hash })) - - const address = getContractAddress({ - opcode: "CREATE2", - from: DETERMINISTIC_DEPLOYER, - salt: slice(data, 0, 32), - bytecode: slice(data, 32) - }) + const hash = await singletonPaymaster.read.getHash([ + mode, + // paymaster signs over paymasterData so we add paymaster + paymasterData + toPackedUserOperation({ + ...userOp, + paymaster, + paymasterData + } as UserOperation) + ]) - const singletonPaymaster = getContract({ - address, - abi: SINGLETON_PAYMASTER_V07_ABI, - client: this.walletClient - }) + const sig = await signer.signMessage({ + message: { raw: toBytes(hash) } + }) - await singletonPaymaster.write.deposit({ - value: parseEther("50") - }) + paymasterData = encodePacked(["bytes", "bytes"], [paymasterData, sig]) - return singletonPaymaster + return { + paymaster, + paymasterData } } -export class SingletonPaymasterV06 { - private walletClient: WalletClient - public singletonPaymaster: GetContractReturnType< - typeof SINGLETON_PAYMASTER_V06_ABI, - { - public: PublicClient - wallet: WalletClient - } - > - private anvilRpc: string - - constructor( - walletClient: WalletClient, - anvilRpc: string - ) { - this.walletClient = walletClient - this.singletonPaymaster = getContract({ - address: SINGLETON_PAYMASTER_V06_ADDRESS( - walletClient.account.address - ), - abi: SINGLETON_PAYMASTER_V06_ABI, - client: { - wallet: this.walletClient, - public: getPublicClient(anvilRpc) - } - }) - this.anvilRpc = anvilRpc - } - - public getDummyPaymasterData(paymasterMode: PaymasterMode): { - paymasterAndData: Hex - } { - return getDummyPaymasterData( - true, - this.singletonPaymaster.address, - paymasterMode - ) as { - paymasterAndData: Hex - } - } - - async encodePaymasterData( - op: UserOperation<"0.6">, - paymasterMode: PaymasterMode - ) { - const validAfter = 0 - const validUntil = Math.floor(Date.now() / 1000) + 60_000 - const mode = paymasterMode.mode === "verifying" ? 0 : 1 - op.paymasterAndData = encodePacked( - ["address", "uint8", "uint48", "uint48"], - [this.singletonPaymaster.address, mode, validUntil, validAfter] - ) - - if (paymasterMode.mode === "erc20") { - op.paymasterAndData = encodePacked( - ["bytes", "address", "uint128", "uint256"], - [ - op.paymasterAndData, - paymasterMode.token, - POST_OP_GAS_OVERHEAD, - EXCHANGE_RATE - ] - ) - } - - const hash = await this.singletonPaymaster.read.getHash([ - mode, - { - ...op, - initCode: op.initCode || "0x", - paymasterAndData: op.paymasterAndData || "0x" - } - ]) - const sig = await this.walletClient.signMessage({ - message: { raw: hash } - }) +export const deployPaymasters = async ({ + walletClient, + publicClient +}: { + walletClient: WalletClient + publicClient: PublicClient +}) => { + const owner = walletClient.account.address + + let nonce = await publicClient.getTransactionCount({ + address: walletClient.account.address + }) - return { - paymasterAndData: encodePacked( - ["bytes", "bytes"], - [op.paymasterAndData, sig] - ) - } - } + // Deploy singleton paymaster 06. + await walletClient.sendTransaction({ + to: constants.deterministicDeployer, + data: concat([ + constants.create2Salt, + getSingletonPaymaster06InitCode(walletClient.account.address) + ]), + nonce: nonce++ + }) - async setup() { - const data = SINGLETON_PAYMASTER_V06_CALL( - this.walletClient.account.address - ) + // Deploy singleton paymaster 07. + await walletClient.sendTransaction({ + to: constants.deterministicDeployer, + data: concat([ + constants.create2Salt, + getSingletonPaymaster07InitCode(walletClient.account.address) + ]), + nonce: nonce++ + }) - const publicClient = createPublicClient({ - transport: http(this.anvilRpc), - chain: foundry - }) + // Deploy singleton paymaster 08. + await walletClient.sendTransaction({ + to: constants.deterministicDeployer, + data: concat([ + constants.create2Salt, + getSingletonPaymaster08InitCode(walletClient.account.address) + ]), + nonce: nonce++ + }) - await this.walletClient - .sendTransaction({ - to: DETERMINISTIC_DEPLOYER, - data - }) - .then((hash) => publicClient.waitForTransactionReceipt({ hash })) - - const address = getContractAddress({ - opcode: "CREATE2", - from: DETERMINISTIC_DEPLOYER, - salt: slice(data, 0, 32), - bytecode: slice(data, 32) + // Initialize contract instances. + const [singletonPaymaster06, singletonPaymaster07, singletonPaymaster08] = [ + getContract({ + address: getSingletonPaymaster06Address(owner), + abi: singletonPaymaster06Abi, + client: walletClient + }), + getContract({ + address: getSingletonPaymaster07Address(owner), + abi: singletonPaymaster07Abi, + client: walletClient + }), + getContract({ + address: getSingletonPaymaster08Address(owner), + abi: singletonPaymaster08Abi, + client: walletClient }) + ] - const singletonPaymaster = getContract({ - address, - abi: SINGLETON_PAYMASTER_V06_ABI, - client: this.walletClient - }) + // Fund the paymasters. + await singletonPaymaster06.write.deposit({ + value: parseEther("50"), + nonce: nonce++ + }) - await singletonPaymaster.write.deposit({ - value: parseEther("50") - }) + await singletonPaymaster07.write.deposit({ + value: parseEther("50"), + nonce: nonce++ + }) - return singletonPaymaster - } + await singletonPaymaster08.write.deposit({ + value: parseEther("50"), + nonce: nonce++ + }) } diff --git a/packages/permissionless-test/mock-aa-infra/alto/constants/accounts/simple.ts b/packages/permissionless-test/mock-aa-infra/alto/constants/accounts/simple.ts index ba59dab3..6b88bfe0 100644 --- a/packages/permissionless-test/mock-aa-infra/alto/constants/accounts/simple.ts +++ b/packages/permissionless-test/mock-aa-infra/alto/constants/accounts/simple.ts @@ -1,5 +1,9 @@ import type { Hex } from "viem" +// Will deploy simpleAccountFactory V0.8 to 0x13E9ed32155810FDbd067D4522C492D6f68E5944 +export const SIMPLE_ACCOUNT_FACTORY_V08_CREATECALL: Hex = + "0x000000000000000000000000000000000000000000000000000000000000000060c0806040523461010d57602081612433803803809161001f8285610138565b83398101031261010d57516001600160a01b0381169081900361010d57604051611a5a808201906001600160401b038211838310176101245760209183916109d983398481520301905ff08015610119576080526040516213997160e71b815290602090829060049082905afa908115610119575f916100d3575b5060a05260405161087d908161015c823960805181818160e60152818161037d01526104df015260a05181818161015201526102b20152f35b90506020813d602011610111575b816100ee60209383610138565b8101031261010d57516001600160a01b038116810361010d575f61009a565b5f80fd5b3d91506100e1565b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b601f909101601f19168101906001600160401b038211908210176101245760405256fe6080806040526004361015610012575f80fd5b5f3560e01c90816309ccb8801461010a5750806311464fbe1461009c5780635fbfb9cf1461008357638cb84e1814610048575f80fd5b3461007f57602061006161005b36610176565b9061044b565b73ffffffffffffffffffffffffffffffffffffffff60405191168152f35b5f80fd5b3461007f57602061006161009636610176565b9061029b565b3461007f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261007f57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461007f575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261007f5760209073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc604091011261007f5760043573ffffffffffffffffffffffffffffffffffffffff8116810361007f579060243590565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761020857604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b90601f602060609473ffffffffffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0941685526040828601528051918291826040880152018686015e5f8582860101520116010190565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036103ed576102e2828261044b565b803b6103d1575073ffffffffffffffffffffffffffffffffffffffff604051917fc4d66de80000000000000000000000000000000000000000000000000000000060208401521660248201526024815261033d6044826101c7565b604051906102a88083019183831067ffffffffffffffff8411176102085783926103a3926105a0853973ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690610235565b03905ff580156103c65773ffffffffffffffffffffffffffffffffffffffff1690565b6040513d5f823e3d90fd5b73ffffffffffffffffffffffffffffffffffffffff1692915050565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f6f6e6c792063616c6c61626c652066726f6d2053656e64657243726561746f726044820152fd5b600b73ffffffffffffffffffffffffffffffffffffffff926055926102a8906105806040519261047e60208201856101c7565b80845260208401906105a0823987604051937fc4d66de8000000000000000000000000000000000000000000000000000000006020860152166024840152602483526104cb6044846101c7565b60206040519361053185610505848201938d7f00000000000000000000000000000000000000000000000000000000000000001685610235565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018752866101c7565b60405194859383850197518091895e840190838201905f8252519283915e01015f8152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018352826101c7565b5190209060405191604083015260208201523081520160ff815320169056fe60806040526102a88038038061001481610168565b92833981016040828203126101645781516001600160a01b03811692909190838303610164576020810151906001600160401b03821161016457019281601f8501121561016457835161006e610069826101a1565b610168565b9481865260208601936020838301011161016457815f926020809301865e86010152823b15610152577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a282511561013a575f8091610122945190845af43d15610132573d91610113610069846101a1565b9283523d5f602085013e6101bc565b505b604051608d908161021b8239f35b6060916101bc565b50505034156101245763b398979f60e01b5f5260045ffd5b634c9c8ce360e01b5f5260045260245ffd5b5f80fd5b6040519190601f01601f191682016001600160401b0381118382101761018d57604052565b634e487b7160e01b5f52604160045260245ffd5b6001600160401b03811161018d57601f01601f191660200190565b906101e057508051156101d157805190602001fd5b63d6bda27560e01b5f5260045ffd5b81511580610211575b6101f1575090565b639996b31560e01b5f9081526001600160a01b0391909116600452602490fd5b50803b156101e956fe60806040525f8073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416368280378136915af43d5f803e156053573d5ff35b3d5ffdfea264697066735822122012ef914fc5c0fe0eff95047a7f10780a737a1ca4f30269b985bcf38a18e4d23464736f6c634300081c0033a264697066735822122066c9a94ba9d56842fb888dc2cf77cab726a70ab7553a9d08125d4ea7c35a9fd064736f6c634300081c003360c03461014757601f611a5a38819003918201601f19168301916001600160401b0383118484101761014b5780849260209460405283398101031261014757516001600160a01b0381168103610147573060805260a0525f516020611a3a5f395f51905f525460ff8160401c16610138576002600160401b03196001600160401b038216016100e2575b6040516118da908161016082396080518181816108c401526109b8015260a0518181816101f0015281816103a7015281816105960152818161078601528181610cf501528181610dca0152818161102601526115130152f35b6001600160401b0319166001600160401b039081175f516020611a3a5f395f51905f52556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a15f610089565b63f92ee8a960e01b5f5260045ffd5b5f80fd5b634e487b7160e01b5f52604160045260245ffdfe608080604052600436101561001c575b50361561001a575f80fd5b005b5f905f3560e01c90816301ffc9a71461117157508063150b7a02146110e457806319822f7c14610f9e57806334fcd5be14610e4e5780634a58db1914610d895780634d44560d14610c845780634f1ef2861461093c57806352d1902d1461087e5780638da5cb5b1461082d578063ad3cb1cc146107aa578063b0d691fe1461073b578063b61d27f6146106a1578063bc197c81146105cf578063c399ec881461051d578063c4d66de81461026d578063d087d288146101715763f23a6e610361000f573461016e5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016e5761011661125e565b5061011f611281565b5060843567ffffffffffffffff811161016c576101409036906004016112a4565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b505b80fd5b503461016e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016e57604051907f35567e1a00000000000000000000000000000000000000000000000000000000825230600483015280602483015260208260448173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610261579061022a575b602090604051908152f35b506020813d602011610259575b8161024460209383611303565b81010312610255576020905161021f565b5f80fd5b3d9150610237565b604051903d90823e3d90fd5b503461016e5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016e576102a561125e565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00549060ff8260401c16159167ffffffffffffffff811680159081610515575b600114908161050b575b159081610502575b506104da5790818360017fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000073ffffffffffffffffffffffffffffffffffffffff9516177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0055610485575b501690817fffffffffffffffffffffffff00000000000000000000000000000000000000008454161783556040519173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000167f47e55c76e7a6f1fd8996a1da8008c1ea29699cca35e7bcd057f2dec313b6e5de8580a36103f3575080f35b60207fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2917fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054167ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005560018152a180f35b7fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000001668010000000000000001177ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00555f610361565b6004847ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b9050155f6102f7565b303b1591506102ef565b8491506102e5565b503461016e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016e57604051907f70a0823100000000000000000000000000000000000000000000000000000000825230600483015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa908115610261579061022a57602090604051908152f35b503461016e5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016e5761060761125e565b50610610611281565b5060443567ffffffffffffffff811161016c576106319036906004016112d2565b505060643567ffffffffffffffff811161016c576106539036906004016112d2565b505060843567ffffffffffffffff811161016c576106759036906004016112a4565b505060206040517fbc197c81000000000000000000000000000000000000000000000000000000008152f35b503461016e5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016e57806106da61125e565b60443567ffffffffffffffff81116107375782916106ff6107129236906004016112a4565b92906107096114fc565b5a9336916113ab565b916020835193019160243591f1156107275780f35b61072f6115c1565b602081519101fd5b5050fd5b503461016e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016e57602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b503461016e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016e57506108296040516107eb604082611303565b600581527f352e302e3000000000000000000000000000000000000000000000000000000060208201526040519182916020835260208301906113e1565b0390f35b503461016e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016e5773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b503461016e57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016e5773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001630036109145760206040517f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8152f35b807fe07c8dba0000000000000000000000000000000000000000000000000000000060049252fd5b5060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016e5761096f61125e565b9060243567ffffffffffffffff811161016c573660238201121561016c576109a19036906024816004013591016113ab565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803014908115610c42575b50610c1a576109f06115db565b73ffffffffffffffffffffffffffffffffffffffff831690604051937f52d1902d000000000000000000000000000000000000000000000000000000008552602085600481865afa80958596610be2575b50610a7257602484847f4c9c8ce3000000000000000000000000000000000000000000000000000000008252600452fd5b9091847f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8103610bb75750813b15610b8c57807fffffffffffffffffffffffff00000000000000000000000000000000000000007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5416177f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b8480a28151839015610b595780836020610b5595519101845af4610b4f6114cd565b9161180b565b5080f35b50505034610b645780f35b807fb398979f0000000000000000000000000000000000000000000000000000000060049252fd5b7f4c9c8ce3000000000000000000000000000000000000000000000000000000008452600452602483fd5b7faa1d49a4000000000000000000000000000000000000000000000000000000008552600452602484fd5b9095506020813d602011610c12575b81610bfe60209383611303565b81010312610c0e5751945f610a41565b8480fd5b3d9150610bf1565b6004827fe07c8dba000000000000000000000000000000000000000000000000000000008152fd5b905073ffffffffffffffffffffffffffffffffffffffff7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc541614155f6109e3565b503461016e5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261016e578060043573ffffffffffffffffffffffffffffffffffffffff8116809103610d8657610cde6115db565b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690813b156107375782916044839260405194859384927f205c2878000000000000000000000000000000000000000000000000000000008452600484015260243560248401525af18015610d7b57610d6a5750f35b81610d7491611303565b61016e5780f35b6040513d84823e3d90fd5b50fd5b505f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102555773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016803b15610255575f602491604051928380927fb760faf900000000000000000000000000000000000000000000000000000000825230600483015234905af18015610e4357610e37575080f35b61001a91505f90611303565b6040513d5f823e3d90fd5b346102555760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102555760043567ffffffffffffffff811161025557610e9d9036906004016112d2565b610ea56114fc565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301905b8281101561001a578060051b8401358281121561025557840180359073ffffffffffffffffffffffffffffffffffffffff82168203610255575f9181610f25610f1a604086950183611424565b91905a9236916113ab565b926020808551950193013591f115610f3f57600101610ecd565b60018303610f4f5761072f6115c1565b610f576115c1565b90610f9a6040519283927f5a15467500000000000000000000000000000000000000000000000000000000845260048401526040602484015260448301906113e1565b0390fd5b346102555760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102555760043567ffffffffffffffff8111610255576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126102555760443573ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001633036110865761105e60209260243590600401611475565b908061106e575b50604051908152f35b5f80808093335af15061107f6114cd565b5082611065565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e74000000006044820152fd5b346102555760807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102555761111b61125e565b50611124611281565b5060643567ffffffffffffffff8111610255576111459036906004016112a4565b505060206040517f150b7a02000000000000000000000000000000000000000000000000000000008152f35b346102555760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261025557600435907fffffffff00000000000000000000000000000000000000000000000000000000821680920361025557817f150b7a020000000000000000000000000000000000000000000000000000000060209314908115611234575b811561120a575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501483611203565b7f4e2312e000000000000000000000000000000000000000000000000000000000811491506111fc565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361025557565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361025557565b9181601f840112156102555782359167ffffffffffffffff8311610255576020838186019501011161025557565b9181601f840112156102555782359167ffffffffffffffff8311610255576020808501948460051b01011161025557565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761134457604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff811161134457601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926113b782611371565b916113c56040519384611303565b829481845281830111610255578281602093845f960137010152565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610255570180359067ffffffffffffffff82116102555760200191813603831361025557565b906114be6114b573ffffffffffffffffffffffffffffffffffffffff926114af6114a8855f541696610100810190611424565b36916113ab565b9061166a565b909291926116a4565b16036114c8575f90565b600190565b3d156114f7573d906114de82611371565b916114ec6040519384611303565b82523d5f602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016331480156115a1575b1561154357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f6163636f756e743a206e6f74204f776e6572206f7220456e747279506f696e746044820152fd5b5073ffffffffffffffffffffffffffffffffffffffff5f5416331461153c565b3d604051906020818301016040528082525f602083013e90565b73ffffffffffffffffffffffffffffffffffffffff5f541633148015611661575b1561160357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c79206f776e6572000000000000000000000000000000000000000000006044820152fd5b503033146115fc565b815191906041830361169a576116939250602082015190606060408401519301515f1a9061177c565b9192909190565b50505f9160029190565b600481101561174f57806116b6575050565b600181036116e6577ff645eedf000000000000000000000000000000000000000000000000000000005f5260045ffd5b6002810361171a57507ffce698f7000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b6003146117245750565b7fd78bce0c000000000000000000000000000000000000000000000000000000005f5260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b91907f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411611800579160209360809260ff5f9560405194855216868401526040830152606082015282805260015afa15610e43575f5173ffffffffffffffffffffffffffffffffffffffff8116156117f657905f905f90565b505f906001905f90565b5050505f9160039190565b90611848575080511561182057805190602001fd5b7fd6bda275000000000000000000000000000000000000000000000000000000005f5260045ffd5b8151158061189b575b611859575090565b73ffffffffffffffffffffffffffffffffffffffff907f9996b315000000000000000000000000000000000000000000000000000000005f521660045260245ffd5b50803b1561185156fea2646970667358221220d37aff8d76de5b79d9a6144dc38b8c5efe3e2f3cf6c07850979839cabc14388d64736f6c634300081c0033f0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a000000000000000000000000004337084d9e255ff0702461cf8895ce9e3b5ff108" + // Will deploy simpleAccountFactory V0.7 to 0x91E60e0613810449d098b0b5Ec8b51A0FE8c8985 export const SIMPLE_ACCOUNT_FACTORY_V07_CREATECALL: Hex = "0x000000000000000000000000000000000000000000000000000000000000000060a060405234801561001057600080fd5b506040516129e13803806129e183398101604081905261002f91610088565b8060405161003c9061007b565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b0316608052506100b8565b612011806109d083390190565b60006020828403121561009a57600080fd5b81516001600160a01b03811681146100b157600080fd5b9392505050565b6080516108f06100e060003960008181604b01528181610114015261025801526108f06000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c806311464fbe146100465780635fbfb9cf146100965780638cb84e18146100a9575b600080fd5b61006d7f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b61006d6100a436600461039d565b6100bc565b61006d6100b736600461039d565b6101ee565b6000806100c984846101ee565b905073ffffffffffffffffffffffffffffffffffffffff81163b80156100f1575090506101e8565b60405173ffffffffffffffffffffffffffffffffffffffff8616602482015284907f000000000000000000000000000000000000000000000000000000000000000090604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052516101b790610390565b6101c2929190610406565b8190604051809103906000f59050801580156101e2573d6000803e3d6000fd5b50925050505b92915050565b60006103578260001b6040518060200161020790610390565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082820381018352601f90910116604081905273ffffffffffffffffffffffffffffffffffffffff871660248201527f000000000000000000000000000000000000000000000000000000000000000090604401604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152918152602080830180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fc4d66de800000000000000000000000000000000000000000000000000000000179052905161030093929101610406565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261033c9291602001610474565b6040516020818303038152906040528051906020012061035e565b9392505050565b60006103578383306000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b610417806104a483390190565b600080604083850312156103b057600080fd5b823573ffffffffffffffffffffffffffffffffffffffff811681146103d457600080fd5b946020939093013593505050565b60005b838110156103fd5781810151838201526020016103e5565b50506000910152565b73ffffffffffffffffffffffffffffffffffffffff8316815260406020820152600082518060408401526104418160608501602087016103e2565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016060019392505050565b600083516104868184602088016103e2565b83519083019061049a8183602088016103e2565b0194935050505056fe608060405260405161041738038061041783398101604081905261002291610268565b61002c8282610033565b5050610352565b61003c82610092565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a280511561008657610081828261010e565b505050565b61008e610185565b5050565b806001600160a01b03163b6000036100cd57604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080846001600160a01b03168460405161012b9190610336565b600060405180830381855af49150503d8060008114610166576040519150601f19603f3d011682016040523d82523d6000602084013e61016b565b606091505b50909250905061017c8583836101a6565b95945050505050565b34156101a45760405163b398979f60e01b815260040160405180910390fd5b565b6060826101bb576101b682610205565b6101fe565b81511580156101d257506001600160a01b0384163b155b156101fb57604051639996b31560e01b81526001600160a01b03851660048201526024016100c4565b50805b9392505050565b8051156102155780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b634e487b7160e01b600052604160045260246000fd5b60005b8381101561025f578181015183820152602001610247565b50506000910152565b6000806040838503121561027b57600080fd5b82516001600160a01b038116811461029257600080fd5b60208401519092506001600160401b03808211156102af57600080fd5b818501915085601f8301126102c357600080fd5b8151818111156102d5576102d561022e565b604051601f8201601f19908116603f011681019083821181831017156102fd576102fd61022e565b8160405282815288602084870101111561031657600080fd5b610327836020830160208801610244565b80955050505050509250929050565b60008251610348818460208701610244565b9190910192915050565b60b7806103606000396000f3fe6080604052600a600c565b005b60186014601a565b605e565b565b600060597f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b905090565b3660008037600080366000845af43d6000803e808015607c573d6000f35b3d6000fdfea2646970667358221220d7f23a80daebb5531c9e4a18d87e812fca112e5df7e56433218edcc12bbe415d64736f6c63430008170033a2646970667358221220f5be4d2659f1a124e46d76b875ad5264a1c62d421946ca067d6132fa6cc4309964736f6c6343000817003360c0604052306080523480156200001557600080fd5b50604051620020113803806200201183398101604081905262000038916200010a565b6001600160a01b03811660a0526200004f62000056565b506200013c565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff1615620000a75760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b0390811614620001075780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6000602082840312156200011d57600080fd5b81516001600160a01b03811681146200013557600080fd5b9392505050565b60805160a051611e70620001a160003960008181610320015281816106f00152818161079e0152818161092601528181610b6301528181610baa01528181610d6a015261121e015260008181610f3301528181610f5c015261117d0152611e706000f3fe6080604052600436106101125760003560e01c80638da5cb5b116100a5578063bc197c8111610074578063c4d66de811610059578063c4d66de8146103c1578063d087d288146103e1578063f23a6e61146103f657600080fd5b8063bc197c8114610364578063c399ec88146103ac57600080fd5b80638da5cb5b14610269578063ad3cb1cc146102bb578063b0d691fe14610311578063b61d27f61461034457600080fd5b80634a58db19116100e15780634a58db19146102195780634d44560d146102215780634f1ef2861461024157806352d1902d1461025457600080fd5b806301ffc9a71461011e578063150b7a021461015357806319822f7c146101c957806347e1da2a146101f757600080fd5b3661011957005b600080fd5b34801561012a57600080fd5b5061013e61013936600461179b565b61043c565b60405190151581526020015b60405180910390f35b34801561015f57600080fd5b5061019861016e366004611848565b7f150b7a020000000000000000000000000000000000000000000000000000000095945050505050565b6040517fffffffff00000000000000000000000000000000000000000000000000000000909116815260200161014a565b3480156101d557600080fd5b506101e96101e43660046118bb565b610521565b60405190815260200161014a565b34801561020357600080fd5b50610217610212366004611954565b610547565b005b6102176106ee565b34801561022d57600080fd5b5061021761023c3660046119ee565b610794565b61021761024f366004611a49565b610843565b34801561026057600080fd5b506101e9610862565b34801561027557600080fd5b506000546102969073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161014a565b3480156102c757600080fd5b506103046040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b60405161014a9190611b4f565b34801561031d57600080fd5b507f0000000000000000000000000000000000000000000000000000000000000000610296565b34801561035057600080fd5b5061021761035f366004611ba0565b610891565b34801561037057600080fd5b5061019861037f366004611bfc565b7fbc197c810000000000000000000000000000000000000000000000000000000098975050505050505050565b3480156103b857600080fd5b506101e96108e0565b3480156103cd57600080fd5b506102176103dc366004611cbb565b610997565b3480156103ed57600080fd5b506101e9610b16565b34801561040257600080fd5b50610198610411366004611cd8565b7ff23a6e61000000000000000000000000000000000000000000000000000000009695505050505050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f150b7a020000000000000000000000000000000000000000000000000000000014806104cf57507fffffffff0000000000000000000000000000000000000000000000000000000082167f4e2312e000000000000000000000000000000000000000000000000000000000145b8061051b57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b600061052b610b92565b6105358484610c33565b905061054082610ce7565b9392505050565b61054f610d52565b8481148015610565575082158061056557508281145b6105d0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601360248201527f77726f6e67206172726179206c656e677468730000000000000000000000000060448201526064015b60405180910390fd5b600083900361067c5760005b858110156106765761066e8787838181106105f9576105f9611d42565b905060200201602081019061060e9190611cbb565b600085858581811061062257610622611d42565b90506020028101906106349190611d71565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e1392505050565b6001016105dc565b506106e6565b60005b858110156106e4576106dc87878381811061069c5761069c611d42565b90506020020160208101906106b19190611cbb565b8686848181106106c3576106c3611d42565b9050602002013585858581811061062257610622611d42565b60010161067f565b505b505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006040517fb760faf900000000000000000000000000000000000000000000000000000000815230600482015273ffffffffffffffffffffffffffffffffffffffff919091169063b760faf99034906024016000604051808303818588803b15801561077957600080fd5b505af115801561078d573d6000803e3d6000fd5b5050505050565b61079c610e90565b7f00000000000000000000000000000000000000000000000000000000000000006040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff848116600483015260248201849052919091169063205c287890604401600060405180830381600087803b15801561082f57600080fd5b505af11580156106e6573d6000803e3d6000fd5b61084b610f1b565b6108548261101f565b61085e8282611027565b5050565b600061086c611165565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b610899610d52565b6108da848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e1392505050565b50505050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa15801561096e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109929190611dd6565b905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff166000811580156109e25750825b905060008267ffffffffffffffff1660011480156109ff5750303b155b905081158015610a0d575080155b15610a44576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610aa55784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b610aae866111d4565b83156106e65784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b6040517f35567e1a0000000000000000000000000000000000000000000000000000000081523060048201526000602482018190529073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906335567e1a90604401610951565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610c31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e740000000060448201526064016105c7565b565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c829052603c8120610cae81610c74610100870187611d71565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061126892505050565b60005473ffffffffffffffffffffffffffffffffffffffff908116911614610cda57600191505061051b565b5060009392505050565b50565b8015610ce45760405160009033907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90849084818181858888f193505050503d806000811461078d576040519150601f19603f3d011682016040523d82523d6000602084013e61078d565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480610dad575060005473ffffffffffffffffffffffffffffffffffffffff1633145b610c31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f6163636f756e743a206e6f74204f776e6572206f7220456e747279506f696e7460448201526064016105c7565b6000808473ffffffffffffffffffffffffffffffffffffffff168484604051610e3c9190611def565b60006040518083038185875af1925050503d8060008114610e79576040519150601f19603f3d011682016040523d82523d6000602084013e610e7e565b606091505b50915091508161078d57805160208201fd5b60005473ffffffffffffffffffffffffffffffffffffffff16331480610eb557503330145b610c31576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6f6e6c79206f776e65720000000000000000000000000000000000000000000060448201526064016105c7565b3073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161480610fe857507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610fcf7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614155b15610c31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ce4610e90565b8173ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156110ac575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526110a991810190611dd6565b60015b6110fa576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024016105c7565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114611156576040517faa1d49a4000000000000000000000000000000000000000000000000000000008152600481018290526024016105c7565b6111608383611292565b505050565b3073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610c31576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff838116918217835560405191927f0000000000000000000000000000000000000000000000000000000000000000909116917f47e55c76e7a6f1fd8996a1da8008c1ea29699cca35e7bcd057f2dec313b6e5de9190a350565b60008060008061127886866112f5565b9250925092506112888282611342565b5090949350505050565b61129b82611446565b60405173ffffffffffffffffffffffffffffffffffffffff8316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a28051156112ed576111608282611515565b61085e611598565b6000806000835160410361132f5760208401516040850151606086015160001a611321888285856115d0565b95509550955050505061133b565b50508151600091506002905b9250925092565b600082600381111561135657611356611e0b565b0361135f575050565b600182600381111561137357611373611e0b565b036113aa576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156113be576113be611e0b565b036113f8576040517ffce698f7000000000000000000000000000000000000000000000000000000008152600481018290526024016105c7565b600382600381111561140c5761140c611e0b565b0361085e576040517fd78bce0c000000000000000000000000000000000000000000000000000000008152600481018290526024016105c7565b8073ffffffffffffffffffffffffffffffffffffffff163b6000036114af576040517f4c9c8ce300000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff821660048201526024016105c7565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b60606000808473ffffffffffffffffffffffffffffffffffffffff168460405161153f9190611def565b600060405180830381855af49150503d806000811461157a576040519150601f19603f3d011682016040523d82523d6000602084013e61157f565b606091505b509150915061158f8583836116ca565b95945050505050565b3415610c31576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561160b57506000915060039050826116c0565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa15801561165f573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff81166116b6575060009250600191508290506116c0565b9250600091508190505b9450945094915050565b6060826116df576116da82611759565b610540565b8151158015611703575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611752576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024016105c7565b5080610540565b8051156117695780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000602082840312156117ad57600080fd5b81357fffffffff000000000000000000000000000000000000000000000000000000008116811461054057600080fd5b73ffffffffffffffffffffffffffffffffffffffff81168114610ce457600080fd5b60008083601f84011261181157600080fd5b50813567ffffffffffffffff81111561182957600080fd5b60208301915083602082850101111561184157600080fd5b9250929050565b60008060008060006080868803121561186057600080fd5b853561186b816117dd565b9450602086013561187b816117dd565b935060408601359250606086013567ffffffffffffffff81111561189e57600080fd5b6118aa888289016117ff565b969995985093965092949392505050565b6000806000606084860312156118d057600080fd5b833567ffffffffffffffff8111156118e757600080fd5b840161012081870312156118fa57600080fd5b95602085013595506040909401359392505050565b60008083601f84011261192157600080fd5b50813567ffffffffffffffff81111561193957600080fd5b6020830191508360208260051b850101111561184157600080fd5b6000806000806000806060878903121561196d57600080fd5b863567ffffffffffffffff8082111561198557600080fd5b6119918a838b0161190f565b909850965060208901359150808211156119aa57600080fd5b6119b68a838b0161190f565b909650945060408901359150808211156119cf57600080fd5b506119dc89828a0161190f565b979a9699509497509295939492505050565b60008060408385031215611a0157600080fd5b8235611a0c816117dd565b946020939093013593505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060408385031215611a5c57600080fd5b8235611a67816117dd565b9150602083013567ffffffffffffffff80821115611a8457600080fd5b818501915085601f830112611a9857600080fd5b813581811115611aaa57611aaa611a1a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f01168101908382118183101715611af057611af0611a1a565b81604052828152886020848701011115611b0957600080fd5b8260208601602083013760006020848301015280955050505050509250929050565b60005b83811015611b46578181015183820152602001611b2e565b50506000910152565b6020815260008251806020840152611b6e816040850160208701611b2b565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160400192915050565b60008060008060608587031215611bb657600080fd5b8435611bc1816117dd565b935060208501359250604085013567ffffffffffffffff811115611be457600080fd5b611bf0878288016117ff565b95989497509550505050565b60008060008060008060008060a0898b031215611c1857600080fd5b8835611c23816117dd565b97506020890135611c33816117dd565b9650604089013567ffffffffffffffff80821115611c5057600080fd5b611c5c8c838d0161190f565b909850965060608b0135915080821115611c7557600080fd5b611c818c838d0161190f565b909650945060808b0135915080821115611c9a57600080fd5b50611ca78b828c016117ff565b999c989b5096995094979396929594505050565b600060208284031215611ccd57600080fd5b8135610540816117dd565b60008060008060008060a08789031215611cf157600080fd5b8635611cfc816117dd565b95506020870135611d0c816117dd565b94506040870135935060608701359250608087013567ffffffffffffffff811115611d3657600080fd5b6119dc89828a016117ff565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611da657600080fd5b83018035915067ffffffffffffffff821115611dc157600080fd5b60200191503681900382131561184157600080fd5b600060208284031215611de857600080fd5b5051919050565b60008251611e01818460208701611b2b565b9190910192915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea2646970667358221220646ccd794d1cd309da39b56bcfe1238dae05a9d8106dddf47fe099a78d7801e864736f6c634300081700330000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032" diff --git a/packages/permissionless-test/mock-aa-infra/alto/constants/core.ts b/packages/permissionless-test/mock-aa-infra/alto/constants/core.ts index 7ef348d6..530b8048 100644 --- a/packages/permissionless-test/mock-aa-infra/alto/constants/core.ts +++ b/packages/permissionless-test/mock-aa-infra/alto/constants/core.ts @@ -1,20 +1,24 @@ import type { Hex } from "viem" +/* ========= V08 CORE ========= */ + +// Will deploy entryPoint to 0x4337084d9e255ff0702461cf8895ce9e3b5ff108 +export const ENTRY_POINT_V08_CREATECALL: Hex = + "0x0a59dbff790c23c976a548690c27297883cc66b4c67024f9117b0238995e35e96101806040523461019557604051610018604082610199565b600781526020810190664552433433333760c81b82526040519161003d604084610199565b600183526020830191603160f81b8352610056816101bc565b6101205261006384610357565b61014052519020918260e05251902080610100524660a0526040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a081526100cc60c082610199565b5190206080523060c0526040516104f58082016001600160401b0381118382101761018157829161597a833903905ff0801561017657610160526040516154ea9081610490823960805181613511015260a051816135ce015260c051816134e2015260e051816135600152610100518161358601526101205181611884015261014051816118ad0152610160518181816116ce015281816120a801528181615061015261538c0152f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b5f80fd5b601f909101601f19168101906001600160401b0382119082101761018157604052565b908151602081105f14610236575090601f8151116101f65760208151910151602082106101e7571790565b5f198260200360031b1b161790565b604460209160405192839163305a27a960e01b83528160048401528051918291826024860152018484015e5f828201840152601f01601f19168101030190fd5b6001600160401b03811161018157600254600181811c9116801561034d575b602082101461033957601f8111610306575b50602092601f82116001146102a557928192935f9261029a575b50508160011b915f199060031b1c19161760025560ff90565b015190505f80610281565b601f1982169360025f52805f20915f5b8681106102ee57508360019596106102d6575b505050811b0160025560ff90565b01515f1960f88460031b161c191690555f80806102c8565b919260206001819286850151815501940192016102b5565b60025f52601f60205f20910160051c810190601f830160051c015b81811061032e5750610267565b5f8155600101610321565b634e487b7160e01b5f52602260045260245ffd5b90607f1690610255565b908151602081105f14610382575090601f8151116101f65760208151910151602082106101e7571790565b6001600160401b03811161018157600354600181811c91168015610485575b602082101461033957601f8111610452575b50602092601f82116001146103f157928192935f926103e6575b50508160011b915f199060031b1c19161760035560ff90565b015190505f806103cd565b601f1982169360035f52805f20915f5b86811061043a5750836001959610610422575b505050811b0160035560ff90565b01515f1960f88460031b161c191690555f8080610414565b91926020600181928685015181550194019201610401565b60035f52601f60205f20910160051c810190601f830160051c015b81811061047a57506103b3565b5f815560010161046d565b90607f16906103a156fe6101606040526004361015610024575b3615610019575f80fd5b610022336131f4565b005b5f610140525f3560e01c806242dc53146125d957806301ffc9a7146124875780630396cb60146120cc57806309ccb8801461205b5780630bd28e3b14611fbf57806313c65a6e14611f84578063154e58dc14611f295780631b2e01b814611e93578063205c287814611cf257806322cdde4c14611c6e57806335567e1a14611bb45780635287ce1214611a9457806370a0823114611a29578063765e827f1461198b57806384b0196e1461184b578063850aaf62146117865780639b249f6914611622578063b760faf9146115e1578063bb9fe6bf146113f2578063c23a5cea1461114f5763dbed18e00361000f5734610ec95761012136612d56565b6101005260e052610130613824565b6101405190815b60e0518110610f2e575061014a8261303a565b61012052610140516080526101405160c0525b60e05160c0511061029b577fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9726101405161014051a161014051608081905290815b60e05181106101e1576101b48361010051614a19565b610140517f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d6101405180f35b6102436101f18260e05185613267565b73ffffffffffffffffffffffffffffffffffffffff610212602083016132fb565b167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d6101405161014051a2806132a7565b9061014051915b80831061025c5750505060010161019e565b909194600190610289610270888587613109565b61027f60805161012051613176565b519060805161437c565b0195816080510160805201919061024a565b6102aa60c05160e05183613267565b73ffffffffffffffffffffffffffffffffffffffff6102d860206102ce84806132a7565b60a05293016132fb565b61014051911691905b60a05181106103055750505060a05160805101608052600160c0510160c05261015d565b610316816080510161012051613176565b516103248260a05185613109565b61014051915a81519273ffffffffffffffffffffffffffffffffffffffff61034b826132fb565b168452602081810135908501526fffffffffffffffffffffffffffffffff6080808301358281166060880152811c604087015260a083013560c0808801919091528301359182166101008701521c6101208501526103ac60e082018261331c565b9081610e15575b5050604051936103c282612ee9565b6020850152846040526040810151946effffffffffffffffffffffffffffff8660c08401511760608401511760808401511760a084015117610100840151176101208401511711610daf5750604081015160608201510160808201510160a08201510160c0820151016101008201510294856040860152845173ffffffffffffffffffffffffffffffffffffffff60e08183511692610475898d61046960408b018b61331c565b92909160805101614fb5565b0151169661014051978015610d7e575b87516040810151905173ffffffffffffffffffffffffffffffffffffffff169061014051506040519a8b8960208d01519260208301937f19822f7c00000000000000000000000000000000000000000000000000000000855260248401926104ec93615460565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018d5261051c908d612c2d565b61014051908c5190846101405190602095f161014051519a3d602003610d73575b60405215610c80575015610c02575b505073ffffffffffffffffffffffffffffffffffffffff825116602083015190610140515260016020526040610140512077ffffffffffffffffffffffffffffffffffffffffffffffff8260401c165f5260205267ffffffffffffffff60405f20918254926105ba84612e80565b90551603610b99575a840311610b305760e0015160609073ffffffffffffffffffffffffffffffffffffffff16610827575b73ffffffffffffffffffffffffffffffffffffffff949260a0859360809360606106219801520135905a900301910152614f15565b911685036107be576107555761064b73ffffffffffffffffffffffffffffffffffffffff91614f15565b91166106ec5761065d576001016102e1565b60a490604051907f220266b600000000000000000000000000000000000000000000000000000000825260805101600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608482604051907f220266b600000000000000000000000000000000000000000000000000000000825260805101600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608482604051907f220266b600000000000000000000000000000000000000000000000000000000825260805101600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608483604051907f220266b600000000000000000000000000000000000000000000000000000000825260805101600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b9897969594505a9883519961085b73ffffffffffffffffffffffffffffffffffffffff60e08d015116604087015190615482565b15610ac75760807f52b7512c000000000000000000000000000000000000000000000000000000009798999a9b01516040516108dc816108b060208a015160408b015190602084019d8e528960248501615460565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612c2d565b8651608073ffffffffffffffffffffffffffffffffffffffff60e08301511691015161014051918b61014051928551926101405191f1983d908161014051843e51948251604084019b8c519015918215610abb575b508115610a8b575b50610a065750601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09101160191826040525a90031161097a5750946105ec565b80887f220266b60000000000000000000000000000000000000000000000000000000060a4935260805101600482015260406024820152602760448201527f41413336206f766572207061796d6173746572566572696669636174696f6e4760648201527f61734c696d6974000000000000000000000000000000000000000000000000006084820152fd5b8b610a87610a1261349e565b6040519384937f65c8fd4d0000000000000000000000000000000000000000000000000000000085526080510160048501526024840152600d60648401527f4141333320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a4830190612de9565b0390fd5b9050601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa084019101105f610939565b6040141591505f610931565b608487604051907f220266b600000000000000000000000000000000000000000000000000000000825260805101600482015260406024820152601e60448201527f41413331207061796d6173746572206465706f73697420746f6f206c6f7700006064820152fd5b608487604051907f220266b600000000000000000000000000000000000000000000000000000000825260805101600482015260406024820152601e60448201527f41413236206f76657220766572696669636174696f6e4761734c696d697400006064820152fd5b608488604051907f220266b600000000000000000000000000000000000000000000000000000000825260805101600482015260406024820152601a60448201527f4141323520696e76616c6964206163636f756e74206e6f6e63650000000000006064820152fd5b610c0b91615482565b15610c17578b8061054c565b608488604051907f220266b600000000000000000000000000000000000000000000000000000000825260805101600482015260406024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152fd5b8b903b610cf057608490604051907f220266b600000000000000000000000000000000000000000000000000000000825260805101600482015260406024820152601960448201527f41413230206163636f756e74206e6f74206465706c6f796564000000000000006064820152fd5b610cf861349e565b90610a876040519283927f65c8fd4d00000000000000000000000000000000000000000000000000000000845260805101600484015260606024840152600d60648401527f4141323320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a4830190612de9565b61014051915061053d565b6101408051849052516020819052604090205490985081811115610da85750610140515b97610485565b8103610da2565b80887f220266b6000000000000000000000000000000000000000000000000000000006084935260805101600482015260406024820152601860448201527f41413934206761732076616c756573206f766572666c6f7700000000000000006064820152fd5b60348210610ed05781601411610ec95780359160248110610ec957603411610ec9576024810135608090811c60a0880152601490910135811c90860152606081901c15610e6b5760601c60e085015289806103b3565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4141393820696e76616c6964207061796d6173746572000000000000000000006044820152fd5b6101405180fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b610f3b8160e05184613267565b92610f4684806132a7565b919073ffffffffffffffffffffffffffffffffffffffff610f69602088016132fb565b16956001871461111d5786610f86575b5050019250600101610137565b806040610f9492019061331c565b91873b15610ec957916040519283917f2dd8113300000000000000000000000000000000000000000000000000000000835286604484016040600486015252606483019160648860051b8501019281610140517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee182360301915b8b82106110c357505050505081611054917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8580950301602485015261014051956131b6565b0381610140518a5af190816110a8575b5061109b57847f86a9f750000000000000000000000000000000000000000000000000000000006101405152600452602461014051fd5b929350839260015f610f79565b610140516110b591612c2d565b61014051610ec9575f611064565b9193967fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c90879294969703018552863584811215610ec957602061110c600193858394016133bd565b98019501920188969594939161100e565b867f86a9f750000000000000000000000000000000000000000000000000000000006101405152600452602461014051fd5b34610ec95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610ec957611186612cde565b3361014051526101405160205260016040610140512001908154916dffffffffffffffffffffffffffff8360081c169283156113945760981c65ffffffffffff1680156113365742106112d85780547fffffffffffffff000000000000000000000000000000000000000000000000ff1690556040805173ffffffffffffffffffffffffffffffffffffffff831681526020810184905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2610140519182918291829173ffffffffffffffffffffffffffffffffffffffff165af161126d612eba565b501561127a576101405180f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b34610ec957610140517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610ec9573361014051526101405160205260016040610140512001805463ffffffff8160781c169081156115835760ff16156115255765ffffffffffff4216019065ffffffffffff82116114f25780547fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff001678ffffffffffff00000000000000000000000000000000000000609884901b1617905560405165ffffffffffff909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a26101405180f35b7f4e487b710000000000000000000000000000000000000000000000000000000061014051526011600452602461014051fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610ec95761161b611616612cde565b6131f4565b6101405180f35b34610ec95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610ec95760043567ffffffffffffffff8111610ec95760206116766116b1923690600401612d01565b60405193849283927f570e1a3600000000000000000000000000000000000000000000000000000000845285600485015260248401916131b6565b03816101405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af180156117785773ffffffffffffffffffffffffffffffffffffffff916101405191611749575b507f6ca7b80600000000000000000000000000000000000000000000000000000000610140515216600452602461014051fd5b61176b915060203d602011611771575b6117638183612c2d565b81019061318a565b82611716565b503d611759565b6040513d61014051823e3d90fd5b34610ec95760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610ec9576117bd612cde565b60243567ffffffffffffffff8111610ec9576117dd903690600401612d01565b604051929181908437820190610140518252610140519280610140519303915af4611806612eba565b90610a876040519283927f9941055400000000000000000000000000000000000000000000000000000000845215156004840152604060248401526044830190612de9565b34610ec957610140517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610ec9576119296118a87f0000000000000000000000000000000000000000000000000000000000000000614ccf565b6118d17f0000000000000000000000000000000000000000000000000000000000000000614e45565b60405190602090611937906118e68385612c2d565b6101405184525f3681376040519586957f0f00000000000000000000000000000000000000000000000000000000000000875260e08588015260e0870190612de9565b908582036040870152612de9565b4660608501523060808501526101405160a085015283810360c0850152818084519283815201930191610140515b82811061197457505050500390f35b835185528695509381019392810192600101611965565b34610ec95761199936612d56565b6119a4929192613824565b6119ad8361303a565b6119b8818585613898565b5061014051927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a161014051915b8583106119f9576101b48585614a19565b909193600190611a1f611a0d878987613109565b611a178886613176565b51908861437c565b01940191906119e8565b34610ec95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610ec95773ffffffffffffffffffffffffffffffffffffffff611a75612cde565b1661014051526101405160205260206040610140512054604051908152f35b34610ec95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610ec95773ffffffffffffffffffffffffffffffffffffffff611ae0612cde565b604051611aec81612bab565b6101405181526101405160208201526101405160408201526101405160608201526080610140519101521661014051526101405160205260a06040610140512065ffffffffffff604051611b3f81612bab565b63ffffffff60018454948584520154916dffffffffffffffffffffffffffff6020820160ff8516151581526040830190828660081c1682528660806060860195878960781c168752019660981c1686526040519788525115156020880152511660408601525116606084015251166080820152f35b34610ec95760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610ec9576020611bed612cde565b73ffffffffffffffffffffffffffffffffffffffff611c0a612d2f565b91166101405152600182526040610140512077ffffffffffffffffffffffffffffffffffffffffffffffff82165f52825260405f20547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b34610ec95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610ec95760043567ffffffffffffffff8111610ec9576101207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8236030112610ec957611cea602091600401612ee9565b604051908152f35b34610ec95760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610ec957611d29612cde565b6024359033610140515261014051602052604061014051208054808411611e355783611d5491612ead565b90556040805173ffffffffffffffffffffffffffffffffffffffff831681526020810184905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2610140519182918291829173ffffffffffffffffffffffffffffffffffffffff165af1611dca612eba565b5015611dd7576101405180f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b34610ec95760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610ec957611eca612cde565b73ffffffffffffffffffffffffffffffffffffffff611ee7612d2f565b91166101405152600160205277ffffffffffffffffffffffffffffffffffffffffffffffff6040610140512091165f52602052602060405f2054604051908152f35b34610ec957610140517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610ec95760206040517f29a0bca4af4be3421398da00295e58e6d7de38cb492214754cb6a47507dd6f8e8152f35b34610ec957610140517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610ec9576020611cea6134cb565b34610ec95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610ec95760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610ec957336101405152600160205277ffffffffffffffffffffffffffffffffffffffffffffffff6040610140512091165f5260205260405f206120528154612e80565b90556101405180f35b34610ec957610140517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610ec957602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610ec95760043563ffffffff8116809103610ec957336101405152610140516020526040610140512090801561242957600182015463ffffffff8160781c1682106123cb57612155906dffffffffffffffffffffffffffff349160081c16612e46565b91821561236d576dffffffffffffffffffffffffffff831161230f57546040516122d79161218282612bab565b815265ffffffffffff602082019160018352604081016dffffffffffffffffffffffffffff87168152606082019086825260016080840193610140518552336101405152610140516020526040610140512090518155019451151560ff7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008754169116178555517fffffffffffffffffffffffffffffffffff0000000000000000000000000000ff6effffffffffffffffffffffffffff008087549360081b16169116178455517fffffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffff72ffffffff0000000000000000000000000000008086549360781b1616911617835551167fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff78ffffffffffff0000000000000000000000000000000000000083549260981b169116179055565b60405191825260208201527fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c0160403392a26101405180f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b34610ec95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610ec9576004357fffffffff000000000000000000000000000000000000000000000000000000008116809103610ec957807f6930d3ee00000000000000000000000000000000000000000000000000000000602092149081156125af575b8115612585575b811561255b575b8115612531575b506040519015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501482612526565b7f3e84f021000000000000000000000000000000000000000000000000000000008114915061251f565b7fcf28ef970000000000000000000000000000000000000000000000000000000081149150612518565b7f989ccc580000000000000000000000000000000000000000000000000000000081149150612511565b34612a32576102007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112612a325760043567ffffffffffffffff8111612a325736602382011215612a325761263a903690602481600401359101612ca8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101c08112612a32576101406040519161267683612bab565b12612a325760405161268781612bf4565b60243573ffffffffffffffffffffffffffffffffffffffff81168103612a3257815260443560208201526064356040820152608435606082015260a435608082015260c43560a082015260e43560c08201526101043573ffffffffffffffffffffffffffffffffffffffff81168103612a325760e082015261012435610100820152610144356101208201528152602081019161016435835260408201906101843582526101a435606084015260808301916101c43583526101e43567ffffffffffffffff8111612a3257612760903690600401612d01565b955a90303303612b4d578651606081015195603f5a0260061c61271060a084015189010111612b25575f9681519182612a6b575b5050505050906127ac915a9003855101963691612ca8565b925a93855161010081015161012082015148018082105f14612a635750975b6127f873ffffffffffffffffffffffffffffffffffffffff60e08401511694518203606084015190614b09565b01925f928161290e5750505173ffffffffffffffffffffffffffffffffffffffff16945b5a900301019485029051928184105f146128ba5750506003811015612887576002036128595760209281611cea929361285481614c2a565b614b28565b7fdeadaa51000000000000000000000000000000000000000000000000000000006101405152602061014051fd5b7f4e487b710000000000000000000000000000000000000000000000000000000061014051526021600452602461014051fd5b816128f0929594969396039073ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f209081540180915590565b5060038410156128875782612909926020951590614ba9565b611cea565b909691878251612921575b50505061281c565b90919293505a926003881015612a365760028803612957575b505060a061294e925a900391015190614b09565b90888080612919565b60a083015191803b15612a32578b925f92836129b3938c8b88604051998a98899788957f7c627b210000000000000000000000000000000000000000000000000000000087526004870152608060248701526084860190612de9565b9202604484015260648301520393f19081612a1d575b50612a1357610a876129d961349e565b6040519182917fad7954bc000000000000000000000000000000000000000000000000000000008352602060048401526024830190612de9565b60a061294e61293a565b5f612a2791612c2d565b5f610140528a6129c9565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b9050976127cb565b915f9291838093602073ffffffffffffffffffffffffffffffffffffffff885116910192f115612a9e575b808080612794565b6127ac9392955060405191612ab161349e565b908151612aca575b505050604052600193909188612a96565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a201905191602073ffffffffffffffffffffffffffffffffffffffff855116940151612b1a60405192839283612e2c565b0390a3888080612ab9565b7fdeaddead000000000000000000000000000000000000000000000000000000005f5260205ffd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b60a0810190811067ffffffffffffffff821117612bc757604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610140810190811067ffffffffffffffff821117612bc757604052565b6060810190811067ffffffffffffffff821117612bc757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117612bc757604052565b67ffffffffffffffff8111612bc757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192612cb482612c6e565b91612cc26040519384612c2d565b829481845281830111612a32578281602093845f960137010152565b6004359073ffffffffffffffffffffffffffffffffffffffff82168203612a3257565b9181601f84011215612a325782359167ffffffffffffffff8311612a325760208381860195010111612a3257565b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff82168203612a3257565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc830112612a325760043567ffffffffffffffff8111612a325760040182601f82011215612a325780359267ffffffffffffffff8411612a32576020808301928560051b010111612a3257919060243573ffffffffffffffffffffffffffffffffffffffff81168103612a325790565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b604090612e43939281528160208201520190612de9565b90565b91908201809211612e5357565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114612e535760010190565b91908203918211612e5357565b3d15612ee4573d90612ecb82612c6e565b91612ed96040519384612c2d565b82523d5f602084013e565b606090565b604290612ef5816135f4565b612efd6134cb565b91612f07816132fb565b91801561300557905b60c0612f1f606083018361331c565b90816040519182372091612f3660e082018261331c565b908160405191823720926040519473ffffffffffffffffffffffffffffffffffffffff60208701977f29a0bca4af4be3421398da00295e58e6d7de38cb492214754cb6a47507dd6f8e895216604087015260208301356060870152608086015260a085015260808101358285015260a081013560e085015201356101008301526101208201526101208152612fcd61014082612c2d565b519020604051917f19010000000000000000000000000000000000000000000000000000000000008352600283015260228201522090565b50613013604082018261331c565b90816040519182372090612f10565b67ffffffffffffffff8111612bc75760051b60200190565b9061304482613022565b6130516040519182612c2d565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe061307f8294613022565b01905f5b82811061308f57505050565b60209060405161309e81612bab565b6040516130aa81612bf4565b5f81525f848201525f60408201525f60608201525f60808201525f60a08201525f60c08201525f60e08201525f6101008201525f61012082015281525f838201525f60408201525f60608201525f608082015282828501015201613083565b91908110156131495760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee181360301821215612a32570190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b80518210156131495760209160051b010190565b90816020910312612a32575173ffffffffffffffffffffffffffffffffffffffff81168103612a325790565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b7f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4602073ffffffffffffffffffffffffffffffffffffffff61325b348573ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f209081540180915590565b936040519485521692a2565b91908110156131495760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215612a32570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215612a32570180359067ffffffffffffffff8211612a3257602001918160051b36038313612a3257565b3573ffffffffffffffffffffffffffffffffffffffff81168103612a325790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215612a32570180359067ffffffffffffffff8211612a3257602001918136038313612a3257565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe182360301811215612a3257016020813591019167ffffffffffffffff8211612a32578136038313612a3257565b80359173ffffffffffffffffffffffffffffffffffffffff83168303612a325773ffffffffffffffffffffffffffffffffffffffff612e43931681526020820135602082015261348f61348361344a61342f61341c604087018761336d565b61012060408801526101208701916131b6565b61343c606087018761336d565b9086830360608801526131b6565b6080850135608085015260a085013560a085015260c085013560c085015261347560e086018661336d565b9085830360e08701526131b6565b9261010081019061336d565b916101008185039101526131b6565b3d61080081116134c2575b604051906020818301016040528082525f602083013e90565b506108006134a9565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163014806135cb575b15613533577f000000000000000000000000000000000000000000000000000000000000000090565b60405160208101907f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f82527f000000000000000000000000000000000000000000000000000000000000000060408201527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260a081526135c560c082612c2d565b51902090565b507f0000000000000000000000000000000000000000000000000000000000000000461461350a565b613601604082018261331c565b909161360d8284614c7a565b1561381d5761361b906132fb565b60175f80833c5f51907fef010000000000000000000000000000000000000000000000000000000000007fffffff000000000000000000000000000000000000000000000000000000000083160361375b575060181b91601482116136bb5750506040517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808060208401941616168252601481526135c5603482612c2d565b81601411612a325760206135c5916040519384917fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808086860199161616875260147fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec83019101603484013781015f8382015203017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612c2d565b3b156137bf5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6e6f7420616e204549502d373730322064656c656761746500000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f73656e64657220686173206e6f20636f646500000000000000000000000000006044820152fd5b5050505f90565b7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005c6138705760017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005d565b7f3ee5aeb5000000000000000000000000000000000000000000000000000000005f5260045ffd5b92919092835f5b8181106138ac5750505050565b6138b68185613176565b516138c2828486613109565b5f915a81519273ffffffffffffffffffffffffffffffffffffffff6138e6826132fb565b168452602081013560208501526080810135936fffffffffffffffffffffffffffffffff8560801c951694604082019060608301968752815260c0820160a0840135815260c0840135906fffffffffffffffffffffffffffffffff8260801c9216916101208501906101008601938452815261396560e087018761331c565b9081614316575b505060405161397a87612ee9565b9960208a019a8b528160405285519586855117825117926effffffffffffffffffffffffffffff60808a01948551179560a08b0196875117895117905117116142b45750519051019051019051019051019051029560408601918783528973ffffffffffffffffffffffffffffffffffffffff60e08951613a0f8b8483511695613a0760408d018d61331c565b929091614fb5565b015116985f99801561428d575b89516040810151905173ffffffffffffffffffffffffffffffffffffffff1680916040519d8e808d8b519360208301947f19822f7c0000000000000000000000000000000000000000000000000000000086526024840192613a7d93615460565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018252613aad9082612c2d565b51905f6020948194f15f519c3d602003614285575b6040521561419a575015614120575b505073ffffffffffffffffffffffffffffffffffffffff8451166020850151905f52600160205260405f2077ffffffffffffffffffffffffffffffffffffffffffffffff8260401c165f5260205267ffffffffffffffff60405f2091825492613b3984612e80565b905516036140bb575a8603116140565773ffffffffffffffffffffffffffffffffffffffff60e0606094015116613d96575b505073ffffffffffffffffffffffffffffffffffffffff949260a085936080936060613ba29801520135905a900301910152614f15565b9116613d3157613ccc57613bca73ffffffffffffffffffffffffffffffffffffffff91614f15565b9116613c6757613bdc5760010161389f565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608483604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b909c9b9a99989796505a9085519d60e08f015173ffffffffffffffffffffffffffffffffffffffff168151613dca91615482565b15613ff157613e1d7f52b7512c00000000000000000000000000000000000000000000000000000000999a9b9c9d9e9f60800151926108b060405193849251905190602084019d8e528960248501615460565b5f8088518b82608073ffffffffffffffffffffffffffffffffffffffff60e08501511693015192865193f1983d90815f843e51948251604084019b8c519015918215613fe5575b508115613fb5575b50613f385750601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09101160191826040525a900311613eb05750948260a0613b6b565b80887f220266b60000000000000000000000000000000000000000000000000000000060a49352600482015260406024820152602760448201527f41413336206f766572207061796d6173746572566572696669636174696f6e4760648201527f61734c696d6974000000000000000000000000000000000000000000000000006084820152fd5b8b610a87613f4461349e565b6040519384937f65c8fd4d00000000000000000000000000000000000000000000000000000000855260048501526024840152600d60648401527f4141333320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a4830190612de9565b9050601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa084019101105f613e6c565b6040141591505f613e64565b608489604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413331207061796d6173746572206465706f73697420746f6f206c6f7700006064820152fd5b608489604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413236206f76657220766572696669636174696f6e4761734c696d697400006064820152fd5b60848a604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601a60448201527f4141323520696e76616c6964206163636f756e74206e6f6e63650000000000006064820152fd5b61412991615482565b15614135575f80613ad1565b60848a604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152fd5b8d903b61420657608490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601960448201527f41413230206163636f756e74206e6f74206465706c6f796564000000000000006064820152fd5b61420e61349e565b90610a876040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141323320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a4830190612de9565b5f9150613ac2565b9950815f525f60205260405f20548181115f146142ad57505f5b99613a1c565b81036142a7565b808f7f220266b60000000000000000000000000000000000000000000000000000000060849352600482015260406024820152601860448201527f41413934206761732076616c756573206f766572666c6f7700000000000000006064820152fd5b60348210610ed05781601411612a3257803560601c9160248110612a3257601482013590603411612a32576fffffffffffffffffffffffffffffffff60248193013560801c1660a089015260801c1660808701528015610e6b5760e08601525f8061396c565b9092915a60608201516040519586614397606083018361331c565b5f60038211614a11575b7fffffffff00000000000000000000000000000000000000000000000000000000167f8dd7712f00000000000000000000000000000000000000000000000000000000036148a3575050505f6144ae6145a261443c61446e602095868a01516040519384927f8dd7712f000000000000000000000000000000000000000000000000000000008a8501526040602485015260648401906133bd565b906044830152037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282612c2d565b6108b06040519384927e42dc5300000000000000000000000000000000000000000000000000000000888501526102006024850152610224840190612de9565b614571604484018b60806101a091610120815173ffffffffffffffffffffffffffffffffffffffff8151168652602081015160208701526040810151604087015260608101516060870152838101518487015260a081015160a087015260c081015160c087015273ffffffffffffffffffffffffffffffffffffffff60e08201511660e087015261010081015161010087015201516101208501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8382030161020484015287612de9565b828151910182305af15f5196604052156145bd575b50505050565b9091929394505f3d602014614896575b7fdeaddead00000000000000000000000000000000000000000000000000000000810361465957608485604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152600f60448201527f41413935206f7574206f662067617300000000000000000000000000000000006064820152fd5b92935090917fdeadaa5100000000000000000000000000000000000000000000000000000000036146bc57506146a16146966146b1925a90612ead565b608084015190612e46565b6040830151836128548295614c2a565b905b5f8080806145b7565b9061472f9060405160208501518551907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f4792602073ffffffffffffffffffffffffffffffffffffffff84511693015161471261349e565b9061472260405192839283612e2c565b0390a36040525a90612ead565b61473f6080840191825190612e46565b915f905a92855161010081015161012082015148018082105f1461488e5750955b61478d73ffffffffffffffffffffffffffffffffffffffff60e08401511693518203606084015190614b09565b01925f928061485f5750505173ffffffffffffffffffffffffffffffffffffffff16935b5a900301019283026040850151928184105f14614813575050806147e6575090816147e0929361285481614c2a565b906146b3565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b614848908284939795039073ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f209081540180915590565b506147e6575090825f61485a93614ba9565b6147e0565b9591905161486e575b506147b1565b935090506148875a9360a05f955a900391015190614b09565b905f614868565b905095614760565b5060205f803e5f516145cd565b614a0893506149dc916148e8917e42dc5300000000000000000000000000000000000000000000000000000000602086015261020060248601526102248501916131b6565b6149ab604484018860806101a091610120815173ffffffffffffffffffffffffffffffffffffffff8151168652602081015160208701526040810151604087015260608101516060870152838101518487015260a081015160a087015260c081015160c087015273ffffffffffffffffffffffffffffffffffffffff60e08201511660e087015261010081015161010087015201516101208501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc8382030161020484015284612de9565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101885287612c2d565b60205f876145a2565b5081356143a1565b73ffffffffffffffffffffffffffffffffffffffff168015614aab575f80809381935af1614a45612eba565b5015614a4d57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b90619c408201811115614b2257606491600a9103020490565b50505f90565b9190917f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f6080602083015192519473ffffffffffffffffffffffffffffffffffffffff86511694602073ffffffffffffffffffffffffffffffffffffffff60e089015116970151916040519283525f602084015260408301526060820152a4565b9060807f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f91602084015193519573ffffffffffffffffffffffffffffffffffffffff87511695602073ffffffffffffffffffffffffffffffffffffffff60e08a015116980151926040519384521515602084015260408301526060820152a4565b60208101519051907f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e60208073ffffffffffffffffffffffffffffffffffffffff855116940151604051908152a3565b90600211614cca57357fffffffffffffffffffffffffffffffffffffffff000000000000000000000000167f77020000000000000000000000000000000000000000000000000000000000001490565b505f90565b60ff8114614d2e5760ff811690601f8211614d065760405191614cf3604084612c2d565b6020808452838101919036833783525290565b7fb3512b0c000000000000000000000000000000000000000000000000000000005f5260045ffd5b506040515f6002548060011c9160018216918215614e3b575b602084108314614e0e578385528492908115614dd15750600114614d72575b612e4392500382612c2d565b5060025f90815290917f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5b818310614db5575050906020612e4392820101614d66565b6020919350806001915483858801015201910190918392614d9d565b60209250612e439491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b820101614d66565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f1692614d47565b60ff8114614e695760ff811690601f8211614d065760405191614cf3604084612c2d565b506040515f6003548060011c9160018216918215614f0b575b602084108314614e0e578385528492908115614dd15750600114614eac57612e4392500382612c2d565b5060035f90815290917fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b818310614eef575050906020612e4392820101614d66565b6020919350806001915483858801015201910190918392614ed7565b92607f1692614e82565b8015614fae575f60408051614f2981612c11565b828152826020820152015273ffffffffffffffffffffffffffffffffffffffff81169065ffffffffffff8160a01c16908115614fa0575b60409060d01c9165ffffffffffff825191614f7a83612c11565b8583528460208401521691829101524211908115614f9757509091565b90504211159091565b65ffffffffffff9150614f60565b505f905f90565b929190915f9080614fc8575b5050505050565b83519473ffffffffffffffffffffffffffffffffffffffff86511695614fee8386614c7a565b61535f5750853b6152fa576014821061529557604085510151602060405180927f570e1a36000000000000000000000000000000000000000000000000000000008252826004830152818781615048602482018a8d6131b6565b039273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690f190811561528a57849161526b575b5073ffffffffffffffffffffffffffffffffffffffff811680156152065787036151a1573b1561513c5750601411615139577fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d91604091503573ffffffffffffffffffffffffffffffffffffffff60e06020860151955101511673ffffffffffffffffffffffffffffffffffffffff83519260601c1682526020820152a35f80808080614fc1565b80fd5b608490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313420696e6974436f6465206d7573742072657475726e2073656e6465726064820152fd5b608483604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601b60448201527f4141313320696e6974436f6465206661696c6564206f72204f4f4700000000006064820152fd5b615284915060203d602011611771576117638183612c2d565b5f615091565b6040513d86823e3d90fd5b608490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f4141393920696e6974436f646520746f6f20736d616c6c0000000000000000006064820152fd5b608490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152fd5b945050919050601482116153735750505050565b604073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169301519082601411612a3257833b15612a32575f809461542f96604051978896879586937fc09ad0d900000000000000000000000000000000000000000000000000000000855260048501526040602485015260147fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec60448601930191016131b6565b0393f1801561545557615445575b8080806145b7565b5f61544f91612c2d565b5f61543d565b6040513d5f823e3d90fd5b615478604092959493956060835260608301906133bd565b9460208201520152565b73ffffffffffffffffffffffffffffffffffffffff165f525f60205260405f2090815481811061381d5703905560019056fea2646970667358221220a2ee7c02d47f72772240d0dfa7174d99b6049a68ccdf3d4434c3918f6bd9c1e164736f6c634300081c003360a08060405234602f57336080526104c19081610034823960805181818160d80152818161023401526102e10152f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c8063570e1a3614610258578063b0d691fe146101ea5763c09ad0d91461003a575f80fd5b346101e65760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e65760043573ffffffffffffffffffffffffffffffffffffffff811681036101e65760243567ffffffffffffffff81116101e657366023820112156101e6575f916100bd83923690602481600401359101610384565b906100ff73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163314610426565b82602083519301915af11561011057005b3d61080081116101dd575b60c460405160208382010160405282815260208101925f843e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6040519485937f65c8fd4d0000000000000000000000000000000000000000000000000000000085525f6004860152606060248601528260648601527f4141313320454950373730322073656e64657220696e6974206661696c656400608486015260a060448601525180918160a48701528686015e5f85828601015201168101030190fd5b5061080061011b565b5f80fd5b346101e6575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e657602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b346101e65760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126101e65760043567ffffffffffffffff81116101e657366023820112156101e65780600401359067ffffffffffffffff82116101e65736602483830101116101e6575f9161030873ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163314610426565b806014116101e6576020916103455f927fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec36910160388401610384565b90826024858451940192013560601c5af161037c575b60209073ffffffffffffffffffffffffffffffffffffffff60405191168152f35b505f5161035b565b92919267ffffffffffffffff82116103f957604051917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81601f8401160116830183811067ffffffffffffffff8211176103f9576040528294818452818301116101e6578281602093845f960137010152565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b1561042d57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f414139372073686f756c642063616c6c2066726f6d20456e747279506f696e746044820152fdfea26469706673582212206423798798d408242e814ed5c031f1afcdccad1146c1c11fab88cce1fdaa4c4a64736f6c634300081c0033" + /* ========= V07 CORE ========= */ // Will deploy entryPoint to 0x0000000071727De22E5E9d8BAf0edAc6f37da032 export const ENTRY_POINT_V07_CREATECALL: Hex = "0x90d8084deab30c2a37c45e8d47f49f2f7965183cb6990a98943ef94940681de360a08060405234620000825760016002556101df8181016001600160401b038111838210176200006c57829162003f2b833903906000f080156200006057608052604051613ea39081620000888239608051818181610d22015261324b0152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040526004361015610024575b361561001957600080fd5b61002233612748565b005b60003560e01c806242dc5314611b0057806301ffc9a7146119ae5780630396cb60146116765780630bd28e3b146115fa5780631b2e01b814611566578063205c2878146113d157806322cdde4c1461136b57806335567e1a146112b35780635287ce12146111a557806370a0823114611140578063765e827f14610e82578063850aaf6214610dc35780639b249f6914610c74578063b760faf914610c3a578063bb9fe6bf14610a68578063c23a5cea146107c4578063dbed18e0146101a15763fc7e286d0361000e573461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61013a61229f565b16600052600060205260a0604060002065ffffffffffff6001825492015460405192835260ff8116151560208401526dffffffffffffffffffffffffffff8160081c16604084015263ffffffff8160781c16606084015260981c166080820152f35b600080fd5b3461019c576101af36612317565b906101b86129bd565b60009160005b82811061056f57506101d08493612588565b6000805b8481106102fc5750507fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000809360005b81811061024757610240868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2613ba7565b6001600255005b6102a261025582848a612796565b73ffffffffffffffffffffffffffffffffffffffff6102766020830161282a565b167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a2806127d6565b906000915b8083106102b957505050600101610209565b909194976102f36102ed6001926102e78c8b6102e0826102da8e8b8d61269d565b9261265a565b5191613597565b90612409565b99612416565b950191906102a7565b6020610309828789612796565b61031f61031682806127d6565b9390920161282a565b9160009273ffffffffffffffffffffffffffffffffffffffff8091165b8285106103505750505050506001016101d4565b909192939561037f83610378610366848c61265a565b516103728b898b61269d565b856129f6565b9290613dd7565b9116840361050a576104a5576103958491613dd7565b9116610440576103b5576103aa600191612416565b96019392919061033c565b60a487604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608489604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b61057a818487612796565b9361058585806127d6565b919095602073ffffffffffffffffffffffffffffffffffffffff6105aa82840161282a565b1697600192838a1461076657896105da575b5050505060019293949550906105d191612409565b939291016101be565b8060406105e892019061284b565b918a3b1561019c57929391906040519485937f2dd8113300000000000000000000000000000000000000000000000000000000855288604486016040600488015252606490818601918a60051b8701019680936000915b8c83106106e657505050505050838392610684927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8560009803016024860152612709565b03818a5afa90816106d7575b506106c657602486604051907f86a9f7500000000000000000000000000000000000000000000000000000000082526004820152fd5b93945084936105d1600189806105bc565b6106e0906121bd565b88610690565b91939596977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c908a9294969a0301865288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18336030181121561019c57836107538793858394016128ec565b9a0196019301909189979695949261063f565b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b3461019c576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576107fc61229f565b33600052600082526001604060002001908154916dffffffffffffffffffffffffffff8360081c16928315610a0a5765ffffffffffff8160981c1680156109ac57421061094e5760009373ffffffffffffffffffffffffffffffffffffffff859485947fffffffffffffff000000000000000000000000000000000000000000000000ff86951690556040517fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda33391806108da8786836020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b0390a2165af16108e8612450565b50156108f057005b606490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b3461019c5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c573360005260006020526001604060002001805463ffffffff8160781c16908115610bdc5760ff1615610b7e5765ffffffffffff908142160191818311610b4f5780547fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff001678ffffffffffff00000000000000000000000000000000000000609885901b161790556040519116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a2005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610022610c6f61229f565b612748565b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043567ffffffffffffffff811161019c576020610cc8610d1b9236906004016122c2565b919073ffffffffffffffffffffffffffffffffffffffff9260405194859283927f570e1a360000000000000000000000000000000000000000000000000000000084528560048501526024840191612709565b03816000857f0000000000000000000000000000000000000000000000000000000000000000165af1908115610db757602492600092610d86575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b610da991925060203d602011610db0575b610da181836121ed565b8101906126dd565b9083610d56565b503d610d97565b6040513d6000823e3d90fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610dfa61229f565b60243567ffffffffffffffff811161019c57600091610e1e839236906004016122c2565b90816040519283928337810184815203915af4610e39612450565b90610e7e6040519283927f99410554000000000000000000000000000000000000000000000000000000008452151560048401526040602484015260448301906123c6565b0390fd5b3461019c57610e9036612317565b610e9b9291926129bd565b610ea483612588565b60005b848110610f1c57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000915b858310610eec576102408585613ba7565b909193600190610f12610f0087898761269d565b610f0a888661265a565b519088613597565b0194019190610edb565b610f47610f40610f2e8385979561265a565b51610f3a84898761269d565b846129f6565b9190613dd7565b73ffffffffffffffffffffffffffffffffffffffff929183166110db5761107657610f7190613dd7565b911661101157610f8657600101929092610ea7565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608483604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61118c61229f565b1660005260006020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff6111f161229f565b6000608060405161120181612155565b828152826020820152826040820152826060820152015216600052600060205260a06040600020608060405161123681612155565b6001835493848352015490602081019060ff8316151582526dffffffffffffffffffffffffffff60408201818560081c16815263ffffffff936060840193858760781c16855265ffffffffffff978891019660981c1686526040519788525115156020880152511660408601525116606084015251166080820152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760206112ec61229f565b73ffffffffffffffffffffffffffffffffffffffff6113096122f0565b911660005260018252604060002077ffffffffffffffffffffffffffffffffffffffffffffffff821660005282526040600020547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b3461019c577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60208136011261019c576004359067ffffffffffffffff821161019c5761012090823603011261019c576113c9602091600401612480565b604051908152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761140861229f565b60243590336000526000602052604060002090815491828411611508576000808573ffffffffffffffffffffffffffffffffffffffff8295839561144c848a612443565b90556040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af16114a2612450565b50156114aa57005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761159d61229f565b73ffffffffffffffffffffffffffffffffffffffff6115ba6122f0565b9116600052600160205277ffffffffffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043577ffffffffffffffffffffffffffffffffffffffffffffffff811680910361019c5733600052600160205260406000209060005260205260406000206116728154612416565b9055005b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043563ffffffff9182821680920361019c5733600052600081526040600020928215611950576001840154908160781c1683106118f2576116f86dffffffffffffffffffffffffffff9182349160081c16612409565b93841561189457818511611836579065ffffffffffff61180592546040519061172082612155565b8152848101926001845260408201908816815260608201878152600160808401936000855233600052600089526040600020905181550194511515917fffffffffffffffffffffffffff0000000000000000000000000000000000000060ff72ffffffff0000000000000000000000000000006effffffffffffffffffffffffffff008954945160081b16945160781b1694169116171717835551167fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff78ffffffffffff0000000000000000000000000000000000000083549260981b169116179055565b6040519283528201527fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c0160403392a2005b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361019c57807f60fc6b6e0000000000000000000000000000000000000000000000000000000060209214908115611ad6575b8115611aac575b8115611a82575b8115611a58575b506040519015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501482611a4d565b7f3e84f0210000000000000000000000000000000000000000000000000000000081149150611a46565b7fcf28ef970000000000000000000000000000000000000000000000000000000081149150611a3f565b7f915074d80000000000000000000000000000000000000000000000000000000081149150611a38565b3461019c576102007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5767ffffffffffffffff60043581811161019c573660238201121561019c57611b62903690602481600401359101612268565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101c0811261019c5761014060405191611b9e83612155565b1261019c5760405192611bb0846121a0565b60243573ffffffffffffffffffffffffffffffffffffffff8116810361019c578452602093604435858201526064356040820152608435606082015260a435608082015260c43560a082015260e43560c08201526101043573ffffffffffffffffffffffffffffffffffffffff8116810361019c5760e08201526101243561010082015261014435610120820152825261016435848301526101843560408301526101a43560608301526101c43560808301526101e43590811161019c57611c7c9036906004016122c2565b905a3033036120f7578351606081015195603f5a0260061c61271060a0840151890101116120ce5760009681519182611ff0575b5050505090611cca915a9003608085015101923691612268565b925a90600094845193611cdc85613ccc565b9173ffffffffffffffffffffffffffffffffffffffff60e0870151168015600014611ea957505073ffffffffffffffffffffffffffffffffffffffff855116935b5a9003019360a06060820151910151016080860151850390818111611e95575b50508302604085015192818410600014611dce5750506003811015611da157600203611d79576113c99293508093611d7481613d65565b613cf6565b5050507fdeadaa51000000000000000000000000000000000000000000000000000000008152fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b81611dde92979396940390613c98565b506003841015611e6857507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f60808683015192519473ffffffffffffffffffffffffffffffffffffffff865116948873ffffffffffffffffffffffffffffffffffffffff60e0890151169701519160405192835215898301528760408301526060820152a46113c9565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6064919003600a0204909301928780611d3d565b8095918051611eba575b5050611d1d565b6003861015611fc1576002860315611eb35760a088015190823b1561019c57600091611f2491836040519586809581947f7c627b210000000000000000000000000000000000000000000000000000000083528d60048401526080602484015260848301906123c6565b8b8b0260448301528b60648301520393f19081611fad575b50611fa65787893d610800808211611f9e575b506040519282828501016040528184528284013e610e7e6040519283927fad7954bc000000000000000000000000000000000000000000000000000000008452600484015260248301906123c6565b905083611f4f565b8980611eb3565b611fb89199506121bd565b6000978a611f3c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91600092918380938c73ffffffffffffffffffffffffffffffffffffffff885116910192f115612023575b808080611cb0565b611cca929195503d6108008082116120c6575b5060405190888183010160405280825260008983013e805161205f575b5050600194909161201b565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20188870151918973ffffffffffffffffffffffffffffffffffffffff8551169401516120bc604051928392835260408d84015260408301906123c6565b0390a38680612053565b905088612036565b877fdeaddead000000000000000000000000000000000000000000000000000000006000526000fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b60a0810190811067ffffffffffffffff82111761217157604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610140810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157604052565b6060810190811067ffffffffffffffff82111761217157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926122748261222e565b9161228260405193846121ed565b82948184528183011161019c578281602093846000960137010152565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9181601f8401121561019c5782359167ffffffffffffffff831161019c576020838186019501011161019c57565b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261019c5760043567ffffffffffffffff9283821161019c578060238301121561019c57816004013593841161019c5760248460051b8301011161019c57602401919060243573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b60005b8381106123b65750506000910152565b81810151838201526020016123a6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612402815180928187528780880191016123a3565b0116010190565b91908201809211610b4f57565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b4f5760010190565b91908203918211610b4f57565b3d1561247b573d906124618261222e565b9161246f60405193846121ed565b82523d6000602084013e565b606090565b604061248e8183018361284b565b90818351918237206124a3606084018461284b565b90818451918237209260c06124bb60e083018361284b565b908186519182372091845195602087019473ffffffffffffffffffffffffffffffffffffffff833516865260208301358789015260608801526080870152608081013560a087015260a081013582870152013560e08501526101009081850152835261012083019167ffffffffffffffff918484108385111761217157838252845190206101408501908152306101608601524661018086015260608452936101a00191821183831017612171575251902090565b67ffffffffffffffff81116121715760051b60200190565b9061259282612570565b6040906125a260405191826121ed565b8381527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06125d08295612570565b019160005b8381106125e25750505050565b60209082516125f081612155565b83516125fb816121a0565b600081526000849181838201528187820152816060818184015260809282848201528260a08201528260c08201528260e082015282610100820152826101208201528652818587015281898701528501528301528286010152016125d5565b805182101561266e5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919081101561266e5760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18136030182121561019c570190565b9081602091031261019c575173ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b7f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4602073ffffffffffffffffffffffffffffffffffffffff61278a3485613c98565b936040519485521692a2565b919081101561266e5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18136030182121561019c570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c57602001918160051b3603831361019c57565b3573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c5760200191813603831361019c57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019c57016020813591019167ffffffffffffffff821161019c57813603831361019c57565b61012091813573ffffffffffffffffffffffffffffffffffffffff811680910361019c576129626129476129ba9561299b93855260208601356020860152612937604087018761289c565b9091806040880152860191612709565b612954606086018661289c565b908583036060870152612709565b6080840135608084015260a084013560a084015260c084013560c084015261298d60e085018561289c565b9084830360e0860152612709565b916129ac610100918281019061289c565b929091818503910152612709565b90565b60028054146129cc5760028055565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b926000905a93805194843573ffffffffffffffffffffffffffffffffffffffff811680910361019c5786526020850135602087015260808501356fffffffffffffffffffffffffffffffff90818116606089015260801c604088015260a086013560c088015260c086013590811661010088015260801c610120870152612a8060e086018661284b565b801561357b576034811061351d578060141161019c578060241161019c5760341161019c57602481013560801c60a0880152601481013560801c60808801523560601c60e08701525b612ad285612480565b60208301526040860151946effffffffffffffffffffffffffffff8660c08901511760608901511760808901511760a0890151176101008901511761012089015117116134bf57604087015160608801510160808801510160a08801510160c0880151016101008801510296835173ffffffffffffffffffffffffffffffffffffffff81511690612b66604085018561284b565b806131e4575b505060e0015173ffffffffffffffffffffffffffffffffffffffff1690600082156131ac575b6020612bd7918b828a01516000868a604051978896879586937f19822f7c00000000000000000000000000000000000000000000000000000000855260048501613db5565b0393f160009181613178575b50612c8b573d8c610800808311612c83575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141323320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612bf5565b9a92939495969798999a91156130f2575b509773ffffffffffffffffffffffffffffffffffffffff835116602084015190600052600160205260406000208160401c60005260205267ffffffffffffffff604060002091825492612cee84612416565b9055160361308d575a8503116130285773ffffffffffffffffffffffffffffffffffffffff60e0606093015116612d42575b509060a09184959697986040608096015260608601520135905a900301910152565b969550505a9683519773ffffffffffffffffffffffffffffffffffffffff60e08a01511680600052600060205260406000208054848110612fc3576080612dcd9a9b9c600093878094039055015192602089015183604051809d819582947f52b7512c0000000000000000000000000000000000000000000000000000000084528c60048501613db5565b039286f1978860009160009a612f36575b50612e86573d8b610800808311612e7e575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141333320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612df0565b9991929394959697989998925a900311612eab57509096959094939291906080612d20565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602760448201527f41413336206f766572207061796d6173746572566572696669636174696f6e4760648201527f61734c696d6974000000000000000000000000000000000000000000000000006084820152fd5b915098503d90816000823e612f4b82826121ed565b604081838101031261019c5780519067ffffffffffffffff821161019c57828101601f83830101121561019c578181015191612f868361222e565b93612f9460405195866121ed565b838552820160208483850101011161019c57602092612fba9184808701918501016123a3565b01519838612dde565b60848b604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413331207061796d6173746572206465706f73697420746f6f206c6f7700006064820152fd5b608490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413236206f76657220766572696669636174696f6e4761734c696d697400006064820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601a60448201527f4141323520696e76616c6964206163636f756e74206e6f6e63650000000000006064820152fd5b600052600060205260406000208054808c11613113578b9003905538612c9c565b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152fd5b9091506020813d6020116131a4575b81613194602093836121ed565b8101031261019c57519038612be3565b3d9150613187565b508060005260006020526040600020548a81116000146131d75750612bd7602060005b915050612b92565b6020612bd7918c036131cf565b833b61345a57604088510151602060405180927f570e1a360000000000000000000000000000000000000000000000000000000082528260048301528160008161323260248201898b612709565b039273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690f1908115610db75760009161343b575b5073ffffffffffffffffffffffffffffffffffffffff811680156133d6578503613371573b1561330c5760141161019c5773ffffffffffffffffffffffffffffffffffffffff9183887fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d604060e0958787602086015195510151168251913560601c82526020820152a391612b6c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152fd5b60848e604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313420696e6974436f6465206d7573742072657475726e2073656e6465726064820152fd5b60848f604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601b60448201527f4141313320696e6974436f6465206661696c6564206f72204f4f4700000000006064820152fd5b613454915060203d602011610db057610da181836121ed565b3861327c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b5050600060e087015260006080870152600060a0870152612ac9565b9092915a906060810151916040928351967fffffffff00000000000000000000000000000000000000000000000000000000886135d7606084018461284b565b600060038211613b9f575b7f8dd7712f0000000000000000000000000000000000000000000000000000000094168403613a445750505061379d6000926136b292602088015161363a8a5193849360208501528b602485015260648401906128ec565b90604483015203906136727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0928381018352826121ed565b61379189519485927e42dc5300000000000000000000000000000000000000000000000000000000602085015261020060248501526102248401906123c6565b613760604484018b60806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152876123c6565b039081018352826121ed565b6020918183809351910182305af1600051988652156137bf575b505050505050565b909192939495965060003d8214613a3a575b7fdeaddead00000000000000000000000000000000000000000000000000000000810361385b57608487878051917f220266b600000000000000000000000000000000000000000000000000000000835260048301526024820152600f60448201527f41413935206f7574206f662067617300000000000000000000000000000000006064820152fd5b7fdeadaa510000000000000000000000000000000000000000000000000000000091929395949650146000146138c55750506138a961389e6138b8935a90612443565b608085015190612409565b9083015183611d748295613d65565b905b3880808080806137b7565b909261395290828601518651907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f479273ffffffffffffffffffffffffffffffffffffffff9580878551169401516139483d610800808211613a32575b508a519084818301018c5280825260008583013e8a805194859485528401528a8301906123c6565b0390a35a90612443565b916139636080860193845190612409565b926000905a94829488519761397789613ccc565b948260e08b0151168015600014613a1857505050875116955b5a9003019560a06060820151910151019051860390818111613a04575b5050840290850151928184106000146139de57505080611e68575090816139d89293611d7481613d65565b906138ba565b6139ee9082849397950390613c98565b50611e68575090826139ff92613cf6565b6139d8565b6064919003600a02049094019338806139ad565b90919892509751613a2a575b50613990565b955038613a24565b905038613920565b8181803e516137d1565b613b97945082935090613a8c917e42dc53000000000000000000000000000000000000000000000000000000006020613b6b9501526102006024860152610224850191612709565b613b3a604484018860806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152846123c6565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018952886121ed565b60008761379d565b5081356135e2565b73ffffffffffffffffffffffffffffffffffffffff168015613c3a57600080809381935af1613bd4612450565b5015613bdc57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166000526000602052613cc66040600020918254612409565b80915590565b610120610100820151910151808214613cf257480180821015613ced575090565b905090565b5090565b9190917f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f6080602083015192519473ffffffffffffffffffffffffffffffffffffffff946020868851169660e089015116970151916040519283526000602084015260408301526060820152a4565b60208101519051907f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e60208073ffffffffffffffffffffffffffffffffffffffff855116940151604051908152a3565b613dcd604092959493956060835260608301906128ec565b9460208201520152565b8015613e6457600060408051613dec816121d1565b828152826020820152015273ffffffffffffffffffffffffffffffffffffffff811690604065ffffffffffff91828160a01c16908115613e5c575b60d01c92825191613e37836121d1565b8583528460208401521691829101524211908115613e5457509091565b905042109091565b839150613e27565b5060009060009056fea2646970667358221220b094fd69f04977ae9458e5ba422d01cd2d20dbcfca0992ff37f19aa07deec25464736f6c6343000817003360808060405234610016576101c3908161001c8239f35b600080fdfe6080600436101561000f57600080fd5b6000803560e01c63570e1a361461002557600080fd5b3461018a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a576004359167ffffffffffffffff9081841161018657366023850112156101865783600401358281116101825736602482870101116101825780601411610182577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec810192808411610155577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8501160116830190838210908211176101555792846024819482600c60209a968b9960405286845289840196603889018837830101525193013560601c5af1908051911561014d575b5073ffffffffffffffffffffffffffffffffffffffff60405191168152f35b90503861012e565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8380fd5b8280fd5b80fdfea26469706673582212207adef8895ad3393b02fab10a111d85ea80ff35366aa43995f4ea20e67f29200664736f6c63430008170033" -// Will deploy entryPointSimulations (required for V0.7) to 0x74Cb5e4eE81b86e70f9045036a1C5477de69eE87 -export const ENTRY_POINT_SIMULATIONS_CREATECALL: Hex = - "0x313233340000000000000000000000000000000000000000000000000000000060806040526040516100109061005f565b604051809103906000f08015801561002c573d6000803e3d6000fd5b50600080546001600160a01b0319166001600160a01b039290921691909117905534801561005957600080fd5b5061006c565b613d318061050783390190565b61048c8061007b6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063c18f522614610030575b600080fd5b61004361003e366004610230565b610059565b60405161005091906103b0565b60405180910390f35b60606000825167ffffffffffffffff811115610077576100776101e9565b6040519080825280602002602001820160405280156100aa57816020015b60608152602001906001900390816100955790505b50905060005b835181101561019d57606060007f850aaf621a3721219c57b79d6077e318862cf95113b5637afaddb124884a5eb060008054906101000a90046001600160a01b031687858151811061010457610104610414565b602002602001015160405160240161011d92919061042a565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091529050600061015f8882845a6101a5565b905080610174576101716000196101bd565b92505b8285858151811061018757610187610414565b60209081029190910101525050506001016100b0565b509392505050565b6000806000845160208601878987f195945050505050565b60603d828111156101cb5750815b604051602082018101604052818152816000602083013e9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610228576102286101e9565b604052919050565b600080604080848603121561024457600080fd5b83356001600160a01b038116811461025b57600080fd5b925060208481013567ffffffffffffffff8082111561027957600080fd5b8187019150601f88601f84011261028f57600080fd5b8235828111156102a1576102a16101e9565b8060051b6102b08682016101ff565b918252848101860191868101908c8411156102ca57600080fd5b87870192505b83831015610357578235868111156102e85760008081fd5b8701603f81018e136102fa5760008081fd5b888101358781111561030e5761030e6101e9565b61031f818801601f19168b016101ff565b8181528f8c8385010111156103345760008081fd5b818c84018c83013760009181018b019190915283525091870191908701906102d0565b8099505050505050505050509250929050565b6000815180845260005b8181101561039057602081850181015186830182015201610374565b506000602082860101526020601f19601f83011685010191505092915050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561040757603f198886030184526103f585835161036a565b945092850192908501906001016103d9565b5092979650505050505050565b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038316815260406020820181905260009061044e9083018461036a565b94935050505056fea26469706673582212207ddd3776bce2d23a4710581621f90634e5e2f38c35b4ba3416ba605ac54ef07b64736f6c6343000817003360a060405260405162000012906200009d565b604051809103906000f0801580156200002f573d6000803e3d6000fd5b506001600160a01b0390811660805260408051808201825260008082528251808401909352808352602080840191825282018390529051600380546001600160a01b031916919094161790925551600455516005553480156200009157600080fd5b506001600255620000ab565b6102138062003b1e83390190565b608051613a5a620000c460003960005050613a5a6000f3fe6080604052600436106101395760003560e01c80635287ce12116100ab578063bb9fe6bf1161006f578063bb9fe6bf14610505578063c23a5cea1461051a578063c3bce0091461053a578063c5f996e614610567578063fc7e286d14610587578063fe2171cb1461062f57600080fd5b80635287ce12146103575780635895273b1461046f57806370a082311461048f578063b760faf9146104c5578063baa22044146104d857600080fd5b80631b2e01b8116100fd5780631b2e01b814610219578063205c28781461025f57806322cdde4c1461027f578063263934db1461029f57806330ec25d1146102cc57806335567e1a146102f957600080fd5b80630396cb601461014e5780630513fbf4146101615780630bd28e3b146101975780630da82661146101b75780630dbfc6bd146101ec57600080fd5b36610149576101473361064f565b005b600080fd5b61014761015c366004612c8c565b610670565b34801561016d57600080fd5b5061018161017c366004612cfd565b610904565b60405161018e9190612e11565b60405180910390f35b3480156101a357600080fd5b506101476101b2366004612e8c565b610a24565b3480156101c357600080fd5b506101d76101d2366004612fd8565b610a5b565b6040805192835260208301919091520161018e565b3480156101f857600080fd5b5061020c610207366004613127565b610b90565b60405161018e91906131c6565b34801561022557600080fd5b5061025161023436600461321d565b600160209081526000928352604080842090915290825290205481565b60405190815260200161018e565b34801561026b57600080fd5b5061014761027a366004613252565b610c4f565b34801561028b57600080fd5b5061025161029a366004613297565b610da0565b3480156102ab57600080fd5b506102bf6102ba366004613127565b610de2565b60405161018e91906132cb565b3480156102d857600080fd5b506102ec6102e7366004613127565b610e79565b60405161018e91906133a7565b34801561030557600080fd5b5061025161031436600461321d565b6001600160a01b039190911660009081526001602090815260408083206001600160c01b0385168452909152908190205491901b67ffffffffffffffff19161790565b34801561036357600080fd5b506104146103723660046133fe565b6040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506001600160a01b031660009081526020818152604091829020825160a0810184528154815260019091015460ff811615159282019290925261010082046001600160701b031692810192909252600160781b810463ffffffff166060830152600160981b900465ffffffffffff16608082015290565b60405161018e9190600060a082019050825182526020830151151560208301526001600160701b03604084015116604083015263ffffffff606084015116606083015265ffffffffffff608084015116608083015292915050565b34801561047b57600080fd5b506102bf61048a366004613297565b610f2e565b34801561049b57600080fd5b506102516104aa3660046133fe565b6001600160a01b031660009081526020819052604090205490565b6101476104d33660046133fe565b61064f565b3480156104e457600080fd5b506104f86104f3366004612cfd565b610fe9565b60405161018e919061341b565b34801561051157600080fd5b50610147611046565b34801561052657600080fd5b506101476105353660046133fe565b61117a565b34801561054657600080fd5b5061055a610555366004613297565b61139e565b60405161018e919061342e565b34801561057357600080fd5b506104f8610582366004613441565b611563565b34801561059357600080fd5b506105ec6105a23660046133fe565b6000602081905290815260409020805460019091015460ff81169061010081046001600160701b031690600160781b810463ffffffff1690600160981b900465ffffffffffff1685565b6040805195865293151560208601526001600160701b039092169284019290925263ffffffff909116606083015265ffffffffffff16608082015260a00161018e565b34801561063b57600080fd5b5061055a61064a366004613127565b61164e565b60015b600581101561066357600101610652565b61066c82611662565b5050565b33600090815260208190526040902063ffffffff82166106d75760405162461bcd60e51b815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c617900000000000060448201526064015b60405180910390fd5b600181015463ffffffff600160781b9091048116908316101561073c5760405162461bcd60e51b815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d650000000060448201526064016106ce565b600181015460009061075d90349061010090046001600160701b03166134fc565b9050600081116107a45760405162461bcd60e51b81526020600482015260126024820152711b9bc81cdd185ad9481cdc1958da599a595960721b60448201526064016106ce565b6001600160701b038111156107ec5760405162461bcd60e51b815260206004820152600e60248201526d7374616b65206f766572666c6f7760901b60448201526064016106ce565b6040805160a08101825283548152600160208083018281526001600160701b0386811685870190815263ffffffff8a811660608801818152600060808a0181815233808352828a52918c90209a518b55965199909801805494519151965165ffffffffffff16600160981b0265ffffffffffff60981b1997909416600160781b029690961669ffffffffffffffffffff60781b1991909516610100026effffffffffffffffffffffffffff0019991515999099166effffffffffffffffffffffffffffff1990941693909317979097179190911691909117179055835185815290810192909252917fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01910160405180910390a2505050565b60606000866001600160401b0381111561092057610920612ea7565b60405190808252806020026020018201604052801561096d57816020015b6040805160608082018352600080835260208301529181019190915281526020019060019003908161093e5790505b50905060005b87811015610a185760006109ef8a8a848181106109925761099261350f565b90506020028101906109a49190613525565b8989858181106109b6576109b661350f565b90506020020160208101906109cb91906133fe565b8888868181106109dd576109dd61350f565b90506020028101906105829190613546565b905080838381518110610a0457610a0461350f565b602090810291909101015250600101610973565b50979650505050505050565b3360009081526001602090815260408083206001600160c01b03851684529091528120805491610a538361358c565b919050555050565b8251606081015160a08201516000928392909181016127100160405a603f0281610a8757610a876135a5565b041015610ad25760408051631101335b60e11b8152600060048201526024810191909152600f60448201526e41413935206f7574206f662067617360881b60648201526084016106ce565b875160009015610b66576000610aef846000015160008c866116ab565b905080610b64576000610b036108006116c3565b805190915015610b5e5784600001516001600160a01b03168a602001517f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a201876020015184604051610b559291906135bb565b60405180910390a35b60019250505b505b600088608001515a8803019050610b7f828a8a846116ef565b955095505050505094509492505050565b60606000826001600160401b03811115610bac57610bac612ea7565b604051908082528060200260200182016040528015610be557816020015b610bd2612ac0565b815260200190600190039081610bca5790505b50905060005b83811015610c45576000610c1c868684818110610c0a57610c0a61350f565b905060200281019061048a9190613525565b905080838381518110610c3157610c3161350f565b602090810291909101015250600101610beb565b5090505b92915050565b3360009081526020819052604090208054821115610caf5760405162461bcd60e51b815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c617267650000000000000060448201526064016106ce565b8054610cbc9083906135d4565b8155604080516001600160a01b03851681526020810184905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb910160405180910390a26000836001600160a01b03168360405160006040518083038185875af1925050503d8060008114610d4f576040519150601f19603f3d011682016040523d82523d6000602084013e610d54565b606091505b5050905080610d9a5760405162461bcd60e51b81526020600482015260126024820152716661696c656420746f20776974686472617760701b60448201526064016106ce565b50505050565b6000610dab8261191b565b6040805160208101929092523090820152466060820152608001604051602081830303815290604052805190602001209050919050565b610dea612ac0565b6000826001600160401b03811115610e0457610e04612ea7565b604051908082528060200260200182016040528015610e3d57816020015b610e2a612ac0565b815260200190600190039081610e225790505b509050610e4a8484610b90565b905080610e586001856135d4565b81518110610e6857610e6861350f565b602002602001015191505092915050565b60606000826001600160401b03811115610e9557610e95612ea7565b604051908082528060200260200182016040528015610ece57816020015b610ebb612b07565b815260200190600190039081610eb35790505b50905060005b83811015610c45576000610f05868684818110610ef357610ef361350f565b90506020028101906105559190613525565b905080838381518110610f1a57610f1a61350f565b602090810291909101015250600101610ed4565b610f36612ac0565b610f3e611934565b610f46612bbc565b610f4f8361195c565b6000806000610f6060008786611a29565b925092509250600080610f738887611c57565b915091506040518061010001604052808760800151815260200183815260200186815260200185815260200184815260200182815260200160001515815260200160405180604001604052806002815260200161060f60f31b8152508152509650505050505050610fe46001600255565b919050565b60408051606080820183526000808352602083018190529282015290611013888888888888610904565b9050806110216001896135d4565b815181106110315761103161350f565b60200260200101519150509695505050505050565b33600090815260208190526040812060018101549091600160781b90910463ffffffff1690036110a55760405162461bcd60e51b815260206004820152600a6024820152691b9bdd081cdd185ad95960b21b60448201526064016106ce565b600181015460ff166110ed5760405162461bcd60e51b8152602060048201526011602482015270616c726561647920756e7374616b696e6760781b60448201526064016106ce565b600181015460009061110c90600160781b900463ffffffff16426135e7565b60018301805460ff65ffffffffffff60981b011916600160981b65ffffffffffff841690810260ff19169190911790915560405190815290915033907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a906020015b60405180910390a25050565b336000908152602081905260409020600181015461010090046001600160701b0316806111e05760405162461bcd60e51b81526020600482015260146024820152734e6f207374616b6520746f20776974686472617760601b60448201526064016106ce565b6001820154600160981b900465ffffffffffff166112405760405162461bcd60e51b815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b65282920666972737400000060448201526064016106ce565b600182015442600160981b90910465ffffffffffff1611156112a45760405162461bcd60e51b815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f7420647565000000000060448201526064016106ce565b600182018054610100600160c81b0319169055604080516001600160a01b03851681526020810183905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda3910160405180910390a26000836001600160a01b03168260405160006040518083038185875af1925050503d8060008114611348576040519150601f19603f3d011682016040523d82523d6000602084013e61134d565b606091505b5050905080610d9a5760405162461bcd60e51b815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b65000000000000000060448201526064016106ce565b6113a6612b07565b6113ae612bbc565b6113b78361195c565b6000806113c660008685611a29565b50915091506113d9600083836000611d64565b60006113ec846000015160e00151611f00565b8451519091506000906113fe90611f00565b905061141d604051806040016040528060008152602001600081525090565b36600061142d60408b018b613546565b90925090506000601482101561144457600061145f565b61145260146000848661360d565b61145b91613637565b60601c5b905061146a81611f00565b9350505050600085905060006040518060a0016040528089608001518152602001896040015181526020018881526020018781526020016114ac8a6060015190565b90526040805180820182526003546001600160a01b0390811682528251808401909352600454835260055460208481019190915282019290925291925083161580159061150357506001836001600160a01b031614155b15611530576040518060400160405280846001600160a01b0316815260200161152b85611f00565b905290505b6040805160a081018252928352602083019590955293810192909252506060810192909252608082015295945050505050565b60408051606080820183526000808352602083015291810191909152611587612bbc565b6115908661195c565b61159c60008783611a29565b506000915060609050816001600160a01b0388161561162b5760005a9050886001600160a01b031688886040516115d492919061366c565b6000604051808303816000865af19150503d8060008114611611576040519150601f19603f3d011682016040523d82523d6000602084013e611616565b606091505b5090945092505a61162790826135d4565b9150505b604080516060810182529182529215156020820152918201529695505050505050565b611656612b07565b6000610e4a8484610e79565b600061166e8234611f52565b9050816001600160a01b03167f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c48260405161116e91815260200190565b6000806000845160208601878987f195945050505050565b60603d828111156116d15750815b604051602082018101604052818152816000602083013e9392505050565b60008060005a86519091506000908161170782611f85565b60e08301519091506001600160a01b038116611726578251935061183e565b80935060008951111561183e57878202965060028b600281111561174c5761174c61367c565b1461183e5760005a9050816001600160a01b0316637c627b218560a001518e8d8c886040518663ffffffff1660e01b815260040161178d9493929190613692565b600060405180830381600088803b1580156117a757600080fd5b5087f1935050505080156117b9575060015b611838578a5180516020808e01519201516001600160a01b0390911691907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f4792906118046108006116c3565b6040516118129291906135bb565b60405180910390a38a608001515a870301985061183260028c8c8c6116ef565b90985096505b5a900395505b5a60a0840151606085015160808d01519288039a909a01990190890380821115611871576064600a828403020499909901985b505060408a01518883029750878110156118d75760028c60028111156118995761189961367c565b036118bc578097506118aa8b611fb7565b6118b78b60008a8c612006565b61190c565b8a608001515a87030198508a6040015197506118aa8b611fb7565b8781036118e48682611f52565b506000808e60028111156118fa576118fa61367c565b1490506119098d828c8e612006565b50505b50505050505094509492505050565b600061192682612081565b805190602001209050919050565b600280540361195657604051633ee5aeb560e01b815260040160405180910390fd5b60028055565b6119cf6040516135a560f21b60208201526bffffffffffffffffffffffff193060601b166022820152600160f81b603682015260009060370160408051808303601f190181529190528051602090910120600680546001600160a01b0319166001600160a01b0390921691909117905550565b6000611a006119e16040840184613546565b6119ee60208601866133fe565b6119fb60e0870187613546565b612139565b9050805160001461066c57600081604051631101335b60e11b81526004016106ce9291906135bb565b6000806000805a8551909150611a3f8782612215565b611a4887610da0565b6020870152604081015161012082015161010083015160a08401516080850151606086015160c0870151861717171717176effffffffffffffffffffffffffffff811115611ad85760405162461bcd60e51b815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f77000000000000000060448201526064016106ce565b6000611b078460c081015160a08201516080830151606084015160408501516101009095015194010101010290565b9050611b168b8b8b8487612323565b9750611b2a846000015185602001516124ba565b611b80578a604051631101335b60e11b81526004016106ce918152604060208201819052601a908201527f4141323520696e76616c6964206163636f756e74206e6f6e6365000000000000606082015260800190565b825a86031115611bdc578a604051631101335b60e11b81526004016106ce918152604060208201819052601e908201527f41413236206f76657220766572696669636174696f6e4761734c696d69740000606082015260800190565b606060005a60e08701519091506001600160a01b031615611c0857611c038d8d8d86612507565b995091505b60408b018390528160608c015260a08c01355a88030160808c015260645a611c3090836135d4565b611c3b9060736136dc565b611c4591906136f3565b97505050505050505093509350939050565b60008060005a90506000611c6c856060015190565b604051909150366000611c8260608a018a613546565b915091506000816003811115611c9757833591505b506372288ed160e01b6001600160e01b0319821601611d0d5760008a8a60200151604051602401611cc9929190613862565b60408051601f198184030181529190526020810180516001600160e01b0316638dd7712f60e01b1790529050611d01818b888a610a5b565b9099509750611d579050565b611d5183838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508d92508991508a9050610a5b565b90985096505b5050505050509250929050565b600080611d70856126b6565b91509150816001600160a01b0316836001600160a01b031614611dd65785604051631101335b60e11b81526004016106ce9181526040602082018190526014908201527320a0991a1039b4b3b730ba3ab9329032b93937b960611b606082015260800190565b8015611e2e5785604051631101335b60e11b81526004016106ce9181526040602082018190526017908201527f414132322065787069726564206f72206e6f7420647565000000000000000000606082015260800190565b6000611e39856126b6565b925090506001600160a01b03811615611e955786604051631101335b60e11b81526004016106ce9181526040602082018190526014908201527320a0999a1039b4b3b730ba3ab9329032b93937b960611b606082015260800190565b8115611ef75786604051631101335b60e11b81526004016106ce9181526040602082018190526021908201527f41413332207061796d61737465722065787069726564206f72206e6f742064756060820152606560f81b608082015260a00190565b50505050505050565b604080518082018252600080825260208083018281526001600160a01b03959095168252819052919091206001015461010081046001600160701b03168252600160781b900463ffffffff1690915290565b6001600160a01b038216600090815260208190526040812080548290611f799085906134fc565b91829055509392505050565b61010081015161012082015160009190808203611fa3575092915050565b611faf82488301612709565b949350505050565b80518051602080840151928101516040519081526001600160a01b0390921692917f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e910160405180910390a350565b835160e081015181516020808801519301516040516001600160a01b039384169492909316927f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f916120739189908990899093845291151560208401526040830152606082015260800190565b60405180910390a450505050565b60608135602083013560006120a161209c6040870187613546565b612721565b905060006120b561209c6060880188613546565b9050608086013560a087013560c088013560006120d861209c60e08c018c613546565b604080516001600160a01b039a909a1660208b015289810198909852606089019690965250608087019390935260a086019190915260c085015260e08401526101008084019190915281518084039091018152610120909201905292915050565b60608415801561215157506001600160a01b0384163b155b15612190575060408051808201909152601981527f41413230206163636f756e74206e6f74206465706c6f79656400000000000000602082015261220c565b601482106121fb5760006121a7601482858761360d565b6121b091613637565b60601c9050803b6000036121f957505060408051808201909152601b81527f41413330207061796d6173746572206e6f74206465706c6f7965640000000000602082015261220c565b505b506040805160208101909152600081525b95945050505050565b61222260208301836133fe565b6001600160a01b03168152602082810135908201526001600160801b036080808401358281166060850152811c604084015260a084013560c0808501919091528401359182166101008401521c61012082015236600061228560e0850185613546565b909250905080156123085760348110156122e15760405162461bcd60e51b815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e644461746100000060448201526064016106ce565b6122eb8282612734565b60a086015260808501526001600160a01b031660e0840152610d9a565b600060e084018190526080840181905260a084015250505050565b8251805160009190612342888761233d60408b018b613546565b61279c565b60e082015160006001600160a01b038216612386576001600160a01b03831660009081526020819052604090205487811161237f57808803612382565b60005b9150505b60208801516040516306608bdf60e21b81526001600160a01b038516916319822f7c9189916123bc918e91908790600401613884565b60206040518083038160008887f1935050505080156123f8575060408051601f3d908101601f191682019092526123f5918101906138a9565b60015b61242357896124086108006116c3565b6040516365c8fd4d60e01b81526004016106ce9291906138c2565b94506001600160a01b0382166124ad576001600160a01b03831660009081526020819052604090208054808911156124a7578b604051631101335b60e11b81526004016106ce9181526040602082018190526017908201527f41413231206469646e2774207061792070726566756e64000000000000000000606082015260800190565b88900390555b5050505095945050505050565b6001600160a01b038216600090815260016020908152604080832084821c80855292528220805484916001600160401b0383169190856124f98361358c565b909155501495945050505050565b60606000805a855160e08101516001600160a01b03811660009081526020819052604090208054939450919290919087811015612590578a604051631101335b60e11b81526004016106ce918152604060208201819052601e908201527f41413331207061796d6173746572206465706f73697420746f6f206c6f770000606082015260800190565b8781038260000181905550600084608001519050836001600160a01b03166352b7512c828d8d602001518d6040518563ffffffff1660e01b81526004016125d993929190613884565b60006040518083038160008887f19350505050801561261a57506040513d6000823e601f3d908101601f1916820160405261261791908101906138ff565b60015b612645578b61262a6108006116c3565b6040516365c8fd4d60e01b81526004016106ce92919061397f565b9098509650805a8703111561190c578b604051631101335b60e11b81526004016106ce9181526040602082018190526027908201527f41413336206f766572207061796d6173746572566572696669636174696f6e47606082015266185cd31a5b5a5d60ca1b608082015260a00190565b600080826000036126cc57506000928392509050565b60006126d784612a4f565b9050806040015165ffffffffffff164211806126fe5750806020015165ffffffffffff1642105b905194909350915050565b6000818310612718578161271a565b825b9392505050565b6000604051828085833790209392505050565b60008080612745601482868861360d565b61274e91613637565b60601c61275f60246014878961360d565b612768916139bc565b60801c61277960346024888a61360d565b612782916139bc565b9194506001600160801b0316925060801c90509250925092565b8015610d9a578251516001600160a01b0381163b156128075784604051631101335b60e11b81526004016106ce918152604060208201819052601f908201527f414131302073656e64657220616c726561647920636f6e737472756374656400606082015260800190565b600061281b6006546001600160a01b031690565b6001600160a01b031663570e1a3686600001516040015186866040518463ffffffff1660e01b81526004016128519291906139f3565b60206040518083038160008887f1158015612870573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128959190613a07565b90506001600160a01b0381166128f75785604051631101335b60e11b81526004016106ce918152604060208201819052601b908201527f4141313320696e6974436f6465206661696c6564206f72204f4f470000000000606082015260800190565b816001600160a01b0316816001600160a01b0316146129615785604051631101335b60e11b81526004016106ce91815260406020808301829052908201527f4141313420696e6974436f6465206d7573742072657475726e2073656e646572606082015260800190565b806001600160a01b03163b6000036129c45785604051631101335b60e11b81526004016106ce91815260406020808301829052908201527f4141313520696e6974436f6465206d757374206372656174652073656e646572606082015260800190565b60006129d3601482868861360d565b6129dc91613637565b60601c9050826001600160a01b031686602001517fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d83896000015160e00151604051612a3e9291906001600160a01b0392831681529116602082015260400190565b60405180910390a350505050505050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003612a8b575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b604051806101000160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600015158152602001606081525090565b6040518060a00160405280612b446040518060a0016040528060008152602001600081526020016000815260200160008152602001606081525090565b8152602001612b66604051806040016040528060008152602001600081525090565b8152602001612b88604051806040016040528060008152602001600081525090565b8152602001612baa604051806040016040528060008152602001600081525090565b8152602001612bb7612c54565b905290565b6040518060a00160405280612c2f60405180610140016040528060006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160008152602001600081525090565b8152602001600080191681526020016000815260200160008152602001600081525090565b604051806040016040528060006001600160a01b03168152602001612bb7604051806040016040528060008152602001600081525090565b600060208284031215612c9e57600080fd5b813563ffffffff8116811461271a57600080fd5b60008083601f840112612cc457600080fd5b5081356001600160401b03811115612cdb57600080fd5b6020830191508360208260051b8501011115612cf657600080fd5b9250929050565b60008060008060008060608789031215612d1657600080fd5b86356001600160401b0380821115612d2d57600080fd5b612d398a838b01612cb2565b90985096506020890135915080821115612d5257600080fd5b612d5e8a838b01612cb2565b90965094506040890135915080821115612d7757600080fd5b50612d8489828a01612cb2565b979a9699509497509295939492505050565b60005b83811015612db1578181015183820152602001612d99565b50506000910152565b60008151808452612dd2816020860160208601612d96565b601f01601f19169290920160200192915050565b805182526020810151151560208301526000604082015160606040850152611faf6060850182612dba565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015612e6857603f19888603018452612e56858351612de6565b94509285019290850190600101612e3a565b5092979650505050505050565b80356001600160c01b0381168114610fe457600080fd5b600060208284031215612e9e57600080fd5b61271a82612e75565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715612edf57612edf612ea7565b60405290565b60405161014081016001600160401b0381118282101715612edf57612edf612ea7565b604051601f8201601f191681016001600160401b0381118282101715612f3057612f30612ea7565b604052919050565b60006001600160401b03821115612f5157612f51612ea7565b50601f01601f191660200190565b600082601f830112612f7057600080fd5b8135612f83612f7e82612f38565b612f08565b818152846020838601011115612f9857600080fd5b816020850160208301376000918101602001919091529392505050565b6001600160a01b0381168114612fca57600080fd5b50565b8035610fe481612fb5565b600080600080848603610220811215612ff057600080fd5b85356001600160401b038082111561300757600080fd5b61301389838a01612f5f565b9650601f19830192506101c091508183121561302e57600080fd5b613036612ebd565b6101408085121561304657600080fd5b61304e612ee5565b945061305c60208b01612fcd565b855260408a0135602086015260608a0135604086015260808a0135606086015260a08a0135608086015260c08a013560a086015260e08a013560c08601526101006130a8818c01612fcd565b60e08701526101208b81013591870191909152908a013590850152928352610160880135602084015261018088013560408401526101a088013560608401528188013560808401529194506101e0870135918083111561310757600080fd5b505061311587828801612f5f565b94979396509394610200013593505050565b6000806020838503121561313a57600080fd5b82356001600160401b0381111561315057600080fd5b61315c85828601612cb2565b90969095509350505050565b6000610100825184526020830151602085015260408301516040850152606083015160608501526080830151608085015260a083015160a085015260c0830151151560c085015260e08301518160e086015261220c82860182612dba565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015612e6857603f1988860301845261320b858351613168565b945092850192908501906001016131ef565b6000806040838503121561323057600080fd5b823561323b81612fb5565b915061324960208401612e75565b90509250929050565b6000806040838503121561326557600080fd5b823561327081612fb5565b946020939093013593505050565b6000610120828403121561329157600080fd5b50919050565b6000602082840312156132a957600080fd5b81356001600160401b038111156132bf57600080fd5b611faf8482850161327e565b60208152600061271a6020830184613168565b80516101408084528151908401526020810151610160840152604081015161018084015260608101516101a08401526080015160a06101c084015260009061332a6101e0850182612dba565b90506020830151613348602086018280518252602090810151910152565b5060408301518051606086015260208101516080860152506060830151805160a0860152602081015160c0860152506080830151610c4560e086018280516001600160a01b031682526020908101518051828401520151604090910152565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015612e6857603f198886030184526133ec8583516132de565b945092850192908501906001016133d0565b60006020828403121561341057600080fd5b813561271a81612fb5565b60208152600061271a6020830184612de6565b60208152600061271a60208301846132de565b6000806000806060858703121561345757600080fd5b84356001600160401b038082111561346e57600080fd5b61347a8883890161327e565b95506020870135915061348c82612fb5565b909350604086013590808211156134a257600080fd5b818701915087601f8301126134b657600080fd5b8135818111156134c557600080fd5b8860208285010111156134d757600080fd5b95989497505060200194505050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c4957610c496134e6565b634e487b7160e01b600052603260045260246000fd5b6000823561011e1983360301811261353c57600080fd5b9190910192915050565b6000808335601e1984360301811261355d57600080fd5b8301803591506001600160401b0382111561357757600080fd5b602001915036819003821315612cf657600080fd5b60006001820161359e5761359e6134e6565b5060010190565b634e487b7160e01b600052601260045260246000fd5b828152604060208201526000611faf6040830184612dba565b81810381811115610c4957610c496134e6565b65ffffffffffff818116838216019080821115613606576136066134e6565b5092915050565b6000808585111561361d57600080fd5b8386111561362a57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156136645780818660140360031b1b83161692505b505092915050565b8183823760009101908152919050565b634e487b7160e01b600052602160045260246000fd5b6000600386106136b257634e487b7160e01b600052602160045260246000fd5b858252608060208301526136c96080830186612dba565b6040830194909452506060015292915050565b8082028115828204841417610c4957610c496134e6565b60008261371057634e487b7160e01b600052601260045260246000fd5b500490565b6000808335601e1984360301811261372c57600080fd5b83016020810192503590506001600160401b0381111561374b57600080fd5b803603821315612cf657600080fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60006101206137a28461379585612fcd565b6001600160a01b03169052565b602083013560208501526137b96040840184613715565b8260408701526137cc838701828461375a565b925050506137dd6060840184613715565b85830360608701526137f083828461375a565b925050506080830135608085015260a083013560a085015260c083013560c085015261381f60e0840184613715565b85830360e087015261383283828461375a565b9250505061010061384581850185613715565b8684038388015261385784828461375a565b979650505050505050565b6040815260006138756040830185613783565b90508260208301529392505050565b6060815260006138976060830186613783565b60208301949094525060400152919050565b6000602082840312156138bb57600080fd5b5051919050565b82815260606020820152600d60608201526c10504c8cc81c995d995c9d1959609a1b608082015260a060408201526000611faf60a0830184612dba565b6000806040838503121561391257600080fd5b82516001600160401b0381111561392857600080fd5b8301601f8101851361393957600080fd5b8051613947612f7e82612f38565b81815286602083850101111561395c57600080fd5b61396d826020830160208601612d96565b60209590950151949694955050505050565b82815260606020820152600d60608201526c10504cccc81c995d995c9d1959609a1b608082015260a060408201526000611faf60a0830184612dba565b6fffffffffffffffffffffffffffffffff1981358181169160108510156136645760109490940360031b84901b1690921692915050565b602081526000611faf60208301848661375a565b600060208284031215613a1957600080fd5b815161271a81612fb556fea2646970667358221220c6ad4b2b56624cba321cec929c4bdd6329f5811c936f40e8ff5cfb92ef9b433f64736f6c63430008170033608060405234801561001057600080fd5b506101f3806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063570e1a3614610030575b600080fd5b61004361003e3660046100ec565b61005f565b6040516001600160a01b03909116815260200160405180910390f35b60008061006f601482858761015e565b61007891610188565b60601c9050600061008c846014818861015e565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525084519495509360209350849250905082850182875af190506000519350806100e357600093505b50505092915050565b600080602083850312156100ff57600080fd5b823567ffffffffffffffff8082111561011757600080fd5b818501915085601f83011261012b57600080fd5b81358181111561013a57600080fd5b86602082850101111561014c57600080fd5b60209290920196919550909350505050565b6000808585111561016e57600080fd5b8386111561017b57600080fd5b5050820193919092039150565b6bffffffffffffffffffffffff1981358181169160148510156101b55780818660140360031b1b83161692505b50509291505056fea2646970667358221220f5d91be997c659d0ef966f0c016a41e736500c794f93ad11197e128a54287a9964736f6c63430008170033" - /* ========= V06 CORE ========= */ // Will deploy entryPoint to 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789 export const ENTRY_POINT_V06_CREATECALL: Hex = "0x000000000000000000000000000000000000000000000000000000000000000060a080604052346200008957600160025561022c8181016001600160401b038111838210176200007357829162005d18833903906000f080156200006757608052604051615c8990816200008f82396080518181816113df01528181613e9501526141b60152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040526004361015610023575b361561001957600080fd5b610021615531565b005b60003560e01c80630396cb60146101b35780630bd28e3b146101aa5780631b2e01b8146101a15780631d732756146101985780631fad948c1461018f578063205c28781461018657806335567e1a1461017d5780634b1d7cf5146101745780635287ce121461016b57806370a08231146101625780638f41ec5a14610159578063957122ab146101505780639b249f6914610147578063a61935311461013e578063b760faf914610135578063bb9fe6bf1461012c578063c23a5cea14610123578063d6383f941461011a578063ee219423146101115763fc7e286d0361000e5761010c611bcd565b61000e565b5061010c6119b5565b5061010c61184d565b5061010c6116b4565b5061010c611536565b5061010c6114f7565b5061010c6114d6565b5061010c611337565b5061010c611164565b5061010c611129565b5061010c6110a4565b5061010c610f54565b5061010c610bf8565b5061010c610b33565b5061010c610994565b5061010c6108ba565b5061010c6106e7565b5061010c610467565b5061010c610385565b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043563ffffffff8116808203610359576103547fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01916102716102413373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b9161024d811515615697565b61026a610261600185015463ffffffff1690565b63ffffffff1690565b11156156fc565b54926103366dffffffffffffffffffffffffffff946102f461029834888460781c166121d5565b966102a4881515615761565b6102b0818911156157c6565b6102d4816102bc6105ec565b941684906dffffffffffffffffffffffffffff169052565b6001602084015287166dffffffffffffffffffffffffffff166040830152565b63ffffffff83166060820152600060808201526103313373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61582b565b6040805194855263ffffffff90911660208501523393918291820190565b0390a2005b600080fd5b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361035957565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043577ffffffffffffffffffffffffffffffffffffffffffffffff81168103610359576104149033600052600160205260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b61041e8154612491565b9055005b73ffffffffffffffffffffffffffffffffffffffff81160361035957565b6024359061044d82610422565b565b60c4359061044d82610422565b359061044d82610422565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760206104fc6004356104a881610422565b73ffffffffffffffffffffffffffffffffffffffff6104c561035e565b91166000526001835260406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b54604051908152f35b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60a0810190811067ffffffffffffffff82111761055157604052565b610559610505565b604052565b610100810190811067ffffffffffffffff82111761055157604052565b67ffffffffffffffff811161055157604052565b6060810190811067ffffffffffffffff82111761055157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761055157604052565b6040519061044d82610535565b6040519060c0820182811067ffffffffffffffff82111761055157604052565b604051906040820182811067ffffffffffffffff82111761055157604052565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f60209267ffffffffffffffff8111610675575b01160190565b61067d610505565b61066f565b92919261068e82610639565b9161069c60405193846105ab565b829481845281830111610359578281602093846000960137010152565b9181601f840112156103595782359167ffffffffffffffff8311610359576020838186019501011161035957565b5034610359576101c07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff60043581811161035957366023820112156103595761074a903690602481600401359101610682565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101808112610359576101006040519161078783610535565b12610359576040516107988161055e565b6107a0610440565b815260443560208201526064356040820152608435606082015260a43560808201526107ca61044f565b60a082015260e43560c08201526101043560e082015281526101243560208201526101443560408201526101643560608201526101843560808201526101a4359182116103595761083e9261082661082e9336906004016106b9565b9290916128b1565b6040519081529081906020820190565b0390f35b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8301126103595760043567ffffffffffffffff9283821161035957806023830112156103595781600401359384116103595760248460051b830101116103595760240191906024356108b781610422565b90565b5034610359576108c936610842565b6108d4929192611e3a565b6108dd83611d2d565b60005b84811061095d57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f9728480a183915b85831061092d576109238585611ed7565b6100216001600255565b909193600190610953610941878987611dec565b61094b8886611dca565b51908861233f565b0194019190610912565b8061098b610984610972600194869896611dca565b5161097e848a88611dec565b84613448565b9083612f30565b019290926108e0565b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356109d081610422565b6024359060009133835282602052604083206dffffffffffffffffffffffffffff81541692838311610ad557848373ffffffffffffffffffffffffffffffffffffffff829593610a788496610a3f610a2c8798610ad29c6121c0565b6dffffffffffffffffffffffffffff1690565b6dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af1610acc611ea7565b50615ba2565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b50346103595760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576020600435610b7181610422565b73ffffffffffffffffffffffffffffffffffffffff610b8e61035e565b911660005260018252610bc98160406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b503461035957610c0736610842565b610c0f611e3a565b6000805b838210610df657610c249150611d2d565b7fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000805b848110610d5c57505060008093815b818110610c9357610923868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2611ed7565b610cf7610ca182848a6124cb565b610ccc610cb3610cb36020840161256d565b73ffffffffffffffffffffffffffffffffffffffff1690565b7f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a280612519565b906000915b808310610d1457505050610d0f90612491565b610c5c565b90919497610d4f610d49610d5592610d438c8b610d3c82610d368e8b8d611dec565b92611dca565b519161233f565b906121d5565b99612491565b95612491565b9190610cfc565b610d678186886124cb565b6020610d7f610d768380612519565b9290930161256d565b9173ffffffffffffffffffffffffffffffffffffffff60009316905b828410610db45750505050610daf90612491565b610c4d565b90919294610d4f81610de985610de2610dd0610dee968d611dca565b51610ddc8c8b8a611dec565b85613448565b908b613148565b612491565b929190610d9b565b610e018285876124cb565b90610e0c8280612519565b92610e1c610cb36020830161256d565b9173ffffffffffffffffffffffffffffffffffffffff8316610e416001821415612577565b610e62575b505050610e5c91610e56916121d5565b91612491565b90610c13565b909592610e7b6040999693999895989788810190611fc8565b92908a3b156103595789938b918a5193849283927fe3563a4f00000000000000000000000000000000000000000000000000000000845260049e8f850193610ec294612711565b03815a93600094fa9081610f3b575b50610f255786517f86a9f75000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a16818a0190815281906020010390fd5b0390fd5b9497509295509093509181610e56610e5c610e46565b80610f48610f4e9261057b565b8061111e565b38610ed1565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761083e73ffffffffffffffffffffffffffffffffffffffff600435610fa881610422565b608060409283928351610fba81610535565b60009381858093528260208201528287820152826060820152015216815280602052209061104965ffffffffffff6001835194610ff686610535565b80546dffffffffffffffffffffffffffff8082168852607082901c60ff161515602089015260789190911c1685870152015463ffffffff8116606086015260201c16608084019065ffffffffffff169052565b5191829182919091608065ffffffffffff8160a08401956dffffffffffffffffffffffffffff808251168652602082015115156020870152604082015116604086015263ffffffff6060820151166060860152015116910152565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff6004356110f581610422565b16600052600060205260206dffffffffffffffffffffffffffff60406000205416604051908152f35b600091031261035957565b50346103595760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957602060405160018152f35b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261035957600467ffffffffffffffff8135818111610359576111b590369084016106b9565b9050602435916111c483610422565b604435908111610359576111db90369085016106b9565b92909115908161132d575b506112c6576014821015611236575b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160409060208152600060208201520190565b6112466112529261124c92612b88565b90612b96565b60601c90565b3b1561125f5738806111f5565b610f21906040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601b60208201527f41413330207061796d6173746572206e6f74206465706c6f796564000000000060408201520190565b610f21836040519182917f08c379a0000000000000000000000000000000000000000000000000000000008352820160609060208152601960208201527f41413230206163636f756e74206e6f74206465706c6f7965640000000000000060408201520190565b90503b15386111e6565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595760043567ffffffffffffffff81116103595761138960249136906004016106b9565b906113bf6040519283927f570e1a3600000000000000000000000000000000000000000000000000000000845260048401612d2c565b0360208273ffffffffffffffffffffffffffffffffffffffff92816000857f0000000000000000000000000000000000000000000000000000000000000000165af1918215611471575b600092611441575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b61146391925060203d811161146a575b61145b81836105ab565b810190612d17565b9038611411565b503d611451565b611479612183565b611409565b90816101609103126103595790565b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc820112610359576004359067ffffffffffffffff8211610359576108b79160040161147e565b50346103595760206114ef6114ea3661148d565b612a0c565b604051908152f35b5060207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595761002160043561153181610422565b61562b565b5034610359576000807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126116b1573381528060205260408120600181019063ffffffff825416908115611653576115f06115b5611618936115a76115a2855460ff9060701c1690565b61598f565b65ffffffffffff42166159f4565b84547fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff16602082901b69ffffffffffff000000001617909455565b7fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff8154169055565b60405165ffffffffffff91909116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a280f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b80fd5b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610359576004356116f081610422565b610ad273ffffffffffffffffffffffffffffffffffffffff6117323373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b926117ea611755610a2c86546dffffffffffffffffffffffffffff9060781c1690565b94611761861515615a0e565b6117c26001820161179a65ffffffffffff611786835465ffffffffffff9060201c1690565b16611792811515615a73565b421015615ad8565b80547fffffffffffffffffffffffffffffffffffffffffffff00000000000000000000169055565b7fffffff0000000000000000000000000000ffffffffffffffffffffffffffffff8154169055565b6040805173ffffffffffffffffffffffffffffffffffffffff831681526020810186905233917fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda391a2600080809581948294165af1611847611ea7565b50615b3d565b50346103595760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595767ffffffffffffffff6004358181116103595761189e90369060040161147e565b602435916118ab83610422565b604435908111610359576118c6610f219136906004016106b9565b6118ce611caa565b6118d785612e2b565b6118ea6118e48287613240565b906153ba565b946118fa826000924384526121e2565b96438252819360609573ffffffffffffffffffffffffffffffffffffffff8316611981575b50505050608001519361194e6040611940602084015165ffffffffffff1690565b92015165ffffffffffff1690565b906040519687967f8b7ac980000000000000000000000000000000000000000000000000000000008852600488016127e1565b8395508394965061199b60409492939451809481936127d3565b03925af19060806119aa611ea7565b92919038808061191f565b5034610359576119c43661148d565b6119cc611caa565b6119d582612e2b565b6119df8183613240565b825160a00151919391611a0c9073ffffffffffffffffffffffffffffffffffffffff166154dc565b6154dc565b90611a30611a07855173ffffffffffffffffffffffffffffffffffffffff90511690565b94611a39612b50565b50611a68611a4c60409586810190611fc8565b90600060148310611bc55750611246611a079261124c92612b88565b91611a72916153ba565b805173ffffffffffffffffffffffffffffffffffffffff169073ffffffffffffffffffffffffffffffffffffffff821660018114916080880151978781015191886020820151611ac79065ffffffffffff1690565b91015165ffffffffffff16916060015192611ae06105f9565b9a8b5260208b0152841515898b015265ffffffffffff1660608a015265ffffffffffff16608089015260a088015215159081611bbc575b50611b515750610f2192519485947fe0cff05f00000000000000000000000000000000000000000000000000000000865260048601612cbd565b9190610f2193611b60846154dc565b611b87611b6b610619565b73ffffffffffffffffffffffffffffffffffffffff9096168652565b6020850152519586957ffaecb4e400000000000000000000000000000000000000000000000000000000875260048701612c2b565b90501538611b17565b9150506154dc565b50346103595760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126103595773ffffffffffffffffffffffffffffffffffffffff600435611c1e81610422565b16600052600060205260a0604060002065ffffffffffff60018254920154604051926dffffffffffffffffffffffffffff90818116855260ff8160701c161515602086015260781c16604084015263ffffffff8116606084015260201c166080820152f35b60209067ffffffffffffffff8111611c9d575b60051b0190565b611ca5610505565b611c96565b60405190611cb782610535565b604051608083610100830167ffffffffffffffff811184821017611d20575b60405260009283815283602082015283604082015283606082015283838201528360a08201528360c08201528360e082015281528260208201528260408201528260608201520152565b611d28610505565b611cd6565b90611d3782611c83565b611d4460405191826105ab565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0611d728294611c83565b019060005b828110611d8357505050565b602090611d8e611caa565b82828501015201611d77565b507f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020918151811015611ddf575b60051b010190565b611de7611d9a565b611dd7565b9190811015611e2d575b60051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea181360301821215610359570190565b611e35611d9a565b611df6565b6002805414611e495760028055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b3d15611ed2573d90611eb882610639565b91611ec660405193846105ab565b82523d6000602084013e565b606090565b73ffffffffffffffffffffffffffffffffffffffff168015611f6a57600080809381935af1611f04611ea7565b5015611f0c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff82116103595760200191813603831361035957565b90816020910312610359575190565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b60005b83811061207a5750506000910152565b818101518382015260200161206a565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f6020936120c681518092818752878088019101612067565b0116010190565b906120e76080916108b796946101c0808652850191612028565b9360e0815173ffffffffffffffffffffffffffffffffffffffff80825116602087015260208201516040870152604082015160608701526060820151858701528482015160a087015260a08201511660c086015260c081015182860152015161010084015260208101516101208401526040810151610140840152606081015161016084015201516101808201526101a081840391015261208a565b506040513d6000823e3d90fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b919082039182116121cd57565b61044d612190565b919082018092116121cd57565b905a918160206121fb6060830151936060810190611fc8565b906122348560405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af16000918161230f575b50612308575060206000803e7fdeaddead000000000000000000000000000000000000000000000000000000006000511461229b5761229561228a6108b7945a906121c0565b6080840151906121d5565b91614afc565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9250505090565b61233191925060203d8111612338575b61232981836105ab565b810190612019565b9038612244565b503d61231f565b909291925a9380602061235b6060830151946060810190611fc8565b906123948660405195869485947f1d732756000000000000000000000000000000000000000000000000000000008652600486016120cd565b03816000305af160009181612471575b5061246a575060206000803e7fdeaddead00000000000000000000000000000000000000000000000000000000600051146123fc576123f66123eb6108b795965a906121c0565b6080830151906121d5565b92614ddf565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152600f60408201527f41413935206f7574206f6620676173000000000000000000000000000000000060608201520190565b9450505050565b61248a91925060203d81116123385761232981836105ab565b90386123a4565b6001907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124bf570190565b6124c7612190565b0190565b919081101561250c575b60051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa181360301821215610359570190565b612514611d9a565b6124d5565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe181360301821215610359570180359067ffffffffffffffff821161035957602001918160051b3603831361035957565b356108b781610422565b1561257e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561035957016020813591019167ffffffffffffffff821161035957813603831361035957565b6108b7916126578161263d8461045c565b73ffffffffffffffffffffffffffffffffffffffff169052565b602082013560208201526126f26126a361268861267760408601866125dc565b610160806040880152860191612028565b61269560608601866125dc565b908583036060870152612028565b6080840135608084015260a084013560a084015260c084013560c084015260e084013560e084015261010080850135908401526101206126e5818601866125dc565b9185840390860152612028565b9161270361014091828101906125dc565b929091818503910152612028565b949391929083604087016040885252606086019360608160051b8801019482600090815b848310612754575050505050508460206108b795968503910152612028565b9091929394977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa08b820301855288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea1843603018112156127cf57600191846127bd920161262c565b98602090810196950193019190612735565b8280fd5b908092918237016000815290565b9290936108b796959260c0958552602085015265ffffffffffff8092166040850152166060830152151560808201528160a0820152019061208a565b1561282457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b9060406108b79260008152816020820152019061208a565b6040906108b793928152816020820152019061208a565b909291925a936128c230331461281d565b8151946040860151955a6113886060830151890101116129e2576108b7966000958051612909575b50505090612903915a9003608084015101943691610682565b91615047565b612938916129349161292f855173ffffffffffffffffffffffffffffffffffffffff1690565b615c12565b1590565b612944575b80806128ea565b61290392919450612953615c24565b908151612967575b5050600193909161293d565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20173ffffffffffffffffffffffffffffffffffffffff6020870151926129d860206129c6835173ffffffffffffffffffffffffffffffffffffffff1690565b9201519560405193849316968361289a565b0390a3388061295b565b7fdeaddead0000000000000000000000000000000000000000000000000000000060005260206000fd5b612a22612a1c6040830183611fc8565b90615c07565b90612a33612a1c6060830183611fc8565b90612ae9612a48612a1c610120840184611fc8565b60405194859360208501956101008201359260e08301359260c08101359260a08201359260808301359273ffffffffffffffffffffffffffffffffffffffff60208201359135168c9693909a9998959261012098959273ffffffffffffffffffffffffffffffffffffffff6101408a019d168952602089015260408801526060870152608086015260a085015260c084015260e08301526101008201520152565b0391612b1b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938481018352826105ab565b51902060408051602081019283523091810191909152466060820152608092830181529091612b4a90826105ab565b51902090565b604051906040820182811067ffffffffffffffff821117612b7b575b60405260006020838281520152565b612b83610505565b612b6c565b906014116103595790601490565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000009035818116939260148110612bcb57505050565b60140360031b82901b16169150565b9060c060a06108b793805184526020810151602085015260408101511515604085015265ffffffffffff80606083015116606086015260808201511660808501520151918160a0820152019061208a565b9294612c8c61044d95612c7a610100959998612c68612c54602097610140808c528b0190612bda565b9b878a019060208091805184520151910152565b80516060890152602001516080880152565b805160a08701526020015160c0860152565b73ffffffffffffffffffffffffffffffffffffffff81511660e0850152015191019060208091805184520151910152565b612d0661044d94612cf4612cdf60a0959998969960e0865260e0860190612bda565b98602085019060208091805184520151910152565b80516060840152602001516080830152565b019060208091805184520151910152565b9081602091031261035957516108b781610422565b9160206108b7938181520191612028565b90612d6c73ffffffffffffffffffffffffffffffffffffffff916108b797959694606085526060850191612028565b941660208201526040818503910152612028565b60009060033d11612d8d57565b905060046000803e60005160e01c90565b600060443d106108b7576040517ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc91823d016004833e815167ffffffffffffffff918282113d602484011117612e1a57818401948551938411612e22573d85010160208487010111612e1a57506108b7929101602001906105ab565b949350505050565b50949350505050565b612e386040820182611fc8565b612e50612e448461256d565b93610120810190611fc8565b9290303b1561035957600093612e949160405196879586957f957122ab00000000000000000000000000000000000000000000000000000000875260048701612d3d565b0381305afa9081612f1d575b5061044d576001612eaf612d80565b6308c379a014612ec8575b612ec057565b61044d612183565b612ed0612d9e565b80612edc575b50612eba565b80516000925015612ed657610f21906040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b80610f48612f2a9261057b565b38612ea0565b9190612f3b9061317f565b73ffffffffffffffffffffffffffffffffffffffff929183166130da5761306c57612f659061317f565b9116612ffe57612f725750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f6500000000000000000000000000000000000000000000000000000000000000608482015260a490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413334207369676e6174757265206572726f7200000000000000000000000060608201520190565b610f21836040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601760408201527f414132322065787069726564206f72206e6f742064756500000000000000000060608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601460408201527f41413234207369676e6174757265206572726f7200000000000000000000000060608201520190565b9291906131549061317f565b909273ffffffffffffffffffffffffffffffffffffffff808095169116036130da5761306c57612f65905b80156131d25761318e9061535f565b73ffffffffffffffffffffffffffffffffffffffff65ffffffffffff8060408401511642119081156131c2575b5091511691565b90506020830151164210386131bb565b50600090600090565b156131e257565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b916000915a9381519061325382826136b3565b61325c81612a0c565b602084015261329a6effffffffffffffffffffffffffffff60808401516060850151176040850151176101008401359060e0850135171711156131db565b6132a382613775565b6132ae818584613836565b97906132df6129346132d4875173ffffffffffffffffffffffffffffffffffffffff1690565b60208801519061546c565b6133db576132ec43600052565b73ffffffffffffffffffffffffffffffffffffffff61332460a0606097015173ffffffffffffffffffffffffffffffffffffffff1690565b166133c1575b505a810360a0840135106133545760809360c092604087015260608601525a900391013501910152565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413430206f76657220766572696669636174696f6e4761734c696d6974000060608201520190565b909350816133d2929750858461455c565b9590923861332a565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b9290916000925a825161345b81846136b3565b61346483612a0c565b60208501526134a26effffffffffffffffffffffffffffff60808301516060840151176040840151176101008601359060e0870135171711156131db565b6134ab81613775565b6134b78186868b613ba2565b98906134e86129346134dd865173ffffffffffffffffffffffffffffffffffffffff1690565b60208701519061546c565b6135e0576134f543600052565b73ffffffffffffffffffffffffffffffffffffffff61352d60a0606096015173ffffffffffffffffffffffffffffffffffffffff1690565b166135c5575b505a840360a08601351061355f5750604085015260608401526080919060c0905a900391013501910152565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601e60448201527f41413430206f76657220766572696669636174696f6e4761734c696d697400006064820152608490fd5b909250816135d79298508686856147ef565b96909138613533565b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601a60408201527f4141323520696e76616c6964206163636f756e74206e6f6e636500000000000060608201520190565b1561365557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b613725906136dd6136c38261256d565b73ffffffffffffffffffffffffffffffffffffffff168452565b602081013560208401526080810135604084015260a0810135606084015260c0810135608084015260e081013560c084015261010081013560e0840152610120810190611fc8565b90811561376a5761374f61124c6112468460a09461374a601461044d9998101561364e565b612b88565b73ffffffffffffffffffffffffffffffffffffffff16910152565b505060a06000910152565b60a081015173ffffffffffffffffffffffffffffffffffffffff16156137b75760c060035b60ff60408401519116606084015102016080830151019101510290565b60c0600161379a565b6137d86040929594939560608352606083019061262c565b9460208201520152565b9061044d602f60405180947f414132332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b810103600f8101855201836105ab565b916000926000925a936139046020835193613865855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d6138766040830183611fc8565b9084613e0d565b60a086015173ffffffffffffffffffffffffffffffffffffffff16906138a243600052565b85809373ffffffffffffffffffffffffffffffffffffffff809416159889613b3a575b60600151908601516040517f3a871cdd0000000000000000000000000000000000000000000000000000000081529788968795869390600485016137c0565b03938a1690f1829181613b1a575b50613b115750600190613923612d80565b6308c379a014613abd575b50613a50575b613941575b50505a900391565b61396b9073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b613986610a2c82546dffffffffffffffffffffffffffff1690565b8083116139e3576139dc926dffffffffffffffffffffffffffff9103166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b3880613939565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601760408201527f41413231206469646e2774207061792070726566756e6400000000000000000060608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613ac5612d9e565b9081613ad1575061392e565b610f2191613adf91506137e2565b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301612882565b95506139349050565b613b3391925060203d81116123385761232981836105ab565b9038613912565b9450613b80610a2c613b6c8c73ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b546dffffffffffffffffffffffffffff1690565b8b811115613b975750856060835b969150506138c5565b606087918d03613b8e565b90926000936000935a94613beb6020835193613bd2855173ffffffffffffffffffffffffffffffffffffffff1690565b9561387d613be36040830183611fc8565b90848c61412b565b03938a1690f1829181613ded575b50613de45750600190613c0a612d80565b6308c379a014613d8e575b50613d20575b613c29575b5050505a900391565b613c539073ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b91613c6f610a2c84546dffffffffffffffffffffffffffff1690565b90818311613cba575082547fffffffffffffffffffffffffffffffffffff0000000000000000000000000000169190036dffffffffffffffffffffffffffff16179055388080613c20565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152608490fd5b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601660408201527f4141323320726576657274656420286f72204f4f47290000000000000000000060608201520190565b613d96612d9e565b9081613da25750613c15565b8691613dae91506137e2565b90610f216040519283927f220266b60000000000000000000000000000000000000000000000000000000084526004840161289a565b9650613c1b9050565b613e0691925060203d81116123385761232981836105ab565b9038613bf9565b909180613e1957505050565b81515173ffffffffffffffffffffffffffffffffffffffff1692833b6140be57606083510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280613e78878760048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156140b1575b600092614091575b508082169586156140245716809503613fb7573b15613f4a5761124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d93613f1193612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a3565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313520696e6974436f6465206d757374206372656174652073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6140aa91925060203d811161146a5761145b81836105ab565b9038613ec7565b6140b9612183565b613ebf565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601f60408201527f414131302073656e64657220616c726561647920636f6e73747275637465640060608201520190565b9290918161413a575b50505050565b82515173ffffffffffffffffffffffffffffffffffffffff1693843b6143e257606084510151604051907f570e1a3600000000000000000000000000000000000000000000000000000000825260208280614199888860048401612d2c565b0381600073ffffffffffffffffffffffffffffffffffffffff95867f00000000000000000000000000000000000000000000000000000000000000001690f19182156143d5575b6000926143b5575b5080821696871561434757168096036142d9573b15614273575061124c6112467fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d9361423393612b88565b602083810151935160a001516040805173ffffffffffffffffffffffffffffffffffffffff9485168152939091169183019190915290a338808080614134565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152608490fd5b610f21826040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152602060408201527f4141313420696e6974436f6465206d7573742072657475726e2073656e64657260608201520190565b610f21846040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601b60408201527f4141313320696e6974436f6465206661696c6564206f72204f4f47000000000060608201520190565b6143ce91925060203d811161146a5761145b81836105ab565b90386141e8565b6143dd612183565b6141e0565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152608490fd5b1561444f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f4141343120746f6f206c6974746c6520766572696669636174696f6e476173006044820152fd5b919060408382031261035957825167ffffffffffffffff81116103595783019080601f83011215610359578151916144e483610639565b916144f260405193846105ab565b838352602084830101116103595760209261451291848085019101612067565b92015190565b9061044d602f60405180947f414133332072657665727465643a20000000000000000000000000000000000060208301526138268151809260208686019101612067565b93919260609460009460009380519261459b60a08a86015195614580888811614448565b015173ffffffffffffffffffffffffffffffffffffffff1690565b916145c68373ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b946145e2610a2c87546dffffffffffffffffffffffffffff1690565b968588106147825773ffffffffffffffffffffffffffffffffffffffff60208a98946146588a966dffffffffffffffffffffffffffff8b6146919e03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b015194604051998a98899788937ff465c77e000000000000000000000000000000000000000000000000000000008552600485016137c0565b0395169103f190818391849361475c575b506147555750506001906146b4612d80565b6308c379a014614733575b506146c657565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601660408201527f4141333320726576657274656420286f72204f4f47290000000000000000000060608201520190565b61473b612d9e565b908161474757506146bf565b610f2191613adf9150614518565b9450925050565b90925061477b91503d8085833e61477381836105ab565b8101906144ad565b91386146a2565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b91949293909360609560009560009382519061481660a08b84015193614580848611614448565b936148418573ffffffffffffffffffffffffffffffffffffffff166000526000602052604060002090565b61485c610a2c82546dffffffffffffffffffffffffffff1690565b8781106149b7579273ffffffffffffffffffffffffffffffffffffffff60208a989693946146588a966dffffffffffffffffffffffffffff8d6148d69e9c9a03166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b0395169103f1908183918493614999575b506149915750506001906148f9612d80565b6308c379a014614972575b5061490c5750565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152601660448201527f4141333320726576657274656420286f72204f4f4729000000000000000000006064820152608490fd5b61497a612d9e565b90816149865750614904565b613dae925050614518565b955093505050565b9092506149b091503d8085833e61477381836105ab565b91386148e7565b610f218a6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601e60408201527f41413331207061796d6173746572206465706f73697420746f6f206c6f77000060608201520190565b60031115614a2f57565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b929190614a7c6040916002865260606020870152606086019061208a565b930152565b939291906003811015614a2f57604091614a7c91865260606020870152606086019061208a565b9061044d603660405180947f4141353020706f73744f702072657665727465643a20000000000000000000006020830152614aec8151809260208686019101612067565b81010360168101855201836105ab565b929190925a93600091805191614b1183615318565b9260a0810195614b35875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff93908481169081614ca457505050614b76825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f94614bc26020928c614c329551039061553a565b015194896020614c04614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b9a5173ffffffffffffffffffffffffffffffffffffffff1690565b9401519785604051968796169a16988590949392606092608083019683521515602083015260408201520152565b0390a4565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152602060408201527f414135312070726566756e642062656c6f772061637475616c476173436f737460608201520190565b9a918051614cb4575b5050614b78565b6060850151600099509091803b15614ddb579189918983614d07956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081614dc8575b50614dc3576001614d20612d80565b6308c379a014614da4575b614d37575b3880614cad565b6040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b614dac612d9e565b80614db75750614d2b565b613adf610f2191614aa8565b614d30565b80610f48614dd59261057b565b38614d11565b8980fd5b9392915a90600092805190614df382615318565b9360a0830196614e17885173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff95908681169081614f0d57505050614e58845173ffffffffffffffffffffffffffffffffffffffff1690565b915b5a9003019485029860408301908a825110614ea757507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f949392614bc2614c32938c60209451039061553a565b604080517f220266b600000000000000000000000000000000000000000000000000000000815260048101929092526024820152602060448201527f414135312070726566756e642062656c6f772061637475616c476173436f73746064820152608490fd5b93918051614f1d575b5050614e5a565b606087015160009a509091803b1561504357918a918a83614f70956040518097819682957fa9a234090000000000000000000000000000000000000000000000000000000084528c029060048401614a5e565b0393f19081615030575b5061502b576001614f89612d80565b6308c379a01461500e575b614fa0575b3880614f16565b610f218b6040519182917f220266b600000000000000000000000000000000000000000000000000000000835260048301608091815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b615016612d9e565b806150215750614f94565b613dae8d91614aa8565b614f99565b80610f4861503d9261057b565b38614f7a565b8a80fd5b909392915a9480519161505983615318565b9260a081019561507d875173ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff938185169182615165575050506150bd825173ffffffffffffffffffffffffffffffffffffffff1690565b985b5a90030193840297604084019089825110614c37577f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f946151096020928c614c329551039061553a565b61511288614a25565b015194896020615139614be9865173ffffffffffffffffffffffffffffffffffffffff1690565b940151604080519182529815602082015297880152606087015290821695909116939081906080820190565b9a918151615175575b50506150bf565b8784026151818a614a25565b60028a1461520c576060860151823b15610359576151d493600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f180156151ff575b6151ec575b505b388061516e565b80610f486151f99261057b565b386151e3565b615207612183565b6151de565b6060860151823b156103595761525793600080948d604051978896879586937fa9a2340900000000000000000000000000000000000000000000000000000000855260048501614a81565b0393f19081615305575b50615300576001615270612d80565b6308c379a0146152ed575b156151e5576040517f220266b600000000000000000000000000000000000000000000000000000000815280610f21600482016080906000815260406020820152601260408201527f4141353020706f73744f7020726576657274000000000000000000000000000060608201520190565b6152f5612d9e565b80614db7575061527b565b6151e5565b80610f486153129261057b565b38615261565b60e060c082015191015180821461533c57480180821015615337575090565b905090565b5090565b6040519061534d8261058f565b60006040838281528260208201520152565b615367615340565b5065ffffffffffff808260a01c1680156153b3575b604051926153898461058f565b73ffffffffffffffffffffffffffffffffffffffff8116845260d01c602084015216604082015290565b508061537c565b6153cf6153d5916153c9615340565b5061535f565b9161535f565b9073ffffffffffffffffffffffffffffffffffffffff9182825116928315615461575b65ffffffffffff928391826040816020850151169301511693836040816020840151169201511690808410615459575b50808511615451575b506040519561543f8761058f565b16855216602084015216604082015290565b935038615431565b925038615428565b8151811693506153f8565b73ffffffffffffffffffffffffffffffffffffffff16600052600160205267ffffffffffffffff6154c88260401c60406000209077ffffffffffffffffffffffffffffffffffffffffffffffff16600052602052604060002090565b918254926154d584612491565b9055161490565b9073ffffffffffffffffffffffffffffffffffffffff6154fa612b50565b9216600052600060205263ffffffff600160406000206dffffffffffffffffffffffffffff815460781c1685520154166020830152565b61044d3361562b565b73ffffffffffffffffffffffffffffffffffffffff16600052600060205260406000206dffffffffffffffffffffffffffff8082541692830180931161561e575b8083116155c05761044d92166dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f6465706f736974206f766572666c6f77000000000000000000000000000000006044820152fd5b615626612190565b61557b565b73ffffffffffffffffffffffffffffffffffffffff9061564b348261553a565b168060005260006020527f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c460206dffffffffffffffffffffffffffff60406000205416604051908152a2565b1561569e57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b1561570357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b1561576857565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b156157cd57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b9065ffffffffffff6080600161044d9461588b6dffffffffffffffffffffffffffff86511682906dffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffff0000000000000000000000000000825416179055565b602085015115156eff000000000000000000000000000082549160701b16807fffffffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffff83161783557fffffff000000000000000000000000000000ffffffffffffffffffffffffffff7cffffffffffffffffffffffffffff000000000000000000000000000000604089015160781b16921617178155019263ffffffff6060820151167fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000008554161784550151167fffffffffffffffffffffffffffffffffffffffffffff000000000000ffffffff69ffffffffffff0000000083549260201b169116179055565b1561599657565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b91909165ffffffffffff808094169116019182116121cd57565b15615a1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b15615a7a57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b15615adf57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b15615b4457565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b15615ba957565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b816040519182372090565b9060009283809360208451940192f190565b3d610800808211615c4b575b50604051906020818301016040528082526000602083013e90565b905038615c3056fea2646970667358221220a706d8b02d7086d80e9330811f5af84b2614abdc5e9a1f2260126070a31d7cee64736f6c634300081100336080806040523461001657610210908161001c8239f35b600080fdfe6080604052600436101561001257600080fd5b6000803560e01c63570e1a361461002857600080fd5b346100c95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100c95760043567ffffffffffffffff918282116100c957366023830112156100c95781600401359283116100c95736602484840101116100c9576100c561009e84602485016100fc565b60405173ffffffffffffffffffffffffffffffffffffffff90911681529081906020820190565b0390f35b80fd5b507f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b90806014116101bb5767ffffffffffffffff917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec82018381116101cd575b604051937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8701160116850190858210908211176101c0575b604052808452602084019036848401116101bb576020946000600c819682946014880187378301015251923560601c5af19060005191156101b557565b60009150565b600080fd5b6101c86100cc565b610178565b6101d56100cc565b61013a56fea26469706673582212201927e80b76ab9b71c952137dd676621a9fdf520c25928815636594036eb1c40364736f6c63430008110033" +/* ========= MISC ========= */ + export const ERC_7579_TEST_MODULE_CREATECALL: Hex = "0x03b79c840000000000000000000000000000000000000000000000000000000000001337dbca873b13c783c0c9c6ddfc4280e505580bf6cc3dac83f8a0f7b44acaafca4f00000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000010c000000000000000000000000000000000000000000000000000000000000010e00000000000000000000000000000000000000000000000000000000000000ffb6080604052348015600e575f80fd5b50610fdf8061001c5f395ff3fe6080604052600436106100a5575f3560e01c8063d26cdce311610062578063d26cdce3146101b7578063d60b347f146101ca578063e5086003146101f9578063ecd059611461020c578063fbe5ce0a1461022c578063fd8b84b11461024b575f80fd5b806306fdde03146100a957806354fd4d50146100f25780636d61fe701461011f5780637065cb48146101405780638a91b0e31461015f578063ccfdec8c1461017e575b5f80fd5b3480156100b4575f80fd5b5060408051808201909152600f81526e27bbb730b13632a2bc32b1baba37b960891b60208201525b6040516100e99190610b67565b60405180910390f35b3480156100fd575f80fd5b506040805180820190915260058152640312e302e360dc1b60208201526100dc565b34801561012a575f80fd5b5061013e610139366004610be1565b610277565b005b34801561014b575f80fd5b5061013e61015a366004610c3b565b61036a565b34801561016a575f80fd5b5061013e610179366004610be1565b61045c565b348015610189575f80fd5b506101a9610198366004610c3b565b60016020525f908152604090205481565b6040519081526020016100e9565b61013e6101c5366004610c54565b6104ae565b3480156101d5575f80fd5b506101e96101e4366004610c3b565b61056d565b60405190151581526020016100e9565b61013e610207366004610c54565b61059c565b348015610217575f80fd5b506101e9610226366004610ca3565b60021490565b348015610237575f80fd5b5061013e610246366004610cba565b6105f2565b348015610256575f80fd5b5061026a610265366004610c3b565b610665565b6040516100e99190610ceb565b335f6102866014828587610d37565b61028f91610d5e565b60601c9050806102c25760405163b20f76e360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b6001600160a01b0382165f9081526020819052604090206102e29061069b565b6001600160a01b0382165f90815260208190526040902061030390826106f6565b6001600160a01b0382165f8181526001602081905260409182902055517f1cd4a6da6e6a6f4dc754cedd54ead3b9cd0e2f5804cda2ba60506c2899fb29df9061035c9084906001600160a01b0391909116815260200190565b60405180910390a250505050565b336103748161056d565b61039c5760405163f91bd6f160e01b81526001600160a01b03821660048201526024016102b9565b6001600160a01b0382166103ce5760405163b20f76e360e01b81526001600160a01b03831660048201526024016102b9565b6001600160a01b0381165f9081526020819052604090206103ef90836106f6565b6001600160a01b0381165f90815260016020526040812080549161041283610da7565b90915550506040516001600160a01b0383811682528216907fc82bdbbf677a2462f2a7e22e4ba9abd209496b69cd7b868b3b1d28f76e09a40a906020015b60405180910390a25050565b335f908152602081905260409020610473906107ca565b335f81815260016020526040808220829055517f9d00629762554452d03c3b45626436df6ca1c3795d05d04df882f6db481b1be09190a25050565b6001600160a01b0383165f9081526020819052604090206104cf9033610825565b6104ec57604051631a27eac360e11b815260040160405180910390fd5b826001600160a01b031663d691c9643461050461085f565b85856040518563ffffffff1660e01b815260040161052493929190610dbf565b5f6040518083038185885af115801561053f573d5f803e3d5ffd5b50505050506040513d5f823e601f3d908101601f191682016040526105679190810190610e39565b50505050565b6001600160a01b038181165f908152602081815260408083206001845290915281205490911615155b92915050565b6001600160a01b0383165f9081526020819052604090206105bd9033610825565b6105da57604051631a27eac360e11b815260040160405180910390fd5b826001600160a01b031663d691c96434610504610871565b335f90815260208190526040902061060b908383610882565b335f90815260016020526040812080549161062583610f47565b90915550506040516001600160a01b038216815233907fe594d081b4382713733fe631966432c9cea5199afb2db5c3c1931f9f9300367990602001610450565b6001600160a01b0381165f90815260016020818152604080842054918490529092206060926106949290610955565b5092915050565b60015f908152602082905260409020546001600160a01b0316156106d2576040516329e42f3360e11b815260040160405180910390fd5b60015f818152602092909252604090912080546001600160a01b0319169091179055565b6001600160a01b038116158061071557506001600160a01b0381166001145b1561073e57604051637c84ecfb60e01b81526001600160a01b03821660048201526024016102b9565b6001600160a01b038181165f90815260208490526040902054161561078157604051631034f46960e21b81526001600160a01b03821660048201526024016102b9565b60015f818152602093909352604080842080546001600160a01b039485168087529286208054959091166001600160a01b03199586161790559190935280549091169091179055565b60015f908152602082905260409020546001600160a01b03165b6001600160a01b03811615610821576001600160a01b039081165f90815260208390526040902080546001600160a01b03198116909155166107e4565b5050565b5f60016001600160a01b0383161480159061085857506001600160a01b038281165f908152602085905260409020541615155b9392505050565b5f61086c81808080610afd565b905090565b5f61086c600160f81b828080610afd565b6001600160a01b03811615806108a157506001600160a01b0381166001145b156108ca57604051637c84ecfb60e01b81526001600160a01b03831660048201526024016102b9565b6001600160a01b038281165f9081526020859052604090205481169082161461091157604051637c84ecfb60e01b81526001600160a01b03821660048201526024016102b9565b6001600160a01b039081165f8181526020949094526040808520805494841686529085208054949093166001600160a01b0319948516179092559092528154169055565b60605f6001600160a01b03841660011480159061097957506109778585610825565b155b156109a257604051637c84ecfb60e01b81526001600160a01b03851660048201526024016102b9565b825f036109c25760405163f725081760e01b815260040160405180910390fd5b8267ffffffffffffffff8111156109db576109db610df4565b604051908082528060200260200182016040528015610a04578160200160208202803683370190505b506001600160a01b038086165f90815260208890526040812054929450911691505b6001600160a01b03821615801590610a4857506001600160a01b038216600114155b8015610a5357508381105b15610aac5781838281518110610a6b57610a6b610f5c565b6001600160a01b039283166020918202929092018101919091529281165f908152928790526040909220549091169080610aa481610da7565b915050610a26565b6001600160a01b038216600114801590610ac557505f81115b15610af15782610ad6600183610f70565b81518110610ae657610ae6610f5c565b602002602001015191505b80835250935093915050565b604080516001600160f81b03198087166020830152851660218201525f602282018190526001600160e01b03198516602683015269ffffffffffffffffffff198416602a8301529101604051602081830303815290604052610b5e90610f83565b95945050505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8083601f840112610bac575f80fd5b50813567ffffffffffffffff811115610bc3575f80fd5b602083019150836020828501011115610bda575f80fd5b9250929050565b5f8060208385031215610bf2575f80fd5b823567ffffffffffffffff811115610c08575f80fd5b610c1485828601610b9c565b90969095509350505050565b80356001600160a01b0381168114610c36575f80fd5b919050565b5f60208284031215610c4b575f80fd5b61085882610c20565b5f805f60408486031215610c66575f80fd5b610c6f84610c20565b9250602084013567ffffffffffffffff811115610c8a575f80fd5b610c9686828701610b9c565b9497909650939450505050565b5f60208284031215610cb3575f80fd5b5035919050565b5f8060408385031215610ccb575f80fd5b610cd483610c20565b9150610ce260208401610c20565b90509250929050565b602080825282518282018190525f9190848201906040850190845b81811015610d2b5783516001600160a01b031683529284019291840191600101610d06565b50909695505050505050565b5f8085851115610d45575f80fd5b83861115610d51575f80fd5b5050820193919092039150565b6bffffffffffffffffffffffff198135818116916014851015610d8b5780818660140360031b1b83161692505b505092915050565b634e487b7160e01b5f52601160045260245ffd5b5f60018201610db857610db8610d93565b5060010190565b83815260406020820152816040820152818360608301375f818301606090810191909152601f909201601f1916010192915050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e3157610e31610df4565b604052919050565b5f6020808385031215610e4a575f80fd5b825167ffffffffffffffff80821115610e61575f80fd5b8185019150601f86601f840112610e76575f80fd5b825182811115610e8857610e88610df4565b8060051b610e97868201610e08565b918252848101860191868101908a841115610eb0575f80fd5b87870192505b83831015610f3957825186811115610ecc575f80fd5b8701603f81018c13610edc575f80fd5b88810151604088821115610ef257610ef2610df4565b610f03828901601f19168c01610e08565b8281528e82848601011115610f16575f80fd5b828285018d83015e5f9281018c0192909252508352509187019190870190610eb6565b9a9950505050505050505050565b5f81610f5557610f55610d93565b505f190190565b634e487b7160e01b5f52603260045260245ffd5b8181038181111561059657610596610d93565b80516020808301519190811015610fa3575f198160200360031b1b821691505b5091905056fea2646970667358221220fd20c30d790f9e29c7fee691f54ed598408181fcc342f8f909eaa9478dfd384a64736f6c63430008190033000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" diff --git a/packages/permissionless-test/mock-aa-infra/alto/index.ts b/packages/permissionless-test/mock-aa-infra/alto/index.ts index 56007e16..f49211a7 100644 --- a/packages/permissionless-test/mock-aa-infra/alto/index.ts +++ b/packages/permissionless-test/mock-aa-infra/alto/index.ts @@ -16,9 +16,9 @@ import { BICONOMY_ECDSA_OWNERSHIP_REGISTRY_MODULE_CREATECALL, BICONOMY_FACTORY_CREATECALL, BICONOMY_SINGLETON_FACTORY_BYTECODE, - ENTRY_POINT_SIMULATIONS_CREATECALL, ENTRY_POINT_V06_CREATECALL, ENTRY_POINT_V07_CREATECALL, + ENTRY_POINT_V08_CREATECALL, ERC_7579_TEST_MODULE_CREATECALL, ETHERSPOT_BOOTSTRAP_CREATECALL, ETHERSPOT_IMPLEMENTATION, @@ -67,6 +67,7 @@ import { SAFE_V07_MODULE_SETUP_CREATECALL, SIMPLE_ACCOUNT_FACTORY_V06_CREATECALL, SIMPLE_ACCOUNT_FACTORY_V07_CREATECALL, + SIMPLE_ACCOUNT_FACTORY_V08_CREATECALL, THIRDWEB_FACTORY_V06_CREATECALL, THIRDWEB_FACTORY_V07_CREATECALL, TRUST_ACCOUNT_FACET_CREATE_CALL, @@ -82,8 +83,6 @@ const DETERMINISTIC_DEPLOYER = "0x4e59b44847b379578588920ca78fbf26c0b4956c" const SAFE_SINGLETON_FACTORY = "0x914d7Fec6aaC8cd542e72Bca78B30650d45643d7" const BICONOMY_SINGLETON_FACTORY = "0x988C135a1049Ce61730724afD342fb7C56CD2776" const SAFE_7579_REGISTRY = "0x000000000069E2a187AEFFb852bF3cCdC95151B2" -export const ENTRY_POINT_SIMULATIONS_ADDRESS = - "0xe1b9bcD4DbfAE61585691bdB9A100fbaAF6C8dB0" const verifyDeployed = async (client: PublicClient, addresses: Address[]) => { for (const address of addresses) { @@ -128,19 +127,25 @@ export const setupContracts = async (rpc: string) => { await Promise.all([ walletClient.sendTransaction({ to: DETERMINISTIC_DEPLOYER, - data: ENTRY_POINT_V07_CREATECALL, + data: ENTRY_POINT_V08_CREATECALL, gas: 15_000_000n, nonce: nonce++ }), walletClient.sendTransaction({ to: DETERMINISTIC_DEPLOYER, - data: SIMPLE_ACCOUNT_FACTORY_V07_CREATECALL, + data: SIMPLE_ACCOUNT_FACTORY_V08_CREATECALL, gas: 15_000_000n, nonce: nonce++ }), walletClient.sendTransaction({ to: DETERMINISTIC_DEPLOYER, - data: ENTRY_POINT_SIMULATIONS_CREATECALL, + data: ENTRY_POINT_V07_CREATECALL, + gas: 15_000_000n, + nonce: nonce++ + }), + walletClient.sendTransaction({ + to: DETERMINISTIC_DEPLOYER, + data: SIMPLE_ACCOUNT_FACTORY_V07_CREATECALL, gas: 15_000_000n, nonce: nonce++ }), @@ -663,11 +668,12 @@ export const setupContracts = async (rpc: string) => { await verifyDeployed(client, [ "0x4e59b44847b379578588920ca78fbf26c0b4956c", // Determinstic deployer + "0x4337084d9e255ff0702461cf8895ce9e3b5ff108", // EntryPoint 0.8 + "0x13E9ed32155810FDbd067D4522C492D6f68E5944", // Simple Account Factory 0.8 "0x914d7Fec6aaC8cd542e72Bca78B30650d45643d7", // Safe Singleton Factory "0x988C135a1049Ce61730724afD342fb7C56CD2776", // Biconomy Singleton Factory - "0x0000000071727De22E5E9d8BAf0edAc6f37da032", // EntryPoint v0.7 - "0x91E60e0613810449d098b0b5Ec8b51A0FE8c8985", // Simple Account Factory V0.7 - // ENTRY_POINT_SIMULATIONS_ADDRESS, // EntryPoint Simulations (Needed for v0.7) + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", // EntryPoint 0.7 + "0x91E60e0613810449d098b0b5Ec8b51A0FE8c8985", // Simple Account Factory 0.7 "0x2dd68b007B46fBe91B9A7c3EDa5A7a1063cB5b47", // Safe V0.7 Module Setup "0x75cf11467937ce3F2f357CE24ffc3DBF8fD5c226", // Safe V0.7 4337 Module "0x8EcD4ec46D4D2a6B64fE960B3D64e8B94B2234eb", // Safe V0.6 Module Setup @@ -679,8 +685,8 @@ export const setupContracts = async (rpc: string) => { "0x7579EE8307284F293B1927136486880611F20002", // Safe 7579 module "0x7579011aB74c46090561ea277Ba79D510c6C00ff", // Safe 7579 launchpad "0x000000000069E2a187AEFFb852bF3cCdC95151B2", // Safe 7579 Registry - "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", // EntryPoint V0.6 - "0x9406Cc6185a346906296840746125a0E44976454", // Simple Account Factory V0.6 + "0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789", // EntryPoint 0.6 + "0x9406Cc6185a346906296840746125a0E44976454", // Simple Account Factory 0.6 "0x0000001c5b32F37F5beA87BDD5374eB2aC54eA8e", // Biconomy ECDSA Ownership Registry Module "0x0000002512019Dafb59528B82CB92D3c5D2423ac", // Biconomy Account Logic V0.2 "0x000000a56Aaca3e9a4C479ea6b6CD0DbcB6634F5", // Biconomy Factory Address diff --git a/packages/permissionless-test/src/testWithRpc.ts b/packages/permissionless-test/src/testWithRpc.ts index 28d3f8c3..781989b9 100644 --- a/packages/permissionless-test/src/testWithRpc.ts +++ b/packages/permissionless-test/src/testWithRpc.ts @@ -3,14 +3,12 @@ import getPort from "get-port" import { alto, anvil } from "prool/instances" import { entryPoint06Address, - entryPoint07Address + entryPoint07Address, + entryPoint08Address } from "viem/account-abstraction" import { foundry } from "viem/chains" import { test } from "vitest" -import { - ENTRY_POINT_SIMULATIONS_ADDRESS, - setupContracts -} from "../mock-aa-infra/alto" +import { setupContracts } from "../mock-aa-infra/alto" export const getInstances = async ({ anvilPort, @@ -39,10 +37,13 @@ export const getInstances = async ({ }) const altoInstance = alto({ - entrypoints: [entryPoint06Address, entryPoint07Address], + entrypoints: [ + entryPoint06Address, + entryPoint07Address, + entryPoint08Address + ], rpcUrl: anvilRpc, executorPrivateKeys: [anvilPrivateKey], - entrypointSimulationContract: ENTRY_POINT_SIMULATIONS_ADDRESS, safeMode: false, port: altoPort, utilityPrivateKey: anvilPrivateKey diff --git a/packages/permissionless-test/src/types.ts b/packages/permissionless-test/src/types.ts index acb14c8d..f7896f3d 100644 --- a/packages/permissionless-test/src/types.ts +++ b/packages/permissionless-test/src/types.ts @@ -1,6 +1,7 @@ -import type { Address, Hex, PublicClient } from "viem" +import type { Hex } from "viem" +import type { EntryPointVersion } from "viem/account-abstraction" -export type AAParamType = { +export type AAParamType = { entryPoint: { version: entryPointVersion } diff --git a/packages/permissionless-test/src/utils.ts b/packages/permissionless-test/src/utils.ts index c828a7b5..fee803d4 100644 --- a/packages/permissionless-test/src/utils.ts +++ b/packages/permissionless-test/src/utils.ts @@ -1,15 +1,19 @@ import { http, type Account, + type Chain, type Hex, + type Transport, createPublicClient, createWalletClient } from "viem" import { + type EntryPointVersion, type SmartAccount, createPaymasterClient, entryPoint06Address, - entryPoint07Address + entryPoint07Address, + entryPoint08Address } from "viem/account-abstraction" import { generatePrivateKey, @@ -38,7 +42,10 @@ import { toSimpleSmartAccount } from "../../permissionless/accounts/simple/toSimpleSmartAccount" import { toTrustSmartAccount } from "../../permissionless/accounts/trust/toTrustSmartAccount" -import { createSmartAccountClient } from "../../permissionless/clients/createSmartAccountClient" +import { + type SmartAccountClient, + createSmartAccountClient +} from "../../permissionless/clients/createSmartAccountClient" import { createPimlicoClient } from "../../permissionless/clients/pimlico" import type { AAParamType } from "./types" @@ -110,17 +117,24 @@ export const getBundlerClient = ({ anvilRpc: string account?: account entryPoint: { - version: "0.6" | "0.7" + version: EntryPointVersion } -}) => { +}): SmartAccountClient => { + const address = (() => { + if (entryPoint.version === "0.6") { + return entryPoint06Address + } + if (entryPoint.version === "0.7") { + return entryPoint07Address + } + return entryPoint08Address + })() + const paymaster = paymasterRpc ? createPimlicoClient({ transport: http(paymasterRpc), entryPoint: { - address: - entryPoint.version === "0.6" - ? entryPoint06Address - : entryPoint07Address, + address, version: entryPoint.version } }) @@ -129,10 +143,7 @@ export const getBundlerClient = ({ const pimlicoBundler = createPimlicoClient({ transport: http(altoRpc), entryPoint: { - address: - entryPoint.version === "0.6" - ? entryPoint06Address - : entryPoint07Address, + address, version: entryPoint.version } }) @@ -178,7 +189,7 @@ export const getSmartAccountClient = < }) } -export const getPimlicoClient = ({ +export const getPimlicoClient = ({ entryPointVersion, altoRpc }: { @@ -188,11 +199,12 @@ export const getPimlicoClient = ({ createPimlicoClient({ chain: foundry, entryPoint: { - address: (entryPointVersion === "0.6" - ? entryPoint06Address - : entryPoint07Address) as entryPointVersion extends "0.6" - ? typeof entryPoint06Address - : typeof entryPoint07Address, + address: + entryPointVersion === "0.6" + ? entryPoint06Address + : entryPointVersion === "0.7" + ? entryPoint07Address + : entryPoint08Address, version: entryPointVersion }, transport: http(altoRpc) @@ -216,7 +228,7 @@ export const getPublicClient = (anvilRpc: string) => { } export const getSimpleAccountClient = async < - entryPointVersion extends "0.6" | "0.7" + entryPointVersion extends EntryPointVersion >({ entryPoint, anvilRpc, @@ -224,16 +236,17 @@ export const getSimpleAccountClient = async < }: AAParamType): Promise< ToSimpleSmartAccountReturnType > => { + const entryPointMapping = { + "0.6": entryPoint06Address, + "0.7": entryPoint07Address, + "0.8": entryPoint08Address + } + return toSimpleSmartAccount({ client: getPublicClient(anvilRpc), entryPoint: { - address: - entryPoint.version === "0.6" - ? entryPoint06Address - : entryPoint07Address, - version: (entryPoint.version === "0.6" - ? "0.6" - : "0.7") as entryPointVersion + address: entryPointMapping[entryPoint.version], + version: entryPoint.version as entryPointVersion }, owner: privateKeyToAccount(privateKey ?? generatePrivateKey()) }) @@ -431,374 +444,364 @@ export const getEtherspotClient = async < }) } -export const getCoreSmartAccounts = () => [ +export const getCoreSmartAccounts = (): Array<{ + name: string + supportsEntryPointV06: boolean + supportsEntryPointV07: boolean + supportsEntryPointV08: boolean + isEip1271Compliant: boolean + getSmartAccountClient: ( + conf: AAParamType + ) => Promise> + getErc7579SmartAccountClient?: < + entryPointVersion extends EntryPointVersion + >( + conf: AAParamType + ) => Promise> +}> => [ { name: "Trust", - getSmartAccountClient: async ( - conf: AAParamType - ) => { + getSmartAccountClient: async (conf: AAParamType) => { return getBundlerClient({ - account: await getTrustAccountClient(conf), + account: await getTrustAccountClient( + conf as AAParamType<"0.6" | "0.7"> + ), ...conf }) }, supportsEntryPointV06: true, supportsEntryPointV07: false, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "LightAccount 1.1.0", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ account: await getLightAccountClient({ - ...conf, - version: "1.1.0" as LightAccountVersion + ...(conf as AAParamType<"0.6" | "0.7">), + version: "1.1.0" as LightAccountVersion<"0.6" | "0.7"> }), ...conf }), supportsEntryPointV06: true, supportsEntryPointV07: false, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "LightAccount 2.0.0", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ account: await getLightAccountClient({ - ...conf, - version: "2.0.0" as LightAccountVersion + ...(conf as AAParamType<"0.6" | "0.7">), + version: "2.0.0" as LightAccountVersion<"0.6" | "0.7"> }), ...conf }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "Simple", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ account: await getSimpleAccountClient(conf), ...conf }), supportsEntryPointV06: true, supportsEntryPointV07: true, + supportsEntryPointV08: true, isEip1271Compliant: false }, { name: "Kernel 0.2.1", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ account: await getKernelEcdsaClient({ - ...conf, - version: "0.2.1" as KernelVersion + ...(conf as AAParamType<"0.6" | "0.7">), + version: "0.2.1" as KernelVersion<"0.6" | "0.7"> }), ...conf }), supportsEntryPointV06: true, supportsEntryPointV07: false, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "Kernel 0.2.2", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ account: await getKernelEcdsaClient({ - ...conf, - version: "0.2.2" as KernelVersion + ...(conf as AAParamType<"0.6" | "0.7">), + version: "0.2.2" as KernelVersion<"0.6" | "0.7"> }), ...conf }), supportsEntryPointV06: true, supportsEntryPointV07: false, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "Kernel 0.2.3", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ account: await getKernelEcdsaClient({ - ...conf, - version: "0.2.3" as KernelVersion + ...(conf as AAParamType<"0.6" | "0.7">), + version: "0.2.3" as KernelVersion<"0.6" | "0.7"> }), ...conf }), supportsEntryPointV06: true, supportsEntryPointV07: false, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "Kernel 0.2.4", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ account: await getKernelEcdsaClient({ - ...conf, - version: "0.2.4" as KernelVersion + ...(conf as AAParamType<"0.6" | "0.7">), + version: "0.2.4" as KernelVersion<"0.6" | "0.7"> }), ...conf }), supportsEntryPointV06: true, supportsEntryPointV07: false, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "Kernel 7579 0.3.0-beta (non meta factory deployment)", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ account: await getKernelEcdsaClient({ - ...conf, - version: "0.3.0-beta" as KernelVersion, + ...(conf as AAParamType<"0.6" | "0.7">), + version: "0.3.0-beta" as KernelVersion<"0.6" | "0.7">, useMetaFactory: false }), ...conf }), - getErc7579SmartAccountClient: async < - entryPointVersion extends "0.6" | "0.7" - >( - conf: AAParamType + getErc7579SmartAccountClient: async ( + conf: AAParamType ) => getSmartAccountClient({ account: await getKernelEcdsaClient({ - ...conf, - version: "0.3.0-beta" as KernelVersion, + ...(conf as AAParamType<"0.6" | "0.7">), + version: "0.3.0-beta" as KernelVersion<"0.6" | "0.7">, useMetaFactory: false }), ...conf }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "Kernel 7579 0.3.0-beta", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ account: await getKernelEcdsaClient({ - ...conf, - version: "0.3.0-beta" as KernelVersion + ...(conf as AAParamType<"0.6" | "0.7">), + version: "0.3.0-beta" as KernelVersion<"0.6" | "0.7"> }), ...conf }), - getErc7579SmartAccountClient: async < - entryPointVersion extends "0.6" | "0.7" - >( - conf: AAParamType + getErc7579SmartAccountClient: async ( + conf: AAParamType ) => getSmartAccountClient({ account: await getKernelEcdsaClient({ - ...conf, - version: "0.3.0-beta" as KernelVersion + ...(conf as AAParamType<"0.6" | "0.7">), + version: "0.3.0-beta" as KernelVersion<"0.6" | "0.7"> }), ...conf }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "Kernel 7579 0.3.1 (non meta factory deployment)", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ account: await getKernelEcdsaClient({ - ...conf, - version: "0.3.1" as KernelVersion, + ...(conf as AAParamType<"0.6" | "0.7">), + version: "0.3.1" as KernelVersion<"0.6" | "0.7">, useMetaFactory: false }), ...conf }), - getErc7579SmartAccountClient: async < - entryPointVersion extends "0.6" | "0.7" - >( - conf: AAParamType + getErc7579SmartAccountClient: async ( + conf: AAParamType ) => getSmartAccountClient({ account: await getKernelEcdsaClient({ - ...conf, - version: "0.3.1" as KernelVersion, + ...(conf as AAParamType<"0.6" | "0.7">), + version: "0.3.1" as KernelVersion<"0.6" | "0.7">, useMetaFactory: false }), ...conf }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "Kernel 7579 0.3.1", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ account: await getKernelEcdsaClient({ - ...conf, - version: "0.3.1" as KernelVersion + ...(conf as AAParamType<"0.6" | "0.7">), + version: "0.3.1" as KernelVersion<"0.6" | "0.7"> }), ...conf }), - getErc7579SmartAccountClient: async < - entryPointVersion extends "0.6" | "0.7" - >( - conf: AAParamType + getErc7579SmartAccountClient: async ( + conf: AAParamType ) => getSmartAccountClient({ account: await getKernelEcdsaClient({ - ...conf, - version: "0.3.1" as KernelVersion + ...(conf as AAParamType<"0.6" | "0.7">), + version: "0.3.1" as KernelVersion<"0.6" | "0.7"> }), ...conf }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "Kernel 7579 0.3.2", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ account: await getKernelEcdsaClient({ - ...conf, - version: "0.3.2" as KernelVersion + ...(conf as AAParamType<"0.6" | "0.7">), + version: "0.3.2" as KernelVersion<"0.6" | "0.7"> }), ...conf }), - getErc7579SmartAccountClient: async < - entryPointVersion extends "0.6" | "0.7" - >( - conf: AAParamType + getErc7579SmartAccountClient: async ( + conf: AAParamType ) => getSmartAccountClient({ account: await getKernelEcdsaClient({ - ...conf, - version: "0.3.2" as KernelVersion + ...(conf as AAParamType<"0.6" | "0.7">), + version: "0.3.2" as KernelVersion<"0.6" | "0.7"> }), ...conf }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "Kernel 7579 0.3.3", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ account: await getKernelEcdsaClient({ - ...conf, - version: "0.3.3" as KernelVersion + ...(conf as AAParamType<"0.6" | "0.7">), + version: "0.3.3" as KernelVersion<"0.6" | "0.7"> }), ...conf }), - getErc7579SmartAccountClient: async < - entryPointVersion extends "0.6" | "0.7" - >( - conf: AAParamType + getErc7579SmartAccountClient: async ( + conf: AAParamType ) => getSmartAccountClient({ account: await getKernelEcdsaClient({ - ...conf, - version: "0.3.3" as KernelVersion + ...(conf as AAParamType<"0.6" | "0.7">), + version: "0.3.3" as KernelVersion<"0.6" | "0.7"> }), ...conf }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "Biconomy", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ - account: await getBiconomyClient(conf), + account: await getBiconomyClient( + conf as AAParamType<"0.6" | "0.7"> + ), ...conf }), supportsEntryPointV06: true, supportsEntryPointV07: false, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "Nexus", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ - account: await getNexusClient(conf), + account: await getNexusClient( + conf as AAParamType<"0.6" | "0.7"> + ), ...conf }), - getErc7579SmartAccountClient: async < - entryPointVersion extends "0.6" | "0.7" - >( - conf: AAParamType + getErc7579SmartAccountClient: async ( + conf: AAParamType ) => getSmartAccountClient({ - account: await getNexusClient(conf), + account: await getNexusClient( + conf as AAParamType<"0.6" | "0.7"> + ), ...conf }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "Safe", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ - account: await getSafeClient(conf), + account: await getSafeClient( + conf as AAParamType<"0.6" | "0.7"> + ), ...conf }), supportsEntryPointV06: true, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "Safe (with onchain identifier)", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ account: await getSafeClient({ - ...conf, + ...(conf as AAParamType<"0.6" | "0.7">), onchainIdentifier: "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }), ...conf }), supportsEntryPointV06: true, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "Safe multiple owners", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ account: await getSafeClient({ - ...conf, + ...(conf as AAParamType<"0.6" | "0.7">), owners: [ privateKeyToAccount(generatePrivateKey()), privateKeyToAccount(generatePrivateKey()), @@ -809,38 +812,40 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: true, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "Safe 7579", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ - account: await getSafeClient({ ...conf, erc7579: true }), + account: await getSafeClient({ + ...(conf as AAParamType<"0.6" | "0.7">), + erc7579: true + }), ...conf }), - getErc7579SmartAccountClient: async < - entryPointVersion extends "0.6" | "0.7" - >( - conf: AAParamType + getErc7579SmartAccountClient: async ( + conf: AAParamType ) => getSmartAccountClient({ - account: await getSafeClient({ ...conf, erc7579: true }), + account: await getSafeClient({ + ...(conf as AAParamType<"0.6" | "0.7">), + erc7579: true + }), ...conf }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "Safe 7579 Multiple Owners", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ account: await getSafeClient({ - ...conf, + ...(conf as AAParamType<"0.6" | "0.7">), erc7579: true, owners: [ privateKeyToAccount(generatePrivateKey()), @@ -850,43 +855,46 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - getErc7579SmartAccountClient: async < - entryPointVersion extends "0.6" | "0.7" - >( - conf: AAParamType + getErc7579SmartAccountClient: async ( + conf: AAParamType ) => getSmartAccountClient({ - account: await getSafeClient({ ...conf, erc7579: true }), + account: await getSafeClient({ + ...(conf as AAParamType<"0.6" | "0.7">), + erc7579: true + }), ...conf }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "Etherspot", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ - account: await getEtherspotClient(conf), + account: await getEtherspotClient( + conf as AAParamType<"0.6" | "0.7"> + ), ...conf }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "Thirdweb", - getSmartAccountClient: async ( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ - account: await getThirdwebClient({ ...conf }), + account: await getThirdwebClient({ + ...(conf as AAParamType<"0.6" | "0.7">) + }), ...conf }), // getErc7579SmartAccountClient: async < - // entryPointVersion extends "0.6" | "0.7" + // entryPointVersion extends EntryPointVersion // >( // conf: AAParamType // ) => @@ -896,6 +904,7 @@ export const getCoreSmartAccounts = () => [ // }), supportsEntryPointV06: true, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true } ] diff --git a/packages/permissionless/accounts/biconomy/toBiconomySmartAccount.ts b/packages/permissionless/accounts/biconomy/toBiconomySmartAccount.ts index b4ab8b2c..e0095188 100644 --- a/packages/permissionless/accounts/biconomy/toBiconomySmartAccount.ts +++ b/packages/permissionless/accounts/biconomy/toBiconomySmartAccount.ts @@ -2,6 +2,7 @@ import type { Account, Assign, Chain, + JsonRpcAccount, OneOf, Prettify, Transport, @@ -92,7 +93,11 @@ const getAccountInitCode = async ({ } export type ToBiconomySmartAccountParameters = Prettify<{ - client: Client + client: Client< + Transport, + Chain | undefined, + JsonRpcAccount | LocalAccount | undefined + > owners: [ OneOf< | EthereumProvider diff --git a/packages/permissionless/accounts/decodeCalls.test.ts b/packages/permissionless/accounts/decodeCalls.test.ts index ea5a6beb..3dd5ec87 100644 --- a/packages/permissionless/accounts/decodeCalls.test.ts +++ b/packages/permissionless/accounts/decodeCalls.test.ts @@ -336,5 +336,166 @@ describe.each(getCoreSmartAccounts())( throw e } }) + + testWithRpc( + "decodeCalls v0.8 single call with no data", + async ({ rpc }) => { + try { + const smartClient = await getSmartAccountClient({ + entryPoint: { + version: "0.8" + }, + ...rpc + }) + + const callData = await smartClient.account.encodeCalls([ + { + to: zeroAddress, + data: "0x", + value: 0n + } + ]) + + if (!smartClient.account.decodeCalls) { + throw new Error("decodeCalls is not supported") + } + + const decoded = + await smartClient.account.decodeCalls(callData) + + expect(decoded).toEqual([ + { to: zeroAddress, data: "0x", value: 0n } + ]) + } catch (e) { + if ( + e instanceof Error && + e.message === "Kernel ERC7579 is not supported for V06" + ) { + return // Expected error for ERC7579 accounts with v0.6 + } + throw e + } + } + ) + + testWithRpc( + "decodeCalls v0.8 single call with data", + async ({ rpc }) => { + try { + const smartClient = await getSmartAccountClient({ + entryPoint: { + version: "0.8" + }, + ...rpc + }) + + const erc20TransactionData = encodeFunctionData({ + abi: erc20Abi, + functionName: "transfer", + args: [zeroAddress, 1000000000000000000n] + }) + + const callData = await smartClient.account.encodeCalls([ + { + to: zeroAddress, + data: erc20TransactionData, + value: 0n + } + ]) + + if (!smartClient.account.decodeCalls) { + throw new Error("decodeCalls is not supported") + } + + const decoded = + await smartClient.account.decodeCalls(callData) + + expect(decoded).toEqual([ + { + to: zeroAddress, + data: erc20TransactionData, + value: 0n + } + ]) + + const decodeErc20TransactionData = decodeFunctionData({ + abi: erc20Abi, + data: erc20TransactionData + }) + + expect(decodeErc20TransactionData.args).toEqual([ + zeroAddress, + 1000000000000000000n + ]) + } catch (e) { + if ( + e instanceof Error && + e.message === "Kernel ERC7579 is not supported for V06" + ) { + return // Expected error for ERC7579 accounts with v0.6 + } + throw e + } + } + ) + + testWithRpc("decodeCalls v0.8 multiple calls", async ({ rpc }) => { + try { + const smartClient = await getSmartAccountClient({ + entryPoint: { + version: "0.8" + }, + ...rpc + }) + + const erc20TransactionData = encodeFunctionData({ + abi: erc20Abi, + functionName: "transfer", + args: [zeroAddress, 1000000000000000000n] + }) + + const callData = await smartClient.account.encodeCalls([ + { + to: zeroAddress, + data: "0x", + value: 0n + }, + { + to: zeroAddress, + data: erc20TransactionData, + value: 10n + } + ]) + + if (!smartClient.account.decodeCalls) { + throw new Error("decodeCalls is not supported") + } + + const decoded = await smartClient.account.decodeCalls(callData) + + expect(decoded).toEqual([ + { to: zeroAddress, data: "0x", value: 0n }, + { to: zeroAddress, data: erc20TransactionData, value: 10n } + ]) + + const decodeErc20TransactionData = decodeFunctionData({ + abi: erc20Abi, + data: erc20TransactionData + }) + + expect(decodeErc20TransactionData.args).toEqual([ + zeroAddress, + 1000000000000000000n + ]) + } catch (e) { + if ( + e instanceof Error && + e.message === "Kernel ERC7579 is not supported for V06" + ) { + return // Expected error for ERC7579 accounts with v0.6 + } + throw e + } + }) } ) diff --git a/packages/permissionless/accounts/etherspot/toEtherspotSmartAccount.ts b/packages/permissionless/accounts/etherspot/toEtherspotSmartAccount.ts index e66e601f..fbcd2b1d 100644 --- a/packages/permissionless/accounts/etherspot/toEtherspotSmartAccount.ts +++ b/packages/permissionless/accounts/etherspot/toEtherspotSmartAccount.ts @@ -6,6 +6,7 @@ import { type Client, type EIP1193Provider, type Hex, + type JsonRpcAccount, type LocalAccount, type OneOf, type Transport, @@ -160,7 +161,11 @@ const getAccountInitCode = async ({ export type ToEtherspotSmartAccountParameters< entryPointVersion extends "0.6" | "0.7" > = { - client: Client + client: Client< + Transport, + Chain | undefined, + JsonRpcAccount | LocalAccount | undefined + > owners: [ OneOf< | EIP1193Provider diff --git a/packages/permissionless/accounts/kernel/toKernelSmartAccount.ts b/packages/permissionless/accounts/kernel/toKernelSmartAccount.ts index d2281adf..a0fa50a1 100644 --- a/packages/permissionless/accounts/kernel/toKernelSmartAccount.ts +++ b/packages/permissionless/accounts/kernel/toKernelSmartAccount.ts @@ -3,6 +3,7 @@ import type { Account, Assign, Chain, + JsonRpcAccount, OneOf, Transport, WalletClient @@ -383,7 +384,11 @@ export type ToKernelSmartAccountParameters< | WebAuthnAccount > > = { - client: Client + client: Client< + Transport, + Chain | undefined, + JsonRpcAccount | LocalAccount | undefined + > owners: [owner] entryPoint?: { address: Address diff --git a/packages/permissionless/accounts/light/toLightSmartAccount.ts b/packages/permissionless/accounts/light/toLightSmartAccount.ts index 41bad270..46f6af7b 100644 --- a/packages/permissionless/accounts/light/toLightSmartAccount.ts +++ b/packages/permissionless/accounts/light/toLightSmartAccount.ts @@ -5,6 +5,7 @@ import { type Chain, type Client, type Hex, + type JsonRpcAccount, type LocalAccount, type OneOf, type Transport, @@ -75,7 +76,11 @@ export type LightAccountVersion = export type ToLightSmartAccountParameters< entryPointVersion extends "0.6" | "0.7" = "0.7" > = { - client: Client + client: Client< + Transport, + Chain | undefined, + JsonRpcAccount | LocalAccount | undefined + > entryPoint?: { address: Address version: entryPointVersion diff --git a/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts b/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts index 0ca3c2ae..213a1242 100644 --- a/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts +++ b/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts @@ -12,6 +12,7 @@ import { type Address, type Client, type Hex, + type JsonRpcAccount, type LocalAccount, concat, concatHex, @@ -90,7 +91,11 @@ const BICONOMY_ADDRESSES: { } export type ToNexusSmartAccountParameters = Prettify<{ - client: Client + client: Client< + Transport, + Chain | undefined, + JsonRpcAccount | LocalAccount | undefined + > owners: [ OneOf< | EthereumProvider diff --git a/packages/permissionless/accounts/safe/toSafeSmartAccount.ts b/packages/permissionless/accounts/safe/toSafeSmartAccount.ts index 2737010b..96d9ed87 100644 --- a/packages/permissionless/accounts/safe/toSafeSmartAccount.ts +++ b/packages/permissionless/accounts/safe/toSafeSmartAccount.ts @@ -5,6 +5,7 @@ import { type Chain, type Client, type Hex, + type JsonRpcAccount, type LocalAccount, type OneOf, type SignableMessage, @@ -954,7 +955,11 @@ export type ToSafeSmartAccountParameters< entryPointVersion extends "0.6" | "0.7", TErc7579 extends Address | undefined > = { - client: Client + client: Client< + Transport, + Chain | undefined, + JsonRpcAccount | LocalAccount | undefined + > owners: ( | Account | WalletClient diff --git a/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts b/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts index 20836a64..a8ce9807 100644 --- a/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts +++ b/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts @@ -5,6 +5,7 @@ import { type Chain, type Client, type Hex, + type JsonRpcAccount, type LocalAccount, type OneOf, type Transport, @@ -13,13 +14,16 @@ import { encodeFunctionData } from "viem" import { + type EntryPointVersion, type SmartAccount, type SmartAccountImplementation, type UserOperation, entryPoint06Abi, entryPoint07Abi, entryPoint07Address, + entryPoint08Abi, getUserOperationHash, + getUserOperationTypedData, toSmartAccount } from "viem/account-abstraction" import { getChainId, signMessage } from "viem/actions" @@ -67,9 +71,13 @@ const getAccountInitCode = async ( } export type ToSimpleSmartAccountParameters< - entryPointVersion extends "0.6" | "0.7" + entryPointVersion extends EntryPointVersion > = { - client: Client + client: Client< + Transport, + Chain | undefined, + JsonRpcAccount | LocalAccount | undefined + > owner: OneOf< | EthereumProvider | WalletClient @@ -86,36 +94,44 @@ export type ToSimpleSmartAccountParameters< } const getFactoryAddress = ( - entryPointVersion: "0.6" | "0.7", + entryPointVersion: EntryPointVersion, factoryAddress?: Address ): Address => { if (factoryAddress) return factoryAddress - if (entryPointVersion === "0.6") { - return "0x9406Cc6185a346906296840746125a0E44976454" + switch (entryPointVersion) { + case "0.8": + return "0x13E9ed32155810FDbd067D4522C492D6f68E5944" + case "0.7": + return "0x91E60e0613810449d098b0b5Ec8b51A0FE8c8985" + default: + return "0x9406Cc6185a346906296840746125a0E44976454" + } +} + +const getEntryPointAbi = (entryPointVersion: EntryPointVersion) => { + switch (entryPointVersion) { + case "0.8": + return entryPoint08Abi + case "0.7": + return entryPoint07Abi + default: + return entryPoint06Abi } - return "0x91E60e0613810449d098b0b5Ec8b51A0FE8c8985" } export type SimpleSmartAccountImplementation< - entryPointVersion extends "0.6" | "0.7" = "0.7" + entryPointVersion extends EntryPointVersion = "0.7" > = Assign< SmartAccountImplementation< - entryPointVersion extends "0.6" - ? typeof entryPoint06Abi - : typeof entryPoint07Abi, + ReturnType, entryPointVersion - // { - // // entryPoint === ENTRYPOINT_ADDRESS_V06 ? "0.2.2" : "0.3.0-beta" - // abi: entryPointVersion extends "0.6" ? typeof BiconomyAbi - // factory: { abi: typeof FactoryAbi; address: Address } - // } >, { sign: NonNullable } > export type ToSimpleSmartAccountReturnType< - entryPointVersion extends "0.6" | "0.7" = "0.7" + entryPointVersion extends EntryPointVersion = "0.7" > = SmartAccount> /** @@ -124,7 +140,7 @@ export type ToSimpleSmartAccountReturnType< * @returns A Private Key Simple Account. */ export async function toSimpleSmartAccount< - entryPointVersion extends "0.6" | "0.7" + entryPointVersion extends EntryPointVersion >( parameters: ToSimpleSmartAccountParameters ): Promise> { @@ -139,14 +155,17 @@ export async function toSimpleSmartAccount< const localOwner = await toOwner({ owner }) - const entryPoint = { - address: parameters.entryPoint?.address ?? entryPoint07Address, - abi: - (parameters.entryPoint?.version ?? "0.7") === "0.6" - ? entryPoint06Abi - : entryPoint07Abi, - version: parameters.entryPoint?.version ?? "0.7" - } as const + const entryPoint = parameters.entryPoint + ? { + address: parameters.entryPoint.address, + abi: getEntryPointAbi(parameters.entryPoint.version), + version: parameters.entryPoint.version + } + : ({ + address: entryPoint07Address, + abi: getEntryPointAbi("0.7"), + version: "0.7" + } as const) const factoryAddress = getFactoryAddress( entryPoint.version, @@ -192,65 +211,37 @@ export async function toSimpleSmartAccount< }, async encodeCalls(calls) { if (calls.length > 1) { - if (entryPoint.version === "0.6") { + if (entryPoint.version === "0.8") { return encodeFunctionData({ - abi: [ - { - inputs: [ - { - internalType: "address[]", - name: "dest", - type: "address[]" - }, - { - internalType: "bytes[]", - name: "func", - type: "bytes[]" - } - ], - name: "executeBatch", - outputs: [], - stateMutability: "nonpayable", - type: "function" - } - ], + abi: executeBatch08Abi, + functionName: "executeBatch", + args: [ + calls.map((a) => ({ + target: a.to, + value: a.value ?? 0n, + data: a.data ?? "0x" + })) + ] + }) + } + + if (entryPoint.version === "0.7") { + return encodeFunctionData({ + abi: executeBatch07Abi, functionName: "executeBatch", args: [ calls.map((a) => a.to), + calls.map((a) => a.value ?? 0n), calls.map((a) => a.data ?? "0x") ] }) } + return encodeFunctionData({ - abi: [ - { - inputs: [ - { - internalType: "address[]", - name: "dest", - type: "address[]" - }, - { - internalType: "uint256[]", - name: "value", - type: "uint256[]" - }, - { - internalType: "bytes[]", - name: "func", - type: "bytes[]" - } - ], - name: "executeBatch", - outputs: [], - stateMutability: "nonpayable", - type: "function" - } - ], + abi: executeBatch06Abi, functionName: "executeBatch", args: [ calls.map((a) => a.to), - calls.map((a) => a.value ?? 0n), calls.map((a) => a.data ?? "0x") ] }) @@ -262,160 +253,93 @@ export async function toSimpleSmartAccount< throw new Error("No calls to encode") } + // 0.6, 0.7 and 0.8 all use the same for "execute" return encodeFunctionData({ - abi: [ - { - inputs: [ - { - internalType: "address", - name: "dest", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - }, - { - internalType: "bytes", - name: "func", - type: "bytes" - } - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - type: "function" - } - ], + abi: executeSingleAbi, functionName: "execute", args: [call.to, call.value ?? 0n, call.data ?? "0x"] }) }, decodeCalls: async (callData) => { try { - const decodedV6 = decodeFunctionData({ - abi: [ - { - inputs: [ - { - internalType: "address[]", - name: "dest", - type: "address[]" - }, - { - internalType: "bytes[]", - name: "func", - type: "bytes[]" - } - ], - name: "executeBatch", - outputs: [], - stateMutability: "nonpayable", - type: "function" - } - ], - data: callData - }) - const calls: { to: Address data: Hex value?: bigint }[] = [] - for (let i = 0; i < decodedV6.args.length; i++) { - calls.push({ - to: decodedV6.args[0][i], - data: decodedV6.args[1][i], - value: 0n + if (entryPoint.version === "0.8") { + const decodedV8 = decodeFunctionData({ + abi: executeBatch08Abi, + data: callData }) + + for (const call of decodedV8.args[0]) { + calls.push({ + to: call.target, + data: call.data, + value: call.value + }) + } + + return calls } - return calls - } catch (_) { - try { + if (entryPoint.version === "0.7") { const decodedV7 = decodeFunctionData({ - abi: [ - { - inputs: [ - { - internalType: "address[]", - name: "dest", - type: "address[]" - }, - { - internalType: "uint256[]", - name: "value", - type: "uint256[]" - }, - { - internalType: "bytes[]", - name: "func", - type: "bytes[]" - } - ], - name: "executeBatch", - outputs: [], - stateMutability: "nonpayable", - type: "function" - } - ], + abi: executeBatch07Abi, data: callData }) - const calls: { - to: Address - data: Hex - value?: bigint - }[] = [] + const destinations = decodedV7.args[0] + const values = decodedV7.args[1] + const datas = decodedV7.args[2] - for (let i = 0; i < decodedV7.args[0].length; i++) { + for (let i = 0; i < destinations.length; i++) { calls.push({ - to: decodedV7.args[0][i], - value: decodedV7.args[1][i], - data: decodedV7.args[2][i] + to: destinations[i], + data: datas[i], + value: values[i] }) } return calls - } catch (_) { - const decodedSingle = decodeFunctionData({ - abi: [ - { - inputs: [ - { - internalType: "address", - name: "dest", - type: "address" - }, - { - internalType: "uint256", - name: "value", - type: "uint256" - }, - { - internalType: "bytes", - name: "func", - type: "bytes" - } - ], - name: "execute", - outputs: [], - stateMutability: "nonpayable", - type: "function" - } - ], + } + + if (entryPoint.version === "0.6") { + const decodedV6 = decodeFunctionData({ + abi: executeBatch06Abi, data: callData }) - return [ - { - to: decodedSingle.args[0], - value: decodedSingle.args[1], - data: decodedSingle.args[2] - } - ] + + const destinations = decodedV6.args[0] + const datas = decodedV6.args[1] + + for (let i = 0; i < destinations.length; i++) { + calls.push({ + to: destinations[i], + data: datas[i], + value: 0n + }) + } + + return calls } + + return calls + } catch (_) { + const decodedSingle = decodeFunctionData({ + abi: executeSingleAbi, + data: callData + }) + + return [ + { + to: decodedSingle.args[0], + value: decodedSingle.args[1], + data: decodedSingle.args[2] + } + ] } }, async getNonce(args) { @@ -440,6 +364,22 @@ export async function toSimpleSmartAccount< async signUserOperation(parameters) { const { chainId = await getMemoizedChainId(), ...userOperation } = parameters + + // 0.8 Signs using typed data + if (entryPoint.version === "0.8") { + const typedData = getUserOperationTypedData({ + chainId, + entryPointAddress: entryPoint.address, + userOperation: { + ...userOperation, + sender: + userOperation.sender ?? (await this.getAddress()), + signature: "0x" + } + }) + return await localOwner.signTypedData(typedData) + } + return signMessage(client, { account: localOwner, message: { @@ -460,3 +400,109 @@ export async function toSimpleSmartAccount< } }) as Promise> } + +const executeSingleAbi = [ + { + inputs: [ + { + internalType: "address", + name: "dest", + type: "address" + }, + { + internalType: "uint256", + name: "value", + type: "uint256" + }, + { + internalType: "bytes", + name: "func", + type: "bytes" + } + ], + name: "execute", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +] as const + +const executeBatch06Abi = [ + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]" + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]" + } + ], + name: "executeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +] as const + +const executeBatch07Abi = [ + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]" + }, + { + internalType: "uint256[]", + name: "value", + type: "uint256[]" + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]" + } + ], + name: "executeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +] as const + +const executeBatch08Abi = [ + { + type: "function", + name: "executeBatch", + inputs: [ + { + name: "calls", + type: "tuple[]", + internalType: "struct BaseAccount.Call[]", + components: [ + { + name: "target", + type: "address", + internalType: "address" + }, + { + name: "value", + type: "uint256", + internalType: "uint256" + }, + { + name: "data", + type: "bytes", + internalType: "bytes" + } + ] + } + ], + outputs: [], + stateMutability: "nonpayable" + } +] as const diff --git a/packages/permissionless/accounts/thirdweb/toThirdwebSmartAccount.ts b/packages/permissionless/accounts/thirdweb/toThirdwebSmartAccount.ts index 9217d046..ab56bc98 100644 --- a/packages/permissionless/accounts/thirdweb/toThirdwebSmartAccount.ts +++ b/packages/permissionless/accounts/thirdweb/toThirdwebSmartAccount.ts @@ -4,6 +4,7 @@ import type { Assign, Chain, Client, + JsonRpcAccount, LocalAccount, OneOf, Transport, @@ -53,7 +54,11 @@ export const THIRDWEB_ADDRESSES = { export type ToThirdwebSmartAccountParameters< entryPointVersion extends "0.6" | "0.7" = "0.7" > = { - client: Client + client: Client< + Transport, + Chain | undefined, + JsonRpcAccount | LocalAccount | undefined + > owner: OneOf< | EthereumProvider | WalletClient diff --git a/packages/permissionless/accounts/trust/toTrustSmartAccount.ts b/packages/permissionless/accounts/trust/toTrustSmartAccount.ts index b129f857..3a4b2181 100644 --- a/packages/permissionless/accounts/trust/toTrustSmartAccount.ts +++ b/packages/permissionless/accounts/trust/toTrustSmartAccount.ts @@ -5,6 +5,7 @@ import { type Chain, type Client, type Hex, + type JsonRpcAccount, type LocalAccount, type OneOf, type Transport, @@ -67,7 +68,11 @@ export const TRUST_ADDRESSES: { } export type ToTrustSmartAccountParameters = { - client: Client + client: Client< + Transport, + Chain | undefined, + JsonRpcAccount | LocalAccount | undefined + > owner: OneOf< | EthereumProvider | WalletClient diff --git a/packages/permissionless/actions/pimlico/getTokenQuotes.test.ts b/packages/permissionless/actions/pimlico/getTokenQuotes.test.ts index db6f26ca..822fde63 100644 --- a/packages/permissionless/actions/pimlico/getTokenQuotes.test.ts +++ b/packages/permissionless/actions/pimlico/getTokenQuotes.test.ts @@ -7,7 +7,34 @@ import { getPimlicoClient } from "../../../permissionless-test/src/utils" import { getTokenQuotes } from "./getTokenQuotes" describe("getTokenQuotes", () => { - testWithRpc("getTokenQuotes", async ({ rpc }) => { + testWithRpc("getTokenQuotes v0.6", async ({ rpc }) => { + const pimlicoBundlerClient = getPimlicoClient({ + entryPointVersion: "0.6", + altoRpc: rpc.paymasterRpc + }) + + const token = getAddress("0xffffffffffffffffffffffffffffffffffffffff") + + const quotes = await getTokenQuotes(pimlicoBundlerClient, { + tokens: [token], + entryPointAddress: entryPoint07Address, + chain: foundry + }) + + expect(quotes).toBeTruthy() + expect(Array.isArray(quotes)).toBe(true) + expect(quotes[0].token).toBeTruthy() + expect(isAddress(quotes[0].token)) + expect(quotes[0].token).toEqual(token) + expect(quotes[0].paymaster).toBeTruthy() + expect(isAddress(quotes[0].paymaster)) + expect(quotes[0].exchangeRate).toBeTruthy() + expect(quotes[0].exchangeRate).toBeGreaterThan(0n) + expect(quotes[0].postOpGas).toBeTruthy() + expect(quotes[0].postOpGas).toBeGreaterThan(0n) + }) + + testWithRpc("getTokenQuotes v0.7", async ({ rpc }) => { const pimlicoBundlerClient = getPimlicoClient({ entryPointVersion: "0.7", altoRpc: rpc.paymasterRpc @@ -33,4 +60,31 @@ describe("getTokenQuotes", () => { expect(quotes[0].postOpGas).toBeTruthy() expect(quotes[0].postOpGas).toBeGreaterThan(0n) }) + + testWithRpc("getTokenQuotes v0.8", async ({ rpc }) => { + const pimlicoBundlerClient = getPimlicoClient({ + entryPointVersion: "0.8", + altoRpc: rpc.paymasterRpc + }) + + const token = getAddress("0xffffffffffffffffffffffffffffffffffffffff") + + const quotes = await getTokenQuotes(pimlicoBundlerClient, { + tokens: [token], + entryPointAddress: entryPoint07Address, + chain: foundry + }) + + expect(quotes).toBeTruthy() + expect(Array.isArray(quotes)).toBe(true) + expect(quotes[0].token).toBeTruthy() + expect(isAddress(quotes[0].token)) + expect(quotes[0].token).toEqual(token) + expect(quotes[0].paymaster).toBeTruthy() + expect(isAddress(quotes[0].paymaster)) + expect(quotes[0].exchangeRate).toBeTruthy() + expect(quotes[0].exchangeRate).toBeGreaterThan(0n) + expect(quotes[0].postOpGas).toBeTruthy() + expect(quotes[0].postOpGas).toBeGreaterThan(0n) + }) }) diff --git a/packages/permissionless/actions/pimlico/getUserOperationGasPrice.test.ts b/packages/permissionless/actions/pimlico/getUserOperationGasPrice.test.ts index 196a3f35..f3177c95 100644 --- a/packages/permissionless/actions/pimlico/getUserOperationGasPrice.test.ts +++ b/packages/permissionless/actions/pimlico/getUserOperationGasPrice.test.ts @@ -12,6 +12,56 @@ describe("getUserOperationGasPrice", () => { const gasPrice = await getUserOperationGasPrice(pimlicoBundlerClient) + expect(gasPrice).toBeTruthy() + expect(gasPrice.slow).toBeTruthy() + expect(gasPrice.standard).toBeTruthy() + expect(gasPrice.fast).toBeTruthy() + expect(typeof gasPrice.slow.maxFeePerGas).toBe("bigint") + expect(gasPrice.slow.maxFeePerGas).toBeGreaterThan(0n) + expect(typeof gasPrice.slow.maxPriorityFeePerGas).toBe("bigint") + expect(gasPrice.slow.maxPriorityFeePerGas).toBeGreaterThan(0n) + expect(typeof gasPrice.standard.maxFeePerGas).toBe("bigint") + expect(gasPrice.standard.maxFeePerGas).toBeGreaterThan(0n) + expect(typeof gasPrice.standard.maxPriorityFeePerGas).toBe("bigint") + expect(gasPrice.standard.maxPriorityFeePerGas).toBeGreaterThan(0n) + expect(typeof gasPrice.fast.maxFeePerGas).toBe("bigint") + expect(gasPrice.fast.maxFeePerGas).toBeGreaterThan(0n) + expect(typeof gasPrice.fast.maxPriorityFeePerGas).toBe("bigint") + expect(gasPrice.fast.maxPriorityFeePerGas).toBeGreaterThan(0n) + }) + testWithRpc("getUserOperationGasPrice", async ({ rpc }) => { + const pimlicoBundlerClient = getPimlicoClient({ + entryPointVersion: "0.7", + altoRpc: rpc.altoRpc + }) + + const gasPrice = await getUserOperationGasPrice(pimlicoBundlerClient) + + expect(gasPrice).toBeTruthy() + expect(gasPrice.slow).toBeTruthy() + expect(gasPrice.standard).toBeTruthy() + expect(gasPrice.fast).toBeTruthy() + expect(typeof gasPrice.slow.maxFeePerGas).toBe("bigint") + expect(gasPrice.slow.maxFeePerGas).toBeGreaterThan(0n) + expect(typeof gasPrice.slow.maxPriorityFeePerGas).toBe("bigint") + expect(gasPrice.slow.maxPriorityFeePerGas).toBeGreaterThan(0n) + expect(typeof gasPrice.standard.maxFeePerGas).toBe("bigint") + expect(gasPrice.standard.maxFeePerGas).toBeGreaterThan(0n) + expect(typeof gasPrice.standard.maxPriorityFeePerGas).toBe("bigint") + expect(gasPrice.standard.maxPriorityFeePerGas).toBeGreaterThan(0n) + expect(typeof gasPrice.fast.maxFeePerGas).toBe("bigint") + expect(gasPrice.fast.maxFeePerGas).toBeGreaterThan(0n) + expect(typeof gasPrice.fast.maxPriorityFeePerGas).toBe("bigint") + expect(gasPrice.fast.maxPriorityFeePerGas).toBeGreaterThan(0n) + }) + testWithRpc("getUserOperationGasPrice", async ({ rpc }) => { + const pimlicoBundlerClient = getPimlicoClient({ + entryPointVersion: "0.8", + altoRpc: rpc.altoRpc + }) + + const gasPrice = await getUserOperationGasPrice(pimlicoBundlerClient) + expect(gasPrice).toBeTruthy() expect(gasPrice.slow).toBeTruthy() expect(gasPrice.standard).toBeTruthy() diff --git a/packages/permissionless/actions/pimlico/getUserOperationStatus.test.ts b/packages/permissionless/actions/pimlico/getUserOperationStatus.test.ts index 5aa2b807..34103134 100644 --- a/packages/permissionless/actions/pimlico/getUserOperationStatus.test.ts +++ b/packages/permissionless/actions/pimlico/getUserOperationStatus.test.ts @@ -119,6 +119,68 @@ describe("getUserOperationStatus", () => { hash: opHash }) + expect(receipt?.receipt.transactionHash).toBe( + userOperationReceipt?.receipt.transactionHash + ) + const userOperationStatus = await getUserOperationStatus( + bundlerClient, + { + hash: opHash + } + ) + expect(userOperationStatus).not.toBeNull() + expect(userOperationStatus).not.toBeUndefined() + expect(userOperationStatus.status).toBe("included") + expect(userOperationStatus.transactionHash).toBe( + userOperationReceipt?.receipt.transactionHash + ) + }) + testWithRpc("getUserOperationStatus_V07", async ({ rpc }) => { + const { altoRpc } = rpc + + const bundlerClient = getPimlicoClient({ + entryPointVersion: "0.8", + altoRpc: altoRpc + }) + + const simpleAccountClient = getBundlerClient({ + account: await getSimpleAccountClient({ + ...rpc, + entryPoint: { + version: "0.8" + } + }), + entryPoint: { + version: "0.8" + }, + ...rpc + }) + + const opHash = await simpleAccountClient.sendUserOperation({ + calls: [ + { + to: zeroAddress, + data: "0x", + value: 0n + } + ] + }) + + expect(isHash(opHash)).toBe(true) + + const userOperationReceipt = + await bundlerClient.waitForUserOperationReceipt({ + hash: opHash, + timeout: 100000 + }) + expect(userOperationReceipt).not.toBeNull() + expect(userOperationReceipt?.userOpHash).toBe(opHash) + expect(userOperationReceipt?.receipt.transactionHash).toBeTruthy() + + const receipt = await bundlerClient.getUserOperationReceipt({ + hash: opHash + }) + expect(receipt?.receipt.transactionHash).toBe( userOperationReceipt?.receipt.transactionHash ) diff --git a/packages/permissionless/actions/pimlico/sponsorUserOperation.test.ts b/packages/permissionless/actions/pimlico/sponsorUserOperation.test.ts index aed29fe3..2810180e 100644 --- a/packages/permissionless/actions/pimlico/sponsorUserOperation.test.ts +++ b/packages/permissionless/actions/pimlico/sponsorUserOperation.test.ts @@ -110,4 +110,55 @@ describe("sponsorUserOperation", () => { userOperationReceipt?.receipt.transactionHash ) }) + + testWithRpc("sponsorUserOperation_V08", async ({ rpc }) => { + const { altoRpc } = rpc + + const bundlerClient = getPimlicoClient({ + entryPointVersion: "0.8", + altoRpc: altoRpc + }) + + const simpleAccountClient = getBundlerClient({ + account: await getSimpleAccountClient({ + ...rpc, + entryPoint: { + version: "0.8" + } + }), + entryPoint: { + version: "0.8" + }, + ...rpc + }) + + const opHash = await simpleAccountClient.sendUserOperation({ + calls: [ + { + to: zeroAddress, + data: "0x", + value: 0n + } + ] + }) + + expect(isHash(opHash)).toBe(true) + + const userOperationReceipt = + await bundlerClient.waitForUserOperationReceipt({ + hash: opHash, + timeout: 100000 + }) + expect(userOperationReceipt).not.toBeNull() + expect(userOperationReceipt?.userOpHash).toBe(opHash) + expect(userOperationReceipt?.receipt.transactionHash).toBeTruthy() + + const receipt = await bundlerClient.getUserOperationReceipt({ + hash: opHash + }) + + expect(receipt?.receipt.transactionHash).toBe( + userOperationReceipt?.receipt.transactionHash + ) + }) }) diff --git a/packages/permissionless/actions/pimlico/sponsorUserOperation.ts b/packages/permissionless/actions/pimlico/sponsorUserOperation.ts index 3bf78cf1..e7a96bf6 100644 --- a/packages/permissionless/actions/pimlico/sponsorUserOperation.ts +++ b/packages/permissionless/actions/pimlico/sponsorUserOperation.ts @@ -8,7 +8,7 @@ import type { PartialBy, Transport } from "viem" -import type { UserOperation } from "viem/account-abstraction" +import type { EntryPointVersion, UserOperation } from "viem/account-abstraction" import type { PimlicoRpcSchema } from "../../types/pimlico.js" import { deepHexlify } from "../../utils/deepHexlify.js" @@ -20,7 +20,7 @@ type PaymasterContext = { } export type PimlicoSponsorUserOperationParameters< - entryPointVersion extends "0.6" | "0.7" + entryPointVersion extends EntryPointVersion > = { userOperation: OneOf< | (entryPointVersion extends "0.6" @@ -51,7 +51,7 @@ export type PimlicoSponsorUserOperationParameters< } export type SponsorUserOperationReturnType< - entryPointVersion extends "0.6" | "0.7" = "0.7" + entryPointVersion extends EntryPointVersion = "0.7" > = OneOf< | (entryPointVersion extends "0.6" ? { @@ -75,7 +75,7 @@ export type SponsorUserOperationReturnType< > export const sponsorUserOperation = async < - entryPointVersion extends "0.6" | "0.7" = "0.6" | "0.7" + entryPointVersion extends EntryPointVersion = EntryPointVersion >( client: Client< Transport, diff --git a/packages/permissionless/actions/pimlico/validateSponsorshipPolicies.test.ts b/packages/permissionless/actions/pimlico/validateSponsorshipPolicies.test.ts index ad5561de..0d701f11 100644 --- a/packages/permissionless/actions/pimlico/validateSponsorshipPolicies.test.ts +++ b/packages/permissionless/actions/pimlico/validateSponsorshipPolicies.test.ts @@ -1,4 +1,8 @@ -import { entryPoint06Address } from "viem/account-abstraction" +import { + entryPoint06Address, + entryPoint07Address, + entryPoint08Address +} from "viem/account-abstraction" import { describe, expect } from "vitest" import { testWithRpc } from "../../../permissionless-test/src/testWithRpc" import { @@ -9,7 +13,7 @@ import { import { validateSponsorshipPolicies } from "./validateSponsorshipPolicies" describe("validateSponsorshipPolicies", () => { - testWithRpc("Validating sponsorship policies", async ({ rpc }) => { + testWithRpc("Validating sponsorship policies V06", async ({ rpc }) => { const { paymasterRpc } = rpc const simpleAccountClient = getBundlerClient({ @@ -54,4 +58,96 @@ describe("validateSponsorshipPolicies", () => { expect(Array.isArray(policies)).toBe(true) expect(policies.length).toBe(1) }) + + testWithRpc("Validating sponsorship policies V07", async ({ rpc }) => { + const { paymasterRpc } = rpc + + const simpleAccountClient = getBundlerClient({ + account: await getSimpleAccountClient({ + ...rpc, + entryPoint: { + version: "0.7" + } + }), + entryPoint: { + version: "0.7" + }, + ...rpc + }) + + const userOperation = await simpleAccountClient.prepareUserOperation({ + calls: [ + { + to: "0x5af0d9827e0c53e4799bb226655a1de152a425a5", + data: "0x", + value: 0n + } + ] + }) + + const pimlicoPaymasterClient = getPimlicoClient({ + entryPointVersion: "0.7", + altoRpc: paymasterRpc + }) + + const policies = await validateSponsorshipPolicies( + pimlicoPaymasterClient, + { + entryPointAddress: entryPoint07Address, + userOperation: userOperation, + sponsorshipPolicyIds: ["sp_crazy_kangaroo"] + } + ) + + expect(policies).toBeTruthy() + expect(policies.length).toBeGreaterThan(0) + expect(Array.isArray(policies)).toBe(true) + expect(policies.length).toBe(1) + }) + + testWithRpc("Validating sponsorship policies V08", async ({ rpc }) => { + const { paymasterRpc } = rpc + + const simpleAccountClient = getBundlerClient({ + account: await getSimpleAccountClient({ + ...rpc, + entryPoint: { + version: "0.8" + } + }), + entryPoint: { + version: "0.8" + }, + ...rpc + }) + + const userOperation = await simpleAccountClient.prepareUserOperation({ + calls: [ + { + to: "0x5af0d9827e0c53e4799bb226655a1de152a425a5", + data: "0x", + value: 0n + } + ] + }) + + const pimlicoPaymasterClient = getPimlicoClient({ + entryPointVersion: "0.8", + altoRpc: paymasterRpc + }) + + const policies = await validateSponsorshipPolicies( + pimlicoPaymasterClient, + { + entryPointAddress: entryPoint08Address, + userOperation: userOperation, + sponsorshipPolicyIds: ["sp_crazy_kangaroo"] + } + ) + + expect(policies).toBeTruthy() + expect(policies.length).toBeGreaterThan(0) + expect(Array.isArray(policies)).toBe(true) + expect(policies.length).toBe(1) + }) }) diff --git a/packages/permissionless/actions/public/getAccountNonce.test.ts b/packages/permissionless/actions/public/getAccountNonce.test.ts index ae0ed69d..7f8c406c 100644 --- a/packages/permissionless/actions/public/getAccountNonce.test.ts +++ b/packages/permissionless/actions/public/getAccountNonce.test.ts @@ -65,6 +65,33 @@ describe("getAccountNonce", () => { address: simpleAccountClient.account.address }) + expect(nonce).toBe(0n) + }) + testWithRpc("getAccountNonce_V08", async ({ rpc }) => { + const { anvilRpc } = rpc + + const client = createPublicClient({ + transport: http(anvilRpc) + }) + + const simpleAccountClient = getBundlerClient({ + account: await getSimpleAccountClient({ + ...rpc, + entryPoint: { + version: "0.8" + } + }), + entryPoint: { + version: "0.8" + }, + ...rpc + }) + + const nonce = await getAccountNonce(client, { + entryPointAddress: entryPoint07Address, + address: simpleAccountClient.account.address + }) + expect(nonce).toBe(0n) }) }) diff --git a/packages/permissionless/actions/public/getSenderAddress.test.ts b/packages/permissionless/actions/public/getSenderAddress.test.ts index 956b9671..b405868b 100644 --- a/packages/permissionless/actions/public/getSenderAddress.test.ts +++ b/packages/permissionless/actions/public/getSenderAddress.test.ts @@ -1,7 +1,8 @@ import { http, concatHex, createPublicClient } from "viem" import { entryPoint06Address, - entryPoint07Address + entryPoint07Address, + entryPoint08Address } from "viem/account-abstraction" import { describe, expect } from "vitest" import { testWithRpc } from "../../../permissionless-test/src/testWithRpc" @@ -113,6 +114,41 @@ describe("getSenderAddress", () => { factoryData }) + expect(address).toBe(simpleAccountClient.account.address) + }) + testWithRpc("getSenderAddress_V08", async ({ rpc }) => { + const { anvilRpc, altoRpc } = rpc + + const client = createPublicClient({ + transport: http(anvilRpc) + }) + + const simpleAccountClient = getBundlerClient({ + account: await getSimpleAccountClient({ + ...rpc, + entryPoint: { + version: "0.8" + } + }), + entryPoint: { + version: "0.8" + }, + ...rpc + }) + + const { factory, factoryData } = + await simpleAccountClient.account.getFactoryArgs() + + if (!factory || !factoryData) { + throw new Error("Factory or factoryData not found") + } + + const address = await getSenderAddress(client, { + entryPointAddress: entryPoint08Address, + factory, + factoryData + }) + expect(address).toBe(simpleAccountClient.account.address) }) }) diff --git a/packages/permissionless/actions/smartAccount/sendTransaction.test.ts b/packages/permissionless/actions/smartAccount/sendTransaction.test.ts index 7c908977..28131d0b 100644 --- a/packages/permissionless/actions/smartAccount/sendTransaction.test.ts +++ b/packages/permissionless/actions/smartAccount/sendTransaction.test.ts @@ -13,7 +13,8 @@ describe.each(getCoreSmartAccounts())( ({ getSmartAccountClient, supportsEntryPointV06, - supportsEntryPointV07 + supportsEntryPointV07, + supportsEntryPointV08 }) => { testWithRpc.skipIf(!supportsEntryPointV06)( "sendTransaction_v06", @@ -117,6 +118,58 @@ describe.each(getCoreSmartAccounts())( } ) + testWithRpc.skipIf(!supportsEntryPointV08)( + "sendTransaction_v08", + async ({ rpc }) => { + const { anvilRpc } = rpc + + const smartClient = await getSmartAccountClient({ + entryPoint: { + version: "0.8" + }, + privateKey: + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", // anvil private key + ...rpc + }) + + const transactionHash = await sendTransaction(smartClient, { + to: zeroAddress, + data: "0x", + value: 0n + }) + + expect(transactionHash).toBeTruthy() + + const publicClient = getPublicClient(anvilRpc) + + const receipt = await publicClient.getTransactionReceipt({ + hash: transactionHash + }) + + expect(receipt).toBeTruthy() + expect(receipt.transactionHash).toBe(transactionHash) + expect(receipt.status).toBe("success") + + const transactionHash2 = await sendTransaction(smartClient, { + to: zeroAddress, + data: "0x", + value: 0n + }) + + // -- second transaction after deployment + + expect(transactionHash2).toBeTruthy() + + const receipt2 = await publicClient.getTransactionReceipt({ + hash: transactionHash2 + }) + + expect(receipt2).toBeTruthy() + expect(receipt2.transactionHash).toBe(transactionHash2) + expect(receipt2.status).toBe("success") + } + ) + testWithRpc.skipIf(!supportsEntryPointV06)( "sendTransaction_v06 post deployment", async ({ rpc }) => { @@ -191,6 +244,8 @@ describe.each(getCoreSmartAccounts())( entryPoint: { version: "0.7" }, + privateKey: + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", // anvil private key ...rpc }) @@ -243,5 +298,70 @@ describe.each(getCoreSmartAccounts())( expect(receipt2.status).toBe("success") } ) + + testWithRpc.skipIf(!supportsEntryPointV08)( + "sendTransaction_v08 post deployment", + async ({ rpc }) => { + const { anvilRpc } = rpc + + await (async () => { + const smartClient = await getSmartAccountClient({ + entryPoint: { + version: "0.8" + }, + privateKey: + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", // anvil private key + ...rpc + }) + + const transactionHash = await sendTransaction(smartClient, { + to: zeroAddress, + data: "0x", + value: 0n + }) + + expect(transactionHash).toBeTruthy() + + const publicClient = getPublicClient(anvilRpc) + + const receipt = await publicClient.getTransactionReceipt({ + hash: transactionHash + }) + + expect(receipt).toBeTruthy() + expect(receipt.transactionHash).toBe(transactionHash) + expect(receipt.status).toBe("success") + })() + + const smartClient = await getSmartAccountClient({ + entryPoint: { + version: "0.8" + }, + privateKey: + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", // anvil private key + ...rpc + }) + + const publicClient = getPublicClient(anvilRpc) + + const transactionHash2 = await sendTransaction(smartClient, { + to: zeroAddress, + data: "0x", + value: 0n + }) + + // -- second transaction after deployment + + expect(transactionHash2).toBeTruthy() + + const receipt2 = await publicClient.getTransactionReceipt({ + hash: transactionHash2 + }) + + expect(receipt2).toBeTruthy() + expect(receipt2.transactionHash).toBe(transactionHash2) + expect(receipt2.status).toBe("success") + } + ) } ) diff --git a/packages/permissionless/actions/smartAccount/signMessage.test.ts b/packages/permissionless/actions/smartAccount/signMessage.test.ts index b20a18af..2ac6741e 100644 --- a/packages/permissionless/actions/smartAccount/signMessage.test.ts +++ b/packages/permissionless/actions/smartAccount/signMessage.test.ts @@ -14,6 +14,7 @@ describe.each(getCoreSmartAccounts())( isEip1271Compliant, supportsEntryPointV06, supportsEntryPointV07, + supportsEntryPointV08, name }) => { testWithRpc.skipIf(isEip1271Compliant || !supportsEntryPointV06)( @@ -131,5 +132,63 @@ describe.each(getCoreSmartAccounts())( expect(isVerified).toBeTruthy() } ) + + testWithRpc.skipIf(isEip1271Compliant || !supportsEntryPointV08)( + "not isEip1271Compliant_v08", + async ({ rpc }) => { + const smartClient = await getSmartAccountClient({ + entryPoint: { + version: "0.8" + }, + ...rpc + }) + + await expect(async () => + signMessage(smartClient, { + message: "slowly and steadily burning the private keys" + }) + ).rejects.toThrow() + } + ) + + testWithRpc.skipIf(!isEip1271Compliant || !supportsEntryPointV08)( + "isEip1271Compliant_v08", + async ({ rpc }) => { + const { anvilRpc } = rpc + + const smartClient = await getSmartAccountClient({ + entryPoint: { + version: "0.8" + }, + ...rpc + }) + + if (name === "LightAccount 2.0.0") { + // LightAccount 2.0.0 doesn't support EIP-1271 + return + } + + if (name.includes("Safe 7579")) { + // Due to 7579 launchpad, we can't verify the signature before deploying the account. + await smartClient.sendTransaction({ + calls: [{ to: zeroAddress, value: 0n }] + }) + } + + const signature = await signMessage(smartClient, { + message: "slowly and steadily burning the private keys" + }) + + const publicClient = getPublicClient(anvilRpc) + + const isVerified = await publicClient.verifyMessage({ + address: smartClient.account.address, + message: "slowly and steadily burning the private keys", + signature + }) + + expect(isVerified).toBeTruthy() + } + ) } ) diff --git a/packages/permissionless/actions/smartAccount/signTypedData.test.ts b/packages/permissionless/actions/smartAccount/signTypedData.test.ts index 9b4e9a76..d4c3e697 100644 --- a/packages/permissionless/actions/smartAccount/signTypedData.test.ts +++ b/packages/permissionless/actions/smartAccount/signTypedData.test.ts @@ -48,6 +48,7 @@ describe.each(getCoreSmartAccounts())( isEip1271Compliant, supportsEntryPointV06, supportsEntryPointV07, + supportsEntryPointV08, name }) => { testWithRpc.skipIf(isEip1271Compliant || !supportsEntryPointV06)( @@ -144,5 +145,58 @@ describe.each(getCoreSmartAccounts())( expect(isVerified).toBeTruthy() } ) + + testWithRpc.skipIf(isEip1271Compliant || !supportsEntryPointV08)( + "not isEip1271Compliant_v08", + async ({ rpc }) => { + const smartClient = await getSmartAccountClient({ + entryPoint: { + version: "0.8" + }, + ...rpc + }) + + await expect(async () => + signTypedData(smartClient, typedData) + ).rejects.toThrow() + } + ) + + testWithRpc.skipIf(!isEip1271Compliant || !supportsEntryPointV08)( + "isEip1271Compliant_v08", + async ({ rpc }) => { + const { anvilRpc } = rpc + + const smartClient = await getSmartAccountClient({ + entryPoint: { + version: "0.8" + }, + ...rpc + }) + + const signature = await signTypedData(smartClient, typedData) + + const publicClient = getPublicClient(anvilRpc) + + if (name === "LightAccount 2.0.0") { + // LightAccount 2.0.0 doesn't support EIP-1271 + return + } + + if (name.includes("Safe 7579")) { + // Due to 7579 launchpad, we can't verify the signature before deploying the account. + await smartClient.sendTransaction({ + calls: [{ to: zeroAddress, value: 0n }] + }) + } + const isVerified = await publicClient.verifyTypedData({ + ...typedData, + address: smartClient.account.address, + signature + }) + + expect(isVerified).toBeTruthy() + } + ) } ) diff --git a/packages/permissionless/clients/decorators/pimlico.ts b/packages/permissionless/clients/decorators/pimlico.ts index cdaa5d66..4390218d 100644 --- a/packages/permissionless/clients/decorators/pimlico.ts +++ b/packages/permissionless/clients/decorators/pimlico.ts @@ -1,4 +1,5 @@ import type { Address, Chain, Client, Hash, Prettify, Transport } from "viem" +import type { EntryPointVersion } from "viem/account-abstraction" import { type GetTokenQuotesParameters, type GetTokenQuotesReturnType, @@ -26,7 +27,7 @@ import { export type PimlicoActions< TChain extends Chain | undefined, - entryPointVersion extends "0.6" | "0.7" = "0.6" | "0.7" + entryPointVersion extends EntryPointVersion = EntryPointVersion > = { /** * Returns the live gas prices that you can use to send a user operation. @@ -126,7 +127,7 @@ export type PimlicoActions< } export const pimlicoActions = - ({ + ({ entryPoint }: { entryPoint: { address: Address; version: entryPointVersion } diff --git a/packages/permissionless/clients/pimlico.ts b/packages/permissionless/clients/pimlico.ts index 5f41552b..28f99508 100644 --- a/packages/permissionless/clients/pimlico.ts +++ b/packages/permissionless/clients/pimlico.ts @@ -11,6 +11,7 @@ import type { import { createClient } from "viem" import { type BundlerActions, + type EntryPointVersion, type PaymasterActions, type SmartAccount, bundlerActions, @@ -21,7 +22,7 @@ import type { PimlicoRpcSchema } from "../types/pimlico.js" import { type PimlicoActions, pimlicoActions } from "./decorators/pimlico.js" export type PimlicoClient< - entryPointVersion extends "0.6" | "0.7" = "0.7" | "0.6", + entryPointVersion extends EntryPointVersion = EntryPointVersion, transport extends Transport = Transport, chain extends Chain | undefined = Chain | undefined, account extends SmartAccount | undefined = SmartAccount | undefined, @@ -47,7 +48,7 @@ export type PimlicoClient< > export type PimlicoClientConfig< - entryPointVersion extends "0.6" | "0.7" = "0.7" | "0.6", + entryPointVersion extends EntryPointVersion = EntryPointVersion, transport extends Transport = Transport, chain extends Chain | undefined = Chain | undefined, account extends SmartAccount | undefined = SmartAccount | undefined, @@ -72,7 +73,7 @@ export type PimlicoClientConfig< } export function createPimlicoClient< - entryPointVersion extends "0.6" | "0.7" = "0.7", + entryPointVersion extends EntryPointVersion = "0.7", transport extends Transport = Transport, chain extends Chain | undefined = undefined, account extends SmartAccount | undefined = SmartAccount | undefined, diff --git a/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts b/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts index c00e3ed6..aa99fa67 100644 --- a/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts +++ b/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts @@ -1,23 +1,24 @@ import { http, parseEther, zeroAddress } from "viem" import { entryPoint06Address, - entryPoint07Address + entryPoint07Address, + entryPoint08Address } from "viem/account-abstraction" import { foundry } from "viem/chains" import { describe, expect } from "vitest" import { - ERC20_ADDRESS, + erc20Address, sudoMintTokens, tokenBalanceOf -} from "../../../../mock-paymaster/helpers/erc20-utils.ts" -import { testWithRpc } from "../../../../permissionless-test/src/testWithRpc.ts" +} from "../../../../mock-paymaster/helpers/erc20-utils" +import { testWithRpc } from "../../../../permissionless-test/src/testWithRpc" import { getCoreSmartAccounts, getPublicClient } from "../../../../permissionless-test/src/utils" -import { createSmartAccountClient } from "../../../clients/createSmartAccountClient.ts" -import { createPimlicoClient } from "../../../clients/pimlico.ts" -import { prepareUserOperationForErc20Paymaster } from "./prepareUserOperationForErc20Paymaster.ts" +import { createSmartAccountClient } from "../../../clients/createSmartAccountClient" +import { createPimlicoClient } from "../../../clients/pimlico" +import { prepareUserOperationForErc20Paymaster } from "./prepareUserOperationForErc20Paymaster" describe.each(getCoreSmartAccounts())( "prepareUserOperationForErc20Paymaster $name", @@ -25,9 +26,10 @@ describe.each(getCoreSmartAccounts())( getSmartAccountClient, supportsEntryPointV06, supportsEntryPointV07, + supportsEntryPointV08, name }) => { - testWithRpc.skipIf(!supportsEntryPointV06)( + testWithRpc.skipIf(!supportsEntryPointV06 || name === "Kernel 0.2.1")( "prepareUserOperationForErc20Paymaster_v06", async ({ rpc }) => { const { anvilRpc } = rpc @@ -84,7 +86,7 @@ describe.each(getCoreSmartAccounts())( } ], paymasterContext: { - token: ERC20_ADDRESS + token: erc20Address } }) @@ -96,21 +98,17 @@ describe.each(getCoreSmartAccounts())( expect(receipt).toBeTruthy() expect(receipt).toBeTruthy() - if (name !== "Kernel 0.2.1") { - expect(receipt.success).toBeTruthy() - const FINAL_TOKEN_BALANCE = await tokenBalanceOf( - smartAccountClient.account.address, - rpc.anvilRpc - ) - const FINAL_ETH_BALANCE = await publicClient.getBalance({ - address: smartAccountClient.account.address - }) + expect(receipt.success).toBeTruthy() + const FINAL_TOKEN_BALANCE = await tokenBalanceOf( + smartAccountClient.account.address, + rpc.anvilRpc + ) + const FINAL_ETH_BALANCE = await publicClient.getBalance({ + address: smartAccountClient.account.address + }) - expect(FINAL_TOKEN_BALANCE).toBeLessThan( - INITIAL_TOKEN_BALANCE - ) // Token balance should be deducted - expect(FINAL_ETH_BALANCE).toEqual(INTIAL_ETH_BALANCE) // There should be no ETH balance change - } + expect(FINAL_TOKEN_BALANCE).toBeLessThan(INITIAL_TOKEN_BALANCE) // Token balance should be deducted + expect(FINAL_ETH_BALANCE).toEqual(INTIAL_ETH_BALANCE) // There should be no ETH balance change } ) @@ -171,7 +169,90 @@ describe.each(getCoreSmartAccounts())( } ], paymasterContext: { - token: ERC20_ADDRESS + token: erc20Address + } + }) + + const receipt = + await smartAccountClient.waitForUserOperationReceipt({ + hash: opHash + }) + + expect(receipt).toBeTruthy() + expect(receipt).toBeTruthy() + expect(receipt.success).toBeTruthy() + + const FINAL_TOKEN_BALANCE = await tokenBalanceOf( + smartAccountClient.account.address, + rpc.anvilRpc + ) + const FINAL_ETH_BALANCE = await publicClient.getBalance({ + address: smartAccountClient.account.address + }) + + expect(FINAL_TOKEN_BALANCE).toBeLessThan(INITIAL_TOKEN_BALANCE) // Token balance should be deducted + expect(FINAL_ETH_BALANCE).toEqual(INTIAL_ETH_BALANCE) // There should be no ETH balance change + } + ) + + testWithRpc.skipIf(!supportsEntryPointV08)( + "prepareUserOperationForErc20Paymaster_v08", + async ({ rpc }) => { + const { anvilRpc } = rpc + + const account = ( + await getSmartAccountClient({ + entryPoint: { + version: "0.8" + }, + ...rpc + }) + ).account + + const publicClient = getPublicClient(anvilRpc) + + const pimlicoClient = createPimlicoClient({ + transport: http(rpc.paymasterRpc), + entryPoint: { + address: entryPoint08Address, + version: "0.8" + } + }) + + const smartAccountClient = createSmartAccountClient({ + // @ts-ignore + client: getPublicClient(anvilRpc), + account, + paymaster: pimlicoClient, + chain: foundry, + userOperation: { + prepareUserOperation: + prepareUserOperationForErc20Paymaster(pimlicoClient) + }, + bundlerTransport: http(rpc.altoRpc) + }) + + const INITIAL_TOKEN_BALANCE = parseEther("100") + const INTIAL_ETH_BALANCE = await publicClient.getBalance({ + address: smartAccountClient.account.address + }) + + sudoMintTokens({ + amount: INITIAL_TOKEN_BALANCE, + to: smartAccountClient.account.address, + anvilRpc + }) + + const opHash = await smartAccountClient.sendUserOperation({ + calls: [ + { + to: zeroAddress, + data: "0x", + value: 0n + } + ], + paymasterContext: { + token: erc20Address } }) @@ -259,7 +340,7 @@ describe.each(getCoreSmartAccounts())( } ], paymasterContext: { - token: ERC20_ADDRESS + token: erc20Address } }) @@ -285,7 +366,95 @@ describe.each(getCoreSmartAccounts())( } ) - testWithRpc.skipIf(!supportsEntryPointV06)( + testWithRpc.skipIf(!supportsEntryPointV08)( + "prepareUserOperationForErc20Paymaster_v08 (balanceOverride enabled)", + async ({ rpc }) => { + const { anvilRpc } = rpc + + const account = ( + await getSmartAccountClient({ + entryPoint: { + version: "0.8" + }, + ...rpc + }) + ).account + + const publicClient = getPublicClient(anvilRpc) + + const pimlicoClient = createPimlicoClient({ + transport: http(rpc.paymasterRpc), + entryPoint: { + address: entryPoint08Address, + version: "0.8" + } + }) + + const smartAccountClient = createSmartAccountClient({ + // @ts-ignore + client: getPublicClient(anvilRpc), + account, + paymaster: pimlicoClient, + chain: foundry, + userOperation: { + prepareUserOperation: + prepareUserOperationForErc20Paymaster( + pimlicoClient, + { + balanceOverride: true + } + ) + }, + bundlerTransport: http(rpc.altoRpc) + }) + + const INITIAL_TOKEN_BALANCE = parseEther("100") + const INTIAL_ETH_BALANCE = await publicClient.getBalance({ + address: smartAccountClient.account.address + }) + + sudoMintTokens({ + amount: INITIAL_TOKEN_BALANCE, + to: smartAccountClient.account.address, + anvilRpc + }) + + const opHash = await smartAccountClient.sendUserOperation({ + calls: [ + { + to: zeroAddress, + data: "0x", + value: 0n + } + ], + paymasterContext: { + token: erc20Address + } + }) + + const receipt = + await smartAccountClient.waitForUserOperationReceipt({ + hash: opHash + }) + + expect(receipt).toBeTruthy() + expect(receipt).toBeTruthy() + expect(receipt.success).toBeTruthy() + + const FINAL_TOKEN_BALANCE = await tokenBalanceOf( + smartAccountClient.account.address, + rpc.anvilRpc + ) + const FINAL_ETH_BALANCE = await publicClient.getBalance({ + address: smartAccountClient.account.address + }) + + expect(FINAL_TOKEN_BALANCE).toBeLessThan(INITIAL_TOKEN_BALANCE) // Token balance should be deducted + expect(FINAL_ETH_BALANCE).toEqual(INTIAL_ETH_BALANCE) // There should be no ETH balance change + } + ) + + testWithRpc.skipIf(!supportsEntryPointV06 || name === "Kernel 0.2.1")( "prepareUserOperationForErc20Paymaster_v06", async ({ rpc }) => { const { anvilRpc } = rpc @@ -342,7 +511,7 @@ describe.each(getCoreSmartAccounts())( } ]), paymasterContext: { - token: ERC20_ADDRESS + token: erc20Address } }) @@ -354,21 +523,17 @@ describe.each(getCoreSmartAccounts())( expect(receipt).toBeTruthy() expect(receipt).toBeTruthy() - if (name !== "Kernel 0.2.1") { - expect(receipt.success).toBeTruthy() - const FINAL_TOKEN_BALANCE = await tokenBalanceOf( - smartAccountClient.account.address, - rpc.anvilRpc - ) - const FINAL_ETH_BALANCE = await publicClient.getBalance({ - address: smartAccountClient.account.address - }) + expect(receipt.success).toBeTruthy() + const FINAL_TOKEN_BALANCE = await tokenBalanceOf( + smartAccountClient.account.address, + rpc.anvilRpc + ) + const FINAL_ETH_BALANCE = await publicClient.getBalance({ + address: smartAccountClient.account.address + }) - expect(FINAL_TOKEN_BALANCE).toBeLessThan( - INITIAL_TOKEN_BALANCE - ) // Token balance should be deducted - expect(FINAL_ETH_BALANCE).toEqual(INTIAL_ETH_BALANCE) // There should be no ETH balance change - } + expect(FINAL_TOKEN_BALANCE).toBeLessThan(INITIAL_TOKEN_BALANCE) // Token balance should be deducted + expect(FINAL_ETH_BALANCE).toEqual(INTIAL_ETH_BALANCE) // There should be no ETH balance change } ) @@ -429,7 +594,7 @@ describe.each(getCoreSmartAccounts())( } ]), paymasterContext: { - token: ERC20_ADDRESS + token: erc20Address } }) @@ -517,7 +682,7 @@ describe.each(getCoreSmartAccounts())( } ]), paymasterContext: { - token: ERC20_ADDRESS + token: erc20Address } }) diff --git a/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts b/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts index 6026bd67..0828a7b4 100644 --- a/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts +++ b/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts @@ -68,7 +68,7 @@ export const prepareUserOperationForErc20Paymaster = const account_ = client.account if (!account_) throw new Error("Account not found") - const account = parseAccount(account_) + const account = parseAccount(account_) const bundlerClient = client as unknown as BundlerClient diff --git a/packages/permissionless/package.json b/packages/permissionless/package.json index b5c91fb6..7835fc3d 100644 --- a/packages/permissionless/package.json +++ b/packages/permissionless/package.json @@ -91,7 +91,7 @@ } }, "peerDependencies": { - "viem": "^2.23.2", + "viem": "^2.28.1", "ox": "0.6.7" }, "peerDependenciesMeta": { diff --git a/packages/permissionless/types/pimlico.ts b/packages/permissionless/types/pimlico.ts index be7d3b4a..64480883 100644 --- a/packages/permissionless/types/pimlico.ts +++ b/packages/permissionless/types/pimlico.ts @@ -1,5 +1,5 @@ import type { Address, Hash, Hex, OneOf, PartialBy } from "viem" -import type { UserOperation } from "viem/account-abstraction" +import type { EntryPointVersion, UserOperation } from "viem/account-abstraction" type PimlicoUserOperationGasPriceWithBigIntAsHex = { slow: { @@ -41,7 +41,7 @@ type GetTokenQuotesWithBigIntAsHex = { } export type PimlicoRpcSchema< - entryPointVersion extends "0.6" | "0.7" = "0.6" | "0.7" + entryPointVersion extends EntryPointVersion = EntryPointVersion > = [ { Method: "pimlico_getUserOperationGasPrice" @@ -84,6 +84,16 @@ export type PimlicoRpcSchema< | "paymasterPostOpGasLimit" > : never) + | (entryPointVersion extends "0.8" + ? PartialBy< + UserOperation<"0.7", Hex>, + | "callGasLimit" + | "preVerificationGas" + | "verificationGasLimit" + | "paymasterVerificationGasLimit" + | "paymasterPostOpGasLimit" + > + : never) >, entryPoint: Address, metadata?: { diff --git a/packages/permissionless/utils/getEstimationCallData.ts b/packages/permissionless/utils/getEstimationCallData.ts index 71d7a765..272a015c 100644 --- a/packages/permissionless/utils/getEstimationCallData.ts +++ b/packages/permissionless/utils/getEstimationCallData.ts @@ -1,5 +1,6 @@ import { type Address, type Hex, encodeFunctionData } from "viem" import { + type EntryPointVersion, type UserOperation, entryPoint06Abi, toPackedUserOperation @@ -44,7 +45,7 @@ function getPimlicoEstimationCallData06({ function encodeSimulateHandleOpLast({ userOperation }: { - userOperation: UserOperation<"0.7"> + userOperation: UserOperation<"0.7" | "0.8"> }): Hex { const userOperations = [userOperation] const packedUserOperations = userOperations.map((uop) => ({ @@ -177,11 +178,11 @@ function getPimlicoEstimationCallData07({ estimationAddress, entrypoint }: { - userOperation: UserOperation<"0.7"> + userOperation: UserOperation<"0.7" | "0.8"> estimationAddress?: Address entrypoint: { address: Address - version: "0.7" + version: "0.7" | "0.8" } }): { to: Address; data: Hex } { const simulateHandleOpLast = encodeSimulateHandleOpLast({ @@ -224,7 +225,7 @@ function getPimlicoEstimationCallData07({ } export type GetPimlicoEstimationCallDataParams< - entryPointVersion extends "0.6" | "0.7" + entryPointVersion extends EntryPointVersion > = { userOperation: UserOperation entrypoint: { @@ -238,19 +239,25 @@ export type GetPimlicoEstimationCallDataParams< : { estimationAddress?: Address }) function isEntryPoint06( - args: GetPimlicoEstimationCallDataParams<"0.6" | "0.7"> + args: GetPimlicoEstimationCallDataParams ): args is GetPimlicoEstimationCallDataParams<"0.6"> { return args.entrypoint.version === "0.6" } function isEntryPoint07( - args: GetPimlicoEstimationCallDataParams<"0.6" | "0.7"> + args: GetPimlicoEstimationCallDataParams ): args is GetPimlicoEstimationCallDataParams<"0.7"> { return args.entrypoint.version === "0.7" } +function isEntryPoint08( + args: GetPimlicoEstimationCallDataParams +): args is GetPimlicoEstimationCallDataParams<"0.8"> { + return args.entrypoint.version === "0.8" +} + export function getPimlicoEstimationCallData< - entryPointVersion extends "0.6" | "0.7" + entryPointVersion extends EntryPointVersion >( args: GetPimlicoEstimationCallDataParams ): { to: Address; data: Hex } { @@ -275,5 +282,16 @@ export function getPimlicoEstimationCallData< }) } + if (isEntryPoint08(args)) { + return getPimlicoEstimationCallData07({ + userOperation: args.userOperation, + estimationAddress: args.estimationAddress, + entrypoint: { + address: args.entrypoint.address, + version: "0.8" + } + }) + } + throw new Error("Invalid entrypoint version") } diff --git a/packages/permissionless/utils/getRequiredPrefund.ts b/packages/permissionless/utils/getRequiredPrefund.ts index b90162a4..1339594b 100644 --- a/packages/permissionless/utils/getRequiredPrefund.ts +++ b/packages/permissionless/utils/getRequiredPrefund.ts @@ -1,7 +1,7 @@ -import type { UserOperation } from "viem/account-abstraction" +import type { EntryPointVersion, UserOperation } from "viem/account-abstraction" export type GetRequiredPrefundReturnType< - entryPointVersion extends "0.6" | "0.7" + entryPointVersion extends EntryPointVersion = "0.7" > = { userOperation: UserOperation entryPointVersion: entryPointVersion @@ -21,7 +21,9 @@ export type GetRequiredPrefundReturnType< * userOperation * }) */ -export const getRequiredPrefund = ({ +export const getRequiredPrefund = < + entryPointVersion extends EntryPointVersion +>({ userOperation, entryPointVersion }: GetRequiredPrefundReturnType): bigint => { @@ -41,7 +43,7 @@ export const getRequiredPrefund = ({ ) } - const userOperationV07 = userOperation as UserOperation<"0.7"> + const userOperationV07 = userOperation as UserOperation<"0.7" | "0.8"> const requiredGas = userOperationV07.verificationGasLimit + diff --git a/packages/wagmi/hooks/useAvailableCapabilities.ts b/packages/wagmi/hooks/useAvailableCapabilities.ts index f4ad38b6..6d99ea1f 100644 --- a/packages/wagmi/hooks/useAvailableCapabilities.ts +++ b/packages/wagmi/hooks/useAvailableCapabilities.ts @@ -3,7 +3,7 @@ import { useContext, useMemo } from "react" import type { WalletCapabilities, WalletSendCallsParameters } from "viem" import { useAccount } from "wagmi" -import { useCapabilities } from "wagmi/experimental" +import { useCapabilities } from "wagmi" import { PermissionlessContext } from "../context.js" export const useAvailableCapabilities = () => { diff --git a/packages/wagmi/hooks/useSendTransaction.ts b/packages/wagmi/hooks/useSendTransaction.ts index c777c761..100d4045 100644 --- a/packages/wagmi/hooks/useSendTransaction.ts +++ b/packages/wagmi/hooks/useSendTransaction.ts @@ -4,14 +4,14 @@ import { useMutation } from "@tanstack/react-query" import { sendTransaction } from "@wagmi/core" -import { sendCalls } from "@wagmi/core/experimental" +import { sendCalls } from "@wagmi/core" import type { Prettify, SendTransactionErrorType, WalletCapabilities, WalletSendCallsParameters } from "viem" -import type { SendCallsErrorType } from "viem/experimental" +import type { SendCallsErrorType } from "viem" import { type Config, type ResolvedRegister, useConfig } from "wagmi" import type { SendTransactionVariables, @@ -27,7 +27,7 @@ const sendTransactionMutationOptions = ( } = {} ) => { return { - mutationFn(variables) { + async mutationFn(variables) { if (parameters.capabilities) { const client = config.getClient({ chainId: variables.chainId }) @@ -37,7 +37,7 @@ const sendTransactionMutationOptions = ( : parameters.capabilities?.paymasterService[client.chain.id] ?.url - return sendCalls(config, { + const result = await sendCalls(config, { calls: [variables], capabilities: { ...parameters.capabilities, @@ -48,9 +48,11 @@ const sendTransactionMutationOptions = ( : undefined } }) + + return result.id } - return sendTransaction(config, variables) as Promise + return sendTransaction(config, variables) }, mutationKey: ["sendTransaction"] } as const satisfies MutationOptions< diff --git a/packages/wagmi/hooks/useWaitForTransactionReceipt.ts b/packages/wagmi/hooks/useWaitForTransactionReceipt.ts index 1b04f5d1..7b62435e 100644 --- a/packages/wagmi/hooks/useWaitForTransactionReceipt.ts +++ b/packages/wagmi/hooks/useWaitForTransactionReceipt.ts @@ -211,7 +211,7 @@ export async function waitForCallsStatus< try { // If we already have a valid receipt, let's check if we have enough // confirmations. If we do, then we can resolve. - if (receipt && receipt.status !== "PENDING") { + if (receipt && receipt.status !== "pending") { if ( confirmations > 1 && (!receipt.receipts?.[0]?.blockNumber || @@ -257,7 +257,7 @@ export async function waitForCallsStatus< "getCallsStatus" )({ id }) - if (receipt.status === "PENDING") { + if (receipt.status === "pending") { return } diff --git a/packages/wagmi/package.json b/packages/wagmi/package.json index d0274178..a28d365f 100644 --- a/packages/wagmi/package.json +++ b/packages/wagmi/package.json @@ -21,6 +21,6 @@ } }, "peerDependencies": { - "wagmi": "^2.12.8" + "wagmi": "^2.15.1" } }