0 txs
86 calls
constructor
constructor(address globalRegistry_, address vault_, address farmToken_, string description_, address delayedWithdrawalAdapter_)
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
viewfunction ERC4626Vault() view returns (address)
FEE_MANAGER
viewfunction FEE_MANAGER() view returns (bytes32)
fees
viewfunction fees() view returns (uint8[] types, uint16[] bps)
globalRegistry
viewfunction globalRegistry() view returns (address)
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)
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)
totalBalances
viewfunction totalBalances() view returns (address[] tokens, uint256[] balances)
validatePositionCreation
viewfunction validatePositionCreation(address sender, bytes creationData) view
vault
viewfunction vault() view returns (address)
deposited
payablefunction deposited(address depositToken, uint256 depositAmount) payable returns (uint256 assetsDeposited)
maxApproveVault
nonpayablefunction maxApproveVault()
migrateToNewStrategy
nonpayablefunction migrateToNewStrategy(address newStrategy, bytes migrationData) returns (bytes)
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
CantWithdrawFees
error CantWithdrawFees()
InvalidDepositToken
error InvalidDepositToken(address invalidToken)
InvalidInitialization
error InvalidInitialization()
InvalidSpecialWithdrawalCode
error InvalidSpecialWithdrawalCode(uint256 invalidCode)
InvalidTokens
error InvalidTokens()
NotEnoughFees
error NotEnoughFees()
NotInitializing
error NotInitializing()
OnlyStrategyRegistry
error OnlyStrategyRegistry()
OnlyVault
error OnlyVault()
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
WithdrawMustBeImmediate
error WithdrawMustBeImmediate()
creation bytecode
0x6101006040908082523461031357614974803803809161001f8285610431565b833981019060a0818303126103135780516001600160a01b0390818116810361031357602093848401519083821682036103135761005e878601610454565b60608601516001600160401b0393919084811161031357870191601f9284848201121561031357805198868a11610402578b51601f199b9a90966100a88783018e168d0189610431565b8188528b8285010111610313578a815f928260809601838b015e8801015201519587871687036103135760a05260c05260e052815192831161040257600254916001978884811c941680156103f8575b888510146103e4578383869511610391575b508792841160011461033357505f92610328575b50505f19600383901b1c191690851b176002555b6080526004828260e051168651928380926338d52e0f60e01b82525afa801561031e5782915f916102e2575b50169060e051169284519280840191815f63095ea7b360e01b94858152886024890152811960448901526044885261019588610416565b87519082885af1903d5f5190836102c5575b5050501561028a575b85516144a690816104ce823960805181612507015260a051818181611ddc01528181611f50015281816130ed01526131c5015260c05181818161057401528181610f05015281816111e60152818161225e015261240e015260e0518181816106e101528181610c7a0152818161137a015281816116bf0152818161173601528181611aef01528181611cd6015281816120030152818161220601528181612a5401528181612f1b0152818161303f01528181613203015281816133c10152818161352d0152818161363d01528181613daf015261436e0152f35b6102bb946102b69287519283015260248201525f6044820152604481526102b081610416565b82610468565b610468565b5f808080806101b0565b919250906102dc575050823b15155b5f80806101a7565b146102d4565b809250848092503d8311610317575b6102fb8183610431565b810103126103135761030d8291610454565b5f61015e565b5f80fd5b503d6102f1565b85513d5f823e3d90fd5b015190505f8061011e565b8894929192169160025f52875f20925f5b8982821061037b5750508411610363575b505050811b01600255610132565b01515f1960f88460031b161c191690555f8080610355565b8385015186558b97909501949384019301610344565b909192935060025f52875f208480870160051c8201928a88106103db575b9187968c92969594930160051c01915b8281106103cd57505061010a565b5f81558796508b91016103bf565b925081926103af565b634e487b7160e01b5f52602260045260245ffd5b93607f16936100f8565b634e487b7160e01b5f52604160045260245ffd5b608081019081106001600160401b0382111761040257604052565b601f909101601f19168101906001600160401b0382119082101761040257604052565b51906001600160a01b038216820361031357565b905f602091828151910182855af1156104c2575f513d6104b957506001600160a01b0381163b155b6104975750565b604051635274afe760e01b81526001600160a01b039091166004820152602490fd5b60011415610490565b6040513d5f823e3d90fdfe6080604052600436101561001a575b3615610018575f80fd5b005b5f3560e01c806301ffc9a714610239578063034db2351461023457806316f3542a1461022f57806317417e0e1461022a578063222142d0146102255780632968766e146102205780632a7c08471461021b57806331f91a8414610216578063326c36811461021157806338d52e0f1461020c5780633c5343b714610207578063402d267d14610202578063492f4e18146101fd578063688e89c1146101f85780636b6b97cd146101f35780636d13e02c146101ee5780636ff97f1d146101e95780637284e416146101e4578063789759be146101df5780637b103999146101da5780639003adfe146101d55780639af1d35a146101d0578063a69a2ad1146101cb578063ac7a1b5b146101c6578063bf9766fe146101c1578063d52bacf3146101bc578063daa8bfdd146101b7578063dae864cf146101b2578063db56b101146101ad578063e8e5ccf3146101a8578063ea26266c146101a3578063f50cd5f81461019e578063fa4c5453146101995763fbfa77cf0361000e5761223f565b6121b0565b612108565b6120ce565b611fb5565b611f8f565b611f74565b611f31565b611ead565b611d40565b611c6a565b611acd565b61195d565b611714565b6116e3565b6116a0565b611574565b611488565b61144e565b6112cd565b6111c2565b611198565b611169565b610ea1565b610df0565b610c0c565b610a55565b610730565b610693565b61050f565b610397565b610358565b610320565b3461030b57602060031936011261030b576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361030b57807ff2670b7300000000000000000000000000000000000000000000000000000000602092149081156102e1575b81156102b7575b506040519015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150145f6102ac565b7fe8662db900000000000000000000000000000000000000000000000000000000811491506102a5565b5f80fd5b6001600160a01b0381160361030b57565b3461030b57602060031936011261030b5760206103476004356103428161030f565b6124e8565b6001600160a01b0360405191168152f35b3461030b57602060031936011261030b576020600435801590811561038257506040519015158152f35b60019150145f6102ac565b5f91031261030b57565b3461030b575f60031936011261030b5760206040517f585fc1073b6cfa774673b8c567d17fb3595441dcb101cca207779783ece150808152f35b9181601f8401121561030b5782359167ffffffffffffffff831161030b576020808501948460051b01011161030b57565b9181601f8401121561030b5782359167ffffffffffffffff831161030b576020838186019501011161030b57565b9081518082526020808093019301915f5b82811061044f575050505090565b835185529381019392810192600101610441565b9081518082526020808093019301915f5b828110610482575050505090565b83516001600160a01b031685529381019392810192600101610474565b90601f19601f602080948051918291828752018686015e5f8582860101520116010190565b926104f061050c95936104e26104fe94608088526080880190610430565b908682036020880152610463565b908482036040860152610430565b91606081840391015261049f565b90565b3461030b5760a060031936011261030b5767ffffffffffffffff60443581811161030b576105419036906004016103d1565b9160643590811161030b5761055a903690600401610402565b50506084356105688161030f565b6001600160a01b0392837f0000000000000000000000000000000000000000000000000000000000000000163303610669576105a692602435613ba3565b9091936105b1613090565b16916bffffffffffffffffffffffff5f5416845115610664576020850151843b1561030b576040517f740d45200000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff9290921660048301526024820152925f908490604490829084905af192831561065f5761064293610646575b50604051948594856104c4565b0390f35b80610653610659926114e4565b8061038d565b5f610635565b6123cd565b61234f565b60046040517f8d1af8bd000000000000000000000000000000000000000000000000000000008152fd5b3461030b57602060031936011261030b5760206004356106b28161030f565b6001600160a01b039081806106c5613008565b1691169081149182156106df575b50506040519015158152f35b7f0000000000000000000000000000000000000000000000000000000000000000161490505f806106d3565b909161072261050c93604084526040840190610430565b916020818403910152610430565b3461030b575f60031936011261030b576001600160a01b036bffffffffffffffffffffffff5f5416610760613090565b610768613d8c565b9390610772613d9d565b9290931660408051937f26a5bea800000000000000000000000000000000000000000000000000000000855260045f86806107c58b600483019190916bffffffffffffffffffffffff6020820193169052565b0381875afa95861561065f575f96610a31575b506107ee6107e986518851906125da565b6124b7565b956107ff6107e987518351906125da565b975f5b87518110156108425780610830818e8c61082a836108238f98600199612389565b5192612389565b52612389565b5161083b828d612389565b5201610802565b508a919293959961085861086b9698519761237c565b5160019687969187811890881002871890565b945f975b6108a2575b50505050505050508261064293949550518110610897575b50519283928361070b565b80845284528461088c565b8098979851891015610a29576108c86108bb8a83612389565b516001600160a01b031690565b8d8b805180927f74168e070000000000000000000000000000000000000000000000000000000082528180610924878b8b84019092916001600160a01b036020916bffffffffffffffffffffffff604085019616845216910152565b03915afa91821561065f578d928f928e89915f915f946109f5575b50509142116109ed575b6109539192613121565b9290156109b05750916109a7826109a16109908d9e9f958d8f986109838f61097d61098a95612610565b90612389565b5190613fb3565b92612610565b9161099b8386612389565b516125da565b92612389565b525b019761086f565b9b91506109e78b8b9c946109d78d966109a18e6c0c9f2c9cd04674edea4000000097613f17565b526109e181612602565b9d612389565b526109a9565b5f9150610949565b610a1993945080919250903d10610a22575b610a118183611551565b8101906125ec565b91908f8061093f565b503d610a07565b879850610874565b610a4e9196503d805f833e610a468183611551565b810190612529565b945f6107d8565b3461030b57606060031936011261030b57600467ffffffffffffffff813581811161030b57610a8790369084016103d1565b9160243590811161030b57610a9f90369085016103d1565b610aaa60443561030f565b610ab26126ce565b92610add610abe6131f9565b610acc9691963689866122a9565b610ad7368789612301565b9061282a565b610afc610aeb3687846122a9565b610af6368587612301565b906133ad565b9380518603610be3575f5b868110610b1057005b610b1d6108bb8284612389565b6001600160a01b03610b47610b3b610b36858c896123a6565b6123b6565b6001600160a01b031690565b911603610bba57610b598185876123a6565b35151580610b97575b610b6e57600101610b07565b876040517ff00866c7000000000000000000000000000000000000000000000000000000008152fd5b50610baa610ba58288612389565b6123c0565b610bb381610e48565b1515610b62565b876040517f672215de000000000000000000000000000000000000000000000000000000008152fd5b866040517f672215de000000000000000000000000000000000000000000000000000000008152fd5b3461030b57608060031936011261030b5767ffffffffffffffff60243581811161030b57610c3e9036906004016103d1565b909160443590811161030b57610c58903690600401610402565b505060643591610c678361030f565b610c6f6126ce565b916001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690610ca3612476565b90610cc9610cb2610b3b613008565b610cbb8461237c565b906001600160a01b03169052565b610cd1612476565b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152909660209290918381602481895afa801561065f57610d599685925f92610dd1575b5060405180809981947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa95861561065f5761064296610d9896610d8b955f92610da4575b5050610d828a61237c565b5260043561362f565b949280979298919461282a565b604051948594856104c4565b610dc39250803d10610dca575b610dbb8183611551565b810190612a3a565b5f80610d77565b503d610db1565b610de9919250833d8511610dca57610dbb8183611551565b905f610d1f565b3461030b575f60031936011261030b5760206001600160a01b03610e12613008565b16604051908152f35b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60021115610e5257565b610e1b565b60209060206040818301928281528551809452019301915f5b828110610e7e575050505090565b909192938451906002821015610e52579081528201938201929190600101610e70565b3461030b57608060031936011261030b5767ffffffffffffffff60243581811161030b57610ed39036906004016103d1565b9160443590811161030b57610eec9036906004016103d1565b929091610efa60643561030f565b6001600160a01b03807f000000000000000000000000000000000000000000000000000000000000000016330361066957926bffffffffffffffffffffffff5f541694610f45613090565b91610f4e61403f565b93610f5985516124b7565b96610f64848461239d565b3596871515946001928716925b828110610fb057505050505050610f9a575b610642610f8e612e91565b60405191829182610e57565b610fa694600435613804565b5f80808080610f83565b610fbb8183886123a6565b35610fca610b368386896123a6565b908d6040928351917f8e6e20a9000000000000000000000000000000000000000000000000000000008352828061102c6020948594600484019092916001600160a01b036020916bffffffffffffffffffffffff604085019616845216910152565b03818b5afa801561065f576110519284925f9261114c575b5050808218908211021890565b91826110a1575b508a51831061106c575b5050600101610f71565b906110769161261e565b611080828d612389565b5261108b818c612389565b51611098575b5f80611062565b60019650611091565b6110af610b3685888b6123a6565b873b1561030b578f915f9161112886925194859384937f5612785a000000000000000000000000000000000000000000000000000000008552606435926004860192936060929195946bffffffffffffffffffffffff60808601971685526001600160a01b038093166020860152604085015216910152565b0381838b5af1801561065f57156110585780610653611146926114e4565b5f611058565b6111629250803d10610dca57610dbb8183611551565b5f80611044565b3461030b57602060031936011261030b57602061119060043561118b8161030f565b612a49565b604051908152f35b3461030b575f60031936011261030b5760206bffffffffffffffffffffffff5f5416604051908152f35b604060031936011261030b576004356111da8161030f565b6001600160a01b0390817f0000000000000000000000000000000000000000000000000000000000000000163303610669576112199060243590614067565b90611222613090565b16906bffffffffffffffffffffffff5f541691803b1561030b576040517f3b1bc9570000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff939093166004840152602483018290525f908390604490829084905af191821561065f57610642926112ad575b506040519081529081906020820190565b6112b6906114e4565b5f61129c565b90602061050c92818152019061049f565b3461030b57604060031936011261030b576004356112ea8161030f565b60243567ffffffffffffffff811161030b5761130a903690600401610402565b50506001600160a01b03908161131e6123d8565b163303611424575f80547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001690556040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f00000000000000000000000000000000000000000000000000000000000000008316602082602481845afa90811561065f57610642946113e1946113ef945f946113fb575b509183916113cd9316906138a8565b604051928391602083019190602083019252565b03601f198101835282611551565b604051918291826112bc565b6113cd939192945061141b9060203d602011610dca57610dbb8183611551565b939190926113be565b60046040517f8cec1de2000000000000000000000000000000000000000000000000000000008152fd5b3461030b575f60031936011261030b5760206040517fe72db512f617f63e889242cd75fa9e0d2876dc0efa5932893da1cf5a9a0624aa8152f35b3461030b575f60031936011261030b576106426114a3612b3d565b604051918291602083526020830190610463565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b67ffffffffffffffff81116114f857604052565b6114b7565b6080810190811067ffffffffffffffff8211176114f857604052565b6060810190811067ffffffffffffffff8211176114f857604052565b6020810190811067ffffffffffffffff8211176114f857604052565b90601f601f19910116810190811067ffffffffffffffff8211176114f857604052565b3461030b575f60031936011261030b576040515f60025460018160011c9160018116918215611696575b60209160208510841461166957848752602087019390811561162c57506001146115d3575b610642866113ef81880382611551565b60025f90815294509192917f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace5b83861061161b57505050910190506113ef826106425f6115c3565b805485870152948201948101611600565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016845250505090151560051b0190506113ef826106425f6115c3565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b92607f169261159e565b3461030b575f60031936011261030b5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461030b575f60031936011261030b5760206103476123d8565b909161072261050c93604084526040840190610463565b3461030b575f60031936011261030b5761172c612c76565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169061175f612476565b9161177761176e610b3b613008565b610cbb8561237c565b61177f612476565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290916020918281602481855afa801561065f576118059284925f926118b9575b5060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa91821561065f575f9261189c575b50506118258294939461237c565b5261183082516124b7565b926040015f5b835181101561188a57806118796118526108bb60019488612389565b61185c8387612389565b5161187361186c875161ffff1690565b61ffff1690565b91612d30565b6118838288612389565b5201611836565b505050610642604051928392836116fd565b6118b29250803d10610dca57610dbb8183611551565b5f80611817565b6118d1919250833d8511610dca57610dbb8183611551565b905f6117cb565b604081019060408152825180925260608101916020809401905f5b81811061193857505050828183039101528180845192838152019301915f5b828110611920575050505090565b835161ffff1685529381019392810192600101611912565b909194938551906005821015610e5257908152939493850193850191906001016118f3565b3461030b575f60031936011261030b57611975612c76565b61197d612e1b565b611985612e1b565b915f9061ffff611997825161ffff1690565b16611a94575b806020606092016119b361186c825161ffff1690565b611a74575b50604081016119cc61186c825161ffff1690565b611a40575b50016119e261186c825161ffff1690565b6119fc575b508082528252610642604051928392836118d8565b611a1e611a3a91611a16611a108587612389565b60039052565b5161ffff1690565b611a31611a2a84612602565b9386612389565b9061ffff169052565b5f6119e7565b611a5b611a6e915f611a528789612389565b525161ffff1690565b611a31611a6786612602565b9588612389565b5f6119d1565b611a5b611a8e91611a16611a888789612389565b60029052565b5f6119b8565b9050611aa8611aa28361237c565b60019052565b6060611ab6825161ffff1690565b91611ac6600193611a318761237c565b905061199d565b3461030b575f60031936011261030b57611ae5612c76565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690611b18612476565b91611b2761176e610b3b613008565b611b2f612476565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290916020918281602481855afa801561065f57611bb49284925f926118b9575060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa91821561065f575f92611c4d575b5050611bd18261237c565b5260405f9201915b8351811015611c335780611c22611c12611bf86108bb60019589612389565b611c028487612389565b5161187361186c895161ffff1690565b611c1c8386612389565b5161261e565b611c2c8285612389565b5201611bd9565b611c3d82856138f6565b90610642604051928392836116fd565b611c639250803d10610dca57610dbb8183611551565b5f80611bc6565b3461030b575f60031936011261030b57611c82612476565b611c99611c90610b3b613008565b610cbb8361237c565b611ca1612476565b6040517fce96cb77000000000000000000000000000000000000000000000000000000008152306004820152916020836024817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561065f57611c3d935f91611d21575b50611d1b8361237c565b526138f6565b611d3a915060203d602011610dca57610dbb8183611551565b5f611d11565b3461030b57604060031936011261030b57600435611d5d8161030f565b60243567ffffffffffffffff811161030b57611d7d903690600401610402565b91906001600160a01b036040517fb407991c0000000000000000000000000000000000000000000000000000000081527fe72db512f617f63e889242cd75fa9e0d2876dc0efa5932893da1cf5a9a0624aa6004820152602081602481857f0000000000000000000000000000000000000000000000000000000000000000165afa90811561065f575f91611e7e575b50166bffffffffffffffffffffffff5f541692813b1561030b575f93611e61604051968795869485947f134ab19500000000000000000000000000000000000000000000000000000000865260048601612e47565b03915afa801561065f57611e7157005b80610653610018926114e4565b611ea0915060203d602011611ea6575b611e988183611551565b810190612ff3565b5f611e0c565b503d611e8e565b3461030b575f60031936011261030b57604051611ec981611519565b6002815260208082016040368237825115610664575f8152825192600193600110156106645783836001604084015260405192602084019060208552518091526040840194915f5b828110611f1e5785870386f35b8351875295810195928101928401611f11565b3461030b575f60031936011261030b5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461030b575f60031936011261030b57610642610f8e612e91565b3461030b575f60031936011261030b576040611fa9612ee7565b82519182526020820152f35b3461030b575f60031936011261030b57611fcd613008565b6040517f095ea7b30000000000000000000000000000000000000000000000000000000060208083018281526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116602486018190525f196044808801919091528652939593601f199390925f9061204e606489611551565b87519082885af1903d5f5190836120ad575b5050501561206a57005b60405160208101959095526001600160a01b031660248501525f604485015260649081018452610018936120a8916120a29082611551565b82613b31565b613b31565b919250906120c4575083163b15155b5f8080612060565b60019150146120bc565b3461030b575f60031936011261030b5760206040517f8e24cef3d118e2320bff2d4ac4e82fd5ff0dd3a6e6044ca19f91cd3b6f84750e8152f35b3461030b57606060031936011261030b576004356bffffffffffffffffffffffff8116810361030b5761213c60243561030f565b60443567ffffffffffffffff811161030b5761215c903690600401610402565b50506001600160a01b0361216e6123d8565b16330361142457610018906bffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffff0000000000000000000000005f5416175f55565b3461030b575f60031936011261030b576040516121cc81611519565b60028152602081019060403683376001600160a01b0391826121ec613008565b1690825115610664575280516001101561066457610642917f0000000000000000000000000000000000000000000000000000000000000000166040820152604051918291602083526020830190610463565b3461030b575f60031936011261030b5760206040516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b6040519061228f82611519565b565b67ffffffffffffffff81116114f85760051b60200190565b92916122b482612291565b916122c26040519384611551565b829481845260208094019160051b810192831161030b57905b8282106122e85750505050565b83809183356122f68161030f565b8152019101906122db565b929161230c82612291565b9161231a6040519384611551565b829481845260208094019160051b810192831161030b57905b8282106123405750505050565b81358152908301908301612333565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8051156106645760200190565b80518210156106645760209160051b010190565b90156106645790565b91908110156106645760051b0190565b3561050c8161030f565b516002811015610e525790565b6040513d5f823e3d90fd5b6040517f8f75315b0000000000000000000000000000000000000000000000000000000081526020816004816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa90811561065f575f91612441575090565b90506020813d60201161246e575b8161245c60209383611551565b8101031261030b575161050c8161030f565b3d915061244f565b604051906040820182811067ffffffffffffffff8211176114f8576040526001825260203681840137565b6040516124ad81611535565b5f8152905f368137565b906124c182612291565b6124ce6040519182611551565b828152601f196124de8294612291565b0190602036910137565b6001600160a01b03806124f9613008565b16911614612505575f90565b7f000000000000000000000000000000000000000000000000000000000000000090565b602090818184031261030b5780519067ffffffffffffffff821161030b57019180601f8401121561030b57825161255f81612291565b9361256d6040519586611551565b818552838086019260051b82010192831161030b578301905b828210612594575050505090565b83809183516125a28161030f565b815201910190612586565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b919082018092116125e757565b6125ad565b919082604091031261030b576020825192015190565b5f1981146125e75760010190565b905f1982019182116125e757565b919082039182116125e757565b60405190612638826114fd565b5f6060838281528260208201528260408201520152565b9081602091031261030b5751801515810361030b5790565b519061ffff8216820361030b57565b9081608091031261030b576126c6606060405192612693846114fd565b61269c81612667565b84526126aa60208201612667565b60208501526126bb60408201612667565b604085015201612667565b606082015290565b6126d661262b565b506bffffffffffffffffffffffff5f54166126f2610b3b613168565b6040517f7c4d3fef0000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff83166004820152336024820152602081604481855afa90811561065f575f916127fb575b50156127d1576040517f4a79e4d90000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff929092166004830152608090829060249082905afa90811561065f575f916127a8575090565b61050c915060803d6080116127ca575b6127c28183611551565b810190612676565b503d6127b8565b60046040517f463396db000000000000000000000000000000000000000000000000000000008152fd5b61281d915060203d602011612823575b6128158183611551565b81019061264f565b5f612749565b503d61280b565b91909392935f5b8351811015612a32576128448183612389565b5180612854575b50600101612831565b6128616108bb8387612389565b61286b8386612389565b5191612886604092838b019461187361186c875161ffff1690565b92838211612a0957918493916001958861ffff6128a86129c1975161ffff1690565b16156129c7576128d8836128d26128cd6129209796611c1c612918976128dd97612389565b613358565b9661261e565b613304565b6129006128e8612282565b6fffffffffffffffffffffffffffffffff9096168652565b6effffffffffffffffffffffffffffff166020850152565b820160019052565b6129476129306108bb858a612389565b6001600160a01b03165f52600160205260405f2090565b8151602083015160409093015160809390931b7effffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff919091161791151560f81b7fff0000000000000000000000000000000000000000000000000000000000000016919091179055565b9061284b565b50506128d86129d8915f939461261e565b91612a016129e4612282565b8381526effffffffffffffffffffffffffffff9094166020850152565b820152612920565b600483517f156bbc5b000000000000000000000000000000000000000000000000000000008152fd5b505050509050565b9081602091031261030b575190565b6001600160a01b03807f00000000000000000000000000000000000000000000000000000000000000001690612a83610b3b610b3b613008565b908316908103612af657506040517f402d267d000000000000000000000000000000000000000000000000000000008152306004820152915060209082908180602481015b03915afa90811561065f575f91612add575090565b61050c915060203d602011610dca57610dbb8183611551565b03612b0157505f1990565b6040517f417562560000000000000000000000000000000000000000000000000000000081526001600160a01b03919091166004820152602490fd5b612ba0612b4861403f565b5f612b54610b3b613090565b81546040517f26a5bea80000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff909116600482015293849190829081906024820190565b03915afa91821561065f575f92612c5a575b50612bc36107e982518451906125da565b925f5b8251811015612bf25780612bec612be26108bb60019487612389565b610cbb8389612389565b01612bc6565b5091908051915f5b8151811015612c485780612c136108bb60019385612389565b612c1d8582613121565b5015612c2b575b5001612bfa565b612c4290610cbb612c3b88612602565b978a612389565b5f612c24565b50505082518110612c565750565b8252565b612c6f9192503d805f833e610a468183611551565b905f612bb2565b612c7e61262b565b506001600160a01b03612c8f613168565b1660806bffffffffffffffffffffffff5f54166024604051809481937f4a79e4d900000000000000000000000000000000000000000000000000000000835260048301525afa90811561065f575f916127a8575090565b818102929181159184041417156125e757565b8115612d03570490565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b6001600160a01b0390929192165f52600160205260405f209060405191612d5683611519565b549160406fffffffffffffffffffffffffffffffff84169182815260208101946effffffffffffffffffffffffffffff8160801c16865260f81c1515918291015280612e12575b612dcf5750505161050c91506effffffffffffffffffffffffffffff165b6effffffffffffffffffffffffffffff1690565b83039283116125e757612dbb612df6612dee612e0c9361050c96612ce6565b612710900490565b92516effffffffffffffffffffffffffffff1690565b906125da565b50808411612d9d565b6040519060a0820182811067ffffffffffffffff8211176114f857604052600482526080366020840137565b9293806080956001600160a01b03601f19956bffffffffffffffffffffffff601f9616885216602087015260606040870152816060870152868601375f8582860101520116010190565b612e99614026565b90612eab612ea5612b3d565b516124b7565b915f5b8151811015612ee357612ec4610ba58284612389565b90612ecf8186612389565b916002811015610e52576001925201612eae565b5050565b6040517f18160ddd000000000000000000000000000000000000000000000000000000008152670de0b6b3a76400009060207f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168183600481845afa92831561065f575f93612fd4575b508215612fcc57908060049392604051948580927f01e1d1140000000000000000000000000000000000000000000000000000000082525afa801561065f57612fac9385925f92612faf575b5050613fb3565b91565b612fc59250803d10610dca57610dbb8183611551565b5f80612fa5565b505050908190565b612fec919350823d8411610dca57610dbb8183611551565b915f612f59565b9081602091031261030b575161050c8161030f565b6001600160a01b036040517f38d52e0f000000000000000000000000000000000000000000000000000000008152602081600481857f0000000000000000000000000000000000000000000000000000000000000000165afa90811561065f575f9161307357501690565b61308c915060203d602011611ea657611e988183611551565b1690565b6001600160a01b036040517fb407991c0000000000000000000000000000000000000000000000000000000081527f585fc1073b6cfa774673b8c567d17fb3595441dcb101cca207779783ece150806004820152602081602481857f0000000000000000000000000000000000000000000000000000000000000000165afa90811561065f575f9161307357501690565b91909160015b835181101561315e576001600160a01b03806131438387612389565b51169083161461315557600101613127565b92505060019190565b505090505f905f90565b6001600160a01b036040517fb407991c0000000000000000000000000000000000000000000000000000000081527f8e24cef3d118e2320bff2d4ac4e82fd5ff0dd3a6e6044ca19f91cd3b6f84750e6004820152602081602481857f0000000000000000000000000000000000000000000000000000000000000000165afa90811561065f575f9161307357501690565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661322b612476565b9161323a61176e610b3b613008565b613242612476565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290926020918281602481855afa801561065f576132c79284925f926118b9575060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa91821561065f575f926132e7575b50506132e48361237c565b52565b6132fd9250803d10610dca57610dbb8183611551565b5f806132d9565b6effffffffffffffffffffffffffffff90818111613320571690565b604490604051907f6dfcc650000000000000000000000000000000000000000000000000000000008252607860048301526024820152fd5b6fffffffffffffffffffffffffffffffff90818111613375571690565b604490604051907f6dfcc650000000000000000000000000000000000000000000000000000000008252608060048301526024820152fd5b906134209060206133e76001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169261237c565b51604051809481927f0a28a477000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b0381845afa91821561065f575f926134f3575b50816134519161344b610b3b6103426108bb8861237c565b906138a8565b61346f6108bb613469610b3b6103426108bb8761237c565b9361237c565b90823b1561030b576040517f272017e00000000000000000000000000000000000000000000000000000000081525f600482018190526001600160a01b0390931660248201526044810191909152918290818381606481015b03925af1801561065f576134e0575b5061050c614026565b806106536134ed926114e4565b5f6134d7565b6134519192506135119060203d602011610dca57610dbb8183611551565b9190613433565b90916135539060206133e76001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169261237c565b0381845afa91821561065f575f926135f8575b508161357e9161344b610b3b6103426108bb8961237c565b61359c6108bb613596610b3b6103426108bb8861237c565b9461237c565b92803b1561030b576040517f272017e000000000000000000000000000000000000000000000000000000000815260048101939093526001600160a01b0390931660248301526044820152905f908290818381606481016134c8565b61357e9192506136169060203d602011610dca57610dbb8183611551565b9190613566565b6040519061362a82611535565b5f8252565b909192936001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016613665612476565b9561366e612476565b95613677612476565b9561368061361d565b95806137325750906136919161239d565b3591604051917f4cdad506000000000000000000000000000000000000000000000000000000008352602083806136d087600483019190602083019252565b0381855afa801561065f5784613706945f9261370f575b506136f39192846138a8565b6136fc8961237c565b52610cbb8761237c565b6132e48461237c565b6136f3925061372c9060203d602011610dca57610dbb8183611551565b916136e7565b929392600181036137d15750906137489161239d565b3590604051917f0a28a4770000000000000000000000000000000000000000000000000000000083526020838061378784600483019190602083019252565b0381855afa92831561065f575f936137aa575b506136f3836137069495846138a8565b61370693506137ca6136f39160203d602011610dca57610dbb8183611551565b935061379a565b6040517fb3f26d5d0000000000000000000000000000000000000000000000000000000081526004810191909152602490fd5b9194939485613828575b505082511561066457613825936020840152614210565b50565b6001600160a01b0316803b1561030b576040517f740d45200000000000000000000000000000000000000000000000000000000081526bffffffffffffffffffffffff929092166004830152602482018690525f908290604490829084905af1801561065f57613899575b8061380e565b6138a2906114e4565b5f613893565b61228f926001600160a01b03604051937fa9059cbb0000000000000000000000000000000000000000000000000000000060208601521660248401526044830152604482526120a8826114fd565b91906bffffffffffffffffffffffff5f541690613914610b3b613090565b92604092604051917f26a5bea80000000000000000000000000000000000000000000000000000000083526004955f848061396786600483019190916bffffffffffffffffffffffff6020820193169052565b0381845afa93841561065f575f94613b15575b5061398b6107e989518651906125da565b9361399c6107e98a518351906125da565b965f5b8a518110156139e157806139c56139bb6108bb6001948f612389565b610cbb838b612389565b6139cf818a612389565b516139da828c612389565b520161399f565b509297909398919695508151935f5b8151811015613af857613a066108bb8284612389565b908186517f8e6e20a90000000000000000000000000000000000000000000000000000000081528d818d8180613a666020998a968d84019092916001600160a01b036020916bffffffffffffffffffffffff604085019616845216910152565b03915afa90811561065f576001945f92613adb575b50508a613a888884613121565b939015613ab05750613aa89161099b84613aa193612389565b918b612389565b525b016139f0565b9050613ac2919250610cbb8a8c612389565b613ad5613ace89612602565b988b612389565b52613aaa565b613af19250803d10610dca57610dbb8183611551565b5f80613a7b565b505050505091939250935083518110613b0e5750565b8084528252565b613b2a9194503d805f833e610a468183611551565b925f61397a565b905f602091828151910182855af1156123cd575f513d613b9a57506001600160a01b0381163b155b613b605750565b6024906001600160a01b03604051917f5274afe7000000000000000000000000000000000000000000000000000000008352166004820152fd5b60011415613b59565b919290926040916040613bb4612c76565b019161ffff613bc5845161ffff1690565b1615613d3b5790613be091613bd86131f9565b97909661362f565b919083925f5b8851811015613d2e57613bf9818b612389565b51613c048288612389565b51613c0e9161261e565b613c1790613358565b613c21828b612389565b516001600160a01b0316613c35838d612389565b51895161ffff1661ffff1690613c4a92612d30565b613c5390613304565b613c5b612282565b6fffffffffffffffffffffffffffffffff90921682526effffffffffffffffffffffffffffff1660208201526001818a0152613c97828b612389565b516001600160a01b03165f9081526001602052604090208151602083015160409093015160809390931b7effffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff919091161791151560f81b7fff0000000000000000000000000000000000000000000000000000000000000016919091179055600101613be6565b5095509550955095915050565b91509150613d4b9492939461403f565b945f5b8651811015613d755780613d6f613d6a6108bb6001948b612389565b61415f565b01613d4e565b509091929450613d849361362f565b929391929091565b613d946124a1565b9061050c6124a1565b613da5612c76565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016613dd7612476565b613de5611c90610b3b613008565b613ded612476565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290926020918281602481855afa801561065f57613e729284925f926118b9575060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa91821561065f575f92613efa575b5050613e928395949561237c565b5281819060405f9601955b8351811015613ef15780613ee0613ed6613ebc6108bb60019589612389565b613ec6848a612389565b5161187361186c8d5161ffff1690565b611c1c8389612389565b613eea8288612389565b5201613e9d565b50939250935050565b613f109250803d10610dca57610dbb8183611551565b5f80613e84565b906c0c9f2c9cd04674edea4000000090818302915f1981850993838086109503948086039514613fa65784831115613f995790829109815f038216809204600280826003021880830282030280830282030280830282030280830282030280830282030280920290030293600183805f03040190848311900302920304170290565b8215600302601118614200565b50509061050c9250612cf9565b91818302915f1981850993838086109503948086039514613fa65784831115613f995790829109815f038216809204600280826003021880830282030280830282030280830282030280830282030280830282030280920290030293600183805f03040190848311900302920304170290565b61402e612476565b908151156106645760016020830152565b614047612476565b906001600160a01b03614058613008565b16825115610664576020830152565b9190916040614074612c76565b019061ffff938483511615614139576135966140c5916140bf6140956131f9565b9890966001600160a01b036140a98961237c565b5116916140b58b61237c565b5191511691612d30565b93614362565b518481018091116125e7576129306108bb61228f9461412d6140f26140ec61294796613358565b96613304565b6141156140fd612282565b6fffffffffffffffffffffffffffffffff9098168852565b6effffffffffffffffffffffffffffff166020870152565b6001604086015261237c565b915061050c92935061415a6001600160a01b03614154613008565b1661415f565b614362565b6001600160a01b0381165f52600160205260405f20604080519161418283611519565b54916fffffffffffffffffffffffffffffffff831681526effffffffffffffffffffffffffffff8360801c169283602083015260f81c151591829101526141c7575050565b61294761228f92604051926141db84611519565b5f845260208401525f60408401526001600160a01b03165f52600160205260405f2090565b634e487b715f526020526024601cfd5b9192604090604061421f612c76565b0161ffff61422f825161ffff1690565b161561432b5761423d6131f9565b9290505f5b855181101561431b578083858a8960019561425c8361237c565b5115614311576128cd6142f5936142ad83610823816142a78a61430b9c61187361186c61429d866142976142ba9f6142b49f6108bb91612389565b95612389565b51925161ffff1690565b99612389565b519061261e565b92613304565b6142dd6142c5612282565b6fffffffffffffffffffffffffffffffff9094168452565b6effffffffffffffffffffffffffffff166020830152565b6001818901526129476129306108bb858c612389565b01614242565b505050505061430b565b5095939250505061050c92613518565b5091929390505f5b8351811015614355578061434f613d6a6108bb60019488612389565b01614333565b5090929161050c92613518565b6001600160a01b0390817f0000000000000000000000000000000000000000000000000000000000000000169161439d610b3b610b3b613008565b9082169081036144615750506040517f6e553f65000000000000000000000000000000000000000000000000000000008152600481019290925230602483015260209182816044815f865af1801561065f576144359284925f926118b9575060405180809581947f4cdad506000000000000000000000000000000000000000000000000000000008352600483019190602083019252565b03915afa91821561065f575f9261444b57505090565b61050c9250803d10610dca57610dbb8183611551565b8203612b0157506040517f4cdad50600000000000000000000000000000000000000000000000000000000815260048101929092526020908290818060248101612ac8560000000000000000000000000c150ff246d2d5878f838afe50ee37fa64aeeab700000000000000000000000058e5d76fbbd7e1b51f0fc0f66b7734e108be046100000000000000000000000028f53ba70e5c8ce8d03b1fad41e9df11bb646c3600000000000000000000000000000000000000000000000000000000000000a00000000000000000000000002af61324a7ac16770fd10491b6c575a4c189ae82000000000000000000000000000000000000000000000000000000000000001944656c6179656420596561726e20763320574d415449432d4100000000000000