@ensuro/account-abstraction
Version:
ERC-4337 related contracts by the Ensuro Team
549 lines (548 loc) • 31.6 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "AccessControlAccount",
"sourceName": "contracts/AccessControlAccount.sol",
"abi": [
{
"inputs": [
{
"internalType": "contract IEntryPoint",
"name": "anEntryPoint",
"type": "address"
},
{
"internalType": "address",
"name": "admin",
"type": "address"
},
{
"internalType": "address[]",
"name": "executors",
"type": "address[]"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"inputs": [],
"name": "AccessControlBadConfirmation",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "bytes32",
"name": "neededRole",
"type": "bytes32"
}
],
"name": "AccessControlUnauthorizedAccount",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "target",
"type": "address"
}
],
"name": "AddressEmptyCode",
"type": "error"
},
{
"inputs": [],
"name": "ECDSAInvalidSignature",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "length",
"type": "uint256"
}
],
"name": "ECDSAInvalidSignatureLength",
"type": "error"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "ECDSAInvalidSignatureS",
"type": "error"
},
{
"inputs": [],
"name": "FailedCall",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "needed",
"type": "uint256"
}
],
"name": "InsufficientBalance",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RequiredEntryPointOrExecutor",
"type": "error"
},
{
"inputs": [],
"name": "WrongArrayLength",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "previousAdminRole",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "bytes32",
"name": "newAdminRole",
"type": "bytes32"
}
],
"name": "RoleAdminChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleGranted",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"indexed": true,
"internalType": "address",
"name": "account",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "sender",
"type": "address"
}
],
"name": "RoleRevoked",
"type": "event"
},
{
"inputs": [],
"name": "DEFAULT_ADMIN_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "EXECUTOR_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "WITHDRAW_ROLE",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "addDeposit",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "entryPoint",
"outputs": [
{
"internalType": "contract IEntryPoint",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "dest",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "func",
"type": "bytes"
}
],
"name": "execute",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "dest",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "value",
"type": "uint256[]"
},
{
"internalType": "bytes[]",
"name": "func",
"type": "bytes[]"
}
],
"name": "executeBatch",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "getDeposit",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "getNonce",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
}
],
"name": "getRoleAdmin",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "grantRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "hasRole",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "callerConfirmation",
"type": "address"
}
],
"name": "renounceRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes32",
"name": "role",
"type": "bytes32"
},
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "revokeRole",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "address",
"name": "sender",
"type": "address"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "initCode",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "callData",
"type": "bytes"
},
{
"internalType": "bytes32",
"name": "accountGasLimits",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "preVerificationGas",
"type": "uint256"
},
{
"internalType": "bytes32",
"name": "gasFees",
"type": "bytes32"
},
{
"internalType": "bytes",
"name": "paymasterAndData",
"type": "bytes"
},
{
"internalType": "bytes",
"name": "signature",
"type": "bytes"
}
],
"internalType": "struct PackedUserOperation",
"name": "userOp",
"type": "tuple"
},
{
"internalType": "bytes32",
"name": "userOpHash",
"type": "bytes32"
},
{
"internalType": "uint256",
"name": "missingAccountFunds",
"type": "uint256"
}
],
"name": "validateUserOp",
"outputs": [
{
"internalType": "uint256",
"name": "validationData",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address payable",
"name": "withdrawAddress",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "withdrawDepositTo",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
}
],
"bytecode": "0x60a060405234801561000f575f5ffd5b506040516114e03803806114e083398101604081905261002e91610190565b6001600160a01b0383166080526100455f836100ac565b505f5b81518110156100a35761009a7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6383838151811061008757610087610282565b60200260200101516100ac60201b60201c565b50600101610048565b50505050610296565b5f828152602081815260408083206001600160a01b038516845290915281205460ff1661014c575f838152602081815260408083206001600160a01b03861684529091529020805460ff191660011790556101043390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161014f565b505f5b92915050565b6001600160a01b0381168114610169575f5ffd5b50565b805161017781610155565b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f606084860312156101a2575f5ffd5b83516101ad81610155565b60208501519093506101be81610155565b60408501519092506001600160401b038111156101d9575f5ffd5b8401601f810186136101e9575f5ffd5b80516001600160401b038111156102025761020261017c565b604051600582901b90603f8201601f191681016001600160401b03811182821017156102305761023061017c565b60405291825260208184018101929081018984111561024d575f5ffd5b6020850194505b83851015610273576102658561016c565b815260209485019401610254565b50809450505050509250925092565b634e487b7160e01b5f52603260045260245ffd5b6080516112086102d85f395f818161029b015281816105c3015281816106690152818161077301528181610808015281816108660152610af201526112085ff3fe6080604052600436106100fd575f3560e01c80634d44560d11610092578063b61d27f611610062578063b61d27f6146102c5578063c399ec88146102e4578063d087d288146102f8578063d547741f1461030c578063e02023a11461032b575f5ffd5b80634d44560d1461023157806391d1485414610250578063a217fddf1461026f578063b0d691fe14610282575f5ffd5b80632f2ff15d116100cd5780632f2ff15d146101ca57806336568abe146101eb57806347e1da2a1461020a5780634a58db1914610229575f5ffd5b806301ffc9a71461010857806307bd02651461013c57806319822f7c1461017d578063248a9ca31461019c575f5ffd5b3661010457005b5f5ffd5b348015610113575f5ffd5b50610127610122366004610eba565b61035e565b60405190151581526020015b60405180910390f35b348015610147575f5ffd5b5061016f7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b604051908152602001610133565b348015610188575f5ffd5b5061016f610197366004610ee1565b610394565b3480156101a7575f5ffd5b5061016f6101b6366004610f30565b5f9081526020819052604090206001015490565b3480156101d5575f5ffd5b506101e96101e4366004610f5b565b6103b9565b005b3480156101f6575f5ffd5b506101e9610205366004610f5b565b6103e3565b348015610215575f5ffd5b506101e9610224366004610fd1565b61041b565b6101e96105c1565b34801561023c575f5ffd5b506101e961024b366004611070565b61063d565b34801561025b575f5ffd5b5061012761026a366004610f5b565b6106e3565b34801561027a575f5ffd5b5061016f5f81565b34801561028d575f5ffd5b506040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152602001610133565b3480156102d0575f5ffd5b506101e96102df36600461109a565b61070b565b3480156102ef575f5ffd5b5061016f610754565b348015610303575f5ffd5b5061016f6107e2565b348015610317575f5ffd5b506101e9610326366004610f5b565b610837565b348015610336575f5ffd5b5061016f7f5d8e12c39142ff96d79d04d15d1ba1269e4fe57bb9d26f43523628b34ba108ec81565b5f6001600160e01b03198216637965db0b60e01b148061038e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f61039d61085b565b6103a784846108da565b90506103b28261099c565b9392505050565b5f828152602081905260409020600101546103d3816109e5565b6103dd83836109ef565b50505050565b6001600160a01b038116331461040c5760405163334bd91960e11b815260040160405180910390fd5b6104168282610a7e565b505050565b610423610ae7565b848114158061043c5750821580159061043c5750828114155b1561045a5760405163150072e360e11b815260040160405180910390fd5b5f839003610502575f5b858110156104fc576104f38787838181106104815761048161111f565b90506020020160208101906104969190611133565b8484848181106104a8576104a861111f565b90506020028101906104ba919061114e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509250610b67915050565b50600101610464565b506105b9565b5f5b858110156105b7576105ae8787838181106105215761052161111f565b90506020020160208101906105369190611133565b8484848181106105485761054861111f565b905060200281019061055a919061114e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a92508991508690508181106105a2576105a261111f565b90506020020135610b67565b50600101610504565b505b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024015f604051808303818588803b158015610624575f5ffd5b505af1158015610636573d5f5f3e3d5ffd5b5050505050565b7f5d8e12c39142ff96d79d04d15d1ba1269e4fe57bb9d26f43523628b34ba108ec610667816109e5565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03858116600483015260248201859052919091169063205c2878906044015f604051808303815f87803b1580156106d1575f5ffd5b505af11580156105b7573d5f5f3e3d5ffd5b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610713610ae7565b6106368483838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610b67915050565b6040516370a0823160e01b81523060048201525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa1580156107b9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107dd9190611191565b905090565b604051631aab3f0d60e11b81523060048201525f60248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a9060440161079e565b5f82815260208190526040902060010154610851816109e5565b6103dd8383610a7e565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108d85760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e740000000060448201526064015b60405180910390fd5b565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c829052603c81205f6109548261091b61010088018861114e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c0792505050565b90506109807fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63826106e3565b61098f5760019250505061038e565b505f949350505050565b50565b8015610999576040515f9033905f1990849084818181858888f193505050503d805f8114610636576040519150601f19603f3d011682016040523d82523d5f602084013e610636565b6109998133610c2f565b5f6109fa83836106e3565b610a77575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055610a2f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161038e565b505f61038e565b5f610a8983836106e3565b15610a77575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161038e565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590610b475750610b457fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63336106e3565b155b156108d857604051633c687f6b60e21b81523360048201526024016108cf565b606081471015610b935760405163cf47918160e01b8152476004820152602481018390526044016108cf565b5f5f856001600160a01b03168486604051610bae91906111a8565b5f6040518083038185875af1925050503d805f8114610be8576040519150601f19603f3d011682016040523d82523d5f602084013e610bed565b606091505b5091509150610bfd868383610c6c565b9695505050505050565b5f5f5f5f610c158686610cc8565b925092509250610c258282610d11565b5090949350505050565b610c3982826106e3565b610c685760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016108cf565b5050565b606082610c8157610c7c82610dc9565b6103b2565b8151158015610c9857506001600160a01b0384163b155b15610cc157604051639996b31560e01b81526001600160a01b03851660048201526024016108cf565b50806103b2565b5f5f5f8351604103610cff576020840151604085015160608601515f1a610cf188828585610df2565b955095509550505050610d0a565b505081515f91506002905b9250925092565b5f826003811115610d2457610d246111be565b03610d2d575050565b6001826003811115610d4157610d416111be565b03610d5f5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610d7357610d736111be565b03610d945760405163fce698f760e01b8152600481018290526024016108cf565b6003826003811115610da857610da86111be565b03610c68576040516335e2f38360e21b8152600481018290526024016108cf565b805115610dd95780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610e2b57505f91506003905082610eb0565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610e7c573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610ea757505f925060019150829050610eb0565b92505f91508190505b9450945094915050565b5f60208284031215610eca575f5ffd5b81356001600160e01b0319811681146103b2575f5ffd5b5f5f5f60608486031215610ef3575f5ffd5b833567ffffffffffffffff811115610f09575f5ffd5b84016101208187031215610f1b575f5ffd5b95602085013595506040909401359392505050565b5f60208284031215610f40575f5ffd5b5035919050565b6001600160a01b0381168114610999575f5ffd5b5f5f60408385031215610f6c575f5ffd5b823591506020830135610f7e81610f47565b809150509250929050565b5f5f83601f840112610f99575f5ffd5b50813567ffffffffffffffff811115610fb0575f5ffd5b6020830191508360208260051b8501011115610fca575f5ffd5b9250929050565b5f5f5f5f5f5f60608789031215610fe6575f5ffd5b863567ffffffffffffffff811115610ffc575f5ffd5b61100889828a01610f89565b909750955050602087013567ffffffffffffffff811115611027575f5ffd5b61103389828a01610f89565b909550935050604087013567ffffffffffffffff811115611052575f5ffd5b61105e89828a01610f89565b979a9699509497509295939492505050565b5f5f60408385031215611081575f5ffd5b823561108c81610f47565b946020939093013593505050565b5f5f5f5f606085870312156110ad575f5ffd5b84356110b881610f47565b935060208501359250604085013567ffffffffffffffff8111156110da575f5ffd5b8501601f810187136110ea575f5ffd5b803567ffffffffffffffff811115611100575f5ffd5b876020828401011115611111575f5ffd5b949793965060200194505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611143575f5ffd5b81356103b281610f47565b5f5f8335601e19843603018112611163575f5ffd5b83018035915067ffffffffffffffff82111561117d575f5ffd5b602001915036819003821315610fca575f5ffd5b5f602082840312156111a1575f5ffd5b5051919050565b5f82518060208501845e5f920191825250919050565b634e487b7160e01b5f52602160045260245ffdfea264697066735822122027bc23623c2e9510d5151f8eb11f974d01aaa110295cf92fde6378b56b39ddfe64736f6c634300081c0033",
"deployedBytecode": "0x6080604052600436106100fd575f3560e01c80634d44560d11610092578063b61d27f611610062578063b61d27f6146102c5578063c399ec88146102e4578063d087d288146102f8578063d547741f1461030c578063e02023a11461032b575f5ffd5b80634d44560d1461023157806391d1485414610250578063a217fddf1461026f578063b0d691fe14610282575f5ffd5b80632f2ff15d116100cd5780632f2ff15d146101ca57806336568abe146101eb57806347e1da2a1461020a5780634a58db1914610229575f5ffd5b806301ffc9a71461010857806307bd02651461013c57806319822f7c1461017d578063248a9ca31461019c575f5ffd5b3661010457005b5f5ffd5b348015610113575f5ffd5b50610127610122366004610eba565b61035e565b60405190151581526020015b60405180910390f35b348015610147575f5ffd5b5061016f7fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e6381565b604051908152602001610133565b348015610188575f5ffd5b5061016f610197366004610ee1565b610394565b3480156101a7575f5ffd5b5061016f6101b6366004610f30565b5f9081526020819052604090206001015490565b3480156101d5575f5ffd5b506101e96101e4366004610f5b565b6103b9565b005b3480156101f6575f5ffd5b506101e9610205366004610f5b565b6103e3565b348015610215575f5ffd5b506101e9610224366004610fd1565b61041b565b6101e96105c1565b34801561023c575f5ffd5b506101e961024b366004611070565b61063d565b34801561025b575f5ffd5b5061012761026a366004610f5b565b6106e3565b34801561027a575f5ffd5b5061016f5f81565b34801561028d575f5ffd5b506040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152602001610133565b3480156102d0575f5ffd5b506101e96102df36600461109a565b61070b565b3480156102ef575f5ffd5b5061016f610754565b348015610303575f5ffd5b5061016f6107e2565b348015610317575f5ffd5b506101e9610326366004610f5b565b610837565b348015610336575f5ffd5b5061016f7f5d8e12c39142ff96d79d04d15d1ba1269e4fe57bb9d26f43523628b34ba108ec81565b5f6001600160e01b03198216637965db0b60e01b148061038e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f61039d61085b565b6103a784846108da565b90506103b28261099c565b9392505050565b5f828152602081905260409020600101546103d3816109e5565b6103dd83836109ef565b50505050565b6001600160a01b038116331461040c5760405163334bd91960e11b815260040160405180910390fd5b6104168282610a7e565b505050565b610423610ae7565b848114158061043c5750821580159061043c5750828114155b1561045a5760405163150072e360e11b815260040160405180910390fd5b5f839003610502575f5b858110156104fc576104f38787838181106104815761048161111f565b90506020020160208101906104969190611133565b8484848181106104a8576104a861111f565b90506020028101906104ba919061114e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509250610b67915050565b50600101610464565b506105b9565b5f5b858110156105b7576105ae8787838181106105215761052161111f565b90506020020160208101906105369190611133565b8484848181106105485761054861111f565b905060200281019061055a919061114e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152508a92508991508690508181106105a2576105a261111f565b90506020020135610b67565b50600101610504565b505b505050505050565b7f000000000000000000000000000000000000000000000000000000000000000060405163b760faf960e01b81523060048201526001600160a01b03919091169063b760faf99034906024015f604051808303818588803b158015610624575f5ffd5b505af1158015610636573d5f5f3e3d5ffd5b5050505050565b7f5d8e12c39142ff96d79d04d15d1ba1269e4fe57bb9d26f43523628b34ba108ec610667816109e5565b7f000000000000000000000000000000000000000000000000000000000000000060405163040b850f60e31b81526001600160a01b03858116600483015260248201859052919091169063205c2878906044015f604051808303815f87803b1580156106d1575f5ffd5b505af11580156105b7573d5f5f3e3d5ffd5b5f918252602082815260408084206001600160a01b0393909316845291905290205460ff1690565b610713610ae7565b6106368483838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250889250610b67915050565b6040516370a0823160e01b81523060048201525f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a08231906024015b602060405180830381865afa1580156107b9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107dd9190611191565b905090565b604051631aab3f0d60e11b81523060048201525f60248201819052906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906335567e1a9060440161079e565b5f82815260208190526040902060010154610851816109e5565b6103dd8383610a7e565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108d85760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20456e747279506f696e740000000060448201526064015b60405180910390fd5b565b7f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c829052603c81205f6109548261091b61010088018861114e565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250610c0792505050565b90506109807fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63826106e3565b61098f5760019250505061038e565b505f949350505050565b50565b8015610999576040515f9033905f1990849084818181858888f193505050503d805f8114610636576040519150601f19603f3d011682016040523d82523d5f602084013e610636565b6109998133610c2f565b5f6109fa83836106e3565b610a77575f838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055610a2f3390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600161038e565b505f61038e565b5f610a8983836106e3565b15610a77575f838152602081815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a450600161038e565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590610b475750610b457fd8aa0f3194971a2a116679f7c2090f6939c8d4e01a2a8d7e41d55e5351469e63336106e3565b155b156108d857604051633c687f6b60e21b81523360048201526024016108cf565b606081471015610b935760405163cf47918160e01b8152476004820152602481018390526044016108cf565b5f5f856001600160a01b03168486604051610bae91906111a8565b5f6040518083038185875af1925050503d805f8114610be8576040519150601f19603f3d011682016040523d82523d5f602084013e610bed565b606091505b5091509150610bfd868383610c6c565b9695505050505050565b5f5f5f5f610c158686610cc8565b925092509250610c258282610d11565b5090949350505050565b610c3982826106e3565b610c685760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016108cf565b5050565b606082610c8157610c7c82610dc9565b6103b2565b8151158015610c9857506001600160a01b0384163b155b15610cc157604051639996b31560e01b81526001600160a01b03851660048201526024016108cf565b50806103b2565b5f5f5f8351604103610cff576020840151604085015160608601515f1a610cf188828585610df2565b955095509550505050610d0a565b505081515f91506002905b9250925092565b5f826003811115610d2457610d246111be565b03610d2d575050565b6001826003811115610d4157610d416111be565b03610d5f5760405163f645eedf60e01b815260040160405180910390fd5b6002826003811115610d7357610d736111be565b03610d945760405163fce698f760e01b8152600481018290526024016108cf565b6003826003811115610da857610da86111be565b03610c68576040516335e2f38360e21b8152600481018290526024016108cf565b805115610dd95780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a0841115610e2b57505f91506003905082610eb0565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015610e7c573d5f5f3e3d5ffd5b5050604051601f1901519150506001600160a01b038116610ea757505f925060019150829050610eb0565b92505f91508190505b9450945094915050565b5f60208284031215610eca575f5ffd5b81356001600160e01b0319811681146103b2575f5ffd5b5f5f5f60608486031215610ef3575f5ffd5b833567ffffffffffffffff811115610f09575f5ffd5b84016101208187031215610f1b575f5ffd5b95602085013595506040909401359392505050565b5f60208284031215610f40575f5ffd5b5035919050565b6001600160a01b0381168114610999575f5ffd5b5f5f60408385031215610f6c575f5ffd5b823591506020830135610f7e81610f47565b809150509250929050565b5f5f83601f840112610f99575f5ffd5b50813567ffffffffffffffff811115610fb0575f5ffd5b6020830191508360208260051b8501011115610fca575f5ffd5b9250929050565b5f5f5f5f5f5f60608789031215610fe6575f5ffd5b863567ffffffffffffffff811115610ffc575f5ffd5b61100889828a01610f89565b909750955050602087013567ffffffffffffffff811115611027575f5ffd5b61103389828a01610f89565b909550935050604087013567ffffffffffffffff811115611052575f5ffd5b61105e89828a01610f89565b979a9699509497509295939492505050565b5f5f60408385031215611081575f5ffd5b823561108c81610f47565b946020939093013593505050565b5f5f5f5f606085870312156110ad575f5ffd5b84356110b881610f47565b935060208501359250604085013567ffffffffffffffff8111156110da575f5ffd5b8501601f810187136110ea575f5ffd5b803567ffffffffffffffff811115611100575f5ffd5b876020828401011115611111575f5ffd5b949793965060200194505050565b634e487b7160e01b5f52603260045260245ffd5b5f60208284031215611143575f5ffd5b81356103b281610f47565b5f5f8335601e19843603018112611163575f5ffd5b83018035915067ffffffffffffffff82111561117d575f5ffd5b602001915036819003821315610fca575f5ffd5b5f602082840312156111a1575f5ffd5b5051919050565b5f82518060208501845e5f920191825250919050565b634e487b7160e01b5f52602160045260245ffdfea264697066735822122027bc23623c2e9510d5151f8eb11f974d01aaa110295cf92fde6378b56b39ddfe64736f6c634300081c0033",
"linkReferences": {},
"deployedLinkReferences": {}
}