79 txs
46 calls
constructor
constructor(address _permit2, address initialOwner, address _auctioneer, address _stakeToken, address _stablecoin, uint32 _withdrawalDelay)
functions
auctioneer
viewfunction auctioneer() view returns (address)
collectedProtocolFees
viewfunction collectedProtocolFees() view returns (uint128)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
getOrderHash
purefunction getOrderHash(tuple orderInfo) pure returns (bytes32)
isApprovedForMigrationStakingContract
viewfunction isApprovedForMigrationStakingContract(address) view returns (bool)
lockedStablecoins
viewfunction lockedStablecoins(bytes32) view returns (uint256)
orderData
viewfunction orderData(bytes32) view returns (bool initialized, bool deactivated, bool tokensInWereSwappedToStablecoins, uint128 lockedCollateral, uint32 deadline, uint32 latestExecutionStart)
owner
viewfunction owner() view returns (address)
penalized
viewfunction penalized(bytes32) view returns (bool)
permit2
viewfunction permit2() view returns (address)
stablecoin
viewfunction stablecoin() view returns (address)
stakeData
viewfunction stakeData(address) view returns (uint128 stakedAmount, uint96 pendingWithdrawalAmount, uint32 initiateWithdrawalTime)
stakeToken
viewfunction stakeToken() view returns (address)
withdrawalDelay
viewfunction withdrawalDelay() view returns (uint32)
cancelOrder
nonpayablefunction cancelOrder(tuple orderInfo)
cancelWithdrawalOrMigration
nonpayablefunction cancelWithdrawalOrMigration()
claimTokens
nonpayablefunction claimTokens(tuple orderInfo, tuple successConfirmation, bytes successConfirmationSignature, address recoverTokensReceiver)
collectProtocolFees
nonpayablefunction collectProtocolFees(address receiver)
createOrder
nonpayablefunction createOrder(tuple orderInfo)
initiateWithdrawalOrMigration
nonpayablefunction initiateWithdrawalOrMigration(uint96 amount)
migrateStake
nonpayablefunction migrateStake(address newStaking, address account)
penalizeSolver
nonpayablefunction penalizeSolver(tuple orderInfo, tuple obligation, bytes solverSignature)
recoverTokens
nonpayablefunction recoverTokens(tuple orderInfo)
renounceOwnership
nonpayablefunction renounceOwnership()
setApprovedStakingContractForMigration
nonpayablefunction setApprovedStakingContractForMigration(address stakingContract, bool approve)
setAuctioneer
nonpayablefunction setAuctioneer(address newAuctioneer)
setWithdrawalDelay
nonpayablefunction setWithdrawalDelay(uint32 _withdrawalDelay)
stake
nonpayablefunction stake(address account, uint128 amount)
startOrderExecution
nonpayablefunction startOrderExecution(tuple orderInfo, bytes userSignature, tuple solverPermission, bytes auctioneerSignature)
startOrderExecutionWithSwap
nonpayablefunction startOrderExecutionWithSwap(tuple orderInfo, bytes userSignature, tuple solverPermission, bytes auctioneerSignature, address swapper, bytes swapData)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
withdrawStake
nonpayablefunction withdrawStake(address receiver)
events
AuctioneerSet
event AuctioneerSet(address)
EIP712DomainChanged
event EIP712DomainChanged()
ExecutionStart
event ExecutionStart(bytes32 indexed orderHash, address indexed solver, uint32 deadline, uint128 protocolFee, uint128 collateralAmount)
NewOrder
event NewOrder(bytes32 indexed orderHash, address indexed user, address tokenIn, uint32 deadline, uint128 amountIn, uint128 minStablecoinsAmount, bytes32 executionDetailsHash, uint256 nonce)
OrderCancelledByUser
event OrderCancelledByUser(bytes32 indexed orderHash)
OrderClosedByUser
event OrderClosedByUser(bytes32 indexed orderHash)
OrderSuccessfullyFulfilled
event OrderSuccessfullyFulfilled(bytes32 indexed orderHash, address indexed solver, address recoverTokensReceiver)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
ProtocolFeesCollected
event ProtocolFeesCollected(address receiver, uint256 amount)
SolverPenalized
event SolverPenalized(address solver, bytes32 orderHash, uint128 protocolFee, uint128 userCompensation)
Stake
event Stake(address indexed account, uint256 amount)
StakeMigration
event StakeMigration(address indexed stakingContract, address indexed account, uint256 amount)
StakeUnlocked
event StakeUnlocked(address indexed account, uint256 amount)
StakingContractApproved
event StakingContractApproved(address stakingContract, bool approved)
SwappedToStablecoins
event SwappedToStablecoins(bytes32 indexed orderHash, uint256 stablecoinsAmount)
Withdrawal
event Withdrawal(address indexed account, address receiver, uint256 amount)
WithdrawalDelaySet
event WithdrawalDelaySet(uint32)
WithdrawalInitiated
event WithdrawalInitiated(address indexed account, uint256 amount)
errors
AlreadyInitialized
error AlreadyInitialized()
AlreadyPenalized
error AlreadyPenalized()
AlreadySwapped
error AlreadySwapped()
BelowMinStablecoinsAmount
error BelowMinStablecoinsAmount(uint256)
FeeOnTransferTokensNotSupported
error FeeOnTransferTokensNotSupported()
InitiateAndWaitForDeadline
error InitiateAndWaitForDeadline()
InvalidAddress
error InvalidAddress()
InvalidAuctioneerSignature
error InvalidAuctioneerSignature()
InvalidObligation
error InvalidObligation()
InvalidOrder
error InvalidOrder()
InvalidPermission
error InvalidPermission()
InvalidShortString
error InvalidShortString()
InvalidSignature
error InvalidSignature()
InvalidSolverDeadline
error InvalidSolverDeadline()
InvalidStakingContract
error InvalidStakingContract()
InvalidSuccessConfirmation
error InvalidSuccessConfirmation()
NoReentrancy
error NoReentrancy()
NotAllowed
error NotAllowed()
NotAuctioneer
error NotAuctioneer()
NotSolver
error NotSolver()
NotUser
error NotUser()
OrderIsBeingProcessed
error OrderIsBeingProcessed()
OrderIsNotActive
error OrderIsNotActive()
OverdueDeadline
error OverdueDeadline()
OverMaxWithdrawalDelay
error OverMaxWithdrawalDelay()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
StakeAmountIsTooLow
error StakeAmountIsTooLow()
StakingContractIsNotApproved
error StakingContractIsNotApproved()
StringTooLong
error StringTooLong(string str)
SwapIsNotAllowed
error SwapIsNotAllowed()
ZeroAmount
error ZeroAmount()
creation bytecode
0x6101c060405234801561001157600080fd5b50604051614c93380380614c93833981016040819052610030916102cb565b828186866040518060400160405280601081526020016f14dbdd5c98d950da185a5b91dd585c9960821b815250604051806040016040528060018152602001603160f81b81525061008b6000836101f060201b90919060201c565b6101205261009a8160016101f0565b61014052815160208084019190912060e052815190820120610100524660a05261012760e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0526001600160a01b0381166101575760405163e6c4247b60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b03928316179055811661019a57604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6101a381610223565b506001600160a01b03918216610160526004805463ffffffff909216600160801b0263ffffffff60801b199092169190911790559182166101a0525093909316610180525061052a915050565b600060208351101561020c5761020583610275565b905061021d565b8161021784826103fa565b5060ff90505b92915050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600080829050601f815111156102a0578260405163305a27a960e01b815260040161019191906104b8565b80516102ab82610506565b179392505050565b6001600160a01b03811681146102c857600080fd5b50565b60008060008060008060c087890312156102e457600080fd5b86516102ef816102b3565b6020880151909650610300816102b3565b6040880151909550610311816102b3565b6060880151909450610322816102b3565b6080880151909350610333816102b3565b60a088015190925063ffffffff8116811461034d57600080fd5b809150509295509295509295565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168061038557607f821691505b6020821081036103a557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156103f557806000526020600020601f840160051c810160208510156103d25750805b601f840160051c820191505b818110156103f257600081556001016103de565b50505b505050565b81516001600160401b038111156104135761041361035b565b610427816104218454610371565b846103ab565b6020601f82116001811461045b57600083156104435750848201515b600019600385901b1c1916600184901b1784556103f2565b600084815260208120601f198516915b8281101561048b578785015182556020948501946001909201910161046b565b50848210156104a95786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b602081526000825180602084015260005b818110156104e657602081860181015160408684010152016104c9565b506000604082850101526040601f19601f83011684010191505092915050565b805160208083015191908110156103a55760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a05161468c610607600039600081816105a4015281816108d30152818161164801528181611a5001528181611afc0152611ba5015260008181610273015261316c015260008181610324015281816106a301528181610c5801528181610d8401528181610e95015281816114ca015281816122480152818161250101526128e70152600061266f0152600061263d015260006137ea015260006137c20152600061371d0152600061374701526000613771015261468c6000f3fe608060405234801561001057600080fd5b50600436106101ee5760003560e01c80638557f3e41161010f578063cd3387a0116100a2578063f2fde38b11610071578063f2fde38b146105c6578063f3c2c210146105d9578063f9ed389a146105ec578063fd596f79146105ff57600080fd5b8063cd3387a014610559578063db065da314610584578063e294d6fc14610597578063e9cbd8221461059f57600080fd5b8063a7ab6961116100de578063a7ab6961146103fc578063c23a5cea14610428578063c4cd9ed31461043b578063c691d191146104dd57600080fd5b80638557f3e4146103a25780638affdc9c146103c55780638c231825146103d85780638da5cb5b146103eb57600080fd5b80632a54db01116101875780635ec2c7bf116101565780635ec2c7bf14610359578063715018a61461036c57806378364ee41461037457806384b0196e1461038757600080fd5b80632a54db01146102f957806332b519df1461030c57806351ed6a301461031f57806358715e3b1461034657600080fd5b806319f8d5b4116101c357806319f8d5b4146102ad5780631ef56427146102c057806321e6b45a146102d3578063250786b7146102e657600080fd5b80626973b8146101f3578062ede7e41461022657806303affbfa1461023b57806312261ee71461026e575b600080fd5b610213610201366004613a42565b60086020526000908152604090205481565b6040519081526020015b60405180910390f35b610239610234366004613a80565b610612565b005b61025e610249366004613a42565b60096020526000908152604090205460ff1681565b604051901515815260200161021d565b6102957f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161021d565b6102396102bb366004613abb565b610696565b6102396102ce366004613b09565b61077d565b6102396102e1366004613b6f565b610978565b6102396102f4366004613c03565b610d0e565b610239610307366004613a80565b610e3a565b61023961031a366004613c3c565b610efb565b6102957f000000000000000000000000000000000000000000000000000000000000000081565b610239610354366004613c79565b611061565b600254610295906001600160a01b031681565b6102396110e7565b610239610382366004613b09565b6110fb565b61038f6112b6565b60405161021d9796959493929190613ce4565b61025e6103b0366004613a80565b60066020526000908152604090205460ff1681565b6102396103d3366004613d8e565b6112fc565b6102136103e6366004613b09565b6113b5565b6003546001600160a01b0316610295565b60045461041390600160801b900463ffffffff1681565b60405163ffffffff909116815260200161021d565b610239610436366004613a80565b6113cf565b610499610449366004613a42565b60076020526000908152604090205460ff80821691610100810482169162010000820416906001600160801b0363010000008204169063ffffffff600160981b8204811691600160b81b90041686565b6040805196151587529415156020870152921515938501939093526001600160801b0316606084015263ffffffff91821660808401521660a082015260c00161021d565b6105266104eb366004613a80565b6005602052600090815260409020546001600160801b03811690600160801b81046001600160601b031690600160e01b900463ffffffff1683565b604080516001600160801b0390941684526001600160601b03909216602084015263ffffffff169082015260600161021d565b60045461056c906001600160801b031681565b6040516001600160801b03909116815260200161021d565b610239610592366004613e2b565b61153a565b61023961177f565b6102957f000000000000000000000000000000000000000000000000000000000000000081565b6102396105d4366004613a80565b61189f565b6102396105e7366004613eb5565b6118e2565b6102396105fa366004613b09565b611cb4565b61023961060d366004613f9a565b6120f3565b61061a612371565b6001600160a01b0381166106415760405163e6c4247b60e01b815260040160405180910390fd5b600280546001600160a01b0319166001600160a01b0383169081179091556040519081527f4ee0985a129917c72eab0afe7ec6060bf6c6e0796bedc42de903d9dbbadfc51d906020015b60405180910390a150565b6106d46001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633306001600160801b03851661239e565b6001600160a01b038216600090815260056020526040812080548392906107059084906001600160801b0316613fde565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550816001600160a01b03167febedb8b3c678666e7f36970bc8f57abf6d8fa2e828c0da91ea5b75bf68ed101a8260405161077191906001600160801b0391909116815260200190565b60405180910390a25050565b600061079661079136849003840184613ffd565b61240b565b600081815260076020908152604091829020825160c081018452905460ff808216158015845261010083048216151594840194909452620100008204161515938201939093526001600160801b036301000000840416606082015263ffffffff600160981b840481166080830152600160b81b90930490921660a08301529192509080610824575080602001515b1561084257604051638f61709960e01b815260040160405180910390fd5b6000828152600760205260409020805461ff00191661010017905560808101514263ffffffff909116106108895760405163a5445e8f60e01b815260040160405180910390fd5b6108a08382606001516001600160801b03166124e7565b8060400151156108ff576108fa6108ba6020850185613a80565b6000848152600860205260409020546001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016919061252c565b610948565b61094861090f6020850185613a80565b61091f60a08601608087016140c7565b6001600160801b03166109386040870160208801613a80565b6001600160a01b0316919061252c565b60405182907ff1122a55049cac4b6fb786a4e5e82db7ceb712dd52fe67e22a8de56069d2999590600090a2505050565b6002546001600160a01b031633146109a35760405163092024b760e11b815260040160405180910390fd5b60006109b761079136879003870187613ffd565b600081815260076020908152604091829020825160c081018452905460ff8082161515835261010082048116151583850152620100008204161515938201939093526001600160801b036301000000840416606082015263ffffffff600160981b840481166080830152600160b81b90930490921660a0830152919250904290860135101580610a51575042816080015163ffffffff1610155b15610a6f5760405163a5445e8f60e01b815260040160405180910390fd5b81856060013514610a9357604051637a9e2e8d60e01b815260040160405180910390fd5b806020015115610ab657604051638f61709960e01b815260040160405180910390fd5b60a081015163ffffffff1685351015610ae257604051631eb49d6d60e11b815260040160405180910390fd5b600080610af0878787612562565b600081815260096020526040902054919350915060ff1615610b2557604051630729d4b960e11b815260040160405180910390fd5b6000818152600960205260409020805460ff19166001179055610b4e60c0880160a089016140c7565b610b5e60a0890160808a016140c7565b610b689190613fde565b6001600160a01b03831660009081526005602052604081208054909190610b999084906001600160801b03166140e2565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550866080016020810190610bd091906140c7565b6001600160801b031615610c2e57610bee60a08801608089016140c7565b60048054600090610c099084906001600160801b0316613fde565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b610c88610c3e60208a018a613a80565b610c4e60c08a0160a08b016140c7565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001691906001600160801b031661252c565b7f8a75ea0ad918c9f18473780885bfbfa1b495bb77c8fc36fcff163305169fda218285610cbb60a08b0160808c016140c7565b610ccb60c08c0160a08d016140c7565b604080516001600160a01b0395909516855260208501939093526001600160801b0391821684840152166060830152519081900360800190a15050505050505050565b610d16612371565b8015610dd6576000826001600160a01b03166351ed6a306040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d5c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d809190614101565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b031614610dd4576040516307b18df360e31b815260040160405180910390fd5b505b6001600160a01b038216600081815260066020908152604091829020805460ff19168515159081179091558251938452908301527fb527e5b82a63a001cb2bba9e352794b34082f45a93315b0901b22ba60705165a91015b60405180910390a15050565b610e42612371565b600480546fffffffffffffffffffffffffffffffff1981169091556001600160801b03166000819003610e8857604051631f2a200560e01b815260040160405180910390fd5b610ebc6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016838361252c565b604080516001600160a01b0384168152602081018390527fd72df92d2a1deb61bf4978dfd140c21dcb0a449bd22cb16af2cd7a853d2505269101610e2e565b33600090815260056020908152604091829020825160608101845290546001600160801b038116808352600160801b82046001600160601b0390811694840194909452600160e01b90910463ffffffff1693820193909352919083161115610f7657604051631b61ea7960e31b815260040160405180910390fd5b6040518060600160405280836001600160601b03168360000151610f9a91906140e2565b6001600160801b03168152602001838360200151610fb8919061411e565b6001600160601b03908116825263ffffffff42811660209384015233600081815260058552604090819020865181548888015198840151909516600160e01b026001600160e01b03988716600160801b026001600160e01b03199096166001600160801b03909216919091179490941796909616929092179094555190851681527f6d92f7d3303f995bf21956bb0c51b388bae348eaf45c23debd2cfa3fcd9ec6469101610771565b611069612371565b62093a808163ffffffff161115611093576040516367ab32f160e01b815260040160405180910390fd5b6004805463ffffffff60801b1916600160801b63ffffffff8416908102919091179091556040519081527ff2f153f913e1c0e3d090578547c0c02b72c310d7414db03ce8b7f65a5157df8a9060200161068b565b6110ef612371565b6110f960006125e4565b565b600061110f61079136849003840184613ffd565b600081815260076020908152604091829020825160c081018452905460ff808216158015845261010083048216151594840194909452620100008204161515938201939093526001600160801b036301000000840416606082015263ffffffff600160981b840481166080830152600160b81b90930490921660a0830152919250908061119d575080602001515b156111bb57604051638f61709960e01b815260040160405180910390fd5b6000828152600760209081526040909120805461ff0019166101001790556111e590840184613a80565b6001600160a01b0316336001600160a01b03161461121657604051637aafae9760e01b815260040160405180910390fd5b42816080015163ffffffff16106112405760405163a5445e8f60e01b815260040160405180910390fd5b6112578382606001516001600160801b03166124e7565b806040015115611276576112716108ba6020850185613a80565b611286565b61128661090f6020850185613a80565b60405182907f8d2771d1c563b358038029ea5ea7094b122c50e7cc13a0012eb3aeed80192e7290600090a2505050565b6000606080600080600060606112ca612636565b6112d2612668565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600061131061079136899003890189613ffd565b6000818152600760209081526040808320815160c081018352905460ff80821615158352610100820481161515948301949094526201000081049093161515918101919091526001600160801b036301000000830416606082015263ffffffff600160981b830481166080830152600160b81b90920490911660a08201529192506113ab90839083908b908b908b908b908b908b9080612695565b5050505050505050565b60006113c961079136849003840184613ffd565b92915050565b336000908152600560209081526040808320815160608101835290546001600160801b0381168252600160801b81046001600160601b0316938201849052600160e01b900463ffffffff16918101919091529181900361144257604051631f2a200560e01b815260040160405180910390fd5b33600090815260056020526040908190208054600160801b600160e01b031916905582015163ffffffff16158061149f575042600460109054906101000a900463ffffffff168360400151611497919061413d565b63ffffffff16115b156114bd5760405163da4cd18160e01b815260040160405180910390fd5b6114f16001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016848361252c565b604080516001600160a01b03851681526020810183905233917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398910160405180910390a2505050565b600061154e61079136889003880188613ffd565b600081815260076020908152604091829020825160c081018452905460ff808216158015845261010083048216151594840194909452620100008204161515938201939093526001600160801b036301000000840416606082015263ffffffff600160981b840481166080830152600160b81b90930490921660a083015291925090806115dc575080602001515b156115fa57604051638f61709960e01b815260040160405180910390fd5b6000828152600760205260409020805461ff00191661010017905561162182878787612ab1565b80604001511561167557600082815260086020526040902054611670906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690859061252c565b6116a2565b6116a28361168960a08a0160808b016140c7565b6001600160801b031661093860408b0160208c01613a80565b6060810151600560006116bb60408a0160208b01613a80565b6001600160a01b031681526020810191909152604001600090812080549091906116ef9084906001600160801b0316613fde565b92506101000a8154816001600160801b0302191690836001600160801b031602179055508560200160208101906117269190613a80565b6001600160a01b0316827fd311a6ac1b2767021e67cc355ea4ddaf50485133c7a8207a3c3ac44e31ceb5288560405161176e91906001600160a01b0391909116815260200190565b60405180910390a350505050505050565b336000908152600560209081526040808320815160608101835290546001600160801b0381168252600160801b81046001600160601b0316938201849052600160e01b900463ffffffff1691810191909152918190036117f257604051631f2a200560e01b815260040160405180910390fd5b3360009081526005602052604081208054600160801b600160e01b0319811682556001600160601b03841692906118339084906001600160801b0316613fde565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550336001600160a01b03167ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a8260405161077191906001600160601b0391909116815260200190565b6118a7612371565b6001600160a01b0381166118d657604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6118df816125e4565b50565b60006118f6610791368c90038c018c613ffd565b600081815260076020908152604091829020825160c081018452905460ff8082161515835261010082048116151593830193909352620100008104909216158015938201939093526001600160801b036301000000830416606082015263ffffffff600160981b830481166080830152600160b81b90920490911660a08201529192506119965760405163757d07f760e01b815260040160405180910390fd5b6119a660a0890160808a01614159565b6119c3576040516301cd973f60e21b815260040160405180910390fd5b6119d360c08c0160a08d016140c7565b6001600160801b03166119ec60c08a0160a08b016140c7565b6001600160801b03161015611a1457604051634345326f60e11b815260040160405180910390fd5b6001816040019015159081151581525050611a3882828d8d8d8d8d8d60018e612695565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac39190614176565b9050856001600160a01b031663778922688d6020016020810190611ae79190613a80565b8e6080016020810190611afa91906140c7565b7f00000000000000000000000000000000000000000000000000000000000000008d60a0016020810190611b2e91906140c7565b8a8a6040518763ffffffff1660e01b8152600401611b51969594939291906141b8565b600060405180830381600087803b158015611b6b57600080fd5b505af1158015611b7f573d6000803e3d6000fd5b50506040516370a0823160e01b8152306004820152600092508391506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611bec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c109190614176565b611c1a9190614209565b9050611c2c60c08b0160a08c016140c7565b6001600160801b0316811015611c58576040516346ab761160e11b8152600481018290526024016118cd565b600084815260086020526040908190208290555184907f3fdcbccfbe0da48fe14b577b627f0a1d7ea2956714832866f314eddb8a081cee90611c9d9084815260200190565b60405180910390a250505050505050505050505050565b6000611cc861079136849003840184613ffd565b600081815260076020908152604091829020825160c081018452905460ff808216158015845261010083048216151594840194909452620100008204161515938201939093526001600160801b036301000000840416606082015263ffffffff600160981b840481166080830152600160b81b90930490921660a083015291925090611d665760405162dc149f60e41b815260040160405180910390fd5b46611d746020850185613a80565b6001600160a01b0316336001600160a01b031614611da557604051637aafae9760e01b815260040160405180910390fd5b611db56060850160408601613c79565b63ffffffff168114611dda5760405163af61069360e01b815260040160405180910390fd5b42611deb6080860160608701613c79565b63ffffffff1611611e0f576040516354cf899560e11b815260040160405180910390fd5b6000611e216040860160208701613a80565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015611e67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e8b9190614176565b9050611e9d6040860160208701613a80565b6001600160a01b03166323b872dd3330611ebd60a08a0160808b016140c7565b6040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526001600160801b031660448201526064016020604051808303816000875af1158015611f1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f3e919061421c565b506000611f516040870160208801613a80565b6040516370a0823160e01b81523060048201526001600160a01b0391909116906370a0823190602401602060405180830381865afa158015611f97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbb9190614176565b9050611fcd60a08701608088016140c7565b6001600160801b0316611fe08383614209565b1015611fff576040516370b147b960e11b815260040160405180910390fd5b6040805160c0810182526001815260006020808301828152838501838152606085018481526080860185815260a087018681528d8752600790955296909420945185549251915194519651935161ffff1990931690151561ff00191617610100911515919091021762010000600160981b03191662010000931515939093026301000000600160981b0319169290921763010000006001600160801b03909516949094029390931767ffffffffffffffff60981b1916600160981b63ffffffff9485160263ffffffff60b81b191617600160b81b93909116929092029190911790556120eb8587612b3b565b505050505050565b336000908152600560209081526040808320815160608101835290546001600160801b0381168252600160801b81046001600160601b0316938201849052600160e01b900463ffffffff16918101919091529181900361216657604051631f2a200560e01b815260040160405180910390fd5b33600090815260056020526040908190208054600160801b600160e01b031916905582015163ffffffff1615806121c3575042600460109054906101000a900463ffffffff1683604001516121bb919061413d565b63ffffffff16115b156121e15760405163da4cd18160e01b815260040160405180910390fd5b6001600160a01b03841660009081526006602052604090205460ff1661221a57604051636380f96560e01b815260040160405180910390fd5b60405163095ea7b360e01b81526001600160a01b0385811660048301526001600160601b03831660248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015612291573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b5919061421c565b5060405163067e356d60e21b81526001600160a01b0384811660048301526001600160601b03831660248301528516906319f8d5b490604401600060405180830381600087803b15801561230857600080fd5b505af115801561231c573d6000803e3d6000fd5b50506040516001600160601b03841681526001600160a01b038087169350871691507ff42d8b3bd52c29488351f5ecc8c25c976a582205d1ff1c988aad77feb653ceae9060200160405180910390a350505050565b6003546001600160a01b031633146110f95760405163118cdaa760e01b81523360048201526024016118cd565b6040516001600160a01b0384811660248301528381166044830152606482018390526124059186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180516001600160e01b038381831617835250505050612c0b565b50505050565b600060405160200161241c90614239565b60405160208183030381529060405280519060200120826000015183602001518460400151856060015186608001518760a001518860c001518960e001516040516020016124ca999897969594939291909889526001600160a01b0397881660208a015295909616604088015263ffffffff93841660608801529190921660808601526001600160801b0391821660a08601521660c084015260e08301919091526101008201526101200190565b604051602081830303815290604052805190602001209050919050565b6125286124f76020840184613a80565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016908361252c565b5050565b6040516001600160a01b0383811660248301526044820183905261255d91859182169063a9059cbb906064016123d3565b505050565b60008061256e85612c7c565b90506125b08185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612dad92505050565b50909250506001600160a01b0382166125dc57604051638baa579f60e01b815260040160405180910390fd5b935093915050565b600380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60606126637f00000000000000000000000000000000000000000000000000000000000000006000612dfa565b905090565b60606126637f00000000000000000000000000000000000000000000000000000000000000006001612dfa565b6126a3888b8787878e612ea6565b6040805160c08101825260018152600060208201528a820151151581830152906060808301916126d79189019089016140c7565b6001600160801b031681526020016126f560e0880160c08901613c79565b63ffffffff90811682524280821660209384015260008e8152600784526040908190208551815495870151928701516060880151608089015160a0998a01518816600160b81b0263ffffffff60b81b19918916600160981b029190911667ffffffffffffffff60981b196001600160801b039093166301000000026301000000600160981b031994151562010000029490941662010000600160981b03199715156101000261ff00199615159690961661ffff19909b169a909a1794909417959095169790971717959095169490941717909255918b0151909116036127ee57604051632c1ff44360e11b815260040160405180910390fd5b885161281b5761280c8888888d8661280657306130e2565b856130e2565b6128168a89612b3b565b612998565b81156128ca576128316040890160208a01613a80565b6001600160a01b031663a9059cbb8261285060a08c0160808d016140c7565b6040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526001600160801b031660248201526044016020604051808303816000875af11580156128a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c8919061421c565b505b60608901516001600160801b031615612998576001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663a9059cbb61291960208b018b613a80565b60608c01516040516001600160e01b031960e085901b1681526001600160a01b0390921660048301526001600160801b031660248201526044016020604051808303816000875af1158015612972573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612996919061421c565b505b6129a860808601606087016140c7565b6129b860608701604088016140c7565b6129c29190613fde565b600560006129d36020890189613a80565b6001600160a01b03168152602081019190915260400160009081208054909190612a079084906001600160801b03166140e2565b92506101000a8154816001600160801b0302191690836001600160801b03160217905550846060016020810190612a3e91906140c7565b6001600160801b031615612a9c57612a5c60808601606087016140c7565b60048054600090612a779084906001600160801b0316613fde565b92506101000a8154816001600160801b0302191690836001600160801b031602179055505b612aa5856133f2565b50505050505050505050565b612ac16040840160208501613a80565b6001600160a01b0316336001600160a01b031614612af25760405163c139eabd60e01b815260040160405180910390fd5b82358414612b13576040516331b593d760e11b815260040160405180910390fd5b612b1e838383613490565b61240557604051630387aa4160e11b815260040160405180910390fd5b612b486020820182613a80565b6001600160a01b0316827fb95d8eb62a0bfee0a9df36bb94b7e00f7a3fec28fcc85ef69dbe0891e02463d8612b836040850160208601613a80565b612b936080860160608701613c79565b612ba360a08701608088016140c7565b612bb360c0880160a089016140c7565b604080516001600160a01b03909516855263ffffffff90931660208501526001600160801b039182169284019290925216606082015260c080860135608083015260e086013560a08301520160405180910390a35050565b600080602060008451602086016000885af180612c2e576040513d6000823e3d81fd5b50506000513d91508115612c46578060011415612c53565b6001600160a01b0384163b155b1561240557604051635274afe760e01b81526001600160a01b03851660048201526024016118cd565b60006113c9604051602001612c909061432f565b60408051601f1981840301815291815281516020928301209185359190860135908601356060870135612cc960a0890160808a016140c7565b612cd960c08a0160a08b016140c7565b612ce660c08b018b6144ac565b604051602001612cf79291906144f3565b60408051601f198184030181529190528051602090910120612d206101008c0160e08d01614159565b612d326101208d016101008e016140c7565b60408051602081019b909b528a01989098526060890196909652608088019490945260a08701929092526001600160801b0390811660c087015290811660e086015261010085019190915290151561012084015216610140820152610160015b6040516020818303038152906040528051906020012061350e565b60008060008351604103612de75760208401516040850151606086015160001a612dd98882858561353b565b955095509550505050612df3565b50508151600091506002905b9250925092565b606060ff8314612e1457612e0d8361360a565b90506113c9565b818054612e2090614503565b80601f0160208091040260200160405190810160405280929190818152602001828054612e4c90614503565b8015612e995780601f10612e6e57610100808354040283529160200191612e99565b820191906000526020600020905b815481529060010190602001808311612e7c57829003601f168201915b5050505050905092915050565b46612eb76060880160408901613c79565b63ffffffff168114612edc5760405163af61069360e01b815260040160405180910390fd5b612ee7858585613649565b612f0457604051630387aa4160e11b815260040160405180910390fd5b816020015115612f2757604051638f61709960e01b815260040160405180910390fd5b81518015612f3f575042826080015163ffffffff1610155b15612f5d5760405163a5445e8f60e01b815260040160405180910390fd5b42612f6e6080890160608a01613c79565b63ffffffff1611612f92576040516354cf899560e11b815260040160405180910390fd5b612f9f6020860186613a80565b6001600160a01b0316336001600160a01b031614612fd05760405163c139eabd60e01b815260040160405180910390fd5b612fe06080880160608901613c79565b63ffffffff16612ff660e0870160c08801613c79565b63ffffffff161061301a576040516387e08d4b60e01b815260040160405180910390fd5b4261302b60e0870160c08801613c79565b63ffffffff161161304f576040516354cf899560e11b815260040160405180910390fd5b8585602001351461307357604051634345326f60e11b815260040160405180910390fd5b61308360808601606087016140c7565b61309360608701604088016140c7565b61309d9190613fde565b336000908152600560205260409020546001600160801b03918216911610156130d957604051631b61ea7960e31b815260040160405180910390fd5b50505050505050565b60006130f46040870160208801613a80565b6040516370a0823160e01b81526001600160a01b03848116600483015291909116906370a0823190602401602060405180830381865afa15801561313c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131609190614176565b90506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663137c29fe6132226131a3368a90038a018a613ffd565b6040805160a0810182526000606082018181526080830182905282526020820181905291810191909152506040805160a0810182526020838101516001600160a01b031660608084019182526080808701516001600160801b03169085015290835260e0850151918301919091529092015163ffffffff169082015290565b61327785613235368c90038c018c613ffd565b90604080518082018252600080825260209182015281518083019092526001600160a01b03929092168152608092909201516001600160801b03169082015290565b61328460208b018b613a80565b8760405160200161329490614239565b60408051601f1981840301815260608301909152602e80835290919061462960208301396040516020016132c9929190614537565b6040516020818303038152906040528b8b6040518863ffffffff1660e01b81526004016132fc9796959493929190614587565b600060405180830381600087803b15801561331657600080fd5b505af115801561332a573d6000803e3d6000fd5b50600092506133429150506040880160208901613a80565b6040516370a0823160e01b81526001600160a01b03858116600483015291909116906370a0823190602401602060405180830381865afa15801561338a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133ae9190614176565b90506133c060a08801608089016140c7565b6001600160801b03166133d38383614209565b10156130d9576040516370b147b960e11b815260040160405180910390fd5b6133ff6020820182613a80565b6001600160a01b031660208201357fafee710773342d0ce4d79093af38bd67118c6b20fedab1bfbb713ef0ea6e1e4461343e60e0850160c08601613c79565b61344e60808601606087016140c7565b61345e60608701604088016140c7565b6040805163ffffffff90941684526001600160801b03928316602085015291169082015260600160405180910390a350565b6000806134db61349f86613658565b85858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612dad92505050565b50909150506001600160a01b0381161580159061350557506002546001600160a01b038281169116145b95945050505050565b60006113c961351b613710565b8360405161190160f01b8152600281019290925260228201526042902090565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156135765750600091506003905082613600565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156135ca573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166135f657506000925060019150829050613600565b9250600091508190505b9450945094915050565b606060006136178361383b565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b6000806134db61349f86613863565b60006113c96040516020016136ba90730a6eac6c6cae6e686dedcccd2e4dac2e8d2dedc560631b815271189e5d195ccccc881bdc99195c92185cda0b60721b60148201526e6164647265737320736f6c7665722960881b602682015260350190565b6040516020818303038152906040528051906020012083600001358460200160208101906136e89190613a80565b6040805160208101949094528301919091526001600160a01b03166060820152608001612d92565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561376957507f000000000000000000000000000000000000000000000000000000000000000046145b1561379357507f000000000000000000000000000000000000000000000000000000000000000090565b612663604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b600060ff8216601f8111156113c957604051632cd44ac360e21b815260040160405180910390fd5b60006113c9604051602001613968907f536f75726365436861696e536f6c7665725065726d697373696f6e280000000081526e1859191c995cdcc81cdbdb1d995c8b608a1b601c82015271189e5d195ccccc881bdc99195c92185cda0b60721b602b8201527f75696e7431323820636f6c6c61746572616c416d6f756e742c00000000000000603d820152731d5a5b9d0c4c8e081c1c9bdd1bd8dbdb1199594b60621b60568201526e189bdbdb08185b1b1bddd4ddd85c0b608a1b606a8201527f75696e74313238206d696e537461626c65636f696e73416d6f756e742c00000060798201526f75696e74333220646561646c696e652960801b609682015260a60190565b60408051601f1981840301815291905280516020918201209061398d90850185613a80565b60208501356139a260608701604088016140c7565b6139b260808801606089016140c7565b6139c260a0890160808a01614159565b6139d260c08a0160a08b016140c7565b6139e260e08b0160c08c01613c79565b6040805160208101999099526001600160a01b039097169688019690965260608701949094526001600160801b03928316608087015290821660a0860152151560c08501521660e083015263ffffffff1661010082015261012001612d92565b600060208284031215613a5457600080fd5b5035919050565b6001600160a01b03811681146118df57600080fd5b8035613a7b81613a5b565b919050565b600060208284031215613a9257600080fd5b8135613a9d81613a5b565b9392505050565b80356001600160801b0381168114613a7b57600080fd5b60008060408385031215613ace57600080fd5b8235613ad981613a5b565b9150613ae760208401613aa4565b90509250929050565b60006101008284031215613b0357600080fd5b50919050565b60006101008284031215613b1c57600080fd5b613a9d8383613af0565b60008083601f840112613b3857600080fd5b50813567ffffffffffffffff811115613b5057600080fd5b602083019150836020828501011115613b6857600080fd5b9250929050565b6000806000806101408587031215613b8657600080fd5b613b908686613af0565b935061010085013567ffffffffffffffff811115613bad57600080fd5b85016101208188031215613bc057600080fd5b925061012085013567ffffffffffffffff811115613bdd57600080fd5b613be987828801613b26565b95989497509550505050565b80151581146118df57600080fd5b60008060408385031215613c1657600080fd5b8235613c2181613a5b565b91506020830135613c3181613bf5565b809150509250929050565b600060208284031215613c4e57600080fd5b81356001600160601b0381168114613a9d57600080fd5b803563ffffffff81168114613a7b57600080fd5b600060208284031215613c8b57600080fd5b613a9d82613c65565b60005b83811015613caf578181015183820152602001613c97565b50506000910152565b60008151808452613cd0816020860160208601613c94565b601f01601f19169290920160200192915050565b60ff60f81b8816815260e060208201526000613d0360e0830189613cb8565b8281036040840152613d158189613cb8565b606084018890526001600160a01b038716608085015260a0840186905283810360c08501528451808252602080870193509091019060005b81811015613d6b578351835260209384019390920191600101613d4d565b50909b9a5050505050505050505050565b600060e08284031215613b0357600080fd5b6000806000806000806102208789031215613da857600080fd5b613db28888613af0565b955061010087013567ffffffffffffffff811115613dcf57600080fd5b613ddb89828a01613b26565b9096509450613df09050886101208901613d7c565b925061020087013567ffffffffffffffff811115613e0d57600080fd5b613e1989828a01613b26565b979a9699509497509295939492505050565b6000806000806000858703610180811215613e4557600080fd5b613e4f8888613af0565b9550604060ff1982011215613e6357600080fd5b506101008601935061014086013567ffffffffffffffff811115613e8657600080fd5b613e9288828901613b26565b909450925050610160860135613ea781613a5b565b809150509295509295909350565b60008060008060008060008060006102608a8c031215613ed457600080fd5b613ede8b8b613af0565b98506101008a013567ffffffffffffffff811115613efb57600080fd5b613f078c828d01613b26565b9099509750613f1c90508b6101208c01613d7c565b95506102008a013567ffffffffffffffff811115613f3957600080fd5b613f458c828d01613b26565b9096509450506102208a0135613f5a81613a5b565b92506102408a013567ffffffffffffffff811115613f7757600080fd5b613f838c828d01613b26565b915080935050809150509295985092959850929598565b60008060408385031215613fad57600080fd5b8235613fb881613a5b565b91506020830135613c3181613a5b565b634e487b7160e01b600052601160045260246000fd5b6001600160801b0381811683821601908111156113c9576113c9613fc8565b600061010082840312801561401157600080fd5b60009050604051610100810181811067ffffffffffffffff8211171561404557634e487b7160e01b83526041600452602483fd5b60405261405184613a70565b815261405f60208501613a70565b602082015261407060408501613c65565b604082015261408160608501613c65565b606082015261409260808501613aa4565b60808201526140a360a08501613aa4565b60a082015260c0848101359082015260e09384013593810193909352509092915050565b6000602082840312156140d957600080fd5b613a9d82613aa4565b6001600160801b0382811682821603908111156113c9576113c9613fc8565b60006020828403121561411357600080fd5b8151613a9d81613a5b565b6001600160601b0381811683821601908111156113c9576113c9613fc8565b63ffffffff81811683821601908111156113c9576113c9613fc8565b60006020828403121561416b57600080fd5b8135613a9d81613bf5565b60006020828403121561418857600080fd5b5051919050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0387811682526001600160801b03878116602084015290861660408301528416606082015260a0608082018190526000906141fd908301848661418f565b98975050505050505050565b818103818111156113c9576113c9613fc8565b60006020828403121561422e57600080fd5b8151613a9d81613bf5565b6909ee4c8cae492dcccde560b31b81526c1859191c995cdcc81d5cd95c8b609a1b600a8201526f1859191c995cdcc81d1bdad95b925b8b60821b6017820152711d5a5b9d0ccc881cdc98d0da185a5b92590b60721b60278201526f1d5a5b9d0ccc88191958591b1a5b994b60821b6039820152701d5a5b9d0c4c8e08185b5bdd5b9d125b8b607a1b60498201527f75696e74313238206d696e537461626c65636f696e73416d6f756e742c000000605a8201527f6279746573333220657865637574696f6e44657461696c73486173682c00000060778201526d75696e74323536206e6f6e63652960901b609482015260a20190565b700a6ded8eccae49ec4d8d2cec2e8d2dedc5607b1b8152751d5a5b9d0c8d4d881cda59db951a5b595cdd185b5c0b60521b6011820152751d5a5b9d0c8d4d881cdd185c9d111958591b1a5b994b60521b60278201527f75696e7432353620657865637574696f6e446561646c696e652c000000000000603d82015271189e5d195ccccc881bdc99195c92185cda0b60721b6057820152731d5a5b9d0c4c8e081c1c9bdd1bd8dbdb1199594b60621b60698201527f75696e743132382075736572436f6d70656e736174696f6e2c00000000000000607d8201527f737472696e672064657374696e6174696f6e436861696e536f6c7665724164646096820152641c995cdccb60da1b60b68201527f626f6f6c2077696c6c53776170546f6b656e73496e546f537461626c65636f6960bb8201908152621b9ccb60ea1b60db83015260009060de83016144a4817f75696e74313238206d696e537461626c65636f696e73416d6f756e74290000008152601d0190565b949350505050565b6000808335601e198436030181126144c357600080fd5b83018035915067ffffffffffffffff8211156144de57600080fd5b602001915036819003821315613b6857600080fd5b8183823760009101908152919050565b600181811c9082168061451757607f821691505b602082108103613b0357634e487b7160e01b600052602260045260246000fd5b714f72646572496e666f207769746e6573732960701b815260008351614564816012850160208801613c94565b83519083019061457b816012840160208801613c94565b01601201949350505050565b6145a581895180516001600160a01b03168252602090810151910152565b60208801516040820152604088015160608201526145d9608082018880516001600160a01b03168252602090810151910152565b60018060a01b03861660c08201528460e08201526101406101008201526000614606610140830186613cb8565b82810361012084015261461a81858761418f565b9a995050505050505050505056fe546f6b656e5065726d697373696f6e73286164647265737320746f6b656e2c75696e7432353620616d6f756e7429a2646970667358221220e9bf3dda0e723d1572387d8f895bf98c570a4c4c79aaa67e697f0898a50e2d9364736f6c634300081c0033000000000000000000000000000000000022d473030f116ddee9f6b43ac78ba3000000000000000000000000d022311dacaa30f8396ca9d2c4662a2ef083a1dd0000000000000000000000001e69484cf388eea4c4b64617b187359bf1c50d30000000000000000000000000833589fcd6edb6e08f4c7c32d4f71b54bda02913000000000000000000000000833589fcd6edb6e08f4c7c32d4f71b54bda029130000000000000000000000000000000000000000000000000000000000000e10