0 txs
0 calls
constructor
constructor(address pufferModuleBeacon, address restakingOperatorBeacon, address pufferProtocol, address avsContractsRegistry)
functions
authority
viewfunction authority() view returns (address)
AVS_CONTRACTS_REGISTRY
viewfunction AVS_CONTRACTS_REGISTRY() view returns (address)
isConsumingScheduledOp
viewfunction isConsumingScheduledOp() view returns (bytes4)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
PUFFER_MODULE_BEACON
viewfunction PUFFER_MODULE_BEACON() view returns (address)
PUFFER_PROTOCOL
viewfunction PUFFER_PROTOCOL() view returns (address)
RESTAKING_OPERATOR_BEACON
viewfunction RESTAKING_OPERATOR_BEACON() view returns (address)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
callCompleteQueuedWithdrawals
nonpayablefunction callCompleteQueuedWithdrawals(bytes32 moduleName, tuple[] withdrawals, address[][] tokens, uint256[] middlewareTimesIndexes, bool[] receiveAsTokens)
callDelegateTo
nonpayablefunction callDelegateTo(bytes32 moduleName, address operator, tuple approverSignatureAndExpiry, bytes32 approverSalt)
callDeregisterOperatorFromAVS
nonpayablefunction callDeregisterOperatorFromAVS(address restakingOperator, address avsRegistryCoordinator, bytes quorumNumbers)
callModifyOperatorDetails
nonpayablefunction callModifyOperatorDetails(address restakingOperator, tuple newOperatorDetails)
callOptIntoSlashing
nonpayablefunction callOptIntoSlashing(address restakingOperator, address slasher)
callQueueWithdrawals
nonpayablefunction callQueueWithdrawals(bytes32 moduleName, uint256 sharesAmount)
callRegisterOperatorToAVS
nonpayablefunction callRegisterOperatorToAVS(address restakingOperator, address avsRegistryCoordinator, bytes quorumNumbers, string socket, tuple params, tuple operatorSignature)
callRegisterOperatorToAVSWithChurn
nonpayablefunction callRegisterOperatorToAVSWithChurn(address restakingOperator, address avsRegistryCoordinator, bytes quorumNumbers, string socket, tuple params, tuple[] operatorKickParams, tuple churnApproverSignature, tuple operatorSignature)
callSetClaimerFor
nonpayablefunction callSetClaimerFor(address moduleOrReOp, address claimer)
callUndelegate
nonpayablefunction callUndelegate(bytes32 moduleName) returns (bytes32[] withdrawalRoot)
callUpdateMetadataURI
nonpayablefunction callUpdateMetadataURI(address restakingOperator, string metadataURI)
callUpdateOperatorAVSSocket
nonpayablefunction callUpdateOperatorAVSSocket(address restakingOperator, address avsRegistryCoordinator, string socket)
callVerifyAndProcessWithdrawals
nonpayablefunction callVerifyAndProcessWithdrawals(bytes32 moduleName, uint64 oracleTimestamp, tuple stateRootProof, tuple[] withdrawalProofs, bytes[] validatorFieldsProofs, bytes32[][] validatorFields, bytes32[][] withdrawalFields)
callVerifyWithdrawalCredentials
nonpayablefunction callVerifyWithdrawalCredentials(bytes32 moduleName, uint64 oracleTimestamp, tuple stateRootProof, uint40[] validatorIndices, bytes[] validatorFieldsProofs, bytes32[][] validatorFields)
callWithdrawNonBeaconChainETHBalanceWei
nonpayablefunction callWithdrawNonBeaconChainETHBalanceWei(bytes32 moduleName, uint256 amountToWithdraw)
createNewPufferModule
nonpayablefunction createNewPufferModule(bytes32 moduleName) returns (address)
createNewRestakingOperator
nonpayablefunction createNewRestakingOperator(string metadataURI, address delegationApprover, uint32 stakerOptOutWindowBlocks) returns (address)
customExternalCall
nonpayablefunction customExternalCall(address restakingOperator, address target, bytes customCalldata)
initialize
nonpayablefunction initialize(address accessManager)
setAuthority
nonpayablefunction setAuthority(address newAuthority)
updateAVSRegistrationSignatureProof
nonpayablefunction updateAVSRegistrationSignatureProof(address restakingOperator, bytes32 digestHash, address signer)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
AuthorityUpdated
event AuthorityUpdated(address authority)
AVSRegistrationSignatureProofUpdated
event AVSRegistrationSignatureProofUpdated(address indexed restakingOperator, bytes32 digestHash, address signer)
ClaimerSet
event ClaimerSet(address indexed rewardsReceiver, address indexed claimer)
CompletedQueuedWithdrawals
event CompletedQueuedWithdrawals(bytes32 indexed moduleName, uint256 sharesWithdrawn)
CustomCallSucceeded
event CustomCallSucceeded(address indexed restakingOperator, address target, bytes customCalldata, bytes response)
Initialized
event Initialized(uint64 version)
NonBeaconChainETHBalanceWithdrawn
event NonBeaconChainETHBalanceWithdrawn(bytes32 indexed moduleName, uint256 amountToWithdraw)
PufferModuleDelegated
event PufferModuleDelegated(bytes32 indexed moduleName, address operator)
PufferModuleUndelegated
event PufferModuleUndelegated(bytes32 indexed moduleName)
RestakingOperatorAVSSocketUpdated
event RestakingOperatorAVSSocketUpdated(address restakingOperator, address avsRegistryCoordinator, string socket)
RestakingOperatorCreated
event RestakingOperatorCreated(address indexed restakingOperator, (address earningsReceiver, address delegationApprover, uint32 stakerOptOutWindowBlocks) operatorDetails)
RestakingOperatorDeregisteredFromAVS
event RestakingOperatorDeregisteredFromAVS(address restakingOperator, address avsRegistryCoordinator, bytes quorumNumbers)
RestakingOperatorMetadataURIUpdated
event RestakingOperatorMetadataURIUpdated(address indexed restakingOperator, string metadataURI)
RestakingOperatorModified
event RestakingOperatorModified(address indexed restakingOperator, (address earningsReceiver, address delegationApprover, uint32 stakerOptOutWindowBlocks) newOperatorDetails)
RestakingOperatorOptedInSlasher
event RestakingOperatorOptedInSlasher(address indexed restakingOperator, address indexed slasher)
RestakingOperatorRegisteredToAVS
event RestakingOperatorRegisteredToAVS(address restakingOperator, address avsRegistryCoordinator, bytes quorumNumbers, string socket)
RestakingOperatorRegisteredToAVSWithChurn
event RestakingOperatorRegisteredToAVSWithChurn(address restakingOperator, address avsRegistryCoordinator, bytes quorumNumbers, string socket, (uint8 quorumNumber, address operator)[] operatorKickParams)
Upgraded
event Upgraded(address indexed implementation)
ValidatorCredentialsVerified
event ValidatorCredentialsVerified(bytes32 indexed moduleName, uint40[] validatorIndices)
VerifiedAndProcessedWithdrawals
event VerifiedAndProcessedWithdrawals(bytes32 indexed moduleName, bytes32[][] validatorFields, bytes32[][] withdrawalFields)
WithdrawalsQueued
event WithdrawalsQueued(bytes32 indexed moduleName, uint256 shareAmount, bytes32 withdrawalRoot)
errors
AccessManagedInvalidAuthority
error AccessManagedInvalidAuthority(address authority)
AccessManagedRequiredDelay
error AccessManagedRequiredDelay(address caller, uint32 delay)
AccessManagedUnauthorized
error AccessManagedUnauthorized(address caller)
AddressEmptyCode
error AddressEmptyCode(address target)
Create2EmptyBytecode
error Create2EmptyBytecode()
Create2FailedDeployment
error Create2FailedDeployment()
Create2InsufficientBalance
error Create2InsufficientBalance(uint256 balance, uint256 needed)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedInnerCall
error FailedInnerCall()
ForbiddenModuleName
error ForbiddenModuleName()
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
Unauthorized
error Unauthorized()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x61012060405230608052348015610014575f80fd5b5060405161432a38038061432a8339810160408190526100339161012a565b6001600160a01b0380851660a05283811660c05282811660e05281166101005261005b610064565b50505050610186565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100b45760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146101135780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6001600160a01b0381168114610113575f80fd5b5f805f806080858703121561013d575f80fd5b845161014881610116565b602086015190945061015981610116565b604086015190935061016a81610116565b606086015190925061017b81610116565b939692955090935050565b60805160a05160c05160e0516101005161410c61021e5f395f81816104930152610dfb01525f81816103c6015281816106230152818161076f01528181610a3d0152818161102d0152818161123d0152818161152701528181611742015261190601525f81816102920152611add01525f818161039301526115be01525f8181611ca101528181611cca0152611e14015261410c5ff3fe6080604052600436106101c5575f3560e01c8063a6cee53d116100f2578063c4d66de811610092578063cf5fd70f11610062578063cf5fd70f14610583578063d82752c8146105a2578063e78eeca2146105c1578063eb788329146105e0575f80fd5b8063c4d66de814610507578063c53e89a814610526578063c7d1f67f14610545578063ceb0a65c14610564575f80fd5b8063b3bc6694116100cd578063b3bc669414610482578063b9a29777146104b5578063bf7e214f146104d4578063c1409329146104e8575f80fd5b8063a6cee53d14610407578063aba326d814610426578063ad3cb1cc14610445575f80fd5b806358d539e1116101685780638fb36037116101385780638fb360371461035557806396b4515714610382578063972546f8146103b5578063988fb458146103e8575f80fd5b806358d539e1146102cc578063649f2e13146102f857806364a9f89f146103175780637a9e5e4b14610336575f80fd5b80633d0c4a31116101a35780633d0c4a31146102285780634f1ef2861461024757806352d1902d1461025a5780635648c46114610281575f80fd5b8063092e6f10146101c95780630e4304b6146101ea578063335d2ffc14610209575b5f80fd5b3480156101d4575f80fd5b506101e86101e33660046122fa565b6105ff565b005b3480156101f5575f80fd5b506101e8610204366004612409565b61074e565b348015610214575f80fd5b506101e8610223366004612545565b610890565b348015610233575f80fd5b506101e86102423660046125b5565b610939565b6101e861025536600461268e565b6109e0565b348015610265575f80fd5b5061026e6109ff565b6040519081526020015b60405180910390f35b34801561028c575f80fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610278565b3480156102d7575f80fd5b506102eb6102e63660046126ed565b610a1a565b6040516102789190612704565b348015610303575f80fd5b506101e8610312366004612746565b610b46565b348015610322575f80fd5b506101e8610331366004612746565b610be0565b348015610341575f80fd5b506101e861035036600461277d565b610c7a565b348015610360575f80fd5b50610369610d01565b6040516001600160e01b03199091168152602001610278565b34801561038d575f80fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b3480156103c0575f80fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b3480156103f3575f80fd5b506101e8610402366004612798565b610d37565b348015610412575f80fd5b506101e8610421366004612545565b610ddb565b348015610431575f80fd5b506101e8610440366004612819565b610f53565b348015610450575f80fd5b50610475604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102789190612915565b34801561048d575f80fd5b506102b47f000000000000000000000000000000000000000000000000000000000000000081565b3480156104c0575f80fd5b506101e86104cf366004612927565b61100c565b3480156104df575f80fd5b506102b4611201565b3480156104f3575f80fd5b506101e86105023660046129d9565b61121c565b348015610512575f80fd5b506101e861052136600461277d565b611349565b348015610531575f80fd5b506101e8610540366004612a75565b611455565b348015610550575f80fd5b506102b461055f3660046126ed565b61151b565b34801561056f575f80fd5b506101e861057e366004612b98565b611675565b34801561058e575f80fd5b506101e861059d366004612be8565b611721565b3480156105ad575f80fd5b506101e86105bc366004612c08565b61183d565b3480156105cc575f80fd5b506101e86105db366004612be8565b6118e5565b3480156105eb575f80fd5b506102b46105fa366004612c63565b611a4a565b61060b335b5f36611ba0565b6040516322dbefbb60e01b8152600481018c90525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906322dbefbb90602401602060405180830381865afa158015610670573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906106949190612cc6565b604051637128f7a960e11b81529091506001600160a01b0382169063e251ef52906106d5908e908e908e908e908e908e908e908e908e908e90600401612e9b565b5f604051808303815f87803b1580156106ec575f80fd5b505af11580156106fe573d5f803e3d5ffd5b505050508b7f3f91dfbadd893521ffbbd43362750081af349f220002e6bfb4ffb3c00735f8ac868686866040516107389493929190613098565b60405180910390a2505050505050505050505050565b61075733610604565b6040516322dbefbb60e01b8152600481018a90525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906322dbefbb90602401602060405180830381865afa1580156107bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107e09190612cc6565b604051633f65cf1960e01b81529091506001600160a01b03821690633f65cf199061081d908c908c908c908c908c908c908c908c90600401613113565b5f604051808303815f87803b158015610834575f80fd5b505af1158015610846573d5f803e3d5ffd5b50505050897f6722c9fd02a30e38d993af1ef931e54d0c24d0eae5eba68982773ce120b8ddee888860405161087c929190613180565b60405180910390a250505050505050505050565b61089933610604565b60405163d3da608960e01b81526001600160a01b0385169063d3da6089906108c99086908690869060040161319b565b5f604051808303815f87803b1580156108e0575f80fd5b505af11580156108f2573d5f803e3d5ffd5b505050507f27db4fa232a48e1d8036200baf35b28cfeb67b68b78eb93656c499210354bcb18484848460405161092b94939291906131c8565b60405180910390a150505050565b61094233610604565b604051630f16172b60e41b81526001600160a01b0383169063f16172b09061096e9084906004016131fe565b5f604051808303815f87803b158015610985575f80fd5b505af1158015610997573d5f803e3d5ffd5b50505050816001600160a01b03167fb7a983123d29e62fc833cd4a787325e090bbe76c09634c46403c3521f40c2887826040516109d491906131fe565b60405180910390a25050565b6109e8611c96565b6109f182611d3c565b6109fb8282611d48565b5050565b5f610a08611e09565b505f805160206140b783398151915290565b6060610a2533610604565b6040516322dbefbb60e01b8152600481018390525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906322dbefbb90602401602060405180830381865afa158015610a8a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aae9190612cc6565b9050806001600160a01b031663eff7c5036040518163ffffffff1660e01b81526004015f604051808303815f875af1158015610aec573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610b139190810190613255565b60405190925083907f4651591b511cac27601595cefbb19b2f0a04ec7b9348230f44a1309b9d70a8c9905f90a250919050565b610b4f33610604565b60405163f73b751960e01b81526001600160a01b03828116600483015283169063f73b7519906024015f604051808303815f87803b158015610b8f575f80fd5b505af1158015610ba1573d5f803e3d5ffd5b50506040516001600160a01b038085169350851691507ffaf85fa92e9a913f582def722d9da998852ef6cd2fc7715266e3c3b16495c7ac905f90a35050565b610be933610604565b604051633f8d8ef560e21b81526001600160a01b03828116600483015283169063fe363bd4906024015f604051808303815f87803b158015610c29575f80fd5b505af1158015610c3b573d5f803e3d5ffd5b50506040516001600160a01b038085169350851691507f4925eafc82d0c4d67889898eeed64b18488ab19811e61620f387026dec126a28905f90a35050565b33610c83611201565b6001600160a01b0316816001600160a01b031614610cc35760405162d1953b60e31b81526001600160a01b03821660048201526024015b60405180910390fd5b816001600160a01b03163b5f03610cf8576040516361798f2f60e11b81526001600160a01b0383166004820152602401610cba565b6109fb82611e52565b5f8051602061409783398151915280545f9190600160a01b900460ff16610d28575f610d31565b638fb3603760e01b5b91505090565b610d4033610604565b60405163160f61a760e01b81526001600160a01b0384169063160f61a790610d6e90859085906004016132f4565b5f604051808303815f87803b158015610d85575f80fd5b505af1158015610d97573d5f803e3d5ffd5b505050507f3ffb7bac615a6339a8520562e9abe014bf9a36578e15f4bd3e55674478836163838383604051610dce93929190613317565b60405180910390a1505050565b610de433610604565b604051630d39c25360e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906334e7094c90610e349086908690869060040161319b565b602060405180830381865afa158015610e4f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e73919061334f565b610e8f576040516282b42960e81b815260040160405180910390fd5b60405163163e908360e21b81525f906001600160a01b038616906358fa420c90610ec19087908790879060040161319b565b5f604051808303815f875af1158015610edc573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f03919081019061336a565b9050846001600160a01b03167fb7733a8fd1263c835b901d11878a19c9a8cba9ba7db83ccd7f7a42364071509f85858585604051610f4494939291906133de565b60405180910390a25050505050565b610f5c33610604565b604051630f36a23b60e11b81526001600160a01b03891690631e6d447690610f94908a908a908a908a908a908a908a90600401613493565b5f604051808303815f87803b158015610fab575f80fd5b505af1158015610fbd573d5f803e3d5ffd5b505050507f5a71dfeab9efc3eea838ac5918e1e95f9d0175242766a5a993a1d7ba89ef097d888888888888604051610ffa969594939291906134fb565b60405180910390a15050505050505050565b61101533610604565b6040516322dbefbb60e01b8152600481018a90525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906322dbefbb90602401602060405180830381865afa15801561107a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061109e9190612cc6565b6040516319a021cb60e11b81529091506001600160a01b038216906333404396906110db908c908c908c908c908c908c908c908c90600401613640565b5f604051808303815f87803b1580156110f2575f80fd5b505af1158015611104573d5f803e3d5ffd5b505f9250829150505b898110156111b9575f5b8b8b8381811061112957611129613795565b905060200281019061113b91906137a9565b6111499060c08101906137c7565b90508110156111b0578b8b8381811061116457611164613795565b905060200281019061117691906137a9565b6111849060c08101906137c7565b8281811061119457611194613795565b90506020020135836111a6919061380c565b9250600101611117565b5060010161110d565b508a7f46ca5934f7ca805e7fbdc05e90e3ecbea495c41e35ba48e24f053c0c3d25af1e826040516111ec91815260200190565b60405180910390a25050505050505050505050565b5f80516020614097833981519152546001600160a01b031690565b61122533610604565b6040516322dbefbb60e01b8152600481018590525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906322dbefbb90602401602060405180830381865afa15801561128a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112ae9190612cc6565b604051630bed00f960e21b81529091506001600160a01b03821690632fb403e4906112e19087908790879060040161382b565b5f604051808303815f87803b1580156112f8575f80fd5b505af115801561130a573d5f803e3d5ffd5b50506040516001600160a01b03871681528792507ffa610363b3f4985bba03612919e946ac0bccf11c8e067255de41e530f8cc09979150602001610f44565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f8115801561138d5750825b90505f826001600160401b031660011480156113a85750303b155b9050811580156113b6575080155b156113d45760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156113fe57845460ff60401b1916600160401b1785555b61140786611eb2565b831561144d57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b61145e33610604565b604051630742ab8960e41b81526001600160a01b038c169063742ab8909061149c908d908d908d908d908d908d908d908d908d908d906004016138ce565b5f604051808303815f87803b1580156114b3575f80fd5b505af11580156114c5573d5f803e3d5ffd5b505050507f2355b89a7cda879f4b4edc7eed03e6c85cb945b16756d34597e2bd8e445c6e3d8b8b8b8b8b8b8a8a604051611506989796959493929190613953565b60405180910390a15050505050505050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611564576040516282b42960e81b815260040160405180910390fd5b6c4e4f5f56414c494441544f525360981b82036115945760405163d6cccd9b60e01b815260040160405180910390fd5b61166d5f83604051806020016115a99061227a565b601f1982820381018352601f909101166040527f0000000000000000000000000000000000000000000000000000000000000000866115e6611201565b60405160248101929092526001600160a01b0316604482015260640160408051601f19818403018152918152602080830180516001600160e01b0316631a4438cd60e21b179052905161163b939291016132f4565b60408051601f198184030181529082905261165992916020016139be565b604051602081830303815290604052611ec3565b90505b919050565b61167e33610604565b604051631337d03960e31b81526001600160a01b038416906399be81c8906116ac90859085906004016139d2565b5f604051808303815f87803b1580156116c3575f80fd5b505af11580156116d5573d5f803e3d5ffd5b50505050826001600160a01b03167f4cb1b839d29c7a6f051ae51c7b439f2f8f991de54a4b5906503a06a0892ba2c483836040516117149291906139d2565b60405180910390a2505050565b61172a33610604565b6040516322dbefbb60e01b8152600481018390525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906322dbefbb90602401602060405180830381865afa15801561178f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117b39190612cc6565b604051632ca1025360e11b8152600481018490529091506001600160a01b0382169063594204a6906024015f604051808303815f87803b1580156117f5575f80fd5b505af1158015611807573d5f803e3d5ffd5b50505050827fcc72a3059fae624886e4da6e0b98e575d8cb4f7ea47e3986b5b60182621b7e228360405161171491815260200190565b61184633610604565b604051633801a64360e11b8152600481018390526001600160a01b0382811660248301528416906370034c86906044015f604051808303815f87803b15801561188d575f80fd5b505af115801561189f573d5f803e3d5ffd5b5050604080518581526001600160a01b038581166020830152871693507f3a6a179c72e503b78f992c3aa1a8d451c366c446c086cee5a811a3d03445a62f925001611714565b6118ee33610604565b6040516322dbefbb60e01b8152600481018390525f907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906322dbefbb90602401602060405180830381865afa158015611953573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119779190612cc6565b60405163852aa33d60e01b8152600481018490529091505f906001600160a01b0383169063852aa33d906024015f604051808303815f875af11580156119bf573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119e69190810190613255565b9050837ffa1bd67700189b28b5a9085170838266813878ca3237b31a33358644a22a2f0e84835f81518110611a1d57611a1d613795565b6020026020010151604051611a3c929190918252602082015260400190565b60405180910390a250505050565b5f611a5433610604565b5f6040518060600160405280306001600160a01b03168152602001856001600160a01b031681526020018463ffffffff1681525090505f611b535f8888604051602001611aa29291906139d2565b6040516020818303038152906040528051906020012060405180602001611ac89061227a565b601f1982820381018352601f909101166040527f0000000000000000000000000000000000000000000000000000000000000000611b04611201565b878d8d604051602401611b1a94939291906139e5565b60408051601f19818403018152918152602080830180516001600160e01b031663d7e5499960e01b179052905161163b939291016132f4565b9050806001600160a01b03167fe6d2ef00fd0a5954fa31f9490b80fdef8567f96514930552ec737131eb85a1c783604051611b8e9190613a3c565b60405180910390a29695505050505050565b5f805160206140978339815191525f80611bd8611bbb611201565b8730611bca60045f8a8c613a71565b611bd391613a98565b611f48565b915091508161144d5763ffffffff811615611c7357825460ff60a01b1916600160a01b178355611c06611201565b6001600160a01b03166394c7d7ee8787876040518463ffffffff1660e01b8152600401611c359392919061319b565b5f604051808303815f87803b158015611c4c575f80fd5b505af1158015611c5e573d5f803e3d5ffd5b5050845460ff60a01b191685555061144d9050565b60405162d1953b60e31b81526001600160a01b0387166004820152602401610cba565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611d1c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611d105f805160206140b7833981519152546001600160a01b031690565b6001600160a01b031614155b15611d3a5760405163703e46dd60e11b815260040160405180910390fd5b565b611d4533610604565b50565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611da2575060408051601f3d908101601f19168201909252611d9f91810190613ad0565b60015b611dca57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610cba565b5f805160206140b78339815191528114611dfa57604051632a87526960e21b815260048101829052602401610cba565b611e048383612050565b505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611d3a5760405163703e46dd60e11b815260040160405180910390fd5b5f8051602061409783398151915280546001600160a01b0383166001600160a01b03199091168117825560408051918252517f2f658b440c35314f52658ea8a740e05b284cdc84dc9ae01e891f21b8933e7cad9181900360200190a15050565b611eba6120a5565b611d45816120ee565b5f83471015611eee5760405163392efb2b60e21b815247600482015260248101859052604401610cba565b81515f03611f0f57604051631328927760e21b815260040160405180910390fd5b8282516020840186f590506001600160a01b038116611f4157604051633a0ba96160e11b815260040160405180910390fd5b9392505050565b6040516001600160a01b03848116602483015283811660448301526001600160e01b0319831660648301525f9182918291829189169060840160408051601f198184030181529181526020820180516001600160e01b031663b700961360e01b17905251611fb69190613ae7565b5f60405180830381855afa9150503d805f8114611fee576040519150601f19603f3d011682016040523d82523d5f602084013e611ff3565b606091505b50915091508115612045576040815110612025578080602001905181019061201b9190613af2565b9094509250612045565b60208151106120455780806020019051810190612042919061334f565b93505b505094509492505050565b612059826120ff565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561209d57611e048282612162565b6109fb6121d6565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16611d3a57604051631afcd79f60e31b815260040160405180910390fd5b6120f66120a5565b611d4581611e52565b806001600160a01b03163b5f0361213457604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610cba565b5f805160206140b783398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b03168460405161217e9190613ae7565b5f60405180830381855af49150503d805f81146121b6576040519150601f19603f3d011682016040523d82523d5f602084013e6121bb565b606091505b50915091506121cb8583836121f5565b925050505b92915050565b3415611d3a5760405163b398979f60e01b815260040160405180910390fd5b60608261220a5761220582612251565b611f41565b815115801561222157506001600160a01b0384163b155b1561224a57604051639996b31560e01b81526001600160a01b0385166004820152602401610cba565b5080611f41565b8051156122615780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b61057780613b2083390190565b80356001600160401b0381168114611670575f80fd5b5f604082840312156122ad575f80fd5b50919050565b5f8083601f8401126122c3575f80fd5b5081356001600160401b038111156122d9575f80fd5b6020830191508360208260051b85010111156122f3575f80fd5b9250929050565b5f805f805f805f805f805f60e08c8e031215612314575f80fd5b8b359a5061232460208d01612287565b995060408c01356001600160401b0381111561233e575f80fd5b61234a8e828f0161229d565b99505060608c01356001600160401b03811115612365575f80fd5b6123718e828f016122b3565b90995097505060808c01356001600160401b0381111561238f575f80fd5b61239b8e828f016122b3565b90975095505060a08c01356001600160401b038111156123b9575f80fd5b6123c58e828f016122b3565b90955093505060c08c01356001600160401b038111156123e3575f80fd5b6123ef8e828f016122b3565b915080935050809150509295989b509295989b9093969950565b5f805f805f805f805f60c08a8c031215612421575f80fd5b8935985061243160208b01612287565b975060408a01356001600160401b0381111561244b575f80fd5b6124578c828d0161229d565b97505060608a01356001600160401b03811115612472575f80fd5b61247e8c828d016122b3565b90975095505060808a01356001600160401b0381111561249c575f80fd5b6124a88c828d016122b3565b90955093505060a08a01356001600160401b038111156124c6575f80fd5b6124d28c828d016122b3565b915080935050809150509295985092959850929598565b6001600160a01b0381168114611d45575f80fd5b8035611670816124e9565b5f8083601f840112612518575f80fd5b5081356001600160401b0381111561252e575f80fd5b6020830191508360208285010111156122f3575f80fd5b5f805f8060608587031215612558575f80fd5b8435612563816124e9565b93506020850135612573816124e9565b925060408501356001600160401b0381111561258d575f80fd5b61259987828801612508565b95989497509550505050565b5f606082840312156122ad575f80fd5b5f80608083850312156125c6575f80fd5b82356125d1816124e9565b91506125e084602085016125a5565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715612625576126256125e9565b604052919050565b5f6001600160401b03821115612645576126456125e9565b50601f01601f191660200190565b5f6126656126608461262d565b6125fd565b9050828152838383011115612678575f80fd5b828260208301375f602084830101529392505050565b5f806040838503121561269f575f80fd5b82356126aa816124e9565b915060208301356001600160401b038111156126c4575f80fd5b8301601f810185136126d4575f80fd5b6126e385823560208401612653565b9150509250929050565b5f602082840312156126fd575f80fd5b5035919050565b602080825282518282018190525f918401906040840190835b8181101561273b57835183526020938401939092019160010161271d565b509095945050505050565b5f8060408385031215612757575f80fd5b8235612762816124e9565b91506020830135612772816124e9565b809150509250929050565b5f6020828403121561278d575f80fd5b8135611f41816124e9565b5f805f606084860312156127aa575f80fd5b83356127b5816124e9565b925060208401356127c5816124e9565b915060408401356001600160401b038111156127df575f80fd5b8401601f810186136127ef575f80fd5b6127fe86823560208401612653565b9150509250925092565b5f61010082840312156122ad575f80fd5b5f805f805f805f806101a0898b031215612831575f80fd5b883561283c816124e9565b9750602089013561284c816124e9565b965060408901356001600160401b03811115612866575f80fd5b6128728b828c01612508565b90975095505060608901356001600160401b03811115612890575f80fd5b61289c8b828c01612508565b90955093506128b090508a60808b01612808565b91506101808901356001600160401b038111156128cb575f80fd5b6128d78b828c016125a5565b9150509295985092959890939650565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f611f4160208301846128e7565b5f805f805f805f805f60a08a8c03121561293f575f80fd5b8935985060208a01356001600160401b0381111561295b575f80fd5b6129678c828d016122b3565b90995097505060408a01356001600160401b03811115612985575f80fd5b6129918c828d016122b3565b90975095505060608a01356001600160401b038111156129af575f80fd5b6129bb8c828d016122b3565b90955093505060808a01356001600160401b038111156124c6575f80fd5b5f805f80608085870312156129ec575f80fd5b8435935060208501356129fe816124e9565b925060408501356001600160401b03811115612a18575f80fd5b612a248782880161229d565b949793965093946060013593505050565b5f8083601f840112612a45575f80fd5b5081356001600160401b03811115612a5b575f80fd5b6020830191508360208260061b85010111156122f3575f80fd5b5f805f805f805f805f805f6101e08c8e031215612a90575f80fd5b612a998c6124fd565b9a50612aa760208d016124fd565b995060408c01356001600160401b03811115612ac1575f80fd5b612acd8e828f01612508565b909a5098505060608c01356001600160401b03811115612aeb575f80fd5b612af78e828f01612508565b9098509650612b0b90508d60808e01612808565b94506101808c01356001600160401b03811115612b26575f80fd5b612b328e828f01612a35565b9095509350506101a08c01356001600160401b03811115612b51575f80fd5b612b5d8e828f016125a5565b9250506101c08c01356001600160401b03811115612b79575f80fd5b612b858e828f016125a5565b9150509295989b509295989b9093969950565b5f805f60408486031215612baa575f80fd5b8335612bb5816124e9565b925060208401356001600160401b03811115612bcf575f80fd5b612bdb86828701612508565b9497909650939450505050565b5f8060408385031215612bf9575f80fd5b50508035926020909101359150565b5f805f60608486031215612c1a575f80fd5b8335612c25816124e9565b9250602084013591506040840135612c3c816124e9565b809150509250925092565b63ffffffff81168114611d45575f80fd5b803561167081612c47565b5f805f8060608587031215612c76575f80fd5b84356001600160401b03811115612c8b575f80fd5b612c9787828801612508565b9095509350506020850135612cab816124e9565b91506040850135612cbb81612c47565b939692955090935050565b5f60208284031215612cd6575f80fd5b8151611f41816124e9565b5f808335601e19843603018112612cf6575f80fd5b83016020810192503590506001600160401b03811115612d14575f80fd5b8036038213156122f3575f80fd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b803582525f612d5c6020830183612ce1565b604060208601526121cb604086018284612d22565b5f8383855260208501945060208460051b820101835f5b86811015612dc657838303601f19018852612da38287612ce1565b612dae858284612d22565b60209a8b019a90955093909301925050600101612d88565b50909695505050505050565b8183525f6001600160fb1b03831115612de9575f80fd5b8260051b80836020870137939093016020019392505050565b5f808335601e19843603018112612e17575f80fd5b83016020810192503590506001600160401b03811115612e35575f80fd5b8060051b36038213156122f3575f80fd5b5f8383855260208501945060208460051b820101835f5b86811015612dc657838303601f19018852612e788287612e02565b612e83858284612dd2565b60209a8b019a90955093909301925050600101612e5d565b6001600160401b038b16815260c060208201525f612ebc60c083018c612d4a565b828103604084015289815260208082019060058c901b8301018c5f3682900361017e19015b8e82101561304557601f1986850301855280833512612efe575f80fd5b8f833501612f0c8182612ce1565b6101808752612f2061018088018284612d22565b915050612f306020830183612ce1565b8783036020890152612f43838284612d22565b92505050612f546040830183612ce1565b8783036040890152612f67838284612d22565b92505050612f786060830183612ce1565b8783036060890152612f8b838284612d22565b92505050612f9c6080830183612ce1565b8783036080890152612faf838284612d22565b92505050612fbf60a08301612287565b6001600160401b031660a0870152612fd960c08301612287565b6001600160401b031660c0870152612ff360e08301612287565b6001600160401b031660e0870152610100828101359087015261012080830135908701526101408083013590870152610160918201359190950152602094850194929092019160019190910190612ee1565b505050848103606086015261305b818b8d612d71565b925050508281036080840152613072818789612e46565b905082810360a0840152613087818587612e46565b9d9c50505050505050505050505050565b604081525f6130ab604083018688612e46565b82810360208401526130be818587612e46565b979650505050505050565b8183526020830192505f815f5b8481101561310957813564ffffffffff81168082146130f3575f80fd5b87525060209586019591909101906001016130d6565b5093949350505050565b6001600160401b038916815260a060208201525f61313460a083018a612d4a565b828103604084015261314781898b6130c9565b9050828103606084015261315c818789612d71565b90508281036080840152613171818587612e46565b9b9a5050505050505050505050565b602081525f6131936020830184866130c9565b949350505050565b6001600160a01b03841681526040602082018190525f906131bf9083018486612d22565b95945050505050565b6001600160a01b038581168252841660208201526060604082018190525f906131f49083018486612d22565b9695505050505050565b60608101823561320d816124e9565b6001600160a01b031682526020830135613226816124e9565b6001600160a01b03166020830152604083013561324281612c47565b63ffffffff811660408401525092915050565b5f60208284031215613265575f80fd5b81516001600160401b0381111561327a575f80fd5b8201601f8101841361328a575f80fd5b80516001600160401b038111156132a3576132a36125e9565b8060051b6132b3602082016125fd565b918252602081840181019290810190878411156132ce575f80fd5b6020850194505b838510156130be578451808352602095860195909350909101906132d5565b6001600160a01b03831681526040602082018190525f90613193908301846128e7565b6001600160a01b038481168252831660208201526060604082018190525f906131bf908301846128e7565b8015158114611d45575f80fd5b5f6020828403121561335f575f80fd5b8151611f4181613342565b5f6020828403121561337a575f80fd5b81516001600160401b0381111561338f575f80fd5b8201601f8101841361339f575f80fd5b80516133ad6126608261262d565b8181528560208385010111156133c1575f80fd5b8160208401602083015e5f91810160200191909152949350505050565b6001600160a01b03851681526060602082018190525f906134029083018587612d22565b82810360408401526130be81856128e7565b803582526020808201359083015261343c604083016040830180358252602090810135910152565b6040608082016080840137604060c0820160c08401375050565b5f6134618283612ce1565b60608552613473606086018284612d22565b602085810135908701526040948501359490950193909352509192915050565b6001600160a01b0388168152610180602082018190525f906134b8908301888a612d22565b82810360408401526134cb818789612d22565b90506134da6060840186613414565b8281036101608401526134ed8185613456565b9a9950505050505050505050565b6001600160a01b038781168252861660208201526080604082018190525f906135279083018688612d22565b828103606084015261353a818587612d22565b9998505050505050505050565b8183526020830192505f815f5b84811015613109578135613567816124e9565b6001600160a01b031686526020958601959190910190600101613554565b5f8383855260208501945060208460051b820101835f5b86811015612dc657838303601f190188526135b78287612e02565b808552602085015f5b828110156135f05783356135d3816124e9565b6001600160a01b03168252602093840193909101906001016135c0565b5060209a8b019a9095509390930192505060010161359c565b8183526020830192505f815f5b8481101561310957813561362981613342565b151586526020958601959190910190600101613616565b608080825281018890525f60a060058a901b830181019083018b8360de1936839003015b8d82101561375457868503609f190184528235818112613682575f80fd5b8f01803561368f816124e9565b6001600160a01b0316865260208101356136a8816124e9565b6001600160a01b031660208701526136c2604082016124fd565b6001600160a01b03166040870152606081810135908701526136e660808201612c58565b63ffffffff1660808701526136fe60a0820182612e02565b60e060a089015261371360e089018284613547565b91505061372360c0830183612e02565b925087820360c0890152613738828483612dd2565b9750505050602083019250602084019350600182019150613664565b50505050828103602084015261376b81898b613585565b90508281036040840152613780818789612dd2565b90508281036060840152613171818587613609565b634e487b7160e01b5f52603260045260245ffd5b5f823560de198336030181126137bd575f80fd5b9190910192915050565b5f808335601e198436030181126137dc575f80fd5b8301803591506001600160401b038211156137f5575f80fd5b6020019150600581901b36038213156122f3575f80fd5b808201808211156121d057634e487b7160e01b5f52601160045260245ffd5b6001600160a01b0384168152606060208201525f6138498480612ce1565b6040606085015261385e60a085018284612d22565b60209690960135608085015250505060400152919050565b8183526020830192505f815f5b8481101561310957813560ff811680821461389c575f80fd5b87525060208201356138ad816124e9565b6001600160a01b031660208701526040958601959190910190600101613883565b6001600160a01b038b1681526101c0602082018190525f906138f39083018b8d612d22565b8281036040840152613906818a8c612d22565b90506139156060840189613414565b828103610160840152613929818789613876565b905082810361018084015261393e8186613456565b90508281036101a08401526130878185613456565b6001600160a01b0389811682528816602082015260a0604082018190525f9061397f908301888a612d22565b8281036060840152613992818789612d22565b90508281036080840152613171818587613876565b5f81518060208401855e5f93019283525090919050565b5f6131936139cc83866139a7565b846139a7565b602081525f613193602083018486612d22565b6001600160a01b0385168152613a26602082018580516001600160a01b0390811683526020808301519091169083015260409081015163ffffffff16910152565b60a060808201525f6131f460a083018486612d22565b81516001600160a01b0390811682526020808401519091169082015260408083015163ffffffff1690820152606081016121d0565b5f8085851115613a7f575f80fd5b83861115613a8b575f80fd5b5050820193919092039150565b80356001600160e01b03198116906004841015613ac9576001600160e01b0319600485900360031b81901b82161691505b5092915050565b5f60208284031215613ae0575f80fd5b5051919050565b5f611f4182846139a7565b5f8060408385031215613b03575f80fd5b8251613b0e81613342565b602084015190925061277281612c4756fe60a060405260405161057738038061057783398101604081905261002291610354565b61002c828261003e565b506001600160a01b0316608052610445565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e49190610416565b82610209565b505050565b6100f761027c565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d29190610416565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f80846001600160a01b031684604051610225919061042f565b5f60405180830381855af49150503d805f811461025d576040519150601f19603f3d011682016040523d82523d5f602084013e610262565b606091505b50909250905061027385838361029d565b95945050505050565b341561029b5760405163b398979f60e01b815260040160405180910390fd5b565b6060826102b2576102ad826102fc565b6102f5565b81511580156102c957506001600160a01b0384163b155b156102f257604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b50805b9392505050565b80511561030c5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b80516001600160a01b038116811461033b575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215610365575f80fd5b61036e83610325565b60208401519092506001600160401b03811115610389575f80fd5b8301601f81018513610399575f80fd5b80516001600160401b038111156103b2576103b2610340565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103e0576103e0610340565b6040528181528282016020018710156103f7575f80fd5b8160208401602083015e5f602083830101528093505050509250929050565b5f60208284031215610426575f80fd5b6102f582610325565b5f82518060208501845e5f920191825250919050565b60805161011b61045c5f395f601d015261011b5ff3fe6080604052600a600c565b005b60186014601a565b609d565b565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156076573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906098919060ba565b905090565b365f80375f80365f845af43d5f803e80801560b6573d5ff35b3d5ffd5b5f6020828403121560c9575f80fd5b81516001600160a01b038116811460de575f80fd5b939250505056fea26469706673582212208ac61e09447c22ad9bf44e7f95d4370485ff4f2f51e94aaa1e947e432b97903d64736f6c634300081a0033f3177357ab46d8af007ab3fdb9af81da189e1068fefdc0073dca88a2cab40a00360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212203b24d03bd90315e2494c2751a33335252d59fc59e2a11d96e726874fde4ed02764736f6c634300081a0033000000000000000000000000dd38a5a7789c74fc7f64556fc772343658eebb040000000000000000000000006756b856dd3843c84249a6a31850cb56db824c4b000000000000000000000000f7b6b32492c2e13799d921e84202450131bd238b0000000000000000000000001565e55b63675c703fcc3778bd33ea97f7be882f