156 txs
1k calls
constructor
constructor(address initialOwner_, address vault_, address lockstakeEngine_, uint32 switchFarmCooldown_, address swapper_, address feeCollector_, uint16 performanceFeeBpsForCaller_, uint16 performanceFeeBpsForOrigami_)
functions
areDepositsPaused
viewfunction areDepositsPaused() view returns (bool)
areWithdrawalsPaused
viewfunction areWithdrawalsPaused() view returns (bool)
asset
viewfunction asset() view returns (address)
currentFarmIndex
viewfunction currentFarmIndex() view returns (uint32)
depositFeeBps
viewfunction depositFeeBps() view returns (uint16)
explicitFunctionAccess
viewfunction explicitFunctionAccess(address, bytes4) view returns (bool)
farmDetails
viewfunction farmDetails(uint32[] farmIndexes) view returns (tuple[] details)
feeCollector
viewfunction feeCollector() view returns (address)
getFarm
viewfunction getFarm(uint256 farmIndex) view returns (tuple farm)
isPauser
viewfunction isPauser(address account) view returns (bool canPause)
lastSwitchTime
viewfunction lastSwitchTime() view returns (uint32)
LOCKSTAKE_ENGINE
viewfunction LOCKSTAKE_ENGINE() view returns (address)
LSSKY
viewfunction LSSKY() view returns (address)
maxFarmIndex
viewfunction maxFarmIndex() view returns (uint32)
owner
viewfunction owner() view returns (address)
pausers
viewfunction pausers(address account) view returns (bool canPause)
performanceFeeBps
viewfunction performanceFeeBps() view returns (uint16, uint16)
SKY
viewfunction SKY() view returns (address)
stakedBalance
viewfunction stakedBalance() view returns (uint256)
supportsInterface
purefunction supportsInterface(bytes4 interfaceId) pure returns (bool)
swapper
viewfunction swapper() view returns (address)
switchFarmCooldown
viewfunction switchFarmCooldown() view returns (uint32)
totalAssets
viewfunction totalAssets() view returns (uint256 totalManagedAssets)
unallocatedAssets
viewfunction unallocatedAssets() view returns (uint256)
URN_ADDRESS
viewfunction URN_ADDRESS() view returns (address)
vault
viewfunction vault() view returns (address)
withdrawalFeeBps
viewfunction withdrawalFeeBps() view returns (uint16)
acceptOwner
nonpayablefunction acceptOwner()
addFarm
nonpayablefunction addFarm(address stakingAddress, uint16 referralCode) returns (uint32 nextFarmIndex)
claimFarmRewards
nonpayablefunction claimFarmRewards(uint32[] farmIndexes, address incentivesReceiver)
deposit
nonpayablefunction deposit(uint256 assetsAmount) returns (uint256)
proposeNewOwner
nonpayablefunction proposeNewOwner(address account)
recoverToken
nonpayablefunction recoverToken(address token, address to, uint256 amount)
reinvest
nonpayablefunction reinvest()
removeFarm
nonpayablefunction removeFarm(uint32 farmIndex)
revokeOwnership
nonpayablefunction revokeOwnership()
setExplicitAccess
nonpayablefunction setExplicitAccess(address allowedCaller, tuple[] access)
setFarmReferralCode
nonpayablefunction setFarmReferralCode(uint32 farmIndex, uint16 referralCode)
setFeeCollector
nonpayablefunction setFeeCollector(address feeCollector_)
setPaused
nonpayablefunction setPaused(tuple updatedPaused)
setPauser
nonpayablefunction setPauser(address account, bool canPause)
setPerformanceFees
nonpayablefunction setPerformanceFees(uint16 callerFeeBps, uint16 origamiFeeBps)
setSwapper
nonpayablefunction setSwapper(address newSwapper)
setSwitchFarmCooldown
nonpayablefunction setSwitchFarmCooldown(uint32 cooldown)
switchFarms
nonpayablefunction switchFarms(uint32 newFarmIndex) returns (uint256 amountWithdrawn, uint256 amountDeposited)
withdraw
nonpayablefunction withdraw(uint256 assetsAmount, address receiver) returns (uint256 assetsWithdrawn)
events
ClaimedReward
event ClaimedReward(uint32 indexed farmIndex, address indexed rewardsToken, uint256 amountForCaller, uint256 amountForOrigami, uint256 amountForVault)
ExplicitAccessSet
event ExplicitAccessSet(address indexed account, bytes4 indexed fnSelector, bool indexed value)
FarmAdded
event FarmAdded(uint32 indexed farmIndex, address indexed stakingAddress, address indexed rewardsToken, uint16 referralCode)
FarmReferralCodeSet
event FarmReferralCodeSet(uint32 indexed farmIndex, uint16 referralCode)
FarmRemoved
event FarmRemoved(uint32 indexed farmIndex, address indexed stakingAddress, address indexed rewardsToken)
FeeBpsSet
event FeeBpsSet(uint16 depositFeeBps, uint16 withdrawalFeeBps)
FeeCollectorSet
event FeeCollectorSet(address indexed feeCollector)
InKindFees
event InKindFees(uint8 feeType, uint256 feeBps, uint256 feeAmount)
NewOwnerAccepted
event NewOwnerAccepted(address indexed oldOwner, address indexed newOwner)
NewOwnerProposed
event NewOwnerProposed(address indexed oldOwner, address indexed oldProposedOwner, address indexed newProposedOwner)
PausedSet
event PausedSet((bool investmentsPaused, bool exitsPaused) paused)
PauserSet
event PauserSet(address indexed account, bool canPause)
Reinvest
event Reinvest(uint256 amount)
SwapperSet
event SwapperSet(address indexed newSwapper)
SwitchedFarms
event SwitchedFarms(uint32 indexed oldFarmIndex, uint32 indexed newFarmIndex, uint256 amountWithdrawn, uint256 amountDeposited)
SwitchFarmCooldownSet
event SwitchFarmCooldownSet(uint32 cooldown)
TokenRecovered
event TokenRecovered(address indexed to, address indexed token, uint256 amount)
errors
BeforeCooldownEnd
error BeforeCooldownEnd()
FarmExistsAlready
error FarmExistsAlready(address stakingAddress)
FarmStillInUse
error FarmStillInUse(uint32 farmIndex)
InvalidAccess
error InvalidAccess()
InvalidAddress
error InvalidAddress(address addr)
InvalidFarm
error InvalidFarm(uint32 farmIndex)
InvalidParam
error InvalidParam()
InvalidToken
error InvalidToken(address token)
MaxFarms
error MaxFarms()
PRBMath_MulDiv_Overflow
error PRBMath_MulDiv_Overflow(uint256 x, uint256 y, uint256 denominator)
creation bytecode
0x610140604052670de0b6b3a7640000610120523480156200001f57600080fd5b50604051620046ac380380620046ac833981016040819052620000429162000773565b876200004e81620002c3565b5060016005556001600160a01b03808816608052861660e081905260408051631a48c60160e21b815290516369231804916004808201926020929091908290030181865afa158015620000a5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000cb919062000825565b6001600160a01b031660a0816001600160a01b03168152505060e0516001600160a01b0316636a6e9edf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000125573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014b919062000825565b6001600160a01b0390811660c05260e05160405163690e7c0960e01b81526000600482015291169063690e7c09906024016020604051808303816000875af11580156200019c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c2919062000825565b6001600160a01b039081166101005260068054600780548885166001600160a01b031963ffffffff808d16600160e01b0291909116600160a01b600160e01b039095169490941717909355928616640100000000026001600160c01b031990921642909116171790556127106200023a82846200084a565b61ffff1611156200025e57604051633494a40d60e21b815260040160405180910390fd5b6007805461ffff838116600160d01b0261ffff60d01b19918616600160c01b029190911663ffffffff60c01b199092169190911717905560e05160a051620002b5916001600160a01b039091169060001962000340565b505050505050505062000918565b6000546001600160a01b031615620002ee57604051633006171960e21b815260040160405180910390fd5b6001600160a01b0381166200031e57604051634726455360e11b8152600060048201526024015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b179091526200039a90859083906200041616565b62000410576040516001600160a01b0384166024820152600060448201526200040490859063095ea7b360e01b9060640160408051808303601f190181529190526020810180516001600160e01b0319939093166001600160e01b0393841617905290620004c616565b620004108482620004c6565b50505050565b6000806000846001600160a01b031684604051620004359190620008a1565b6000604051808303816000865af19150503d806000811462000474576040519150601f19603f3d011682016040523d82523d6000602084013e62000479565b606091505b5091509150818015620004a7575080511580620004a7575080806020019051810190620004a79190620008bf565b8015620004bd57506001600160a01b0385163b15155b95945050505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649082015260009062000515906001600160a01b0385169084906200059f565b905080516000148062000539575080806020019051810190620005399190620008bf565b6200059a5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840162000315565b505050565b6060620005b08484600085620005b8565b949350505050565b6060824710156200061b5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840162000315565b600080866001600160a01b03168587604051620006399190620008a1565b60006040518083038185875af1925050503d806000811462000678576040519150601f19603f3d011682016040523d82523d6000602084013e6200067d565b606091505b50909250905062000691878383876200069c565b979650505050505050565b606083156200071057825160000362000708576001600160a01b0385163b620007085760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640162000315565b5081620005b0565b620005b08383815115620007275781518083602001fd5b8060405162461bcd60e51b8152600401620003159190620008e3565b80516001600160a01b03811681146200075b57600080fd5b919050565b805161ffff811681146200075b57600080fd5b600080600080600080600080610100898b0312156200079157600080fd5b6200079c8962000743565b9750620007ac60208a0162000743565b9650620007bc60408a0162000743565b9550606089015163ffffffff81168114620007d657600080fd5b9450620007e660808a0162000743565b9350620007f660a08a0162000743565b92506200080660c08a0162000760565b91506200081660e08a0162000760565b90509295985092959890939650565b6000602082840312156200083857600080fd5b620008438262000743565b9392505050565b61ffff8181168382160190808211156200087457634e487b7160e01b600052601160045260246000fd5b5092915050565b60005b83811015620008985781810151838201526020016200087e565b50506000910152565b60008251620008b58184602087016200087b565b9190910192915050565b600060208284031215620008d257600080fd5b815180151581146200084357600080fd5b6020815260008251806020840152620009048160408501602087016200087b565b601f01601f19169190910160400192915050565b60805160a05160c05160e0516101005161012051613cc6620009e6600039600061094301526000818161074d015281816113470152818161256d0152612fd0015260008181610412015281816108b4015281816109cc01528181610b02015281816110b4015281816111f40152818161128901528181612ae10152612ce1015260008181610522015281816117390152612e260152600081816103e90152818161068e01528181611ce101526123c2015260008181610813015281816108720152610cfa0152613cc66000f3fe608060405234801561001057600080fd5b50600436106103095760003560e01c8063a42dce801161019c578063d5062310116100ee578063f209761111610097578063fbfa77cf11610071578063fbfa77cf1461080e578063fdb5a03e14610835578063ffe90f401461083d57600080fd5b8063f2097611146107e8578063f71ae0d5146107f3578063fbb090f7146107fb57600080fd5b8063e03c209c116100c8578063e03c209c146107ad578063e0b10a92146107cd578063ebbc4965146107e057600080fd5b8063d506231014610748578063d6c9b0dc1461076f578063daeccc791461077f57600080fd5b8063b6b55f2511610150578063baaaa7b11161012a578063baaaa7b114610707578063bfccf0ec1461071a578063c415b95c1461072d57600080fd5b8063b6b55f2514610676578063b8137ddf14610689578063b9d4e879146106b057600080fd5b8063a7229fd911610181578063a7229fd914610648578063ab8798271461065b578063b1f8100d1461066357600080fd5b8063a42dce8014610622578063a4478e891461063557600080fd5b806346fbf68e116102605780637719df79116102095780638da5cb5b116101e35780638da5cb5b146105cc5780639c1b2f70146105df5780639c82f2a41461060f57600080fd5b80637719df7914610583578063806827881461059657806380f51c12146105a957600080fd5b8063656bb8671161023a578063656bb8671461051d57806366c508ee146105445780637180c8ca1461057057600080fd5b806346fbf68e1461045c57806353fd88bf146104885780635b9f00161461051557600080fd5b80632b3297f9116102c257806338d52e0f1161029c57806338d52e0f146103e757806339a26f321461040d5780633df347301461043457600080fd5b80632b3297f91461038f5780632b968958146103ba578063333f90d2146103c257600080fd5b806301ffc9a7116102f357806301ffc9a71461033c57806304336bb31461035f578063167885cb1461037a57600080fd5b8062f714ce1461030e57806301e1d11414610334575b600080fd5b61032161031c3660046134a6565b610865565b6040519081526020015b60405180910390f35b610321610a44565b61034f61034a366004613506565b610a65565b604051901515815260200161032b565b610367610afd565b60405161ffff909116815260200161032b565b61038d610388366004613533565b610bac565b005b6006546103a2906001600160a01b031681565b6040516001600160a01b03909116815260200161032b565b61038d610df7565b6007546103d29063ffffffff1681565b60405163ffffffff909116815260200161032b565b7f00000000000000000000000000000000000000000000000000000000000000006103a2565b6103a27f000000000000000000000000000000000000000000000000000000000000000081565b61044761044236600461357a565b610efe565b6040805192835260208301919091520161032b565b61034f61046a366004613595565b6001600160a01b031660009081526003602052604090205460ff1690565b6105086104963660046135b2565b60408051606080820183526000808352602080840182905292840181905293845260088252928290208251938401835280546001600160a01b0390811685526001909101549081169184019190915274010000000000000000000000000000000000000000900461ffff169082015290565b60405161032b91906135cb565b6103216111ef565b6103a27f000000000000000000000000000000000000000000000000000000000000000081565b6006546103d2907801000000000000000000000000000000000000000000000000900463ffffffff1681565b61038d61057e36600461360c565b6113b7565b61038d610591366004613686565b61147f565b6103d26105a43660046136dd565b6115b6565b61034f6105b7366004613595565b60036020526000908152604090205460ff1681565b6000546103a2906001600160a01b031681565b6006546103d2907c0100000000000000000000000000000000000000000000000000000000900463ffffffff1681565b61038d61061d366004613595565b6119a6565b61038d610630366004613595565b611aaa565b61038d6106433660046136fb565b611bae565b61038d610656366004613717565b611c94565b610367600081565b61038d610671366004613595565b611db6565b6103216106843660046135b2565b611ec5565b6103a27f000000000000000000000000000000000000000000000000000000000000000081565b6007546040805161ffff78010000000000000000000000000000000000000000000000008404811682527a01000000000000000000000000000000000000000000000000000090930490921660208301520161032b565b61038d610715366004613758565b611ed4565b61038d61072836600461376a565b611f48565b6007546103a29064010000000090046001600160a01b031681565b6103a27f000000000000000000000000000000000000000000000000000000000000000081565b600454610100900460ff1661034f565b61034f61078d3660046137f2565b600160209081526000928352604080842090915290825290205460ff1681565b6107c06107bb36600461381e565b61210d565b60405161032b9190613860565b61038d6107db36600461357a565b61221f565b61038d6122f6565b60045460ff1661034f565b610321612391565b61038d61080936600461357a565b612435565b6103a27f000000000000000000000000000000000000000000000000000000000000000081565b61038d6126d3565b6006546103d29074010000000000000000000000000000000000000000900463ffffffff1681565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146108b057604051633006171960e21b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610910573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109349190613903565b90506000811561097d576109767f000000000000000000000000000000000000000000000000000000000000000061096c848261394b565b8791906000612725565b9050610980565b50835b6040517fbf0700fe000000000000000000000000000000000000000000000000000000008152306004820152600060248201526001600160a01b038581166044830152606482018390527f0000000000000000000000000000000000000000000000000000000000000000169063bf0700fe906084016020604051808303816000875af1158015610a15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a399190613903565b925050505b92915050565b6000610a4e6111ef565b610a56612391565b610a60919061395e565b905090565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f1fdfed83000000000000000000000000000000000000000000000000000000001480610a3e57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a7000000000000000000000000000000000000000000000000000000001492915050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddca3f436040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b829190613903565b905080600003610b9457600091505090565b610ba681655af3107a400060016127de565b91505090565b610bda336000357fffffffff000000000000000000000000000000000000000000000000000000001661284d565b610bf757604051633006171960e21b815260040160405180910390fd5b6000610c038284613971565b600754909150600090610c569061ffff7a01000000000000000000000000000000000000000000000000000082048116917801000000000000000000000000000000000000000000000000900416613971565b90508061ffff168261ffff161115610c9a576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600654610cc8907801000000000000000000000000000000000000000000000000900463ffffffff166128b5565b6040517fdb686a9200000000000000000000000000000000000000000000000000000000815261ffff831660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063db686a9290602401600060405180830381600087803b158015610d4657600080fd5b505af1158015610d5a573d6000803e3d6000fd5b5050600780547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000061ffff988916027fffffffff0000ffffffffffffffffffffffffffffffffffffffffffffffffffff16177a01000000000000000000000000000000000000000000000000000096909716959095029590951790935550505050565b610e25336000357fffffffff000000000000000000000000000000000000000000000000000000001661284d565b610e4257604051633006171960e21b815260040160405180910390fd5b6002546001600160a01b031661dead14610e9c576002546040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0390911660048201526024015b60405180910390fd5b600080546040516001600160a01b03909116907f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d554908390a3600080547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b600080610f2f336000357fffffffff000000000000000000000000000000000000000000000000000000001661284d565b610f4c57604051633006171960e21b815260040160405180910390fd5b600654600754610f859163ffffffff7c010000000000000000000000000000000000000000000000000000000090910481169116613993565b63ffffffff16421015610fc4576040517f0965fe8300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60065463ffffffff7801000000000000000000000000000000000000000000000000909104811690841681900361102f576040517f1450a30000000000000000000000000000000000000000000000000000000000815263ffffffff85166004820152602401610e93565b611038816128b5565b60006110438561298d565b805460018201546040517fb5331d5e000000000000000000000000000000000000000000000000000000008152306004820152600060248201526001600160a01b0392831660448201527401000000000000000000000000000000000000000090910461ffff1660648201529192507f0000000000000000000000000000000000000000000000000000000000000000169063b5331d5e90608401600060405180830381600087803b1580156110f857600080fd5b505af115801561110c573d6000803e3d6000fd5b505050506111186111ef565b92508293508463ffffffff168263ffffffff167fccd53c3896a17d52f0ed1324676dd5e0ede4403237c8fa3fcc2d979b8fbdf9cd8686604051611165929190918252602082015260400190565b60405180910390a35050600680547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000063ffffffff95861602179055600780547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000016429094169390931790925591565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166336569e776040518163ffffffff1660e01b8152600401602060405180830381865afa158015611250573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061127491906139b0565b90506000816001600160a01b0316632424be5c7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c5ce281e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113099190613903565b6040517fffffffff0000000000000000000000000000000000000000000000000000000060e084901b16815260048101919091526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001660248201526044016040805180830381865afa15801561138b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113af91906139cd565b509392505050565b6113e5336000357fffffffff000000000000000000000000000000000000000000000000000000001661284d565b61140257604051633006171960e21b815260040160405180910390fd5b6001600160a01b03821660008181526003602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fa11b5803b8a35081b8f993e0dee5bc30301a3d83f644e5ab2ff39f972f0a807f910160405180910390a25050565b6114876129fd565b6000611540826040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a0810182526006546001600160a01b039081168252928316602082015260075464010000000081049093169181019190915261ffff78010000000000000000000000000000000000000000000000008304811660608301527a010000000000000000000000000000000000000000000000000000909204909116608082015290565b9050600083815b818110156115a357868682818110611561576115616139f1565b9050602002016020810190611576919061357a565b925061159b83600860008663ffffffff16815260200190815260200160002086612a70565b600101611547565b505050506115b16001600555565b505050565b60006115e6336000357fffffffff000000000000000000000000000000000000000000000000000000001661284d565b61160357604051633006171960e21b815260040160405180910390fd5b60065461162f9074010000000000000000000000000000000000000000900463ffffffff166001613993565b905060648163ffffffff161115611672576040517fe7d84d3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0383166116ba576040517f1450a30000000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610e93565b60015b8163ffffffff16811015611731576000818152600860205260409020546001600160a01b03808616911603611729576040517ff502580c0000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610e93565b6001016116bd565b5060008390507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b03166372f702f36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561179f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117c391906139b0565b6001600160a01b03161461180b576040517f1450a30000000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610e93565b6000816001600160a01b031663d1af0c7d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561184b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186f91906139b0565b604080516060810182526001600160a01b038581168252838116602080840182815261ffff8b811686880181815263ffffffff8d166000818152600887528a9020985189547fffffffffffffffffffffffff00000000000000000000000000000000000000001690891617895593516001909801805491519888167fffffffffffffffffffff00000000000000000000000000000000000000000000909216919091177401000000000000000000000000000000000000000098909316880292909217909155600680547fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff169683029690961790955594519384529495509390891692917f40032011cd38f71f1db4539ff3abb7e04d98b006860b103a2b47b88e66e11d1e910160405180910390a4505092915050565b6119d4336000357fffffffff000000000000000000000000000000000000000000000000000000001661284d565b6119f157604051633006171960e21b815260040160405180910390fd5b6001600160a01b038116611a3c576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610e93565b6040516001600160a01b038216907f673779832598d6a388768ee342f8de96fdd5c39a468a6955377cf1405b9652b990600090a2600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b611ad8336000357fffffffff000000000000000000000000000000000000000000000000000000001661284d565b611af557604051633006171960e21b815260040160405180910390fd5b6001600160a01b038116611b38576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815260006004820152602401610e93565b6040516001600160a01b038216907f12e1d17016b94668449f97876f4a8d5cc2c19f314db337418894734037cc19d490600090a2600780546001600160a01b03909216640100000000027fffffffffffffffff0000000000000000000000000000000000000000ffffffff909216919091179055565b611bdc336000357fffffffff000000000000000000000000000000000000000000000000000000001661284d565b611bf957604051633006171960e21b815260040160405180910390fd5b6000611c048361298d565b6001810180547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff86169081029190911790915560405190815290915063ffffffff8416907f66be5b08f526b0e0cc36cb124047865903d3418ced93c1b0416f638f82562e669060200160405180910390a2505050565b611cc2336000357fffffffff000000000000000000000000000000000000000000000000000000001661284d565b611cdf57604051633006171960e21b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031603611d55576040517f961c9a4f0000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610e93565b826001600160a01b0316826001600160a01b03167f879f92dded0f26b83c3e00b12e0395dc72cfc3077343d1854ed6988edd1f909683604051611d9a91815260200190565b60405180910390a36115b16001600160a01b0384168383612bcc565b611de4336000357fffffffff000000000000000000000000000000000000000000000000000000001661284d565b611e0157604051633006171960e21b815260040160405180910390fd5b6001600160a01b038116611e4c576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610e93565b600254600080546040516001600160a01b03808616948116939216917f64420d4a41c6ed4de2bccbf33192eea18e576c5b23c79c3a722d4e9534c2e8d891a4600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000611ed082612c4c565b5090565b3360009081526003602052604090205460ff16611f0457604051633006171960e21b815260040160405180910390fd5b7f803ee193075547dae36361498f3de5e399cdb29b7e0c7b680533f3da8b733a1781604051611f339190613a20565b60405180910390a18060046115b18282613a50565b611f76336000357fffffffff000000000000000000000000000000000000000000000000000000001661284d565b611f9357604051633006171960e21b815260040160405180910390fd5b6001600160a01b038316611fde576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610e93565b604080518082019091526000808252602082015260005b828110156121065783838281811061200f5761200f6139f1565b9050604002018036038101906120259190613b00565b91508160200151151582600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b03167ff5736e75de2c751f775d4c5ed517289f77074f8c337f451ba4c0c3ed1dd7f9ad60405160405180910390a46020828101516001600160a01b03871660009081526001808452604080832087517fffffffff0000000000000000000000000000000000000000000000000000000016845290945292902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001691151591909117905501611ff5565b5050505050565b6060818067ffffffffffffffff81111561212957612129613ad1565b6040519080825280602002602001820160405280156121b557816020015b6040805161010081018252600060a0820181815260c0830182905260e083018290528252602080830182905292820181905260608201819052608082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816121475790505b50915060005b81811015612217576121f28585838181106121d8576121d86139f1565b90506020020160208101906121ed919061357a565b612d41565b838281518110612204576122046139f1565b60209081029190910101526001016121bb565b505092915050565b61224d336000357fffffffff000000000000000000000000000000000000000000000000000000001661284d565b61226a57604051633006171960e21b815260040160405180910390fd5b60405163ffffffff821681527f79a8c8930b01b620d54b4289ec196f684937339f4c2dff20275104f45c9efc679060200160405180910390a16006805463ffffffff9092167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055565b6002546001600160a01b0316331461232157604051633006171960e21b815260040160405180910390fd5b6000805460405133926001600160a01b03909216917f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d55491a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163317909155600280549091169055565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015612411573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a609190613903565b612463336000357fffffffff000000000000000000000000000000000000000000000000000000001661284d565b61248057604051633006171960e21b815260040160405180910390fd5b60065463ffffffff78010000000000000000000000000000000000000000000000009091048116908216036124e9576040517fac5fe34900000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610e93565b8063ffffffff16600003612531576040517f1450a30000000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610e93565b600061253c8261298d565b80546040517e8cc2620000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301529293509116906000908290628cc26290602401602060405180830381865afa1580156125c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e79190613903565b1115612627576040517fac5fe34900000000000000000000000000000000000000000000000000000000815263ffffffff84166004820152602401610e93565b60018201546040516001600160a01b039182169183169063ffffffff8616907f52f6b3134cda42efd04170548e5a235689152247e670abfb5d21f3d1f74c768b90600090a4505063ffffffff16600090815260086020526040902080547fffffffffffffffffffffffff000000000000000000000000000000000000000016815560010180547fffffffffffffffffffff00000000000000000000000000000000000000000000169055565b60006126dd612391565b90508015612722576126ee81612c4c565b6040518181527fc13e24d2b0a3bacd5d1a7c514125a1e27323abf7c86f6d36597f8752bbd7eed79060200160405180910390a15b50565b600061273285858561304f565b9050600182600181111561274857612748613b84565b036127d657828061275b5761275b613bb3565b848609156127d6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811015612793576001016127d6565b6040517f63a05778000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260448101849052606401610e93565b949350505050565b6000826001036127ef575082612846565b600082600181111561280357612803613b84565b0361281f5782848161281757612817613bb3565b049050612846565b83156128405782600185038161283757612837613bb3565b04600101612843565b60005b90505b9392505050565b600080546001600160a01b038481169116148061284657506001600160a01b03831660009081526001602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000008616845290915290205460ff169392505050565b63ffffffff8116156127225763ffffffff81166000908152600860209081526040808320600754825160a080820185528682528186018790528185018790526060808301889052608092830197909752845190810185526006546001600160a01b0390811682526401000000008404169581018690529384019490945261ffff780100000000000000000000000000000000000000000000000082048116958401959095527a010000000000000000000000000000000000000000000000000000900490931691810191909152612722918391612a70565b63ffffffff8116600081815260086020526040902090158015906129b9575080546001600160a01b0316155b156129f8576040517f1450a30000000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610e93565b919050565b600260055403612a69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610e93565b6002600555565b81546001600160a01b0316612a8457505050565b600182015482546040517f5877107900000000000000000000000000000000000000000000000000000000815230600482018190526000602483018190526001600160a01b039384166044840152606483019190915292821692917f000000000000000000000000000000000000000000000000000000000000000016906358771079906084016020604051808303816000875af1158015612b2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4e9190613903565b90506000806000612b6085858861315a565b919450925090508315612bc25760408051848152602081018490529081018290526001600160a01b0386169063ffffffff8a16907f5ee6919d20d62dd998902378af19440d5c2b47d5aedecef678834818e07bdfb39060600160405180910390a35b5050505050505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb000000000000000000000000000000000000000000000000000000001790526115b190849061321e565b6006547801000000000000000000000000000000000000000000000000900463ffffffff166000908152600860205260408082206001015490517f6c3dead400000000000000000000000000000000000000000000000000000000815230600482015260248101929092526044820183905274010000000000000000000000000000000000000000900461ffff1660648201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636c3dead490608401600060405180830381600087803b158015612d2d57600080fd5b505af1158015612106573d6000803e3d6000fd5b6040805161010081018252600060a0820181815260c0830182905260e0830182905282526020820181905291810182905260608101829052608081019190915260065463ffffffff7801000000000000000000000000000000000000000000000000909104811690831603612dbe57612db86111ef565b60208201525b63ffffffff82166000818152600860209081526040808320815160608101835281546001600160a01b0390811682526001909201549182169381019390935274010000000000000000000000000000000000000000900461ffff1690820152919003612eac577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea69190613903565b60408301525b80516001600160a01b0316156130495780826000018190525080600001516001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f07573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f2b9190613903565b82604001818152505080600001516001600160a01b0316637b0a47ee6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f9a9190613903565b606083015280516040517e8cc2620000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015290911690628cc26290602401602060405180830381865afa15801561301f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130439190613903565b60808301525b50919050565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff858709858702925082811083820303915050806000036130a75783828161309d5761309d613bb3565b0492505050612846565b8381106130f1576040517f63a05778000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610e93565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6000806000613181846060015161ffff16612710600088612725909392919063ffffffff16565b608085015190935061319d90869061ffff166127106000612725565b915060006131ab838561395e565b905084604001516001600160a01b031685602001516001600160a01b0316036131e2576131dd87828760200151613320565b613200565b6131f187858760200151613320565b61320087848760400151613320565b808603915061321487838760000151613320565b5093509350939050565b6000613273826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031661333a9092919063ffffffff16565b90508051600014806132945750808060200190518101906132949190613be2565b6115b1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610e93565b81156115b1576115b16001600160a01b0384168284612bcc565b6060612843848460008585600080866001600160a01b031685876040516133619190613c23565b60006040518083038185875af1925050503d806000811461339e576040519150601f19603f3d011682016040523d82523d6000602084013e6133a3565b606091505b50915091506133b4878383876133bf565b979650505050505050565b60608315613448578251600003613441576001600160a01b0385163b613441576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610e93565b50816127d6565b6127d6838381511561345d5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e939190613c3f565b6001600160a01b038116811461272257600080fd5b600080604083850312156134b957600080fd5b8235915060208301356134cb81613491565b809150509250929050565b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146129f857600080fd5b60006020828403121561351857600080fd5b612846826134d6565b803561ffff811681146129f857600080fd5b6000806040838503121561354657600080fd5b61354f83613521565b915061355d60208401613521565b90509250929050565b803563ffffffff811681146129f857600080fd5b60006020828403121561358c57600080fd5b61284682613566565b6000602082840312156135a757600080fd5b813561284681613491565b6000602082840312156135c457600080fd5b5035919050565b81516001600160a01b0390811682526020808401519091169082015260408083015161ffff169082015260608101610a3e565b801515811461272257600080fd5b6000806040838503121561361f57600080fd5b823561362a81613491565b915060208301356134cb816135fe565b60008083601f84011261364c57600080fd5b50813567ffffffffffffffff81111561366457600080fd5b6020830191508360208260051b850101111561367f57600080fd5b9250929050565b60008060006040848603121561369b57600080fd5b833567ffffffffffffffff8111156136b257600080fd5b6136be8682870161363a565b90945092505060208401356136d281613491565b809150509250925092565b600080604083850312156136f057600080fd5b823561354f81613491565b6000806040838503121561370e57600080fd5b61354f83613566565b60008060006060848603121561372c57600080fd5b833561373781613491565b9250602084013561374781613491565b929592945050506040919091013590565b60006040828403121561304957600080fd5b60008060006040848603121561377f57600080fd5b833561378a81613491565b9250602084013567ffffffffffffffff808211156137a757600080fd5b818601915086601f8301126137bb57600080fd5b8135818111156137ca57600080fd5b8760208260061b85010111156137df57600080fd5b6020830194508093505050509250925092565b6000806040838503121561380557600080fd5b823561381081613491565b915061355d602084016134d6565b6000806020838503121561383157600080fd5b823567ffffffffffffffff81111561384857600080fd5b6138548582860161363a565b90969095509350505050565b602080825282518282018190526000919060409081850190868401855b828110156138f65781516138ba8582516001600160a01b038082511683528060208301511660208401525061ffff60408201511660408301525050565b80870151606086810191909152868201516080808801919091529082015160a0870152015160c085015260e0909301929085019060010161387d565b5091979650505050505050565b60006020828403121561391557600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b81810381811115610a3e57610a3e61391c565b80820180821115610a3e57610a3e61391c565b61ffff81811683821601908082111561398c5761398c61391c565b5092915050565b63ffffffff81811683821601908082111561398c5761398c61391c565b6000602082840312156139c257600080fd5b815161284681613491565b600080604083850312156139e057600080fd5b505080516020909101519092909150565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b604081018235613a2f816135fe565b151582526020830135613a41816135fe565b80151560208401525092915050565b8135613a5b816135fe565b81547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00811691151560ff1691821783556020840135613a99816135fe565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009190911690911790151560081b61ff001617905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060408284031215613b1257600080fd5b6040516040810181811067ffffffffffffffff82111715613b5c577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052613b68836134d6565b81526020830135613b78816135fe565b60208201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600060208284031215613bf457600080fd5b8151612846816135fe565b60005b83811015613c1a578181015183820152602001613c02565b50506000910152565b60008251613c35818460208701613bff565b9190910192915050565b6020815260008251806020840152613c5e816040850160208701613bff565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea264697066735822122055fc37006c71299c8b6358799fc33184fe2e31ebd40e8620493993623db903e064736f6c63430008160033000000000000000000000000b20aae0fe007519b7ce6f090a2ab8353b3da5d8000000000000000000000000007c5500359161b81eb0dfff83097d5025d3cf5a2000000000000000000000000ce01c90de7fd1bcfa39e237fe6d8d9f569e8a6a3000000000000000000000000000000000000000000000000000000000001518000000000000000000000000068011ef7e1334c917d644abb820df8ff8c361925000000000000000000000000781b4c57100738095222bd92d37b07ed034ab69600000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064