[ { "inputs": [ { "components": [ { "internalType": "uint32", "name": "chainId", "type": "uint32" }, { "internalType": "string", "name": "protocol", "type": "string" }, { "internalType": "uint8", "name": "protocolVersion", "type": "uint8" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "address", "name": "protocolVault", "type": "address" } ], "internalType": "struct IStrategy.StrategyParams", "name": "_strategyParams", "type": "tuple" }, { "internalType": "address", "name": "_maatAddressProvider", "type": "address" }, { "internalType": "address", "name": "_stargateStaking", "type": "address" }, { "internalType": "address", "name": "_multiRewarder", "type": "address" }, { "internalType": "address", "name": "_feeTo", "type": "address" }, { "internalType": "uint256", "name": "_fee", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "target", "type": "address" } ], "name": "AddressEmptyCode", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "AddressInsufficientBalance", "type": "error" }, { "inputs": [], "name": "CallerIsNotTokenVault", "type": "error" }, { "inputs": [], "name": "DepositExceedsLimit", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [], "name": "FailedInnerCall", "type": "error" }, { "inputs": [], "name": "InvalidAssetsInput", "type": "error" }, { "inputs": [], "name": "InvalidFeeInput", "type": "error" }, { "inputs": [], "name": "MathOverflowedMulDiv", "type": "error" }, { "inputs": [], "name": "OnlyIncentivesController", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "OwnableInvalidOwner", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "OwnableUnauthorizedAccount", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" } ], "name": "SafeERC20FailedOperation", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "argument", "type": "string" } ], "name": "ZeroAddress", "type": "error" }, { "inputs": [], "name": "ZeroAssets", "type": "error" }, { "inputs": [], "name": "ZeroFeeToAddress", "type": "error" }, { "inputs": [], "name": "ZeroShares", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "spender", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Approval", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "previousOwner", "type": "address" }, { "indexed": true, "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "OwnershipTransferred", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", "name": "to", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "Transfer", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "sender", "type": "address" }, { "indexed": true, "internalType": "address", "name": "receiver", "type": "address" }, { "indexed": true, "internalType": "address", "name": "owner", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "assets", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "MaatAddressProvider", "outputs": [ { "internalType": "contract IMaatAddressProvider", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MultiRewarder", "outputs": [ { "internalType": "contract IMultiRewarder", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "StargateLpToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "StargatePool", "outputs": [ { "internalType": "contract IStargatePool", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "StargateStaking", "outputs": [ { "internalType": "contract IStargateStaking", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "StrategyInterfaceId", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "StrategyWithIncentivesInterfaceId", "outputs": [ { "internalType": "bytes4", "name": "", "type": "bytes4" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "asset", "outputs": [ { "internalType": "address", "name": "assetTokenAddress", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "compound", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "convertToAssets", "outputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "convertToShares", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "deposit", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "feePrecision", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "feeTo", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getStrategyId", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "chainId", "type": "uint32" }, { "internalType": "string", "name": "protocol", "type": "string" }, { "internalType": "uint8", "name": "protocolVersion", "type": "uint8" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "address", "name": "protocolVault", "type": "address" } ], "internalType": "struct IStrategy.StrategyParams", "name": "_strategyParams", "type": "tuple" } ], "name": "getStrategyName", "outputs": [ { "internalType": "string", "name": "name", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getStrategyParams", "outputs": [ { "components": [ { "internalType": "uint32", "name": "chainId", "type": "uint32" }, { "internalType": "string", "name": "protocol", "type": "string" }, { "internalType": "uint8", "name": "protocolVersion", "type": "uint8" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "address", "name": "protocolVault", "type": "address" } ], "internalType": "struct IStrategy.StrategyParams", "name": "", "type": "tuple" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "components": [ { "internalType": "uint32", "name": "chainId", "type": "uint32" }, { "internalType": "string", "name": "protocol", "type": "string" }, { "internalType": "uint8", "name": "protocolVersion", "type": "uint8" }, { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "address", "name": "protocolVault", "type": "address" } ], "internalType": "struct IStrategy.StrategyParams", "name": "_strategyParams", "type": "tuple" } ], "name": "getStrategySymbol", "outputs": [ { "internalType": "string", "name": "symbol", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "harvest", "outputs": [ { "internalType": "address[]", "name": "rewardTokens", "type": "address[]" }, { "internalType": "uint256[]", "name": "rewards", "type": "uint256[]" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxDeposit", "outputs": [ { "internalType": "uint256", "name": "maxAssets", "type": "uint256" } ], "stateMutability": "pure", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "maxMint", "outputs": [ { "internalType": "uint256", "name": "maxShares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxRedeem", "outputs": [ { "internalType": "uint256", "name": "maxShares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "maxWithdraw", "outputs": [ { "internalType": "uint256", "name": "maxAssets", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "mint", "outputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "pendingRewards", "outputs": [ { "internalType": "address[]", "name": "rewardTokens", "type": "address[]" }, { "internalType": "uint256[]", "name": "rewards", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "performanceFee", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewDeposit", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "previewHarvest", "outputs": [ { "internalType": "address[]", "name": "rewardTokens", "type": "address[]" }, { "internalType": "uint256[]", "name": "rewards", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewMint", "outputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "name": "previewRedeem", "outputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "name": "previewWithdraw", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "redeem", "outputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_feeTo", "type": "address" } ], "name": "setFeeTo", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "fee", "type": "uint256" } ], "name": "setPerformanceFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } ], "name": "supportsInterface", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalAssets", "outputs": [ { "internalType": "uint256", "name": "totalManagedAssets", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalIncentives", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newOwner", "type": "address" } ], "name": "transferOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "assets", "type": "uint256" }, { "internalType": "address", "name": "receiver", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "withdraw", "outputs": [ { "internalType": "uint256", "name": "shares", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" } ]
60e060405234801561001057600080fd5b50604051613d76380380613d7683398101604081905261002f91610732565b8585838380823361003f87610292565b61004888610341565b600361005483826108d3565b50600461006182826108d3565b5061007691506301ffc9a760e01b90506103bd565b6001600160a01b0381166100a557604051631e4fbdf760e01b8152600060048201526024015b60405180910390fd5b6100ae8161043c565b50600880546001600160a01b0319166001600160a01b03929092169190911790556007556100db8161048e565b83516009805463ffffffff191663ffffffff9092169190911781556020850151859190600a9061010b90826108d3565b50604082015160028201805460608086015160ff9094166001600160a81b0319909216919091176101006001600160a01b039485160217909155608093840151600390930180546001600160a01b03191693831693909317909255908601511690526101967f63a50d51855696d5ed562d1b40c0a5151467f4430dbf4daf5ab94aaf5f9e7c696103bd565b50506001600160a01b0390811660a0526080880151600e80549183166001600160a01b03199283168117909155600f8054898516908416179055601080549388169390921692909217905560408051635fcbd28560e01b81529051919250635fcbd2859160048083019260209291908290030181865afa15801561021e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102429190610991565b6001600160a01b031660c05261025e6301ffc9a760e01b6103bd565b6102877f1e68c0eeccc3bd97653622f12cae362a78f5bc4d2d2e15004168e97c5683c87a6103bd565b505050505050610a86565b606081602001516102af836040015160ff166104b660201b60201c565b83606001516001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa1580156102f1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261031991908101906109b3565b60405160200161032b939291906109e7565b6040516020818303038152906040529050919050565b606081606001516001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610385573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103ad91908101906109b3565b60405160200161032b9190610a5c565b6001600160e01b031980821690036104175760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e7465726661636520696400000000604482015260640161009c565b6001600160e01b0319166000908152600560205260409020805460ff19166001179055565b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6302faf0808111156104b357604051636912579560e01b815260040160405180910390fd5b50565b606060006104c383610548565b60010190506000816001600160401b038111156104e2576104e261062b565b6040519080825280601f01601f19166020018201604052801561050c576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a850494508461051657509392505050565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310610591577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef810000000083106105bd576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106105db57662386f26fc10000830492506010015b6305f5e10083106105f3576305f5e100830492506008015b612710831061060757612710830492506004015b60648310610619576064830492506002015b600a8310610625576001015b92915050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156106635761066361062b565b60405290565b60005b8381101561068457818101518382015260200161066c565b50506000910152565b600082601f83011261069e57600080fd5b81516001600160401b038111156106b7576106b761062b565b604051601f8201601f19908116603f011681016001600160401b03811182821017156106e5576106e561062b565b6040528181528382016020018510156106fd57600080fd5b61070e826020830160208701610669565b949350505050565b80516001600160a01b038116811461072d57600080fd5b919050565b60008060008060008060c0878903121561074b57600080fd5b86516001600160401b0381111561076157600080fd5b870160a0818a03121561077357600080fd5b61077b610641565b815163ffffffff8116811461078f57600080fd5b815260208201516001600160401b038111156107aa57600080fd5b6107b68b82850161068d565b602083015250604082015160ff811681146107d057600080fd5b60408201526107e160608301610716565b60608201526107f260808301610716565b60808201529650610807905060208801610716565b945061081560408801610716565b935061082360608801610716565b925061083160808801610716565b9150600060a08801519050809150509295509295509295565b600181811c9082168061085e57607f821691505b60208210810361087e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156108ce57806000526020600020601f840160051c810160208510156108ab5750805b601f840160051c820191505b818110156108cb57600081556001016108b7565b50505b505050565b81516001600160401b038111156108ec576108ec61062b565b610900816108fa845461084a565b84610884565b6020601f821160018114610934576000831561091c5750848201515b600019600385901b1c1916600184901b1784556108cb565b600084815260208120601f198516915b828110156109645787850151825560209485019460019092019101610944565b50848210156109825786840151600019600387901b60f8161c191681555b50505050600190811b01905550565b6000602082840312156109a357600080fd5b6109ac82610716565b9392505050565b6000602082840312156109c557600080fd5b81516001600160401b038111156109db57600080fd5b61070e8482850161068d565b64026a0a0aa160dd1b815260008451610a07816005850160208901610669565b61102b60f11b6005918401918201528451610a29816007840160208901610669565b600581830101915050600160fd1b60028201528351610a4f816003840160208801610669565b0160030195945050505050565b611b5d60f21b815260008251610a79816002850160208701610669565b9190910160020192915050565b60805160a05160c05161325f610b176000396000818161038b0152818161075401528181610deb01528181611310015281816115c2015281816116c701528181611f2501528181611fad015261264e0152600081816106a701528181610c8e01528181610d43015281816112130152611b7b01526000818161043001528181611c9b0152611e13015261325f6000f3fe608060405234801561001057600080fd5b50600436106102d65760003560e01c806373953c4a11610182578063c63d75b6116100e9578063e5ef3bae116100a2578063ef8b30f71161007c578063ef8b30f7146106f8578063f2fde38b1461070b578063f46901ed1461071e578063fa6e9d411461073157600080fd5b8063e5ef3bae146106a2578063e8d8f47d146106c9578063eded3fda146106f057600080fd5b8063c63d75b6146105dd578063c6e6f592146105f0578063ce96cb7714610603578063d5b252bd14610616578063d905777e14610656578063dd62ed3e1461066957600080fd5b8063a9059cbb1161013b578063a9059cbb14610576578063aa5f7e2614610589578063b3d7f6b91461059c578063b454c0c7146105af578063b460af94146105b7578063ba087652146105ca57600080fd5b806373953c4a1461051b578063877887821461052e5780638ac508a0146105375780638da5cb5b1461054a57806394bf804d1461055b57806395d89b411461056e57600080fd5b8063313ce567116102415780634641257d116101fa5780636e553f65116101d45780636e553f65146104c257806370897b23146104d557806370a08231146104ea578063715018a61461051357600080fd5b80634641257d146104865780634cdad5061461049c578063659d717c146104af57600080fd5b8063313ce5671461041457806335ff1e281461042357806338d52e0f1461042e578063402d267d1461045457806342fda9c7146104695780634424d6081461047157600080fd5b806307a2d13a1161029357806307a2d13a146103ad578063095ea7b3146103c05780630a28a477146103d357806311768e47146103e657806318160ddd146103f957806323b872dd1461040157600080fd5b8063017e7e58146102db57806301e1d1141461030b57806301ffc9a71461032157806303401b131461035e57806306fdde031461037e57806307958f0414610386575b600080fd5b6008546102ee906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61031361073a565b604051908152602001610302565b61034e61032f3660046128b2565b6001600160e01b03191660009081526005602052604090205460ff1690565b6040519015158152602001610302565b61037161036c3660046129a7565b6107d4565b6040516103029190612af8565b610371610866565b6102ee7f000000000000000000000000000000000000000000000000000000000000000081565b6103136103bb366004612b0b565b6108f8565b61034e6103ce366004612b24565b610939565b6103136103e1366004612b0b565b610953565b6103716103f43660046129a7565b6109d7565b600254610313565b61034e61040f366004612b50565b610a6a565b60405160128152602001610302565b6103136305f5e10081565b7f00000000000000000000000000000000000000000000000000000000000000006102ee565b610313610462366004612b91565b5060001990565b610313610a8e565b610479610b7b565b6040516103029190612bae565b61048e610c89565b604051610302929190612c17565b6103136104aa366004612b0b565b6110cd565b600e546102ee906001600160a01b031681565b6103136104d0366004612ca2565b611152565b6104e86104e3366004612b0b565b6111b2565b005b6103136104f8366004612b91565b6001600160a01b031660009081526020819052604090205490565b6104e86111c8565b6010546102ee906001600160a01b031681565b61031360075481565b600f546102ee906001600160a01b031681565b6006546001600160a01b03166102ee565b610313610569366004612ca2565b6111dc565b6103716111f4565b61034e610584366004612b24565b611203565b6104e8610597366004612b0b565b611211565b6103136105aa366004612b0b565b6112eb565b61048e6112f6565b6103136105c5366004612cd2565b6114a4565b6103136105d8366004612cd2565b6114bd565b6103136105eb366004612b91565b6114d6565b6103136105fe366004612b0b565b6114df565b610313610611366004612b91565b611536565b61063d7f1e68c0eeccc3bd97653622f12cae362a78f5bc4d2d2e15004168e97c5683c87a81565b6040516001600160e01b03199091168152602001610302565b610313610664366004612b91565b611696565b610313610677366004612d14565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6102ee7f000000000000000000000000000000000000000000000000000000000000000081565b61063d7f63a50d51855696d5ed562d1b40c0a5151467f4430dbf4daf5ab94aaf5f9e7c6981565b61048e6116ad565b610313610706366004612b0b565b611751565b6104e8610719366004612b91565b61175c565b6104e861072c366004612b91565b61179a565b61031360115481565b600f54604051633de222bb60e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152306024830152600092169063f7888aec90604401602060405180830381865afa1580156107ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cf9190612d42565b905090565b606081606001516001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610818573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526108409190810190612d5b565b6040516020016108509190612dc8565b6040516020818303038152906040529050919050565b60606003805461087590612df2565b80601f01602080910402602001604051908101604052809291908181526020018280546108a190612df2565b80156108ee5780601f106108c3576101008083540402835291602001916108ee565b820191906000526020600020905b8154815290600101906020018083116108d157829003601f168201915b5050505050905090565b60008061090460025490565b905061090f60025490565b60000361091d575090919050565b61093261092861073a565b84908360006117eb565b9392505050565b60003361094781858561183c565b60019150505b92915050565b60008161095f33611536565b10156109ce5760405162461bcd60e51b815260206004820152603360248201527f5b5374617267617465563253747261746567795d3a204e6f7420656e6f7567686044820152722061737365747320746f20776974686472617760681b60648201526084015b60405180910390fd5b61094d826114df565b606081602001516109ee836040015160ff1661184e565b83606001516001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610a30573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610a589190810190612d5b565b60405160200161085093929190612e2c565b600033610a788582856118e0565b610a8385858561195e565b506001949350505050565b6040805160a081019091526009805463ffffffff168252600a80546000936107cf9390929091602084019190610ac390612df2565b80601f0160208091040260200160405190810160405280929190818152602001828054610aef90612df2565b8015610b3c5780601f10610b1157610100808354040283529160200191610b3c565b820191906000526020600020905b815481529060010190602001808311610b1f57829003601f168201915b5050509183525050600282015460ff811660208301526001600160a01b03610100909104811660408301526003909201549091166060909101526119bd565b6040805160a081018252600080825260606020830181905292820181905291810182905260808101919091526040805160a081019091526009805463ffffffff168252600a8054602084019190610bd190612df2565b80601f0160208091040260200160405190810160405280929190818152602001828054610bfd90612df2565b8015610c4a5780601f10610c1f57610100808354040283529160200191610c4a565b820191906000526020600020905b815481529060010190602001808311610c2d57829003601f168201915b5050509183525050600282015460ff811660208301526001600160a01b0361010090910481166040830152600390920154909116606090910152919050565b6060807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635b9fe37f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610cea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0e9190612ea1565b6001600160a01b0316336001600160a01b031614610d3f5760405163df28b3f760e01b815260040160405180910390fd5b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635b9fe37f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc39190612ea1565b60408051600180825281830190925291925060009190602080830190803683370190505090507f000000000000000000000000000000000000000000000000000000000000000081600081518110610e1d57610e1d612ebe565b6001600160a01b039283166020918202929092010152600f5460405163318d9e5d60e01b815291169063318d9e5d90610e5a908490600401612ed4565b600060405180830381600087803b158015610e7457600080fd5b505af1158015610e88573d6000803e3d6000fd5b50505050601060009054906101000a90046001600160a01b03166001600160a01b031663c2b18aa06040518163ffffffff1660e01b8152600401600060405180830381865afa158015610edf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f079190810190612fb4565b935083516001600160401b03811115610f2257610f226128dc565b604051908082528060200260200182016040528015610f4b578160200160208202803683370190505b5084519093506000805b828110156110b4576000878281518110610f7157610f71612ebe565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015610fc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe59190612d42565b905080878381518110610ffa57610ffa612ebe565b602090810291909101015280156110ab578261101581613006565b93505087828151811061102a5761102a612ebe565b602090810291909101015160405163a9059cbb60e01b81526001600160a01b038881166004830152602482018490529091169063a9059cbb906044016020604051808303816000875af1158015611085573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a9919061301f565b505b50600101610f55565b506110c0868683611a05565b9097909650945050505050565b60006110d8826108f8565b6110e133611536565b10156111495760405162461bcd60e51b815260206004820152603160248201527f5b5374617267617465563253747261746567795d3a204e6f7420656e6f7567686044820152702061737365747320746f2072656465656d60781b60648201526084016109c5565b61094d826108f8565b60008260000361117557604051630cb65c7760e21b815260040160405180910390fd5b6001600160a01b03821661119c5760405163eac0d38960e01b81526004016109c590613041565b6111a5836114df565b905061094d828483611b66565b6111ba611d46565b6111c381611d73565b600755565b6111d0611d46565b6111da6000611d98565b565b60006111e7836108f8565b905061094d828285611b66565b60606004805461087590612df2565b60003361094781858561195e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316635b9fe37f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561126f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112939190612ea1565b6001600160a01b0316336001600160a01b0316146112c45760405163df28b3f760e01b815260040160405180910390fd5b6112d16000826000611dea565b80601160008282546112e39190613063565b909155505050565b600061094d826108f8565b60105460405163779bcb9b60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152306024830152606092839291169063779bcb9b90604401600060405180830381865afa15801561136a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113929190810190613076565b90925090506000805b835181101561148e578381815181106113b6576113b6612ebe565b60209081029190910101516040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611406573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061142a9190612d42565b83828151811061143c5761143c612ebe565b602002602001018181516114509190613063565b905250825160009084908390811061146a5761146a612ebe565b60200260200101511115611486578161148281613006565b9250505b60010161139b565b5061149a838383611a05565b9094909350915050565b60006114af846114df565b90506109328383868461201f565b60006114c8846108f8565b90506109328383838761201f565b600061094d6000195b6000806114ea61073a565b9050801580156114fa5750600254155b15611506575090919050565b8015801561151c5750600061151a60025490565b115b1561152a5750600092915050565b61093261092860025490565b600e5460405163121099e960e21b81526000600482018190529182916001600160a01b039091169063484267a490602401602060405180830381865afa158015611584573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115a89190612d42565b600f54604051633de222bb60e21b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660048301523060248301529293506000929091169063f7888aec90604401602060405180830381865afa15801561161e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116429190612d42565b905060008282116116535781611655565b825b9050600061167b6103bb876001600160a01b031660009081526020819052604090205490565b905081811161168a578061168c565b815b9695505050505050565b6000806116a283611536565b9050610932816114df565b60105460405163779bcb9b60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152306024830152606092839291169063779bcb9b90604401600060405180830381865afa158015611721573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117499190810190613076565b915091509091565b600061094d826114df565b611764611d46565b6001600160a01b03811661178e57604051631e4fbdf760e01b8152600060048201526024016109c5565b61179781611d98565b50565b6117a2611d46565b6001600160a01b0381166117c957604051630fcf818560e01b815260040160405180910390fd5b600880546001600160a01b0319166001600160a01b0392909216919091179055565b6000806117f9868686612164565b905061180483612228565b801561182057506000848061181b5761181b613138565b868809115b1561183357611830600182613063565b90505b95945050505050565b6118498383836001612255565b505050565b6060600061185b8361232a565b60010190506000816001600160401b0381111561187a5761187a6128dc565b6040519080825280601f01601f1916602001820160405280156118a4576020820181803683370190505b5090508181016020015b600019016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846118ae57509392505050565b6001600160a01b038381166000908152600160209081526040808320938616835292905220546000198114611958578181101561194957604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016109c5565b61195884848484036000612255565b50505050565b6001600160a01b03831661198857604051634b637e8f60e11b8152600060048201526024016109c5565b6001600160a01b0382166119b25760405163ec442f0560e01b8152600060048201526024016109c5565b611849838383612402565b80516020808301516040808501516060860151608087015192516000966119e896909594910161314e565b604051602081830303815290604052805190602001209050919050565b606080826001600160401b03811115611a2057611a206128dc565b604051908082528060200260200182016040528015611a49578160200160208202803683370190505b509150826001600160401b03811115611a6457611a646128dc565b604051908082528060200260200182016040528015611a8d578160200160208202803683370190505b50855160009450909150835b81811015611b5c576000868281518110611ab557611ab5612ebe565b60200260200101511115611b5457868181518110611ad557611ad5612ebe565b6020026020010151848681518110611aef57611aef612ebe565b60200260200101906001600160a01b031690816001600160a01b031681525050858181518110611b2157611b21612ebe565b6020026020010151838681518110611b3b57611b3b612ebe565b602090810291909101015284611b5081613006565b9550505b600101611a99565b5050935093915050565b60405163652b9b4160e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063652b9b4190602401602060405180830381865afa158015611bca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bee919061301f565b611c0b57604051632c5f070f60e01b815260040160405180910390fd5b6001600160a01b038316611c325760405163eac0d38960e01b81526004016109c590613041565b81600003611c5357604051630cb65c7760e21b815260040160405180910390fd5b80600003611c7457604051639811e0c760e01b815260040160405180910390fd5b6000600d54611c8161073a565b611c8b9190613197565b905033611cc36001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001682308761252c565b611cce858585611dea565b611cd88184612586565b611ce1826125c0565b611ce96125f1565b846001600160a01b0316816001600160a01b03167fdcbc1c05240f31ff3ad067ef1ee35ce4997762752e3a095284754544f4c709d78686604051611d37929190918252602082015260400190565b60405180910390a35050505050565b6006546001600160a01b031633146111da5760405163118cdaa760e01b81523360048201526024016109c5565b6302faf08081111561179757604051636912579560e01b815260040160405180910390fd5b600680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600e5460405163095ea7b360e01b81526001600160a01b039182166004820152602481018490527f00000000000000000000000000000000000000000000000000000000000000009091169063095ea7b3906044016020604051808303816000875af1158015611e5e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e82919061301f565b50600e546040516311f9fbc960e21b8152306004820152602481018490526000916001600160a01b0316906347e7ef24906044016020604051808303816000875af1158015611ed5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef99190612d42565b600f5460405163095ea7b360e01b81526001600160a01b039182166004820152602481018390529192507f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303816000875af1158015611f6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f92919061301f565b50600f546040516311f9fbc960e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201849052909116906347e7ef2490604401600060405180830381600087803b15801561200157600080fd5b505af1158015612015573d6000803e3d6000fd5b5050505050505050565b6001600160a01b0384166120465760405163eac0d38960e01b81526004016109c590613041565b6001600160a01b0383166120855760405163eac0d38960e01b815260206004820152600560248201526437bbb732b960d91b60448201526064016109c5565b816000036120a657604051630cb65c7760e21b815260040160405180910390fd5b806000036120c757604051639811e0c760e01b815260040160405180910390fd5b6000600d546120d461073a565b6120de9190613197565b90506120e9836114df565b91506120f533836125fe565b61210185858585612634565b61210a816125c0565b6121126125f1565b60408051848152602081018490526001600160a01b03808716929088169133917ffbde797d201c681b91056529119e0b02407c7bb96a4a2c75c01fc9667232c8db910160405180910390a45050505050565b600083830281600019858709828110838203039150508060000361219b5783828161219157612191613138565b0492505050610932565b8084116121bb5760405163227bc15360e01b815260040160405180910390fd5b6000848688096000868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b6000600282600381111561223e5761223e6131aa565b61224891906131c0565b60ff166001149050919050565b6001600160a01b03841661227f5760405163e602df0560e01b8152600060048201526024016109c5565b6001600160a01b0383166122a957604051634a1406b160e11b8152600060048201526024016109c5565b6001600160a01b038085166000908152600160209081526040808320938716835292905220829055801561195857826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161231c91815260200190565b60405180910390a350505050565b60008072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b83106123695772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612395576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc1000083106123b357662386f26fc10000830492506010015b6305f5e10083106123cb576305f5e100830492506008015b61271083106123df57612710830492506004015b606483106123f1576064830492506002015b600a831061094d5760010192915050565b6001600160a01b03831661242d5780600260008282546124229190613063565b9091555061249f9050565b6001600160a01b038316600090815260208190526040902054818110156124805760405163391434e360e21b81526001600160a01b038516600482015260248101829052604481018390526064016109c5565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b0382166124bb576002805482900390556124da565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161251f91815260200190565b60405180910390a3505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052611958908590612738565b6001600160a01b0382166125b05760405163ec442f0560e01b8152600060048201526024016109c5565b6125bc60008383612402565b5050565b60006125cb8261279b565b905060006125d8826114df565b600854909150611849906001600160a01b031682612586565b6125f961073a565b600d55565b6001600160a01b03821661262857604051634b637e8f60e11b8152600060048201526024016109c5565b6125bc82600083612402565b600f5460405163f3fef3a360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018590529091169063f3fef3a390604401600060405180830381600087803b1580156126a257600080fd5b505af11580156126b6573d6000803e3d6000fd5b5050600e54604051633def417960e11b8152600481018690526001600160a01b0388811660248301529091169250637bde82f291506044016020604051808303816000875af115801561270d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127319190612d42565b5050505050565b600061274d6001600160a01b038416836127ba565b90508051600014158015612772575080806020019051810190612770919061301f565b155b1561184957604051635274afe760e01b81526001600160a01b03841660048201526024016109c5565b60006305f5e100600754836127b091906131e2565b61094d91906131f9565b60606109328383600084600080856001600160a01b031684866040516127e0919061320d565b60006040518083038185875af1925050503d806000811461281d576040519150601f19603f3d011682016040523d82523d6000602084013e612822565b606091505b509150915061168c8683836060826128425761283d82612889565b610932565b815115801561285957506001600160a01b0384163b155b1561288257604051639996b31560e01b81526001600160a01b03851660048201526024016109c5565b5080610932565b8051156128995780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6000602082840312156128c457600080fd5b81356001600160e01b03198116811461093257600080fd5b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b0381118282101715612914576129146128dc565b60405290565b604051601f8201601f191681016001600160401b0381118282101715612942576129426128dc565b604052919050565b60006001600160401b03821115612963576129636128dc565b50601f01601f191660200190565b803560ff8116811461298257600080fd5b919050565b6001600160a01b038116811461179757600080fd5b803561298281612987565b6000602082840312156129b957600080fd5b81356001600160401b038111156129cf57600080fd5b820160a081850312156129e157600080fd5b6129e96128f2565b813563ffffffff811681146129fd57600080fd5b815260208201356001600160401b03811115612a1857600080fd5b8201601f81018613612a2957600080fd5b8035612a3c612a378261294a565b61291a565b818152876020838501011115612a5157600080fd5b81602084016020830137600060208383010152806020850152505050612a7960408301612971565b6040820152612a8a6060830161299c565b6060820152612a9b6080830161299c565b6080820152949350505050565b60005b83811015612ac3578181015183820152602001612aab565b50506000910152565b60008151808452612ae4816020860160208601612aa8565b601f01601f19169290920160200192915050565b6020815260006109326020830184612acc565b600060208284031215612b1d57600080fd5b5035919050565b60008060408385031215612b3757600080fd5b8235612b4281612987565b946020939093013593505050565b600080600060608486031215612b6557600080fd5b8335612b7081612987565b92506020840135612b8081612987565b929592945050506040919091013590565b600060208284031215612ba357600080fd5b813561093281612987565b6020815263ffffffff82511660208201526000602083015160a06040840152612bda60c0840182612acc565b905060ff604085015116606084015260018060a01b03606085015116608084015260018060a01b0360808501511660a08401528091505092915050565b6040808252835190820181905260009060208501906060840190835b81811015612c5a5783516001600160a01b0316835260209384019390920191600101612c33565b50508381036020808601919091528551808352918101925085019060005b81811015612c96578251845260209384019390920191600101612c78565b50919695505050505050565b60008060408385031215612cb557600080fd5b823591506020830135612cc781612987565b809150509250929050565b600080600060608486031215612ce757600080fd5b833592506020840135612cf981612987565b91506040840135612d0981612987565b809150509250925092565b60008060408385031215612d2757600080fd5b8235612d3281612987565b91506020830135612cc781612987565b600060208284031215612d5457600080fd5b5051919050565b600060208284031215612d6d57600080fd5b81516001600160401b03811115612d8357600080fd5b8201601f81018413612d9457600080fd5b8051612da2612a378261294a565b818152856020838501011115612db757600080fd5b611833826020830160208601612aa8565b611b5d60f21b815260008251612de5816002850160208701612aa8565b9190910160020192915050565b600181811c90821680612e0657607f821691505b602082108103612e2657634e487b7160e01b600052602260045260246000fd5b50919050565b64026a0a0aa160dd1b815260008451612e4c816005850160208901612aa8565b61102b60f11b6005918401918201528451612e6e816007840160208901612aa8565b600581830101915050600160fd1b60028201528351612e94816003840160208801612aa8565b0160030195945050505050565b600060208284031215612eb357600080fd5b815161093281612987565b634e487b7160e01b600052603260045260246000fd5b602080825282518282018190526000918401906040840190835b81811015612f155783516001600160a01b0316835260209384019390920191600101612eee565b509095945050505050565b60006001600160401b03821115612f3957612f396128dc565b5060051b60200190565b600082601f830112612f5457600080fd5b8151612f62612a3782612f20565b8082825260208201915060208360051b860101925085831115612f8457600080fd5b602085015b83811015612faa578051612f9c81612987565b835260209283019201612f89565b5095945050505050565b600060208284031215612fc657600080fd5b81516001600160401b03811115612fdc57600080fd5b612fe884828501612f43565b949350505050565b634e487b7160e01b600052601160045260246000fd5b60006001820161301857613018612ff0565b5060010190565b60006020828403121561303157600080fd5b8151801515811461093257600080fd5b6020808252600890820152673932b1b2b4bb32b960c11b604082015260600190565b8082018082111561094d5761094d612ff0565b6000806040838503121561308957600080fd5b82516001600160401b0381111561309f57600080fd5b6130ab85828601612f43565b92505060208301516001600160401b038111156130c757600080fd5b8301601f810185136130d857600080fd5b80516130e6612a3782612f20565b8082825260208201915060208360051b85010192508783111561310857600080fd5b6020840193505b8284101561312a57835182526020938401939091019061310f565b809450505050509250929050565b634e487b7160e01b600052601260045260246000fd5b63ffffffff8616815260a06020820152600061316d60a0830187612acc565b60ff959095166040830152506001600160a01b039283166060820152911660809091015292915050565b8181038181111561094d5761094d612ff0565b634e487b7160e01b600052602160045260246000fd5b600060ff8316806131d3576131d3613138565b8060ff84160691505092915050565b808202811582820484141761094d5761094d612ff0565b60008261320857613208613138565b500490565b6000825161321f818460208701612aa8565b919091019291505056fea26469706673582212201cea6efa3420715a87d7e016b801f1666c00120cb5113443e8c4c62603bd609964736f6c634300081a003300000000000000000000000000000000000000000000000000000000000000c00000000000000000000000006ca228aadd078fcf54254f90fa15c85bcff761dd00000000000000000000000002dc1042e623a8677b002981164ccc05d25d486a0000000000000000000000000184857631ddb3e9e230bca303f0ab1e516fc0c80000000000000000000000007bf9b9166509164282188dd7d812e2b1a16b2dd90000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000000000000000000000a00000000000000000000000000000000000000000000000000000000000000002000000000000000000000000201eba5cc46d216ce6dc03f6a759e8e766e956ae000000000000000000000000b715b85682b731db9d5063187c450095c91c57fc00000000000000000000000000000000000000000000000000000000000000085374617267617465000000000000000000000000000000000000000000000000