0 txs
53.4k calls
constructor
constructor(address _delegation, address _pauserRegistry, address _permissionController, uint32 _DEALLOCATION_DELAY, uint32 _ALLOCATION_CONFIGURATION_DELAY, string _version)
functions
ALLOCATION_CONFIGURATION_DELAY
viewfunction ALLOCATION_CONFIGURATION_DELAY() view returns (uint32)
DEALLOCATION_DELAY
viewfunction DEALLOCATION_DELAY() view returns (uint32)
delegation
viewfunction delegation() view returns (address)
getAllocatableMagnitude
viewfunction getAllocatableMagnitude(address operator, address strategy) view returns (uint64)
getAllocatedSets
viewfunction getAllocatedSets(address operator) view returns (tuple[])
getAllocatedStake
viewfunction getAllocatedStake(tuple operatorSet, address[] operators, address[] strategies) view returns (uint256[][])
getAllocatedStrategies
viewfunction getAllocatedStrategies(address operator, tuple operatorSet) view returns (address[])
getAllocation
viewfunction getAllocation(address operator, tuple operatorSet, address strategy) view returns (tuple)
getAllocationDelay
viewfunction getAllocationDelay(address operator) view returns (bool, uint32)
getAllocations
viewfunction getAllocations(address[] operators, tuple operatorSet, address strategy) view returns (tuple[])
getAVSRegistrar
viewfunction getAVSRegistrar(address avs) view returns (address)
getEncumberedMagnitude
viewfunction getEncumberedMagnitude(address operator, address strategy) view returns (uint64)
getMaxMagnitude
viewfunction getMaxMagnitude(address operator, address strategy) view returns (uint64)
getMaxMagnitudes
viewfunction getMaxMagnitudes(address operator, address[] strategies) view returns (uint64[])
getMaxMagnitudes
viewfunction getMaxMagnitudes(address[] operators, address strategy) view returns (uint64[])
getMaxMagnitudesAtBlock
viewfunction getMaxMagnitudesAtBlock(address operator, address[] strategies, uint32 blockNumber) view returns (uint64[])
getMemberCount
viewfunction getMemberCount(tuple operatorSet) view returns (uint256)
getMembers
viewfunction getMembers(tuple operatorSet) view returns (address[])
getMinimumSlashableStake
viewfunction getMinimumSlashableStake(tuple operatorSet, address[] operators, address[] strategies, uint32 futureBlock) view returns (uint256[][] slashableStake)
getOperatorSetCount
viewfunction getOperatorSetCount(address avs) view returns (uint256)
getRegisteredSets
viewfunction getRegisteredSets(address operator) view returns (tuple[])
getStrategiesInOperatorSet
viewfunction getStrategiesInOperatorSet(tuple operatorSet) view returns (address[])
getStrategyAllocations
viewfunction getStrategyAllocations(address operator, address strategy) view returns (tuple[], tuple[])
isMemberOfOperatorSet
viewfunction isMemberOfOperatorSet(address operator, tuple operatorSet) view returns (bool)
isOperatorSet
viewfunction isOperatorSet(tuple operatorSet) view returns (bool)
isOperatorSlashable
viewfunction isOperatorSlashable(address operator, tuple operatorSet) view returns (bool)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (uint256)
paused
viewfunction paused(uint8 index) view returns (bool)
pauserRegistry
viewfunction pauserRegistry() view returns (address)
permissionController
viewfunction permissionController() view returns (address)
version
viewfunction version() view returns (string)
addStrategiesToOperatorSet
nonpayablefunction addStrategiesToOperatorSet(address avs, uint32 operatorSetId, address[] strategies)
clearDeallocationQueue
nonpayablefunction clearDeallocationQueue(address operator, address[] strategies, uint16[] numToClear)
createOperatorSets
nonpayablefunction createOperatorSets(address avs, tuple[] params)
deregisterFromOperatorSets
nonpayablefunction deregisterFromOperatorSets(tuple params)
initialize
nonpayablefunction initialize(address initialOwner, uint256 initialPausedStatus)
modifyAllocations
nonpayablefunction modifyAllocations(address operator, tuple[] params)
pause
nonpayablefunction pause(uint256 newPausedStatus)
pauseAll
nonpayablefunction pauseAll()
registerForOperatorSets
nonpayablefunction registerForOperatorSets(address operator, tuple params)
removeStrategiesFromOperatorSet
nonpayablefunction removeStrategiesFromOperatorSet(address avs, uint32 operatorSetId, address[] strategies)
renounceOwnership
nonpayablefunction renounceOwnership()
setAllocationDelay
nonpayablefunction setAllocationDelay(address operator, uint32 delay)
setAVSRegistrar
nonpayablefunction setAVSRegistrar(address avs, address registrar)
slashOperator
nonpayablefunction slashOperator(address avs, tuple params)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause(uint256 newPausedStatus)
updateAVSMetadataURI
nonpayablefunction updateAVSMetadataURI(address avs, string metadataURI)
events
AllocationDelaySet
event AllocationDelaySet(address operator, uint32 delay, uint32 effectBlock)
AllocationUpdated
event AllocationUpdated(address operator, (address avs, uint32 id) operatorSet, address strategy, uint64 magnitude, uint32 effectBlock)
AVSMetadataURIUpdated
event AVSMetadataURIUpdated(address indexed avs, string metadataURI)
AVSRegistrarSet
event AVSRegistrarSet(address avs, address registrar)
EncumberedMagnitudeUpdated
event EncumberedMagnitudeUpdated(address operator, address strategy, uint64 encumberedMagnitude)
Initialized
event Initialized(uint8 version)
MaxMagnitudeUpdated
event MaxMagnitudeUpdated(address operator, address strategy, uint64 maxMagnitude)
OperatorAddedToOperatorSet
event OperatorAddedToOperatorSet(address indexed operator, (address avs, uint32 id) operatorSet)
OperatorRemovedFromOperatorSet
event OperatorRemovedFromOperatorSet(address indexed operator, (address avs, uint32 id) operatorSet)
OperatorSetCreated
event OperatorSetCreated((address avs, uint32 id) operatorSet)
OperatorSlashed
event OperatorSlashed(address operator, (address avs, uint32 id) operatorSet, address[] strategies, uint256[] wadSlashed, string description)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address indexed account, uint256 newPausedStatus)
StrategyAddedToOperatorSet
event StrategyAddedToOperatorSet((address avs, uint32 id) operatorSet, address strategy)
StrategyRemovedFromOperatorSet
event StrategyRemovedFromOperatorSet((address avs, uint32 id) operatorSet, address strategy)
Unpaused
event Unpaused(address indexed account, uint256 newPausedStatus)
errors
AlreadyMemberOfSet
error AlreadyMemberOfSet()
CurrentlyPaused
error CurrentlyPaused()
Empty
error Empty()
InputAddressZero
error InputAddressZero()
InputArrayLengthMismatch
error InputArrayLengthMismatch()
InsufficientMagnitude
error InsufficientMagnitude()
InvalidAVSRegistrar
error InvalidAVSRegistrar()
InvalidCaller
error InvalidCaller()
InvalidNewPausedStatus
error InvalidNewPausedStatus()
InvalidOperator
error InvalidOperator()
InvalidOperatorSet
error InvalidOperatorSet()
InvalidPermissions
error InvalidPermissions()
InvalidShortString
error InvalidShortString()
InvalidSnapshotOrdering
error InvalidSnapshotOrdering()
InvalidWadToSlash
error InvalidWadToSlash()
ModificationAlreadyPending
error ModificationAlreadyPending()
NonexistentAVSMetadata
error NonexistentAVSMetadata()
NotMemberOfSet
error NotMemberOfSet()
OnlyPauser
error OnlyPauser()
OnlyUnpauser
error OnlyUnpauser()
OperatorNotSlashable
error OperatorNotSlashable()
OutOfBounds
error OutOfBounds()
SameMagnitude
error SameMagnitude()
StrategiesMustBeInAscendingOrder
error StrategiesMustBeInAscendingOrder()
StrategyAlreadyInOperatorSet
error StrategyAlreadyInOperatorSet()
StrategyNotInOperatorSet
error StrategyNotInOperatorSet()
StringTooLong
error StringTooLong(string str)
UninitializedAllocationDelay
error UninitializedAllocationDelay()
creation bytecode
0x610140604052348015610010575f5ffd5b50604051615fb7380380615fb783398101604081905261002f916101e6565b8084878585896001600160a01b03811661005c576040516339b190bb60e11b815260040160405180910390fd5b6001600160a01b0390811660805292831660a05263ffffffff91821660c0521660e052166101005261008d816100a5565b610120525061009a6100eb565b50505050505061034a565b5f5f829050601f815111156100d8578260405163305a27a960e01b81526004016100cf91906102ef565b60405180910390fd5b80516100e382610324565b179392505050565b5f54610100900460ff16156101525760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b60648201526084016100cf565b5f5460ff908116146101a1575f805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b6001600160a01b03811681146101b7575f5ffd5b50565b805163ffffffff811681146101cd575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f5f5f5f5f60c087890312156101fb575f5ffd5b8651610206816101a3565b6020880151909650610217816101a3565b6040880151909550610228816101a3565b9350610236606088016101ba565b9250610244608088016101ba565b60a08801519092506001600160401b0381111561025f575f5ffd5b8701601f8101891361026f575f5ffd5b80516001600160401b03811115610288576102886101d2565b604051601f8201601f19908116603f011681016001600160401b03811182821017156102b6576102b66101d2565b6040528181528282016020018b10156102cd575f5ffd5b8160208401602083015e5f602083830101528093505050509295509295509295565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b80516020808301519190811015610344575f198160200360031b1b821691505b50919050565b60805160a05160c05160e0516101005161012051615bd26103e55f395f611b3701525f818161044f015261356c01525f81816105b30152613dfc01525f818161036101528181611fce01526126d001525f8181610732015281816114d501528181611b6b01528181611bd5015281816129ce015261364b01525f81816105da0152818161085801528181611c7a01526131e30152615bd25ff3fe608060405234801561000f575f5ffd5b50600436106102b1575f3560e01c80636cfb44811161017b578063a9821821116100e4578063c221d8ae1161009e578063df5cf72311610079578063df5cf7231461072d578063f2fde38b14610754578063f605ce0814610767578063fabc1cbc1461077a575f5ffd5b8063c221d8ae146106f4578063cd6dc68714610707578063d3d96ff41461071a575f5ffd5b8063a982182114610666578063adc2e3d914610679578063b2447af71461068c578063b66bd9891461069f578063b9fbaed1146106b2578063ba1a84e5146106e1575f5ffd5b8063886f119511610135578063886f1195146105d55780638ce64854146105fc5780638da5cb5b1461061c57806394d7d00c1461062d578063952899ee14610640578063a9333ec814610653575f5ffd5b80636cfb4481146105425780636e3492b51461056d5780636e875dba14610580578063715018a61461059357806379ae50cd1461059b5780637bc1ef61146105ae575f5ffd5b80634177a87c1161021d57806354fd4d50116101d757806354fd4d50146104ca57806356c483e6146104df578063595c6a67146104f25780635ac86ab7146104fa5780635c975abb1461051d578063670d3ba21461052f575f5ffd5b80634177a87c1461042a5780634657e26a1461044a5780634a10ffe5146104715780634b5046ef1461049157806350feea20146104a4578063547afb87146104b7575f5ffd5b80632981eb771161026e5780632981eb771461035c5780632b453a9a146103985780632bab2c4a146103b8578063304c10cd146103cb57806336352057146103f657806340120dab14610409575f5ffd5b806310e1b9b8146102b55780631352c3e6146102de578063136439dd1461030157806315fe502814610316578063260dc75814610336578063261f84e014610349575b5f5ffd5b6102c86102c3366004614a50565b61078d565b6040516102d59190614a97565b60405180910390f35b6102f16102ec366004614aca565b6107c8565b60405190151581526020016102d5565b61031461030f366004614afe565b610843565b005b610329610324366004614b15565b610918565b6040516102d59190614b93565b6102f1610344366004614ba5565b610a2f565b610314610357366004614bff565b610a60565b6103837f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff90911681526020016102d5565b6103ab6103a6366004614ce4565b610d3b565b6040516102d59190614d87565b6103ab6103c6366004614dea565b610d51565b6103de6103d9366004614b15565b610df0565b6040516001600160a01b0390911681526020016102d5565b610314610404366004614e6e565b610e1f565b61041c610417366004614ec0565b611629565b6040516102d5929190614f4d565b61043d610438366004614ba5565b6117a4565b6040516102d59190614faa565b6103de7f000000000000000000000000000000000000000000000000000000000000000081565b61048461047f366004614fbc565b6117c8565b6040516102d59190614fff565b61031461049f36600461504a565b611870565b6103146104b23660046150ca565b61192a565b6104846104c5366004615128565b611a88565b6104d2611b30565b6040516102d5919061516a565b6103146104ed36600461519f565b611b60565b610314611c65565b6102f16105083660046151c9565b606654600160ff9092169190911b9081161490565b6066545b6040519081526020016102d5565b6102f161053d366004614aca565b611d14565b610555610550366004614ec0565b611d25565b6040516001600160401b0390911681526020016102d5565b61031461057b3660046151ff565b611d3a565b61043d61058e366004614ba5565b61211b565b61031461212c565b6103296105a9366004614b15565b61213d565b6103837f000000000000000000000000000000000000000000000000000000000000000081565b6103de7f000000000000000000000000000000000000000000000000000000000000000081565b61060f61060a366004615230565b612217565b6040516102d59190615273565b6033546001600160a01b03166103de565b61048461063b366004615285565b6122d3565b61031461064e3660046152e0565b6123bf565b610555610661366004614ec0565b61287e565b610314610674366004615489565b6128ad565b610314610687366004615507565b61295f565b61052161069a366004614ba5565b612cbc565b6103146106ad3660046150ca565b612cde565b6106c56106c0366004614b15565b612e38565b60408051921515835263ffffffff9091166020830152016102d5565b6105216106ef366004614b15565b612ed2565b61043d610702366004614aca565b612ef2565b610314610715366004615549565b612f1b565b610314610728366004614ec0565b613038565b6103de7f000000000000000000000000000000000000000000000000000000000000000081565b610314610762366004614b15565b61315c565b610555610775366004614ec0565b6131d5565b610314610788366004614afe565b6131e1565b604080516060810182525f80825260208201819052918101829052906107bc856107b6866132f7565b8561335a565b925050505b9392505050565b6001600160a01b0382165f908152609e602052604081208190816107eb856132f7565b815260208082019290925260409081015f2081518083019092525460ff8116151580835261010090910463ffffffff16928201929092529150806108395750806020015163ffffffff164311155b9150505b92915050565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa1580156108a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108c99190615573565b6108e657604051631d77d47760e21b815260040160405180910390fd5b606654818116811461090b5760405163c61dca5d60e01b815260040160405180910390fd5b610914826134c6565b5050565b6001600160a01b0381165f908152609d602052604081206060919061093c90613503565b90505f816001600160401b0381111561095757610957614974565b60405190808252806020026020018201604052801561099b57816020015b604080518082019091525f80825260208201528152602001906001900390816109755790505b5090505f5b82811015610a27576001600160a01b0385165f908152609d60205260409020610a02906109cd908361350c565b604080518082019091525f80825260208201525060408051808201909152606082901c815263ffffffff909116602082015290565b828281518110610a1457610a14615592565b60209081029190910101526001016109a0565b509392505050565b60208082015182516001600160a01b03165f90815260989092526040822061083d9163ffffffff9081169061351716565b82610a6a8161352e565b610a875760405163932d94f760e01b815260040160405180910390fd5b6001600160a01b0384165f90815260a4602052604090205460ff16610abf576040516348f7dbb960e01b815260040160405180910390fd5b5f5b82811015610d34575f6040518060400160405280876001600160a01b03168152602001868685818110610af657610af6615592565b9050602002810190610b0891906155a6565b610b169060208101906155c4565b63ffffffff168152509050610b60816020015163ffffffff1660985f896001600160a01b03166001600160a01b031681526020019081526020015f206135d890919063ffffffff16565b610b7d57604051631fb1705560e21b815260040160405180910390fd5b7f31629285ead2335ae0933f86ed2ae63321f7af77b4e6eaabc42c057880977e6c6040518060400160405280886001600160a01b03168152602001836020015163ffffffff16815250604051610bd391906155dd565b60405180910390a15f610be5826132f7565b90505f5b868685818110610bfb57610bfb615592565b9050602002810190610c0d91906155a6565b610c1b9060208101906155eb565b9050811015610d2957610c91878786818110610c3957610c39615592565b9050602002810190610c4b91906155a6565b610c599060208101906155eb565b83818110610c6957610c69615592565b9050602002016020810190610c7e9190614b15565b5f848152609960205260409020906135e3565b507f7ab260fe0af193db5f4986770d831bda4ea46099dc817e8b6716dcae8af8e88b83888887818110610cc657610cc6615592565b9050602002810190610cd891906155a6565b610ce69060208101906155eb565b84818110610cf657610cf6615592565b9050602002016020810190610d0b9190614b15565b604051610d19929190615630565b60405180910390a1600101610be9565b505050600101610ac1565b5050505050565b6060610d49848484436135f7565b949350505050565b6060610d5f858585856135f7565b90505f5b8451811015610de757610d8f858281518110610d8157610d81615592565b6020026020010151876107c8565b610ddf575f5b8451811015610ddd575f838381518110610db157610db1615592565b60200260200101518281518110610dca57610dca615592565b6020908102919091010152600101610d95565b505b600101610d63565b50949350505050565b6001600160a01b038082165f908152609760205260408120549091168015610e1857806107c1565b5090919050565b606654600190600290811603610e485760405163840a48d560e01b815260040160405180910390fd5b82610e528161352e565b610e6f5760405163932d94f760e01b815260040160405180910390fd5b5f6040518060400160405280866001600160a01b03168152602001856020016020810190610e9d91906155c4565b63ffffffff1690529050610eb460608501856155eb565b9050610ec360408601866155eb565b905014610ee3576040516343714afd60e01b815260040160405180910390fd5b60208082015182516001600160a01b03165f90815260989092526040909120610f159163ffffffff9081169061351716565b610f3257604051631fb1705560e21b815260040160405180910390fd5b610f48610f426020860186614b15565b826107c8565b610f655760405163ebbff49760e01b815260040160405180910390fd5b5f610f7360408601866155eb565b90506001600160401b03811115610f8c57610f8c614974565b604051908082528060200260200182016040528015610fb5578160200160208202803683370190505b5090505f5b610fc760408701876155eb565b90508110156115bb5780158061105a5750610fe560408701876155eb565b610ff060018461566a565b818110610fff57610fff615592565b90506020020160208101906110149190614b15565b6001600160a01b031661102a60408801886155eb565b8381811061103a5761103a615592565b905060200201602081019061104f9190614b15565b6001600160a01b0316115b61107757604051639f1c805360e01b815260040160405180910390fd5b61108460608701876155eb565b8281811061109457611094615592565b905060200201355f1080156110d45750670de0b6b3a76400006110ba60608801886155eb565b838181106110ca576110ca615592565b9050602002013511155b6110f157604051631353603160e01b815260040160405180910390fd5b61114d61110160408801886155eb565b8381811061111157611111615592565b90506020020160208101906111269190614b15565b60995f611132876132f7565b81526020019081526020015f206138e490919063ffffffff16565b61116a576040516331bc342760e11b815260040160405180910390fd5b5f806111bc61117c60208a018a614b15565b611185876132f7565b61119260408c018c6155eb565b878181106111a2576111a2615592565b90506020020160208101906111b79190614b15565b61335a565b805191935091506001600160401b03165f036111d95750506115b3565b5f6112146111ea60608b018b6155eb565b868181106111fa576111fa615592565b85516001600160401b031692602090910201359050613905565b835190915061122f6001600160401b0380841690831661391b565b86868151811061124157611241615592565b60200260200101818152505081835f0181815161125e919061567d565b6001600160401b031690525083518290859061127b90839061567d565b6001600160401b031690525060208401805183919061129b90839061567d565b6001600160401b031690525060208301515f600f9190910b12156113b3575f6112fe6112ca60608d018d6155eb565b888181106112da576112da615592565b9050602002013585602001516112ef9061569c565b6001600160801b031690613905565b9050806001600160401b03168460200181815161131b91906156c0565b600f0b9052507f1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd61134f60208d018d614b15565b8961135d60408f018f6155eb565b8a81811061136d5761136d615592565b90506020020160208101906113829190614b15565b611393885f0151896020015161392f565b88604001516040516113a99594939291906156ed565b60405180910390a1505b6114056113c360208c018c614b15565b6113cc896132f7565b6113d960408e018e6155eb565b898181106113e9576113e9615592565b90506020020160208101906113fe9190614b15565b878761394e565b7f1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd61143360208c018c614b15565b8861144160408e018e6155eb565b8981811061145157611451615592565b90506020020160208101906114669190614b15565b865160405161147a949392919043906156ed565b60405180910390a16114cb61149260208c018c614b15565b61149f60408d018d6155eb565b888181106114af576114af615592565b90506020020160208101906114c49190614b15565b8651613b86565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663601bb36f61150760208d018d614b15565b61151460408e018e6155eb565b8981811061152457611524615592565b90506020020160208101906115399190614b15565b875160405160e085901b6001600160e01b03191681526001600160a01b0393841660048201529290911660248301526001600160401b0380861660448401521660648201526084015f604051808303815f87803b158015611598575f5ffd5b505af11580156115aa573d5f5f3e3d5ffd5b50505050505050505b600101610fba565b507f80969ad29428d6797ee7aad084f9e4a42a82fc506dcd2ca3b6fb431f85ccebe56115ea6020870187614b15565b836115f860408901896155eb565b8561160660808c018c61573e565b60405161161997969594939291906157a8565b60405180910390a1505050505050565b6001600160a01b0382165f908152609d60205260408120606091829161164e90613503565b90505f816001600160401b0381111561166957611669614974565b6040519080825280602002602001820160405280156116ad57816020015b604080518082019091525f80825260208201528152602001906001900390816116875790505b5090505f826001600160401b038111156116c9576116c9614974565b60405190808252806020026020018201604052801561171257816020015b604080516060810182525f80825260208083018290529282015282525f199092019101816116e75790505b5090505f5b83811015611795576001600160a01b0388165f908152609d60205260408120611744906109cd908461350c565b90508084838151811061175957611759615592565b602002602001018190525061176f89828a61078d565b83838151811061178157611781615592565b602090810291909101015250600101611717565b509093509150505b9250929050565b60605f6107c160995f6117b6866132f7565b81526020019081526020015f20613c08565b60605f83516001600160401b038111156117e4576117e4614974565b60405190808252806020026020018201604052801561180d578160200160208202803683370190505b5090505f5b8451811015610a275761183e85828151811061183057611830615592565b60200260200101518561287e565b82828151811061185057611850615592565b6001600160401b0390921660209283029190910190910152600101611812565b6066545f906001908116036118985760405163840a48d560e01b815260040160405180910390fd5b8382146118b8576040516343714afd60e01b815260040160405180910390fd5b5f5b8481101561192157611919878787848181106118d8576118d8615592565b90506020020160208101906118ed9190614b15565b8686858181106118ff576118ff615592565b9050602002016020810190611914919061583e565b613c14565b6001016118ba565b50505050505050565b836119348161352e565b6119515760405163932d94f760e01b815260040160405180910390fd5b604080518082019091526001600160a01b038616815263ffffffff851660208201525f61197d826132f7565b90506119be826020015163ffffffff1660985f8a6001600160a01b03166001600160a01b031681526020019081526020015f2061351790919063ffffffff16565b6119db57604051631fb1705560e21b815260040160405180910390fd5b5f5b84811015611a7e576119fa868683818110610c6957610c69615592565b611a175760405163585cfb2f60e01b815260040160405180910390fd5b7f7ab260fe0af193db5f4986770d831bda4ea46099dc817e8b6716dcae8af8e88b83878784818110611a4b57611a4b615592565b9050602002016020810190611a609190614b15565b604051611a6e929190615630565b60405180910390a16001016119dd565b5050505050505050565b60605f82516001600160401b03811115611aa457611aa4614974565b604051908082528060200260200182016040528015611acd578160200160208202803683370190505b5090505f5b8351811015610a2757611afe85858381518110611af157611af1615592565b602002602001015161287e565b828281518110611b1057611b10615592565b6001600160401b0390921660209283029190910190910152600101611ad2565b6060611b5b7f0000000000000000000000000000000000000000000000000000000000000000613d18565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611c5b57611b998261352e565b611bb6576040516348f5c3ed60e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa158015611c1a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c3e9190615573565b611c5b5760405163ccea9e6f60e01b815260040160405180910390fd5b6109148282613d55565b60405163237dfb4760e11b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906346fbf68e90602401602060405180830381865afa158015611cc7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ceb9190615573565b611d0857604051631d77d47760e21b815260040160405180910390fd5b611d125f196134c6565b565b5f6107c183609a5f611132866132f7565b5f5f611d318484613f01565b95945050505050565b606654600290600490811603611d635760405163840a48d560e01b815260040160405180910390fd5b611d78611d736020840184614b15565b61352e565b80611d915750611d91611d736040840160208501614b15565b611dae576040516348f5c3ed60e01b815260040160405180910390fd5b5f5b611dbd60408401846155eb565b905081101561207f575f6040518060400160405280856020016020810190611de59190614b15565b6001600160a01b03168152602001611e0060408701876155eb565b85818110611e1057611e10615592565b9050602002016020810190611e2591906155c4565b63ffffffff168152509050611e72816020015163ffffffff1660985f876020016020810190611e549190614b15565b6001600160a01b0316815260208101919091526040015f2090613517565b611e8f57604051631fb1705560e21b815260040160405180910390fd5b609e5f611e9f6020870187614b15565b6001600160a01b03166001600160a01b031681526020019081526020015f205f611ec8836132f7565b815260208101919091526040015f205460ff16611ef8576040516325131d4f60e01b815260040160405180910390fd5b611f32611f04826132f7565b609c5f611f146020890189614b15565b6001600160a01b0316815260208101919091526040015f2090614070565b50611f6a611f436020860186614b15565b609a5f611f4f856132f7565b81526020019081526020015f2061407b90919063ffffffff16565b50611f786020850185614b15565b6001600160a01b03167fad34c3070be1dffbcaa499d000ba2b8d9848aefcac3059df245dd95c4ece14fe82604051611fb091906155dd565b60405180910390a2604080518082019091525f815260208101611ff37f00000000000000000000000000000000000000000000000000000000000000004361585f565b63ffffffff169052609e5f61200b6020880188614b15565b6001600160a01b03166001600160a01b031681526020019081526020015f205f612034846132f7565b81526020808201929092526040015f2082518154939092015163ffffffff166101000264ffffffff00199215159290921664ffffffffff199093169290921717905550600101611db0565b506120936103d96040840160208501614b15565b6001600160a01b031663303ca9566120ae6020850185614b15565b6120be6040860160208701614b15565b6120cb60408701876155eb565b6040518563ffffffff1660e01b81526004016120ea94939291906158b4565b5f604051808303815f87803b158015612101575f5ffd5b505af1158015612113573d5f5f3e3d5ffd5b505050505050565b606061083d609a5f6117b6856132f7565b61213461408f565b611d125f6140e9565b6001600160a01b0381165f908152609c602052604081206060919061216190613503565b90505f816001600160401b0381111561217c5761217c614974565b6040519080825280602002602001820160405280156121c057816020015b604080518082019091525f808252602082015281526020019060019003908161219a5790505b5090505f5b82811015610a27576001600160a01b0385165f908152609c602052604090206121f2906109cd908361350c565b82828151811061220457612204615592565b60209081029190910101526001016121c5565b60605f84516001600160401b0381111561223357612233614974565b60405190808252806020026020018201604052801561227c57816020015b604080516060810182525f80825260208083018290529282015282525f199092019101816122515790505b5090505f5b8551811015610de7576122ae86828151811061229f5761229f615592565b6020026020010151868661078d565b8282815181106122c0576122c0615592565b6020908102919091010152600101612281565b60605f83516001600160401b038111156122ef576122ef614974565b604051908082528060200260200182016040528015612318578160200160208202803683370190505b5090505f5b8451811015610de7576001600160a01b0386165f90815260a160205260408120865161238d9287929189908690811061235857612358615592565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2061413a90919063ffffffff16565b82828151811061239f5761239f615592565b6001600160401b039092166020928302919091019091015260010161231d565b6066545f906001908116036123e75760405163840a48d560e01b815260040160405180910390fd5b6123f08361352e565b61240d576040516348f5c3ed60e01b815260040160405180910390fd5b5f5f5f61241986612e38565b915091508161243b5760405163fa55fc8160e01b815260040160405180910390fd5b91505f90505b8351811015610d345783818151811061245c5761245c615592565b6020026020010151604001515184828151811061247b5761247b615592565b60200260200101516020015151146124a6576040516343714afd60e01b815260040160405180910390fd5b5f8482815181106124b9576124b9615592565b602090810291909101810151518082015181516001600160a01b03165f908152609890935260409092209092506124f99163ffffffff9081169061351716565b61251657604051631fb1705560e21b815260040160405180910390fd5b5f61252187836107c8565b90505f5b86848151811061253757612537615592565b60200260200101516020015151811015612873575f87858151811061255e5761255e615592565b602002602001015160200151828151811061257b5761257b615592565b60200260200101519050612592898261ffff613c14565b5f5f6125a18b6107b6886132f7565b91509150806040015163ffffffff165f146125cf57604051630d8fcbe360e41b815260040160405180910390fd5b5f6125dc8785848961414e565b9050612621825f01518c8a815181106125f7576125f7615592565b602002602001015160400151878151811061261457612614615592565b6020026020010151614184565b600f0b602083018190525f0361264a57604051634606179360e11b815260040160405180910390fd5b5f8260200151600f0b121561278e578015612710576126cb61266b886132f7565b6001600160a01b03808f165f90815260a360209081526040808320938a16835292905220908154600160801b90819004600f0b5f818152600180860160205260409091209390935583546001600160801b03908116939091011602179055565b6126f57f00000000000000000000000000000000000000000000000000000000000000004361585f565b61270090600161585f565b63ffffffff1660408301526127fb565b6127228360200151836020015161392f565b6001600160401b031660208401528a518b908990811061274457612744615592565b602002602001015160400151858151811061276157612761615592565b6020908102919091018101516001600160401b031683525f9083015263ffffffff431660408301526127fb565b5f8260200151600f0b13156127fb576127af8360200151836020015161392f565b6001600160401b0390811660208501819052845190911610156127e557604051636c9be0bf60e01b815260040160405180910390fd5b6127ef894361585f565b63ffffffff1660408301525b6128108c612808896132f7565b86868661394e565b7f1487af5418c47ee5ea45ef4a93398668120890774a9e13487e61e9dc3baf76dd8c8886612845865f0151876020015161392f565b866040015160405161285b9594939291906156ed565b60405180910390a15050600190920191506125259050565b505050600101612441565b6001600160a01b038083165f90815260a16020908152604080832093851683529290529081206107c19061419b565b826128b78161352e565b6128d45760405163932d94f760e01b815260040160405180910390fd5b6001600160a01b0384165f90815260a4602052604090205460ff16612916576001600160a01b0384165f90815260a460205260409020805460ff191660011790555b836001600160a01b03167fa89c1dc243d8908a96dd84944bcc97d6bc6ac00dd78e20621576be6a3c94371384846040516129519291906158e0565b60405180910390a250505050565b6066546002906004908116036129885760405163840a48d560e01b815260040160405180910390fd5b826129928161352e565b6129af5760405163932d94f760e01b815260040160405180910390fd5b6040516336b87bd760e11b81526001600160a01b0385811660048301527f00000000000000000000000000000000000000000000000000000000000000001690636d70f7ae90602401602060405180830381865afa158015612a13573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a379190615573565b612a545760405163ccea9e6f60e01b815260040160405180910390fd5b5f5b612a6360208501856155eb565b9050811015612c2b57604080518082019091525f9080612a866020880188614b15565b6001600160a01b03168152602001868060200190612aa491906155eb565b85818110612ab457612ab4615592565b9050602002016020810190612ac991906155c4565b63ffffffff90811690915260208083015183516001600160a01b03165f90815260989092526040909120929350612b0592919081169061351716565b612b2257604051631fb1705560e21b815260040160405180910390fd5b612b2c86826107c8565b15612b4a57604051636c6c6e2760e11b815260040160405180910390fd5b612b73612b56826132f7565b6001600160a01b0388165f908152609c60205260409020906135d8565b50612b9f86609a5f612b84856132f7565b81526020019081526020015f206135e390919063ffffffff16565b50856001600160a01b03167f43232edf9071753d2321e5fa7e018363ee248e5f2142e6c08edd3265bfb4895e82604051612bd991906155dd565b60405180910390a26001600160a01b0386165f908152609e60205260408120600191612c04846132f7565b815260208101919091526040015f20805460ff191691151591909117905550600101612a56565b50612c3c6103d96020850185614b15565b6001600160a01b031663c63fd50285612c586020870187614b15565b612c6560208801886155eb565b612c7260408a018a61573e565b6040518763ffffffff1660e01b8152600401612c93969594939291906158f3565b5f604051808303815f87803b158015612caa575f5ffd5b505af1158015611a7e573d5f5f3e3d5ffd5b5f61083d609a5f612ccc856132f7565b81526020019081526020015f20613503565b83612ce88161352e565b612d055760405163932d94f760e01b815260040160405180910390fd5b6040805180820182526001600160a01b03871680825263ffffffff80881660208085018290525f93845260989052939091209192612d44929161351716565b612d6157604051631fb1705560e21b815260040160405180910390fd5b5f612d6b826132f7565b90505f5b84811015611a7e57612db4868683818110612d8c57612d8c615592565b9050602002016020810190612da19190614b15565b5f8481526099602052604090209061407b565b612dd1576040516331bc342760e11b815260040160405180910390fd5b7f7b4b073d80dcac55a11177d8459ad9f664ceeb91f71f27167bb14f8152a7eeee83878784818110612e0557612e05615592565b9050602002016020810190612e1a9190614b15565b604051612e28929190615630565b60405180910390a1600101612d6f565b6001600160a01b0381165f908152609b602090815260408083208151608081018352905463ffffffff80821680845260ff600160201b8404161515958401869052650100000000008304821694840194909452600160481b909104166060820181905284939192919015801590612eb95750826060015163ffffffff164310155b15612ec8575050604081015160015b9590945092505050565b6001600160a01b0381165f90815260986020526040812061083d90613503565b6001600160a01b0382165f908152609f602052604081206060919061083990826117b6866132f7565b5f54610100900460ff1615808015612f3957505f54600160ff909116105b80612f525750303b158015612f5257505f5460ff166001145b612fba5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b5f805460ff191660011790558015612fdb575f805461ff0019166101001790555b612fe4826134c6565b612fed836140e9565b8015613033575f805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b505050565b816130428161352e565b61305f5760405163932d94f760e01b815260040160405180910390fd5b60405163b526578760e01b81526001600160a01b03848116600483015283169063b526578790602401602060405180830381865afa1580156130a3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906130c79190615573565b6130e457604051631d0b13c160e31b815260040160405180910390fd5b6001600160a01b038381165f90815260976020526040902080546001600160a01b0319169184169190911790557f2ae945c40c44dc0ec263f95609c3fdc6952e0aefa22d6374e44f2c997acedf858361313c81610df0565b604080516001600160a01b0393841681529290911660208301520161302a565b61316461408f565b6001600160a01b0381166131c95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401612fb1565b6131d2816140e9565b50565b5f5f610de78484613f01565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663eab66d7a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561323d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613261919061593f565b6001600160a01b0316336001600160a01b0316146132925760405163794821ff60e01b815260040160405180910390fd5b606654801982198116146132b95760405163c61dca5d60e01b815260040160405180910390fd5b606682905560405182815233907f3582d1828e26bf56bd801502bc021ac0bc8afb57c826e4986b45593c8fad389c9060200160405180910390a25050565b5f815f0151826020015163ffffffff1660405160200161334292919060609290921b6bffffffffffffffffffffffff1916825260a01b6001600160a01b031916601482015260200190565b60405160208183030381529060405261083d9061595a565b6040805180820182525f80825260208083018290528351606081018552828152808201839052808501839052845180860186526001600160a01b03898116855260a18452868520908816855290925293822092939281906133ba9061419b565b6001600160401b0390811682526001600160a01b038981165f81815260a260209081526040808320948c168084529482528083205486169682019690965291815260a082528481208b8252825284812092815291815290839020835160608101855290549283168152600160401b8304600f0b91810191909152600160c01b90910463ffffffff1691810182905291925043101561345c5790925090506134be565b61346d815f0151826020015161392f565b6001600160401b0316815260208101515f600f9190910b12156134ab5761349c8260200151826020015161392f565b6001600160401b031660208301525b5f60408201819052602082015290925090505b935093915050565b606681905560405181815233907fab40a374bc51de372200a8bc981af8c9ecdc08dfdaef0bb6e09f88f3c616ef3d9060200160405180910390a250565b5f61083d825490565b5f6107c183836141ae565b5f81815260018301602052604081205415156107c1565b604051631beb2b9760e31b81526001600160a01b0382811660048301523360248301523060448301525f80356001600160e01b0319166064840152917f00000000000000000000000000000000000000000000000000000000000000009091169063df595cb8906084016020604051808303815f875af11580156135b4573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061083d9190615573565b5f6107c183836141d4565b5f6107c1836001600160a01b0384166141d4565b606083516001600160401b0381111561361257613612614974565b60405190808252806020026020018201604052801561364557816020015b60608152602001906001900390816136305790505b5090505f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663f0e0e67686866040518363ffffffff1660e01b815260040161369792919061597d565b5f60405180830381865afa1580156136b1573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526136d891908101906159a1565b90505f5b85518110156138da575f8682815181106136f8576136f8615592565b6020026020010151905085516001600160401b0381111561371b5761371b614974565b604051908082528060200260200182016040528015613744578160200160208202803683370190505b5084838151811061375757613757615592565b60209081029190910101525f5b86518110156138d0575f87828151811061378057613780615592565b6020908102919091018101516001600160a01b038086165f90815260a18452604080822092841682529190935282209092506137bb9061419b565b9050806001600160401b03165f036137d45750506138c8565b5f6137e0858d8561078d565b90508863ffffffff16816040015163ffffffff161115801561380857505f8160200151600f0b125b1561382a5761381e815f0151826020015161392f565b6001600160401b031681525b80515f90613845906001600160401b0390811690851661391b565b905061388c8189898151811061385d5761385d615592565b6020026020010151878151811061387657613876615592565b602002602001015161422090919063ffffffff16565b89888151811061389e5761389e615592565b602002602001015186815181106138b7576138b7615592565b602002602001018181525050505050505b600101613764565b50506001016136dc565b5050949350505050565b6001600160a01b0381165f90815260018301602052604081205415156107c1565b5f6107c18383670de0b6b3a76400006001614234565b5f6107c183670de0b6b3a76400008461428d565b5f6107c1613946836001600160401b0386166156c0565b600f0b614372565b6020808301516001600160a01b038088165f90815260a284526040808220928816825291909352909120546001600160401b03908116911614613a1457602082810180516001600160a01b038881165f81815260a286526040808220938a1680835293875290819020805467ffffffffffffffff19166001600160401b0395861617905593518451918252948101919091529216908201527facf9095feb3a370c9cf692421c69ef320d4db5c66e6a7d29c7694eb02364fc559060600160405180910390a15b6001600160a01b038086165f90815260a060209081526040808320888452825280832093871683529281529082902083518154928501519385015163ffffffff16600160c01b0263ffffffff60c01b196001600160801b038616600160401b026001600160c01b03199095166001600160401b03909316929092179390931716919091179055600f0b15613af6576001600160a01b0385165f908152609f602090815260408083208784529091529020613ace90846135e3565b506001600160a01b0385165f908152609d60205260409020613af090856135d8565b50610d34565b80516001600160401b03165f03610d34576001600160a01b0385165f908152609f602090815260408083208784529091529020613b33908461407b565b506001600160a01b0385165f908152609f602090815260408083208784529091529020613b5f90613503565b5f03610d34576001600160a01b0385165f908152609d602052604090206121139085614070565b6001600160a01b038084165f90815260a160209081526040808320938616835292905220613bb59043836143dd565b604080516001600160a01b038086168252841660208201526001600160401b038316918101919091527f1c6458079a41077d003c11faf9bf097e693bd67979e4e6500bac7b29db779b5c9060600161302a565b60605f6107c1836143f1565b6001600160a01b038381165f90815260a360209081526040808320938616835292905290812054600f81810b600160801b909204900b035b5f81118015613c5e57508261ffff1682105b15610d34576001600160a01b038086165f90815260a3602090815260408083209388168352929052908120613c929061444a565b90505f5f613ca188848961335a565b91509150806040015163ffffffff16431015613cbf57505050610d34565b613ccc888489858561394e565b6001600160a01b038089165f90815260a360209081526040808320938b16835292905220613cf99061449c565b50613d0385615aad565b9450613d0e84615ac5565b9350505050613c4c565b60605f613d2483614519565b6040805160208082528183019092529192505f91906020820181803683375050509182525060208101929092525090565b6001600160a01b0382165f908152609b60209081526040918290208251608081018452905463ffffffff808216835260ff600160201b830416151593830193909352650100000000008104831693820193909352600160481b909204166060820181905215801590613dd15750806060015163ffffffff164310155b15613deb57604081015163ffffffff168152600160208201525b63ffffffff82166040820152613e217f00000000000000000000000000000000000000000000000000000000000000004361585f565b613e2c90600161585f565b63ffffffff90811660608381019182526001600160a01b0386165f818152609b602090815260409182902087518154838a0151858b01519851928a1664ffffffffff1990921691909117600160201b91151591909102176cffffffffffffffff0000000000191665010000000000978916979097026cffffffff000000000000000000191696909617600160481b968816968702179055815192835294871694820194909452928301919091527f4e85751d6331506c6c62335f207eb31f12a61e570f34f5c17640308785c6d4db910161302a565b6001600160a01b038281165f81815260a2602090815260408083209486168084529482528083205493835260a38252808320948352939052918220546001600160401b039091169190600f81810b600160801b909204900b03815b8181101561402c576001600160a01b038087165f90815260a3602090815260408083209389168352929052908120613f949083614540565b6001600160a01b038881165f90815260a0602090815260408083208584528252808320938b16835292815290829020825160608101845290546001600160401b0381168252600160401b8104600f0b92820192909252600160c01b90910463ffffffff1691810182905291925043101561400f57505061402c565b61401d86826020015161392f565b95505050806001019050613f5c565b506001600160a01b038086165f90815260a160209081526040808320938816835292905220839061405c9061419b565b614066919061567d565b9150509250929050565b5f6107c183836145af565b5f6107c1836001600160a01b0384166145af565b6033546001600160a01b03163314611d125760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401612fb1565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f6107c18383670de0b6b3a7640000614692565b5f61415f8460995f611132896132f7565b80156141685750815b8015611d3157505090516001600160401b031615159392505050565b5f6107c16001600160401b03808516908416615ada565b5f61083d82670de0b6b3a76400006146e7565b5f825f0182815481106141c3576141c3615592565b905f5260205f200154905092915050565b5f81815260018301602052604081205461421957508154600181810184555f84815260208082209093018490558454848252828601909352604090209190915561083d565b505f61083d565b5f6107c18383670de0b6b3a764000061428d565b5f5f61424186868661428d565b9050600183600281111561425757614257615b07565b14801561427357505f848061426e5761426e615b1b565b868809115b15611d3157614283600182615b2f565b9695505050505050565b5f80805f19858709858702925082811083820303915050805f036142c4578382816142ba576142ba615b1b565b04925050506107c1565b80841161430b5760405162461bcd60e51b81526020600482015260156024820152744d6174683a206d756c446976206f766572666c6f7760581b6044820152606401612fb1565b5f8486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091025f889003889004909101858311909403939093029303949094049190911702949350505050565b5f6001600160401b038211156143d95760405162461bcd60e51b815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203660448201526534206269747360d01b6064820152608401612fb1565b5090565b61303383836001600160401b03841661471e565b6060815f0180548060200260200160405190810160405280929190818152602001828054801561443e57602002820191905f5260205f20905b81548152602001906001019080831161442a575b50505050509050919050565b5f6144648254600f81810b600160801b909204900b131590565b1561448257604051631ed9509560e11b815260040160405180910390fd5b508054600f0b5f9081526001909101602052604090205490565b5f6144b68254600f81810b600160801b909204900b131590565b156144d457604051631ed9509560e11b815260040160405180910390fd5b508054600f0b5f818152600180840160205260408220805492905583546fffffffffffffffffffffffffffffffff191692016001600160801b03169190911790915590565b5f60ff8216601f81111561083d57604051632cd44ac360e21b815260040160405180910390fd5b5f5f61456261454e84614821565b855461455d9190600f0b615b42565b61488a565b8454909150600160801b9004600f90810b9082900b1261459557604051632d0483c560e21b815260040160405180910390fd5b600f0b5f9081526001939093016020525050604090205490565b5f8181526001830160205260408120548015614689575f6145d160018361566a565b85549091505f906145e49060019061566a565b9050818114614643575f865f01828154811061460257614602615592565b905f5260205f200154905080875f01848154811061462257614622615592565b5f918252602080832090910192909255918252600188019052604090208390555b855486908061465457614654615b69565b600190038181905f5260205f20015f90559055856001015f8681526020019081526020015f205f90556001935050505061083d565b5f91505061083d565b82545f90816146a3868683856148f3565b905080156146dd576146c7866146ba60018461566a565b5f91825260209091200190565b54600160201b90046001600160e01b03166107bc565b5091949350505050565b81545f90801561471657614700846146ba60018461566a565b54600160201b90046001600160e01b0316610839565b509092915050565b825480156147d4575f614736856146ba60018561566a565b60408051808201909152905463ffffffff808216808452600160201b9092046001600160e01b0316602084015291925090851610156147885760405163151b8e3f60e11b815260040160405180910390fd5b805163ffffffff8086169116036147d257826147a9866146ba60018661566a565b80546001600160e01b0392909216600160201b0263ffffffff9092169190911790555050505050565b505b506040805180820190915263ffffffff92831681526001600160e01b03918216602080830191825285546001810187555f968752952091519051909216600160201b029190921617910155565b5f6001600160ff1b038211156143d95760405162461bcd60e51b815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e2061604482015267371034b73a191a9b60c11b6064820152608401612fb1565b80600f81900b81146148ee5760405162461bcd60e51b815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e20316044820152663238206269747360c81b6064820152608401612fb1565b919050565b5f5b81831015610a27575f6149088484614946565b5f8781526020902090915063ffffffff86169082015463ffffffff16111561493257809250614940565b61493d816001615b2f565b93505b506148f5565b5f6149546002848418615b7d565b6107c190848416615b2f565b6001600160a01b03811681146131d2575f5ffd5b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156149aa576149aa614974565b60405290565b604051601f8201601f191681016001600160401b03811182821017156149d8576149d8614974565b604052919050565b803563ffffffff811681146148ee575f5ffd5b5f60408284031215614a03575f5ffd5b604080519081016001600160401b0381118282101715614a2557614a25614974565b6040529050808235614a3681614960565b8152614a44602084016149e0565b60208201525092915050565b5f5f5f60808486031215614a62575f5ffd5b8335614a6d81614960565b9250614a7c85602086016149f3565b91506060840135614a8c81614960565b809150509250925092565b81516001600160401b03168152602080830151600f0b9082015260408083015163ffffffff16908201526060810161083d565b5f5f60608385031215614adb575f5ffd5b8235614ae681614960565b9150614af584602085016149f3565b90509250929050565b5f60208284031215614b0e575f5ffd5b5035919050565b5f60208284031215614b25575f5ffd5b81356107c181614960565b80516001600160a01b0316825260209081015163ffffffff16910152565b5f8151808452602084019350602083015f5b82811015614b8957614b73868351614b30565b6040959095019460209190910190600101614b60565b5093949350505050565b602081525f6107c16020830184614b4e565b5f60408284031215614bb5575f5ffd5b6107c183836149f3565b5f5f83601f840112614bcf575f5ffd5b5081356001600160401b03811115614be5575f5ffd5b6020830191508360208260051b850101111561179d575f5ffd5b5f5f5f60408486031215614c11575f5ffd5b8335614c1c81614960565b925060208401356001600160401b03811115614c36575f5ffd5b614c4286828701614bbf565b9497909650939450505050565b5f6001600160401b03821115614c6757614c67614974565b5060051b60200190565b5f82601f830112614c80575f5ffd5b8135614c93614c8e82614c4f565b6149b0565b8082825260208201915060208360051b860101925085831115614cb4575f5ffd5b602085015b83811015614cda578035614ccc81614960565b835260209283019201614cb9565b5095945050505050565b5f5f5f60808486031215614cf6575f5ffd5b614d0085856149f3565b925060408401356001600160401b03811115614d1a575f5ffd5b614d2686828701614c71565b92505060608401356001600160401b03811115614d41575f5ffd5b614d4d86828701614c71565b9150509250925092565b5f8151808452602084019350602083015f5b82811015614b89578151865260209586019590910190600101614d69565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b82811015614dde57603f19878603018452614dc9858351614d57565b94506020938401939190910190600101614dad565b50929695505050505050565b5f5f5f5f60a08587031215614dfd575f5ffd5b614e0786866149f3565b935060408501356001600160401b03811115614e21575f5ffd5b614e2d87828801614c71565b93505060608501356001600160401b03811115614e48575f5ffd5b614e5487828801614c71565b925050614e63608086016149e0565b905092959194509250565b5f5f60408385031215614e7f575f5ffd5b8235614e8a81614960565b915060208301356001600160401b03811115614ea4575f5ffd5b830160a08186031215614eb5575f5ffd5b809150509250929050565b5f5f60408385031215614ed1575f5ffd5b8235614edc81614960565b91506020830135614eb581614960565b5f8151808452602084019350602083015f5b82811015614b8957614f3786835180516001600160401b03168252602080820151600f0b9083015260409081015163ffffffff16910152565b6060959095019460209190910190600101614efe565b604081525f614f5f6040830185614b4e565b8281036020840152611d318185614eec565b5f8151808452602084019350602083015f5b82811015614b895781516001600160a01b0316865260209586019590910190600101614f83565b602081525f6107c16020830184614f71565b5f5f60408385031215614fcd575f5ffd5b82356001600160401b03811115614fe2575f5ffd5b614fee85828601614c71565b9250506020830135614eb581614960565b602080825282518282018190525f918401906040840190835b8181101561503f5783516001600160401b0316835260209384019390920191600101615018565b509095945050505050565b5f5f5f5f5f6060868803121561505e575f5ffd5b853561506981614960565b945060208601356001600160401b03811115615083575f5ffd5b61508f88828901614bbf565b90955093505060408601356001600160401b038111156150ad575f5ffd5b6150b988828901614bbf565b969995985093965092949392505050565b5f5f5f5f606085870312156150dd575f5ffd5b84356150e881614960565b93506150f6602086016149e0565b925060408501356001600160401b03811115615110575f5ffd5b61511c87828801614bbf565b95989497509550505050565b5f5f60408385031215615139575f5ffd5b823561514481614960565b915060208301356001600160401b0381111561515e575f5ffd5b61406685828601614c71565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f604083850312156151b0575f5ffd5b82356151bb81614960565b9150614af5602084016149e0565b5f602082840312156151d9575f5ffd5b813560ff811681146107c1575f5ffd5b5f606082840312156151f9575f5ffd5b50919050565b5f6020828403121561520f575f5ffd5b81356001600160401b03811115615224575f5ffd5b610839848285016151e9565b5f5f5f60808486031215615242575f5ffd5b83356001600160401b03811115615257575f5ffd5b61526386828701614c71565b935050614a7c85602086016149f3565b602081525f6107c16020830184614eec565b5f5f5f60608486031215615297575f5ffd5b83356152a281614960565b925060208401356001600160401b038111156152bc575f5ffd5b6152c886828701614c71565b9250506152d7604085016149e0565b90509250925092565b5f5f604083850312156152f1575f5ffd5b82356152fc81614960565b915060208301356001600160401b03811115615316575f5ffd5b8301601f81018513615326575f5ffd5b8035615334614c8e82614c4f565b8082825260208201915060208360051b850101925087831115615355575f5ffd5b602084015b8381101561547a5780356001600160401b03811115615377575f5ffd5b85016080818b03601f1901121561538c575f5ffd5b615394614988565b6153a18b602084016149f3565b815260608201356001600160401b038111156153bb575f5ffd5b6153ca8c602083860101614c71565b60208301525060808201356001600160401b038111156153e8575f5ffd5b6020818401019250508a601f8301126153ff575f5ffd5b813561540d614c8e82614c4f565b8082825260208201915060208360051b86010192508d83111561542e575f5ffd5b6020850194505b828510156154645784356001600160401b0381168114615453575f5ffd5b825260209485019490910190615435565b604084015250508452506020928301920161535a565b50809450505050509250929050565b5f5f5f6040848603121561549b575f5ffd5b83356154a681614960565b925060208401356001600160401b038111156154c0575f5ffd5b8401601f810186136154d0575f5ffd5b80356001600160401b038111156154e5575f5ffd5b8660208284010111156154f6575f5ffd5b939660209190910195509293505050565b5f5f60408385031215615518575f5ffd5b823561552381614960565b915060208301356001600160401b0381111561553d575f5ffd5b614066858286016151e9565b5f5f6040838503121561555a575f5ffd5b823561556581614960565b946020939093013593505050565b5f60208284031215615583575f5ffd5b815180151581146107c1575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f8235603e198336030181126155ba575f5ffd5b9190910192915050565b5f602082840312156155d4575f5ffd5b6107c1826149e0565b6040810161083d8284614b30565b5f5f8335601e19843603018112615600575f5ffd5b8301803591506001600160401b03821115615619575f5ffd5b6020019150600581901b360382131561179d575f5ffd5b6060810161563e8285614b30565b6001600160a01b039290921660409190910152919050565b634e487b7160e01b5f52601160045260245ffd5b8181038181111561083d5761083d615656565b6001600160401b03828116828216039081111561083d5761083d615656565b5f81600f0b60016001607f1b031981036156b8576156b8615656565b5f0392915050565b600f81810b9083900b0160016001607f1b03811360016001607f1b03198212171561083d5761083d615656565b6001600160a01b038616815260c0810161570a6020830187614b30565b6001600160a01b039490941660608201526001600160401b0392909216608083015263ffffffff1660a09091015292915050565b5f5f8335601e19843603018112615753575f5ffd5b8301803591506001600160401b0382111561576c575f5ffd5b60200191503681900382131561179d575f5ffd5b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b03881681525f60c082016157c6602084018a614b30565b60c060608401528690528660e083015f5b888110156158075782356157ea81614960565b6001600160a01b03168252602092830192909101906001016157d7565b50838103608085015261581a8188614d57565b91505082810360a0840152615830818587615780565b9a9950505050505050505050565b5f6020828403121561584e575f5ffd5b813561ffff811681146107c1575f5ffd5b63ffffffff818116838216019081111561083d5761083d615656565b8183526020830192505f815f5b84811015614b895763ffffffff61589e836149e0565b1686526020958601959190910190600101615888565b6001600160a01b038581168252841660208201526060604082018190525f90614283908301848661587b565b602081525f610d49602083018486615780565b6001600160a01b038781168252861660208201526080604082018190525f9061591f908301868861587b565b8281036060840152615932818587615780565b9998505050505050505050565b5f6020828403121561594f575f5ffd5b81516107c181614960565b805160208083015191908110156151f9575f1960209190910360031b1b16919050565b604081525f61598f6040830185614f71565b8281036020840152611d318185614f71565b5f602082840312156159b1575f5ffd5b81516001600160401b038111156159c6575f5ffd5b8201601f810184136159d6575f5ffd5b80516159e4614c8e82614c4f565b8082825260208201915060208360051b850101925086831115615a05575f5ffd5b602084015b83811015615aa25780516001600160401b03811115615a27575f5ffd5b8501603f81018913615a37575f5ffd5b6020810151615a48614c8e82614c4f565b808282526020820191506020808460051b8601010192508b831115615a6b575f5ffd5b6040840193505b82841015615a8d578351825260209384019390910190615a72565b86525050602093840193919091019050615a0a565b509695505050505050565b5f60018201615abe57615abe615656565b5060010190565b5f81615ad357615ad3615656565b505f190190565b600f82810b9082900b0360016001607f1b0319811260016001607f1b038213171561083d5761083d615656565b634e487b7160e01b5f52602160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b8082018082111561083d5761083d615656565b8082018281125f831280158216821582161715615b6157615b61615656565b505092915050565b634e487b7160e01b5f52603160045260245ffd5b5f82615b9757634e487b7160e01b5f52601260045260245ffd5b50049056fea26469706673582212203c3fd667caf85070715ce20d313fa488db936999ef7ff1875a48d39c4e97cebc64736f6c634300081b003300000000000000000000000039053d51b77dc0d36036fc1fcc8cb819df8ef37a000000000000000000000000b8765ed72235d279c3fb53936e4606db0ef1280600000000000000000000000025e5f8b1e7adf44518d35d5b2271f114e081f0e500000000000000000000000000000000000000000000000000000000000189c0000000000000000000000000000000000000000000000000000000000001ec3000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000005312e332e30000000000000000000000000000000000000000000000000000000