22 txs
31 calls
constructor
constructor(uint256 _epoch1Start, uint256 _epochDuration, address _ozkTokenAddress, address _adminAddr, address _moderatorAddr, uint256 _checkInFee, address _ozkVault, address _bridgeHub, uint256 _l2ChainId)
functions
balanceOf
viewfunction balanceOf(address user) view returns (uint256)
bridgeHub
viewfunction bridgeHub() view returns (address)
checkInFee
viewfunction checkInFee() view returns (uint256)
computeNewMultiplier
purefunction computeNewMultiplier(uint256 prevBalance, uint128 prevMultiplier, uint256 amount, uint128 currentMultiplier) pure returns (uint128)
currentEpochMultiplier
viewfunction currentEpochMultiplier() view returns (uint128)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
epoch1Start
viewfunction epoch1Start() view returns (uint256)
epochDuration
viewfunction epochDuration() view returns (uint256)
epochIsInitialized
viewfunction epochIsInitialized(uint128 epochId) view returns (bool)
gasToken
viewfunction gasToken() view returns (address)
getCurrentEpoch
viewfunction getCurrentEpoch() view returns (uint128)
getCurrentEpochEndDate
viewfunction getCurrentEpochEndDate() view returns (uint256)
getEpochPoolSize
viewfunction getEpochPoolSize(uint128 epochId) view returns (uint256)
getEpochUserBalance
viewfunction getEpochUserBalance(address user, uint128 epochId) view returns (uint256)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getUserCheckInEpochs
viewfunction getUserCheckInEpochs(address user) view returns (uint128[])
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
hasUserCheckInEpoch
viewfunction hasUserCheckInEpoch(address user, uint128 epochId) view returns (bool)
l2ChainId
viewfunction l2ChainId() view returns (uint256)
l2TransactionBaseCost
viewfunction l2TransactionBaseCost(uint256 _l1GasPrice, uint256 _l2GasLimit, uint256 _l2GasPerPubdataByteLimit) view returns (uint256)
lockTime
viewfunction lockTime(address) view returns (uint256)
MAX_CHECKIN_FEE
viewfunction MAX_CHECKIN_FEE() view returns (uint256)
MAX_WITHDRAWAL_DELAY
viewfunction MAX_WITHDRAWAL_DELAY() view returns (uint256)
MIN_DEPOSIT_AMOUNT
viewfunction MIN_DEPOSIT_AMOUNT() view returns (uint256)
MODERATOR_ROLE
viewfunction MODERATOR_ROLE() view returns (bytes32)
nonce
viewfunction nonce() view returns (uint256)
ozkVault
viewfunction ozkVault() view returns (address)
pendingWithdrawals
viewfunction pendingWithdrawals() view returns (uint256)
stakingToken
viewfunction stakingToken() view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
userHasDeposits
viewfunction userHasDeposits(address user) view returns (bool)
withdrawDelay
viewfunction withdrawDelay() view returns (uint256)
withdrawRequests
viewfunction withdrawRequests(uint256) view returns (address account, uint256 amount, uint256 cliff, bool processed)
checkIn
nonpayablefunction checkIn(uint256 _l2GasLimit)
deposit
nonpayablefunction deposit(uint256 amount)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
processWithdraw
nonpayablefunction processWithdraw(uint256 _nonce)
queueWithdraw
nonpayablefunction queueWithdraw()
recoverERC20
nonpayablefunction recoverERC20(address tokenAddress)
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
setCheckInFee
nonpayablefunction setCheckInFee(uint256 newCheckInFee)
setWithdrawDelay
nonpayablefunction setWithdrawDelay(uint256 newDelay)
events
CanonicalTxHash
event CanonicalTxHash(bytes32 indexed canonicalTxHash)
CheckIn
event CheckIn(address indexed user, uint128 epochId)
CheckInFeeSet
event CheckInFeeSet(uint256 amount)
Deposit
event Deposit(address indexed user, uint128 indexed epochId, uint256 amount)
ERC20Recovered
event ERC20Recovered(address indexed token, uint256 amount, address indexed to)
QueueWithdraw
event QueueWithdraw(address indexed user, uint128 indexed epochId, uint256 nonce, uint256 amount)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Withdraw
event Withdraw(address indexed user, uint256 nonce, uint256 amount)
WithdrawDelaySet
event WithdrawDelaySet(uint256 amount)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
creation bytecode
0x6101406040526212750060025534801561001857600080fd5b5060405161314c38038061314c83398101604081905261003791610457565b60016000556001600160a01b0387166100975760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a204f5a4b20746f6b656e2063616e6e6f742062652030000060448201526064015b60405180910390fd5b6001600160a01b0386166100ed5760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e673a2061646d696e2063616e6e6f742062652030000000000000604482015260640161008e565b6001600160a01b0385166101435760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a206d6f64657261746f722063616e6e6f7420626520300000604482015260640161008e565b4289116101a55760405162461bcd60e51b815260206004820152602a60248201527f5374616b696e673a2065706f6368315374617274206d75737420626520696e206044820152697468652066757475726560b01b606482015260840161008e565b600088116102005760405162461bcd60e51b815260206004820152602260248201527f5374616b696e673a2065706f63684475726174696f6e206d757374206265203e604482015261020360f41b606482015260840161008e565b6001600160a01b0383166102565760405162461bcd60e51b815260206004820152601d60248201527f5374616b696e673a206f7a6b5661756c742063616e6e6f742062652030000000604482015260640161008e565b6001600160a01b0382166102ac5760405162461bcd60e51b815260206004820152601e60248201527f5374616b696e673a206272696467654875622063616e6e6f7420626520300000604482015260640161008e565b608089905260a08890526001600160a01b03871660c052600b8490556102d36000876103a6565b506102fe7fa1826ec1d816af6adacc11fc8f95cedb41f197d93e5df98dac1ed103566b203c866103a6565b50600c80546001600160a01b0319166001600160a01b0385811691909117909155821660e0819052610100829052604051632cf632d160e11b8152600481018390526359ec65a290602401602060405180830381865afa158015610366573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038a91906104eb565b6001600160a01b0316610120525061050d975050505050505050565b60008281526001602090815260408083206001600160a01b038516845290915281205460ff166104315760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610435565b5060005b92915050565b80516001600160a01b038116811461045257600080fd5b919050565b60008060008060008060008060006101208a8c03121561047657600080fd5b895160208b0151909950975061048e60408b0161043b565b965061049c60608b0161043b565b95506104aa60808b0161043b565b60a08b015190955093506104c060c08b0161043b565b92506104ce60e08b0161043b565b915060006101008b01519050809150509295985092959850929598565b6000602082840312156104fd57600080fd5b6105068261043b565b9392505050565b60805160a05160c05160e0516101005161012051612b566105f6600039600081816107bc01528181611b8f0152612262015260008181610825015281816115c6015261229601526000818161053701528181611604015281816120dc015261230e015260008181610477015281816111a5015281816114e20152818161174601528181611c4d0152818161217001526121e70152600081816103c0015281816110f701528181611793015281816118fe0152818161197001526119dc0152600081816108d101528181611121015281816118d00152818161192201526119a40152612b566000f3fe6080604052600436106102605760003560e01c806399baa7cc11610144578063b6b55f25116100b6578063d547741f1161007a578063d547741f146107f3578063d6ae3cd514610813578063d7456eb614610847578063de18886e1461087f578063e95a644f1461089f578063f4a4341d146108bf57600080fd5b8063b6b55f251461075f578063b97dd9e21461077f578063beca03d514610794578063c91d59fe146107aa578063ce58a2a8146107de57600080fd5b8063a48c785011610108578063a48c7850146102e5578063a4beda63146106bc578063a6394dcc146106e9578063a86d5ad214610709578063affed0e014610729578063b473318e1461073f57600080fd5b806399baa7cc146106455780639aff62aa1461065a5780639e8c708e14610670578063a217fddf14610690578063a238f9df146106a557600080fd5b806370a08231116101dd5780637b7a8702116101a15780637b7a8702146105055780638d66e8e41461052557806391d1485414610559578063920a4d4b14610579578063992a7dfb1461058e5780639941dc621461060957600080fd5b806370a082311461040f57806372f0cb301461044557806372f702f314610465578063797669c9146104b15780637b2301f2146104e557600080fd5b80632f2ff15d116102245780632f2ff15d1461033457806336568abe146103565780634be41dba146103765780634ff0876a146103ae578063685bde20146103e257600080fd5b806301ffc9a71461026c5780630288a39c146102a15780630522406a146102c55780631ea30fef146102e5578063248a9ca31461030357600080fd5b3661026757005b600080fd5b34801561027857600080fd5b5061028c610287366004612758565b6108f3565b60405190151581526020015b60405180910390f35b3480156102ad57600080fd5b506102b760025481565b604051908152602001610298565b3480156102d157600080fd5b506102b76102e03660046127b3565b61092a565b3480156102f157600080fd5b506102b769021e19e0c9bab240000081565b34801561030f57600080fd5b506102b761031e3660046127e8565b6000908152600160208190526040909120015490565b34801561034057600080fd5b5061035461034f366004612801565b6109bc565b005b34801561036257600080fd5b50610354610371366004612801565b6109e8565b34801561038257600080fd5b50610396610391366004612831565b610a20565b6040516001600160801b039091168152602001610298565b3480156103ba57600080fd5b506102b77f000000000000000000000000000000000000000000000000000000000000000081565b3480156103ee57600080fd5b506104026103fd366004612877565b610ab4565b6040516102989190612894565b34801561041b57600080fd5b506102b761042a366004612877565b6001600160a01b031660009081526006602052604090205490565b34801561045157600080fd5b506103546104603660046127e8565b610b89565b34801561047157600080fd5b506104997f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610298565b3480156104bd57600080fd5b506102b77fa1826ec1d816af6adacc11fc8f95cedb41f197d93e5df98dac1ed103566b203c81565b3480156104f157600080fd5b506103546105003660046127e8565b610ca5565b34801561051157600080fd5b5061028c6105203660046127b3565b610dba565b34801561053157600080fd5b506104997f000000000000000000000000000000000000000000000000000000000000000081565b34801561056557600080fd5b5061028c610574366004612801565b610dec565b34801561058557600080fd5b50610354610e17565b34801561059a57600080fd5b506105dd6105a93660046127e8565b60046020526000908152604090208054600182015460028301546003909301546001600160a01b0390921692909160ff1684565b604080516001600160a01b03909516855260208501939093529183015215156060820152608001610298565b34801561061557600080fd5b5061028c6106243660046128e0565b6001600160801b031660009081526007602052604090206001015460ff1690565b34801561065157600080fd5b506102b76110de565b34801561066657600080fd5b506102b7600b5481565b34801561067c57600080fd5b5061035461068b366004612877565b61114a565b34801561069c57600080fd5b506102b7600081565b3480156106b157600080fd5b506102b76224ea0081565b3480156106c857600080fd5b506102b76106d7366004612877565b60096020526000908152604090205481565b3480156106f557600080fd5b506103546107043660046127e8565b611340565b34801561071557600080fd5b506102b76107243660046128e0565b61156d565b34801561073557600080fd5b506102b760035481565b34801561074b57600080fd5b506102b761075a3660046128fb565b6115b7565b34801561076b57600080fd5b5061035461077a3660046127e8565b611677565b34801561078b57600080fd5b506103966118cc565b3480156107a057600080fd5b506102b760055481565b3480156107b657600080fd5b506104997f000000000000000000000000000000000000000000000000000000000000000081565b3480156107ea57600080fd5b5061039661195c565b3480156107ff57600080fd5b5061035461080e366004612801565b611a20565b34801561081f57600080fd5b506102b77f000000000000000000000000000000000000000000000000000000000000000081565b34801561085357600080fd5b5061028c610862366004612877565b6001600160a01b0316600090815260066020526040902054151590565b34801561088b57600080fd5b50600c54610499906001600160a01b031681565b3480156108ab57600080fd5b506103546108ba3660046127e8565b611a46565b3480156108cb57600080fd5b506102b77f000000000000000000000000000000000000000000000000000000000000000081565b60006001600160e01b03198216637965db0b60e01b148061092457506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001600160a01b03821660009081526008602090815260408083206001600160801b038516845290915281206109608484610dba565b61096e576000915050610924565b6040805160808101825282546001600160801b038082168352600160801b909104166020820152600183015491810191909152600282015460608201526109b490611d07565b949350505050565b600082815260016020819052604090912001546109d881611d46565b6109e28383611d50565b50505050565b6001600160a01b0381163314610a115760405163334bd91960e11b815260040160405180910390fd5b610a1b8282611dc9565b505050565b600080670de0b6b3a7640000610a3f6001600160801b0387168861293d565b610a499190612954565b90506000670de0b6b3a7640000610a696001600160801b0386168761293d565b610a739190612954565b90506000610a818689612976565b670de0b6b3a7640000610a948486612976565b610a9e919061293d565b610aa89190612954565b98975050505050505050565b6001600160a01b0381166000908152600a6020526040812060609190610ad990611e36565b905060008167ffffffffffffffff811115610af657610af6612989565b604051908082528060200260200182016040528015610b1f578160200160208202803683370190505b50905060005b82811015610b81576001600160a01b0385166000908152600a60205260409020610b4f9082611e40565b828281518110610b6157610b6161299f565b6001600160801b0390921660209283029190910190910152600101610b25565b509392505050565b7fa1826ec1d816af6adacc11fc8f95cedb41f197d93e5df98dac1ed103566b203c610bb381611d46565b6002548203610c155760405162461bcd60e51b8152602060048201526024808201527f5374616b696e673a206e65772064656c6179206d7573742062652064696666656044820152631c995b9d60e21b60648201526084015b60405180910390fd5b6224ea00821115610c685760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e673a2064656c61792065786365656473206d61780000000000006044820152606401610c0c565b60028290556040518281527f38e7e00323d42a0b5f016077f728a4df2926cf6e0d48bf422c20cbbe1e31a8ec906020015b60405180910390a15050565b7fa1826ec1d816af6adacc11fc8f95cedb41f197d93e5df98dac1ed103566b203c610ccf81611d46565b600b548203610d2b5760405162461bcd60e51b815260206004820152602260248201527f5374616b696e673a206e657720666565206d75737420626520646966666572656044820152611b9d60f21b6064820152608401610c0c565b69021e19e0c9bab2400000821115610d855760405162461bcd60e51b815260206004820152601860248201527f5374616b696e673a206665652065786365656473206d617800000000000000006044820152606401610c0c565b600b8290556040518281527f3c6288041d5a3cc5436777877662bf22f4a53c7ea5899c92d6817accc48c7dea90602001610c99565b6001600160a01b0382166000908152600a60205260408120610de5906001600160801b038416611e4c565b9392505050565b60009182526001602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610e1f611e64565b33600090815260066020526040902054610e725760405162461bcd60e51b81526020600482015260146024820152735374616b696e673a206e6f206465706f7369747360601b6044820152606401610c0c565b336000908152600960205260409020544211610ed05760405162461bcd60e51b815260206004820152601860248201527f5374616b696e673a206c6f636b6564206465706f7369747300000000000000006044820152606401610c0c565b336000908152600660209081526040808320805490849055600990925282208290556003805491929160049183918290610f09906129b5565b91829055508152602081019190915260400160002080546001600160a01b0319163317815560018101839055600254909150610f459042612976565b81600201819055508160056000828254610f5f9190612976565b9091555060009050610f6f6118cc565b3360008181526008602090815260408083206001600160801b0386168452909152812092935090610fa09084610dba565b610fab576000610ff1565b6040805160808101825283546001600160801b038082168352600160801b90910416602082015260018401549181019190915260028301546060820152610ff190611d07565b336000908152600a60205260409020909150611016816001600160801b038616611e8e565b5082546001600160801b03808616911603611069576001600160801b03841660009081526007602052604090205461104f9083906129ce565b6001600160801b0385166000908152600760205260409020555b6503782dace9d960921b8355600060018401819055600284015560035460408051918252602082018890526001600160801b0386169133917f0c9069d4076219c03fcebd6d0483161bc8c9c3d4c6b0d22ea1e341448be1ff19910160405180910390a35050505050506110dc6001600055565b565b60006110e86118cc565b61111b906001600160801b03167f000000000000000000000000000000000000000000000000000000000000000061293d565b611145907f0000000000000000000000000000000000000000000000000000000000000000612976565b905090565b600061115581611d46565b6001600160a01b0382166111a35760405162461bcd60e51b81526020600482015260156024820152745374616b696e673a207a65726f206164647265737360581b6044820152606401610c0c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036112325760405162461bcd60e51b815260206004820152602560248201527f5374616b696e673a2063616e6e6f74207265636f766572207374616b696e67206044820152643a37b5b2b760d91b6064820152608401610c0c565b6040516370a0823160e01b815230600482015282906000906001600160a01b038316906370a0823190602401602060405180830381865afa15801561127b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061129f91906129e1565b9050600081116112e65760405162461bcd60e51b815260206004820152601260248201527105374616b696e673a2062616c616e636520360741b6044820152606401610c0c565b6112fa6001600160a01b0383163383611e9a565b60405181815233906001600160a01b038616907f8619312ed4eff1cf9f0116e6db2f49d9570a86f0350d1c5ad1bd0f7b0cf9e1329060200160405180910390a350505050565b611348611e64565b600081815260046020526040902080546001600160a01b03166113ad5760405162461bcd60e51b815260206004820152601860248201527f5374616b696e673a206d697373696e67207265717565737400000000000000006044820152606401610c0c565b600381015460ff16156114025760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e673a20616c72656164792070726f6365737365640000000000006044820152606401610c0c565b80546001600160a01b0316331461145b5760405162461bcd60e51b815260206004820152601860248201527f5374616b696e673a20496e76616c6964207265717565737400000000000000006044820152606401610c0c565b80600201544210156114af5760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e673a20436c696666206e6f7420726561636865640000000000006044820152606401610c0c565b60038101805460ff19166001908117909155810154600580546000906114d69084906129ce565b909155505060018101547f000000000000000000000000000000000000000000000000000000000000000090611518906001600160a01b038316903390611e9a565b600182015460405133917ff279e6a1f5e320cca91135676d9cb6e44ca8a08c0b88342bcdb1144f6511b5689161155691878252602082015260400190565b60405180910390a2505061156a6001600055565b50565b6001600160801b03811660009081526007602052604081206001015460ff16156115af576001600160801b038216600090815260076020526040902054610924565b600092915050565b604051631c588c9d60e21b81527f000000000000000000000000000000000000000000000000000000000000000060048201526024810184905260448101839052606481018290526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690637162327490608401602060405180830381865afa158015611653573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109b491906129e1565b61167f611e64565b600081116116cf5760405162461bcd60e51b815260206004820152601b60248201527f5374616b696e673a20616d6f756e74206d757374206265203e203000000000006044820152606401610c0c565b3360009081526006602052604090205469021e19e0c9bab2400000906116f6908390612976565b10156117445760405162461bcd60e51b815260206004820152601960248201527f5374616b696e673a20616d6f756e7420746f6f20736d616c6c000000000000006044820152606401610c0c565b7f000000000000000000000000000000000000000000000000000000000000000061177a6001600160a01b038216333085611ef9565b336000908152600660205260409020546117c9576117b87f000000000000000000000000000000000000000000000000000000000000000042612976565b336000908152600960205260409020555b3360009081526006602052604081208054918491906117e88385612976565b90915550600090506117f86118cc565b9050806001600160801b0316600003611853576040518481526001600160801b0382169033907ff4d446eb2bcb888f40b23f1c0d6060473b059e0a159b3d9753b58ff402585f129060200160405180910390a35050506118c2565b60006118628284876000611f32565b905061186e3383610dba565b1561187d5761187d8282612085565b6040518581526001600160801b0383169033907ff4d446eb2bcb888f40b23f1c0d6060473b059e0a159b3d9753b58ff402585f129060200160405180910390a3505050505b61156a6001600055565b60007f00000000000000000000000000000000000000000000000000000000000000004210156118fc5750600090565b7f00000000000000000000000000000000000000000000000000000000000000006119477f0000000000000000000000000000000000000000000000000000000000000000426129ce565b6119519190612954565b611145906001612976565b6000806119676118cc565b9050600061199e7f00000000000000000000000000000000000000000000000000000000000000006001600160801b03841661293d565b6119c8907f0000000000000000000000000000000000000000000000000000000000000000612976565b905060006119d642836129ce565b905060007f0000000000000000000000000000000000000000000000000000000000000000611a0d670de0b6b3a76400008461293d565b611a179190612954565b95945050505050565b60008281526001602081905260409091200154611a3c81611d46565b6109e28383611dc9565b611a4e611e64565b33600090815260066020526040902054611aa15760405162461bcd60e51b81526020600482015260146024820152735374616b696e673a206e6f206465706f7369747360601b6044820152606401610c0c565b6000611aab6118cc565b90506000816001600160801b031611611b065760405162461bcd60e51b815260206004820152601f60248201527f5374616b696e673a2043616e6e6f7420636865636b496e2065706f63682030006044820152606401610c0c565b611b103382610dba565b15611b5d5760405162461bcd60e51b815260206004820152601b60248201527f5374616b696e673a20616c726561647920636865636b656420696e00000000006044820152606401610c0c565b6103206000611b6d3a85846115b7565b6040516370a0823160e01b815230600482015290915081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611bd6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bfa91906129e1565b1015611c485760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e742066756e647320666f72206272696467650000006044820152606401610c0c565b600b547f000000000000000000000000000000000000000000000000000000000000000090611c85906001600160a01b0383169033903090611ef9565b33600090815260066020526040812054611ca3908690836001611f32565b9050611caf8582612085565b611cba8387866120d8565b6040516001600160801b038616815233907f159b5319f3e5ca16749714cae7e31f526d6d361ac513f8b467663e8df17e15819060200160405180910390a2505050505061156a6001600055565b6000670de0b6b3a76400006001600160801b031682602001516001600160801b0316611d32846123bb565b611d3c919061293d565b6109249190612954565b61156a81336123d1565b6000611d5c8383610dec565b611dc15760008381526001602081815260408084206001600160a01b0387168086529252808420805460ff19169093179092559051339286917f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d9190a4506001610924565b506000610924565b6000611dd58383610dec565b15611dc15760008381526001602090815260408083206001600160a01b0386168085529252808320805460ff1916905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4506001610924565b6000610924825490565b6000610de5838361240e565b60008181526001830160205260408120541515610de5565b600260005403611e8757604051633ee5aeb560e01b815260040160405180910390fd5b6002600055565b6000610de58383612438565b6040516001600160a01b03838116602483015260448201839052610a1b91859182169063a9059cbb906064015b604051602081830303815290604052915060e01b6020820180516001600160e01b03838183161783525050505061252b565b6040516001600160a01b0384811660248301528381166044830152606482018390526109e29186918216906323b872dd90608401611ec7565b3360009081526008602090815260408083206001600160801b0388168452909152812081611f5e61195c565b90506000611f6c338961092a565b83549091506001600160801b0316600003611fe25782546fffffffffffffffffffffffffffffffff19166001600160801b0389161783556001830187905560028301869055611fc587670de0b6b3a76400008885610a20565b83546001600160801b03918216600160801b029116178355612045565b846120455761201783600201548460010154611ffe9190612976565b8454600160801b90046001600160801b03168885610a20565b83546001600160801b03918216600160801b029116178355600283015461203f908790612976565b60028401555b841561207057336000908152600a6020526040902061206d816001600160801b038b1661259c565b50505b8061207b338a61092a565b610aa891906129ce565b6001600160801b0382166000908152600760205260409020546120a9908290612976565b6001600160801b039092166000908152600760205260409020918255506001908101805460ff19169091179055565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663387207786040518163ffffffff1660e01b8152600401602060405180830381865afa158015612138573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061215c91906129fa565b600b54600c54604080516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660208301529181019390935216606082015290915060009060800160408051808303601f1901815290829052600b5463095ea7b360e01b83526001600160a01b03858116600485015260248401919091529092507f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015612230573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122549190612a17565b506122896001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001683876125a8565b60408051610120810182527f000000000000000000000000000000000000000000000000000000000000000081526020810187905260008183018190526060820187905260808201869052600c546001600160a01b0390811660a084015285811660c084015260e08301829052610100830185905292516324fd57fb60e01b815290927f000000000000000000000000000000000000000000000000000000000000000016916324fd57fb916123429190600401612a7f565b6020604051808303816000875af1158015612361573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238591906129e1565b60405190915081907fec4441362be16727d3342fcbac11e99fc9906b5e3621e58d90ec20bcd01dc53c90600090a2505050505050565b6000816060015182604001516109249190612976565b6123db8282610dec565b61240a5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610c0c565b5050565b60008260000182815481106124255761242561299f565b9060005260206000200154905092915050565b6000818152600183016020526040812054801561252157600061245c6001836129ce565b8554909150600090612470906001906129ce565b90508082146124d55760008660000182815481106124905761249061299f565b90600052602060002001549050808760000184815481106124b3576124b361299f565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806124e6576124e6612b0a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610924565b6000915050610924565b600080602060008451602086016000885af18061254e576040513d6000823e3d81fd5b50506000513d91508115612566578060011415612573565b6001600160a01b0384163b155b156109e257604051635274afe760e01b81526001600160a01b0385166004820152602401610c0c565b6000610de58383612632565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa1580156125f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261c91906129e1565b90506109e2848461262d8585612976565b612679565b6000818152600183016020526040812054611dc157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610924565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663095ea7b360e01b1790526126ca8482612709565b6109e2576040516001600160a01b038481166024830152600060448301526126ff91869182169063095ea7b390606401611ec7565b6109e2848261252b565b6000806000806020600086516020880160008a5af192503d9150600051905082801561274e5750811561273f578060011461274e565b6000866001600160a01b03163b115b9695505050505050565b60006020828403121561276a57600080fd5b81356001600160e01b031981168114610de557600080fd5b6001600160a01b038116811461156a57600080fd5b80356001600160801b03811681146127ae57600080fd5b919050565b600080604083850312156127c657600080fd5b82356127d181612782565b91506127df60208401612797565b90509250929050565b6000602082840312156127fa57600080fd5b5035919050565b6000806040838503121561281457600080fd5b82359150602083013561282681612782565b809150509250929050565b6000806000806080858703121561284757600080fd5b8435935061285760208601612797565b92506040850135915061286c60608601612797565b905092959194509250565b60006020828403121561288957600080fd5b8135610de581612782565b602080825282518282018190526000918401906040840190835b818110156128d55783516001600160801b03168352602093840193909201916001016128ae565b509095945050505050565b6000602082840312156128f257600080fd5b610de582612797565b60008060006060848603121561291057600080fd5b505081359360208301359350604090920135919050565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141761092457610924612927565b60008261297157634e487b7160e01b600052601260045260246000fd5b500490565b8082018082111561092457610924612927565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6000600182016129c7576129c7612927565b5060010190565b8181038181111561092457610924612927565b6000602082840312156129f357600080fd5b5051919050565b600060208284031215612a0c57600080fd5b8151610de581612782565b600060208284031215612a2957600080fd5b81518015158114610de557600080fd5b6000815180845260005b81811015612a5f57602081850181015186830182015201612a43565b506000602082860101526020601f19601f83011685010191505092915050565b6020815281516020820152602082015160408201526040820151606082015260608201516080820152608082015160a0820152600060a0830151612ace60c08401826001600160a01b03169052565b5060c08301516001600160a01b03811660e08401525060e0830151610100830152610100830151610120808401526109b4610140840182612a39565b634e487b7160e01b600052603160045260246000fdfea2646970667358221220c833ef1ce527f37215a486a54d03031725954118e033d4602fa9dac9fd00db4564736f6c634300081c00330000000000000000000000000000000000000000000000000000000068692038000000000000000000000000000000000000000000000000000000000001518000000000000000000000000054173eb62c41997a6fe13bb614dcbbd3a4c614ba0000000000000000000000000c78af0fb1f4e09df9421ba9abd75c4dc018db050000000000000000000000000c78af0fb1f4e09df9421ba9abd75c4dc018db050000000000000000000000000000000000000000000000000de0b6b3a7640000000000000000000000000000abed10e480d9e708a0300b9cc552019d8857eebe000000000000000000000000303a465b659cbb0ab36ee643ea362c509eeb52130000000000000000000000000000000000000000000000000000000000000541