0 txs
111 calls
constructor
No constructor.
functions
allTokens
viewfunction allTokens() view returns (address[])
asset
viewfunction asset() view returns (address)
assetYieldCoefficient
viewfunction assetYieldCoefficient() view returns (uint256, uint256)
collectedFees
viewfunction collectedFees() view returns (address[] tokens, uint256[] collected)
delayedWithdrawalAdapter
viewfunction delayedWithdrawalAdapter(address token) view returns (address)
description
viewfunction description() view returns (string)
ERC4626Vault
purefunction ERC4626Vault() pure returns (address)
FEE_MANAGER
viewfunction FEE_MANAGER() view returns (bytes32)
fees
viewfunction fees() view returns (uint8[] types, uint16[] bps)
globalRegistry
purefunction globalRegistry() pure returns (address)
GUARDIAN_MANAGER
viewfunction GUARDIAN_MANAGER() view returns (bytes32)
isDepositTokenSupported
viewfunction isDepositTokenSupported(address depositToken) view returns (bool)
isSpecialWithdrawalSupported
viewfunction isSpecialWithdrawalSupported(uint256 withdrawalCode) view returns (bool)
LIQUIDITY_MINING_MANAGER
viewfunction LIQUIDITY_MINING_MANAGER() view returns (bytes32)
maxDeposit
viewfunction maxDeposit(address depositToken) view returns (uint256)
maxWithdraw
viewfunction maxWithdraw() view returns (address[], uint256[])
registry
viewfunction registry() view returns (address)
rescueConfig
viewfunction rescueConfig() view returns (uint16 feeBps, address feeRecipient, uint8 status)
rewardEmissionsPerSecondPerAsset
viewfunction rewardEmissionsPerSecondPerAsset() view returns (uint256[], uint256[])
strategyId
viewfunction strategyId() view returns (uint96)
supportedDepositTokens
viewfunction supportedDepositTokens() view returns (address[])
supportedSpecialWithdrawals
viewfunction supportedSpecialWithdrawals() view returns (uint256[])
supportedWithdrawals
viewfunction supportedWithdrawals() view returns (uint8[])
supportsInterface
purefunction supportsInterface(bytes4 interfaceId) pure returns (bool)
TOS_MANAGER
viewfunction TOS_MANAGER() view returns (bytes32)
totalAssetsInFarm
viewfunction totalAssetsInFarm() view returns (uint256)
totalBalances
viewfunction totalBalances() view returns (address[] tokens, uint256[] balances)
validatePositionCreation
viewfunction validatePositionCreation(address sender, bytes creationData) view
vault
viewfunction vault() view returns (address)
cancelRescue
nonpayablefunction cancelRescue()
confirmRescue
nonpayablefunction confirmRescue()
deposited
payablefunction deposited(address depositToken, uint256 depositAmount) payable returns (uint256 assetsDeposited)
init
nonpayablefunction init(bytes tosData, bytes guardianData, bytes feesData, string description_)
maxApproveVault
nonpayablefunction maxApproveVault()
migrateToNewStrategy
nonpayablefunction migrateToNewStrategy(address newStrategy, bytes migrationData) returns (bytes)
rescue
nonpayablefunction rescue(address feeRecipient) returns (address[] tokens, uint256[] rescued)
specialWithdraw
nonpayablefunction specialWithdraw(uint256 positionId, uint256 withdrawalCode, uint256[] toWithdraw, bytes withdrawalData, address recipient) returns (uint256[] balanceChanges, address[] actualWithdrawnTokens, uint256[] actualWithdrawnAmounts, bytes result)
specialWithdrawFees
nonpayablefunction specialWithdrawFees(uint256 withdrawalCode, uint256[] toWithdraw, bytes withdrawData, address recipient) returns (uint256[] balanceChanges, address[] actualWithdrawnTokens, uint256[] actualWithdrawnAmounts, bytes result)
strategyRegistered
nonpayablefunction strategyRegistered(uint96 strategyId_, address oldStrategy, bytes migrationResultData)
withdraw
nonpayablefunction withdraw(uint256 positionId, address[] tokens, uint256[] toWithdraw, address recipient) returns (uint8[])
withdrawFees
nonpayablefunction withdrawFees(address[] tokens, uint256[] toWithdraw, address recipient)
events
Initialized
event Initialized(uint64 version)
errors
CallerCantPerformAction
error CallerCantPerformAction()
CantWithdrawFees
error CantWithdrawFees()
FailedCall
error FailedCall()
InsufficientBalance
error InsufficientBalance(uint256 balance, uint256 needed)
InvalidDepositToken
error InvalidDepositToken(address invalidToken)
InvalidInitialization
error InvalidInitialization()
InvalidRescueStatus
error InvalidRescueStatus()
InvalidSpecialWithdrawalCode
error InvalidSpecialWithdrawalCode(uint256 invalidCode)
InvalidTokens
error InvalidTokens()
NotEnoughFees
error NotEnoughFees()
NotInitializing
error NotInitializing()
OnlyImmediateWithdrawalsSupported
error OnlyImmediateWithdrawalsSupported()
OnlyStrategyRegistry
error OnlyStrategyRegistry()
OnlyVault
error OnlyVault()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
WithdrawMustBeImmediate
error WithdrawMustBeImmediate()
creation bytecode
0x60808060405234601557615695908161001a8239f35b5f80fdfe6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c806301ffc9a7146102a9578063034db235146102a457806316f3542a1461029f57806317417e0e1461029a578063222142d0146102955780632968766e146102905780632a7c08471461028b57806331f91a8414610286578063326c36811461028157806338d52e0f1461027c5780633c5343b714610277578063402d267d14610272578063441e13e21461026d578063492f4e18146102685780634acf47d014610263578063688e89c11461025e5780636b6b97cd146102595780636d13e02c146102545780636ff97f1d1461024f5780637284e4161461024a578063789759be146102455780637b10399914610240578063831b67c01461023b578063839006f2146102365780639003adfe146102315780639af1d35a1461022c578063a129ca4a14610227578063a69a2ad114610222578063ac7a1b5b1461021d578063ba4ddbdf14610218578063bf9766fe14610213578063d52bacf31461020e578063daa8bfdd14610209578063dae864cf14610204578063db56b101146101ff578063de700806146101fa578063e8e5ccf3146101f5578063ea26266c146101f0578063f50cd5f8146101eb578063fa4c5453146101e65763fbfa77cf0361000e57612788565b612710565b612668565b61262e565b612616565b612586565b61255c565b612541565b61251a565b612496565b6123cf565b612387565b6122b2565b61220b565b612019565b611ea2565b611d90565b611b1a565b611a79565b611a4e565b611a27565b611939565b6117fc565b6117b1565b611639565b61153c565b611502565b6114d8565b6112db565b6112ac565b611011565b610f57565b610c54565b610a9b565b610776565b6106e6565b61056d565b6103f5565b6103b6565b610390565b3461037b57602060031936011261037b576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361037b57807ff2670b730000000000000000000000000000000000000000000000000000000060209214908115610351575b8115610327575b506040519015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150145f61031c565b7fe8662db90000000000000000000000000000000000000000000000000000000081149150610315565b5f80fd5b6001600160a01b0381160361037b57565b3461037b57602060031936011261037b576103ac60043561037f565b60206040515f8152f35b3461037b57602060031936011261037b57602060043580159081156103e057506040519015158152f35b60019150145f61031c565b5f91031261037b57565b3461037b575f60031936011261037b5760206040517f585fc1073b6cfa774673b8c567d17fb3595441dcb101cca207779783ece150808152f35b9181601f8401121561037b5782359167ffffffffffffffff831161037b576020808501948460051b01011161037b57565b9181601f8401121561037b5782359167ffffffffffffffff831161037b576020838186019501011161037b57565b9081518082526020808093019301915f5b8281106104ad575050505090565b83518552938101939281019260010161049f565b9081518082526020808093019301915f5b8281106104e0575050505090565b83516001600160a01b0316855293810193928101926001016104d2565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b9261054e61056a959361054061055c9460808852608088019061048e565b9086820360208801526104c1565b90848203604086015261048e565b9160608184039101526104fd565b90565b3461037b5760a060031936011261037b5767ffffffffffffffff60443581811161037b5761059f90369060040161042f565b909160643590811161037b576105b9903690600401610460565b5050608435906105c88261037f565b6105db6001198036013560f01c36030190565b3560601c33036106bc576105f192602435614fef565b6001600160a01b03610604949394613e9d565b16916bffffffffffffffffffffffff5f54168451156106b7576020850151843b1561037b576040517f740d45200000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff9290921660048301526024820152925f908490604490829084905af19283156106b25761069593610699575b5060405194859485610522565b0390f35b806106a66106ac926118a9565b806103eb565b5f610688565b61291c565b612886565b60046040517f8d1af8bd000000000000000000000000000000000000000000000000000000008152fd5b3461037b57602060031936011261037b5760206004356107058161037f565b6001600160a01b036107206001198036013560f01c36030190565b9116603c82013560601c8114918215610740575b50506040519015158152f35b6028013560601c1490505f80610734565b909161076861056a9360408452604084019061048e565b91602081840391015261048e565b3461037b575f60031936011261037b576001600160a01b036bffffffffffffffffffffffff5f54166107a6613e9d565b6107ae6151d8565b93906107b86151e9565b9290931660408051937f26a5bea800000000000000000000000000000000000000000000000000000000855260045f868061080b8b600483019190916bffffffffffffffffffffffff6020820193169052565b0381875afa9586156106b2575f96610a77575b5061083461082f86518851906130d7565b612eb4565b9561084561082f87518351906130d7565b975f5b87518110156108885780610876818e8c610870836108698f986001996128c0565b51926128c0565b526128c0565b51610881828d6128c0565b5201610848565b508a919293959961089e6108b1969851976128b3565b5160019687969187811890881002871890565b945f975b6108e8575b505050505050505082610695939495505181106108dd575b505192839283610751565b8084528452846108d2565b8098979851891015610a6f5761090e6109018a836128c0565b516001600160a01b031690565b8d8b805180927f74168e07000000000000000000000000000000000000000000000000000000008252818061096a878b8b84019092916001600160a01b036020916bffffffffffffffffffffffff604085019616845216910152565b03915afa9182156106b2578d928f928e89915f915f94610a3b575b5050914211610a33575b6109999192613f27565b9290156109f65750916109ed826109e76109d68d9e9f958d8f986109c98f6109c36109d095613108565b906128c0565b5190614ca1565b92613108565b916109e183866128c0565b516130d7565b926128c0565b525b01976108b5565b9b9150610a2d8b8b9c94610a1d8d966109e78e6c0c9f2c9cd04674edea4000000097614b8b565b52610a27816130fa565b9d6128c0565b526109ef565b5f915061098f565b610a5f93945080919250903d10610a68575b610a578183611916565b8101906130e4565b91908f80610985565b503d610a4d565b8798506108ba565b610a949196503d805f833e610a8c8183611916565b810190613026565b945f61081e565b3461037b57606060031936011261037b57600467ffffffffffffffff813581811161037b57610acd903690840161042f565b9160243590811161037b57610ae5903690850161042f565b60443592610af28461037f565b610b44610afd6131ae565b94610b28610b09613ff8565b610b17989198368b886127e0565b610b2236898b612838565b906132fa565b610b333688856127e0565b610b3e368688612838565b906141a4565b9380518603610c2b575f5b868110610b5857005b610b6561090182846128c0565b6001600160a01b03610b8f610b83610b7e858c896128dd565b6128ed565b6001600160a01b031690565b911603610c0257610ba18185876128dd565b35151580610bdf575b610bb657600101610b4f565b876040517ff00866c7000000000000000000000000000000000000000000000000000000008152fd5b50610bf2610bed82886128c0565b6128f7565b610bfb81610fb8565b1515610baa565b876040517f672215de000000000000000000000000000000000000000000000000000000008152fd5b866040517f672215de000000000000000000000000000000000000000000000000000000008152fd5b3461037b57608060031936011261037b57600480359067ffffffffffffffff9060243582811161037b57610c8b903690830161042f565b93909260443590811161037b57610ca59036908401610460565b505060643592610cb48461037f565b610cbc6131ae565b93610cc5613ff8565b60ff60029792975460b01c16610cda8161237d565b8015159081610f42575b50610f1957610d096028610d016001198036013560f01c36030190565b013560601c90565b96610d12612e73565b97610d1b612e73565b99610d24612e73565b96610d2d614d30565b9880610e275750610d8a9392610d4d6001600160a01b03936020936128d4565b35928391169a60405195869283927f4cdad50600000000000000000000000000000000000000000000000000000000845283019190602083019252565b03818c5afa9283156106b25761069599610de8978c9584610dd9945f92610df4575b50610db8919284614909565b610dc1866128b3565b52610dcb8d6128b3565b906001600160a01b03169052565b610de2876128b3565b526132fa565b60405194859485610522565b610db89250610e1a9060203d602011610e20575b610e128183611916565b810190613516565b91610dac565b503d610e08565b6001819895969798145f14610ee357506001600160a01b0396959492610e53610e9095936020936128d4565b35978891169a60405195869283927f0a28a47700000000000000000000000000000000000000000000000000000000845283019190602083019252565b03818c5afa80156106b25761069599610de8978c955f93610ebc575b50610db883610dd9949584614909565b610dd99350610edc610db89160203d602011610e2057610e128183611916565b9350610eac565b6040517fb3f26d5d000000000000000000000000000000000000000000000000000000008152808c019182529081906020010390fd5b856040517f2311b472000000000000000000000000000000000000000000000000000000008152fd5b60019150610f4f8161237d565b14155f610ce4565b3461037b575f60031936011261037b576020603c610f7e6001198036013560f01c36030190565b013560601c604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60021115610fc257565b610f8b565b60209060206040818301928281528551809452019301915f5b828110610fee575050505090565b909192938451906002821015610fc2579081528201938201929190600101610fe0565b3461037b57608060031936011261037b5767ffffffffffffffff60243581811161037b5761104390369060040161042f565b9160443590811161037b5761105c90369060040161042f565b919061106960643561037f565b61107c6001198036013560f01c36030190565b3560601c33036106bc57916bffffffffffffffffffffffff5f5416926110a0613e9d565b946110a9614782565b916110b48351612eb4565b946110bf85836128d4565b3594851515936001600160a01b038a169160015b828110611113575050505050506110fc575b6106956110f0613d49565b60405191829182610fc7565b61110994606435946146dd565b5f808080806110e5565b61111e8183886128dd565b3561112d610b7e8386896128dd565b604080517f8e6e20a90000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff8f1660048201526001600160a01b039290921660248301529190602080826044818b5afa80156106b2576111a59284925f9261128f575b5050808218908211021890565b91826111f5575b50895183106111c0575b50506001016110d3565b906111ca91613116565b6111d4828c6128c0565b526111df818b6128c0565b516111ec575b5f806111b6565b600196506111e5565b611203610b7e85888b6128dd565b873b1561037b5790517f5612785a0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff8f1660048201526001600160a01b0391821660248201526044810184905260648035909216918101919091525f81608481838b5af180156106b257156111ac57806106a6611289926118a9565b5f6111ac565b6112a59250803d10610e2057610e128183611916565b5f80611198565b3461037b57602060031936011261037b5760206112d36004356112ce8161037f565b613525565b604051908152f35b3461037b575f60031936011261037b576002805460b01c60ff166112fe8161237d565b036114ae576bffffffffffffffffffffffff5f541661131e610b83613620565b6040517fef4caa830000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff83166004820152336024820152602081604481855afa9081156106b2575f9161147f575b5015611455576113b6611386614782565b6113b061139f611398610901846128b3565b30906136d7565b6113ab610901846128b3565b6147b3565b5061374e565b1561144c576113e460015b6113df6113cc6127b9565b915f83525f602084015260408301612927565b612933565b803b1561037b576040517f794350640000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff83166004820152905f908290602490829084905af180156106b25761143f57005b806106a6610018926118a9565b6113e45f6113c1565b60046040517f70bd5300000000000000000000000000000000000000000000000000000000008152fd5b6114a1915060203d6020116114a7575b6114998183611916565b810190612904565b5f611375565b503d61148f565b60046040517f2311b472000000000000000000000000000000000000000000000000000000008152fd5b3461037b575f60031936011261037b5760206bffffffffffffffffffffffff5f5416604051908152f35b3461037b575f60031936011261037b5760206040517f04f51a4c4a4cf53ba4f53f09da86706c7e9f45dbe97807ec7c84e2f7701146018152f35b604060031936011261037b576004356115548161037f565b6115676001198036013560f01c36030190565b3560601c33036106bc5761157e906024359061526d565b6001600160a01b0361158e613e9d565b16906bffffffffffffffffffffffff5f541691803b1561037b576040517f3b1bc9570000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff939093166004840152602483018290525f908390604490829084905af19182156106b25761069592611619575b506040519081529081906020820190565b611622906118a9565b5f611608565b90602061056a9281815201906104fd565b3461037b57604060031936011261037b576004356116568161037f565b60243567ffffffffffffffff811161037b57611676903690600401610460565b50506001600160a01b03908161168a6129bc565b163303611787577fffffffffffffffffffffffffffffffffffffffff0000000000000000000000005f54165f55816116d06028610d016001198036013560f01c36030190565b6040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201529116602082602481845afa9081156106b2576106959461174494611752945f9461175e575b50918391611730931690614909565b604051928391602083019190602083019252565b03601f198101835282611916565b60405191829182611628565b611730939192945061177e9060203d602011610e2057610e128183611916565b93919092611721565b60046040517f8cec1de2000000000000000000000000000000000000000000000000000000008152fd5b3461037b575f60031936011261037b5760206040517fe72db512f617f63e889242cd75fa9e0d2876dc0efa5932893da1cf5a9a0624aa8152f35b90602061056a9281815201906104c1565b3461037b575f60031936011261037b57610695611817613790565b6040519182916020835260208301906104c1565b90600182811c92168015611872575b602083101461184557565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f169161183a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116118bd57604052565b61187c565b6060810190811067ffffffffffffffff8211176118bd57604052565b6080810190811067ffffffffffffffff8211176118bd57604052565b6020810190811067ffffffffffffffff8211176118bd57604052565b90601f601f19910116810190811067ffffffffffffffff8211176118bd57604052565b3461037b575f60031936011261037b576040515f6003546119598161182b565b808452906020906001908181169081156119df5750600114611986575b6106958561175281870382611916565b60035f90815293507fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b5b8385106119cc5750505050810160200161175282610695611976565b80548686018401529382019381016119b0565b869550610695969350602092506117529491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b8201019293611976565b3461037b575f60031936011261037b5760206028610f7e6001198036013560f01c36030190565b3461037b575f60031936011261037b576020611a686129bc565b6001600160a01b0360405191168152f35b3461037b57608060031936011261037b5767ffffffffffffffff60043581811161037b57611aab903690600401610460565b9060243583811161037b57611ac4903690600401610460565b9060443585811161037b57611add903690600401610460565b92909160643596871161037b57611afb610018973690600401610460565b969095612a49565b909161076861056a936040845260408401906104c1565b3461037b57602060031936011261037b576004803590611b398261037f565b60025460b01c60ff1691611b4c8361237d565b60038314611d67576bffffffffffffffffffffffff5f541690611b70610b83613620565b9060409485517ff5dbed1400000000000000000000000000000000000000000000000000000000815260208180611bce33898b84019092916001600160a01b036020916bffffffffffffffffffffffff604085019616845216910152565b0381875afa9081156106b2575f91611d48575b5015611d205780611bf360029261237d565b03611c5a575b505050611c04614a3a565b929091611c20611c1c611c173087614ae6565b613a67565b1590565b611c335750610695905192839283611b03565b90517fac4984c7000000000000000000000000000000000000000000000000000000008152fd5b611ca890611c9d611c776060611c6e613a94565b015161ffff1690565b91611c8d611c836127b9565b61ffff9094168452565b6001600160a01b03166020830152565b600281870152612933565b803b1561037b5783517f258eef130000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff9092168383019081525f91839182908490829060200103925af180156106b257611d0d575b8080611bf9565b806106a6611d1a926118a9565b5f611d06565b8486517f70bd5300000000000000000000000000000000000000000000000000000000008152fd5b611d61915060203d6020116114a7576114998183611916565b5f611be1565b506040517f2311b472000000000000000000000000000000000000000000000000000000008152fd5b3461037b575f60031936011261037b57611da8613a94565b611db0613ff8565b611dba8251612eb4565b926040015f5b8351811015611e0b5780611dfa6001600160a01b03611de1600194886128c0565b5116611ded83876128c0565b5161ffff86511691613b4e565b611e0482886128c0565b5201611dc0565b50505061069560405192839283611b03565b604081019060408152825180925260608101916020809401905f5b818110611e7d57505050828183039101528180845192838152019301915f5b828110611e65575050505090565b835161ffff1685529381019392810192600101611e57565b909194938551906005821015610fc25790815293949385019385019190600101611e38565b3461037b575f60031936011261037b57611eba613a94565b611ec2613c39565b611eca613c39565b915f9061ffff611edc825161ffff1690565b16611fe0575b80602060609201611eff611ef8825161ffff1690565b61ffff1690565b611fc0575b5060408101611f18611ef8825161ffff1690565b611f8c575b5001611f2e611ef8825161ffff1690565b611f48575b50808252825261069560405192839283611e1d565b611f6a611f8691611f62611f5c85876128c0565b60039052565b5161ffff1690565b611f7d611f76846130fa565b93866128c0565b9061ffff169052565b5f611f33565b611fa7611fba915f611f9e87896128c0565b525161ffff1690565b611f7d611fb3866130fa565b95886128c0565b5f611f1d565b611fa7611fda91611f62611fd487896128c0565b60029052565b5f611f04565b9050611ff4611fee836128b3565b60019052565b6060612002825161ffff1690565b91612012600193611f7d876128b3565b9050611ee2565b3461037b575f60031936011261037b57612031612ee5565b600260408201516120418161237d565b61204a8161237d565b036114ae576bffffffffffffffffffffffff5f541661206a610b83613620565b6040517f1838fe0f0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff83166004820152336024820152602081604481855afa9081156106b2575f916121ec575b50156114555761210d7603000000000000000000000000000000000000000000007fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff6002541617600255565b803b1561037b576040517f88bb34d50000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff9290921660048301525f908290602490829084905af180156106b2576121d9575b50612171614782565b60208201915f5b8251811015610018576001906121d36121b56121a03061219b610901868a6128c0565b6136d7565b6121af611ef8875161ffff1690565b90614c27565b6121c261090184886128c0565b87516001600160a01b031690613c65565b01612178565b806106a66121e6926118a9565b5f612168565b612205915060203d6020116114a7576114998183611916565b5f6120c1565b3461037b575f60031936011261037b57612223613a94565b61222b613ff8565b90916040015f5b8351811015612298576122696001600160a01b0361225083876128c0565b511661225c83866128c0565b5161ffff85511691613b4e565b9061227481856128c0565b519182039182116122935760019161228c82866128c0565b5201612232565b6130aa565b6122a28385614d42565b9061069560405192839283611b03565b3461037b575f60031936011261037b576122ca612e73565b6122dd6001198036013560f01c36030190565b906122f2603c83013560601c610dcb836128b3565b6122fa612e73565b6040517fce96cb7700000000000000000000000000000000000000000000000000000000815230600482015292909190602090849060249082906028013560601c5afa80156106b2576122a2935f9161235e575b50612358836128b3565b52614d42565b612377915060203d602011610e2057610e128183611916565b5f61234e565b60041115610fc257565b3461037b575f60031936011261037b57606060025460ff8160b01c166001600160a01b036040519261ffff8116845260101c1660208301526123c88161237d565b6040820152f35b3461037b57604060031936011261037b576004356123ec8161037f565b60243567ffffffffffffffff811161037b5761240c903690600401610460565b916001600160a01b03908161241f6149b0565b16906bffffffffffffffffffffffff5f5416823b1561037b576124865f95604051978896879586957f134ab19500000000000000000000000000000000000000000000000000000000875260048701521660248501526060604485015260648401916138c9565b03915afa80156106b25761143f57005b3461037b575f60031936011261037b576040516124b2816118c2565b60028152602080820160403682378251156106b7575f8152825192600193600110156106b75783836001604084015260405192602084019060208552518091526040840194915f5b8281106125075785870386f35b83518752958101959281019284016124fa565b3461037b575f60031936011261037b5760206014610f7e6001198036013560f01c36030190565b3461037b575f60031936011261037b576106956110f0613d49565b3461037b575f60031936011261037b57612574613d9f565b60408051928352602083019190915290f35b3461037b575f60031936011261037b576004602060286125af6001198036013560f01c36030190565b013560601c604051928380927f01e1d1140000000000000000000000000000000000000000000000000000000082525afa80156106b2576020915f916125f9575b50604051908152f35b6126109150823d8411610e2057610e128183611916565b5f6125f0565b3461037b575f60031936011261037b57610018612f25565b3461037b575f60031936011261037b5760206040517f8e24cef3d118e2320bff2d4ac4e82fd5ff0dd3a6e6044ca19f91cd3b6f84750e8152f35b3461037b57606060031936011261037b576004356bffffffffffffffffffffffff8116810361037b5761269c60243561037f565b60443567ffffffffffffffff811161037b576126bc903690600401610460565b50506001600160a01b036126ce6129bc565b16330361178757610018906bffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffff0000000000000000000000005f5416175f55565b3461037b575f60031936011261037b5760405161272c816118c2565b600281526020810190604036833761274d6001198036013560f01c36030190565b918151156106b757603c83013560601c90528051600110156106b7576028919091013560601c604082015261069590604051918291826117eb565b3461037b575f60031936011261037b5760206127ad6001198036013560f01c36030190565b3560601c604051908152f35b604051906127c6826118c2565b565b67ffffffffffffffff81116118bd5760051b60200190565b92916127eb826127c8565b916127f96040519384611916565b829481845260208094019160051b810192831161037b57905b82821061281f5750505050565b838091833561282d8161037f565b815201910190612812565b9291612843826127c8565b916128516040519384611916565b829481845260208094019160051b810192831161037b57905b8282106128775750505050565b8135815290830190830161286a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8051156106b75760200190565b80518210156106b75760209160051b010190565b90156106b75790565b91908110156106b75760051b0190565b3561056a8161037f565b516002811015610fc25790565b9081602091031261037b5751801515810361037b5790565b6040513d5f823e3d90fd5b6129308261237d565b52565b61ffff81511690600254917fffffffffffffffffff000000000000000000000000000000000000000000000076ff00000000000000000000000000000000000000000000604075ffffffffffffffffffffffffffffffffffffffff0000602086015160101b169401516129a58161237d565b6129ae8161237d565b60b01b169316171717600255565b600460206129d36001198036013560f01c36030190565b3560601c604051928380927f8f75315b0000000000000000000000000000000000000000000000000000000082525afa9081156106b2575f91612a14575090565b90506020813d602011612a41575b81612a2f60209383611916565b8101031261037b575161056a8161037f565b3d9150612a22565b969492909593917ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009687549860ff8a60401c16159967ffffffffffffffff811680159081612bf9575b6001149081612bef575b159081612be6575b50612bbc57612adf9960017fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008d9316179055612b6057612d4d565b612ae557565b612b317ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff8154169055565b604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a1565b612bb77ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00680100000000000000007fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff825416179055565b612d4d565b60046040517ff92ee8a9000000000000000000000000000000000000000000000000000000008152fd5b9050155f612aa4565b303b159150612a9c565b8c9150612a92565b601f8111612c0d575050565b60035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b906020601f840160051c83019310612c64575b601f0160051c01905b818110612c59575050565b5f8155600101612c4e565b9091508190612c45565b919067ffffffffffffffff81116118bd57612c9381612c8e60035461182b565b612c01565b5f601f8211600114612cd0578190612cc093945f92612cc5575b50505f198260011b9260031b1c19161790565b600355565b013590505f80612cad565b60035f52601f198216937fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b915f5b868110612d355750836001959610612d1c575b505050811b01600355565b5f1960f88560031b161c199101351690555f8080612d11565b90926020600181928686013581550194019101612cfe565b9197969594929097612d5d614957565b612d656149b0565b926001600160a01b035f9416803b1561037b576040518080937f35088889000000000000000000000000000000000000000000000000000000009d8e83526004830191612db1926138e9565b03815a5f948591f180156106b257612e60575b50612dcd614957565b612df0604051612ddc816118c2565b8481525f60208201525f6040820152612933565b612dfb610b83613620565b90813b15612e5c5783612e1e999a6040519a8b95869485938452600484016138e9565b03925af19182156106b2576127c695612e3c93612e49575b506138fa565b612e44613a57565b612c6e565b806106a6612e56926118a9565b5f612e36565b8380fd5b612e6b9193506118a9565b5f915f612dc4565b604051906040820182811067ffffffffffffffff8211176118bd576040526001825260203681840137565b604051612eaa816118fa565b5f8152905f368137565b90612ebe826127c8565b612ecb6040519182611916565b828152601f19612edb82946127c8565b0190602036910137565b60405190612ef2826118c2565b81604060ff60025461ffff811684526001600160a01b038160101c16602085015260b01c1691612f218361237d565b0152565b612f386001198036013560f01c36030190565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000060208083018281526028850135606090811c602486018190525f1960448088019190915286529395603c0135901c92601f199290915f90612f9e606488611916565b86519082875af15f513d8261300a575b505015612fbd575b5050505050565b60405160208101959095526001600160a01b031660248501525f60448501526064908101845261300093612ffb91612ff59082611916565b82614f7d565b614f7d565b5f80808080612fb6565b90915061301e5750823b15155b5f80612fae565b600114613017565b602090818184031261037b5780519067ffffffffffffffff821161037b57019180601f8401121561037b57825161305c816127c8565b9361306a6040519586611916565b818552838086019260051b82010192831161037b578301905b828210613091575050505090565b838091835161309f8161037f565b815201910190613083565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b9190820180921161229357565b919082604091031261037b576020825192015190565b5f1981146122935760010190565b905f19820191821161229357565b9190820391821161229357565b60405190613130826118de565b5f6060838281528260208201528260408201520152565b519061ffff8216820361037b57565b9081608091031261037b576131a6606060405192613173846118de565b61317c81613147565b845261318a60208201613147565b602085015261319b60408201613147565b604085015201613147565b606082015290565b6131b6613123565b506bffffffffffffffffffffffff5f54166131d2610b83613f6e565b6040517f7c4d3fef0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff83166004820152336024820152602081604481855afa9081156106b2575f916132db575b50156132b1576040517f4a79e4d90000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff929092166004830152608090829060249082905afa9081156106b2575f91613288575090565b61056a915060803d6080116132aa575b6132a28183611916565b810190613156565b503d613298565b60046040517f463396db000000000000000000000000000000000000000000000000000000008152fd5b6132f4915060203d6020116114a7576114998183611916565b5f613229565b91909392935f5b835181101561350e5761331481836128c0565b5180613324575b50600101613301565b61333161090183876128c0565b61333b83866128c0565b519161335c604092838b0194613356611ef8875161ffff1690565b91613b4e565b928382116134e557918493916001958861ffff61337e61349d975161ffff1690565b16156134a3576133b4836133ae6133a96133fc97966133a36133f4976133b9976128c0565b51613116565b61414f565b96613116565b6140fb565b6133dc6133c46127b9565b6fffffffffffffffffffffffffffffffff9096168652565b6effffffffffffffffffffffffffffff166020850152565b820160019052565b61342361340c610901858a6128c0565b6001600160a01b03165f52600160205260405f2090565b8151602083015160409093015160809390931b7effffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff919091161791151560f81b7fff0000000000000000000000000000000000000000000000000000000000000016919091179055565b9061331b565b50506133b46134b4915f9394613116565b916134dd6134c06127b9565b8381526effffffffffffffffffffffffffffff9094166020850152565b8201526133fc565b600483517f156bbc5b000000000000000000000000000000000000000000000000000000008152fd5b505050509050565b9081602091031261037b575190565b6135386001198036013560f01c36030190565b602881013560601c90603c6001600160a01b03841691013560601c81145f146135c457506040517f402d267d000000000000000000000000000000000000000000000000000000008152306004820152915060209082908180602481015b03915afa9081156106b2575f916135ab575090565b61056a915060203d602011610e2057610e128183611916565b036135cf57505f1990565b6040517f417562560000000000000000000000000000000000000000000000000000000081526001600160a01b03919091166004820152602490fd5b9081602091031261037b575161056a8161037f565b6024602060146136396001198036013560f01c36030190565b013560601c604051928380927fb407991c0000000000000000000000000000000000000000000000000000000082527f04f51a4c4a4cf53ba4f53f09da86706c7e9f45dbe97807ec7c84e2f77011460160048301525afa80156106b2576001600160a01b03915f916136aa57501690565b6136cc915060203d6020116136d0575b6136c48183611916565b81019061360b565b1690565b503d6136ba565b6001600160a01b039081169073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee82036137045750503190565b60246020929360405194859384927f70a082310000000000000000000000000000000000000000000000000000000084521660048301525afa9081156106b2575f916135ab575090565b60015b815181101561378a57613777306001600160a01b0361377084866128c0565b51166136d7565b61378357600101613751565b5050600190565b50505f90565b6137f361379b614782565b5f6137a7610b83613e9d565b81546040517f26a5bea80000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff909116600482015293849190829081906024820190565b03915afa9182156106b2575f926138ad575b5061381661082f82518451906130d7565b925f5b8251811015613845578061383f613835610901600194876128c0565b610dcb83896128c0565b01613819565b5091908051915f5b815181101561389b5780613866610901600193856128c0565b6138708582613f27565b501561387e575b500161384d565b61389590610dcb61388e886130fa565b978a6128c0565b5f613877565b505050825181106138a95750565b8252565b6138c29192503d805f833e610a8c8183611916565b905f613805565b601f8260209493601f1993818652868601375f8582860101520116010190565b91602061056a9381815201916138c9565b613902614957565b61390d610b83613f6e565b5f54604080517f4a79e4d90000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff909216600483015291939190608081602481885afa80156106b25760406139799161ffff935f91613a38575b50015161ffff1690565b166139e1575b50823b1561037b576139c3925f92836040518096819582947f35088889000000000000000000000000000000000000000000000000000000008452600484016138e9565b03925af180156106b2576139d45750565b806106a66127c6926118a9565b9390926139ec614782565b925f5b8451811015613a2b57600190613a25613a066127b9565b5f808252602082015260018a82015261342361340c610901858b6128c0565b016139ef565b509250929093505f61397f565b613a51915060803d6080116132aa576132a28183611916565b5f61396f565b613a5f614957565b6127c6612f25565b5f5b815181101561378357613a7f610bed82846128c0565b6002811015610fc25761378a57600101613a69565b613a9c613123565b506001600160a01b03613aad613f6e565b1660806bffffffffffffffffffffffff5f54166024604051809481937f4a79e4d900000000000000000000000000000000000000000000000000000000835260048301525afa9081156106b2575f91613288575090565b8181029291811591840414171561229357565b8115613b21570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b6001600160a01b0390929192165f52600160205260405f209060405191613b74836118c2565b549160406fffffffffffffffffffffffffffffffff84169182815260208101946effffffffffffffffffffffffffffff8160801c16865260f81c1515918291015280613c30575b613bed5750505161056a91506effffffffffffffffffffffffffffff165b6effffffffffffffffffffffffffffff1690565b830392831161229357613bd9613c14613c0c613c2a9361056a96613b04565b612710900490565b92516effffffffffffffffffffffffffffff1690565b906130d7565b50808411613bbb565b6040519060a0820182811067ffffffffffffffff8211176118bd57604052600482526080366020840137565b9082613c7057505050565b6001600160a01b0391821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee8103613d3e5750824710613d06575f809381938293165af13d15613d01573d613cb881614d14565b90613cc66040519283611916565b81525f60203d92013e5b15613cd757565b60046040517fd6bda275000000000000000000000000000000000000000000000000000000008152fd5b613cd0565b6040517fcf47918100000000000000000000000000000000000000000000000000000000815247600482015260248101849052604490fd5b6127c6939250614909565b613d51612e73565b90613d63613d5d613790565b51612eb4565b915f5b8151811015613d9b57613d7c610bed82846128c0565b90613d8781866128c0565b916002811015610fc2576001925201613d66565b5050565b670de0b6b3a7640000613dc3610b836028610d016001198036013560f01c36030190565b604051907f18160ddd0000000000000000000000000000000000000000000000000000000082526020908183600481845afa9283156106b2575f93613e7e575b508215613e7657908060049392604051948580927f01e1d1140000000000000000000000000000000000000000000000000000000082525afa80156106b257613e569385925f92613e59575b5050614ca1565b91565b613e6f9250803d10610e2057610e128183611916565b5f80613e4f565b505050908190565b613e96919350823d8411610e2057610e128183611916565b915f613e03565b602460206014613eb66001198036013560f01c36030190565b013560601c604051928380927fb407991c0000000000000000000000000000000000000000000000000000000082527f585fc1073b6cfa774673b8c567d17fb3595441dcb101cca207779783ece1508060048301525afa80156106b2576001600160a01b03915f916136aa57501690565b91909160015b8351811015613f64576001600160a01b0380613f4983876128c0565b511690831614613f5b57600101613f2d565b92505060019190565b505090505f905f90565b602460206014613f876001198036013560f01c36030190565b013560601c604051928380927fb407991c0000000000000000000000000000000000000000000000000000000082527f8e24cef3d118e2320bff2d4ac4e82fd5ff0dd3a6e6044ca19f91cd3b6f84750e60048301525afa80156106b2576001600160a01b03915f916136aa57501690565b60025460b01c60ff1661400a8161237d565b8061401c575061401861540d565b9091565b906140268261237d565b600191600181149081156140e7575b50156140985761404361540d565b9190928083855f925b614057575b50505050565b8051831015614093578380936140816140773061219b61090185886128c0565b6109e183876128c0565b61408b82866128c0565b52019261404c565b614051565b906140a1614782565b916140ac8351612eb4565b915f815b6140b8575050565b8451811015613d9b578180916140d53061219b610901848b6128c0565b6140df82886128c0565b5201906140b0565b600291506140f48161237d565b145f614035565b6effffffffffffffffffffffffffffff90818111614117571690565b604490604051907f6dfcc650000000000000000000000000000000000000000000000000000000008252607860048301526024820152fd5b6fffffffffffffffffffffffffffffffff9081811161416c571690565b604490604051907f6dfcc650000000000000000000000000000000000000000000000000000000008252608060048301526024820152fd5b91906141b660025460ff9060b01c1690565b6141bf8161237d565b806141cf575061056a9250614ae6565b91906141da8361237d565b60019280840361430b57506141f28493929351612eb4565b916141fc826128b3565b51614206846128b3565b52614210826128b3565b51151591815f9181935b614275575b5050905015614243575b61423957505061056a9051612eb4565b61056a9250614ae6565b6142707fffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffff60025416600255565b614229565b87518410156143065761090161428b85836128c0565b516142c8866142a28c61219b6109018430936128c0565b926142c38d8d6142be84881885891002851898899687946128c0565b613c65565b613116565b6142d2878a6128c0565b526142dd86896128c0565b516142fd575b116142f3575b928101928161421a565b90915081906142e9565b955082956142e3565b61421f565b8061431760039261237d565b036114ae575f939291825b614334575b50505061056a9150613d5d565b835185101561436b578285614363614351610901889985996128c0565b8461435c84886128c0565b5191613c65565b019493614322565b614327565b919061438260025460ff9060b01c1690565b61438b8161237d565b8061439b575061056a9250614ae6565b91906143a68361237d565b60019280840361446e57506143be8493929351612eb4565b916143c8826128b3565b516143d2846128b3565b526143dc826128b3565b51151591815f9181935b6144035750509050156142435761423957505061056a9051612eb4565b87518410156143065761090161441985836128c0565b51614430866142a28c61219b6109018430936128c0565b61443a878a6128c0565b5261444586896128c0565b51614465575b1161445b575b92810192816143e6565b9091508190614451565b9550829561444b565b8061447a60039261237d565b036114ae575f939291825b6144965750505061056a9150613d5d565b835185101561436b5782856144b3614351610901889985996128c0565b019493614485565b9193909260ff60025460b01c166144d18161237d565b80151590816146c8575b506114ae576144f86028610d016001198036013560f01c36030190565b614500612e73565b91614509612e73565b96614512612e73565b9661451b614d30565b96806145de57506001600160a01b0391614534916128d4565b359216604051917f4cdad5060000000000000000000000000000000000000000000000000000000083526020838061457487600483019190602083019252565b0381855afa80156106b257846145aa945f926145bb575b50614597919284614909565b6145a0856128b3565b52610dcb886128b3565b6145b3856128b3565b525b93929190565b61459792506145d89060203d602011610e2057610e128183611916565b9161458b565b9293926001810361469557506001600160a01b03916145fc916128d4565b359116604051917f0a28a4770000000000000000000000000000000000000000000000000000000083526020838061463c84600483019190602083019252565b0381855afa9283156106b2575f9361466e575b506145978361465f949584614909565b614668856128b3565b526145b5565b61465f935061468e6145979160203d602011610e2057610e128183611916565b935061464f565b6040517fb3f26d5d0000000000000000000000000000000000000000000000000000000081526004810191909152602490fd5b600191506146d58161237d565b14155f6144db565b909493929485614702575b50508151156106b7576146ff93602083015261550d565b50565b6001600160a01b0316803b1561037b576040517f740d45200000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff929092166004830152602482018690525f908290604490829084905af180156106b257614773575b806146e8565b61477c906118a9565b5f61476d565b61478a612e73565b90603c6147a06001198036013560f01c36030190565b013560601c8251156106b7576020830152565b6147c66001198036013560f01c36030190565b90602882013560601c91603c6001600160a01b03831691013560601c81145f146148c45750506040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481019290925230602483015260209182816044815f865af180156106b2576148799284925f926148a5575b5060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa9182156106b2575f9261488f57505090565b61056a9250803d10610e2057610e128183611916565b6148bd919250833d8511610e2057610e128183611916565b905f61483f565b82036135cf57506040517f4cdad50600000000000000000000000000000000000000000000000000000000815260048101929092526020908290818060248101613596565b6127c6926001600160a01b03604051937fa9059cbb000000000000000000000000000000000000000000000000000000006020860152166024840152604483015260448252612ffb826118de565b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c161561498657565b60046040517fd7e6bcf8000000000000000000000000000000000000000000000000000000008152fd5b6024602060146149c96001198036013560f01c36030190565b013560601c604051928380927fb407991c0000000000000000000000000000000000000000000000000000000082527fe72db512f617f63e889242cd75fa9e0d2876dc0efa5932893da1cf5a9a0624aa60048301525afa80156106b2576001600160a01b03915f916136aa57501690565b614a42612e73565b90614a566001198036013560f01c36030190565b90603c82013560601c614a68846128b3565b5260286020614a75612e73565b936024604051809481937fce96cb77000000000000000000000000000000000000000000000000000000008352306004840152013560601c5afa9081156106b2575f91614ac7575b50612930836128b3565b614ae0915060203d602011610e2057610e128183611916565b5f614abd565b6001600160a01b039160646020925f614b186028614b0d6001198036013560f01c36030190565b013560601c926128b3565b519160405196879586947fb460af9400000000000000000000000000000000000000000000000000000000865260048601521660248401523060448401525af180156106b257614b6c575b5061056a612e73565b614b849060203d602011610e2057610e128183611916565b505f614b63565b906c0c9f2c9cd04674edea4000000090818302915f1981850993838086109503948086039514614c1a5784831115614c0d5790829109815f038216809204600280826003021880830282030280830282030280830282030280830282030280830282030280920290030293600183805f03040190848311900302920304170290565b821560030260111861535c565b50509061056a9250613b17565b90808202905f1981840990828083109203918083039214614c96576127109082821115614c84577fbc01a36e2eb1c432ca57a786c226809d495182a9930be0ded288ce703afb7e91940990828211900360fc1b910360041c170290565b634e487b715f5260116020526024601cfd5b505061271091500490565b91818302915f1981850993838086109503948086039514614c1a5784831115614c0d5790829109815f038216809204600280826003021880830282030280830282030280830282030280830282030280830282030280920290030293600183805f03040190848311900302920304170290565b67ffffffffffffffff81116118bd57601f01601f191660200190565b60405190614d3d826118fa565b5f8252565b91906bffffffffffffffffffffffff5f541690614d60610b83613e9d565b92604092604051917f26a5bea80000000000000000000000000000000000000000000000000000000083526004955f8480614db386600483019190916bffffffffffffffffffffffff6020820193169052565b0381845afa9384156106b2575f94614f61575b50614dd761082f89518651906130d7565b93614de861082f8a518351906130d7565b965f5b8a51811015614e2d5780614e11614e076109016001948f6128c0565b610dcb838b6128c0565b614e1b818a6128c0565b51614e26828c6128c0565b5201614deb565b509297909398919695508151935f5b8151811015614f4457614e5261090182846128c0565b908186517f8e6e20a90000000000000000000000000000000000000000000000000000000081528d818d8180614eb26020998a968d84019092916001600160a01b036020916bffffffffffffffffffffffff604085019616845216910152565b03915afa9081156106b2576001945f92614f27575b50508a614ed48884613f27565b939015614efc5750614ef4916109e184614eed936128c0565b918b6128c0565b525b01614e3c565b9050614f0e919250610dcb8a8c6128c0565b614f21614f1a896130fa565b988b6128c0565b52614ef6565b614f3d9250803d10610e2057610e128183611916565b5f80614ec7565b505050505091939250935083518110614f5a5750565b8084528252565b614f769194503d805f833e610a8c8183611916565b925f614dc6565b905f602091828151910182855af11561291c575f513d614fe657506001600160a01b0381163b155b614fac5750565b6024906001600160a01b03604051917f5274afe7000000000000000000000000000000000000000000000000000000008352166004820152fd5b60011415614fa5565b919290926040916040615000613a94565b019161ffff615011845161ffff1690565b1615615187579061502c91615024613ff8565b9790966144bb565b919083925f5b885181101561517a57615045818b6128c0565b5161505082886128c0565b5161505a91613116565b6150639061414f565b61506d828b6128c0565b516001600160a01b0316615081838d6128c0565b51895161ffff1661ffff169061509692613b4e565b61509f906140fb565b6150a76127b9565b6fffffffffffffffffffffffffffffffff90921682526effffffffffffffffffffffffffffff1660208201526001818a01526150e3828b6128c0565b516001600160a01b03165f9081526001602052604090208151602083015160409093015160809390931b7effffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff919091161791151560f81b7fff0000000000000000000000000000000000000000000000000000000000000016919091179055600101615032565b5095509550955095915050565b9150915061519794929394614782565b945f5b86518110156151c157806151bb6151b66109016001948b6128c0565b61536c565b0161519a565b5090919294506151d0936144bb565b929391929091565b6151e0612e9e565b9061056a612e9e565b6151f1613a94565b906151fa613ff8565b926040019080845f5b83518110156152645761523a6001600160a01b0361522183876128c0565b511661522d838a6128c0565b5161ffff88511691613b4e565b9061524581896128c0565b519182039182116122935760019161525d828a6128c0565b5201615203565b50939250935050565b906040615278613a94565b019061ffff82511615615336579161342361340c6109016127c69461532a6152ef6152e96133a96152db6152e16109e19d9c6152b2613ff8565b9390986152c16109018b6128b3565b90613356611ef86152d1886128b3565b51925161ffff1690565b9b615655565b9c8d916128b3565b966140fb565b6153126152fa6127b9565b6fffffffffffffffffffffffffffffffff9098168852565b6effffffffffffffffffffffffffffff166020870152565b600160408601526128b3565b905061056a916153576151b6603c610d016001198036013560f01c36030190565b615655565b634e487b715f526020526024601cfd5b6001600160a01b0381165f52600160205260405f20604080519161538f836118c2565b54916fffffffffffffffffffffffffffffffff831681526effffffffffffffffffffffffffffff8360801c169283602083015260f81c151591829101526153d4575050565b6134236127c692604051926153e8846118c2565b5f845260208401525f60408401526001600160a01b03165f52600160205260405f2090565b6154206001198036013560f01c36030190565b90602882013560601c90615446603c615437612e73565b94013560601c610dcb856128b3565b61544e612e73565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290926020918281602481855afa80156106b2576154d39284925f926148a5575060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa9182156106b2575f926154f0575b5050612930836128b3565b6155069250803d10610e2057610e128183611916565b5f806154e5565b9092604090604061551c613a94565b0161ffff61552c825161ffff1690565b161561561e5761553a613ff8565b9290505f5b855181101561560e578083858a89600195615559836128b3565b5115615604576133a96155e8936155a0836108698161559a8a6155fe9c613356611ef86152d1866155946155ad9f6155a79f610901916128c0565b956128c0565b996128c0565b5190613116565b926140fb565b6155d06155b86127b9565b6fffffffffffffffffffffffffffffffff9094168452565b6effffffffffffffffffffffffffffff166020830152565b60018189015261342361340c610901858c6128c0565b0161553f565b50505050506155fe565b50959250505061056a9291614370565b5091939290505f5b845181101561564857806156426151b6610901600194896128c0565b01615626565b5090929161056a92614370565b9060ff60025460b01c166156688161237d565b8015159081615680575b506114ae5761056a916147b3565b6001915061568d8161237d565b14155f61567256