0 txs
4.7k calls
constructor
constructor(uint256 batchSize, address pufferVault, address weth)
functions
authority
viewfunction authority() view returns (address)
BATCH_SIZE
viewfunction BATCH_SIZE() view returns (uint256)
getBatch
viewfunction getBatch(uint256 batchIdx) view returns (tuple)
getFinalizedWithdrawalBatch
viewfunction getFinalizedWithdrawalBatch() view returns (uint256)
getMaxWithdrawalAmount
viewfunction getMaxWithdrawalAmount() view returns (uint256)
getWithdrawal
viewfunction getWithdrawal(uint256 withdrawalIdx) view returns (tuple)
getWithdrawalsLength
viewfunction getWithdrawalsLength() view returns (uint256)
isConsumingScheduledOp
viewfunction isConsumingScheduledOp() view returns (bytes4)
MIN_WITHDRAWAL_AMOUNT
viewfunction MIN_WITHDRAWAL_AMOUNT() view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
PUFFER_VAULT
viewfunction PUFFER_VAULT() view returns (address)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
WETH
viewfunction WETH() view returns (address)
changeMaxWithdrawalAmount
nonpayablefunction changeMaxWithdrawalAmount(uint256 newMaxWithdrawalAmount)
completeQueuedWithdrawal
nonpayablefunction completeQueuedWithdrawal(uint256 withdrawalIdx)
finalizeWithdrawals
nonpayablefunction finalizeWithdrawals(uint256 withdrawalBatchIndex)
initialize
nonpayablefunction initialize(address accessManager)
requestWithdrawal
nonpayablefunction requestWithdrawal(uint128 pufETHAmount, address recipient)
requestWithdrawalWithPermit
nonpayablefunction requestWithdrawalWithPermit(tuple permitData, address recipient)
returnExcessETHToVault
nonpayablefunction returnExcessETHToVault(uint256[] batchIndices)
setAuthority
nonpayablefunction setAuthority(address newAuthority)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AuthorityUpdated
event AuthorityUpdated(address authority)
BatchFinalized
event BatchFinalized(uint256 indexed batchIdx, uint256 expectedETHAmount, uint256 actualEthAmount, uint256 pufETHBurnAmount)
ExcessETHReturned
event ExcessETHReturned(uint256[] batchIndices, uint256 totalExcessETH)
Initialized
event Initialized(uint64 version)
MaxWithdrawalAmountChanged
event MaxWithdrawalAmountChanged(uint256 oldMaxWithdrawalAmount, uint256 newMaxWithdrawalAmount)
Upgraded
event Upgraded(address indexed implementation)
WithdrawalCompleted
event WithdrawalCompleted(uint256 indexed withdrawalIdx, uint256 ethPayoutAmount, uint256 payoutExchangeRate, address indexed recipient)
WithdrawalRequested
event WithdrawalRequested(uint256 indexed withdrawalIdx, uint256 indexed batchIdx, uint256 pufETHAmount, address indexed recipient)
errors
AccessManagedInvalidAuthority
error AccessManagedInvalidAuthority(address authority)
AccessManagedRequiredDelay
error AccessManagedRequiredDelay(address caller, uint32 delay)
AccessManagedUnauthorized
error AccessManagedUnauthorized(address caller)
AddressEmptyCode
error AddressEmptyCode(address target)
AlreadyReturned
error AlreadyReturned()
BatchAlreadyFinalized
error BatchAlreadyFinalized(uint256 batchIndex)
BatchesAreNotFull
error BatchesAreNotFull()
BatchSizeCannotChange
error BatchSizeCannotChange()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedInnerCall
error FailedInnerCall()
InvalidInitialization
error InvalidInitialization()
InvalidMaxWithdrawalAmount
error InvalidMaxWithdrawalAmount()
MultipleWithdrawalsAreForbidden
error MultipleWithdrawalsAreForbidden()
NotAllWithdrawalsClaimed
error NotAllWithdrawalsClaimed()
NotFinalized
error NotFinalized()
NotInitializing
error NotInitializing()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
TransferFailed
error TransferFailed()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
WithdrawalAlreadyCompleted
error WithdrawalAlreadyCompleted()
WithdrawalAmountTooHigh
error WithdrawalAmountTooHigh()
WithdrawalAmountTooLow
error WithdrawalAmountTooLow()
WithdrawalToZeroAddress
error WithdrawalToZeroAddress()
creation bytecode
0x61010060405230608052348015610014575f5ffd5b5060405161299b38038061299b83398101604081905261003391610121565b60e08390526001600160a01b0380831660a052811660c05261005361005b565b505050610161565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100ab5760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161461010a5780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6001600160a01b038116811461010a575f5ffd5b5f5f5f60608486031215610133575f5ffd5b8351925060208401516101458161010d565b60408501519092506101568161010d565b809150509250925092565b60805160a05160c05160e05161279061020b5f395f81816101dd015281816106a601528181610cfa015281816111480152818161137d0152818161164e0152611b2c01525f8181610438015281816108f4015261097a01525f818161019201528181610bec01528181610d9d01528181610e8701528181610efa015281816114b601528181611aae0152611c4601525f81816115a4015281816115cd01526117b701526127905ff3fe608060405260043610610134575f3560e01c80639ce7f670116100a8578063bb21fd3d1161006d578063bb21fd3d14610479578063bf7e214f14610498578063c4d66de8146104ac578063d3e5792b146104cb578063ecb613ff146104e5578063ef027fbf14610504575f5ffd5b80639ce7f670146103ab578063a231d21b146103cb578063ad3cb1cc146103ea578063ad5c464814610427578063b3a6cf6c1461045a575f5ffd5b80635ac44282116100f95780635ac44282146102285780636a4800a4146102b55780637a9e5e4b146102d45780638a4fb16a146102f35780638fb360371461034b57806390294b4214610378575f5ffd5b80632d9b7f4d1461013f5780633e68b0941461018157806349faa4d4146101cc5780634f1ef286146101ff57806352d1902d14610214575f5ffd5b3661013b57005b5f5ffd5b34801561014a575f5ffd5b507f2cc4e591e9323af22eeee6c9b0444863dad4345eb452e3c71b610fffca87e102545b6040519081526020015b60405180910390f35b34801561018c575f5ffd5b506101b47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610178565b3480156101d7575f5ffd5b5061016e7f000000000000000000000000000000000000000000000000000000000000000081565b61021261020d366004612249565b610523565b005b34801561021f575f5ffd5b5061016e610542565b348015610233575f5ffd5b5061024761024236600461230a565b61055d565b60405161017891905f60a0820190506001600160401b0383511682526001600160581b0360208401511660208301526001600160601b0360408401511660408301526001600160801b0360608401511660608301526001600160801b03608084015116608083015292915050565b3480156102c0575f5ffd5b506102126102cf36600461230a565b610686565b3480156102df575f5ffd5b506102126102ee366004612321565b610a39565b3480156102fe575f5ffd5b5061031261030d36600461230a565b610ac0565b6040805182516001600160801b03908116825260208085015190911690820152918101516001600160a01b031690820152606001610178565b348015610356575f5ffd5b5061035f610ba3565b6040516001600160e01b03199091168152602001610178565b348015610383575f5ffd5b507f2cc4e591e9323af22eeee6c9b0444863dad4345eb452e3c71b610fffca87e1015461016e565b3480156103b6575f5ffd5b505f51602061273b5f395f51905f525461016e565b3480156103d6575f5ffd5b506102126103e536600461233a565b610bd9565b3480156103f5575f5ffd5b5061041a604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101789190612372565b348015610432575f5ffd5b506101b47f000000000000000000000000000000000000000000000000000000000000000081565b348015610465575f5ffd5b5061021261047436600461230a565b610cba565b348015610484575f5ffd5b5061021261049336600461230a565b610fe1565b3480156104a3575f5ffd5b506101b461105d565b3480156104b7575f5ffd5b506102126104c6366004612321565b611078565b3480156104d6575f5ffd5b5061016e662386f26fc1000081565b3480156104f0575f5ffd5b506102126104ff3660046123a7565b61130a565b34801561050f575f5ffd5b5061021261051e366004612416565b611586565b61052b611599565b6105348261163f565b61053e82826116eb565b5050565b5f61054b6117ac565b505f51602061271b5f395f51905f5290565b6040805160a0810182525f808252602082018190529181018290526060810182905260808101919091527f2cc4e591e9323af22eeee6c9b0444863dad4345eb452e3c71b610fffca87e103545f51602061273b5f395f51905f529083106105ef5750506040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152919050565b8060030183815481106106045761060461244b565b5f9182526020918290206040805160a08101825260029390930290910180546001600160401b0381168452600160401b81046001600160581b031694840194909452600160981b9093046001600160601b0316908201526001909101546001600160801b038082166060840152600160801b9091041660808201529392505050565b610692335b5f366117f5565b5f51602061273b5f395f51905f525f6106cb7f000000000000000000000000000000000000000000000000000000000000000084612473565b905081600101548111156106f257604051630df706ad60e11b815260040160405180910390fd5b5f8260020184815481106107085761070861244b565b5f918252602090912060029091020160018101549091506001600160a01b0316610745576040516355780d0f60e11b815260040160405180910390fd5b5f83600301838154811061075b5761075b61244b565b5f918252602082206002909102015483546001600160401b039091169250610794906001600160801b03600160801b90910416836118eb565b83549091505f90670de0b6b3a7640000906107b99084906001600160801b0316612492565b6107c39190612473565b60018501546003880180549293506001600160a01b0390911691879081106107ed576107ed61244b565b5f918252602082206001600290920201018054909190610815906001600160801b03166124a9565b91906101000a8154816001600160801b0302191690836001600160801b0316021790555061084282611904565b8760030187815481106108575761085761244b565b905f5260205f20906002020160010160108282829054906101000a90046001600160801b031661088791906124d3565b92506101000a8154816001600160801b0302191690836001600160801b031602179055508660020188815481106108c0576108c061244b565b5f9182526020822060029091020181815560010180546001600160a01b031916905560408051630d0e30db60e41b815290517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169263d0e30db09286926004808301939282900301818588803b158015610940575f5ffd5b505af1158015610952573d5f5f3e3d5ffd5b505060405163a9059cbb60e01b81526001600160a01b038581166004830152602482018790527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb925060440190506020604051808303815f875af11580156109c4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109e89190612501565b5060408051838152602081018590526001600160a01b038316918a917f0c2a147edace3ecd219b47541b15983312439ba5097047dba3affdaef156f19b910160405180910390a35050505050505050565b33610a4261105d565b6001600160a01b0316816001600160a01b031614610a825760405162d1953b60e31b81526001600160a01b03821660048201526024015b60405180910390fd5b816001600160a01b03163b5f03610ab7576040516361798f2f60e11b81526001600160a01b0383166004820152602401610a79565b61053e8261193b565b604080516060810182525f80825260208201819052918101919091527f2cc4e591e9323af22eeee6c9b0444863dad4345eb452e3c71b610fffca87e102545f51602061273b5f395f51905f52908310610b36575050604080516060810182525f8082526020820181905291810191909152919050565b806002018381548110610b4b57610b4b61244b565b5f91825260209182902060408051606081018252600290930290910180546001600160801b038082168552600160801b90910416938301939093526001909201546001600160a01b0316918101919091529392505050565b5f5160206126fb5f395f51905f5280545f9190600160a01b900460ff16610bca575f610bd3565b638fb3603760e01b5b91505090565b610be23361068b565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663d505accf333060208601358635610c2a6060890160408a0161251a565b6040516001600160e01b031960e088901b1681526001600160a01b0395861660048201529490931660248501526044840191909152606483015260ff166084820152606085013560a4820152608085013560c482015260e4015f604051808303815f87803b158015610c9a575f5ffd5b505af1925050508015610cab575060015b5061053e82602001358261199b565b610cc33361068b565b7f2cc4e591e9323af22eeee6c9b0444863dad4345eb452e3c71b610fffca87e102545f51602061273b5f395f51905f5290610d1f907f000000000000000000000000000000000000000000000000000000000000000090612473565b8210610d3e57604051638b923bcf60e01b815260040160405180910390fd5b600181015482818111610d675760405163a99bd78160e01b8152600401610a7991815260200190565b505f610d7482600161253a565b90505b838111610fd9576040516303d1689d60e11b8152670de0b6b3a764000060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906307a2d13a90602401602060405180830381865afa158015610dea573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e0e919061254d565b90505f846003018381548110610e2657610e2661244b565b5f91825260208220600291909102018054909250600160981b81046001600160601b031691600160401b9091046001600160581b031690610e68828685611e6b565b604051637b1a490960e01b8152306004820152602481018290529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637b1a4909906044015f604051808303815f87803b158015610ed0575f5ffd5b505af1158015610ee2573d5f5f3e3d5ffd5b5050604051630852cd8d60e31b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031692506342966c6891506024015f604051808303815f87803b158015610f45575f5ffd5b505af1158015610f57573d5f5f3e3d5ffd5b50505050610f6485611ea1565b845467ffffffffffffffff19166001600160401b0391909116178455604080518481526020810183905290810183905286907fdbf5480ceeeae3e5602bc1ea462e9976902866b38caf585679d5cebe0594dd9e9060600160405180910390a2505050505080610fd290612564565b9050610d77565b505060010155565b610fea3361068b565b5f51602061273b5f395f51905f52662386f26fc10000821161101f57604051631d14ca8360e21b815260040160405180910390fd5b805460408051918252602082018490527f3e431ca134400a33fe0cfb866ec9047e25ee5689045d5d184497a9fdd912bd52910160405180910390a155565b5f5160206126fb5f395f51905f52546001600160a01b031690565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156110bc5750825b90505f826001600160401b031660011480156110d75750303b155b9050811580156110e5575080155b156111035760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561112d57845460ff60401b1916600160401b1785555b61113686611ed6565b5f51602061273b5f395f51905f525f5b7f00000000000000000000000000000000000000000000000000000000000000008110156111ef57604080516060810182525f8082526020808301828152938301828152600280880180546001818101835591865293909420945195516001600160801b03908116600160801b0296169590951791909402909201918255915190820180546001600160a01b03929092166001600160a01b031990921691909117905501611146565b506040805160a0810182525f8082526020808301828152938301828152606084018381526080850184815260038801805460018181018355918752948620965160029095029096018054975193516001600160601b0316600160981b026bffffffffffffffffffffffff60981b196001600160581b0395909516600160401b026001600160981b03199099166001600160401b0396909616959095179790971792909216929092178555905190516001600160801b03908116600160801b029116179282019290925590910155831561130257845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b6113133361068b565b5f51602061273b5f395f51905f525f805b838110156114ac575f836003018686848181106113435761134361244b565b905060200201358154811061135a5761135a61244b565b5f91825260209091206001600290920201908101549091506001600160801b03167f0000000000000000000000000000000000000000000000000000000000000000146113ba576040516318af288360e21b815260040160405180910390fd5b80546001820154600160981b9091046001600160601b0316600160801b9091046001600160801b03160361140157604051636d6a4f9f60e01b815260040160405180910390fd5b80546001600160601b03600160981b820416906001600160581b03600160401b820416905f9061143c9083906001600160401b031685611e6b565b60018501549091505f9061146090600160801b90046001600160801b03168361257c565b905061146c818861253a565b8554600196870180546001600160801b0316600160981b9092046001600160601b0316600160801b02919091179055965050509290910191506113249050565b508015611580575f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826040515f6040518083038185875af1925050503d805f811461151c576040519150601f19603f3d011682016040523d82523d5f602084013e611521565b606091505b5050905080611543576040516312171d8360e31b815260040160405180910390fd5b7fe7ebe2f99689b40ec52f7d9f3b43da813a21d7f2f68f186da901ceb6bdbcb7d88585846040516115769392919061258f565b60405180910390a1505b50505050565b61158f3361068b565b61053e828261199b565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061161f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166116135f51602061271b5f395f51905f52546001600160a01b031690565b6001600160a01b031614155b1561163d5760405163703e46dd60e11b815260040160405180910390fd5b565b6116483361068b565b5f8190507f0000000000000000000000000000000000000000000000000000000000000000816001600160a01b03166349faa4d46040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116a9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116cd919061254d565b1461053e5760405163c394482360e01b815260040160405180910390fd5b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611745575060408051601f3d908101601f191682019092526117429181019061254d565b60015b61176d57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610a79565b5f51602061271b5f395f51905f52811461179d57604051632a87526960e21b815260048101829052602401610a79565b6117a78383611eea565b505050565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461163d5760405163703e46dd60e11b815260040160405180910390fd5b5f5160206126fb5f395f51905f525f8061182d61181061105d565b873061181f60045f8a8c6125cb565b611828916125f2565b611f3f565b91509150816113025763ffffffff8116156118c857825460ff60a01b1916600160a01b17835561185b61105d565b6001600160a01b03166394c7d7ee8787876040518463ffffffff1660e01b815260040161188a9392919061262a565b5f604051808303815f87803b1580156118a1575f5ffd5b505af11580156118b3573d5f5f3e3d5ffd5b5050845460ff60a01b19168555506113029050565b60405162d1953b60e31b81526001600160a01b0387166004820152602401610a79565b5f8183106118f957816118fb565b825b90505b92915050565b5f6001600160801b03821115611937576040516306dfcc6560e41b81526080600482015260248101839052604401610a79565b5090565b5f5160206126fb5f395f51905f5280546001600160a01b0383166001600160a01b03199091168117825560408051918252517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9181900360200190a15050565b7fa4e2950800ad48b89d951842a006c666c0b29f755b9face41cad0b8d833289005c156119cf57630eca04b25f526004601cfd5b60017fa4e2950800ad48b89d951842a006c666c0b29f755b9face41cad0b8d833289005d5f51602061273b5f395f51905f52662386f26fc100006001600160801b0384161015611a32576040516374c51ccb60e11b815260040160405180910390fd5b80546001600160801b0384161115611a5d57604051634afeaa9360e11b815260040160405180910390fd5b6001600160a01b038216611a84576040516354f7ed3360e01b815260040160405180910390fd5b6040516323b872dd60e01b81523360048201523060248201526001600160801b03841660448201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906323b872dd906064016020604051808303815f875af1158015611afc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b209190612501565b5060028101545f611b517f000000000000000000000000000000000000000000000000000000000000000083612473565b60038401549091508103611c27576040805160a0810182525f8082526020808301828152938301828152606084018381526080850184815260038a0180546001818101835591875294909520955160029094029095018054965192516001600160601b0316600160981b026bffffffffffffffffffffffff60981b196001600160581b0394909416600160401b026001600160981b03199098166001600160401b03959095169490941796909617919091169190911784555191516001600160801b03908116600160801b029216919091179101555b6040516303d1689d60e11b8152670de0b6b3a764000060048201525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906307a2d13a90602401602060405180830381865afa158015611c93573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cb7919061254d565b90505f670de0b6b3a7640000611cd6836001600160801b038a16612492565b611ce09190612473565b90505f856003018481548110611cf857611cf861244b565b905f5260205f209060020201905087815f0160088282829054906101000a90046001600160581b0316611d2b9190612669565b92506101000a8154816001600160581b0302191690836001600160581b0316021790555081815f0160138282829054906101000a90046001600160601b0316611d749190612688565b92506101000a8154816001600160601b0302191690836001600160601b031602179055508560020160405180606001604052808a6001600160801b03168152602001611dbf86611904565b6001600160801b0390811682526001600160a01b038b811660209384018190528554600180820188555f978852968590208651878701518616600160801b029086161760029092020190815560409586015196018054969092166001600160a01b03199096169590951790559151918b168252869188917f18b30bd1409a6a29a2f7518298686a8e7fff748e461a0143a8c772ed29015ece910160405180910390a45050505050505050565b5f80670de0b6b3a7640000611e808587612492565b611e8a9190612473565b9050611e9683826118eb565b9150505b9392505050565b5f6001600160401b0382111561193757604080516306dfcc6560e41b8152600481019190915260248101839052604401610a79565b611ede612047565b611ee781612090565b50565b611ef3826120a1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115611f37576117a78282612104565b61053e612176565b6040516001600160a01b03848116602483015283811660448301526001600160e01b0319831660648301525f9182918291829189169060840160408051601f198184030181529181526020820180516001600160e01b031663b700961360e01b17905251611fad91906126a7565b5f60405180830381855afa9150503d805f8114611fe5576040519150601f19603f3d011682016040523d82523d5f602084013e611fea565b606091505b5091509150811561203c57604081511061201c578080602001905181019061201291906126bd565b909450925061203c565b602081511061203c57808060200190518101906120399190612501565b93505b505094509492505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661163d57604051631afcd79f60e31b815260040160405180910390fd5b612098612047565b611ee78161193b565b806001600160a01b03163b5f036120d657604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610a79565b5f51602061271b5f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b03168460405161212091906126a7565b5f60405180830381855af49150503d805f8114612158576040519150601f19603f3d011682016040523d82523d5f602084013e61215d565b606091505b509150915061216d858383612195565b95945050505050565b341561163d5760405163b398979f60e01b815260040160405180910390fd5b6060826121aa576121a5826121f1565b611e9a565b81511580156121c157506001600160a01b0384163b155b156121ea57604051639996b31560e01b81526001600160a01b0385166004820152602401610a79565b5080611e9a565b8051156122015780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80356001600160a01b0381168114612230575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f6040838503121561225a575f5ffd5b6122638361221a565b915060208301356001600160401b0381111561227d575f5ffd5b8301601f8101851361228d575f5ffd5b80356001600160401b038111156122a6576122a6612235565b604051601f8201601f19908116603f011681016001600160401b03811182821017156122d4576122d4612235565b6040528181528282016020018710156122eb575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f6020828403121561231a575f5ffd5b5035919050565b5f60208284031215612331575f5ffd5b6118fb8261221a565b5f5f82840360c081121561234c575f5ffd5b60a0811215612359575f5ffd5b5082915061236960a0840161221a565b90509250929050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f602083850312156123b8575f5ffd5b82356001600160401b038111156123cd575f5ffd5b8301601f810185136123dd575f5ffd5b80356001600160401b038111156123f2575f5ffd5b8560208260051b8401011115612406575f5ffd5b6020919091019590945092505050565b5f5f60408385031215612427575f5ffd5b82356001600160801b038116811461243d575f5ffd5b91506123696020840161221a565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f8261248d57634e487b7160e01b5f52601260045260245ffd5b500490565b80820281158282048414176118fe576118fe61245f565b5f6001600160801b0382166001600160801b0381036124ca576124ca61245f565b60010192915050565b6001600160801b0381811683821601908111156118fe576118fe61245f565b80518015158114612230575f5ffd5b5f60208284031215612511575f5ffd5b6118fb826124f2565b5f6020828403121561252a575f5ffd5b813560ff81168114611e9a575f5ffd5b808201808211156118fe576118fe61245f565b5f6020828403121561255d575f5ffd5b5051919050565b5f600182016125755761257561245f565b5060010190565b818103818111156118fe576118fe61245f565b604080825281018390525f6001600160fb1b038411156125ad575f5ffd5b8360051b808660608501376020830193909352500160600192915050565b5f5f858511156125d9575f5ffd5b838611156125e5575f5ffd5b5050820193919092039150565b80356001600160e01b03198116906004841015612623576001600160e01b0319600485900360031b81901b82161691505b5092915050565b6001600160a01b03841681526040602082018190528101829052818360608301375f818301606090810191909152601f909201601f1916010192915050565b6001600160581b0381811683821601908111156118fe576118fe61245f565b6001600160601b0381811683821601908111156118fe576118fe61245f565b5f82518060208501845e5f920191825250919050565b5f5f604083850312156126ce575f5ffd5b6126d7836124f2565b9150602083015163ffffffff811681146126ef575f5ffd5b80915050925092905056fef3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a00360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc2cc4e591e9323af22eeee6c9b0444863dad4345eb452e3c71b610fffca87e100a2646970667358221220fda2c07b57026c6e77d03d35fe8f7fe5bda62afe12e3f31d1102d8092938f52564736f6c634300081b0033000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000d9a442856c234a39a81a089c06451ebaa4306a72000000000000000000000000c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2