From 59f3b4058cf16e59733a57db6ddd26b534f29ee5 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Tue, 29 Apr 2025 14:05:26 +0100 Subject: [PATCH 01/55] update viem --- bun.lock | 36 +- package.json | 2 +- .../biconomy/toBiconomySmartAccount.ts | 7 +- .../etherspot/toEtherspotSmartAccount.ts | 7 +- .../accounts/kernel/toKernelSmartAccount.ts | 7 +- .../accounts/light/toLightSmartAccount.ts | 7 +- .../accounts/nexus/toNexusSmartAccount.ts | 7 +- .../accounts/safe/toSafeSmartAccount.ts | 7 +- .../accounts/simple/toSimpleSmartAccount.ts | 316 ++++++++---------- .../thirdweb/toThirdwebSmartAccount.ts | 7 +- .../accounts/trust/toTrustSmartAccount.ts | 7 +- 11 files changed, 215 insertions(+), 195 deletions(-) diff --git a/bun.lock b/bun.lock index 39d455e0..62c9a233 100644 --- a/bun.lock +++ b/bun.lock @@ -32,7 +32,7 @@ "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", @@ -40,7 +40,7 @@ }, "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", @@ -53,7 +53,7 @@ }, "packages/permissionless": { "name": "permissionless", - "version": "0.2.36", + "version": "0.2.43", "peerDependencies": { "ox": "0.6.7", "viem": "^2.23.2", @@ -64,7 +64,7 @@ }, "packages/wagmi": { "name": "@permissionless/wagmi", - "version": "0.1.3", + "version": "0.1.4", "peerDependencies": { "wagmi": "^2.12.8", }, @@ -1515,7 +1515,7 @@ "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=="], - "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=="], @@ -1547,7 +1547,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=="], @@ -1605,6 +1605,8 @@ "@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=="], "@isaacs/cliui/strip-ansi": ["strip-ansi@7.1.0", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ=="], @@ -1705,12 +1707,18 @@ "@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/alto/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=="], + + "@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=="], "@wagmi/cli/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], "@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=="], @@ -1811,8 +1819,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=="], @@ -1883,6 +1897,16 @@ "@pimlico/alto/fastify/secure-json-parse": ["secure-json-parse@2.7.0", "", {}, "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="], + "@pimlico/alto/viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], + + "@pimlico/alto/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=="], + + "@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=="], + + "@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=="], + + "@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=="], "@walletconnect/logger/pino/pino-abstract-transport": ["pino-abstract-transport@0.5.0", "", { "dependencies": { "duplexify": "^4.1.2", "split2": "^4.0.0" } }, "sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ=="], diff --git a/package.json b/package.json index f4a4a9ba..def1429f 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "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" 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/etherspot/toEtherspotSmartAccount.ts b/packages/permissionless/accounts/etherspot/toEtherspotSmartAccount.ts index e66e601f..a4a1d710 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, + 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..979e5db9 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, + 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..ffd85446 100644 --- a/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts +++ b/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts @@ -2,6 +2,7 @@ import type { Account, Assign, Chain, + JsonRpcAccount, OneOf, Prettify, Transport, @@ -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..8ecd5078 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, + 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..f1b15b36 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, + JsonRpcAccount, type LocalAccount, type OneOf, type Transport, @@ -13,12 +14,14 @@ import { encodeFunctionData } from "viem" import { + EntryPointVersion, type SmartAccount, type SmartAccountImplementation, type UserOperation, entryPoint06Abi, entryPoint07Abi, entryPoint07Address, + entryPoint08Abi, getUserOperationHash, toSmartAccount } from "viem/account-abstraction" @@ -67,9 +70,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 +93,50 @@ 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" + } +} + +type EntryPointAbiMap = { + "0.6": typeof entryPoint06Abi + "0.7": typeof entryPoint07Abi + "0.8": typeof entryPoint08Abi +} + +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, + EntryPointAbiMap[entryPointVersion], 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 +145,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 +160,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, @@ -194,26 +218,7 @@ export async function toSimpleSmartAccount< if (calls.length > 1) { if (entryPoint.version === "0.6") { return encodeFunctionData({ - abi: [ - { - inputs: [ - { - internalType: "address[]", - name: "dest", - type: "address[]" - }, - { - internalType: "bytes[]", - name: "func", - type: "bytes[]" - } - ], - name: "executeBatch", - outputs: [], - stateMutability: "nonpayable", - type: "function" - } - ], + abi: simpleAccount06Abi, functionName: "executeBatch", args: [ calls.map((a) => a.to), @@ -222,31 +227,7 @@ export async function toSimpleSmartAccount< }) } 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: simpleAccount07Abi, functionName: "executeBatch", args: [ calls.map((a) => a.to), @@ -263,31 +244,7 @@ export async function toSimpleSmartAccount< } 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: simpleAccount07Abi, functionName: "execute", args: [call.to, call.value ?? 0n, call.data ?? "0x"] }) @@ -295,26 +252,7 @@ export async function toSimpleSmartAccount< 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" - } - ], + abi: simpleAccount06Abi, data: callData }) @@ -334,36 +272,12 @@ export async function toSimpleSmartAccount< return calls } catch (_) { - try { - 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" - } - ], - data: callData - }) + const decodedV7 = decodeFunctionData({ + abi: simpleAccount07Abi, + data: callData + }) + if (decodedV7.functionName === "executeBatch") { const calls: { to: Address data: Hex @@ -379,43 +293,15 @@ export async function toSimpleSmartAccount< } 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" - } - ], - data: callData - }) - return [ - { - to: decodedSingle.args[0], - value: decodedSingle.args[1], - data: decodedSingle.args[2] - } - ] } + + return [ + { + to: decodedV7.args[0], + value: decodedV7.args[1], + data: decodedV7.args[2] + } + ] } }, async getNonce(args) { @@ -460,3 +346,73 @@ export async function toSimpleSmartAccount< } }) as Promise> } + +const simpleAccount06Abi = [ + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]" + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]" + } + ], + name: "executeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } +] as const + +const simpleAccount07Abi = [ + { + 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" + }, + { + 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 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..0c8eeb6a 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, + 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 From 1997edfb7dbdddbc8389ea4e12b96ce27c4067a6 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Tue, 29 Apr 2025 14:05:32 +0100 Subject: [PATCH 02/55] update viem --- .../accounts/etherspot/toEtherspotSmartAccount.ts | 2 +- packages/permissionless/accounts/light/toLightSmartAccount.ts | 2 +- packages/permissionless/accounts/safe/toSafeSmartAccount.ts | 2 +- .../permissionless/accounts/simple/toSimpleSmartAccount.ts | 4 ++-- packages/permissionless/accounts/trust/toTrustSmartAccount.ts | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/permissionless/accounts/etherspot/toEtherspotSmartAccount.ts b/packages/permissionless/accounts/etherspot/toEtherspotSmartAccount.ts index a4a1d710..fbcd2b1d 100644 --- a/packages/permissionless/accounts/etherspot/toEtherspotSmartAccount.ts +++ b/packages/permissionless/accounts/etherspot/toEtherspotSmartAccount.ts @@ -6,7 +6,7 @@ import { type Client, type EIP1193Provider, type Hex, - JsonRpcAccount, + type JsonRpcAccount, type LocalAccount, type OneOf, type Transport, diff --git a/packages/permissionless/accounts/light/toLightSmartAccount.ts b/packages/permissionless/accounts/light/toLightSmartAccount.ts index 979e5db9..46f6af7b 100644 --- a/packages/permissionless/accounts/light/toLightSmartAccount.ts +++ b/packages/permissionless/accounts/light/toLightSmartAccount.ts @@ -5,7 +5,7 @@ import { type Chain, type Client, type Hex, - JsonRpcAccount, + type JsonRpcAccount, type LocalAccount, type OneOf, type Transport, diff --git a/packages/permissionless/accounts/safe/toSafeSmartAccount.ts b/packages/permissionless/accounts/safe/toSafeSmartAccount.ts index 8ecd5078..96d9ed87 100644 --- a/packages/permissionless/accounts/safe/toSafeSmartAccount.ts +++ b/packages/permissionless/accounts/safe/toSafeSmartAccount.ts @@ -5,7 +5,7 @@ import { type Chain, type Client, type Hex, - JsonRpcAccount, + type JsonRpcAccount, type LocalAccount, type OneOf, type SignableMessage, diff --git a/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts b/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts index f1b15b36..c408eebf 100644 --- a/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts +++ b/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts @@ -5,7 +5,7 @@ import { type Chain, type Client, type Hex, - JsonRpcAccount, + type JsonRpcAccount, type LocalAccount, type OneOf, type Transport, @@ -14,7 +14,7 @@ import { encodeFunctionData } from "viem" import { - EntryPointVersion, + type EntryPointVersion, type SmartAccount, type SmartAccountImplementation, type UserOperation, diff --git a/packages/permissionless/accounts/trust/toTrustSmartAccount.ts b/packages/permissionless/accounts/trust/toTrustSmartAccount.ts index 0c8eeb6a..3a4b2181 100644 --- a/packages/permissionless/accounts/trust/toTrustSmartAccount.ts +++ b/packages/permissionless/accounts/trust/toTrustSmartAccount.ts @@ -5,7 +5,7 @@ import { type Chain, type Client, type Hex, - JsonRpcAccount, + type JsonRpcAccount, type LocalAccount, type OneOf, type Transport, From b8d876984d26fca3734e310a01392a16533e67cb Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Tue, 29 Apr 2025 14:32:55 +0100 Subject: [PATCH 03/55] fix prepareUserOperationForErc20Paymaster --- .../pimlico/utils/prepareUserOperationForErc20Paymaster.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts b/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts index 6026bd67..43275c47 100644 --- a/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts +++ b/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts @@ -65,7 +65,11 @@ export const prepareUserOperationForErc20Paymaster = PrepareUserOperationReturnType > => { const parameters = parameters_ as PrepareUserOperationParameters - const account_ = client.account + const { account: account_ = client.account } = parameters + + //////////////////////////////////////////////////////////////////////////////// + // Assert that an Account is defined. + //////////////////////////////////////////////////////////////////////////////// if (!account_) throw new Error("Account not found") const account = parseAccount(account_) From a9f46b6556d96061f9434982203552eba1ff3558 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Tue, 29 Apr 2025 14:47:32 +0100 Subject: [PATCH 04/55] setup tests --- .../alto/constants/accounts/simple.ts | 4 + .../mock-aa-infra/alto/constants/core.ts | 12 ++- .../mock-aa-infra/alto/index.ts | 28 +++--- .../permissionless-test/src/testWithRpc.ts | 15 +-- packages/permissionless-test/src/utils.ts | 92 +++++++++---------- .../accounts/simple/toSimpleSmartAccount.ts | 17 ++++ 6 files changed, 100 insertions(+), 68 deletions(-) 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/utils.ts b/packages/permissionless-test/src/utils.ts index c828a7b5..afd2e8f9 100644 --- a/packages/permissionless-test/src/utils.ts +++ b/packages/permissionless-test/src/utils.ts @@ -442,8 +442,8 @@ export const getCoreSmartAccounts = () => [ ...conf }) }, - supportsEntryPointV06: true, - supportsEntryPointV07: false, + supportsEntryPoint06: true, + supportsEntryPoint07: false, isEip1271Compliant: true }, { @@ -458,8 +458,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: true, - supportsEntryPointV07: false, + supportsEntryPoint06: true, + supportsEntryPoint07: false, isEip1271Compliant: true }, { @@ -474,8 +474,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, + supportsEntryPoint06: false, + supportsEntryPoint07: true, isEip1271Compliant: true }, { @@ -487,8 +487,8 @@ export const getCoreSmartAccounts = () => [ account: await getSimpleAccountClient(conf), ...conf }), - supportsEntryPointV06: true, - supportsEntryPointV07: true, + supportsEntryPoint06: true, + supportsEntryPoint07: true, isEip1271Compliant: false }, { @@ -503,8 +503,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: true, - supportsEntryPointV07: false, + supportsEntryPoint06: true, + supportsEntryPoint07: false, isEip1271Compliant: true }, { @@ -519,8 +519,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: true, - supportsEntryPointV07: false, + supportsEntryPoint06: true, + supportsEntryPoint07: false, isEip1271Compliant: true }, { @@ -535,8 +535,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: true, - supportsEntryPointV07: false, + supportsEntryPoint06: true, + supportsEntryPoint07: false, isEip1271Compliant: true }, { @@ -551,8 +551,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: true, - supportsEntryPointV07: false, + supportsEntryPoint06: true, + supportsEntryPoint07: false, isEip1271Compliant: true }, { @@ -581,8 +581,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, + supportsEntryPoint06: false, + supportsEntryPoint07: true, isEip1271Compliant: true }, { @@ -609,8 +609,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, + supportsEntryPoint06: false, + supportsEntryPoint07: true, isEip1271Compliant: true }, { @@ -639,8 +639,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, + supportsEntryPoint06: false, + supportsEntryPoint07: true, isEip1271Compliant: true }, { @@ -667,8 +667,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, + supportsEntryPoint06: false, + supportsEntryPoint07: true, isEip1271Compliant: true }, { @@ -695,8 +695,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, + supportsEntryPoint06: false, + supportsEntryPoint07: true, isEip1271Compliant: true }, { @@ -723,8 +723,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, + supportsEntryPoint06: false, + supportsEntryPoint07: true, isEip1271Compliant: true }, { @@ -736,8 +736,8 @@ export const getCoreSmartAccounts = () => [ account: await getBiconomyClient(conf), ...conf }), - supportsEntryPointV06: true, - supportsEntryPointV07: false, + supportsEntryPoint06: true, + supportsEntryPoint07: false, isEip1271Compliant: true }, { @@ -758,8 +758,8 @@ export const getCoreSmartAccounts = () => [ account: await getNexusClient(conf), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, + supportsEntryPoint06: false, + supportsEntryPoint07: true, isEip1271Compliant: true }, { @@ -771,8 +771,8 @@ export const getCoreSmartAccounts = () => [ account: await getSafeClient(conf), ...conf }), - supportsEntryPointV06: true, - supportsEntryPointV07: true, + supportsEntryPoint06: true, + supportsEntryPoint07: true, isEip1271Compliant: true }, { @@ -787,8 +787,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: true, - supportsEntryPointV07: true, + supportsEntryPoint06: true, + supportsEntryPoint07: true, isEip1271Compliant: true }, { @@ -807,8 +807,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: true, - supportsEntryPointV07: true, + supportsEntryPoint06: true, + supportsEntryPoint07: true, isEip1271Compliant: true }, { @@ -829,8 +829,8 @@ export const getCoreSmartAccounts = () => [ account: await getSafeClient({ ...conf, erc7579: true }), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, + supportsEntryPoint06: false, + supportsEntryPoint07: true, isEip1271Compliant: true }, { @@ -859,8 +859,8 @@ export const getCoreSmartAccounts = () => [ account: await getSafeClient({ ...conf, erc7579: true }), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, + supportsEntryPoint06: false, + supportsEntryPoint07: true, isEip1271Compliant: true }, { @@ -872,8 +872,8 @@ export const getCoreSmartAccounts = () => [ account: await getEtherspotClient(conf), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, + supportsEntryPoint06: false, + supportsEntryPoint07: true, isEip1271Compliant: true }, { @@ -894,8 +894,8 @@ export const getCoreSmartAccounts = () => [ // account: await getSafeClient({ ...conf, erc7579: true }), // ...conf // }), - supportsEntryPointV06: true, - supportsEntryPointV07: true, + supportsEntryPoint06: true, + supportsEntryPoint07: true, isEip1271Compliant: true } ] diff --git a/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts b/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts index c408eebf..e66fa2c7 100644 --- a/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts +++ b/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts @@ -23,6 +23,7 @@ import { entryPoint07Address, entryPoint08Abi, getUserOperationHash, + getUserOperationTypedData, toSmartAccount } from "viem/account-abstraction" import { getChainId, signMessage } from "viem/actions" @@ -30,6 +31,7 @@ import { getAction } from "viem/utils" import { getAccountNonce } from "../../actions/public/getAccountNonce.js" import { getSenderAddress } from "../../actions/public/getSenderAddress.js" import { type EthereumProvider, toOwner } from "../../utils/toOwner.js" +import { version } from "react" const getAccountInitCode = async ( owner: Address, @@ -326,6 +328,21 @@ export async function toSimpleSmartAccount< async signUserOperation(parameters) { const { chainId = await getMemoizedChainId(), ...userOperation } = parameters + + // 0.8 Signs using typed data + if (version === "0.8") { + const address = await this.getAddress() + const typedData = getUserOperationTypedData({ + chainId, + entryPointAddress: entryPoint.address, + userOperation: { + ...userOperation, + sender: address + } + }) + return await localOwner.signTypedData(typedData) + } + return signMessage(client, { account: localOwner, message: { From 73e163010014e44106f3051a95648daff779231d Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Tue, 29 Apr 2025 14:48:18 +0100 Subject: [PATCH 05/55] update --- packages/permissionless-test/src/utils.ts | 92 +++++++++++------------ 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/packages/permissionless-test/src/utils.ts b/packages/permissionless-test/src/utils.ts index afd2e8f9..c828a7b5 100644 --- a/packages/permissionless-test/src/utils.ts +++ b/packages/permissionless-test/src/utils.ts @@ -442,8 +442,8 @@ export const getCoreSmartAccounts = () => [ ...conf }) }, - supportsEntryPoint06: true, - supportsEntryPoint07: false, + supportsEntryPointV06: true, + supportsEntryPointV07: false, isEip1271Compliant: true }, { @@ -458,8 +458,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPoint06: true, - supportsEntryPoint07: false, + supportsEntryPointV06: true, + supportsEntryPointV07: false, isEip1271Compliant: true }, { @@ -474,8 +474,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPoint06: false, - supportsEntryPoint07: true, + supportsEntryPointV06: false, + supportsEntryPointV07: true, isEip1271Compliant: true }, { @@ -487,8 +487,8 @@ export const getCoreSmartAccounts = () => [ account: await getSimpleAccountClient(conf), ...conf }), - supportsEntryPoint06: true, - supportsEntryPoint07: true, + supportsEntryPointV06: true, + supportsEntryPointV07: true, isEip1271Compliant: false }, { @@ -503,8 +503,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPoint06: true, - supportsEntryPoint07: false, + supportsEntryPointV06: true, + supportsEntryPointV07: false, isEip1271Compliant: true }, { @@ -519,8 +519,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPoint06: true, - supportsEntryPoint07: false, + supportsEntryPointV06: true, + supportsEntryPointV07: false, isEip1271Compliant: true }, { @@ -535,8 +535,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPoint06: true, - supportsEntryPoint07: false, + supportsEntryPointV06: true, + supportsEntryPointV07: false, isEip1271Compliant: true }, { @@ -551,8 +551,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPoint06: true, - supportsEntryPoint07: false, + supportsEntryPointV06: true, + supportsEntryPointV07: false, isEip1271Compliant: true }, { @@ -581,8 +581,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPoint06: false, - supportsEntryPoint07: true, + supportsEntryPointV06: false, + supportsEntryPointV07: true, isEip1271Compliant: true }, { @@ -609,8 +609,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPoint06: false, - supportsEntryPoint07: true, + supportsEntryPointV06: false, + supportsEntryPointV07: true, isEip1271Compliant: true }, { @@ -639,8 +639,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPoint06: false, - supportsEntryPoint07: true, + supportsEntryPointV06: false, + supportsEntryPointV07: true, isEip1271Compliant: true }, { @@ -667,8 +667,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPoint06: false, - supportsEntryPoint07: true, + supportsEntryPointV06: false, + supportsEntryPointV07: true, isEip1271Compliant: true }, { @@ -695,8 +695,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPoint06: false, - supportsEntryPoint07: true, + supportsEntryPointV06: false, + supportsEntryPointV07: true, isEip1271Compliant: true }, { @@ -723,8 +723,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPoint06: false, - supportsEntryPoint07: true, + supportsEntryPointV06: false, + supportsEntryPointV07: true, isEip1271Compliant: true }, { @@ -736,8 +736,8 @@ export const getCoreSmartAccounts = () => [ account: await getBiconomyClient(conf), ...conf }), - supportsEntryPoint06: true, - supportsEntryPoint07: false, + supportsEntryPointV06: true, + supportsEntryPointV07: false, isEip1271Compliant: true }, { @@ -758,8 +758,8 @@ export const getCoreSmartAccounts = () => [ account: await getNexusClient(conf), ...conf }), - supportsEntryPoint06: false, - supportsEntryPoint07: true, + supportsEntryPointV06: false, + supportsEntryPointV07: true, isEip1271Compliant: true }, { @@ -771,8 +771,8 @@ export const getCoreSmartAccounts = () => [ account: await getSafeClient(conf), ...conf }), - supportsEntryPoint06: true, - supportsEntryPoint07: true, + supportsEntryPointV06: true, + supportsEntryPointV07: true, isEip1271Compliant: true }, { @@ -787,8 +787,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPoint06: true, - supportsEntryPoint07: true, + supportsEntryPointV06: true, + supportsEntryPointV07: true, isEip1271Compliant: true }, { @@ -807,8 +807,8 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPoint06: true, - supportsEntryPoint07: true, + supportsEntryPointV06: true, + supportsEntryPointV07: true, isEip1271Compliant: true }, { @@ -829,8 +829,8 @@ export const getCoreSmartAccounts = () => [ account: await getSafeClient({ ...conf, erc7579: true }), ...conf }), - supportsEntryPoint06: false, - supportsEntryPoint07: true, + supportsEntryPointV06: false, + supportsEntryPointV07: true, isEip1271Compliant: true }, { @@ -859,8 +859,8 @@ export const getCoreSmartAccounts = () => [ account: await getSafeClient({ ...conf, erc7579: true }), ...conf }), - supportsEntryPoint06: false, - supportsEntryPoint07: true, + supportsEntryPointV06: false, + supportsEntryPointV07: true, isEip1271Compliant: true }, { @@ -872,8 +872,8 @@ export const getCoreSmartAccounts = () => [ account: await getEtherspotClient(conf), ...conf }), - supportsEntryPoint06: false, - supportsEntryPoint07: true, + supportsEntryPointV06: false, + supportsEntryPointV07: true, isEip1271Compliant: true }, { @@ -894,8 +894,8 @@ export const getCoreSmartAccounts = () => [ // account: await getSafeClient({ ...conf, erc7579: true }), // ...conf // }), - supportsEntryPoint06: true, - supportsEntryPoint07: true, + supportsEntryPointV06: true, + supportsEntryPointV07: true, isEip1271Compliant: true } ] From 8c3cc7b3e775ed35069f6952e68d41386f47dada Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Tue, 29 Apr 2025 14:48:23 +0100 Subject: [PATCH 06/55] lint --- packages/permissionless/accounts/simple/toSimpleSmartAccount.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts b/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts index e66fa2c7..93d10ee4 100644 --- a/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts +++ b/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts @@ -1,3 +1,4 @@ +import { version } from "react" import { type Account, type Address, @@ -31,7 +32,6 @@ import { getAction } from "viem/utils" import { getAccountNonce } from "../../actions/public/getAccountNonce.js" import { getSenderAddress } from "../../actions/public/getSenderAddress.js" import { type EthereumProvider, toOwner } from "../../utils/toOwner.js" -import { version } from "react" const getAccountInitCode = async ( owner: Address, From 2a9b0937a0bb8056f166e6c34e6bb90793a7efba Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Tue, 29 Apr 2025 15:31:38 +0100 Subject: [PATCH 07/55] update --- packages/permissionless-test/src/types.ts | 5 +- packages/permissionless-test/src/utils.ts | 149 +++++++++--------- .../actions/pimlico/sponsorUserOperation.ts | 8 +- .../clients/decorators/pimlico.ts | 5 +- packages/permissionless/clients/pimlico.ts | 7 +- packages/permissionless/types/pimlico.ts | 4 +- 6 files changed, 88 insertions(+), 90 deletions(-) diff --git a/packages/permissionless-test/src/types.ts b/packages/permissionless-test/src/types.ts index acb14c8d..dda36aa4 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 { 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..9db42c37 100644 --- a/packages/permissionless-test/src/utils.ts +++ b/packages/permissionless-test/src/utils.ts @@ -3,13 +3,16 @@ import { type Account, type Hex, createPublicClient, - createWalletClient + createWalletClient, + Address } from "viem" import { + EntryPointVersion, type SmartAccount, createPaymasterClient, entryPoint06Address, - entryPoint07Address + entryPoint07Address, + entryPoint08Address } from "viem/account-abstraction" import { generatePrivateKey, @@ -98,6 +101,33 @@ export const getAnvilWalletClient = ({ }) } +const getEntryPointFromVersion = ( + version: EntryPointVersion +): { + address: Address + version: entryPointVersion +} => { + switch (version) { + case "0.6": + return { + address: entryPoint06Address, + version: "0.6" as entryPointVersion + } + case "0.7": + return { + address: entryPoint07Address, + version: "0.7" as entryPointVersion + } + case "0.8": + return { + address: entryPoint08Address, + version: "0.8" as entryPointVersion + } + default: + throw new Error("Unknown EntryPoint version") + } +} + export const getBundlerClient = ({ altoRpc, anvilRpc, @@ -110,31 +140,19 @@ export const getBundlerClient = ({ anvilRpc: string account?: account entryPoint: { - version: "0.6" | "0.7" + version: EntryPointVersion } }) => { const paymaster = paymasterRpc ? createPimlicoClient({ transport: http(paymasterRpc), - entryPoint: { - address: - entryPoint.version === "0.6" - ? entryPoint06Address - : entryPoint07Address, - version: entryPoint.version - } + entryPoint: getEntryPointFromVersion(entryPoint.version) }) : undefined const pimlicoBundler = createPimlicoClient({ transport: http(altoRpc), - entryPoint: { - address: - entryPoint.version === "0.6" - ? entryPoint06Address - : entryPoint07Address, - version: entryPoint.version - } + entryPoint: getEntryPointFromVersion(entryPoint.version) }) return createSmartAccountClient({ @@ -178,7 +196,7 @@ export const getSmartAccountClient = < }) } -export const getPimlicoClient = ({ +export const getPimlicoClient = ({ entryPointVersion, altoRpc }: { @@ -187,14 +205,7 @@ export const getPimlicoClient = ({ }) => createPimlicoClient({ chain: foundry, - entryPoint: { - address: (entryPointVersion === "0.6" - ? entryPoint06Address - : entryPoint07Address) as entryPointVersion extends "0.6" - ? typeof entryPoint06Address - : typeof entryPoint07Address, - version: entryPointVersion - }, + entryPoint: getEntryPointFromVersion(entryPointVersion), transport: http(altoRpc) }) @@ -216,7 +227,7 @@ export const getPublicClient = (anvilRpc: string) => { } export const getSimpleAccountClient = async < - entryPointVersion extends "0.6" | "0.7" + entryPointVersion extends EntryPointVersion >({ entryPoint, anvilRpc, @@ -226,15 +237,7 @@ export const getSimpleAccountClient = async < > => { return toSimpleSmartAccount({ client: getPublicClient(anvilRpc), - entryPoint: { - address: - entryPoint.version === "0.6" - ? entryPoint06Address - : entryPoint07Address, - version: (entryPoint.version === "0.6" - ? "0.6" - : "0.7") as entryPointVersion - }, + entryPoint: getEntryPointFromVersion(entryPoint.version), owner: privateKeyToAccount(privateKey ?? generatePrivateKey()) }) } @@ -250,13 +253,7 @@ export const getLightAccountClient = async < version?: LightAccountVersion }) => { return toLightSmartAccount({ - entryPoint: { - address: - entryPoint.version === "0.6" - ? entryPoint06Address - : entryPoint07Address, - version: entryPoint.version === "0.6" ? "0.6" : "0.7" - }, + entryPoint: getEntryPointFromVersion<"0.6" | "0.7">(entryPoint.version), client: getPublicClient(anvilRpc), version: version ?? "1.1.0", owner: privateKeyToAccount(privateKey ?? generatePrivateKey()) @@ -273,10 +270,7 @@ export const getTrustAccountClient = async < return toTrustSmartAccount({ client: getPublicClient(anvilRpc), owner: privateKeyToAccount(privateKey ?? generatePrivateKey()), - entryPoint: { - address: entryPoint06Address, - version: "0.6" - } + entryPoint: getEntryPointFromVersion("0.6") }) } @@ -290,10 +284,7 @@ export const getBiconomyClient = async < return toBiconomySmartAccount({ client: getPublicClient(anvilRpc), owners: [privateKeyToAccount(privateKey ?? generatePrivateKey())], - entryPoint: { - address: entryPoint06Address, - version: "0.6" - } + entryPoint: getEntryPointFromVersion("0.6") }) } @@ -331,13 +322,7 @@ export const getKernelEcdsaClient = async < return toKernelSmartAccount({ client: publicClient, - entryPoint: { - address: - entryPoint.version === "0.6" - ? entryPoint06Address - : entryPoint07Address, - version: entryPoint.version === "0.6" ? "0.6" : "0.7" - }, + entryPoint: getEntryPointFromVersion(entryPoint.version), useMetaFactory, owners: [privateKeyToAccount(privateKey ?? generatePrivateKey())], version @@ -363,13 +348,7 @@ export const getSafeClient = async ({ return toSafeSmartAccount({ client: publicClient, onchainIdentifier, - entryPoint: { - address: - entryPoint.version === "0.6" - ? entryPoint06Address - : entryPoint07Address, - version: entryPoint.version === "0.6" ? "0.6" : "0.7" - }, + entryPoint: getEntryPointFromVersion(entryPoint.version), owners: owners ?? [ privateKeyToAccount(privateKey ?? generatePrivateKey()) ], @@ -405,13 +384,7 @@ export const getThirdwebClient = async < return toThirdwebSmartAccount({ client: publicClient, version: "1.5.20", - entryPoint: { - address: - entryPoint.version === "0.6" - ? entryPoint06Address - : entryPoint07Address, - version: entryPoint.version === "0.6" ? "0.6" : "0.7" - }, + entryPoint: getEntryPointFromVersion(entryPoint.version), owner: privateKeyToAccount(privateKey ?? generatePrivateKey()) }) } @@ -424,10 +397,7 @@ export const getEtherspotClient = async < return toEtherspotSmartAccount({ client: getPublicClient(anvilRpc), owners: [privateKeyToAccount(generatePrivateKey())], - entryPoint: { - address: entryPoint07Address, - version: "0.7" - } + entryPoint: getEntryPointFromVersion("0.7") }) } @@ -444,6 +414,7 @@ export const getCoreSmartAccounts = () => [ }, supportsEntryPointV06: true, supportsEntryPointV07: false, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -460,6 +431,7 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: true, supportsEntryPointV07: false, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -476,11 +448,14 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { name: "Simple", - getSmartAccountClient: async ( + getSmartAccountClient: async < + entryPointVersion extends EntryPointVersion + >( conf: AAParamType ) => getBundlerClient({ @@ -489,6 +464,7 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: true, supportsEntryPointV07: true, + supportsEntryPointV08: true, isEip1271Compliant: false }, { @@ -505,6 +481,7 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: true, supportsEntryPointV07: false, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -521,6 +498,7 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: true, supportsEntryPointV07: false, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -537,6 +515,7 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: true, supportsEntryPointV07: false, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -553,6 +532,7 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: true, supportsEntryPointV07: false, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -583,6 +563,7 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -611,6 +592,7 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -641,6 +623,7 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -669,6 +652,7 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -697,6 +681,7 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -725,6 +710,7 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -738,6 +724,7 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: true, supportsEntryPointV07: false, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -760,6 +747,7 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -773,6 +761,7 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: true, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -789,6 +778,7 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: true, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -809,6 +799,7 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: true, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -831,6 +822,7 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -861,6 +853,7 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -874,6 +867,7 @@ export const getCoreSmartAccounts = () => [ }), supportsEntryPointV06: false, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -896,6 +890,7 @@ export const getCoreSmartAccounts = () => [ // }), supportsEntryPointV06: true, supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true } ] diff --git a/packages/permissionless/actions/pimlico/sponsorUserOperation.ts b/packages/permissionless/actions/pimlico/sponsorUserOperation.ts index 920c1971..5af77f06 100644 --- a/packages/permissionless/actions/pimlico/sponsorUserOperation.ts +++ b/packages/permissionless/actions/pimlico/sponsorUserOperation.ts @@ -8,12 +8,12 @@ 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" export type PimlicoSponsorUserOperationParameters< - entryPointVersion extends "0.6" | "0.7" + entryPointVersion extends EntryPointVersion > = { userOperation: OneOf< | (entryPointVersion extends "0.6" @@ -43,7 +43,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" ? { @@ -70,7 +70,7 @@ export type SponsorUserOperationReturnType< * @deprecated Use `getPaymasterData` instead */ 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/clients/decorators/pimlico.ts b/packages/permissionless/clients/decorators/pimlico.ts index 53830724..1cc107cd 100644 --- a/packages/permissionless/clients/decorators/pimlico.ts +++ b/packages/permissionless/clients/decorators/pimlico.ts @@ -23,10 +23,11 @@ import { type SponsorUserOperationReturnType, sponsorUserOperation } from "../../actions/pimlico/sponsorUserOperation.js" +import { EntryPointVersion } from "viem/_types/account-abstraction/index.js" 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. @@ -129,7 +130,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..4b9a19b4 100644 --- a/packages/permissionless/clients/pimlico.ts +++ b/packages/permissionless/clients/pimlico.ts @@ -13,6 +13,7 @@ import { type BundlerActions, type PaymasterActions, type SmartAccount, + type EntryPointVersion, bundlerActions, entryPoint07Address, paymasterActions @@ -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/types/pimlico.ts b/packages/permissionless/types/pimlico.ts index be7d3b4a..d4c6e0ed 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" From 49574a75734dbe0f079c4242e85d299a0d12be06 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Tue, 29 Apr 2025 15:31:42 +0100 Subject: [PATCH 08/55] lint --- packages/permissionless-test/src/types.ts | 2 +- packages/permissionless-test/src/utils.ts | 6 +++--- packages/permissionless/clients/decorators/pimlico.ts | 2 +- packages/permissionless/clients/pimlico.ts | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/permissionless-test/src/types.ts b/packages/permissionless-test/src/types.ts index dda36aa4..f7896f3d 100644 --- a/packages/permissionless-test/src/types.ts +++ b/packages/permissionless-test/src/types.ts @@ -1,5 +1,5 @@ import type { Hex } from "viem" -import { EntryPointVersion } from "viem/account-abstraction" +import type { EntryPointVersion } from "viem/account-abstraction" export type AAParamType = { entryPoint: { diff --git a/packages/permissionless-test/src/utils.ts b/packages/permissionless-test/src/utils.ts index 9db42c37..ac24e088 100644 --- a/packages/permissionless-test/src/utils.ts +++ b/packages/permissionless-test/src/utils.ts @@ -1,13 +1,13 @@ import { http, type Account, + type Address, type Hex, createPublicClient, - createWalletClient, - Address + createWalletClient } from "viem" import { - EntryPointVersion, + type EntryPointVersion, type SmartAccount, createPaymasterClient, entryPoint06Address, diff --git a/packages/permissionless/clients/decorators/pimlico.ts b/packages/permissionless/clients/decorators/pimlico.ts index 1cc107cd..5669e5dc 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/_types/account-abstraction/index.js" import { type GetTokenQuotesParameters, type GetTokenQuotesReturnType, @@ -23,7 +24,6 @@ import { type SponsorUserOperationReturnType, sponsorUserOperation } from "../../actions/pimlico/sponsorUserOperation.js" -import { EntryPointVersion } from "viem/_types/account-abstraction/index.js" export type PimlicoActions< TChain extends Chain | undefined, diff --git a/packages/permissionless/clients/pimlico.ts b/packages/permissionless/clients/pimlico.ts index 4b9a19b4..28f99508 100644 --- a/packages/permissionless/clients/pimlico.ts +++ b/packages/permissionless/clients/pimlico.ts @@ -11,9 +11,9 @@ import type { import { createClient } from "viem" import { type BundlerActions, + type EntryPointVersion, type PaymasterActions, type SmartAccount, - type EntryPointVersion, bundlerActions, entryPoint07Address, paymasterActions From 4b0272270d81fa6508270fbdee0452974af728b9 Mon Sep 17 00:00:00 2001 From: mouseless0x <97399882+mouseless0x@users.noreply.github.com> Date: Tue, 29 Apr 2025 14:35:55 +0000 Subject: [PATCH 09/55] chore: format --- bun.lockb | Bin 348144 -> 350416 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bun.lockb b/bun.lockb index 417ed38a97142083afd07b4eeb0c875a722b9be4..73ad12273425d4ffb6bb1f71e5584eaae020b8f1 100755 GIT binary patch delta 34981 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 a;T}w{BKCLks%G==X^72wiYJ}C9{wM&elm*y delta 33709 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 From c1a7743014eba12a577026072a9843ed1598d38e Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Tue, 29 Apr 2025 16:03:18 +0100 Subject: [PATCH 10/55] fix test cases --- packages/permissionless-test/src/utils.ts | 16 +++++++++++----- .../permissionless/clients/decorators/pimlico.ts | 2 +- .../permissionless/utils/getRequiredPrefund.ts | 10 ++++++---- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/packages/permissionless-test/src/utils.ts b/packages/permissionless-test/src/utils.ts index ac24e088..cf744deb 100644 --- a/packages/permissionless-test/src/utils.ts +++ b/packages/permissionless-test/src/utils.ts @@ -253,9 +253,11 @@ export const getLightAccountClient = async < version?: LightAccountVersion }) => { return toLightSmartAccount({ - entryPoint: getEntryPointFromVersion<"0.6" | "0.7">(entryPoint.version), + entryPoint: getEntryPointFromVersion( + entryPoint.version + ), client: getPublicClient(anvilRpc), - version: version ?? "1.1.0", + version: version ?? ("1.1.0" as LightAccountVersion), owner: privateKeyToAccount(privateKey ?? generatePrivateKey()) }) } @@ -322,7 +324,9 @@ export const getKernelEcdsaClient = async < return toKernelSmartAccount({ client: publicClient, - entryPoint: getEntryPointFromVersion(entryPoint.version), + entryPoint: getEntryPointFromVersion( + entryPoint.version + ), useMetaFactory, owners: [privateKeyToAccount(privateKey ?? generatePrivateKey())], version @@ -384,7 +388,9 @@ export const getThirdwebClient = async < return toThirdwebSmartAccount({ client: publicClient, version: "1.5.20", - entryPoint: getEntryPointFromVersion(entryPoint.version), + entryPoint: getEntryPointFromVersion( + entryPoint.version + ), owner: privateKeyToAccount(privateKey ?? generatePrivateKey()) }) } @@ -397,7 +403,7 @@ export const getEtherspotClient = async < return toEtherspotSmartAccount({ client: getPublicClient(anvilRpc), owners: [privateKeyToAccount(generatePrivateKey())], - entryPoint: getEntryPointFromVersion("0.7") + entryPoint: getEntryPointFromVersion<"0.7">("0.7") }) } diff --git a/packages/permissionless/clients/decorators/pimlico.ts b/packages/permissionless/clients/decorators/pimlico.ts index 5669e5dc..b40ab5c4 100644 --- a/packages/permissionless/clients/decorators/pimlico.ts +++ b/packages/permissionless/clients/decorators/pimlico.ts @@ -1,5 +1,5 @@ import type { Address, Chain, Client, Hash, Prettify, Transport } from "viem" -import type { EntryPointVersion } from "viem/_types/account-abstraction/index.js" +import type { EntryPointVersion } from "viem/account-abstraction" import { type GetTokenQuotesParameters, type GetTokenQuotesReturnType, 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 + From 6248d4b7c3903234c608be8ac1b492d187244e48 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Tue, 29 Apr 2025 16:30:26 +0100 Subject: [PATCH 11/55] add changeset --- .changeset/easy-apples-yawn.md | 5 +++ packages/mock-paymaster/helpers/abi.ts | 4 +- .../mock-paymaster/helpers/erc20-utils.ts | 24 +++++------ packages/mock-paymaster/helpers/utils.ts | 4 +- .../mock-paymaster/singletonPaymasters.ts | 40 +++++++++---------- 5 files changed, 40 insertions(+), 37 deletions(-) create mode 100644 .changeset/easy-apples-yawn.md 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/packages/mock-paymaster/helpers/abi.ts b/packages/mock-paymaster/helpers/abi.ts index 79f4b41f..8922e3f6 100644 --- a/packages/mock-paymaster/helpers/abi.ts +++ b/packages/mock-paymaster/helpers/abi.ts @@ -1,4 +1,4 @@ -export const SINGLETON_PAYMASTER_V07_ABI = [ +export const singletonPaymaster07Abi = [ { type: "constructor", inputs: [ @@ -621,7 +621,7 @@ export const SINGLETON_PAYMASTER_V07_ABI = [ } ] as const -export const SINGLETON_PAYMASTER_V06_ABI = [ +export const singletonPaymaster06Abi = [ { inputs: [ { internalType: "address", name: "_entryPoint", type: "address" }, 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/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/singletonPaymasters.ts b/packages/mock-paymaster/singletonPaymasters.ts index b58b6852..aa207137 100644 --- a/packages/mock-paymaster/singletonPaymasters.ts +++ b/packages/mock-paymaster/singletonPaymasters.ts @@ -25,8 +25,8 @@ import { } from "viem/account-abstraction" import { foundry } from "viem/chains" import { - SINGLETON_PAYMASTER_V06_ABI, - SINGLETON_PAYMASTER_V07_ABI + singletonPaymaster06Abi, + singletonPaymaster07Abi } from "./helpers/abi.js" import { getPublicClient } from "./helpers/utils.js" import type { PaymasterMode } from "./helpers/utils.js" @@ -98,7 +98,7 @@ export const getDummyPaymasterData = ( } // Creates the call that deploys the SingletonPaymaster v0.7 -const SINGLETON_PAYMASTER_V07_CALL = (owner: Address): Hex => +const getSingletonPaymaster07CreateCall = (owner: Address): Hex => concat([ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x610160604052600060a052600160c052605060e052600c6101005260346101205260146101405234801561003257600080fd5b50604051612634380380612634833981016040819052610051916101aa565b828282808383806001600160a01b03811661008657604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61008f81610128565b50506001600160a01b031660805260005b81518110156100fa5760018060008484815181106100c0576100c061029d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016100a0565b5050600280546001600160a01b0319166001600160a01b039390931692909217909155506102b39350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461018f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156101bf57600080fd5b6101c884610178565b92506101d660208501610178565b60408501519092506001600160401b038111156101f257600080fd5b8401601f8101861361020357600080fd5b80516001600160401b0381111561021c5761021c610194565b604051600582901b90603f8201601f191681016001600160401b038111828210171561024a5761024a610194565b60405291825260208184018101929081018984111561026857600080fd5b6020850194505b8385101561028e5761028085610178565b81526020948501940161026f565b50809450505050509250925092565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e0516101005161012051610140516122b36103816000396000505060008181610c020152610dc7015260008181610665015261140801526000818161069901526115a4015260008181610c2e01528181610d0401528181610fb201526112a601526000818161063401528181610c5f01528181610cc50152818161110401526111e7015260008181610327015281816104370152818161058c01528181610700015281816107cd01528181610856015281816109090152610b6201526122b36000f3fe6080604052600436106101445760003560e01c80637c627b21116100c0578063c399ec8811610074578063eb12d61e11610059578063eb12d61e1461039b578063f0f44260146103bb578063f2fde38b146103db57600080fd5b8063c399ec881461037e578063d0e30db01461039357600080fd5b8063b0d691fe116100a5578063b0d691fe14610315578063bb9fe6bf14610349578063c23a5cea1461035e57600080fd5b80637c627b21146102ca5780638da5cb5b146102ea57600080fd5b80635525dcfb1161011757806363b241aa116100fc57806363b241aa14610255578063715018a614610275578063736c0d5b1461028a57600080fd5b80635525dcfb146101d557806361d027b31461020357600080fd5b80630396cb60146101495780630e316ab71461015e578063205c28781461017e57806352b7512c1461019e575b600080fd5b61015c610157366004611ba1565b6103fb565b005b34801561016a57600080fd5b5061015c610179366004611c00565b6104ad565b34801561018a57600080fd5b5061015c610199366004611c1d565b610538565b3480156101aa57600080fd5b506101be6101b9366004611c62565b6105d0565b6040516101cc929190611cb0565b60405180910390f35b3480156101e157600080fd5b506101f56101f0366004611d23565b6105f3565b6040519081526020016101cc565b34801561020f57600080fd5b506002546102309073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101cc565b34801561026157600080fd5b506101f5610270366004611d55565b610630565b34801561028157600080fd5b5061015c6106c6565b34801561029657600080fd5b506102ba6102a5366004611c00565b60016020526000908152604090205460ff1681565b60405190151581526020016101cc565b3480156102d657600080fd5b5061015c6102e5366004611dab565b6106da565b3480156102f657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610230565b34801561032157600080fd5b506102307f000000000000000000000000000000000000000000000000000000000000000081565b34801561035557600080fd5b5061015c6106f6565b34801561036a57600080fd5b5061015c610379366004611c00565b610780565b34801561038a57600080fd5b506101f5610825565b61015c6108db565b3480156103a757600080fd5b5061015c6103b6366004611c00565b610963565b3480156103c757600080fd5b5061015c6103d6366004611c00565b6109eb565b3480156103e757600080fd5b5061015c6103f6366004611c00565b610a8e565b610403610af7565b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815263ffffffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690630396cb609034906024016000604051808303818588803b15801561049157600080fd5b505af11580156104a5573d6000803e3d6000fd5b505050505050565b6104b5610af7565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b91015b60405180910390a150565b610540610af7565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063205c287890604401600060405180830381600087803b15801561049157600080fd5b606060006105dc610b4a565b6105e7858585610be9565b91509150935093915050565b6000670de0b6b3a7640000826106098587611e77565b6106139088611e8e565b61061d9190611e77565b6106279190611ea1565b95945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000060ff168360ff16036106935761068c827f000000000000000000000000000000000000000000000000000000000000000060ff16610d50565b90506106c0565b61068c827f000000000000000000000000000000000000000000000000000000000000000060ff16610d50565b92915050565b6106ce610af7565b6106d86000610ecd565b565b6106e2610b4a565b6106ef8585858585610f42565b5050505050565b6106fe610af7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561076657600080fd5b505af115801561077a573d6000803e3d6000fd5b50505050565b610788610af7565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90602401600060405180830381600087803b15801561081157600080fd5b505af11580156106ef573d6000803e3d6000fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156108b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d69190611edc565b905090565b6040517fb760faf90000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b760faf99034906024016000604051808303818588803b15801561081157600080fd5b61096b610af7565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602081815260409283902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690921790915590519182527f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f24910161052d565b6109f3610af7565b6002546040805173ffffffffffffffffffffffffffffffffffffffff928316815291831660208301527f4ab5be82436d353e61ca18726e984e561f5c1cc7c6d38b29d2553c790434705a910160405180910390a1600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610a96610af7565b73ffffffffffffffffffffffffffffffffffffffff8116610aeb576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b610af481610ecd565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106d8576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610ae2565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f53656e646572206e6f7420456e747279506f696e7400000000000000000000006044820152606401610ae2565b60606000803681610c26610c0060e08a018a611ef5565b7f000000000000000000000000000000000000000000000000000000000000000061103e565b9250925092507f000000000000000000000000000000000000000000000000000000000000000060ff168360ff1614158015610c8857507f000000000000000000000000000000000000000000000000000000000000000060ff168360ff1614155b15610cbf576040517f654a4f2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606060007f000000000000000000000000000000000000000000000000000000000000000060ff168560ff1603610d0257610cfc8a85858c6110de565b90925090505b7f000000000000000000000000000000000000000000000000000000000000000060ff168560ff1603610d4157610d3b8a85858c61128b565b90925090505b90999098509650505050505050565b60008083356020850135608086013560a087013560c0880135610d7660408a018a611ef5565b604051610d84929190611f61565b604051908190039020610d9a60608b018b611ef5565b604051610da8929190611f61565b604051908190039020610dbe60e08c018c611ef5565b600090610deb8d7f0000000000000000000000000000000000000000000000000000000000000000611e8e565b92610df893929190611f71565b604051610e06929190611f61565b6040805191829003822073ffffffffffffffffffffffffffffffffffffffff90991660208301528101969096526060860194909452608085019290925260a084015260c083015260e082015261010081019190915261012001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120908301819052469183019190915230606083015291506080016040516020818303038152906040528051906020012091505092915050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806000806000610f54898961134d565b5050945094509450945094506000610f8088846fffffffffffffffffffffffffffffffff1689876105f3565b600254909150610faa908690889073ffffffffffffffffffffffffffffffffffffffff16846113a2565b6040805160ff7f000000000000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff8781166020830152918101839052606081018690529087169083907f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd29060800160405180910390a35050505050505050505050565b6000368161104d846001611e8e565b851015611086576040517fcc32193e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000868587611096826001611e8e565b926110a393929190611f71565b6110ac91611f9b565b60f81c905036600088886110c1896001611e8e565b6110cc928290611f71565b939a9099509297509195505050505050565b606060008060003660006110f289896113ff565b9350935093509350600061115c6111297f00000000000000000000000000000000000000000000000000000000000000008d610630565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b905060006111a08285858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150a92505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205491925060ff909116906111db82158989611534565b90508d356040805160ff7f0000000000000000000000000000000000000000000000000000000000000000168152600060208201819052918101829052606081019190915273ffffffffffffffffffffffffffffffffffffffff91909116908c907f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd29060800160405180910390a36040805160208101909152600081529e909d509b505050505050505050505050565b606060008061129a868661156c565b905060006112cb6111297f00000000000000000000000000000000000000000000000000000000000000008a610630565b905060006112dd828460a0015161150a565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604082205486519187015193945060ff169261131e91841591611534565b9050600061133b8c8760600151886080015189604001518d61181e565b9c919b50909950505050505050505050565b600080808080808080611362898b018b612021565b9050806000015181602001518260400151836060015184608001518560a001518660c0015197509750975097509750975097505092959891949750929550565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c52602060006064601c6000895af13d1560016000511417166113f157637939f4246000526004601cfd5b600060605260405250505050565b600080368160ff7f000000000000000000000000000000000000000000000000000000000000000016851015611461576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611470600682888a611f71565b611479916120e3565b60d01c9050600061148e600c6006898b611f71565b611497916120e3565b60d01c90503660006114ac89600c818d611f71565b9092509050604081148015906114c3575060418114155b156114fa576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9299919850965090945092505050565b60008060008061151a8686611952565b92509250925061152a828261199f565b5090949350505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561155c57600061155f565b60015b60ff161717949350505050565b6040805160c0810182526000808252602082018190529181018290526060808201839052608082019290925260a081019190915260ff7f0000000000000000000000000000000000000000000000000000000000000000168210156115fd576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061160c6006828587611f71565b611615916120e3565b60d01c9050600061162a600c60068688611f71565b611633916120e3565b60d01c905060006116486020600c8789611f71565b61165191612148565b60601c9050600061166660306020888a611f71565b61166f916121ad565b60801c9050600061168460506030898b611f71565b61168d91612212565b905036600061169f896050818d611f71565b909250905073ffffffffffffffffffffffffffffffffffffffff85166116f1576040517f33c1dac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361172b576040517f5b33c69600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040811480159061173d575060418114155b15611774576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518060c001604052808965ffffffffffff1681526020018865ffffffffffff168152602001866fffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509b9a5050505050505050505050565b6040805160e081019091526060908061183a6020890189611c00565b73ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001846fffffffffffffffffffffffffffffffff1681526020018381526020016000815260200160008152506040516020016119389190600060e08201905073ffffffffffffffffffffffffffffffffffffffff835116825273ffffffffffffffffffffffffffffffffffffffff6020840151166020830152604083015160408301526fffffffffffffffffffffffffffffffff60608401511660608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b604051602081830303815290604052905095945050505050565b6000806000835160410361198c5760208401516040850151606086015160001a61197e88828585611aa7565b955095509550505050611998565b50508151600091506002905b9250925092565b60008260038111156119b3576119b361224e565b036119bc575050565b60018260038111156119d0576119d061224e565b03611a07576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611a1b57611a1b61224e565b03611a55576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610ae2565b6003826003811115611a6957611a6961224e565b03611aa3576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610ae2565b5050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115611ae25750600091506003905082611b97565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611b36573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611b8d57506000925060019150829050611b97565b9250600091508190505b9450945094915050565b600060208284031215611bb357600080fd5b813563ffffffff81168114611bc757600080fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610af457600080fd5b8035611bfb81611bce565b919050565b600060208284031215611c1257600080fd5b8135611bc781611bce565b60008060408385031215611c3057600080fd5b8235611c3b81611bce565b946020939093013593505050565b60006101208284031215611c5c57600080fd5b50919050565b600080600060608486031215611c7757600080fd5b833567ffffffffffffffff811115611c8e57600080fd5b611c9a86828701611c49565b9660208601359650604090950135949350505050565b604081526000835180604084015260005b81811015611cde5760208187018101516060868401015201611cc1565b5060006060828501015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168401019150508260208301529392505050565b60008060008060808587031215611d3957600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215611d6857600080fd5b823560ff81168114611d7957600080fd5b9150602083013567ffffffffffffffff811115611d9557600080fd5b611da185828601611c49565b9150509250929050565b600080600080600060808688031215611dc357600080fd5b853560038110611dd257600080fd5b9450602086013567ffffffffffffffff811115611dee57600080fd5b8601601f81018813611dff57600080fd5b803567ffffffffffffffff811115611e1657600080fd5b886020828401011115611e2857600080fd5b959860209190910197509495604081013595606090910135945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176106c0576106c0611e48565b808201808211156106c0576106c0611e48565b600082611ed7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611eee57600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611f2a57600080fd5b83018035915067ffffffffffffffff821115611f4557600080fd5b602001915036819003821315611f5a57600080fd5b9250929050565b8183823760009101908152919050565b60008085851115611f8157600080fd5b83861115611f8e57600080fd5b5050820193919092039150565b80357fff000000000000000000000000000000000000000000000000000000000000008116906001841015611ffa577fff00000000000000000000000000000000000000000000000000000000000000808560010360031b1b82161691505b5092915050565b80356fffffffffffffffffffffffffffffffff81168114611bfb57600080fd5b600060e082840312801561203457600080fd5b6000905060405160e0810181811067ffffffffffffffff82111715612080577f4e487b710000000000000000000000000000000000000000000000000000000083526041600452602483fd5b60405261208c84611bf0565b815261209a60208501611bf0565b6020820152604084810135908201526120b560608501612001565b60608201526080848101359082015260a0808501359082015260c09384013593810193909352509092915050565b80357fffffffffffff00000000000000000000000000000000000000000000000000008116906006841015611ffa577fffffffffffff0000000000000000000000000000000000000000000000000000808560060360031b1b82161691505092915050565b80357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116906014841015611ffa577fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808560140360031b1b82161691505092915050565b80357fffffffffffffffffffffffffffffffff000000000000000000000000000000008116906010841015611ffa577fffffffffffffffffffffffffffffffff00000000000000000000000000000000808560100360031b1b82161691505092915050565b803560208310156106c0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea2646970667358221220d4b47765504d1aee07971ecb33f299cd13465059fbfeb55e32bdeb75ec9e629264736f6c634300081a00330000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", @@ -108,7 +108,7 @@ const SINGLETON_PAYMASTER_V07_CALL = (owner: Address): Hex => ]) // Creates the call that deploys the SingletonPaymaster v0.6 -const SINGLETON_PAYMASTER_V06_CALL = (owner: Address): Hex => +const getSingletonPaymaster06CreateCall = (owner: Address): Hex => concat([ "0x0000000000000000000000000000000000000000000000000000000000000000", "0x610140604052600060a052600160c052605060e052600c6101005260146101205234801561002c57600080fd5b5060405161270838038061270883398101604081905261004b916101a4565b828282808383806001600160a01b03811661008057604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61008981610122565b50506001600160a01b031660805260005b81518110156100f45760018060008484815181106100ba576100ba610297565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010161009a565b5050600280546001600160a01b0319166001600160a01b039390931692909217909155506102ad9350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461018957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156101b957600080fd5b6101c284610172565b92506101d060208501610172565b60408501519092506001600160401b038111156101ec57600080fd5b8401601f810186136101fd57600080fd5b80516001600160401b038111156102165761021661018e565b604051600582901b90603f8201601f191681016001600160401b03811182821017156102445761024461018e565b60405291825260208184018101929081018984111561026257600080fd5b6020850194505b838510156102885761027a85610172565b815260209485019401610269565b50809450505050509250925092565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e051610100516101205161239561037360003960008181610e980152610fc70152600081816108da01526114f501526000818161090e0152611691015260008181610d7801528181610ff3015281816110c901526114450152600081816108a9015281816110240152818161108a0152818161129b01526113870152600081816102d501528181610433015281816105880152818161064101528181610708015281816107980152818161084b0152610bd201526123956000f3fe6080604052600436106101445760003560e01c8063b0d691fe116100c0578063dd16f84711610074578063f0f4426011610059578063f0f4426014610389578063f2fde38b146103a9578063f465c77e146103c957600080fd5b8063dd16f84714610349578063eb12d61e1461036957600080fd5b8063c23a5cea116100a5578063c23a5cea1461030c578063c399ec881461032c578063d0e30db01461034157600080fd5b8063b0d691fe146102c3578063bb9fe6bf146102f757600080fd5b806361d027b311610117578063736c0d5b116100fc578063736c0d5b146102385780638da5cb5b14610278578063a9a23409146102a357600080fd5b806361d027b3146101d1578063715018a61461022357600080fd5b80630396cb60146101495780630e316ab71461015e578063205c28781461017e5780635525dcfb1461019e575b600080fd5b61015c610157366004611c95565b6103f7565b005b34801561016a57600080fd5b5061015c610179366004611ced565b6104a9565b34801561018a57600080fd5b5061015c610199366004611d0a565b610534565b3480156101aa57600080fd5b506101be6101b9366004611d36565b6105cc565b6040519081526020015b60405180910390f35b3480156101dd57600080fd5b506002546101fe9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c8565b34801561022f57600080fd5b5061015c610609565b34801561024457600080fd5b50610268610253366004611ced565b60016020526000908152604090205460ff1681565b60405190151581526020016101c8565b34801561028457600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166101fe565b3480156102af57600080fd5b5061015c6102be366004611d68565b61061d565b3480156102cf57600080fd5b506101fe7f000000000000000000000000000000000000000000000000000000000000000081565b34801561030357600080fd5b5061015c610637565b34801561031857600080fd5b5061015c610327366004611ced565b6106bb565b34801561033857600080fd5b506101be610767565b61015c61081d565b34801561035557600080fd5b506101be610364366004611e13565b6108a5565b34801561037557600080fd5b5061015c610384366004611ced565b61093b565b34801561039557600080fd5b5061015c6103a4366004611ced565b6109c3565b3480156103b557600080fd5b5061015c6103c4366004611ced565b610a66565b3480156103d557600080fd5b506103e96103e4366004611e69565b610acf565b6040516101c8929190611eb7565b6103ff610af2565b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815263ffffffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690630396cb609034906024016000604051808303818588803b15801561048d57600080fd5b505af11580156104a1573d6000803e3d6000fd5b505050505050565b6104b1610af2565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b91015b60405180910390a150565b61053c610af2565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063205c287890604401600060405180830381600087803b15801561048d57600080fd5b6000670de0b6b3a7640000826105e28587611f59565b6105ec9088611f70565b6105f69190611f59565b6106009190611f83565b95945050505050565b610611610af2565b61061b6000610b45565b565b610625610bba565b61063184848484610c59565b50505050565b61063f610af2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156106a757600080fd5b505af1158015610631573d6000803e3d6000fd5b6106c3610af2565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90602401600060405180830381600087803b15801561074c57600080fd5b505af1158015610760573d6000803e3d6000fd5b5050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156107f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108189190611fbe565b905090565b6040517fb760faf90000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b760faf99034906024016000604051808303818588803b15801561074c57600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000060ff168360ff160361090857610901827f000000000000000000000000000000000000000000000000000000000000000060ff16610e08565b9050610935565b610901827f000000000000000000000000000000000000000000000000000000000000000060ff16610e08565b92915050565b610943610af2565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602081815260409283902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690921790915590519182527f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f249101610529565b6109cb610af2565b6002546040805173ffffffffffffffffffffffffffffffffffffffff928316815291831660208301527f4ab5be82436d353e61ca18726e984e561f5c1cc7c6d38b29d2553c790434705a910160405180910390a1600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610a6e610af2565b73ffffffffffffffffffffffffffffffffffffffff8116610ac3576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b610acc81610b45565b50565b60606000610adb610bba565b610ae6858585610fad565b91509150935093915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461061b576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610aba565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461061b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f53656e646572206e6f7420456e747279506f696e7400000000000000000000006044820152606401610aba565b6000806000806000806000610c6e8a8a611115565b96509650965096509650965096506000818303610c8c575081610ca2565b610c9f83610c9a4885611f70565b61116a565b90505b6000610cc28a876fffffffffffffffffffffffffffffffff16848a6105cc565b905060028d6002811115610cd857610cd8611fd7565b14610df957600254600090610d07908a908c9073ffffffffffffffffffffffffffffffffffffffff1685611182565b905080610d70576040517f1db0f4fb00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610aba565b6040805160ff7f000000000000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff8b81166020830152918101849052606081018a9052908b169087907f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd29060800160405180910390a3505b50505050505050505050505050565b600080610e186020850185611ced565b6020850135608086013560a087013560c088013560e08901356101008a0135610e4460608c018c612006565b604051610e52929190612072565b60405180910390208b8060400190610e6a9190612006565b604051610e78929190612072565b604051908190039020610e8f6101208e018e612006565b600090610ebc8f7f0000000000000000000000000000000000000000000000000000000000000000611f70565b92610ec993929190612082565b604051610ed7929190612072565b6040805191829003822073ffffffffffffffffffffffffffffffffffffffff909b1660208301528101989098526060880196909652608087019490945260a086019290925260c085015260e084015261010083015261012082015261014081019190915261016001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120908301819052469183019190915230606083015291506080016040516020818303038152906040528051906020012091505092915050565b60606000803681610feb610fc56101208a018a612006565b7f00000000000000000000000000000000000000000000000000000000000000006111d5565b9250925092507f000000000000000000000000000000000000000000000000000000000000000060ff168360ff161415801561104d57507f000000000000000000000000000000000000000000000000000000000000000060ff168360ff1614155b15611084576040517f654a4f2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606060007f000000000000000000000000000000000000000000000000000000000000000060ff168560ff16036110c7576110c18a85858c611275565b90925090505b7f000000000000000000000000000000000000000000000000000000000000000060ff168560ff1603611106576111008a85858c61142a565b90925090505b90999098509650505050505050565b60008080808080808061112a898b018b6120cc565b9050806000015181602001518260400151836060015184608001518560a001518660c0015197509750975097509750975097505092959891949750929550565b6000818310611179578161117b565b825b9392505050565b600060405182606052836040528460601b602c526f23b872dd000000000000000000000000600c52602060006064601c60008a5af13d156001600051141716915060006060528060405250949350505050565b600036816111e4846001611f70565b85101561121d576040517fcc32193e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600086858761122d826001611f70565b9261123a93929190612082565b6112439161218e565b60f81c90503660008888611258896001611f70565b611263928290612082565b939a9099509297509195505050505050565b6060600080600036600061128989896114ec565b935093509350935060006112f36112c07f00000000000000000000000000000000000000000000000000000000000000008d6108a5565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b905060006113378285858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115f792505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205491925060ff9091169061137282158989611621565b905061138160208f018f611ced565b604080517f000000000000000000000000000000000000000000000000000000000000000060ff1681526000602082018190528183018190526060820152905173ffffffffffffffffffffffffffffffffffffffff92909216918d917f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd2919081900360800190a36040805160208101909152600081529e909d509b505050505050505050505050565b60606000806114398686611659565b9050600061146a6112c07f00000000000000000000000000000000000000000000000000000000000000008a6108a5565b9050600061147c828460a001516115f7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604082205486519187015193945060ff16926114bd91841591611621565b905060006114da8c8760600151886080015189604001518d61190b565b9c919b50909950505050505050505050565b600080368160ff7f00000000000000000000000000000000000000000000000000000000000000001685101561154e576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061155d600682888a612082565b611566916121f4565b60d01c9050600061157b600c6006898b612082565b611584916121f4565b60d01c905036600061159989600c818d612082565b9092509050604081148015906115b0575060418114155b156115e7576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9299919850965090945092505050565b6000806000806116078686611a46565b9250925092506116178282611a93565b5090949350505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561164957600061164c565b60015b60ff161717949350505050565b6040805160c0810182526000808252602082018190529181018290526060808201839052608082019290925260a081019190915260ff7f0000000000000000000000000000000000000000000000000000000000000000168210156116ea576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116f96006828587612082565b611702916121f4565b60d01c90506000611717600c60068688612082565b611720916121f4565b60d01c905060006117356020600c8789612082565b61173e91612259565b60601c9050600061175360306020888a612082565b61175c916122be565b60801c9050600061177160506030898b612082565b61177a91612323565b905036600061178c896050818d612082565b909250905073ffffffffffffffffffffffffffffffffffffffff85166117de576040517f33c1dac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003611818576040517f5b33c69600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040811480159061182a575060418114155b15611861576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518060c001604052808965ffffffffffff1681526020018865ffffffffffff168152602001866fffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509b9a5050505050505050505050565b6040805160e08101909152606090806119276020890189611ced565b73ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001846fffffffffffffffffffffffffffffffff1681526020018381526020018760e001358152602001876101000135815250604051602001611a2c9190600060e08201905073ffffffffffffffffffffffffffffffffffffffff835116825273ffffffffffffffffffffffffffffffffffffffff6020840151166020830152604083015160408301526fffffffffffffffffffffffffffffffff60608401511660608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b604051602081830303815290604052905095945050505050565b60008060008351604103611a805760208401516040850151606086015160001a611a7288828585611b9b565b955095509550505050611a8c565b50508151600091506002905b9250925092565b6000826003811115611aa757611aa7611fd7565b03611ab0575050565b6001826003811115611ac457611ac4611fd7565b03611afb576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611b0f57611b0f611fd7565b03611b49576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610aba565b6003826003811115611b5d57611b5d611fd7565b03611b97576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610aba565b5050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115611bd65750600091506003905082611c8b565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611c2a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611c8157506000925060019150829050611c8b565b9250600091508190505b9450945094915050565b600060208284031215611ca757600080fd5b813563ffffffff8116811461117b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff81168114610acc57600080fd5b8035611ce881611cbb565b919050565b600060208284031215611cff57600080fd5b813561117b81611cbb565b60008060408385031215611d1d57600080fd5b8235611d2881611cbb565b946020939093013593505050565b60008060008060808587031215611d4c57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060008060608587031215611d7e57600080fd5b843560038110611d8d57600080fd5b9350602085013567ffffffffffffffff811115611da957600080fd5b8501601f81018713611dba57600080fd5b803567ffffffffffffffff811115611dd157600080fd5b876020828401011115611de357600080fd5b949760209190910196509394604001359392505050565b60006101608284031215611e0d57600080fd5b50919050565b60008060408385031215611e2657600080fd5b823560ff81168114611e3757600080fd5b9150602083013567ffffffffffffffff811115611e5357600080fd5b611e5f85828601611dfa565b9150509250929050565b600080600060608486031215611e7e57600080fd5b833567ffffffffffffffff811115611e9557600080fd5b611ea186828701611dfa565b9660208601359650604090950135949350505050565b604081526000835180604084015260005b81811015611ee55760208187018101516060868401015201611ec8565b5060006060828501015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168401019150508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761093557610935611f2a565b8082018082111561093557610935611f2a565b600082611fb9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611fd057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261203b57600080fd5b83018035915067ffffffffffffffff82111561205657600080fd5b60200191503681900382131561206b57600080fd5b9250929050565b8183823760009101908152919050565b6000808585111561209257600080fd5b8386111561209f57600080fd5b5050820193919092039150565b80356fffffffffffffffffffffffffffffffff81168114611ce857600080fd5b600060e08284031280156120df57600080fd5b6000905060405160e0810181811067ffffffffffffffff8211171561212b577f4e487b710000000000000000000000000000000000000000000000000000000083526041600452602483fd5b60405261213784611cdd565b815261214560208501611cdd565b602082015260408481013590820152612160606085016120ac565b60608201526080848101359082015260a0808501359082015260c09384013593810193909352509092915050565b80357fff0000000000000000000000000000000000000000000000000000000000000081169060018410156121ed577fff00000000000000000000000000000000000000000000000000000000000000808560010360031b1b82161691505b5092915050565b80357fffffffffffff000000000000000000000000000000000000000000000000000081169060068410156121ed577fffffffffffff0000000000000000000000000000000000000000000000000000808560060360031b1b82161691505092915050565b80357fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081169060148410156121ed577fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808560140360031b1b82161691505092915050565b80357fffffffffffffffffffffffffffffffff0000000000000000000000000000000081169060108410156121ed577fffffffffffffffffffffffffffffffff00000000000000000000000000000000808560100360031b1b82161691505092915050565b80356020831015610935577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b169291505056fea2646970667358221220b198dacaa988aafcb9441005f2a899880d533689da493c4dc98e301d7822f21a64736f6c634300081a00330000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", @@ -117,25 +117,25 @@ const SINGLETON_PAYMASTER_V06_CALL = (owner: Address): Hex => pad(owner) ]) -const SINGLETON_PAYMASTER_V06_ADDRESS = (owner: Address) => +const getSingletonPaymaster06Address = (owner: Address) => getCreate2Address({ from: DETERMINISTIC_DEPLOYER, - salt: slice(SINGLETON_PAYMASTER_V06_CALL(owner), 0, 32), - bytecode: slice(SINGLETON_PAYMASTER_V06_CALL(owner), 32) + salt: slice(getSingletonPaymaster06CreateCall(owner), 0, 32), + bytecode: slice(getSingletonPaymaster06CreateCall(owner), 32) }) -const SINGLETON_PAYMASTER_V07_ADDRESS = (owner: Address) => +const getSingletonPaymaster07Address = (owner: Address) => getCreate2Address({ from: DETERMINISTIC_DEPLOYER, - salt: slice(SINGLETON_PAYMASTER_V07_CALL(owner), 0, 32), - bytecode: slice(SINGLETON_PAYMASTER_V07_CALL(owner), 32) + salt: slice(getSingletonPaymaster07CreateCall(owner), 0, 32), + bytecode: slice(getSingletonPaymaster07CreateCall(owner), 32) }) export class SingletonPaymasterV07 { private anvilRpc: string private walletClient: WalletClient public singletonPaymaster: GetContractReturnType< - typeof SINGLETON_PAYMASTER_V07_ABI, + typeof singletonPaymaster07Abi, { public: PublicClient wallet: WalletClient @@ -148,10 +148,10 @@ export class SingletonPaymasterV07 { ) { this.walletClient = walletClient this.singletonPaymaster = getContract({ - address: SINGLETON_PAYMASTER_V07_ADDRESS( + address: getSingletonPaymaster07Address( walletClient.account.address ), - abi: SINGLETON_PAYMASTER_V07_ABI, + abi: singletonPaymaster07Abi, client: { wallet: walletClient as WalletClient, public: getPublicClient(anvilRpc) @@ -220,7 +220,7 @@ export class SingletonPaymasterV07 { } async setup() { - const data = SINGLETON_PAYMASTER_V07_CALL( + const data = getSingletonPaymaster07CreateCall( this.walletClient.account.address ) @@ -245,7 +245,7 @@ export class SingletonPaymasterV07 { const singletonPaymaster = getContract({ address, - abi: SINGLETON_PAYMASTER_V07_ABI, + abi: singletonPaymaster07Abi, client: this.walletClient }) @@ -260,7 +260,7 @@ export class SingletonPaymasterV07 { export class SingletonPaymasterV06 { private walletClient: WalletClient public singletonPaymaster: GetContractReturnType< - typeof SINGLETON_PAYMASTER_V06_ABI, + typeof singletonPaymaster06Abi, { public: PublicClient wallet: WalletClient @@ -274,10 +274,10 @@ export class SingletonPaymasterV06 { ) { this.walletClient = walletClient this.singletonPaymaster = getContract({ - address: SINGLETON_PAYMASTER_V06_ADDRESS( + address: getSingletonPaymaster06Address( walletClient.account.address ), - abi: SINGLETON_PAYMASTER_V06_ABI, + abi: singletonPaymaster06Abi, client: { wallet: this.walletClient, public: getPublicClient(anvilRpc) @@ -343,7 +343,7 @@ export class SingletonPaymasterV06 { } async setup() { - const data = SINGLETON_PAYMASTER_V06_CALL( + const data = getSingletonPaymaster06CreateCall( this.walletClient.account.address ) @@ -368,7 +368,7 @@ export class SingletonPaymasterV06 { const singletonPaymaster = getContract({ address, - abi: SINGLETON_PAYMASTER_V06_ABI, + abi: singletonPaymaster06Abi, client: this.walletClient }) From 38407170059fdf2f7b9972ac47416b240d8f7611 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Wed, 30 Apr 2025 16:09:56 +0100 Subject: [PATCH 12/55] mock v0.8 --- packages/mock-paymaster/constants.ts | 77 ++++++ packages/mock-paymaster/index.ts | 16 +- packages/mock-paymaster/relay.ts | 120 +++++++- .../mock-paymaster/singletonPaymasters.ts | 259 ++++++++++++------ 4 files changed, 370 insertions(+), 102 deletions(-) create mode 100644 packages/mock-paymaster/constants.ts diff --git a/packages/mock-paymaster/constants.ts b/packages/mock-paymaster/constants.ts new file mode 100644 index 00000000..ea4e25e1 --- /dev/null +++ b/packages/mock-paymaster/constants.ts @@ -0,0 +1,77 @@ +import { + Address, + Hex, + concat, + pad, + encodeAbiParameters, + parseAbiParameters, + getCreate2Address, + getAddress +} from "viem" +import { + entryPoint06Address, + entryPoint07Address, + entryPoint08Address +} from "viem/_types/constants/address" + +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([ + "0x6101806040525f60a052600160c081905260e052607561010052600c61012052603461014052601461016052348015610036575f5ffd5b5060405161414b38038061414b833981016040819052610055916102f4565b6001600160a01b0384166080528383838383838383808484846100785f83610115565b506100a37f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0882610115565b505f925050505b8151811015610102576001805f8484815181106100c9576100c961036d565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790556001016100aa565b5050505050505050505050505050610381565b5f828152602081815260408083206001600160a01b038516845290915281205460ff166101b5575f838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561016d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101b8565b505f5b92915050565b5f6001600160a01b0382166101b8565b6101d7816101be565b81146101e1575f5ffd5b50565b80516101b8816101ce565b634e487b7160e01b5f52604160045260245ffd5b601f19601f83011681018181106001600160401b0382111715610228576102286101ef565b6040525050565b5f61023960405190565b90506102458282610203565b919050565b5f6001600160401b03821115610262576102626101ef565b5060209081020190565b5f61027e6102798461024a565b61022f565b8381529050602080820190840283018581111561029c5761029c5f5ffd5b835b818110156102c057806102b188826101e4565b8452506020928301920161029e565b5050509392505050565b5f82601f8301126102dc576102dc5f5ffd5b81516102ec84826020860161026c565b949350505050565b5f5f5f5f6080858703121561030a5761030a5f5ffd5b5f61031587876101e4565b9450506020610326878288016101e4565b9350506040610337878288016101e4565b92505060608501516001600160401b03811115610355576103555f5ffd5b610361878288016102ca565b91505092959194509250565b634e487b7160e01b5f52603260045260245ffd5b60805160a05160c05160e05161010051610120516101405161016051613ced61045e5f395f50505f8181611304015281816116570152611e8101525f818161157f015261207901525f81816115d9015261223101525f81816115a0015281816115fa015261163501525f81816113880152818161145d015261189501525f81816113b90152818161141e0152818161154b01528181611a1e0152611b2f01525f818161040b015281816106c3015281816108be01528181610cf401528181610db001528181610e3b01528181610ef101526112920152613ced5ff3fe60806040526004361061018e575f3560e01c80637c627b21116100dc578063c23a5cea11610087578063d547741f11610062578063d547741f14610489578063eb12d61e146104a8578063ec87621c146104c7578063feaf513e146104fa575f5ffd5b8063c23a5cea1461044e578063c399ec881461046d578063d0e30db014610481575f5ffd5b8063a217fddf116100b7578063a217fddf146103e7578063b0d691fe146103fa578063bb9fe6bf1461043a575f5ffd5b80637c627b211461035a5780637dd345cb1461037957806391d1485414610398575f5ffd5b806336568abe1161013c5780635525dcfb116101175780635525dcfb146102ee57806363b241aa1461030d578063736c0d5b1461032c575f5ffd5b806336568abe146102745780634031c20e1461029357806352b7512c146102c1575f5ffd5b8063205c28781161016c578063205c2878146101fb578063248a9ca31461021a5780632f2ff15d14610255575f5ffd5b806301ffc9a7146101925780630396cb60146101c75780630e316ab7146101dc575b5f5ffd5b34801561019d575f5ffd5b506101b16101ac366004612d83565b61051e565b6040516101be9190612db3565b60405180910390f35b6101da6101d5366004612dd8565b6105b6565b005b3480156101e7575f5ffd5b506101da6101f6366004612e27565b61072b565b348015610206575f5ffd5b506101da610215366004612e56565b610877565b348015610225575f5ffd5b50610248610234366004612e90565b5f9081526020819052604090206001015490565b6040516101be9190612eb4565b348015610260575f5ffd5b506101da61026f366004612ec2565b610927565b34801561027f575f5ffd5b506101da61028e366004612ec2565b610951565b34801561029e575f5ffd5b506101b16102ad366004612e27565b60026020525f908152604090205460ff1681565b3480156102cc575f5ffd5b506102e06102db366004612f0c565b6109af565b6040516101be929190612fcc565b3480156102f9575f5ffd5b50610248610308366004612fec565b6109d1565b348015610318575f5ffd5b50610248610327366004613060565b610a0d565b348015610337575f5ffd5b506101b1610346366004612e27565b60016020525f908152604090205460ff1681565b348015610365575f5ffd5b506101da61037436600461310f565b610a5a565b348015610384575f5ffd5b506101da6103933660046131e7565b610a76565b3480156103a3575f5ffd5b506101b16103b2366004612ec2565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156103f2575f5ffd5b506102485f81565b348015610405575f5ffd5b5061042d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101be919061328d565b348015610445575f5ffd5b506101da610c2b565b348015610459575f5ffd5b506101da610468366004612e27565b610d69565b348015610478575f5ffd5b50610248610dfc565b6101da610eb4565b348015610494575f5ffd5b506101da6104a3366004612ec2565b610f51565b3480156104b3575f5ffd5b506101da6104c2366004612e27565b610f75565b3480156104d2575f5ffd5b506102487f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b348015610505575f5ffd5b506102486105143660046132be565b5f95945050505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806105b057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156106225750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b1561068657337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d92919061332d565b60405180910390fd5b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630396cb609034906106fa908590600401613354565b5f604051808303818588803b158015610711575f5ffd5b505af1158015610723573d5f5f3e3d5ffd5b505050505050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156107975750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b156107f257337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d92919061332d565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600160205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b9061086c908390613362565b60405180910390a150565b5f610881816110bb565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063205c2878906108f5908690869060040161332d565b5f604051808303815f87803b15801561090c575f5ffd5b505af115801561091e573d5f5f3e3d5ffd5b50505050505050565b5f82815260208190526040902060010154610941816110bb565b61094b83836110c8565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109a0576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109aa82826111c1565b505050565b60605f6109ba61127a565b6109c58585856112eb565b91509150935093915050565b5f670de0b6b3a7640000826109e6858761339d565b6109f090886133bc565b6109fa919061339d565b610a0491906133fc565b95945050505050565b5f5f610a18836114ac565b90505f610a258585611548565b90508082604051602001610a3a92919061340f565b604051602081830303815290604052805190602001209250505092915050565b610a6261127a565b610a6f85858585856116fc565b5050505050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610ae25750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610b3d57337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d92919061332d565b5f5b8281101561094b578160025f868685818110610b5d57610b5d61341d565b9050602002016020810190610b729190612e27565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790557f8ff8c5211f68ef53b4bdd15ab2ea6d87be8a3dbf58865bd8325c984057e4fcb4848483818110610bf757610bf761341d565b9050602002016020810190610c0c9190612e27565b83604051610c1b92919061344a565b60405180910390a1600101610b3f565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610c975750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610cf257337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d92919061332d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610d57575f5ffd5b505af115801561094b573d5f5f3e3d5ffd5b5f610d73816110bb565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90610de5908590600401613362565b5f604051808303815f87803b158015610711575f5ffd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190610e70903090600401613362565b602060405180830381865afa158015610e8b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eaf9190613470565b905090565b6040517fb760faf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b760faf9903490610f28903090600401613362565b5f604051808303818588803b158015610f3f575f5ffd5b505af1158015610a6f573d5f5f3e3d5ffd5b5f82815260208190526040902060010154610f6b816110bb565b61094b83836111c1565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610fe15750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b1561103c57337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d92919061332d565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602081905260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055517f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f249061086c908390613362565b6110c581336118e4565b50565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166111ba575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556111583390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016105b0565b505f6105b0565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156111ba575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016105b0565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146112e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067d906134c4565b565b60605f8080368161132861130260e08b018b6134d4565b7f0000000000000000000000000000000000000000000000000000000000000000611952565b93509350935093508215801561134d5750325f9081526002602052604090205460ff16155b1561138657326040517f55d3ab4600000000000000000000000000000000000000000000000000000000815260040161067d9190613362565b7f000000000000000000000000000000000000000000000000000000000000000060ff168460ff16141580156113e257507f000000000000000000000000000000000000000000000000000000000000000060ff168460ff1614155b15611419576040517f654a4f2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60605f7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff160361145b576114558b85858d6119fc565b90925090505b7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff160361149c57611496868c86868e8e611b8a565b90925090505b909a909950975050505050505050565b5f36816114bc60408501856134d4565b915091506114ca8282611cbb565b6114d757505f9392505050565b5f6114ed6114e86020870187612e27565b611d17565b90506014821161152857806040516020016115089190613573565b604051602081830303815290604052805190602001209350505050919050565b806115368360148187613587565b604051602001611508939291906135d1565b5f7f000000000000000000000000000000000000000000000000000000000000000060ff168360ff16036115d3576115cc826115c47f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006135ed565b60ff16611e0c565b90506105b0565b5f61161e7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006135ed565b90505f61162e60e08501856134d4565b61167b60ff7f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000006133bc565b81811061168a5761168a61341d565b919091013560f81c91505060018116151560028216151560048316158015906116bb576116b86010866135ed565b94505b82156116cf576116cc6010866135ed565b94505b81156116e3576116e06014866135ed565b94505b6116f0878660ff16611e0c565b955050505050506105b0565b5f6117078585611f26565b90505f5f61171582866133bc565b90505f8361018001516fffffffffffffffffffffffffffffffff166117568386608001516fffffffffffffffffffffffffffffffff168888606001516109d1565b61176091906133bc565b90505f84610120015182116117855781856101200151611780919061360a565b611795565b610120850151611795908361360a565b90506117d7856020015186610120015184116117b55786604001516117b8565b86515b87610120015185116117cb5787516117d1565b87604001515b84612019565b5f670de0b6b3a764000086606001518761010001516117f6919061339d565b61180091906133fc565b6101a087015190915073ffffffffffffffffffffffffffffffffffffffff161580159061182c57508281115b1561185357602086015186516101a088015161185392919061184e878661360a565b612019565b855f015173ffffffffffffffffffffffffffffffffffffffff168660a001517f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000008960200151878b606001516040516118cf9493929190613626565b60405180910390a35050505050505050505050565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661194e5780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d92919061332d565b5050565b5f8036816119618560016133bc565b86101561199a576040517fcc32193e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8787878181106119ad576119ad61341d565b919091013560f881901c925060018084161515925060f99190911c9036905f908c908c906119dc908d906133bc565b6119e7928290613587565b939d949c509a50919850919650505050505050565b60605f5f5f365f611a0d8989612071565b93509350935093505f611a75611a437f00000000000000000000000000000000000000000000000000000000000000008d610a0d565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b90505f611ab78285858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061217892505050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205491925060ff90911690611af1821589896121a0565b90508d3573ffffffffffffffffffffffffffffffffffffffff168b7f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000005f5f5f604051611b61949392919061366f565b60405180910390a360408051602081019091525f81529e909d509b505050505050505050505050565b60605f5f611b9887876121d6565b90505f611ba8611a438b8b610a0d565b90505f611bb9828460c00151612178565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260016020908152604080832054918701519087015193945060ff90911692611bfe918415916121a0565b90505f611c0d8d8b888c612933565b905082611c225796509450611cb09350505050565b5f611c338a5f5f8a60a001516109d1565b9050808761010001511115611c74576040517f79183c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010087015115611ca657611ca687608001518f5f016020810190611c999190612e27565b89516101008b0151612019565b5096509450505050505b965096945050505050565b5f6002821015611ccc57505f6105b0565b50507f770200000000000000000000000000000000000000000000000000000000000090357fffffffffffffffffffffffffffffffffffffffff000000000000000000000000161490565b5f5f60175f5f853c505f517fffffff000000000000000000000000000000000000000000000000000000000081167fef0100000000000000000000000000000000000000000000000000000000000014611ded575f8373ffffffffffffffffffffffffffffffffffffffff163b11611dbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067d906136d7565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067d9061371a565b60481c73ffffffffffffffffffffffffffffffffffffffff1692915050565b5f8083356020850135608086013560a087013560c0880135611e3160408a018a6134d4565b604051611e3f92919061372a565b604051908190039020611e5560608b018b6134d4565b604051611e6392919061372a565b604051908190039020611e7960e08c018c6134d4565b5f90611ea58d7f00000000000000000000000000000000000000000000000000000000000000006133bc565b92611eb293929190613587565b604051611ec092919061372a565b604051908190038120611edc9897969594939291602001613736565b6040516020818303038152906040528051906020012090508046604051602001611f0792919061340f565b6040516020818303038152906040528051906020012091505092915050565b612006604051806101c001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f6fffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f6fffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b61201282840184613985565b9392505050565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c5260205f6064601c5f895af13d1560015f5114171661206457637939f4245f526004601cfd5b5f60605260405250505050565b5f80368160ff7f0000000000000000000000000000000000000000000000000000000000000000168510156120d2576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6120e0600682888a613587565b6120e9916139a4565b60d01c90505f6120fd600c6006898b613587565b612106916139a4565b60d01c9050365f61211a89600c818d613587565b909250905060408114801590612131575060418114155b15612168576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9299919850965090945092505050565b5f5f5f5f6121868686612ac0565b9250925092506121968282612b09565b5090949350505050565b5f60d08265ffffffffffff16901b60a08465ffffffffffff16901b856121c6575f6121c9565b60015b60ff161717949350505050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e081018290526101008101829052610120810182905261014081019190915260ff7f00000000000000000000000000000000000000000000000000000000000000001682101561228a576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808484828161229c5761229c61341d565b919091013560f81c915050600180821615159060028316151590600484161515906122c79086613a0f565b9450876fffffffffffffffffffffffffffffffff8616886122e9886006613a0f565b6fffffffffffffffffffffffffffffffff169261230893929190613587565b612311916139a4565b60d01c6020870152612324600686613a0f565b9450876fffffffffffffffffffffffffffffffff861688612346886006613a0f565b6fffffffffffffffffffffffffffffffff169261236593929190613587565b61236e916139a4565b60d01c6040870152612381600686613a0f565b9450876fffffffffffffffffffffffffffffffff8616886123a3886014613a0f565b6fffffffffffffffffffffffffffffffff16926123c293929190613587565b6123cb91613a3b565b60601c60808701526123de601486613a0f565b9450876fffffffffffffffffffffffffffffffff861688612400886010613a0f565b6fffffffffffffffffffffffffffffffff169261241f93929190613587565b61242891613a99565b60801c606087015261243b601086613a0f565b9450876fffffffffffffffffffffffffffffffff86168861245d886020613a0f565b6fffffffffffffffffffffffffffffffff169261247c93929190613587565b61248591613af7565b60a0870152612495602086613a0f565b9450876fffffffffffffffffffffffffffffffff8616886124b7886010613a0f565b6fffffffffffffffffffffffffffffffff16926124d693929190613587565b6124df91613a99565b60801c60e08701526124f2601086613a0f565b9450876fffffffffffffffffffffffffffffffff861688612514886014613a0f565b6fffffffffffffffffffffffffffffffff169261253393929190613587565b61253c91613a3b565b60601c865261254c601486613a0f565b5f6101008801529450801561261057612566856010613a0f565b6fffffffffffffffffffffffffffffffff168710156125b1576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff8616886125d1886010613a0f565b6fffffffffffffffffffffffffffffffff16926125f093929190613587565b6125f991613a99565b60801c61010087015261260d601086613a0f565b94505b5f61012087015282156126d257612628856010613a0f565b6fffffffffffffffffffffffffffffffff16871015612673576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff861688612693886010613a0f565b6fffffffffffffffffffffffffffffffff16926126b293929190613587565b6126bb91613a99565b60801c6101208701526126cf601086613a0f565b94505b5f6101408701528115612794576126ea856014613a0f565b6fffffffffffffffffffffffffffffffff16871015612735576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff861688612755886014613a0f565b6fffffffffffffffffffffffffffffffff169261277493929190613587565b61277d91613a3b565b60601c610140870152612791601486613a0f565b94505b6127b2876fffffffffffffffffffffffffffffffff8716818b613587565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050505060c0870152608086015173ffffffffffffffffffffffffffffffffffffffff1661283b576040517f33c1dac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560a001515f03612878576040517f5b33c69600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81801561289e575061014086015173ffffffffffffffffffffffffffffffffffffffff16155b156128d5576040517f497189f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560c00151516040141580156128f157508560c0015151604114155b15612928576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505092915050565b60605f61293f86612c0a565b61294887612c39565b61295291906133bc565b90505f8460e001516fffffffffffffffffffffffffffffffff1661297588612c56565b6129839060a08a01356133bc565b61298d91906133bc565b604080516101c08101909152909150806129aa60208a018a612e27565b73ffffffffffffffffffffffffffffffffffffffff168152602001866080015173ffffffffffffffffffffffffffffffffffffffff168152602001865f015173ffffffffffffffffffffffffffffffffffffffff1681526020018660a00151815260200186606001516fffffffffffffffffffffffffffffffff1681526020018781526020015f81526020015f815260200185815260200186610100015181526020018381526020018281526020018661012001516fffffffffffffffffffffffffffffffff16815260200186610140015173ffffffffffffffffffffffffffffffffffffffff16815250604051602001612aa59190613c60565b60405160208183030381529060405292505050949350505050565b5f5f5f8351604103612af7576020840151604085015160608601515f1a612ae988828585612c65565b955095509550505050612b02565b505081515f91506002905b9250925092565b5f826003811115612b1c57612b1c613c6f565b03612b25575050565b6001826003811115612b3957612b39613c6f565b03612b70576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115612b8457612b84613c6f565b03612bbd576040517ffce698f700000000000000000000000000000000000000000000000000000000815261067d908290600401612eb4565b6003826003811115612bd157612bd1613c6f565b0361194e57806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161067d9190612eb4565b5f612c1860e08301836134d4565b612c2791603491602491613587565b612c3091613a99565b60801c92915050565b5f6fffffffffffffffffffffffffffffffff6080830135166105b0565b5f6105b0826080013560801c90565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612c9e57505f91506003905082612d40565b5f6001888888886040515f8152602001604052604051612cc19493929190613c9c565b6020604051602081039080840390855afa158015612ce1573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612d3757505f925060019150829050612d40565b92505f91508190505b9450945094915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146110c5575f5ffd5b80356105b081612d4a565b5f60208284031215612d9657612d965f5ffd5b5f612da18484612d78565b949350505050565b8015155b82525050565b602081016105b08284612da9565b63ffffffff8116612d6e565b80356105b081612dc1565b5f60208284031215612deb57612deb5f5ffd5b5f612da18484612dcd565b5f73ffffffffffffffffffffffffffffffffffffffff82166105b0565b612d6e81612df6565b80356105b081612e13565b5f60208284031215612e3a57612e3a5f5ffd5b5f612da18484612e1c565b80612d6e565b80356105b081612e45565b5f5f60408385031215612e6a57612e6a5f5ffd5b5f612e758585612e1c565b9250506020612e8685828601612e4b565b9150509250929050565b5f60208284031215612ea357612ea35f5ffd5b5f612da18484612e4b565b80612dad565b602081016105b08284612eae565b5f5f60408385031215612ed657612ed65f5ffd5b5f612ee18585612e4b565b9250506020612e8685828601612e1c565b5f6101208284031215612f0657612f065f5ffd5b50919050565b5f5f5f60608486031215612f2157612f215f5ffd5b833567ffffffffffffffff811115612f3a57612f3a5f5ffd5b612f4686828701612ef2565b9350506020612f5786828701612e4b565b9250506040612f6886828701612e4b565b9150509250925092565b8281835e505f910152565b5f612f86825190565b808452602084019350612f9d818560208601612f72565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920192915050565b60408082528101612fdd8185612f7d565b90506120126020830184612eae565b5f5f5f5f60808587031215613002576130025f5ffd5b5f61300d8787612e4b565b945050602061301e87828801612e4b565b935050604061302f87828801612e4b565b925050606061304087828801612e4b565b91505092959194509250565b60ff8116612d6e565b80356105b08161304c565b5f5f60408385031215613074576130745f5ffd5b5f61307f8585613055565b925050602083013567ffffffffffffffff81111561309e5761309e5f5ffd5b612e8685828601612ef2565b600381106110c5575f5ffd5b80356105b0816130aa565b5f5f83601f8401126130d4576130d45f5ffd5b50813567ffffffffffffffff8111156130ee576130ee5f5ffd5b602083019150836001820283011115613108576131085f5ffd5b9250929050565b5f5f5f5f5f60808688031215613126576131265f5ffd5b5f61313188886130b6565b955050602086013567ffffffffffffffff811115613150576131505f5ffd5b61315c888289016130c1565b9450945050604061316f88828901612e4b565b925050606061318088828901612e4b565b9150509295509295909350565b5f5f83601f8401126131a0576131a05f5ffd5b50813567ffffffffffffffff8111156131ba576131ba5f5ffd5b602083019150836020820283011115613108576131085f5ffd5b801515612d6e565b80356105b0816131d4565b5f5f5f604084860312156131fc576131fc5f5ffd5b833567ffffffffffffffff811115613215576132155f5ffd5b6132218682870161318d565b93509350506020612f68868287016131dc565b5f6105b073ffffffffffffffffffffffffffffffffffffffff8316613257565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b5f6105b082613234565b5f6105b082613270565b612dad8161327a565b602081016105b08284613284565b6fffffffffffffffffffffffffffffffff8116612d6e565b80356105b08161329b565b5f5f5f5f5f60a086880312156132d5576132d55f5ffd5b5f6132e08888612e4b565b95505060206132f188828901612e4b565b9450506040613302888289016132b3565b935050606061331388828901612e4b565b925050608061318088828901612e4b565b612dad81612df6565b6040810161333b8285613324565b6120126020830184612eae565b63ffffffff8116612dad565b602081016105b08284613348565b602081016105b08284613324565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181028082158382048514176133b5576133b5613370565b5092915050565b808201808211156105b0576105b0613370565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f8261340a5761340a6133cf565b500490565b6040810161333b8285612eae565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b604081016134588285613324565b6120126020830184612da9565b80516105b081612e45565b5f60208284031215613483576134835f5ffd5b5f612da18484613465565b601581525f602082017f53656e646572206e6f7420456e747279506f696e740000000000000000000000815291505b5060200190565b602080825281016105b08161348e565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe13685900301811261350b5761350b5f5ffd5b80840192508235915067ffffffffffffffff82111561352b5761352b5f5ffd5b602083019250600182023603831315613545576135455f5ffd5b509250929050565b5f6105b08260601b90565b5f6105b08261354d565b612dad61356e82612df6565b613558565b5f61357e8284613562565b50601401919050565b5f5f85851115613598576135985f5ffd5b838611156135a7576135a75f5ffd5b5050820193919092039150565b82818337505f910152565b5f6135cb8385846135b4565b50500190565b5f6135dc8286613562565b601482019150610a048284866135bf565b60ff9182169190811690828201908111156105b0576105b0613370565b818103818111156105b0576105b0613370565b60ff8116612dad565b60808101613634828761361d565b6136416020830186613324565b61364e6040830185612eae565b610a046060830184612eae565b5f6105b06132548381565b612dad8161365b565b6080810161367d828761361d565b61368a6020830186613324565b6136976040830185613666565b610a046060830184613666565b601281525f602082017f73656e64657220686173206e6f20636f64650000000000000000000000000000815291506134bd565b602080825281016105b0816136a4565b601881525f602082017f6e6f7420616e204549502d373730322064656c65676174650000000000000000815291506134bd565b602080825281016105b0816136e7565b5f612da18284866135bf565b6101008101613745828b613324565b613752602083018a612eae565b61375f6040830189612eae565b61376c6060830188612eae565b6137796080830187612eae565b61378660a0830186612eae565b61379360c0830185612eae565b6137a060e0830184612eae565b9998505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff8211171561381e5761381e6137ad565b6040525050565b5f61382f60405190565b905061383b82826137da565b919050565b5f6101c08284031215613854576138545f5ffd5b61385f6101c0613825565b90505f61386c8484612e1c565b825250602061387d84848301612e1c565b602083015250604061389184828501612e1c565b60408301525060606138a584828501612e4b565b60608301525060806138b9848285016132b3565b60808301525060a06138cd84828501612e4b565b60a08301525060c06138e184828501612e4b565b60c08301525060e06138f584828501612e4b565b60e08301525061010061390a84828501612e4b565b6101008301525061012061392084828501612e4b565b6101208301525061014061393684828501612e4b565b6101408301525061016061394c84828501612e4b565b61016083015250610180613962848285016132b3565b610180830152506101a061397884828501612e1c565b6101a08301525092915050565b5f6101c08284031215613999576139995f5ffd5b5f612da18484613840565b80357fffffffffffff00000000000000000000000000000000000000000000000000001682826006821015613a0757613a027fffffffffffff0000000000000000000000000000000000000000000000000000836006036008021b90565b831692505b505092915050565b6fffffffffffffffffffffffffffffffff9182169190811690828201908111156105b0576105b0613370565b80357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001682826014821015613a0757613a027fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008021b90565b80357fffffffffffffffffffffffffffffffff000000000000000000000000000000001682826010821015613a0757613a027fffffffffffffffffffffffffffffffff00000000000000000000000000000000836010036008021b90565b803582826020821015613a0757613a027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008021b90565b6fffffffffffffffffffffffffffffffff8116612dad565b80516101c0830190613b5d8482613324565b506020820151613b706020850182613324565b506040820151613b836040850182613324565b506060820151613b966060850182612eae565b506080820151613ba96080850182613b33565b5060a0820151613bbc60a0850182612eae565b5060c0820151613bcf60c0850182612eae565b5060e0820151613be260e0850182612eae565b50610100820151613bf7610100850182612eae565b50610120820151613c0c610120850182612eae565b50610140820151613c21610140850182612eae565b50610160820151613c36610160850182612eae565b50610180820151613c4b610180850182613b33565b506101a082015161094b6101a0850182613324565b6101c081016105b08284613b4b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60808101613caa8287612eae565b613641602083018661361d56fea26469706673582212206b1fa2b1f25bc36e67dd13719dd40b9c8f2d78c750dad2f8f4a9451d4a426a6964736f6c634300081c0033", + pad(entryPoint08Address, { size: 32 }), + pad(owner, { size: 32 }), + pad(owner, { size: 32 }), + encodeAbiParameters(parseAbiParameters("address[]"), [[]]) + ]) + +export const getSingletonPaymaster07InitCode = (owner: Address): Hex => + concat([ + "0x6101806040525f60a052600160c081905260e052607561010052600c61012052603461014052601461016052348015610036575f5ffd5b50604051613eb3380380613eb3833981016040819052610055916102ec565b6001600160a01b03841660805283838383808484846100745f8361010d565b5061009f7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b088261010d565b505f925050505b81518110156100fe576001805f8484815181106100c5576100c5610365565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790556001016100a6565b50505050505050505050610379565b5f828152602081815260408083206001600160a01b038516845290915281205460ff166101ad575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101653390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101b0565b505f5b92915050565b5f6001600160a01b0382166101b0565b6101cf816101b6565b81146101d9575f5ffd5b50565b80516101b0816101c6565b634e487b7160e01b5f52604160045260245ffd5b601f19601f83011681018181106001600160401b0382111715610220576102206101e7565b6040525050565b5f61023160405190565b905061023d82826101fb565b919050565b5f6001600160401b0382111561025a5761025a6101e7565b5060209081020190565b5f61027661027184610242565b610227565b83815290506020808201908402830185811115610294576102945f5ffd5b835b818110156102b857806102a988826101dc565b84525060209283019201610296565b5050509392505050565b5f82601f8301126102d4576102d45f5ffd5b81516102e4848260208601610264565b949350505050565b5f5f5f5f60808587031215610302576103025f5ffd5b5f61030d87876101dc565b945050602061031e878288016101dc565b935050604061032f878288016101dc565b92505060608501516001600160401b0381111561034d5761034d5f5ffd5b610359878288016102c2565b91505092959194509250565b634e487b7160e01b5f52603260045260245ffd5b60805160a05160c05160e05161010051610120516101405161016051613a5d6104565f395f50505f8181610b17015281816114ec015261170901525f8181610a3f0152611edd01525f8181610a99015261209501525f8181610a6001528181610aba0152610af501525f818161157001528181611645015261196401525f8181610a0b015281816115a10152818161160601528181611aed0152611bfe01525f818161040b015281816106be015281816108b901528181610e5601528181610f1201528181610f9d01528181611053015261147a0152613a5d5ff3fe60806040526004361061018e575f3560e01c80637c627b21116100dc578063c23a5cea11610087578063d547741f11610062578063d547741f14610489578063eb12d61e146104a8578063ec87621c146104c7578063feaf513e146104fa575f5ffd5b8063c23a5cea1461044e578063c399ec881461046d578063d0e30db014610481575f5ffd5b8063a217fddf116100b7578063a217fddf146103e7578063b0d691fe146103fa578063bb9fe6bf1461043a575f5ffd5b80637c627b211461035a5780637dd345cb1461037957806391d1485414610398575f5ffd5b806336568abe1161013c5780635525dcfb116101175780635525dcfb146102ee57806363b241aa1461030d578063736c0d5b1461032c575f5ffd5b806336568abe146102745780634031c20e1461029357806352b7512c146102c1575f5ffd5b8063205c28781161016c578063205c2878146101fb578063248a9ca31461021a5780632f2ff15d14610255575f5ffd5b806301ffc9a7146101925780630396cb60146101c75780630e316ab7146101dc575b5f5ffd5b34801561019d575f5ffd5b506101b16101ac366004612be7565b610519565b6040516101be9190612c17565b60405180910390f35b6101da6101d5366004612c3c565b6105b1565b005b3480156101e7575f5ffd5b506101da6101f6366004612c8b565b610726565b348015610206575f5ffd5b506101da610215366004612cba565b610872565b348015610225575f5ffd5b50610248610234366004612cf4565b5f9081526020819052604090206001015490565b6040516101be9190612d18565b348015610260575f5ffd5b506101da61026f366004612d26565b610922565b34801561027f575f5ffd5b506101da61028e366004612d26565b61094c565b34801561029e575f5ffd5b506101b16102ad366004612c8b565b60026020525f908152604090205460ff1681565b3480156102cc575f5ffd5b506102e06102db366004612d70565b6109aa565b6040516101be929190612e30565b3480156102f9575f5ffd5b50610248610308366004612e50565b6109cc565b348015610318575f5ffd5b50610248610327366004612ec4565b610a08565b348015610337575f5ffd5b506101b1610346366004612c8b565b60016020525f908152604090205460ff1681565b348015610365575f5ffd5b506101da610374366004612f73565b610bbc565b348015610384575f5ffd5b506101da61039336600461304b565b610bd8565b3480156103a3575f5ffd5b506101b16103b2366004612d26565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156103f2575f5ffd5b506102485f81565b348015610405575f5ffd5b5061042d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101be91906130f1565b348015610445575f5ffd5b506101da610d8d565b348015610459575f5ffd5b506101da610468366004612c8b565b610ecb565b348015610478575f5ffd5b50610248610f5e565b6101da611016565b348015610494575f5ffd5b506101da6104a3366004612d26565b6110b3565b3480156104b3575f5ffd5b506101da6104c2366004612c8b565b6110d7565b3480156104d2575f5ffd5b506102487f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b348015610505575f5ffd5b50610248610514366004613122565b61121d565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806105ab57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1615801561061d5750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b1561068157337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610678929190613191565b60405180910390fd5b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630396cb609034906106f59085906004016131b8565b5f604051808303818588803b15801561070c575f5ffd5b505af115801561071e573d5f5f3e3d5ffd5b505050505050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156107925750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b156107ed57337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610678929190613191565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600160205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b906108679083906131c6565b60405180910390a150565b5f61087c816112a3565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063205c2878906108f09086908690600401613191565b5f604051808303815f87803b158015610907575f5ffd5b505af1158015610919573d5f5f3e3d5ffd5b50505050505050565b5f8281526020819052604090206001015461093c816112a3565b61094683836112b0565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461099b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109a582826113a9565b505050565b60605f6109b5611462565b6109c08585856114d3565b91509150935093915050565b5f670de0b6b3a7640000826109e18587613201565b6109eb9088613220565b6109f59190613201565b6109ff9190613260565b95945050505050565b5f7f000000000000000000000000000000000000000000000000000000000000000060ff168360ff1603610a9357610a8c82610a847f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613273565b60ff16611694565b90506105ab565b5f610ade7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613273565b90505f610aee60e0850185613290565b610b3b60ff7f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000613220565b818110610b4a57610b4a613309565b919091013560f81c9150506001811615156002821615156004831615801590610b7b57610b78601086613273565b94505b8215610b8f57610b8c601086613273565b94505b8115610ba357610ba0601486613273565b94505b610bb0878660ff16611694565b98975050505050505050565b610bc4611462565b610bd185858585856117ae565b5050505050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610c445750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610c9f57337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610678929190613191565b5f5b82811015610946578160025f868685818110610cbf57610cbf613309565b9050602002016020810190610cd49190612c8b565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790557f8ff8c5211f68ef53b4bdd15ab2ea6d87be8a3dbf58865bd8325c984057e4fcb4848483818110610d5957610d59613309565b9050602002016020810190610d6e9190612c8b565b83604051610d7d929190613336565b60405180910390a1600101610ca1565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610df95750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610e5457337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610678929190613191565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610eb9575f5ffd5b505af1158015610946573d5f5f3e3d5ffd5b5f610ed5816112a3565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90610f479085906004016131c6565b5f604051808303815f87803b15801561070c575f5ffd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190610fd29030906004016131c6565b602060405180830381865afa158015610fed573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611011919061335c565b905090565b6040517fb760faf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b760faf990349061108a9030906004016131c6565b5f604051808303818588803b1580156110a1575f5ffd5b505af1158015610bd1573d5f5f3e3d5ffd5b5f828152602081905260409020600101546110cd816112a3565b61094683836113a9565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156111435750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b1561119e57337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610678929190613191565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602081905260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055517f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f24906108679083906131c6565b5f80806fffffffffffffffffffffffffffffffff861661123d888a613260565b6112479190613220565b90508481111561125e5761125b858261337a565b91505b5f8285111561128c576064600a611275858861337a565b61127f9190613201565b6112899190613260565b90505b6112968882613201565b9998505050505050505050565b6112ad81336119b3565b50565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166113a2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556113403390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016105ab565b505f6105ab565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156113a2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016105ab565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146114d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106789061338d565b565b60605f808036816115106114ea60e08b018b613290565b7f0000000000000000000000000000000000000000000000000000000000000000611a21565b9350935093509350821580156115355750325f9081526002602052604090205460ff16155b1561156e57326040517f55d3ab4600000000000000000000000000000000000000000000000000000000815260040161067891906131c6565b7f000000000000000000000000000000000000000000000000000000000000000060ff168460ff16141580156115ca57507f000000000000000000000000000000000000000000000000000000000000000060ff168460ff1614155b15611601576040517f654a4f2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60605f7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff16036116435761163d8b85858d611acb565b90925090505b7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff16036116845761167e868c86868e8e611c59565b90925090505b909a909950975050505050505050565b5f8083356020850135608086013560a087013560c08801356116b960408a018a613290565b6040516116c79291906133e5565b6040519081900390206116dd60608b018b613290565b6040516116eb9291906133e5565b60405190819003902061170160e08c018c613290565b5f9061172d8d7f0000000000000000000000000000000000000000000000000000000000000000613220565b9261173a939291906133f1565b6040516117489291906133e5565b604051908190038120611764989796959493929160200161341e565b604051602081830303815290604052805190602001209050804660405160200161178f929190613488565b6040516020818303038152906040528051906020012091505092915050565b5f6117b98585611d8a565b90505f6117d78484846080015185610160015186610140015161121d565b90505f6117e48286613220565b90505f8361018001516fffffffffffffffffffffffffffffffff166118258386608001516fffffffffffffffffffffffffffffffff168888606001516109cc565b61182f9190613220565b90505f8461012001518211611854578185610120015161184f919061337a565b611864565b610120850151611864908361337a565b90506118a685602001518661012001518411611884578660400151611887565b86515b876101200151851161189a5787516118a0565b87604001515b84611e7d565b5f670de0b6b3a764000086606001518761010001516118c59190613201565b6118cf9190613260565b6101a087015190915073ffffffffffffffffffffffffffffffffffffffff16158015906118fb57508281115b1561192257602086015186516101a088015161192292919061191d878661337a565b611e7d565b855f015173ffffffffffffffffffffffffffffffffffffffff168660a001517f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000008960200151878b6060015160405161199e949392919061349f565b60405180910390a35050505050505050505050565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611a1d5780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610678929190613191565b5050565b5f803681611a30856001613220565b861015611a69576040517fcc32193e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f878787818110611a7c57611a7c613309565b919091013560f881901c925060018084161515925060f99190911c9036905f908c908c90611aab908d90613220565b611ab69282906133f1565b939d949c509a50919850919650505050505050565b60605f5f5f365f611adc8989611ed5565b93509350935093505f611b44611b127f00000000000000000000000000000000000000000000000000000000000000008d610a08565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b90505f611b868285858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611fdc92505050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205491925060ff90911690611bc082158989612004565b90508d3573ffffffffffffffffffffffffffffffffffffffff168b7f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000005f5f5f604051611c3094939291906134e8565b60405180910390a360408051602081019091525f81529e909d509b505050505050505050505050565b60605f5f611c67878761203a565b90505f611c77611b128b8b610a08565b90505f611c88828460c00151611fdc565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260016020908152604080832054918701519087015193945060ff90911692611ccd91841591612004565b90505f611cdc8d8b888c612797565b905082611cf15796509450611d7f9350505050565b5f611d028a5f5f8a60a001516109cc565b9050808761010001511115611d43576040517f79183c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010087015115611d7557611d7587608001518f5f016020810190611d689190612c8b565b89516101008b0151611e7d565b5096509450505050505b965096945050505050565b611e6a604051806101c001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f6fffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f6fffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b611e76828401846136f5565b9392505050565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c5260205f6064601c5f895af13d1560015f51141716611ec857637939f4245f526004601cfd5b5f60605260405250505050565b5f80368160ff7f000000000000000000000000000000000000000000000000000000000000000016851015611f36576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611f44600682888a6133f1565b611f4d91613714565b60d01c90505f611f61600c6006898b6133f1565b611f6a91613714565b60d01c9050365f611f7e89600c818d6133f1565b909250905060408114801590611f95575060418114155b15611fcc576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9299919850965090945092505050565b5f5f5f5f611fea8686612924565b925092509250611ffa828261296d565b5090949350505050565b5f60d08265ffffffffffff16901b60a08465ffffffffffff16901b8561202a575f61202d565b60015b60ff161717949350505050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e081018290526101008101829052610120810182905261014081019190915260ff7f0000000000000000000000000000000000000000000000000000000000000000168210156120ee576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808484828161210057612100613309565b919091013560f81c9150506001808216151590600283161515906004841615159061212b908661377f565b9450876fffffffffffffffffffffffffffffffff86168861214d88600661377f565b6fffffffffffffffffffffffffffffffff169261216c939291906133f1565b61217591613714565b60d01c602087015261218860068661377f565b9450876fffffffffffffffffffffffffffffffff8616886121aa88600661377f565b6fffffffffffffffffffffffffffffffff16926121c9939291906133f1565b6121d291613714565b60d01c60408701526121e560068661377f565b9450876fffffffffffffffffffffffffffffffff86168861220788601461377f565b6fffffffffffffffffffffffffffffffff1692612226939291906133f1565b61222f916137ab565b60601c608087015261224260148661377f565b9450876fffffffffffffffffffffffffffffffff86168861226488601061377f565b6fffffffffffffffffffffffffffffffff1692612283939291906133f1565b61228c91613809565b60801c606087015261229f60108661377f565b9450876fffffffffffffffffffffffffffffffff8616886122c188602061377f565b6fffffffffffffffffffffffffffffffff16926122e0939291906133f1565b6122e991613867565b60a08701526122f960208661377f565b9450876fffffffffffffffffffffffffffffffff86168861231b88601061377f565b6fffffffffffffffffffffffffffffffff169261233a939291906133f1565b61234391613809565b60801c60e087015261235660108661377f565b9450876fffffffffffffffffffffffffffffffff86168861237888601461377f565b6fffffffffffffffffffffffffffffffff1692612397939291906133f1565b6123a0916137ab565b60601c86526123b060148661377f565b5f61010088015294508015612474576123ca85601061377f565b6fffffffffffffffffffffffffffffffff16871015612415576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff86168861243588601061377f565b6fffffffffffffffffffffffffffffffff1692612454939291906133f1565b61245d91613809565b60801c61010087015261247160108661377f565b94505b5f61012087015282156125365761248c85601061377f565b6fffffffffffffffffffffffffffffffff168710156124d7576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff8616886124f788601061377f565b6fffffffffffffffffffffffffffffffff1692612516939291906133f1565b61251f91613809565b60801c61012087015261253360108661377f565b94505b5f61014087015281156125f85761254e85601461377f565b6fffffffffffffffffffffffffffffffff16871015612599576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff8616886125b988601461377f565b6fffffffffffffffffffffffffffffffff16926125d8939291906133f1565b6125e1916137ab565b60601c6101408701526125f560148661377f565b94505b612616876fffffffffffffffffffffffffffffffff8716818b6133f1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050505060c0870152608086015173ffffffffffffffffffffffffffffffffffffffff1661269f576040517f33c1dac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560a001515f036126dc576040517f5b33c69600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818015612702575061014086015173ffffffffffffffffffffffffffffffffffffffff16155b15612739576040517f497189f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560c001515160401415801561275557508560c0015151604114155b1561278c576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505092915050565b60605f6127a386612a6e565b6127ac87612a9d565b6127b69190613220565b90505f8460e001516fffffffffffffffffffffffffffffffff166127d988612aba565b6127e79060a08a0135613220565b6127f19190613220565b604080516101c081019091529091508061280e60208a018a612c8b565b73ffffffffffffffffffffffffffffffffffffffff168152602001866080015173ffffffffffffffffffffffffffffffffffffffff168152602001865f015173ffffffffffffffffffffffffffffffffffffffff1681526020018660a00151815260200186606001516fffffffffffffffffffffffffffffffff1681526020018781526020015f81526020015f815260200185815260200186610100015181526020018381526020018281526020018661012001516fffffffffffffffffffffffffffffffff16815260200186610140015173ffffffffffffffffffffffffffffffffffffffff1681525060405160200161290991906139d0565b60405160208183030381529060405292505050949350505050565b5f5f5f835160410361295b576020840151604085015160608601515f1a61294d88828585612ac9565b955095509550505050612966565b505081515f91506002905b9250925092565b5f826003811115612980576129806139df565b03612989575050565b600182600381111561299d5761299d6139df565b036129d4576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156129e8576129e86139df565b03612a21576040517ffce698f7000000000000000000000000000000000000000000000000000000008152610678908290600401612d18565b6003826003811115612a3557612a356139df565b03611a1d57806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016106789190612d18565b5f612a7c60e0830183613290565b612a8b916034916024916133f1565b612a9491613809565b60801c92915050565b5f6fffffffffffffffffffffffffffffffff6080830135166105ab565b5f6105ab826080013560801c90565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612b0257505f91506003905082612ba4565b5f6001888888886040515f8152602001604052604051612b259493929190613a0c565b6020604051602081039080840390855afa158015612b45573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612b9b57505f925060019150829050612ba4565b92505f91508190505b9450945094915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146112ad575f5ffd5b80356105ab81612bae565b5f60208284031215612bfa57612bfa5f5ffd5b5f612c058484612bdc565b949350505050565b8015155b82525050565b602081016105ab8284612c0d565b63ffffffff8116612bd2565b80356105ab81612c25565b5f60208284031215612c4f57612c4f5f5ffd5b5f612c058484612c31565b5f73ffffffffffffffffffffffffffffffffffffffff82166105ab565b612bd281612c5a565b80356105ab81612c77565b5f60208284031215612c9e57612c9e5f5ffd5b5f612c058484612c80565b80612bd2565b80356105ab81612ca9565b5f5f60408385031215612cce57612cce5f5ffd5b5f612cd98585612c80565b9250506020612cea85828601612caf565b9150509250929050565b5f60208284031215612d0757612d075f5ffd5b5f612c058484612caf565b80612c11565b602081016105ab8284612d12565b5f5f60408385031215612d3a57612d3a5f5ffd5b5f612d458585612caf565b9250506020612cea85828601612c80565b5f6101208284031215612d6a57612d6a5f5ffd5b50919050565b5f5f5f60608486031215612d8557612d855f5ffd5b833567ffffffffffffffff811115612d9e57612d9e5f5ffd5b612daa86828701612d56565b9350506020612dbb86828701612caf565b9250506040612dcc86828701612caf565b9150509250925092565b8281835e505f910152565b5f612dea825190565b808452602084019350612e01818560208601612dd6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920192915050565b60408082528101612e418185612de1565b9050611e766020830184612d12565b5f5f5f5f60808587031215612e6657612e665f5ffd5b5f612e718787612caf565b9450506020612e8287828801612caf565b9350506040612e9387828801612caf565b9250506060612ea487828801612caf565b91505092959194509250565b60ff8116612bd2565b80356105ab81612eb0565b5f5f60408385031215612ed857612ed85f5ffd5b5f612ee38585612eb9565b925050602083013567ffffffffffffffff811115612f0257612f025f5ffd5b612cea85828601612d56565b600381106112ad575f5ffd5b80356105ab81612f0e565b5f5f83601f840112612f3857612f385f5ffd5b50813567ffffffffffffffff811115612f5257612f525f5ffd5b602083019150836001820283011115612f6c57612f6c5f5ffd5b9250929050565b5f5f5f5f5f60808688031215612f8a57612f8a5f5ffd5b5f612f958888612f1a565b955050602086013567ffffffffffffffff811115612fb457612fb45f5ffd5b612fc088828901612f25565b94509450506040612fd388828901612caf565b9250506060612fe488828901612caf565b9150509295509295909350565b5f5f83601f840112613004576130045f5ffd5b50813567ffffffffffffffff81111561301e5761301e5f5ffd5b602083019150836020820283011115612f6c57612f6c5f5ffd5b801515612bd2565b80356105ab81613038565b5f5f5f60408486031215613060576130605f5ffd5b833567ffffffffffffffff811115613079576130795f5ffd5b61308586828701612ff1565b93509350506020612dcc86828701613040565b5f6105ab73ffffffffffffffffffffffffffffffffffffffff83166130bb565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b5f6105ab82613098565b5f6105ab826130d4565b612c11816130de565b602081016105ab82846130e8565b6fffffffffffffffffffffffffffffffff8116612bd2565b80356105ab816130ff565b5f5f5f5f5f60a08688031215613139576131395f5ffd5b5f6131448888612caf565b955050602061315588828901612caf565b945050604061316688828901613117565b935050606061317788828901612caf565b9250506080612fe488828901612caf565b612c1181612c5a565b6040810161319f8285613188565b611e766020830184612d12565b63ffffffff8116612c11565b602081016105ab82846131ac565b602081016105ab8284613188565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818102808215838204851417613219576132196131d4565b5092915050565b808201808211156105ab576105ab6131d4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f8261326e5761326e613233565b500490565b60ff9182169190811690828201908111156105ab576105ab6131d4565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1368590030181126132c7576132c75f5ffd5b80840192508235915067ffffffffffffffff8211156132e7576132e75f5ffd5b602083019250600182023603831315613301576133015f5ffd5b509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b604081016133448285613188565b611e766020830184612c0d565b80516105ab81612ca9565b5f6020828403121561336f5761336f5f5ffd5b5f612c058484613351565b818103818111156105ab576105ab6131d4565b602080825281016105ab81601581527f53656e646572206e6f7420456e747279506f696e740000000000000000000000602082015260400190565b82818337505f910152565b5f6133df8385846133c8565b50500190565b5f612c058284866133d3565b5f5f85851115613402576134025f5ffd5b83861115613411576134115f5ffd5b5050820193919092039150565b610100810161342d828b613188565b61343a602083018a612d12565b6134476040830189612d12565b6134546060830188612d12565b6134616080830187612d12565b61346e60a0830186612d12565b61347b60c0830185612d12565b61129660e0830184612d12565b6040810161319f8285612d12565b60ff8116612c11565b608081016134ad8287613496565b6134ba6020830186613188565b6134c76040830185612d12565b6109ff6060830184612d12565b5f6105ab6130b88381565b612c11816134d4565b608081016134f68287613496565b6135036020830186613188565b61351060408301856134df565b6109ff60608301846134df565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff8211171561358e5761358e61351d565b6040525050565b5f61359f60405190565b90506135ab828261354a565b919050565b5f6101c082840312156135c4576135c45f5ffd5b6135cf6101c0613595565b90505f6135dc8484612c80565b82525060206135ed84848301612c80565b602083015250604061360184828501612c80565b604083015250606061361584828501612caf565b606083015250608061362984828501613117565b60808301525060a061363d84828501612caf565b60a08301525060c061365184828501612caf565b60c08301525060e061366584828501612caf565b60e08301525061010061367a84828501612caf565b6101008301525061012061369084828501612caf565b610120830152506101406136a684828501612caf565b610140830152506101606136bc84828501612caf565b610160830152506101806136d284828501613117565b610180830152506101a06136e884828501612c80565b6101a08301525092915050565b5f6101c08284031215613709576137095f5ffd5b5f612c0584846135b0565b80357fffffffffffff00000000000000000000000000000000000000000000000000001682826006821015613777576137727fffffffffffff0000000000000000000000000000000000000000000000000000836006036008021b90565b831692505b505092915050565b6fffffffffffffffffffffffffffffffff9182169190811690828201908111156105ab576105ab6131d4565b80357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001682826014821015613777576137727fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008021b90565b80357fffffffffffffffffffffffffffffffff000000000000000000000000000000001682826010821015613777576137727fffffffffffffffffffffffffffffffff00000000000000000000000000000000836010036008021b90565b803582826020821015613777576137727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008021b90565b6fffffffffffffffffffffffffffffffff8116612c11565b80516101c08301906138cd8482613188565b5060208201516138e06020850182613188565b5060408201516138f36040850182613188565b5060608201516139066060850182612d12565b50608082015161391960808501826138a3565b5060a082015161392c60a0850182612d12565b5060c082015161393f60c0850182612d12565b5060e082015161395260e0850182612d12565b50610100820151613967610100850182612d12565b5061012082015161397c610120850182612d12565b50610140820151613991610140850182612d12565b506101608201516139a6610160850182612d12565b506101808201516139bb6101808501826138a3565b506101a08201516109466101a0850182613188565b6101c081016105ab82846138bb565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60808101613a1a8287612d12565b6134ba602083018661349656fea2646970667358221220e9bb864827d7197851e3a4f9aea76d4e9c2f5f93437146403c407aeb1a9aaf2564736f6c634300081c0033", + pad(entryPoint07Address, { size: 32 }), + pad(owner, { size: 32 }), + pad(owner, { size: 32 }), + encodeAbiParameters(parseAbiParameters("address[]"), [[]]) + ]) + +export const getSingletonPaymaster06InitCode = (owner: Address): Hex => + concat([ + "0x6101606040525f60a052600160c081905260e052607561010052600c61012052601461014052348015610030575f5ffd5b50604051613ec5380380613ec583398101604081905261004f916102e6565b6001600160a01b038416608052838383838084848461006e5f83610107565b506100997f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0882610107565b505f925050505b81518110156100f8576001805f8484815181106100bf576100bf61035f565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790556001016100a0565b50505050505050505050610373565b5f828152602081815260408083206001600160a01b038516845290915281205460ff166101a7575f838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561015f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101aa565b505f5b92915050565b5f6001600160a01b0382166101aa565b6101c9816101b0565b81146101d3575f5ffd5b50565b80516101aa816101c0565b634e487b7160e01b5f52604160045260245ffd5b601f19601f83011681018181106001600160401b038211171561021a5761021a6101e1565b6040525050565b5f61022b60405190565b905061023782826101f5565b919050565b5f6001600160401b03821115610254576102546101e1565b5060209081020190565b5f61027061026b8461023c565b610221565b8381529050602080820190840283018581111561028e5761028e5f5ffd5b835b818110156102b257806102a388826101d6565b84525060209283019201610290565b5050509392505050565b5f82601f8301126102ce576102ce5f5ffd5b81516102de84826020860161025e565b949350505050565b5f5f5f5f608085870312156102fc576102fc5f5ffd5b5f61030787876101d6565b9450506020610318878288016101d6565b9350506040610329878288016101d6565b92505060608501516001600160401b03811115610347576103475f5ffd5b610353878288016102bc565b91505092959194509250565b634e487b7160e01b5f52603260045260245ffd5b60805160a05160c05160e051610100516101205161014051613a756104505f395f8181610fe6015281816116d9015261179a01525f8181610f2e0152611f0801525f8181610f8801526120c001525f8181610f0d01528181610f670152610fc401525f81816115fd0152818161181e015281816118f30152611db401525f8181610ed90152818161184f015281816118b401528181611c240152611d4001525f81816103b4015281816106940152818161088f01528181610c4e01528181610d0a01528181610d9501528181610e4b01526113ca0152613a755ff3fe608060405260043610610183575f3560e01c8063a217fddf116100d1578063d0e30db01161007c578063eb12d61e11610057578063eb12d61e14610470578063ec87621c1461048f578063f465c77e146104c2575f5ffd5b8063d0e30db01461042a578063d547741f14610432578063dd16f84714610451575f5ffd5b8063bb9fe6bf116100ac578063bb9fe6bf146103e3578063c23a5cea146103f7578063c399ec8814610416575f5ffd5b8063a217fddf14610371578063a9a2340914610384578063b0d691fe146103a3575f5ffd5b806336568abe11610131578063736c0d5b1161010c578063736c0d5b146102d55780637dd345cb1461030357806391d1485414610322575f5ffd5b806336568abe146102695780634031c20e146102885780635525dcfb146102b6575f5ffd5b8063205c287811610161578063205c2878146101f0578063248a9ca31461020f5780632f2ff15d1461024a575f5ffd5b806301ffc9a7146101875780630396cb60146101bc5780630e316ab7146101d1575b5f5ffd5b348015610192575f5ffd5b506101a66101a1366004612bc8565b6104ef565b6040516101b39190612bf8565b60405180910390f35b6101cf6101ca366004612c1d565b610587565b005b3480156101dc575f5ffd5b506101cf6101eb366004612c6c565b6106fc565b3480156101fb575f5ffd5b506101cf61020a366004612c9b565b610848565b34801561021a575f5ffd5b5061023d610229366004612cd5565b5f9081526020819052604090206001015490565b6040516101b39190612cf9565b348015610255575f5ffd5b506101cf610264366004612d07565b6108f8565b348015610274575f5ffd5b506101cf610283366004612d07565b610922565b348015610293575f5ffd5b506101a66102a2366004612c6c565b60026020525f908152604090205460ff1681565b3480156102c1575f5ffd5b5061023d6102d0366004612d37565b610980565b3480156102e0575f5ffd5b506101a66102ef366004612c6c565b60016020525f908152604090205460ff1681565b34801561030e575f5ffd5b506101cf61031d366004612df8565b6109bc565b34801561032d575f5ffd5b506101a661033c366004612d07565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561037c575f5ffd5b5061023d5f81565b34801561038f575f5ffd5b506101cf61039e366004612ead565b610b71565b3480156103ae575f5ffd5b506103d67f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b39190612f65565b3480156103ee575f5ffd5b506101cf610b85565b348015610402575f5ffd5b506101cf610411366004612c6c565b610cc3565b348015610421575f5ffd5b5061023d610d56565b6101cf610e0e565b34801561043d575f5ffd5b506101cf61044c366004612d07565b610eb2565b34801561045c575f5ffd5b5061023d61046b366004612fa1565b610ed6565b34801561047b575f5ffd5b506101cf61048a366004612c6c565b61108b565b34801561049a575f5ffd5b5061023d7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b3480156104cd575f5ffd5b506104e16104dc366004612feb565b6111d1565b6040516101b39291906130a1565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061058157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156105f35750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b1561065757337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161064e9291906130ca565b60405180910390fd5b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630396cb609034906106cb9085906004016130f1565b5f604051808303818588803b1580156106e2575f5ffd5b505af11580156106f4573d5f5f3e3d5ffd5b505050505050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156107685750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b156107c357337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161064e9291906130ca565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600160205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b9061083d9083906130ff565b60405180910390a150565b5f610852816111f3565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063205c2878906108c690869086906004016130ca565b5f604051808303815f87803b1580156108dd575f5ffd5b505af11580156108ef573d5f5f3e3d5ffd5b50505050505050565b5f82815260208190526040902060010154610912816111f3565b61091c8383611200565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610971576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097b82826112f9565b505050565b5f670de0b6b3a764000082610995858761313a565b61099f9088613159565b6109a9919061313a565b6109b39190613199565b95945050505050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610a285750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610a8357337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161064e9291906130ca565b5f5b8281101561091c578160025f868685818110610aa357610aa36131ac565b9050602002016020810190610ab89190612c6c565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790557f8ff8c5211f68ef53b4bdd15ab2ea6d87be8a3dbf58865bd8325c984057e4fcb4848483818110610b3d57610b3d6131ac565b9050602002016020810190610b529190612c6c565b83604051610b619291906131d9565b60405180910390a1600101610a85565b610b796113b2565b61091c84848484611423565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610bf15750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610c4c57337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161064e9291906130ca565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610cb1575f5ffd5b505af115801561091c573d5f5f3e3d5ffd5b5f610ccd816111f3565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90610d3f9085906004016130ff565b5f604051808303815f87803b1580156106e2575f5ffd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190610dca9030906004016130ff565b602060405180830381865afa158015610de5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0991906131ff565b905090565b6040517fb760faf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b760faf9903490610e829030906004016130ff565b5f604051808303818588803b158015610e99575f5ffd5b505af1158015610eab573d5f5f3e3d5ffd5b5050505050565b5f82815260208190526040902060010154610ecc816111f3565b61091c83836112f9565b5f7f000000000000000000000000000000000000000000000000000000000000000060ff168360ff1603610f6157610f5a82610f527f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061321d565b60ff1661164b565b9050610581565b5f610fac7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061321d565b90505f610fbd61012085018561323a565b61100a60ff7f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000613159565b818110611019576110196131ac565b919091013560f81c915050600181161515600282161515600483161580159061104a5761104760108661321d565b94505b821561105e5761105b60108661321d565b94505b81156110725761106f60148661321d565b94505b61107f878660ff1661164b565b95505050505050610581565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156110f75750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b1561115257337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161064e9291906130ca565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602081905260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055517f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f249061083d9083906130ff565b60605f6111dc6113b2565b6111e7858585611780565b91509150935093915050565b6111fd8133611941565b50565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166112f2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112903390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610581565b505f610581565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156112f2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610581565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064e906132e9565b565b5f61142e84846119af565b90505f6114438260c001518360e00151611aa2565b90505f8261018001516fffffffffffffffffffffffffffffffff166114848585608001516fffffffffffffffffffffffffffffffff16858760600151610980565b61148e9190613159565b90505f83610120015182116114b357818461012001516114ae91906132f9565b6114c3565b6101208401516114c390836132f9565b90505f611506856020015186610120015185116114e45786604001516114e7565b86515b87610120015186116114fa578751611500565b87604001515b85611ac4565b90508061153f576040517f1db0f4fb00000000000000000000000000000000000000000000000000000000815260040161064e9061333f565b5f670de0b6b3a7640000866060015187610100015161155e919061313a565b6115689190613199565b6101a087015190915073ffffffffffffffffffffffffffffffffffffffff161580159061159457508381115b156115bb57602086015186516101a08801516115bb9291906115b688866132f9565b611b12565b855f015173ffffffffffffffffffffffffffffffffffffffff168660a001517f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000008960200151888b606001516040516116379493929190613358565b60405180910390a350505050505050505050565b5f8061165a6020850185612c6c565b6020850135608086013560a087013560c088013560e08901356101008a013561168660608c018c61323a565b6040516116949291906133aa565b60405180910390208b80604001906116ac919061323a565b6040516116ba9291906133aa565b6040519081900390206116d16101208e018e61323a565b5f906116fd8f7f0000000000000000000000000000000000000000000000000000000000000000613159565b9261170a939291906133b6565b6040516117189291906133aa565b6040519081900381206117369a9998979695949392916020016133e3565b6040516020818303038152906040528051906020012090508046604051602001611761929190613478565b6040516020818303038152906040528051906020012091505092915050565b60605f808036816117be6117986101208b018b61323a565b7f0000000000000000000000000000000000000000000000000000000000000000611b58565b9350935093509350821580156117e35750325f9081526002602052604090205460ff16155b1561181c57326040517f55d3ab4600000000000000000000000000000000000000000000000000000000815260040161064e91906130ff565b7f000000000000000000000000000000000000000000000000000000000000000060ff168460ff161415801561187857507f000000000000000000000000000000000000000000000000000000000000000060ff168460ff1614155b156118af576040517f654a4f2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60605f7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff16036118f1576118eb8b85858d611c02565b90925090505b7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff16036119315761192b8b85858d8d611d9b565b90925090505b909a909950975050505050505050565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166119ab5780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161064e9291906130ca565b5050565b611a8f604051806101c001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f6fffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f6fffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b611a9b82840184613681565b9392505050565b5f818303611ab1575081610581565b610f5a83611abf4885613159565b611eeb565b5f60405182606052836040528460601b602c526f23b872dd000000000000000000000000600c5260205f6064601c5f8a5af13d1560015f5114171691505f6060528060405250949350505050565b5f611b1f85858585611ac4565b905080610eab576040517f1db0f4fb00000000000000000000000000000000000000000000000000000000815260040161064e906136d3565b5f803681611b67856001613159565b861015611ba0576040517fcc32193e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f878787818110611bb357611bb36131ac565b919091013560f881901c925060018084161515925060f99190911c9036905f908c908c90611be2908d90613159565b611bed9282906133b6565b939d949c509a50919850919650505050505050565b60605f5f5f365f611c138989611f00565b93509350935093505f611c7b611c497f00000000000000000000000000000000000000000000000000000000000000008d610ed6565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b90505f611cbd8285858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061200792505050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205491925060ff90911690611cf78215898961202f565b9050611d0660208f018f612c6c565b73ffffffffffffffffffffffffffffffffffffffff168b7f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000005f5f5f604051611d7294939291906136f7565b60405180910390a360408051602081019091525f81529e909d509b505050505050505050505050565b60605f5f611da98787612065565b90505f611dd9611c497f00000000000000000000000000000000000000000000000000000000000000008b610ed6565b90505f611dea828460c00151612007565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260016020908152604080832054918701519087015193945060ff90911692611e2f9184159161202f565b90505f611e3e8d8b888c6127c2565b905082611e535796509450611ee19350505050565b5f611e648a5f5f8a60a00151610980565b9050808761010001511115611ea5576040517f79183c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010087015115611ed757611ed787608001518f5f016020810190611eca9190612c6c565b89516101008b0151612908565b5096509450505050505b9550959350505050565b5f818310611ef95781611a9b565b5090919050565b5f80368160ff7f000000000000000000000000000000000000000000000000000000000000000016851015611f61576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611f6f600682888a6133b6565b611f789161372c565b60d01c90505f611f8c600c6006898b6133b6565b611f959161372c565b60d01c9050365f611fa989600c818d6133b6565b909250905060408114801590611fc0575060418114155b15611ff7576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9299919850965090945092505050565b5f5f5f5f6120158686612960565b92509250925061202582826129a9565b5090949350505050565b5f60d08265ffffffffffff16901b60a08465ffffffffffff16901b85612055575f612058565b60015b60ff161717949350505050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e081018290526101008101829052610120810182905261014081019190915260ff7f000000000000000000000000000000000000000000000000000000000000000016821015612119576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808484828161212b5761212b6131ac565b919091013560f81c915050600180821615159060028316151590600484161515906121569086613797565b9450876fffffffffffffffffffffffffffffffff861688612178886006613797565b6fffffffffffffffffffffffffffffffff1692612197939291906133b6565b6121a09161372c565b60d01c60208701526121b3600686613797565b9450876fffffffffffffffffffffffffffffffff8616886121d5886006613797565b6fffffffffffffffffffffffffffffffff16926121f4939291906133b6565b6121fd9161372c565b60d01c6040870152612210600686613797565b9450876fffffffffffffffffffffffffffffffff861688612232886014613797565b6fffffffffffffffffffffffffffffffff1692612251939291906133b6565b61225a916137c3565b60601c608087015261226d601486613797565b9450876fffffffffffffffffffffffffffffffff86168861228f886010613797565b6fffffffffffffffffffffffffffffffff16926122ae939291906133b6565b6122b791613821565b60801c60608701526122ca601086613797565b9450876fffffffffffffffffffffffffffffffff8616886122ec886020613797565b6fffffffffffffffffffffffffffffffff169261230b939291906133b6565b6123149161387f565b60a0870152612324602086613797565b9450876fffffffffffffffffffffffffffffffff861688612346886010613797565b6fffffffffffffffffffffffffffffffff1692612365939291906133b6565b61236e91613821565b60801c60e0870152612381601086613797565b9450876fffffffffffffffffffffffffffffffff8616886123a3886014613797565b6fffffffffffffffffffffffffffffffff16926123c2939291906133b6565b6123cb916137c3565b60601c86526123db601486613797565b5f6101008801529450801561249f576123f5856010613797565b6fffffffffffffffffffffffffffffffff16871015612440576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff861688612460886010613797565b6fffffffffffffffffffffffffffffffff169261247f939291906133b6565b61248891613821565b60801c61010087015261249c601086613797565b94505b5f6101208701528215612561576124b7856010613797565b6fffffffffffffffffffffffffffffffff16871015612502576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff861688612522886010613797565b6fffffffffffffffffffffffffffffffff1692612541939291906133b6565b61254a91613821565b60801c61012087015261255e601086613797565b94505b5f610140870152811561262357612579856014613797565b6fffffffffffffffffffffffffffffffff168710156125c4576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff8616886125e4886014613797565b6fffffffffffffffffffffffffffffffff1692612603939291906133b6565b61260c916137c3565b60601c610140870152612620601486613797565b94505b612641876fffffffffffffffffffffffffffffffff8716818b6133b6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050505060c0870152608086015173ffffffffffffffffffffffffffffffffffffffff166126ca576040517f33c1dac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560a001515f03612707576040517f5b33c69600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81801561272d575061014086015173ffffffffffffffffffffffffffffffffffffffff16155b15612764576040517f497189f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560c001515160401415801561278057508560c0015151604114155b156127b7576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505092915050565b608082015160a08301516060848101518551610120870151610140880151604080516101c0810190915294969594806127fe60208e018e612c6c565b73ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001868152602001856fffffffffffffffffffffffffffffffff1681526020018b81526020018c60e0013581526020018c610100013581526020018981526020018a610100015181526020015f81526020015f8152602001836fffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff168152506040516020016128e991906139e8565b6040516020818303038152906040529650505050505050949350505050565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c5260205f6064601c5f895af13d1560015f5114171661295357637939f4245f526004601cfd5b5f60605260405250505050565b5f5f5f8351604103612997576020840151604085015160608601515f1a61298988828585612aaa565b9550955095505050506129a2565b505081515f91506002905b9250925092565b5f8260038111156129bc576129bc6139f7565b036129c5575050565b60018260038111156129d9576129d96139f7565b03612a10576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115612a2457612a246139f7565b03612a5d576040517ffce698f700000000000000000000000000000000000000000000000000000000815261064e908290600401612cf9565b6003826003811115612a7157612a716139f7565b036119ab57806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161064e9190612cf9565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612ae357505f91506003905082612b85565b5f6001888888886040515f8152602001604052604051612b069493929190613a24565b6020604051602081039080840390855afa158015612b26573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612b7c57505f925060019150829050612b85565b92505f91508190505b9450945094915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146111fd575f5ffd5b803561058181612b8f565b5f60208284031215612bdb57612bdb5f5ffd5b5f612be68484612bbd565b949350505050565b8015155b82525050565b602081016105818284612bee565b63ffffffff8116612bb3565b803561058181612c06565b5f60208284031215612c3057612c305f5ffd5b5f612be68484612c12565b5f73ffffffffffffffffffffffffffffffffffffffff8216610581565b612bb381612c3b565b803561058181612c58565b5f60208284031215612c7f57612c7f5f5ffd5b5f612be68484612c61565b80612bb3565b803561058181612c8a565b5f5f60408385031215612caf57612caf5f5ffd5b5f612cba8585612c61565b9250506020612ccb85828601612c90565b9150509250929050565b5f60208284031215612ce857612ce85f5ffd5b5f612be68484612c90565b80612bf2565b602081016105818284612cf3565b5f5f60408385031215612d1b57612d1b5f5ffd5b5f612d268585612c90565b9250506020612ccb85828601612c61565b5f5f5f5f60808587031215612d4d57612d4d5f5ffd5b5f612d588787612c90565b9450506020612d6987828801612c90565b9350506040612d7a87828801612c90565b9250506060612d8b87828801612c90565b91505092959194509250565b5f5f83601f840112612daa57612daa5f5ffd5b50813567ffffffffffffffff811115612dc457612dc45f5ffd5b602083019150836020820283011115612dde57612dde5f5ffd5b9250929050565b801515612bb3565b803561058181612de5565b5f5f5f60408486031215612e0d57612e0d5f5ffd5b833567ffffffffffffffff811115612e2657612e265f5ffd5b612e3286828701612d97565b93509350506020612e4586828701612ded565b9150509250925092565b600381106111fd575f5ffd5b803561058181612e4f565b5f5f83601f840112612e7957612e795f5ffd5b50813567ffffffffffffffff811115612e9357612e935f5ffd5b602083019150836001820283011115612dde57612dde5f5ffd5b5f5f5f5f60608587031215612ec357612ec35f5ffd5b5f612ece8787612e5b565b945050602085013567ffffffffffffffff811115612eed57612eed5f5ffd5b612ef987828801612e66565b93509350506040612d8b87828801612c90565b5f61058173ffffffffffffffffffffffffffffffffffffffff8316612f2f565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b5f61058182612f0c565b5f61058182612f48565b612bf281612f52565b602081016105818284612f5c565b60ff8116612bb3565b803561058181612f73565b5f6101608284031215612f9b57612f9b5f5ffd5b50919050565b5f5f60408385031215612fb557612fb55f5ffd5b5f612fc08585612f7c565b925050602083013567ffffffffffffffff811115612fdf57612fdf5f5ffd5b612ccb85828601612f87565b5f5f5f60608486031215613000576130005f5ffd5b833567ffffffffffffffff811115613019576130195f5ffd5b61302586828701612f87565b935050602061303686828701612c90565b9250506040612e4586828701612c90565b8281835e505f910152565b5f61305b825190565b808452602084019350613072818560208601613047565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920192915050565b604080825281016130b28185613052565b9050611a9b6020830184612cf3565b612bf281612c3b565b604081016130d882856130c1565b611a9b6020830184612cf3565b63ffffffff8116612bf2565b6020810161058182846130e5565b6020810161058182846130c1565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181028082158382048514176131525761315261310d565b5092915050565b808201808211156105815761058161310d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826131a7576131a761316c565b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b604081016131e782856130c1565b611a9b6020830184612bee565b805161058181612c8a565b5f60208284031215613212576132125f5ffd5b5f612be684846131f4565b60ff9182169190811690828201908111156105815761058161310d565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe136859003018112613271576132715f5ffd5b80840192508235915067ffffffffffffffff821115613291576132915f5ffd5b6020830192506001820236038313156132ab576132ab5f5ffd5b509250929050565b601581525f602082017f53656e646572206e6f7420456e747279506f696e740000000000000000000000815291505b5060200190565b60208082528101610581816132b3565b818103818111156105815761058161310d565b601481525f602082017f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000815291506132e2565b602080825281016105818161330c565b60ff8116612bf2565b60808101613366828761334f565b61337360208301866130c1565b6133806040830185612cf3565b6109b36060830184612cf3565b82818337505f910152565b5f6133a483858461338d565b50500190565b5f612be6828486613398565b5f5f858511156133c7576133c75f5ffd5b838611156133d6576133d65f5ffd5b5050820193919092039150565b61014081016133f2828d6130c1565b6133ff602083018c612cf3565b61340c604083018b612cf3565b613419606083018a612cf3565b6134266080830189612cf3565b61343360a0830188612cf3565b61344060c0830187612cf3565b61344d60e0830186612cf3565b61345b610100830185612cf3565b613469610120830184612cf3565b9b9a5050505050505050505050565b604081016130d88285612cf3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff821117156134f7576134f7613486565b6040525050565b5f61350860405190565b905061351482826134b3565b919050565b6fffffffffffffffffffffffffffffffff8116612bb3565b803561058181613519565b5f6101c08284031215613550576135505f5ffd5b61355b6101c06134fe565b90505f6135688484612c61565b825250602061357984848301612c61565b602083015250604061358d84828501612c61565b60408301525060606135a184828501612c90565b60608301525060806135b584828501613531565b60808301525060a06135c984828501612c90565b60a08301525060c06135dd84828501612c90565b60c08301525060e06135f184828501612c90565b60e08301525061010061360684828501612c90565b6101008301525061012061361c84828501612c90565b6101208301525061014061363284828501612c90565b6101408301525061016061364884828501612c90565b6101608301525061018061365e84828501613531565b610180830152506101a061367484828501612c61565b6101a08301525092915050565b5f6101c08284031215613695576136955f5ffd5b5f612be6848461353c565b601c81525f602082017f5452414e534645525f544f5f524543495049454e545f4641494c454400000000815291506132e2565b60208082528101610581816136a0565b5f610581612f2c8381565b612bf2816136e3565b60808101613705828761334f565b61371260208301866130c1565b61371f60408301856136ee565b6109b360608301846136ee565b80357fffffffffffff0000000000000000000000000000000000000000000000000000168282600682101561378f5761378a7fffffffffffff0000000000000000000000000000000000000000000000000000836006036008021b90565b831692505b505092915050565b6fffffffffffffffffffffffffffffffff9182169190811690828201908111156105815761058161310d565b80357fffffffffffffffffffffffffffffffffffffffff000000000000000000000000168282601482101561378f5761378a7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008021b90565b80357fffffffffffffffffffffffffffffffff00000000000000000000000000000000168282601082101561378f5761378a7fffffffffffffffffffffffffffffffff00000000000000000000000000000000836010036008021b90565b80358282602082101561378f5761378a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008021b90565b6fffffffffffffffffffffffffffffffff8116612bf2565b80516101c08301906138e584826130c1565b5060208201516138f860208501826130c1565b50604082015161390b60408501826130c1565b50606082015161391e6060850182612cf3565b50608082015161393160808501826138bb565b5060a082015161394460a0850182612cf3565b5060c082015161395760c0850182612cf3565b5060e082015161396a60e0850182612cf3565b5061010082015161397f610100850182612cf3565b50610120820151613994610120850182612cf3565b506101408201516139a9610140850182612cf3565b506101608201516139be610160850182612cf3565b506101808201516139d36101808501826138bb565b506101a082015161091c6101a08501826130c1565b6101c0810161058182846138d3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60808101613a328287612cf3565b613373602083018661334f56fea26469706673582212204663afe07e7ac59f82aeba891e559ebb2bb23880dde3507fda29bf2d5901f69164736f6c634300081c0033", + pad(entryPoint06Address, { size: 32 }), + pad(owner, { size: 32 }), + pad(owner, { size: 32 }), + encodeAbiParameters(parseAbiParameters("address[]"), [[]]) + ]) + +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) + }) diff --git a/packages/mock-paymaster/index.ts b/packages/mock-paymaster/index.ts index 630eb034..cb49fddb 100644 --- a/packages/mock-paymaster/index.ts +++ b/packages/mock-paymaster/index.ts @@ -9,7 +9,8 @@ import { getAnvilWalletClient } from "./helpers/utils.js" import { createRpcHandler } from "./relay.js" import { SingletonPaymasterV06, - SingletonPaymasterV07 + SingletonPaymasterV07, + SingletonPaymasterV08 } from "./singletonPaymasters.js" export const paymaster = defineInstance( @@ -39,6 +40,10 @@ export const paymaster = defineInstance( transport: http(altoRpc) }) + const singletonPaymasterV08 = new SingletonPaymasterV08( + walletClient, + anvilRpc + ) const singletonPaymasterV07 = new SingletonPaymasterV07( walletClient, anvilRpc @@ -48,8 +53,10 @@ export const paymaster = defineInstance( anvilRpc ) - await singletonPaymasterV06.setup() + await singletonPaymasterV08.setup() await singletonPaymasterV07.setup() + await singletonPaymasterV06.setup() + await deployErc20Token(walletClient, publicClient) app.register(cors, { @@ -57,11 +64,12 @@ export const paymaster = defineInstance( methods: ["POST", "GET", "OPTIONS"] }) - const rpcHandler = createRpcHandler( + const rpcHandler = createRpcHandler({ bundler, + singletonPaymasterV08, singletonPaymasterV07, singletonPaymasterV06 - ) + }) app.post("/", {}, rpcHandler) app.get("/ping", async (_request, reply) => { diff --git a/packages/mock-paymaster/relay.ts b/packages/mock-paymaster/relay.ts index e32466a2..a9d9605f 100644 --- a/packages/mock-paymaster/relay.ts +++ b/packages/mock-paymaster/relay.ts @@ -11,10 +11,11 @@ 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 { erc20Address } from "./helpers/erc20-utils.js" import { InternalBundlerError, type JsonRpcSchema, @@ -34,6 +35,7 @@ import { import { type SingletonPaymasterV06, type SingletonPaymasterV07, + type SingletonPaymasterV08, getDummyPaymasterData } from "./singletonPaymasters.js" @@ -168,12 +170,85 @@ const handleMethodV07 = async ( return result } -const handleMethod = async ( +const handleMethodV08 = async ( + userOperation: UserOperation<"0.7">, + paymasterMode: PaymasterMode, bundler: BundlerClient, - singletonPaymasterV07: SingletonPaymasterV07, - singletonPaymasterV06: SingletonPaymasterV06, - parsedBody: JsonRpcSchema + singletonPaymasterV08: SingletonPaymasterV08, + estimateGas: boolean ) => { + let op = { + ...userOperation, + ...singletonPaymasterV08.getDummyPaymasterData(paymasterMode) + } + + 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), + paymasterVerificationGasLimit: toHex( + op.paymasterVerificationGasLimit || 0 + ), + paymasterPostOpGasLimit: toHex(op.paymasterPostOpGasLimit || 0), + verificationGasLimit: toHex(op.verificationGasLimit || 0), + ...(await singletonPaymasterV08.encodePaymasterData(op, paymasterMode)) + } + + return result +} + +const handleMethod = async ({ + parsedBody, + bundler, + singletonPaymasterV08, + singletonPaymasterV07, + singletonPaymasterV06 +}: { + bundler: BundlerClient + singletonPaymasterV08: SingletonPaymasterV08 + singletonPaymasterV07: SingletonPaymasterV07 + singletonPaymasterV06: SingletonPaymasterV06 + parsedBody: JsonRpcSchema +}) => { if (parsedBody.method === "pm_sponsorUserOperation") { const params = pmSponsorUserOperationParamsSchema.safeParse( parsedBody.params @@ -188,6 +263,16 @@ const handleMethod = async ( const [userOperation, entryPoint] = params.data + if (entryPoint === entryPoint08Address) { + return await handleMethodV08( + userOperation, + { mode: "verifying" }, + bundler, + singletonPaymasterV08, + true + ) + } + if (entryPoint === entryPoint07Address) { return await handleMethodV07( userOperation, @@ -337,7 +422,7 @@ const handleMethod = async ( allowanceSlot: "0x1", postOpGas: "0x1a2b3c" }, - [ERC20_ADDRESS]: { + [erc20Address]: { exchangeRateNativeToUsd: "0x5cc717fbb3450c0000000", exchangeRate: "0x5cc717fbb3450c0000", balanceSlot: "0x5", @@ -370,11 +455,17 @@ const handleMethod = async ( ) } -export const createRpcHandler = ( - bundler: BundlerClient, - singletonPaymasterV07: SingletonPaymasterV07, +export const createRpcHandler = ({ + bundler, + singletonPaymasterV07, + singletonPaymasterV06, + singletonPaymasterV08 +}: { + bundler: BundlerClient + singletonPaymasterV07: SingletonPaymasterV07 singletonPaymasterV06: SingletonPaymasterV06 -) => { + singletonPaymasterV08: SingletonPaymasterV08 +}) => { return async (request: FastifyRequest, _reply: FastifyReply) => { const body = request.body const parsedBody = jsonRpcSchema.safeParse(body) @@ -386,12 +477,13 @@ export const createRpcHandler = ( } try { - const result = await handleMethod( + const result = await handleMethod({ bundler, singletonPaymasterV07, singletonPaymasterV06, - parsedBody.data - ) + singletonPaymasterV08, + parsedBody: parsedBody.data + }) return { jsonrpc: "2.0", diff --git a/packages/mock-paymaster/singletonPaymasters.ts b/packages/mock-paymaster/singletonPaymasters.ts index aa207137..cfefbd49 100644 --- a/packages/mock-paymaster/singletonPaymasters.ts +++ b/packages/mock-paymaster/singletonPaymasters.ts @@ -12,11 +12,7 @@ import { createPublicClient, encodePacked, getContract, - getContractAddress, - getCreate2Address, - pad, parseEther, - slice, toBytes } from "viem" import { @@ -30,11 +26,15 @@ import { } 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 +import { + constants, + getSingletonPaymaster06Address, + getSingletonPaymaster06InitCode, + getSingletonPaymaster07Address, + getSingletonPaymaster07InitCode, + getSingletonPaymaster08Address, + getSingletonPaymaster08InitCode +} from "./constants" export const getDummyPaymasterData = ( isV6: boolean, @@ -45,44 +45,57 @@ export const getDummyPaymasterData = ( 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) { @@ -97,43 +110,87 @@ export const getDummyPaymasterData = ( } } -// Creates the call that deploys the SingletonPaymaster v0.7 -const getSingletonPaymaster07CreateCall = (owner: Address): Hex => - concat([ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x610160604052600060a052600160c052605060e052600c6101005260346101205260146101405234801561003257600080fd5b50604051612634380380612634833981016040819052610051916101aa565b828282808383806001600160a01b03811661008657604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61008f81610128565b50506001600160a01b031660805260005b81518110156100fa5760018060008484815181106100c0576100c061029d565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016100a0565b5050600280546001600160a01b0319166001600160a01b039390931692909217909155506102b39350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461018f57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156101bf57600080fd5b6101c884610178565b92506101d660208501610178565b60408501519092506001600160401b038111156101f257600080fd5b8401601f8101861361020357600080fd5b80516001600160401b0381111561021c5761021c610194565b604051600582901b90603f8201601f191681016001600160401b038111828210171561024a5761024a610194565b60405291825260208184018101929081018984111561026857600080fd5b6020850194505b8385101561028e5761028085610178565b81526020948501940161026f565b50809450505050509250925092565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e0516101005161012051610140516122b36103816000396000505060008181610c020152610dc7015260008181610665015261140801526000818161069901526115a4015260008181610c2e01528181610d0401528181610fb201526112a601526000818161063401528181610c5f01528181610cc50152818161110401526111e7015260008181610327015281816104370152818161058c01528181610700015281816107cd01528181610856015281816109090152610b6201526122b36000f3fe6080604052600436106101445760003560e01c80637c627b21116100c0578063c399ec8811610074578063eb12d61e11610059578063eb12d61e1461039b578063f0f44260146103bb578063f2fde38b146103db57600080fd5b8063c399ec881461037e578063d0e30db01461039357600080fd5b8063b0d691fe116100a5578063b0d691fe14610315578063bb9fe6bf14610349578063c23a5cea1461035e57600080fd5b80637c627b21146102ca5780638da5cb5b146102ea57600080fd5b80635525dcfb1161011757806363b241aa116100fc57806363b241aa14610255578063715018a614610275578063736c0d5b1461028a57600080fd5b80635525dcfb146101d557806361d027b31461020357600080fd5b80630396cb60146101495780630e316ab71461015e578063205c28781461017e57806352b7512c1461019e575b600080fd5b61015c610157366004611ba1565b6103fb565b005b34801561016a57600080fd5b5061015c610179366004611c00565b6104ad565b34801561018a57600080fd5b5061015c610199366004611c1d565b610538565b3480156101aa57600080fd5b506101be6101b9366004611c62565b6105d0565b6040516101cc929190611cb0565b60405180910390f35b3480156101e157600080fd5b506101f56101f0366004611d23565b6105f3565b6040519081526020016101cc565b34801561020f57600080fd5b506002546102309073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101cc565b34801561026157600080fd5b506101f5610270366004611d55565b610630565b34801561028157600080fd5b5061015c6106c6565b34801561029657600080fd5b506102ba6102a5366004611c00565b60016020526000908152604090205460ff1681565b60405190151581526020016101cc565b3480156102d657600080fd5b5061015c6102e5366004611dab565b6106da565b3480156102f657600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff16610230565b34801561032157600080fd5b506102307f000000000000000000000000000000000000000000000000000000000000000081565b34801561035557600080fd5b5061015c6106f6565b34801561036a57600080fd5b5061015c610379366004611c00565b610780565b34801561038a57600080fd5b506101f5610825565b61015c6108db565b3480156103a757600080fd5b5061015c6103b6366004611c00565b610963565b3480156103c757600080fd5b5061015c6103d6366004611c00565b6109eb565b3480156103e757600080fd5b5061015c6103f6366004611c00565b610a8e565b610403610af7565b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815263ffffffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690630396cb609034906024016000604051808303818588803b15801561049157600080fd5b505af11580156104a5573d6000803e3d6000fd5b505050505050565b6104b5610af7565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b91015b60405180910390a150565b610540610af7565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063205c287890604401600060405180830381600087803b15801561049157600080fd5b606060006105dc610b4a565b6105e7858585610be9565b91509150935093915050565b6000670de0b6b3a7640000826106098587611e77565b6106139088611e8e565b61061d9190611e77565b6106279190611ea1565b95945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000060ff168360ff16036106935761068c827f000000000000000000000000000000000000000000000000000000000000000060ff16610d50565b90506106c0565b61068c827f000000000000000000000000000000000000000000000000000000000000000060ff16610d50565b92915050565b6106ce610af7565b6106d86000610ecd565b565b6106e2610b4a565b6106ef8585858585610f42565b5050505050565b6106fe610af7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561076657600080fd5b505af115801561077a573d6000803e3d6000fd5b50505050565b610788610af7565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90602401600060405180830381600087803b15801561081157600080fd5b505af11580156106ef573d6000803e3d6000fd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156108b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d69190611edc565b905090565b6040517fb760faf90000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b760faf99034906024016000604051808303818588803b15801561081157600080fd5b61096b610af7565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602081815260409283902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690921790915590519182527f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f24910161052d565b6109f3610af7565b6002546040805173ffffffffffffffffffffffffffffffffffffffff928316815291831660208301527f4ab5be82436d353e61ca18726e984e561f5c1cc7c6d38b29d2553c790434705a910160405180910390a1600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610a96610af7565b73ffffffffffffffffffffffffffffffffffffffff8116610aeb576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b610af481610ecd565b50565b60005473ffffffffffffffffffffffffffffffffffffffff1633146106d8576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610ae2565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146106d8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f53656e646572206e6f7420456e747279506f696e7400000000000000000000006044820152606401610ae2565b60606000803681610c26610c0060e08a018a611ef5565b7f000000000000000000000000000000000000000000000000000000000000000061103e565b9250925092507f000000000000000000000000000000000000000000000000000000000000000060ff168360ff1614158015610c8857507f000000000000000000000000000000000000000000000000000000000000000060ff168360ff1614155b15610cbf576040517f654a4f2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606060007f000000000000000000000000000000000000000000000000000000000000000060ff168560ff1603610d0257610cfc8a85858c6110de565b90925090505b7f000000000000000000000000000000000000000000000000000000000000000060ff168560ff1603610d4157610d3b8a85858c61128b565b90925090505b90999098509650505050505050565b60008083356020850135608086013560a087013560c0880135610d7660408a018a611ef5565b604051610d84929190611f61565b604051908190039020610d9a60608b018b611ef5565b604051610da8929190611f61565b604051908190039020610dbe60e08c018c611ef5565b600090610deb8d7f0000000000000000000000000000000000000000000000000000000000000000611e8e565b92610df893929190611f71565b604051610e06929190611f61565b6040805191829003822073ffffffffffffffffffffffffffffffffffffffff90991660208301528101969096526060860194909452608085019290925260a084015260c083015260e082015261010081019190915261012001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120908301819052469183019190915230606083015291506080016040516020818303038152906040528051906020012091505092915050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000806000806000610f54898961134d565b5050945094509450945094506000610f8088846fffffffffffffffffffffffffffffffff1689876105f3565b600254909150610faa908690889073ffffffffffffffffffffffffffffffffffffffff16846113a2565b6040805160ff7f000000000000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff8781166020830152918101839052606081018690529087169083907f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd29060800160405180910390a35050505050505050505050565b6000368161104d846001611e8e565b851015611086576040517fcc32193e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000868587611096826001611e8e565b926110a393929190611f71565b6110ac91611f9b565b60f81c905036600088886110c1896001611e8e565b6110cc928290611f71565b939a9099509297509195505050505050565b606060008060003660006110f289896113ff565b9350935093509350600061115c6111297f00000000000000000000000000000000000000000000000000000000000000008d610630565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b905060006111a08285858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061150a92505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205491925060ff909116906111db82158989611534565b90508d356040805160ff7f0000000000000000000000000000000000000000000000000000000000000000168152600060208201819052918101829052606081019190915273ffffffffffffffffffffffffffffffffffffffff91909116908c907f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd29060800160405180910390a36040805160208101909152600081529e909d509b505050505050505050505050565b606060008061129a868661156c565b905060006112cb6111297f00000000000000000000000000000000000000000000000000000000000000008a610630565b905060006112dd828460a0015161150a565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604082205486519187015193945060ff169261131e91841591611534565b9050600061133b8c8760600151886080015189604001518d61181e565b9c919b50909950505050505050505050565b600080808080808080611362898b018b612021565b9050806000015181602001518260400151836060015184608001518560a001518660c0015197509750975097509750975097505092959891949750929550565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c52602060006064601c6000895af13d1560016000511417166113f157637939f4246000526004601cfd5b600060605260405250505050565b600080368160ff7f000000000000000000000000000000000000000000000000000000000000000016851015611461576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611470600682888a611f71565b611479916120e3565b60d01c9050600061148e600c6006898b611f71565b611497916120e3565b60d01c90503660006114ac89600c818d611f71565b9092509050604081148015906114c3575060418114155b156114fa576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9299919850965090945092505050565b60008060008061151a8686611952565b92509250925061152a828261199f565b5090949350505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561155c57600061155f565b60015b60ff161717949350505050565b6040805160c0810182526000808252602082018190529181018290526060808201839052608082019290925260a081019190915260ff7f0000000000000000000000000000000000000000000000000000000000000000168210156115fd576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061160c6006828587611f71565b611615916120e3565b60d01c9050600061162a600c60068688611f71565b611633916120e3565b60d01c905060006116486020600c8789611f71565b61165191612148565b60601c9050600061166660306020888a611f71565b61166f916121ad565b60801c9050600061168460506030898b611f71565b61168d91612212565b905036600061169f896050818d611f71565b909250905073ffffffffffffffffffffffffffffffffffffffff85166116f1576040517f33c1dac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260000361172b576040517f5b33c69600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040811480159061173d575060418114155b15611774576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518060c001604052808965ffffffffffff1681526020018865ffffffffffff168152602001866fffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509b9a5050505050505050505050565b6040805160e081019091526060908061183a6020890189611c00565b73ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001846fffffffffffffffffffffffffffffffff1681526020018381526020016000815260200160008152506040516020016119389190600060e08201905073ffffffffffffffffffffffffffffffffffffffff835116825273ffffffffffffffffffffffffffffffffffffffff6020840151166020830152604083015160408301526fffffffffffffffffffffffffffffffff60608401511660608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b604051602081830303815290604052905095945050505050565b6000806000835160410361198c5760208401516040850151606086015160001a61197e88828585611aa7565b955095509550505050611998565b50508151600091506002905b9250925092565b60008260038111156119b3576119b361224e565b036119bc575050565b60018260038111156119d0576119d061224e565b03611a07576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611a1b57611a1b61224e565b03611a55576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610ae2565b6003826003811115611a6957611a6961224e565b03611aa3576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610ae2565b5050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115611ae25750600091506003905082611b97565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611b36573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611b8d57506000925060019150829050611b97565b9250600091508190505b9450945094915050565b600060208284031215611bb357600080fd5b813563ffffffff81168114611bc757600080fd5b9392505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610af457600080fd5b8035611bfb81611bce565b919050565b600060208284031215611c1257600080fd5b8135611bc781611bce565b60008060408385031215611c3057600080fd5b8235611c3b81611bce565b946020939093013593505050565b60006101208284031215611c5c57600080fd5b50919050565b600080600060608486031215611c7757600080fd5b833567ffffffffffffffff811115611c8e57600080fd5b611c9a86828701611c49565b9660208601359650604090950135949350505050565b604081526000835180604084015260005b81811015611cde5760208187018101516060868401015201611cc1565b5060006060828501015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168401019150508260208301529392505050565b60008060008060808587031215611d3957600080fd5b5050823594602084013594506040840135936060013592509050565b60008060408385031215611d6857600080fd5b823560ff81168114611d7957600080fd5b9150602083013567ffffffffffffffff811115611d9557600080fd5b611da185828601611c49565b9150509250929050565b600080600080600060808688031215611dc357600080fd5b853560038110611dd257600080fd5b9450602086013567ffffffffffffffff811115611dee57600080fd5b8601601f81018813611dff57600080fd5b803567ffffffffffffffff811115611e1657600080fd5b886020828401011115611e2857600080fd5b959860209190910197509495604081013595606090910135945092505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176106c0576106c0611e48565b808201808211156106c0576106c0611e48565b600082611ed7577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611eee57600080fd5b5051919050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112611f2a57600080fd5b83018035915067ffffffffffffffff821115611f4557600080fd5b602001915036819003821315611f5a57600080fd5b9250929050565b8183823760009101908152919050565b60008085851115611f8157600080fd5b83861115611f8e57600080fd5b5050820193919092039150565b80357fff000000000000000000000000000000000000000000000000000000000000008116906001841015611ffa577fff00000000000000000000000000000000000000000000000000000000000000808560010360031b1b82161691505b5092915050565b80356fffffffffffffffffffffffffffffffff81168114611bfb57600080fd5b600060e082840312801561203457600080fd5b6000905060405160e0810181811067ffffffffffffffff82111715612080577f4e487b710000000000000000000000000000000000000000000000000000000083526041600452602483fd5b60405261208c84611bf0565b815261209a60208501611bf0565b6020820152604084810135908201526120b560608501612001565b60608201526080848101359082015260a0808501359082015260c09384013593810193909352509092915050565b80357fffffffffffff00000000000000000000000000000000000000000000000000008116906006841015611ffa577fffffffffffff0000000000000000000000000000000000000000000000000000808560060360031b1b82161691505092915050565b80357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008116906014841015611ffa577fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808560140360031b1b82161691505092915050565b80357fffffffffffffffffffffffffffffffff000000000000000000000000000000008116906010841015611ffa577fffffffffffffffffffffffffffffffff00000000000000000000000000000000808560100360031b1b82161691505092915050565b803560208310156106c0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fdfea2646970667358221220d4b47765504d1aee07971ecb33f299cd13465059fbfeb55e32bdeb75ec9e629264736f6c634300081a00330000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", - pad(owner), - "0x00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001", // couldn't get encodeAbiParameters with type address[] to work - pad(owner) - ]) +export const getPaymasterData = async ( + isV6: boolean, + paymaster: Address, + paymasterMode: PaymasterMode +) => { + let paymasterData: Hex + + const validAfter = 0 + const validUntil = Math.floor(Date.now() / 1000) + constants.validForSeconds + + const mode = 1 + let allowAllBundlers = true + const modeAndAllowBundlers = (mode << 1) | (allowAllBundlers ? 1 : 0) + const paymasterValidationGasLimit = 1n + + const constantFeePresent = false + const recipientPresent = false + const preFundPresent = false + + const constantFeeAndRecipientAndPreFund = + ((preFundPresent ? 1 : 0) << 2) | + ((recipientPresent ? 1 : 0) << 1) | + (constantFeePresent ? 1 : 0) -// Creates the call that deploys the SingletonPaymaster v0.6 -const getSingletonPaymaster06CreateCall = (owner: Address): Hex => - concat([ - "0x0000000000000000000000000000000000000000000000000000000000000000", - "0x610140604052600060a052600160c052605060e052600c6101005260146101205234801561002c57600080fd5b5060405161270838038061270883398101604081905261004b916101a4565b828282808383806001600160a01b03811661008057604051631e4fbdf760e01b81526000600482015260240160405180910390fd5b61008981610122565b50506001600160a01b031660805260005b81518110156100f45760018060008484815181106100ba576100ba610297565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905560010161009a565b5050600280546001600160a01b0319166001600160a01b039390931692909217909155506102ad9350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b038116811461018957600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b6000806000606084860312156101b957600080fd5b6101c284610172565b92506101d060208501610172565b60408501519092506001600160401b038111156101ec57600080fd5b8401601f810186136101fd57600080fd5b80516001600160401b038111156102165761021661018e565b604051600582901b90603f8201601f191681016001600160401b03811182821017156102445761024461018e565b60405291825260208184018101929081018984111561026257600080fd5b6020850194505b838510156102885761027a85610172565b815260209485019401610269565b50809450505050509250925092565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e051610100516101205161239561037360003960008181610e980152610fc70152600081816108da01526114f501526000818161090e0152611691015260008181610d7801528181610ff3015281816110c901526114450152600081816108a9015281816110240152818161108a0152818161129b01526113870152600081816102d501528181610433015281816105880152818161064101528181610708015281816107980152818161084b0152610bd201526123956000f3fe6080604052600436106101445760003560e01c8063b0d691fe116100c0578063dd16f84711610074578063f0f4426011610059578063f0f4426014610389578063f2fde38b146103a9578063f465c77e146103c957600080fd5b8063dd16f84714610349578063eb12d61e1461036957600080fd5b8063c23a5cea116100a5578063c23a5cea1461030c578063c399ec881461032c578063d0e30db01461034157600080fd5b8063b0d691fe146102c3578063bb9fe6bf146102f757600080fd5b806361d027b311610117578063736c0d5b116100fc578063736c0d5b146102385780638da5cb5b14610278578063a9a23409146102a357600080fd5b806361d027b3146101d1578063715018a61461022357600080fd5b80630396cb60146101495780630e316ab71461015e578063205c28781461017e5780635525dcfb1461019e575b600080fd5b61015c610157366004611c95565b6103f7565b005b34801561016a57600080fd5b5061015c610179366004611ced565b6104a9565b34801561018a57600080fd5b5061015c610199366004611d0a565b610534565b3480156101aa57600080fd5b506101be6101b9366004611d36565b6105cc565b6040519081526020015b60405180910390f35b3480156101dd57600080fd5b506002546101fe9073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101c8565b34801561022f57600080fd5b5061015c610609565b34801561024457600080fd5b50610268610253366004611ced565b60016020526000908152604090205460ff1681565b60405190151581526020016101c8565b34801561028457600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166101fe565b3480156102af57600080fd5b5061015c6102be366004611d68565b61061d565b3480156102cf57600080fd5b506101fe7f000000000000000000000000000000000000000000000000000000000000000081565b34801561030357600080fd5b5061015c610637565b34801561031857600080fd5b5061015c610327366004611ced565b6106bb565b34801561033857600080fd5b506101be610767565b61015c61081d565b34801561035557600080fd5b506101be610364366004611e13565b6108a5565b34801561037557600080fd5b5061015c610384366004611ced565b61093b565b34801561039557600080fd5b5061015c6103a4366004611ced565b6109c3565b3480156103b557600080fd5b5061015c6103c4366004611ced565b610a66565b3480156103d557600080fd5b506103e96103e4366004611e69565b610acf565b6040516101c8929190611eb7565b6103ff610af2565b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815263ffffffff821660048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690630396cb609034906024016000604051808303818588803b15801561048d57600080fd5b505af11580156104a1573d6000803e3d6000fd5b505050505050565b6104b1610af2565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905590519182527f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b91015b60405180910390a150565b61053c610af2565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063205c287890604401600060405180830381600087803b15801561048d57600080fd5b6000670de0b6b3a7640000826105e28587611f59565b6105ec9088611f70565b6105f69190611f59565b6106009190611f83565b95945050505050565b610611610af2565b61061b6000610b45565b565b610625610bba565b61063184848484610c59565b50505050565b61063f610af2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156106a757600080fd5b505af1158015610631573d6000803e3d6000fd5b6106c3610af2565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90602401600060405180830381600087803b15801561074c57600080fd5b505af1158015610760573d6000803e3d6000fd5b5050505050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156107f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108189190611fbe565b905090565b6040517fb760faf90000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063b760faf99034906024016000604051808303818588803b15801561074c57600080fd5b60007f000000000000000000000000000000000000000000000000000000000000000060ff168360ff160361090857610901827f000000000000000000000000000000000000000000000000000000000000000060ff16610e08565b9050610935565b610901827f000000000000000000000000000000000000000000000000000000000000000060ff16610e08565b92915050565b610943610af2565b73ffffffffffffffffffffffffffffffffffffffff811660008181526001602081815260409283902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690921790915590519182527f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f249101610529565b6109cb610af2565b6002546040805173ffffffffffffffffffffffffffffffffffffffff928316815291831660208301527f4ab5be82436d353e61ca18726e984e561f5c1cc7c6d38b29d2553c790434705a910160405180910390a1600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b610a6e610af2565b73ffffffffffffffffffffffffffffffffffffffff8116610ac3576040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600060048201526024015b60405180910390fd5b610acc81610b45565b50565b60606000610adb610bba565b610ae6858585610fad565b91509150935093915050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461061b576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610aba565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461061b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f53656e646572206e6f7420456e747279506f696e7400000000000000000000006044820152606401610aba565b6000806000806000806000610c6e8a8a611115565b96509650965096509650965096506000818303610c8c575081610ca2565b610c9f83610c9a4885611f70565b61116a565b90505b6000610cc28a876fffffffffffffffffffffffffffffffff16848a6105cc565b905060028d6002811115610cd857610cd8611fd7565b14610df957600254600090610d07908a908c9073ffffffffffffffffffffffffffffffffffffffff1685611182565b905080610d70576040517f1db0f4fb00000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610aba565b6040805160ff7f000000000000000000000000000000000000000000000000000000000000000016815273ffffffffffffffffffffffffffffffffffffffff8b81166020830152918101849052606081018a9052908b169087907f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd29060800160405180910390a3505b50505050505050505050505050565b600080610e186020850185611ced565b6020850135608086013560a087013560c088013560e08901356101008a0135610e4460608c018c612006565b604051610e52929190612072565b60405180910390208b8060400190610e6a9190612006565b604051610e78929190612072565b604051908190039020610e8f6101208e018e612006565b600090610ebc8f7f0000000000000000000000000000000000000000000000000000000000000000611f70565b92610ec993929190612082565b604051610ed7929190612072565b6040805191829003822073ffffffffffffffffffffffffffffffffffffffff909b1660208301528101989098526060880196909652608087019490945260a086019290925260c085015260e084015261010083015261012082015261014081019190915261016001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181528282528051602091820120908301819052469183019190915230606083015291506080016040516020818303038152906040528051906020012091505092915050565b60606000803681610feb610fc56101208a018a612006565b7f00000000000000000000000000000000000000000000000000000000000000006111d5565b9250925092507f000000000000000000000000000000000000000000000000000000000000000060ff168360ff161415801561104d57507f000000000000000000000000000000000000000000000000000000000000000060ff168360ff1614155b15611084576040517f654a4f2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606060007f000000000000000000000000000000000000000000000000000000000000000060ff168560ff16036110c7576110c18a85858c611275565b90925090505b7f000000000000000000000000000000000000000000000000000000000000000060ff168560ff1603611106576111008a85858c61142a565b90925090505b90999098509650505050505050565b60008080808080808061112a898b018b6120cc565b9050806000015181602001518260400151836060015184608001518560a001518660c0015197509750975097509750975097505092959891949750929550565b6000818310611179578161117b565b825b9392505050565b600060405182606052836040528460601b602c526f23b872dd000000000000000000000000600c52602060006064601c60008a5af13d156001600051141716915060006060528060405250949350505050565b600036816111e4846001611f70565b85101561121d576040517fcc32193e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600086858761122d826001611f70565b9261123a93929190612082565b6112439161218e565b60f81c90503660008888611258896001611f70565b611263928290612082565b939a9099509297509195505050505050565b6060600080600036600061128989896114ec565b935093509350935060006112f36112c07f00000000000000000000000000000000000000000000000000000000000000008d6108a5565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b905060006113378285858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506115f792505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205491925060ff9091169061137282158989611621565b905061138160208f018f611ced565b604080517f000000000000000000000000000000000000000000000000000000000000000060ff1681526000602082018190528183018190526060820152905173ffffffffffffffffffffffffffffffffffffffff92909216918d917f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd2919081900360800190a36040805160208101909152600081529e909d509b505050505050505050505050565b60606000806114398686611659565b9050600061146a6112c07f00000000000000000000000000000000000000000000000000000000000000008a6108a5565b9050600061147c828460a001516115f7565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604082205486519187015193945060ff16926114bd91841591611621565b905060006114da8c8760600151886080015189604001518d61190b565b9c919b50909950505050505050505050565b600080368160ff7f00000000000000000000000000000000000000000000000000000000000000001685101561154e576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061155d600682888a612082565b611566916121f4565b60d01c9050600061157b600c6006898b612082565b611584916121f4565b60d01c905036600061159989600c818d612082565b9092509050604081148015906115b0575060418114155b156115e7576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9299919850965090945092505050565b6000806000806116078686611a46565b9250925092506116178282611a93565b5090949350505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561164957600061164c565b60015b60ff161717949350505050565b6040805160c0810182526000808252602082018190529181018290526060808201839052608082019290925260a081019190915260ff7f0000000000000000000000000000000000000000000000000000000000000000168210156116ea576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116f96006828587612082565b611702916121f4565b60d01c90506000611717600c60068688612082565b611720916121f4565b60d01c905060006117356020600c8789612082565b61173e91612259565b60601c9050600061175360306020888a612082565b61175c916122be565b60801c9050600061177160506030898b612082565b61177a91612323565b905036600061178c896050818d612082565b909250905073ffffffffffffffffffffffffffffffffffffffff85166117de576040517f33c1dac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003611818576040517f5b33c69600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040811480159061182a575060418114155b15611861576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006040518060c001604052808965ffffffffffff1681526020018865ffffffffffff168152602001866fffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff16815260200185815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509152509b9a5050505050505050505050565b6040805160e08101909152606090806119276020890189611ced565b73ffffffffffffffffffffffffffffffffffffffff1681526020018673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001846fffffffffffffffffffffffffffffffff1681526020018381526020018760e001358152602001876101000135815250604051602001611a2c9190600060e08201905073ffffffffffffffffffffffffffffffffffffffff835116825273ffffffffffffffffffffffffffffffffffffffff6020840151166020830152604083015160408301526fffffffffffffffffffffffffffffffff60608401511660608301526080830151608083015260a083015160a083015260c083015160c083015292915050565b604051602081830303815290604052905095945050505050565b60008060008351604103611a805760208401516040850151606086015160001a611a7288828585611b9b565b955095509550505050611a8c565b50508151600091506002905b9250925092565b6000826003811115611aa757611aa7611fd7565b03611ab0575050565b6001826003811115611ac457611ac4611fd7565b03611afb576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115611b0f57611b0f611fd7565b03611b49576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610aba565b6003826003811115611b5d57611b5d611fd7565b03611b97576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610aba565b5050565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115611bd65750600091506003905082611c8b565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611c2a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116611c8157506000925060019150829050611c8b565b9250600091508190505b9450945094915050565b600060208284031215611ca757600080fd5b813563ffffffff8116811461117b57600080fd5b73ffffffffffffffffffffffffffffffffffffffff81168114610acc57600080fd5b8035611ce881611cbb565b919050565b600060208284031215611cff57600080fd5b813561117b81611cbb565b60008060408385031215611d1d57600080fd5b8235611d2881611cbb565b946020939093013593505050565b60008060008060808587031215611d4c57600080fd5b5050823594602084013594506040840135936060013592509050565b60008060008060608587031215611d7e57600080fd5b843560038110611d8d57600080fd5b9350602085013567ffffffffffffffff811115611da957600080fd5b8501601f81018713611dba57600080fd5b803567ffffffffffffffff811115611dd157600080fd5b876020828401011115611de357600080fd5b949760209190910196509394604001359392505050565b60006101608284031215611e0d57600080fd5b50919050565b60008060408385031215611e2657600080fd5b823560ff81168114611e3757600080fd5b9150602083013567ffffffffffffffff811115611e5357600080fd5b611e5f85828601611dfa565b9150509250929050565b600080600060608486031215611e7e57600080fd5b833567ffffffffffffffff811115611e9557600080fd5b611ea186828701611dfa565b9660208601359650604090950135949350505050565b604081526000835180604084015260005b81811015611ee55760208187018101516060868401015201611ec8565b5060006060828501015260607fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168401019150508260208301529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761093557610935611f2a565b8082018082111561093557610935611f2a565b600082611fb9577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215611fd057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261203b57600080fd5b83018035915067ffffffffffffffff82111561205657600080fd5b60200191503681900382131561206b57600080fd5b9250929050565b8183823760009101908152919050565b6000808585111561209257600080fd5b8386111561209f57600080fd5b5050820193919092039150565b80356fffffffffffffffffffffffffffffffff81168114611ce857600080fd5b600060e08284031280156120df57600080fd5b6000905060405160e0810181811067ffffffffffffffff8211171561212b577f4e487b710000000000000000000000000000000000000000000000000000000083526041600452602483fd5b60405261213784611cdd565b815261214560208501611cdd565b602082015260408481013590820152612160606085016120ac565b60608201526080848101359082015260a0808501359082015260c09384013593810193909352509092915050565b80357fff0000000000000000000000000000000000000000000000000000000000000081169060018410156121ed577fff00000000000000000000000000000000000000000000000000000000000000808560010360031b1b82161691505b5092915050565b80357fffffffffffff000000000000000000000000000000000000000000000000000081169060068410156121ed577fffffffffffff0000000000000000000000000000000000000000000000000000808560060360031b1b82161691505092915050565b80357fffffffffffffffffffffffffffffffffffffffff00000000000000000000000081169060148410156121ed577fffffffffffffffffffffffffffffffffffffffff000000000000000000000000808560140360031b1b82161691505092915050565b80357fffffffffffffffffffffffffffffffff0000000000000000000000000000000081169060108410156121ed577fffffffffffffffffffffffffffffffff00000000000000000000000000000000808560100360031b1b82161691505092915050565b80356020831015610935577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b169291505056fea2646970667358221220b198dacaa988aafcb9441005f2a899880d533689da493c4dc98e301d7822f21a64736f6c634300081a00330000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789", - pad(owner), - "0x00000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000001", // couldn't get encodeAbiParameters with type address[] to work - pad(owner) + if (paymasterMode.mode === "verifying") { + paymasterData = encodePacked( + [ + "uint8", // mode and allowAllBundler + "uint48", // validUntil + "uint48" // validAfter + ], + [modeAndAllowBundlers, validUntil, validAfter] + ) + } else { + 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 + ] + ) + } + + // get signature + encodedDummyData = encodePacked( + ["bytes", "bytes"], + [encodedDummyData, constants.dummySignature] + ) + + const hash = await this.singletonPaymaster.read.getHash([ + mode, + toPackedUserOperation(op) ]) -const getSingletonPaymaster06Address = (owner: Address) => - getCreate2Address({ - from: DETERMINISTIC_DEPLOYER, - salt: slice(getSingletonPaymaster06CreateCall(owner), 0, 32), - bytecode: slice(getSingletonPaymaster06CreateCall(owner), 32) + const sig = await this.walletClient.signMessage({ + message: { raw: toBytes(hash) } }) -const getSingletonPaymaster07Address = (owner: Address) => - getCreate2Address({ - from: DETERMINISTIC_DEPLOYER, - salt: slice(getSingletonPaymaster07CreateCall(owner), 0, 32), - bytecode: slice(getSingletonPaymaster07CreateCall(owner), 32) - }) + return paymasterAndData +} export class SingletonPaymasterV07 { - private anvilRpc: string - private walletClient: WalletClient + protected anvilRpc: string + protected walletClient: WalletClient public singletonPaymaster: GetContractReturnType< typeof singletonPaymaster07Abi, { @@ -153,7 +210,7 @@ export class SingletonPaymasterV07 { ), abi: singletonPaymaster07Abi, client: { - wallet: walletClient as WalletClient, + wallet: walletClient, public: getPublicClient(anvilRpc) } }) @@ -195,8 +252,8 @@ export class SingletonPaymasterV07 { [ op.paymasterData, paymasterMode.token, - POST_OP_GAS_OVERHEAD, - EXCHANGE_RATE + constants.postOpGasOverhead, + constants.exchangeRate ] ) } @@ -220,9 +277,7 @@ export class SingletonPaymasterV07 { } async setup() { - const data = getSingletonPaymaster07CreateCall( - this.walletClient.account.address - ) + const owner = this.walletClient.account.address const publicClient = createPublicClient({ transport: http(this.anvilRpc), @@ -231,20 +286,66 @@ export class SingletonPaymasterV07 { await this.walletClient .sendTransaction({ - to: DETERMINISTIC_DEPLOYER, - data + to: constants.deterministicDeployer, + data: concat([ + constants.create2Salt, + getSingletonPaymaster07InitCode(owner) + ]) }) .then((hash) => publicClient.waitForTransactionReceipt({ hash })) - const address = getContractAddress({ - opcode: "CREATE2", - from: DETERMINISTIC_DEPLOYER, - salt: slice(data, 0, 32), - bytecode: slice(data, 32) + const singletonPaymaster = getContract({ + address: getSingletonPaymaster06Address(owner), + abi: singletonPaymaster07Abi, + client: this.walletClient + }) + + await singletonPaymaster.write.deposit({ + value: parseEther("50") }) + return singletonPaymaster + } +} + +export class SingletonPaymasterV08 extends SingletonPaymasterV07 { + constructor( + walletClient: WalletClient, + anvilRpc: string + ) { + super(walletClient, anvilRpc) + this.singletonPaymaster = getContract({ + address: getSingletonPaymaster08Address( + walletClient.account.address + ), + abi: singletonPaymaster07Abi, + client: { + wallet: walletClient, + public: getPublicClient(anvilRpc) + } + }) + } + + async setup() { + const owner = this.walletClient.account.address + + const publicClient = createPublicClient({ + transport: http(this.anvilRpc), + chain: foundry + }) + + await this.walletClient + .sendTransaction({ + to: constants.deterministicDeployer, + data: concat([ + constants.create2Salt, + getSingletonPaymaster08InitCode(owner) + ]) + }) + .then((hash) => publicClient.waitForTransactionReceipt({ hash })) + const singletonPaymaster = getContract({ - address, + address: getSingletonPaymaster08Address(owner), abi: singletonPaymaster07Abi, client: this.walletClient }) @@ -279,7 +380,7 @@ export class SingletonPaymasterV06 { ), abi: singletonPaymaster06Abi, client: { - wallet: this.walletClient, + wallet: walletClient, public: getPublicClient(anvilRpc) } }) @@ -316,8 +417,8 @@ export class SingletonPaymasterV06 { [ op.paymasterAndData, paymasterMode.token, - POST_OP_GAS_OVERHEAD, - EXCHANGE_RATE + constants.postOpGasOverhead, + constants.exchangeRate ] ) } @@ -343,9 +444,7 @@ export class SingletonPaymasterV06 { } async setup() { - const data = getSingletonPaymaster06CreateCall( - this.walletClient.account.address - ) + const owner = this.walletClient.account.address const publicClient = createPublicClient({ transport: http(this.anvilRpc), @@ -354,28 +453,20 @@ export class SingletonPaymasterV06 { await this.walletClient .sendTransaction({ - to: DETERMINISTIC_DEPLOYER, - data + to: constants.deterministicDeployer, + data: concat([ + constants.create2Salt, + getSingletonPaymaster06InitCode(owner) + ]) }) .then((hash) => publicClient.waitForTransactionReceipt({ hash })) - const address = getContractAddress({ - opcode: "CREATE2", - from: DETERMINISTIC_DEPLOYER, - salt: slice(data, 0, 32), - bytecode: slice(data, 32) - }) - const singletonPaymaster = getContract({ - address, + address: getSingletonPaymaster06Address(owner), abi: singletonPaymaster06Abi, client: this.walletClient }) - await singletonPaymaster.write.deposit({ - value: parseEther("50") - }) - return singletonPaymaster } } From 020433c338220e1af7ef80477e68c5e6aa4a6a03 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Wed, 30 Apr 2025 16:09:59 +0100 Subject: [PATCH 13/55] lint --- packages/mock-paymaster/constants.ts | 10 +++++----- packages/mock-paymaster/singletonPaymasters.ts | 14 +++++++------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/mock-paymaster/constants.ts b/packages/mock-paymaster/constants.ts index ea4e25e1..67e966e2 100644 --- a/packages/mock-paymaster/constants.ts +++ b/packages/mock-paymaster/constants.ts @@ -1,12 +1,12 @@ import { - Address, - Hex, + type Address, + type Hex, concat, - pad, encodeAbiParameters, - parseAbiParameters, + getAddress, getCreate2Address, - getAddress + pad, + parseAbiParameters } from "viem" import { entryPoint06Address, diff --git a/packages/mock-paymaster/singletonPaymasters.ts b/packages/mock-paymaster/singletonPaymasters.ts index cfefbd49..6de6b226 100644 --- a/packages/mock-paymaster/singletonPaymasters.ts +++ b/packages/mock-paymaster/singletonPaymasters.ts @@ -20,12 +20,6 @@ import { toPackedUserOperation } from "viem/account-abstraction" import { foundry } from "viem/chains" -import { - singletonPaymaster06Abi, - singletonPaymaster07Abi -} from "./helpers/abi.js" -import { getPublicClient } from "./helpers/utils.js" -import type { PaymasterMode } from "./helpers/utils.js" import { constants, getSingletonPaymaster06Address, @@ -35,6 +29,12 @@ import { getSingletonPaymaster08Address, getSingletonPaymaster08InitCode } from "./constants" +import { + singletonPaymaster06Abi, + singletonPaymaster07Abi +} from "./helpers/abi.js" +import { getPublicClient } from "./helpers/utils.js" +import type { PaymasterMode } from "./helpers/utils.js" export const getDummyPaymasterData = ( isV6: boolean, @@ -121,7 +121,7 @@ export const getPaymasterData = async ( const validUntil = Math.floor(Date.now() / 1000) + constants.validForSeconds const mode = 1 - let allowAllBundlers = true + const allowAllBundlers = true const modeAndAllowBundlers = (mode << 1) | (allowAllBundlers ? 1 : 0) const paymasterValidationGasLimit = 1n From 3e124220a844ff1490f25cd305de9ccaff7e9b51 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Fri, 2 May 2025 13:31:04 +0100 Subject: [PATCH 14/55] cleanup mock paymaster --- packages/mock-paymaster/helpers/abi.ts | 1456 +++++++++-------- packages/mock-paymaster/index.ts | 23 +- packages/mock-paymaster/relay.ts | 356 ++-- .../mock-paymaster/singletonPaymasters.ts | 417 ++--- 4 files changed, 971 insertions(+), 1281 deletions(-) diff --git a/packages/mock-paymaster/helpers/abi.ts b/packages/mock-paymaster/helpers/abi.ts index 8922e3f6..f216b457 100644 --- a/packages/mock-paymaster/helpers/abi.ts +++ b/packages/mock-paymaster/helpers/abi.ts @@ -1,1046 +1,1048 @@ -export const singletonPaymaster07Abi = [ +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" - }, - { - 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" - } - ] - } - ], - 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" } - ] - }, - { - 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: [ - { - name: "msg", - type: "string", - internalType: "string" - } - ] - }, - { - type: "error", - name: "TokenAddressInvalid", - inputs: [] - } -] as const - -export const singletonPaymaster06Abi = [ - { - 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" + stateMutability: "view" }, - { inputs: [], name: "TokenAddressInvalid", type: "error" }, { - anonymous: false, + type: "function", + name: "postOp", inputs: [ { - indexed: true, - internalType: "address", - name: "previousOwner", - type: "address" + name: "mode", + type: "uint8", + internalType: "enum PostOpMode" }, { - indexed: true, - internalType: "address", - name: "newOwner", - type: "address" + name: "context", + type: "bytes", + internalType: "bytes" + }, + { + name: "actualGasCost", + type: "uint256", + internalType: "uint256" + }, + { + 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" - }, - { - 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" + stateMutability: "nonpayable" }, { + type: "function", + name: "validatePaymasterUserOp", 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: [ { - internalType: "address payable", - name: "withdrawAddress", - type: "address" - }, - { internalType: "uint256", name: "amount", type: "uint256" } - ], - name: "withdrawTo", - outputs: [], - stateMutability: "nonpayable", - type: "function" + 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: "msg", + type: "string", + internalType: "string" + } + ] + }, + { + type: "error", + name: "TokenAddressInvalid", + inputs: [] } ] as const + +export const singletonPaymaster08Abi = singletonPaymaster07Abi diff --git a/packages/mock-paymaster/index.ts b/packages/mock-paymaster/index.ts index cb49fddb..2bcca647 100644 --- a/packages/mock-paymaster/index.ts +++ b/packages/mock-paymaster/index.ts @@ -8,6 +8,7 @@ import { deployErc20Token } from "./helpers/erc20-utils.js" import { getAnvilWalletClient } from "./helpers/utils.js" import { createRpcHandler } from "./relay.js" import { + deployPaymasters, SingletonPaymasterV06, SingletonPaymasterV07, SingletonPaymasterV08 @@ -40,23 +41,7 @@ export const paymaster = defineInstance( transport: http(altoRpc) }) - const singletonPaymasterV08 = new SingletonPaymasterV08( - walletClient, - anvilRpc - ) - const singletonPaymasterV07 = new SingletonPaymasterV07( - walletClient, - anvilRpc - ) - const singletonPaymasterV06 = new SingletonPaymasterV06( - walletClient, - anvilRpc - ) - - await singletonPaymasterV08.setup() - await singletonPaymasterV07.setup() - await singletonPaymasterV06.setup() - + await deployPaymasters({ walletClient, publicClient }) await deployErc20Token(walletClient, publicClient) app.register(cors, { @@ -66,9 +51,7 @@ export const paymaster = defineInstance( const rpcHandler = createRpcHandler({ bundler, - singletonPaymasterV08, - singletonPaymasterV07, - singletonPaymasterV06 + paymasterSigner: walletClient }) app.post("/", {}, rpcHandler) diff --git a/packages/mock-paymaster/relay.ts b/packages/mock-paymaster/relay.ts index a9d9605f..d0486ff2 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 { + Account, type Address, BaseError, + Chain, + PublicClient, type RpcRequestError, + Transport, + WalletClient, getAddress, toHex } from "viem" @@ -33,88 +38,36 @@ import { maxBigInt } from "./helpers/utils.js" import { - type SingletonPaymasterV06, - type SingletonPaymasterV07, - type SingletonPaymasterV08, - getDummyPaymasterData + getDummyPaymasterData, + getSignedPaymasterData } from "./singletonPaymasters.js" - -const handleMethodV06 = async ( - userOperation: UserOperation<"0.6">, - paymasterMode: PaymasterMode, - bundler: BundlerClient, - singletonPaymasterV06: SingletonPaymasterV06, - estimateGas: boolean -) => { - let op: UserOperation<"0.6"> = { - ...userOperation, - ...getDummyPaymasterData( - true, - singletonPaymasterV06.singletonPaymaster.address, - paymasterMode - ) - } - - 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, +import { + getSingletonPaymaster06Address, + getSingletonPaymaster07Address, + getSingletonPaymaster08Address +} from "./constants.js" + +const handleSponsorship = async ({ + userOperation, + paymasterMode, + bundler, + paymaster, + publicClient, + paymasterSigner, + estimateGas +}: { + userOperation: UserOperation + paymasterMode: PaymasterMode + bundler: BundlerClient + paymaster: Address + publicClient: PublicClient + paymasterSigner: WalletClient estimateGas: boolean -) => { +}) => { let op = { ...userOperation, - ...singletonPaymasterV07.getDummyPaymasterData(paymasterMode) - } + ...getDummyPaymasterData({ is06: false, paymaster, paymasterMode }) + } as UserOperation const callGasLimit = userOperation.callGasLimit const verificationGasLimit = userOperation.verificationGasLimit @@ -129,7 +82,7 @@ const handleMethodV07 = async ( op = { ...op, ...gasEstimates - } + } as UserOperation op.callGasLimit = maxBigInt(op.callGasLimit, callGasLimit) op.preVerificationGas = maxBigInt( @@ -164,91 +117,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 handleMethodV08 = async ( - userOperation: UserOperation<"0.7">, - paymasterMode: PaymasterMode, - bundler: BundlerClient, - singletonPaymasterV08: SingletonPaymasterV08, - estimateGas: boolean -) => { - let op = { - ...userOperation, - ...singletonPaymasterV08.getDummyPaymasterData(paymasterMode) - } - - 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 +const validateEntryPoint = (entryPoint: Address) => { + if ( + entryPoint !== entryPoint06Address && + entryPoint !== entryPoint07Address && + entryPoint !== entryPoint08Address ) { throw new RpcError( - "Gas Limit values (preVerificationGas, verificationGasLimit, callGasLimit) must be set", + "EntryPoint not supported", ValidationErrors.InvalidFields ) } - - const result = { - preVerificationGas: toHex(op.preVerificationGas), - callGasLimit: toHex(op.callGasLimit), - paymasterVerificationGasLimit: toHex( - op.paymasterVerificationGasLimit || 0 - ), - paymasterPostOpGasLimit: toHex(op.paymasterPostOpGasLimit || 0), - verificationGasLimit: toHex(op.verificationGasLimit || 0), - ...(await singletonPaymasterV08.encodePaymasterData(op, paymasterMode)) - } - - return result } const handleMethod = async ({ parsedBody, - bundler, - singletonPaymasterV08, - singletonPaymasterV07, - singletonPaymasterV06 + paymasterSigner, + publicClient, + bundler }: { bundler: BundlerClient - singletonPaymasterV08: SingletonPaymasterV08 - singletonPaymasterV07: SingletonPaymasterV07 - singletonPaymasterV06: SingletonPaymasterV06 + paymasterSigner: WalletClient + publicClient: PublicClient parsedBody: JsonRpcSchema }) => { + const [paymaster06, paymaster07, paymaster08] = [ + getSingletonPaymaster06Address(paymasterSigner.account.address), + getSingletonPaymaster07Address(paymasterSigner.account.address), + getSingletonPaymaster08Address(paymasterSigner.account.address) + ] + + const epToPaymaster = { + [entryPoint06Address]: paymaster06, + [entryPoint07Address]: paymaster07, + [entryPoint08Address]: paymaster08 + } + if (parsedBody.method === "pm_sponsorUserOperation") { const params = pmSponsorUserOperationParamsSchema.safeParse( parsedBody.params @@ -262,41 +178,17 @@ const handleMethod = async ({ } const [userOperation, entryPoint] = params.data - - if (entryPoint === entryPoint08Address) { - return await handleMethodV08( - userOperation, - { mode: "verifying" }, - bundler, - singletonPaymasterV08, - true - ) - } - - 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 handleSponsorship({ + userOperation, + paymasterMode: { mode: "verifying" }, + bundler, + paymaster: epToPaymaster[entryPoint], + publicClient, + paymasterSigner, + estimateGas: true + }) } if (parsedBody.method === "pm_getPaymasterStubData") { @@ -312,6 +204,7 @@ const handleMethod = async ({ } const [, entryPoint, , data] = params.data + validateEntryPoint(entryPoint) const paymasterMode = getPaymasterMode(data) @@ -320,28 +213,24 @@ const handleMethod = async ({ icon: "data:image/jpeg;base64,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" } - if (entryPoint === entryPoint07Address) { - return { - ...singletonPaymasterV07.getDummyPaymasterData(paymasterMode), - paymasterVerificationGasLimit: toHex(50_000n), - paymasterPostOpGasLimit: toHex(100_000n), - sponsor: sponsorData, - isFinal: false - } - } + const paymasterGasOptions = + entryPoint === entryPoint06Address + ? {} + : { + paymasterVerificationGasLimit: toHex(50_000n), + paymasterPostOpGasLimit: toHex(100_000n) + } - if (entryPoint === entryPoint06Address) { - return { - ...singletonPaymasterV06.getDummyPaymasterData(paymasterMode), - sponsor: sponsorData, - isFinal: false - } + return { + ...getDummyPaymasterData({ + is06: false, + paymaster: epToPaymaster[entryPoint], + paymasterMode + }), + ...paymasterGasOptions, + sponsor: sponsorData, + isFinal: false } - - throw new RpcError( - "EntryPoint not supported", - ValidationErrors.InvalidFields - ) } if (parsedBody.method === "pm_getPaymasterData") { @@ -355,36 +244,19 @@ 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 - ) + validateEntryPoint(entryPoint) - return { paymasterAndData } - } + const paymasterMode = getPaymasterMode(data) - throw new RpcError( - "EntryPoint not supported", - ValidationErrors.InvalidFields - ) + return await handleSponsorship({ + userOperation: userOperation as UserOperation, + paymasterMode, + bundler, + paymaster: epToPaymaster[entryPoint], + publicClient, + paymasterSigner, + estimateGas: false + }) } if (parsedBody.method === "pm_validateSponsorshipPolicies") { @@ -431,19 +303,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 })) } @@ -457,14 +322,12 @@ const handleMethod = async ({ export const createRpcHandler = ({ bundler, - singletonPaymasterV07, - singletonPaymasterV06, - singletonPaymasterV08 + publicClient, + paymasterSigner }: { bundler: BundlerClient - singletonPaymasterV07: SingletonPaymasterV07 - singletonPaymasterV06: SingletonPaymasterV06 - singletonPaymasterV08: SingletonPaymasterV08 + publicClient: PublicClient + paymasterSigner: WalletClient }) => { return async (request: FastifyRequest, _reply: FastifyReply) => { const body = request.body @@ -479,10 +342,9 @@ export const createRpcHandler = ({ try { const result = await handleMethod({ bundler, - singletonPaymasterV07, - singletonPaymasterV06, - singletonPaymasterV08, - parsedBody: parsedBody.data + paymasterSigner, + parsedBody: parsedBody.data, + publicClient }) return { diff --git a/packages/mock-paymaster/singletonPaymasters.ts b/packages/mock-paymaster/singletonPaymasters.ts index 6de6b226..d650666d 100644 --- a/packages/mock-paymaster/singletonPaymasters.ts +++ b/packages/mock-paymaster/singletonPaymasters.ts @@ -1,15 +1,12 @@ import { - http, type Account, type Address, type Chain, - type GetContractReturnType, type Hex, type PublicClient, type Transport, type WalletClient, concat, - createPublicClient, encodePacked, getContract, parseEther, @@ -19,7 +16,6 @@ import { type UserOperation, toPackedUserOperation } from "viem/account-abstraction" -import { foundry } from "viem/chains" import { constants, getSingletonPaymaster06Address, @@ -31,16 +27,18 @@ import { } from "./constants" import { singletonPaymaster06Abi, - singletonPaymaster07Abi + singletonPaymaster07Abi, + singletonPaymaster08Abi } from "./helpers/abi.js" -import { getPublicClient } from "./helpers/utils.js" import type { PaymasterMode } from "./helpers/utils.js" -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 @@ -98,7 +96,7 @@ export const getDummyPaymasterData = ( ) } - if (isV6) { + if (is06) { return { paymasterAndData: concat([paymaster, encodedDummyData]) } @@ -110,11 +108,19 @@ export const getDummyPaymasterData = ( } } -export const getPaymasterData = async ( - isV6: boolean, - paymaster: Address, +export const getSignedPaymasterData = async ({ + publicClient, + signer, + userOp, + paymaster, + paymasterMode +}: { + publicClient: PublicClient + signer: WalletClient + userOp: UserOperation + paymaster: Address paymasterMode: PaymasterMode -) => { +}) => { let paymasterData: Hex const validAfter = 0 @@ -170,303 +176,140 @@ export const getPaymasterData = async ( ) } - // get signature - encodedDummyData = encodePacked( - ["bytes", "bytes"], - [encodedDummyData, constants.dummySignature] - ) - - const hash = await this.singletonPaymaster.read.getHash([ - mode, - toPackedUserOperation(op) - ]) - - const sig = await this.walletClient.signMessage({ - message: { raw: toBytes(hash) } - }) - - return paymasterAndData -} - -export class SingletonPaymasterV07 { - protected anvilRpc: string - protected walletClient: WalletClient - public singletonPaymaster: GetContractReturnType< - typeof singletonPaymaster07Abi, - { - public: PublicClient - wallet: WalletClient - } - > - - constructor( - walletClient: WalletClient, - anvilRpc: string - ) { - this.walletClient = walletClient - this.singletonPaymaster = getContract({ - address: getSingletonPaymaster07Address( - walletClient.account.address - ), - abi: singletonPaymaster07Abi, - client: { - wallet: walletClient, - public: getPublicClient(anvilRpc) - } + if ("initCode" in userOp && "paymasterAndData" in userOp) { + const singletonPaymaster = getContract({ + address: paymaster, + abi: singletonPaymaster06Abi, + client: publicClient }) - this.anvilRpc = anvilRpc - } - - public getDummyPaymasterData(paymasterMode: PaymasterMode): { - paymaster: Address - paymasterData: Hex - } { - return getDummyPaymasterData( - false, - this.singletonPaymaster.address, - paymasterMode - ) as { - paymaster: Address - paymasterData: Hex - } - } - - 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] - ) - // if ERC-20 mode, add extra ERC-20 fields - if (paymasterMode.mode === "erc20") { - op.paymasterData = encodePacked( - ["bytes", "address", "uint128", "uint256"], - [ - op.paymasterData, - paymasterMode.token, - constants.postOpGasOverhead, - constants.exchangeRate - ] - ) - } - - 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: userOp.paymasterAndData || "0x", + signature: userOp.signature + } ]) - const sig = await this.walletClient.signMessage({ + const sig = await signer.signMessage({ message: { raw: toBytes(hash) } }) + paymasterData = encodePacked(["bytes", "bytes"], [paymasterData, sig]) + return { - paymaster: this.singletonPaymaster.address, - paymasterData: encodePacked( - ["bytes", "bytes"], - [op.paymasterData, sig] - ) + paymasterAndData: concat([paymaster, paymasterData]) } } - async setup() { - const owner = 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: constants.deterministicDeployer, - data: concat([ - constants.create2Salt, - getSingletonPaymaster07InitCode(owner) - ]) - }) - .then((hash) => publicClient.waitForTransactionReceipt({ hash })) + const hash = await singletonPaymaster.read.getHash([ + mode, + toPackedUserOperation(userOp) + ]) - const singletonPaymaster = getContract({ - address: getSingletonPaymaster06Address(owner), - abi: singletonPaymaster07Abi, - 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 SingletonPaymasterV08 extends SingletonPaymasterV07 { - constructor( - walletClient: WalletClient, - anvilRpc: string - ) { - super(walletClient, anvilRpc) - this.singletonPaymaster = getContract({ - address: getSingletonPaymaster08Address( - walletClient.account.address - ), - abi: singletonPaymaster07Abi, - client: { - wallet: walletClient, - public: getPublicClient(anvilRpc) - } - }) - } - - async setup() { - const owner = this.walletClient.account.address - - const publicClient = createPublicClient({ - transport: http(this.anvilRpc), - chain: foundry - }) - - await this.walletClient - .sendTransaction({ - to: constants.deterministicDeployer, - data: concat([ - constants.create2Salt, - getSingletonPaymaster08InitCode(owner) - ]) - }) - .then((hash) => publicClient.waitForTransactionReceipt({ 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 + }) - const singletonPaymaster = getContract({ - address: getSingletonPaymaster08Address(owner), - abi: singletonPaymaster07Abi, - client: this.walletClient - }) + // Deploy singleton paymaster 06. + await walletClient.sendTransaction({ + to: constants.deterministicDeployer, + data: concat([ + constants.create2Salt, + getSingletonPaymaster06InitCode(walletClient.account.address) + ]), + nonce: nonce++ + }) - await singletonPaymaster.write.deposit({ - value: parseEther("50") - }) + // Deploy singleton paymaster 07. + await walletClient.sendTransaction({ + to: constants.deterministicDeployer, + data: concat([ + constants.create2Salt, + getSingletonPaymaster07InitCode(walletClient.account.address) + ]), + nonce: nonce++ + }) - return singletonPaymaster - } -} + // Deploy singleton paymaster 08. + await walletClient.sendTransaction({ + to: constants.deterministicDeployer, + data: concat([ + constants.create2Salt, + getSingletonPaymaster08InitCode(walletClient.account.address) + ]), + nonce: nonce++ + }) -export class SingletonPaymasterV06 { - private walletClient: WalletClient - public singletonPaymaster: GetContractReturnType< - typeof singletonPaymaster06Abi, - { - public: PublicClient - wallet: WalletClient - } - > - private anvilRpc: string - - constructor( - walletClient: WalletClient, - anvilRpc: string - ) { - this.walletClient = walletClient - this.singletonPaymaster = getContract({ - address: getSingletonPaymaster06Address( - walletClient.account.address - ), + // Initialize contract instances. + const [singletonPaymaster06, singletonPaymaster07, singletonPaymaster08] = [ + getContract({ + address: getSingletonPaymaster06Address(owner), abi: singletonPaymaster06Abi, - client: { - wallet: 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, - constants.postOpGasOverhead, - constants.exchangeRate - ] - ) - } - - 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 } - }) - - return { - paymasterAndData: encodePacked( - ["bytes", "bytes"], - [op.paymasterAndData, sig] - ) - } - } - - async setup() { - const owner = this.walletClient.account.address - - const publicClient = createPublicClient({ - transport: http(this.anvilRpc), - chain: foundry + client: walletClient + }), + getContract({ + address: getSingletonPaymaster07Address(owner), + abi: singletonPaymaster07Abi, + client: walletClient + }), + getContract({ + address: getSingletonPaymaster08Address(owner), + abi: singletonPaymaster08Abi, + client: walletClient }) + ] - await this.walletClient - .sendTransaction({ - to: constants.deterministicDeployer, - data: concat([ - constants.create2Salt, - getSingletonPaymaster06InitCode(owner) - ]) - }) - .then((hash) => publicClient.waitForTransactionReceipt({ hash })) + // Fund the paymasters. + await singletonPaymaster06.write.deposit({ + value: parseEther("50"), + nonce: nonce++ + }) - const singletonPaymaster = getContract({ - address: getSingletonPaymaster06Address(owner), - abi: singletonPaymaster06Abi, - client: this.walletClient - }) + await singletonPaymaster07.write.deposit({ + value: parseEther("50"), + nonce: nonce++ + }) - return singletonPaymaster - } + await singletonPaymaster08.write.deposit({ + value: parseEther("50"), + nonce: nonce++ + }) } From 8df58e41e9fe05dad6d3400c4d725cadff341a29 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Fri, 2 May 2025 13:31:12 +0100 Subject: [PATCH 15/55] lint --- packages/mock-paymaster/index.ts | 4 ++-- packages/mock-paymaster/relay.ts | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/mock-paymaster/index.ts b/packages/mock-paymaster/index.ts index 2bcca647..dcd7ab28 100644 --- a/packages/mock-paymaster/index.ts +++ b/packages/mock-paymaster/index.ts @@ -8,10 +8,10 @@ import { deployErc20Token } from "./helpers/erc20-utils.js" import { getAnvilWalletClient } from "./helpers/utils.js" import { createRpcHandler } from "./relay.js" import { - deployPaymasters, SingletonPaymasterV06, SingletonPaymasterV07, - SingletonPaymasterV08 + SingletonPaymasterV08, + deployPaymasters } from "./singletonPaymasters.js" export const paymaster = defineInstance( diff --git a/packages/mock-paymaster/relay.ts b/packages/mock-paymaster/relay.ts index d0486ff2..9f5dd735 100644 --- a/packages/mock-paymaster/relay.ts +++ b/packages/mock-paymaster/relay.ts @@ -1,14 +1,14 @@ import * as util from "node:util" import type { FastifyReply, FastifyRequest } from "fastify" import { - Account, + type Account, type Address, BaseError, - Chain, - PublicClient, + type Chain, + type PublicClient, type RpcRequestError, - Transport, - WalletClient, + type Transport, + type WalletClient, getAddress, toHex } from "viem" @@ -20,6 +20,11 @@ import { entryPoint08Address } from "viem/account-abstraction" import { fromZodError } from "zod-validation-error" +import { + getSingletonPaymaster06Address, + getSingletonPaymaster07Address, + getSingletonPaymaster08Address +} from "./constants.js" import { erc20Address } from "./helpers/erc20-utils.js" import { InternalBundlerError, @@ -41,11 +46,6 @@ import { getDummyPaymasterData, getSignedPaymasterData } from "./singletonPaymasters.js" -import { - getSingletonPaymaster06Address, - getSingletonPaymaster07Address, - getSingletonPaymaster08Address -} from "./constants.js" const handleSponsorship = async ({ userOperation, From 1be956ea22d6bd4753d57005e0b674693faed24c Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Fri, 2 May 2025 13:33:15 +0100 Subject: [PATCH 16/55] cleanup --- packages/mock-paymaster/constants.ts | 2 ++ packages/mock-paymaster/relay.ts | 11 ++++++----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/mock-paymaster/constants.ts b/packages/mock-paymaster/constants.ts index 67e966e2..a32e6a98 100644 --- a/packages/mock-paymaster/constants.ts +++ b/packages/mock-paymaster/constants.ts @@ -75,3 +75,5 @@ export const getSingletonPaymaster06Address = (owner: Address) => salt: constants.create2Salt, bytecode: getSingletonPaymaster06InitCode(owner) }) + +export const sponsorshipIcon = "data:image/jpeg;base64,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" diff --git a/packages/mock-paymaster/relay.ts b/packages/mock-paymaster/relay.ts index 9f5dd735..0cdf198c 100644 --- a/packages/mock-paymaster/relay.ts +++ b/packages/mock-paymaster/relay.ts @@ -23,7 +23,8 @@ import { fromZodError } from "zod-validation-error" import { getSingletonPaymaster06Address, getSingletonPaymaster07Address, - getSingletonPaymaster08Address + getSingletonPaymaster08Address, + sponsorshipIcon } from "./constants.js" import { erc20Address } from "./helpers/erc20-utils.js" import { @@ -210,10 +211,10 @@ const handleMethod = async ({ const sponsorData = { name: "Pimlico", - icon: "data:image/jpeg;base64,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" + icon: sponsorshipIcon } - const paymasterGasOptions = + const dummyPaymasterGas = entryPoint === entryPoint06Address ? {} : { @@ -227,7 +228,7 @@ const handleMethod = async ({ paymaster: epToPaymaster[entryPoint], paymasterMode }), - ...paymasterGasOptions, + ...dummyPaymasterGas, sponsor: sponsorData, isFinal: false } @@ -266,7 +267,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 :)" } } From d35864dcd5126f98bbe16f2f5b9068469be5e3e2 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Fri, 2 May 2025 13:33:17 +0100 Subject: [PATCH 17/55] lint --- packages/mock-paymaster/constants.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/mock-paymaster/constants.ts b/packages/mock-paymaster/constants.ts index a32e6a98..f743a71c 100644 --- a/packages/mock-paymaster/constants.ts +++ b/packages/mock-paymaster/constants.ts @@ -76,4 +76,5 @@ export const getSingletonPaymaster06Address = (owner: Address) => bytecode: getSingletonPaymaster06InitCode(owner) }) -export const sponsorshipIcon = "data:image/jpeg;base64,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" +export const sponsorshipIcon = + "data:image/jpeg;base64,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" From f7a335cec9489e43b4a36f7bcacdb85828ecd35e Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Fri, 2 May 2025 16:21:13 +0100 Subject: [PATCH 18/55] fix tests --- packages/mock-paymaster/index.ts | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/packages/mock-paymaster/index.ts b/packages/mock-paymaster/index.ts index dcd7ab28..14450e14 100644 --- a/packages/mock-paymaster/index.ts +++ b/packages/mock-paymaster/index.ts @@ -7,12 +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, - SingletonPaymasterV08, - deployPaymasters -} from "./singletonPaymasters.js" +import { deployPaymasters } from "./singletonPaymasters.js" export const paymaster = defineInstance( ({ @@ -51,6 +46,7 @@ export const paymaster = defineInstance( const rpcHandler = createRpcHandler({ bundler, + publicClient, paymasterSigner: walletClient }) app.post("/", {}, rpcHandler) From e4a304fd3a84c6a95f64e791242a1b97a2a3a77e Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Fri, 2 May 2025 16:49:45 +0100 Subject: [PATCH 19/55] fix wagmi --- packages/wagmi/hooks/useSendTransaction.ts | 4 ++-- .../hooks/useWaitForTransactionReceipt.ts | 21 +++++++++++-------- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/packages/wagmi/hooks/useSendTransaction.ts b/packages/wagmi/hooks/useSendTransaction.ts index c777c761..c1601a06 100644 --- a/packages/wagmi/hooks/useSendTransaction.ts +++ b/packages/wagmi/hooks/useSendTransaction.ts @@ -11,7 +11,7 @@ import type { 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, @@ -47,7 +47,7 @@ const sendTransactionMutationOptions = ( } : undefined } - }) + }) as unknown as Promise } return sendTransaction(config, variables) as Promise diff --git a/packages/wagmi/hooks/useWaitForTransactionReceipt.ts b/packages/wagmi/hooks/useWaitForTransactionReceipt.ts index 1b04f5d1..36748398 100644 --- a/packages/wagmi/hooks/useWaitForTransactionReceipt.ts +++ b/packages/wagmi/hooks/useWaitForTransactionReceipt.ts @@ -30,12 +30,15 @@ import { isHash, stringify } from "viem" -import { getTransactionReceipt, watchBlockNumber } from "viem/actions" +import { + getCallsStatus, + getTransactionReceipt, + watchBlockNumber +} from "viem/actions" import { type GetCallsStatusReturnType, - type ShowCallsStatusErrorType, - getCallsStatus -} from "viem/experimental" + type ShowCallsStatusErrorType +} from "viem" import { getAction } from "viem/utils" import { useChainId, useConfig } from "wagmi" import { @@ -78,13 +81,13 @@ export function filterQueryOptions>( const { // import('@tanstack/query-core').QueryOptions _defaulted, behavior, gcTime, initialData, initialDataUpdatedAt, maxPages, meta, networkMode, queryFn, queryHash, queryKey, queryKeyHashFn, retry, retryDelay, structuralSharing, - + // import('@tanstack/query-core').InfiniteQueryObserverOptions getPreviousPageParam, getNextPageParam, initialPageParam, - + // import('@tanstack/react-query').UseQueryOptions _optimisticResults, enabled, notifyOnChangeProps, placeholderData, refetchInterval, refetchIntervalInBackground, refetchOnMount, refetchOnReconnect, refetchOnWindowFocus, retryOnMount, select, staleTime, suspense, throwOnError, - + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // wagmi //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -211,7 +214,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 +260,7 @@ export async function waitForCallsStatus< "getCallsStatus" )({ id }) - if (receipt.status === "PENDING") { + if (receipt.status === "pending") { return } From 8407bdd01386898cf6642898c8742fa1b4ee0966 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Fri, 2 May 2025 16:58:32 +0100 Subject: [PATCH 20/55] fix tests --- packages/mock-paymaster/relay.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mock-paymaster/relay.ts b/packages/mock-paymaster/relay.ts index 0cdf198c..769e806a 100644 --- a/packages/mock-paymaster/relay.ts +++ b/packages/mock-paymaster/relay.ts @@ -160,7 +160,7 @@ const handleMethod = async ({ getSingletonPaymaster08Address(paymasterSigner.account.address) ] - const epToPaymaster = { + const epToPaymaster: Record<`0x${string}`, `0x${string}`> = { [entryPoint06Address]: paymaster06, [entryPoint07Address]: paymaster07, [entryPoint08Address]: paymaster08 From 164264cfee80a21f3accb55789fda763d3d7c1a1 Mon Sep 17 00:00:00 2001 From: mouseless0x <97399882+mouseless0x@users.noreply.github.com> Date: Fri, 2 May 2025 15:59:01 +0000 Subject: [PATCH 21/55] chore: format --- packages/wagmi/hooks/useWaitForTransactionReceipt.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/wagmi/hooks/useWaitForTransactionReceipt.ts b/packages/wagmi/hooks/useWaitForTransactionReceipt.ts index 36748398..a20e47d9 100644 --- a/packages/wagmi/hooks/useWaitForTransactionReceipt.ts +++ b/packages/wagmi/hooks/useWaitForTransactionReceipt.ts @@ -30,15 +30,12 @@ import { isHash, stringify } from "viem" +import type { GetCallsStatusReturnType, ShowCallsStatusErrorType } from "viem" import { getCallsStatus, getTransactionReceipt, watchBlockNumber } from "viem/actions" -import { - type GetCallsStatusReturnType, - type ShowCallsStatusErrorType -} from "viem" import { getAction } from "viem/utils" import { useChainId, useConfig } from "wagmi" import { From 553621cf5c48ae7f3ec2a90ac189d4ddefa12443 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Fri, 2 May 2025 17:04:05 +0100 Subject: [PATCH 22/55] fix test imports --- packages/mock-paymaster/constants.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mock-paymaster/constants.ts b/packages/mock-paymaster/constants.ts index f743a71c..92825806 100644 --- a/packages/mock-paymaster/constants.ts +++ b/packages/mock-paymaster/constants.ts @@ -12,7 +12,7 @@ import { entryPoint06Address, entryPoint07Address, entryPoint08Address -} from "viem/_types/constants/address" +} from "viem/account-abstraction" export const constants = { deterministicDeployer: getAddress( From 37e008173b0fc9ae8c7f71d8f05a2c5aa1a22456 Mon Sep 17 00:00:00 2001 From: Garvit Khatri Date: Fri, 2 May 2025 17:07:38 +0100 Subject: [PATCH 23/55] Fix wagmi build --- bun.lock | 204 +++++++++--------- package.json | 2 +- .../wagmi/hooks/useAvailableCapabilities.ts | 2 +- packages/wagmi/hooks/useSendTransaction.ts | 13 +- 4 files changed, 115 insertions(+), 106 deletions(-) diff --git a/bun.lock b/bun.lock index 62c9a233..83fa64ec 100644 --- a/bun.lock +++ b/bun.lock @@ -35,7 +35,7 @@ "viem": "2.28.1", "vite": "^5.4.10", "vitest": "^2.1.5", - "wagmi": "^2.14.11", + "wagmi": "^2.15.1", }, }, "packages/mock-paymaster": { @@ -277,7 +277,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 +309,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=="], @@ -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.0", "", { "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.0", "typescript": ">=5.0.4", "viem": "2.x" }, "optionalPeers": ["typescript"] }, "sha512-aCibsK09vHRQnbH1FbaMV/bl5JW24v0QG2vBapUWctWGh6qmrE0CM43MrvN733ffWCsMn7OBQU5OCxLdkgk6xA=="], - "@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.0", "", { "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-MykiuU0rZUKtgVBctnOM+53zJmtodTD7rA97e7lLhXUevZcm60hUSl1BcgEIDd2wVOLEi2Xfrx641xpjruZvSA=="], - "@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=="], @@ -691,10 +649,14 @@ "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=="], @@ -791,6 +753,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=="], @@ -811,6 +775,8 @@ "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=="], "detect-browser": ["detect-browser@5.3.0", "", {}, "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w=="], @@ -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=="], @@ -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=="], @@ -1103,11 +1063,11 @@ "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,10 +1111,6 @@ "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=="], @@ -1169,8 +1123,6 @@ "module-details-from-path": ["module-details-from-path@1.0.3", "", {}, "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A=="], - "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=="], - "mri": ["mri@1.2.0", "", {}, "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA=="], "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="], @@ -1303,7 +1255,7 @@ "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=="], @@ -1513,7 +1465,7 @@ "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.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=="], @@ -1523,7 +1475,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.1", "", { "dependencies": { "@wagmi/connectors": "5.8.0", "@wagmi/core": "2.17.0", "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-eLru4Z9Ips3xI7oFNNIYYLQOCpcuKRWtRDJDFz/C6i5oH9xM6vg/hWHCZwfdyovYAtAKPZoPyORzVHqC2YSLEQ=="], "wagmi-demo": ["wagmi-demo@workspace:packages/wagmi-demo"], @@ -1709,6 +1661,16 @@ "@pimlico/alto/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=="], + "@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=="], @@ -1731,12 +1693,16 @@ "@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=="], @@ -1749,8 +1715,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=="], @@ -1901,6 +1865,22 @@ "@pimlico/alto/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=="], + "@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=="], + + "@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=="], + + "@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=="], + + "@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=="], + + "@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=="], + + "@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=="], + + "@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=="], + + "@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=="], + "@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=="], "@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=="], @@ -1921,6 +1901,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=="], @@ -2025,6 +2009,18 @@ "@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/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=="], + + "@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=="], + + "@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=="], + + "@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=="], + + "@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=="], + + "@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=="], + "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=="], "size-limit/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], @@ -2034,5 +2030,17 @@ "tsc-alias/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], "@pimlico/alto/fastify/find-my-way/safe-regex2/ret": ["ret@0.4.3", "", {}, "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ=="], + + "@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=="], + + "@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=="], + + "@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=="], + + "@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=="], + + "@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=="], + + "@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/package.json b/package.json index def1429f..f69f638c 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "viem": "2.28.1", "vite": "^5.4.10", "vitest": "^2.1.5", - "wagmi": "^2.14.11" + "wagmi": "^2.15.1" }, "description": "", "keywords": [], 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 c1601a06..701126ff 100644 --- a/packages/wagmi/hooks/useSendTransaction.ts +++ b/packages/wagmi/hooks/useSendTransaction.ts @@ -3,8 +3,7 @@ import { type MutationOptions, useMutation } from "@tanstack/react-query" -import { sendTransaction } from "@wagmi/core" -import { sendCalls } from "@wagmi/core/experimental" +import { sendCalls, sendTransaction } from "@wagmi/core" import type { Prettify, SendTransactionErrorType, @@ -27,7 +26,7 @@ const sendTransactionMutationOptions = ( } = {} ) => { return { - mutationFn(variables) { + async mutationFn(variables) { if (parameters.capabilities) { const client = config.getClient({ chainId: variables.chainId }) @@ -37,7 +36,7 @@ const sendTransactionMutationOptions = ( : parameters.capabilities?.paymasterService[client.chain.id] ?.url - return sendCalls(config, { + const result = await sendCalls(config, { calls: [variables], capabilities: { ...parameters.capabilities, @@ -47,10 +46,12 @@ const sendTransactionMutationOptions = ( } : undefined } - }) as unknown as Promise + }) + + return result.id } - return sendTransaction(config, variables) as Promise + return sendTransaction(config, variables) }, mutationKey: ["sendTransaction"] } as const satisfies MutationOptions< From a91028715bb5e465155a55dd41a4d4fc986844f2 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Fri, 2 May 2025 17:29:25 +0100 Subject: [PATCH 24/55] fix testbuild --- packages/mock-paymaster/singletonPaymasters.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mock-paymaster/singletonPaymasters.ts b/packages/mock-paymaster/singletonPaymasters.ts index d650666d..3b43fbf8 100644 --- a/packages/mock-paymaster/singletonPaymasters.ts +++ b/packages/mock-paymaster/singletonPaymasters.ts @@ -24,7 +24,7 @@ import { getSingletonPaymaster07InitCode, getSingletonPaymaster08Address, getSingletonPaymaster08InitCode -} from "./constants" +} from "./constants.js" import { singletonPaymaster06Abi, singletonPaymaster07Abi, From 3f945c805b87e23e61f7f56a3fafa5509cbccebc Mon Sep 17 00:00:00 2001 From: mouseless0x <97399882+mouseless0x@users.noreply.github.com> Date: Fri, 2 May 2025 16:29:50 +0000 Subject: [PATCH 25/55] chore: format --- bun.lockb | Bin 350416 -> 370632 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bun.lockb b/bun.lockb index 73ad12273425d4ffb6bb1f71e5584eaae020b8f1..90534647cd09111deefe9bc06405e18e9bc26c32 100755 GIT binary patch delta 83296 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 UsaxT6-mMJB;8yC?Qn%;-1EU|y<^TWy From 345f5dcb4e19b024dea25b9a26013d59c2b5f555 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Fri, 2 May 2025 18:10:56 +0100 Subject: [PATCH 26/55] fix bytecode --- packages/mock-paymaster/constants.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/mock-paymaster/constants.ts b/packages/mock-paymaster/constants.ts index 92825806..463b6528 100644 --- a/packages/mock-paymaster/constants.ts +++ b/packages/mock-paymaster/constants.ts @@ -30,7 +30,7 @@ export const constants = { export const getSingletonPaymaster08InitCode = (owner: Address): Hex => concat([ - "0x6101806040525f60a052600160c081905260e052607561010052600c61012052603461014052601461016052348015610036575f5ffd5b5060405161414b38038061414b833981016040819052610055916102f4565b6001600160a01b0384166080528383838383838383808484846100785f83610115565b506100a37f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0882610115565b505f925050505b8151811015610102576001805f8484815181106100c9576100c961036d565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790556001016100aa565b5050505050505050505050505050610381565b5f828152602081815260408083206001600160a01b038516845290915281205460ff166101b5575f838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561016d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101b8565b505f5b92915050565b5f6001600160a01b0382166101b8565b6101d7816101be565b81146101e1575f5ffd5b50565b80516101b8816101ce565b634e487b7160e01b5f52604160045260245ffd5b601f19601f83011681018181106001600160401b0382111715610228576102286101ef565b6040525050565b5f61023960405190565b90506102458282610203565b919050565b5f6001600160401b03821115610262576102626101ef565b5060209081020190565b5f61027e6102798461024a565b61022f565b8381529050602080820190840283018581111561029c5761029c5f5ffd5b835b818110156102c057806102b188826101e4565b8452506020928301920161029e565b5050509392505050565b5f82601f8301126102dc576102dc5f5ffd5b81516102ec84826020860161026c565b949350505050565b5f5f5f5f6080858703121561030a5761030a5f5ffd5b5f61031587876101e4565b9450506020610326878288016101e4565b9350506040610337878288016101e4565b92505060608501516001600160401b03811115610355576103555f5ffd5b610361878288016102ca565b91505092959194509250565b634e487b7160e01b5f52603260045260245ffd5b60805160a05160c05160e05161010051610120516101405161016051613ced61045e5f395f50505f8181611304015281816116570152611e8101525f818161157f015261207901525f81816115d9015261223101525f81816115a0015281816115fa015261163501525f81816113880152818161145d015261189501525f81816113b90152818161141e0152818161154b01528181611a1e0152611b2f01525f818161040b015281816106c3015281816108be01528181610cf401528181610db001528181610e3b01528181610ef101526112920152613ced5ff3fe60806040526004361061018e575f3560e01c80637c627b21116100dc578063c23a5cea11610087578063d547741f11610062578063d547741f14610489578063eb12d61e146104a8578063ec87621c146104c7578063feaf513e146104fa575f5ffd5b8063c23a5cea1461044e578063c399ec881461046d578063d0e30db014610481575f5ffd5b8063a217fddf116100b7578063a217fddf146103e7578063b0d691fe146103fa578063bb9fe6bf1461043a575f5ffd5b80637c627b211461035a5780637dd345cb1461037957806391d1485414610398575f5ffd5b806336568abe1161013c5780635525dcfb116101175780635525dcfb146102ee57806363b241aa1461030d578063736c0d5b1461032c575f5ffd5b806336568abe146102745780634031c20e1461029357806352b7512c146102c1575f5ffd5b8063205c28781161016c578063205c2878146101fb578063248a9ca31461021a5780632f2ff15d14610255575f5ffd5b806301ffc9a7146101925780630396cb60146101c75780630e316ab7146101dc575b5f5ffd5b34801561019d575f5ffd5b506101b16101ac366004612d83565b61051e565b6040516101be9190612db3565b60405180910390f35b6101da6101d5366004612dd8565b6105b6565b005b3480156101e7575f5ffd5b506101da6101f6366004612e27565b61072b565b348015610206575f5ffd5b506101da610215366004612e56565b610877565b348015610225575f5ffd5b50610248610234366004612e90565b5f9081526020819052604090206001015490565b6040516101be9190612eb4565b348015610260575f5ffd5b506101da61026f366004612ec2565b610927565b34801561027f575f5ffd5b506101da61028e366004612ec2565b610951565b34801561029e575f5ffd5b506101b16102ad366004612e27565b60026020525f908152604090205460ff1681565b3480156102cc575f5ffd5b506102e06102db366004612f0c565b6109af565b6040516101be929190612fcc565b3480156102f9575f5ffd5b50610248610308366004612fec565b6109d1565b348015610318575f5ffd5b50610248610327366004613060565b610a0d565b348015610337575f5ffd5b506101b1610346366004612e27565b60016020525f908152604090205460ff1681565b348015610365575f5ffd5b506101da61037436600461310f565b610a5a565b348015610384575f5ffd5b506101da6103933660046131e7565b610a76565b3480156103a3575f5ffd5b506101b16103b2366004612ec2565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156103f2575f5ffd5b506102485f81565b348015610405575f5ffd5b5061042d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101be919061328d565b348015610445575f5ffd5b506101da610c2b565b348015610459575f5ffd5b506101da610468366004612e27565b610d69565b348015610478575f5ffd5b50610248610dfc565b6101da610eb4565b348015610494575f5ffd5b506101da6104a3366004612ec2565b610f51565b3480156104b3575f5ffd5b506101da6104c2366004612e27565b610f75565b3480156104d2575f5ffd5b506102487f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b348015610505575f5ffd5b506102486105143660046132be565b5f95945050505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806105b057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156106225750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b1561068657337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d92919061332d565b60405180910390fd5b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630396cb609034906106fa908590600401613354565b5f604051808303818588803b158015610711575f5ffd5b505af1158015610723573d5f5f3e3d5ffd5b505050505050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156107975750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b156107f257337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d92919061332d565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600160205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b9061086c908390613362565b60405180910390a150565b5f610881816110bb565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063205c2878906108f5908690869060040161332d565b5f604051808303815f87803b15801561090c575f5ffd5b505af115801561091e573d5f5f3e3d5ffd5b50505050505050565b5f82815260208190526040902060010154610941816110bb565b61094b83836110c8565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109a0576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109aa82826111c1565b505050565b60605f6109ba61127a565b6109c58585856112eb565b91509150935093915050565b5f670de0b6b3a7640000826109e6858761339d565b6109f090886133bc565b6109fa919061339d565b610a0491906133fc565b95945050505050565b5f5f610a18836114ac565b90505f610a258585611548565b90508082604051602001610a3a92919061340f565b604051602081830303815290604052805190602001209250505092915050565b610a6261127a565b610a6f85858585856116fc565b5050505050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610ae25750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610b3d57337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d92919061332d565b5f5b8281101561094b578160025f868685818110610b5d57610b5d61341d565b9050602002016020810190610b729190612e27565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790557f8ff8c5211f68ef53b4bdd15ab2ea6d87be8a3dbf58865bd8325c984057e4fcb4848483818110610bf757610bf761341d565b9050602002016020810190610c0c9190612e27565b83604051610c1b92919061344a565b60405180910390a1600101610b3f565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610c975750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610cf257337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d92919061332d565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610d57575f5ffd5b505af115801561094b573d5f5f3e3d5ffd5b5f610d73816110bb565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90610de5908590600401613362565b5f604051808303815f87803b158015610711575f5ffd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190610e70903090600401613362565b602060405180830381865afa158015610e8b573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eaf9190613470565b905090565b6040517fb760faf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b760faf9903490610f28903090600401613362565b5f604051808303818588803b158015610f3f575f5ffd5b505af1158015610a6f573d5f5f3e3d5ffd5b5f82815260208190526040902060010154610f6b816110bb565b61094b83836111c1565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610fe15750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b1561103c57337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d92919061332d565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602081905260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055517f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f249061086c908390613362565b6110c581336118e4565b50565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166111ba575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556111583390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016105b0565b505f6105b0565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156111ba575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016105b0565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146112e9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067d906134c4565b565b60605f8080368161132861130260e08b018b6134d4565b7f0000000000000000000000000000000000000000000000000000000000000000611952565b93509350935093508215801561134d5750325f9081526002602052604090205460ff16155b1561138657326040517f55d3ab4600000000000000000000000000000000000000000000000000000000815260040161067d9190613362565b7f000000000000000000000000000000000000000000000000000000000000000060ff168460ff16141580156113e257507f000000000000000000000000000000000000000000000000000000000000000060ff168460ff1614155b15611419576040517f654a4f2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60605f7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff160361145b576114558b85858d6119fc565b90925090505b7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff160361149c57611496868c86868e8e611b8a565b90925090505b909a909950975050505050505050565b5f36816114bc60408501856134d4565b915091506114ca8282611cbb565b6114d757505f9392505050565b5f6114ed6114e86020870187612e27565b611d17565b90506014821161152857806040516020016115089190613573565b604051602081830303815290604052805190602001209350505050919050565b806115368360148187613587565b604051602001611508939291906135d1565b5f7f000000000000000000000000000000000000000000000000000000000000000060ff168360ff16036115d3576115cc826115c47f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006135ed565b60ff16611e0c565b90506105b0565b5f61161e7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006135ed565b90505f61162e60e08501856134d4565b61167b60ff7f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000006133bc565b81811061168a5761168a61341d565b919091013560f81c91505060018116151560028216151560048316158015906116bb576116b86010866135ed565b94505b82156116cf576116cc6010866135ed565b94505b81156116e3576116e06014866135ed565b94505b6116f0878660ff16611e0c565b955050505050506105b0565b5f6117078585611f26565b90505f5f61171582866133bc565b90505f8361018001516fffffffffffffffffffffffffffffffff166117568386608001516fffffffffffffffffffffffffffffffff168888606001516109d1565b61176091906133bc565b90505f84610120015182116117855781856101200151611780919061360a565b611795565b610120850151611795908361360a565b90506117d7856020015186610120015184116117b55786604001516117b8565b86515b87610120015185116117cb5787516117d1565b87604001515b84612019565b5f670de0b6b3a764000086606001518761010001516117f6919061339d565b61180091906133fc565b6101a087015190915073ffffffffffffffffffffffffffffffffffffffff161580159061182c57508281115b1561185357602086015186516101a088015161185392919061184e878661360a565b612019565b855f015173ffffffffffffffffffffffffffffffffffffffff168660a001517f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000008960200151878b606001516040516118cf9493929190613626565b60405180910390a35050505050505050505050565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661194e5780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d92919061332d565b5050565b5f8036816119618560016133bc565b86101561199a576040517fcc32193e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8787878181106119ad576119ad61341d565b919091013560f881901c925060018084161515925060f99190911c9036905f908c908c906119dc908d906133bc565b6119e7928290613587565b939d949c509a50919850919650505050505050565b60605f5f5f365f611a0d8989612071565b93509350935093505f611a75611a437f00000000000000000000000000000000000000000000000000000000000000008d610a0d565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b90505f611ab78285858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061217892505050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205491925060ff90911690611af1821589896121a0565b90508d3573ffffffffffffffffffffffffffffffffffffffff168b7f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000005f5f5f604051611b61949392919061366f565b60405180910390a360408051602081019091525f81529e909d509b505050505050505050505050565b60605f5f611b9887876121d6565b90505f611ba8611a438b8b610a0d565b90505f611bb9828460c00151612178565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260016020908152604080832054918701519087015193945060ff90911692611bfe918415916121a0565b90505f611c0d8d8b888c612933565b905082611c225796509450611cb09350505050565b5f611c338a5f5f8a60a001516109d1565b9050808761010001511115611c74576040517f79183c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010087015115611ca657611ca687608001518f5f016020810190611c999190612e27565b89516101008b0151612019565b5096509450505050505b965096945050505050565b5f6002821015611ccc57505f6105b0565b50507f770200000000000000000000000000000000000000000000000000000000000090357fffffffffffffffffffffffffffffffffffffffff000000000000000000000000161490565b5f5f60175f5f853c505f517fffffff000000000000000000000000000000000000000000000000000000000081167fef0100000000000000000000000000000000000000000000000000000000000014611ded575f8373ffffffffffffffffffffffffffffffffffffffff163b11611dbb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067d906136d7565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067d9061371a565b60481c73ffffffffffffffffffffffffffffffffffffffff1692915050565b5f8083356020850135608086013560a087013560c0880135611e3160408a018a6134d4565b604051611e3f92919061372a565b604051908190039020611e5560608b018b6134d4565b604051611e6392919061372a565b604051908190039020611e7960e08c018c6134d4565b5f90611ea58d7f00000000000000000000000000000000000000000000000000000000000000006133bc565b92611eb293929190613587565b604051611ec092919061372a565b604051908190038120611edc9897969594939291602001613736565b6040516020818303038152906040528051906020012090508046604051602001611f0792919061340f565b6040516020818303038152906040528051906020012091505092915050565b612006604051806101c001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f6fffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f6fffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b61201282840184613985565b9392505050565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c5260205f6064601c5f895af13d1560015f5114171661206457637939f4245f526004601cfd5b5f60605260405250505050565b5f80368160ff7f0000000000000000000000000000000000000000000000000000000000000000168510156120d2576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f6120e0600682888a613587565b6120e9916139a4565b60d01c90505f6120fd600c6006898b613587565b612106916139a4565b60d01c9050365f61211a89600c818d613587565b909250905060408114801590612131575060418114155b15612168576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9299919850965090945092505050565b5f5f5f5f6121868686612ac0565b9250925092506121968282612b09565b5090949350505050565b5f60d08265ffffffffffff16901b60a08465ffffffffffff16901b856121c6575f6121c9565b60015b60ff161717949350505050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e081018290526101008101829052610120810182905261014081019190915260ff7f00000000000000000000000000000000000000000000000000000000000000001682101561228a576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808484828161229c5761229c61341d565b919091013560f81c915050600180821615159060028316151590600484161515906122c79086613a0f565b9450876fffffffffffffffffffffffffffffffff8616886122e9886006613a0f565b6fffffffffffffffffffffffffffffffff169261230893929190613587565b612311916139a4565b60d01c6020870152612324600686613a0f565b9450876fffffffffffffffffffffffffffffffff861688612346886006613a0f565b6fffffffffffffffffffffffffffffffff169261236593929190613587565b61236e916139a4565b60d01c6040870152612381600686613a0f565b9450876fffffffffffffffffffffffffffffffff8616886123a3886014613a0f565b6fffffffffffffffffffffffffffffffff16926123c293929190613587565b6123cb91613a3b565b60601c60808701526123de601486613a0f565b9450876fffffffffffffffffffffffffffffffff861688612400886010613a0f565b6fffffffffffffffffffffffffffffffff169261241f93929190613587565b61242891613a99565b60801c606087015261243b601086613a0f565b9450876fffffffffffffffffffffffffffffffff86168861245d886020613a0f565b6fffffffffffffffffffffffffffffffff169261247c93929190613587565b61248591613af7565b60a0870152612495602086613a0f565b9450876fffffffffffffffffffffffffffffffff8616886124b7886010613a0f565b6fffffffffffffffffffffffffffffffff16926124d693929190613587565b6124df91613a99565b60801c60e08701526124f2601086613a0f565b9450876fffffffffffffffffffffffffffffffff861688612514886014613a0f565b6fffffffffffffffffffffffffffffffff169261253393929190613587565b61253c91613a3b565b60601c865261254c601486613a0f565b5f6101008801529450801561261057612566856010613a0f565b6fffffffffffffffffffffffffffffffff168710156125b1576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff8616886125d1886010613a0f565b6fffffffffffffffffffffffffffffffff16926125f093929190613587565b6125f991613a99565b60801c61010087015261260d601086613a0f565b94505b5f61012087015282156126d257612628856010613a0f565b6fffffffffffffffffffffffffffffffff16871015612673576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff861688612693886010613a0f565b6fffffffffffffffffffffffffffffffff16926126b293929190613587565b6126bb91613a99565b60801c6101208701526126cf601086613a0f565b94505b5f6101408701528115612794576126ea856014613a0f565b6fffffffffffffffffffffffffffffffff16871015612735576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff861688612755886014613a0f565b6fffffffffffffffffffffffffffffffff169261277493929190613587565b61277d91613a3b565b60601c610140870152612791601486613a0f565b94505b6127b2876fffffffffffffffffffffffffffffffff8716818b613587565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050505060c0870152608086015173ffffffffffffffffffffffffffffffffffffffff1661283b576040517f33c1dac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560a001515f03612878576040517f5b33c69600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81801561289e575061014086015173ffffffffffffffffffffffffffffffffffffffff16155b156128d5576040517f497189f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560c00151516040141580156128f157508560c0015151604114155b15612928576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505092915050565b60605f61293f86612c0a565b61294887612c39565b61295291906133bc565b90505f8460e001516fffffffffffffffffffffffffffffffff1661297588612c56565b6129839060a08a01356133bc565b61298d91906133bc565b604080516101c08101909152909150806129aa60208a018a612e27565b73ffffffffffffffffffffffffffffffffffffffff168152602001866080015173ffffffffffffffffffffffffffffffffffffffff168152602001865f015173ffffffffffffffffffffffffffffffffffffffff1681526020018660a00151815260200186606001516fffffffffffffffffffffffffffffffff1681526020018781526020015f81526020015f815260200185815260200186610100015181526020018381526020018281526020018661012001516fffffffffffffffffffffffffffffffff16815260200186610140015173ffffffffffffffffffffffffffffffffffffffff16815250604051602001612aa59190613c60565b60405160208183030381529060405292505050949350505050565b5f5f5f8351604103612af7576020840151604085015160608601515f1a612ae988828585612c65565b955095509550505050612b02565b505081515f91506002905b9250925092565b5f826003811115612b1c57612b1c613c6f565b03612b25575050565b6001826003811115612b3957612b39613c6f565b03612b70576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115612b8457612b84613c6f565b03612bbd576040517ffce698f700000000000000000000000000000000000000000000000000000000815261067d908290600401612eb4565b6003826003811115612bd157612bd1613c6f565b0361194e57806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161067d9190612eb4565b5f612c1860e08301836134d4565b612c2791603491602491613587565b612c3091613a99565b60801c92915050565b5f6fffffffffffffffffffffffffffffffff6080830135166105b0565b5f6105b0826080013560801c90565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612c9e57505f91506003905082612d40565b5f6001888888886040515f8152602001604052604051612cc19493929190613c9c565b6020604051602081039080840390855afa158015612ce1573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612d3757505f925060019150829050612d40565b92505f91508190505b9450945094915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146110c5575f5ffd5b80356105b081612d4a565b5f60208284031215612d9657612d965f5ffd5b5f612da18484612d78565b949350505050565b8015155b82525050565b602081016105b08284612da9565b63ffffffff8116612d6e565b80356105b081612dc1565b5f60208284031215612deb57612deb5f5ffd5b5f612da18484612dcd565b5f73ffffffffffffffffffffffffffffffffffffffff82166105b0565b612d6e81612df6565b80356105b081612e13565b5f60208284031215612e3a57612e3a5f5ffd5b5f612da18484612e1c565b80612d6e565b80356105b081612e45565b5f5f60408385031215612e6a57612e6a5f5ffd5b5f612e758585612e1c565b9250506020612e8685828601612e4b565b9150509250929050565b5f60208284031215612ea357612ea35f5ffd5b5f612da18484612e4b565b80612dad565b602081016105b08284612eae565b5f5f60408385031215612ed657612ed65f5ffd5b5f612ee18585612e4b565b9250506020612e8685828601612e1c565b5f6101208284031215612f0657612f065f5ffd5b50919050565b5f5f5f60608486031215612f2157612f215f5ffd5b833567ffffffffffffffff811115612f3a57612f3a5f5ffd5b612f4686828701612ef2565b9350506020612f5786828701612e4b565b9250506040612f6886828701612e4b565b9150509250925092565b8281835e505f910152565b5f612f86825190565b808452602084019350612f9d818560208601612f72565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920192915050565b60408082528101612fdd8185612f7d565b90506120126020830184612eae565b5f5f5f5f60808587031215613002576130025f5ffd5b5f61300d8787612e4b565b945050602061301e87828801612e4b565b935050604061302f87828801612e4b565b925050606061304087828801612e4b565b91505092959194509250565b60ff8116612d6e565b80356105b08161304c565b5f5f60408385031215613074576130745f5ffd5b5f61307f8585613055565b925050602083013567ffffffffffffffff81111561309e5761309e5f5ffd5b612e8685828601612ef2565b600381106110c5575f5ffd5b80356105b0816130aa565b5f5f83601f8401126130d4576130d45f5ffd5b50813567ffffffffffffffff8111156130ee576130ee5f5ffd5b602083019150836001820283011115613108576131085f5ffd5b9250929050565b5f5f5f5f5f60808688031215613126576131265f5ffd5b5f61313188886130b6565b955050602086013567ffffffffffffffff811115613150576131505f5ffd5b61315c888289016130c1565b9450945050604061316f88828901612e4b565b925050606061318088828901612e4b565b9150509295509295909350565b5f5f83601f8401126131a0576131a05f5ffd5b50813567ffffffffffffffff8111156131ba576131ba5f5ffd5b602083019150836020820283011115613108576131085f5ffd5b801515612d6e565b80356105b0816131d4565b5f5f5f604084860312156131fc576131fc5f5ffd5b833567ffffffffffffffff811115613215576132155f5ffd5b6132218682870161318d565b93509350506020612f68868287016131dc565b5f6105b073ffffffffffffffffffffffffffffffffffffffff8316613257565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b5f6105b082613234565b5f6105b082613270565b612dad8161327a565b602081016105b08284613284565b6fffffffffffffffffffffffffffffffff8116612d6e565b80356105b08161329b565b5f5f5f5f5f60a086880312156132d5576132d55f5ffd5b5f6132e08888612e4b565b95505060206132f188828901612e4b565b9450506040613302888289016132b3565b935050606061331388828901612e4b565b925050608061318088828901612e4b565b612dad81612df6565b6040810161333b8285613324565b6120126020830184612eae565b63ffffffff8116612dad565b602081016105b08284613348565b602081016105b08284613324565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181028082158382048514176133b5576133b5613370565b5092915050565b808201808211156105b0576105b0613370565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f8261340a5761340a6133cf565b500490565b6040810161333b8285612eae565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b604081016134588285613324565b6120126020830184612da9565b80516105b081612e45565b5f60208284031215613483576134835f5ffd5b5f612da18484613465565b601581525f602082017f53656e646572206e6f7420456e747279506f696e740000000000000000000000815291505b5060200190565b602080825281016105b08161348e565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe13685900301811261350b5761350b5f5ffd5b80840192508235915067ffffffffffffffff82111561352b5761352b5f5ffd5b602083019250600182023603831315613545576135455f5ffd5b509250929050565b5f6105b08260601b90565b5f6105b08261354d565b612dad61356e82612df6565b613558565b5f61357e8284613562565b50601401919050565b5f5f85851115613598576135985f5ffd5b838611156135a7576135a75f5ffd5b5050820193919092039150565b82818337505f910152565b5f6135cb8385846135b4565b50500190565b5f6135dc8286613562565b601482019150610a048284866135bf565b60ff9182169190811690828201908111156105b0576105b0613370565b818103818111156105b0576105b0613370565b60ff8116612dad565b60808101613634828761361d565b6136416020830186613324565b61364e6040830185612eae565b610a046060830184612eae565b5f6105b06132548381565b612dad8161365b565b6080810161367d828761361d565b61368a6020830186613324565b6136976040830185613666565b610a046060830184613666565b601281525f602082017f73656e64657220686173206e6f20636f64650000000000000000000000000000815291506134bd565b602080825281016105b0816136a4565b601881525f602082017f6e6f7420616e204549502d373730322064656c65676174650000000000000000815291506134bd565b602080825281016105b0816136e7565b5f612da18284866135bf565b6101008101613745828b613324565b613752602083018a612eae565b61375f6040830189612eae565b61376c6060830188612eae565b6137796080830187612eae565b61378660a0830186612eae565b61379360c0830185612eae565b6137a060e0830184612eae565b9998505050505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff8211171561381e5761381e6137ad565b6040525050565b5f61382f60405190565b905061383b82826137da565b919050565b5f6101c08284031215613854576138545f5ffd5b61385f6101c0613825565b90505f61386c8484612e1c565b825250602061387d84848301612e1c565b602083015250604061389184828501612e1c565b60408301525060606138a584828501612e4b565b60608301525060806138b9848285016132b3565b60808301525060a06138cd84828501612e4b565b60a08301525060c06138e184828501612e4b565b60c08301525060e06138f584828501612e4b565b60e08301525061010061390a84828501612e4b565b6101008301525061012061392084828501612e4b565b6101208301525061014061393684828501612e4b565b6101408301525061016061394c84828501612e4b565b61016083015250610180613962848285016132b3565b610180830152506101a061397884828501612e1c565b6101a08301525092915050565b5f6101c08284031215613999576139995f5ffd5b5f612da18484613840565b80357fffffffffffff00000000000000000000000000000000000000000000000000001682826006821015613a0757613a027fffffffffffff0000000000000000000000000000000000000000000000000000836006036008021b90565b831692505b505092915050565b6fffffffffffffffffffffffffffffffff9182169190811690828201908111156105b0576105b0613370565b80357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001682826014821015613a0757613a027fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008021b90565b80357fffffffffffffffffffffffffffffffff000000000000000000000000000000001682826010821015613a0757613a027fffffffffffffffffffffffffffffffff00000000000000000000000000000000836010036008021b90565b803582826020821015613a0757613a027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008021b90565b6fffffffffffffffffffffffffffffffff8116612dad565b80516101c0830190613b5d8482613324565b506020820151613b706020850182613324565b506040820151613b836040850182613324565b506060820151613b966060850182612eae565b506080820151613ba96080850182613b33565b5060a0820151613bbc60a0850182612eae565b5060c0820151613bcf60c0850182612eae565b5060e0820151613be260e0850182612eae565b50610100820151613bf7610100850182612eae565b50610120820151613c0c610120850182612eae565b50610140820151613c21610140850182612eae565b50610160820151613c36610160850182612eae565b50610180820151613c4b610180850182613b33565b506101a082015161094b6101a0850182613324565b6101c081016105b08284613b4b565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60808101613caa8287612eae565b613641602083018661361d56fea26469706673582212206b1fa2b1f25bc36e67dd13719dd40b9c8f2d78c750dad2f8f4a9451d4a426a6964736f6c634300081c0033", + "0x6101806040525f60a052600160c081905260e052607561010052600c61012052603461014052601461016052348015610036575f5ffd5b50604051613e2a380380613e2a833981016040819052610055916102f4565b6001600160a01b0384166080528383838383838383808484846100785f83610115565b506100a37f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0882610115565b505f925050505b8151811015610102576001805f8484815181106100c9576100c961036d565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790556001016100aa565b5050505050505050505050505050610381565b5f828152602081815260408083206001600160a01b038516845290915281205460ff166101b5575f838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561016d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101b8565b505f5b92915050565b5f6001600160a01b0382166101b8565b6101d7816101be565b81146101e1575f5ffd5b50565b80516101b8816101ce565b634e487b7160e01b5f52604160045260245ffd5b601f19601f83011681018181106001600160401b0382111715610228576102286101ef565b6040525050565b5f61023960405190565b90506102458282610203565b919050565b5f6001600160401b03821115610262576102626101ef565b5060209081020190565b5f61027e6102798461024a565b61022f565b8381529050602080820190840283018581111561029c5761029c5f5ffd5b835b818110156102c057806102b188826101e4565b8452506020928301920161029e565b5050509392505050565b5f82601f8301126102dc576102dc5f5ffd5b81516102ec84826020860161026c565b949350505050565b5f5f5f5f6080858703121561030a5761030a5f5ffd5b5f61031587876101e4565b9450506020610326878288016101e4565b9350506040610337878288016101e4565b92505060608501516001600160401b03811115610355576103555f5ffd5b610361878288016102ca565b91505092959194509250565b634e487b7160e01b5f52603260045260245ffd5b60805160a05160c05160e051610100516101205161014051610160516139cc61045e5f395f50505f8181610b1c0152818161146b015261168801525f8181610a440152611e3f01525f8181610a9e0152611ff701525f8181610a6501528181610abf0152610afa01525f81816114ef015281816115c401526118c601525f8181610a10015281816115200152818161158501528181611a4f0152611b6001525f818161040b015281816106c3015281816108be01528181610e5b01528181610f1701528181610fa20152818161105801526113f901526139cc5ff3fe60806040526004361061018e575f3560e01c80637c627b21116100dc578063c23a5cea11610087578063d547741f11610062578063d547741f14610489578063eb12d61e146104a8578063ec87621c146104c7578063feaf513e146104fa575f5ffd5b8063c23a5cea1461044e578063c399ec881461046d578063d0e30db014610481575f5ffd5b8063a217fddf116100b7578063a217fddf146103e7578063b0d691fe146103fa578063bb9fe6bf1461043a575f5ffd5b80637c627b211461035a5780637dd345cb1461037957806391d1485414610398575f5ffd5b806336568abe1161013c5780635525dcfb116101175780635525dcfb146102ee57806363b241aa1461030d578063736c0d5b1461032c575f5ffd5b806336568abe146102745780634031c20e1461029357806352b7512c146102c1575f5ffd5b8063205c28781161016c578063205c2878146101fb578063248a9ca31461021a5780632f2ff15d14610255575f5ffd5b806301ffc9a7146101925780630396cb60146101c75780630e316ab7146101dc575b5f5ffd5b34801561019d575f5ffd5b506101b16101ac366004612b49565b61051e565b6040516101be9190612b79565b60405180910390f35b6101da6101d5366004612b9e565b6105b6565b005b3480156101e7575f5ffd5b506101da6101f6366004612bed565b61072b565b348015610206575f5ffd5b506101da610215366004612c1c565b610877565b348015610225575f5ffd5b50610248610234366004612c56565b5f9081526020819052604090206001015490565b6040516101be9190612c7a565b348015610260575f5ffd5b506101da61026f366004612c88565b610927565b34801561027f575f5ffd5b506101da61028e366004612c88565b610951565b34801561029e575f5ffd5b506101b16102ad366004612bed565b60026020525f908152604090205460ff1681565b3480156102cc575f5ffd5b506102e06102db366004612cd2565b6109af565b6040516101be929190612d92565b3480156102f9575f5ffd5b50610248610308366004612db2565b6109d1565b348015610318575f5ffd5b50610248610327366004612e26565b610a0d565b348015610337575f5ffd5b506101b1610346366004612bed565b60016020525f908152604090205460ff1681565b348015610365575f5ffd5b506101da610374366004612ed5565b610bc1565b348015610384575f5ffd5b506101da610393366004612fad565b610bdd565b3480156103a3575f5ffd5b506101b16103b2366004612c88565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156103f2575f5ffd5b506102485f81565b348015610405575f5ffd5b5061042d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101be9190613053565b348015610445575f5ffd5b506101da610d92565b348015610459575f5ffd5b506101da610468366004612bed565b610ed0565b348015610478575f5ffd5b50610248610f63565b6101da61101b565b348015610494575f5ffd5b506101da6104a3366004612c88565b6110b8565b3480156104b3575f5ffd5b506101da6104c2366004612bed565b6110dc565b3480156104d2575f5ffd5b506102487f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b348015610505575f5ffd5b50610248610514366004613084565b5f95945050505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806105b057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156106225750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b1561068657337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d9291906130f3565b60405180910390fd5b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630396cb609034906106fa90859060040161311a565b5f604051808303818588803b158015610711575f5ffd5b505af1158015610723573d5f5f3e3d5ffd5b505050505050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156107975750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b156107f257337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d9291906130f3565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600160205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b9061086c908390613128565b60405180910390a150565b5f61088181611222565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063205c2878906108f590869086906004016130f3565b5f604051808303815f87803b15801561090c575f5ffd5b505af115801561091e573d5f5f3e3d5ffd5b50505050505050565b5f8281526020819052604090206001015461094181611222565b61094b838361122f565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109a0576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109aa8282611328565b505050565b60605f6109ba6113e1565b6109c5858585611452565b91509150935093915050565b5f670de0b6b3a7640000826109e68587613163565b6109f09088613182565b6109fa9190613163565b610a0491906131c2565b95945050505050565b5f7f000000000000000000000000000000000000000000000000000000000000000060ff168360ff1603610a9857610a9182610a897f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006131d5565b60ff16611613565b90506105b0565b5f610ae37f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006131d5565b90505f610af360e08501856131f2565b610b4060ff7f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000613182565b818110610b4f57610b4f61326b565b919091013560f81c9150506001811615156002821615156004831615801590610b8057610b7d6010866131d5565b94505b8215610b9457610b916010866131d5565b94505b8115610ba857610ba56014866131d5565b94505b610bb5878660ff16611613565b98975050505050505050565b610bc96113e1565b610bd6858585858561172d565b5050505050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610c495750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610ca457337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d9291906130f3565b5f5b8281101561094b578160025f868685818110610cc457610cc461326b565b9050602002016020810190610cd99190612bed565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790557f8ff8c5211f68ef53b4bdd15ab2ea6d87be8a3dbf58865bd8325c984057e4fcb4848483818110610d5e57610d5e61326b565b9050602002016020810190610d739190612bed565b83604051610d82929190613298565b60405180910390a1600101610ca6565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610dfe5750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610e5957337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d9291906130f3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610ebe575f5ffd5b505af115801561094b573d5f5f3e3d5ffd5b5f610eda81611222565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90610f4c908590600401613128565b5f604051808303815f87803b158015610711575f5ffd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190610fd7903090600401613128565b602060405180830381865afa158015610ff2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101691906132be565b905090565b6040517fb760faf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b760faf990349061108f903090600401613128565b5f604051808303818588803b1580156110a6575f5ffd5b505af1158015610bd6573d5f5f3e3d5ffd5b5f828152602081905260409020600101546110d281611222565b61094b8383611328565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156111485750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b156111a357337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d9291906130f3565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602081905260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055517f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f249061086c908390613128565b61122c8133611915565b50565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16611321575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112bf3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016105b0565b505f6105b0565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615611321575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016105b0565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067d906132dc565b565b60605f8080368161148f61146960e08b018b6131f2565b7f0000000000000000000000000000000000000000000000000000000000000000611983565b9350935093509350821580156114b45750325f9081526002602052604090205460ff16155b156114ed57326040517f55d3ab4600000000000000000000000000000000000000000000000000000000815260040161067d9190613128565b7f000000000000000000000000000000000000000000000000000000000000000060ff168460ff161415801561154957507f000000000000000000000000000000000000000000000000000000000000000060ff168460ff1614155b15611580576040517f654a4f2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60605f7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff16036115c2576115bc8b85858d611a2d565b90925090505b7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff1603611603576115fd868c86868e8e611bbb565b90925090505b909a909950975050505050505050565b5f8083356020850135608086013560a087013560c088013561163860408a018a6131f2565b604051611646929190613334565b60405190819003902061165c60608b018b6131f2565b60405161166a929190613334565b60405190819003902061168060e08c018c6131f2565b5f906116ac8d7f0000000000000000000000000000000000000000000000000000000000000000613182565b926116b993929190613340565b6040516116c7929190613334565b6040519081900381206116e3989796959493929160200161336d565b604051602081830303815290604052805190602001209050804660405160200161170e9291906133e4565b6040516020818303038152906040528051906020012091505092915050565b5f6117388585611cec565b90505f5f6117468286613182565b90505f8361018001516fffffffffffffffffffffffffffffffff166117878386608001516fffffffffffffffffffffffffffffffff168888606001516109d1565b6117919190613182565b90505f84610120015182116117b657818561012001516117b191906133f2565b6117c6565b6101208501516117c690836133f2565b9050611808856020015186610120015184116117e65786604001516117e9565b86515b87610120015185116117fc578751611802565b87604001515b84611ddf565b5f670de0b6b3a764000086606001518761010001516118279190613163565b61183191906131c2565b6101a087015190915073ffffffffffffffffffffffffffffffffffffffff161580159061185d57508281115b1561188457602086015186516101a088015161188492919061187f87866133f2565b611ddf565b855f015173ffffffffffffffffffffffffffffffffffffffff168660a001517f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000008960200151878b60600151604051611900949392919061340e565b60405180910390a35050505050505050505050565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661197f5780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d9291906130f3565b5050565b5f803681611992856001613182565b8610156119cb576040517fcc32193e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8787878181106119de576119de61326b565b919091013560f881901c925060018084161515925060f99190911c9036905f908c908c90611a0d908d90613182565b611a18928290613340565b939d949c509a50919850919650505050505050565b60605f5f5f365f611a3e8989611e37565b93509350935093505f611aa6611a747f00000000000000000000000000000000000000000000000000000000000000008d610a0d565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b90505f611ae88285858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611f3e92505050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205491925060ff90911690611b2282158989611f66565b90508d3573ffffffffffffffffffffffffffffffffffffffff168b7f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000005f5f5f604051611b929493929190613457565b60405180910390a360408051602081019091525f81529e909d509b505050505050505050505050565b60605f5f611bc98787611f9c565b90505f611bd9611a748b8b610a0d565b90505f611bea828460c00151611f3e565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260016020908152604080832054918701519087015193945060ff90911692611c2f91841591611f66565b90505f611c3e8d8b888c6126f9565b905082611c535796509450611ce19350505050565b5f611c648a5f5f8a60a001516109d1565b9050808761010001511115611ca5576040517f79183c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010087015115611cd757611cd787608001518f5f016020810190611cca9190612bed565b89516101008b0151611ddf565b5096509450505050505b965096945050505050565b611dcc604051806101c001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f6fffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f6fffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b611dd882840184613664565b9392505050565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c5260205f6064601c5f895af13d1560015f51141716611e2a57637939f4245f526004601cfd5b5f60605260405250505050565b5f80368160ff7f000000000000000000000000000000000000000000000000000000000000000016851015611e98576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611ea6600682888a613340565b611eaf91613683565b60d01c90505f611ec3600c6006898b613340565b611ecc91613683565b60d01c9050365f611ee089600c818d613340565b909250905060408114801590611ef7575060418114155b15611f2e576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9299919850965090945092505050565b5f5f5f5f611f4c8686612886565b925092509250611f5c82826128cf565b5090949350505050565b5f60d08265ffffffffffff16901b60a08465ffffffffffff16901b85611f8c575f611f8f565b60015b60ff161717949350505050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e081018290526101008101829052610120810182905261014081019190915260ff7f000000000000000000000000000000000000000000000000000000000000000016821015612050576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80848482816120625761206261326b565b919091013560f81c9150506001808216151590600283161515906004841615159061208d90866136ee565b9450876fffffffffffffffffffffffffffffffff8616886120af8860066136ee565b6fffffffffffffffffffffffffffffffff16926120ce93929190613340565b6120d791613683565b60d01c60208701526120ea6006866136ee565b9450876fffffffffffffffffffffffffffffffff86168861210c8860066136ee565b6fffffffffffffffffffffffffffffffff169261212b93929190613340565b61213491613683565b60d01c60408701526121476006866136ee565b9450876fffffffffffffffffffffffffffffffff8616886121698860146136ee565b6fffffffffffffffffffffffffffffffff169261218893929190613340565b6121919161371a565b60601c60808701526121a46014866136ee565b9450876fffffffffffffffffffffffffffffffff8616886121c68860106136ee565b6fffffffffffffffffffffffffffffffff16926121e593929190613340565b6121ee91613778565b60801c60608701526122016010866136ee565b9450876fffffffffffffffffffffffffffffffff8616886122238860206136ee565b6fffffffffffffffffffffffffffffffff169261224293929190613340565b61224b916137d6565b60a087015261225b6020866136ee565b9450876fffffffffffffffffffffffffffffffff86168861227d8860106136ee565b6fffffffffffffffffffffffffffffffff169261229c93929190613340565b6122a591613778565b60801c60e08701526122b86010866136ee565b9450876fffffffffffffffffffffffffffffffff8616886122da8860146136ee565b6fffffffffffffffffffffffffffffffff16926122f993929190613340565b6123029161371a565b60601c86526123126014866136ee565b5f610100880152945080156123d65761232c8560106136ee565b6fffffffffffffffffffffffffffffffff16871015612377576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff8616886123978860106136ee565b6fffffffffffffffffffffffffffffffff16926123b693929190613340565b6123bf91613778565b60801c6101008701526123d36010866136ee565b94505b5f6101208701528215612498576123ee8560106136ee565b6fffffffffffffffffffffffffffffffff16871015612439576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff8616886124598860106136ee565b6fffffffffffffffffffffffffffffffff169261247893929190613340565b61248191613778565b60801c6101208701526124956010866136ee565b94505b5f610140870152811561255a576124b08560146136ee565b6fffffffffffffffffffffffffffffffff168710156124fb576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff86168861251b8860146136ee565b6fffffffffffffffffffffffffffffffff169261253a93929190613340565b6125439161371a565b60601c6101408701526125576014866136ee565b94505b612578876fffffffffffffffffffffffffffffffff8716818b613340565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050505060c0870152608086015173ffffffffffffffffffffffffffffffffffffffff16612601576040517f33c1dac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560a001515f0361263e576040517f5b33c69600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818015612664575061014086015173ffffffffffffffffffffffffffffffffffffffff16155b1561269b576040517f497189f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560c00151516040141580156126b757508560c0015151604114155b156126ee576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505092915050565b60605f612705866129d0565b61270e876129ff565b6127189190613182565b90505f8460e001516fffffffffffffffffffffffffffffffff1661273b88612a1c565b6127499060a08a0135613182565b6127539190613182565b604080516101c081019091529091508061277060208a018a612bed565b73ffffffffffffffffffffffffffffffffffffffff168152602001866080015173ffffffffffffffffffffffffffffffffffffffff168152602001865f015173ffffffffffffffffffffffffffffffffffffffff1681526020018660a00151815260200186606001516fffffffffffffffffffffffffffffffff1681526020018781526020015f81526020015f815260200185815260200186610100015181526020018381526020018281526020018661012001516fffffffffffffffffffffffffffffffff16815260200186610140015173ffffffffffffffffffffffffffffffffffffffff1681525060405160200161286b919061393f565b60405160208183030381529060405292505050949350505050565b5f5f5f83516041036128bd576020840151604085015160608601515f1a6128af88828585612a2b565b9550955095505050506128c8565b505081515f91506002905b9250925092565b5f8260038111156128e2576128e261394e565b036128eb575050565b60018260038111156128ff576128ff61394e565b03612936576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111561294a5761294a61394e565b03612983576040517ffce698f700000000000000000000000000000000000000000000000000000000815261067d908290600401612c7a565b60038260038111156129975761299761394e565b0361197f57806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161067d9190612c7a565b5f6129de60e08301836131f2565b6129ed91603491602491613340565b6129f691613778565b60801c92915050565b5f6fffffffffffffffffffffffffffffffff6080830135166105b0565b5f6105b0826080013560801c90565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612a6457505f91506003905082612b06565b5f6001888888886040515f8152602001604052604051612a87949392919061397b565b6020604051602081039080840390855afa158015612aa7573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612afd57505f925060019150829050612b06565b92505f91508190505b9450945094915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461122c575f5ffd5b80356105b081612b10565b5f60208284031215612b5c57612b5c5f5ffd5b5f612b678484612b3e565b949350505050565b8015155b82525050565b602081016105b08284612b6f565b63ffffffff8116612b34565b80356105b081612b87565b5f60208284031215612bb157612bb15f5ffd5b5f612b678484612b93565b5f73ffffffffffffffffffffffffffffffffffffffff82166105b0565b612b3481612bbc565b80356105b081612bd9565b5f60208284031215612c0057612c005f5ffd5b5f612b678484612be2565b80612b34565b80356105b081612c0b565b5f5f60408385031215612c3057612c305f5ffd5b5f612c3b8585612be2565b9250506020612c4c85828601612c11565b9150509250929050565b5f60208284031215612c6957612c695f5ffd5b5f612b678484612c11565b80612b73565b602081016105b08284612c74565b5f5f60408385031215612c9c57612c9c5f5ffd5b5f612ca78585612c11565b9250506020612c4c85828601612be2565b5f6101208284031215612ccc57612ccc5f5ffd5b50919050565b5f5f5f60608486031215612ce757612ce75f5ffd5b833567ffffffffffffffff811115612d0057612d005f5ffd5b612d0c86828701612cb8565b9350506020612d1d86828701612c11565b9250506040612d2e86828701612c11565b9150509250925092565b8281835e505f910152565b5f612d4c825190565b808452602084019350612d63818560208601612d38565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920192915050565b60408082528101612da38185612d43565b9050611dd86020830184612c74565b5f5f5f5f60808587031215612dc857612dc85f5ffd5b5f612dd38787612c11565b9450506020612de487828801612c11565b9350506040612df587828801612c11565b9250506060612e0687828801612c11565b91505092959194509250565b60ff8116612b34565b80356105b081612e12565b5f5f60408385031215612e3a57612e3a5f5ffd5b5f612e458585612e1b565b925050602083013567ffffffffffffffff811115612e6457612e645f5ffd5b612c4c85828601612cb8565b6003811061122c575f5ffd5b80356105b081612e70565b5f5f83601f840112612e9a57612e9a5f5ffd5b50813567ffffffffffffffff811115612eb457612eb45f5ffd5b602083019150836001820283011115612ece57612ece5f5ffd5b9250929050565b5f5f5f5f5f60808688031215612eec57612eec5f5ffd5b5f612ef78888612e7c565b955050602086013567ffffffffffffffff811115612f1657612f165f5ffd5b612f2288828901612e87565b94509450506040612f3588828901612c11565b9250506060612f4688828901612c11565b9150509295509295909350565b5f5f83601f840112612f6657612f665f5ffd5b50813567ffffffffffffffff811115612f8057612f805f5ffd5b602083019150836020820283011115612ece57612ece5f5ffd5b801515612b34565b80356105b081612f9a565b5f5f5f60408486031215612fc257612fc25f5ffd5b833567ffffffffffffffff811115612fdb57612fdb5f5ffd5b612fe786828701612f53565b93509350506020612d2e86828701612fa2565b5f6105b073ffffffffffffffffffffffffffffffffffffffff831661301d565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b5f6105b082612ffa565b5f6105b082613036565b612b7381613040565b602081016105b0828461304a565b6fffffffffffffffffffffffffffffffff8116612b34565b80356105b081613061565b5f5f5f5f5f60a0868803121561309b5761309b5f5ffd5b5f6130a68888612c11565b95505060206130b788828901612c11565b94505060406130c888828901613079565b93505060606130d988828901612c11565b9250506080612f4688828901612c11565b612b7381612bbc565b6040810161310182856130ea565b611dd86020830184612c74565b63ffffffff8116612b73565b602081016105b0828461310e565b602081016105b082846130ea565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810280821583820485141761317b5761317b613136565b5092915050565b808201808211156105b0576105b0613136565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826131d0576131d0613195565b500490565b60ff9182169190811690828201908111156105b0576105b0613136565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe136859003018112613229576132295f5ffd5b80840192508235915067ffffffffffffffff821115613249576132495f5ffd5b602083019250600182023603831315613263576132635f5ffd5b509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b604081016132a682856130ea565b611dd86020830184612b6f565b80516105b081612c0b565b5f602082840312156132d1576132d15f5ffd5b5f612b6784846132b3565b602080825281016105b081601581527f53656e646572206e6f7420456e747279506f696e740000000000000000000000602082015260400190565b82818337505f910152565b5f61332e838584613317565b50500190565b5f612b67828486613322565b5f5f85851115613351576133515f5ffd5b83861115613360576133605f5ffd5b5050820193919092039150565b610100810161337c828b6130ea565b613389602083018a612c74565b6133966040830189612c74565b6133a36060830188612c74565b6133b06080830187612c74565b6133bd60a0830186612c74565b6133ca60c0830185612c74565b6133d760e0830184612c74565b9998505050505050505050565b604081016131018285612c74565b818103818111156105b0576105b0613136565b60ff8116612b73565b6080810161341c8287613405565b61342960208301866130ea565b6134366040830185612c74565b610a046060830184612c74565b5f6105b061301a8381565b612b7381613443565b608081016134658287613405565b61347260208301866130ea565b61347f604083018561344e565b610a04606083018461344e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff821117156134fd576134fd61348c565b6040525050565b5f61350e60405190565b905061351a82826134b9565b919050565b5f6101c08284031215613533576135335f5ffd5b61353e6101c0613504565b90505f61354b8484612be2565b825250602061355c84848301612be2565b602083015250604061357084828501612be2565b604083015250606061358484828501612c11565b606083015250608061359884828501613079565b60808301525060a06135ac84828501612c11565b60a08301525060c06135c084828501612c11565b60c08301525060e06135d484828501612c11565b60e0830152506101006135e984828501612c11565b610100830152506101206135ff84828501612c11565b6101208301525061014061361584828501612c11565b6101408301525061016061362b84828501612c11565b6101608301525061018061364184828501613079565b610180830152506101a061365784828501612be2565b6101a08301525092915050565b5f6101c08284031215613678576136785f5ffd5b5f612b67848461351f565b80357fffffffffffff000000000000000000000000000000000000000000000000000016828260068210156136e6576136e17fffffffffffff0000000000000000000000000000000000000000000000000000836006036008021b90565b831692505b505092915050565b6fffffffffffffffffffffffffffffffff9182169190811690828201908111156105b0576105b0613136565b80357fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016828260148210156136e6576136e17fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008021b90565b80357fffffffffffffffffffffffffffffffff0000000000000000000000000000000016828260108210156136e6576136e17fffffffffffffffffffffffffffffffff00000000000000000000000000000000836010036008021b90565b8035828260208210156136e6576136e17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008021b90565b6fffffffffffffffffffffffffffffffff8116612b73565b80516101c083019061383c84826130ea565b50602082015161384f60208501826130ea565b50604082015161386260408501826130ea565b5060608201516138756060850182612c74565b5060808201516138886080850182613812565b5060a082015161389b60a0850182612c74565b5060c08201516138ae60c0850182612c74565b5060e08201516138c160e0850182612c74565b506101008201516138d6610100850182612c74565b506101208201516138eb610120850182612c74565b50610140820151613900610140850182612c74565b50610160820151613915610160850182612c74565b5061018082015161392a610180850182613812565b506101a082015161094b6101a08501826130ea565b6101c081016105b0828461382a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b608081016139898287612c74565b613429602083018661340556fea26469706673582212208a15a0763d0e9e3763499efb24664c89aecc3b170e7b24ffc642014b6ca6baa764736f6c634300081c0033", pad(entryPoint08Address, { size: 32 }), pad(owner, { size: 32 }), pad(owner, { size: 32 }), @@ -39,7 +39,7 @@ export const getSingletonPaymaster08InitCode = (owner: Address): Hex => export const getSingletonPaymaster07InitCode = (owner: Address): Hex => concat([ - "0x6101806040525f60a052600160c081905260e052607561010052600c61012052603461014052601461016052348015610036575f5ffd5b50604051613eb3380380613eb3833981016040819052610055916102ec565b6001600160a01b03841660805283838383808484846100745f8361010d565b5061009f7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b088261010d565b505f925050505b81518110156100fe576001805f8484815181106100c5576100c5610365565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790556001016100a6565b50505050505050505050610379565b5f828152602081815260408083206001600160a01b038516845290915281205460ff166101ad575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101653390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101b0565b505f5b92915050565b5f6001600160a01b0382166101b0565b6101cf816101b6565b81146101d9575f5ffd5b50565b80516101b0816101c6565b634e487b7160e01b5f52604160045260245ffd5b601f19601f83011681018181106001600160401b0382111715610220576102206101e7565b6040525050565b5f61023160405190565b905061023d82826101fb565b919050565b5f6001600160401b0382111561025a5761025a6101e7565b5060209081020190565b5f61027661027184610242565b610227565b83815290506020808201908402830185811115610294576102945f5ffd5b835b818110156102b857806102a988826101dc565b84525060209283019201610296565b5050509392505050565b5f82601f8301126102d4576102d45f5ffd5b81516102e4848260208601610264565b949350505050565b5f5f5f5f60808587031215610302576103025f5ffd5b5f61030d87876101dc565b945050602061031e878288016101dc565b935050604061032f878288016101dc565b92505060608501516001600160401b0381111561034d5761034d5f5ffd5b610359878288016102c2565b91505092959194509250565b634e487b7160e01b5f52603260045260245ffd5b60805160a05160c05160e05161010051610120516101405161016051613a5d6104565f395f50505f8181610b17015281816114ec015261170901525f8181610a3f0152611edd01525f8181610a99015261209501525f8181610a6001528181610aba0152610af501525f818161157001528181611645015261196401525f8181610a0b015281816115a10152818161160601528181611aed0152611bfe01525f818161040b015281816106be015281816108b901528181610e5601528181610f1201528181610f9d01528181611053015261147a0152613a5d5ff3fe60806040526004361061018e575f3560e01c80637c627b21116100dc578063c23a5cea11610087578063d547741f11610062578063d547741f14610489578063eb12d61e146104a8578063ec87621c146104c7578063feaf513e146104fa575f5ffd5b8063c23a5cea1461044e578063c399ec881461046d578063d0e30db014610481575f5ffd5b8063a217fddf116100b7578063a217fddf146103e7578063b0d691fe146103fa578063bb9fe6bf1461043a575f5ffd5b80637c627b211461035a5780637dd345cb1461037957806391d1485414610398575f5ffd5b806336568abe1161013c5780635525dcfb116101175780635525dcfb146102ee57806363b241aa1461030d578063736c0d5b1461032c575f5ffd5b806336568abe146102745780634031c20e1461029357806352b7512c146102c1575f5ffd5b8063205c28781161016c578063205c2878146101fb578063248a9ca31461021a5780632f2ff15d14610255575f5ffd5b806301ffc9a7146101925780630396cb60146101c75780630e316ab7146101dc575b5f5ffd5b34801561019d575f5ffd5b506101b16101ac366004612be7565b610519565b6040516101be9190612c17565b60405180910390f35b6101da6101d5366004612c3c565b6105b1565b005b3480156101e7575f5ffd5b506101da6101f6366004612c8b565b610726565b348015610206575f5ffd5b506101da610215366004612cba565b610872565b348015610225575f5ffd5b50610248610234366004612cf4565b5f9081526020819052604090206001015490565b6040516101be9190612d18565b348015610260575f5ffd5b506101da61026f366004612d26565b610922565b34801561027f575f5ffd5b506101da61028e366004612d26565b61094c565b34801561029e575f5ffd5b506101b16102ad366004612c8b565b60026020525f908152604090205460ff1681565b3480156102cc575f5ffd5b506102e06102db366004612d70565b6109aa565b6040516101be929190612e30565b3480156102f9575f5ffd5b50610248610308366004612e50565b6109cc565b348015610318575f5ffd5b50610248610327366004612ec4565b610a08565b348015610337575f5ffd5b506101b1610346366004612c8b565b60016020525f908152604090205460ff1681565b348015610365575f5ffd5b506101da610374366004612f73565b610bbc565b348015610384575f5ffd5b506101da61039336600461304b565b610bd8565b3480156103a3575f5ffd5b506101b16103b2366004612d26565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156103f2575f5ffd5b506102485f81565b348015610405575f5ffd5b5061042d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101be91906130f1565b348015610445575f5ffd5b506101da610d8d565b348015610459575f5ffd5b506101da610468366004612c8b565b610ecb565b348015610478575f5ffd5b50610248610f5e565b6101da611016565b348015610494575f5ffd5b506101da6104a3366004612d26565b6110b3565b3480156104b3575f5ffd5b506101da6104c2366004612c8b565b6110d7565b3480156104d2575f5ffd5b506102487f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b348015610505575f5ffd5b50610248610514366004613122565b61121d565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806105ab57507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1615801561061d5750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b1561068157337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610678929190613191565b60405180910390fd5b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630396cb609034906106f59085906004016131b8565b5f604051808303818588803b15801561070c575f5ffd5b505af115801561071e573d5f5f3e3d5ffd5b505050505050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156107925750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b156107ed57337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610678929190613191565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600160205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b906108679083906131c6565b60405180910390a150565b5f61087c816112a3565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063205c2878906108f09086908690600401613191565b5f604051808303815f87803b158015610907575f5ffd5b505af1158015610919573d5f5f3e3d5ffd5b50505050505050565b5f8281526020819052604090206001015461093c816112a3565b61094683836112b0565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8116331461099b576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109a582826113a9565b505050565b60605f6109b5611462565b6109c08585856114d3565b91509150935093915050565b5f670de0b6b3a7640000826109e18587613201565b6109eb9088613220565b6109f59190613201565b6109ff9190613260565b95945050505050565b5f7f000000000000000000000000000000000000000000000000000000000000000060ff168360ff1603610a9357610a8c82610a847f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613273565b60ff16611694565b90506105ab565b5f610ade7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613273565b90505f610aee60e0850185613290565b610b3b60ff7f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000613220565b818110610b4a57610b4a613309565b919091013560f81c9150506001811615156002821615156004831615801590610b7b57610b78601086613273565b94505b8215610b8f57610b8c601086613273565b94505b8115610ba357610ba0601486613273565b94505b610bb0878660ff16611694565b98975050505050505050565b610bc4611462565b610bd185858585856117ae565b5050505050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610c445750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610c9f57337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610678929190613191565b5f5b82811015610946578160025f868685818110610cbf57610cbf613309565b9050602002016020810190610cd49190612c8b565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790557f8ff8c5211f68ef53b4bdd15ab2ea6d87be8a3dbf58865bd8325c984057e4fcb4848483818110610d5957610d59613309565b9050602002016020810190610d6e9190612c8b565b83604051610d7d929190613336565b60405180910390a1600101610ca1565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610df95750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610e5457337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610678929190613191565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610eb9575f5ffd5b505af1158015610946573d5f5f3e3d5ffd5b5f610ed5816112a3565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90610f479085906004016131c6565b5f604051808303815f87803b15801561070c575f5ffd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190610fd29030906004016131c6565b602060405180830381865afa158015610fed573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611011919061335c565b905090565b6040517fb760faf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b760faf990349061108a9030906004016131c6565b5f604051808303818588803b1580156110a1575f5ffd5b505af1158015610bd1573d5f5f3e3d5ffd5b5f828152602081905260409020600101546110cd816112a3565b61094683836113a9565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156111435750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b1561119e57337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610678929190613191565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602081905260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055517f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f24906108679083906131c6565b5f80806fffffffffffffffffffffffffffffffff861661123d888a613260565b6112479190613220565b90508481111561125e5761125b858261337a565b91505b5f8285111561128c576064600a611275858861337a565b61127f9190613201565b6112899190613260565b90505b6112968882613201565b9998505050505050505050565b6112ad81336119b3565b50565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166113a2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556113403390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016105ab565b505f6105ab565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156113a2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016105ab565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146114d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106789061338d565b565b60605f808036816115106114ea60e08b018b613290565b7f0000000000000000000000000000000000000000000000000000000000000000611a21565b9350935093509350821580156115355750325f9081526002602052604090205460ff16155b1561156e57326040517f55d3ab4600000000000000000000000000000000000000000000000000000000815260040161067891906131c6565b7f000000000000000000000000000000000000000000000000000000000000000060ff168460ff16141580156115ca57507f000000000000000000000000000000000000000000000000000000000000000060ff168460ff1614155b15611601576040517f654a4f2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60605f7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff16036116435761163d8b85858d611acb565b90925090505b7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff16036116845761167e868c86868e8e611c59565b90925090505b909a909950975050505050505050565b5f8083356020850135608086013560a087013560c08801356116b960408a018a613290565b6040516116c79291906133e5565b6040519081900390206116dd60608b018b613290565b6040516116eb9291906133e5565b60405190819003902061170160e08c018c613290565b5f9061172d8d7f0000000000000000000000000000000000000000000000000000000000000000613220565b9261173a939291906133f1565b6040516117489291906133e5565b604051908190038120611764989796959493929160200161341e565b604051602081830303815290604052805190602001209050804660405160200161178f929190613488565b6040516020818303038152906040528051906020012091505092915050565b5f6117b98585611d8a565b90505f6117d78484846080015185610160015186610140015161121d565b90505f6117e48286613220565b90505f8361018001516fffffffffffffffffffffffffffffffff166118258386608001516fffffffffffffffffffffffffffffffff168888606001516109cc565b61182f9190613220565b90505f8461012001518211611854578185610120015161184f919061337a565b611864565b610120850151611864908361337a565b90506118a685602001518661012001518411611884578660400151611887565b86515b876101200151851161189a5787516118a0565b87604001515b84611e7d565b5f670de0b6b3a764000086606001518761010001516118c59190613201565b6118cf9190613260565b6101a087015190915073ffffffffffffffffffffffffffffffffffffffff16158015906118fb57508281115b1561192257602086015186516101a088015161192292919061191d878661337a565b611e7d565b855f015173ffffffffffffffffffffffffffffffffffffffff168660a001517f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000008960200151878b6060015160405161199e949392919061349f565b60405180910390a35050505050505050505050565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611a1d5780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610678929190613191565b5050565b5f803681611a30856001613220565b861015611a69576040517fcc32193e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f878787818110611a7c57611a7c613309565b919091013560f881901c925060018084161515925060f99190911c9036905f908c908c90611aab908d90613220565b611ab69282906133f1565b939d949c509a50919850919650505050505050565b60605f5f5f365f611adc8989611ed5565b93509350935093505f611b44611b127f00000000000000000000000000000000000000000000000000000000000000008d610a08565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b90505f611b868285858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611fdc92505050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205491925060ff90911690611bc082158989612004565b90508d3573ffffffffffffffffffffffffffffffffffffffff168b7f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000005f5f5f604051611c3094939291906134e8565b60405180910390a360408051602081019091525f81529e909d509b505050505050505050505050565b60605f5f611c67878761203a565b90505f611c77611b128b8b610a08565b90505f611c88828460c00151611fdc565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260016020908152604080832054918701519087015193945060ff90911692611ccd91841591612004565b90505f611cdc8d8b888c612797565b905082611cf15796509450611d7f9350505050565b5f611d028a5f5f8a60a001516109cc565b9050808761010001511115611d43576040517f79183c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010087015115611d7557611d7587608001518f5f016020810190611d689190612c8b565b89516101008b0151611e7d565b5096509450505050505b965096945050505050565b611e6a604051806101c001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f6fffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f6fffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b611e76828401846136f5565b9392505050565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c5260205f6064601c5f895af13d1560015f51141716611ec857637939f4245f526004601cfd5b5f60605260405250505050565b5f80368160ff7f000000000000000000000000000000000000000000000000000000000000000016851015611f36576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611f44600682888a6133f1565b611f4d91613714565b60d01c90505f611f61600c6006898b6133f1565b611f6a91613714565b60d01c9050365f611f7e89600c818d6133f1565b909250905060408114801590611f95575060418114155b15611fcc576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9299919850965090945092505050565b5f5f5f5f611fea8686612924565b925092509250611ffa828261296d565b5090949350505050565b5f60d08265ffffffffffff16901b60a08465ffffffffffff16901b8561202a575f61202d565b60015b60ff161717949350505050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e081018290526101008101829052610120810182905261014081019190915260ff7f0000000000000000000000000000000000000000000000000000000000000000168210156120ee576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808484828161210057612100613309565b919091013560f81c9150506001808216151590600283161515906004841615159061212b908661377f565b9450876fffffffffffffffffffffffffffffffff86168861214d88600661377f565b6fffffffffffffffffffffffffffffffff169261216c939291906133f1565b61217591613714565b60d01c602087015261218860068661377f565b9450876fffffffffffffffffffffffffffffffff8616886121aa88600661377f565b6fffffffffffffffffffffffffffffffff16926121c9939291906133f1565b6121d291613714565b60d01c60408701526121e560068661377f565b9450876fffffffffffffffffffffffffffffffff86168861220788601461377f565b6fffffffffffffffffffffffffffffffff1692612226939291906133f1565b61222f916137ab565b60601c608087015261224260148661377f565b9450876fffffffffffffffffffffffffffffffff86168861226488601061377f565b6fffffffffffffffffffffffffffffffff1692612283939291906133f1565b61228c91613809565b60801c606087015261229f60108661377f565b9450876fffffffffffffffffffffffffffffffff8616886122c188602061377f565b6fffffffffffffffffffffffffffffffff16926122e0939291906133f1565b6122e991613867565b60a08701526122f960208661377f565b9450876fffffffffffffffffffffffffffffffff86168861231b88601061377f565b6fffffffffffffffffffffffffffffffff169261233a939291906133f1565b61234391613809565b60801c60e087015261235660108661377f565b9450876fffffffffffffffffffffffffffffffff86168861237888601461377f565b6fffffffffffffffffffffffffffffffff1692612397939291906133f1565b6123a0916137ab565b60601c86526123b060148661377f565b5f61010088015294508015612474576123ca85601061377f565b6fffffffffffffffffffffffffffffffff16871015612415576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff86168861243588601061377f565b6fffffffffffffffffffffffffffffffff1692612454939291906133f1565b61245d91613809565b60801c61010087015261247160108661377f565b94505b5f61012087015282156125365761248c85601061377f565b6fffffffffffffffffffffffffffffffff168710156124d7576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff8616886124f788601061377f565b6fffffffffffffffffffffffffffffffff1692612516939291906133f1565b61251f91613809565b60801c61012087015261253360108661377f565b94505b5f61014087015281156125f85761254e85601461377f565b6fffffffffffffffffffffffffffffffff16871015612599576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff8616886125b988601461377f565b6fffffffffffffffffffffffffffffffff16926125d8939291906133f1565b6125e1916137ab565b60601c6101408701526125f560148661377f565b94505b612616876fffffffffffffffffffffffffffffffff8716818b6133f1565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050505060c0870152608086015173ffffffffffffffffffffffffffffffffffffffff1661269f576040517f33c1dac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560a001515f036126dc576040517f5b33c69600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818015612702575061014086015173ffffffffffffffffffffffffffffffffffffffff16155b15612739576040517f497189f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560c001515160401415801561275557508560c0015151604114155b1561278c576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505092915050565b60605f6127a386612a6e565b6127ac87612a9d565b6127b69190613220565b90505f8460e001516fffffffffffffffffffffffffffffffff166127d988612aba565b6127e79060a08a0135613220565b6127f19190613220565b604080516101c081019091529091508061280e60208a018a612c8b565b73ffffffffffffffffffffffffffffffffffffffff168152602001866080015173ffffffffffffffffffffffffffffffffffffffff168152602001865f015173ffffffffffffffffffffffffffffffffffffffff1681526020018660a00151815260200186606001516fffffffffffffffffffffffffffffffff1681526020018781526020015f81526020015f815260200185815260200186610100015181526020018381526020018281526020018661012001516fffffffffffffffffffffffffffffffff16815260200186610140015173ffffffffffffffffffffffffffffffffffffffff1681525060405160200161290991906139d0565b60405160208183030381529060405292505050949350505050565b5f5f5f835160410361295b576020840151604085015160608601515f1a61294d88828585612ac9565b955095509550505050612966565b505081515f91506002905b9250925092565b5f826003811115612980576129806139df565b03612989575050565b600182600381111561299d5761299d6139df565b036129d4576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028260038111156129e8576129e86139df565b03612a21576040517ffce698f7000000000000000000000000000000000000000000000000000000008152610678908290600401612d18565b6003826003811115612a3557612a356139df565b03611a1d57806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016106789190612d18565b5f612a7c60e0830183613290565b612a8b916034916024916133f1565b612a9491613809565b60801c92915050565b5f6fffffffffffffffffffffffffffffffff6080830135166105ab565b5f6105ab826080013560801c90565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612b0257505f91506003905082612ba4565b5f6001888888886040515f8152602001604052604051612b259493929190613a0c565b6020604051602081039080840390855afa158015612b45573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612b9b57505f925060019150829050612ba4565b92505f91508190505b9450945094915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146112ad575f5ffd5b80356105ab81612bae565b5f60208284031215612bfa57612bfa5f5ffd5b5f612c058484612bdc565b949350505050565b8015155b82525050565b602081016105ab8284612c0d565b63ffffffff8116612bd2565b80356105ab81612c25565b5f60208284031215612c4f57612c4f5f5ffd5b5f612c058484612c31565b5f73ffffffffffffffffffffffffffffffffffffffff82166105ab565b612bd281612c5a565b80356105ab81612c77565b5f60208284031215612c9e57612c9e5f5ffd5b5f612c058484612c80565b80612bd2565b80356105ab81612ca9565b5f5f60408385031215612cce57612cce5f5ffd5b5f612cd98585612c80565b9250506020612cea85828601612caf565b9150509250929050565b5f60208284031215612d0757612d075f5ffd5b5f612c058484612caf565b80612c11565b602081016105ab8284612d12565b5f5f60408385031215612d3a57612d3a5f5ffd5b5f612d458585612caf565b9250506020612cea85828601612c80565b5f6101208284031215612d6a57612d6a5f5ffd5b50919050565b5f5f5f60608486031215612d8557612d855f5ffd5b833567ffffffffffffffff811115612d9e57612d9e5f5ffd5b612daa86828701612d56565b9350506020612dbb86828701612caf565b9250506040612dcc86828701612caf565b9150509250925092565b8281835e505f910152565b5f612dea825190565b808452602084019350612e01818560208601612dd6565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920192915050565b60408082528101612e418185612de1565b9050611e766020830184612d12565b5f5f5f5f60808587031215612e6657612e665f5ffd5b5f612e718787612caf565b9450506020612e8287828801612caf565b9350506040612e9387828801612caf565b9250506060612ea487828801612caf565b91505092959194509250565b60ff8116612bd2565b80356105ab81612eb0565b5f5f60408385031215612ed857612ed85f5ffd5b5f612ee38585612eb9565b925050602083013567ffffffffffffffff811115612f0257612f025f5ffd5b612cea85828601612d56565b600381106112ad575f5ffd5b80356105ab81612f0e565b5f5f83601f840112612f3857612f385f5ffd5b50813567ffffffffffffffff811115612f5257612f525f5ffd5b602083019150836001820283011115612f6c57612f6c5f5ffd5b9250929050565b5f5f5f5f5f60808688031215612f8a57612f8a5f5ffd5b5f612f958888612f1a565b955050602086013567ffffffffffffffff811115612fb457612fb45f5ffd5b612fc088828901612f25565b94509450506040612fd388828901612caf565b9250506060612fe488828901612caf565b9150509295509295909350565b5f5f83601f840112613004576130045f5ffd5b50813567ffffffffffffffff81111561301e5761301e5f5ffd5b602083019150836020820283011115612f6c57612f6c5f5ffd5b801515612bd2565b80356105ab81613038565b5f5f5f60408486031215613060576130605f5ffd5b833567ffffffffffffffff811115613079576130795f5ffd5b61308586828701612ff1565b93509350506020612dcc86828701613040565b5f6105ab73ffffffffffffffffffffffffffffffffffffffff83166130bb565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b5f6105ab82613098565b5f6105ab826130d4565b612c11816130de565b602081016105ab82846130e8565b6fffffffffffffffffffffffffffffffff8116612bd2565b80356105ab816130ff565b5f5f5f5f5f60a08688031215613139576131395f5ffd5b5f6131448888612caf565b955050602061315588828901612caf565b945050604061316688828901613117565b935050606061317788828901612caf565b9250506080612fe488828901612caf565b612c1181612c5a565b6040810161319f8285613188565b611e766020830184612d12565b63ffffffff8116612c11565b602081016105ab82846131ac565b602081016105ab8284613188565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b818102808215838204851417613219576132196131d4565b5092915050565b808201808211156105ab576105ab6131d4565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f8261326e5761326e613233565b500490565b60ff9182169190811690828201908111156105ab576105ab6131d4565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1368590030181126132c7576132c75f5ffd5b80840192508235915067ffffffffffffffff8211156132e7576132e75f5ffd5b602083019250600182023603831315613301576133015f5ffd5b509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b604081016133448285613188565b611e766020830184612c0d565b80516105ab81612ca9565b5f6020828403121561336f5761336f5f5ffd5b5f612c058484613351565b818103818111156105ab576105ab6131d4565b602080825281016105ab81601581527f53656e646572206e6f7420456e747279506f696e740000000000000000000000602082015260400190565b82818337505f910152565b5f6133df8385846133c8565b50500190565b5f612c058284866133d3565b5f5f85851115613402576134025f5ffd5b83861115613411576134115f5ffd5b5050820193919092039150565b610100810161342d828b613188565b61343a602083018a612d12565b6134476040830189612d12565b6134546060830188612d12565b6134616080830187612d12565b61346e60a0830186612d12565b61347b60c0830185612d12565b61129660e0830184612d12565b6040810161319f8285612d12565b60ff8116612c11565b608081016134ad8287613496565b6134ba6020830186613188565b6134c76040830185612d12565b6109ff6060830184612d12565b5f6105ab6130b88381565b612c11816134d4565b608081016134f68287613496565b6135036020830186613188565b61351060408301856134df565b6109ff60608301846134df565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff8211171561358e5761358e61351d565b6040525050565b5f61359f60405190565b90506135ab828261354a565b919050565b5f6101c082840312156135c4576135c45f5ffd5b6135cf6101c0613595565b90505f6135dc8484612c80565b82525060206135ed84848301612c80565b602083015250604061360184828501612c80565b604083015250606061361584828501612caf565b606083015250608061362984828501613117565b60808301525060a061363d84828501612caf565b60a08301525060c061365184828501612caf565b60c08301525060e061366584828501612caf565b60e08301525061010061367a84828501612caf565b6101008301525061012061369084828501612caf565b610120830152506101406136a684828501612caf565b610140830152506101606136bc84828501612caf565b610160830152506101806136d284828501613117565b610180830152506101a06136e884828501612c80565b6101a08301525092915050565b5f6101c08284031215613709576137095f5ffd5b5f612c0584846135b0565b80357fffffffffffff00000000000000000000000000000000000000000000000000001682826006821015613777576137727fffffffffffff0000000000000000000000000000000000000000000000000000836006036008021b90565b831692505b505092915050565b6fffffffffffffffffffffffffffffffff9182169190811690828201908111156105ab576105ab6131d4565b80357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001682826014821015613777576137727fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008021b90565b80357fffffffffffffffffffffffffffffffff000000000000000000000000000000001682826010821015613777576137727fffffffffffffffffffffffffffffffff00000000000000000000000000000000836010036008021b90565b803582826020821015613777576137727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008021b90565b6fffffffffffffffffffffffffffffffff8116612c11565b80516101c08301906138cd8482613188565b5060208201516138e06020850182613188565b5060408201516138f36040850182613188565b5060608201516139066060850182612d12565b50608082015161391960808501826138a3565b5060a082015161392c60a0850182612d12565b5060c082015161393f60c0850182612d12565b5060e082015161395260e0850182612d12565b50610100820151613967610100850182612d12565b5061012082015161397c610120850182612d12565b50610140820151613991610140850182612d12565b506101608201516139a6610160850182612d12565b506101808201516139bb6101808501826138a3565b506101a08201516109466101a0850182613188565b6101c081016105ab82846138bb565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60808101613a1a8287612d12565b6134ba602083018661349656fea2646970667358221220e9bb864827d7197851e3a4f9aea76d4e9c2f5f93437146403c407aeb1a9aaf2564736f6c634300081c0033", + "0x610180604052600060a052600160c081905260e052607561010052600c6101205260346101405260146101605234801561003857600080fd5b50604051613f87380380613f87833981016040819052610057916102fe565b6001600160a01b0384166080528383838380848484610077600083610112565b506100a27f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0882610112565b5050505060005b81518110156101035760018060008484815181106100c9576100c961037c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016100a9565b50505050505050505050610392565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166101b4576000838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561016c3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101b8565b5060005b92915050565b60006001600160a01b0382166101b8565b6101d8816101be565b81146101e357600080fd5b50565b80516101b8816101cf565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b038211171561022c5761022c6101f1565b6040525050565b600061023e60405190565b905061024a8282610207565b919050565b60006001600160401b03821115610268576102686101f1565b5060209081020190565b60006102856102808461024f565b610233565b838152905060208082019084028301858111156102a4576102a4600080fd5b835b818110156102c857806102b988826101e6565b845250602092830192016102a6565b5050509392505050565b600082601f8301126102e6576102e6600080fd5b81516102f6848260208601610272565b949350505050565b6000806000806080858703121561031757610317600080fd5b600061032387876101e6565b9450506020610334878288016101e6565b9350506040610345878288016101e6565b92505060608501516001600160401b0381111561036457610364600080fd5b610370878288016102d2565b91505092959194509250565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e05161010051610120516101405161016051613b0e6104796000396000505060008181610b520152818161154a015261176b015260008181610a780152611ef4015260008181610ad301526120b4015260008181610a9901528181610af40152610b300152600081816115cf015281816116a501526119cd015260008181610a44015281816116000152818161166601528181611b5e0152611c73015260008181610429015281816106e6015281816108e901528181610e9801528181610f5a01528181610fe9015281816110a101526114d70152613b0e6000f3fe6080604052600436106101965760003560e01c80637c627b21116100e1578063c23a5cea1161008a578063d547741f11610064578063d547741f146104aa578063eb12d61e146104ca578063ec87621c146104ea578063feaf513e1461051e57600080fd5b8063c23a5cea1461046d578063c399ec881461048d578063d0e30db0146104a257600080fd5b8063a217fddf116100bb578063a217fddf14610402578063b0d691fe14610417578063bb9fe6bf1461045857600080fd5b80637c627b21146103715780637dd345cb1461039157806391d14854146103b157600080fd5b806336568abe116101435780635525dcfb1161011d5780635525dcfb1461030157806363b241aa14610321578063736c0d5b1461034157600080fd5b806336568abe146102835780634031c20e146102a357806352b7512c146102d357600080fd5b8063205c287811610174578063205c287814610206578063248a9ca3146102265780632f2ff15d1461026357600080fd5b806301ffc9a71461019b5780630396cb60146101d15780630e316ab7146101e6575b600080fd5b3480156101a757600080fd5b506101bb6101b6366004612c22565b61053e565b6040516101c89190612c55565b60405180910390f35b6101e46101df366004612c7a565b6105d7565b005b3480156101f257600080fd5b506101e4610201366004612ccd565b610752565b34801561021257600080fd5b506101e4610221366004612cff565b6108a1565b34801561023257600080fd5b50610256610241366004612d3c565b60009081526020819052604090206001015490565b6040516101c89190612d63565b34801561026f57600080fd5b506101e461027e366004612d71565b610957565b34801561028f57600080fd5b506101e461029e366004612d71565b610982565b3480156102af57600080fd5b506101bb6102be366004612ccd565b60026020526000908152604090205460ff1681565b3480156102df57600080fd5b506102f36102ee366004612dc0565b6109e0565b6040516101c8929190612e9e565b34801561030d57600080fd5b5061025661031c366004612ebe565b610a03565b34801561032d57600080fd5b5061025661033c366004612f36565b610a40565b34801561034d57600080fd5b506101bb61035c366004612ccd565b60016020526000908152604090205460ff1681565b34801561037d57600080fd5b506101e461038c366004612fee565b610bf7565b34801561039d57600080fd5b506101e46103ac3660046130d0565b610c13565b3480156103bd57600080fd5b506101bb6103cc366004612d71565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561040e57600080fd5b50610256600081565b34801561042357600080fd5b5061044b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101c8919061317d565b34801561046457600080fd5b506101e4610dcd565b34801561047957600080fd5b506101e4610488366004612ccd565b610f12565b34801561049957600080fd5b50610256610fa9565b6101e4611064565b3480156104b657600080fd5b506101e46104c5366004612d71565b611105565b3480156104d657600080fd5b506101e46104e5366004612ccd565b61112a565b3480156104f657600080fd5b506102567f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b34801561052a57600080fd5b506102566105393660046131ae565b611273565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806105d157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1615801561064557503360009081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b156106a957337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016106a0929190613222565b60405180910390fd5b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630396cb6090349061071d908590600401613249565b6000604051808303818588803b15801561073657600080fd5b505af115801561074a573d6000803e3d6000fd5b505050505050565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156107c057503360009081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b1561081b57337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016106a0929190613222565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b90610896908390613257565b60405180910390a150565b60006108ac816112fb565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063205c2878906109209086908690600401613222565b600060405180830381600087803b15801561093a57600080fd5b505af115801561094e573d6000803e3d6000fd5b50505050505050565b600082815260208190526040902060010154610972816112fb565b61097c8383611308565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109d1576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109db8282611404565b505050565b606060006109ec6114bf565b6109f7858585611530565b91509150935093915050565b6000670de0b6b3a764000082610a198587613294565b610a2390886132b3565b610a2d9190613294565b610a3791906132f5565b95945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000060ff168360ff1603610acc57610ac582610abd7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613309565b60ff166116f4565b90506105d1565b6000610b187f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000613309565b90506000610b2960e0850185613326565b610b7660ff7f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000006132b3565b818110610b8557610b856133a3565b919091013560f81c9150506001811615156002821615156004831615801590610bb657610bb3601086613309565b94505b8215610bca57610bc7601086613309565b94505b8115610bde57610bdb601486613309565b94505b610beb878660ff166116f4565b98975050505050505050565b610bff6114bf565b610c0c8585858585611810565b5050505050565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610c8157503360009081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610cdc57337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016106a0929190613222565b60005b8281101561097c578160026000868685818110610cfe57610cfe6133a3565b9050602002016020810190610d139190612ccd565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790557f8ff8c5211f68ef53b4bdd15ab2ea6d87be8a3dbf58865bd8325c984057e4fcb4848483818110610d9957610d996133a3565b9050602002016020810190610dae9190612ccd565b83604051610dbd9291906133d2565b60405180910390a1600101610cdf565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610e3b57503360009081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610e9657337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016106a0929190613222565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610efe57600080fd5b505af115801561097c573d6000803e3d6000fd5b6000610f1d816112fb565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90610f8f908590600401613257565b600060405180830381600087803b15801561073657600080fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a082319061101e903090600401613257565b602060405180830381865afa15801561103b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105f91906133f8565b905090565b6040517fb760faf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b760faf99034906110d8903090600401613257565b6000604051808303818588803b1580156110f157600080fd5b505af1158015610c0c573d6000803e3d6000fd5b600082815260208190526040902060010154611120816112fb565b61097c8383611404565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1615801561119857503360009081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b156111f357337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016106a0929190613222565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602081905260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055517f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f2490610896908390613257565b600080806fffffffffffffffffffffffffffffffff8616611294888a6132f5565b61129e91906132b3565b9050848111156112b5576112b28582613419565b91505b6000828511156112e4576064600a6112cd8588613419565b6112d79190613294565b6112e191906132f5565b90505b6112ee8882613294565b9998505050505050505050565b6113058133611a1c565b50565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166113fc5760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905561139a3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016105d1565b5060006105d1565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156113fc5760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016105d1565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461152e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106a09061342c565b565b606060008080368161156e61154860e08b018b613326565b7f0000000000000000000000000000000000000000000000000000000000000000611a8b565b93509350935093508215801561159457503260009081526002602052604090205460ff16155b156115cd57326040517f55d3ab460000000000000000000000000000000000000000000000000000000081526004016106a09190613257565b7f000000000000000000000000000000000000000000000000000000000000000060ff168460ff161415801561162957507f000000000000000000000000000000000000000000000000000000000000000060ff168460ff1614155b15611660576040517f654a4f2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606060007f000000000000000000000000000000000000000000000000000000000000000060ff168660ff16036116a35761169d8b85858d611b38565b90925090505b7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff16036116e4576116de868c86868e8e611cd1565b90925090505b909a909950975050505050505050565b60008083356020850135608086013560a087013560c088013561171a60408a018a613326565b604051611728929190613486565b60405190819003902061173e60608b018b613326565b60405161174c929190613486565b60405190819003902061176260e08c018c613326565b60009061178f8d7f00000000000000000000000000000000000000000000000000000000000000006132b3565b9261179c93929190613493565b6040516117aa929190613486565b6040519081900381206117c698979695949392916020016134c3565b60405160208183030381529060405280519060200120905080466040516020016117f192919061352d565b6040516020818303038152906040528051906020012091505092915050565b600061181c8585611e0a565b9050600061183b84848460800151856101600151866101400151611273565b9050600061184982866132b3565b905060008361018001516fffffffffffffffffffffffffffffffff1661188b8386608001516fffffffffffffffffffffffffffffffff16888860600151610a03565b61189591906132b3565b9050600084610120015182116118bb57818561012001516118b69190613419565b6118cb565b6101208501516118cb9083613419565b905061190d856020015186610120015184116118eb5786604001516118ee565b86515b8761012001518511611901578751611907565b87604001515b84611e8e565b6000670de0b6b3a7640000866060015187610100015161192d9190613294565b61193791906132f5565b6101a087015190915073ffffffffffffffffffffffffffffffffffffffff161580159061196357508281115b1561198a57602086015186516101a088015161198a9291906119858786613419565b611e8e565b856000015173ffffffffffffffffffffffffffffffffffffffff168660a001517f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000008960200151878b60600151604051611a079493929190613544565b60405180910390a35050505050505050505050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611a875780826040517fe2517d3f0000000000000000000000000000000000000000000000000000000081526004016106a0929190613222565b5050565b6000803681611a9b8560016132b3565b861015611ad4576040517fcc32193e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000878787818110611ae857611ae86133a3565b919091013560f881901c925060018084161515925060f99190911c9036906000908c908c90611b18908d906132b3565b611b23928290613493565b939d949c509a50919850919650505050505050565b60606000806000366000611b4c8989611eeb565b93509350935093506000611bb6611b837f00000000000000000000000000000000000000000000000000000000000000008d610a40565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b90506000611bfa8285858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611ff692505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205491925060ff90911690611c3582158989612020565b90508d3573ffffffffffffffffffffffffffffffffffffffff168b7f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000006000806000604051611ca7949392919061358e565b60405180910390a36040805160208101909152600081529e909d509b505050505050505050505050565b6060600080611ce08787612058565b90506000611cf1611b838b8b610a40565b90506000611d03828460c00151611ff6565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604080832054918701519087015193945060ff90911692611d4991841591612020565b90506000611d598d8b888c6127bc565b905082611d6e5796509450611dff9350505050565b6000611d818a6000808a60a00151610a03565b9050808761010001511115611dc2576040517f79183c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010087015115611df557611df587608001518f6000016020810190611de89190612ccd565b89516101008b0151611e8e565b5096509450505050505b965096945050505050565b604080516101c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a0810191909152611e87828401846137a1565b9392505050565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c52602060006064601c6000895af13d156001600051141716611edd57637939f4246000526004601cfd5b600060605260405250505050565b600080368160ff7f000000000000000000000000000000000000000000000000000000000000000016851015611f4d576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611f5c600682888a613493565b611f65916137c3565b60d01c90506000611f7a600c6006898b613493565b611f83916137c3565b60d01c9050366000611f9889600c818d613493565b909250905060408114801590611faf575060418114155b15611fe6576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9299919850965090945092505050565b600080600080612006868661294e565b925092509250612016828261299b565b5090949350505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b8561204857600061204b565b60015b60ff161717949350505050565b604080516101608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e081018290526101008101829052610120810182905261014081019190915260ff7f00000000000000000000000000000000000000000000000000000000000000001682101561210d576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008084848281612120576121206133a3565b919091013560f81c9150506001808216151590600283161515906004841615159061214b908661382e565b9450876fffffffffffffffffffffffffffffffff86168861216d88600661382e565b6fffffffffffffffffffffffffffffffff169261218c93929190613493565b612195916137c3565b60d01c60208701526121a860068661382e565b9450876fffffffffffffffffffffffffffffffff8616886121ca88600661382e565b6fffffffffffffffffffffffffffffffff16926121e993929190613493565b6121f2916137c3565b60d01c604087015261220560068661382e565b9450876fffffffffffffffffffffffffffffffff86168861222788601461382e565b6fffffffffffffffffffffffffffffffff169261224693929190613493565b61224f9161385a565b60601c608087015261226260148661382e565b9450876fffffffffffffffffffffffffffffffff86168861228488601061382e565b6fffffffffffffffffffffffffffffffff16926122a393929190613493565b6122ac916138b8565b60801c60608701526122bf60108661382e565b9450876fffffffffffffffffffffffffffffffff8616886122e188602061382e565b6fffffffffffffffffffffffffffffffff169261230093929190613493565b61230991613916565b60a087015261231960208661382e565b9450876fffffffffffffffffffffffffffffffff86168861233b88601061382e565b6fffffffffffffffffffffffffffffffff169261235a93929190613493565b612363916138b8565b60801c60e087015261237660108661382e565b9450876fffffffffffffffffffffffffffffffff86168861239888601461382e565b6fffffffffffffffffffffffffffffffff16926123b793929190613493565b6123c09161385a565b60601c86526123d060148661382e565b600061010088015294508015612495576123eb85601061382e565b6fffffffffffffffffffffffffffffffff16871015612436576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff86168861245688601061382e565b6fffffffffffffffffffffffffffffffff169261247593929190613493565b61247e916138b8565b60801c61010087015261249260108661382e565b94505b60006101208701528215612558576124ae85601061382e565b6fffffffffffffffffffffffffffffffff168710156124f9576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff86168861251988601061382e565b6fffffffffffffffffffffffffffffffff169261253893929190613493565b612541916138b8565b60801c61012087015261255560108661382e565b94505b6000610140870152811561261b5761257185601461382e565b6fffffffffffffffffffffffffffffffff168710156125bc576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff8616886125dc88601461382e565b6fffffffffffffffffffffffffffffffff16926125fb93929190613493565b6126049161385a565b60601c61014087015261261860148661382e565b94505b612639876fffffffffffffffffffffffffffffffff8716818b613493565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c0870152608086015173ffffffffffffffffffffffffffffffffffffffff166126c3576040517f33c1dac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560a00151600003612701576040517f5b33c69600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818015612727575061014086015173ffffffffffffffffffffffffffffffffffffffff16155b1561275e576040517f497189f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560c001515160401415801561277a57508560c0015151604114155b156127b1576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505092915050565b606060006127c986612a9d565b6127d287612acd565b6127dc91906132b3565b905060008460e001516fffffffffffffffffffffffffffffffff1661280088612aeb565b61280e9060a08a01356132b3565b61281891906132b3565b604080516101c081019091529091508061283560208a018a612ccd565b73ffffffffffffffffffffffffffffffffffffffff168152602001866080015173ffffffffffffffffffffffffffffffffffffffff168152602001866000015173ffffffffffffffffffffffffffffffffffffffff1681526020018660a00151815260200186606001516fffffffffffffffffffffffffffffffff168152602001878152602001600081526020016000815260200185815260200186610100015181526020018381526020018281526020018661012001516fffffffffffffffffffffffffffffffff16815260200186610140015173ffffffffffffffffffffffffffffffffffffffff168152506040516020016129339190613a7f565b60405160208183030381529060405292505050949350505050565b600080600083516041036129885760208401516040850151606086015160001a61297a88828585612afb565b955095509550505050612994565b50508151600091506002905b9250925092565b60008260038111156129af576129af613a8e565b036129b8575050565b60018260038111156129cc576129cc613a8e565b03612a03576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115612a1757612a17613a8e565b03612a50576040517ffce698f70000000000000000000000000000000000000000000000000000000081526106a0908290600401612d63565b6003826003811115612a6457612a64613a8e565b03611a8757806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016106a09190612d63565b6000612aac60e0830183613326565b612abb91603491602491613493565b612ac4916138b8565b60801c92915050565b60006fffffffffffffffffffffffffffffffff6080830135166105d1565b60006105d1826080013560801c90565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612b365750600091506003905082612bde565b600060018888888860405160008152602001604052604051612b5b9493929190613abd565b6020604051602081039080840390855afa158015612b7d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612bd457506000925060019150829050612bde565b9250600091508190505b9450945094915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461130557600080fd5b80356105d181612be8565b600060208284031215612c3757612c37600080fd5b6000612c438484612c17565b949350505050565b8015155b82525050565b602081016105d18284612c4b565b63ffffffff8116612c0c565b80356105d181612c63565b600060208284031215612c8f57612c8f600080fd5b6000612c438484612c6f565b600073ffffffffffffffffffffffffffffffffffffffff82166105d1565b612c0c81612c9b565b80356105d181612cb9565b600060208284031215612ce257612ce2600080fd5b6000612c438484612cc2565b80612c0c565b80356105d181612cee565b60008060408385031215612d1557612d15600080fd5b6000612d218585612cc2565b9250506020612d3285828601612cf4565b9150509250929050565b600060208284031215612d5157612d51600080fd5b6000612c438484612cf4565b80612c4f565b602081016105d18284612d5d565b60008060408385031215612d8757612d87600080fd5b6000612d938585612cf4565b9250506020612d3285828601612cc2565b60006101208284031215612dba57612dba600080fd5b50919050565b600080600060608486031215612dd857612dd8600080fd5b833567ffffffffffffffff811115612df257612df2600080fd5b612dfe86828701612da4565b9350506020612e0f86828701612cf4565b9250506040612e2086828701612cf4565b9150509250925092565b60005b83811015612e45578181015183820152602001612e2d565b50506000910152565b6000612e58825190565b808452602084019350612e6f818560208601612e2a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920192915050565b60408082528101612eaf8185612e4e565b9050611e876020830184612d5d565b60008060008060808587031215612ed757612ed7600080fd5b6000612ee38787612cf4565b9450506020612ef487828801612cf4565b9350506040612f0587828801612cf4565b9250506060612f1687828801612cf4565b91505092959194509250565b60ff8116612c0c565b80356105d181612f22565b60008060408385031215612f4c57612f4c600080fd5b6000612f588585612f2b565b925050602083013567ffffffffffffffff811115612f7857612f78600080fd5b612d3285828601612da4565b6003811061130557600080fd5b80356105d181612f84565b60008083601f840112612fb157612fb1600080fd5b50813567ffffffffffffffff811115612fcc57612fcc600080fd5b602083019150836001820283011115612fe757612fe7600080fd5b9250929050565b60008060008060006080868803121561300957613009600080fd5b60006130158888612f91565b955050602086013567ffffffffffffffff81111561303557613035600080fd5b61304188828901612f9c565b9450945050604061305488828901612cf4565b925050606061306588828901612cf4565b9150509295509295909350565b60008083601f84011261308757613087600080fd5b50813567ffffffffffffffff8111156130a2576130a2600080fd5b602083019150836020820283011115612fe757612fe7600080fd5b801515612c0c565b80356105d1816130bd565b6000806000604084860312156130e8576130e8600080fd5b833567ffffffffffffffff81111561310257613102600080fd5b61310e86828701613072565b93509350506020612e20868287016130c5565b60006105d173ffffffffffffffffffffffffffffffffffffffff8316613145565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b60006105d182613121565b60006105d18261315e565b612c4f81613169565b602081016105d18284613174565b6fffffffffffffffffffffffffffffffff8116612c0c565b80356105d18161318b565b600080600080600060a086880312156131c9576131c9600080fd5b60006131d58888612cf4565b95505060206131e688828901612cf4565b94505060406131f7888289016131a3565b935050606061320888828901612cf4565b925050608061306588828901612cf4565b612c4f81612c9b565b604081016132308285613219565b611e876020830184612d5d565b63ffffffff8116612c4f565b602081016105d1828461323d565b602081016105d18284613219565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181028082158382048514176132ac576132ac613265565b5092915050565b808201808211156105d1576105d1613265565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613304576133046132c6565b500490565b60ff9182169190811690828201908111156105d1576105d1613265565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe13685900301811261335f5761335f600080fd5b80840192508235915067ffffffffffffffff82111561338057613380600080fd5b60208301925060018202360383131561339b5761339b600080fd5b509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b604081016133e08285613219565b611e876020830184612c4b565b80516105d181612cee565b60006020828403121561340d5761340d600080fd5b6000612c4384846133ed565b818103818111156105d1576105d1613265565b602080825281016105d181601581527f53656e646572206e6f7420456e747279506f696e740000000000000000000000602082015260400190565b82818337506000910152565b6000613480838584613467565b50500190565b6000612c43828486613473565b600080858511156134a6576134a6600080fd5b838611156134b6576134b6600080fd5b5050820193919092039150565b61010081016134d2828b613219565b6134df602083018a612d5d565b6134ec6040830189612d5d565b6134f96060830188612d5d565b6135066080830187612d5d565b61351360a0830186612d5d565b61352060c0830185612d5d565b6112ee60e0830184612d5d565b604081016132308285612d5d565b60ff8116612c4f565b60808101613552828761353b565b61355f6020830186613219565b61356c6040830185612d5d565b610a376060830184612d5d565b60006105d16131428381565b612c4f81613579565b6080810161359c828761353b565b6135a96020830186613219565b6135b66040830185613585565b610a376060830184613585565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff82111715613636576136366135c3565b6040525050565b600061364860405190565b905061365482826135f2565b919050565b60006101c0828403121561366f5761366f600080fd5b61367a6101c061363d565b905060006136888484612cc2565b825250602061369984848301612cc2565b60208301525060406136ad84828501612cc2565b60408301525060606136c184828501612cf4565b60608301525060806136d5848285016131a3565b60808301525060a06136e984828501612cf4565b60a08301525060c06136fd84828501612cf4565b60c08301525060e061371184828501612cf4565b60e08301525061010061372684828501612cf4565b6101008301525061012061373c84828501612cf4565b6101208301525061014061375284828501612cf4565b6101408301525061016061376884828501612cf4565b6101608301525061018061377e848285016131a3565b610180830152506101a061379484828501612cc2565b6101a08301525092915050565b60006101c082840312156137b7576137b7600080fd5b6000612c438484613659565b80357fffffffffffff00000000000000000000000000000000000000000000000000001682826006821015613826576138217fffffffffffff0000000000000000000000000000000000000000000000000000836006036008021b90565b831692505b505092915050565b6fffffffffffffffffffffffffffffffff9182169190811690828201908111156105d1576105d1613265565b80357fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001682826014821015613826576138217fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008021b90565b80357fffffffffffffffffffffffffffffffff000000000000000000000000000000001682826010821015613826576138217fffffffffffffffffffffffffffffffff00000000000000000000000000000000836010036008021b90565b803582826020821015613826576138217fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008021b90565b6fffffffffffffffffffffffffffffffff8116612c4f565b80516101c083019061397c8482613219565b50602082015161398f6020850182613219565b5060408201516139a26040850182613219565b5060608201516139b56060850182612d5d565b5060808201516139c86080850182613952565b5060a08201516139db60a0850182612d5d565b5060c08201516139ee60c0850182612d5d565b5060e0820151613a0160e0850182612d5d565b50610100820151613a16610100850182612d5d565b50610120820151613a2b610120850182612d5d565b50610140820151613a40610140850182612d5d565b50610160820151613a55610160850182612d5d565b50610180820151613a6a610180850182613952565b506101a082015161097c6101a0850182613219565b6101c081016105d1828461396a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60808101613acb8287612d5d565b61355f602083018661353b56fea2646970667358221220e0ac4cfab19cb7c97427e7c850ed5c509238b8485841fe4834625b6cb3b2d04c64736f6c634300081a0033", pad(entryPoint07Address, { size: 32 }), pad(owner, { size: 32 }), pad(owner, { size: 32 }), @@ -48,7 +48,7 @@ export const getSingletonPaymaster07InitCode = (owner: Address): Hex => export const getSingletonPaymaster06InitCode = (owner: Address): Hex => concat([ - "0x6101606040525f60a052600160c081905260e052607561010052600c61012052601461014052348015610030575f5ffd5b50604051613ec5380380613ec583398101604081905261004f916102e6565b6001600160a01b038416608052838383838084848461006e5f83610107565b506100997f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0882610107565b505f925050505b81518110156100f8576001805f8484815181106100bf576100bf61035f565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790556001016100a0565b50505050505050505050610373565b5f828152602081815260408083206001600160a01b038516845290915281205460ff166101a7575f838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561015f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101aa565b505f5b92915050565b5f6001600160a01b0382166101aa565b6101c9816101b0565b81146101d3575f5ffd5b50565b80516101aa816101c0565b634e487b7160e01b5f52604160045260245ffd5b601f19601f83011681018181106001600160401b038211171561021a5761021a6101e1565b6040525050565b5f61022b60405190565b905061023782826101f5565b919050565b5f6001600160401b03821115610254576102546101e1565b5060209081020190565b5f61027061026b8461023c565b610221565b8381529050602080820190840283018581111561028e5761028e5f5ffd5b835b818110156102b257806102a388826101d6565b84525060209283019201610290565b5050509392505050565b5f82601f8301126102ce576102ce5f5ffd5b81516102de84826020860161025e565b949350505050565b5f5f5f5f608085870312156102fc576102fc5f5ffd5b5f61030787876101d6565b9450506020610318878288016101d6565b9350506040610329878288016101d6565b92505060608501516001600160401b03811115610347576103475f5ffd5b610353878288016102bc565b91505092959194509250565b634e487b7160e01b5f52603260045260245ffd5b60805160a05160c05160e051610100516101205161014051613a756104505f395f8181610fe6015281816116d9015261179a01525f8181610f2e0152611f0801525f8181610f8801526120c001525f8181610f0d01528181610f670152610fc401525f81816115fd0152818161181e015281816118f30152611db401525f8181610ed90152818161184f015281816118b401528181611c240152611d4001525f81816103b4015281816106940152818161088f01528181610c4e01528181610d0a01528181610d9501528181610e4b01526113ca0152613a755ff3fe608060405260043610610183575f3560e01c8063a217fddf116100d1578063d0e30db01161007c578063eb12d61e11610057578063eb12d61e14610470578063ec87621c1461048f578063f465c77e146104c2575f5ffd5b8063d0e30db01461042a578063d547741f14610432578063dd16f84714610451575f5ffd5b8063bb9fe6bf116100ac578063bb9fe6bf146103e3578063c23a5cea146103f7578063c399ec8814610416575f5ffd5b8063a217fddf14610371578063a9a2340914610384578063b0d691fe146103a3575f5ffd5b806336568abe11610131578063736c0d5b1161010c578063736c0d5b146102d55780637dd345cb1461030357806391d1485414610322575f5ffd5b806336568abe146102695780634031c20e146102885780635525dcfb146102b6575f5ffd5b8063205c287811610161578063205c2878146101f0578063248a9ca31461020f5780632f2ff15d1461024a575f5ffd5b806301ffc9a7146101875780630396cb60146101bc5780630e316ab7146101d1575b5f5ffd5b348015610192575f5ffd5b506101a66101a1366004612bc8565b6104ef565b6040516101b39190612bf8565b60405180910390f35b6101cf6101ca366004612c1d565b610587565b005b3480156101dc575f5ffd5b506101cf6101eb366004612c6c565b6106fc565b3480156101fb575f5ffd5b506101cf61020a366004612c9b565b610848565b34801561021a575f5ffd5b5061023d610229366004612cd5565b5f9081526020819052604090206001015490565b6040516101b39190612cf9565b348015610255575f5ffd5b506101cf610264366004612d07565b6108f8565b348015610274575f5ffd5b506101cf610283366004612d07565b610922565b348015610293575f5ffd5b506101a66102a2366004612c6c565b60026020525f908152604090205460ff1681565b3480156102c1575f5ffd5b5061023d6102d0366004612d37565b610980565b3480156102e0575f5ffd5b506101a66102ef366004612c6c565b60016020525f908152604090205460ff1681565b34801561030e575f5ffd5b506101cf61031d366004612df8565b6109bc565b34801561032d575f5ffd5b506101a661033c366004612d07565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561037c575f5ffd5b5061023d5f81565b34801561038f575f5ffd5b506101cf61039e366004612ead565b610b71565b3480156103ae575f5ffd5b506103d67f000000000000000000000000000000000000000000000000000000000000000081565b6040516101b39190612f65565b3480156103ee575f5ffd5b506101cf610b85565b348015610402575f5ffd5b506101cf610411366004612c6c565b610cc3565b348015610421575f5ffd5b5061023d610d56565b6101cf610e0e565b34801561043d575f5ffd5b506101cf61044c366004612d07565b610eb2565b34801561045c575f5ffd5b5061023d61046b366004612fa1565b610ed6565b34801561047b575f5ffd5b506101cf61048a366004612c6c565b61108b565b34801561049a575f5ffd5b5061023d7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b3480156104cd575f5ffd5b506104e16104dc366004612feb565b6111d1565b6040516101b39291906130a1565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b00000000000000000000000000000000000000000000000000000000148061058157507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156105f35750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b1561065757337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161064e9291906130ca565b60405180910390fd5b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630396cb609034906106cb9085906004016130f1565b5f604051808303818588803b1580156106e2575f5ffd5b505af11580156106f4573d5f5f3e3d5ffd5b505050505050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156107685750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b156107c357337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161064e9291906130ca565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600160205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b9061083d9083906130ff565b60405180910390a150565b5f610852816111f3565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063205c2878906108c690869086906004016130ca565b5f604051808303815f87803b1580156108dd575f5ffd5b505af11580156108ef573d5f5f3e3d5ffd5b50505050505050565b5f82815260208190526040902060010154610912816111f3565b61091c8383611200565b50505050565b73ffffffffffffffffffffffffffffffffffffffff81163314610971576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61097b82826112f9565b505050565b5f670de0b6b3a764000082610995858761313a565b61099f9088613159565b6109a9919061313a565b6109b39190613199565b95945050505050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610a285750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610a8357337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161064e9291906130ca565b5f5b8281101561091c578160025f868685818110610aa357610aa36131ac565b9050602002016020810190610ab89190612c6c565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790557f8ff8c5211f68ef53b4bdd15ab2ea6d87be8a3dbf58865bd8325c984057e4fcb4848483818110610b3d57610b3d6131ac565b9050602002016020810190610b529190612c6c565b83604051610b619291906131d9565b60405180910390a1600101610a85565b610b796113b2565b61091c84848484611423565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610bf15750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610c4c57337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161064e9291906130ca565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610cb1575f5ffd5b505af115801561091c573d5f5f3e3d5ffd5b5f610ccd816111f3565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90610d3f9085906004016130ff565b5f604051808303815f87803b1580156106e2575f5ffd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190610dca9030906004016130ff565b602060405180830381865afa158015610de5573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0991906131ff565b905090565b6040517fb760faf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b760faf9903490610e829030906004016130ff565b5f604051808303818588803b158015610e99575f5ffd5b505af1158015610eab573d5f5f3e3d5ffd5b5050505050565b5f82815260208190526040902060010154610ecc816111f3565b61091c83836112f9565b5f7f000000000000000000000000000000000000000000000000000000000000000060ff168360ff1603610f6157610f5a82610f527f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061321d565b60ff1661164b565b9050610581565b5f610fac7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061321d565b90505f610fbd61012085018561323a565b61100a60ff7f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000613159565b818110611019576110196131ac565b919091013560f81c915050600181161515600282161515600483161580159061104a5761104760108661321d565b94505b821561105e5761105b60108661321d565b94505b81156110725761106f60148661321d565b94505b61107f878660ff1661164b565b95505050505050610581565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156110f75750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b1561115257337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161064e9291906130ca565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602081905260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055517f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f249061083d9083906130ff565b60605f6111dc6113b2565b6111e7858585611780565b91509150935093915050565b6111fd8133611941565b50565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166112f2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112903390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4506001610581565b505f610581565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156112f2575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610581565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064e906132e9565b565b5f61142e84846119af565b90505f6114438260c001518360e00151611aa2565b90505f8261018001516fffffffffffffffffffffffffffffffff166114848585608001516fffffffffffffffffffffffffffffffff16858760600151610980565b61148e9190613159565b90505f83610120015182116114b357818461012001516114ae91906132f9565b6114c3565b6101208401516114c390836132f9565b90505f611506856020015186610120015185116114e45786604001516114e7565b86515b87610120015186116114fa578751611500565b87604001515b85611ac4565b90508061153f576040517f1db0f4fb00000000000000000000000000000000000000000000000000000000815260040161064e9061333f565b5f670de0b6b3a7640000866060015187610100015161155e919061313a565b6115689190613199565b6101a087015190915073ffffffffffffffffffffffffffffffffffffffff161580159061159457508381115b156115bb57602086015186516101a08801516115bb9291906115b688866132f9565b611b12565b855f015173ffffffffffffffffffffffffffffffffffffffff168660a001517f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000008960200151888b606001516040516116379493929190613358565b60405180910390a350505050505050505050565b5f8061165a6020850185612c6c565b6020850135608086013560a087013560c088013560e08901356101008a013561168660608c018c61323a565b6040516116949291906133aa565b60405180910390208b80604001906116ac919061323a565b6040516116ba9291906133aa565b6040519081900390206116d16101208e018e61323a565b5f906116fd8f7f0000000000000000000000000000000000000000000000000000000000000000613159565b9261170a939291906133b6565b6040516117189291906133aa565b6040519081900381206117369a9998979695949392916020016133e3565b6040516020818303038152906040528051906020012090508046604051602001611761929190613478565b6040516020818303038152906040528051906020012091505092915050565b60605f808036816117be6117986101208b018b61323a565b7f0000000000000000000000000000000000000000000000000000000000000000611b58565b9350935093509350821580156117e35750325f9081526002602052604090205460ff16155b1561181c57326040517f55d3ab4600000000000000000000000000000000000000000000000000000000815260040161064e91906130ff565b7f000000000000000000000000000000000000000000000000000000000000000060ff168460ff161415801561187857507f000000000000000000000000000000000000000000000000000000000000000060ff168460ff1614155b156118af576040517f654a4f2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60605f7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff16036118f1576118eb8b85858d611c02565b90925090505b7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff16036119315761192b8b85858d8d611d9b565b90925090505b909a909950975050505050505050565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166119ab5780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161064e9291906130ca565b5050565b611a8f604051806101c001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f6fffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f6fffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b611a9b82840184613681565b9392505050565b5f818303611ab1575081610581565b610f5a83611abf4885613159565b611eeb565b5f60405182606052836040528460601b602c526f23b872dd000000000000000000000000600c5260205f6064601c5f8a5af13d1560015f5114171691505f6060528060405250949350505050565b5f611b1f85858585611ac4565b905080610eab576040517f1db0f4fb00000000000000000000000000000000000000000000000000000000815260040161064e906136d3565b5f803681611b67856001613159565b861015611ba0576040517fcc32193e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f878787818110611bb357611bb36131ac565b919091013560f881901c925060018084161515925060f99190911c9036905f908c908c90611be2908d90613159565b611bed9282906133b6565b939d949c509a50919850919650505050505050565b60605f5f5f365f611c138989611f00565b93509350935093505f611c7b611c497f00000000000000000000000000000000000000000000000000000000000000008d610ed6565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b90505f611cbd8285858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061200792505050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205491925060ff90911690611cf78215898961202f565b9050611d0660208f018f612c6c565b73ffffffffffffffffffffffffffffffffffffffff168b7f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000005f5f5f604051611d7294939291906136f7565b60405180910390a360408051602081019091525f81529e909d509b505050505050505050505050565b60605f5f611da98787612065565b90505f611dd9611c497f00000000000000000000000000000000000000000000000000000000000000008b610ed6565b90505f611dea828460c00151612007565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260016020908152604080832054918701519087015193945060ff90911692611e2f9184159161202f565b90505f611e3e8d8b888c6127c2565b905082611e535796509450611ee19350505050565b5f611e648a5f5f8a60a00151610980565b9050808761010001511115611ea5576040517f79183c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010087015115611ed757611ed787608001518f5f016020810190611eca9190612c6c565b89516101008b0151612908565b5096509450505050505b9550959350505050565b5f818310611ef95781611a9b565b5090919050565b5f80368160ff7f000000000000000000000000000000000000000000000000000000000000000016851015611f61576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611f6f600682888a6133b6565b611f789161372c565b60d01c90505f611f8c600c6006898b6133b6565b611f959161372c565b60d01c9050365f611fa989600c818d6133b6565b909250905060408114801590611fc0575060418114155b15611ff7576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9299919850965090945092505050565b5f5f5f5f6120158686612960565b92509250925061202582826129a9565b5090949350505050565b5f60d08265ffffffffffff16901b60a08465ffffffffffff16901b85612055575f612058565b60015b60ff161717949350505050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e081018290526101008101829052610120810182905261014081019190915260ff7f000000000000000000000000000000000000000000000000000000000000000016821015612119576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f808484828161212b5761212b6131ac565b919091013560f81c915050600180821615159060028316151590600484161515906121569086613797565b9450876fffffffffffffffffffffffffffffffff861688612178886006613797565b6fffffffffffffffffffffffffffffffff1692612197939291906133b6565b6121a09161372c565b60d01c60208701526121b3600686613797565b9450876fffffffffffffffffffffffffffffffff8616886121d5886006613797565b6fffffffffffffffffffffffffffffffff16926121f4939291906133b6565b6121fd9161372c565b60d01c6040870152612210600686613797565b9450876fffffffffffffffffffffffffffffffff861688612232886014613797565b6fffffffffffffffffffffffffffffffff1692612251939291906133b6565b61225a916137c3565b60601c608087015261226d601486613797565b9450876fffffffffffffffffffffffffffffffff86168861228f886010613797565b6fffffffffffffffffffffffffffffffff16926122ae939291906133b6565b6122b791613821565b60801c60608701526122ca601086613797565b9450876fffffffffffffffffffffffffffffffff8616886122ec886020613797565b6fffffffffffffffffffffffffffffffff169261230b939291906133b6565b6123149161387f565b60a0870152612324602086613797565b9450876fffffffffffffffffffffffffffffffff861688612346886010613797565b6fffffffffffffffffffffffffffffffff1692612365939291906133b6565b61236e91613821565b60801c60e0870152612381601086613797565b9450876fffffffffffffffffffffffffffffffff8616886123a3886014613797565b6fffffffffffffffffffffffffffffffff16926123c2939291906133b6565b6123cb916137c3565b60601c86526123db601486613797565b5f6101008801529450801561249f576123f5856010613797565b6fffffffffffffffffffffffffffffffff16871015612440576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff861688612460886010613797565b6fffffffffffffffffffffffffffffffff169261247f939291906133b6565b61248891613821565b60801c61010087015261249c601086613797565b94505b5f6101208701528215612561576124b7856010613797565b6fffffffffffffffffffffffffffffffff16871015612502576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff861688612522886010613797565b6fffffffffffffffffffffffffffffffff1692612541939291906133b6565b61254a91613821565b60801c61012087015261255e601086613797565b94505b5f610140870152811561262357612579856014613797565b6fffffffffffffffffffffffffffffffff168710156125c4576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff8616886125e4886014613797565b6fffffffffffffffffffffffffffffffff1692612603939291906133b6565b61260c916137c3565b60601c610140870152612620601486613797565b94505b612641876fffffffffffffffffffffffffffffffff8716818b6133b6565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050505060c0870152608086015173ffffffffffffffffffffffffffffffffffffffff166126ca576040517f33c1dac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560a001515f03612707576040517f5b33c69600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81801561272d575061014086015173ffffffffffffffffffffffffffffffffffffffff16155b15612764576040517f497189f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560c001515160401415801561278057508560c0015151604114155b156127b7576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505092915050565b608082015160a08301516060848101518551610120870151610140880151604080516101c0810190915294969594806127fe60208e018e612c6c565b73ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001868152602001856fffffffffffffffffffffffffffffffff1681526020018b81526020018c60e0013581526020018c610100013581526020018981526020018a610100015181526020015f81526020015f8152602001836fffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff168152506040516020016128e991906139e8565b6040516020818303038152906040529650505050505050949350505050565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c5260205f6064601c5f895af13d1560015f5114171661295357637939f4245f526004601cfd5b5f60605260405250505050565b5f5f5f8351604103612997576020840151604085015160608601515f1a61298988828585612aaa565b9550955095505050506129a2565b505081515f91506002905b9250925092565b5f8260038111156129bc576129bc6139f7565b036129c5575050565b60018260038111156129d9576129d96139f7565b03612a10576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115612a2457612a246139f7565b03612a5d576040517ffce698f700000000000000000000000000000000000000000000000000000000815261064e908290600401612cf9565b6003826003811115612a7157612a716139f7565b036119ab57806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161064e9190612cf9565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612ae357505f91506003905082612b85565b5f6001888888886040515f8152602001604052604051612b069493929190613a24565b6020604051602081039080840390855afa158015612b26573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612b7c57505f925060019150829050612b85565b92505f91508190505b9450945094915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b81146111fd575f5ffd5b803561058181612b8f565b5f60208284031215612bdb57612bdb5f5ffd5b5f612be68484612bbd565b949350505050565b8015155b82525050565b602081016105818284612bee565b63ffffffff8116612bb3565b803561058181612c06565b5f60208284031215612c3057612c305f5ffd5b5f612be68484612c12565b5f73ffffffffffffffffffffffffffffffffffffffff8216610581565b612bb381612c3b565b803561058181612c58565b5f60208284031215612c7f57612c7f5f5ffd5b5f612be68484612c61565b80612bb3565b803561058181612c8a565b5f5f60408385031215612caf57612caf5f5ffd5b5f612cba8585612c61565b9250506020612ccb85828601612c90565b9150509250929050565b5f60208284031215612ce857612ce85f5ffd5b5f612be68484612c90565b80612bf2565b602081016105818284612cf3565b5f5f60408385031215612d1b57612d1b5f5ffd5b5f612d268585612c90565b9250506020612ccb85828601612c61565b5f5f5f5f60808587031215612d4d57612d4d5f5ffd5b5f612d588787612c90565b9450506020612d6987828801612c90565b9350506040612d7a87828801612c90565b9250506060612d8b87828801612c90565b91505092959194509250565b5f5f83601f840112612daa57612daa5f5ffd5b50813567ffffffffffffffff811115612dc457612dc45f5ffd5b602083019150836020820283011115612dde57612dde5f5ffd5b9250929050565b801515612bb3565b803561058181612de5565b5f5f5f60408486031215612e0d57612e0d5f5ffd5b833567ffffffffffffffff811115612e2657612e265f5ffd5b612e3286828701612d97565b93509350506020612e4586828701612ded565b9150509250925092565b600381106111fd575f5ffd5b803561058181612e4f565b5f5f83601f840112612e7957612e795f5ffd5b50813567ffffffffffffffff811115612e9357612e935f5ffd5b602083019150836001820283011115612dde57612dde5f5ffd5b5f5f5f5f60608587031215612ec357612ec35f5ffd5b5f612ece8787612e5b565b945050602085013567ffffffffffffffff811115612eed57612eed5f5ffd5b612ef987828801612e66565b93509350506040612d8b87828801612c90565b5f61058173ffffffffffffffffffffffffffffffffffffffff8316612f2f565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b5f61058182612f0c565b5f61058182612f48565b612bf281612f52565b602081016105818284612f5c565b60ff8116612bb3565b803561058181612f73565b5f6101608284031215612f9b57612f9b5f5ffd5b50919050565b5f5f60408385031215612fb557612fb55f5ffd5b5f612fc08585612f7c565b925050602083013567ffffffffffffffff811115612fdf57612fdf5f5ffd5b612ccb85828601612f87565b5f5f5f60608486031215613000576130005f5ffd5b833567ffffffffffffffff811115613019576130195f5ffd5b61302586828701612f87565b935050602061303686828701612c90565b9250506040612e4586828701612c90565b8281835e505f910152565b5f61305b825190565b808452602084019350613072818560208601613047565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920192915050565b604080825281016130b28185613052565b9050611a9b6020830184612cf3565b612bf281612c3b565b604081016130d882856130c1565b611a9b6020830184612cf3565b63ffffffff8116612bf2565b6020810161058182846130e5565b6020810161058182846130c1565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181028082158382048514176131525761315261310d565b5092915050565b808201808211156105815761058161310d565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826131a7576131a761316c565b500490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b604081016131e782856130c1565b611a9b6020830184612bee565b805161058181612c8a565b5f60208284031215613212576132125f5ffd5b5f612be684846131f4565b60ff9182169190811690828201908111156105815761058161310d565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe136859003018112613271576132715f5ffd5b80840192508235915067ffffffffffffffff821115613291576132915f5ffd5b6020830192506001820236038313156132ab576132ab5f5ffd5b509250929050565b601581525f602082017f53656e646572206e6f7420456e747279506f696e740000000000000000000000815291505b5060200190565b60208082528101610581816132b3565b818103818111156105815761058161310d565b601481525f602082017f5452414e534645525f46524f4d5f4641494c4544000000000000000000000000815291506132e2565b602080825281016105818161330c565b60ff8116612bf2565b60808101613366828761334f565b61337360208301866130c1565b6133806040830185612cf3565b6109b36060830184612cf3565b82818337505f910152565b5f6133a483858461338d565b50500190565b5f612be6828486613398565b5f5f858511156133c7576133c75f5ffd5b838611156133d6576133d65f5ffd5b5050820193919092039150565b61014081016133f2828d6130c1565b6133ff602083018c612cf3565b61340c604083018b612cf3565b613419606083018a612cf3565b6134266080830189612cf3565b61343360a0830188612cf3565b61344060c0830187612cf3565b61344d60e0830186612cf3565b61345b610100830185612cf3565b613469610120830184612cf3565b9b9a5050505050505050505050565b604081016130d88285612cf3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff821117156134f7576134f7613486565b6040525050565b5f61350860405190565b905061351482826134b3565b919050565b6fffffffffffffffffffffffffffffffff8116612bb3565b803561058181613519565b5f6101c08284031215613550576135505f5ffd5b61355b6101c06134fe565b90505f6135688484612c61565b825250602061357984848301612c61565b602083015250604061358d84828501612c61565b60408301525060606135a184828501612c90565b60608301525060806135b584828501613531565b60808301525060a06135c984828501612c90565b60a08301525060c06135dd84828501612c90565b60c08301525060e06135f184828501612c90565b60e08301525061010061360684828501612c90565b6101008301525061012061361c84828501612c90565b6101208301525061014061363284828501612c90565b6101408301525061016061364884828501612c90565b6101608301525061018061365e84828501613531565b610180830152506101a061367484828501612c61565b6101a08301525092915050565b5f6101c08284031215613695576136955f5ffd5b5f612be6848461353c565b601c81525f602082017f5452414e534645525f544f5f524543495049454e545f4641494c454400000000815291506132e2565b60208082528101610581816136a0565b5f610581612f2c8381565b612bf2816136e3565b60808101613705828761334f565b61371260208301866130c1565b61371f60408301856136ee565b6109b360608301846136ee565b80357fffffffffffff0000000000000000000000000000000000000000000000000000168282600682101561378f5761378a7fffffffffffff0000000000000000000000000000000000000000000000000000836006036008021b90565b831692505b505092915050565b6fffffffffffffffffffffffffffffffff9182169190811690828201908111156105815761058161310d565b80357fffffffffffffffffffffffffffffffffffffffff000000000000000000000000168282601482101561378f5761378a7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008021b90565b80357fffffffffffffffffffffffffffffffff00000000000000000000000000000000168282601082101561378f5761378a7fffffffffffffffffffffffffffffffff00000000000000000000000000000000836010036008021b90565b80358282602082101561378f5761378a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008021b90565b6fffffffffffffffffffffffffffffffff8116612bf2565b80516101c08301906138e584826130c1565b5060208201516138f860208501826130c1565b50604082015161390b60408501826130c1565b50606082015161391e6060850182612cf3565b50608082015161393160808501826138bb565b5060a082015161394460a0850182612cf3565b5060c082015161395760c0850182612cf3565b5060e082015161396a60e0850182612cf3565b5061010082015161397f610100850182612cf3565b50610120820151613994610120850182612cf3565b506101408201516139a9610140850182612cf3565b506101608201516139be610160850182612cf3565b506101808201516139d36101808501826138bb565b506101a082015161091c6101a08501826130c1565b6101c0810161058182846138d3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60808101613a328287612cf3565b613373602083018661334f56fea26469706673582212204663afe07e7ac59f82aeba891e559ebb2bb23880dde3507fda29bf2d5901f69164736f6c634300081c0033", + "0x610160604052600060a052600160c081905260e052607561010052600c6101205260146101405234801561003257600080fd5b50604051613f94380380613f94833981016040819052610051916102f8565b6001600160a01b038416608052838383838084848461007160008361010c565b5061009c7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b088261010c565b5050505060005b81518110156100fd5760018060008484815181106100c3576100c3610376565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790556001016100a3565b5050505050505050505061038c565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166101ae576000838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101663390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101b2565b5060005b92915050565b60006001600160a01b0382166101b2565b6101d2816101b8565b81146101dd57600080fd5b50565b80516101b2816101c9565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b0382111715610226576102266101eb565b6040525050565b600061023860405190565b90506102448282610201565b919050565b60006001600160401b03821115610262576102626101eb565b5060209081020190565b600061027f61027a84610249565b61022d565b8381529050602080820190840283018581111561029e5761029e600080fd5b835b818110156102c257806102b388826101e0565b845250602092830192016102a0565b5050509392505050565b600082601f8301126102e0576102e0600080fd5b81516102f084826020860161026c565b949350505050565b6000806000806080858703121561031157610311600080fd5b600061031d87876101e0565b945050602061032e878288016101e0565b935050604061033f878288016101e0565b92505060608501516001600160401b0381111561035e5761035e600080fd5b61036a878288016102cc565b91505092959194509250565b634e487b7160e01b600052603260045260246000fd5b60805160a05160c05160e051610100516101205161014051613b22610472600039600081816110370152818161173c01526117fe015260008181610f7d0152611f1f015260008181610fd801526120df015260008181610f5c01528181610fb7015261101501526000818161165e01528181611883015281816119590152611dc3015260008181610f28015281816118b40152818161191a01528181611c2a0152611d4a0152600081816103d0015281816106bb015281816108be01528181610c8b01528181610d4d01528181610ddc01528181610e9401526114240152613b226000f3fe60806040526004361061018b5760003560e01c8063a217fddf116100d6578063d0e30db01161007f578063eb12d61e11610059578063eb12d61e14610491578063ec87621c146104b1578063f465c77e146104e557600080fd5b8063d0e30db014610449578063d547741f14610451578063dd16f8471461047157600080fd5b8063bb9fe6bf116100b0578063bb9fe6bf146103ff578063c23a5cea14610414578063c399ec881461043457600080fd5b8063a217fddf14610389578063a9a234091461039e578063b0d691fe146103be57600080fd5b806336568abe11610138578063736c0d5b11610112578063736c0d5b146102e85780637dd345cb1461031857806391d148541461033857600080fd5b806336568abe146102785780634031c20e146102985780635525dcfb146102c857600080fd5b8063205c287811610169578063205c2878146101fb578063248a9ca31461021b5780632f2ff15d1461025857600080fd5b806301ffc9a7146101905780630396cb60146101c65780630e316ab7146101db575b600080fd5b34801561019c57600080fd5b506101b06101ab366004612c02565b610513565b6040516101bd9190612c35565b60405180910390f35b6101d96101d4366004612c5a565b6105ac565b005b3480156101e757600080fd5b506101d96101f6366004612cad565b610727565b34801561020757600080fd5b506101d9610216366004612cdf565b610876565b34801561022757600080fd5b5061024b610236366004612d1c565b60009081526020819052604090206001015490565b6040516101bd9190612d43565b34801561026457600080fd5b506101d9610273366004612d51565b61092c565b34801561028457600080fd5b506101d9610293366004612d51565b610957565b3480156102a457600080fd5b506101b06102b3366004612cad565b60026020526000908152604090205460ff1681565b3480156102d457600080fd5b5061024b6102e3366004612d84565b6109b5565b3480156102f457600080fd5b506101b0610303366004612cad565b60016020526000908152604090205460ff1681565b34801561032457600080fd5b506101d9610333366004612e4d565b6109f2565b34801561034457600080fd5b506101b0610353366004612d51565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b34801561039557600080fd5b5061024b600081565b3480156103aa57600080fd5b506101d96103b9366004612f0b565b610bac565b3480156103ca57600080fd5b506103f27f000000000000000000000000000000000000000000000000000000000000000081565b6040516101bd9190612fcb565b34801561040b57600080fd5b506101d9610bc0565b34801561042057600080fd5b506101d961042f366004612cad565b610d05565b34801561044057600080fd5b5061024b610d9c565b6101d9610e57565b34801561045d57600080fd5b506101d961046c366004612d51565b610eff565b34801561047d57600080fd5b5061024b61048c366004613009565b610f24565b34801561049d57600080fd5b506101d96104ac366004612cad565b6110dc565b3480156104bd57600080fd5b5061024b7f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b3480156104f157600080fd5b50610505610500366004613057565b611225565b6040516101bd92919061312b565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806105a657507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1615801561061a57503360009081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b1561067e57337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610675929190613154565b60405180910390fd5b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630396cb609034906106f290859060040161317b565b6000604051808303818588803b15801561070b57600080fd5b505af115801561071f573d6000803e3d6000fd5b505050505050565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1615801561079557503360009081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b156107f057337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610675929190613154565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600160205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b9061086b908390613189565b60405180910390a150565b600061088181611248565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063205c2878906108f59086908690600401613154565b600060405180830381600087803b15801561090f57600080fd5b505af1158015610923573d6000803e3d6000fd5b50505050505050565b60008281526020819052604090206001015461094781611248565b6109518383611255565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109a6576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109b08282611351565b505050565b6000670de0b6b3a7640000826109cb85876131c6565b6109d590886131e5565b6109df91906131c6565b6109e99190613227565b95945050505050565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610a6057503360009081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610abb57337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610675929190613154565b60005b82811015610951578160026000868685818110610add57610add61323b565b9050602002016020810190610af29190612cad565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790557f8ff8c5211f68ef53b4bdd15ab2ea6d87be8a3dbf58865bd8325c984057e4fcb4848483818110610b7857610b7861323b565b9050602002016020810190610b8d9190612cad565b83604051610b9c92919061326a565b60405180910390a1600101610abe565b610bb461140c565b6109518484848461147d565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610c2e57503360009081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610c8957337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610675929190613154565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015610cf157600080fd5b505af1158015610951573d6000803e3d6000fd5b6000610d1081611248565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90610d82908590600401613189565b600060405180830381600087803b15801561070b57600080fd5b6040517f70a0823100000000000000000000000000000000000000000000000000000000815260009073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190610e11903090600401613189565b602060405180830381865afa158015610e2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e529190613290565b905090565b6040517fb760faf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b760faf9903490610ecb903090600401613189565b6000604051808303818588803b158015610ee457600080fd5b505af1158015610ef8573d6000803e3d6000fd5b5050505050565b600082815260208190526040902060010154610f1a81611248565b6109518383611351565b60007f000000000000000000000000000000000000000000000000000000000000000060ff168360ff1603610fb057610fa982610fa17f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006132b1565b60ff166116ac565b90506105a6565b6000610ffc7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006132b1565b9050600061100e6101208501856132ce565b61105b60ff7f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000006131e5565b81811061106a5761106a61323b565b919091013560f81c915050600181161515600282161515600483161580159061109b576110986010866132b1565b94505b82156110af576110ac6010866132b1565b94505b81156110c3576110c06014866132b1565b94505b6110d0878660ff166116ac565b955050505050506105a6565b3360009081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff1615801561114a57503360009081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b156111a557337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610675929190613154565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602081905260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055517f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f249061086b908390613189565b6060600061123161140c565b61123c8585856117e3565b91509150935093915050565b61125281336119a7565b50565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff166113495760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112e73390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016105a6565b5060006105a6565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16156113495760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016105a6565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461147b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067590613382565b565b60006114898484611a16565b9050600061149f8260c001518360e00151611a9a565b905060008261018001516fffffffffffffffffffffffffffffffff166114e18585608001516fffffffffffffffffffffffffffffffff168587606001516109b5565b6114eb91906131e5565b905060008361012001518211611511578184610120015161150c9190613392565b611521565b6101208401516115219083613392565b9050600061156585602001518661012001518511611543578660400151611546565b86515b876101200151861161155957875161155f565b87604001515b85611abd565b90508061159e576040517f1db0f4fb000000000000000000000000000000000000000000000000000000008152600401610675906133d9565b6000670de0b6b3a764000086606001518761010001516115be91906131c6565b6115c89190613227565b6101a087015190915073ffffffffffffffffffffffffffffffffffffffff16158015906115f457508381115b1561161b57602086015186516101a088015161161b9291906116168886613392565b611b10565b856000015173ffffffffffffffffffffffffffffffffffffffff168660a001517f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000008960200151888b6060015160405161169894939291906133f2565b60405180910390a350505050505050505050565b6000806116bc6020850185612cad565b6020850135608086013560a087013560c088013560e08901356101008a01356116e860608c018c6132ce565b6040516116f6929190613446565b60405180910390208b806040019061170e91906132ce565b60405161171c929190613446565b6040519081900390206117336101208e018e6132ce565b6000906117608f7f00000000000000000000000000000000000000000000000000000000000000006131e5565b9261176d93929190613453565b60405161177b929190613446565b6040519081900381206117999a999897969594939291602001613483565b60405160208183030381529060405280519060200120905080466040516020016117c4929190613518565b6040516020818303038152906040528051906020012091505092915050565b60606000808036816118226117fc6101208b018b6132ce565b7f0000000000000000000000000000000000000000000000000000000000000000611b57565b93509350935093508215801561184857503260009081526002602052604090205460ff16155b1561188157326040517f55d3ab460000000000000000000000000000000000000000000000000000000081526004016106759190613189565b7f000000000000000000000000000000000000000000000000000000000000000060ff168460ff16141580156118dd57507f000000000000000000000000000000000000000000000000000000000000000060ff168460ff1614155b15611914576040517f654a4f2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606060007f000000000000000000000000000000000000000000000000000000000000000060ff168660ff1603611957576119518b85858d611c04565b90925090505b7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff1603611997576119918b85858d8d611da8565b90925090505b909a909950975050505050505050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff16611a125780826040517fe2517d3f000000000000000000000000000000000000000000000000000000008152600401610675929190613154565b5050565b604080516101c081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a0810191909152611a9382840184613727565b9392505050565b6000818303611aaa5750816105a6565b610fa983611ab848856131e5565b611f00565b600060405182606052836040528460601b602c526f23b872dd000000000000000000000000600c52602060006064601c60008a5af13d156001600051141716915060006060528060405250949350505050565b6000611b1e85858585611abd565b905080610ef8576040517f1db0f4fb0000000000000000000000000000000000000000000000000000000081526004016106759061377d565b6000803681611b678560016131e5565b861015611ba0576040517fcc32193e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000878787818110611bb457611bb461323b565b919091013560f881901c925060018084161515925060f99190911c9036906000908c908c90611be4908d906131e5565b611bef928290613453565b939d949c509a50919850919650505050505050565b60606000806000366000611c188989611f16565b93509350935093506000611c82611c4f7f00000000000000000000000000000000000000000000000000000000000000008d610f24565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000006000908152601c91909152603c902090565b90506000611cc68285858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061202192505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001602052604081205491925060ff90911690611d018215898961204b565b9050611d1060208f018f612cad565b73ffffffffffffffffffffffffffffffffffffffff168b7f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000006000806000604051611d7e94939291906137a2565b60405180910390a36040805160208101909152600081529e909d509b505050505050505050505050565b6060600080611db78787612083565b90506000611de8611c4f7f00000000000000000000000000000000000000000000000000000000000000008b610f24565b90506000611dfa828460c00151612021565b73ffffffffffffffffffffffffffffffffffffffff8116600090815260016020908152604080832054918701519087015193945060ff90911692611e409184159161204b565b90506000611e508d8b888c6127e7565b905082611e655796509450611ef69350505050565b6000611e788a6000808a60a001516109b5565b9050808761010001511115611eb9576040517f79183c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010087015115611eec57611eec87608001518f6000016020810190611edf9190612cad565b89516101008b015161292f565b5096509450505050505b9550959350505050565b6000818310611f0f5781611a93565b5090919050565b600080368160ff7f000000000000000000000000000000000000000000000000000000000000000016851015611f78576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611f87600682888a613453565b611f90916137d7565b60d01c90506000611fa5600c6006898b613453565b611fae916137d7565b60d01c9050366000611fc389600c818d613453565b909250905060408114801590611fda575060418114155b15612011576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9299919850965090945092505050565b600080600080612031868661298c565b92509250925061204182826129d9565b5090949350505050565b600060d08265ffffffffffff16901b60a08465ffffffffffff16901b85612073576000612076565b60015b60ff161717949350505050565b604080516101608101825260008082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e081018290526101008101829052610120810182905261014081019190915260ff7f000000000000000000000000000000000000000000000000000000000000000016821015612138576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808484828161214b5761214b61323b565b919091013560f81c915050600180821615159060028316151590600484161515906121769086613842565b9450876fffffffffffffffffffffffffffffffff861688612198886006613842565b6fffffffffffffffffffffffffffffffff16926121b793929190613453565b6121c0916137d7565b60d01c60208701526121d3600686613842565b9450876fffffffffffffffffffffffffffffffff8616886121f5886006613842565b6fffffffffffffffffffffffffffffffff169261221493929190613453565b61221d916137d7565b60d01c6040870152612230600686613842565b9450876fffffffffffffffffffffffffffffffff861688612252886014613842565b6fffffffffffffffffffffffffffffffff169261227193929190613453565b61227a9161386e565b60601c608087015261228d601486613842565b9450876fffffffffffffffffffffffffffffffff8616886122af886010613842565b6fffffffffffffffffffffffffffffffff16926122ce93929190613453565b6122d7916138cc565b60801c60608701526122ea601086613842565b9450876fffffffffffffffffffffffffffffffff86168861230c886020613842565b6fffffffffffffffffffffffffffffffff169261232b93929190613453565b6123349161392a565b60a0870152612344602086613842565b9450876fffffffffffffffffffffffffffffffff861688612366886010613842565b6fffffffffffffffffffffffffffffffff169261238593929190613453565b61238e916138cc565b60801c60e08701526123a1601086613842565b9450876fffffffffffffffffffffffffffffffff8616886123c3886014613842565b6fffffffffffffffffffffffffffffffff16926123e293929190613453565b6123eb9161386e565b60601c86526123fb601486613842565b6000610100880152945080156124c057612416856010613842565b6fffffffffffffffffffffffffffffffff16871015612461576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff861688612481886010613842565b6fffffffffffffffffffffffffffffffff16926124a093929190613453565b6124a9916138cc565b60801c6101008701526124bd601086613842565b94505b60006101208701528215612583576124d9856010613842565b6fffffffffffffffffffffffffffffffff16871015612524576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff861688612544886010613842565b6fffffffffffffffffffffffffffffffff169261256393929190613453565b61256c916138cc565b60801c610120870152612580601086613842565b94505b600061014087015281156126465761259c856014613842565b6fffffffffffffffffffffffffffffffff168710156125e7576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff861688612607886014613842565b6fffffffffffffffffffffffffffffffff169261262693929190613453565b61262f9161386e565b60601c610140870152612643601486613842565b94505b612664876fffffffffffffffffffffffffffffffff8716818b613453565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c0870152608086015173ffffffffffffffffffffffffffffffffffffffff166126ee576040517f33c1dac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560a0015160000361272c576040517f5b33c69600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818015612752575061014086015173ffffffffffffffffffffffffffffffffffffffff16155b15612789576040517f497189f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560c00151516040141580156127a557508560c0015151604114155b156127dc576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505092915050565b608082015160a08301516060848101518551610120870151610140880151604080516101c08101909152949695948061282360208e018e612cad565b73ffffffffffffffffffffffffffffffffffffffff1681526020018773ffffffffffffffffffffffffffffffffffffffff1681526020018473ffffffffffffffffffffffffffffffffffffffff168152602001868152602001856fffffffffffffffffffffffffffffffff1681526020018b81526020018c60e0013581526020018c610100013581526020018981526020018a610100015181526020016000815260200160008152602001836fffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff168152506040516020016129109190613a93565b6040516020818303038152906040529650505050505050949350505050565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c52602060006064601c6000895af13d15600160005114171661297e57637939f4246000526004601cfd5b600060605260405250505050565b600080600083516041036129c65760208401516040850151606086015160001a6129b888828585612adb565b9550955095505050506129d2565b50508151600091506002905b9250925092565b60008260038111156129ed576129ed613aa2565b036129f6575050565b6001826003811115612a0a57612a0a613aa2565b03612a41576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115612a5557612a55613aa2565b03612a8e576040517ffce698f7000000000000000000000000000000000000000000000000000000008152610675908290600401612d43565b6003826003811115612aa257612aa2613aa2565b03611a1257806040517fd78bce0c0000000000000000000000000000000000000000000000000000000081526004016106759190612d43565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612b165750600091506003905082612bbe565b600060018888888860405160008152602001604052604051612b3b9493929190613ad1565b6020604051602081039080840390855afa158015612b5d573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612bb457506000925060019150829050612bbe565b9250600091508190505b9450945094915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461125257600080fd5b80356105a681612bc8565b600060208284031215612c1757612c17600080fd5b6000612c238484612bf7565b949350505050565b8015155b82525050565b602081016105a68284612c2b565b63ffffffff8116612bec565b80356105a681612c43565b600060208284031215612c6f57612c6f600080fd5b6000612c238484612c4f565b600073ffffffffffffffffffffffffffffffffffffffff82166105a6565b612bec81612c7b565b80356105a681612c99565b600060208284031215612cc257612cc2600080fd5b6000612c238484612ca2565b80612bec565b80356105a681612cce565b60008060408385031215612cf557612cf5600080fd5b6000612d018585612ca2565b9250506020612d1285828601612cd4565b9150509250929050565b600060208284031215612d3157612d31600080fd5b6000612c238484612cd4565b80612c2f565b602081016105a68284612d3d565b60008060408385031215612d6757612d67600080fd5b6000612d738585612cd4565b9250506020612d1285828601612ca2565b60008060008060808587031215612d9d57612d9d600080fd5b6000612da98787612cd4565b9450506020612dba87828801612cd4565b9350506040612dcb87828801612cd4565b9250506060612ddc87828801612cd4565b91505092959194509250565b60008083601f840112612dfd57612dfd600080fd5b50813567ffffffffffffffff811115612e1857612e18600080fd5b602083019150836020820283011115612e3357612e33600080fd5b9250929050565b801515612bec565b80356105a681612e3a565b600080600060408486031215612e6557612e65600080fd5b833567ffffffffffffffff811115612e7f57612e7f600080fd5b612e8b86828701612de8565b93509350506020612e9e86828701612e42565b9150509250925092565b6003811061125257600080fd5b80356105a681612ea8565b60008083601f840112612ed557612ed5600080fd5b50813567ffffffffffffffff811115612ef057612ef0600080fd5b602083019150836001820283011115612e3357612e33600080fd5b60008060008060608587031215612f2457612f24600080fd5b6000612f308787612eb5565b945050602085013567ffffffffffffffff811115612f5057612f50600080fd5b612f5c87828801612ec0565b93509350506040612ddc87828801612cd4565b60006105a673ffffffffffffffffffffffffffffffffffffffff8316612f93565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b60006105a682612f6f565b60006105a682612fac565b612c2f81612fb7565b602081016105a68284612fc2565b60ff8116612bec565b80356105a681612fd9565b6000610160828403121561300357613003600080fd5b50919050565b6000806040838503121561301f5761301f600080fd5b600061302b8585612fe2565b925050602083013567ffffffffffffffff81111561304b5761304b600080fd5b612d1285828601612fed565b60008060006060848603121561306f5761306f600080fd5b833567ffffffffffffffff81111561308957613089600080fd5b61309586828701612fed565b93505060206130a686828701612cd4565b9250506040612e9e86828701612cd4565b60005b838110156130d25781810151838201526020016130ba565b50506000910152565b60006130e5825190565b8084526020840193506130fc8185602086016130b7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920192915050565b6040808252810161313c81856130db565b9050611a936020830184612d3d565b612c2f81612c7b565b60408101613162828561314b565b611a936020830184612d3d565b63ffffffff8116612c2f565b602081016105a6828461316f565b602081016105a6828461314b565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8181028082158382048514176131de576131de613197565b5092915050565b808201808211156105a6576105a6613197565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082613236576132366131f8565b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60408101613278828561314b565b611a936020830184612c2b565b80516105a681612cce565b6000602082840312156132a5576132a5600080fd5b6000612c238484613285565b60ff9182169190811690828201908111156105a6576105a6613197565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe13685900301811261330757613307600080fd5b80840192508235915067ffffffffffffffff82111561332857613328600080fd5b60208301925060018202360383131561334357613343600080fd5b509250929050565b601581526000602082017f53656e646572206e6f7420456e747279506f696e740000000000000000000000815291505b5060200190565b602080825281016105a68161334b565b818103818111156105a6576105a6613197565b601481526000602082017f5452414e534645525f46524f4d5f4641494c45440000000000000000000000008152915061337b565b602080825281016105a6816133a5565b60ff8116612c2f565b6080810161340082876133e9565b61340d602083018661314b565b61341a6040830185612d3d565b6109e96060830184612d3d565b82818337506000910152565b6000613440838584613427565b50500190565b6000612c23828486613433565b6000808585111561346657613466600080fd5b8386111561347657613476600080fd5b5050820193919092039150565b6101408101613492828d61314b565b61349f602083018c612d3d565b6134ac604083018b612d3d565b6134b9606083018a612d3d565b6134c66080830189612d3d565b6134d360a0830188612d3d565b6134e060c0830187612d3d565b6134ed60e0830186612d3d565b6134fb610100830185612d3d565b613509610120830184612d3d565b9b9a5050505050505050505050565b604081016131628285612d3d565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff8211171561359957613599613526565b6040525050565b60006135ab60405190565b90506135b78282613555565b919050565b6fffffffffffffffffffffffffffffffff8116612bec565b80356105a6816135bc565b60006101c082840312156135f5576135f5600080fd5b6136006101c06135a0565b9050600061360e8484612ca2565b825250602061361f84848301612ca2565b602083015250604061363384828501612ca2565b604083015250606061364784828501612cd4565b606083015250608061365b848285016135d4565b60808301525060a061366f84828501612cd4565b60a08301525060c061368384828501612cd4565b60c08301525060e061369784828501612cd4565b60e0830152506101006136ac84828501612cd4565b610100830152506101206136c284828501612cd4565b610120830152506101406136d884828501612cd4565b610140830152506101606136ee84828501612cd4565b61016083015250610180613704848285016135d4565b610180830152506101a061371a84828501612ca2565b6101a08301525092915050565b60006101c0828403121561373d5761373d600080fd5b6000612c2384846135df565b601c81526000602082017f5452414e534645525f544f5f524543495049454e545f4641494c4544000000008152915061337b565b602080825281016105a681613749565b60006105a6612f908381565b612c2f8161378d565b608081016137b082876133e9565b6137bd602083018661314b565b6137ca6040830185613799565b6109e96060830184613799565b80357fffffffffffff0000000000000000000000000000000000000000000000000000168282600682101561383a576138357fffffffffffff0000000000000000000000000000000000000000000000000000836006036008021b90565b831692505b505092915050565b6fffffffffffffffffffffffffffffffff9182169190811690828201908111156105a6576105a6613197565b80357fffffffffffffffffffffffffffffffffffffffff000000000000000000000000168282601482101561383a576138357fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008021b90565b80357fffffffffffffffffffffffffffffffff00000000000000000000000000000000168282601082101561383a576138357fffffffffffffffffffffffffffffffff00000000000000000000000000000000836010036008021b90565b80358282602082101561383a576138357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008021b90565b6fffffffffffffffffffffffffffffffff8116612c2f565b80516101c0830190613990848261314b565b5060208201516139a3602085018261314b565b5060408201516139b6604085018261314b565b5060608201516139c96060850182612d3d565b5060808201516139dc6080850182613966565b5060a08201516139ef60a0850182612d3d565b5060c0820151613a0260c0850182612d3d565b5060e0820151613a1560e0850182612d3d565b50610100820151613a2a610100850182612d3d565b50610120820151613a3f610120850182612d3d565b50610140820151613a54610140850182612d3d565b50610160820151613a69610160850182612d3d565b50610180820151613a7e610180850182613966565b506101a08201516109516101a085018261314b565b6101c081016105a6828461397e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60808101613adf8287612d3d565b61340d60208301866133e956fea264697066735822122049a9c1a3dcf5fa2782f0d7c004b87ccc2187f4a4dd5ee7f6ca1aa008a0f70ea964736f6c634300081a0033", pad(entryPoint06Address, { size: 32 }), pad(owner, { size: 32 }), pad(owner, { size: 32 }), From ef46b2e8117ed7cc6720576eea537c50c0019551 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Sun, 4 May 2025 13:19:27 +0100 Subject: [PATCH 27/55] fix bytecode --- packages/mock-paymaster/constants.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/mock-paymaster/constants.ts b/packages/mock-paymaster/constants.ts index 463b6528..3eb65613 100644 --- a/packages/mock-paymaster/constants.ts +++ b/packages/mock-paymaster/constants.ts @@ -34,7 +34,7 @@ export const getSingletonPaymaster08InitCode = (owner: Address): Hex => pad(entryPoint08Address, { size: 32 }), pad(owner, { size: 32 }), pad(owner, { size: 32 }), - encodeAbiParameters(parseAbiParameters("address[]"), [[]]) + encodeAbiParameters(parseAbiParameters("address[]"), [owner]) ]) export const getSingletonPaymaster07InitCode = (owner: Address): Hex => @@ -43,7 +43,7 @@ export const getSingletonPaymaster07InitCode = (owner: Address): Hex => pad(entryPoint07Address, { size: 32 }), pad(owner, { size: 32 }), pad(owner, { size: 32 }), - encodeAbiParameters(parseAbiParameters("address[]"), [[]]) + encodeAbiParameters(parseAbiParameters("address[]"), [owner]) ]) export const getSingletonPaymaster06InitCode = (owner: Address): Hex => @@ -52,7 +52,7 @@ export const getSingletonPaymaster06InitCode = (owner: Address): Hex => pad(entryPoint06Address, { size: 32 }), pad(owner, { size: 32 }), pad(owner, { size: 32 }), - encodeAbiParameters(parseAbiParameters("address[]"), [[]]) + encodeAbiParameters(parseAbiParameters("address[]"), [owner]) ]) export const getSingletonPaymaster08Address = (owner: Address) => From d210383bf4edd01f988e488ed72291cccfb87d74 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Sun, 4 May 2025 13:26:31 +0100 Subject: [PATCH 28/55] fix build --- packages/mock-paymaster/constants.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/mock-paymaster/constants.ts b/packages/mock-paymaster/constants.ts index 3eb65613..d8330a15 100644 --- a/packages/mock-paymaster/constants.ts +++ b/packages/mock-paymaster/constants.ts @@ -34,7 +34,7 @@ export const getSingletonPaymaster08InitCode = (owner: Address): Hex => pad(entryPoint08Address, { size: 32 }), pad(owner, { size: 32 }), pad(owner, { size: 32 }), - encodeAbiParameters(parseAbiParameters("address[]"), [owner]) + encodeAbiParameters(parseAbiParameters("address[]"), [[owner]]) ]) export const getSingletonPaymaster07InitCode = (owner: Address): Hex => @@ -43,7 +43,7 @@ export const getSingletonPaymaster07InitCode = (owner: Address): Hex => pad(entryPoint07Address, { size: 32 }), pad(owner, { size: 32 }), pad(owner, { size: 32 }), - encodeAbiParameters(parseAbiParameters("address[]"), [owner]) + encodeAbiParameters(parseAbiParameters("address[]"), [[owner]]) ]) export const getSingletonPaymaster06InitCode = (owner: Address): Hex => @@ -52,7 +52,7 @@ export const getSingletonPaymaster06InitCode = (owner: Address): Hex => pad(entryPoint06Address, { size: 32 }), pad(owner, { size: 32 }), pad(owner, { size: 32 }), - encodeAbiParameters(parseAbiParameters("address[]"), [owner]) + encodeAbiParameters(parseAbiParameters("address[]"), [[owner]]) ]) export const getSingletonPaymaster08Address = (owner: Address) => From 517a591e0aedebf123ddea35ec92e1fd1dd652ec Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Mon, 5 May 2025 14:05:21 +0100 Subject: [PATCH 29/55] update constants --- packages/mock-paymaster/constants.ts | 35 ++++++++++++++++------------ 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/packages/mock-paymaster/constants.ts b/packages/mock-paymaster/constants.ts index d8330a15..5d41dc18 100644 --- a/packages/mock-paymaster/constants.ts +++ b/packages/mock-paymaster/constants.ts @@ -2,11 +2,9 @@ import { type Address, type Hex, concat, - encodeAbiParameters, getAddress, getCreate2Address, - pad, - parseAbiParameters + pad } from "viem" import { entryPoint06Address, @@ -31,30 +29,37 @@ export const constants = { export const getSingletonPaymaster08InitCode = (owner: Address): Hex => concat([ "0x6101806040525f60a052600160c081905260e052607561010052600c61012052603461014052601461016052348015610036575f5ffd5b50604051613e2a380380613e2a833981016040819052610055916102f4565b6001600160a01b0384166080528383838383838383808484846100785f83610115565b506100a37f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0882610115565b505f925050505b8151811015610102576001805f8484815181106100c9576100c961036d565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff19169115159190911790556001016100aa565b5050505050505050505050505050610381565b5f828152602081815260408083206001600160a01b038516845290915281205460ff166101b5575f838152602081815260408083206001600160a01b03861684529091529020805460ff1916600117905561016d3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016101b8565b505f5b92915050565b5f6001600160a01b0382166101b8565b6101d7816101be565b81146101e1575f5ffd5b50565b80516101b8816101ce565b634e487b7160e01b5f52604160045260245ffd5b601f19601f83011681018181106001600160401b0382111715610228576102286101ef565b6040525050565b5f61023960405190565b90506102458282610203565b919050565b5f6001600160401b03821115610262576102626101ef565b5060209081020190565b5f61027e6102798461024a565b61022f565b8381529050602080820190840283018581111561029c5761029c5f5ffd5b835b818110156102c057806102b188826101e4565b8452506020928301920161029e565b5050509392505050565b5f82601f8301126102dc576102dc5f5ffd5b81516102ec84826020860161026c565b949350505050565b5f5f5f5f6080858703121561030a5761030a5f5ffd5b5f61031587876101e4565b9450506020610326878288016101e4565b9350506040610337878288016101e4565b92505060608501516001600160401b03811115610355576103555f5ffd5b610361878288016102ca565b91505092959194509250565b634e487b7160e01b5f52603260045260245ffd5b60805160a05160c05160e051610100516101205161014051610160516139cc61045e5f395f50505f8181610b1c0152818161146b015261168801525f8181610a440152611e3f01525f8181610a9e0152611ff701525f8181610a6501528181610abf0152610afa01525f81816114ef015281816115c401526118c601525f8181610a10015281816115200152818161158501528181611a4f0152611b6001525f818161040b015281816106c3015281816108be01528181610e5b01528181610f1701528181610fa20152818161105801526113f901526139cc5ff3fe60806040526004361061018e575f3560e01c80637c627b21116100dc578063c23a5cea11610087578063d547741f11610062578063d547741f14610489578063eb12d61e146104a8578063ec87621c146104c7578063feaf513e146104fa575f5ffd5b8063c23a5cea1461044e578063c399ec881461046d578063d0e30db014610481575f5ffd5b8063a217fddf116100b7578063a217fddf146103e7578063b0d691fe146103fa578063bb9fe6bf1461043a575f5ffd5b80637c627b211461035a5780637dd345cb1461037957806391d1485414610398575f5ffd5b806336568abe1161013c5780635525dcfb116101175780635525dcfb146102ee57806363b241aa1461030d578063736c0d5b1461032c575f5ffd5b806336568abe146102745780634031c20e1461029357806352b7512c146102c1575f5ffd5b8063205c28781161016c578063205c2878146101fb578063248a9ca31461021a5780632f2ff15d14610255575f5ffd5b806301ffc9a7146101925780630396cb60146101c75780630e316ab7146101dc575b5f5ffd5b34801561019d575f5ffd5b506101b16101ac366004612b49565b61051e565b6040516101be9190612b79565b60405180910390f35b6101da6101d5366004612b9e565b6105b6565b005b3480156101e7575f5ffd5b506101da6101f6366004612bed565b61072b565b348015610206575f5ffd5b506101da610215366004612c1c565b610877565b348015610225575f5ffd5b50610248610234366004612c56565b5f9081526020819052604090206001015490565b6040516101be9190612c7a565b348015610260575f5ffd5b506101da61026f366004612c88565b610927565b34801561027f575f5ffd5b506101da61028e366004612c88565b610951565b34801561029e575f5ffd5b506101b16102ad366004612bed565b60026020525f908152604090205460ff1681565b3480156102cc575f5ffd5b506102e06102db366004612cd2565b6109af565b6040516101be929190612d92565b3480156102f9575f5ffd5b50610248610308366004612db2565b6109d1565b348015610318575f5ffd5b50610248610327366004612e26565b610a0d565b348015610337575f5ffd5b506101b1610346366004612bed565b60016020525f908152604090205460ff1681565b348015610365575f5ffd5b506101da610374366004612ed5565b610bc1565b348015610384575f5ffd5b506101da610393366004612fad565b610bdd565b3480156103a3575f5ffd5b506101b16103b2366004612c88565b5f9182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b3480156103f2575f5ffd5b506102485f81565b348015610405575f5ffd5b5061042d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101be9190613053565b348015610445575f5ffd5b506101da610d92565b348015610459575f5ffd5b506101da610468366004612bed565b610ed0565b348015610478575f5ffd5b50610248610f63565b6101da61101b565b348015610494575f5ffd5b506101da6104a3366004612c88565b6110b8565b3480156104b3575f5ffd5b506101da6104c2366004612bed565b6110dc565b3480156104d2575f5ffd5b506102487f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b0881565b348015610505575f5ffd5b50610248610514366004613084565b5f95945050505050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806105b057507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156106225750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b1561068657337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d9291906130f3565b60405180910390fd5b6040517f0396cb6000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690630396cb609034906106fa90859060040161311a565b5f604051808303818588803b158015610711575f5ffd5b505af1158015610723573d5f5f3e3d5ffd5b505050505050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156107975750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b156107f257337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d9291906130f3565b73ffffffffffffffffffffffffffffffffffffffff81165f908152600160205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055517f3525e22824a8a7df2c9a6029941c824cf95b6447f1e13d5128fd3826d35afe8b9061086c908390613128565b60405180910390a150565b5f61088181611222565b6040517f205c287800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063205c2878906108f590869086906004016130f3565b5f604051808303815f87803b15801561090c575f5ffd5b505af115801561091e573d5f5f3e3d5ffd5b50505050505050565b5f8281526020819052604090206001015461094181611222565b61094b838361122f565b50505050565b73ffffffffffffffffffffffffffffffffffffffff811633146109a0576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6109aa8282611328565b505050565b60605f6109ba6113e1565b6109c5858585611452565b91509150935093915050565b5f670de0b6b3a7640000826109e68587613163565b6109f09088613182565b6109fa9190613163565b610a0491906131c2565b95945050505050565b5f7f000000000000000000000000000000000000000000000000000000000000000060ff168360ff1603610a9857610a9182610a897f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006131d5565b60ff16611613565b90506105b0565b5f610ae37f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006131d5565b90505f610af360e08501856131f2565b610b4060ff7f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000613182565b818110610b4f57610b4f61326b565b919091013560f81c9150506001811615156002821615156004831615801590610b8057610b7d6010866131d5565b94505b8215610b9457610b916010866131d5565b94505b8115610ba857610ba56014866131d5565b94505b610bb5878660ff16611613565b98975050505050505050565b610bc96113e1565b610bd6858585858561172d565b5050505050565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610c495750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610ca457337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d9291906130f3565b5f5b8281101561094b578160025f868685818110610cc457610cc461326b565b9050602002016020810190610cd99190612bed565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040015f2080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790557f8ff8c5211f68ef53b4bdd15ab2ea6d87be8a3dbf58865bd8325c984057e4fcb4848483818110610d5e57610d5e61326b565b9050602002016020810190610d739190612bed565b83604051610d82929190613298565b60405180910390a1600101610ca6565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff16158015610dfe5750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b15610e5957337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d9291906130f3565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663bb9fe6bf6040518163ffffffff1660e01b81526004015f604051808303815f87803b158015610ebe575f5ffd5b505af115801561094b573d5f5f3e3d5ffd5b5f610eda81611222565b6040517fc23a5cea00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c23a5cea90610f4c908590600401613128565b5f604051808303815f87803b158015610711575f5ffd5b6040517f70a082310000000000000000000000000000000000000000000000000000000081525f9073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906370a0823190610fd7903090600401613128565b602060405180830381865afa158015610ff2573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061101691906132be565b905090565b6040517fb760faf900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063b760faf990349061108f903090600401613128565b5f604051808303818588803b1580156110a6575f5ffd5b505af1158015610bd6573d5f5f3e3d5ffd5b5f828152602081905260409020600101546110d281611222565b61094b8383611328565b335f9081527fad3228b676f7d3cd4284a5443f17f1962b36e491b30a40b2405849e597ba5fb5602052604090205460ff161580156111485750335f9081527fe84508f2c7fa9c351146748b3025cb78b45df37d868e48c6a75102fecdeee645602052604090205460ff16155b156111a357337f241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b086040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d9291906130f3565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602081905260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169091179055517f47d1c22a25bb3a5d4e481b9b1e6944c2eade3181a0a20b495ed61d35b5323f249061086c908390613128565b61122c8133611915565b50565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16611321575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790556112bf3390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016105b0565b505f6105b0565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615611321575f8381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016105b0565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611450576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067d906132dc565b565b60605f8080368161148f61146960e08b018b6131f2565b7f0000000000000000000000000000000000000000000000000000000000000000611983565b9350935093509350821580156114b45750325f9081526002602052604090205460ff16155b156114ed57326040517f55d3ab4600000000000000000000000000000000000000000000000000000000815260040161067d9190613128565b7f000000000000000000000000000000000000000000000000000000000000000060ff168460ff161415801561154957507f000000000000000000000000000000000000000000000000000000000000000060ff168460ff1614155b15611580576040517f654a4f2900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60605f7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff16036115c2576115bc8b85858d611a2d565b90925090505b7f000000000000000000000000000000000000000000000000000000000000000060ff168660ff1603611603576115fd868c86868e8e611bbb565b90925090505b909a909950975050505050505050565b5f8083356020850135608086013560a087013560c088013561163860408a018a6131f2565b604051611646929190613334565b60405190819003902061165c60608b018b6131f2565b60405161166a929190613334565b60405190819003902061168060e08c018c6131f2565b5f906116ac8d7f0000000000000000000000000000000000000000000000000000000000000000613182565b926116b993929190613340565b6040516116c7929190613334565b6040519081900381206116e3989796959493929160200161336d565b604051602081830303815290604052805190602001209050804660405160200161170e9291906133e4565b6040516020818303038152906040528051906020012091505092915050565b5f6117388585611cec565b90505f5f6117468286613182565b90505f8361018001516fffffffffffffffffffffffffffffffff166117878386608001516fffffffffffffffffffffffffffffffff168888606001516109d1565b6117919190613182565b90505f84610120015182116117b657818561012001516117b191906133f2565b6117c6565b6101208501516117c690836133f2565b9050611808856020015186610120015184116117e65786604001516117e9565b86515b87610120015185116117fc578751611802565b87604001515b84611ddf565b5f670de0b6b3a764000086606001518761010001516118279190613163565b61183191906131c2565b6101a087015190915073ffffffffffffffffffffffffffffffffffffffff161580159061185d57508281115b1561188457602086015186516101a088015161188492919061187f87866133f2565b611ddf565b855f015173ffffffffffffffffffffffffffffffffffffffff168660a001517f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000008960200151878b60600151604051611900949392919061340e565b60405180910390a35050505050505050505050565b5f8281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff1661197f5780826040517fe2517d3f00000000000000000000000000000000000000000000000000000000815260040161067d9291906130f3565b5050565b5f803681611992856001613182565b8610156119cb576040517fcc32193e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f8787878181106119de576119de61326b565b919091013560f881901c925060018084161515925060f99190911c9036905f908c908c90611a0d908d90613182565b611a18928290613340565b939d949c509a50919850919650505050505050565b60605f5f5f365f611a3e8989611e37565b93509350935093505f611aa6611a747f00000000000000000000000000000000000000000000000000000000000000008d610a0d565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c91909152603c902090565b90505f611ae88285858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611f3e92505050565b73ffffffffffffffffffffffffffffffffffffffff81165f9081526001602052604081205491925060ff90911690611b2282158989611f66565b90508d3573ffffffffffffffffffffffffffffffffffffffff168b7f7a270f29ae17e8e2304ff1245deb50c3b6206bca82928d904f3e284d35c5ffd27f00000000000000000000000000000000000000000000000000000000000000005f5f5f604051611b929493929190613457565b60405180910390a360408051602081019091525f81529e909d509b505050505050505050505050565b60605f5f611bc98787611f9c565b90505f611bd9611a748b8b610a0d565b90505f611bea828460c00151611f3e565b73ffffffffffffffffffffffffffffffffffffffff81165f90815260016020908152604080832054918701519087015193945060ff90911692611c2f91841591611f66565b90505f611c3e8d8b888c6126f9565b905082611c535796509450611ce19350505050565b5f611c648a5f5f8a60a001516109d1565b9050808761010001511115611ca5576040517f79183c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010087015115611cd757611cd787608001518f5f016020810190611cca9190612bed565b89516101008b0151611ddf565b5096509450505050505b965096945050505050565b611dcc604051806101c001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f6fffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f81526020015f6fffffffffffffffffffffffffffffffff1681526020015f73ffffffffffffffffffffffffffffffffffffffff1681525090565b611dd882840184613664565b9392505050565b60405181606052826040528360601b602c526f23b872dd000000000000000000000000600c5260205f6064601c5f895af13d1560015f51141716611e2a57637939f4245f526004601cfd5b5f60605260405250505050565b5f80368160ff7f000000000000000000000000000000000000000000000000000000000000000016851015611e98576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f611ea6600682888a613340565b611eaf91613683565b60d01c90505f611ec3600c6006898b613340565b611ecc91613683565b60d01c9050365f611ee089600c818d613340565b909250905060408114801590611ef7575060418114155b15611f2e576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9299919850965090945092505050565b5f5f5f5f611f4c8686612886565b925092509250611f5c82826128cf565b5090949350505050565b5f60d08265ffffffffffff16901b60a08465ffffffffffff16901b85611f8c575f611f8f565b60015b60ff161717949350505050565b60408051610160810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c082015260e081018290526101008101829052610120810182905261014081019190915260ff7f000000000000000000000000000000000000000000000000000000000000000016821015612050576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80848482816120625761206261326b565b919091013560f81c9150506001808216151590600283161515906004841615159061208d90866136ee565b9450876fffffffffffffffffffffffffffffffff8616886120af8860066136ee565b6fffffffffffffffffffffffffffffffff16926120ce93929190613340565b6120d791613683565b60d01c60208701526120ea6006866136ee565b9450876fffffffffffffffffffffffffffffffff86168861210c8860066136ee565b6fffffffffffffffffffffffffffffffff169261212b93929190613340565b61213491613683565b60d01c60408701526121476006866136ee565b9450876fffffffffffffffffffffffffffffffff8616886121698860146136ee565b6fffffffffffffffffffffffffffffffff169261218893929190613340565b6121919161371a565b60601c60808701526121a46014866136ee565b9450876fffffffffffffffffffffffffffffffff8616886121c68860106136ee565b6fffffffffffffffffffffffffffffffff16926121e593929190613340565b6121ee91613778565b60801c60608701526122016010866136ee565b9450876fffffffffffffffffffffffffffffffff8616886122238860206136ee565b6fffffffffffffffffffffffffffffffff169261224293929190613340565b61224b916137d6565b60a087015261225b6020866136ee565b9450876fffffffffffffffffffffffffffffffff86168861227d8860106136ee565b6fffffffffffffffffffffffffffffffff169261229c93929190613340565b6122a591613778565b60801c60e08701526122b86010866136ee565b9450876fffffffffffffffffffffffffffffffff8616886122da8860146136ee565b6fffffffffffffffffffffffffffffffff16926122f993929190613340565b6123029161371a565b60601c86526123126014866136ee565b5f610100880152945080156123d65761232c8560106136ee565b6fffffffffffffffffffffffffffffffff16871015612377576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff8616886123978860106136ee565b6fffffffffffffffffffffffffffffffff16926123b693929190613340565b6123bf91613778565b60801c6101008701526123d36010866136ee565b94505b5f6101208701528215612498576123ee8560106136ee565b6fffffffffffffffffffffffffffffffff16871015612439576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff8616886124598860106136ee565b6fffffffffffffffffffffffffffffffff169261247893929190613340565b61248191613778565b60801c6101208701526124956010866136ee565b94505b5f610140870152811561255a576124b08560146136ee565b6fffffffffffffffffffffffffffffffff168710156124fb576040517ff96ce32900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b876fffffffffffffffffffffffffffffffff86168861251b8860146136ee565b6fffffffffffffffffffffffffffffffff169261253a93929190613340565b6125439161371a565b60601c6101408701526125576014866136ee565b94505b612578876fffffffffffffffffffffffffffffffff8716818b613340565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525050505060c0870152608086015173ffffffffffffffffffffffffffffffffffffffff16612601576040517f33c1dac900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560a001515f0361263e576040517f5b33c69600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b818015612664575061014086015173ffffffffffffffffffffffffffffffffffffffff16155b1561269b576040517f497189f900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560c00151516040141580156126b757508560c0015151604114155b156126ee576040517ff95eeeac00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505092915050565b60605f612705866129d0565b61270e876129ff565b6127189190613182565b90505f8460e001516fffffffffffffffffffffffffffffffff1661273b88612a1c565b6127499060a08a0135613182565b6127539190613182565b604080516101c081019091529091508061277060208a018a612bed565b73ffffffffffffffffffffffffffffffffffffffff168152602001866080015173ffffffffffffffffffffffffffffffffffffffff168152602001865f015173ffffffffffffffffffffffffffffffffffffffff1681526020018660a00151815260200186606001516fffffffffffffffffffffffffffffffff1681526020018781526020015f81526020015f815260200185815260200186610100015181526020018381526020018281526020018661012001516fffffffffffffffffffffffffffffffff16815260200186610140015173ffffffffffffffffffffffffffffffffffffffff1681525060405160200161286b919061393f565b60405160208183030381529060405292505050949350505050565b5f5f5f83516041036128bd576020840151604085015160608601515f1a6128af88828585612a2b565b9550955095505050506128c8565b505081515f91506002905b9250925092565b5f8260038111156128e2576128e261394e565b036128eb575050565b60018260038111156128ff576128ff61394e565b03612936576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111561294a5761294a61394e565b03612983576040517ffce698f700000000000000000000000000000000000000000000000000000000815261067d908290600401612c7a565b60038260038111156129975761299761394e565b0361197f57806040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260040161067d9190612c7a565b5f6129de60e08301836131f2565b6129ed91603491602491613340565b6129f691613778565b60801c92915050565b5f6fffffffffffffffffffffffffffffffff6080830135166105b0565b5f6105b0826080013560801c90565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115612a6457505f91506003905082612b06565b5f6001888888886040515f8152602001604052604051612a87949392919061397b565b6020604051602081039080840390855afa158015612aa7573d5f5f3e3d5ffd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff8116612afd57505f925060019150829050612b06565b92505f91508190505b9450945094915050565b7fffffffff0000000000000000000000000000000000000000000000000000000081165b811461122c575f5ffd5b80356105b081612b10565b5f60208284031215612b5c57612b5c5f5ffd5b5f612b678484612b3e565b949350505050565b8015155b82525050565b602081016105b08284612b6f565b63ffffffff8116612b34565b80356105b081612b87565b5f60208284031215612bb157612bb15f5ffd5b5f612b678484612b93565b5f73ffffffffffffffffffffffffffffffffffffffff82166105b0565b612b3481612bbc565b80356105b081612bd9565b5f60208284031215612c0057612c005f5ffd5b5f612b678484612be2565b80612b34565b80356105b081612c0b565b5f5f60408385031215612c3057612c305f5ffd5b5f612c3b8585612be2565b9250506020612c4c85828601612c11565b9150509250929050565b5f60208284031215612c6957612c695f5ffd5b5f612b678484612c11565b80612b73565b602081016105b08284612c74565b5f5f60408385031215612c9c57612c9c5f5ffd5b5f612ca78585612c11565b9250506020612c4c85828601612be2565b5f6101208284031215612ccc57612ccc5f5ffd5b50919050565b5f5f5f60608486031215612ce757612ce75f5ffd5b833567ffffffffffffffff811115612d0057612d005f5ffd5b612d0c86828701612cb8565b9350506020612d1d86828701612c11565b9250506040612d2e86828701612c11565b9150509250925092565b8281835e505f910152565b5f612d4c825190565b808452602084019350612d63818560208601612d38565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920192915050565b60408082528101612da38185612d43565b9050611dd86020830184612c74565b5f5f5f5f60808587031215612dc857612dc85f5ffd5b5f612dd38787612c11565b9450506020612de487828801612c11565b9350506040612df587828801612c11565b9250506060612e0687828801612c11565b91505092959194509250565b60ff8116612b34565b80356105b081612e12565b5f5f60408385031215612e3a57612e3a5f5ffd5b5f612e458585612e1b565b925050602083013567ffffffffffffffff811115612e6457612e645f5ffd5b612c4c85828601612cb8565b6003811061122c575f5ffd5b80356105b081612e70565b5f5f83601f840112612e9a57612e9a5f5ffd5b50813567ffffffffffffffff811115612eb457612eb45f5ffd5b602083019150836001820283011115612ece57612ece5f5ffd5b9250929050565b5f5f5f5f5f60808688031215612eec57612eec5f5ffd5b5f612ef78888612e7c565b955050602086013567ffffffffffffffff811115612f1657612f165f5ffd5b612f2288828901612e87565b94509450506040612f3588828901612c11565b9250506060612f4688828901612c11565b9150509295509295909350565b5f5f83601f840112612f6657612f665f5ffd5b50813567ffffffffffffffff811115612f8057612f805f5ffd5b602083019150836020820283011115612ece57612ece5f5ffd5b801515612b34565b80356105b081612f9a565b5f5f5f60408486031215612fc257612fc25f5ffd5b833567ffffffffffffffff811115612fdb57612fdb5f5ffd5b612fe786828701612f53565b93509350506020612d2e86828701612fa2565b5f6105b073ffffffffffffffffffffffffffffffffffffffff831661301d565b90565b73ffffffffffffffffffffffffffffffffffffffff1690565b5f6105b082612ffa565b5f6105b082613036565b612b7381613040565b602081016105b0828461304a565b6fffffffffffffffffffffffffffffffff8116612b34565b80356105b081613061565b5f5f5f5f5f60a0868803121561309b5761309b5f5ffd5b5f6130a68888612c11565b95505060206130b788828901612c11565b94505060406130c888828901613079565b93505060606130d988828901612c11565b9250506080612f4688828901612c11565b612b7381612bbc565b6040810161310182856130ea565b611dd86020830184612c74565b63ffffffff8116612b73565b602081016105b0828461310e565b602081016105b082846130ea565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b81810280821583820485141761317b5761317b613136565b5092915050565b808201808211156105b0576105b0613136565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f826131d0576131d0613195565b500490565b60ff9182169190811690828201908111156105b0576105b0613136565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe136859003018112613229576132295f5ffd5b80840192508235915067ffffffffffffffff821115613249576132495f5ffd5b602083019250600182023603831315613263576132635f5ffd5b509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b604081016132a682856130ea565b611dd86020830184612b6f565b80516105b081612c0b565b5f602082840312156132d1576132d15f5ffd5b5f612b6784846132b3565b602080825281016105b081601581527f53656e646572206e6f7420456e747279506f696e740000000000000000000000602082015260400190565b82818337505f910152565b5f61332e838584613317565b50500190565b5f612b67828486613322565b5f5f85851115613351576133515f5ffd5b83861115613360576133605f5ffd5b5050820193919092039150565b610100810161337c828b6130ea565b613389602083018a612c74565b6133966040830189612c74565b6133a36060830188612c74565b6133b06080830187612c74565b6133bd60a0830186612c74565b6133ca60c0830185612c74565b6133d760e0830184612c74565b9998505050505050505050565b604081016131018285612c74565b818103818111156105b0576105b0613136565b60ff8116612b73565b6080810161341c8287613405565b61342960208301866130ea565b6134366040830185612c74565b610a046060830184612c74565b5f6105b061301a8381565b612b7381613443565b608081016134658287613405565b61347260208301866130ea565b61347f604083018561344e565b610a04606083018461344e565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f830116810181811067ffffffffffffffff821117156134fd576134fd61348c565b6040525050565b5f61350e60405190565b905061351a82826134b9565b919050565b5f6101c08284031215613533576135335f5ffd5b61353e6101c0613504565b90505f61354b8484612be2565b825250602061355c84848301612be2565b602083015250604061357084828501612be2565b604083015250606061358484828501612c11565b606083015250608061359884828501613079565b60808301525060a06135ac84828501612c11565b60a08301525060c06135c084828501612c11565b60c08301525060e06135d484828501612c11565b60e0830152506101006135e984828501612c11565b610100830152506101206135ff84828501612c11565b6101208301525061014061361584828501612c11565b6101408301525061016061362b84828501612c11565b6101608301525061018061364184828501613079565b610180830152506101a061365784828501612be2565b6101a08301525092915050565b5f6101c08284031215613678576136785f5ffd5b5f612b67848461351f565b80357fffffffffffff000000000000000000000000000000000000000000000000000016828260068210156136e6576136e17fffffffffffff0000000000000000000000000000000000000000000000000000836006036008021b90565b831692505b505092915050565b6fffffffffffffffffffffffffffffffff9182169190811690828201908111156105b0576105b0613136565b80357fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016828260148210156136e6576136e17fffffffffffffffffffffffffffffffffffffffff000000000000000000000000836014036008021b90565b80357fffffffffffffffffffffffffffffffff0000000000000000000000000000000016828260108210156136e6576136e17fffffffffffffffffffffffffffffffff00000000000000000000000000000000836010036008021b90565b8035828260208210156136e6576136e17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff836020036008021b90565b6fffffffffffffffffffffffffffffffff8116612b73565b80516101c083019061383c84826130ea565b50602082015161384f60208501826130ea565b50604082015161386260408501826130ea565b5060608201516138756060850182612c74565b5060808201516138886080850182613812565b5060a082015161389b60a0850182612c74565b5060c08201516138ae60c0850182612c74565b5060e08201516138c160e0850182612c74565b506101008201516138d6610100850182612c74565b506101208201516138eb610120850182612c74565b50610140820151613900610140850182612c74565b50610160820151613915610160850182612c74565b5061018082015161392a610180850182613812565b506101a082015161094b6101a08501826130ea565b6101c081016105b0828461382a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b608081016139898287612c74565b613429602083018661340556fea26469706673582212208a15a0763d0e9e3763499efb24664c89aecc3b170e7b24ffc642014b6ca6baa764736f6c634300081c0033", - pad(entryPoint08Address, { size: 32 }), - pad(owner, { size: 32 }), - pad(owner, { size: 32 }), - encodeAbiParameters(parseAbiParameters("address[]"), [[owner]]) + 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, { size: 32 }), - pad(owner, { size: 32 }), - pad(owner, { size: 32 }), - encodeAbiParameters(parseAbiParameters("address[]"), [[owner]]) + 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, { size: 32 }), - pad(owner, { size: 32 }), - pad(owner, { size: 32 }), - encodeAbiParameters(parseAbiParameters("address[]"), [[owner]]) + 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, From 7692f10f912fe52fd686fe13a023ba81d5278ce4 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Mon, 5 May 2025 14:05:24 +0100 Subject: [PATCH 30/55] lint --- packages/mock-paymaster/constants.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/mock-paymaster/constants.ts b/packages/mock-paymaster/constants.ts index 5d41dc18..c95543d4 100644 --- a/packages/mock-paymaster/constants.ts +++ b/packages/mock-paymaster/constants.ts @@ -59,7 +59,6 @@ export const getSingletonPaymaster06InitCode = (owner: Address): Hex => pad(owner) // signer ]) - export const getSingletonPaymaster08Address = (owner: Address) => getCreate2Address({ from: constants.deterministicDeployer, From 657deaa20bd2f06f2d9ed7d2f36c25d1f7761bed Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Tue, 6 May 2025 00:27:32 +0100 Subject: [PATCH 31/55] fix mock paymaster --- packages/mock-paymaster/relay.ts | 40 +++++++++---------- .../mock-paymaster/singletonPaymasters.ts | 36 +++++++++-------- 2 files changed, 39 insertions(+), 37 deletions(-) diff --git a/packages/mock-paymaster/relay.ts b/packages/mock-paymaster/relay.ts index 769e806a..3353971c 100644 --- a/packages/mock-paymaster/relay.ts +++ b/packages/mock-paymaster/relay.ts @@ -48,7 +48,7 @@ import { getSignedPaymasterData } from "./singletonPaymasters.js" -const handleSponsorship = async ({ +const handlePmSponsor = async ({ userOperation, paymasterMode, bundler, @@ -65,9 +65,11 @@ const handleSponsorship = async ({ paymasterSigner: WalletClient estimateGas: boolean }) => { + const is06 = paymaster === entryPoint06Address + let op = { ...userOperation, - ...getDummyPaymasterData({ is06: false, paymaster, paymasterMode }) + ...getDummyPaymasterData({ is06, paymaster, paymasterMode }) } as UserOperation const callGasLimit = userOperation.callGasLimit @@ -181,7 +183,7 @@ const handleMethod = async ({ const [userOperation, entryPoint] = params.data validateEntryPoint(entryPoint) - return await handleSponsorship({ + return await handlePmSponsor({ userOperation, paymasterMode: { mode: "verifying" }, bundler, @@ -214,17 +216,18 @@ const handleMethod = async ({ icon: sponsorshipIcon } - const dummyPaymasterGas = - entryPoint === entryPoint06Address - ? {} - : { - paymasterVerificationGasLimit: toHex(50_000n), - paymasterPostOpGasLimit: toHex(100_000n) - } + const is06 = entryPoint === entryPoint06Address + + const dummyPaymasterGas = is06 + ? {} + : { + paymasterVerificationGasLimit: toHex(50_000n), + paymasterPostOpGasLimit: toHex(100_000n) + } return { ...getDummyPaymasterData({ - is06: false, + is06, paymaster: epToPaymaster[entryPoint], paymasterMode }), @@ -247,16 +250,12 @@ const handleMethod = async ({ const [userOperation, entryPoint, , data] = params.data validateEntryPoint(entryPoint) - const paymasterMode = getPaymasterMode(data) - - return await handleSponsorship({ - userOperation: userOperation as UserOperation, - paymasterMode, - bundler, + return await getSignedPaymasterData({ + signer: paymasterSigner, + userOp: userOperation as UserOperation, + paymasterMode: getPaymasterMode(data), paymaster: epToPaymaster[entryPoint], - publicClient, - paymasterSigner, - estimateGas: false + publicClient }) } @@ -377,7 +376,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 3b43fbf8..d4b05fa4 100644 --- a/packages/mock-paymaster/singletonPaymasters.ts +++ b/packages/mock-paymaster/singletonPaymasters.ts @@ -126,19 +126,9 @@ export const getSignedPaymasterData = async ({ const validAfter = 0 const validUntil = Math.floor(Date.now() / 1000) + constants.validForSeconds - const mode = 1 + const mode = paymasterMode.mode === "verifying" ? 0 : 1 const allowAllBundlers = true const modeAndAllowBundlers = (mode << 1) | (allowAllBundlers ? 1 : 0) - const paymasterValidationGasLimit = 1n - - const constantFeePresent = false - const recipientPresent = false - const preFundPresent = false - - const constantFeeAndRecipientAndPreFund = - ((preFundPresent ? 1 : 0) << 2) | - ((recipientPresent ? 1 : 0) << 1) | - (constantFeePresent ? 1 : 0) if (paymasterMode.mode === "verifying") { paymasterData = encodePacked( @@ -150,6 +140,17 @@ export const getSignedPaymasterData = async ({ [modeAndAllowBundlers, validUntil, validAfter] ) } else { + const paymasterValidationGasLimit = 1n + + const constantFeePresent = false + const recipientPresent = false + const preFundPresent = false + + const constantFeeAndRecipientAndPreFund = + ((preFundPresent ? 1 : 0) << 2) | + ((recipientPresent ? 1 : 0) << 1) | + (constantFeePresent ? 1 : 0) + paymasterData = encodePacked( [ "uint8", // combined byte (mode and allowAllBundlers) @@ -195,7 +196,7 @@ export const getSignedPaymasterData = async ({ preVerificationGas: userOp.preVerificationGas, maxFeePerGas: userOp.maxFeePerGas, maxPriorityFeePerGas: userOp.maxPriorityFeePerGas, - paymasterAndData: userOp.paymasterAndData || "0x", + paymasterAndData: concat([paymaster, paymasterData]), signature: userOp.signature } ]) @@ -204,10 +205,8 @@ export const getSignedPaymasterData = async ({ message: { raw: toBytes(hash) } }) - paymasterData = encodePacked(["bytes", "bytes"], [paymasterData, sig]) - return { - paymasterAndData: concat([paymaster, paymasterData]) + paymasterAndData: concat([paymaster, paymasterData, sig]) } } @@ -220,7 +219,12 @@ export const getSignedPaymasterData = async ({ const hash = await singletonPaymaster.read.getHash([ mode, - toPackedUserOperation(userOp) + // paymaster signs over paymasterData so we add paymaster + paymasterData + toPackedUserOperation({ + ...userOp, + paymaster, + paymasterData + } as UserOperation) ]) const sig = await signer.signMessage({ From 4cef5757c3f59d0e58bd02193b75afd7e78109ff Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Tue, 6 May 2025 01:00:06 +0100 Subject: [PATCH 32/55] update paymaster schema --- packages/mock-paymaster/helpers/schema.ts | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) 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]) ]) From 29e336ec0bcdd21a0d3668b3cd2510f981dfd8c2 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Tue, 6 May 2025 01:27:36 +0100 Subject: [PATCH 33/55] fix import --- ...pareUserOperationForErc20Paymaster.test.ts | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts b/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts index c00e3ed6..2478ad0d 100644 --- a/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts +++ b/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts @@ -6,18 +6,18 @@ import { 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", @@ -84,7 +84,7 @@ describe.each(getCoreSmartAccounts())( } ], paymasterContext: { - token: ERC20_ADDRESS + token: erc20Address } }) @@ -171,7 +171,7 @@ describe.each(getCoreSmartAccounts())( } ], paymasterContext: { - token: ERC20_ADDRESS + token: erc20Address } }) @@ -259,7 +259,7 @@ describe.each(getCoreSmartAccounts())( } ], paymasterContext: { - token: ERC20_ADDRESS + token: erc20Address } }) @@ -342,7 +342,7 @@ describe.each(getCoreSmartAccounts())( } ]), paymasterContext: { - token: ERC20_ADDRESS + token: erc20Address } }) @@ -429,7 +429,7 @@ describe.each(getCoreSmartAccounts())( } ]), paymasterContext: { - token: ERC20_ADDRESS + token: erc20Address } }) @@ -517,7 +517,7 @@ describe.each(getCoreSmartAccounts())( } ]), paymasterContext: { - token: ERC20_ADDRESS + token: erc20Address } }) From dc5ab4ff9eb1d2e936ac16aae992a99b6d6da60b Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Tue, 6 May 2025 12:06:30 +0100 Subject: [PATCH 34/55] use entryPointVersion --- packages/permissionless-test/src/types.ts | 4 +- packages/permissionless-test/src/utils.ts | 45 ++++++++++------------- 2 files changed, 20 insertions(+), 29 deletions(-) diff --git a/packages/permissionless-test/src/types.ts b/packages/permissionless-test/src/types.ts index f7896f3d..4e7eaa99 100644 --- a/packages/permissionless-test/src/types.ts +++ b/packages/permissionless-test/src/types.ts @@ -2,9 +2,7 @@ import type { Hex } from "viem" import type { EntryPointVersion } from "viem/account-abstraction" export type AAParamType = { - entryPoint: { - version: entryPointVersion - } + entryPointVersion: entryPointVersion anvilRpc: string altoRpc: string paymasterRpc: string diff --git a/packages/permissionless-test/src/utils.ts b/packages/permissionless-test/src/utils.ts index cf744deb..2b093205 100644 --- a/packages/permissionless-test/src/utils.ts +++ b/packages/permissionless-test/src/utils.ts @@ -54,9 +54,7 @@ export const ensureBundlerIsReady = async ({ const bundlerClient = getBundlerClient({ altoRpc: altoRpc, anvilRpc, - entryPoint: { - version: "0.6" - } + entryPointVersion: "0.6" }) while (true) { @@ -133,26 +131,24 @@ export const getBundlerClient = ({ anvilRpc, account, paymasterRpc, - entryPoint + entryPointVersion }: { altoRpc: string paymasterRpc?: string anvilRpc: string account?: account - entryPoint: { - version: EntryPointVersion - } + entryPointVersion: EntryPointVersion }) => { const paymaster = paymasterRpc ? createPimlicoClient({ transport: http(paymasterRpc), - entryPoint: getEntryPointFromVersion(entryPoint.version) + entryPoint: getEntryPointFromVersion(entryPointVersion) }) : undefined const pimlicoBundler = createPimlicoClient({ transport: http(altoRpc), - entryPoint: getEntryPointFromVersion(entryPoint.version) + entryPoint: getEntryPointFromVersion(entryPointVersion) }) return createSmartAccountClient({ @@ -229,7 +225,7 @@ export const getPublicClient = (anvilRpc: string) => { export const getSimpleAccountClient = async < entryPointVersion extends EntryPointVersion >({ - entryPoint, + entryPointVersion, anvilRpc, privateKey }: AAParamType): Promise< @@ -237,7 +233,7 @@ export const getSimpleAccountClient = async < > => { return toSimpleSmartAccount({ client: getPublicClient(anvilRpc), - entryPoint: getEntryPointFromVersion(entryPoint.version), + entryPoint: getEntryPointFromVersion(entryPointVersion), owner: privateKeyToAccount(privateKey ?? generatePrivateKey()) }) } @@ -245,7 +241,7 @@ export const getSimpleAccountClient = async < export const getLightAccountClient = async < entryPointVersion extends "0.6" | "0.7" >({ - entryPoint, + entryPointVersion, anvilRpc, version, privateKey @@ -253,9 +249,8 @@ export const getLightAccountClient = async < version?: LightAccountVersion }) => { return toLightSmartAccount({ - entryPoint: getEntryPointFromVersion( - entryPoint.version - ), + entryPoint: + getEntryPointFromVersion(entryPointVersion), client: getPublicClient(anvilRpc), version: version ?? ("1.1.0" as LightAccountVersion), owner: privateKeyToAccount(privateKey ?? generatePrivateKey()) @@ -304,7 +299,7 @@ export const getNexusClient = async ({ export const getKernelEcdsaClient = async < entryPointVersion extends "0.6" | "0.7" >({ - entryPoint, + entryPointVersion, anvilRpc, version, privateKey, @@ -317,16 +312,15 @@ export const getKernelEcdsaClient = async < if ( (version === "0.3.0-beta" || version === "0.3.1") && - entryPoint.version === "0.6" + entryPointVersion === "0.6" ) { throw new Error("Kernel ERC7579 is not supported for V06") } return toKernelSmartAccount({ client: publicClient, - entryPoint: getEntryPointFromVersion( - entryPoint.version - ), + entryPoint: + getEntryPointFromVersion(entryPointVersion), useMetaFactory, owners: [privateKeyToAccount(privateKey ?? generatePrivateKey())], version @@ -334,7 +328,7 @@ export const getKernelEcdsaClient = async < } export const getSafeClient = async ({ - entryPoint, + entryPointVersion, anvilRpc, erc7579, privateKey, @@ -352,7 +346,7 @@ export const getSafeClient = async ({ return toSafeSmartAccount({ client: publicClient, onchainIdentifier, - entryPoint: getEntryPointFromVersion(entryPoint.version), + entryPoint: getEntryPointFromVersion(entryPointVersion), owners: owners ?? [ privateKeyToAccount(privateKey ?? generatePrivateKey()) ], @@ -376,7 +370,7 @@ export const getSafeClient = async ({ export const getThirdwebClient = async < entryPointVersion extends "0.6" | "0.7" >({ - entryPoint, + entryPointVersion, anvilRpc, privateKey // erc7579 @@ -388,9 +382,8 @@ export const getThirdwebClient = async < return toThirdwebSmartAccount({ client: publicClient, version: "1.5.20", - entryPoint: getEntryPointFromVersion( - entryPoint.version - ), + entryPoint: + getEntryPointFromVersion(entryPointVersion), owner: privateKeyToAccount(privateKey ?? generatePrivateKey()) }) } From f8a90caf448901ae665723eaf80ac699f3816b2f Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Tue, 6 May 2025 10:46:32 +0100 Subject: [PATCH 35/55] replace supportedEntryPoint flags --- packages/permissionless-test/src/utils.ts | 92 ++++++----------------- 1 file changed, 23 insertions(+), 69 deletions(-) diff --git a/packages/permissionless-test/src/utils.ts b/packages/permissionless-test/src/utils.ts index 2b093205..d529aef5 100644 --- a/packages/permissionless-test/src/utils.ts +++ b/packages/permissionless-test/src/utils.ts @@ -411,9 +411,7 @@ export const getCoreSmartAccounts = () => [ ...conf }) }, - supportsEntryPointV06: true, - supportsEntryPointV07: false, - supportsEntryPointV08: false, + supportedVersions: ["0.6"], isEip1271Compliant: true }, { @@ -428,9 +426,7 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: true, - supportsEntryPointV07: false, - supportsEntryPointV08: false, + supportedVersions: ["0.6"], isEip1271Compliant: true }, { @@ -445,9 +441,7 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, - supportsEntryPointV08: false, + supportedVersions: ["0.7"], isEip1271Compliant: true }, { @@ -461,9 +455,7 @@ export const getCoreSmartAccounts = () => [ account: await getSimpleAccountClient(conf), ...conf }), - supportsEntryPointV06: true, - supportsEntryPointV07: true, - supportsEntryPointV08: true, + supportedVersions: ["0.6", "0.7", "0.8"], isEip1271Compliant: false }, { @@ -478,9 +470,7 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: true, - supportsEntryPointV07: false, - supportsEntryPointV08: false, + supportedVersions: ["0.6"], isEip1271Compliant: true }, { @@ -495,9 +485,7 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: true, - supportsEntryPointV07: false, - supportsEntryPointV08: false, + supportedVersions: ["0.6"], isEip1271Compliant: true }, { @@ -512,9 +500,7 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: true, - supportsEntryPointV07: false, - supportsEntryPointV08: false, + supportedVersions: ["0.6"], isEip1271Compliant: true }, { @@ -529,9 +515,7 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: true, - supportsEntryPointV07: false, - supportsEntryPointV08: false, + supportedVersions: ["0.6"], isEip1271Compliant: true }, { @@ -560,9 +544,7 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, - supportsEntryPointV08: false, + supportedVersions: ["0.7"], isEip1271Compliant: true }, { @@ -589,9 +571,7 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, - supportsEntryPointV08: false, + supportedVersions: ["0.7"], isEip1271Compliant: true }, { @@ -620,9 +600,7 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, - supportsEntryPointV08: false, + supportedVersions: ["0.7"], isEip1271Compliant: true }, { @@ -649,9 +627,7 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, - supportsEntryPointV08: false, + supportedVersions: ["0.7"], isEip1271Compliant: true }, { @@ -678,9 +654,7 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, - supportsEntryPointV08: false, + supportedVersions: ["0.7"], isEip1271Compliant: true }, { @@ -707,9 +681,7 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, - supportsEntryPointV08: false, + supportedVersions: ["0.7"], isEip1271Compliant: true }, { @@ -721,9 +693,7 @@ export const getCoreSmartAccounts = () => [ account: await getBiconomyClient(conf), ...conf }), - supportsEntryPointV06: true, - supportsEntryPointV07: false, - supportsEntryPointV08: false, + supportedVersions: ["0.6"], isEip1271Compliant: true }, { @@ -744,9 +714,7 @@ export const getCoreSmartAccounts = () => [ account: await getNexusClient(conf), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, - supportsEntryPointV08: false, + supportedVersions: ["0.7"], isEip1271Compliant: true }, { @@ -758,9 +726,7 @@ export const getCoreSmartAccounts = () => [ account: await getSafeClient(conf), ...conf }), - supportsEntryPointV06: true, - supportsEntryPointV07: true, - supportsEntryPointV08: false, + supportedVersions: ["0.6", "0.7"], isEip1271Compliant: true }, { @@ -775,9 +741,7 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: true, - supportsEntryPointV07: true, - supportsEntryPointV08: false, + supportedVersions: ["0.6", "0.7"], isEip1271Compliant: true }, { @@ -796,9 +760,7 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportsEntryPointV06: true, - supportsEntryPointV07: true, - supportsEntryPointV08: false, + supportedVersions: ["0.6", "0.7"], isEip1271Compliant: true }, { @@ -819,9 +781,7 @@ export const getCoreSmartAccounts = () => [ account: await getSafeClient({ ...conf, erc7579: true }), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, - supportsEntryPointV08: false, + supportedVersions: ["0.7"], isEip1271Compliant: true }, { @@ -850,9 +810,7 @@ export const getCoreSmartAccounts = () => [ account: await getSafeClient({ ...conf, erc7579: true }), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, - supportsEntryPointV08: false, + supportedVersions: ["0.7"], isEip1271Compliant: true }, { @@ -864,9 +822,7 @@ export const getCoreSmartAccounts = () => [ account: await getEtherspotClient(conf), ...conf }), - supportsEntryPointV06: false, - supportsEntryPointV07: true, - supportsEntryPointV08: false, + supportedVersions: ["0.7"], isEip1271Compliant: true }, { @@ -887,9 +843,7 @@ export const getCoreSmartAccounts = () => [ // account: await getSafeClient({ ...conf, erc7579: true }), // ...conf // }), - supportsEntryPointV06: true, - supportsEntryPointV07: true, - supportsEntryPointV08: false, + supportedVersions: ["0.6", "0.7"], isEip1271Compliant: true } ] From c956c7d20e164fc240f08daa02759b861a09bc0e Mon Sep 17 00:00:00 2001 From: Garvit Khatri Date: Tue, 6 May 2025 13:21:33 +0100 Subject: [PATCH 36/55] Revert "replace supportedEntryPoint flags" This reverts commit f8a90caf448901ae665723eaf80ac699f3816b2f. --- packages/permissionless-test/src/utils.ts | 92 +++++++++++++++++------ 1 file changed, 69 insertions(+), 23 deletions(-) diff --git a/packages/permissionless-test/src/utils.ts b/packages/permissionless-test/src/utils.ts index d529aef5..2b093205 100644 --- a/packages/permissionless-test/src/utils.ts +++ b/packages/permissionless-test/src/utils.ts @@ -411,7 +411,9 @@ export const getCoreSmartAccounts = () => [ ...conf }) }, - supportedVersions: ["0.6"], + supportsEntryPointV06: true, + supportsEntryPointV07: false, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -426,7 +428,9 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportedVersions: ["0.6"], + supportsEntryPointV06: true, + supportsEntryPointV07: false, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -441,7 +445,9 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportedVersions: ["0.7"], + supportsEntryPointV06: false, + supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -455,7 +461,9 @@ export const getCoreSmartAccounts = () => [ account: await getSimpleAccountClient(conf), ...conf }), - supportedVersions: ["0.6", "0.7", "0.8"], + supportsEntryPointV06: true, + supportsEntryPointV07: true, + supportsEntryPointV08: true, isEip1271Compliant: false }, { @@ -470,7 +478,9 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportedVersions: ["0.6"], + supportsEntryPointV06: true, + supportsEntryPointV07: false, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -485,7 +495,9 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportedVersions: ["0.6"], + supportsEntryPointV06: true, + supportsEntryPointV07: false, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -500,7 +512,9 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportedVersions: ["0.6"], + supportsEntryPointV06: true, + supportsEntryPointV07: false, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -515,7 +529,9 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportedVersions: ["0.6"], + supportsEntryPointV06: true, + supportsEntryPointV07: false, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -544,7 +560,9 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportedVersions: ["0.7"], + supportsEntryPointV06: false, + supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -571,7 +589,9 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportedVersions: ["0.7"], + supportsEntryPointV06: false, + supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -600,7 +620,9 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportedVersions: ["0.7"], + supportsEntryPointV06: false, + supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -627,7 +649,9 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportedVersions: ["0.7"], + supportsEntryPointV06: false, + supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -654,7 +678,9 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportedVersions: ["0.7"], + supportsEntryPointV06: false, + supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -681,7 +707,9 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportedVersions: ["0.7"], + supportsEntryPointV06: false, + supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -693,7 +721,9 @@ export const getCoreSmartAccounts = () => [ account: await getBiconomyClient(conf), ...conf }), - supportedVersions: ["0.6"], + supportsEntryPointV06: true, + supportsEntryPointV07: false, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -714,7 +744,9 @@ export const getCoreSmartAccounts = () => [ account: await getNexusClient(conf), ...conf }), - supportedVersions: ["0.7"], + supportsEntryPointV06: false, + supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -726,7 +758,9 @@ export const getCoreSmartAccounts = () => [ account: await getSafeClient(conf), ...conf }), - supportedVersions: ["0.6", "0.7"], + supportsEntryPointV06: true, + supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -741,7 +775,9 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportedVersions: ["0.6", "0.7"], + supportsEntryPointV06: true, + supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -760,7 +796,9 @@ export const getCoreSmartAccounts = () => [ }), ...conf }), - supportedVersions: ["0.6", "0.7"], + supportsEntryPointV06: true, + supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -781,7 +819,9 @@ export const getCoreSmartAccounts = () => [ account: await getSafeClient({ ...conf, erc7579: true }), ...conf }), - supportedVersions: ["0.7"], + supportsEntryPointV06: false, + supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -810,7 +850,9 @@ export const getCoreSmartAccounts = () => [ account: await getSafeClient({ ...conf, erc7579: true }), ...conf }), - supportedVersions: ["0.7"], + supportsEntryPointV06: false, + supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -822,7 +864,9 @@ export const getCoreSmartAccounts = () => [ account: await getEtherspotClient(conf), ...conf }), - supportedVersions: ["0.7"], + supportsEntryPointV06: false, + supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true }, { @@ -843,7 +887,9 @@ export const getCoreSmartAccounts = () => [ // account: await getSafeClient({ ...conf, erc7579: true }), // ...conf // }), - supportedVersions: ["0.6", "0.7"], + supportsEntryPointV06: true, + supportsEntryPointV07: true, + supportsEntryPointV08: false, isEip1271Compliant: true } ] From bc119cec5adb74fcc8408ce7f079bacfeccb1409 Mon Sep 17 00:00:00 2001 From: Garvit Khatri Date: Tue, 6 May 2025 16:53:43 +0100 Subject: [PATCH 37/55] fix tests --- bun.lock | 26 +- package.json | 2 +- packages/mock-paymaster/package.json | 2 +- packages/permissionless-test/src/types.ts | 4 +- packages/permissionless-test/src/utils.ts | 438 +++++++++--------- .../accounts/decodeCalls.test.ts | 161 +++++++ .../accounts/nexus/toNexusSmartAccount.ts | 2 +- .../accounts/simple/toSimpleSmartAccount.ts | 305 +++++++----- .../actions/pimlico/getTokenQuotes.test.ts | 56 ++- .../pimlico/getUserOperationGasPrice.test.ts | 50 ++ .../pimlico/getUserOperationStatus.test.ts | 62 +++ .../pimlico/sponsorUserOperation.test.ts | 51 ++ .../validateSponsorshipPolicies.test.ts | 100 +++- .../actions/public/getAccountNonce.test.ts | 27 ++ .../actions/public/getSenderAddress.test.ts | 38 +- .../smartAccount/sendTransaction.test.ts | 118 ++++- .../actions/smartAccount/signMessage.test.ts | 59 +++ .../smartAccount/signTypedData.test.ts | 54 +++ .../clients/decorators/pimlico.ts | 3 - ...pareUserOperationForErc20Paymaster.test.ts | 199 +++++++- .../prepareUserOperationForErc20Paymaster.ts | 8 +- packages/permissionless/package.json | 4 +- packages/permissionless/types/pimlico.ts | 10 + .../utils/getEstimationCallData.ts | 32 +- packages/wagmi/hooks/useSendTransaction.ts | 3 +- .../hooks/useWaitForTransactionReceipt.ts | 16 +- packages/wagmi/package.json | 2 +- 27 files changed, 1439 insertions(+), 393 deletions(-) diff --git a/bun.lock b/bun.lock index 83fa64ec..88906dbe 100644 --- a/bun.lock +++ b/bun.lock @@ -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", @@ -48,15 +48,15 @@ }, "peerDependencies": { "prool": "^0.0.23", - "viem": "^2.23.2", + "viem": "^2.28.1", }, }, "packages/permissionless": { "name": "permissionless", - "version": "0.2.43", + "version": "0.2.44", "peerDependencies": { "ox": "0.6.7", - "viem": "^2.23.2", + "viem": "^2.28.1", }, "optionalPeers": [ "ox", @@ -66,7 +66,7 @@ "name": "@permissionless/wagmi", "version": "0.1.4", "peerDependencies": { - "wagmi": "^2.12.8", + "wagmi": "^2.15.1", }, }, "packages/wagmi-demo": { @@ -261,6 +261,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=="], @@ -709,6 +711,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=="], @@ -1117,8 +1121,12 @@ "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=="], + "mkdirp": ["mkdirp@3.0.1", "", { "bin": { "mkdirp": "dist/cjs/src/bin.js" } }, "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg=="], + "mnemonist": ["mnemonist@0.40.0", "", { "dependencies": { "obliterator": "^2.0.4" } }, "sha512-kdd8AFNig2AD5Rkih7EPCXhu/iMvwevQFX/uEiGhZyPZi7fHqOoF4V4kHLpCfysxXMgQ4B52kdPMCwARshKvEg=="], "module-details-from-path": ["module-details-from-path@1.0.3", "", {}, "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A=="], @@ -1249,7 +1257,7 @@ "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=="], @@ -1407,6 +1415,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=="], @@ -1507,7 +1517,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=="], @@ -1745,6 +1755,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=="], diff --git a/package.json b/package.json index f69f638c..f5a1b738 100644 --- a/package.json +++ b/package.json @@ -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", diff --git a/packages/mock-paymaster/package.json b/packages/mock-paymaster/package.json index 6a0a720e..8a9cd444 100644 --- a/packages/mock-paymaster/package.json +++ b/packages/mock-paymaster/package.json @@ -21,7 +21,7 @@ } }, "peerDependencies": { - "viem": "^2.23.2", + "viem": "^2.28.1", "prool": "^0.0.23" }, "dependencies": { diff --git a/packages/permissionless-test/src/types.ts b/packages/permissionless-test/src/types.ts index 4e7eaa99..f7896f3d 100644 --- a/packages/permissionless-test/src/types.ts +++ b/packages/permissionless-test/src/types.ts @@ -2,7 +2,9 @@ import type { Hex } from "viem" import type { EntryPointVersion } from "viem/account-abstraction" export type AAParamType = { - entryPointVersion: entryPointVersion + entryPoint: { + version: entryPointVersion + } anvilRpc: string altoRpc: string paymasterRpc: string diff --git a/packages/permissionless-test/src/utils.ts b/packages/permissionless-test/src/utils.ts index 2b093205..55f6bbfd 100644 --- a/packages/permissionless-test/src/utils.ts +++ b/packages/permissionless-test/src/utils.ts @@ -1,8 +1,9 @@ import { http, type Account, - type Address, + type Chain, type Hex, + type Transport, createPublicClient, createWalletClient } from "viem" @@ -41,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" @@ -54,7 +58,9 @@ export const ensureBundlerIsReady = async ({ const bundlerClient = getBundlerClient({ altoRpc: altoRpc, anvilRpc, - entryPointVersion: "0.6" + entryPoint: { + version: "0.6" + } }) while (true) { @@ -99,56 +105,47 @@ export const getAnvilWalletClient = ({ }) } -const getEntryPointFromVersion = ( - version: EntryPointVersion -): { - address: Address - version: entryPointVersion -} => { - switch (version) { - case "0.6": - return { - address: entryPoint06Address, - version: "0.6" as entryPointVersion - } - case "0.7": - return { - address: entryPoint07Address, - version: "0.7" as entryPointVersion - } - case "0.8": - return { - address: entryPoint08Address, - version: "0.8" as entryPointVersion - } - default: - throw new Error("Unknown EntryPoint version") - } -} - export const getBundlerClient = ({ altoRpc, anvilRpc, account, paymasterRpc, - entryPointVersion + entryPoint }: { altoRpc: string paymasterRpc?: string anvilRpc: string account?: account - entryPointVersion: EntryPointVersion -}) => { + entryPoint: { + 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: getEntryPointFromVersion(entryPointVersion) + entryPoint: { + address, + version: entryPoint.version + } }) : undefined const pimlicoBundler = createPimlicoClient({ transport: http(altoRpc), - entryPoint: getEntryPointFromVersion(entryPointVersion) + entryPoint: { + address, + version: entryPoint.version + } }) return createSmartAccountClient({ @@ -201,7 +198,15 @@ export const getPimlicoClient = ({ }) => createPimlicoClient({ chain: foundry, - entryPoint: getEntryPointFromVersion(entryPointVersion), + entryPoint: { + address: + entryPointVersion === "0.6" + ? entryPoint06Address + : entryPointVersion === "0.7" + ? entryPoint07Address + : entryPoint08Address, + version: entryPointVersion + }, transport: http(altoRpc) }) @@ -225,7 +230,7 @@ export const getPublicClient = (anvilRpc: string) => { export const getSimpleAccountClient = async < entryPointVersion extends EntryPointVersion >({ - entryPointVersion, + entryPoint, anvilRpc, privateKey }: AAParamType): Promise< @@ -233,7 +238,15 @@ export const getSimpleAccountClient = async < > => { return toSimpleSmartAccount({ client: getPublicClient(anvilRpc), - entryPoint: getEntryPointFromVersion(entryPointVersion), + entryPoint: { + address: + entryPoint.version === "0.6" + ? entryPoint06Address + : entryPoint.version === "0.7" + ? entryPoint07Address + : entryPoint08Address, + version: entryPoint.version as entryPointVersion + }, owner: privateKeyToAccount(privateKey ?? generatePrivateKey()) }) } @@ -241,7 +254,7 @@ export const getSimpleAccountClient = async < export const getLightAccountClient = async < entryPointVersion extends "0.6" | "0.7" >({ - entryPointVersion, + entryPoint, anvilRpc, version, privateKey @@ -249,10 +262,15 @@ export const getLightAccountClient = async < version?: LightAccountVersion }) => { return toLightSmartAccount({ - entryPoint: - getEntryPointFromVersion(entryPointVersion), + entryPoint: { + address: + entryPoint.version === "0.6" + ? entryPoint06Address + : entryPoint07Address, + version: entryPoint.version === "0.6" ? "0.6" : "0.7" + }, client: getPublicClient(anvilRpc), - version: version ?? ("1.1.0" as LightAccountVersion), + version: version ?? "1.1.0", owner: privateKeyToAccount(privateKey ?? generatePrivateKey()) }) } @@ -267,7 +285,10 @@ export const getTrustAccountClient = async < return toTrustSmartAccount({ client: getPublicClient(anvilRpc), owner: privateKeyToAccount(privateKey ?? generatePrivateKey()), - entryPoint: getEntryPointFromVersion("0.6") + entryPoint: { + address: entryPoint06Address, + version: "0.6" + } }) } @@ -281,7 +302,10 @@ export const getBiconomyClient = async < return toBiconomySmartAccount({ client: getPublicClient(anvilRpc), owners: [privateKeyToAccount(privateKey ?? generatePrivateKey())], - entryPoint: getEntryPointFromVersion("0.6") + entryPoint: { + address: entryPoint06Address, + version: "0.6" + } }) } @@ -299,7 +323,7 @@ export const getNexusClient = async ({ export const getKernelEcdsaClient = async < entryPointVersion extends "0.6" | "0.7" >({ - entryPointVersion, + entryPoint, anvilRpc, version, privateKey, @@ -312,15 +336,20 @@ export const getKernelEcdsaClient = async < if ( (version === "0.3.0-beta" || version === "0.3.1") && - entryPointVersion === "0.6" + entryPoint.version === "0.6" ) { throw new Error("Kernel ERC7579 is not supported for V06") } return toKernelSmartAccount({ client: publicClient, - entryPoint: - getEntryPointFromVersion(entryPointVersion), + entryPoint: { + address: + entryPoint.version === "0.6" + ? entryPoint06Address + : entryPoint07Address, + version: entryPoint.version === "0.6" ? "0.6" : "0.7" + }, useMetaFactory, owners: [privateKeyToAccount(privateKey ?? generatePrivateKey())], version @@ -328,7 +357,7 @@ export const getKernelEcdsaClient = async < } export const getSafeClient = async ({ - entryPointVersion, + entryPoint, anvilRpc, erc7579, privateKey, @@ -346,7 +375,13 @@ export const getSafeClient = async ({ return toSafeSmartAccount({ client: publicClient, onchainIdentifier, - entryPoint: getEntryPointFromVersion(entryPointVersion), + entryPoint: { + address: + entryPoint.version === "0.6" + ? entryPoint06Address + : entryPoint07Address, + version: entryPoint.version === "0.6" ? "0.6" : "0.7" + }, owners: owners ?? [ privateKeyToAccount(privateKey ?? generatePrivateKey()) ], @@ -370,7 +405,7 @@ export const getSafeClient = async ({ export const getThirdwebClient = async < entryPointVersion extends "0.6" | "0.7" >({ - entryPointVersion, + entryPoint, anvilRpc, privateKey // erc7579 @@ -382,8 +417,13 @@ export const getThirdwebClient = async < return toThirdwebSmartAccount({ client: publicClient, version: "1.5.20", - entryPoint: - getEntryPointFromVersion(entryPointVersion), + entryPoint: { + address: + entryPoint.version === "0.6" + ? entryPoint06Address + : entryPoint07Address, + version: entryPoint.version === "0.6" ? "0.6" : "0.7" + }, owner: privateKeyToAccount(privateKey ?? generatePrivateKey()) }) } @@ -396,18 +436,35 @@ export const getEtherspotClient = async < return toEtherspotSmartAccount({ client: getPublicClient(anvilRpc), owners: [privateKeyToAccount(generatePrivateKey())], - entryPoint: getEntryPointFromVersion<"0.7">("0.7") + entryPoint: { + address: entryPoint07Address, + version: "0.7" + } }) } -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 }) }, @@ -418,13 +475,11 @@ export const getCoreSmartAccounts = () => [ }, { 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 }), @@ -435,13 +490,11 @@ export const getCoreSmartAccounts = () => [ }, { 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 }), @@ -452,11 +505,7 @@ export const getCoreSmartAccounts = () => [ }, { name: "Simple", - getSmartAccountClient: async < - entryPointVersion extends EntryPointVersion - >( - conf: AAParamType - ) => + getSmartAccountClient: async (conf: AAParamType) => getBundlerClient({ account: await getSimpleAccountClient(conf), ...conf @@ -468,13 +517,11 @@ export const getCoreSmartAccounts = () => [ }, { 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 }), @@ -485,13 +532,11 @@ export const getCoreSmartAccounts = () => [ }, { 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 }), @@ -502,13 +547,11 @@ export const getCoreSmartAccounts = () => [ }, { 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 }), @@ -519,13 +562,11 @@ export const getCoreSmartAccounts = () => [ }, { 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 }), @@ -536,26 +577,22 @@ export const getCoreSmartAccounts = () => [ }, { 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 @@ -567,25 +604,21 @@ export const getCoreSmartAccounts = () => [ }, { 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 }), @@ -596,26 +629,22 @@ export const getCoreSmartAccounts = () => [ }, { 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 @@ -627,25 +656,21 @@ export const getCoreSmartAccounts = () => [ }, { 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 }), @@ -656,25 +681,21 @@ export const getCoreSmartAccounts = () => [ }, { 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 }), @@ -685,25 +706,21 @@ export const getCoreSmartAccounts = () => [ }, { 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 }), @@ -714,11 +731,11 @@ export const getCoreSmartAccounts = () => [ }, { 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, @@ -728,20 +745,20 @@ export const getCoreSmartAccounts = () => [ }, { 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, @@ -751,11 +768,11 @@ export const getCoreSmartAccounts = () => [ }, { 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, @@ -765,12 +782,10 @@ export const getCoreSmartAccounts = () => [ }, { 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 @@ -782,12 +797,10 @@ export const getCoreSmartAccounts = () => [ }, { 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()), @@ -803,20 +816,22 @@ export const getCoreSmartAccounts = () => [ }, { 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, @@ -826,12 +841,10 @@ export const getCoreSmartAccounts = () => [ }, { 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()), @@ -841,13 +854,14 @@ 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, @@ -857,11 +871,11 @@ export const getCoreSmartAccounts = () => [ }, { 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, @@ -871,15 +885,15 @@ export const getCoreSmartAccounts = () => [ }, { 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 // ) => 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/nexus/toNexusSmartAccount.ts b/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts index ffd85446..213a1242 100644 --- a/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts +++ b/packages/permissionless/accounts/nexus/toNexusSmartAccount.ts @@ -2,7 +2,6 @@ import type { Account, Assign, Chain, - JsonRpcAccount, OneOf, Prettify, Transport, @@ -13,6 +12,7 @@ import { type Address, type Client, type Hex, + type JsonRpcAccount, type LocalAccount, concat, concatHex, diff --git a/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts b/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts index 93d10ee4..a7c114c3 100644 --- a/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts +++ b/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts @@ -1,4 +1,3 @@ -import { version } from "react" import { type Account, type Address, @@ -100,39 +99,30 @@ const getFactoryAddress = ( ): Address => { if (factoryAddress) return factoryAddress - switch (entryPointVersion) { - case "0.8": - return "0x13E9ed32155810FDbd067D4522C492D6f68E5944" - case "0.7": - return "0x91E60e0613810449d098b0b5Ec8b51A0FE8c8985" - default: - return "0x9406Cc6185a346906296840746125a0E44976454" + if (entryPointVersion === "0.6") { + return "0x9406Cc6185a346906296840746125a0E44976454" } -} - -type EntryPointAbiMap = { - "0.6": typeof entryPoint06Abi - "0.7": typeof entryPoint07Abi - "0.8": typeof entryPoint08Abi -} - -const getEntryPointAbi = (entryPointVersion: EntryPointVersion) => { - switch (entryPointVersion) { - case "0.8": - return entryPoint08Abi - case "0.7": - return entryPoint07Abi - default: - return entryPoint06Abi + if (entryPointVersion === "0.7") { + return "0x91E60e0613810449d098b0b5Ec8b51A0FE8c8985" } + return "0x9406Cc6185a346906296840746125a0E44976454" } export type SimpleSmartAccountImplementation< entryPointVersion extends EntryPointVersion = "0.7" > = Assign< SmartAccountImplementation< - EntryPointAbiMap[entryPointVersion], + entryPointVersion extends "0.6" + ? typeof entryPoint06Abi + : entryPointVersion extends "0.8" + ? typeof entryPoint07Abi + : typeof entryPoint08Abi, 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 } > @@ -162,17 +152,16 @@ export async function toSimpleSmartAccount< const localOwner = await toOwner({ owner }) - 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 entryPoint = { + address: parameters.entryPoint?.address ?? entryPoint07Address, + abi: + (parameters.entryPoint?.version ?? "0.7") === "0.6" + ? entryPoint06Abi + : (parameters.entryPoint?.version ?? "0.7") === "0.7" + ? entryPoint07Abi + : entryPoint08Abi, + version: parameters.entryPoint?.version ?? "0.7" + } as const const factoryAddress = getFactoryAddress( entryPoint.version, @@ -220,7 +209,26 @@ export async function toSimpleSmartAccount< if (calls.length > 1) { if (entryPoint.version === "0.6") { return encodeFunctionData({ - abi: simpleAccount06Abi, + abi: [ + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]" + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]" + } + ], + name: "executeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } + ], functionName: "executeBatch", args: [ calls.map((a) => a.to), @@ -229,7 +237,31 @@ export async function toSimpleSmartAccount< }) } return encodeFunctionData({ - abi: simpleAccount07Abi, + 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" + } + ], functionName: "executeBatch", args: [ calls.map((a) => a.to), @@ -246,7 +278,31 @@ export async function toSimpleSmartAccount< } return encodeFunctionData({ - abi: simpleAccount07Abi, + 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" + } + ], functionName: "execute", args: [call.to, call.value ?? 0n, call.data ?? "0x"] }) @@ -254,7 +310,26 @@ export async function toSimpleSmartAccount< decodeCalls: async (callData) => { try { const decodedV6 = decodeFunctionData({ - abi: simpleAccount06Abi, + abi: [ + { + inputs: [ + { + internalType: "address[]", + name: "dest", + type: "address[]" + }, + { + internalType: "bytes[]", + name: "func", + type: "bytes[]" + } + ], + name: "executeBatch", + outputs: [], + stateMutability: "nonpayable", + type: "function" + } + ], data: callData }) @@ -274,12 +349,36 @@ export async function toSimpleSmartAccount< return calls } catch (_) { - const decodedV7 = decodeFunctionData({ - abi: simpleAccount07Abi, - data: callData - }) + try { + 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" + } + ], + data: callData + }) - if (decodedV7.functionName === "executeBatch") { const calls: { to: Address data: Hex @@ -295,15 +394,43 @@ export async function toSimpleSmartAccount< } 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" + } + ], + data: callData + }) + return [ + { + to: decodedSingle.args[0], + value: decodedSingle.args[1], + data: decodedSingle.args[2] + } + ] } - - return [ - { - to: decodedV7.args[0], - value: decodedV7.args[1], - data: decodedV7.args[2] - } - ] } }, async getNonce(args) { @@ -330,7 +457,7 @@ export async function toSimpleSmartAccount< parameters // 0.8 Signs using typed data - if (version === "0.8") { + if (entryPoint.version === "0.8") { const address = await this.getAddress() const typedData = getUserOperationTypedData({ chainId, @@ -363,73 +490,3 @@ export async function toSimpleSmartAccount< } }) as Promise> } - -const simpleAccount06Abi = [ - { - inputs: [ - { - internalType: "address[]", - name: "dest", - type: "address[]" - }, - { - internalType: "bytes[]", - name: "func", - type: "bytes[]" - } - ], - name: "executeBatch", - outputs: [], - stateMutability: "nonpayable", - type: "function" - } -] as const - -const simpleAccount07Abi = [ - { - 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" - }, - { - 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 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/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..c7b0eaa7 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 }) => { @@ -243,5 +296,68 @@ 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" + }, + ...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 b40ab5c4..4390218d 100644 --- a/packages/permissionless/clients/decorators/pimlico.ts +++ b/packages/permissionless/clients/decorators/pimlico.ts @@ -103,9 +103,6 @@ export type PimlicoActions< Omit > ) => Promise - /** - * @deprecated Use `getPaymasterData` instead - */ sponsorUserOperation: ( args: Omit< PimlicoSponsorUserOperationParameters, diff --git a/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts b/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts index 2478ad0d..b63a2070 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 { - erc20Address, + ERC20_ADDRESS, sudoMintTokens, tokenBalanceOf -} from "../../../../mock-paymaster/helpers/erc20-utils" -import { testWithRpc } from "../../../../permissionless-test/src/testWithRpc" +} from "../../../../mock-paymaster/helpers/erc20-utils.ts" +import { testWithRpc } from "../../../../permissionless-test/src/testWithRpc.ts" import { getCoreSmartAccounts, getPublicClient } from "../../../../permissionless-test/src/utils" -import { createSmartAccountClient } from "../../../clients/createSmartAccountClient" -import { createPimlicoClient } from "../../../clients/pimlico" -import { prepareUserOperationForErc20Paymaster } from "./prepareUserOperationForErc20Paymaster" +import { createSmartAccountClient } from "../../../clients/createSmartAccountClient.ts" +import { createPimlicoClient } from "../../../clients/pimlico.ts" +import { prepareUserOperationForErc20Paymaster } from "./prepareUserOperationForErc20Paymaster.ts" describe.each(getCoreSmartAccounts())( "prepareUserOperationForErc20Paymaster $name", @@ -25,6 +26,7 @@ describe.each(getCoreSmartAccounts())( getSmartAccountClient, supportsEntryPointV06, supportsEntryPointV07, + supportsEntryPointV08, name }) => { testWithRpc.skipIf(!supportsEntryPointV06)( @@ -84,7 +86,7 @@ describe.each(getCoreSmartAccounts())( } ], paymasterContext: { - token: erc20Address + token: ERC20_ADDRESS } }) @@ -171,7 +173,90 @@ describe.each(getCoreSmartAccounts())( } ], paymasterContext: { - token: erc20Address + token: ERC20_ADDRESS + } + }) + + 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: ERC20_ADDRESS } }) @@ -259,7 +344,95 @@ describe.each(getCoreSmartAccounts())( } ], paymasterContext: { - token: erc20Address + token: ERC20_ADDRESS + } + }) + + 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(!supportsEntryPointV07)( + "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: entryPoint07Address, + 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: ERC20_ADDRESS } }) @@ -342,7 +515,7 @@ describe.each(getCoreSmartAccounts())( } ]), paymasterContext: { - token: erc20Address + token: ERC20_ADDRESS } }) @@ -429,7 +602,7 @@ describe.each(getCoreSmartAccounts())( } ]), paymasterContext: { - token: erc20Address + token: ERC20_ADDRESS } }) @@ -517,7 +690,7 @@ describe.each(getCoreSmartAccounts())( } ]), paymasterContext: { - token: erc20Address + token: ERC20_ADDRESS } }) diff --git a/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts b/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts index 43275c47..0828a7b4 100644 --- a/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts +++ b/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.ts @@ -65,14 +65,10 @@ export const prepareUserOperationForErc20Paymaster = PrepareUserOperationReturnType > => { const parameters = parameters_ as PrepareUserOperationParameters - const { account: account_ = client.account } = parameters - - //////////////////////////////////////////////////////////////////////////////// - // Assert that an Account is defined. - //////////////////////////////////////////////////////////////////////////////// + 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 eeca3d63..d2bef807 100644 --- a/packages/permissionless/package.json +++ b/packages/permissionless/package.json @@ -1,6 +1,6 @@ { "name": "permissionless", - "version": "0.2.43", + "version": "0.2.44", "author": "Pimlico", "homepage": "https://docs.pimlico.io/permissionless", "repository": "github:pimlicolabs/permissionless.js", @@ -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 d4c6e0ed..64480883 100644 --- a/packages/permissionless/types/pimlico.ts +++ b/packages/permissionless/types/pimlico.ts @@ -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/wagmi/hooks/useSendTransaction.ts b/packages/wagmi/hooks/useSendTransaction.ts index 701126ff..100d4045 100644 --- a/packages/wagmi/hooks/useSendTransaction.ts +++ b/packages/wagmi/hooks/useSendTransaction.ts @@ -3,7 +3,8 @@ import { type MutationOptions, useMutation } from "@tanstack/react-query" -import { sendCalls, sendTransaction } from "@wagmi/core" +import { sendTransaction } from "@wagmi/core" +import { sendCalls } from "@wagmi/core" import type { Prettify, SendTransactionErrorType, diff --git a/packages/wagmi/hooks/useWaitForTransactionReceipt.ts b/packages/wagmi/hooks/useWaitForTransactionReceipt.ts index a20e47d9..7b62435e 100644 --- a/packages/wagmi/hooks/useWaitForTransactionReceipt.ts +++ b/packages/wagmi/hooks/useWaitForTransactionReceipt.ts @@ -30,12 +30,12 @@ import { isHash, stringify } from "viem" -import type { GetCallsStatusReturnType, ShowCallsStatusErrorType } from "viem" +import { getTransactionReceipt, watchBlockNumber } from "viem/actions" import { - getCallsStatus, - getTransactionReceipt, - watchBlockNumber -} from "viem/actions" + type GetCallsStatusReturnType, + type ShowCallsStatusErrorType, + getCallsStatus +} from "viem/experimental" import { getAction } from "viem/utils" import { useChainId, useConfig } from "wagmi" import { @@ -78,13 +78,13 @@ export function filterQueryOptions>( const { // import('@tanstack/query-core').QueryOptions _defaulted, behavior, gcTime, initialData, initialDataUpdatedAt, maxPages, meta, networkMode, queryFn, queryHash, queryKey, queryKeyHashFn, retry, retryDelay, structuralSharing, - + // import('@tanstack/query-core').InfiniteQueryObserverOptions getPreviousPageParam, getNextPageParam, initialPageParam, - + // import('@tanstack/react-query').UseQueryOptions _optimisticResults, enabled, notifyOnChangeProps, placeholderData, refetchInterval, refetchIntervalInBackground, refetchOnMount, refetchOnReconnect, refetchOnWindowFocus, retryOnMount, select, staleTime, suspense, throwOnError, - + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // wagmi //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 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" } } From 5869187034e477584f78b222291c81d916959b43 Mon Sep 17 00:00:00 2001 From: plusminushalf <5251472+plusminushalf@users.noreply.github.com> Date: Tue, 6 May 2025 16:23:12 +0000 Subject: [PATCH 38/55] chore: format --- bun.lockb | Bin 370632 -> 348344 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bun.lockb b/bun.lockb index 90534647cd09111deefe9bc06405e18e9bc26c32..0ba8ac2fb0d7a9880d1e5791a8a0d2948ed2380d 100755 GIT binary patch delta 35359 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 delta 48152 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 Date: Wed, 7 May 2025 01:17:28 +0100 Subject: [PATCH 39/55] fix test --- bun.lock | 62 +++++++++++++++---- package.json | 4 +- packages/permissionless-test/src/utils.ts | 13 ++-- .../accounts/simple/toSimpleSmartAccount.ts | 59 ++++++++++-------- .../smartAccount/sendTransaction.test.ts | 4 ++ 5 files changed, 94 insertions(+), 48 deletions(-) diff --git a/bun.lock b/bun.lock index 88906dbe..c6f6492a 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", @@ -32,7 +32,7 @@ "tsc-alias": "^1.8.8", "tslib": "^2.6.2", "typescript": "^5.2.2", - "viem": "2.28.1", + "viem": "2.29.0", "vite": "^5.4.10", "vitest": "^2.1.5", "wagmi": "^2.15.1", @@ -393,10 +393,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=="], @@ -1447,6 +1449,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=="], @@ -1477,7 +1481,7 @@ "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.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=="], + "viem": ["viem@2.29.0", "", { "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-N6GeIuuay/spDyw+5FbSuNIkVN0da+jGOjdlC0bdatIN+N0jtOf9Zfj0pbXgpIJGwnM9ocxzTRt0HZVbHBdL2Q=="], "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=="], @@ -1661,24 +1665,30 @@ "@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/alto/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/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/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=="], + + "@reown/appkit-common/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=="], + "@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-controllers/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=="], + "@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-utils/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=="], + "@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=="], @@ -1849,10 +1859,6 @@ "@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/alto/@fastify/cors/mnemonist": ["mnemonist@0.39.6", "", { "dependencies": { "obliterator": "^2.0.1" } }, "sha512-A/0v5Z59y63US00cRSLiloEIw3t5G+MiKz4BhX21FI+YBJXBOGW0ohFxTxO08dsOYlzxo87T7vGfZKYp2bcAWA=="], - "@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=="], "@pimlico/alto/fastify/@fastify/error": ["@fastify/error@3.4.1", "", {}, "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ=="], @@ -1873,9 +1879,15 @@ "@pimlico/alto/fastify/secure-json-parse": ["secure-json-parse@2.7.0", "", {}, "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="], - "@pimlico/alto/viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], + "@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=="], + + "@reown/appkit-common/viem/@noble/curves": ["@noble/curves@1.8.2", "", { "dependencies": { "@noble/hashes": "1.7.2" } }, "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g=="], + + "@reown/appkit-common/viem/@noble/hashes": ["@noble/hashes@1.7.2", "", {}, "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ=="], + + "@reown/appkit-common/viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], - "@pimlico/alto/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=="], + "@reown/appkit-common/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=="], "@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=="], @@ -1883,16 +1895,40 @@ "@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=="], + "@reown/appkit-controllers/viem/@noble/curves": ["@noble/curves@1.8.2", "", { "dependencies": { "@noble/hashes": "1.7.2" } }, "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g=="], + + "@reown/appkit-controllers/viem/@noble/hashes": ["@noble/hashes@1.7.2", "", {}, "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ=="], + + "@reown/appkit-controllers/viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], + + "@reown/appkit-controllers/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=="], + "@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=="], "@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=="], "@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=="], + "@reown/appkit-utils/viem/@noble/curves": ["@noble/curves@1.8.2", "", { "dependencies": { "@noble/hashes": "1.7.2" } }, "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g=="], + + "@reown/appkit-utils/viem/@noble/hashes": ["@noble/hashes@1.7.2", "", {}, "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ=="], + + "@reown/appkit-utils/viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], + + "@reown/appkit-utils/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=="], + "@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=="], "@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=="], + "@reown/appkit/viem/@noble/curves": ["@noble/curves@1.8.2", "", { "dependencies": { "@noble/hashes": "1.7.2" } }, "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g=="], + + "@reown/appkit/viem/@noble/hashes": ["@noble/hashes@1.7.2", "", {}, "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ=="], + + "@reown/appkit/viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], + + "@reown/appkit/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=="], + "@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=="], "@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=="], diff --git a/package.json b/package.json index f5a1b738..70d4eb98 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", @@ -39,7 +39,7 @@ "tsc-alias": "^1.8.8", "tslib": "^2.6.2", "typescript": "^5.2.2", - "viem": "2.28.1", + "viem": "2.29.0", "vite": "^5.4.10", "vitest": "^2.1.5", "wagmi": "^2.15.1" diff --git a/packages/permissionless-test/src/utils.ts b/packages/permissionless-test/src/utils.ts index 55f6bbfd..fee803d4 100644 --- a/packages/permissionless-test/src/utils.ts +++ b/packages/permissionless-test/src/utils.ts @@ -236,15 +236,16 @@ 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 - : entryPoint.version === "0.7" - ? entryPoint07Address - : entryPoint08Address, + address: entryPointMapping[entryPoint.version], version: entryPoint.version as entryPointVersion }, owner: privateKeyToAccount(privateKey ?? generatePrivateKey()) diff --git a/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts b/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts index a7c114c3..5a566177 100644 --- a/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts +++ b/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts @@ -99,30 +99,33 @@ const getFactoryAddress = ( ): 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" } - if (entryPointVersion === "0.7") { - return "0x91E60e0613810449d098b0b5Ec8b51A0FE8c8985" +} + +const getEntryPointAbi = (entryPointVersion: EntryPointVersion) => { + switch (entryPointVersion) { + case "0.8": + return entryPoint08Abi + case "0.7": + return entryPoint07Abi + default: + return entryPoint06Abi } - return "0x9406Cc6185a346906296840746125a0E44976454" } export type SimpleSmartAccountImplementation< entryPointVersion extends EntryPointVersion = "0.7" > = Assign< SmartAccountImplementation< - entryPointVersion extends "0.6" - ? typeof entryPoint06Abi - : entryPointVersion extends "0.8" - ? typeof entryPoint07Abi - : typeof entryPoint08Abi, + 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 } > @@ -152,16 +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 - : (parameters.entryPoint?.version ?? "0.7") === "0.7" - ? entryPoint07Abi - : entryPoint08Abi, - 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, @@ -458,13 +462,14 @@ export async function toSimpleSmartAccount< // 0.8 Signs using typed data if (entryPoint.version === "0.8") { - const address = await this.getAddress() const typedData = getUserOperationTypedData({ chainId, entryPointAddress: entryPoint.address, userOperation: { ...userOperation, - sender: address + sender: + userOperation.sender ?? (await this.getAddress()), + signature: "0x" } }) return await localOwner.signTypedData(typedData) diff --git a/packages/permissionless/actions/smartAccount/sendTransaction.test.ts b/packages/permissionless/actions/smartAccount/sendTransaction.test.ts index c7b0eaa7..28131d0b 100644 --- a/packages/permissionless/actions/smartAccount/sendTransaction.test.ts +++ b/packages/permissionless/actions/smartAccount/sendTransaction.test.ts @@ -244,6 +244,8 @@ describe.each(getCoreSmartAccounts())( entryPoint: { version: "0.7" }, + privateKey: + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", // anvil private key ...rpc }) @@ -307,6 +309,8 @@ describe.each(getCoreSmartAccounts())( entryPoint: { version: "0.8" }, + privateKey: + "0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80", // anvil private key ...rpc }) From 34e6ba3a73f4138e0a63e1f6d2e14f8ec883a586 Mon Sep 17 00:00:00 2001 From: mouseless0x <97399882+mouseless0x@users.noreply.github.com> Date: Wed, 7 May 2025 00:23:30 +0000 Subject: [PATCH 40/55] chore: format --- bun.lockb | Bin 348344 -> 350088 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bun.lockb b/bun.lockb index 0ba8ac2fb0d7a9880d1e5791a8a0d2948ed2380d..cefff4e6ad615589d9f1d1ad933f41b549d54b8b 100755 GIT binary patch delta 38498 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 delta 36915 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 Date: Wed, 7 May 2025 01:30:11 +0100 Subject: [PATCH 41/55] downgrade viem --- bun.lock | 48 +++++++++--------------------------------------- package.json | 2 +- 2 files changed, 10 insertions(+), 40 deletions(-) diff --git a/bun.lock b/bun.lock index c6f6492a..d5fe64bd 100644 --- a/bun.lock +++ b/bun.lock @@ -32,7 +32,7 @@ "tsc-alias": "^1.8.8", "tslib": "^2.6.2", "typescript": "^5.2.2", - "viem": "2.29.0", + "viem": "2.28.1", "vite": "^5.4.10", "vitest": "^2.1.5", "wagmi": "^2.15.1", @@ -1481,7 +1481,7 @@ "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.29.0", "", { "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-N6GeIuuay/spDyw+5FbSuNIkVN0da+jGOjdlC0bdatIN+N0jtOf9Zfj0pbXgpIJGwnM9ocxzTRt0HZVbHBdL2Q=="], + "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=="], @@ -1671,24 +1671,18 @@ "@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/alto/viem": ["viem@2.29.0", "", { "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-N6GeIuuay/spDyw+5FbSuNIkVN0da+jGOjdlC0bdatIN+N0jtOf9Zfj0pbXgpIJGwnM9ocxzTRt0HZVbHBdL2Q=="], + "@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/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=="], - - "@reown/appkit-common/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=="], - "@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-controllers/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=="], - "@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-utils/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=="], - "@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=="], @@ -1879,15 +1873,15 @@ "@pimlico/alto/fastify/secure-json-parse": ["secure-json-parse@2.7.0", "", {}, "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="], - "@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/viem/@noble/curves": ["@noble/curves@1.8.2", "", { "dependencies": { "@noble/hashes": "1.7.2" } }, "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g=="], - "@reown/appkit-common/viem/@noble/curves": ["@noble/curves@1.8.2", "", { "dependencies": { "@noble/hashes": "1.7.2" } }, "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g=="], + "@pimlico/alto/viem/@noble/hashes": ["@noble/hashes@1.7.2", "", {}, "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ=="], - "@reown/appkit-common/viem/@noble/hashes": ["@noble/hashes@1.7.2", "", {}, "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ=="], + "@pimlico/alto/viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], - "@reown/appkit-common/viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], + "@pimlico/alto/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=="], - "@reown/appkit-common/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=="], + "@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=="], "@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=="], @@ -1895,40 +1889,16 @@ "@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=="], - "@reown/appkit-controllers/viem/@noble/curves": ["@noble/curves@1.8.2", "", { "dependencies": { "@noble/hashes": "1.7.2" } }, "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g=="], - - "@reown/appkit-controllers/viem/@noble/hashes": ["@noble/hashes@1.7.2", "", {}, "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ=="], - - "@reown/appkit-controllers/viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], - - "@reown/appkit-controllers/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=="], - "@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=="], "@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=="], "@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=="], - "@reown/appkit-utils/viem/@noble/curves": ["@noble/curves@1.8.2", "", { "dependencies": { "@noble/hashes": "1.7.2" } }, "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g=="], - - "@reown/appkit-utils/viem/@noble/hashes": ["@noble/hashes@1.7.2", "", {}, "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ=="], - - "@reown/appkit-utils/viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], - - "@reown/appkit-utils/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=="], - "@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=="], "@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=="], - "@reown/appkit/viem/@noble/curves": ["@noble/curves@1.8.2", "", { "dependencies": { "@noble/hashes": "1.7.2" } }, "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g=="], - - "@reown/appkit/viem/@noble/hashes": ["@noble/hashes@1.7.2", "", {}, "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ=="], - - "@reown/appkit/viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], - - "@reown/appkit/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=="], - "@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=="], "@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=="], diff --git a/package.json b/package.json index 70d4eb98..d2634b6a 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "tsc-alias": "^1.8.8", "tslib": "^2.6.2", "typescript": "^5.2.2", - "viem": "2.29.0", + "viem": "2.28.1", "vite": "^5.4.10", "vitest": "^2.1.5", "wagmi": "^2.15.1" From 09fcfa168ae43b817638bfa29a6133adeac35132 Mon Sep 17 00:00:00 2001 From: mouseless0x <97399882+mouseless0x@users.noreply.github.com> Date: Wed, 7 May 2025 00:30:39 +0000 Subject: [PATCH 42/55] chore: format --- bun.lockb | Bin 350088 -> 349944 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bun.lockb b/bun.lockb index cefff4e6ad615589d9f1d1ad933f41b549d54b8b..b48af2f9b0d9576fab2cf6165ca94f776e3b0a80 100755 GIT binary patch delta 29689 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σ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 delta 30241 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 From 3104580aeb100240afe5bd7f4d68acf7a0353e9e Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Wed, 7 May 2025 13:32:52 +0100 Subject: [PATCH 43/55] update bunlock --- bun.lock | 18 ++++-------------- bun.lockb | Bin 349944 -> 348144 bytes 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/bun.lock b/bun.lock index d5fe64bd..e413d48c 100644 --- a/bun.lock +++ b/bun.lock @@ -53,7 +53,7 @@ }, "packages/permissionless": { "name": "permissionless", - "version": "0.2.44", + "version": "0.2.45", "peerDependencies": { "ox": "0.6.7", "viem": "^2.28.1", @@ -565,9 +565,9 @@ "@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.8.0", "", { "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.0", "typescript": ">=5.0.4", "viem": "2.x" }, "optionalPeers": ["typescript"] }, "sha512-aCibsK09vHRQnbH1FbaMV/bl5JW24v0QG2vBapUWctWGh6qmrE0CM43MrvN733ffWCsMn7OBQU5OCxLdkgk6xA=="], + "@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.17.0", "", { "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-MykiuU0rZUKtgVBctnOM+53zJmtodTD7rA97e7lLhXUevZcm60hUSl1BcgEIDd2wVOLEi2Xfrx641xpjruZvSA=="], + "@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.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=="], @@ -1489,7 +1489,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.15.1", "", { "dependencies": { "@wagmi/connectors": "5.8.0", "@wagmi/core": "2.17.0", "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-eLru4Z9Ips3xI7oFNNIYYLQOCpcuKRWtRDJDFz/C6i5oH9xM6vg/hWHCZwfdyovYAtAKPZoPyORzVHqC2YSLEQ=="], + "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"], @@ -1671,8 +1671,6 @@ "@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/alto/viem": ["viem@2.29.0", "", { "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-N6GeIuuay/spDyw+5FbSuNIkVN0da+jGOjdlC0bdatIN+N0jtOf9Zfj0pbXgpIJGwnM9ocxzTRt0HZVbHBdL2Q=="], - "@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=="], @@ -1873,14 +1871,6 @@ "@pimlico/alto/fastify/secure-json-parse": ["secure-json-parse@2.7.0", "", {}, "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="], - "@pimlico/alto/viem/@noble/curves": ["@noble/curves@1.8.2", "", { "dependencies": { "@noble/hashes": "1.7.2" } }, "sha512-vnI7V6lFNe0tLAuJMu+2sX+FcL14TaCWy1qiczg1VwRmPrpQCdq5ESXQMqUc2tluRNf6irBXrWbl1mGN8uaU/g=="], - - "@pimlico/alto/viem/@noble/hashes": ["@noble/hashes@1.7.2", "", {}, "sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ=="], - - "@pimlico/alto/viem/abitype": ["abitype@1.0.8", "", { "peerDependencies": { "typescript": ">=5.0.4", "zod": "^3 >=3.22.0" }, "optionalPeers": ["typescript", "zod"] }, "sha512-ZeiI6h3GnW06uYDLx0etQtX/p8E24UaHHBj57RSjK7YBFe7iuVn07EDpOeP451D06sF27VOz9JJPlIKJmXgkEg=="], - - "@pimlico/alto/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=="], - "@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=="], "@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=="], diff --git a/bun.lockb b/bun.lockb index b48af2f9b0d9576fab2cf6165ca94f776e3b0a80..417ed38a97142083afd07b4eeb0c875a722b9be4 100755 GIT binary patch delta 81663 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

6sf^`DJ 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 delta 82752 zcmeFa2UJu^*EZVS($WV-MMniA=7<@)6>I@f5k39*3&TFF7d)L=v$10J<7XT_Wq za~LCviaF<;YQ9(Xl3QGvuShoKge1>=j)u#FRFaM64pztppP-#ud>;t3D zpO%hIs8uJ6ja4P{&x+h5p8=`AOF#@b`3R6ky&XvHtpbwA&IeLI=`xN7 z()x`6(lYcxCe_cY&X?yp5LwBGfaDK<^LTUeP-IX8d*MaY@M>_HfVOf&^T25!Q)CEf)+lg*F(3trBcVBFNv{Lk!{ZCM>#T&%SNM4SOKtyL#M3?g7bRV`77%g5l9e zn(&$34Wt1j8Dc}J-OEk+QXd7HY3g<$L2JAQSQI!CNEM1ZbKhDh>!OU+upwzg_CQ*? zVn8Zyqvbe3E*D~o40cM0R^&pbaz|y1b_$OQGQ=B!;&AKI=DIE9JpiO~+krIm>Xx$M zjdhWeZa!sFl>@D1!JGN5^D9&_&K`OMaLB!%U`N{Baw(-JAW^NywhX`~N;T*&eA- zv;n6nkCQtJ?#-!6n0O8u zWMOndL^O?5-X6)F`|}2O18Kw-=bE7825*K=BTS4p;^LrC-16rJMw>#CsGU~Gr!ezm z0C!@GQ(BhV{5pU)WT_ArW{?8mU}I2_VX#7xJCIu*7%9n$A*Ohoxe7%nE)q2LCxK*m zeISi&w}I;p;HAJ{1#tu8OrfSooZ

a@M0LhkEsrpTcY$2g%Wf_%I_Z{)!CR4d;Ng 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 MqPqgS=CIEH0M8KTp#T5? From ca5c8b1c2b59942082f7bede82aae0812aa9fa5c Mon Sep 17 00:00:00 2001 From: mouseless0x <97399882+mouseless0x@users.noreply.github.com> Date: Wed, 7 May 2025 12:33:25 +0000 Subject: [PATCH 44/55] chore: format --- bun.lockb | Bin 348144 -> 349256 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bun.lockb b/bun.lockb index 417ed38a97142083afd07b4eeb0c875a722b9be4..afb7aaab8e283533dd090ccd693459633b4cd833 100755 GIT binary patch delta 79227 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 z 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 From 5819c9b32e8224b2cad345289482ef5e06cd770b Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Wed, 7 May 2025 13:39:27 +0100 Subject: [PATCH 45/55] update cors + fastify --- bun.lock | 20 ++++++++++---------- packages/mock-paymaster/package.json | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/bun.lock b/bun.lock index e413d48c..4c73ead5 100644 --- a/bun.lock +++ b/bun.lock @@ -42,8 +42,8 @@ "name": "@pimlico/mock-paymaster", "version": "0.0.2", "dependencies": { - "@fastify/cors": "^11.0.0", - "fastify": "^5.2.1", + "@fastify/cors": "^11.0.1", + "fastify": "^5.3.2", "zod": "^3.24.2", }, "peerDependencies": { @@ -239,7 +239,7 @@ "@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/cors": ["@fastify/cors@11.0.1", "", { "dependencies": { "fastify-plugin": "^5.0.0", "toad-cache": "^3.7.0" } }, "sha512-dmZaE7M1f4SM8ZZuk5RhSsDJ+ezTgI7v3HHRj8Ow9CneczsPLZV6+2j2uwdaSLn8zhTv6QV0F4ZRcqdalGx1pQ=="], "@fastify/error": ["@fastify/error@4.0.0", "", {}, "sha512-OO/SA8As24JtT1usTUTKgGH7uLvhfwZPwlptRi2Dp5P4KKmJI3gvsZ8MIHnNwDs4sLf/aai5LzTyl66xr7qMxA=="], @@ -889,7 +889,7 @@ "fast-uri": ["fast-uri@3.0.6", "", {}, "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw=="], - "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@5.3.2", "", { "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": "^5.0.0", "rfdc": "^1.3.1", "secure-json-parse": "^4.0.0", "semver": "^7.6.0", "toad-cache": "^3.7.0" } }, "sha512-AIPqBgtqBAwkOkrnwesEE+dOyU30dQ4kh7udxeGVR05CRGwubZx+p2H8P0C4cRnQT0+EPK4VGea2DTL2RtWttg=="], "fastify-plugin": ["fastify-plugin@5.0.1", "", {}, "sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ=="], @@ -1129,8 +1129,6 @@ "mkdirp": ["mkdirp@3.0.1", "", { "bin": { "mkdirp": "dist/cjs/src/bin.js" } }, "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg=="], - "mnemonist": ["mnemonist@0.40.0", "", { "dependencies": { "obliterator": "^2.0.4" } }, "sha512-kdd8AFNig2AD5Rkih7EPCXhu/iMvwevQFX/uEiGhZyPZi7fHqOoF4V4kHLpCfysxXMgQ4B52kdPMCwARshKvEg=="], - "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=="], @@ -1169,8 +1167,6 @@ "obj-multiplex": ["obj-multiplex@1.0.0", "", { "dependencies": { "end-of-stream": "^1.4.0", "once": "^1.4.0", "readable-stream": "^2.3.3" } }, "sha512-0GNJAOsHoBHeNTvl5Vt6IWnpUEcc3uSRxzBri7EDyIcMgYvnY2JL2qdeV5zTMjWQX5OHcD5amcW2HFfDh0gjIA=="], - "obliterator": ["obliterator@2.0.5", "", {}, "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw=="], - "ofetch": ["ofetch@1.4.1", "", { "dependencies": { "destr": "^2.0.3", "node-fetch-native": "^1.6.4", "ufo": "^1.5.4" } }, "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw=="], "on-exit-leak-free": ["on-exit-leak-free@2.1.2", "", {}, "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA=="], @@ -1255,7 +1251,7 @@ "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@5.0.0", "", {}, "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA=="], "prom-client": ["prom-client@14.2.0", "", { "dependencies": { "tdigest": "^0.1.1" } }, "sha512-sF308EhTenb/pDRPakm+WgiN+VdM/T1RaHj1x+MvAuT8UiQP8JmOEbxVqtkbfR4LrvOg5n7ic01kRBDGXjYikA=="], @@ -1341,7 +1337,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@4.0.0", "", {}, "sha512-dxtLJO6sc35jWidmLxo7ij+Eg48PM/kleBsxpC8QJE0qJICe+KawkDQmvCMZUr9u7WKVHgMW6vy3fQ7zMiFZMA=="], "semver": ["semver@7.7.1", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="], @@ -1757,6 +1753,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=="], + "light-my-request/process-warning": ["process-warning@4.0.1", "", {}, "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q=="], + "lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], @@ -1921,6 +1919,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=="], diff --git a/packages/mock-paymaster/package.json b/packages/mock-paymaster/package.json index 8a9cd444..9c1d1dc0 100644 --- a/packages/mock-paymaster/package.json +++ b/packages/mock-paymaster/package.json @@ -25,8 +25,8 @@ "prool": "^0.0.23" }, "dependencies": { - "@fastify/cors": "^11.0.0", - "fastify": "^5.2.1", + "@fastify/cors": "^11.0.1", + "fastify": "^5.3.2", "zod": "^3.24.2" } } From cdb2e9355e86094c74aa57e7990c4822525672f0 Mon Sep 17 00:00:00 2001 From: mouseless0x <97399882+mouseless0x@users.noreply.github.com> Date: Wed, 7 May 2025 12:39:59 +0000 Subject: [PATCH 46/55] chore: format --- bun.lockb | Bin 349256 -> 348904 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bun.lockb b/bun.lockb index afb7aaab8e283533dd090ccd693459633b4cd833..4a5b21bdcb1e1ae7ba33156726d6b6830d89a57e 100755 GIT binary patch delta 8794 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

4fT>2E!wV3k!R4U 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 AtN;K2 From c9756a0d28990863b06be0a1009686982c60f4d9 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Wed, 7 May 2025 13:56:03 +0100 Subject: [PATCH 47/55] downgrade cors --- bun.lock | 118 +++++++-------------------- packages/mock-paymaster/package.json | 4 +- 2 files changed, 32 insertions(+), 90 deletions(-) diff --git a/bun.lock b/bun.lock index 4c73ead5..c9ca9dbb 100644 --- a/bun.lock +++ b/bun.lock @@ -42,8 +42,8 @@ "name": "@pimlico/mock-paymaster", "version": "0.0.2", "dependencies": { - "@fastify/cors": "^11.0.1", - "fastify": "^5.3.2", + "@fastify/cors": "^8.5.0", + "fastify": "^4.28.1", "zod": "^3.24.2", }, "peerDependencies": { @@ -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/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/cors": ["@fastify/cors@11.0.1", "", { "dependencies": { "fastify-plugin": "^5.0.0", "toad-cache": "^3.7.0" } }, "sha512-dmZaE7M1f4SM8ZZuk5RhSsDJ+ezTgI7v3HHRj8Ow9CneczsPLZV6+2j2uwdaSLn8zhTv6QV0F4ZRcqdalGx1pQ=="], + "@fastify/cors": ["@fastify/cors@8.5.0", "", { "dependencies": { "fastify-plugin": "^4.0.0", "mnemonist": "0.39.6" } }, "sha512-/oZ1QSb02XjP0IK1U0IXktEsw/dUBTxJOW7IpIeO8c/tNalw/KjoNSJv1Sf6eqoBPO+TDGkifq6ynFK3v68HFQ=="], - "@fastify/error": ["@fastify/error@4.0.0", "", {}, "sha512-OO/SA8As24JtT1usTUTKgGH7uLvhfwZPwlptRi2Dp5P4KKmJI3gvsZ8MIHnNwDs4sLf/aai5LzTyl66xr7qMxA=="], + "@fastify/error": ["@fastify/error@3.4.1", "", {}, "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ=="], - "@fastify/fast-json-stringify-compiler": ["@fastify/fast-json-stringify-compiler@5.0.2", "", { "dependencies": { "fast-json-stringify": "^6.0.0" } }, "sha512-YdR7gqlLg1xZAQa+SX4sMNzQHY5pC54fu9oC5aYSUqBhyn6fkLkrdtKlpVdCNPlwuUuXA1PjFTEmvMF6ZVXVGw=="], + "@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/forwarded": ["@fastify/forwarded@3.0.0", "", {}, "sha512-kJExsp4JCms7ipzg7SJ3y8DwmePaELHxKYtg+tZow+k0znUTf3cb+npgyqm8+ATZOdmfgfydIebPDWM172wfyA=="], - - "@fastify/merge-json-schemas": ["@fastify/merge-json-schemas@0.2.1", "", { "dependencies": { "dequal": "^2.0.3" } }, "sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A=="], - - "@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=="], @@ -627,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=="], @@ -649,7 +645,7 @@ "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=="], @@ -735,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=="], @@ -779,8 +775,6 @@ "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=="], @@ -879,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=="], @@ -887,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.3.2", "", { "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": "^5.0.0", "rfdc": "^1.3.1", "secure-json-parse": "^4.0.0", "semver": "^7.6.0", "toad-cache": "^3.7.0" } }, "sha512-AIPqBgtqBAwkOkrnwesEE+dOyU30dQ4kh7udxeGVR05CRGwubZx+p2H8P0C4cRnQT0+EPK4VGea2DTL2RtWttg=="], + "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=="], @@ -903,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,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=="], @@ -1051,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=="], @@ -1065,7 +1059,7 @@ "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=="], @@ -1129,6 +1123,8 @@ "mkdirp": ["mkdirp@3.0.1", "", { "bin": { "mkdirp": "dist/cjs/src/bin.js" } }, "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg=="], + "mnemonist": ["mnemonist@0.39.6", "", { "dependencies": { "obliterator": "^2.0.1" } }, "sha512-A/0v5Z59y63US00cRSLiloEIw3t5G+MiKz4BhX21FI+YBJXBOGW0ohFxTxO08dsOYlzxo87T7vGfZKYp2bcAWA=="], + "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=="], @@ -1167,6 +1163,8 @@ "obj-multiplex": ["obj-multiplex@1.0.0", "", { "dependencies": { "end-of-stream": "^1.4.0", "once": "^1.4.0", "readable-stream": "^2.3.3" } }, "sha512-0GNJAOsHoBHeNTvl5Vt6IWnpUEcc3uSRxzBri7EDyIcMgYvnY2JL2qdeV5zTMjWQX5OHcD5amcW2HFfDh0gjIA=="], + "obliterator": ["obliterator@2.0.5", "", {}, "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw=="], + "ofetch": ["ofetch@1.4.1", "", { "dependencies": { "destr": "^2.0.3", "node-fetch-native": "^1.6.4", "ufo": "^1.5.4" } }, "sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw=="], "on-exit-leak-free": ["on-exit-leak-free@2.1.2", "", {}, "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA=="], @@ -1251,7 +1249,7 @@ "process-nextick-args": ["process-nextick-args@2.0.1", "", {}, "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="], - "process-warning": ["process-warning@5.0.0", "", {}, "sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA=="], + "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=="], @@ -1313,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=="], @@ -1329,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=="], @@ -1337,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@4.0.0", "", {}, "sha512-dxtLJO6sc35jWidmLxo7ij+Eg48PM/kleBsxpC8QJE0qJICe+KawkDQmvCMZUr9u7WKVHgMW6vy3fQ7zMiFZMA=="], + "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=="], @@ -1565,8 +1563,6 @@ "@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=="], @@ -1665,8 +1661,6 @@ "@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=="], @@ -1715,6 +1709,8 @@ "@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=="], @@ -1743,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=="], @@ -1753,8 +1751,6 @@ "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=="], - "light-my-request/process-warning": ["process-warning@4.0.1", "", {}, "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q=="], - "lru-cache/yallist": ["yallist@4.0.0", "", {}, "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="], "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], @@ -1769,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=="], @@ -1849,26 +1837,6 @@ "@opentelemetry/sdk-trace-node/@opentelemetry/sdk-trace-base/@opentelemetry/semantic-conventions": ["@opentelemetry/semantic-conventions@1.25.1", "", {}, "sha512-ZDjMJJQRlyk8A1KZFCc+bCbsyrn1wTwdNt56F7twdfUfnHUZUq77/WfONCj8p72NZOyP7pNTdUWSTYC3GTbuuQ=="], - "@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=="], - - "@pimlico/alto/fastify/@fastify/error": ["@fastify/error@3.4.1", "", {}, "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ=="], - - "@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=="], - - "@pimlico/alto/fastify/avvio": ["avvio@8.4.0", "", { "dependencies": { "@fastify/error": "^3.3.0", "fastq": "^1.17.1" } }, "sha512-CDSwaxINFy59iNwhYnkvALBwZiTydGkOecZyPkqBpABYR1KqGEsET0VOOYDwtleZSUIdeY36DC2bSZ24CO1igA=="], - - "@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=="], - - "@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=="], - - "@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=="], - - "@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=="], - - "@pimlico/alto/fastify/process-warning": ["process-warning@3.0.0", "", {}, "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ=="], - - "@pimlico/alto/fastify/secure-json-parse": ["secure-json-parse@2.7.0", "", {}, "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw=="], - "@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=="], "@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=="], @@ -1993,30 +1961,6 @@ "@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=="], - - "@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=="], - - "@pimlico/alto/fastify/fast-json-stringify/fast-uri": ["fast-uri@2.4.0", "", {}, "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA=="], - - "@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=="], - - "@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=="], - - "@pimlico/alto/fastify/light-my-request/cookie": ["cookie@0.7.2", "", {}, "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w=="], - - "@pimlico/alto/fastify/pino/pino-abstract-transport": ["pino-abstract-transport@2.0.0", "", { "dependencies": { "split2": "^4.0.0" } }, "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw=="], - - "@pimlico/alto/fastify/pino/pino-std-serializers": ["pino-std-serializers@7.0.0", "", {}, "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA=="], - - "@pimlico/alto/fastify/pino/process-warning": ["process-warning@4.0.1", "", {}, "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q=="], - - "@pimlico/alto/fastify/pino/sonic-boom": ["sonic-boom@4.2.0", "", { "dependencies": { "atomic-sleep": "^1.0.0" } }, "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww=="], - - "@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/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=="], "@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=="], @@ -2037,8 +1981,6 @@ "tsc-alias/chokidar/readdirp/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], - "@pimlico/alto/fastify/find-my-way/safe-regex2/ret": ["ret@0.4.3", "", {}, "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ=="], - "@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=="], "@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=="], diff --git a/packages/mock-paymaster/package.json b/packages/mock-paymaster/package.json index 9c1d1dc0..b1849852 100644 --- a/packages/mock-paymaster/package.json +++ b/packages/mock-paymaster/package.json @@ -25,8 +25,8 @@ "prool": "^0.0.23" }, "dependencies": { - "@fastify/cors": "^11.0.1", - "fastify": "^5.3.2", + "@fastify/cors": "^8.5.0", + "fastify": "^4.28.1", "zod": "^3.24.2" } } From d6532d44c8497b1f24dab278f0bc62dca96364d5 Mon Sep 17 00:00:00 2001 From: mouseless0x <97399882+mouseless0x@users.noreply.github.com> Date: Wed, 7 May 2025 12:56:27 +0000 Subject: [PATCH 48/55] chore: format --- bun.lockb | Bin 348904 -> 341696 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/bun.lockb b/bun.lockb index 4a5b21bdcb1e1ae7ba33156726d6b6830d89a57e..1acb1905ea62df20a2c641ab3c81311d93457fbd 100755 GIT binary patch delta 10065 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 delta 13398 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 H{QAEE?@QZP From 5c207118d281ce720682c0ffb10a392e4dced739 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Wed, 7 May 2025 14:55:04 +0100 Subject: [PATCH 49/55] fix test import --- ...pareUserOperationForErc20Paymaster.test.ts | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts b/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts index b63a2070..18ad195c 100644 --- a/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts +++ b/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts @@ -7,7 +7,7 @@ import { import { foundry } from "viem/chains" import { describe, expect } from "vitest" import { - ERC20_ADDRESS, + erc20Address, sudoMintTokens, tokenBalanceOf } from "../../../../mock-paymaster/helpers/erc20-utils.ts" @@ -16,8 +16,8 @@ import { getCoreSmartAccounts, getPublicClient } from "../../../../permissionless-test/src/utils" -import { createSmartAccountClient } from "../../../clients/createSmartAccountClient.ts" -import { createPimlicoClient } from "../../../clients/pimlico.ts" +import { createSmartAccountClient } from "../../../clients/createSmartAccountClient" +import { createPimlicoClient } from "../../../clients/pimlico" import { prepareUserOperationForErc20Paymaster } from "./prepareUserOperationForErc20Paymaster.ts" describe.each(getCoreSmartAccounts())( @@ -86,7 +86,7 @@ describe.each(getCoreSmartAccounts())( } ], paymasterContext: { - token: ERC20_ADDRESS + token: erc20Address } }) @@ -173,7 +173,7 @@ describe.each(getCoreSmartAccounts())( } ], paymasterContext: { - token: ERC20_ADDRESS + token: erc20Address } }) @@ -256,7 +256,7 @@ describe.each(getCoreSmartAccounts())( } ], paymasterContext: { - token: ERC20_ADDRESS + token: erc20Address } }) @@ -344,7 +344,7 @@ describe.each(getCoreSmartAccounts())( } ], paymasterContext: { - token: ERC20_ADDRESS + token: erc20Address } }) @@ -432,7 +432,7 @@ describe.each(getCoreSmartAccounts())( } ], paymasterContext: { - token: ERC20_ADDRESS + token: erc20Address } }) @@ -515,7 +515,7 @@ describe.each(getCoreSmartAccounts())( } ]), paymasterContext: { - token: ERC20_ADDRESS + token: erc20Address } }) @@ -602,7 +602,7 @@ describe.each(getCoreSmartAccounts())( } ]), paymasterContext: { - token: ERC20_ADDRESS + token: erc20Address } }) @@ -690,7 +690,7 @@ describe.each(getCoreSmartAccounts())( } ]), paymasterContext: { - token: ERC20_ADDRESS + token: erc20Address } }) From 63b894136df56738721481088baefdd3b4134f6f Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Thu, 8 May 2025 00:36:04 +0100 Subject: [PATCH 50/55] fix test --- package.json | 3 +-- .../prepareUserOperationForErc20Paymaster.test.ts | 10 +++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index d2634b6a..557ea6a6 100644 --- a/package.json +++ b/package.json @@ -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/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts b/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts index 18ad195c..33e87ce4 100644 --- a/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts +++ b/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts @@ -10,15 +10,15 @@ import { 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" import { createPimlicoClient } from "../../../clients/pimlico" -import { prepareUserOperationForErc20Paymaster } from "./prepareUserOperationForErc20Paymaster.ts" +import { prepareUserOperationForErc20Paymaster } from "./prepareUserOperationForErc20Paymaster" describe.each(getCoreSmartAccounts())( "prepareUserOperationForErc20Paymaster $name", @@ -370,7 +370,7 @@ describe.each(getCoreSmartAccounts())( } ) - testWithRpc.skipIf(!supportsEntryPointV07)( + testWithRpc.skipIf(!supportsEntryPointV08)( "prepareUserOperationForErc20Paymaster_v08 (balanceOverride enabled)", async ({ rpc }) => { const { anvilRpc } = rpc @@ -389,7 +389,7 @@ describe.each(getCoreSmartAccounts())( const pimlicoClient = createPimlicoClient({ transport: http(rpc.paymasterRpc), entryPoint: { - address: entryPoint07Address, + address: entryPoint08Address, version: "0.8" } }) From 4437a899f836a08f2b9c63c8bea5b9e9f0251d7a Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Thu, 8 May 2025 01:15:47 +0100 Subject: [PATCH 51/55] fix simple account encode/decode --- .../accounts/simple/toSimpleSmartAccount.ts | 355 +++++++++--------- 1 file changed, 183 insertions(+), 172 deletions(-) diff --git a/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts b/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts index 5a566177..a8ce9807 100644 --- a/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts +++ b/packages/permissionless/accounts/simple/toSimpleSmartAccount.ts @@ -211,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: 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: [ - { - inputs: [ - { - internalType: "address[]", - name: "dest", - type: "address[]" - }, - { - internalType: "bytes[]", - name: "func", - type: "bytes[]" - } - ], - name: "executeBatch", - outputs: [], - stateMutability: "nonpayable", - type: "function" - } - ], + 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") ] }) @@ -281,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) { @@ -495,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 From 8b53c3040158978fece9e16edede233e6a53b348 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Thu, 8 May 2025 05:17:29 +0100 Subject: [PATCH 52/55] fix --- packages/mock-paymaster/relay.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/mock-paymaster/relay.ts b/packages/mock-paymaster/relay.ts index 3353971c..6dda0703 100644 --- a/packages/mock-paymaster/relay.ts +++ b/packages/mock-paymaster/relay.ts @@ -49,6 +49,7 @@ import { } from "./singletonPaymasters.js" const handlePmSponsor = async ({ + entryPoint, userOperation, paymasterMode, bundler, @@ -57,6 +58,7 @@ const handlePmSponsor = async ({ paymasterSigner, estimateGas }: { + entryPoint: Address userOperation: UserOperation paymasterMode: PaymasterMode bundler: BundlerClient @@ -79,7 +81,8 @@ const handlePmSponsor = async ({ if (estimateGas) { try { const gasEstimates = await bundler.estimateUserOperationGas({ - ...op + ...op, + entryPointAddress: entryPoint }) op = { @@ -184,6 +187,7 @@ const handleMethod = async ({ validateEntryPoint(entryPoint) return await handlePmSponsor({ + entryPoint, userOperation, paymasterMode: { mode: "verifying" }, bundler, From 432421dfe6697b7b0c7afbe176da8c0d1e5e3767 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Thu, 8 May 2025 05:21:02 +0100 Subject: [PATCH 53/55] fix --- packages/mock-paymaster/relay.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/mock-paymaster/relay.ts b/packages/mock-paymaster/relay.ts index 6dda0703..8941d93d 100644 --- a/packages/mock-paymaster/relay.ts +++ b/packages/mock-paymaster/relay.ts @@ -67,7 +67,7 @@ const handlePmSponsor = async ({ paymasterSigner: WalletClient estimateGas: boolean }) => { - const is06 = paymaster === entryPoint06Address + const is06 = entryPoint === entryPoint06Address let op = { ...userOperation, From 4b088a68f0a71d32c564dba589a37f3e61beae1e Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Thu, 8 May 2025 13:36:36 +0100 Subject: [PATCH 54/55] fix test --- ...pareUserOperationForErc20Paymaster.test.ts | 52 ++++++++----------- 1 file changed, 22 insertions(+), 30 deletions(-) diff --git a/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts b/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts index 33e87ce4..aa99fa67 100644 --- a/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts +++ b/packages/permissionless/experimental/pimlico/utils/prepareUserOperationForErc20Paymaster.test.ts @@ -29,7 +29,7 @@ describe.each(getCoreSmartAccounts())( supportsEntryPointV08, name }) => { - testWithRpc.skipIf(!supportsEntryPointV06)( + testWithRpc.skipIf(!supportsEntryPointV06 || name === "Kernel 0.2.1")( "prepareUserOperationForErc20Paymaster_v06", async ({ rpc }) => { const { anvilRpc } = rpc @@ -98,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 } ) @@ -458,7 +454,7 @@ describe.each(getCoreSmartAccounts())( } ) - testWithRpc.skipIf(!supportsEntryPointV06)( + testWithRpc.skipIf(!supportsEntryPointV06 || name === "Kernel 0.2.1")( "prepareUserOperationForErc20Paymaster_v06", async ({ rpc }) => { const { anvilRpc } = rpc @@ -527,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 } ) From 719c6a94564f48f42603af0fdb77ee0ea1b559e5 Mon Sep 17 00:00:00 2001 From: mouseless <97399882+mouseless-eth@users.noreply.github.com> Date: Thu, 8 May 2025 18:05:39 +0100 Subject: [PATCH 55/55] increase timeouts --- .github/workflows/on-pull-request.yml | 2 +- .github/workflows/on-push-to-main.yml | 4 ++-- .github/workflows/verify.yml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) 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