565 txs
659 calls
constructor
constructor(address _initialOwner, address _reserveToken_, address _debtToken_, address _dynamicFeeOracleBaseToken, address _lovToken, address _borrowLend, address _morphoALToMarketALOracle)
functions
acceptedExitTokens
viewfunction acceptedExitTokens() view returns (address[] tokens)
acceptedInvestTokens
viewfunction acceptedInvestTokens() view returns (address[] tokens)
allowAll
viewfunction allowAll() view returns (bool)
allowedAccounts
viewfunction allowedAccounts(address account) view returns (bool allowed)
areExitsPaused
viewfunction areExitsPaused() view returns (bool)
areInvestmentsPaused
viewfunction areInvestmentsPaused() view returns (bool)
assetsAndLiabilities
viewfunction assetsAndLiabilities(uint8 debtPriceType) view returns (uint256, uint256, uint256)
assetToLiabilityRatio
viewfunction assetToLiabilityRatio() view returns (uint128)
baseToken
viewfunction baseToken() view returns (address)
borrowLend
viewfunction borrowLend() view returns (address)
debtToken
viewfunction debtToken() view returns (address)
debtTokenToReserveTokenOracle
viewfunction debtTokenToReserveTokenOracle() view returns (address)
dynamicFeeOracleBaseToken
viewfunction dynamicFeeOracleBaseToken() view returns (address)
dynamicFeePriceOracle
viewfunction dynamicFeePriceOracle() view returns (address)
effectiveExposure
viewfunction effectiveExposure(uint8 debtPriceType) view returns (uint128)
exitQuote
viewfunction exitQuote(uint256 investmentAmount, address toToken, uint256 maxSlippageBps, uint256 deadline) view returns (tuple quoteData, uint256[] exitFeeBps)
explicitFunctionAccess
viewfunction explicitFunctionAccess(address, bytes4) view returns (bool)
getDynamicFeesBps
viewfunction getDynamicFeesBps() view returns (uint256 depositFeeBps, uint256 exitFeeBps)
getFeeConfig
viewfunction getFeeConfig() view returns (uint64, uint64, uint64)
investQuote
viewfunction investQuote(uint256 fromTokenAmount, address fromToken, uint256 maxSlippageBps, uint256 deadline) view returns (tuple quoteData, uint256[] investFeeBps)
isPauser
viewfunction isPauser(address account) view returns (bool canPause)
liabilities
viewfunction liabilities(uint8 debtPriceType) view returns (uint256)
lovToken
viewfunction lovToken() view returns (address)
maxExit
viewfunction maxExit(address toToken) view returns (uint256 sharesAmount)
maxInvest
viewfunction maxInvest(address fromToken) view returns (uint256 fromTokenAmount)
morphoALToMarketALOracle
viewfunction morphoALToMarketALOracle() view returns (address)
owner
viewfunction owner() view returns (address)
pausers
viewfunction pausers(address account) view returns (bool canPause)
PRECISION
viewfunction PRECISION() view returns (uint256)
rebalanceALRange
viewfunction rebalanceALRange() view returns (uint128 floor, uint128 ceiling)
reservesBalance
viewfunction reservesBalance() view returns (uint256)
reservesToShares
viewfunction reservesToShares(uint256 reserves, uint8 debtPriceType) view returns (uint256)
reserveToken
viewfunction reserveToken() view returns (address)
sharesToReserves
viewfunction sharesToReserves(uint256 shares, uint8 debtPriceType) view returns (uint256)
userALRange
viewfunction userALRange() view returns (uint128 floor, uint128 ceiling)
userRedeemableReserves
viewfunction userRedeemableReserves(uint8 debtPriceType) view returns (uint256)
acceptOwner
nonpayablefunction acceptOwner()
exitToToken
nonpayablefunction exitToToken(address, tuple quoteData, address recipient) returns (uint256 toTokenAmount, uint256 toBurnAmount)
forceRebalanceDown
nonpayablefunction forceRebalanceDown(tuple params)
forceRebalanceUp
nonpayablefunction forceRebalanceUp(tuple params)
investWithToken
nonpayablefunction investWithToken(address account, tuple quoteData) returns (uint256 investmentAmount)
proposeNewOwner
nonpayablefunction proposeNewOwner(address account)
rebalanceDown
nonpayablefunction rebalanceDown(tuple params)
rebalanceUp
nonpayablefunction rebalanceUp(tuple params)
recoverToken
nonpayablefunction recoverToken(address token, address to, uint256 amount)
setAllowAccount
nonpayablefunction setAllowAccount(address account, bool value)
setAllowAll
nonpayablefunction setAllowAll(bool value)
setBorrowLend
nonpayablefunction setBorrowLend(address _address)
setExplicitAccess
nonpayablefunction setExplicitAccess(address allowedCaller, tuple[] access)
setFeeConfig
nonpayablefunction setFeeConfig(uint16 minDepositFeeBps, uint16 minExitFeeBps, uint24 feeLeverageFactor)
setMorphoALToMarketALOracle
nonpayablefunction setMorphoALToMarketALOracle(address _morphoALToMarketALOracle)
setOracles
nonpayablefunction setOracles(address _debtTokenToReserveTokenOracle, address _dynamicFeePriceOracle)
setPaused
nonpayablefunction setPaused(tuple updatedPaused)
setPauser
nonpayablefunction setPauser(address account, bool canPause)
setRebalanceALRange
nonpayablefunction setRebalanceALRange(uint128 floor, uint128 ceiling)
setUserALRange
nonpayablefunction setUserALRange(uint128 floor, uint128 ceiling)
events
AllowAccountSet
event AllowAccountSet(address indexed account, bool value)
AllowAllSet
event AllowAllSet(bool value)
BorrowLendSet
event BorrowLendSet(address indexed addr)
ExplicitAccessSet
event ExplicitAccessSet(address indexed account, bytes4 indexed fnSelector, bool indexed value)
FeeConfigSet
event FeeConfigSet(uint16 maxExitFeeBps, uint16 minExitFeeBps, uint24 feeLeverageFactor)
InKindFees
event InKindFees(uint8 feeType, uint256 feeBps, uint256 feeAmount)
MorphoALToMarketALOracleSet
event MorphoALToMarketALOracleSet(address indexed morphoALToMarketALOracle)
NewOwnerAccepted
event NewOwnerAccepted(address indexed oldOwner, address indexed newOwner)
NewOwnerProposed
event NewOwnerProposed(address indexed oldOwner, address indexed oldProposedOwner, address indexed newProposedOwner)
OraclesSet
event OraclesSet(address indexed debtTokenToReserveTokenOracle, address indexed dynamicFeePriceOracle)
PausedSet
event PausedSet((bool investmentsPaused, bool exitsPaused) paused)
PauserSet
event PauserSet(address indexed account, bool canPause)
Rebalance
event Rebalance(int256 collateralChange, int256 debtChange, uint256 alRatioBefore, uint256 alRatioAfter)
RebalanceALRangeSet
event RebalanceALRangeSet(uint128 floor, uint128 ceiling)
UserALRangeSet
event UserALRangeSet(uint128 floor, uint128 ceiling)
errors
ALTooHigh
error ALTooHigh(uint128 ratioBefore, uint128 ratioAfter, uint128 maxRatio)
ALTooLow
error ALTooLow(uint128 ratioBefore, uint128 ratioAfter, uint128 minRatio)
ExpectedNonZero
error ExpectedNonZero()
InvalidAccess
error InvalidAccess()
InvalidAddress
error InvalidAddress(address addr)
InvalidAmount
error InvalidAmount(address token, uint256 amount)
InvalidParam
error InvalidParam()
InvalidRange
error InvalidRange(uint128 floor, uint128 ceiling)
InvalidToken
error InvalidToken(address token)
IsPaused
error IsPaused()
NoAvailableReserves
error NoAvailableReserves()
Overflow
error Overflow(uint256 amount)
PRBMath_MulDiv_Overflow
error PRBMath_MulDiv_Overflow(uint256 x, uint256 y, uint256 denominator)
Slippage
error Slippage(uint256 minAmountExpected, uint256 actualAmount)
creation bytecode
0x6101006040523480156200001257600080fd5b50604051620052bc380380620052bc833981016040819052620000359162000250565b8686868686868582816200004981620001ba565b506001600160a01b0390811660805286811660a05285811660c05284811660e052600a80546001600160a01b0319168483161790556040805163313ce56760e01b81529051600093509185169163313ce567916004808201926020929091908290030181865afa158015620000c2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e89190620002e5565b60ff16905080866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200012d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001539190620002e5565b60ff1614620001855760405163961c9a4f60e01b81526001600160a01b03871660048201526024015b60405180910390fd5b5050600d80546001600160a01b0319166001600160a01b03979097169690961790955550620003119950505050505050505050565b6000546001600160a01b031615620001e557604051633006171960e21b815260040160405180910390fd5b6001600160a01b0381166200021157604051634726455360e11b8152600060048201526024016200017c565b600080546001600160a01b0319166001600160a01b0392909216919091179055565b80516001600160a01b03811681146200024b57600080fd5b919050565b600080600080600080600060e0888a0312156200026c57600080fd5b620002778862000233565b9650620002876020890162000233565b9550620002976040890162000233565b9450620002a76060890162000233565b9350620002b76080890162000233565b9250620002c760a0890162000233565b9150620002d760c0890162000233565b905092959891949750929550565b600060208284031215620002f857600080fd5b815160ff811681146200030a57600080fd5b9392505050565b60805160a05160c05160e051614ed0620003ec600039600081816107b8015281816110b8015281816129850152612feb01526000818161090c01528181611056015281816110d90152818161216d01526126df01526000818161080201528181611035015281816114960152818161289d015281816129fd015281816131100152818161315f015281816136d2015281816137e70152818161390801528181613a960152613bdc01526000818161040c015281816118d601528181611efc0152818161280f01528181612ae20152613b1c0152614ed06000f3fe608060405234801561001057600080fd5b50600436106103785760003560e01c80638a83c9cd116101d3578063bfccf0ec11610104578063e04610ed116100a2578063eea2f45c1161007c578063eea2f45c146108e4578063f4325d6714610800578063f69959a3146108f7578063f8d898981461090a57600080fd5b8063e04610ed14610898578063e664b020146108bb578063ebbc4965146108dc57600080fd5b8063d09da07f116100de578063d09da07f14610839578063d4da79b31461084c578063da5e0f0e14610857578063daeccc791461086a57600080fd5b8063bfccf0ec146107ed578063c55dae6314610800578063c677e2751461082657600080fd5b8063a8e93cdb11610171578063b1f8100d1161014b578063b1f8100d1461078d578063b5a2d9a9146107a0578063ba2c4649146107b3578063baaaa7b1146107da57600080fd5b8063a8e93cdb1461073d578063aaf5eb681461076b578063b07c63c71461077a57600080fd5b806395ea64a5116101ad57806395ea64a5146106ea5780639a6b27cf146106fd578063a515b8ec1461070d578063a7229fd91461072a57600080fd5b80638a83c9cd146106665780638da5cb5b146106c457806395c5b3b6146106d757600080fd5b80634ee643a5116102ad5780636026220d1161024b5780636a1eb7b8116102255780636a1eb7b8146106665780637180c8ca1461067b57806372e0c0f41461068e57806380f51c12146106a157600080fd5b80636026220d1461062d578063643b1e501461064057806365f2ba2f1461065357600080fd5b8063572a930211610287578063572a9302146105a85780635890ac2d146105bb5780635aa89173146105ce5780635fbbc0d2146105e157600080fd5b80634ee643a51461057557806352e648f01461058257806353740e041461059557600080fd5b8063415a12711161031a5780634c9da063116102f45780634c9da063146104fd5780634cdf587a146105315780634d7d9c011461055a5780634edd74e81461056d57600080fd5b8063415a12711461049b578063431072f7146104ae57806346fbf68e146104c157600080fd5b806319000c421161035657806319000c42146104075780631a0377d11461044657806324b821ab1461046757806329aa41361461048857600080fd5b806302cb4ed11461037d5780630bd7260d1461039257806313da2d4a146103a5575b600080fd5b61039061038b366004614226565b610930565b005b6103906103a0366004614226565b610989565b6008546103d9906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff9384168152929091166020830152015b60405180910390f35b61042e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103fe565b610459610454366004614270565b6109df565b6040516103fe929190614356565b61047a6104753660046143dc565b610b2e565b6040519081526020016103fe565b610390610496366004614416565b610b4b565b61047a6104a936600461444f565b610cb3565b6103906104bc36600461448c565b610d1e565b6104ed6104cf36600461444f565b6001600160a01b031660009081526003602052604090205460ff1690565b60405190151581526020016103fe565b6009546103d9906fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b610539610e3e565b6040516fffffffffffffffffffffffffffffffff90911681526020016103fe565b6103906105683660046144b6565b610e57565b61047a610f07565b6005546104ed9060ff1681565b600c5461042e906001600160a01b031681565b6103906105a3366004614226565b610f8e565b6103906105b63660046144d3565b610fe4565b6103906105c936600461444f565b611165565b6103906105dc366004614513565b61125d565b6007546040805167ffffffffffffffff808416825268010000000000000000840481166020830152700100000000000000000000000000000000909304909216908201526060016103fe565b61047a61063b366004614562565b6113f5565b61047a61064e3660046143dc565b611408565b610390610661366004614226565b61141c565b61066e611472565b6040516103fe919061457d565b610390610689366004614416565b6114eb565b600b5461042e906001600160a01b031681565b6104ed6106af36600461444f565b60036020526000908152604090205460ff1681565b60005461042e906001600160a01b031681565b6103906106e536600461448c565b6115ac565b6103906106f836600461444f565b6116c8565b600454610100900460ff166104ed565b6107156117b8565b604080519283526020830191909152016103fe565b6103906107383660046145ca565b6117d3565b61075061074b366004614562565b611884565b604080519384526020840192909252908201526060016103fe565b61047a670de0b6b3a764000081565b61047a61078836600461461d565b6118c9565b61039061079b36600461444f565b611ad1565b61047a6107ae36600461444f565b611be0565b61042e7f000000000000000000000000000000000000000000000000000000000000000081565b6103906107e836600461466d565b611cab565b6103906107fb36600461467f565b611d1f565b7f000000000000000000000000000000000000000000000000000000000000000061042e565b610715610834366004614707565b611eee565b600d5461042e906001600160a01b031681565b60045460ff166104ed565b61047a610865366004614562565b61209f565b6104ed610878366004614790565b600160209081526000928352604080842090915290825290205460ff1681565b6104ed6108a636600461444f565b60066020526000908152604090205460ff1681565b6108ce6108c9366004614270565b6121e4565b6040516103fe9291906147bc565b61039061232b565b6105396108f2366004614562565b6123c6565b600a5461042e906001600160a01b031681565b7f000000000000000000000000000000000000000000000000000000000000000061042e565b61095e336000357fffffffff0000000000000000000000000000000000000000000000000000000016612444565b61097b57604051633006171960e21b815260040160405180910390fd5b6109868160006124ab565b50565b6109b7336000357fffffffff0000000000000000000000000000000000000000000000000000000016612444565b6109d457604051633006171960e21b815260040160405180910390fd5b6109868160006125f0565b610a286040518060e0016040528060006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001606081525090565b606085600003610a64576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610a7060006127c6565b90506000610a7e8789612899565b90506000610a8c83836128e1565b90506000610a9861296a565b9050610aa6828260006129cc565b6001600160a01b038a168752602087018b90526040870189905260608701889052608087018190529150610adc828960016129cc565b60a087015260408051600180825281830190925290602080830190803683370190505094508085600081518110610b1557610b1561481f565b6020026020010181815250505050505094509492505050565b6000610b42610b3c836127c6565b846128e1565b90505b92915050565b610b79336000357fffffffff0000000000000000000000000000000000000000000000000000000016612444565b610b9657604051633006171960e21b815260040160405180910390fd5b6001600160a01b038216610be6576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b03831660048201526024015b60405180910390fd5b816001600160a01b03163b600003610c35576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401610bdd565b6001600160a01b03821660008181526006602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fee397872136f42e5319f2ebe127140e4741bee3ff02b86b7410a0b02778216de91015b60405180910390a25050565b600080610cc060006127c6565b9050610ccb836129f9565b91506000610cd882612add565b90506000610ce583612bb5565b905081811015610cf3578091505b600019821015610d0a57610d078583612899565b91505b83821015610d16578193505b505050919050565b610d4c336000357fffffffff0000000000000000000000000000000000000000000000000000000016612444565b610d6957604051633006171960e21b815260040160405180910390fd5b670de0b6b3a7640000826fffffffffffffffffffffffffffffffff1611610dd8576040517f33693ae60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff808416600483015282166024820152604401610bdd565b604080516fffffffffffffffffffffffffffffffff8085168252831660208201527f792e77bcc33e678fd2a12f7a1ae644dcef1311589d15e9e8abd47adf5aca5e18910160405180910390a1610e3060088383612c4d565b610e3a6008612cf5565b5050565b6000610e52610e4d60006127c6565b612df9565b905090565b610e85336000357fffffffff0000000000000000000000000000000000000000000000000000000016612444565b610ea257604051633006171960e21b815260040160405180910390fd5b600580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168215159081179091556040519081527faf941e5e6c2b1ae06b5434c080d9f9ba2b0c2ac8e125a6010a22b57201f26a349060200160405180910390a150565b600a54604080517fe4e8895400000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163e4e889549160048083019260209291908290030181865afa158015610f6a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e52919061484e565b610fbc336000357fffffffff0000000000000000000000000000000000000000000000000000000016612444565b610fd957604051633006171960e21b815260040160405180910390fd5b6109868160016124ab565b611012336000357fffffffff0000000000000000000000000000000000000000000000000000000016612444565b61102f57604051633006171960e21b815260040160405180910390fd5b61107a827f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612e5f565b600b80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556110fd817f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612e5f565b600c80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03928316179055604051828216918416907f4073b32a832187a54e475fc8fff20266eedffb63596adf4c0b8a2966e2b0025d90600090a35050565b611193336000357fffffffff0000000000000000000000000000000000000000000000000000000016612444565b6111b057604051633006171960e21b815260040160405180910390fd5b6001600160a01b0381166111fb576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610bdd565b600d80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517fdeff848636aca67830a3110bab6a98080802068e725f886e18f09fd2f5f7408990600090a250565b61128b336000357fffffffff0000000000000000000000000000000000000000000000000000000016612444565b6112a857604051633006171960e21b815260040160405180910390fd5b6127108361ffff1611156112e8576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6127108261ffff161115611328576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805161ffff85811682528416602082015262ffffff83168183015290517f91829fbe10211c7b1218c9e5b102bdabb13e9526b494b9741133a39e973f9f549181900360600190a16007805461ffff9485167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090911617929093166801000000000000000002919091177fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff1662ffffff9190911670010000000000000000000000000000000002179055565b6000610b45611403836127c6565b612f69565b6000610b42611416836127c6565b84612f8d565b61144a336000357fffffffff0000000000000000000000000000000000000000000000000000000016612444565b61146757604051633006171960e21b815260040160405180910390fd5b6109868160016125f0565b604080516001808252818301909252606091602080830190803683370190505090507f0000000000000000000000000000000000000000000000000000000000000000816000815181106114c8576114c861481f565b60200260200101906001600160a01b031690816001600160a01b03168152505090565b611519336000357fffffffff0000000000000000000000000000000000000000000000000000000016612444565b61153657604051633006171960e21b815260040160405180910390fd5b6001600160a01b03821660008181526003602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685151590811790915591519182527fa11b5803b8a35081b8f993e0dee5bc30301a3d83f644e5ab2ff39f972f0a807f9101610ca7565b6115da336000357fffffffff0000000000000000000000000000000000000000000000000000000016612444565b6115f757604051633006171960e21b815260040160405180910390fd5b670de0b6b3a7640000826fffffffffffffffffffffffffffffffff1611611666576040517f33693ae60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff808416600483015282166024820152604401610bdd565b604080516fffffffffffffffffffffffffffffffff8085168252831660208201527f23b4d5cfa83d92da7d76ae644647a3e53678133ad0fa7d2b526ad571af12d1ec910160405180910390a16116be60098383612c4d565b610e3a6009612cf5565b6116f6336000357fffffffff0000000000000000000000000000000000000000000000000000000016612444565b61171357604051633006171960e21b815260040160405180910390fd5b6001600160a01b038116611756576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815260006004820152602401610bdd565b600a80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040517ffd6cdd9cefbd87614b7f366cb2bd5f7ba60b9a4b9febfbaf6344ecd1e03d018390600090a250565b6000806117c361296a565b91506117cd612fcf565b90509091565b611801336000357fffffffff0000000000000000000000000000000000000000000000000000000016612444565b61181e57604051633006171960e21b815260040160405180910390fd5b826001600160a01b0316826001600160a01b03167f879f92dded0f26b83c3e00b12e0395dc72cfc3077343d1854ed6988edd1f90968360405161186391815260200190565b60405180910390a361187f6001600160a01b038416838361303d565b505050565b600080600080611893856127c6565b9050806000015181602001516118a883612df9565b91955093506fffffffffffffffffffffffffffffffff169150509193909250565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461191457604051633006171960e21b815260040160405180910390fd5b60045460ff1615611951576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61195a836130bd565b61197757604051633006171960e21b815260040160405180910390fd5b600061198360006127c6565b9050600061199082612df9565b905060006119ae6119a4602087018761444f565b866020013561310c565b90506119ba83826128e1565b93506000806119c761296a565b90506119d58682600061323c565b60405191975092507f7e81c1439e2f6851efe3288a5d0ae235c1729a6272f98ed0a4b5eb780914042790611a0f90600090849086906148cd565b60405180910390a185600003611a51576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8660a00135861015611a9c576040517f2746152a00000000000000000000000000000000000000000000000000000000815260a0880135600482015260248101879052604401610bdd565b602085015115611ac6576000611ab3866000613257565b9050611ac46008868360018a61327a565b505b505050505092915050565b611aff336000357fffffffff0000000000000000000000000000000000000000000000000000000016612444565b611b1c57604051633006171960e21b815260040160405180910390fd5b6001600160a01b038116611b67576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610bdd565b600254600080546040516001600160a01b03808616948116939216917f64420d4a41c6ed4de2bccbf33192eea18e576c5b23c79c3a722d4e9534c2e8d891a4600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b600080611bed60006127c6565b600854909150600090611c3e90611c16906fffffffffffffffffffffffffffffffff1684613503565b6020840151906fffffffffffffffffffffffffffffffff16670de0b6b3a7640000600161363b565b90508082600001511115611ca45781518190036000611c5d86856136ce565b905081811015611c6b578091505b611c7584836128e1565b9450611c8b611c82612fcf565b86906000613780565b94508360400151851115611ca157836040015194505b50505b5050919050565b3360009081526003602052604090205460ff16611cdb57604051633006171960e21b815260040160405180910390fd5b7f803ee193075547dae36361498f3de5e399cdb29b7e0c7b680533f3da8b733a1781604051611d0a91906148ee565b60405180910390a180600461187f828261491e565b611d4d336000357fffffffff0000000000000000000000000000000000000000000000000000000016612444565b611d6a57604051633006171960e21b815260040160405180910390fd5b6001600160a01b038316611db5576040517f8e4c8aa60000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610bdd565b604080518082019091526000808252602082015260005b82811015611ee757838382818110611de657611de661481f565b905060400201803603810190611dfc919061499f565b91508160200151151582600001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916866001600160a01b03167ff5736e75de2c751f775d4c5ed517289f77074f8c337f451ba4c0c3ed1dd7f9ad60405160405180910390a46020828101516001600160a01b038716600090815260018352604080822086517fffffffff000000000000000000000000000000000000000000000000000000001683529093529190912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055611ee081614a52565b9050611dcc565b5050505050565b600080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611f3a57604051633006171960e21b815260040160405180910390fd5b600454610100900460ff1615611f7c576040517f1309a56300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000611f8860006127c6565b90506000611f9582612df9565b8635935090506000611fa5612fcf565b9050600080611fb586848361323c565b915091507f7e81c1439e2f6851efe3288a5d0ae235c1729a6272f98ed0a4b5eb780914042760018483604051611fed939291906148cd565b60405180910390a1611fff8583612f8d565b915061201b8261201560408c0160208d0161444f565b8a6137e3565b96508860a00135871015612068576040517f2746152a00000000000000000000000000000000000000000000000000000000815260a08a0135600482015260248101889052604401610bdd565b60208501511561209257600061207f866000613257565b90506120906008868360008a61327a565b505b5050505050935093915050565b600080600a60009054906101000a90046001600160a01b03166001600160a01b031663bf1eb64a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612119919061484e565b90508060000361212c5750600092915050565b600b546040517f7349615f0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690637349615f9061219c907f00000000000000000000000000000000000000000000000000000000000000009085908890600190600401614a6c565b602060405180830381865afa1580156121b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121dd919061484e565b9392505050565b61222d6040518060e001604052806000815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001606081525090565b606085600003612269576040517f54db0c8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000612273612fcf565b905060006122828883836129cc565b9050600061229060006127c6565b90506122a561229f8284612f8d565b89613904565b8986526001600160a01b038916602087015260408601889052606086018790526080860181905291506122da828860016129cc565b60a0860152604080516001808252818301909252906020808301908036833701905050935082846000815181106123135761231361481f565b60200260200101818152505050505094509492505050565b6002546001600160a01b0316331461235657604051633006171960e21b815260040160405180910390fd5b6000805460405133926001600160a01b03909216917f5cd6b24c0149d980c82592262b3a81294b39f8f6e3c004126aaf0828c787d55491a3600080547fffffffffffffffffffffffff00000000000000000000000000000000000000009081163317909155600280549091169055565b6000806123d2836127c6565b905080602001518160000151111561242c57602081015181519081039060009061240790670de0b6b3a764000084600161363b565b90506fffffffffffffffffffffffffffffffff81101561242957949350505050565b50505b506fffffffffffffffffffffffffffffffff92915050565b600080546001600160a01b0384811691161480610b425750506001600160a01b039190911660009081526001602090815260408083207fffffffff000000000000000000000000000000000000000000000000000000009094168352929052205460ff1690565b60006124b760006127c6565b905060006124c482612df9565b600a549091506000906001600160a01b031663e9e11f10863560208801356124ef60408a018a614aaa565b8a606001356040518663ffffffff1660e01b8152600401612514959493929190614b16565b6020604051808303816000875af1158015612533573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612557919061484e565b90506000612588848461257060a08a0160808b01614b7b565b61258060c08b0160a08c01614b7b565b60008a613946565b60408051848152602089810135908201526fffffffffffffffffffffffffffffffff868116828401528316606082015290519192507f43ae12d1ef33f7118bafdb1d8477fa6b6dbb0b21df5741fe86f4baa7a8bd13f9919081900360800190a1505050505050565b60006125fc60006127c6565b9050600061260982612df9565b600a5490915060009081906001600160a01b031663eedc07138735602089013561263660408b018b614aaa565b8b606001356040518663ffffffff1660e01b815260040161265b959493929190614b16565b60408051808303816000875af1158015612679573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269d9190614b96565b9092509050853582146127135784612713576040517fb2b3b53b0000000000000000000000000000000000000000000000000000000081526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016600482015286356024820152604401610bdd565b6000612742858561272a60a08b0160808c01614b7b565b61273a60c08c0160a08d01614b7b565b60018b613946565b90507f43ae12d1ef33f7118bafdb1d8477fa6b6dbb0b21df5741fe86f4baa7a8bd13f96127726020890135614bba565b61277c8486614bf2565b61278590614bba565b6040805192835260208301919091526fffffffffffffffffffffffffffffffff8781168383015284166060830152519081900360800190a150505050505050565b6127f16040518060800160405280600081526020016000815260200160008152602001600081525090565b6127f9610f07565b81526128048261209f565b8160200181815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561286b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061288f919061484e565b6040820152919050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316146128db576000610b42565b50919050565b60008260400151600003612908576129016128fa613a91565b8390613c25565b9050610b45565b600061291384612f69565b90508060000361294f576040517fefbc415500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604084015161296290849083600061363b565b949350505050565b600c54600754600091610e529183916001600160a01b0316907f00000000000000000000000000000000000000000000000000000000000000009067ffffffffffffffff80821691700100000000000000000000000000000000900416613c39565b60006127108381039084106129e25760006129f0565b6129f085826127108661363b565b95945050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603612ad857600a54604080517f4eb75f40000000000000000000000000000000000000000000000000000000008152815160009384936001600160a01b0390911692634eb75f4092600480830193928290030181865afa158015612a97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612abb9190614b96565b9150915081600014612acd5780612962565b600019949350505050565b919050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632ab4d0526040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b62919061484e565b90506000198103612b77575060001992915050565b600083604001518211612b8b576000612b93565b836040015182035b9050612ba9612ba061296a565b82906000613780565b90506129628482612f8d565b60008160200151600003612bcc5750600019919050565b600854600090612c2e90612c069070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1685613503565b6020850151906fffffffffffffffffffffffffffffffff16670de0b6b3a7640000600061363b565b8351909150811115612c44579151909103919050565b50600092915050565b806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff161115612cc7576040517f33693ae60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff808416600483015282166024820152604401610bdd565b6fffffffffffffffffffffffffffffffff908116700100000000000000000000000000000000029116179055565b600a5481546040517f3d33809d0000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff90911660048201526001600160a01b0390911690633d33809d90602401602060405180830381865afa158015612d6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d8f9190614c05565b6109865780546040517f33693ae60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff80831660048301527001000000000000000000000000000000009092049091166024820152604401610bdd565b60008160200151600014612e485760208201518251600091612e269190670de0b6b3a7640000908461363b565b90506fffffffffffffffffffffffffffffffff811015612e465792915050565b505b506fffffffffffffffffffffffffffffffff919050565b60006001600160a01b038416612ea4576040517f8e4c8aa600000000000000000000000000000000000000000000000000000000815260006004820152602401610bdd565b506040517f950212800000000000000000000000000000000000000000000000000000000081526001600160a01b0383811660048301528281166024830152849190821690639502128090604401602060405180830381865afa158015612f0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f339190614c05565b6121dd576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008160200151826000015111612f81576000610b45565b50602081015190510390565b60008260400151600014612fbb57612fb6612fa784612f69565b6040850151849190600061363b565b610b42565b610b42612fc6613a91565b83906000613e0f565b600c54600754600091610e52916001916001600160a01b0316907f00000000000000000000000000000000000000000000000000000000000000009067ffffffffffffffff680100000000000000008204811691700100000000000000000000000000000000900416613c39565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261187f908490613e7b565b60055460009060ff16156130d357506001919050565b816001600160a01b03163b6000036130ed57506001919050565b506001600160a01b031660009081526006602052604090205460ff1690565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036131ff5750600a5481906001600160a01b0390811690613186907f000000000000000000000000000000000000000000000000000000000000000016828461303d565b6040517f35403023000000000000000000000000000000000000000000000000000000008152600481018490526001600160a01b03821690633540302390602401600060405180830381600087803b1580156131e157600080fd5b505af11580156131f5573d6000803e3d6000fd5b5050505050610b45565b6040517f961c9a4f0000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401610bdd565b60008061324a8585856129cc565b9594869003949350505050565b6000613261610f07565b835261326c8261209f565b6020840152610b4283612df9565b600082600181111561328e5761328e614867565b036133c057836fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161115613315576040517fdeb029d60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8086166004830181905290851660248301526044820152606401610bdd565b8454600090613336906fffffffffffffffffffffffffffffffff1683613503565b9050806fffffffffffffffffffffffffffffffff16846fffffffffffffffffffffffffffffffff1610156133ba576040517f2fa926530000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8087166004830152808616602483015282166044820152606401610bdd565b50611ee7565b836fffffffffffffffffffffffffffffffff16836fffffffffffffffffffffffffffffffff161015613442576040517f2fa926530000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8086166004830181905290851660248301526044820152606401610bdd565b84546000906134779070010000000000000000000000000000000090046fffffffffffffffffffffffffffffffff1683613503565b9050806fffffffffffffffffffffffffffffffff16846fffffffffffffffffffffffffffffffff1611156134fb576040517fdeb029d60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8087166004830152808616602483015282166044820152606401610bdd565b505050505050565b60007fffffffffffffffffffffffffffffffff000000000000000000000000000000016fffffffffffffffffffffffffffffffff841601613545575081610b45565b81606001516000036135e457600d546040517fc6845a090000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063c6845a099061359d906000908190600401614c22565b602060405180830381865afa1580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de919061484e565b60608301525b670de0b6b3a764000082606001511461363457612fb6670de0b6b3a7640000846fffffffffffffffffffffffffffffffff1684606001516136259190614c48565b61362f9190614c8e565b613f7d565b5090919050565b6000613648858585613fd0565b9050600182600181111561365e5761365e614867565b0361296257828061367157613671614c5f565b848609156129625760001981101561368b57600101612962565b6040517f63a05778000000000000000000000000000000000000000000000000000000008152600481018690526024810185905260448101849052606401610bdd565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031603610b4557600a60009054906101000a90046001600160a01b03166001600160a01b031663e4e889546040518163ffffffff1660e01b8152600401602060405180830381865afa15801561375c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b42919061484e565b6000826000036137915750826121dd565b61271083106137cc576040517fd252903400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000836127100390506129f085612710838661363b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316036131ff5750600a546040517ef714ce000000000000000000000000000000000000000000000000000000008152600481018590526001600160a01b038381166024830152859260009291169062f714ce906044016020604051808303816000875af115801561388d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b1919061484e565b90508481146138fe576040517fb2b3b53b0000000000000000000000000000000000000000000000000000000081526001600160a01b038516600482015260248101869052604401610bdd565b506121dd565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614613634576000610b42565b6000613953876000613257565b905060006139618689613503565b9050806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff1610156139e5576040517f2fa926530000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8089166004830152808416602483015282166044820152606401610bdd565b6139ef8589613503565b9050806fffffffffffffffffffffffffffffffff16826fffffffffffffffffffffffffffffffff161115613a73576040517fdeb029d60000000000000000000000000000000000000000000000000000000081526fffffffffffffffffffffffffffffffff8089166004830152808416602483015282166044820152606401610bdd565b5081613a8757613a8760098783868b61327a565b9695505050505050565b6000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613af2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b169190614cc9565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b9c9190614cc9565b90508060ff168260ff161115613c09576040517f961c9a4f0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166004820152602401610bdd565b613c138282614cec565b613c1e90600a614de9565b9250505090565b60008160011461363457612fb68284614c48565b6000806000806000886001600160a01b03166369994511600060018060016040518563ffffffff1660e01b8152600401613c769493929190614df8565b608060405180830381865afa158015613c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cb79190614e20565b93509350935093506000886001600160a01b0316836001600160a01b031603613ce257506001613d38565b886001600160a01b0316826001600160a01b031614613d38576040517f961c9a4f0000000000000000000000000000000000000000000000000000000081526001600160a01b038a166004820152602401610bdd565b600080808d6001811115613d4e57613d4e614867565b03613d80578215613d6d5785871015613d68575050848403845b613da8565b85871115613d6857505083850385613da8565b8215613d995785871115613d6857505083850384613da8565b85871015613da8575050848403855b81600003613dc9578967ffffffffffffffff169750505050505050506129f0565b6000613dd8838b84600161363b565b9050808b67ffffffffffffffff1611613df15780613dfd565b8a67ffffffffffffffff165b9e9d5050505050505050505050505050565b600082600103613e205750826121dd565b6000826001811115613e3457613e34614867565b03613e5057828481613e4857613e48614c5f565b0490506121dd565b8315613e7157826001850381613e6857613e68614c5f565b04600101612962565b6000949350505050565b6000613ed0826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166140bd9092919063ffffffff16565b9050805160001480613ef1575080806020019051810190613ef19190614c05565b61187f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152608401610bdd565b60006fffffffffffffffffffffffffffffffff821115613fcc576040517fe0fb6a7c00000000000000000000000000000000000000000000000000000000815260048101839052602401610bdd565b5090565b600080806000198587098587029250828110838203039150508060000361400a5783828161400057614000614c5f565b04925050506121dd565b838110614054576040517f63a05778000000000000000000000000000000000000000000000000000000008152600481018790526024810186905260448101859052606401610bdd565b60008486880960026001871981018816978890046003810283188082028403028082028403028082028403028082028403028082028403029081029092039091026000889003889004909101858311909403939093029303949094049190911702949350505050565b6060612962848460008585600080866001600160a01b031685876040516140e49190614e6b565b60006040518083038185875af1925050503d8060008114614121576040519150601f19603f3d011682016040523d82523d6000602084013e614126565b606091505b509150915061413787838387614142565b979650505050505050565b606083156141cb5782516000036141c4576001600160a01b0385163b6141c4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610bdd565b5081612962565b61296283838151156141e05781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdd9190614e87565b600060c082840312156128db57600080fd5b60006020828403121561423857600080fd5b813567ffffffffffffffff81111561424f57600080fd5b61296284828501614214565b6001600160a01b038116811461098657600080fd5b6000806000806080858703121561428657600080fd5b8435935060208501356142988161425b565b93969395505050506040820135916060013590565b60005b838110156142c85781810151838201526020016142b0565b50506000910152565b600081518084526142e98160208601602086016142ad565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b600081518084526020808501945080840160005b8381101561434b5781518752958201959082019060010161432f565b509495945050505050565b604081526001600160a01b0383511660408201526020830151606082015260408301516080820152606083015160a0820152608083015160c082015260a083015160e0820152600060c084015160e06101008401526143b96101208401826142d1565b905082810360208401526129f0818561431b565b803560028110612ad857600080fd5b600080604083850312156143ef57600080fd5b823591506143ff602084016143cd565b90509250929050565b801515811461098657600080fd5b6000806040838503121561442957600080fd5b82356144348161425b565b9150602083013561444481614408565b809150509250929050565b60006020828403121561446157600080fd5b81356121dd8161425b565b80356fffffffffffffffffffffffffffffffff81168114612ad857600080fd5b6000806040838503121561449f57600080fd5b6144a88361446c565b91506143ff6020840161446c565b6000602082840312156144c857600080fd5b81356121dd81614408565b600080604083850312156144e657600080fd5b82356144f18161425b565b915060208301356144448161425b565b803561ffff81168114612ad857600080fd5b60008060006060848603121561452857600080fd5b61453184614501565b925061453f60208501614501565b9150604084013562ffffff8116811461455757600080fd5b809150509250925092565b60006020828403121561457457600080fd5b610b42826143cd565b6020808252825182820181905260009190848201906040850190845b818110156145be5783516001600160a01b031683529284019291840191600101614599565b50909695505050505050565b6000806000606084860312156145df57600080fd5b83356145ea8161425b565b925060208401356145fa8161425b565b929592945050506040919091013590565b600060e082840312156128db57600080fd5b6000806040838503121561463057600080fd5b823561463b8161425b565b9150602083013567ffffffffffffffff81111561465757600080fd5b6146638582860161460b565b9150509250929050565b6000604082840312156128db57600080fd5b60008060006040848603121561469457600080fd5b833561469f8161425b565b9250602084013567ffffffffffffffff808211156146bc57600080fd5b818601915086601f8301126146d057600080fd5b8135818111156146df57600080fd5b8760208260061b85010111156146f457600080fd5b6020830194508093505050509250925092565b60008060006060848603121561471c57600080fd5b83356147278161425b565b9250602084013567ffffffffffffffff81111561474357600080fd5b61474f8682870161460b565b92505060408401356145578161425b565b80357fffffffff0000000000000000000000000000000000000000000000000000000081168114612ad857600080fd5b600080604083850312156147a357600080fd5b82356147ae8161425b565b91506143ff60208401614760565b60408152825160408201526001600160a01b03602084015116606082015260408301516080820152606083015160a0820152608083015160c082015260a083015160e0820152600060c084015160e06101008401526143b96101208401826142d1565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561486057600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60028110610986577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b606081016148da85614896565b938152602081019290925260409091015290565b6040810182356148fd81614408565b15158252602083013561490f81614408565b80151560208401525092915050565b813561492981614408565b81547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00811691151560ff169182178355602084013561496781614408565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009190911690911790151560081b61ff001617905550565b6000604082840312156149b157600080fd5b6040516040810181811067ffffffffffffffff821117156149fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604052614a0783614760565b81526020830135614a1781614408565b60208201529392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006000198203614a6557614a65614a23565b5060010190565b6001600160a01b03851681526020810184905260808101614a8c84614896565b836040830152614a9b83614896565b82606083015295945050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614adf57600080fd5b83018035915067ffffffffffffffff821115614afa57600080fd5b602001915036819003821315614b0f57600080fd5b9250929050565b85815284602082015260806040820152826080820152828460a0830137600060a08483010152600060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f86011683010190508260608301529695505050505050565b600060208284031215614b8d57600080fd5b610b428261446c565b60008060408385031215614ba957600080fd5b505080516020909101519092909150565b60007f80000000000000000000000000000000000000000000000000000000000000008203614beb57614beb614a23565b5060000390565b80820180821115610b4557610b45614a23565b600060208284031215614c1757600080fd5b81516121dd81614408565b60408101614c2f84614896565b838252614c3b83614896565b8260208301529392505050565b8082028115828204841417610b4557610b45614a23565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600082614cc4577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600060208284031215614cdb57600080fd5b815160ff811681146121dd57600080fd5b60ff8281168282160390811115610b4557610b45614a23565b600181815b80851115614d40578160001904821115614d2657614d26614a23565b80851615614d3357918102915b93841c9390800290614d0a565b509250929050565b600082614d5757506001610b45565b81614d6457506000610b45565b8160018114614d7a5760028114614d8457614da0565b6001915050610b45565b60ff841115614d9557614d95614a23565b50506001821b610b45565b5060208310610133831016604e8410600b8410161715614dc3575081810a610b45565b614dcd8383614d05565b8060001904821115614de157614de1614a23565b029392505050565b6000610b4260ff841683614d48565b60808101614e0586614896565b858252614e1185614896565b846020830152614a8c84614896565b60008060008060808587031215614e3657600080fd5b84519350602085015192506040850151614e4f8161425b565b6060860151909250614e608161425b565b939692955090935050565b60008251614e7d8184602087016142ad565b9190910192915050565b602081526000610b4260208301846142d156fea26469706673582212204c6633638ce59081270e3f2e9ddecdfe86c8802b4e61a3977cddd1728277683164736f6c63430008130033000000000000000000000000b20aae0fe007519b7ce6f090a2ab8353b3da5d80000000000000000000000000e00bd3df25fb187d6abbb620b3dfd19839947b810000000000000000000000006b175474e89094c44da98b954eedeac495271d0f000000000000000000000000e00bd3df25fb187d6abbb620b3dfd19839947b81000000000000000000000000db4f1bb3f8c9929aafbe7197e10ffafeeae19b9a0000000000000000000000009e0457b5bcd95f4e2fc7fabcc41faad0d443b4f7000000000000000000000000c75314d540462be5b275d45d277775f2e574dd93