0 txs
67 calls
constructor
constructor()
functions
assetFee
viewfunction assetFee(address) view returns (uint24)
chainlinkOracle
viewfunction chainlinkOracle(address) view returns (address)
closeSwapRequests
viewfunction closeSwapRequests(bytes32) view returns (bytes32 key, uint256 longAmountFromGMX, uint256 shortAmountFromGMX, uint256 longAmountAvailableToSwap, uint256 shortAmountAvailableToSwap, uint256 leftOver, address longToken, address gmMarketToken, bool done)
eighteenDecimalAsset
viewfunction eighteenDecimalAsset(address) view returns (bool)
estimatePositionProfit
viewfunction estimatePositionProfit(bytes32 key, uint256 _returnedLongToken, uint256 _returnedShortToken) view returns (uint256)
getDepositRecord
viewfunction getDepositRecord(bytes32 key) view returns (tuple)
getEstimatedMarketTokenPrice
viewfunction getEstimatedMarketTokenPrice(address longToken) view returns (int256)
getLatestData
viewfunction getLatestData(address _token, bool _inDecimal) view returns (uint256)
getMarketTokenPrice
viewfunction getMarketTokenPrice(address longToken, bytes32 pnlFactorType, bool maximize) view returns (int256)
getPositionDebt
viewfunction getPositionDebt(address _user, uint256 _positionID) view returns (tuple)
getWithdrawRecord
viewfunction getWithdrawRecord(bytes32 key) view returns (tuple)
isOrderCreatedForKey
viewfunction isOrderCreatedForKey(bytes32) view returns (bool)
isOrderForMultipleSwap
viewfunction isOrderForMultipleSwap(bytes32) view returns (bool)
manualWithdraw
viewfunction manualWithdraw(address) view returns (bool)
nineDecimalsAsset
viewfunction nineDecimalsAsset(address) view returns (bool)
orderRefunded
viewfunction orderRefunded(bytes32) view returns (uint256 feesRefunded, uint256 amountRefunded, uint256 longTokenAmountReturned, uint256 shortTokenAmountReturned, uint256 gmTokensRefunded, uint256 depositOrWithdrawal, bool cancelled)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
RoleStore
viewfunction RoleStore() view returns (address)
sixDecimalAsset
viewfunction sixDecimalAsset(address) view returns (bool)
strategyAddresses
viewfunction strategyAddresses() view returns (address USDC, address WaterContract, address VodkaV2, address univ3Router, address dataStore, address oracle, address reader, address depositHandler, address withdrawalHandler)
tempPayableAddress
viewfunction tempPayableAddress() view returns (address)
userRefunds
viewfunction userRefunds(address, uint256) view returns (bytes32)
userToRefund
viewfunction userToRefund(bytes32) view returns (address)
VodkaV2Swapper
viewfunction VodkaV2Swapper() view returns (address)
WETH
viewfunction WETH() view returns (address)
WrappedBTC
viewfunction WrappedBTC() view returns (address)
afterDepositCancellation
nonpayablefunction afterDepositCancellation(bytes32 key, tuple deposit, tuple eventData)
afterDepositExecution
nonpayablefunction afterDepositExecution(bytes32 key, tuple deposit, tuple eventData)
afterWithdrawalCancellation
nonpayablefunction afterWithdrawalCancellation(bytes32 key, tuple withdrawal, tuple eventData)
afterWithdrawalExecution
nonpayablefunction afterWithdrawalExecution(bytes32 key, tuple withdrawal, tuple eventData)
executeSwap
nonpayablefunction executeSwap(uint256 _amount, address _tokenIn, address _tokenOut, address _recipient) returns (uint256)
finalizeClosePosition
nonpayablefunction finalizeClosePosition(bytes32 key, uint256 _received)
fixWithdrawalExecution
nonpayablefunction fixWithdrawalExecution(bytes32 key, uint256 _longAmount, uint256 _shortAmount)
fixWithdrawalManual
nonpayablefunction fixWithdrawalManual(bytes32 key, uint256 _receivedLongAmount, uint256 _receivedShortAmount)
initialize
nonpayablefunction initialize(address _USDC, address _VodkaV2)
refundExecutionFee
payablefunction refundExecutionFee(bytes32 key, tuple eventData) payable
renounceOwnership
nonpayablefunction renounceOwnership()
requestGMXV2Swap
payablefunction requestGMXV2Swap(bytes32 _key) payable
setChainlinkOracleForAsset
nonpayablefunction setChainlinkOracleForAsset(address _token, address _oracle)
setEighteenDecimalAsset
nonpayablefunction setEighteenDecimalAsset(address _asset, bool _eighteenDecimal)
setManualWithdraw
nonpayablefunction setManualWithdraw(address _token, bool _manual)
setNineDecimalAsset
nonpayablefunction setNineDecimalAsset(address _asset, bool _nineDecimal)
setSixDecimalAsset
nonpayablefunction setSixDecimalAsset(address _asset, bool _sixDecimal)
setStrategyParams
nonpayablefunction setStrategyParams(address _univ3Router, address _dataStore, address _oracle, address _reader, address _depositHandler, address _withdrawalHandler)
setUniv3Fee
nonpayablefunction setUniv3Fee(uint24 _univ3Fee, address _asset)
takeAll
nonpayablefunction takeAll(address _inputAsset)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
ChainlinkOracleSet
event ChainlinkOracleSet(address token, address oracle)
CloseFinalized
event CloseFinalized(bytes32 key, uint256 shortTokenAmount, uint256 longTokenAmount)
Initialized
event Initialized(uint8 version)
KeysPendingSwap
event KeysPendingSwap(bytes32 key, uint256 longAmount, uint256 shortAmount, bool isOrderForMultipleSwap, uint256 longAmountAvailableToSwap, uint256 shortAmountAvailableToSwap)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
RepayDepositFailure
event RepayDepositFailure(address user, uint256 amount, string errorMessage, string stackTrace)
SecondSwapRequest
event SecondSwapRequest(bytes32 key, uint256 leftOver)
StrategyParamsSet
event StrategyParamsSet(address univ3Router, address dataStore, address oracle, address reader, address depositHandler, address withdrawalHandler)
Unpaused
event Unpaused(address account)
errors
No errors.
creation bytecode
0x60806040523480156200001157600080fd5b506200001c62000022565b620000e3565b600054610100900460ff16156200008f5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811614620000e1576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b615e9e80620000f36000396000f3fe6080604052600436106102275760003560e01c80630afda351146102335780630fa63fe414610255578063100e196d146102a15780631774e1cb1461034c57806319c2d37e1461038d57806321d41b32146103ba5780632b70b891146103eb5780632f2708a21461040b5780633201ab4d1461042b578063395aef8e1461044b5780633a2cb99f1461048e5780633c372240146104bc5780634152313b146104cf578063485cc955146104ef578063542059431461050f5780635c975abb1461052f5780635f82eba814610547578063715018a61461056757806372ccfa601461057c578063753672d51461059c57806376f1ef10146105bd5780637db2bd3e146105dd5780638c4d0d601461060e5780638da5cb5b1461063f57806394fce92b1461065457806396e1ae10146106815780639a4a1a9a146106b25780639f093871146106d25780639f17af9914610764578063a5ab05ab14610784578063a5efb24d146107a4578063a7c49f5a146107c4578063a8f098d2146107fb578063ad5c46481461081c578063b2fd94951461083d578063b63d535414610850578063ba871dcd14610870578063bf3810a914610890578063c4b2b980146108b0578063c9888ec1146108cb578063c9ac221a146108eb578063cc6624661461090b578063ceb0c4451461092b578063e88c356114610958578063f2fde38b14610a22578063f5faa89214610a42578063fd77d17514610a73578063ff06f7b214610a9357600080fd5b3661022e57005b600080fd5b34801561023f57600080fd5b5061025361024e366004613cb3565b610ab3565b005b34801561026157600080fd5b50610288610270366004613cec565b61010c6020526000908152604090205462ffffff1681565b60405162ffffff90911681526020015b60405180910390f35b3480156102ad57600080fd5b5060c95460ca5460cb5460cc5460cd5460ce5460cf5460d05460d1546102f2986001600160a01b03908116988116978116968116958116948116938116928116911689565b604080516001600160a01b039a8b168152988a1660208a01529689169688019690965293871660608701529186166080860152851660a0850152841660c0840152831660e083015290911661010082015261012001610298565b34801561035857600080fd5b5061037d610367366004613cec565b6101156020526000908152604090205460ff1681565b6040519015158152602001610298565b34801561039957600080fd5b506103ad6103a8366004613d1d565b610ae7565b6040516102989190613d58565b3480156103c657600080fd5b5061037d6103d5366004613cec565b6101146020526000908152604090205460ff1681565b3480156103f757600080fd5b50610253610406366004613d66565b610b74565b34801561041757600080fd5b50610253610426366004613cb3565b610d05565b34801561043757600080fd5b50610253610446366004613d92565b610d39565b34801561045757600080fd5b50610481610466366004613cec565b60d4602052600090815260409020546001600160a01b031681565b6040516102989190613db4565b34801561049a57600080fd5b506104ae6104a9366004613cec565b61105d565b604051908152602001610298565b6102536104ca366004614fce565b6112d8565b3480156104db57600080fd5b506102536104ea366004613d66565b611571565b3480156104fb57600080fd5b5061025361050a366004615014565b611843565b34801561051b57600080fd5b5061025361052a366004613cb3565b61199d565b34801561053b57600080fd5b5060975460ff1661037d565b34801561055357600080fd5b5060d554610481906001600160a01b031681565b34801561057357600080fd5b506102536119d1565b34801561058857600080fd5b506102536105973660046150f1565b6119e5565b3480156105a857600080fd5b5061011354610481906001600160a01b031681565b3480156105c957600080fd5b506104ae6105d8366004615258565b611a9b565b3480156105e957600080fd5b5061037d6105f8366004613cec565b61010d6020526000908152604090205460ff1681565b34801561061a57600080fd5b5061037d6106293660046152ab565b6101126020526000908152604090205460ff1681565b34801561064b57600080fd5b50610481611afd565b34801561066057600080fd5b5061067461066f3660046152ab565b611b0c565b60405161029891906152c4565b34801561068d57600080fd5b5061037d61069c3660046152ab565b6101116020526000908152604090205460ff1681565b3480156106be57600080fd5b506104ae6106cd366004615336565b611bb7565b3480156106de57600080fd5b5061072d6106ed3660046152ab565b60d2602052600090815260409020805460018201546002830154600384015460048501546005860154600690960154949593949293919290919060ff1687565b604080519788526020880196909652948601939093526060850191909152608084015260a0830152151560c082015260e001610298565b34801561077057600080fd5b5061025361077f366004613cb3565b611e95565b34801561079057600080fd5b5061025361079f366004613cec565b611ec9565b3480156107b057600080fd5b506102536107bf366004615378565b611fb5565b3480156107d057600080fd5b506104816107df3660046152ab565b610110602052600090815260409020546001600160a01b031681565b34801561080757600080fd5b5061010a54610481906001600160a01b031681565b34801561082857600080fd5b5061010b54610481906001600160a01b031681565b61025361084b3660046152ab565b612059565b34801561085c57600080fd5b5060d654610481906001600160a01b031681565b34801561087c57600080fd5b506104ae61088b366004613d66565b612584565b34801561089c57600080fd5b506104ae6108ab366004613cb3565b61278e565b3480156108bc57600080fd5b5061025361059736600461539e565b3480156108d757600080fd5b506104ae6108e6366004613d1d565b612a53565b3480156108f757600080fd5b506102536109063660046150f1565b612a84565b34801561091757600080fd5b50610253610926366004615014565b612f29565b34801561093757600080fd5b5061094b6109463660046152ab565b612f85565b6040516102989190615515565b34801561096457600080fd5b506109d06109733660046152ab565b61010f60205260009081526040902080546001820154600283015460038401546004850154600586015460068701546007909701549596949593949293919290916001600160a01b0391821691811690600160a01b900460ff1689565b60408051998a5260208a0198909852968801959095526060870193909352608086019190915260a08501526001600160a01b0390811660c08501521660e0830152151561010082015261012001610298565b348015610a2e57600080fd5b50610253610a3d366004613cec565b61305a565b348015610a4e57600080fd5b5061037d610a5d366004613cec565b61010e6020526000908152604090205460ff1681565b348015610a7f57600080fd5b50610253610a8e36600461539e565b6130d0565b348015610a9f57600080fd5b50610253610aae366004615599565b61325f565b610abb61332d565b6001600160a01b0391909116600090815261011460205260409020805460ff1916911515919091179055565b6040805180820182526000808252602082015260cb5491516301e73a5f60e61b815290916001600160a01b0316906379ce97c090610b2b908690869060040161561b565b6040805180830381865afa158015610b47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6b9190615664565b90505b92915050565b610b7c61332d565b6000610b8784611b0c565b60c954909150610ba2906001600160a01b031633308561338c565b60a0810151610bbc906001600160a01b031633308661338c565b60cb5460c954610bd9916001600160a01b039182169116846133f7565b60cb5460a0820151610bf8916001600160a01b039182169116856133f7565b8060800151610c875760cb546001600160a01b0316639137be7a858585610c20838383612584565b6040518563ffffffff1660e01b8152600401610c3f9493929190615680565b6020604051808303816000875af1158015610c5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c8291906156a6565b610cfe565b60cb54604051635f4e6fb760e11b81526001600160a01b039091169063be9cdf6e90610cbb908790879087906004016156c3565b6020604051808303816000875af1158015610cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfe91906156a6565b5050505050565b610d0d61332d565b6001600160a01b0391909116600090815261010d60205260409020805460ff1916911515919091179055565b610d41613416565b610113546001600160a01b0316331480610d735750610d5e611afd565b6001600160a01b0316336001600160a01b0316145b610db25760405162461bcd60e51b815260206004820152600b60248201526a139bdd08185b1b1bddd95960aa1b60448201526064015b60405180910390fd5b6000610dbd83611b0c565b600084815261010f602052604080822083519184015193945092610de19190610ae7565b6000868152610111602052604090205490915060ff168015610e1357506000858152610112602052604090205460ff16155b15610e9e5780516001830154610e2a9086906156ef565b610e349190615702565b600383019081556000868152610112602052604090819020805460ff191660011790558354915490517f9bb3f265562ad4d42fe6bc8ec0cc15e82e766e4e3ba72c75c66d2fb3fdd6f1ab92610e9192908252602082015260400190565b60405180910390a161104c565b80516005830154600090610eb39087906156ef565b60cb5460c954919250610ed3916001600160a01b039081169116836133f7565b60cb5460a0860151610ef2916001600160a01b039182169116846133f7565b60078401805460ff60a01b1916600160a01b1790556080850151610f965760cb546001600160a01b0316639137be7a888484610f2f838383612584565b6040518563ffffffff1660e01b8152600401610f4e9493929190615680565b6020604051808303816000875af1158015610f6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f9191906156a6565b61100d565b60cb54604051635f4e6fb760e11b81526001600160a01b039091169063be9cdf6e90610fca908a90869086906004016156c3565b6020604051808303816000875af1158015610fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100d91906156a6565b507f9c341c91384ec36b9d393c98615da5bf201c12f801111ca44b299c61a6b3730b878284604051611041939291906156c3565b60405180910390a150505b5050506110596001606555565b5050565b60cb54604051639c735fbb60e01b815260009182916001600160a01b0390911690639c735fbb90611092908690600401613db4565b60c060405180830381865afa1580156110af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110d39190615720565b90506000604051806080016040528083604001516001600160a01b0316815260200183606001516001600160a01b0316815260200183600001516001600160a01b0316815260200183602001516001600160a01b031681525090506000604051806040016040528061114a8560600151600161278e565b815260200161115e8560600151600161278e565b81525090506000604051806040016040528061117b88600161278e565b815260200161118b88600161278e565b90526040805180820190915260c95491925060009181906111b6906001600160a01b0316600161278e565b815260c9546020909101906111d5906001600160a01b0316600161278e565b905260cf5460cd546040519293506000926001600160a01b039283169263095ce6c5921690889088908890889061123e906020016020808252601b908201527a4d41585f504e4c5f464143544f525f464f525f4445504f5349545360281b604082015260600190565b6040516020818303038152906040528051906020012060006040518863ffffffff1660e01b815260040161127897969594939291906157ca565b61018060405180830381865afa158015611296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ba9190615851565b5090506112cc64e8d4a510008261591b565b98975050505050505050565b60d6546040516001600160a01b039091169063ac4ab3fb9033906112fe90602001615949565b604051602081830303815290604052805190602001206040518363ffffffff1660e01b815260040161133192919061561b565b602060405180830381865afa15801561134e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061137291906156a6565b61138e5760405162461bcd60e51b8152600401610da99061596d565b600061139983612f85565b905060006113a684611b0c565b82519091506001600160a01b03166115165760cb54604051631f6f85f960e11b8152600481018690526001600160a01b0390911690633edf0bf290602401602060405180830381865afa158015611401573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142591906156a6565b156114bd5760cb546040805163aced166160e01b815290516001600160a01b039092169163aced1661916004808201926020929091908290030181865afa158015611474573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114989190615996565b60d580546001600160a01b0319166001600160a01b0392909216919091179055611538565b8060800151156114f05760e081015160d580546001600160a01b0319166001600160a01b03909216919091179055611538565b805160d580546001600160a01b0319166001600160a01b03909216919091179055611538565b815160d580546001600160a01b0319166001600160a01b039092169190911790555b60d5546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015610cfe573d6000803e3d6000fd5b61157961332d565b600061158484611b0c565b9050600061159a82600001518360400151610ae7565b825160d580546001600160a01b0319166001600160a01b0390921691909117905590506115c5613c36565b815185908590600090819084111561162c5785516000906115e69086615702565b90506115f28186615702565b60a089015160c954919450611613918391906001600160a01b031630613476565b6080870181905261162490856156ef565b9150506116c2565b600086602001518461163e9190615702565b60c95460a08a015191925061165f9183916001600160a01b03169030613476565b60a0870181905287516000916116769088906156ef565b6116809190615702565b60a08a015160c9549192506000916116a39184916001600160a01b031630613476565b9050886000015194508089602001516116bc91906156ef565b93505050505b670de0b6b3a7640000826116db8960a00151600161278e565b6116e591906159b3565b6116ef91906159ca565b60c086015260cb5460c954611711916001600160a01b039182169116836133f7565b60cb5460a0880151611730916001600160a01b039182169116846133f7565b86608001516117bf5760cb546001600160a01b0316639137be7a8b8484611758838383612584565b6040518563ffffffff1660e01b81526004016117779493929190615680565b6020604051808303816000875af1158015611796573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ba91906156a6565b611836565b60cb54604051635f4e6fb760e11b81526001600160a01b039091169063be9cdf6e906117f3908d90869086906004016156c3565b6020604051808303816000875af1158015611812573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183691906156a6565b5050505050505050505050565b600054610100900460ff16158080156118635750600054600160ff909116105b80611884575061187230613762565b158015611884575060005460ff166001145b6118e75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610da9565b6000805460ff19166001179055801561190a576000805461ff0019166101001790555b60cb80546001600160a01b038085166001600160a01b03199283161790925560c9805492861692909116919091179055611942613771565b61194a6137a0565b6119526137cf565b8015611998576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b6119a561332d565b6001600160a01b0391909116600090815261011560205260409020805460ff1916911515919091179055565b6119d961332d565b6119e360006137fe565b565b60d6546040516001600160a01b039091169063ac4ab3fb903390611a0b90602001615949565b604051602081830303815290604052805190602001206040518363ffffffff1660e01b8152600401611a3e92919061561b565b602060405180830381865afa158015611a5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a7f91906156a6565b6119985760405162461bcd60e51b8152600401610da99061596d565b60cb546000906001600160a01b03163314611ae65760405162461bcd60e51b815260206004820152600b60248201526a2737ba102b37b235b0ab1960a91b6044820152606401610da9565b611af285858585613476565b90505b949350505050565b6033546001600160a01b031690565b6040805161010081018252600080825260208201819052818301819052606082018190526080820181905260a0820181905260c0820181905260e082015260cb54915163191618a160e21b81526004810184905290916001600160a01b03169063645862849060240161010060405180830381865afa158015611b93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6e91906159de565b60cb54604051639c735fbb60e01b815260009182916001600160a01b0390911690639c735fbb90611bec908890600401613db4565b60c060405180830381865afa158015611c09573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2d9190615720565b9050611c37613c36565b60408051608081018252838201516001600160a01b0390811682526060808601805183166020808601919091528751841685870152808801518416928501929092529085018990528715158585015260ce5490519351631773dc6560e21b815292936000939190921691635dcf719491611cb49190600401613db4565b6040805180830381865afa158015611cd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf49190615664565b60ce548551604051631773dc6560e21b81529293506000926001600160a01b0390921691635dcf719491611d2a91600401613db4565b6040805180830381865afa158015611d46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6a9190615664565b60ce546020870151604051631773dc6560e21b81529293506000926001600160a01b0390921691635dcf719491611da391600401613db4565b6040805180830381865afa158015611dbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611de39190615664565b60cf5460cd5460208801516040808a0151905163095ce6c560e01b81529495506001600160a01b039384169463095ce6c594611e2d9416928a928a928a928a9290916004016157ca565b61018060405180830381865afa158015611e4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e6f9190615851565b50808652611e839064e8d4a510009061591b565b94859052509298975050505050505050565b611e9d61332d565b6001600160a01b0391909116600090815261010e60205260409020805460ff1916911515919091179055565b611ed161332d565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190611f00903090600401613db4565b602060405180830381865afa158015611f1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f419190615a92565b60405163a9059cbb60e01b81529091506001600160a01b0383169063a9059cbb90611f72903390859060040161561b565b6020604051808303816000875af1158015611f91573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199891906156a6565b611fbd61332d565b6001600160a01b038116611fe35760405162461bcd60e51b8152600401610da990615aab565b6113888262ffffff1611156120295760405162461bcd60e51b815260206004820152600c60248201526b08ccaca40e8dede40d0d2ced60a31b6044820152606401610da9565b6001600160a01b0316600090815261010c60205260409020805462ffffff191662ffffff92909216919091179055565b612061613416565b60cb546040805163aced166160e01b815290516001600160a01b039092169163aced1661916004808201926020929091908290030181865afa1580156120ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120cf9190615996565b6001600160a01b0316336001600160a01b03161461211c5760405162461bcd60e51b815260206004820152600a6024820152692737ba1035b2b2b832b960b11b6044820152606401610da9565b600061212782611b0c565b600083815261010f602052604090206006810154919250906001600160a01b03166121815760405162461bcd60e51b815260206004820152600a602482015269139bc81c995c5d595cdd60b21b6044820152606401610da9565b6007810154600160a01b900460ff16156121c65760405162461bcd60e51b8152600401610da990602080825260049082015263646f6e6560e01b604082015260600190565b60068101546007820154600085815261011160205260409020546001600160a01b03928316929091169060ff16801561220f57506000858152610112602052604090205460ff16155b156123425760008360040154116122385760405162461bcd60e51b8152600401610da990615ad1565b60c9546101135460048086015460405163095ea7b360e01b81526001600160a01b039485169463095ea7b39461227294911692910161561b565b6020604051808303816000875af1158015612291573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b591906156a6565b506101135460c95460048581015460008981526101106020526040908190205490516341c70b0160e11b81526001600160a01b039586169563838e160295349561230b95918316948a948f949091169101615af4565b6000604051808303818588803b15801561232457600080fd5b505af1158015612338573d6000803e3d6000fd5b5050505050612573565b60008581526101116020526040902054661550f7dca700009060ff166123ab57662aa1efb94e00003410156123ab5760405162461bcd60e51b815260206004820152600f60248201526e4e6f7420656e6f756768206665657360881b6044820152606401610da9565b60008460030154116123cf5760405162461bcd60e51b8152600401610da990615ad1565b61011354600385015460405163095ea7b360e01b81526001600160a01b038681169363095ea7b39361240893929091169160040161561b565b6020604051808303816000875af1158015612427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244b91906156a6565b5061011354600385015460008881526101106020526040908190205490516341c70b0160e11b81526001600160a01b039384169363838e160293869361249e938a938a938f939092911690600401615af4565b6000604051808303818588803b1580156124b757600080fd5b505af11580156124cb573d6000803e3d6000fd5b5050506000888152610111602052604090205460ff169150612571905057846080015115612536578460e001516001600160a01b03166108fc829081150290604051600060405180830381858888f19350505050158015612530573d6000803e3d6000fd5b50612571565b84516040516001600160a01b039091169082156108fc029083906000818181858888f1935050505015801561256f573d6000803e3d6000fd5b505b505b505050506125816001606555565b50565b60008061259085611b0c565b60cb548151604080840151905163de91a5e560e01b81529394506000936001600160a01b039093169263de91a5e5926125cd92909160040161561b565b61018060405180830381865afa1580156125eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061260f9190615b4a565b9050600061262583600001518460400151610ae7565b905060006126388460a00151600061278e565b61010a5460a086015191925060009182916001600160a01b039081169116036126a65768056bc75e2d6310000061266f848b6159b3565b61267991906159ca565b915068056bc75e2d6310000083856000015161269591906159b3565b61269f91906159ca565b90506126f3565b68327cb2734119d3b7a9601e1b6126bd848b6159b3565b6126c791906159ca565b915068327cb2734119d3b7a9601e1b8385600001516126e691906159b3565b6126f091906159ca565b90505b60c95460009061270d906001600160a01b0316600161278e565b9050600069d3c21bcecceda1000000612726838c6159b3565b61273091906159ca565b9050600061273e82866156ef565b8851602089015191925060009161275590876156ef565b61275f91906156ef565b9050600081831161277157600061277b565b61277b8284615702565b9f9e505050505050505050505050505050565b600080600061010960009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156127e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280b9190615c2a565b509194509250508215905060006128228342615702565b9050610e10811161286d5760405162461bcd60e51b815260206004820152601560248201527423b930b1b2903832b934b7b2103737ba1037bb32b960591b6044820152606401610da9565b816128ae5760405162461bcd60e51b815260206004820152601160248201527029b2b8bab2b731b2b91034b9903237bbb760791b6044820152606401610da9565b6001600160a01b03808816600090815260d46020526040808220548151633fabe5a360e21b815291519293169163feaf968c9160048082019260a0929091908290030181865afa158015612906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292a9190615c2a565b5050506001600160a01b038a16600090815261010d6020526040812054919350915060ff161561297757612963826402540be4006159b3565b61297090620f42406159b3565b90506112cc565b61010a546001600160a01b03908116908a16036129a95761299d826402540be4006159b3565b612970906127106159b3565b6001600160a01b0389166000908152610114602052604090205460ff16156129ec57662386f26fc100006129e2836402540be4006159b3565b61297091906159ca565b6001600160a01b0389166000908152610115602052604090205460ff1615612a2957612a1d826402540be4006159b3565b612970906103e86159b3565b620f4240612a3c836402540be4006159b3565b612a4691906159ca565b9998505050505050505050565b60d36020528160005260406000208181548110612a6f57600080fd5b90600052602060002001600091509150505481565b60cb548251516001600160a01b03908116911614612ab45760405162461bcd60e51b8152600401610da990615c7a565b60d6546040516001600160a01b039091169063ac4ab3fb903390612ada90602001615949565b604051602081830303815290604052805190602001206040518363ffffffff1660e01b8152600401612b0d92919061561b565b602060405180830381865afa158015612b2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4e91906156a6565b612b6a5760405162461bcd60e51b8152600401610da99061596d565b6000612b7584611b0c565b90506000612b8b82600001518360400151610ae7565b9050612b95613c36565b6000846020015160000151600081518110612bb257612bb2615ca8565b60200260200101516020015190506000856020015160000151600181518110612bdd57612bdd615ca8565b60209081029190910181015181015160a08701516001600160a01b0316600090815261010e90925260409091205490915060ff16612e8b576000808560000151841115612c79578551600090612c339086615702565b9050612c3f8186615702565b60a089015160c954919450612c60918391906001600160a01b031630613476565b60808701819052612c7190856156ef565b915050612d0f565b6000866020015184612c8b9190615702565b60c95460a08a0151919250612cac9183916001600160a01b03169030613476565b60a087018190528751600091612cc39088906156ef565b612ccd9190615702565b60a08a015160c954919250600091612cf09184916001600160a01b031630613476565b905088600001519450808960200151612d0991906156ef565b93505050505b670de0b6b3a764000082612d288960a00151600161278e565b612d3291906159b3565b612d3c91906159ca565b60c086015260cb5460c954612d5e916001600160a01b039182169116836133f7565b60cb5460a0880151612d7d916001600160a01b039182169116846133f7565b8660800151612e0c5760cb546001600160a01b0316639137be7a8b8484612da5838a8a612584565b6040518563ffffffff1660e01b8152600401612dc49493929190615680565b6020604051808303816000875af1158015612de3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e0791906156a6565b612e83565b60cb54604051635f4e6fb760e11b81526001600160a01b039091169063be9cdf6e90612e40908d90869086906004016156c3565b6020604051808303816000875af1158015612e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e8391906156a6565b505050612f1f565b60cb5460a0860151604051639c735fbb60e01b81526000926001600160a01b031691639c735fbb91612ec09190600401613db4565b60c060405180830381865afa158015612edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f019190615720565b9050612f1d898484886000015189602001518660400151613850565b505b5050505050505050565b612f3161332d565b6001600160a01b038216612f575760405162461bcd60e51b8152600401610da990615aab565b6001600160a01b03918216600090815260d46020526040902080546001600160a01b03191691909216179055565b612fec60405180610120016040528060006001600160a01b031681526020016000815260200160008152602001600081526020016000815260200160008152602001600015158152602001600061ffff16815260200160006001600160a01b031681525090565b60cb5460405163546fcf3960e01b8152600481018490526001600160a01b039091169063546fcf399060240161012060405180830381865afa158015613036573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b6e9190615cbe565b61306261332d565b6001600160a01b0381166130c75760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610da9565b612581816137fe565b60cb548251516001600160a01b039081169116146131005760405162461bcd60e51b8152600401610da990615c7a565b60d6546040516001600160a01b039091169063ac4ab3fb90339061312690602001615949565b604051602081830303815290604052805190602001206040518363ffffffff1660e01b815260040161315992919061561b565b602060405180830381865afa158015613176573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061319a91906156a6565b6131b65760405162461bcd60e51b8152600401610da99061596d565b60cb5460208201515180516001600160a01b039092169163862a82089186916000906131e4576131e4615ca8565b6020026020010151602001516040518363ffffffff1660e01b8152600401613216929190918252602082015260400190565b6020604051808303816000875af1158015613235573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061325991906156a6565b50505050565b61326761332d565b60cc80546001600160a01b038881166001600160a01b0319928316811790935560cd8054898316908416811790915560ce8054898416908516811790915560cf8054898516908616811790915560d08054898616908716811790915560d18054958916959096168517909555604080519687526020870193909352918501526060840152608083019190915260a08201527f03f1afd7ce30865f51a6e0b71bd812eb2a48c45e187b710c8e67eaaa53c15c579060c00160405180910390a1505050505050565b33613336611afd565b6001600160a01b0316146119e35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610da9565b6040516001600160a01b03808516602483015283166044820152606481018290526132599085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526139c6565b6119988363a9059cbb60e01b84846040516024016133c092919061561b565b6002606554036134685760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610da9565b6002606555565b6001606555565b60008460000361348857506000611af5565b60cc5460405163095ea7b360e01b81526000916001600160a01b038088169263095ea7b3926134bd9216908a9060040161561b565b6020604051808303816000875af11580156134dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350091906156a6565b5061010b546001600160a01b0386811691161480159061352f575061010b546001600160a01b03858116911614155b15613650576040805160a0810182526001600160a01b03878116600090815261010c60209081528482205461010b5480851684528684205460608d811b6001600160601b031990811660c08a015260e894851b6001600160e81b031990811660d48b015293821b811660d78a01529190931b90911660eb8701528a821b1660ee860152855160e281870301815261010286018752855288841691850191909152428486015283018a9052608083015260cc54925163c04b8d5960e01b81529192169063c04b8d5990613605908490600401615d96565b6020604051808303816000875af1158015613624573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136489190615a92565b915050611af2565b60408051610100810182526001600160a01b038781168083528782166020808501918252600092835261010c90528482205462ffffff90811685870190815289851660608701908152426080880190815260a088018f815260c0890187815260e08a0197885260cc549a5163414bf38960e01b81528a518a16600482015296518916602488015293519094166044860152905186166064850152516084840152905160a48301525160c48201529051821660e48201529192169063414bf38990610104016020604051808303816000875af1158015613733573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137579190615a92565b979650505050505050565b6001600160a01b03163b151590565b600054610100900460ff166137985760405162461bcd60e51b8152600401610da990615dee565b6119e3613a9b565b600054610100900460ff166137c75760405162461bcd60e51b8152600401610da990615dee565b6119e3613acb565b600054610100900460ff166137f65760405162461bcd60e51b8152600401610da990615dee565b6119e3613afe565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600086815261010f602052604081209061386988611b0c565b8883556001830188905560028301879055905084871161388a576000613894565b6138948588615702565b6003830190815560a08201516006840180546001600160a01b039283166001600160a01b031991821617909155600785018054878416908316179055835160008c8152610110602052604090208054919093169116179055541580156138f957508386115b15613933576139088487615702565b600483015560058201849055600088815261011160205260409020805460ff1916600117905561393b565b600582018690555b6001820154600283015460008a81526101116020908152604091829020546003870154600488015484518f8152938401969096529282019390935260ff90921615156060830152608082015260a08101919091527f41aa0b642d7539321de3afda61eeb8c6bbf79ab4ea7a567e420c9663a846a7599060c00160405180910390a15050505050505050565b6000613a1b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613b259092919063ffffffff16565b9050805160001480613a3c575080806020019051810190613a3c91906156a6565b6119985760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610da9565b600054610100900460ff16613ac25760405162461bcd60e51b8152600401610da990615dee565b6119e3336137fe565b600054610100900460ff16613af25760405162461bcd60e51b8152600401610da990615dee565b6097805460ff19169055565b600054610100900460ff1661346f5760405162461bcd60e51b8152600401610da990615dee565b6060611af5848460008585600080866001600160a01b03168587604051613b4c9190615e39565b60006040518083038185875af1925050503d8060008114613b89576040519150601f19603f3d011682016040523d82523d6000602084013e613b8e565b606091505b50915091506137578783838760608315613c07578251600003613c0057613bb485613762565b613c005760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610da9565b5081611af5565b611af58383815115613c1c5781518083602001fd5b8060405162461bcd60e51b8152600401610da99190615e55565b604051806101000160405280600081526020016000801916815260200160001515815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038116811461258157600080fd5b8035613ca081613c80565b919050565b801515811461258157600080fd5b60008060408385031215613cc657600080fd5b8235613cd181613c80565b91506020830135613ce181613ca5565b809150509250929050565b600060208284031215613cfe57600080fd5b8135613d0981613c80565b9392505050565b6001600160a01b03169052565b60008060408385031215613d3057600080fd5b8235613d3b81613c80565b946020939093013593505050565b80518252602090810151910152565b60408101610b6e8284613d49565b600080600060608486031215613d7b57600080fd5b505081359360208301359350604090920135919050565b60008060408385031215613da557600080fd5b50508035926020909101359150565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715613e0057613e00613dc8565b60405290565b60405160e081016001600160401b0381118282101715613e0057613e00613dc8565b604051606081016001600160401b0381118282101715613e0057613e00613dc8565b60405161012081016001600160401b0381118282101715613e0057613e00613dc8565b60405161016081016001600160401b0381118282101715613e0057613e00613dc8565b60405161018081016001600160401b0381118282101715613e0057613e00613dc8565b604051601f8201601f191681016001600160401b0381118282101715613edb57613edb613dc8565b604052919050565b60006001600160401b03821115613efc57613efc613dc8565b5060051b60200190565b600082601f830112613f1757600080fd5b81356001600160401b03811115613f3057613f30613dc8565b613f43601f8201601f1916602001613eb3565b818152846020838601011115613f5857600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f830112613f8657600080fd5b81356020613f9b613f9683613ee3565b613eb3565b82815260059290921b84018101918181019086841115613fba57600080fd5b8286015b84811015613fde578035613fd181613c80565b8352918301918301613fbe565b509695505050505050565b600082601f830112613ffa57600080fd5b8135602061400a613f9683613ee3565b82815260059290921b8401810191818101908684111561402957600080fd5b8286015b84811015613fde5780356001600160401b038082111561404d5760008081fd5b908801906040828b03601f19018113156140675760008081fd5b61406f613dde565b87840135838111156140815760008081fd5b61408f8d8a83880101613f06565b8252509083013590828211156140a55760008081fd5b6140b38c8984870101613f75565b81890152865250505091830191830161402d565b600060408083850312156140da57600080fd5b6140e2613dde565b915082356001600160401b03808211156140fb57600080fd5b818501915085601f83011261410f57600080fd5b8135602061411f613f9683613ee3565b82815260059290921b8401810191818101908984111561413e57600080fd5b8286015b848110156141bd5780358681111561415a5760008081fd5b8701808c03601f19018913156141705760008081fd5b614178613dde565b858201358881111561418a5760008081fd5b6141988e8883860101613f06565b82525090890135906141a982613c80565b808601919091528352918301918301614142565b50875250868101359450828511156141d457600080fd5b6141e088868901613fe9565b81870152505050505092915050565b600082601f83011261420057600080fd5b81356020614210613f9683613ee3565b828152600592831b850182019282820191908785111561422f57600080fd5b8387015b858110156143245780356001600160401b03808211156142535760008081fd5b908901906040828c03601f190181131561426d5760008081fd5b614275613dde565b88840135838111156142875760008081fd5b6142958e8b83880101613f06565b82525081840135838111156142aa5760008081fd5b8085019450508c603f8501126142c257600092508283fd5b8884013592506142d4613f9684613ee3565b83815292861b8401820192898101908e8511156142f15760008081fd5b948301945b8486101561430f5785358252948a0194908a01906142f6565b828b0152508752505050928401928401614233565b5090979650505050505050565b6000604080838503121561434457600080fd5b61434c613dde565b915082356001600160401b038082111561436557600080fd5b818501915085601f83011261437957600080fd5b81356020614389613f9683613ee3565b82815260059290921b840181019181810190898411156143a857600080fd5b8286015b8481101561441a578035868111156143c45760008081fd5b8701808c03601f19018913156143da5760008081fd5b6143e2613dde565b85820135888111156143f45760008081fd5b6144028e8883860101613f06565b825250908901358582015283529183019183016143ac565b508752508681013594508285111561443157600080fd5b6141e0888689016141ef565b600082601f83011261444e57600080fd5b8135602061445e613f9683613ee3565b828152600592831b850182019282820191908785111561447d57600080fd5b8387015b858110156143245780356001600160401b03808211156144a15760008081fd5b908901906040828c03601f19018113156144bb5760008081fd5b6144c3613dde565b88840135838111156144d55760008081fd5b6144e38e8b83880101613f06565b82525081840135838111156144f85760008081fd5b8085019450508c603f85011261451057600092508283fd5b888401359250614522613f9684613ee3565b83815292861b8401820192898101908e85111561453f5760008081fd5b948301945b8486101561455d5785358252948a0194908a0190614544565b828b0152508752505050928401928401614481565b6000604080838503121561458557600080fd5b61458d613dde565b915082356001600160401b03808211156145a657600080fd5b818501915085601f8301126145ba57600080fd5b813560206145ca613f9683613ee3565b82815260059290921b840181019181810190898411156145e957600080fd5b8286015b8481101561465b578035868111156146055760008081fd5b8701808c03601f190189131561461b5760008081fd5b614623613dde565b85820135888111156146355760008081fd5b6146438e8883860101613f06565b825250908901358582015283529183019183016145ed565b508752508681013594508285111561467257600080fd5b6141e08886890161443d565b600082601f83011261468f57600080fd5b8135602061469f613f9683613ee3565b828152600592831b85018201928282019190878511156146be57600080fd5b8387015b858110156143245780356001600160401b03808211156146e25760008081fd5b908901906040828c03601f19018113156146fc5760008081fd5b614704613dde565b88840135838111156147165760008081fd5b6147248e8b83880101613f06565b82525081840135838111156147395760008081fd5b8085019450508c603f85011261475157600092508283fd5b888401359250614763613f9684613ee3565b83815292861b8401820192898101908e8511156147805760008081fd5b948301945b848610156147aa578535935061479a84613ca5565b838252948a0194908a0190614785565b828b01525087525050509284019284016146c2565b600060408083850312156147d257600080fd5b6147da613dde565b915082356001600160401b03808211156147f357600080fd5b818501915085601f83011261480757600080fd5b81356020614817613f9683613ee3565b82815260059290921b8401810191818101908984111561483657600080fd5b8286015b848110156148b5578035868111156148525760008081fd5b8701808c03601f19018913156148685760008081fd5b614870613dde565b85820135888111156148825760008081fd5b6148908e8883860101613f06565b82525090890135906148a182613ca5565b80860191909152835291830191830161483a565b50875250868101359450828511156148cc57600080fd5b6141e08886890161467e565b600060408083850312156148eb57600080fd5b6148f3613dde565b915082356001600160401b038082111561490c57600080fd5b818501915085601f83011261492057600080fd5b81356020614930613f9683613ee3565b82815260059290921b8401810191818101908984111561494f57600080fd5b8286015b8481101561465b5780358681111561496b5760008081fd5b8701808c03601f19018913156149815760008081fd5b614989613dde565b858201358881111561499b5760008081fd5b6149a98e8883860101613f06565b82525090890135858201528352918301918301614953565b600082601f8301126149d257600080fd5b813560206149e2613f9683613ee3565b82815260059290921b84018101918181019086841115614a0157600080fd5b8286015b84811015613fde576001600160401b038135811015614a2357600080fd5b813588016040818b03601f19011215614a3b57600080fd5b614a43613dde565b8682013583811115614a5457600080fd5b614a628c8983860101613f06565b825250604082013583811115614a7757600080fd5b8083019250508a603f830112614a8c57600080fd5b86820135614a9c613f9682613ee3565b81815260059190911b830160400190888101908d831115614abc57600080fd5b604085015b83811015614af4578681351115614ad757600080fd5b614ae78f60408335890101613f06565b8352918a01918a01614ac1565b50838a0152505085525050918301918301614a05565b60006040808385031215614b1d57600080fd5b614b25613dde565b915082356001600160401b0380821115614b3e57600080fd5b818501915085601f830112614b5257600080fd5b81356020614b62613f9683613ee3565b82815260059290921b84018101918181019089841115614b8157600080fd5b8286015b84811015614c1157803586811115614b9d5760008081fd5b8701808c03601f1901891315614bb35760008081fd5b614bbb613dde565b8582013588811115614bcd5760008081fd5b614bdb8e8883860101613f06565b8252508982013588811115614bf05760008081fd5b614bfe8e8883860101613f06565b8288015250845250918301918301614b85565b5087525086810135945082851115614c2857600080fd5b6141e0888689016149c1565b600082601f830112614c4557600080fd5b81356020614c55613f9683613ee3565b82815260059290921b84018101918181019086841115614c7457600080fd5b8286015b84811015613fde576001600160401b038135811015614c9657600080fd5b813588016040818b03601f19011215614cae57600080fd5b614cb6613dde565b8682013583811115614cc757600080fd5b614cd58c8983860101613f06565b825250604082013583811115614cea57600080fd5b8083019250508a603f830112614cff57600080fd5b86820135614d0f613f9682613ee3565b81815260059190911b830160400190888101908d831115614d2f57600080fd5b604085015b83811015614d67578681351115614d4a57600080fd5b614d5a8f60408335890101613f06565b8352918a01918a01614d34565b50838a0152505085525050918301918301614c78565b60006040808385031215614d9057600080fd5b614d98613dde565b915082356001600160401b0380821115614db157600080fd5b818501915085601f830112614dc557600080fd5b81356020614dd5613f9683613ee3565b82815260059290921b84018101918181019089841115614df457600080fd5b8286015b84811015614e8457803586811115614e105760008081fd5b8701808c03601f1901891315614e265760008081fd5b614e2e613dde565b8582013588811115614e405760008081fd5b614e4e8e8883860101613f06565b8252508982013588811115614e635760008081fd5b614e718e8883860101613f06565b8288015250845250918301918301614df8565b5087525086810135945082851115614e9b57600080fd5b6141e088868901614c34565b600060e08284031215614eb957600080fd5b614ec1613e06565b905081356001600160401b0380821115614eda57600080fd5b614ee6858386016140c7565b83526020840135915080821115614efc57600080fd5b614f0885838601614331565b60208401526040840135915080821115614f2157600080fd5b614f2d85838601614572565b60408401526060840135915080821115614f4657600080fd5b614f52858386016147bf565b60608401526080840135915080821115614f6b57600080fd5b614f77858386016148d8565b608084015260a0840135915080821115614f9057600080fd5b614f9c85838601614b0a565b60a084015260c0840135915080821115614fb557600080fd5b50614fc284828501614d7d565b60c08301525092915050565b60008060408385031215614fe157600080fd5b8235915060208301356001600160401b03811115614ffe57600080fd5b61500a85828601614ea7565b9150509250929050565b6000806040838503121561502757600080fd5b823561503281613c80565b91506020830135613ce181613c80565b600060e0828403121561505457600080fd5b61505c613e06565b9050813581526020820135602082015260408201356040820152606082013560608201526080820135608082015260a082013560a082015260c082013560c082015292915050565b6000602082840312156150b657600080fd5b604051602081016001600160401b03811182821017156150d8576150d8613dc8565b60405290508082356150e981613ca5565b905292915050565b60008060006060848603121561510657600080fd5b8335925060208401356001600160401b038082111561512457600080fd5b90850190610120828803121561513957600080fd5b615141613e28565b82358281111561515057600080fd5b830160e0818a03121561516257600080fd5b61516a613e06565b61517382613c95565b815261518160208301613c95565b602082015261519260408301613c95565b60408201526151a360608301613c95565b60608201526151b460808301613c95565b608082015260a0820135848111156151cb57600080fd5b6151d78b828501613f75565b60a08301525060c0820135848111156151ef57600080fd5b6151fb8b828501613f75565b60c0830152508252506152118860208501615042565b60208201526152248861010085016150a4565b604082015280945050604086013591508082111561524157600080fd5b5061524e86828701614ea7565b9150509250925092565b6000806000806080858703121561526e57600080fd5b84359350602085013561528081613c80565b9250604085013561529081613c80565b915060608501356152a081613c80565b939692955090935050565b6000602082840312156152bd57600080fd5b5035919050565b60006101008201905060018060a01b0380845116835260208401516020840152604084015160408401526060840151151560608401526080840151151560808401528060a08501511660a08401525060c083015160c083015260e083015161532f60e0840182613d10565b5092915050565b60008060006060848603121561534b57600080fd5b833561535681613c80565b925060208401359150604084013561536d81613ca5565b809150509250925092565b6000806040838503121561538b57600080fd5b823562ffffff8116811461503257600080fd5b6000806000606084860312156153b357600080fd5b8335925060208401356001600160401b03808211156153d157600080fd5b81860191506101208083890312156153e857600080fd5b6153f0613e28565b8335838111156153ff57600080fd5b8401808a0383131561541057600080fd5b615418613e4a565b925061542381613c95565b835261543160208201613c95565b602084015261544260408201613c95565b604084015261545360608201613c95565b606084015261546460808201613c95565b608084015261547560a08201613c95565b60a084015261548660c08201613c95565b60c084015260e08101358481111561549d57600080fd5b6154a98b828401613f75565b60e08501525061010080820135858111156154c357600080fd5b6154cf8c828501613f75565b82860152508383526154e48b60208801615042565b60208401526154f58b8288016150a4565b604084015250508095505050604086013591508082111561524157600080fd5b60006101208201905060018060a01b0383511682526020830151602083015260408301516040830152606083015160608301526080830151608083015260a083015160a083015260c0830151151560c083015260e083015161557d60e084018261ffff169052565b506101008084015161559182850182613d10565b505092915050565b60008060008060008060c087890312156155b257600080fd5b86356155bd81613c80565b955060208701356155cd81613c80565b945060408701356155dd81613c80565b935060608701356155ed81613c80565b925060808701356155fd81613c80565b915060a087013561560d81613c80565b809150509295509295509295565b6001600160a01b03929092168252602082015260400190565b60006040828403121561564657600080fd5b61564e613dde565b9050815181526020820151602082015292915050565b60006040828403121561567657600080fd5b610b6b8383615634565b93845260208401929092526040830152606082015260800190565b8051613ca081613ca5565b6000602082840312156156b857600080fd5b8151613d0981613ca5565b9283526020830191909152604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610b6e57610b6e6156d9565b81810381811115610b6e57610b6e6156d9565b8051613ca081613c80565b600060c0828403121561573257600080fd5b60405160c081016001600160401b038111828210171561575457615754613dc8565b604052825161576281613c80565b8152602083015161577281613c80565b6020820152604083015161578581613c80565b6040820152606083015161579881613c80565b606082015260808301516157ab81613c80565b608082015260a08301516157be81613c80565b60a08201529392505050565b60006101a08201905060018060a01b03808a1683528089511660208401528060208a01511660408401528060408a01511660608401528060608a01511660808401525061581a60a0830188613d49565b61582760e0830187613d49565b615835610120830186613d49565b8361016083015282151561018083015298975050505050505050565b60008082840361018081121561586657600080fd5b8351925061016080601f198301121561587e57600080fd5b615886613e6d565b91506020850151825260408501516020830152606085015160408301526080850151606083015260a0850151608083015260c085015160a083015260e085015160c08301526101008086015160e08401526101208087015182850152610140915081870151818501525081860151818401525050809150509250929050565b634e487b7160e01b600052601260045260246000fd5b60008261592a5761592a615905565b600160ff1b821460001984141615615944576159446156d9565b500590565b6020808252600a908201526921a7a72a2927a62622a960b11b604082015260600190565b6020808252600f908201526e4e6f742070726f70657220726f6c6560881b604082015260600190565b6000602082840312156159a857600080fd5b8151613d0981613c80565b8082028115828204841417610b6e57610b6e6156d9565b6000826159d9576159d9615905565b500490565b60006101008083850312156159f257600080fd5b604051908101906001600160401b0382118183101715615a1457615a14613dc8565b8160405283519150615a2582613c80565b8181526020840151602082015260408401516040820152615a486060850161569b565b6060820152615a596080850161569b565b6080820152615a6a60a08501615715565b60a082015260c084015160c0820152615a8560e08501615715565b60e0820152949350505050565b600060208284031215615aa457600080fd5b5051919050565b6020808252600c908201526b5a65726f206164647265737360a01b604082015260600190565b60208082526009908201526804e6f203020737761760bc1b604082015260600190565b6001600160a01b039586168152938516602085015260408401929092526060830152909116608082015260a00190565b805163ffffffff81168114613ca057600080fd5b805161ffff81168114613ca057600080fd5b60006101808284031215615b5d57600080fd5b615b65613e90565b8251815260208301516020820152604083015160408201526060830151606082015260808301516080820152615b9d60a08401615715565b60a0820152615bae60c08401615b24565b60c0820152615bbf60e08401615715565b60e0820152610100615bd2818501615b38565b90820152610120615be484820161569b565b90820152610140615bf684820161569b565b90820152610160615c08848201615715565b908201529392505050565b80516001600160501b0381168114613ca057600080fd5b600080600080600060a08688031215615c4257600080fd5b615c4b86615c13565b9450602086015193506040860151925060608601519150615c6e60808701615c13565b90509295509295909350565b60208082526014908201527320b1b1b7bab73a1034b9b73a102b37b235b0ab1960611b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006101208284031215615cd157600080fd5b615cd9613e4a565b615ce283615715565b81526020830151602082015260408301516040820152606083015160608201526080830151608082015260a083015160a0820152615d2260c0840161569b565b60c0820152615d3360e08401615b38565b60e0820152610100615c08818501615715565b60005b83811015615d61578181015183820152602001615d49565b50506000910152565b60008151808452615d82816020860160208601615d46565b601f01601f19169290920160200192915050565b602081526000825160a06020840152615db260c0840182615d6a565b905060018060a01b0360208501511660408401526040840151606084015260608401516080840152608084015160a08401528091505092915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008251615e4b818460208701615d46565b9190910192915050565b602081526000610b6b6020830184615d6a56fea26469706673582212200d2839e8553bd46cce206d7ca9501c205b0c214c94c78e88dab6cbb6c475014264736f6c63430008130033