0 txs
119 calls
constructor
constructor(address swapper_)
functions
balanceOf
viewfunction balanceOf(address account, uint256 id) view returns (uint256)
balanceOfBatch
viewfunction balanceOfBatch(address[] accounts, uint256[] ids) view returns (uint256[])
exists
viewfunction exists(uint256 id) view returns (bool)
isApprovedForAll
viewfunction isApprovedForAll(address account, address operator) view returns (bool)
lastTotalAssets
viewfunction lastTotalAssets() view returns (uint256)
lastTotalAssetsTimestamp
viewfunction lastTotalAssetsTimestamp() view returns (uint64)
lastTotalAssetsUpdateInterval
viewfunction lastTotalAssetsUpdateInterval() view returns (uint64)
strategyAssets
viewfunction strategyAssets(uint256 index) view returns (uint256)
strategyRewards
viewfunction strategyRewards(uint256 index) view returns (tuple[] rewards)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
swapper
viewfunction swapper() view returns (address)
totalAssets
viewfunction totalAssets() view returns (uint256 assets)
totalSupply
viewfunction totalSupply() view returns (uint256)
totalSupply
viewfunction totalSupply(uint256 id) view returns (uint256)
underlyingAsset
viewfunction underlyingAsset() view returns (address)
underlyingBalance
viewfunction underlyingBalance() view returns (uint256)
uri
viewfunction uri(uint256) view returns (string)
yieldExtractor
viewfunction yieldExtractor() view returns (address)
accrueFee
nonpayablefunction accrueFee()
claimStrategyRewards
nonpayablefunction claimStrategyRewards(uint256 index)
deposit
nonpayablefunction deposit(uint256 assets, uint256 projectId, address receiver) returns (uint256 shares)
managedDeposit
nonpayablefunction managedDeposit(tuple strategyArgs)
managedWithdraw
nonpayablefunction managedWithdraw(tuple strategyArgs)
migratePosition
nonpayablefunction migratePosition(uint256 fromProjectId, uint256 toProjectId, uint256 amount)
reallocate
nonpayablefunction reallocate(tuple[] withdrawals, tuple[] deposits)
redeem
nonpayablefunction redeem(uint256 shares, uint256 projectId, address receiver) returns (uint256 assets)
safeBatchTransferFrom
nonpayablefunction safeBatchTransferFrom(address from, address to, uint256[] ids, uint256[] values, bytes data)
safeTransferFrom
nonpayablefunction safeTransferFrom(address from, address to, uint256 id, uint256 value, bytes data)
setApprovalForAll
nonpayablefunction setApprovalForAll(address operator, bool approved)
setLastTotalAssetsUpdateInterval
nonpayablefunction setLastTotalAssetsUpdateInterval(uint64 interval)
setYieldExtractor
nonpayablefunction setYieldExtractor(address _yieldExtractor)
swapRewards
nonpayablefunction swapRewards(tuple[] swapArgs) returns (uint256 compounded)
events
AccrueInterest
event AccrueInterest(uint256 newTotalAssets, uint256 interest, uint256 feeShares)
ApprovalForAll
event ApprovalForAll(address indexed account, address indexed operator, bool approved)
Compounded
event Compounded(uint256 amount)
Deposit
event Deposit(uint256 indexed projectId, address indexed sender, address indexed receiver, uint256 assets, uint256 shares)
Initialized
event Initialized(uint64 version)
ManagedDeposit
event ManagedDeposit(bytes32 indexed strategy, uint256 amount)
ManagedWithdraw
event ManagedWithdraw(bytes32 indexed strategy, uint256 amount)
PositionMigrated
event PositionMigrated(address indexed account, uint256 indexed fromProjectId, uint256 indexed toProjectId, uint256 shares)
Redeem
event Redeem(uint256 indexed projectId, address indexed sender, address indexed receiver, uint256 assets, uint256 shares)
TransferBatch
event TransferBatch(address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values)
TransferSingle
event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value)
UpdateLastTotalAssets
event UpdateLastTotalAssets(uint256 lastTotalAssets)
UpdateLastTotalAssetsUpdateInterval
event UpdateLastTotalAssetsUpdateInterval(uint256 newInterval)
UpdateYieldExtractor
event UpdateYieldExtractor(address newYieldExtractor)
URI
event URI(string value, uint256 indexed id)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
CompoundUnderlyingForbidden
error CompoundUnderlyingForbidden()
ERC1155InsufficientBalance
error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId)
ERC1155InvalidApprover
error ERC1155InvalidApprover(address approver)
ERC1155InvalidArrayLength
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength)
ERC1155InvalidOperator
error ERC1155InvalidOperator(address operator)
ERC1155InvalidReceiver
error ERC1155InvalidReceiver(address receiver)
ERC1155InvalidSender
error ERC1155InvalidSender(address sender)
ERC1155MissingApprovalForAll
error ERC1155MissingApprovalForAll(address operator, address owner)
FailedCall
error FailedCall()
InvalidInitialization
error InvalidInitialization()
MinRedeem
error MinRedeem()
NotEnoughInternalFunds
error NotEnoughInternalFunds()
NotInitializing
error NotInitializing()
OnlyView
error OnlyView()
Paused
error Paused(bytes4 selector)
PositionMigrationForbidden
error PositionMigrationForbidden()
ProjectInactive
error ProjectInactive()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
TotalAssetsLoss
error TotalAssetsLoss()
creation bytecode
0x60a0604052348015600e575f5ffd5b5060405161457d38038061457d833981016040819052602b91603b565b6001600160a01b03166080526066565b5f60208284031215604a575f5ffd5b81516001600160a01b0381168114605f575f5ffd5b9392505050565b6080516144f161008c5f395f81816102bc01528181611ca00152611d2f01526144f15ff3fe608060405234801561000f575f5ffd5b50600436106101e6575f3560e01c806369aba22f11610109578063bd85b0391161009e578063e985e9c51161006e578063e985e9c514610562578063eaa17e6e146105bc578063f0a83798146105cf578063f242432a146105ef575f5ffd5b8063bd85b03914610516578063bfd4e2e214610529578063d1411ae91461053c578063dc934b6a1461054f575f5ffd5b8063abba4332116100d9578063abba43321461044c578063b20ef946146104ae578063b26cc394146104fb578063b2db983a14610503575f5ffd5b806369aba22f146103e35780637158da7c146103f65780638dbdbe6d14610426578063a22cb46514610439575f5ffd5b80632eb2c2d61161017f5780634e1273f41161014f5780634e1273f41461032e5780634f558e791461034e578063568efc071461036157806359356c5c146103a2575f5ffd5b80632eb2c2d6146102e05780633f1b327f146102f557806342f73465146103085780634871291b1461031b575f5ffd5b80630e89341c116101ba5780630e89341c1461024e5780630f306b3a1461026e57806318160ddd146102b25780632b3297f9146102ba575f5ffd5b8062fdd58e146101ea57806301e1d1141461021057806301ffc9a714610218578063049104e51461023b575b5f5ffd5b6101fd6101f83660046137f6565b610602565b6040519081526020015b60405180910390f35b6101fd61064a565b61022b61022636600461384d565b6106da565b6040519015158152602001610207565b6101fd610249366004613868565b6107bc565b61026161025c36600461389e565b610da0565b60405161020791906138e3565b7fe9f6622f42b3306a25789276a3506ebaae4fda2335fb5bfa8bfd419c0dde8103546001600160a01b03165b6040516001600160a01b039091168152602001610207565b6101fd610e75565b7f000000000000000000000000000000000000000000000000000000000000000061029a565b6102f36102ee366004613a98565b610ea3565b005b6102f3610303366004613b4b565b610f65565b6102f3610316366004613b74565b6110bf565b6102f3610329366004613b8f565b61121d565b61034161033c366004613bb6565b611300565b6040516102079190613cb5565b61022b61035c36600461389e565b6113e4565b7fe9f6622f42b3306a25789276a3506ebaae4fda2335fb5bfa8bfd419c0dde81015477ffffffffffffffffffffffffffffffffffffffffffffffff166101fd565b7fe9f6622f42b3306a25789276a3506ebaae4fda2335fb5bfa8bfd419c0dde81005477ffffffffffffffffffffffffffffffffffffffffffffffff166101fd565b6102f36103f136600461389e565b6113f6565b7fe9f6622f42b3306a25789276a3506ebaae4fda2335fb5bfa8bfd419c0dde8102546001600160a01b031661029a565b6101fd610434366004613868565b611573565b6102f3610447366004613cc7565b6119b4565b7fe9f6622f42b3306a25789276a3506ebaae4fda2335fb5bfa8bfd419c0dde8100547801000000000000000000000000000000000000000000000000900467ffffffffffffffff165b60405167ffffffffffffffff9091168152602001610207565b7fe9f6622f42b3306a25789276a3506ebaae4fda2335fb5bfa8bfd419c0dde8101547801000000000000000000000000000000000000000000000000900467ffffffffffffffff16610495565b6102f36119c3565b6101fd61051136600461389e565b611a16565b6101fd61052436600461389e565b611a20565b6102f3610537366004613d02565b611a52565b6101fd61054a366004613d1b565b611ae7565b6102f361055d366004613e73565b611ea6565b61022b610570366004613edf565b6001600160a01b039182165f9081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45016020908152604080832093909416825291909152205460ff1690565b6102f36105ca366004613d02565b611fa3565b6105e26105dd36600461389e565b612038565b6040516102079190613f0b565b6102f36105fd366004613f62565b612176565b5f8181527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4500602090815260408083206001600160a01b03861684529091529020545b92915050565b7fe9f6622f42b3306a25789276a3506ebaae4fda2335fb5bfa8bfd419c0dde8100805477ffffffffffffffffffffffffffffffffffffffffffffffff16907fe63bd6ac2e2e77423b5d37c9b15c55e67bb68fc23e21066ec76e46b260bfb1005f5b60028201548110156106d4576106c08161222b565b6106ca9085613fe7565b93506001016106ab565b50505090565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082167fd9b67a2600000000000000000000000000000000000000000000000000000000148061076c57507fffffffff0000000000000000000000000000000000000000000000000000000082167f0e89341c00000000000000000000000000000000000000000000000000000000145b8061064457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610644565b5f6107c5612327565b7fe9f6622f42b3306a25789276a3506ebaae4fda2335fb5bfa8bfd419c0dde81007fe63bd6ac2e2e77423b5d37c9b15c55e67bb68fc23e21066ec76e46b260bfb1005f610811836123db565b90506108258761081f610e75565b836124be565b9350600a8411610861576040517f95f0d97300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61087683858303868411026124db565b6124db565b5f5f5b6005840154811015610b89575f6108908388613ffa565b9050600a81116108a05750610b89565b5f856002018660050184815481106108ba576108ba61400d565b905f5260205f200154815481106108d3576108d361400d565b905f5260205f2090600302015f015f9054906101000a90046001600160a01b03166001600160a01b03166374978231308860020189600501878154811061091c5761091c61400d565b905f5260205f200154815481106109355761093561400d565b905f5260205f2090600302016002016040518363ffffffff1660e01b815260040161096192919061415a565b602060405180830381865afa15801561097c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109a0919061417b565b9050805f036109b0575050610b81565b5f82821183831802821890505f5f886002018960050187815481106109d7576109d761400d565b905f5260205f200154815481106109f0576109f061400d565b5f91825260209091206003909102015460058a0180546001600160a01b03909216917f030ba25d0000000000000000000000000000000000000000000000000000000091869160028e0191908b908110610a4c57610a4c61400d565b905f5260205f20015481548110610a6557610a6561400d565b905f5260205f209060030201600201604051602401610a85929190614192565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909416939093179092529051610af091906141aa565b5f60405180830381855af49150503d805f8114610b28576040519150601f19603f3d011682016040523d82523d5f602084013e610b2d565b606091505b50915091508115610b7b57610b5481806020019051810190610b4f919061417b565b612566565b610b789077ffffffffffffffffffffffffffffffffffffffffffffffff1688613fe7565b96505b50505050505b600101610879565b50610b9381612566565b845485905f90610bbe90849077ffffffffffffffffffffffffffffffffffffffffffffffff166141c0565b92506101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff1602179055505f610c1882876124d290919063ffffffff16565b90505f600a8211610c3257610c2d8288613ffa565b610c34565b865b86549091508190610c6190600a9077ffffffffffffffffffffffffffffffffffffffffffffffff16613fe7565b1015610c99576040517f211bdcce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b855477ffffffffffffffffffffffffffffffffffffffffffffffff1681811182821802189050610cc881612566565b865487905f90610cf390849077ffffffffffffffffffffffffffffffffffffffffffffffff166141f0565b825477ffffffffffffffffffffffffffffffffffffffffffffffff9182166101009390930a9283029190920219909116179055506002860154610d40906001600160a01b031689836125c7565b610d4b338a8c612691565b60408051828152602081018c90526001600160a01b038a169133918c917f9908c9a9b44e8e318fc2d72841d07742290c2e6604a6c8931a6234855adc56e6910160405180910390a45050505050509392505050565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450280546060917f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450091610df19061403a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1d9061403a565b8015610e685780601f10610e3f57610100808354040283529160200191610e68565b820191905f5260205f20905b815481529060010190602001808311610e4b57829003601f168201915b5050505050915050919050565b5f610e9e7f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e28015490565b905090565b336001600160a01b0386168114801590610f0157506001600160a01b038087165f9081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209385168352929052205460ff16155b15610f50576040517fe237d9220000000000000000000000000000000000000000000000000000000081526001600160a01b038083166004830152871660248201526044015b60405180910390fd5b610f5d8686868686612718565b505050505050565b610f6d612327565b5f8381527f78b8360ea116a1ac1aaf7d99dc2a2fa96091e5ce27ad9c46aa3a48ffec134804602052604090205460ff168015610fd557505f8281527f78b8360ea116a1ac1aaf7d99dc2a2fa96091e5ce27ad9c46aa3a48ffec134804602052604090205460ff165b801561101257505f8281527f78b8360ea116a1ac1aaf7d99dc2a2fa96091e5ce27ad9c46aa3a48ffec134803602052604080822054858352912054145b611048576040517f0fbdd02d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6110506127a9565b61105b338483612691565b61107533838360405180602001604052805f815250612817565b8183336001600160a01b03167f1c3707e390084802997888377bce9ece70450f80608361497f32dc5c0b4d938f846040516110b291815260200190565b60405180910390a4505050565b6110c7612327565b7fbf935b513649871c60054e0279e4e5798d3dfd05785c3c3c5b311fb39ec270fe61116c63c5b9519060e01b8260405160240161110691815260200190565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152309061288b565b507fe9f6622f42b3306a25789276a3506ebaae4fda2335fb5bfa8bfd419c0dde810380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0384169081179091556040519081527fe9f6622f42b3306a25789276a3506ebaae4fda2335fb5bfa8bfd419c0dde8100907f90383ba23a05c87862d3e260b439d39d7e4d9cf873ac4663fcecf59f3c999890906020015b60405180910390a1505050565b611225612327565b7fffd2865c3eadba5ddbf1543e65a692d7001b37f737db7363a54642156548df6461126463c5b9519060e01b8260405160240161110691815260200190565b507fe9f6622f42b3306a25789276a3506ebaae4fda2335fb5bfa8bfd419c0dde8100805477ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000067ffffffffffffffff85169081029190911782556040519081527fbbf11bdea7e9c99165e248900feb5c850963bf2e765abccb86cbf85c6be139fb90602001611210565b6060815183511461134a57815183516040517f5b05999100000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610f47565b5f835167ffffffffffffffff811115611365576113656138f5565b60405190808252806020026020018201604052801561138e578160200160208202803683370190505b5090505f5b84518110156113dc576020808202860101516113b790602080840287010151610602565b8282815181106113c9576113c961400d565b6020908102919091010152600101611393565b509392505050565b5f5f6113ef83611a20565b1192915050565b6113fe612327565b7fffd2865c3eadba5ddbf1543e65a692d7001b37f737db7363a54642156548df6461143d63c5b9519060e01b8260405160240161110691815260200190565b507fe63bd6ac2e2e77423b5d37c9b15c55e67bb68fc23e21066ec76e46b260bfb10280547fe63bd6ac2e2e77423b5d37c9b15c55e67bb68fc23e21066ec76e46b260bfb1009161156d917fe190febc000000000000000000000000000000000000000000000000000000009190869081106114ba576114ba61400d565b905f5260205f2090600302016002016040516024016114d99190614220565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526002830180548690811061154e5761154e61400d565b5f9182526020909120600390910201546001600160a01b03169061288b565b50505050565b5f61157c612327565b5f8381527f78b8360ea116a1ac1aaf7d99dc2a2fa96091e5ce27ad9c46aa3a48ffec134804602052604090205460ff166115e2576040517f03834b2200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fe9f6622f42b3306a25789276a3506ebaae4fda2335fb5bfa8bfd419c0dde810080547fe9f6622f42b3306a25789276a3506ebaae4fda2335fb5bfa8bfd419c0dde8101545f9142916116639167ffffffffffffffff7801000000000000000000000000000000000000000000000000918290048116929190910416614232565b67ffffffffffffffff1610156116b65761167c826123db565b9050611687426128fd565b8260010160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506116d7565b50600181015477ffffffffffffffffffffffffffffffffffffffffffffffff165b7fe63bd6ac2e2e77423b5d37c9b15c55e67bb68fc23e21066ec76e46b260bfb10061170a87611704610e75565b8461294c565b6002840154909450611727906001600160a01b031633308a61296b565b5f5f5b60048301548110156118b8578260020183600401828154811061174f5761174f61400d565b905f5260205f200154815481106117685761176861400d565b5f9182526020909120600390910201546004840180546001600160a01b03909216917f5d30351900000000000000000000000000000000000000000000000000000000918c91600288019190869081106117c4576117c461400d565b905f5260205f200154815481106117dd576117dd61400d565b905f5260205f2090600302016002016040516024016117fd929190614192565b60408051601f198184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090941693909317909252905161186891906141aa565b5f60405180830381855af49150503d805f81146118a0576040519150601f19603f3d011682016040523d82523d5f602084013e6118a5565b606091505b505080925050816118b85760010161172a565b5080611939576118c788612566565b845485905f906118f290849077ffffffffffffffffffffffffffffffffffffffffffffffff166141c0565b92506101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff1602179055505b611947846108718a86613fe7565b61196186888760405180602001604052805f815250612817565b60408051898152602081018790526001600160a01b0388169133918a917feb65d0f36862bbd8763c5e2c983c9d753267d223eee35a224d8d0a9d7ef433a2910160405180910390a4505050509392505050565b6119bf338383612a44565b5050565b6119cb612327565b7fffd2865c3eadba5ddbf1543e65a692d7001b37f737db7363a54642156548df64611a0a63c5b9519060e01b8260405160240161110691815260200190565b50611a136127a9565b50565b5f6106448261222b565b5f8181527f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e28006020526040812054610644565b7fffd2865c3eadba5ddbf1543e65a692d7001b37f737db7363a54642156548df64611a9163c5b9519060e01b8260405160240161110691815260200190565b50611a9a612327565b7fe63bd6ac2e2e77423b5d37c9b15c55e67bb68fc23e21066ec76e46b260bfb1007fe9f6622f42b3306a25789276a3506ebaae4fda2335fb5bfa8bfd419c0dde810061156d828286612b34565b5f611af0612327565b7f8bf6ce5ec02ea9a811a4884ff857c405447f2dfa3ad4c8a5e93888abb5d17ceb611b2f63c5b9519060e01b8260405160240161110691815260200190565b507fe9f6622f42b3306a25789276a3506ebaae4fda2335fb5bfa8bfd419c0dde8102547fe9f6622f42b3306a25789276a3506ebaae4fda2335fb5bfa8bfd419c0dde8100906001600160a01b03165f611b8661064a565b90505f5b8651811015611cfe57826001600160a01b0316878281518110611baf57611baf61400d565b60200260200101515f01516001600160a01b031603611bfa576040517feeae5c5a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f878281518110611c0d57611c0d61400d565b6020908102919091010151516040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611c75573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c99919061417b565b9050611cf57f0000000000000000000000000000000000000000000000000000000000000000828a8581518110611cd257611cd261400d565b60200260200101515f01516001600160a01b03166125c79092919063ffffffff16565b50600101611b8a565b506040517f8961ca5b0000000000000000000000000000000000000000000000000000000081526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690638961ca5b90611d669089908690600401614252565b6020604051808303815f875af1158015611d82573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611da6919061417b565b9450611db185612566565b835484905f90611ddc90849077ffffffffffffffffffffffffffffffffffffffffffffffff166141c0565b92506101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff16021790555080611e2b61064a565b11611e62576040517fbf8ac14800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e6a6127a9565b6040518581527f1bde7e40e8ac464576be5ac741e0607beccbb0fadf8e08fd6332d7ff64bff9de9060200160405180910390a150505050919050565b7fffd2865c3eadba5ddbf1543e65a692d7001b37f737db7363a54642156548df64611ee563c5b9519060e01b8260405160240161110691815260200190565b50611eee612327565b7fe63bd6ac2e2e77423b5d37c9b15c55e67bb68fc23e21066ec76e46b260bfb1007fe9f6622f42b3306a25789276a3506ebaae4fda2335fb5bfa8bfd419c0dde81005f5b86811015611f6457611f5c83838a8a85818110611f5157611f5161400d565b905060400201612b34565b600101611f32565b505f5b84811015611f9957611f918383888885818110611f8657611f8661400d565b905060400201612df7565b600101611f67565b5050505050505050565b7fffd2865c3eadba5ddbf1543e65a692d7001b37f737db7363a54642156548df64611fe263c5b9519060e01b8260405160240161110691815260200190565b50611feb612327565b7fe63bd6ac2e2e77423b5d37c9b15c55e67bb68fc23e21066ec76e46b260bfb1007fe9f6622f42b3306a25789276a3506ebaae4fda2335fb5bfa8bfd419c0dde810061156d828286612df7565b60603215612072576040517f64bb56b400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7fe63bd6ac2e2e77423b5d37c9b15c55e67bb68fc23e21066ec76e46b260bfb10280547fe63bd6ac2e2e77423b5d37c9b15c55e67bb68fc23e21066ec76e46b260bfb1009190849081106120c8576120c861400d565b5f9182526020909120600390910201546002820180546001600160a01b039092169163185eb7b5913091879081106121025761210261400d565b905f5260205f2090600302016002016040518363ffffffff1660e01b815260040161212e92919061415a565b5f60405180830381865afa158015612148573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261216f9190810190614314565b9392505050565b336001600160a01b03861681148015906121d457506001600160a01b038087165f9081527f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c4501602090815260408083209385168352929052205460ff16155b1561221e576040517fe237d9220000000000000000000000000000000000000000000000000000000081526001600160a01b03808316600483015287166024820152604401610f47565b610f5d8686868686612f9e565b7fe63bd6ac2e2e77423b5d37c9b15c55e67bb68fc23e21066ec76e46b260bfb10280545f917fe63bd6ac2e2e77423b5d37c9b15c55e67bb68fc23e21066ec76e46b260bfb10091849081106122825761228261400d565b5f9182526020909120600390910201546002820180546001600160a01b03909216916374978231913091879081106122bc576122bc61400d565b905f5260205f2090600302016002016040518363ffffffff1660e01b81526004016122e892919061415a565b602060405180830381865afa158015612303573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061216f919061417b565b7f63245fb7e3e0d2c2a6b753106e72e074a7694d950994c2caa5065a7b16bdb6005f80357fffffffff00000000000000000000000000000000000000000000000000000000168152602091909152604090205460ff16156123d9576040517fa5ced19b0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000005f35166004820152602401610f47565b565b5f6123e461064a565b600183015490915077ffffffffffffffffffffffffffffffffffffffffffffffff168082119082030280156124b8575f61244482612420610e75565b600187015477ffffffffffffffffffffffffffffffffffffffffffffffff1661294c565b9050801561247557600384015460408051602081019091525f808252612475926001600160a01b0316918490612817565b60408051848152602081018490529081018290527f875352fb3fadeb8c0be7cbbe8ff761b308fa7033470cd0287f02f3436fd76cb99060600160405180910390a1505b50919050565b5f6124ca84838561305d565b949350505050565b80821191030290565b6124e481612566565b6001830180547fffffffffffffffff0000000000000000000000000000000000000000000000001677ffffffffffffffffffffffffffffffffffffffffffffffff929092169190911790556040518181527f15c027cc4fd826d986cad358803439f7326d3aa4ed969ff90dbee4bc150f68e99060200160405180910390a15050565b5f77ffffffffffffffffffffffffffffffffffffffffffffffff8211156125c3576040517f6dfcc65000000000000000000000000000000000000000000000000000000000815260c0600482015260248101839052604401610f47565b5090565b5f6040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015282602482015260205f6044835f895af191505080601f3d1160015f51141615161561262a5750823b153d17155b8061156d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f5452414e534645525f4641494c454400000000000000000000000000000000006044820152606401610f47565b6001600160a01b0383166126d3576040517f01a835140000000000000000000000000000000000000000000000000000000081525f6004820152602401610f47565b604080516001808252602082018590528183019081526060820184905260a082019092525f6080820181815291929161271191879185908590613082565b5050505050565b6001600160a01b03841661275a576040517f57f447ce0000000000000000000000000000000000000000000000000000000081525f6004820152602401610f47565b6001600160a01b03851661279c576040517f01a835140000000000000000000000000000000000000000000000000000000081525f6004820152602401610f47565b6127118585858585613082565b7fe9f6622f42b3306a25789276a3506ebaae4fda2335fb5bfa8bfd419c0dde81005f6127d4826123db565b90506127e082826124db565b6127e9426128fd565b8260010160186101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505050565b6001600160a01b038416612859576040517f57f447ce0000000000000000000000000000000000000000000000000000000081525f6004820152602401610f47565b60408051600180825260208201869052818301908152606082018590526080820190925290610f5d5f87848487613082565b60605f5f846001600160a01b0316846040516128a791906141aa565b5f60405180830381855af49150503d805f81146128df576040519150601f19603f3d011682016040523d82523d5f602084013e6128e4565b606091505b50915091506128f48583836130d5565b95945050505050565b5f67ffffffffffffffff8211156125c357604080517f6dfcc650000000000000000000000000000000000000000000000000000000008152600481019190915260248101839052604401610f47565b5f82156129635761295e84848461305d565b6124ca565b509192915050565b5f6040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03851660048201526001600160a01b038416602482015282604482015260205f6064835f8a5af191505080601f3d1160015f5114161516156129dd5750833b153d17155b80612711576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5452414e534645525f46524f4d5f4641494c45440000000000000000000000006044820152606401610f47565b7f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c45006001600160a01b038316612aa7576040517fced3e1000000000000000000000000000000000000000000000000000000000081525f6004820152602401610f47565b6001600160a01b038481165f81815260018401602090815260408083209488168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001687151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a350505050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826020013514612c23576002840180547f030ba25d00000000000000000000000000000000000000000000000000000000916020850135918535908110612b9f57612b9f61400d565b905f5260205f209060030201600201604051602401612bbf929190614192565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152612cdc565b6002840180547fea827cef0000000000000000000000000000000000000000000000000000000091908435908110612c5d57612c5d61400d565b905f5260205f209060030201600201604051602401612c7c9190614220565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091525b90505f612cfb8286600201855f01358154811061154e5761154e61400d565b90505f81806020019051810190612d12919061417b565b9050612d1d81612566565b855486905f90612d4890849077ffffffffffffffffffffffffffffffffffffffffffffffff166141c0565b92506101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff16021790555085600201845f013581548110612da657612da661400d565b905f5260205f209060030201600101547f023acac20b6625d67b9e59a97f1ebde89eb900b71ce3fbe33be445ed8d44809282604051612de791815260200190565b60405180910390a2505050505050565b612eb5635d30351960e01b826020013585600201845f013581548110612e1f57612e1f61400d565b905f5260205f209060030201600201604051602401612e3f929190614192565b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff0000000000000000000000000000000000000000000000000000000090931692909217909152600285018054843590811061154e5761154e61400d565b50612ec38160200135612566565b825483905f90612eee90849077ffffffffffffffffffffffffffffffffffffffffffffffff166141f0565b92506101000a81548177ffffffffffffffffffffffffffffffffffffffffffffffff021916908377ffffffffffffffffffffffffffffffffffffffffffffffff16021790555082600201815f013581548110612f4c57612f4c61400d565b905f5260205f209060030201600101547fab1ec9c25a8a3c3e2150326d211598abc8b940a4264dfe9479566a02101b95f58260200135604051612f9191815260200190565b60405180910390a2505050565b6001600160a01b038416612fe0576040517f57f447ce0000000000000000000000000000000000000000000000000000000081525f6004820152602401610f47565b6001600160a01b038516613022576040517f01a835140000000000000000000000000000000000000000000000000000000081525f6004820152602401610f47565b604080516001808252602082018690528183019081526060820185905260808201909252906130548787848487613082565b50505050505050565b8282028315848204841417820261307b5763ad251c275f526004601cfd5b0492915050565b61308e8585858561314a565b6001600160a01b0384161561271157825133906001036130c757602084810151908401516130c0838989858589613255565b5050610f5d565b610f5d8187878787876133f2565b6060826130ea576130e58261353c565b61216f565b815115801561310157506001600160a01b0384163b155b15613143576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401610f47565b508061216f565b7f4a593662ee04d27b6a00ebb31be7fe0c102c2ade82a7c5d764f2df05dc4e28006131778585858561357e565b6001600160a01b0385166131f5575f805b84518110156131da5760208181028581018201519087018201515f90815291859052604082208054919283926131bf908490613fe7565b909155506131cf90508184613fe7565b925050600101613188565b5080826001015f8282546131ee9190613fe7565b9091555050505b6001600160a01b038416612711575f805b84518110156132415760208181028581018201519087018201515f908152918590526040909120805482900390559190910190600101613206565b506001820180549190910390555050505050565b6001600160a01b0384163b15610f5d576040517ff23a6e610000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063f23a6e61906132b290899089908890889088906004016143d3565b6020604051808303815f875af19250505080156132ec575060408051601f3d908101601f191682019092526132e99181019061441a565b60015b61336c573d808015613319576040519150601f19603f3d011682016040523d82523d5f602084013e61331e565b606091505b5080515f03613364576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602401610f47565b805181602001fd5b7fffffffff0000000000000000000000000000000000000000000000000000000081167ff23a6e610000000000000000000000000000000000000000000000000000000014613054576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602401610f47565b6001600160a01b0384163b15610f5d576040517fbc197c810000000000000000000000000000000000000000000000000000000081526001600160a01b0385169063bc197c819061344f9089908990889088908890600401614435565b6020604051808303815f875af1925050508015613489575060408051601f3d908101601f191682019092526134869181019061441a565b60015b6134b6573d808015613319576040519150601f19603f3d011682016040523d82523d5f602084013e61331e565b7fffffffff0000000000000000000000000000000000000000000000000000000081167fbc197c810000000000000000000000000000000000000000000000000000000014613054576040517f57f447ce0000000000000000000000000000000000000000000000000000000081526001600160a01b0386166004820152602401610f47565b80511561354c5780518082602001fd5b6040517fd6bda27500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805182517f88be536d5240c274a3b1d3a1be54482fd9caa294f08c62a7cde569f49a3c450091146135e857825182516040517f5b05999100000000000000000000000000000000000000000000000000000000815260048101929092526024820152604401610f47565b335f5b8451811015613703576020818102868101820151908601909101516001600160a01b038916156136b5575f828152602086815260408083206001600160a01b038d1684529091529020548181101561368f576040517f03dee4c50000000000000000000000000000000000000000000000000000000081526001600160a01b038b166004820152602481018290526044810183905260648101849052608401610f47565b5f838152602087815260408083206001600160a01b038e16845290915290209082900390555b6001600160a01b038816156136f9575f828152602086815260408083206001600160a01b038c168452909152812080548392906136f3908490613fe7565b90915550505b50506001016135eb565b5083516001036137835760208401515f906020850151909150866001600160a01b0316886001600160a01b0316846001600160a01b03167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628585604051613774929190918252602082015260400190565b60405180910390a45050610f5d565b846001600160a01b0316866001600160a01b0316826001600160a01b03167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516137d2929190614497565b60405180910390a4505050505050565b6001600160a01b0381168114611a13575f5ffd5b5f5f60408385031215613807575f5ffd5b8235613812816137e2565b946020939093013593505050565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611a13575f5ffd5b5f6020828403121561385d575f5ffd5b813561216f81613820565b5f5f5f6060848603121561387a575f5ffd5b83359250602084013591506040840135613893816137e2565b809150509250925092565b5f602082840312156138ae575f5ffd5b5035919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f61216f60208301846138b5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715613945576139456138f5565b60405290565b6040805190810167ffffffffffffffff81118282101715613945576139456138f5565b604051601f8201601f1916810167ffffffffffffffff81118282101715613997576139976138f5565b604052919050565b5f67ffffffffffffffff8211156139b8576139b86138f5565b5060051b60200190565b5f82601f8301126139d1575f5ffd5b81356139e46139df8261399f565b61396e565b8082825260208201915060208360051b860101925085831115613a05575f5ffd5b602085015b83811015613a22578035835260209283019201613a0a565b5095945050505050565b5f82601f830112613a3b575f5ffd5b813567ffffffffffffffff811115613a5557613a556138f5565b613a686020601f19601f8401160161396e565b818152846020838601011115613a7c575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f5f5f60a08688031215613aac575f5ffd5b8535613ab7816137e2565b94506020860135613ac7816137e2565b9350604086013567ffffffffffffffff811115613ae2575f5ffd5b613aee888289016139c2565b935050606086013567ffffffffffffffff811115613b0a575f5ffd5b613b16888289016139c2565b925050608086013567ffffffffffffffff811115613b32575f5ffd5b613b3e88828901613a2c565b9150509295509295909350565b5f5f5f60608486031215613b5d575f5ffd5b505081359360208301359350604090920135919050565b5f60208284031215613b84575f5ffd5b813561216f816137e2565b5f60208284031215613b9f575f5ffd5b813567ffffffffffffffff8116811461216f575f5ffd5b5f5f60408385031215613bc7575f5ffd5b823567ffffffffffffffff811115613bdd575f5ffd5b8301601f81018513613bed575f5ffd5b8035613bfb6139df8261399f565b8082825260208201915060208360051b850101925087831115613c1c575f5ffd5b6020840193505b82841015613c47578335613c36816137e2565b825260209384019390910190613c23565b9450505050602083013567ffffffffffffffff811115613c65575f5ffd5b613c71858286016139c2565b9150509250929050565b5f8151808452602084019350602083015f5b82811015613cab578151865260209586019590910190600101613c8d565b5093949350505050565b602081525f61216f6020830184613c7b565b5f5f60408385031215613cd8575f5ffd5b8235613ce3816137e2565b915060208301358015158114613cf7575f5ffd5b809150509250929050565b5f6040828403128015613d13575f5ffd5b509092915050565b5f60208284031215613d2b575f5ffd5b813567ffffffffffffffff811115613d41575f5ffd5b8201601f81018413613d51575f5ffd5b8035613d5f6139df8261399f565b8082825260208201915060208360051b850101925086831115613d80575f5ffd5b602084015b83811015613e2057803567ffffffffffffffff811115613da3575f5ffd5b85016060818a03601f19011215613db8575f5ffd5b613dc0613922565b6020820135613dce816137e2565b81526040820135613dde816137e2565b6020820152606082013567ffffffffffffffff811115613dfc575f5ffd5b613e0b8b602083860101613a2c565b60408301525084525060209283019201613d85565b509695505050505050565b5f5f83601f840112613e3b575f5ffd5b50813567ffffffffffffffff811115613e52575f5ffd5b6020830191508360208260061b8501011115613e6c575f5ffd5b9250929050565b5f5f5f5f60408587031215613e86575f5ffd5b843567ffffffffffffffff811115613e9c575f5ffd5b613ea887828801613e2b565b909550935050602085013567ffffffffffffffff811115613ec7575f5ffd5b613ed387828801613e2b565b95989497509550505050565b5f5f60408385031215613ef0575f5ffd5b8235613efb816137e2565b91506020830135613cf7816137e2565b602080825282518282018190525f918401906040840190835b81811015613f5757835180516001600160a01b031684526020908101518185015290930192604090920191600101613f24565b509095945050505050565b5f5f5f5f5f60a08688031215613f76575f5ffd5b8535613f81816137e2565b94506020860135613f91816137e2565b93506040860135925060608601359150608086013567ffffffffffffffff811115613b32575f5ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8082018082111561064457610644613fba565b8181038181111561064457610644613fba565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b600181811c9082168061404e57607f821691505b6020821081036124b8577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b80545f90600181811c9082168061409d57607f821691505b6020821081036140d4577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b818652602086018180156140ef57600181146141235761414f565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516825283151560051b8201955061414f565b5f878152602090205f5b858110156141495781548482015260019091019060200161412d565b83019650505b505050505092915050565b6001600160a01b0383168152604060208201525f6124ca6040830184614085565b5f6020828403121561418b575f5ffd5b5051919050565b828152604060208201525f6124ca6040830184614085565b5f82518060208501845e5f920191825250919050565b77ffffffffffffffffffffffffffffffffffffffffffffffff818116838216019081111561064457610644613fba565b77ffffffffffffffffffffffffffffffffffffffffffffffff828116828216039081111561064457610644613fba565b602081525f61216f6020830184614085565b67ffffffffffffffff818116838216019081111561064457610644613fba565b5f604082016040835280855180835260608501915060608160051b8601019250602087015f5b828110156142fa577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa087860301845281516001600160a01b0381511686526001600160a01b03602082015116602087015260408101519050606060408701526142e460608701826138b5565b9550506020938401939190910190600101614278565b5050506001600160a01b038516602085015250905061216f565b5f60208284031215614324575f5ffd5b815167ffffffffffffffff81111561433a575f5ffd5b8201601f8101841361434a575f5ffd5b80516143586139df8261399f565b8082825260208201915060208360061b850101925086831115614379575f5ffd5b6020840193505b828410156143c95760408488031215614397575f5ffd5b61439f61394b565b84516143aa816137e2565b8152602085810151818301529083526040909401939190910190614380565b9695505050505050565b6001600160a01b03861681526001600160a01b038516602082015283604082015282606082015260a060808201525f61440f60a08301846138b5565b979650505050505050565b5f6020828403121561442a575f5ffd5b815161216f81613820565b6001600160a01b03861681526001600160a01b038516602082015260a060408201525f61446560a0830186613c7b565b82810360608401526144778186613c7b565b9050828103608084015261448b81856138b5565b98975050505050505050565b604081525f6144a96040830185613c7b565b82810360208401526128f48185613c7b56fea264697066735822122036c7847a7c8b0ae5b237897fe9decf25fba8feddc9a08deea081c7ad839a005b64736f6c634300081c0033000000000000000000000000769f5bc628cf538e1d64f2e8ed235a8831312249