From 397bd07b5010a35f3ba7328a6544e33fe56ed8f4 Mon Sep 17 00:00:00 2001 From: WhiteOakKong Date: Mon, 30 Oct 2023 10:53:01 -0500 Subject: [PATCH 1/3] add yarn aabenchmark --- .gitmodules | 6 ++ foundry.toml | 3 + package.json | 3 +- .../utils/AABenchmarkArtifacts.sol | 14 ++++ .../smart-wallet/utils/AABenchmarkPrepare.sol | 82 +++++++++++++++++++ .../smart-wallet/utils/AABenchmarkTest.t.sol | 44 ++++++++++ 6 files changed, 151 insertions(+), 1 deletion(-) create mode 100644 src/test/smart-wallet/utils/AABenchmarkArtifacts.sol create mode 100644 src/test/smart-wallet/utils/AABenchmarkPrepare.sol create mode 100644 src/test/smart-wallet/utils/AABenchmarkTest.t.sol diff --git a/.gitmodules b/.gitmodules index 6e01eb969..5839cb25a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -24,3 +24,9 @@ [submodule "lib/dynamic-contracts"] path = lib/dynamic-contracts url = https://github.com/thirdweb-dev/dynamic-contracts +[submodule "lib/aa-benchmark"] + path = lib/aa-benchmark + url = https://github.com/zerodevapp/aa-benchmark +[submodule "lib/solady"] + path = lib/solady + url = https://github.com/Vectorized/solady diff --git a/foundry.toml b/foundry.toml index aa51c2565..eb676173f 100644 --- a/foundry.toml +++ b/foundry.toml @@ -39,7 +39,10 @@ remappings = [ 'erc721a/=lib/ERC721A/', '@thirdweb-dev/dynamic-contracts/=lib/dynamic-contracts/', 'lib/sstore2=lib/dynamic-contracts/lib/sstore2/' + 'aa-benchmark/=lib/aa-benchmark/', + 'solady/=lib/solady/src/' ] +fs_permissions = [{ access = "read-write", path = "./src/test/smart-wallet/utils"}] src = 'contracts' test = 'src/test' verbosity = 0 diff --git a/package.json b/package.json index 2cc66d2a6..01dce3054 100644 --- a/package.json +++ b/package.json @@ -59,7 +59,8 @@ "forge:build": "forge build", "forge:test": "forge test", "gas": "forge test --mc Benchmark --gas-report > gasreport.txt", - "forge:snapshot": "forge snapshot --check" + "forge:snapshot": "forge snapshot --check", + "aabenchmark": "forge test --mc AABenchmarkPrepare && forge test --mc ProfileThirdwebAccount -vvv" }, "dependencies": {} } diff --git a/src/test/smart-wallet/utils/AABenchmarkArtifacts.sol b/src/test/smart-wallet/utils/AABenchmarkArtifacts.sol new file mode 100644 index 000000000..c63e61855 --- /dev/null +++ b/src/test/smart-wallet/utils/AABenchmarkArtifacts.sol @@ -0,0 +1,14 @@ + +pragma solidity ^0.8.0; +interface ThirdwebAccountFactory { + function createAccount(address _admin, bytes calldata _data) external returns (address); + function getAddress(address _adminSigner, bytes calldata _data) external view returns (address); +} +interface ThirdwebAccount { + function execute(address _target, uint256 _value, bytes calldata _calldata) external; +} +address constant THIRDWEB_ACCOUNT_FACTORY_ADDRESS = 0x2e234DAe75C793f67A35089C9d99245E1C58470b; +address constant THIRDWEB_ACCOUNT_IMPL_ADDRESS = 0xffD4505B3452Dc22f8473616d50503bA9E1710Ac; +bytes constant THIRDWEB_ACCOUNT_FACTORY_BYTECODE = hex"608060405234801561001057600080fd5b50600436106101125760003560e01c806308e93d0a146101175780630db33003146101355780630e6254fd1461014a57806311464fbe1461015d578063248a9ca3146101915780632f2ff15d146101b257806336568abe146101c557806367793cc6146101d85780638878ed33146101eb5780639010d07c146101fe57806391d1485414610211578063938e3d7b146102345780639ddbb9d814610247578063a217fddf1461025a578063a32fa5b314610262578063a65d69d414610275578063ac9650d81461029c578063c3c5a547146102bc578063ca15c873146102cf578063d547741f146102e2578063d8fd8f44146102f5578063e8a3d48514610308575b600080fd5b61011f61031d565b60405161012c91906117d7565b60405180910390f35b6101486101433660046118eb565b61032e565b005b61011f610158366004611948565b6103d1565b6101847f000000000000000000000000ffd4505b3452dc22f8473616d50503ba9e1710ac81565b60405161012c9190611963565b6101a461019f366004611977565b6103fb565b60405190815260200161012c565b6101486101c0366004611990565b610419565b6101486101d3366004611990565b6104c3565b6101486101e63660046119bc565b610522565b6101846101f9366004611a09565b610576565b61018461020c366004611a8b565b6105f0565b61022461021f366004611990565b6106ff565b604051901515815260200161012c565b610148610242366004611aad565b610733565b6101486102553660046118eb565b610784565b6101a4600081565b610224610270366004611990565b61081d565b6101847f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d278981565b6102af6102aa366004611afd565b610880565b60405161012c9190611bcd565b6102246102ca366004611948565b610974565b6101a46102dd366004611977565b610980565b6101486102f0366004611990565b610a1d565b610184610303366004611a09565b610a28565b610310610b73565b60405161012c9190611c2f565b60606103296000610cfa565b905090565b3361033a818484610d07565b61035f5760405162461bcd60e51b815260040161035690611c42565b60405180910390fd5b6001600160a01b03841660009081526002602052604081206103819083610d5b565b905080156103ca57846001600160a01b0316826001600160a01b03167f98d1ebbe00ae92a5de96a0f49742a8afa89f42363592bc2e7cfaaed68b45e7a660405160405180910390a35b5050505050565b6001600160a01b03811660009081526002602052604090206060906103f590610cfa565b92915050565b6000610405610d70565b600092835260010160205250604090205490565b61043d610424610d70565b6000848152600191909101602052604090205433610d7a565b610445610d70565b6000838152602091825260408082206001600160a01b0385168352909252205460ff16156104b55760405162461bcd60e51b815260206004820152601d60248201527f43616e206f6e6c79206772616e7420746f206e6f6e20686f6c646572730000006044820152606401610356565b6104bf8282610dff565b5050565b336001600160a01b038216146105185760405162461bcd60e51b815260206004820152601a60248201527921b0b71037b7363c903932b737bab731b2903337b91039b2b63360311b6044820152606401610356565b6104bf8282610e13565b3361052e818484610d07565b61054a5760405162461bcd60e51b815260040161035690611c42565b610555600082610e27565b6105715760405162461bcd60e51b815260040161035690611c79565b505050565b6000806105b98585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e3c92505050565b90506105e57f000000000000000000000000ffd4505b3452dc22f8473616d50503ba9e1710ac82610e6d565b9150505b9392505050565b6000806105fb610ecd565b600085815260209190915260408120549150805b828110156106f6576000610621610ecd565b60008881526020918252604080822085835260010190925220546001600160a01b03161461069a578482141561068857610659610ecd565b600087815260209182526040808220938252600190930190915220546001600160a01b031692506103f5915050565b610693600183611cd9565b91506106e4565b6106a58660006106ff565b80156106d157506106b4610ecd565b600087815260209182526040808220828052600201909252205481145b156106e4576106e1600183611cd9565b91505b6106ef600182611cd9565b905061060f565b50505092915050565b6000610709610d70565b6000938452602090815260408085206001600160a01b039490941685529290525090205460ff1690565b61073b610ed7565b6107785760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610356565b61078181610ee3565b50565b33610790818484610d07565b6107ac5760405162461bcd60e51b815260040161035690611c42565b6001600160a01b03841660009081526002602052604081206107ce9083610e27565b905080156103ca57846001600160a01b0316826001600160a01b03167f12146497b3b826918ec47f0cac7272a09ed06b30c16c030e99ec48ff5dd60b4760405160405180910390a35050505050565b6000610827610d70565b600084815260209182526040808220828052909252205460ff166108775761084d610d70565b6000848152602091825260408082206001600160a01b0386168352909252205460ff1690506103f5565b50600192915050565b6060816001600160401b0381111561089a5761089a611840565b6040519080825280602002602001820160405280156108cd57816020015b60608152602001906001900390816108b85790505b50905060005b8281101561096d5761093d308585848181106108f1576108f1611cf1565b90506020028101906109039190611d07565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fce92505050565b82828151811061094f5761094f611cf1565b6020026020010181905250808061096590611d54565b9150506108d3565b5092915050565b60006103f58183610ff3565b60008061098b610ecd565b6000848152602091909152604081205491505b818110156109f85760006109b0610ecd565b60008681526020918252604080822085835260010190925220546001600160a01b0316146109e6576109e3600184611cd9565b92505b6109f1600182611cd9565b905061099e565b50610a048360006106ff565b15610a1757610a14600183611cd9565b91505b50919050565b610518610424610d70565b6000807f000000000000000000000000ffd4505b3452dc22f8473616d50503ba9e1710ac90506000610a908686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e3c92505050565b90506000610a9e8383610e6d565b90506001600160a01b0381163b15610aba5792506105e9915050565b610ac48383611015565b9050336001600160a01b037f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27891614610b1d57610b01600082610e27565b610b1d5760405162461bcd60e51b815260040161035690611c79565b610b29818888886110ac565b866001600160a01b0316816001600160a01b03167fac631f3001b55ea1509cf3d7e74898f85392a61a76e8149181ae1259622dabc860405160405180910390a39695505050505050565b6060610b7d611114565b8054610b8890611d6f565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb490611d6f565b8015610c015780601f10610bd657610100808354040283529160200191610c01565b820191906000526020600020905b815481529060010190602001808311610be457829003601f168201915b5050505050905090565b6001610c15610d70565b6000848152602091825260408082206001600160a01b0386168084529352808220805460ff1916941515949094179093559151339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b7f0a7b0f5c59907924802379ebe98cdc23e2ee7820f63d30126e10b3752010e50090565b60008060ff19610cc960017f0c4ba382c0009cf238e4c1ca1a52f51c61e6248a70bdfb34e5ed49d5578a5c0c611da4565b604051602001610cdb91815260200190565b60408051601f1981840301815291905280516020909101201692915050565b606060006105e983611138565b600080610d148484610e3c565b90506000610d427f000000000000000000000000ffd4505b3452dc22f8473616d50503ba9e1710ac83610e6d565b6001600160a01b03878116911614925050509392505050565b60006105e9836001600160a01b038416611194565b6000610329610c74565b610d82610d70565b6000838152602091825260408082206001600160a01b0385168352909252205460ff166104bf57610dbd816001600160a01b03166014611287565b610dc8836020611287565b604051602001610dd9929190611dbb565b60408051601f198184030181529082905262461bcd60e51b825261035691600401611c2f565b610e098282610c0b565b6104bf8282611422565b610e1d82826114e1565b6104bf828261154a565b60006105e9836001600160a01b0384166115d9565b600082604051602001610e4f9190611963565b60405160208183030381529060405280519060200120905092915050565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c820120607882015260556043909101206000906105e9565b6000610329610c98565b600061032981336106ff565b6000610eed611114565b8054610ef890611d6f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2490611d6f565b8015610f715780601f10610f4657610100808354040283529160200191610f71565b820191906000526020600020905b815481529060010190602001808311610f5457829003601f168201915b5050505050905081610f81611114565b8151610f90926020019061173e565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a168183604051610fc2929190611e28565b60405180910390a15050565b60606105e98383604051806060016040528060278152602001611ef660279139611628565b6001600160a01b038116600090815260018301602052604081205415156105e9565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b0381166103f55760405162461bcd60e51b8152602060048201526017602482015276115490cc4c4d8dce8818dc99585d194c8819985a5b1959604a1b6044820152606401610356565b60405163347d5e2560e21b81526001600160a01b0385169063d1f57894906110dc90869086908690600401611e4d565b600060405180830381600087803b1580156110f657600080fd5b505af115801561110a573d6000803e3d6000fd5b5050505050505050565b7f4bc804ba64359c0e35e5ed5d90ee596ecaa49a3a930ddcb1470ea0dd625da90090565b60608160000180548060200260200160405190810160405280929190818152602001828054801561118857602002820191906000526020600020905b815481526020019060010190808311611174575b50505050509050919050565b6000818152600183016020526040812054801561127d5760006111b8600183611da4565b85549091506000906111cc90600190611da4565b90508181146112315760008660000182815481106111ec576111ec611cf1565b906000526020600020015490508087600001848154811061120f5761120f611cf1565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061124257611242611e8d565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506103f5565b60009150506103f5565b60606000611296836002611ea3565b6112a1906002611cd9565b6001600160401b038111156112b8576112b8611840565b6040519080825280601f01601f1916602001820160405280156112e2576020820181803683370190505b509050600360fc1b816000815181106112fd576112fd611cf1565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061132c5761132c611cf1565b60200101906001600160f81b031916908160001a9053506000611350846002611ea3565b61135b906001611cd9565b90505b60018111156113d3576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061138f5761138f611cf1565b1a60f81b8282815181106113a5576113a5611cf1565b60200101906001600160f81b031916908160001a90535060049490941c936113cc81611ec2565b905061135e565b5083156105e95760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610356565b600061142c610ecd565b6000848152602091909152604090205490506001611448610ecd565b6000858152602091909152604081208054909190611467908490611cd9565b90915550829050611476610ecd565b6000858152602091825260408082208583526001019092522080546001600160a01b0319166001600160a01b0392909216919091179055806114b6610ecd565b6000948552602090815260408086206001600160a01b03909516865260029094019052919092205550565b6114eb8282610d7a565b6114f3610d70565b6000838152602091825260408082206001600160a01b0385168084529352808220805460ff191690555133929185917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611554610ecd565b6000848152602091825260408082206001600160a01b038616835260020190925220549050611581610ecd565b6000848152602091825260408082208483526001019092522080546001600160a01b03191690556115b0610ecd565b6000938452602090815260408085206001600160a01b0390941685526002909301905250812055565b6000818152600183016020526040812054611620575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556103f5565b5060006103f5565b60606001600160a01b0384163b6116905760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610356565b600080856001600160a01b0316856040516116ab9190611ed9565b600060405180830381855af49150503d80600081146116e6576040519150601f19603f3d011682016040523d82523d6000602084013e6116eb565b606091505b50915091506116fb828286611705565b9695505050505050565b606083156117145750816105e9565b8251156117245782518084602001fd5b8160405162461bcd60e51b81526004016103569190611c2f565b82805461174a90611d6f565b90600052602060002090601f01602090048101928261176c57600085556117b2565b82601f1061178557805160ff19168380011785556117b2565b828001600101855582156117b2579182015b828111156117b2578251825591602001919060010190611797565b506117be9291506117c2565b5090565b5b808211156117be57600081556001016117c3565b6020808252825182820181905260009190848201906040850190845b818110156118185783516001600160a01b0316835292840192918401916001016117f3565b50909695505050505050565b80356001600160a01b038116811461183b57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561187057611870611840565b604051601f8501601f19908116603f0116810190828211818310171561189857611898611840565b816040528093508581528686860111156118b157600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126118dc57600080fd5b6105e983833560208501611856565b60008060006060848603121561190057600080fd5b61190984611824565b925061191760208501611824565b915060408401356001600160401b0381111561193257600080fd5b61193e868287016118cb565b9150509250925092565b60006020828403121561195a57600080fd5b6105e982611824565b6001600160a01b0391909116815260200190565b60006020828403121561198957600080fd5b5035919050565b600080604083850312156119a357600080fd5b823591506119b360208401611824565b90509250929050565b600080604083850312156119cf57600080fd5b6119d883611824565b915060208301356001600160401b038111156119f357600080fd5b6119ff858286016118cb565b9150509250929050565b600080600060408486031215611a1e57600080fd5b611a2784611824565b925060208401356001600160401b0380821115611a4357600080fd5b818601915086601f830112611a5757600080fd5b813581811115611a6657600080fd5b876020828501011115611a7857600080fd5b6020830194508093505050509250925092565b60008060408385031215611a9e57600080fd5b50508035926020909101359150565b600060208284031215611abf57600080fd5b81356001600160401b03811115611ad557600080fd5b8201601f81018413611ae657600080fd5b611af584823560208401611856565b949350505050565b60008060208385031215611b1057600080fd5b82356001600160401b0380821115611b2757600080fd5b818501915085601f830112611b3b57600080fd5b813581811115611b4a57600080fd5b8660208260051b8501011115611b5f57600080fd5b60209290920196919550909350505050565b60005b83811015611b8c578181015183820152602001611b74565b83811115611b9b576000848401525b50505050565b60008151808452611bb9816020860160208601611b71565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015611c2257603f19888603018452611c10858351611ba1565b94509285019290850190600101611bf4565b5092979650505050505050565b6020815260006105e96020830184611ba1565b6020808252601f908201527f4163636f756e74466163746f72793a206e6f7420616e206163636f756e742e00604082015260600190565b6020808252602a908201527f4163636f756e74466163746f72793a206163636f756e7420616c7265616479206040820152691c9959da5cdd195c995960b21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611cec57611cec611cc3565b500190565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611d1e57600080fd5b8301803591506001600160401b03821115611d3857600080fd5b602001915036819003821315611d4d57600080fd5b9250929050565b6000600019821415611d6857611d68611cc3565b5060010190565b600181811c90821680611d8357607f821691505b60208210811415610a1757634e487b7160e01b600052602260045260246000fd5b600082821015611db657611db6611cc3565b500390565b7402832b936b4b9b9b4b7b7399d1030b1b1b7bab73a1605d1b815260008351611deb816015850160208801611b71565b7001034b99036b4b9b9b4b733903937b6329607d1b6015918401918201528351611e1c816026840160208801611b71565b01602601949350505050565b604081526000611e3b6040830185611ba1565b82810360208401526105e58185611ba1565b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b634e487b7160e01b600052603160045260246000fd5b6000816000190483118215151615611ebd57611ebd611cc3565b500290565b600081611ed157611ed1611cc3565b506000190190565b60008251611eeb818460208701611b71565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212205d3e29505e958fbe45e9de9dcaceef129bcbdeb4391a97796b4016eda66dfb4764736f6c634300080c0033"; +bytes constant THIRDWEB_ACCOUNT_IMPL_BYTECODE = hex"6080604052600436106101405760003560e01c806301ffc9a71461014c578063150b7a02146101815780631626ba7e146101c55780631dd756c5146101e557806324d7806c146102055780633a871cdd1461022557806347e1da2a146102535780634a58db19146102755780634d44560d1461027d5780635892e2361461029d5780637dff5a79146102bd5780638b52d723146102dd578063938e3d7b146102ff578063a9082d841461031f578063ac9650d81461035e578063b0d691fe1461038b578063b61d27f6146103ad578063b76464d5146103cd578063bc197c81146103ed578063c45a015514610419578063d087d2881461044d578063d1f5789414610462578063d42f2f3514610482578063e8a3d48514610497578063e9523c97146104b9578063f15d424e146104db578063f23a6e611461050857600080fd5b3661014757005b600080fd5b34801561015857600080fd5b5061016c610167366004612cd5565b610534565b60405190151581526020015b60405180910390f35b34801561018d57600080fd5b506101ac61019c366004612de1565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610178565b3480156101d157600080fd5b506101ac6101e0366004612e4c565b61057a565b3480156101f157600080fd5b5061016c610200366004612eab565b610689565b34801561021157600080fd5b5061016c610220366004612ef0565b610963565b34801561023157600080fd5b50610245610240366004612f0d565b610992565b604051908152602001610178565b34801561025f57600080fd5b5061027361026e366004612f9e565b6109b8565b005b610273610b29565b34801561028957600080fd5b50610273610298366004613037565b610b91565b3480156102a957600080fd5b506102736102b83660046130a4565b610c0a565b3480156102c957600080fd5b5061016c6102d8366004612ef0565b610fc7565b3480156102e957600080fd5b506102f2611080565b60405161017891906131b7565b34801561030b57600080fd5b5061027361031a366004613219565b6112c7565b34801561032b57600080fd5b5061033f61033a3660046130a4565b611318565b6040805192151583526001600160a01b03909116602083015201610178565b34801561036a57600080fd5b5061037e610379366004613261565b61136f565b60405161017891906132fe565b34801561039757600080fd5b506103a0611463565b6040516101789190613353565b3480156103b957600080fd5b506102736103c8366004613367565b6114ac565b3480156103d957600080fd5b506102736103e8366004612ef0565b61153c565b3480156103f957600080fd5b506101ac610408366004613450565b63bc197c8160e01b95945050505050565b34801561042557600080fd5b506103a07f0000000000000000000000002e234dae75c793f67a35089c9d99245e1c58470b81565b34801561045957600080fd5b5061024561156e565b34801561046e57600080fd5b5061027361047d3660046134fd565b6115ee565b34801561048e57600080fd5b506102f2611787565b3480156104a357600080fd5b506104ac6118f8565b6040516101789190613544565b3480156104c557600080fd5b506104ce611990565b6040516101789190613557565b3480156104e757600080fd5b506104fb6104f6366004612ef0565b6119a2565b60405161017891906135a4565b34801561051457600080fd5b506101ac6105233660046135b7565b63f23a6e6160e01b95945050505050565b60006001600160e01b03198216630271189760e51b148061056557506001600160e01b03198216630a85bd0160e11b145b80610574575061057482611a9e565b92915050565b6000806105878484611ad3565b905061059281610963565b156105a75750630b135d3f60e11b9050610574565b3360006105b2611af7565b6001600160a01b03841660009081526006919091016020526040902090506105da8183611b1b565b8061060a57506105e981611b3d565b600114801561060a575060006105ff8282611b47565b6001600160a01b0316145b6106675760405162461bcd60e51b8152602060048201526024808201527f4163636f756e743a2063616c6c6572206e6f7420617070726f7665642074617260448201526333b2ba1760e11b60648201526084015b60405180910390fd5b61067083610fc7565b1561068057630b135d3f60e11b93505b50505092915050565b6000610693611af7565b6001600160a01b0384166000908152600491909101602052604090205460ff16156106c057506001610574565b60006106ca611af7565b6001600160a01b0385166000908152600591909101602090815260408083208151606081018352815481526001909101546001600160801b0380821694830194909452600160801b9004909216908201529150610725611af7565b6006016000866001600160a01b03166001600160a01b0316815260200190815260200160002090504282602001516001600160801b03161180610775575081604001516001600160801b03164210155b80610786575061078481611b3d565b155b1561079657600092505050610574565b60006107ad6107a8606087018761361f565b611b53565b905060006107ba83611b3d565b60011480156107db575060006107d08482611b47565b6001600160a01b0316145b90506001600160e01b03198216635b0e93fb60e11b14156108535760008061080e61080960608a018a61361f565b611b8d565b9150915082610834576108218583611b1b565b6108345760009650505050505050610574565b855181111561084c5760009650505050505050610574565b5050610956565b6001600160e01b031982166323f0ed1560e11b14156109495760008061088461087f60608a018a61361f565b611bf2565b5091509150826108ee5760005b82518110156108ec576108c68382815181106108af576108af613665565b602002602001015187611b1b90919063ffffffff16565b6108da576000975050505050505050610574565b806108e481613691565b915050610891565b505b60005b82518110156109415781818151811061090c5761090c613665565b60200260200101518760000151101561092f576000975050505050505050610574565b8061093981613691565b9150506108f1565b505050610956565b6000945050505050610574565b5060019695505050505050565b600061096d611af7565b6001600160a01b03909216600090815260049290920160205250604090205460ff1690565b600061099c611c3f565b6109a68484611ca8565b90506109b182611ded565b9392505050565b6109c0611463565b6001600160a01b0316336001600160a01b031614806109e357506109e333610963565b6109ff5760405162461bcd60e51b815260040161065e906136ac565b610a07611e3a565b8481148015610a1557508483145b610a615760405162461bcd60e51b815260206004820152601d60248201527f4163636f756e743a2077726f6e67206172726179206c656e677468732e000000604482015260640161065e565b60005b85811015610b2057610b0d878783818110610a8157610a81613665565b9050602002016020810190610a969190612ef0565b868684818110610aa857610aa8613665565b90506020020135858585818110610ac157610ac1613665565b9050602002810190610ad3919061361f565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f3792505050565b5080610b1881613691565b915050610a64565b50505050505050565b610b31611463565b6001600160a01b031663b760faf934306040518363ffffffff1660e01b8152600401610b5d9190613353565b6000604051808303818588803b158015610b7657600080fd5b505af1158015610b8a573d6000803e3d6000fd5b5050505050565b610b99611fa8565b610ba1611463565b60405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c2878906044015b600060405180830381600087803b158015610bee57600080fd5b505af1158015610c02573d6000803e3d6000fd5b505050505050565b6000610c196020850185612ef0565b905042610c2c60e0860160c08701613704565b6001600160801b031611158015610c5b5750610c4f610100850160e08601613704565b6001600160801b031642105b610c915760405162461bcd60e51b8152602060048201526007602482015266085c195c9a5bd960ca1b604482015260640161065e565b600080610c9f868686611318565b9150915081610cd95760405162461bcd60e51b815260040161065e906020808252600490820152632173696760e01b604082015260600190565b6001610ce3611af7565b610100880135600090815260079190910160209081526040808320805460ff1916941515949094179093559091610d1f91908901908901613730565b60ff161115610d4c576000610d3a6040880160208901613730565b60ff166001149050610b208482611fe6565b610d5583610963565b15610d8a5760405162461bcd60e51b815260206004820152600560248201526430b236b4b760d91b604482015260640161065e565b610d9f83610d96611af7565b600201906120c9565b50604051806060016040528087606001358152602001876080016020810190610dc89190613704565b6001600160801b03168152602001610de660c0890160a08a01613704565b6001600160801b03169052610df9611af7565b6001600160a01b03851660009081526005919091016020908152604080832084518155918401519301516001600160801b03908116600160801b02931692909217600190920191909155610e6f610e4e611af7565b6001600160a01b0386166000908152600691909101602052604090206120de565b805190915060005b81811015610ed957610ec6838281518110610e9457610e94613665565b6020026020010151610ea4611af7565b6001600160a01b038916600090815260069190910160205260409020906120eb565b50610ed260018261374b565b9050610e77565b50610ee76040890189613763565b9050905060005b81811015610f6857610f55610f0660408b018b613763565b83818110610f1657610f16613665565b9050602002016020810190610f2b9190612ef0565b610f33611af7565b6001600160a01b038916600090815260069190910160205260409020906120c9565b50610f6160018261374b565b9050610eee565b50610f7288612100565b846001600160a01b0316836001600160a01b03167ff21d10c26e35863a8df291aca54181ee8c4a3bc8e00246c3f7a5a14b69d826a78a604051610fb5919061383d565b60405180910390a35050505050505050565b600080610fd2611af7565b6001600160a01b038416600090815260059190910160209081526040918290208251606081018452815481526001909101546001600160801b03808216938301849052600160801b90910416928101929092529091504210801590611043575080604001516001600160801b031642105b80156109b157506000611078611057611af7565b6001600160a01b038616600090815260069190910160205260409020611b3d565b119392505050565b6060600061109761108f611af7565b6002016120de565b80519091506000805b82811015611128576110ca8482815181106110bd576110bd613665565b6020026020010151610fc7565b156110e157816110d981613691565b925050611116565b60008482815181106110f5576110f5613665565b60200260200101906001600160a01b031690816001600160a01b0316815250505b61112160018261374b565b90506110a0565b50806001600160401b0381111561114157611141612d24565b60405190808252806020026020018201604052801561117a57816020015b611167612bf2565b81526020019060019003908161115f5790505b5093506000805b838110156112bf5760006001600160a01b03168582815181106111a6576111a6613665565b60200260200101516001600160a01b0316146112ad5760008582815181106111d0576111d0613665565b6020026020010151905060006111e4611af7565b6001600160a01b038316600081815260059290920160209081526040928390208351606081018552815481526001909101546001600160801b0380821683850152600160801b9091041681850152835160a08101909452918352909250810161124e610e4e611af7565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b031681525088858061128d90613691565b96508151811061129f5761129f613665565b602002602001018190525050505b6112b860018261374b565b9050611181565b505050505090565b6112cf6121a3565b61130c5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b604482015260640161065e565b611315816121bb565b50565b60008061132e611327866122a6565b85856123ea565b9050611338611af7565b6101008601356000908152600791909101602052604090205460ff16158015611365575061136581610963565b9150935093915050565b6060816001600160401b0381111561138957611389612d24565b6040519080825280602002602001820160405280156113bc57816020015b60608152602001906001900390816113a75790505b50905060005b8281101561145c5761142c308585848181106113e0576113e0613665565b90506020028101906113f2919061361f565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061244492505050565b82828151811061143e5761143e613665565b6020026020010181905250808061145490613691565b9150506113c2565b5092915050565b60008061146e612469565b546001600160a01b03169050801561148557919050565b7f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d278991505090565b6114b4611463565b6001600160a01b0316336001600160a01b031614806114d757506114d733610963565b6114f35760405162461bcd60e51b815260040161065e906136ac565b6114fb611e3a565b610b8a848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f3792505050565b611544611fa8565b8061154d612469565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6000611578611463565b604051631aab3f0d60e11b8152306004820152600060248201526001600160a01b0391909116906335567e1a90604401602060405180830381865afa1580156115c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e99190613928565b905090565b60006115f861248d565b5460ff169050600061160861248d565b54610100900460ff1690508015808015611625575060018360ff16105b80611644575061163430612497565b15801561164457508260ff166001145b6116a75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161065e565b60016116b161248d565b805460ff191660ff9290921691909117905580156116ea5760016116d361248d565b80549115156101000261ff00199092169190911790555b856116f3612469565b60010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611725866001611fe6565b8015610c0257600061173561248d565b80549115156101000261ff0019909216919091179055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050565b6060600061179661108f611af7565b8051909150806001600160401b038111156117b3576117b3612d24565b6040519080825280602002602001820160405280156117ec57816020015b6117d9612bf2565b8152602001906001900390816117d15790505b50925060005b818110156118f257600083828151811061180e5761180e613665565b602002602001015190506000611822611af7565b6001600160a01b038316600081815260059290920160209081526040928390208351606081018552815481526001909101546001600160801b0380821683850152600160801b9091041681850152835160a08101909452918352909250810161188c610e4e611af7565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b03168152508684815181106118d1576118d1613665565b602002602001018190525050506001816118eb919061374b565b90506117f2565b50505090565b60606119026124a6565b805461190d90613941565b80601f016020809104026020016040519081016040528092919081815260200182805461193990613941565b80156119865780601f1061195b57610100808354040283529160200191611986565b820191906000526020600020905b81548152906001019060200180831161196957829003601f168201915b5050505050905090565b60606115e961199d611af7565b6120de565b6119aa612bf2565b60006119b4611af7565b6001600160a01b038416600081815260059290920160209081526040928390208351606081018552815481526001909101546001600160801b0380821683850152600160801b9091041681850152835160a081019094529183529092508101611a3f611a1e611af7565b6001600160a01b0387166000908152600691909101602052604090206120de565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b0316815250915050919050565b7f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee030090565b60006001600160e01b03198216630271189760e51b148061057457506301ffc9a760e01b6001600160e01b0319831614610574565b6000806000611ae285856124ca565b91509150611aef81612510565b509392505050565b7f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0090565b6001600160a01b038116600090815260018301602052604081205415156109b1565b6000610574825490565b60006109b18383612659565b60006004821015611b765760405162461bcd60e51b815260040161065e90613976565b611b84600460008486613995565b6109b1916139bf565b6000806044831015611bb15760405162461bcd60e51b815260040161065e90613976565b611bbf602460048587613995565b810190611bcc9190612ef0565b9150611bdc604460248587613995565b810190611be991906139ef565b90509250929050565b606080806064841015611c175760405162461bcd60e51b815260040161065e90613976565b611c248460048188613995565b810190611c319190613a87565b919790965090945092505050565b611c47611463565b6001600160a01b0316336001600160a01b031614611ca65760405162461bcd60e51b815260206004820152601c60248201527b1858d8dbdd5b9d0e881b9bdd08199c9bdb48115b9d1c9e541bda5b9d60221b604482015260640161065e565b565b7b0ca2ba3432b932bab69029b4b3b732b21026b2b9b9b0b3b29d05199960211b6000908152601c829052603c81206000611d26611ce961014087018761361f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508693925050611ad39050565b9050611d328186610689565b611d4157600192505050610574565b6000611d4b611af7565b6001600160a01b03929092166000908152600590920160209081526040808420815160608082018452825482526001909201546001600160801b0380821683870152600160801b8204908116928501929092528351928301845295825265ffffffffffff8087169483019490945292831691015260d09290921b6001600160d01b03191660a09290921b65ffffffffffff60a01b169190911795945050505050565b801561131557604051600090339060001990849084818181858888f193505050503d8060008114610b8a576040519150601f19603f3d011682016040523d82523d6000602084013e610b8a565b60405163c3c5a54760e01b81527f0000000000000000000000002e234dae75c793f67a35089c9d99245e1c58470b906001600160a01b0382169063c3c5a54790611e88903090600401613353565b602060405180830381865afa158015611ea5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec99190613b6c565b61131557806001600160a01b03166367793cc6611ee4612469565b600101546040805160e084901b6001600160e01b03191681526001600160a01b0390921660048301526024820152600060448201526064015b600060405180830381600087803b158015610b7657600080fd5b60606000846001600160a01b03168484604051611f549190613b8e565b60006040518083038185875af1925050503d8060008114611f91576040519150601f19603f3d011682016040523d82523d6000602084013e611f96565b606091505b509250905080611aef57815160208301fd5b611fb133610963565b611ca65760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b604482015260640161065e565b611ff08282612683565b6001600160a01b037f0000000000000000000000002e234dae75c793f67a35089c9d99245e1c58470b163b156120c557801561208d577f0000000000000000000000002e234dae75c793f67a35089c9d99245e1c58470b6001600160a01b0316639ddbb9d88361205e612469565b600101546040516001600160e01b031960e085901b168152610bd492916001600160a01b031690600401613baa565b7f0000000000000000000000002e234dae75c793f67a35089c9d99245e1c58470b6001600160a01b0316630db330038361205e612469565b5050565b60006109b1836001600160a01b038416612732565b606060006109b183612781565b60006109b1836001600160a01b0384166127dd565b6001600160a01b037f0000000000000000000000002e234dae75c793f67a35089c9d99245e1c58470b163b15611315576001600160a01b037f0000000000000000000000002e234dae75c793f67a35089c9d99245e1c58470b16639ddbb9d861216c6020840184612ef0565b612174612469565b600101546040516001600160e01b031960e085901b168152611f1d92916001600160a01b031690600401613baa565b60006121ae33610963565b806115e957505030331490565b60006121c56124a6565b80546121d090613941565b80601f01602080910402602001604051908101604052809291908181526020018280546121fc90613941565b80156122495780601f1061221e57610100808354040283529160200191612249565b820191906000526020600020905b81548152906001019060200180831161222c57829003601f168201915b50505050509050816122596124a6565b81516122689260200190612c3c565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a16818360405161229a929190613bd3565b60405180910390a15050565b60607f3fd4a1a1a267c84185e3b7eecd57c68783c0581d538b9d6e5f23e4670497c1e96122d66020840184612ef0565b6122e66040850160208601613730565b6122f36040860186613763565b604051602001612304929190613c01565b60408051601f198184030181529190528051602090910120606086013561233160a0880160808901613704565b61234160c0890160a08a01613704565b61235160e08a0160c08b01613704565b6123626101008b0160e08c01613704565b60408051602081019a909a526001600160a01b039098169789019790975260ff9095166060880152608087019390935260a08601919091526001600160801b0390811660c086015290811660e0850152908116610100848101919091529116610120830152830135610140820152610160016040516020818303038152906040529050919050565b600061243c83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505087516020890120612436925090506128d0565b90611ad3565b949350505050565b60606109b18383604051806060016040528060278152602001613c87602791396128fd565b7f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b54830090565b60006115e9611a7a565b6001600160a01b03163b151590565b7f4bc804ba64359c0e35e5ed5d90ee596ecaa49a3a930ddcb1470ea0dd625da90090565b6000808251604114156125015760208301516040840151606085015160001a6124f5878285856129d8565b94509450505050612509565b506000905060025b9250929050565b600081600481111561252457612524613c43565b141561252d5750565b600181600481111561254157612541613c43565b141561258a5760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b604482015260640161065e565b600281600481111561259e5761259e613c43565b14156125ec5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161065e565b600381600481111561260057612600613c43565b14156113155760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161065e565b600082600001828154811061267057612670613665565b9060005260206000200154905092915050565b8061268c611af7565b6001600160a01b038416600090815260049190910160205260409020805460ff191691151591909117905580156126d5576126cf826126c9611af7565b906120c9565b506126e9565b6126e7826126e1611af7565b906120eb565b505b816001600160a01b03167f235bc17e7930760029e9f4d860a2a8089976de5b381cf8380fc11c1d88a1113382604051612726911515815260200190565b60405180910390a25050565b600081815260018301602052604081205461277957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610574565b506000610574565b6060816000018054806020026020016040519081016040528092919081815260200182805480156127d157602002820191906000526020600020905b8154815260200190600101908083116127bd575b50505050509050919050565b600081815260018301602052604081205480156128c6576000612801600183613c59565b855490915060009061281590600190613c59565b905081811461287a57600086600001828154811061283557612835613665565b906000526020600020015490508087600001848154811061285857612858613665565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061288b5761288b613c70565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610574565b6000915050610574565b60006105746128dd612a92565b8360405161190160f01b8152600281019290925260228201526042902090565b606061290884612497565b6129635760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161065e565b600080856001600160a01b03168560405161297e9190613b8e565b600060405180830381855af49150503d80600081146129b9576040519150601f19603f3d011682016040523d82523d6000602084013e6129be565b606091505b50915091506129ce828286612bb9565b9695505050505050565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b03831115612a055750600090506003612a89565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612a59573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a8257600060019250925050612a89565b9150600090505b94509492505050565b6000306001600160a01b037f000000000000000000000000ffd4505b3452dc22f8473616d50503ba9e1710ac16148015612aeb57507f0000000000000000000000000000000000000000000000000000000000007a6946145b15612b1557507fbcdadf6444930a967ffda04923d78c49b3dd65df3ed39abb04a1e3eb1190553790565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527ff0729608244859f656d32ae4cbc6b0367695d68d8e941a28f5e2d33c6d5182dd828401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60608315612bc85750816109b1565b825115612bd85782518084602001fd5b8160405162461bcd60e51b815260040161065e9190613544565b6040518060a0016040528060006001600160a01b03168152602001606081526020016000815260200160006001600160801b0316815260200160006001600160801b031681525090565b828054612c4890613941565b90600052602060002090601f016020900481019282612c6a5760008555612cb0565b82601f10612c8357805160ff1916838001178555612cb0565b82800160010185558215612cb0579182015b82811115612cb0578251825591602001919060010190612c95565b50612cbc929150612cc0565b5090565b5b80821115612cbc5760008155600101612cc1565b600060208284031215612ce757600080fd5b81356001600160e01b0319811681146109b157600080fd5b6001600160a01b038116811461131557600080fd5b8035612d1f81612cff565b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612d6257612d62612d24565b604052919050565b60006001600160401b03831115612d8357612d83612d24565b612d96601f8401601f1916602001612d3a565b9050828152838383011115612daa57600080fd5b828260208301376000602084830101529392505050565b600082601f830112612dd257600080fd5b6109b183833560208501612d6a565b60008060008060808587031215612df757600080fd5b8435612e0281612cff565b93506020850135612e1281612cff565b92506040850135915060608501356001600160401b03811115612e3457600080fd5b612e4087828801612dc1565b91505092959194509250565b60008060408385031215612e5f57600080fd5b8235915060208301356001600160401b03811115612e7c57600080fd5b612e8885828601612dc1565b9150509250929050565b60006101608284031215612ea557600080fd5b50919050565b60008060408385031215612ebe57600080fd5b8235612ec981612cff565b915060208301356001600160401b03811115612ee457600080fd5b612e8885828601612e92565b600060208284031215612f0257600080fd5b81356109b181612cff565b600080600060608486031215612f2257600080fd5b83356001600160401b03811115612f3857600080fd5b612f4486828701612e92565b9660208601359650604090950135949350505050565b60008083601f840112612f6c57600080fd5b5081356001600160401b03811115612f8357600080fd5b6020830191508360208260051b850101111561250957600080fd5b60008060008060008060608789031215612fb757600080fd5b86356001600160401b0380821115612fce57600080fd5b612fda8a838b01612f5a565b90985096506020890135915080821115612ff357600080fd5b612fff8a838b01612f5a565b9096509450604089013591508082111561301857600080fd5b5061302589828a01612f5a565b979a9699509497509295939492505050565b6000806040838503121561304a57600080fd5b823561305581612cff565b946020939093013593505050565b60008083601f84011261307557600080fd5b5081356001600160401b0381111561308c57600080fd5b60208301915083602082850101111561250957600080fd5b6000806000604084860312156130b957600080fd5b83356001600160401b03808211156130d057600080fd5b9085019061012082880312156130e557600080fd5b909350602085013590808211156130fb57600080fd5b5061310886828701613063565b9497909650939450505050565b6001600160801b03169052565b80516001600160a01b03908116835260208083015160a082860181905281519086018190526000939183019290849060c08801905b8083101561317957855185168252948301946001929092019190830190613157565b5060408701516040890152606087015194506131986060890186613115565b608087015194506131ac6080890186613115565b979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561320c57603f198886030184526131fa858351613122565b945092850192908501906001016131de565b5092979650505050505050565b60006020828403121561322b57600080fd5b81356001600160401b0381111561324157600080fd5b8201601f8101841361325257600080fd5b61243c84823560208401612d6a565b6000806020838503121561327457600080fd5b82356001600160401b0381111561328a57600080fd5b61329685828601612f5a565b90969095509350505050565b60005b838110156132bd5781810151838201526020016132a5565b838111156132cc576000848401525b50505050565b600081518084526132ea8160208601602086016132a2565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561320c57603f198886030184526133418583516132d2565b94509285019290850190600101613325565b6001600160a01b0391909116815260200190565b6000806000806060858703121561337d57600080fd5b843561338881612cff565b93506020850135925060408501356001600160401b038111156133aa57600080fd5b6133b687828801613063565b95989497509550505050565b60006001600160401b038211156133db576133db612d24565b5060051b60200190565b600082601f8301126133f657600080fd5b8135602061340b613406836133c2565b612d3a565b82815260059290921b8401810191818101908684111561342a57600080fd5b8286015b84811015613445578035835291830191830161342e565b509695505050505050565b600080600080600060a0868803121561346857600080fd5b853561347381612cff565b9450602086013561348381612cff565b935060408601356001600160401b038082111561349f57600080fd5b6134ab89838a016133e5565b945060608801359150808211156134c157600080fd5b6134cd89838a016133e5565b935060808801359150808211156134e357600080fd5b506134f088828901612dc1565b9150509295509295909350565b60008060006040848603121561351257600080fd5b833561351d81612cff565b925060208401356001600160401b0381111561353857600080fd5b61310886828701613063565b6020815260006109b160208301846132d2565b6020808252825182820181905260009190848201906040850190845b818110156135985783516001600160a01b031683529284019291840191600101613573565b50909695505050505050565b6020815260006109b16020830184613122565b600080600080600060a086880312156135cf57600080fd5b85356135da81612cff565b945060208601356135ea81612cff565b9350604086013592506060860135915060808601356001600160401b0381111561361357600080fd5b6134f088828901612dc1565b6000808335601e1984360301811261363657600080fd5b8301803591506001600160401b0382111561365057600080fd5b60200191503681900382131561250957600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156136a5576136a561367b565b5060010190565b60208082526021908201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746040820152601760f91b606082015260800190565b80356001600160801b0381168114612d1f57600080fd5b60006020828403121561371657600080fd5b6109b1826136ed565b803560ff81168114612d1f57600080fd5b60006020828403121561374257600080fd5b6109b18261371f565b6000821982111561375e5761375e61367b565b500190565b6000808335601e1984360301811261377a57600080fd5b8301803591506001600160401b0382111561379457600080fd5b6020019150600581901b360382131561250957600080fd5b6000808335601e198436030181126137c357600080fd5b83016020810192503590506001600160401b038111156137e257600080fd5b8060051b360383131561250957600080fd5b8183526000602080850194508260005b8581101561383257813561381781612cff565b6001600160a01b031687529582019590820190600101613804565b509495945050505050565b6020815261385e6020820161385184612d14565b6001600160a01b03169052565b600061386c6020840161371f565b60ff811660408401525061388360408401846137ac565b61012080606086015261389b610140860183856137f4565b9250606086013560808601526138b3608087016136ed565b91506138c260a0860183613115565b6138ce60a087016136ed565b91506138dd60c0860183613115565b6138e960c087016136ed565b91506138f860e0860183613115565b61390460e087016136ed565b915061010061391581870184613115565b9590950135939094019290925250919050565b60006020828403121561393a57600080fd5b5051919050565b600181811c9082168061395557607f821691505b60208210811415612ea557634e487b7160e01b600052602260045260246000fd5b602080825260059082015264214461746160d81b604082015260600190565b600080858511156139a557600080fd5b838611156139b257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156139e75780818660040360031b1b83161692505b505092915050565b600060208284031215613a0157600080fd5b5035919050565b600082601f830112613a1957600080fd5b81356020613a29613406836133c2565b82815260059290921b84018101918181019086841115613a4857600080fd5b8286015b848110156134455780356001600160401b03811115613a6b5760008081fd5b613a798986838b0101612dc1565b845250918301918301613a4c565b600080600060608486031215613a9c57600080fd5b83356001600160401b0380821115613ab357600080fd5b818601915086601f830112613ac757600080fd5b81356020613ad7613406836133c2565b82815260059290921b8401810191818101908a841115613af657600080fd5b948201945b83861015613b1d578535613b0e81612cff565b82529482019490820190613afb565b97505087013592505080821115613b3357600080fd5b613b3f878388016133e5565b93506040860135915080821115613b5557600080fd5b50613b6286828701613a08565b9150509250925092565b600060208284031215613b7e57600080fd5b815180151581146109b157600080fd5b60008251613ba08184602087016132a2565b9190910192915050565b6001600160a01b0392831681529116602082015260606040820181905260009082015260800190565b604081526000613be660408301856132d2565b8281036020840152613bf881856132d2565b95945050505050565b60008184825b85811015613c38578135613c1a81612cff565b6001600160a01b031683526020928301929190910190600101613c07565b509095945050505050565b634e487b7160e01b600052602160045260246000fd5b600082821015613c6b57613c6b61367b565b500390565b634e487b7160e01b600052603160045260246000fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220488fca858cea32ff9345eebbb45b5bf07cf886a8608e53ce6abe287edb408a8264736f6c634300080c0033"; + diff --git a/src/test/smart-wallet/utils/AABenchmarkPrepare.sol b/src/test/smart-wallet/utils/AABenchmarkPrepare.sol new file mode 100644 index 000000000..8a8e709d6 --- /dev/null +++ b/src/test/smart-wallet/utils/AABenchmarkPrepare.sol @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.0; + +// Test utils +import "../../utils/BaseTest.sol"; + +// Account Abstraction setup for smart wallets. +import { IEntryPoint } from "contracts/prebuilts/account/utils/Entrypoint.sol"; + +import { AccountFactory } from "contracts/prebuilts/account/non-upgradeable/AccountFactory.sol"; + +import "solady/utils/LibString.sol"; + +import "forge-std/Test.sol"; + +contract AABenchmarkPrepare is BaseTest { + AccountFactory private accountFactory; + + function setUp() public override { + super.setUp(); + accountFactory = new AccountFactory(IEntryPoint(payable(address(0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789)))); + } + + function test_prepareBenchmarkFile() public { + address accountFactoryAddress = address(accountFactory); + bytes memory accountFactoryBytecode = accountFactoryAddress.code; + + address accountImplAddress = accountFactory.accountImplementation(); + bytes memory accountImplBytecode = accountImplAddress.code; + + string memory accountFactoryAddressString = string.concat( + "address constant THIRDWEB_ACCOUNT_FACTORY_ADDRESS = ", + LibString.toHexStringChecksummed(accountFactoryAddress), + ";" + ); + string memory accountFactoryBytecodeString = string.concat( + 'bytes constant THIRDWEB_ACCOUNT_FACTORY_BYTECODE = hex"', + LibString.toHexStringNoPrefix(accountFactoryBytecode), + '"', + ";" + ); + + string memory accountImplAddressString = string.concat( + "address constant THIRDWEB_ACCOUNT_IMPL_ADDRESS = ", + LibString.toHexStringChecksummed(accountImplAddress), + ";" + ); + string memory accountImplBytecodeString = string.concat( + 'bytes constant THIRDWEB_ACCOUNT_IMPL_BYTECODE = hex"', + LibString.toHexStringNoPrefix(accountImplBytecode), + '"', + ";" + ); + + string memory path = "src/test/smart-wallet/utils/AABenchmarkArtifacts.sol"; + + vm.removeFile(path); + + vm.writeLine(path, ""); + vm.writeLine(path, "pragma solidity ^0.8.0;"); + vm.writeLine(path, "interface ThirdwebAccountFactory {"); + vm.writeLine( + path, + " function createAccount(address _admin, bytes calldata _data) external returns (address);" + ); + vm.writeLine( + path, + " function getAddress(address _adminSigner, bytes calldata _data) external view returns (address);" + ); + vm.writeLine(path, "}"); + + vm.writeLine(path, "interface ThirdwebAccount {"); + vm.writeLine(path, " function execute(address _target, uint256 _value, bytes calldata _calldata) external;"); + vm.writeLine(path, "}"); + vm.writeLine(path, accountFactoryAddressString); + vm.writeLine(path, accountImplAddressString); + vm.writeLine(path, accountFactoryBytecodeString); + vm.writeLine(path, accountImplBytecodeString); + + vm.writeLine(path, ""); + } +} diff --git a/src/test/smart-wallet/utils/AABenchmarkTest.t.sol b/src/test/smart-wallet/utils/AABenchmarkTest.t.sol new file mode 100644 index 000000000..36d863c41 --- /dev/null +++ b/src/test/smart-wallet/utils/AABenchmarkTest.t.sol @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: Apache-2.0 +pragma solidity ^0.8.0; + +import "aa-benchmark/src/TestBase.sol"; +import { ThirdwebAccountFactory, ThirdwebAccount, THIRDWEB_ACCOUNT_FACTORY_ADDRESS, THIRDWEB_ACCOUNT_IMPL_ADDRESS, THIRDWEB_ACCOUNT_FACTORY_BYTECODE, THIRDWEB_ACCOUNT_IMPL_BYTECODE } from "./AABenchmarkArtifacts.sol"; + +contract ProfileThirdwebAccount is AAGasProfileBase { + ThirdwebAccountFactory factory; + + function setUp() external { + initializeTest("thirdwebAccount"); + factory = ThirdwebAccountFactory(THIRDWEB_ACCOUNT_FACTORY_ADDRESS); + vm.etch(address(factory), THIRDWEB_ACCOUNT_FACTORY_BYTECODE); + vm.etch(THIRDWEB_ACCOUNT_IMPL_ADDRESS, THIRDWEB_ACCOUNT_IMPL_BYTECODE); + setAccount(); + } + + function fillData(address _to, uint256 _value, bytes memory _data) internal view override returns (bytes memory) { + return abi.encodeWithSelector(ThirdwebAccount.execute.selector, _to, _value, _data); + } + + function getSignature(UserOperation memory _op) internal view override returns (bytes memory) { + return signUserOpHash(key, _op); + } + + function createAccount(address _owner) internal override { + // if (address(account).code.length == 0) { + factory.createAccount(_owner, ""); + // } + } + + function getAccountAddr(address _owner) internal view override returns (IAccount) { + return IAccount(factory.getAddress(_owner, "")); + } + + function getInitCode(address _owner) internal view override returns (bytes memory) { + return abi.encodePacked(address(factory), abi.encodeWithSelector(factory.createAccount.selector, _owner, "")); + } + + function getDummySig(UserOperation memory _op) internal pure override returns (bytes memory) { + return + hex"fffffffffffffffffffffffffffffff0000000000000000000000000000000007aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1c"; + } +} From eab689e1311562388ed6b9edfca6219734451c63 Mon Sep 17 00:00:00 2001 From: WhiteOakKong Date: Mon, 30 Oct 2023 13:20:13 -0500 Subject: [PATCH 2/3] lint/prettier --- lib/aa-benchmark | 1 + lib/solady | 1 + src/test/smart-wallet/utils/AABenchmarkArtifacts.sol | 11 ++++++++--- src/test/smart-wallet/utils/AABenchmarkTest.t.sol | 6 +++++- 4 files changed, 15 insertions(+), 4 deletions(-) create mode 160000 lib/aa-benchmark create mode 160000 lib/solady diff --git a/lib/aa-benchmark b/lib/aa-benchmark new file mode 160000 index 000000000..4b8e548ef --- /dev/null +++ b/lib/aa-benchmark @@ -0,0 +1 @@ +Subproject commit 4b8e548ef6b004069cff599347a2afb9ac837e54 diff --git a/lib/solady b/lib/solady new file mode 160000 index 000000000..77809c18e --- /dev/null +++ b/lib/solady @@ -0,0 +1 @@ +Subproject commit 77809c18e010b914dde9518956a4ae7cb507d383 diff --git a/src/test/smart-wallet/utils/AABenchmarkArtifacts.sol b/src/test/smart-wallet/utils/AABenchmarkArtifacts.sol index c63e61855..7deecb587 100644 --- a/src/test/smart-wallet/utils/AABenchmarkArtifacts.sol +++ b/src/test/smart-wallet/utils/AABenchmarkArtifacts.sol @@ -1,14 +1,19 @@ - pragma solidity ^0.8.0; + interface ThirdwebAccountFactory { function createAccount(address _admin, bytes calldata _data) external returns (address); + function getAddress(address _adminSigner, bytes calldata _data) external view returns (address); } + interface ThirdwebAccount { - function execute(address _target, uint256 _value, bytes calldata _calldata) external; + function execute( + address _target, + uint256 _value, + bytes calldata _calldata + ) external; } address constant THIRDWEB_ACCOUNT_FACTORY_ADDRESS = 0x2e234DAe75C793f67A35089C9d99245E1C58470b; address constant THIRDWEB_ACCOUNT_IMPL_ADDRESS = 0xffD4505B3452Dc22f8473616d50503bA9E1710Ac; bytes constant THIRDWEB_ACCOUNT_FACTORY_BYTECODE = hex"608060405234801561001057600080fd5b50600436106101125760003560e01c806308e93d0a146101175780630db33003146101355780630e6254fd1461014a57806311464fbe1461015d578063248a9ca3146101915780632f2ff15d146101b257806336568abe146101c557806367793cc6146101d85780638878ed33146101eb5780639010d07c146101fe57806391d1485414610211578063938e3d7b146102345780639ddbb9d814610247578063a217fddf1461025a578063a32fa5b314610262578063a65d69d414610275578063ac9650d81461029c578063c3c5a547146102bc578063ca15c873146102cf578063d547741f146102e2578063d8fd8f44146102f5578063e8a3d48514610308575b600080fd5b61011f61031d565b60405161012c91906117d7565b60405180910390f35b6101486101433660046118eb565b61032e565b005b61011f610158366004611948565b6103d1565b6101847f000000000000000000000000ffd4505b3452dc22f8473616d50503ba9e1710ac81565b60405161012c9190611963565b6101a461019f366004611977565b6103fb565b60405190815260200161012c565b6101486101c0366004611990565b610419565b6101486101d3366004611990565b6104c3565b6101486101e63660046119bc565b610522565b6101846101f9366004611a09565b610576565b61018461020c366004611a8b565b6105f0565b61022461021f366004611990565b6106ff565b604051901515815260200161012c565b610148610242366004611aad565b610733565b6101486102553660046118eb565b610784565b6101a4600081565b610224610270366004611990565b61081d565b6101847f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d278981565b6102af6102aa366004611afd565b610880565b60405161012c9190611bcd565b6102246102ca366004611948565b610974565b6101a46102dd366004611977565b610980565b6101486102f0366004611990565b610a1d565b610184610303366004611a09565b610a28565b610310610b73565b60405161012c9190611c2f565b60606103296000610cfa565b905090565b3361033a818484610d07565b61035f5760405162461bcd60e51b815260040161035690611c42565b60405180910390fd5b6001600160a01b03841660009081526002602052604081206103819083610d5b565b905080156103ca57846001600160a01b0316826001600160a01b03167f98d1ebbe00ae92a5de96a0f49742a8afa89f42363592bc2e7cfaaed68b45e7a660405160405180910390a35b5050505050565b6001600160a01b03811660009081526002602052604090206060906103f590610cfa565b92915050565b6000610405610d70565b600092835260010160205250604090205490565b61043d610424610d70565b6000848152600191909101602052604090205433610d7a565b610445610d70565b6000838152602091825260408082206001600160a01b0385168352909252205460ff16156104b55760405162461bcd60e51b815260206004820152601d60248201527f43616e206f6e6c79206772616e7420746f206e6f6e20686f6c646572730000006044820152606401610356565b6104bf8282610dff565b5050565b336001600160a01b038216146105185760405162461bcd60e51b815260206004820152601a60248201527921b0b71037b7363c903932b737bab731b2903337b91039b2b63360311b6044820152606401610356565b6104bf8282610e13565b3361052e818484610d07565b61054a5760405162461bcd60e51b815260040161035690611c42565b610555600082610e27565b6105715760405162461bcd60e51b815260040161035690611c79565b505050565b6000806105b98585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e3c92505050565b90506105e57f000000000000000000000000ffd4505b3452dc22f8473616d50503ba9e1710ac82610e6d565b9150505b9392505050565b6000806105fb610ecd565b600085815260209190915260408120549150805b828110156106f6576000610621610ecd565b60008881526020918252604080822085835260010190925220546001600160a01b03161461069a578482141561068857610659610ecd565b600087815260209182526040808220938252600190930190915220546001600160a01b031692506103f5915050565b610693600183611cd9565b91506106e4565b6106a58660006106ff565b80156106d157506106b4610ecd565b600087815260209182526040808220828052600201909252205481145b156106e4576106e1600183611cd9565b91505b6106ef600182611cd9565b905061060f565b50505092915050565b6000610709610d70565b6000938452602090815260408085206001600160a01b039490941685529290525090205460ff1690565b61073b610ed7565b6107785760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b6044820152606401610356565b61078181610ee3565b50565b33610790818484610d07565b6107ac5760405162461bcd60e51b815260040161035690611c42565b6001600160a01b03841660009081526002602052604081206107ce9083610e27565b905080156103ca57846001600160a01b0316826001600160a01b03167f12146497b3b826918ec47f0cac7272a09ed06b30c16c030e99ec48ff5dd60b4760405160405180910390a35050505050565b6000610827610d70565b600084815260209182526040808220828052909252205460ff166108775761084d610d70565b6000848152602091825260408082206001600160a01b0386168352909252205460ff1690506103f5565b50600192915050565b6060816001600160401b0381111561089a5761089a611840565b6040519080825280602002602001820160405280156108cd57816020015b60608152602001906001900390816108b85790505b50905060005b8281101561096d5761093d308585848181106108f1576108f1611cf1565b90506020028101906109039190611d07565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610fce92505050565b82828151811061094f5761094f611cf1565b6020026020010181905250808061096590611d54565b9150506108d3565b5092915050565b60006103f58183610ff3565b60008061098b610ecd565b6000848152602091909152604081205491505b818110156109f85760006109b0610ecd565b60008681526020918252604080822085835260010190925220546001600160a01b0316146109e6576109e3600184611cd9565b92505b6109f1600182611cd9565b905061099e565b50610a048360006106ff565b15610a1757610a14600183611cd9565b91505b50919050565b610518610424610d70565b6000807f000000000000000000000000ffd4505b3452dc22f8473616d50503ba9e1710ac90506000610a908686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250610e3c92505050565b90506000610a9e8383610e6d565b90506001600160a01b0381163b15610aba5792506105e9915050565b610ac48383611015565b9050336001600160a01b037f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d27891614610b1d57610b01600082610e27565b610b1d5760405162461bcd60e51b815260040161035690611c79565b610b29818888886110ac565b866001600160a01b0316816001600160a01b03167fac631f3001b55ea1509cf3d7e74898f85392a61a76e8149181ae1259622dabc860405160405180910390a39695505050505050565b6060610b7d611114565b8054610b8890611d6f565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb490611d6f565b8015610c015780601f10610bd657610100808354040283529160200191610c01565b820191906000526020600020905b815481529060010190602001808311610be457829003601f168201915b5050505050905090565b6001610c15610d70565b6000848152602091825260408082206001600160a01b0386168084529352808220805460ff1916941515949094179093559151339285917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a45050565b7f0a7b0f5c59907924802379ebe98cdc23e2ee7820f63d30126e10b3752010e50090565b60008060ff19610cc960017f0c4ba382c0009cf238e4c1ca1a52f51c61e6248a70bdfb34e5ed49d5578a5c0c611da4565b604051602001610cdb91815260200190565b60408051601f1981840301815291905280516020909101201692915050565b606060006105e983611138565b600080610d148484610e3c565b90506000610d427f000000000000000000000000ffd4505b3452dc22f8473616d50503ba9e1710ac83610e6d565b6001600160a01b03878116911614925050509392505050565b60006105e9836001600160a01b038416611194565b6000610329610c74565b610d82610d70565b6000838152602091825260408082206001600160a01b0385168352909252205460ff166104bf57610dbd816001600160a01b03166014611287565b610dc8836020611287565b604051602001610dd9929190611dbb565b60408051601f198184030181529082905262461bcd60e51b825261035691600401611c2f565b610e098282610c0b565b6104bf8282611422565b610e1d82826114e1565b6104bf828261154a565b60006105e9836001600160a01b0384166115d9565b600082604051602001610e4f9190611963565b60405160208183030381529060405280519060200120905092915050565b6040513060388201526f5af43d82803e903d91602b57fd5bf3ff602482015260148101839052733d602d80600a3d3981f3363d3d373d3d3d363d738152605881018290526037600c820120607882015260556043909101206000906105e9565b6000610329610c98565b600061032981336106ff565b6000610eed611114565b8054610ef890611d6f565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2490611d6f565b8015610f715780601f10610f4657610100808354040283529160200191610f71565b820191906000526020600020905b815481529060010190602001808311610f5457829003601f168201915b5050505050905081610f81611114565b8151610f90926020019061173e565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a168183604051610fc2929190611e28565b60405180910390a15050565b60606105e98383604051806060016040528060278152602001611ef660279139611628565b6001600160a01b038116600090815260018301602052604081205415156105e9565b6000763d602d80600a3d3981f3363d3d373d3d3d363d730000008360601b60e81c176000526e5af43d82803e903d91602b57fd5bf38360781b1760205281603760096000f590506001600160a01b0381166103f55760405162461bcd60e51b8152602060048201526017602482015276115490cc4c4d8dce8818dc99585d194c8819985a5b1959604a1b6044820152606401610356565b60405163347d5e2560e21b81526001600160a01b0385169063d1f57894906110dc90869086908690600401611e4d565b600060405180830381600087803b1580156110f657600080fd5b505af115801561110a573d6000803e3d6000fd5b5050505050505050565b7f4bc804ba64359c0e35e5ed5d90ee596ecaa49a3a930ddcb1470ea0dd625da90090565b60608160000180548060200260200160405190810160405280929190818152602001828054801561118857602002820191906000526020600020905b815481526020019060010190808311611174575b50505050509050919050565b6000818152600183016020526040812054801561127d5760006111b8600183611da4565b85549091506000906111cc90600190611da4565b90508181146112315760008660000182815481106111ec576111ec611cf1565b906000526020600020015490508087600001848154811061120f5761120f611cf1565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061124257611242611e8d565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506103f5565b60009150506103f5565b60606000611296836002611ea3565b6112a1906002611cd9565b6001600160401b038111156112b8576112b8611840565b6040519080825280601f01601f1916602001820160405280156112e2576020820181803683370190505b509050600360fc1b816000815181106112fd576112fd611cf1565b60200101906001600160f81b031916908160001a905350600f60fb1b8160018151811061132c5761132c611cf1565b60200101906001600160f81b031916908160001a9053506000611350846002611ea3565b61135b906001611cd9565b90505b60018111156113d3576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061138f5761138f611cf1565b1a60f81b8282815181106113a5576113a5611cf1565b60200101906001600160f81b031916908160001a90535060049490941c936113cc81611ec2565b905061135e565b5083156105e95760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610356565b600061142c610ecd565b6000848152602091909152604090205490506001611448610ecd565b6000858152602091909152604081208054909190611467908490611cd9565b90915550829050611476610ecd565b6000858152602091825260408082208583526001019092522080546001600160a01b0319166001600160a01b0392909216919091179055806114b6610ecd565b6000948552602090815260408086206001600160a01b03909516865260029094019052919092205550565b6114eb8282610d7a565b6114f3610d70565b6000838152602091825260408082206001600160a01b0385168084529352808220805460ff191690555133929185917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6000611554610ecd565b6000848152602091825260408082206001600160a01b038616835260020190925220549050611581610ecd565b6000848152602091825260408082208483526001019092522080546001600160a01b03191690556115b0610ecd565b6000938452602090815260408085206001600160a01b0390941685526002909301905250812055565b6000818152600183016020526040812054611620575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556103f5565b5060006103f5565b60606001600160a01b0384163b6116905760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610356565b600080856001600160a01b0316856040516116ab9190611ed9565b600060405180830381855af49150503d80600081146116e6576040519150601f19603f3d011682016040523d82523d6000602084013e6116eb565b606091505b50915091506116fb828286611705565b9695505050505050565b606083156117145750816105e9565b8251156117245782518084602001fd5b8160405162461bcd60e51b81526004016103569190611c2f565b82805461174a90611d6f565b90600052602060002090601f01602090048101928261176c57600085556117b2565b82601f1061178557805160ff19168380011785556117b2565b828001600101855582156117b2579182015b828111156117b2578251825591602001919060010190611797565b506117be9291506117c2565b5090565b5b808211156117be57600081556001016117c3565b6020808252825182820181905260009190848201906040850190845b818110156118185783516001600160a01b0316835292840192918401916001016117f3565b50909695505050505050565b80356001600160a01b038116811461183b57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60006001600160401b038084111561187057611870611840565b604051601f8501601f19908116603f0116810190828211818310171561189857611898611840565b816040528093508581528686860111156118b157600080fd5b858560208301376000602087830101525050509392505050565b600082601f8301126118dc57600080fd5b6105e983833560208501611856565b60008060006060848603121561190057600080fd5b61190984611824565b925061191760208501611824565b915060408401356001600160401b0381111561193257600080fd5b61193e868287016118cb565b9150509250925092565b60006020828403121561195a57600080fd5b6105e982611824565b6001600160a01b0391909116815260200190565b60006020828403121561198957600080fd5b5035919050565b600080604083850312156119a357600080fd5b823591506119b360208401611824565b90509250929050565b600080604083850312156119cf57600080fd5b6119d883611824565b915060208301356001600160401b038111156119f357600080fd5b6119ff858286016118cb565b9150509250929050565b600080600060408486031215611a1e57600080fd5b611a2784611824565b925060208401356001600160401b0380821115611a4357600080fd5b818601915086601f830112611a5757600080fd5b813581811115611a6657600080fd5b876020828501011115611a7857600080fd5b6020830194508093505050509250925092565b60008060408385031215611a9e57600080fd5b50508035926020909101359150565b600060208284031215611abf57600080fd5b81356001600160401b03811115611ad557600080fd5b8201601f81018413611ae657600080fd5b611af584823560208401611856565b949350505050565b60008060208385031215611b1057600080fd5b82356001600160401b0380821115611b2757600080fd5b818501915085601f830112611b3b57600080fd5b813581811115611b4a57600080fd5b8660208260051b8501011115611b5f57600080fd5b60209290920196919550909350505050565b60005b83811015611b8c578181015183820152602001611b74565b83811115611b9b576000848401525b50505050565b60008151808452611bb9816020860160208601611b71565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015611c2257603f19888603018452611c10858351611ba1565b94509285019290850190600101611bf4565b5092979650505050505050565b6020815260006105e96020830184611ba1565b6020808252601f908201527f4163636f756e74466163746f72793a206e6f7420616e206163636f756e742e00604082015260600190565b6020808252602a908201527f4163636f756e74466163746f72793a206163636f756e7420616c7265616479206040820152691c9959da5cdd195c995960b21b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008219821115611cec57611cec611cc3565b500190565b634e487b7160e01b600052603260045260246000fd5b6000808335601e19843603018112611d1e57600080fd5b8301803591506001600160401b03821115611d3857600080fd5b602001915036819003821315611d4d57600080fd5b9250929050565b6000600019821415611d6857611d68611cc3565b5060010190565b600181811c90821680611d8357607f821691505b60208210811415610a1757634e487b7160e01b600052602260045260246000fd5b600082821015611db657611db6611cc3565b500390565b7402832b936b4b9b9b4b7b7399d1030b1b1b7bab73a1605d1b815260008351611deb816015850160208801611b71565b7001034b99036b4b9b9b4b733903937b6329607d1b6015918401918201528351611e1c816026840160208801611b71565b01602601949350505050565b604081526000611e3b6040830185611ba1565b82810360208401526105e58185611ba1565b6001600160a01b03841681526040602082018190528101829052818360608301376000818301606090810191909152601f909201601f1916010192915050565b634e487b7160e01b600052603160045260246000fd5b6000816000190483118215151615611ebd57611ebd611cc3565b500290565b600081611ed157611ed1611cc3565b506000190190565b60008251611eeb818460208701611b71565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212205d3e29505e958fbe45e9de9dcaceef129bcbdeb4391a97796b4016eda66dfb4764736f6c634300080c0033"; bytes constant THIRDWEB_ACCOUNT_IMPL_BYTECODE = hex"6080604052600436106101405760003560e01c806301ffc9a71461014c578063150b7a02146101815780631626ba7e146101c55780631dd756c5146101e557806324d7806c146102055780633a871cdd1461022557806347e1da2a146102535780634a58db19146102755780634d44560d1461027d5780635892e2361461029d5780637dff5a79146102bd5780638b52d723146102dd578063938e3d7b146102ff578063a9082d841461031f578063ac9650d81461035e578063b0d691fe1461038b578063b61d27f6146103ad578063b76464d5146103cd578063bc197c81146103ed578063c45a015514610419578063d087d2881461044d578063d1f5789414610462578063d42f2f3514610482578063e8a3d48514610497578063e9523c97146104b9578063f15d424e146104db578063f23a6e611461050857600080fd5b3661014757005b600080fd5b34801561015857600080fd5b5061016c610167366004612cd5565b610534565b60405190151581526020015b60405180910390f35b34801561018d57600080fd5b506101ac61019c366004612de1565b630a85bd0160e11b949350505050565b6040516001600160e01b03199091168152602001610178565b3480156101d157600080fd5b506101ac6101e0366004612e4c565b61057a565b3480156101f157600080fd5b5061016c610200366004612eab565b610689565b34801561021157600080fd5b5061016c610220366004612ef0565b610963565b34801561023157600080fd5b50610245610240366004612f0d565b610992565b604051908152602001610178565b34801561025f57600080fd5b5061027361026e366004612f9e565b6109b8565b005b610273610b29565b34801561028957600080fd5b50610273610298366004613037565b610b91565b3480156102a957600080fd5b506102736102b83660046130a4565b610c0a565b3480156102c957600080fd5b5061016c6102d8366004612ef0565b610fc7565b3480156102e957600080fd5b506102f2611080565b60405161017891906131b7565b34801561030b57600080fd5b5061027361031a366004613219565b6112c7565b34801561032b57600080fd5b5061033f61033a3660046130a4565b611318565b6040805192151583526001600160a01b03909116602083015201610178565b34801561036a57600080fd5b5061037e610379366004613261565b61136f565b60405161017891906132fe565b34801561039757600080fd5b506103a0611463565b6040516101789190613353565b3480156103b957600080fd5b506102736103c8366004613367565b6114ac565b3480156103d957600080fd5b506102736103e8366004612ef0565b61153c565b3480156103f957600080fd5b506101ac610408366004613450565b63bc197c8160e01b95945050505050565b34801561042557600080fd5b506103a07f0000000000000000000000002e234dae75c793f67a35089c9d99245e1c58470b81565b34801561045957600080fd5b5061024561156e565b34801561046e57600080fd5b5061027361047d3660046134fd565b6115ee565b34801561048e57600080fd5b506102f2611787565b3480156104a357600080fd5b506104ac6118f8565b6040516101789190613544565b3480156104c557600080fd5b506104ce611990565b6040516101789190613557565b3480156104e757600080fd5b506104fb6104f6366004612ef0565b6119a2565b60405161017891906135a4565b34801561051457600080fd5b506101ac6105233660046135b7565b63f23a6e6160e01b95945050505050565b60006001600160e01b03198216630271189760e51b148061056557506001600160e01b03198216630a85bd0160e11b145b80610574575061057482611a9e565b92915050565b6000806105878484611ad3565b905061059281610963565b156105a75750630b135d3f60e11b9050610574565b3360006105b2611af7565b6001600160a01b03841660009081526006919091016020526040902090506105da8183611b1b565b8061060a57506105e981611b3d565b600114801561060a575060006105ff8282611b47565b6001600160a01b0316145b6106675760405162461bcd60e51b8152602060048201526024808201527f4163636f756e743a2063616c6c6572206e6f7420617070726f7665642074617260448201526333b2ba1760e11b60648201526084015b60405180910390fd5b61067083610fc7565b1561068057630b135d3f60e11b93505b50505092915050565b6000610693611af7565b6001600160a01b0384166000908152600491909101602052604090205460ff16156106c057506001610574565b60006106ca611af7565b6001600160a01b0385166000908152600591909101602090815260408083208151606081018352815481526001909101546001600160801b0380821694830194909452600160801b9004909216908201529150610725611af7565b6006016000866001600160a01b03166001600160a01b0316815260200190815260200160002090504282602001516001600160801b03161180610775575081604001516001600160801b03164210155b80610786575061078481611b3d565b155b1561079657600092505050610574565b60006107ad6107a8606087018761361f565b611b53565b905060006107ba83611b3d565b60011480156107db575060006107d08482611b47565b6001600160a01b0316145b90506001600160e01b03198216635b0e93fb60e11b14156108535760008061080e61080960608a018a61361f565b611b8d565b9150915082610834576108218583611b1b565b6108345760009650505050505050610574565b855181111561084c5760009650505050505050610574565b5050610956565b6001600160e01b031982166323f0ed1560e11b14156109495760008061088461087f60608a018a61361f565b611bf2565b5091509150826108ee5760005b82518110156108ec576108c68382815181106108af576108af613665565b602002602001015187611b1b90919063ffffffff16565b6108da576000975050505050505050610574565b806108e481613691565b915050610891565b505b60005b82518110156109415781818151811061090c5761090c613665565b60200260200101518760000151101561092f576000975050505050505050610574565b8061093981613691565b9150506108f1565b505050610956565b6000945050505050610574565b5060019695505050505050565b600061096d611af7565b6001600160a01b03909216600090815260049290920160205250604090205460ff1690565b600061099c611c3f565b6109a68484611ca8565b90506109b182611ded565b9392505050565b6109c0611463565b6001600160a01b0316336001600160a01b031614806109e357506109e333610963565b6109ff5760405162461bcd60e51b815260040161065e906136ac565b610a07611e3a565b8481148015610a1557508483145b610a615760405162461bcd60e51b815260206004820152601d60248201527f4163636f756e743a2077726f6e67206172726179206c656e677468732e000000604482015260640161065e565b60005b85811015610b2057610b0d878783818110610a8157610a81613665565b9050602002016020810190610a969190612ef0565b868684818110610aa857610aa8613665565b90506020020135858585818110610ac157610ac1613665565b9050602002810190610ad3919061361f565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f3792505050565b5080610b1881613691565b915050610a64565b50505050505050565b610b31611463565b6001600160a01b031663b760faf934306040518363ffffffff1660e01b8152600401610b5d9190613353565b6000604051808303818588803b158015610b7657600080fd5b505af1158015610b8a573d6000803e3d6000fd5b5050505050565b610b99611fa8565b610ba1611463565b60405163040b850f60e31b81526001600160a01b03848116600483015260248201849052919091169063205c2878906044015b600060405180830381600087803b158015610bee57600080fd5b505af1158015610c02573d6000803e3d6000fd5b505050505050565b6000610c196020850185612ef0565b905042610c2c60e0860160c08701613704565b6001600160801b031611158015610c5b5750610c4f610100850160e08601613704565b6001600160801b031642105b610c915760405162461bcd60e51b8152602060048201526007602482015266085c195c9a5bd960ca1b604482015260640161065e565b600080610c9f868686611318565b9150915081610cd95760405162461bcd60e51b815260040161065e906020808252600490820152632173696760e01b604082015260600190565b6001610ce3611af7565b610100880135600090815260079190910160209081526040808320805460ff1916941515949094179093559091610d1f91908901908901613730565b60ff161115610d4c576000610d3a6040880160208901613730565b60ff166001149050610b208482611fe6565b610d5583610963565b15610d8a5760405162461bcd60e51b815260206004820152600560248201526430b236b4b760d91b604482015260640161065e565b610d9f83610d96611af7565b600201906120c9565b50604051806060016040528087606001358152602001876080016020810190610dc89190613704565b6001600160801b03168152602001610de660c0890160a08a01613704565b6001600160801b03169052610df9611af7565b6001600160a01b03851660009081526005919091016020908152604080832084518155918401519301516001600160801b03908116600160801b02931692909217600190920191909155610e6f610e4e611af7565b6001600160a01b0386166000908152600691909101602052604090206120de565b805190915060005b81811015610ed957610ec6838281518110610e9457610e94613665565b6020026020010151610ea4611af7565b6001600160a01b038916600090815260069190910160205260409020906120eb565b50610ed260018261374b565b9050610e77565b50610ee76040890189613763565b9050905060005b81811015610f6857610f55610f0660408b018b613763565b83818110610f1657610f16613665565b9050602002016020810190610f2b9190612ef0565b610f33611af7565b6001600160a01b038916600090815260069190910160205260409020906120c9565b50610f6160018261374b565b9050610eee565b50610f7288612100565b846001600160a01b0316836001600160a01b03167ff21d10c26e35863a8df291aca54181ee8c4a3bc8e00246c3f7a5a14b69d826a78a604051610fb5919061383d565b60405180910390a35050505050505050565b600080610fd2611af7565b6001600160a01b038416600090815260059190910160209081526040918290208251606081018452815481526001909101546001600160801b03808216938301849052600160801b90910416928101929092529091504210801590611043575080604001516001600160801b031642105b80156109b157506000611078611057611af7565b6001600160a01b038616600090815260069190910160205260409020611b3d565b119392505050565b6060600061109761108f611af7565b6002016120de565b80519091506000805b82811015611128576110ca8482815181106110bd576110bd613665565b6020026020010151610fc7565b156110e157816110d981613691565b925050611116565b60008482815181106110f5576110f5613665565b60200260200101906001600160a01b031690816001600160a01b0316815250505b61112160018261374b565b90506110a0565b50806001600160401b0381111561114157611141612d24565b60405190808252806020026020018201604052801561117a57816020015b611167612bf2565b81526020019060019003908161115f5790505b5093506000805b838110156112bf5760006001600160a01b03168582815181106111a6576111a6613665565b60200260200101516001600160a01b0316146112ad5760008582815181106111d0576111d0613665565b6020026020010151905060006111e4611af7565b6001600160a01b038316600081815260059290920160209081526040928390208351606081018552815481526001909101546001600160801b0380821683850152600160801b9091041681850152835160a08101909452918352909250810161124e610e4e611af7565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b031681525088858061128d90613691565b96508151811061129f5761129f613665565b602002602001018190525050505b6112b860018261374b565b9050611181565b505050505090565b6112cf6121a3565b61130c5760405162461bcd60e51b815260206004820152600e60248201526d139bdd08185d5d1a1bdc9a5e995960921b604482015260640161065e565b611315816121bb565b50565b60008061132e611327866122a6565b85856123ea565b9050611338611af7565b6101008601356000908152600791909101602052604090205460ff16158015611365575061136581610963565b9150935093915050565b6060816001600160401b0381111561138957611389612d24565b6040519080825280602002602001820160405280156113bc57816020015b60608152602001906001900390816113a75790505b50905060005b8281101561145c5761142c308585848181106113e0576113e0613665565b90506020028101906113f2919061361f565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061244492505050565b82828151811061143e5761143e613665565b6020026020010181905250808061145490613691565b9150506113c2565b5092915050565b60008061146e612469565b546001600160a01b03169050801561148557919050565b7f0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d278991505090565b6114b4611463565b6001600160a01b0316336001600160a01b031614806114d757506114d733610963565b6114f35760405162461bcd60e51b815260040161065e906136ac565b6114fb611e3a565b610b8a848484848080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f3792505050565b611544611fa8565b8061154d612469565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6000611578611463565b604051631aab3f0d60e11b8152306004820152600060248201526001600160a01b0391909116906335567e1a90604401602060405180830381865afa1580156115c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e99190613928565b905090565b60006115f861248d565b5460ff169050600061160861248d565b54610100900460ff1690508015808015611625575060018360ff16105b80611644575061163430612497565b15801561164457508260ff166001145b6116a75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161065e565b60016116b161248d565b805460ff191660ff9290921691909117905580156116ea5760016116d361248d565b80549115156101000261ff00199092169190911790555b856116f3612469565b60010160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550611725866001611fe6565b8015610c0257600061173561248d565b80549115156101000261ff0019909216919091179055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a1505050505050565b6060600061179661108f611af7565b8051909150806001600160401b038111156117b3576117b3612d24565b6040519080825280602002602001820160405280156117ec57816020015b6117d9612bf2565b8152602001906001900390816117d15790505b50925060005b818110156118f257600083828151811061180e5761180e613665565b602002602001015190506000611822611af7565b6001600160a01b038316600081815260059290920160209081526040928390208351606081018552815481526001909101546001600160801b0380821683850152600160801b9091041681850152835160a08101909452918352909250810161188c610e4e611af7565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b03168152508684815181106118d1576118d1613665565b602002602001018190525050506001816118eb919061374b565b90506117f2565b50505090565b60606119026124a6565b805461190d90613941565b80601f016020809104026020016040519081016040528092919081815260200182805461193990613941565b80156119865780601f1061195b57610100808354040283529160200191611986565b820191906000526020600020905b81548152906001019060200180831161196957829003601f168201915b5050505050905090565b60606115e961199d611af7565b6120de565b6119aa612bf2565b60006119b4611af7565b6001600160a01b038416600081815260059290920160209081526040928390208351606081018552815481526001909101546001600160801b0380821683850152600160801b9091041681850152835160a081019094529183529092508101611a3f611a1e611af7565b6001600160a01b0387166000908152600691909101602052604090206120de565b81526020018260000151815260200182602001516001600160801b0316815260200182604001516001600160801b0316815250915050919050565b7f322cf19c484104d3b1a9c2982ebae869ede3fa5f6c4703ca41b9a48c76ee030090565b60006001600160e01b03198216630271189760e51b148061057457506301ffc9a760e01b6001600160e01b0319831614610574565b6000806000611ae285856124ca565b91509150611aef81612510565b509392505050565b7f3181e78fc1b109bc611fd2406150bf06e33faa75f71cba12c3e1fd670f2def0090565b6001600160a01b038116600090815260018301602052604081205415156109b1565b6000610574825490565b60006109b18383612659565b60006004821015611b765760405162461bcd60e51b815260040161065e90613976565b611b84600460008486613995565b6109b1916139bf565b6000806044831015611bb15760405162461bcd60e51b815260040161065e90613976565b611bbf602460048587613995565b810190611bcc9190612ef0565b9150611bdc604460248587613995565b810190611be991906139ef565b90509250929050565b606080806064841015611c175760405162461bcd60e51b815260040161065e90613976565b611c248460048188613995565b810190611c319190613a87565b919790965090945092505050565b611c47611463565b6001600160a01b0316336001600160a01b031614611ca65760405162461bcd60e51b815260206004820152601c60248201527b1858d8dbdd5b9d0e881b9bdd08199c9bdb48115b9d1c9e541bda5b9d60221b604482015260640161065e565b565b7b0ca2ba3432b932bab69029b4b3b732b21026b2b9b9b0b3b29d05199960211b6000908152601c829052603c81206000611d26611ce961014087018761361f565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508693925050611ad39050565b9050611d328186610689565b611d4157600192505050610574565b6000611d4b611af7565b6001600160a01b03929092166000908152600590920160209081526040808420815160608082018452825482526001909201546001600160801b0380821683870152600160801b8204908116928501929092528351928301845295825265ffffffffffff8087169483019490945292831691015260d09290921b6001600160d01b03191660a09290921b65ffffffffffff60a01b169190911795945050505050565b801561131557604051600090339060001990849084818181858888f193505050503d8060008114610b8a576040519150601f19603f3d011682016040523d82523d6000602084013e610b8a565b60405163c3c5a54760e01b81527f0000000000000000000000002e234dae75c793f67a35089c9d99245e1c58470b906001600160a01b0382169063c3c5a54790611e88903090600401613353565b602060405180830381865afa158015611ea5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec99190613b6c565b61131557806001600160a01b03166367793cc6611ee4612469565b600101546040805160e084901b6001600160e01b03191681526001600160a01b0390921660048301526024820152600060448201526064015b600060405180830381600087803b158015610b7657600080fd5b60606000846001600160a01b03168484604051611f549190613b8e565b60006040518083038185875af1925050503d8060008114611f91576040519150601f19603f3d011682016040523d82523d6000602084013e611f96565b606091505b509250905080611aef57815160208301fd5b611fb133610963565b611ca65760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b604482015260640161065e565b611ff08282612683565b6001600160a01b037f0000000000000000000000002e234dae75c793f67a35089c9d99245e1c58470b163b156120c557801561208d577f0000000000000000000000002e234dae75c793f67a35089c9d99245e1c58470b6001600160a01b0316639ddbb9d88361205e612469565b600101546040516001600160e01b031960e085901b168152610bd492916001600160a01b031690600401613baa565b7f0000000000000000000000002e234dae75c793f67a35089c9d99245e1c58470b6001600160a01b0316630db330038361205e612469565b5050565b60006109b1836001600160a01b038416612732565b606060006109b183612781565b60006109b1836001600160a01b0384166127dd565b6001600160a01b037f0000000000000000000000002e234dae75c793f67a35089c9d99245e1c58470b163b15611315576001600160a01b037f0000000000000000000000002e234dae75c793f67a35089c9d99245e1c58470b16639ddbb9d861216c6020840184612ef0565b612174612469565b600101546040516001600160e01b031960e085901b168152611f1d92916001600160a01b031690600401613baa565b60006121ae33610963565b806115e957505030331490565b60006121c56124a6565b80546121d090613941565b80601f01602080910402602001604051908101604052809291908181526020018280546121fc90613941565b80156122495780601f1061221e57610100808354040283529160200191612249565b820191906000526020600020905b81548152906001019060200180831161222c57829003601f168201915b50505050509050816122596124a6565b81516122689260200190612c3c565b507fc9c7c3fe08b88b4df9d4d47ef47d2c43d55c025a0ba88ca442580ed9e7348a16818360405161229a929190613bd3565b60405180910390a15050565b60607f3fd4a1a1a267c84185e3b7eecd57c68783c0581d538b9d6e5f23e4670497c1e96122d66020840184612ef0565b6122e66040850160208601613730565b6122f36040860186613763565b604051602001612304929190613c01565b60408051601f198184030181529190528051602090910120606086013561233160a0880160808901613704565b61234160c0890160a08a01613704565b61235160e08a0160c08b01613704565b6123626101008b0160e08c01613704565b60408051602081019a909a526001600160a01b039098169789019790975260ff9095166060880152608087019390935260a08601919091526001600160801b0390811660c086015290811660e0850152908116610100848101919091529116610120830152830135610140820152610160016040516020818303038152906040529050919050565b600061243c83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505087516020890120612436925090506128d0565b90611ad3565b949350505050565b60606109b18383604051806060016040528060278152602001613c87602791396128fd565b7f036f52c1827dab135f7fd44ca0bddde297e2f659c710e0ec53e975f22b54830090565b60006115e9611a7a565b6001600160a01b03163b151590565b7f4bc804ba64359c0e35e5ed5d90ee596ecaa49a3a930ddcb1470ea0dd625da90090565b6000808251604114156125015760208301516040840151606085015160001a6124f5878285856129d8565b94509450505050612509565b506000905060025b9250929050565b600081600481111561252457612524613c43565b141561252d5750565b600181600481111561254157612541613c43565b141561258a5760405162461bcd60e51b815260206004820152601860248201527745434453413a20696e76616c6964207369676e617475726560401b604482015260640161065e565b600281600481111561259e5761259e613c43565b14156125ec5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161065e565b600381600481111561260057612600613c43565b14156113155760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161065e565b600082600001828154811061267057612670613665565b9060005260206000200154905092915050565b8061268c611af7565b6001600160a01b038416600090815260049190910160205260409020805460ff191691151591909117905580156126d5576126cf826126c9611af7565b906120c9565b506126e9565b6126e7826126e1611af7565b906120eb565b505b816001600160a01b03167f235bc17e7930760029e9f4d860a2a8089976de5b381cf8380fc11c1d88a1113382604051612726911515815260200190565b60405180910390a25050565b600081815260018301602052604081205461277957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610574565b506000610574565b6060816000018054806020026020016040519081016040528092919081815260200182805480156127d157602002820191906000526020600020905b8154815260200190600101908083116127bd575b50505050509050919050565b600081815260018301602052604081205480156128c6576000612801600183613c59565b855490915060009061281590600190613c59565b905081811461287a57600086600001828154811061283557612835613665565b906000526020600020015490508087600001848154811061285857612858613665565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061288b5761288b613c70565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610574565b6000915050610574565b60006105746128dd612a92565b8360405161190160f01b8152600281019290925260228201526042902090565b606061290884612497565b6129635760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b606482015260840161065e565b600080856001600160a01b03168560405161297e9190613b8e565b600060405180830381855af49150503d80600081146129b9576040519150601f19603f3d011682016040523d82523d6000602084013e6129be565b606091505b50915091506129ce828286612bb9565b9695505050505050565b6000806fa2a8918ca85bafe22016d0b997e4df60600160ff1b03831115612a055750600090506003612a89565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015612a59573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116612a8257600060019250925050612a89565b9150600090505b94509492505050565b6000306001600160a01b037f000000000000000000000000ffd4505b3452dc22f8473616d50503ba9e1710ac16148015612aeb57507f0000000000000000000000000000000000000000000000000000000000007a6946145b15612b1557507fbcdadf6444930a967ffda04923d78c49b3dd65df3ed39abb04a1e3eb1190553790565b50604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f6020808301919091527ff0729608244859f656d32ae4cbc6b0367695d68d8e941a28f5e2d33c6d5182dd828401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b60608315612bc85750816109b1565b825115612bd85782518084602001fd5b8160405162461bcd60e51b815260040161065e9190613544565b6040518060a0016040528060006001600160a01b03168152602001606081526020016000815260200160006001600160801b0316815260200160006001600160801b031681525090565b828054612c4890613941565b90600052602060002090601f016020900481019282612c6a5760008555612cb0565b82601f10612c8357805160ff1916838001178555612cb0565b82800160010185558215612cb0579182015b82811115612cb0578251825591602001919060010190612c95565b50612cbc929150612cc0565b5090565b5b80821115612cbc5760008155600101612cc1565b600060208284031215612ce757600080fd5b81356001600160e01b0319811681146109b157600080fd5b6001600160a01b038116811461131557600080fd5b8035612d1f81612cff565b919050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612d6257612d62612d24565b604052919050565b60006001600160401b03831115612d8357612d83612d24565b612d96601f8401601f1916602001612d3a565b9050828152838383011115612daa57600080fd5b828260208301376000602084830101529392505050565b600082601f830112612dd257600080fd5b6109b183833560208501612d6a565b60008060008060808587031215612df757600080fd5b8435612e0281612cff565b93506020850135612e1281612cff565b92506040850135915060608501356001600160401b03811115612e3457600080fd5b612e4087828801612dc1565b91505092959194509250565b60008060408385031215612e5f57600080fd5b8235915060208301356001600160401b03811115612e7c57600080fd5b612e8885828601612dc1565b9150509250929050565b60006101608284031215612ea557600080fd5b50919050565b60008060408385031215612ebe57600080fd5b8235612ec981612cff565b915060208301356001600160401b03811115612ee457600080fd5b612e8885828601612e92565b600060208284031215612f0257600080fd5b81356109b181612cff565b600080600060608486031215612f2257600080fd5b83356001600160401b03811115612f3857600080fd5b612f4486828701612e92565b9660208601359650604090950135949350505050565b60008083601f840112612f6c57600080fd5b5081356001600160401b03811115612f8357600080fd5b6020830191508360208260051b850101111561250957600080fd5b60008060008060008060608789031215612fb757600080fd5b86356001600160401b0380821115612fce57600080fd5b612fda8a838b01612f5a565b90985096506020890135915080821115612ff357600080fd5b612fff8a838b01612f5a565b9096509450604089013591508082111561301857600080fd5b5061302589828a01612f5a565b979a9699509497509295939492505050565b6000806040838503121561304a57600080fd5b823561305581612cff565b946020939093013593505050565b60008083601f84011261307557600080fd5b5081356001600160401b0381111561308c57600080fd5b60208301915083602082850101111561250957600080fd5b6000806000604084860312156130b957600080fd5b83356001600160401b03808211156130d057600080fd5b9085019061012082880312156130e557600080fd5b909350602085013590808211156130fb57600080fd5b5061310886828701613063565b9497909650939450505050565b6001600160801b03169052565b80516001600160a01b03908116835260208083015160a082860181905281519086018190526000939183019290849060c08801905b8083101561317957855185168252948301946001929092019190830190613157565b5060408701516040890152606087015194506131986060890186613115565b608087015194506131ac6080890186613115565b979650505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561320c57603f198886030184526131fa858351613122565b945092850192908501906001016131de565b5092979650505050505050565b60006020828403121561322b57600080fd5b81356001600160401b0381111561324157600080fd5b8201601f8101841361325257600080fd5b61243c84823560208401612d6a565b6000806020838503121561327457600080fd5b82356001600160401b0381111561328a57600080fd5b61329685828601612f5a565b90969095509350505050565b60005b838110156132bd5781810151838201526020016132a5565b838111156132cc576000848401525b50505050565b600081518084526132ea8160208601602086016132a2565b601f01601f19169290920160200192915050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b8281101561320c57603f198886030184526133418583516132d2565b94509285019290850190600101613325565b6001600160a01b0391909116815260200190565b6000806000806060858703121561337d57600080fd5b843561338881612cff565b93506020850135925060408501356001600160401b038111156133aa57600080fd5b6133b687828801613063565b95989497509550505050565b60006001600160401b038211156133db576133db612d24565b5060051b60200190565b600082601f8301126133f657600080fd5b8135602061340b613406836133c2565b612d3a565b82815260059290921b8401810191818101908684111561342a57600080fd5b8286015b84811015613445578035835291830191830161342e565b509695505050505050565b600080600080600060a0868803121561346857600080fd5b853561347381612cff565b9450602086013561348381612cff565b935060408601356001600160401b038082111561349f57600080fd5b6134ab89838a016133e5565b945060608801359150808211156134c157600080fd5b6134cd89838a016133e5565b935060808801359150808211156134e357600080fd5b506134f088828901612dc1565b9150509295509295909350565b60008060006040848603121561351257600080fd5b833561351d81612cff565b925060208401356001600160401b0381111561353857600080fd5b61310886828701613063565b6020815260006109b160208301846132d2565b6020808252825182820181905260009190848201906040850190845b818110156135985783516001600160a01b031683529284019291840191600101613573565b50909695505050505050565b6020815260006109b16020830184613122565b600080600080600060a086880312156135cf57600080fd5b85356135da81612cff565b945060208601356135ea81612cff565b9350604086013592506060860135915060808601356001600160401b0381111561361357600080fd5b6134f088828901612dc1565b6000808335601e1984360301811261363657600080fd5b8301803591506001600160401b0382111561365057600080fd5b60200191503681900382131561250957600080fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156136a5576136a561367b565b5060010190565b60208082526021908201527f4163636f756e743a206e6f742061646d696e206f7220456e747279506f696e746040820152601760f91b606082015260800190565b80356001600160801b0381168114612d1f57600080fd5b60006020828403121561371657600080fd5b6109b1826136ed565b803560ff81168114612d1f57600080fd5b60006020828403121561374257600080fd5b6109b18261371f565b6000821982111561375e5761375e61367b565b500190565b6000808335601e1984360301811261377a57600080fd5b8301803591506001600160401b0382111561379457600080fd5b6020019150600581901b360382131561250957600080fd5b6000808335601e198436030181126137c357600080fd5b83016020810192503590506001600160401b038111156137e257600080fd5b8060051b360383131561250957600080fd5b8183526000602080850194508260005b8581101561383257813561381781612cff565b6001600160a01b031687529582019590820190600101613804565b509495945050505050565b6020815261385e6020820161385184612d14565b6001600160a01b03169052565b600061386c6020840161371f565b60ff811660408401525061388360408401846137ac565b61012080606086015261389b610140860183856137f4565b9250606086013560808601526138b3608087016136ed565b91506138c260a0860183613115565b6138ce60a087016136ed565b91506138dd60c0860183613115565b6138e960c087016136ed565b91506138f860e0860183613115565b61390460e087016136ed565b915061010061391581870184613115565b9590950135939094019290925250919050565b60006020828403121561393a57600080fd5b5051919050565b600181811c9082168061395557607f821691505b60208210811415612ea557634e487b7160e01b600052602260045260246000fd5b602080825260059082015264214461746160d81b604082015260600190565b600080858511156139a557600080fd5b838611156139b257600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156139e75780818660040360031b1b83161692505b505092915050565b600060208284031215613a0157600080fd5b5035919050565b600082601f830112613a1957600080fd5b81356020613a29613406836133c2565b82815260059290921b84018101918181019086841115613a4857600080fd5b8286015b848110156134455780356001600160401b03811115613a6b5760008081fd5b613a798986838b0101612dc1565b845250918301918301613a4c565b600080600060608486031215613a9c57600080fd5b83356001600160401b0380821115613ab357600080fd5b818601915086601f830112613ac757600080fd5b81356020613ad7613406836133c2565b82815260059290921b8401810191818101908a841115613af657600080fd5b948201945b83861015613b1d578535613b0e81612cff565b82529482019490820190613afb565b97505087013592505080821115613b3357600080fd5b613b3f878388016133e5565b93506040860135915080821115613b5557600080fd5b50613b6286828701613a08565b9150509250925092565b600060208284031215613b7e57600080fd5b815180151581146109b157600080fd5b60008251613ba08184602087016132a2565b9190910192915050565b6001600160a01b0392831681529116602082015260606040820181905260009082015260800190565b604081526000613be660408301856132d2565b8281036020840152613bf881856132d2565b95945050505050565b60008184825b85811015613c38578135613c1a81612cff565b6001600160a01b031683526020928301929190910190600101613c07565b509095945050505050565b634e487b7160e01b600052602160045260246000fd5b600082821015613c6b57613c6b61367b565b500390565b634e487b7160e01b600052603160045260246000fdfe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220488fca858cea32ff9345eebbb45b5bf07cf886a8608e53ce6abe287edb408a8264736f6c634300080c0033"; - diff --git a/src/test/smart-wallet/utils/AABenchmarkTest.t.sol b/src/test/smart-wallet/utils/AABenchmarkTest.t.sol index 36d863c41..36dd5cc0c 100644 --- a/src/test/smart-wallet/utils/AABenchmarkTest.t.sol +++ b/src/test/smart-wallet/utils/AABenchmarkTest.t.sol @@ -15,7 +15,11 @@ contract ProfileThirdwebAccount is AAGasProfileBase { setAccount(); } - function fillData(address _to, uint256 _value, bytes memory _data) internal view override returns (bytes memory) { + function fillData( + address _to, + uint256 _value, + bytes memory _data + ) internal view override returns (bytes memory) { return abi.encodeWithSelector(ThirdwebAccount.execute.selector, _to, _value, _data); } From b43a546b77aa4be1f14cdd7f726db6f9a0ac16e0 Mon Sep 17 00:00:00 2001 From: WhiteOakKong Date: Thu, 2 Nov 2023 14:52:40 -0500 Subject: [PATCH 3/3] fix foundry.toml --- foundry.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/foundry.toml b/foundry.toml index eb676173f..a45aa3935 100644 --- a/foundry.toml +++ b/foundry.toml @@ -38,7 +38,7 @@ remappings = [ 'erc721a-upgradeable/=lib/ERC721A-Upgradeable/', 'erc721a/=lib/ERC721A/', '@thirdweb-dev/dynamic-contracts/=lib/dynamic-contracts/', - 'lib/sstore2=lib/dynamic-contracts/lib/sstore2/' + 'lib/sstore2=lib/dynamic-contracts/lib/sstore2/', 'aa-benchmark/=lib/aa-benchmark/', 'solady/=lib/solady/src/' ]