0 txs
3 calls
constructor
constructor()
functions
coverage
viewfunction coverage(address _operator) view returns (uint256 delegation)
eigenAddresses
viewfunction eigenAddresses() view returns (tuple)
epochDuration
viewfunction epochDuration() view returns (uint32)
getEigenOperator
viewfunction getEigenOperator(address _operator) view returns (address)
operatorSetId
viewfunction operatorSetId(address _operator) view returns (uint32)
operatorToStrategy
viewfunction operatorToStrategy(address _operator) view returns (address)
pendingRewards
viewfunction pendingRewards(address _operator, address _token) view returns (uint256)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
slashableCollateral
viewfunction slashableCollateral(address _operator, uint48) view returns (uint256)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
allocate
nonpayablefunction allocate(address _operator)
distributeRewards
nonpayablefunction distributeRewards(address _operator, address _token)
initialize
nonpayablefunction initialize(address _accessControl, tuple _eigenAddresses, address _oracle, uint32 _epochDuration)
registerOperator
nonpayablefunction registerOperator(address _eigenOperator, address _avs, uint32[] _operatorSetIds, bytes)
registerStrategy
nonpayablefunction registerStrategy(address _strategy, address _operator, address _restaker, string _operatorMetadata) returns (uint32 _operatorSetId)
setEpochDuration
nonpayablefunction setEpochDuration(uint32 _epochDuration)
slash
nonpayablefunction slash(address _operator, address _recipient, uint256 _slashShare, uint48)
updateAVSMetadataURI
nonpayablefunction updateAVSMetadataURI(string _metadataURI)
upgradeEigenOperatorImplementation
nonpayablefunction upgradeEigenOperatorImplementation(address _newImplementation)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
events
DistributedRewards
event DistributedRewards(address indexed strategy, address indexed token, uint256 amount)
EpochDurationSet
event EpochDurationSet(uint32 epochDuration)
Initialized
event Initialized(uint64 version)
MinRewardAmountSet
event MinRewardAmountSet(uint256 minRewardAmount)
OperatorRegistered
event OperatorRegistered(address indexed operator, address indexed eigenOperator, address indexed avs, uint32 operatorSetId)
Slash
event Slash(address indexed agent, address indexed recipient, uint256 slashShare, uint48 timestamp)
StrategyRegistered
event StrategyRegistered(address indexed strategy, address indexed operator)
Upgraded
event Upgraded(address indexed implementation)
errors
AccessDenied
error AccessDenied()
AddressEmptyCode
error AddressEmptyCode(address target)
AlreadyRegisteredOperator
error AlreadyRegisteredOperator()
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
FailedCall
error FailedCall()
InvalidAVS
error InvalidAVS()
InvalidDecimals
error InvalidDecimals()
InvalidInitialization
error InvalidInitialization()
InvalidOperator
error InvalidOperator()
InvalidOperatorSetIds
error InvalidOperatorSetIds()
InvalidRedistributionRecipient
error InvalidRedistributionRecipient()
MinMagnitudeNotMet
error MinMagnitudeNotMet()
MinShareNotMet
error MinShareNotMet()
NotInitializing
error NotInitializing()
OperatorSetAlreadyCreated
error OperatorSetAlreadyCreated()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SlashShareTooSmall
error SlashShareTooSmall()
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
ZeroAddress
error ZeroAddress()
ZeroSlash
error ZeroSlash()
creation bytecode
0x60a060405230608052348015610013575f5ffd5b5061001c610021565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100715760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b608051615b086100f95f395f818161232c01528181612355015261249d0152615b085ff3fe60806040526004361061011b575f3560e01c806380ac82281161009d578063b9327b0711610062578063b9327b071461034e578063bd57954214610385578063c63fd502146103a4578063e858a11d146103c3578063ffd7d983146103e2575f5ffd5b806380ac822814610295578063814813c1146102b4578063a98fb355146102d3578063ad3cb1cc146102f2578063b000685f1461032f575f5ffd5b80633d11c00d116100e35780633d11c00d146101e45780634f1ef286146102035780634ff0876a1461021657806352d1902d1461022a578063754061a31461023e575f5ffd5b806314c8d37d1461011f5780632896256b1461014057806332cfdfbf1461017957806333024430146101985780633b3979f3146101c5575b5f5ffd5b34801561012a575f5ffd5b5061013e610139366004612e2e565b610401565b005b34801561014b575f5ffd5b5061015f61015a366004612f2c565b610470565b60405163ffffffff90911681526020015b60405180910390f35b348015610184575f5ffd5b5061013e610193366004612fc4565b610936565b3480156101a3575f5ffd5b506101b76101b2366004613012565b610bc9565b604051908152602001610170565b3480156101d0575f5ffd5b5061015f6101df366004613012565b610d1b565b3480156101ef575f5ffd5b5061013e6101fe36600461302d565b610d57565b61013e610211366004613064565b611092565b348015610221575f5ffd5b5061015f6110b1565b348015610235575f5ffd5b506101b76110cb565b348015610249575f5ffd5b506102526110e6565b604051610170919081516001600160a01b039081168252602080840151821690830152604080840151821690830152606092830151169181019190915260800190565b3480156102a0575f5ffd5b506101b76102af36600461302d565b611156565b3480156102bf575f5ffd5b506101b76102ce3660046130c3565b611197565b3480156102de575f5ffd5b5061013e6102ed36600461313a565b6111f5565b3480156102fd575f5ffd5b50610322604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161017091906131a6565b34801561033a575f5ffd5b5061013e610349366004613012565b611244565b348015610359575f5ffd5b5061036d610368366004613012565b6112eb565b6040516001600160a01b039091168152602001610170565b348015610390575f5ffd5b5061013e61039f3660046131b8565b61131a565b3480156103af575f5ffd5b5061013e6103be366004613258565b6115ba565b3480156103ce575f5ffd5b5061036d6103dd366004613012565b6117f5565b3480156103ed575f5ffd5b5061013e6103fc366004613012565b611827565b6314c8d37d60e01b610412816118e2565b5f61041b6119a2565b60078101805463ffffffff191663ffffffff86169081179091556040519081529091507feb2082219a5218c2cea66e230e64f60a80f027c8776b46dccdd048a4fb70ea3a9060200160405180910390a1505050565b5f632896256b60e01b610482816118e2565b5f61048b6119a2565b6001600160a01b0387165f90815260098201602052604081209192506104b188876119c6565b82546001600160a01b0319166001600160a01b038281169190911784556007850154600185015464010000000090910463ffffffff169750919250161561050b576040516310169e8560e21b815260040160405180910390fd5b6001820154600160c01b900463ffffffff161561053b5760405163399f20c360e21b815260040160405180910390fd5b6006896001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610579573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061059d919061331b565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d8573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105fc9190613336565b60ff16101561061e57604051630692acc560e51b815260040160405180910390fd5b82546040805160018082528183019092526001600160a01b03909216915f91816020015b604080518082019091525f8152606060208201528152602001906001900390816106425750506040805160018082528183019092529192505f9190602080830190803683370190505090508b815f815181106106a0576106a0613356565b60200260200101906001600160a01b031690816001600160a01b03168152505060405180604001604052808963ffffffff16815260200182815250825f815181106106ed576106ed613356565b6020908102919091010152604051630caa1e7960e21b81526001600160a01b038416906332a879e49061072b903090869060068c01906004016133e9565b5f604051808303815f87803b158015610742575f5ffd5b505af1158015610754573d5f5f3e3d5ffd5b505050508b856001015f6101000a8154816001600160a01b0302191690836001600160a01b03160217905550878560010160186101000a81548163ffffffff021916908363ffffffff1602179055505f865f016003015f9054906101000a90046001600160a01b03166001600160a01b0316639d45c2816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107f8573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061081c9190613481565b905061082881426134ac565b60018701805463ffffffff60a01b1916600160a01b63ffffffff9384160217905560405163e129ff1360e01b8152908a1660048201526001600160a01b038c8116602483015286169063e129ff13906044015f604051808303815f87803b158015610891575f5ffd5b505af11580156108a3573d5f5f3e3d5ffd5b50505050600787018054640100000000900463ffffffff169060046108c7836134cb565b91906101000a81548163ffffffff021916908363ffffffff160217905550508b6001600160a01b03168d6001600160a01b03167f6bc9059a6c399333e5eae5f30fe0f84f34e4d9f81b5a38413a31337c366c8dda60405160405180910390a35050505050505050949350505050565b6332cfdfbf60e01b610947816118e2565b5f6109506119a2565b6001600160a01b038088165f9081526009830160205260409020600181015492935091166109915760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0386166109b85760405163d92e233d60e01b815260040160405180910390fd5b845f036109d85760405163dd31d0f960e01b815260040160405180910390fd5b600181015460408051632495a59960e01b815290516001600160a01b03909216915f918391632495a599916004808201926020929091908290030181865afa158015610a26573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a4a919061331b565b6040516370a0823160e01b81523060048201529091505f906001600160a01b038316906370a0823190602401602060405180830381865afa158015610a91573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ab59190613481565b9050610ac2838b8a611a71565b6040516370a0823160e01b81523060048201525f9082906001600160a01b038516906370a0823190602401602060405180830381865afa158015610b08573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b2c9190613481565b610b3691906134ef565b9050805f03610b585760405163dd31d0f960e01b815260040160405180910390fd5b610b6c6001600160a01b0384168b83611cd6565b6040805182815265ffffffffffff421660208201526001600160a01b03808d1692908e16917f27bce4a45b376a3636aba7d132e3f6965189f680c9dd3435054b15ab8da7a731910160405180910390a35050505050505050505050565b5f5f610bd36119a2565b6001600160a01b038085165f90815260098301602052604090206001810154929350911680610c0657505f949350505050565b6040805160018082528183019092525f916020808301908036833701905050905081815f81518110610c3a57610c3a613356565b6001600160a01b03928316602091820292909201015260018501548454604051639004134760e01b81525f9392831692639004134792610c81929116908690600401613502565b5f60405180830381865afa158015610c9b573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610cc291908101906135a7565b9050633b9aca00815f81518110610cdb57610cdb613356565b60200260200101511015610cf557505f9695505050505050565b60048501546001600160a01b0316610d0e888583611d35565b5098975050505050505050565b5f5f610d256119a2565b6001600160a01b039093165f90815260099093016020525050604090206001015463ffffffff600160c01b9091041690565b633d11c00d60e01b610d68816118e2565b5f610d716119a2565b6001600160a01b038086165f908152600983016020908152604080832060038601548251639d45c28160e01b81529251969750909593941692639d45c281926004808401939192918290030181865afa158015610dd0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610df49190613481565b6001600160a01b038681165f818152600386016020908152604080832054600189015460088b019093528184205491516370a0823160e01b815230600482015296975063ffffffff169591909416939192906370a0823190602401602060405180830381865afa158015610e6a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e8e9190613481565b610e9891906134ef565b90508263ffffffff165f03610ebc576001850154600160a01b900463ffffffff1692505b5f610ec785426134ac565b60078801549091505f90610ee19063ffffffff16866135d8565b90508063ffffffff168263ffffffff161015610f67578215610f5a576001600160a01b038a165f90815260088901602052604081208054859290610f269084906135f4565b90915550506001600160a01b038a165f90815260028801602052604081208054859290610f549084906135f4565b90915550505b5050505050505050505050565b6001600160a01b038a165f908152600288016020526040812054610f8b90856135f4565b9050805f03610fa257505050505050505050505050565b6003890154610fbb908c906001600160a01b0316611ea2565b610fd58c868d848a63ffffffff168863ffffffff16611f2b565b6001600160a01b038b165f90815260028901602090815260408083205460088d01909252822080549192909161100c9084906134ef565b90915550506001600160a01b038b81165f81815260028b016020908152604080832083905560038d01825291829020805463ffffffff191663ffffffff8916179055905184815291928f16917fb8da470998c312b635757eec53fc5481b3e89dd4847fcec080d663fc53b589e5910160405180910390a35050505050505050505b505050565b61109a612321565b6110a3826123c7565b6110ad82826123d1565b5050565b5f5f6110bb6119a2565b6007015463ffffffff1692915050565b5f6110d4612492565b505f516020615a905f395f51905f5290565b604080516080810182525f8082526020820181905291810182905260608101829052906111116119a2565b6040805160808101825282546001600160a01b039081168252600184015481166020830152600284015481169282019290925260039092015416606082015292915050565b5f5f6111606119a2565b6001600160a01b038086165f9081526009909201602090815260408084209287168452600290920190529020549150505b92915050565b5f5f6111a16119a2565b6001600160a01b038086165f9081526009830160205260409020600181015492935091166111d3575f92505050611191565b60018101546111ec9086906001600160a01b03166124db565b95945050505050565b63a98fb35560e01b611206816118e2565b61108d83838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201919091525061265b92505050565b63b000685f60e01b611255816118e2565b5f61125e6119a2565b90506001600160a01b0383166112875760405163d92e233d60e01b815260040160405180910390fd5b6005810154604051631b2ce7f360e11b81526001600160a01b038581166004830152909116908190633659cfe6906024015f604051808303815f87803b1580156112cf575f5ffd5b505af11580156112e1573d5f5f3e3d5ffd5b5050505050505050565b5f5f6112f56119a2565b6001600160a01b039384165f9081526009909101602052604090205490921692915050565b5f6113236126c7565b805490915060ff600160401b82041615906001600160401b03165f811580156113495750825b90505f826001600160401b031660011480156113645750303b155b905081158015611372575080155b156113905760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156113ba57845460ff60401b1916600160401b1785555b5f6113c36119a2565b90506113ce8a6126ef565b6113d6612703565b885181546001600160a01b03199081166001600160a01b0392831617835560208b0151600184018054831691841691909117905560408b0151600284018054831691841691909117905560608b0151600384018054831691841691909117905560048084018054909216928b1692909217905560078201805463ffffffff191663ffffffff8a81169190911780835564010000000090041691611478836134cb565b825463ffffffff9182166101009390930a9283029190920219909116179055506006810180546001810182555f918252602082200180546001600160a01b031916301790556040516114c990612de6565b604051809103905ff0801580156114e2573d5f5f3e3d5ffd5b50306040516114f090612df3565b6001600160a01b03928316815291166020820152604001604051809103905ff080158015611520573d5f5f3e3d5ffd5b506005830180546001600160a01b0319166001600160a01b038316179055604080516060810190915260238082529192505f91615ab0602083013990506115668161265b565b50505083156115af57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b63631fea8160e11b6115cb816118e2565b5f6115d46119a2565b90506001600160a01b03871630146115ff576040516366e565df60e01b815260040160405180910390fd5b60018514611620576040516352b5f9f360e11b815260040160405180910390fd5b8054604080518082019091526001600160a01b038981168252909116905f90602081018989848161165357611653613356565b90506020020160208101906116689190612e2e565b63ffffffff16905260405163079efa8760e11b81529091505f906001600160a01b03841690630f3df50e906116a1908590600401613607565b602060405180830381865afa1580156116bc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906116e0919061331b565b90506001600160a01b038116301461170b576040516364be1a3f60e11b815260040160405180910390fd5b896001600160a01b03168b6001600160a01b03168c6001600160a01b031663570ca7356040518163ffffffff1660e01b8152600401602060405180830381865afa15801561175b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061177f919061331b565b6001600160a01b03167f72ef63d3cdc2eeb9e8fd182e139fa7574e8723da0ccb9c51c19e0149ba8bfb628c8c5f8181106117bb576117bb613356565b90506020020160208101906117d09190612e2e565b60405163ffffffff909116815260200160405180910390a45050505050505050505050565b5f5f6117ff6119a2565b6001600160a01b039384165f9081526009909101602052604090206001015490921692915050565b5f6118306119a2565b6001600160a01b038084165f90815260098301602052604090208054929350911661186e5760405163d92e233d60e01b815260040160405180910390fd5b8054600182015460405163890b3ed160e01b8152600160c01b820463ffffffff1660048201526001600160a01b03918216602482015291169063890b3ed1906044015f604051808303815f87803b1580156118c7575f5ffd5b505af11580156118d9573d5f5f3e3d5ffd5b50505050505050565b5f7fb413d65cb88f23816c329284a0d3eb15a99df7963ab7402ade4c5da22bff6b0054604051633657648360e21b81526001600160e01b0319841660048201523060248201523360448201526001600160a01b039091169063d95d920c90606401602060405180830381865afa15801561195e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611982919061362d565b9050806110ad57604051634ca8886760e01b815260040160405180910390fd5b7f54b6f5557fb44acf280f59f684357ef1d216e247bba38a36a74ec93b2377e20090565b5f5f6119d06119a2565b90505f634571e3a660e01b3086866040516024016119f09392919061364c565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252600584015491519092506001600160a01b03909116908290611a4390612e00565b611a4e929190613677565b604051809103905ff080158015611a67573d5f5f3e3d5ffd5b5095945050505050565b5f611a7a6119a2565b6001600160a01b0384165f90815260098201602052604080822081516001808252818401909352939450929081602001602082028036833701905050905085815f81518110611acb57611acb613356565b6001600160a01b0390921660209283029190910190910152611aee6001856135f4565b9350670de0b6b3a76400008411611b055783611b0f565b670de0b6b3a76400005b6040805160018082528183019092529195505f91906020808301908036833701905050905084815f81518110611b4757611b47613356565b6020908102919091018101919091526040805160a08101825285546001600160a01b0390811682526001870154600160c01b900463ffffffff16828501528183018690526060820185905282518084018452600b81526a3634b8bab4b230ba34b7b760a91b94810194909452608082019390935286549151633635205760e01b815290925f921690633635205790611be5903090869060040161369a565b5f604051808303815f875af1158015611c00573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611c279190810190613753565b50604080518082018252308152600188015463ffffffff600160c01b90910481166020830190815260028b015493516316a26f7b60e11b815283516001600160a01b03908116600483015291519092166024830152604482018590528d81166064830152939450909290911690632d44def6906084015f604051808303815f87803b158015611cb4575f5ffd5b505af1158015611cc6573d5f5f3e3d5ffd5b5050505050505050505050505050565b6040516001600160a01b0383811660248301526044820183905261108d91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061270b565b5f5f5f846001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d74573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d98919061331b565b90505f816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dd7573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611dfb9190613336565b6040516341976e0960e01b81526001600160a01b0384811660048301529192505f918716906341976e09906024016040805180830381865afa158015611e43573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e67919061378d565b509050611e74888861277d565b9350611e8182600a613892565b611e8b82866138a0565b611e9591906134ac565b9450505050935093915050565b604051636eb1769f60e11b81526001600160a01b03828116600483015230602483015283169063dd62ed3e90604401602060405180830381865afa158015611eec573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f109190613481565b5f036110ad576110ad6001600160a01b038316825f1961297a565b5f611f346119a2565b6001600160a01b0388165f908152600982016020526040808220815160018082528184019093529394509290816020015b611fb06040518060c00160405280606081526020015f6001600160a01b03168152602001606081526020015f63ffffffff1681526020015f63ffffffff168152602001606081525090565b815260200190600190039081611f655750506040805160018082528183019092529192505f9190602082015b604080518082019091525f8082526020820152815260200190600190039081611fdc5750506040805160018082528183019092529192505f9190602082015b604080518082019091525f808252602082015281526020019060019003908161201b5750506040805180820190915285546001600160a01b03168152602081018a905281519192509082905f9061207457612074613356565b6020908102919091018101919091526040805180820182523081526001870154600160c01b900463ffffffff168184015281518083019092526001600160a01b038d168252670de0b6b3a764000092820192909252835184905f906120db576120db613356565b60200260200101819052505f865f016003015f9054906101000a90046001600160a01b03166001600160a01b0316639d45c2816040518163ffffffff1660e01b8152600401602060405180830381865afa15801561213b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061215f9190613481565b905061216c60018a6135f4565b98505f875f016003015f9054906101000a90046001600160a01b03166001600160a01b031663bf21a8aa6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156121c3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121e791906138b7565b63ffffffff1690505f6121fa838c6138a0565b90505f836122088d8d6134ef565b61221291906138a0565b90508265ffffffffffff1681111561222f575065ffffffffffff82165b6040518060c001604052808881526020018f6001600160a01b031681526020018781526020018363ffffffff1681526020018263ffffffff168152602001604051806040016040528060088152602001671a5b9d195c995cdd60c21b815250815250885f815181106122a3576122a3613356565b602090810291909101015260038a0154604051630ca2989960e01b81526001600160a01b0390911690630ca29899906122e29088908c90600401613917565b5f604051808303815f87803b1580156122f9575f5ffd5b505af115801561230b573d5f5f3e3d5ffd5b5050505050505050505050505050505050505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806123a757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661239b5f516020615a905f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156123c55760405163703e46dd60e11b815260040160405180910390fd5b565b5f6110ad816118e2565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801561242b575060408051601f3d908101601f1916820190925261242891810190613481565b60015b61245857604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b5f516020615a905f395f51905f52811461248857604051632a87526960e21b81526004810182905260240161244f565b61108d8383612a09565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146123c55760405163703e46dd60e11b815260040160405180910390fd5b5f5f6124e56119a2565b90505f836001600160a01b0316632495a5996040518163ffffffff1660e01b8152600401602060405180830381865afa158015612524573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612548919061331b565b90505f816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612587573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125ab9190613336565b6004848101546040516341976e0960e01b81526001600160a01b03868116938201939093529293505f929116906341976e09906024016040805180830381865afa1580156125fb573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061261f919061378d565b5090505f61262c88612a5e565b90505f61263a84600a613892565b61264484846138a0565b61264e91906134ac565b9998505050505050505050565b5f6126646119a2565b805460405163a982182160e01b81529192506001600160a01b03169063a9821821906126969030908690600401613677565b5f604051808303815f87803b1580156126ad575f5ffd5b505af11580156126bf573d5f5f3e3d5ffd5b505050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00611191565b6126f7612acc565b61270081612af1565b50565b6123c5612acc565b5f5f60205f8451602086015f885af18061272a576040513d5f823e3d81fd5b50505f513d9150811561274157806001141561274e565b6001600160a01b0384163b155b1561277757604051635274afe760e01b81526001600160a01b038516600482015260240161244f565b50505050565b5f5f6127876119a2565b6001600160a01b0385165f908152600982016020908152604080832081518083018352308152600180830154600160c01b900463ffffffff16828601528351818152808501909452959650909490939282810190803683375050845482519293506001600160a01b0316918391505f9061280357612803613356565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f9181602001602082028036833701905050905086815f8151811061285257612852613356565b6001600160a01b03928316602091820292909201015285546040516315d5962560e11b81525f929190911690632bab2c4a90612898908790879087904390600401613a79565b5f60405180830381865afa1580156128b2573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526128d99190810190613ad5565b9050876001600160a01b0316637a8b2637825f815181106128fc576128fc613356565b60200260200101515f8151811061291557612915613356565b60200260200101516040518263ffffffff1660e01b815260040161293b91815260200190565b602060405180830381865afa158015612956573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061264e9190613481565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526129cb8482612b3d565b612777576040516001600160a01b0384811660248301525f60448301526129ff91869182169063095ea7b390606401611d03565b612777848261270b565b612a1282612b86565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612a565761108d8282612bcf565b6110ad612c38565b5f5f612a686119a2565b6001600160a01b038085165f908152600983016020526040812060018101549394509290911690612a99868361277d565b83549091505f90612ab3906001600160a01b031684612c57565b90505f612ac082846135f4565b98975050505050505050565b612ad4612d45565b6123c557604051631afcd79f60e31b815260040160405180910390fd5b612af9612acc565b807fb413d65cb88f23816c329284a0d3eb15a99df7963ab7402ade4c5da22bff6b005b80546001600160a01b0319166001600160a01b039290921691909117905550565b5f5f5f5f60205f8651602088015f8a5af192503d91505f519050828015612b7c57508115612b6e5780600114612b7c565b5f866001600160a01b03163b115b9695505050505050565b806001600160a01b03163b5f03612bbb57604051634c9c8ce360e01b81526001600160a01b038216600482015260240161244f565b805f516020615a905f395f51905f52612b1c565b60605f5f846001600160a01b031684604051612beb9190613b84565b5f60405180830381855af49150503d805f8114612c23576040519150601f19603f3d011682016040523d82523d5f602084013e612c28565b606091505b50915091506111ec858383612d5e565b34156123c55760405163b398979f60e01b815260040160405180910390fd5b5f5f612c616119a2565b6001810154604051630dc2e88960e31b81526001600160a01b03878116600483015286811660248301819052939450637a8b2637921690636e17444890604401602060405180830381865afa158015612cbc573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612ce09190613481565b6040518263ffffffff1660e01b8152600401612cfe91815260200190565b602060405180830381865afa158015612d19573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612d3d9190613481565b949350505050565b5f612d4e6126c7565b54600160401b900460ff16919050565b606082612d7357612d6e82612dbd565b612db6565b8151158015612d8a57506001600160a01b0384163b155b15612db357604051639996b31560e01b81526001600160a01b038516600482015260240161244f565b50805b9392505050565b805115612dcd5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b61155d80613b9b83390190565b610421806150f883390190565b6105778061551983390190565b63ffffffff81168114612700575f5ffd5b8035612e2981612e0d565b919050565b5f60208284031215612e3e575f5ffd5b8135612db681612e0d565b6001600160a01b0381168114612700575f5ffd5b8035612e2981612e49565b634e487b7160e01b5f52604160045260245ffd5b604051608081016001600160401b0381118282101715612e9e57612e9e612e68565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612ecc57612ecc612e68565b604052919050565b5f5f6001600160401b03841115612eed57612eed612e68565b50601f8301601f1916602001612f0281612ea4565b915050828152838383011115612f16575f5ffd5b828260208301375f602084830101529392505050565b5f5f5f5f60808587031215612f3f575f5ffd5b8435612f4a81612e49565b93506020850135612f5a81612e49565b92506040850135612f6a81612e49565b915060608501356001600160401b03811115612f84575f5ffd5b8501601f81018713612f94575f5ffd5b612fa387823560208401612ed4565b91505092959194509250565b803565ffffffffffff81168114612e29575f5ffd5b5f5f5f5f60808587031215612fd7575f5ffd5b8435612fe281612e49565b93506020850135612ff281612e49565b92506040850135915061300760608601612faf565b905092959194509250565b5f60208284031215613022575f5ffd5b8135612db681612e49565b5f5f6040838503121561303e575f5ffd5b823561304981612e49565b9150602083013561305981612e49565b809150509250929050565b5f5f60408385031215613075575f5ffd5b823561308081612e49565b915060208301356001600160401b0381111561309a575f5ffd5b8301601f810185136130aa575f5ffd5b6130b985823560208401612ed4565b9150509250929050565b5f5f604083850312156130d4575f5ffd5b82356130df81612e49565b91506130ed60208401612faf565b90509250929050565b5f5f83601f840112613106575f5ffd5b5081356001600160401b0381111561311c575f5ffd5b602083019150836020828501011115613133575f5ffd5b9250929050565b5f5f6020838503121561314b575f5ffd5b82356001600160401b03811115613160575f5ffd5b61316c858286016130f6565b90969095509350505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f612db66020830184613178565b5f5f5f5f84860360e08112156131cc575f5ffd5b85356131d781612e49565b94506080601f19820112156131ea575f5ffd5b506131f3612e7c565b602086013561320181612e49565b8152604086013561321181612e49565b6020820152606086013561322481612e49565b6040820152608086013561323781612e49565b6060820152925061324a60a08601612e5d565b915061300760c08601612e1e565b5f5f5f5f5f5f6080878903121561326d575f5ffd5b863561327881612e49565b9550602087013561328881612e49565b945060408701356001600160401b038111156132a2575f5ffd5b8701601f810189136132b2575f5ffd5b80356001600160401b038111156132c7575f5ffd5b8960208260051b84010111156132db575f5ffd5b6020919091019450925060608701356001600160401b038111156132fd575f5ffd5b61330989828a016130f6565b979a9699509497509295939492505050565b5f6020828403121561332b575f5ffd5b8151612db681612e49565b5f60208284031215613346575f5ffd5b815160ff81168114612db6575f5ffd5b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b828110156133a35781516001600160a01b031686526020958601959091019060010161337c565b5093949350505050565b5f8154808452602084019350825f5260205f205f5b828110156133a35781546001600160a01b03168652602090950194600191820191016133c2565b5f6060820160018060a01b03861683526060602084015280855180835260808501915060808160051b8601019250602087015f5b8281101561346b57607f19878603018452815163ffffffff81511686526020810151905060406020870152613455604087018261336a565b955050602093840193919091019060010161341d565b505050508281036040840152612b7c81856133ad565b5f60208284031215613491575f5ffd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b5f826134c657634e487b7160e01b5f52601260045260245ffd5b500490565b5f63ffffffff821663ffffffff81036134e6576134e6613498565b60010192915050565b8181038181111561119157611191613498565b6001600160a01b03831681526040602082018190525f90612d3d9083018461336a565b5f6001600160401b0382111561353d5761353d612e68565b5060051b60200190565b5f82601f830112613556575f5ffd5b815161356961356482613525565b612ea4565b8082825260208201915060208360051b86010192508583111561358a575f5ffd5b602085015b83811015611a6757805183526020928301920161358f565b5f602082840312156135b7575f5ffd5b81516001600160401b038111156135cc575f5ffd5b612d3d84828501613547565b63ffffffff818116838216019081111561119157611191613498565b8082018082111561119157611191613498565b81516001600160a01b0316815260208083015163ffffffff169082015260408101611191565b5f6020828403121561363d575f5ffd5b81518015158114612db6575f5ffd5b6001600160a01b038481168252831660208201526060604082018190525f906111ec90830184613178565b6001600160a01b03831681526040602082018190525f90612d3d90830184613178565b6001600160a01b038381168252604060208084018290528451909216818401529083015163ffffffff16606083015282015160a060808301525f906136e260e084018261336a565b6060850151848203603f190160a08601528051808352602091820193505f9291909101905b8083101561372a5783518252602082019150602084019350600183019250613707565b506080860151858203603f190160c087015292506137488184613178565b979650505050505050565b5f5f60408385031215613764575f5ffd5b825160208401519092506001600160401b03811115613781575f5ffd5b6130b985828601613547565b5f5f6040838503121561379e575f5ffd5b505080516020909101519092909150565b6001815b60018411156137ea578085048111156137ce576137ce613498565b60018416156137dc57908102905b60019390931c9280026137b3565b935093915050565b5f8261380057506001611191565b8161380c57505f611191565b8160018114613822576002811461382c57613848565b6001915050611191565b60ff84111561383d5761383d613498565b50506001821b611191565b5060208310610133831016604e8410600b841016171561386b575081810a611191565b6138775f1984846137af565b805f190482111561388a5761388a613498565b029392505050565b5f612db660ff8416836137f2565b808202811582820484141761119157611191613498565b5f602082840312156138c7575f5ffd5b8151612db681612e0d565b5f8151808452602084019350602083015f5b828110156133a357815180516001600160a01b0316875260209081015181880152604090960195909101906001016138e4565b82516001600160a01b0316815260208084015163ffffffff16908201525f606082016060604084015280845180835260808501915060808160051b8601019250602086015f5b82811015613a6c57868503607f190184528151805160c080885281519088018190526020909101905f9060e08901905b808310156139d257835180516001600160a01b031683526020908101516bffffffffffffffffffffffff1681840152909301926001929092019160409091019061398d565b50602084015192506139ef60208a01846001600160a01b03169052565b6040840151925088810360408a0152613a0881846138d2565b925050506060820151613a23606089018263ffffffff169052565b506080820151613a3b608089018263ffffffff169052565b5060a0820151915086810360a0880152613a558183613178565b96505050602093840193919091019060010161395d565b5092979650505050505050565b84516001600160a01b0316815260208086015163ffffffff169082015260a060408201525f613aab60a083018661336a565b8281036060840152613abd818661336a565b91505063ffffffff8316608083015295945050505050565b5f60208284031215613ae5575f5ffd5b81516001600160401b03811115613afa575f5ffd5b8201601f81018413613b0a575f5ffd5b8051613b1861356482613525565b8082825260208201915060208360051b850101925086831115613b39575f5ffd5b602084015b83811015613b795780516001600160401b03811115613b5b575f5ffd5b613b6a89602083890101613547565b84525060209283019201613b3e565b509695505050505050565b5f82518060208501845e5f92019182525091905056fe6080604052348015600e575f5ffd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611487806100d65f395ff3fe608060405234801561000f575f5ffd5b50600436106100b1575f3560e01c80637de262301161006e5780637de262301461017a578063890b3ed11461019757806389ec63d5146101aa57806399be81c8146101b2578063bfc88179146101c5578063e129ff13146101d8575f5ffd5b80631626ba7e146100b557806318bf7323146100e6578063207613c2146101175780634571e3a61461012d578063570ca735146101425780636ae46cb914610172575b5f5ffd5b6100c86100c3366004610ca9565b6101eb565b6040516001600160e01b031990911681526020015b60405180910390f35b5f5160206114325f395f51905f52546001600160a01b03165b6040516001600160a01b0390911681526020016100dd565b61011f610252565b6040519081526020016100dd565b61014061013b366004610da0565b6102bc565b005b7f960b4b43d7da1001f900c7ba4e78a0a350e1c730ee58306f13b7c137edf1ee01546001600160a01b03166100ff565b61014061052f565b5f5160206114125f395f51905f52546001600160a01b03166100ff565b6101406101a5366004610e11565b6105ad565b61011f61083a565b6101406101c0366004610e48565b610877565b61011f6101d3366004610e86565b610938565b6101406101e6366004610e11565b6109e3565b5f8281527f960b4b43d7da1001f900c7ba4e78a0a350e1c730ee58306f13b7c137edf1ee0660205260408120545f5160206114125f395f51905f529060ff161561023f5750630b135d3f60e11b905061024c565b506001600160e01b031990505b92915050565b5f5160206114325f395f51905f52545f905f5160206114125f395f51905f5290829061028b90600160a01b900463ffffffff1642610eb6565b6005830154909150600160a01b900463ffffffff166102ab826001610ed5565b6102b59190610ee8565b9250505090565b5f6102c5610bf3565b805490915060ff600160401b82041615906001600160401b03165f811580156102eb5750825b90505f826001600160401b031660011480156103065750303b155b905081158015610314575080155b156103325760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561035c57845460ff60401b1916600160401b1785555b5f5160206114125f395f51905f5280546001600160a01b03199081166001600160a01b038c811691821784557f960b4b43d7da1001f900c7ba4e78a0a350e1c730ee58306f13b7c137edf1ee018054909316908c16179091555f5160206114325f395f51905f52805463ffffffff60a01b191661127560a81b1790556040805163754061a360e01b815290515f929163754061a39160048083019260809291908290030181865afa158015610413573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906104379190610eff565b80516002840180546001600160a01b03199081166001600160a01b03938416179091556020830151600386018054831691841691821790556060840151600480880180549094169190941617909155604051630554db1160e31b815292935091632aa6d888916104af9130915f918f918f9101610fab565b5f604051808303815f87803b1580156104c6575f5ffd5b505af11580156104d8573d5f5f3e3d5ffd5b505050505050831561052457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050565b5f5160206114325f395f51905f52545f5160206114125f395f51905f52906001600160a01b031633146105755760405163ed88957160e01b815260040160405180910390fd5b60058101545f9061058f906001600160a01b031630610938565b5f90815260069092016020525060409020805460ff19166001179055565b5f5160206114125f395f51905f5280546001600160a01b031633146105e557604051635b1582bb60e11b815260040160405180910390fd5b60028101546040516340120dab60e01b81523060048201526001600160a01b0384811660248301525f9216906340120dab906044015f60405180830381865afa158015610634573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261065b91908101906110cc565b91505080515f1461067f5760405163185e69a360e31b815260040160405180910390fd5b6040805160018082528183019092525f916020808301908036833701905050905083815f815181106106b3576106b36111c3565b6001600160a01b0392909216602092830291909101909101526040805160018082528183019092525f91816020016020820280368337019050509050670de0b6b3a7640000815f8151811061070a5761070a6111c3565b6001600160401b039290921660209283029190910182015260408051808201825233815263ffffffff8916818401528151600180825281840190935290925f929082015b6107826040805160a081019091525f6060820181815260808301919091528190815260200160608152602001606081525090565b81526020019060019003908161074e579050509050604051806060016040528083815260200185815260200184815250815f815181106107c4576107c46111c3565b60209081029190910101526002860154604051634a944cf760e11b81526001600160a01b039091169063952899ee90610803903090859060040161121a565b5f604051808303815f87803b15801561081a575f5ffd5b505af115801561082c573d5f5f3e3d5ffd5b505050505050505050505050565b5f5160206114325f395f51905f52545f905f5160206114125f395f51905f529061087190600160a01b900463ffffffff1642610eb6565b91505090565b7f960b4b43d7da1001f900c7ba4e78a0a350e1c730ee58306f13b7c137edf1ee01545f5160206114125f395f51905f52906001600160a01b031633146108d057604051631f0853c160e21b815260040160405180910390fd5b60038101546040516378296ec560e01b81526001600160a01b03909116906378296ec5906109069030908790879060040161130b565b5f604051808303815f87803b15801561091d575f5ffd5b505af115801561092f573d5f5f3e3d5ffd5b50505050505050565b5f5f610942610252565b90505f5160206114125f395f51905f52600301546040516305cfa43d60e11b81526001600160a01b0386811660048301528581166024830152306044830152606482018490526084820184905290911690630b9f487a9060a401602060405180830381865afa1580156109b7573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109db9190611338565b949350505050565b5f5160206114125f395f51905f5280546001600160a01b03163314610a1b57604051635b1582bb60e11b815260040160405180910390fd5b60058101546001600160a01b031615610a4757604051630ea075bf60e21b815260040160405180910390fd5b6001600160a01b038216610a6e5760405163d92e233d60e01b815260040160405180910390fd5b5f610a798330610938565b5f818152600684016020526040808220805460ff191660019081179091556005860180546001600160a01b0389166001600160a01b03199091161790558151818152808301909252929350909181602001602082028036833701905050905084815f81518110610aeb57610aeb6111c3565b63ffffffff90921660209283029190910182015260408051606081018252338152808301849052815192830182525f8352808201929092526002850154905163adc2e3d960e01b81526001600160a01b03919091169063adc2e3d990610b57903090859060040161137d565b5f604051808303815f87803b158015610b6e575f5ffd5b505af1158015610b80573d5f5f3e3d5ffd5b5050505060048481015460405163dcbb03b360e01b815230928101929092523360248301525f60448301526001600160a01b03169063dcbb03b3906064015f604051808303815f87803b158015610bd5575f5ffd5b505af1158015610be7573d5f5f3e3d5ffd5b50505050505050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061024c565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b0381118282101715610c5157610c51610c1b565b60405290565b604080519081016001600160401b0381118282101715610c5157610c51610c1b565b604051601f8201601f191681016001600160401b0381118282101715610ca157610ca1610c1b565b604052919050565b5f5f60408385031215610cba575f5ffd5b8235915060208301356001600160401b03811115610cd6575f5ffd5b8301601f81018513610ce6575f5ffd5b80356001600160401b03811115610cff57610cff610c1b565b610d12601f8201601f1916602001610c79565b818152866020838501011115610d26575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b6001600160a01b0381168114610d59575f5ffd5b50565b5f5f83601f840112610d6c575f5ffd5b5081356001600160401b03811115610d82575f5ffd5b602083019150836020828501011115610d99575f5ffd5b9250929050565b5f5f5f5f60608587031215610db3575f5ffd5b8435610dbe81610d45565b93506020850135610dce81610d45565b925060408501356001600160401b03811115610de8575f5ffd5b610df487828801610d5c565b95989497509550505050565b63ffffffff81168114610d59575f5ffd5b5f5f60408385031215610e22575f5ffd5b8235610e2d81610e00565b91506020830135610e3d81610d45565b809150509250929050565b5f5f60208385031215610e59575f5ffd5b82356001600160401b03811115610e6e575f5ffd5b610e7a85828601610d5c565b90969095509350505050565b5f5f60408385031215610e97575f5ffd5b8235610e2d81610d45565b634e487b7160e01b5f52601160045260245ffd5b5f82610ed057634e487b7160e01b5f52601260045260245ffd5b500490565b8082018082111561024c5761024c610ea2565b808202811582820484141761024c5761024c610ea2565b5f6080828403128015610f10575f5ffd5b50604051608081016001600160401b0381118282101715610f3357610f33610c1b565b6040528251610f4181610d45565b81526020830151610f5181610d45565b60208201526040830151610f6481610d45565b60408201526060830151610f7781610d45565b60608201529392505050565b81835281816020850137505f828201602090810191909152601f909101601f19169091010190565b6001600160a01b038516815263ffffffff841660208201526060604082018190525f90610fdb9083018486610f83565b9695505050505050565b5f6001600160401b03821115610ffd57610ffd610c1b565b5060051b60200190565b5f82601f830112611016575f5ffd5b815161102961102482610fe5565b610c79565b8082825260208201915060206060840286010192508583111561104a575f5ffd5b602085015b838110156110c25760608188031215611066575f5ffd5b61106e610c2f565b81516001600160401b0381168114611084575f5ffd5b81526020820151600f81900b811461109a575f5ffd5b602082015260408201516110ad81610e00565b6040820152835260209092019160600161104f565b5095945050505050565b5f5f604083850312156110dd575f5ffd5b82516001600160401b038111156110f2575f5ffd5b8301601f81018513611102575f5ffd5b805161111061102482610fe5565b8082825260208201915060208360061b850101925087831115611131575f5ffd5b6020840193505b8284101561118e576040848903121561114f575f5ffd5b611157610c57565b845161116281610d45565b8152602085015161117281610e00565b8060208301525080835250602082019150604084019350611138565b8095505050505060208301516001600160401b038111156111ad575f5ffd5b6111b985828601611007565b9150509250929050565b634e487b7160e01b5f52603260045260245ffd5b5f8151808452602084019350602083015f5b828110156112105781516001600160401b03168652602095860195909101906001016111e9565b5093949350505050565b5f6040820160018060a01b03851683526040602084015280845180835260608501915060608160051b8601019250602086015f5b828110156112fe57868503605f190184528151805180516001600160a01b0316875260209081015163ffffffff16818801528082015160806040890181905281519089018190529101905f9060a08901905b808310156112cb5783516001600160a01b0316825260209384019360019390930192909101906112a0565b506040840151935088810360608a01526112e581856111d7565b985050506020958601959390930192505060010161124e565b5092979650505050505050565b6001600160a01b03841681526040602082018190525f9061132f9083018486610f83565b95945050505050565b5f60208284031215611348575f5ffd5b5051919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b6001600160a01b0383811682526040602080840182905284519092169083015282810151606080840152805160a084018190525f929190910190829060c08501905b808310156113e85763ffffffff84511682526020820191506020840193506001830192506113bf565b506040860151858203603f190160808701529250611406818461134f565b97965050505050505056fe960b4b43d7da1001f900c7ba4e78a0a350e1c730ee58306f13b7c137edf1ee00960b4b43d7da1001f900c7ba4e78a0a350e1c730ee58306f13b7c137edf1ee05a26469706673582212207030eb46f632b13d2335349b65965bb4df4f76865eb215f2432c805251dd5ecd64736f6c634300081c0033608060405234801561000f575f5ffd5b5060405161042138038061042183398101604081905261002e9161015f565b806001600160a01b03811661005d57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b61006681610077565b50610070826100c6565b5050610190565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b806001600160a01b03163b5f036100fb5760405163211eb15960e21b81526001600160a01b0382166004820152602401610054565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b80516001600160a01b038116811461015a575f5ffd5b919050565b5f5f60408385031215610170575f5ffd5b61017983610144565b915061018760208401610144565b90509250929050565b6102848061019d5f395ff3fe608060405234801561000f575f5ffd5b5060043610610055575f3560e01c80633659cfe6146100595780635c60da1b1461006e578063715018a6146100975780638da5cb5b1461009f578063f2fde38b146100af575b5f5ffd5b61006c610067366004610221565b6100c2565b005b6001546001600160a01b03165b6040516001600160a01b03909116815260200160405180910390f35b61006c6100d6565b5f546001600160a01b031661007b565b61006c6100bd366004610221565b6100e9565b6100ca610128565b6100d381610154565b50565b6100de610128565b6100e75f6101d2565b565b6100f1610128565b6001600160a01b03811661011f57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6100d3816101d2565b5f546001600160a01b031633146100e75760405163118cdaa760e01b8152336004820152602401610116565b806001600160a01b03163b5f036101895760405163211eb15960e21b81526001600160a01b0382166004820152602401610116565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a250565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f60208284031215610231575f5ffd5b81356001600160a01b0381168114610247575f5ffd5b939250505056fea264697066735822122078c77a6b127cd728286db270c29664d7f8ce0baa26f01289a3ae09ce2b75770e64736f6c634300081c003360a060405260405161057738038061057783398101604081905261002291610354565b61002c828261003e565b506001600160a01b0316608052610445565b610047826100fb565b6040516001600160a01b038316907f1cf3b03a6cf19fa2baba4df148e9dcabedea7f8a5c07840e207e5c089be95d3e905f90a28051156100ef576100ea826001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156100c0573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100e49190610416565b82610209565b505050565b6100f761027c565b5050565b806001600160a01b03163b5f0361013557604051631933b43b60e21b81526001600160a01b03821660048201526024015b60405180910390fd5b807fa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d5080546001600160a01b0319166001600160a01b0392831617905560408051635c60da1b60e01b815290515f92841691635c60da1b9160048083019260209291908290030181865afa1580156101ae573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906101d29190610416565b9050806001600160a01b03163b5f036100f757604051634c9c8ce360e01b81526001600160a01b038216600482015260240161012c565b60605f5f846001600160a01b031684604051610225919061042f565b5f60405180830381855af49150503d805f811461025d576040519150601f19603f3d011682016040523d82523d5f602084013e610262565b606091505b50909250905061027385838361029d565b95945050505050565b341561029b5760405163b398979f60e01b815260040160405180910390fd5b565b6060826102b2576102ad826102fc565b6102f5565b81511580156102c957506001600160a01b0384163b155b156102f257604051639996b31560e01b81526001600160a01b038516600482015260240161012c565b50805b9392505050565b80511561030c5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b80516001600160a01b038116811461033b575f5ffd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215610365575f5ffd5b61036e83610325565b60208401519092506001600160401b03811115610389575f5ffd5b8301601f81018513610399575f5ffd5b80516001600160401b038111156103b2576103b2610340565b604051601f8201601f19908116603f011681016001600160401b03811182821017156103e0576103e0610340565b6040528181528282016020018710156103f7575f5ffd5b8160208401602083015e5f602083830101528093505050509250929050565b5f60208284031215610426575f5ffd5b6102f582610325565b5f82518060208501845e5f920191825250919050565b60805161011b61045c5f395f601d015261011b5ff3fe6080604052600a600c565b005b60186014601a565b609d565b565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635c60da1b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156076573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906098919060ba565b905090565b365f5f375f5f365f845af43d5f5f3e80801560b6573d5ff35b3d5ffd5b5f6020828403121560c9575f5ffd5b81516001600160a01b038116811460de575f5ffd5b939250505056fea26469706673582212207288b9b838085ecf47fe0fcc8f8675ac932e7886271a517e6717d9054724764e64736f6c634300081c0033360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc68747470733a2f2f6361702e6170702f6d6574612f656967656e2d6176732e6a736f6ea26469706673582212205d360eb4319890429171587542f6f1c1cc3862d464db75a3f98fce0398b973bf64736f6c634300081c0033