0 txs
215k calls
constructor
constructor(address _weth, uint256 _chainId)
functions
BORROW_POSITION_PROXY
viewfunction BORROW_POSITION_PROXY() view returns (address)
CHAIN_ID
viewfunction CHAIN_ID() view returns (uint256)
DOLOMITE_MARGIN
viewfunction DOLOMITE_MARGIN() view returns (address)
dolomiteRegistry
viewfunction dolomiteRegistry() view returns (address)
getExecutionFeeForAccountNumber
viewfunction getExecutionFeeForAccountNumber(uint256 _accountNumber) view returns (uint256)
getOutputTokenByVaultAccount
viewfunction getOutputTokenByVaultAccount(uint256 _accountNumber) view returns (address)
handlerRegistry
viewfunction handlerRegistry() view returns (address)
isDepositSourceWrapper
viewfunction isDepositSourceWrapper() view returns (bool)
isExternalRedemptionPaused
viewfunction isExternalRedemptionPaused() view returns (bool)
isVaultAccountFrozen
viewfunction isVaultAccountFrozen(uint256 _accountNumber) view returns (bool)
isVaultFrozen
viewfunction isVaultFrozen() view returns (bool)
marketId
viewfunction marketId() view returns (uint256)
OWNER
viewfunction OWNER() view returns (address)
registry
viewfunction registry() view returns (address)
shouldSkipTransfer
viewfunction shouldSkipTransfer() view returns (bool)
UNDERLYING_TOKEN
viewfunction UNDERLYING_TOKEN() view returns (address)
underlyingBalanceOf
viewfunction underlyingBalanceOf() view returns (uint256)
VAULT_FACTORY
viewfunction VAULT_FACTORY() view returns (address)
virtualBalance
viewfunction virtualBalance() view returns (uint256)
WETH
viewfunction WETH() view returns (address)
addCollateralAndSwapExactInputForOutput
payablefunction addCollateralAndSwapExactInputForOutput(uint256 _fromAccountNumber, uint256 _borrowAccountNumber, uint256[] _marketIdsPath, uint256 _inputAmountWei, uint256 _minOutputAmountWei, tuple[] _tradersPath, tuple[] _makerAccounts, tuple _userConfig) payable
cancelDeposit
nonpayablefunction cancelDeposit(bytes32 _key)
cancelWithdrawal
nonpayablefunction cancelWithdrawal(bytes32 _key)
closeBorrowPositionWithOtherTokens
nonpayablefunction closeBorrowPositionWithOtherTokens(uint256 _borrowAccountNumber, uint256 _toAccountNumber, uint256[] _collateralMarketIds)
closeBorrowPositionWithUnderlyingVaultToken
nonpayablefunction closeBorrowPositionWithUnderlyingVaultToken(uint256 _borrowAccountNumber, uint256 _toAccountNumber)
depositIntoVaultForDolomiteMargin
nonpayablefunction depositIntoVaultForDolomiteMargin(uint256 _toAccountNumber, uint256 _amountWei)
executeDepositIntoVault
nonpayablefunction executeDepositIntoVault(address _from, uint256 _amount)
executeWithdrawalFromVault
nonpayablefunction executeWithdrawalFromVault(address _recipient, uint256 _amount)
initialize
nonpayablefunction initialize()
initiateUnwrapping
payablefunction initiateUnwrapping(uint256 _tradeAccountNumber, uint256 _inputAmount, address _outputToken, uint256 _minOutputAmount, bytes _extraData) payable
initiateUnwrappingForLiquidation
payablefunction initiateUnwrappingForLiquidation(uint256 _tradeAccountNumber, uint256 _inputAmount, address _outputToken, uint256 _minOutputAmount, bytes _extraData) payable
multicall
nonpayablefunction multicall(bytes[] _calls)
openBorrowPosition
payablefunction openBorrowPosition(uint256 _fromAccountNumber, uint256 _toAccountNumber, uint256 _amountWei) payable
openMarginPosition
payablefunction openMarginPosition(uint256 _fromAccountNumber, uint256 _toAccountNumber, uint256 _borrowMarketId, uint256 _amountWei) payable
repayAllForBorrowPosition
nonpayablefunction repayAllForBorrowPosition(uint256 _fromAccountNumber, uint256 _borrowAccountNumber, uint256 _marketId, uint8 _balanceCheckFlag)
setIsVaultDepositSourceWrapper
nonpayablefunction setIsVaultDepositSourceWrapper(bool _isDepositSourceWrapper)
setShouldVaultSkipTransfer
nonpayablefunction setShouldVaultSkipTransfer(bool _shouldSkipTransfer)
swapExactInputForOutput
payablefunction swapExactInputForOutput(uint256 _tradeAccountNumber, uint256[] _marketIdsPath, uint256 _inputAmountWei, uint256 _minOutputAmountWei, tuple[] _tradersPath, tuple[] _makerAccounts, tuple _userConfig) payable
swapExactInputForOutputAndRemoveCollateral
payablefunction swapExactInputForOutputAndRemoveCollateral(uint256 _toAccountNumber, uint256 _borrowAccountNumber, uint256[] _marketIdsPath, uint256 _inputAmountWei, uint256 _minOutputAmountWei, tuple[] _tradersPath, tuple[] _makerAccounts, tuple _userConfig) payable
transferFromPositionWithOtherToken
nonpayablefunction transferFromPositionWithOtherToken(uint256 _borrowAccountNumber, uint256 _toAccountNumber, uint256 _marketId, uint256 _amountWei, uint8 _balanceCheckFlag)
transferFromPositionWithUnderlyingToken
nonpayablefunction transferFromPositionWithUnderlyingToken(uint256 _borrowAccountNumber, uint256 _toAccountNumber, uint256 _amountWei)
transferIntoPositionWithOtherToken
nonpayablefunction transferIntoPositionWithOtherToken(uint256 _fromAccountNumber, uint256 _borrowAccountNumber, uint256 _marketId, uint256 _amountWei, uint8 _balanceCheckFlag)
transferIntoPositionWithUnderlyingToken
nonpayablefunction transferIntoPositionWithUnderlyingToken(uint256 _fromAccountNumber, uint256 _borrowAccountNumber, uint256 _amountWei)
withdrawFromVaultForDolomiteMargin
nonpayablefunction withdrawFromVaultForDolomiteMargin(uint256 _fromAccountNumber, uint256 _amountWei)
events
ExecutionFeeSet
event ExecutionFeeSet(uint256 _accountNumber, uint256 _executionFee)
IsDepositSourceWrapperSet
event IsDepositSourceWrapperSet(bool _isDepositSourceWrapper)
IsVaultFrozenSet
event IsVaultFrozenSet(bool _isVaultFrozen)
ShouldSkipTransferSet
event ShouldSkipTransferSet(bool _shouldSkipTransfer)
VirtualBalanceSet
event VirtualBalanceSet(uint256 _balance)
errors
No errors.
creation bytecode
0x60c06040523480156200001157600080fd5b5060405162005fe138038062005fe1833981016040819052620000349162000099565b6001600160a01b0390911660805260a052620000dc565b60006001600160a01b0382165b92915050565b62000069816200004b565b81146200007557600080fd5b50565b805162000058816200005e565b8062000069565b8051620000588162000085565b60008060408385031215620000b157620000b1600080fd5b6000620000bf858562000078565b9250506020620000d2858286016200008c565b9150509250929050565b60805160a051615ed8620001096000396000818161051e015261353e015260006106150152615ed86000f3fe60806040526004361061026b5760003560e01c80638129fc1c11610144578063b0463d5c116100b6578063e01f77bd1161007a578063e01f77bd146106b6578063e14baed0146106c9578063e86d1d30146106de578063f4a2924c146106fe578063fa93d69a1461071e578063fb82f8ee1461073e57600080fd5b8063b0463d5c14610637578063bd12584f14610657578063bdd019e91461066c578063dc6c13571461068c578063dcd2af17146106a157600080fd5b806397f47fd11161010857806397f47fd1146105955780639cd7a1c4146105a8578063a4668594146105bd578063a9f47158146105d0578063ac9650d8146105e3578063ad5c46481461060357600080fd5b80638129fc1c146104f757806385e1f4d01461050c578063891e94df146105405780638bc179b8146105605780638ddab4e51461057557600080fd5b8063359e125f116101dd5780636ee31021116101a15780636ee310211461045a5780637213c5a01461046d578063739a09b81461048d578063797b5125146104ad5780637b103999146104cd5780637bd9e197146104e257600080fd5b8063359e125f146103c5578063565e4240146103d85780636096fec9146103eb57806365f3c330146104185780636ed71ede1461043857600080fd5b8063258aecf61161022f578063258aecf61461031b57806325ffd1361461033b578063284d58d81461035b57806329db1be61461037b5780632ee3d92f1461039057806331404484146103a557600080fd5b806304a192cd146102775780630d42394114610299578063103f2907146102b9578063117803e3146102e457806315c14a4a146102f957600080fd5b3661027257005b600080fd5b34801561028357600080fd5b50610297610292366004614244565b610753565b005b3480156102a557600080fd5b506102976102b43660046142bc565b610782565b3480156102c557600080fd5b506102ce6107ab565b6040516102db9190614319565b60405180910390f35b3480156102f057600080fd5b506102ce6107e4565b34801561030557600080fd5b5061030e610814565b6040516102db9190614346565b34801561032757600080fd5b50610297610336366004614354565b61088e565b34801561034757600080fd5b50610297610356366004614354565b6108b9565b34801561036757600080fd5b506102976103763660046143b7565b6108d6565b34801561038757600080fd5b506102ce6108e9565b34801561039c57600080fd5b5061030e610963565b3480156103b157600080fd5b506102976103c03660046143d8565b6109a5565b6102976103d33660046144af565b610a1c565b6102976103e63660046145be565b610abf565b3480156103f757600080fd5b5061040b6104063660046143d8565b610bc5565b6040516102db91906146c1565b34801561042457600080fd5b506102976104333660046143b7565b610c52565b34801561044457600080fd5b5061044d610c65565b6040516102db91906146d5565b6102976104683660046144af565b610cdf565b34801561047957600080fd5b506102976104883660046143d8565b610d6c565b34801561049957600080fd5b506102976104a8366004614244565b610daf565b3480156104b957600080fd5b506102976104c83660046146f7565b610dce565b3480156104d957600080fd5b5061030e610e5f565b3480156104ee57600080fd5b5061040b610ea1565b34801561050357600080fd5b50610297610f26565b34801561051857600080fd5b5061044d7f000000000000000000000000000000000000000000000000000000000000000081565b34801561054c57600080fd5b5061044d61055b3660046143d8565b610f30565b34801561056c57600080fd5b5061040b610f8c565b34801561058157600080fd5b506102976105903660046146f7565b611001565b6102976105a3366004614763565b6110f9565b3480156105b457600080fd5b5061044d611147565b6102976105cb3660046147f8565b611194565b6102976105de366004614354565b6111c1565b3480156105ef57600080fd5b506102976105fe366004614a0b565b6111de565b34801561060f57600080fd5b5061030e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561064357600080fd5b50610297610652366004614a45565b611228565b34801561066357600080fd5b5061030e611246565b34801561067857600080fd5b50610297610687366004614a9d565b611288565b34801561069857600080fd5b5061040b6112a6565b3480156106ad57600080fd5b5061044d6112de565b6102976106c4366004614763565b61130e565b3480156106d557600080fd5b5061040b611349565b3480156106ea57600080fd5b506102ce6106f93660046143d8565b611379565b34801561070a57600080fd5b506102976107193660046142bc565b611400565b34801561072a57600080fd5b506102976107393660046142bc565b61141c565b34801561074a57600080fd5b5061030e611438565b61075b61147a565b3361076581611509565b6107728686868686611557565b5061077b61156e565b5050505050565b61078a61147a565b3361079481611509565b61079e83836115a2565b506107a761156e565b5050565b60006107df6107db60017f4c711eee7e3094af1816c5450bcb78a8ffe46729a7979be7e0bf539fb4d4eef3614b20565b5490565b905090565b60006107df6107db60017fa7b53796fd2d99cb1f5ae019b54f9e024446c3d12b483f733ccc62ed04eb126b614b20565b600061081e6107ab565b6001600160a01b03166315c14a4a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561085657600080fd5b505afa15801561086a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107df9190614b4b565b61089661147a565b336108a081611509565b6108ab8484846115c9565b506108b461156e565b505050565b6108c161147a565b336108cb81611509565b6108ab84848461161d565b336108e081611645565b6107a782611692565b60006108f36107ab565b6001600160a01b03166329db1be66040518163ffffffff1660e01b815260040160206040518083038186803b15801561092b57600080fd5b505afa15801561093f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107df9190614b77565b600061096d6107ab565b6001600160a01b0316632ee3d92f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561085657600080fd5b336109af81611509565b6040516318178e8d60e31b815273d7b6b9e73f3f0ee8062942772afa877a2cb3a3749063c0bc7468906109e89030908690600401614b98565b60006040518083038186803b158015610a0057600080fd5b505af4158015610a14573d6000803e3d6000fd5b505050505050565b610a2461147a565b33610a2e81611710565b610aa98c8c8c8c8c8c610a418c8e614cac565b8b8b808060200260200160405190810160405280939291908181526020016000905b82821015610a8f57610a8060408302860136819003810190614d03565b81526020019060010190610a63565b50610aa49350505050368c90038c018c614d9a565b6117ee565b50610ab261156e565b5050505050505050505050565b610ac761147a565b33610ad181611710565b60006040518060e001604052808d81526020018c8c80806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250505090825250602081018b9052604081018a9052606001610b35888a614cac565b81526020018686808060200260200160405190810160405280939291908181526020016000905b82821015610b8857610b7960408302860136819003810190614d03565b81526020019060010190610b5c565b5050509183525050602001610ba236869003860186614d9a565b90529050610baf8161189b565b5050610bb961156e565b50505050505050505050565b6000610bcf6107ab565b6001600160a01b031663a00c843830846040518363ffffffff1660e01b8152600401610bfc929190614dbb565b60206040518083038186803b158015610c1457600080fd5b505afa158015610c28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4c9190614dd4565b92915050565b33610c5c81611645565b6107a78261193d565b6000610c6f6107ab565b6001600160a01b0316636ed71ede6040518163ffffffff1660e01b815260040160206040518083038186803b158015610ca757600080fd5b505afa158015610cbb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107df9190614e00565b610ce761147a565b33610cf181611710565b610aa98c8c8c8c8c8c610d048c8e614cac565b8b8b808060200260200160405190810160405280939291908181526020016000905b82821015610d5257610d4360408302860136819003810190614d03565b81526020019060010190610d26565b50610d679350505050368c90038c018c614d9a565b61199a565b33610d7681611509565b60405163676db8fd60e11b815273d7b6b9e73f3f0ee8062942772afa877a2cb3a3749063cedb71fa906109e89030908690600401614b98565b610db761147a565b33610dc181611509565b6107728686868686611a3c565b33610dd881611645565b610df382610de46112de565b610dee9190614b20565b611b5a565b610dfb611349565b610e1c576108b48383610e0c6108e9565b6001600160a01b03169190611bbc565b610e55610e27610ea1565b600080516020615e63833981519152752b30bab63a1039b437bab63210313290333937bd32b760511b611c12565b6108b46000611692565b6000610e696107ab565b6001600160a01b031663b1a1e3bf6040518163ffffffff1660e01b815260040160206040518083038186803b15801561085657600080fd5b6000610eab6107ab565b6001600160a01b0316638c160fb3306040518263ffffffff1660e01b8152600401610ed69190614319565b60206040518083038186803b158015610eee57600080fd5b505afa158015610f02573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107df9190614dd4565b610f2e611c70565b565b6000610c4c610f6060017f69869c5aa7635610fd6b6a6acc3c87b49976010cb2d02ea071450f5316b46798614b20565b604051610f7291908590602001614e21565b604051602081830303815290604052805190602001205490565b600073d7b6b9e73f3f0ee8062942772afa877a2cb3a37463755b43bc610fb0610e5f565b610fb86107ab565b6040518363ffffffff1660e01b8152600401610fd5929190614e2f565b60206040518083038186803b158015610fed57600080fd5b505af4158015610f02573d6000803e3d6000fd5b3361100b81611645565b611021826110176112de565b610dee9190614e4a565b611029611349565b610e1c576110356112a6565b611058576108b48330846110476108e9565b6001600160a01b0316929190611ccd565b6110ef611063611438565b6001600160a01b0316638a05d1d26110796107ab565b6040518263ffffffff1660e01b81526004016110959190614346565b60206040518083038186803b1580156110ad57600080fd5b505afa1580156110c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110e59190614b4b565b30846110476108e9565b6108b4600061193d565b61110161147a565b3361110b81611509565b611113611cee565b8661111d81611d33565b61112d8888888860008989611d98565b61113d8888888860008989611df7565b5050610a1461156e565b60006111516108e9565b6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040161117c9190614319565b60206040518083038186803b158015610ca757600080fd5b61119c61147a565b336111a681611509565b6111b285858585612141565b506111bb61156e565b50505050565b6111c961147a565b336111d381611509565b6108ab8484846121c0565b336111e881611509565b732ccef16241ef4008edd777d509f5931ac57ff5d2638ae060f08361120b611246565b6040518363ffffffff1660e01b81526004016109e8929190614f34565b61123061147a565b3361123a81611509565b6111b28585858561223e565b6000611250610e5f565b6001600160a01b031663bd12584f6040518163ffffffff1660e01b815260040160206040518083038186803b15801561085657600080fd5b61129061147a565b3361129a81611509565b6111b285858585612254565b60006112d66107db60017f109214c054f5b01ee316e2321f87592b2fbe8279d37d777b790a8bab02cd2ef5614b20565b600114905090565b60006107df6107db60017f2999b9a40ae5c021d28c54a9a169c1aa76044a7bd27c50594d05decce289c0cf614b20565b61131661147a565b3361132081612291565b6113308787878760018888611d98565b6113408787878760018888611df7565b50610a1461156e565b60006112d66107db60017fb3a7325d86592e1253e4838e9e5a0c83182c37b36ce01ab72e66d5bf60f93f7b614b20565b60006113836107ab565b6001600160a01b03166376d258f830846040518363ffffffff1660e01b81526004016113b0929190614dbb565b60206040518083038186803b1580156113c857600080fd5b505afa1580156113dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c4c9190614b77565b61140861147a565b3361141281611509565b61079e8383612436565b61142461147a565b3361142e8161244a565b61079e83836124c2565b60006114426107ab565b6001600160a01b031663fb82f8ee6040518163ffffffff1660e01b815260040160206040518083038186803b15801561085657600080fd5b6114d560026114ad6107db60017f2055d34ef4e6ac2e46f60705e95454cb98afb4f8e76d000ade51a7e920260b62614b20565b1415600080516020615e838339815191526d1499595b9d1c985b9d0818d85b1b60921b611c12565b610f2e61150360017f2055d34ef4e6ac2e46f60705e95454cb98afb4f8e76d000ade51a7e920260b62614b20565b60029055565b6115546115146107e4565b6001600160a01b0316826001600160a01b031614600080516020615e838339815191527213db9b1e481bdddb995c8818d85b8818d85b1b606a1b846124d6565b50565b836115618161251c565b610a14868686868661255f565b610f2e61159c60017f2055d34ef4e6ac2e46f60705e95454cb98afb4f8e76d000ade51a7e920260b62614b20565b60019055565b81816115ad8261251c565b6115b68161251c565b6115c084846125d2565b6111bb8261260d565b6116126115d583610f30565b151578476d78563249736f6c6174696f6e4d6f64655661756c74563160381b744d697373696e6720657865637574696f6e2066656560581b611c12565b6108b48383836126e9565b82826116288261251c565b6116318161251c565b61163c85858561271d565b61077b8261260d565b6115546116506107ab565b6001600160a01b0316826001600160a01b031614600080516020615e838339815191527413db9b1e48199858dd1bdc9e4818d85b8818d85b1b605a1b846124d6565b6116d66116c060017fb3a7325d86592e1253e4838e9e5a0c83182c37b36ce01ab72e66d5bf60f93f7b614b20565b826116cc5760006116cf565b60015b60ff169055565b7fb12918cf4a25c2ca43e5c8c40ba4e46369ef748203b1d5c5af7af388b93a639b8160405161170591906146c1565b60405180910390a150565b61155461171b6107e4565b6001600160a01b0316826001600160a01b031614806117b8575061173d6107ab565b6001600160a01b03166316774ba0836040518263ffffffff1660e01b81526004016117689190614319565b60206040518083038186803b15801561178057600080fd5b505afa158015611794573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b89190614dd4565b600080516020615e838339815191527f4f6e6c79206f776e6572206f7220636f6e7665727465722063616e2063616c6c846124d6565b60405163060d7e3d60e21b815273d7b6b9e73f3f0ee8062942772afa877a2cb3a37490631835f8f4906118299030908c908890600401615058565b60006040518083038186803b15801561184157600080fd5b505af4158015611855573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261187d91908101906151f9565b9250611890898989898989898989612786565b505050505050505050565b8051608082015160405163060d7e3d60e21b815273d7b6b9e73f3f0ee8062942772afa877a2cb3a37492631835f8f4926118db9230929190600401615058565b60006040518083038186803b1580156118f357600080fd5b505af4158015611907573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261192f91908101906151f9565b608082015261155481612816565b61196b6116c060017f109214c054f5b01ee316e2321f87592b2fbe8279d37d777b790a8bab02cd2ef5614b20565b7f21b77f93361ae0f5102f8fa910ea385dcd39ca2507e33b8c832132c75151f5648160405161170591906146c1565b60405163060d7e3d60e21b815273d7b6b9e73f3f0ee8062942772afa877a2cb3a37490631835f8f4906119d59030908c908890600401615058565b60006040518083038186803b1580156119ed57600080fd5b505af4158015611a01573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a2991908101906151f9565b9250611890898989898989898989612e1f565b84611a468161251c565b85858585856000611a55610814565b6040805180820182523081526020810189905290516311f46d4f60e21b81526001600160a01b0392909216916347d1b53c91611a95918890600401615257565b604080518083038186803b158015611aac57600080fd5b505afa158015611ac0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae491906152ca565b9050611af38c8c8c8c8c612ea2565b611afb610f8c565b15611b4b57611b42611b0c82612ee6565b600080516020615e438339815191527f43616e6e6f74206c65766572207570207768656e20706175736564000000000087612f05565b611b4b86612f31565b505050505050610a148161260d565b611b8d611b8860017f2999b9a40ae5c021d28c54a9a169c1aa76044a7bd27c50594d05decce289c0cf614b20565b829055565b7f71593334fa72714f5cb33095cef6d96f5c80dc8efb760ea45df437fdd5d1b0348160405161170591906146d5565b6108b48363a9059cbb60e01b8484604051602401611bdb929190614dbb565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613005565b826108b457611c2082613097565b6101d160f51b611c2f83613097565b604051602001611c419392919061531d565b60408051601f198184030181529082905262461bcd60e51b8252611c6791600401615345565b60405180910390fd5b61156e611ca16107db60017f059687b4dba0a8c0c94866b6d34b3f94074057ac6e4d8d39cf07d3a0a55f2050614b20565b15600080516020615e8383398151915272105b1c9958591e481a5b9a5d1a585b1a5e9959606a1b611c12565b6111bb846323b872dd60e01b858585604051602401611bdb93929190615356565b610f2e611cf9610ea1565b157f49736f6c6174696f6e4d6f64655661756c745631467265657a61626c650000006e2b30bab63a1034b990333937bd32b760891b611c12565b60405163e90aeb7f60e01b8152732ccef16241ef4008edd777d509f5931ac57ff5d29063e90aeb7f90611d6c9030908590600401614b98565b60006040518083038186803b158015611d8457600080fd5b505af415801561077b573d6000803e3d6000fd5b611da3878785613132565b611ddf60008511600080516020615e638339815191527f496e76616c6964206d696e4f7574707574416d6f756e74000000000000000000611c12565b611dee878787878787876134f6565b50505050505050565b6000611e016107ab565b9050611f3e611e0e610e5f565b6001600160a01b031663f8c6e51d836040518263ffffffff1660e01b8152600401611e399190614346565b60206040518083038186803b158015611e5157600080fd5b505afa158015611e65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e899190614b4b565b6001600160a01b031663f1a1f8fa886040518263ffffffff1660e01b8152600401611eb49190614319565b60206040518083038186803b158015611ecc57600080fd5b505afa158015611ee0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f049190614dd4565b78476d78563249736f6c6174696f6e4d6f64655661756c74563160381b7324b73b30b634b21037baba383aba103a37b5b2b760611b611c12565b611ff7611f496107ab565b6001600160a01b03166326949f9e6040518163ffffffff1660e01b815260040160206040518083038186803b158015611f8157600080fd5b505afa158015611f95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fb99190614e00565b34111578476d78563249736f6c6174696f6e4d6f64655661756c74563160381b74496e76616c696420657865637574696f6e2066656560581b611c12565b34841561201e5761200789610f30565b6120119082614e4a565b905061201e8960006135ba565b6000612028610e5f565b6001600160a01b031663f8c6e51d61203e6107ab565b6040518263ffffffff1660e01b815260040161205a9190614346565b60206040518083038186803b15801561207257600080fd5b505afa158015612086573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120aa9190614b4b565b90506120c9818a6120b96108e9565b6001600160a01b03169190613652565b60405163ec9a6b8d60e01b81526001600160a01b0382169063ec9a6b8d908490612103908e908e908e908e908e908e908e906004016153a1565b6000604051808303818588803b15801561211c57600080fd5b505af1158015612130573d6000803e3d6000fd5b505050505050505050505050505050565b6040516316e25f5160e11b815273d7b6b9e73f3f0ee8062942772afa877a2cb3a37490632dc4bea29061217a9030908790600401614b98565b60006040518083038186803b15801561219257600080fd5b505af41580156121a6573d6000803e3d6000fd5b505050506121b684848484613715565b6111bb83346135ba565b6040516316e25f5160e11b815273d7b6b9e73f3f0ee8062942772afa877a2cb3a37490632dc4bea2906121f99030908690600401614b98565b60006040518083038186803b15801561221157600080fd5b505af4158015612225573d6000803e3d6000fd5b50505050612234838383613780565b6108b482346135ba565b826122488161251c565b61077b858585856137aa565b8361225e8161251c565b8484848461226e898989896137e9565b612276610f8c565b156122845761228484612f31565b5050505061077b8161260d565b61155461229c611246565b6001600160a01b031663b26489f96040518163ffffffff1660e01b815260040160206040518083038186803b1580156122d457600080fd5b505afa1580156122e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230c9190614b4b565b6001600160a01b031663d9f476016123226107ab565b6001600160a01b0316636ed71ede6040518163ffffffff1660e01b815260040160206040518083038186803b15801561235a57600080fd5b505afa15801561236e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123929190614e00565b846040518363ffffffff1660e01b81526004016123b0929190615403565b60206040518083038186803b1580156123c857600080fd5b505afa1580156123dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124009190614dd4565b600080516020615e638339815191527f4f6e6c79206c697175696461746f722063616e2063616c6c0000000000000000846124d6565b816124408161251c565b6108b4838361382b565b6115546124556107e4565b6001600160a01b0316826001600160a01b0316148061248c57506124776107ab565b6001600160a01b0316826001600160a01b0316145b600080516020615e838339815191527f4f6e6c79206f776e6572206f7220666163746f72792063616e2063616c6c0000846124d6565b816124cc8161251c565b6108b48383613866565b836111bb576124e483613097565b6101d160f51b6124f384613097565b61080f60f21b612502856138a1565b604051611c41959493929190601f60f91b9060200161542e565b61155461252882610bc5565b15600080516020615e638339815191527f5661756c74206163636f756e742069732066726f7a656e00000000000000000084612f05565b604051634dcae86960e01b8152732ccef16241ef4008edd777d509f5931ac57ff5d290634dcae869906125a69030908990899089908990899060019060009060040161548c565b60006040518083038186803b1580156125be57600080fd5b505af4158015611890573d6000803e3d6000fd5b60405163043e6d7160e41b8152732ccef16241ef4008edd777d509f5931ac57ff5d2906343e6d710906109e8903090869086906004016154f6565b6040805180820190915230815260208101829052600061262c83610f30565b9050612636610814565b6001600160a01b0316634f4d66f6836040518263ffffffff1660e01b81526004016126619190615511565b60206040518083038186803b15801561267957600080fd5b505afa15801561268d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b19190614e00565b1580156126be5750600081115b156108b4576126ce8360006135ba565b6108b4816126da6107e4565b6001600160a01b0316906139e7565b82826126f48261251c565b6126fd8161251c565b848484612708613a83565b612713888888613ac4565b5050505050505050565b6040516302be155360e31b8152732ccef16241ef4008edd777d509f5931ac57ff5d2906315f0aa989061275a90309087908790879060040161551f565b60006040518083038186803b15801561277257600080fd5b505af4158015611dee573d6000803e3d6000fd5b87878780806020026020016040519081016040528093929190818152602001838360200280828437600092018290525084518b94508a93506127df92508591906127d2576127d2615554565b6020026020010151613b01565b6127ed308586868686613b27565b6127fe8d8d8d8d8d8d8d8d8d613c40565b6128078461260d565b50505050505050505050505050565b8060000151816020015182604001518360600151612840836000815181106127d2576127d2615554565b61284e308586868686613b27565b8451602086015160408701516000612864610f8c565b6040805180820190915260008082526020820152909150604080518082019091523081526020810186905282156129cd57600085600187516128a69190614b20565b815181106128b6576128b6615554565b602002602001015190506129046128cb610c65565b821415600080516020615e438339815191527f43616e6e6f74207a617020746f206d61726b6574207768656e2070617573656484612f05565b61290c610814565b6001600160a01b031663c190c2ec83836040518363ffffffff1660e01b8152600401612939929190615257565b604080518083038186803b15801561295057600080fd5b505afa158015612964573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298891906155a8565b92506129cb61299684613cb5565b600080516020615e438339815191527f5a6170732063616e206f6e6c79207265706179207768656e2070617573656400611c12565b505b6129d68b613ccc565b8215610ab25760006129e6610814565b90506000866000815181106129fd576129fd615554565b6020026020010151905060008760018951612a189190614b20565b81518110612a2857612a28615554565b602002602001015190506000836001600160a01b03166347d1b53c86856040518363ffffffff1660e01b8152600401612a62929190615257565b604080518083038186803b158015612a7957600080fd5b505afa158015612a8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ab191906152ca565b9050612b0b612abf82612ee6565b80612ad5575060208201516001600160801b0316155b600080516020615e438339815191527f43616e6e6f74206c65766572207570207768656e20706175736564000000000086612f05565b60405163306430bb60e21b81526000906001600160a01b0386169063c190c2ec90612b3c9089908790600401615257565b604080518083038186803b158015612b5357600080fd5b505afa158015612b67573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b8b91906155a8565b90506000612b998289613d31565b90506000866001600160a01b0316638928378e876040518263ffffffff1660e01b8152600401612bc991906146d5565b60206040518083038186803b158015612be157600080fd5b505afa158015612bf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c1991906155ff565b51612c24908c615620565b90506000876001600160a01b0316638928378e876040518263ffffffff1660e01b8152600401612c5491906146d5565b60206040518083038186803b158015612c6c57600080fd5b505afa158015612c80573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ca491906155ff565b516020840151612cb49190615620565b90506000612cc0611246565b6001600160a01b0316632ba813046040518163ffffffff1660e01b815260040160206040518083038186803b158015612cf857600080fd5b505afa158015612d0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d309190614e00565b90506000612d3c611246565b6001600160a01b031663389bc5d36040518163ffffffff1660e01b815260040160206040518083038186803b158015612d7457600080fd5b505afa158015612d88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dac9190614e00565b9050612e0881612dbc8487615620565b612dc69190615655565b612dd09086614b20565b841015600080516020615e438339815191527f556e61636365707461626c65207472616465207768656e207061757365640000611c12565b505050505050505050505050505050505050505050565b8888888880806020026020016040519081016040528093929190818152602001838360200280828437600092018290525084518c94508b9350612e6c92508591906127d2576127d2615554565b612e81612e776107e4565b8686868686613b27565b612e928e8e8e8e8e8e8e8e8e613d7f565b5050505050505050505050505050565b604051637e0f4c7f60e01b8152732ccef16241ef4008edd777d509f5931ac57ff5d290637e0f4c7f906125a690309089908990899089908990600090600401615669565b80516000908015610c4c575050602001516001600160801b0316151590565b836111bb57612f1383613097565b6101d160f51b612f2284613097565b61080f60f21b61250285613dc8565b6000612f3b610814565b6040805180820182523081526020810185905290516317b5052560e01b81526001600160a01b0392909216916317b5052591612f7991600401615511565b60206040518083038186803b158015612f9157600080fd5b505afa158015612fa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fc99190614e00565b90506107a78115600080516020615e438339815191527f43616e6e6f74206c65766572207570207768656e207061757365640000000000611c12565b600061305a826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613ed39092919063ffffffff16565b905080516000148061307b57508080602001905181019061307b9190614dd4565b6108b45760405162461bcd60e51b8152600401611c679061571b565b60606000826040516020016130ac919061572b565b60408051601f19818403018152919052905060205b801561311757806130d181615740565b9150508181815181106130e6576130e6615554565b01602001516001600160f81b03191615613112576000613107826001614e4a565b835250909392505050565b6130c1565b5060408051600080825260208201909252905b509392505050565b61316e60008311600080516020615e638339815191527f496e76616c6964207769746864726177616c20616d6f756e7400000000000000611c12565b60006131786107ab565b604051630fdd487360e31b815290915030906000906001600160a01b03841690637eea4398906131b19085908a90600190600401615785565b60206040518083038186803b1580156131c957600080fd5b505afa1580156131dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132019190614e00565b90506000836001600160a01b0316637eea4398848960006040518463ffffffff1660e01b815260040161323693929190615785565b60206040518083038186803b15801561324e57600080fd5b505afa158015613262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132869190614e00565b905060006040518060400160405280856001600160a01b031681526020018981525090506000856001600160a01b03166315c14a4a6040518163ffffffff1660e01b815260040160206040518083038186803b1580156132e557600080fd5b505afa1580156132f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061331d9190614b4b565b6001600160a01b031663c190c2ec83886001600160a01b0316636ed71ede6040518163ffffffff1660e01b815260040160206040518083038186803b15801561336557600080fd5b505afa158015613379573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061339d9190614e00565b6040518363ffffffff1660e01b81526004016133ba929190615257565b604080518083038186803b1580156133d157600080fd5b505afa1580156133e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061340991906155a8565b602001519050866134615761345c886134228587614e4a565b61342c9084614b20565b1015600080516020615e63833981519152735769746864726177616c20746f6f206c6172676560601b888d613eea565b611890565b6134a660006134708587614e4a565b61347a9084614b20565b11600080516020615e638339815191527020b1b1b7bab73a1034b990333937bd32b760791b888d613eea565b611890886134b48587614e4a565b6134be9084614b20565b14600080516020615e638339815191527f4c69717569646174696f6e206d7573742062652066756c6c2062616c616e6365888d613eea565b8261350057611dee565b604080518082019091523081526020810188905273d7b6b9e73f3f0ee8062942772afa877a2cb3a37463ebe6edef6135366107ab565b838a8a8a89897f00000000000000000000000000000000000000000000000000000000000000006040518963ffffffff1660e01b81526004016135809897969594939291906157ad565b60006040518083038186803b15801561359857600080fd5b505af41580156135ac573d6000803e3d6000fd5b505050505050505050505050565b6136156135e860017f69869c5aa7635610fd6b6a6acc3c87b49976010cb2d02ea071450f5316b46798614b20565b6040516135fa91908590602001614e21565b60405160208183030381529060405280519060200120829055565b7fc18960a7d9ff7367e229f4359e1519cb21cf72bc00842f60ac036e13b74053f28282604051613646929190614e21565b60405180910390a15050565b8015806136da5750604051636eb1769f60e11b81526001600160a01b0384169063dd62ed3e906136889030908690600401615812565b60206040518083038186803b1580156136a057600080fd5b505afa1580156136b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136d89190614e00565b155b6136f65760405162461bcd60e51b8152600401611c6790615873565b6108b48363095ea7b360e01b8484604051602401611bdb929190614dbb565b6040516359b3526560e01b8152732ccef16241ef4008edd777d509f5931ac57ff5d2906359b35265906137549030908890889088908890600401615883565b60006040518083038186803b15801561376c57600080fd5b505af4158015612713573d6000803e3d6000fd5b828261378b8261251c565b6137948161251c565b84848461379f613a83565b612713888888613f41565b60405163508f47dd60e11b8152732ccef16241ef4008edd777d509f5931ac57ff5d29063a11e8fba9061375490309088908890889088906004016158cf565b604051600162396b2560e21b03198152732ccef16241ef4008edd777d509f5931ac57ff5d29063ff1a536c90613754903090889088908890889060040161594a565b60405163d5e3aed360e01b8152732ccef16241ef4008edd777d509f5931ac57ff5d29063d5e3aed3906109e8903090869086906004016154f6565b604051631dfa88e760e11b8152732ccef16241ef4008edd777d509f5931ac57ff5d290633bf511ce906109e8903090869086906004016154f6565b60408051602a80825260608281019093526001600160a01b03841691600091602082018180368337019050509050603060f81b816000815181106138e7576138e7615554565b60200101906001600160f81b031916908160001a905350607860f81b8160018151811061391657613916615554565b60200101906001600160f81b031916908160001a90535060005b601481101561312a576000613946826002615620565b9050613954600f8516613f7d565b83613960836029614b20565b8151811061397057613970615554565b60200101906001600160f81b031916908160001a905350600484901c935061399a600f8516613f7d565b836139a6836028614b20565b815181106139b6576139b6615554565b60200101906001600160f81b031916908160001a9053505060049290921c91806139df81615985565b915050613930565b80471015613a075760405162461bcd60e51b8152600401611c67906159d7565b6000826001600160a01b031682604051613a20906159e7565b60006040518083038185875af1925050503d8060008114613a5d576040519150601f19603f3d011682016040523d82523d6000602084013e613a62565b606091505b50509050806108b45760405162461bcd60e51b8152600401611c6790615a49565b610f2e613a8e610f8c565b15600080516020615e438339815191527f43616e6e6f742065786563757465207768656e20706175736564000000000000611c12565b60405163225f6bc760e21b8152732ccef16241ef4008edd777d509f5931ac57ff5d29063897daf1c9061275a90309087908790879060040161551f565b613b09610c65565b811480613b195750613b19610ea1565b156115545761155433613fa7565b60008360018551613b389190614b20565b81518110613b4857613b48615554565b60200260200101519050613b5a610c65565b811415611dee57613b9e8451600214600080516020615e638339815191527f496e76616c6964206d61726b6574496473207061746820666f72207772617000611c12565b613ba785611d33565b732ccef16241ef4008edd777d509f5931ac57ff5d26329f6073b613bc9611246565b613bd1610814565b8a8a89600081518110613be657613be6615554565b6020026020010151878a8a6040518963ffffffff1660e01b8152600401613c14989796959493929190615a59565b60006040518083038186803b158015613c2c57600080fd5b505af4158015610ab2573d6000803e3d6000fd5b60405163b59abc5f60e01b8152732ccef16241ef4008edd777d509f5931ac57ff5d29063b59abc5f90613c899030908d908d908d908d908d908d908d908d908d90600401615b85565b60006040518083038186803b158015613ca157600080fd5b505af4158015612807573d6000803e3d6000fd5b8051600090158015610c4c57505060200151151590565b805160208201516040808401516060850151608086015160a087015160c088015194516323b0865760e01b8152732ccef16241ef4008edd777d509f5931ac57ff5d2976323b0865797611d6c9730979296919592949193600190600090600401615c74565b604080518082018252600080825260208083018290528351808501855282815281019190915282518084019093528351158352838101519083015290613d78908490614063565b9392505050565b60405163967c6f6b60e01b8152732ccef16241ef4008edd777d509f5931ac57ff5d29063967c6f6b90613c899030908d908d908d908d908d908d908d908d908d90600401615b85565b606081613dec5750506040805180820190915260018152600360fc1b602082015290565b8160005b8115613e165780613e0081615985565b9150613e0f9050600a83615655565b9150613df0565b6000816001600160401b03811115613e3057613e3061485c565b6040519080825280601f01601f191660200182016040528015613e5a576020820181803683370190505b508593509050815b8015613eca5780613e7281615740565b9150613e819050600a85615d0f565b613e8c906030614e4a565b60f81b828281518110613ea157613ea1615554565b60200101906001600160f81b031916908160001a905350613ec3600a85615655565b9350613e62565b50949350505050565b6060613ee2848460008561410d565b949350505050565b8461077b57613ef884613097565b6101d160f51b613f0785613097565b61080f60f21b613f16866138a1565b61016160f51b613f2587613dc8565b604051611c419796959493929190601f60f91b90602001615d23565b60405162987d3960e61b8152732ccef16241ef4008edd777d509f5931ac57ff5d29063261f4e409061275a90309087908790879060040161551f565b6000600a821015613f9c57613f93603083614e4a565b60f81b92915050565b613f93605783614e4a565b611554613fb26107ab565b6001600160a01b03166316774ba0836040518263ffffffff1660e01b8152600401613fdd9190614319565b60206040518083038186803b158015613ff557600080fd5b505afa158015614009573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061402d9190614dd4565b600080516020615e838339815191527f4f6e6c7920636f6e7665727465722063616e2063616c6c000000000000000000846124d6565b6040805180820190915260008082526020820152604080518082019091526000808252602082015282518451151590151514156140be57835115158152602080840151908501516140b49190614e4a565b6020820152613d78565b82602001518460200151106140e757835115158152602080840151908501516140b49190614b20565b825115158152602080850151908401516141019190614b20565b60208201529392505050565b60608247101561412f5760405162461bcd60e51b8152600401611c6790615de2565b600080866001600160a01b0316858760405161414b9190615df2565b60006040518083038185875af1925050503d8060008114614188576040519150601f19603f3d011682016040523d82523d6000602084013e61418d565b606091505b509150915061419e878383876141a9565b979650505050505050565b606083156141e55782516141de576001600160a01b0385163b6141de5760405162461bcd60e51b8152600401611c6790615e32565b5081613ee2565b613ee283838151156141fa5781518083602001fd5b8060405162461bcd60e51b8152600401611c679190615345565b805b811461155457600080fd5b8035610c4c81614214565b6004811061155457600080fd5b8035610c4c8161422c565b600080600080600060a0868803121561425f5761425f600080fd5b600061426b8888614221565b955050602061427c88828901614221565b945050604061428d88828901614221565b935050606061429e88828901614221565b92505060806142af88828901614239565b9150509295509295909350565b600080604083850312156142d2576142d2600080fd5b60006142de8585614221565b92505060206142ef85828601614221565b9150509250929050565b60006001600160a01b038216610c4c565b614313816142f9565b82525050565b60208101610c4c828461430a565b6000610c4c826142f9565b6000610c4c82614327565b61431381614332565b60208101610c4c828461433d565b60008060006060848603121561436c5761436c600080fd5b60006143788686614221565b935050602061438986828701614221565b925050604061439a86828701614221565b9150509250925092565b801515614216565b8035610c4c816143a4565b6000602082840312156143cc576143cc600080fd5b6000613ee284846143ac565b6000602082840312156143ed576143ed600080fd5b6000613ee28484614221565b60008083601f84011261440e5761440e600080fd5b5081356001600160401b0381111561442857614428600080fd5b60208301915083602082028301111561444357614443600080fd5b9250929050565b60008083601f84011261445f5761445f600080fd5b5081356001600160401b0381111561447957614479600080fd5b60208301915083604082028301111561444357614443600080fd5b6000606082840312156144a9576144a9600080fd5b50919050565b60008060008060008060008060008060006101408c8e0312156144d4576144d4600080fd5b60006144e08e8e614221565b9b505060206144f18e828f01614221565b9a505060408c01356001600160401b0381111561451057614510600080fd5b61451c8e828f016143f9565b9950995050606061452f8e828f01614221565b97505060806145408e828f01614221565b96505060a08c01356001600160401b0381111561455f5761455f600080fd5b61456b8e828f016143f9565b955095505060c08c01356001600160401b0381111561458c5761458c600080fd5b6145988e828f0161444a565b935093505060e06145ab8e828f01614494565b9150509295989b509295989b9093969950565b6000806000806000806000806000806101208b8d0312156145e1576145e1600080fd5b60006145ed8d8d614221565b9a505060208b01356001600160401b0381111561460c5761460c600080fd5b6146188d828e016143f9565b9950995050604061462b8d828e01614221565b975050606061463c8d828e01614221565b96505060808b01356001600160401b0381111561465b5761465b600080fd5b6146678d828e016143f9565b955095505060a08b01356001600160401b0381111561468857614688600080fd5b6146948d828e0161444a565b935093505060c06146a78d828e01614494565b9150509295989b9194979a5092959850565b801515614313565b60208101610c4c82846146b9565b80614313565b60208101610c4c82846146cf565b614216816142f9565b8035610c4c816146e3565b6000806040838503121561470d5761470d600080fd5b60006142de85856146ec565b60008083601f84011261472e5761472e600080fd5b5081356001600160401b0381111561474857614748600080fd5b60208301915083600182028301111561444357614443600080fd5b60008060008060008060a0878903121561477f5761477f600080fd5b600061478b8989614221565b965050602061479c89828a01614221565b95505060406147ad89828a016146ec565b94505060606147be89828a01614221565b93505060808701356001600160401b038111156147dd576147dd600080fd5b6147e989828a01614719565b92509250509295509295509295565b6000806000806080858703121561481157614811600080fd5b600061481d8787614221565b945050602061482e87828801614221565b935050604061483f87828801614221565b925050606061485087828801614221565b91505092959194509250565b634e487b7160e01b600052604160045260246000fd5b601f19601f83011681018181106001600160401b03821117156148975761489761485c565b6040525050565b60006148a960405190565b90506148b58282614872565b919050565b60006001600160401b038211156148d3576148d361485c565b5060209081020190565b60006001600160401b038211156148f6576148f661485c565b601f19601f83011660200192915050565b82818337506000910152565b6000614926614921846148dd565b61489e565b90508281526020810184848401111561494157614941600080fd5b61312a848285614907565b600082601f83011261496057614960600080fd5b8135613ee2848260208601614913565b600061497e614921846148ba565b8381529050602080820190840283018581111561499d5761499d600080fd5b835b818110156149dd5780356001600160401b038111156149c0576149c0600080fd5b8086016149cd898261494c565b855250506020928301920161499f565b5050509392505050565b600082601f8301126149fb576149fb600080fd5b8135613ee2848260208601614970565b600060208284031215614a2057614a20600080fd5b81356001600160401b03811115614a3957614a39600080fd5b613ee2848285016149e7565b60008060008060808587031215614a5e57614a5e600080fd5b6000614a6a8787614221565b9450506020614a7b87828801614221565b9350506040614a8c87828801614221565b925050606061485087828801614239565b60008060008060608587031215614ab657614ab6600080fd5b6000614ac28787614221565b9450506020614ad387828801614221565b93505060408501356001600160401b03811115614af257614af2600080fd5b614afe878288016143f9565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b600082821015614b3257614b32614b0a565b500390565b61421681614327565b8051610c4c81614b37565b600060208284031215614b6057614b60600080fd5b6000613ee28484614b40565b8051610c4c816146e3565b600060208284031215614b8c57614b8c600080fd5b6000613ee28484614b6c565b60408101614ba6828561433d565b613d7860208301846146cf565b600060808284031215614bc857614bc8600080fd5b614bd2608061489e565b90506000614be08484614239565b8252506020614bf184848301614221565b6020830152506040614c05848285016146ec565b60408301525060608201356001600160401b03811115614c2757614c27600080fd5b614c338482850161494c565b60608301525092915050565b6000614c4d614921846148ba565b83815290506020808201908402830185811115614c6c57614c6c600080fd5b835b818110156149dd5780356001600160401b03811115614c8f57614c8f600080fd5b808601614c9c8982614bb3565b8552505060209283019201614c6e565b6000613d78368484614c3f565b600060408284031215614cce57614cce600080fd5b614cd8604061489e565b90506000614ce684846146ec565b8252506020614cf784848301614221565b60208301525092915050565b600060408284031215614d1857614d18600080fd5b6000613ee28484614cb9565b6003811061155457600080fd5b8035610c4c81614d24565b600060608284031215614d5157614d51600080fd5b614d5b606061489e565b90506000614d698484614221565b8252506020614d7a84848301614239565b6020830152506040614d8e84828501614d31565b60408301525092915050565b600060608284031215614daf57614daf600080fd5b6000613ee28484614d3c565b60408101614ba6828561430a565b8051610c4c816143a4565b600060208284031215614de957614de9600080fd5b6000613ee28484614dc9565b8051610c4c81614214565b600060208284031215614e1557614e15600080fd5b6000613ee28484614df5565b60408101614ba682856146cf565b60408101614e3d828561433d565b613d78602083018461433d565b60008219821115614e5d57614e5d614b0a565b500190565b60005b83811015614e7d578181015183820152602001614e65565b838111156111bb5750506000910152565b6000614e98825190565b808452602084019350614eaf818560208601614e62565b601f19601f8201165b9093019392505050565b6000613d788383614e8e565b6000614ed8825190565b80845260208401935083602082028501614ef28560200190565b8060005b85811015614f275784840389528151614f0f8582614ec2565b94506020830160209a909a0199925050600101614ef6565b5091979650505050505050565b60408082528101614f458185614ece565b9050613d78602083018461433d565b634e487b7160e01b600052602160045260246000fd5b6004811061155457611554614f54565b806148b581614f6a565b6000610c4c82614f7a565b61431381614f84565b80516000906080840190614fac8582614f8f565b506020830151614fbf60208601826146cf565b506040830151614fd2604086018261430a565b5060608301518482036060860152614fea8282614e8e565b95945050505050565b6000613d788383614f98565b6000615009825190565b808452602084019350836020820285016150238560200190565b8060005b85811015614f2757848403895281516150408582614ff3565b94506020830160209a909a0199925050600101615027565b60608101615066828661433d565b61507360208301856146cf565b8181036040830152614fea8184614fff565b8051610c4c8161422c565b600061509e614921846148dd565b9050828152602081018484840111156150b9576150b9600080fd5b61312a848285614e62565b600082601f8301126150d8576150d8600080fd5b8151613ee2848260208601615090565b6000608082840312156150fd576150fd600080fd5b615107608061489e565b905060006151158484615085565b825250602061512684848301614df5565b602083015250604061513a84828501614b6c565b60408301525060608201516001600160401b0381111561515c5761515c600080fd5b614c33848285016150c4565b6000615176614921846148ba565b8381529050602080820190840283018581111561519557615195600080fd5b835b818110156149dd5780516001600160401b038111156151b8576151b8600080fd5b8086016151c589826150e8565b8552505060209283019201615197565b600082601f8301126151e9576151e9600080fd5b8151613ee2848260208601615168565b60006020828403121561520e5761520e600080fd5b81516001600160401b0381111561522757615227600080fd5b613ee2848285016151d5565b80516040830190615244848261430a565b5060208201516111bb60208501826146cf565b606081016152658285615233565b613d7860408301846146cf565b6001600160801b038116614216565b8051610c4c81615272565b6000604082840312156152a1576152a1600080fd5b6152ab604061489e565b905060006152b98484614dc9565b8252506020614cf784848301615281565b6000604082840312156152df576152df600080fd5b6000613ee2848461528c565b60006152f5825190565b615303818560208601614e62565b9290920192915050565b6001600160f01b03198116614313565b600061532982866152eb565b9150615335828561530d565b600282019150614fea82846152eb565b60208082528101613d788184614e8e565b60608101615364828661430a565b615371602083018561430a565b613ee260408301846146cf565b8183526000602084019350615394838584614907565b601f19601f840116614eb8565b60c081016153af828a6146cf565b6153bc60208301896146cf565b6153c9604083018861430a565b6153d660608301876146cf565b6153e360808301866146b9565b81810360a08301526153f681848661537e565b9998505050505050505050565b6040810161541182856146cf565b613d78602083018461430a565b6001600160f81b03198116614313565b600061543a82896152eb565b9150615446828861530d565b60028201915061545682876152eb565b9150615462828661530d565b60028201915061547282856152eb565b915061547e828461541e565b506001019695505050505050565b610100810161549b828b61433d565b6154a8602083018a6146cf565b6154b560408301896146cf565b6154c260608301886146cf565b6154cf60808301876146cf565b6154dc60a0830186614f8f565b6154e960c08301856146b9565b6153f660e08301846146b9565b60608101615504828661433d565b61537160208301856146cf565b60408101610c4c8284615233565b6080810161552d828761433d565b61553a60208301866146cf565b61554760408301856146cf565b614fea60608301846146cf565b634e487b7160e01b600052603260045260246000fd5b60006040828403121561557f5761557f600080fd5b615589604061489e565b905060006155978484614dc9565b8252506020614cf784848301614df5565b6000604082840312156155bd576155bd600080fd5b6000613ee2848461556a565b6000602082840312156155de576155de600080fd5b6155e8602061489e565b905060006155f68484614df5565b82525092915050565b60006020828403121561561457615614600080fd5b6000613ee284846155c9565b600081600019048311821515161561563a5761563a614b0a565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826156645761566461563f565b500490565b60e08101615677828a61433d565b61568460208301896146cf565b61569160408301886146cf565b61569e60608301876146cf565b6156ab60808301866146cf565b6156b860a0830185614f8f565b6156c560c08301846146b9565b98975050505050505050565b602a81526000602082017f5361666545524332303a204552433230206f7065726174696f6e20646964206e8152691bdd081cdd58d8d9595960b21b602082015291505b5060400190565b60208082528101610c4c816156d1565b600061573782846146cf565b50602001919050565b60008161574f5761574f614b0a565b506000190190565b6002811061155457611554614f54565b806148b581615757565b6000610c4c82615767565b61431381615771565b60608101615793828661430a565b6157a060208301856146cf565b613ee2604083018461577c565b61010081016157bc828b61433d565b6157c9602083018a615233565b6157d660608301896146cf565b6157e3608083018861430a565b6157f060a08301876146cf565b81810360c083015261580381858761537e565b90506153f660e08301846146cf565b60408101615411828561430a565b603681526000602082017f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f81527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b60208201529150615714565b60208082528101610c4c81615820565b60a08101615891828861433d565b61589e60208301876146cf565b6158ab60408301866146cf565b6158b860608301856146cf565b6158c560808301846146cf565b9695505050505050565b60a081016158dd828861433d565b6158ea60208301876146cf565b6158f760408301866146cf565b61590460608301856146cf565b6158c56080830184614f8f565b81835260006020840193506001600160fb1b0383111561593357615933600080fd5b602083029250615944838584614907565b50500190565b60808101615958828861433d565b61596560208301876146cf565b61597260408301866146cf565b818103606083015261419e818486615911565b600060001982141561599957615999614b0a565b5060010190565b601d81526000602082017f416464726573733a20696e73756666696369656e742062616c616e6365000000815291505b5060200190565b60208082528101610c4c816159a0565b600081610c4c565b603a81526000602082017f416464726573733a20756e61626c6520746f2073656e642076616c75652c207281527f6563697069656e74206d6179206861766520726576657274656400000000000060208201529150615714565b60208082528101610c4c816159ef565b6101008101615a68828b61433d565b615a75602083018a61433d565b615a82604083018961430a565b615a8f60608301886146cf565b615a9c60808301876146cf565b615aa960a08301866146cf565b615ab660c08301856146cf565b6153f660e08301846146cf565b6000615acf8383615233565b505060400190565b6000615ae1825190565b80845260209384019383018060005b83811015615b15578151615b048882615ac3565b975060208301925050600101615af0565b509495945050505050565b6003811061155457611554614f54565b806148b581615b20565b6000610c4c82615b30565b61431381615b3a565b80516060830190615b5f84826146cf565b506020820151615b726020850182614f8f565b5060408201516111bb6040850182615b45565b6101608101615b94828d61433d565b615ba1602083018c6146cf565b615bae604083018b6146cf565b8181036060830152615bc181898b615911565b9050615bd060808301886146cf565b615bdd60a08301876146cf565b81810360c0830152615bef8186614fff565b905081810360e0830152615c038185615ad7565b9050615c13610100830184615b4e565b9b9a5050505050505050505050565b6000615c2e83836146cf565b505060200190565b6000615c40825190565b80845260209384019383018060005b83811015615b15578151615c638882615c22565b975060208301925050600101615c4f565b6101808101615c83828d61433d565b615c90602083018c6146cf565b8181036040830152615ca2818b615c36565b9050615cb1606083018a6146cf565b615cbe60808301896146cf565b81810360a0830152615cd08188614fff565b905081810360c0830152615ce48187615ad7565b9050615cf360e0830186615b4e565b615d016101408301856146b9565b615c136101608301846146b9565b600082615d1e57615d1e61563f565b500690565b6000615d2f828b6152eb565b9150615d3b828a61530d565b600282019150615d4b82896152eb565b9150615d57828861530d565b600282019150615d6782876152eb565b9150615d73828661530d565b600282019150615d8382856152eb565b9150615d8f828461541e565b5060010198975050505050505050565b602681526000602082017f416464726573733a20696e73756666696369656e742062616c616e636520666f8152651c8818d85b1b60d21b60208201529150615714565b60208082528101610c4c81615d9f565b6000613d7882846152eb565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000815291506159d0565b60208082528101610c4c81615dfe56fe49736f6c6174696f6e4d6f64655661756c7456315061757361626c650000000049736f6c6174696f6e5661756c7456314173796e63467265657a61626c65000049736f6c6174696f6e4d6f6465546f6b656e5661756c74563100000000000000a264697066735822122023b925f4c5efd921b25d63e111fc62e38dc808ee2fb320a3895f07a6b6f80f2964736f6c6343000809003300000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1000000000000000000000000000000000000000000000000000000000000a4b1