7 txs
240 calls
constructor
constructor(address initialOwner_, address vault_, address underlyingVault_, address feeCollector_, address swapper_, uint16 performanceFeeBps_, uint48 reservesVestingDuration_, address merklRewardsDistributor_, address morphoRewardsDistributor_)
functions
areDepositsPaused
viewfunction areDepositsPaused() view returns (bool)
areWithdrawalsPaused
viewfunction areWithdrawalsPaused() view returns (bool)
asset
viewfunction asset() view returns (address)
depositedAssets
viewfunction depositedAssets() view returns (uint256)
depositFeeBps
viewfunction depositFeeBps() view returns (uint16)
explicitFunctionAccess
viewfunction explicitFunctionAccess(address, bytes4) view returns (bool)
feeCollector
viewfunction feeCollector() view returns (address)
futureVestingReserves
viewfunction futureVestingReserves() view returns (uint128)
getAllRewardTokens
viewfunction getAllRewardTokens() view returns (address[])
isPauser
viewfunction isPauser(address account) view returns (bool canPause)
lastVestingCheckpoint
viewfunction lastVestingCheckpoint() view returns (uint48)
MAX_PERFORMANCE_FEE_BPS
viewfunction MAX_PERFORMANCE_FEE_BPS() view returns (uint16)
MAX_WITHDRAWAL_FEE_BPS
viewfunction MAX_WITHDRAWAL_FEE_BPS() view returns (uint16)
maxDeposit
viewfunction maxDeposit() view returns (uint256)
maxWithdraw
viewfunction maxWithdraw() view returns (uint256)
merklRewardsDistributor
viewfunction merklRewardsDistributor() view returns (address)
morphoRewardsDistributor
viewfunction morphoRewardsDistributor() view returns (address)
owner
viewfunction owner() view returns (address)
pausers
viewfunction pausers(address account) view returns (bool canPause)
performanceFeeBps
viewfunction performanceFeeBps() view returns (uint16 forCaller, uint16 forOrigami)
reservesVestingDuration
viewfunction reservesVestingDuration() view returns (uint48)
supportsInterface
purefunction supportsInterface(bytes4 interfaceId) pure returns (bool)
swapper
viewfunction swapper() view returns (address)
totalAssets
viewfunction totalAssets() view returns (uint256 totalManagedAssets)
unallocatedAssets
viewfunction unallocatedAssets() view returns (uint256 amount)
underlyingVault
viewfunction underlyingVault() view returns (address)
vault
viewfunction vault() view returns (address)
vestingReserves
viewfunction vestingReserves() view returns (uint128)
vestingStatus
viewfunction vestingStatus() view returns (uint256 currentPeriodVested, uint256 currentPeriodUnvested, uint256 futurePeriodUnvested)
withdrawalFeeBps
viewfunction withdrawalFeeBps() view returns (uint16)
acceptOwner
nonpayablefunction acceptOwner()
deposit
nonpayablefunction deposit(uint256 assetsAmount) returns (uint256)
harvestRewards
nonpayablefunction harvestRewards(address)
merklClaim
nonpayablefunction merklClaim(address[] tokens, uint256[] amounts, bytes32[][] proofs)
merklToggleOperator
nonpayablefunction merklToggleOperator(address operator)
morphoClaim
nonpayablefunction morphoClaim(address[] tokens, uint256[] amounts, bytes32[][] proofs)
proposeNewOwner
nonpayablefunction proposeNewOwner(address account)
recoverToken
nonpayablefunction recoverToken(address token, address to, uint256 amount)
reinvest
nonpayablefunction reinvest()
revokeOwnership
nonpayablefunction revokeOwnership()
setExplicitAccess
nonpayablefunction setExplicitAccess(address allowedCaller, tuple[] access)
setFeeCollector
nonpayablefunction setFeeCollector(address _feeCollector)
setMerklRewardsDistributor
nonpayablefunction setMerklRewardsDistributor(address distributor)
setMorphoRewardsDistributor
nonpayablefunction setMorphoRewardsDistributor(address distributor)
setPaused
nonpayablefunction setPaused(tuple updatedPaused)
setPauser
nonpayablefunction setPauser(address account, bool canPause)
setPerformanceFees
nonpayablefunction setPerformanceFees(uint16 origamiFeeBps)
setReservesVestingDuration
nonpayablefunction setReservesVestingDuration(uint48 durationInSeconds)
setRewardTokens
nonpayablefunction setRewardTokens(address[] newRewardTokens)
setSwapper
nonpayablefunction setSwapper(address _swapper)
setWithdrawalFee
nonpayablefunction setWithdrawalFee(uint16 withdrawalFeeBps_)
swapCallback
nonpayablefunction swapCallback()
withdraw
nonpayablefunction withdraw(uint256 assetsAmount, address receiver) returns (uint256)
events
AssetStaked
event AssetStaked(uint256 amount)
AssetWithdrawn
event AssetWithdrawn(uint256 amount)
ClaimedReward
event ClaimedReward(address indexed rewardToken, uint256 amountForCaller, uint256 amountForOrigami, uint256 amountForVault)
ExplicitAccessSet
event ExplicitAccessSet(address indexed account, bytes4 indexed fnSelector, bool indexed value)
FeeBpsSet
event FeeBpsSet(uint16 depositFeeBps, uint16 withdrawalFeeBps)
FeeCollectorSet
event FeeCollectorSet(address indexed feeCollector)
MerklRewardsDistributorSet
event MerklRewardsDistributorSet(address indexed distributor)
MorphoRewardsDistributorSet
event MorphoRewardsDistributorSet(address indexed distributor)
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)
ReservesVestingDurationSet
event ReservesVestingDurationSet(uint48 durationInSeconds)
RewardTokensSet
event RewardTokensSet()
SwapperSet
event SwapperSet(address indexed newSwapper)
TokenRecovered
event TokenRecovered(address indexed to, address indexed token, uint256 amount)
errors
InvalidAccess
error InvalidAccess()
InvalidAddress
error InvalidAddress(address addr)
InvalidParam
error InvalidParam()
InvalidToken
error InvalidToken(address token)
Overflow
error Overflow(uint256 amount)
PRBMath_MulDiv_Overflow
error PRBMath_MulDiv_Overflow(uint256 x, uint256 y, uint256 denominator)
creation bytecode
0x60e06040523480156200001157600080fd5b5060405162003ed738038062003ed783398101604081905262000034916200069e565b8883620000418162000194565b506200004d816200023d565b5060016007556001600160a01b03808916608052871660c0819052604080516338d52e0f60e01b815290516338d52e0f916004808201926020929091908290030181865afa158015620000a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000ca91906200076e565b6001600160a01b0390811660a0526008805462010000600160b01b0319166201000088841602179055600980546001600160a01b0319169188169190911790556103e861ffff851611156200013257604051633494a40d60e21b815260040160405180910390fd5b600d805461ffff191661ffff8616179055600a80546001600160a01b03199081166001600160a01b0385811691909117909255600b805490911683831617905560a05162000185911688600019620002ba565b5050505050505050506200084a565b8065ffffffffffff16600003620001be57604051633494a40d60e21b815260040160405180910390fd5b62093a8065ffffffffffff82161115620001eb57604051633494a40d60e21b815260040160405180910390fd5b6000805465ffffffffffff191665ffffffffffff83169081179091556040519081527f0eb87b135850c065ebe6bdafb893b01896e97fea7b1969799640bc29dd8652d69060200160405180910390a150565b6002546001600160a01b0316156200026857604051633006171960e21b815260040160405180910390fd5b6001600160a01b0381166200029857604051634726455360e11b8152600060048201526024015b60405180910390fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b801580620003385750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa15801562000310573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000336919062000793565b155b620003ac5760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527f20746f206e6f6e2d7a65726f20616c6c6f77616e63650000000000000000000060648201526084016200028f565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b0390811663095ea7b360e01b17909152620004049185916200040916565b505050565b6040805180820190915260208082527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65649082015260009062000458906001600160a01b038516908490620004dd565b90508051600014806200047c5750808060200190518101906200047c9190620007ad565b620004045760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200028f565b6060620004ee8484600085620004f6565b949350505050565b606082471015620005595760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200028f565b600080866001600160a01b03168587604051620005779190620007f7565b60006040518083038185875af1925050503d8060008114620005b6576040519150601f19603f3d011682016040523d82523d6000602084013e620005bb565b606091505b509092509050620005cf87838387620005da565b979650505050505050565b606083156200064e57825160000362000646576001600160a01b0385163b620006465760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200028f565b5081620004ee565b620004ee8383815115620006655781518083602001fd5b8060405162461bcd60e51b81526004016200028f919062000815565b80516001600160a01b03811681146200069957600080fd5b919050565b60008060008060008060008060006101208a8c031215620006be57600080fd5b620006c98a62000681565b9850620006d960208b0162000681565b9750620006e960408b0162000681565b9650620006f960608b0162000681565b95506200070960808b0162000681565b945060a08a015161ffff811681146200072157600080fd5b60c08b015190945065ffffffffffff811681146200073e57600080fd5b92506200074e60e08b0162000681565b91506200075f6101008b0162000681565b90509295985092959850929598565b6000602082840312156200078157600080fd5b6200078c8262000681565b9392505050565b600060208284031215620007a657600080fd5b5051919050565b600060208284031215620007c057600080fd5b815180151581146200078c57600080fd5b60005b83811015620007ee578181015183820152602001620007d4565b50506000910152565b600082516200080b818460208701620007d1565b9190910192915050565b602081526000825180602084015262000836816040850160208701620007d1565b601f01601f19169190910160400192915050565b60805160a05160c0516135f4620008e36000396000818161073a015281816108cb015281816110bf015281816112770152818161180601528181611a060152818161220501526125630152600081816104bb01528181611e83015281816121ca0152818161242701526124cc0152600081816107e00152818161080f015281816110570152818161195a01526125f901526135f46000f3fe608060405234801561001057600080fd5b50600436106103565760003560e01c8063861b3030116101c8578063b9d4e87911610104578063daeccc79116100a2578063f20976111161007c578063f2097611146107c8578063f71ae0d5146107d3578063fbfa77cf146107db578063fdb5a03e1461058b57600080fd5b8063daeccc791461077f578063e767e883146107ad578063ebbc4965146107c057600080fd5b8063bfccf0ec116100de578063bfccf0ec14610722578063c26af9d814610735578063c415b95c1461075c578063d6c9b0dc1461076f57600080fd5b8063b9d4e879146106e1578063baaaa7b1146106fd578063bef259a01461071057600080fd5b8063a80ce6aa11610171578063ac7a1b5b1161014b578063ac7a1b5b146106aa578063b1f8100d146106b2578063b6783edd146106c5578063b6b55f25146106ce57600080fd5b8063a80ce6aa1461067c578063a997b7e91461068f578063ab879827146106a257600080fd5b8063a42dce80116101a2578063a42dce8014610623578063a49e128214610636578063a7229fd91461066957600080fd5b8063861b3030146105f55780638da5cb5b146105fd5780639c82f2a41461061057600080fd5b806338d52e0f116102975780635d4deb1b11610240578063708891651161021a57806370889165146105935780637180c8ca1461059c5780637f6b98e4146105af57806380f51c12146105d257600080fd5b80635d4deb1b146105705780636083e59a146105835780636a68c7181461058b57600080fd5b806352bcbed81161027157806352bcbed81461051e5780635b5d4d78146105315780635ce2c6601461054457600080fd5b806338d52e0f146104b957806346fbf68e146104df578063515ce5171461050b57600080fd5b806316d88b36116103045780632096a7be116102de5780632096a7be1461045a5780632b3297f91461046d5780632b9689581461049e5780632d26ee1f146104a657600080fd5b806316d88b361461041f578063201e81a8146104345780632036d40d1461044757600080fd5b806304336bb31161033557806304336bb3146103ac57806312edb24c146103cd578063145dc24c146103e257600080fd5b8062f714ce1461035b57806301e1d1141461038157806301ffc9a714610389575b600080fd5b61036e610369366004612ce4565b610802565b6040519081526020015b60405180910390f35b61036e610943565b61039c610397366004612d40565b61095a565b6040519015158152602001610378565b6008546103ba9061ffff1681565b60405161ffff9091168152602001610378565b6103d5610a8a565b6040516103789190612da0565b6001546103fe906fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff9091168152602001610378565b61043261042d366004612db3565b610aec565b005b610432610442366004612e1a565b610b99565b610432610455366004612db3565b610c1e565b610432610468366004612e5c565b610ceb565b600854610486906201000090046001600160a01b031681565b6040516001600160a01b039091168152602001610378565b610432610d42565b6104326104b4366004612e84565b610e4c565b7f0000000000000000000000000000000000000000000000000000000000000000610486565b61039c6104ed366004612db3565b6001600160a01b031660009081526005602052604090205460ff1690565b610432610519366004612db3565b610f49565b600a54610486906001600160a01b031681565b600b54610486906001600160a01b031681565b6000546103fe906c0100000000000000000000000090046fffffffffffffffffffffffffffffffff1681565b61043261057e366004612e84565b610f63565b61036e61108e565b610432611133565b6103ba6103e881565b6104326105aa366004612eb6565b61114f565b6105b7611217565b60408051938452602084019290925290820152606001610378565b61039c6105e0366004612db3565b60056020526000908152604090205460ff1681565b61036e611246565b600254610486906001600160a01b031681565b61043261061e366004612db3565b611310565b610432610631366004612db3565b611412565b600054610652906601000000000000900465ffffffffffff1681565b60405165ffffffffffff9091168152602001610378565b610432610677366004612eed565b61150e565b61043261068a366004612f29565b61160a565b61043261069d366004612db3565b611728565b6103ba600081565b61036e6117d5565b6104326106c0366004612db3565b61183d565b6103ba61014a81565b61036e6106dc366004612fc3565b61194d565b600d54604080516000815261ffff909216602083015201610378565b61043261070b366004612fdc565b611a85565b6000546106529065ffffffffffff1681565b610432610730366004612fee565b611af9565b6104867f000000000000000000000000000000000000000000000000000000000000000081565b600954610486906001600160a01b031681565b600654610100900460ff1661039c565b61039c61078d366004613074565b600360209081526000928352604080842090915290825290205460ff1681565b6104326107bb366004612f29565b611cb9565b610432611db7565b60065460ff1661039c565b61036e611e52565b6104867f000000000000000000000000000000000000000000000000000000000000000081565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461084d57604051633006171960e21b815260040160405180910390fd5b821561093a576040518381527ffed52588a293bfbfe063ecf774b10baf4cd9a4b6eeb437c97a3cc725e008b3c79060200160405180910390a16040517fb460af94000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b0383811660248301523060448301527f0000000000000000000000000000000000000000000000000000000000000000169063b460af94906064016020604051808303816000875af1158015610914573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610938919061309e565b505b50815b92915050565b6000610955610950611246565b611f13565b905090565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a70000000000000000000000000000000000000000000000000000000014806109ed57507fffffffff0000000000000000000000000000000000000000000000000000000082167f7dcf000b00000000000000000000000000000000000000000000000000000000145b80610a3957507fffffffff0000000000000000000000000000000000000000000000000000000082167f698ce5e400000000000000000000000000000000000000000000000000000000145b8061093d57507fffffffff0000000000000000000000000000000000000000000000000000000082167f2b915019000000000000000000000000000000000000000000000000000000001492915050565b6060600c805480602002602001604051908101604052809291908181526020018280548015610ae257602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ac4575b5050505050905090565b610b1a336000357fffffffff0000000000000000000000000000000000000000000000000000000016611f60565b610b3757604051633006171960e21b815260040160405180910390fd5b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517fe0e9cf3cde8e482c4257bc173c0a8ec4017a184af45bc1c4fb8ff45588f0bf9490600090a250565b610bc7336000357fffffffff0000000000000000000000000000000000000000000000000000000016611f60565b610be457604051633006171960e21b815260040160405180910390fd5b610bf0600c8383612c46565b506040517f0e8bbac3d3dfc436fbf58805d767426341431a959361a71f33737c7737409ba390600090a15050565b610c4c336000357fffffffff0000000000000000000000000000000000000000000000000000000016611f60565b610c6957604051633006171960e21b815260040160405180910390fd5b600a546040517fbdac7ca30000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b0383811660248301529091169063bdac7ca3906044015b600060405180830381600087803b158015610cd057600080fd5b505af1158015610ce4573d6000803e3d6000fd5b5050505050565b610d19336000357fffffffff0000000000000000000000000000000000000000000000000000000016611f60565b610d3657604051633006171960e21b815260040160405180910390fd5b610d3f81611fcb565b50565b610d70336000357fffffffff0000000000000000000000000000000000000000000000000000000016611f60565b610d8d57604051633006171960e21b815260040160405180910390fd5b6004546001600160a01b031661dead14610dea57600480546040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b03909116918101919091526024015b60405180910390fd5b6002546040516000916001600160a01b0316907f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d554908390a3600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055565b610e7a336000357fffffffff0000000000000000000000000000000000000000000000000000000016611f60565b610e9757604051633006171960e21b815260040160405180910390fd5b61014a61ffff82161115610ed7576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080516000815261ffff831660208201527f4791562d259a08c64fef49ff6bef502e6c8f342eb8d4c8f90da367929ab1602d910160405180910390a1600880547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff92909216919091179055565b610f516120bd565b610f59612130565b610d3f6001600755565b610f91336000357fffffffff0000000000000000000000000000000000000000000000000000000016611f60565b610fae57604051633006171960e21b815260040160405180910390fd5b6103e861ffff82161115610fee576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ff6612130565b600d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff83169081179091556040517fdb686a9200000000000000000000000000000000000000000000000000000000815260048101919091527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063db686a9290602401610cb6565b6040517f402d267d0000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063402d267d906024015b602060405180830381865afa15801561110f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610955919061309e565b61113b6120bd565b611143612130565b61114d6001600755565b565b61117d336000357fffffffff0000000000000000000000000000000000000000000000000000000016611f60565b61119a57604051633006171960e21b815260040160405180910390fd5b6001600160a01b03821660008181526005602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fa11b5803b8a35081b8f993e0dee5bc30301a3d83f644e5ab2ff39f972f0a807f910160405180910390a25050565b600080600061122461214d565b60015491959094506fffffffffffffffffffffffffffffffff90911692509050565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690634cdad5069082906370a0823190602401602060405180830381865afa1580156112ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f2919061309e565b6040518263ffffffff1660e01b81526004016110f291815260200190565b61133e336000357fffffffff0000000000000000000000000000000000000000000000000000000016611f60565b61135b57604051633006171960e21b815260040160405180910390fd5b6001600160a01b03811661139e576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815260006004820152602401610de1565b6040516001600160a01b038216907f673779832598d6a388768ee342f8de96fdd5c39a468a6955377cf1405b9652b990600090a2600880546001600160a01b0390921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff909216919091179055565b611440336000357fffffffff0000000000000000000000000000000000000000000000000000000016611f60565b61145d57604051633006171960e21b815260040160405180910390fd5b6001600160a01b0381166114a0576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815260006004820152602401610de1565b6040516001600160a01b038216907f12e1d17016b94668449f97876f4a8d5cc2c19f314db337418894734037cc19d490600090a2600980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b61153c336000357fffffffff0000000000000000000000000000000000000000000000000000000016611f60565b61155957604051633006171960e21b815260040160405180910390fd5b611562836121c6565b156115a4576040517f961c9a4f0000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610de1565b826001600160a01b0316826001600160a01b03167f879f92dded0f26b83c3e00b12e0395dc72cfc3077343d1854ed6988edd1f9096836040516115e991815260200190565b60405180910390a36116056001600160a01b038416838361223e565b505050565b60008567ffffffffffffffff811115611625576116256130b7565b60405190808252806020026020018201604052801561164e578160200160208202803683370190505b50905060005b8681101561168f573082828151811061166f5761166f6130e6565b6001600160a01b0390921660209283029190910190910152600101611654565b50600a546040517f71ee95c00000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906371ee95c0906116e59084908b908b908b908b908b908b90600401613160565b600060405180830381600087803b1580156116ff57600080fd5b505af1158015611713573d6000803e3d6000fd5b5050505061171f612130565b50505050505050565b611756336000357fffffffff0000000000000000000000000000000000000000000000000000000016611f60565b61177357604051633006171960e21b815260040160405180910390fd5b600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517f17a60d20943a40b25eeedd2ac852aa968ac10b47c63b47972135f0635d527b2490600090a250565b6040517fce96cb770000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063ce96cb77906024016110f2565b61186b336000357fffffffff0000000000000000000000000000000000000000000000000000000016611f60565b61188857604051633006171960e21b815260040160405180910390fd5b6001600160a01b0381166118d3576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610de1565b6004546002546040516001600160a01b038085169381169216907f64420d4a41c6ed4de2bccbf33192eea18e576c5b23c79c3a722d4e9534c2e8d890600090a4600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461199857604051633006171960e21b815260040160405180910390fd5b8115611a7d576040518281527fd3e1e47136f1dafe70294223d06ac7d928dbb25d913da852f40f3c5e3dee1cd89060200160405180910390a16040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481018390523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636e553f65906044016020604051808303816000875af1158015611a57573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7b919061309e565b505b50805b919050565b3360009081526005602052604090205460ff16611ab557604051633006171960e21b815260040160405180910390fd5b7f803ee193075547dae36361498f3de5e399cdb29b7e0c7b680533f3da8b733a1781604051611ae491906132a8565b60405180910390a180600661160582826132d8565b611b27336000357fffffffff0000000000000000000000000000000000000000000000000000000016611f60565b611b4457604051633006171960e21b815260040160405180910390fd5b6001600160a01b038316611b8f576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610de1565b604080518082019091526000808252602082015260005b82811015610ce457838382818110611bc057611bc06130e6565b905060400201803603810190611bd69190613359565b91508160200151151582600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b03167ff5736e75de2c751f775d4c5ed517289f77074f8c337f451ba4c0c3ed1dd7f9ad60405160405180910390a46020828101516001600160a01b038716600090815260038352604080822086517fffffffff000000000000000000000000000000000000000000000000000000001683529093529190912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055600101611ba6565b60005b85811015611da657600b546001600160a01b031663fabed41230898985818110611ce857611ce86130e6565b9050602002016020810190611cfd9190612db3565b888886818110611d0f57611d0f6130e6565b90506020020135878787818110611d2857611d286130e6565b9050602002810190611d3a91906133dd565b6040518663ffffffff1660e01b8152600401611d5a959493929190613445565b6020604051808303816000875af1158015611d79573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9d919061309e565b50600101611cbc565b50611daf612130565b505050505050565b6004546001600160a01b03163314611de257604051633006171960e21b815260040160405180910390fd5b60025460405133916001600160a01b0316907f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d55490600090a3600280547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163317909155600480549091169055565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015611ed2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef6919061309e565b600d54909150611f0d90829061ffff1660006122be565b50919050565b600080611f1e61214d565b60015490925060009150611f44906fffffffffffffffffffffffffffffffff1683613478565b9050808411611f54576000611f58565b8084035b949350505050565b6002546000906001600160a01b0384811691161480611fc457506001600160a01b03831660009081526003602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000008616845290915290205460ff165b9392505050565b8065ffffffffffff1660000361200d576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b62093a8065ffffffffffff82161115612052576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000001665ffffffffffff83169081179091556040519081527f0eb87b135850c065ebe6bdafb893b01896e97fea7b1969799640bc29dd8652d69060200160405180910390a150565b600260075403612129576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610de1565b6002600755565b6121386122ee565b60006121426123ec565b9050610d3f8161264d565b60008054819065ffffffffffff808216916601000000000000810482164203916c010000000000000000000000009091046fffffffffffffffffffffffffffffffff169082168311156121b7576121b28165ffffffffffff80851690861660006127b6565b6121b9565b805b9590869003945092505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316148061093d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161492915050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000179052611605908490612867565b600080836000036122d4575083905060006122e6565b6122df858585612969565b9150508084035b935093915050565b600c54600080805b838110156123e657600c8181548110612311576123116130e6565b6000918252602090912001546001600160a01b03169250612331836121c6565b6123de576040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015612392573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b6919061309e565b915081156123de576008546123de906001600160a01b0385811691620100009004168461223e565b6001016122f6565b50505050565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015260009081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa15801561246e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612492919061309e565b9050801561264957600d546000906124b090839061ffff16836122be565b909350905080156124f5576009546124f5906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811691168361223e565b82156125da576040518381527fd3e1e47136f1dafe70294223d06ac7d928dbb25d913da852f40f3c5e3dee1cd89060200160405180910390a16040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481018490523060248201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690636e553f65906044016020604051808303816000875af11580156125b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d8919061309e565b505b6040805160008152602081018390529081018490526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016907fe741d50400f94fd143e9063dbb3dab1f4a54c09ce5b7e7f77f628cdd1dd57edf9060600160405180910390a2505b5090565b600154600090612679906126749084906fffffffffffffffffffffffffffffffff16613478565b612996565b9050806fffffffffffffffffffffffffffffffff16600003612699575050565b60005465ffffffffffff66010000000000008204811642908103929091908116908316101561270357600180547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff85161790556123e6565b6000805465ffffffffffff83166601000000000000027fffffffffffffffffffffffffffffffffffffffff000000000000ffffffffffff6fffffffffffffffffffffffffffffffff87166c0100000000000000000000000002167fffffffff00000000000000000000000000000000000000000000ffffffffffff90921691909117179055600180547fffffffffffffffffffffffffffffffff0000000000000000000000000000000016905550505050565b60006127c38585856129e5565b905060018260018111156127d9576127d96134b2565b03611f585782806127ec576127ec6134e1565b84860915611f58577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81101561282457600101611f58565b6040517f63a05778000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260448101849052606401610de1565b60006128bc826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316612aef9092919063ffffffff16565b90508051600014806128dd5750808060200190518101906128dd9190613510565b611605576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610de1565b600061271083810390841061297f57600061298d565b61298d8582612710866127b6565b95945050505050565b60006fffffffffffffffffffffffffffffffff821115611a7d576040517fe0fb6a7c00000000000000000000000000000000000000000000000000000000815260048101839052602401610de1565b600080807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff85870985870292508281108382030391505080600003612a3d57838281612a3357612a336134e1565b0492505050611fc4565b838110612a87576040517f63a05778000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610de1565b600084868809600260036001881981018916988990049182028318808302840302808302840302808302840302808302840302808302840302918202909203026000889003889004909101858311909403939093029303949094049190911702949350505050565b6060611f58848460008585600080866001600160a01b03168587604051612b169190613551565b60006040518083038185875af1925050503d8060008114612b53576040519150601f19603f3d011682016040523d82523d6000602084013e612b58565b606091505b5091509150612b6987838387612b74565b979650505050505050565b60608315612bfd578251600003612bf6576001600160a01b0385163b612bf6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610de1565b5081611f58565b611f588383815115612c125781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de1919061356d565b828054828255906000526020600020908101928215612cb1579160200282015b82811115612cb15781547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03843516178255602090920191600190910190612c66565b506126499291505b808211156126495760008155600101612cb9565b80356001600160a01b0381168114611a8057600080fd5b60008060408385031215612cf757600080fd5b82359150612d0760208401612ccd565b90509250929050565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114611a8057600080fd5b600060208284031215612d5257600080fd5b611fc482612d10565b60008151808452602080850194506020840160005b83811015612d955781516001600160a01b031687529582019590820190600101612d70565b509495945050505050565b602081526000611fc46020830184612d5b565b600060208284031215612dc557600080fd5b611fc482612ccd565b60008083601f840112612de057600080fd5b50813567ffffffffffffffff811115612df857600080fd5b6020830191508360208260051b8501011115612e1357600080fd5b9250929050565b60008060208385031215612e2d57600080fd5b823567ffffffffffffffff811115612e4457600080fd5b612e5085828601612dce565b90969095509350505050565b600060208284031215612e6e57600080fd5b813565ffffffffffff81168114611fc457600080fd5b600060208284031215612e9657600080fd5b813561ffff81168114611fc457600080fd5b8015158114610d3f57600080fd5b60008060408385031215612ec957600080fd5b612ed283612ccd565b91506020830135612ee281612ea8565b809150509250929050565b600080600060608486031215612f0257600080fd5b612f0b84612ccd565b9250612f1960208501612ccd565b9150604084013590509250925092565b60008060008060008060608789031215612f4257600080fd5b863567ffffffffffffffff80821115612f5a57600080fd5b612f668a838b01612dce565b90985096506020890135915080821115612f7f57600080fd5b612f8b8a838b01612dce565b90965094506040890135915080821115612fa457600080fd5b50612fb189828a01612dce565b979a9699509497509295939492505050565b600060208284031215612fd557600080fd5b5035919050565b600060408284031215611f0d57600080fd5b60008060006040848603121561300357600080fd5b61300c84612ccd565b9250602084013567ffffffffffffffff8082111561302957600080fd5b818601915086601f83011261303d57600080fd5b81358181111561304c57600080fd5b8760208260061b850101111561306157600080fd5b6020830194508093505050509250925092565b6000806040838503121561308757600080fd5b61309083612ccd565b9150612d0760208401612d10565b6000602082840312156130b057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b81835260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83111561314757600080fd5b8260051b80836020870137939093016020019392505050565b608081526000613173608083018a612d5b565b8281036020848101919091528882528991810160005b8a8110156131b5576001600160a01b036131a285612ccd565b1682529282019290820190600101613189565b5084810360408601526131c981898b613115565b8581036060870152868152925050808201600586811b840183018860005b89811015613294577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe087840301855281357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18c360301811261324857600080fd5b8b01868101903567ffffffffffffffff81111561326457600080fd5b80861b360382131561327557600080fd5b613280858284613115565b9688019694505050908501906001016131e7565b50909e9d5050505050505050505050505050565b6040810182356132b781612ea8565b1515825260208301356132c981612ea8565b80151560208401525092915050565b81356132e381612ea8565b81547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00811691151560ff169182178355602084013561332181612ea8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009190911690911790151560081b61ff001617905550565b60006040828403121561336b57600080fd5b6040516040810181811067ffffffffffffffff821117156133b5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040526133c183612d10565b815260208301356133d181612ea8565b60208201529392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261341257600080fd5b83018035915067ffffffffffffffff82111561342d57600080fd5b6020019150600581901b3603821315612e1357600080fd5b60006001600160a01b03808816835280871660208401525084604083015260806060830152612b69608083018486613115565b8082018082111561093d577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006020828403121561352257600080fd5b8151611fc481612ea8565b60005b83811015613548578181015183820152602001613530565b50506000910152565b6000825161356381846020870161352d565b9190910192915050565b602081526000825180602084015261358c81604085016020870161352d565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fea2646970667358221220c064b41babf88321fa793960bfe6dc0b31c733963395a4390e71376f622495bf64736f6c63430008160033000000000000000000000000b20aae0fe007519b7ce6f090a2ab8353b3da5d80000000000000000000000000b50201998b92d2e685432b90331bb5825415926e000000000000000000000000def1fce2df6270fdf7e1214343bebbab8583d43d000000000000000000000000781b4c57100738095222bd92d37b07ed034ab6960000000000000000000000004a8fa332276d2ce3fc948d6a680458c18e5c88a600000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000151800000000000000000000000003ef3d8ba38ebe18db133cec108f4d14ce00dd9ae0000000000000000000000000000000000000000000000000000000000000000