[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "address", "name": "_depositToken", "type": "address" }, { "internalType": "address", "name": "_rewardToken", "type": "address" }, { "internalType": "address", "name": "_poolRewardToken", "type": "address" }, { "internalType": "address", "name": "_swapPairToken", "type": "address" }, { "components": [ { "internalType": "address", "name": "reward", "type": "address" }, { "internalType": "address", "name": "swapPair", "type": "address" } ], "internalType": "struct MasterChefVariableRewardsStrategy.ExtraReward[]", "name": "_extraRewards", "type": "tuple[]" }, { "internalType": "address", "name": "_stakingContract", "type": "address" }, { "internalType": "address", "name": "_timelock", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "minTokensToReinvest", "type": "uint256" }, { "internalType": "uint256", "name": "adminFeeBips", "type": "uint256" }, { "internalType": "uint256", "name": "devFeeBips", "type": "uint256" }, { "internalType": "uint256", "name": "reinvestRewardBips", "type": "uint256" } ], "internalType": "struct MasterChefVariableRewardsStrategy.StrategySettings", "name": "_strategySettings", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "AllowDepositor", "type": "event" }, { "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": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Deposit", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "bool", "name": "newValue", "type": "bool" } ], "name": "DepositsEnabled", "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": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Recovered", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "newTotalDeposits", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newTotalSupply", "type": "uint256" } ], "name": "Reinvest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" } ], "name": "RemoveDepositor", "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": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateAdminFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "oldValue", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newValue", "type": "address" } ], "name": "UpdateDevAddr", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateDevFee", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateMaxTokensToDepositWithoutReinvest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateMinTokensToReinvest", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "uint256", "name": "oldValue", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "UpdateReinvestReward", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "account", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "Withdraw", "type": "event" }, { "inputs": [], "name": "ADMIN_FEE_BIPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEPOSITS_ENABLED", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEV_FEE_BIPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MAX_TOKENS_TO_DEPOSIT_WITHOUT_REINVEST", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "MIN_TOKENS_TO_REINVEST", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PERMIT_TYPEHASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PID", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "REINVEST_REWARD_BIPS", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "VERSION_HASH", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_rewardToken", "type": "address" }, { "internalType": "address", "name": "_swapPair", "type": "address" } ], "name": "addReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "depositor", "type": "address" } ], "name": "allowDepositor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "allowedDepositors", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "approve", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "balanceOf", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "checkReward", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "deposit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "depositFor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "depositToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "depositWithPermit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "devAddr", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "estimateDeployedBalance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "estimateReinvestReward", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "getDepositTokensForShares", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getDomainSeparator", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "getSharesForDepositTokens", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "numberOfAllowedDepositors", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "owner", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" }, { "internalType": "uint256", "name": "deadline", "type": "uint256" }, { "internalType": "uint8", "name": "v", "type": "uint8" }, { "internalType": "bytes32", "name": "r", "type": "bytes32" }, { "internalType": "bytes32", "name": "s", "type": "bytes32" } ], "name": "permit", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "recoverAVAX", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "tokenAddress", "type": "address" }, { "internalType": "uint256", "name": "tokenAmount", "type": "uint256" } ], "name": "recoverERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "reinvest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "depositor", "type": "address" } ], "name": "removeDepositor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "rewardToken", "type": "address" } ], "name": "removeReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "renounceOwnership", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "minReturnAmountAccepted", "type": "uint256" }, { "internalType": "bool", "name": "disableDeposits", "type": "bool" } ], "name": "rescueDeployedFunds", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "revokeAllowance", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rewardCount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "", "type": "address" } ], "name": "rewardSwapPairs", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "rewardToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "setAllowances", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "stakingContract", "outputs": [ { "internalType": "contract IStableJoeStaking", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalDeposits", "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": "dst", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "src", "type": "address" }, { "internalType": "address", "name": "dst", "type": "address" }, { "internalType": "uint256", "name": "amount", "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": "newValue", "type": "uint256" } ], "name": "updateAdminFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "bool", "name": "newValue", "type": "bool" } ], "name": "updateDepositsEnabled", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "newValue", "type": "address" } ], "name": "updateDevAddr", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateDevFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateMaxTokensToDepositWithoutReinvest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateMinTokensToReinvest", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "newValue", "type": "uint256" } ], "name": "updateReinvestReward", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "withdraw", "outputs": [], "stateMutability": "nonpayable", "type": "function" } ]
60e0604052600960a0819052685969656c642059616b60b81b60c09081526200002c916000919062000d18565b506040805180820190915260038082526216549560ea1b6020909201918252620000599160019162000d18565b5060016014553480156200006c57600080fd5b50604051620059e8380380620059e88339810160408190526200008f9162000f38565b88888888888888886000898989898989898989898981620000af620002e7565b600680546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620059c8833981519152908290a3508951620001019060009060208d019062000d18565b50600980546001600160a01b03808c166001600160a01b031992831617909255600a80548b84169083161790556080849052600b80548216732d580f9cf2fb2d09bc411532988f2afda4e7beff1790556012805487841690831617905588821660009081526013602052604081208054938a16939092169290921790555b8551811015620001d457620001cb8682815181106200019a57fe5b602002602001015160000151878381518110620001b357fe5b602002602001015160200151620002eb60201b60201c565b6001016200017f565b508051620001e290620005dc565b6020810151620001f29062000664565b6040810151620002029062000732565b60608101516200021290620007ec565b6200021e6001620008a6565b62000229836200094e565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef2346000806040516200025d9291906200109d565b60405180910390a150505050505050505050620002808662000a0860201b60201c565b5050505050505050505085601760006101000a8154816001600160a01b0302191690836001600160a01b0316021790555082601660006101000a8154816001600160a01b0302191690836001600160a01b0316021790555050505050505050505062001230565b3390565b600a546001600160a01b038381169116146200058957806001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033b57600080fd5b505afa15801562000350573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000376919062000f1b565b6001600160a01b0316826001600160a01b031614156200044b57600a546040805163d21220a760e01b815290516001600160a01b039283169284169163d21220a7916004808301926020929190829003018186803b158015620003d857600080fd5b505afa158015620003ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000413919062000f1b565b6001600160a01b031614620004455760405162461bcd60e51b81526004016200043c9062001128565b60405180910390fd5b62000589565b600a5460408051630dfe168160e01b815290516001600160a01b0392831692841691630dfe1681916004808301926020929190829003018186803b1580156200049357600080fd5b505afa158015620004a8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ce919062000f1b565b6001600160a01b03161480156200056a5750816001600160a01b0316816001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156200052457600080fd5b505afa15801562000539573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200055f919062000f1b565b6001600160a01b0316145b620005895760405162461bcd60e51b81526004016200043c9062001128565b6001600160a01b03828116600090815260136020908152604090912080546001600160a01b03191692841692909217909155601454620005d59160019062000a75811b62001c4217901c565b6014555050565b620005e6620002e7565b6001600160a01b0316620005f962000aa4565b6001600160a01b031614620006225760405162461bcd60e51b81526004016200043c90620011d7565b7f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef849901100600c5482604051620006579291906200109d565b60405180910390a1600c55565b6200066e620002e7565b6001600160a01b03166200068162000aa4565b6001600160a01b031614620006aa5760405162461bcd60e51b81526004016200043c90620011d7565b612710620006e4600f54620006d06011548562000a7560201b62001c421790919060201c565b62000a7560201b62001c421790919060201c565b1115620006f057600080fd5b7f3cc372f330f95ac9540626dc8a25f5bf21ba607215a5d58304cb804d446f104a60105482604051620007259291906200109d565b60405180910390a1601055565b6200073c620002e7565b6001600160a01b03166200074f62000aa4565b6001600160a01b031614620007785760405162461bcd60e51b81526004016200043c90620011d7565b6127106200079e600f54620006d06010548562000a7560201b62001c421790919060201c565b1115620007aa57600080fd5b7f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d65172613160115482604051620007df9291906200109d565b60405180910390a1601155565b620007f6620002e7565b6001600160a01b03166200080962000aa4565b6001600160a01b031614620008325760405162461bcd60e51b81526004016200043c90620011d7565b61271062000858601154620006d06010548562000a7560201b62001c421790919060201c565b11156200086457600080fd5b7fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f2600f5482604051620008999291906200109d565b60405180910390a1600f55565b620008b0620002e7565b6001600160a01b0316620008c362000aa4565b6001600160a01b031614620008ec5760405162461bcd60e51b81526004016200043c90620011d7565b600e5460ff16151581151514156200090357600080fd5b600e805460ff19168215151790556040517f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e85906200094390839062001092565b60405180910390a150565b62000958620002e7565b6001600160a01b03166200096b62000aa4565b6001600160a01b031614620009945760405162461bcd60e51b81526004016200043c90620011d7565b6001600160a01b038116620009bd5760405162461bcd60e51b81526004016200043c90620010ab565b6006546040516001600160a01b03808416921690600080516020620059c883398151915290600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b600954600a5462000a349183916001600160a01b03918216911662000ab3602090811b62001c6e17901c565b62000a535760405162461bcd60e51b81526004016200043c9062001185565b601580546001600160a01b0319166001600160a01b0392909216919091179055565b60008282018381101562000a9d5760405162461bcd60e51b81526004016200043c90620010f1565b9392505050565b6006546001600160a01b031690565b6000836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801562000aef57600080fd5b505afa15801562000b04573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b2a919062000f1b565b6001600160a01b0316836001600160a01b0316148062000bcf5750836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801562000b7f57600080fd5b505afa15801562000b94573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000bba919062000f1b565b6001600160a01b0316836001600160a01b0316145b801562000cf15750836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801562000c1157600080fd5b505afa15801562000c26573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c4c919062000f1b565b6001600160a01b0316826001600160a01b0316148062000cf15750836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801562000ca157600080fd5b505afa15801562000cb6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cdc919062000f1b565b6001600160a01b0316826001600160a01b0316145b801562000d105750816001600160a01b0316836001600160a01b031614155b949350505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000d5b57805160ff191683800117855562000d8b565b8280016001018555821562000d8b579182015b8281111562000d8b57825182559160200191906001019062000d6e565b5062000d9992915062000d9d565b5090565b5b8082111562000d99576000815560010162000d9e565b80516001600160a01b038116811462000dcc57600080fd5b919050565b600082601f83011262000de2578081fd5b81516001600160401b0381111562000df657fe5b602062000e0781828402016200120c565b828152925080830184820160408085028701840188101562000e2857600080fd5b60005b8581101562000e535762000e40898462000e5f565b8452928401929181019160010162000e2b565b50505050505092915050565b60006040828403121562000e71578081fd5b604080519081016001600160401b038111828210171562000e8e57fe5b60405290508062000e9f8362000db4565b815262000eaf6020840162000db4565b60208201525092915050565b60006080828403121562000ecd578081fd5b604051608081016001600160401b038111828210171562000eea57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201525092915050565b60006020828403121562000f2d578081fd5b62000a9d8262000db4565b60008060008060008060008060006101808a8c03121562000f57578485fd5b89516001600160401b038082111562000f6e578687fd5b818c0191508c601f83011262000f82578687fd5b81518181111562000f8f57fe5b602062000fa5601f8301601f191682016200120c565b8281528f8284870101111562000fb957898afd5b895b8381101562000fd857858101830151828201840152820162000fbb565b8381111562000fe9578a8385840101525b509c5062000ff98e820162000db4565b9b5050506200100b60408d0162000db4565b98506200101b60608d0162000db4565b97506200102b60808d0162000db4565b965060a08c015191508082111562001041578586fd5b50620010508c828d0162000dd1565b9450506200106160c08b0162000db4565b92506200107160e08b0162000db4565b9150620010838b6101008c0162000ebb565b90509295985092959850929598565b901515815260200190565b918252602082015260400190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252603a908201527f537761702070616972207377617050616972506f6f6c52657761726420646f6560408201527f73206e6f7420636f6e7461696e2072657761726420746f6b656e000000000000606082015260800190565b60208082526032908201527f7377617020746f6b656e20646f6573206e6f74206d61746368206465706f73696040820152713a1030b732103932bbb0b932103a37b5b2b760711b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6040518181016001600160401b03811182821017156200122857fe5b604052919050565b60805161475062001278600039806107e952806109985280610d935280610f3a52806115dc52806121e3528061249a52806129ba5280612d12528061302652506147506000f3fe608060405234801561001057600080fd5b50600436106103a45760003560e01c80638b73e606116101e9578063c4b24a461161010f578063dd8ce4d6116100ad578063ee99205c1161007c578063ee99205c146106ff578063f2fde38b14610707578063f7c618c11461071a578063fdb5a03e14610722576103a4565b8063dd8ce4d6146106be578063e21ac825146106d1578063eab89a5a146106e4578063ed24911d146106f7576103a4565b8063d505accf116100e9578063d505accf14610688578063da09c72c1461069b578063dbd9a4d4146106a3578063dd62ed3e146106ab576103a4565b8063c4b24a4614610665578063c89039c51461066d578063cff1b6ef14610675576103a4565b8063a5534e7111610187578063b52a321f11610156578063b52a321f1461063a578063b6b55f2514610642578063b9e57b8014610655578063bd079f551461065d576103a4565b8063a5534e71146105ee578063a8ae2b7c14610601578063a9059cbb14610614578063ac0d31ff14610627576103a4565b806395d89b41116101c357806395d89b41146105b857806399729ec1146105c05780639e4e7318146105d3578063a4d5e67c146105db576103a4565b80638b73e6061461057d5780638da5cb5b146105905780639291d563146105a5576103a4565b80634bebd1e7116102ce578063789139bc1161026c5780637ecebe001161023b5780637ecebe001461053c578063818372301461054f5780638980f11f146105625780638aff733d14610575576103a4565b8063789139bc1461051157806379085425146105195780637ae26773146105215780637d88209714610534576103a4565b80635ea682ea116102a85780635ea682ea146104e65780635eaec0e4146104ee57806370a08231146104f6578063715018a614610509576103a4565b80634bebd1e7146104ad5780634e77ace5146104c05780634ebb7916146104d3576103a4565b80632e1a7d4d116103465780633bdc6e72116103155780633bdc6e721461046c57806340b47e1a14610474578063483c2ef0146104875780634a970be71461049a576103a4565b80632e1a7d4d146104275780632f4f21e21461043c57806330adf81f1461044f578063313ce56714610457576103a4565b80630f23475d116103825780630f23475d146103fc57806318160ddd1461040457806320606b701461040c57806323b872dd14610414576103a4565b806306fdde03146103a957806307677111146103c7578063095ea7b3146103dc575b600080fd5b6103b161072a565b6040516103be9190613f1f565b60405180910390f35b6103cf6107b8565b6040516103be9190613e98565b6103ef6103ea366004613b82565b6107be565b6040516103be9190613e8d565b6103cf6107d5565b6103cf610841565b6103cf610847565b6103ef610422366004613ad5565b61086b565b61043a610435366004613c33565b610952565b005b61043a61044a366004613b82565b610a3f565b6103cf610a4d565b61045f610a71565b6040516103be919061463e565b6103cf610a76565b61043a610482366004613a9d565b610a7c565b6103ef610495366004613a65565b610ab0565b61043a6104a8366004613caa565b610ac5565b61043a6104bb366004613a65565b610b5d565b61043a6104ce366004613bad565b610c41565b61043a6104e1366004613c33565b610cdf565b6103cf610d8b565b6103cf610d91565b6103cf610504366004613a65565b610db5565b61043a610dd4565b6103cf610e5d565b6103cf610e63565b61043a61052f366004613a9d565b610e69565b6103cf610f32565b6103cf61054a366004613a65565b610f64565b61043a61055d366004613c33565b610f76565b61043a610570366004613b82565b610ff5565b6103cf611107565b61043a61058b366004613a65565b61110d565b610598611213565b6040516103be9190613de1565b61043a6105b3366004613a65565b611222565b6103b16112b5565b61043a6105ce366004613c33565b61130f565b6103cf6113bd565b61043a6105e9366004613a65565b6113e1565b6105986105fc366004613a65565b611445565b61043a61060f366004613c33565b611460565b6103ef610622366004613b82565b611508565b61043a610635366004613c63565b611515565b6103ef61171c565b61043a610650366004613c33565b611725565b6103cf611732565b6103cf611773565b6103cf611779565b61059861178b565b61043a610683366004613c33565b61179a565b61043a610696366004613b15565b611842565b6105986118f7565b61043a611906565b6103cf6106b9366004613a9d565b61195d565b6103cf6106cc366004613c33565b611988565b61043a6106df366004613c33565b6119c2565b6103cf6106f2366004613c33565b611a41565b6103cf611a72565b610598611b09565b61043a610715366004613a65565b611b18565b610598611bd9565b61043a611be8565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107b05780601f10610785576101008083540402835291602001916107b0565b820191906000526020600020905b81548152906001019060200180831161079357829003601f168201915b505050505081565b60105481565b60006107cb338484611ebf565b5060015b92915050565b6000806107e0610f32565b9050600061080d7f0000000000000000000000000000000000000000000000000000000000000000611f73565b9050600061082c61081c611f79565b6108268585612014565b9061204e565b90506108388382612090565b93505050505b90565b60025481565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b6001600160a01b0383166000818152600360209081526040808320338085529252822054919290919082148015906108a557506000198114155b1561093b5760006108d1856040518060600160405280602f8152602001614697602f91398491906120ce565b6001600160a01b03808916600081815260036020908152604080832094891680845294909152908190208490555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610931908590613e98565b60405180910390a3505b6109468686866120fa565b50600195945050505050565b600061095d82611a41565b9050600081116109885760405162461bcd60e51b815260040161097f9061423c565b60405180910390fd5b610991816121de565b60006109bc7f0000000000000000000000000000000000000000000000000000000000000000611f73565b905060006109cb61081c611f79565b6009549091506109ee906001600160a01b0316336109e98685612090565b612208565b6109f833856122a9565b336001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436484604051610a319190613e98565b60405180910390a250505050565b610a498282612383565b5050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60075481565b600b546001600160a01b03163314610aa65760405162461bcd60e51b815260040161097f906144e7565b610a498282612527565b60086020526000908152604090205460ff1681565b6009546040517fd505accf0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063d505accf90610b1a90339030908a908a908a908a908a90600401613e19565b600060405180830381600087803b158015610b3457600080fd5b505af1158015610b48573d6000803e3d6000fd5b50505050610b563386612383565b5050505050565b610b65612817565b6001600160a01b0316610b76611213565b6001600160a01b031614610b9c5760405162461bcd60e51b815260040161097f9061438a565b6001600160a01b03811660009081526008602052604090205460ff1615610bd55760405162461bcd60e51b815260040161097f90614114565b6001600160a01b0381166000908152600860205260409020805460ff19166001908117909155600754610c0791611c42565b6007556040516001600160a01b038216907fc0a1035c16faf8d1304056d92c00edf028f87e62b8235a938f00af9e3c0312c590600090a250565b610c49612817565b6001600160a01b0316610c5a611213565b6001600160a01b031614610c805760405162461bcd60e51b815260040161097f9061438a565b600e5460ff1615158115151415610c9657600080fd5b600e805460ff19168215151790556040517f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e8590610cd4908390613e8d565b60405180910390a150565b610ce7612817565b6001600160a01b0316610cf8611213565b6001600160a01b031614610d1e5760405162461bcd60e51b815260040161097f9061438a565b60008111610d2b57600080fd5b604051339082156108fc029083906000818181858888f19350505050158015610d58573d6000803e3d6000fd5b507f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28600082604051610cd4929190613e5a565b60115481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6001600160a01b0381166000908152600460205260409020545b919050565b610ddc612817565b6001600160a01b0316610ded611213565b6001600160a01b031614610e135760405162461bcd60e51b815260040161097f9061438a565b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600680546001600160a01b0319169055565b600d5481565b60145481565b610e71612817565b6001600160a01b0316610e82611213565b6001600160a01b031614610ea85760405162461bcd60e51b815260040161097f9061438a565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610ed7908490600090600401613e5a565b602060405180830381600087803b158015610ef157600080fd5b505af1158015610f05573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f299190613bc9565b610a4957600080fd5b600080610f5e7f000000000000000000000000000000000000000000000000000000000000000061281b565b91505090565b60056020526000908152604090205481565b610f7e612817565b6001600160a01b0316610f8f611213565b6001600160a01b031614610fb55760405162461bcd60e51b815260040161097f9061438a565b7f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef849901100600c5482604051610fe89291906145f8565b60405180910390a1600c55565b610ffd612817565b6001600160a01b031661100e611213565b6001600160a01b0316146110345760405162461bcd60e51b815260040161097f9061438a565b6000811161104157600080fd5b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb9061106f9033908590600401613e5a565b602060405180830381600087803b15801561108957600080fd5b505af115801561109d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c19190613bc9565b6110ca57600080fd5b7f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa2882826040516110fb929190613e5a565b60405180910390a15050565b600f5481565b611115612817565b6001600160a01b0316611126611213565b6001600160a01b03161461114c5760405162461bcd60e51b815260040161097f9061438a565b60006007541161116e5760405162461bcd60e51b815260040161097f90613ffd565b6001600160a01b03811660009081526008602052604090205460ff1615156001146111ab5760405162461bcd60e51b815260040161097f90614273565b6001600160a01b0381166000908152600860205260409020805460ff191690556007546111d9906001612090565b6007556040516001600160a01b038216907f0e86f6608b536e5339a25b65ff531f5ea91e1313d056ecd4752b35cbd16137d490600090a250565b6006546001600160a01b031690565b600b546001600160a01b0316331461124c5760405162461bcd60e51b815260040161097f906144e7565b600b546040517fa8e91499ed37682f43cffb045fcc7d379a91e8c9a14e6321877ee34dee564c009161128b916001600160a01b03909116908490613e73565b60405180910390a1600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156107b05780601f10610785576101008083540402835291602001916107b0565b611317612817565b6001600160a01b0316611328611213565b6001600160a01b03161461134e5760405162461bcd60e51b815260040161097f9061438a565b612710611372600f5461136c60105485611c4290919063ffffffff16565b90611c42565b111561137d57600080fd5b7f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d651726131601154826040516113b09291906145f8565b60405180910390a1601155565b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b600b546001600160a01b0316331461140b5760405162461bcd60e51b815260040161097f906144e7565b6001600160a01b038116600090815260136020526040902080546001600160a01b031916905560145461143f906001612090565b60145550565b6013602052600090815260409020546001600160a01b031681565b611468612817565b6001600160a01b0316611479611213565b6001600160a01b03161461149f5760405162461bcd60e51b815260040161097f9061438a565b6127106114bd60115461136c60105485611c4290919063ffffffff16565b11156114c857600080fd5b7fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f2600f54826040516114fb9291906145f8565b60405180910390a1600f55565b60006107cb3384846120fa565b61151d612817565b6001600160a01b031661152e611213565b6001600160a01b0316146115545760405162461bcd60e51b815260040161097f9061438a565b6009546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611585903090600401613de1565b60206040518083038186803b15801561159d57600080fd5b505afa1580156115b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115d59190613c4b565b90506116007f00000000000000000000000000000000000000000000000000000000000000006128bd565b6009546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611631903090600401613de1565b60206040518083038186803b15801561164957600080fd5b505afa15801561165d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116819190613c4b565b90508361168e8284612090565b10156116ac5760405162461bcd60e51b815260040161097f9061414b565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef2346116d5610f32565b6002546040516116e69291906145f8565b60405180910390a1600e5460ff161515600114801561170757506001831515145b15611716576117166000610c41565b50505050565b600e5460ff1681565b61172f3382612383565b50565b60008061173d611779565b9050600c54811061176b57611763612710610826600f548461201490919063ffffffff16565b91505061083e565b600091505090565b600c5481565b6000806117846129af565b9250505090565b6009546001600160a01b031681565b6117a2612817565b6001600160a01b03166117b3611213565b6001600160a01b0316146117d95760405162461bcd60e51b815260040161097f9061438a565b6127106117f7600f5461136c60115485611c4290919063ffffffff16565b111561180257600080fd5b7f3cc372f330f95ac9540626dc8a25f5bf21ba607215a5d58304cb804d446f104a601054826040516118359291906145f8565b60405180910390a1601055565b428410156118625760405162461bcd60e51b815260040161097f90614205565b6001600160a01b038716600090815260056020908152604080832080546001810190915590516118bd927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c92918c9101613ea1565b6040516020818303038152906040528051906020012090506118e28882868686612c33565b6118ed888888611ebf565b5050505050505050565b600b546001600160a01b031681565b61190e612817565b6001600160a01b031661191f611213565b6001600160a01b0316146119455760405162461bcd60e51b815260040161097f9061438a565b60405162461bcd60e51b815260040161097f906144b0565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b600061199e611995610f32565b60025490612014565b6119a9575080610dcf565b6107cf6119b4610f32565b600254610826908590612014565b6119ca612817565b6001600160a01b03166119db611213565b6001600160a01b031614611a015760405162461bcd60e51b815260040161097f9061438a565b7fa5dae50539d56dfe1fb5273d883b0c39bc76750a25d036fc5fbd09ad8fd5f57f600d5482604051611a349291906145f8565b60405180910390a1600d55565b6000611a4e611995610f32565b611a5a57506000610dcf565b6107cf600254610826611a6b610f32565b8590612014565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60001b6000604051611aa79190613d3b565b6040519081900390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6611ad9612d09565b30604051602001611aee959493929190613ed5565b60405160208183030381529060405280519060200120905090565b6016546001600160a01b031681565b611b20612817565b6001600160a01b0316611b31611213565b6001600160a01b031614611b575760405162461bcd60e51b815260040161097f9061438a565b6001600160a01b038116611b7d5760405162461bcd60e51b815260040161097f90613f32565b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031681565b323314611c075760405162461bcd60e51b815260040161097f90613f8f565b60606000611c136129af565b91509150600c54811015611c395760405162461bcd60e51b815260040161097f9061451e565b610a4982612d0d565b600082820183811015611c675760405162461bcd60e51b815260040161097f90613fc6565b9392505050565b6000836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611ca957600080fd5b505afa158015611cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce19190613a81565b6001600160a01b0316836001600160a01b03161480611d815750836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611d3457600080fd5b505afa158015611d48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6c9190613a81565b6001600160a01b0316836001600160a01b0316145b8015611e995750836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015611dc157600080fd5b505afa158015611dd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df99190613a81565b6001600160a01b0316826001600160a01b03161480611e995750836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015611e4c57600080fd5b505afa158015611e60573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e849190613a81565b6001600160a01b0316826001600160a01b0316145b8015611eb75750816001600160a01b0316836001600160a01b031614155b949350505050565b6001600160a01b038316611ee55760405162461bcd60e51b815260040161097f906143bf565b6001600160a01b038216611f0b5760405162461bcd60e51b815260040161097f9061458c565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611f66908590613e98565b60405180910390a3505050565b50600090565b601654604080517fa610708a00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163a610708a916004808301926020929190829003018186803b158015611fd757600080fd5b505afa158015611feb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200f9190613c4b565b905090565b600082612023575060006107cf565b8282028284828161203057fe5b0414611c675760405162461bcd60e51b815260040161097f9061432d565b6000611c6783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612e33565b6000611c6783836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f77008152505b600081848411156120f25760405162461bcd60e51b815260040161097f9190613f1f565b505050900390565b6001600160a01b0382166121205760405162461bcd60e51b815260040161097f906143f6565b61215d816040518060600160405280602e81526020016146ed602e91396001600160a01b03861660009081526004602052604090205491906120ce565b6001600160a01b03808516600090815260046020526040808220939093559084168152205461218c9082611c42565b6001600160a01b0380841660008181526004602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f66908590613e98565b61172f7f000000000000000000000000000000000000000000000000000000000000000082612e6a565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb906122369085908590600401613e5a565b602060405180830381600087803b15801561225057600080fd5b505af1158015612264573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122889190613bc9565b6122a45760405162461bcd60e51b815260040161097f906141a8565b505050565b6122e6816040518060600160405280602781526020016146c6602791396001600160a01b03851660009081526004602052604090205491906120ce565b60046000846001600160a01b03166001600160a01b0316815260200190815260200160002081905550612336816040518060600160405280602781526020016146706027913960025491906120ce565b6002556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612377908590613e98565b60405180910390a35050565b600e5460ff1615156001146123aa5760405162461bcd60e51b815260040161097f90614555565b600d54156123d857606060006123be6129af565b91509150600d548111156123d5576123d582612d0d565b50505b6009546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906323b872dd9061242590339030908690600401613df5565b602060405180830381600087803b15801561243f57600080fd5b505af1158015612453573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124779190613bc9565b6124935760405162461bcd60e51b815260040161097f90614453565b60006124be7f0000000000000000000000000000000000000000000000000000000000000000612ee9565b905060006124cd61081c611f79565b90506124e5846124e06106cc8685612090565b612f7f565b6124ee83613001565b836001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c84604051610a319190613e98565b600a546001600160a01b038381169116146127d457806001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561257557600080fd5b505afa158015612589573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ad9190613a81565b6001600160a01b0316826001600160a01b0316141561268957600a54604080517fd21220a700000000000000000000000000000000000000000000000000000000815290516001600160a01b039283169284169163d21220a7916004808301926020929190829003018186803b15801561262657600080fd5b505afa15801561263a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061265e9190613a81565b6001600160a01b0316146126845760405162461bcd60e51b815260040161097f906140b7565b6127d4565b600a54604080517f0dfe168100000000000000000000000000000000000000000000000000000000815290516001600160a01b0392831692841691630dfe1681916004808301926020929190829003018186803b1580156126e957600080fd5b505afa1580156126fd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127219190613a81565b6001600160a01b03161480156127b85750816001600160a01b0316816001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561277557600080fd5b505afa158015612789573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ad9190613a81565b6001600160a01b0316145b6127d45760405162461bcd60e51b815260040161097f906140b7565b6001600160a01b03828116600090815260136020526040902080546001600160a01b031916918316919091179055601454612810906001611c42565b6014555050565b3390565b6016546040517ff2801fe70000000000000000000000000000000000000000000000000000000081526000916001600160a01b03169063f2801fe7906128679030908590600401613e73565b604080518083038186803b15801561287e57600080fd5b505afa158015612892573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128b69190613c87565b5092915050565b601660009054906101000a90046001600160a01b03166001600160a01b031663db2e21bc6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561290d57600080fd5b505af1158015612921573d6000803e3d6000fd5b505060095460165460405163095ea7b360e01b81526001600160a01b03928316945063095ea7b3935061295d9290911690600090600401613e5a565b602060405180830381600087803b15801561297757600080fd5b505af115801561298b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a499190613bc9565b6060600060606129de7f000000000000000000000000000000000000000000000000000000000000000061304b565b600a546040516370a0823160e01b81529192506000916001600160a01b03909116906370a0823190612a14903090600401613de1565b60206040518083038186803b158015612a2c57600080fd5b505afa158015612a40573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a649190613c4b565b905060005b8251811015612c29576000838281518110612a8057fe5b6020026020010151600001519050600060136000868581518110612aa057fe5b6020026020010151600001516001600160a01b03166001600160a01b0316815260200190815260200160002060009054906101000a90046001600160a01b031690506000826001600160a01b03166370a08231306040518263ffffffff1660e01b8152600401612b109190613de1565b60206040518083038186803b158015612b2857600080fd5b505afa158015612b3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b609190613c4b565b600a549091506001600160a01b03848116911614612bf1576000612ba4878681518110612b8957fe5b60200260200101516020015183611c4290919063ffffffff16565b9050600081118015612bbe57506001600160a01b03831615155b15612beb57600a54612be890612be190839087906001600160a01b0316876132bc565b8790611c42565b95505b50612c1e565b612c1b868581518110612c0057fe5b60200260200101516020015186611c4290919063ffffffff16565b94505b505050600101612a69565b5090925090509091565b6000612c3d611a72565b85604051602001612c4f929190613dab565b604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051612c8c9493929190613f01565b6020604051602081039080840390855afa158015612cae573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590612ce45750866001600160a01b0316816001600160a01b0316145b612d005760405162461bcd60e51b815260040161097f9061405a565b50505050505050565b4690565b612d367f0000000000000000000000000000000000000000000000000000000000000000613397565b6000612d41826133f6565b90506000612d606127106108266011548561201490919063ffffffff16565b90508015612d8557600a54600b54612d85916001600160a01b03908116911683612208565b6000612da2612710610826600f548661201490919063ffffffff16565b90508015612dc157600a54612dc1906001600160a01b03163383612208565b6000612ddf612dda83612dd48787612090565b90612090565b6135cc565b9050612dea81613001565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef234612e13610f32565b600254604051612e249291906145f8565b60405180910390a15050505050565b60008183612e545760405162461bcd60e51b815260040161097f9190613f1f565b506000838581612e6057fe5b0495945050505050565b6016546040517f2e1a7d4d0000000000000000000000000000000000000000000000000000000081526001600160a01b0390911690632e1a7d4d90612eb3908490600401613e98565b600060405180830381600087803b158015612ecd57600080fd5b505af1158015612ee1573d6000803e3d6000fd5b505050505050565b601654604080517fcc1252ae00000000000000000000000000000000000000000000000000000000815290516000926001600160a01b03169163cc1252ae916004808301926020929190829003018186803b158015612f4757600080fd5b505afa158015612f5b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107cf9190613c4b565b600254612f8c9082611c42565b6002556001600160a01b038216600090815260046020526040902054612fb29082611c42565b6001600160a01b0383166000818152600460205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612377908590613e98565b600081116130215760405162461bcd60e51b815260040161097f906142d0565b61172f7f0000000000000000000000000000000000000000000000000000000000000000826135f4565b60606000601660009054906101000a90046001600160a01b03166001600160a01b031663bf199e626040518163ffffffff1660e01b815260040160206040518083038186803b15801561309d57600080fd5b505afa1580156130b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130d59190613c4b565b905060608167ffffffffffffffff811180156130f057600080fd5b5060405190808252806020026020018201604052801561312a57816020015b613117613a1f565b81526020019060019003908161310f5790505b50905060005b828110156132b4576016546040517f7bb7bed10000000000000000000000000000000000000000000000000000000081526000916001600160a01b031690637bb7bed190613182908590600401613e98565b60206040518083038186803b15801561319a57600080fd5b505afa1580156131ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d29190613a81565b6016546040517f9ced7e760000000000000000000000000000000000000000000000000000000081529192506000916001600160a01b0390911690639ced7e76906132239030908690600401613e73565b60206040518083038186803b15801561323b57600080fd5b505afa15801561324f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132739190613c4b565b90506040518060400160405280836001600160a01b031681526020018281525084848151811061329f57fe5b60209081029190910101525050600101613130565b509392505050565b6000806132c98585613769565b509050600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561330857600080fd5b505afa15801561331c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133409190613be5565b5091509150866001600160a01b0316836001600160a01b03161461336057905b61338b88836dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff1661379a565b98975050505050505050565b60165460405163b6b55f2560e01b81526001600160a01b039091169063b6b55f25906133c890600090600401613e98565b600060405180830381600087803b1580156133e257600080fd5b505af1158015610b56573d6000803e3d6000fd5b600a546040516370a0823160e01b815260009182916001600160a01b03909116906370a082319061342b903090600401613de1565b60206040518083038186803b15801561344357600080fd5b505afa158015613457573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061347b9190613c4b565b905060005b83518110156128b657600084828151811061349757fe5b602090810291909101810151516001600160a01b0380821660009081526013909352604083205488519294501691908790859081106134d257fe5b602002602001015160200151905060008111156135c157600a546001600160a01b038481169116141561358a574780156135845773b31f66aa3c1e785363f0875a1b74e27b85fd66c76001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561355557600080fd5b505af1158015613569573d6000803e3d6000fd5b50505050506135818287611c4290919063ffffffff16565b95505b506135c1565b6001600160a01b038216156135c157600a546135be906135b790839086906001600160a01b0316866137e2565b8690611c42565b94505b505050600101613480565b600a546009546015546000926107cf9285926001600160a01b039283169291821691166137e2565b60095460165460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261362a929116908590600401613e5a565b602060405180830381600087803b15801561364457600080fd5b505af1158015613658573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061367c9190613bc9565b5060165460405163b6b55f2560e01b81526001600160a01b039091169063b6b55f25906136ad908490600401613e98565b600060405180830381600087803b1580156136c757600080fd5b505af11580156136db573d6000803e3d6000fd5b505060095460165460405163095ea7b360e01b81526001600160a01b03928316945063095ea7b393506137179290911690600090600401613e5a565b602060405180830381600087803b15801561373157600080fd5b505af1158015613745573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a49190613bc9565b600080826001600160a01b0316846001600160a01b03161061378c57828461378f565b83835b915091509250929050565b6000806137a9856103e5612014565b905060006137b78285612014565b905060006137cb8361136c886103e8612014565b90506137d7828261204e565b979650505050505050565b6000806137ef8585613769565b509050600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561382e57600080fd5b505afa158015613842573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138669190613be5565b5091509150866001600160a01b0316836001600160a01b03161461388657905b6000806138b48a856dffffffffffffffffffffffffffff16856dffffffffffffffffffffffffffff1661379a565b9050886001600160a01b0316856001600160a01b0316146138d157905b6138dc89888c613983565b604080516000815260208101918290527f022c0d9f000000000000000000000000000000000000000000000000000000009091526001600160a01b0388169063022c0d9f906139349085908590309060248101614606565b600060405180830381600087803b15801561394e57600080fd5b505af1158015613962573d6000803e3d6000fd5b505050508181116139735781613975565b805b9a9950505050505050505050565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb906139b19085908590600401613e5a565b602060405180830381600087803b1580156139cb57600080fd5b505af11580156139df573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a039190613bc9565b6122a45760405162461bcd60e51b815260040161097f906145c3565b604080518082019091526000808252602082015290565b80516dffffffffffffffffffffffffffff81168114610dcf57600080fd5b803560ff81168114610dcf57600080fd5b600060208284031215613a76578081fd5b8135611c678161464c565b600060208284031215613a92578081fd5b8151611c678161464c565b60008060408385031215613aaf578081fd5b8235613aba8161464c565b91506020830135613aca8161464c565b809150509250929050565b600080600060608486031215613ae9578081fd5b8335613af48161464c565b92506020840135613b048161464c565b929592945050506040919091013590565b600080600080600080600060e0888a031215613b2f578283fd5b8735613b3a8161464c565b96506020880135613b4a8161464c565b95506040880135945060608801359350613b6660808901613a54565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215613b94578182fd5b8235613b9f8161464c565b946020939093013593505050565b600060208284031215613bbe578081fd5b8135611c6781614661565b600060208284031215613bda578081fd5b8151611c6781614661565b600080600060608486031215613bf9578283fd5b613c0284613a36565b9250613c1060208501613a36565b9150604084015163ffffffff81168114613c28578182fd5b809150509250925092565b600060208284031215613c44578081fd5b5035919050565b600060208284031215613c5c578081fd5b5051919050565b60008060408385031215613c75578182fd5b823591506020830135613aca81614661565b60008060408385031215613c99578182fd5b505080516020909101519092909150565b600080600080600060a08688031215613cc1578283fd5b8535945060208601359350613cd860408701613a54565b94979396509394606081013594506080013592915050565b60008151808452815b81811015613d1557602081850181015186830182015201613cf9565b81811115613d265782602083870101525b50601f01601f19169290920160200192915050565b6000808354600180821660008114613d5a5760018114613d7157613da0565b60ff198316865260028304607f1686019350613da0565b600283048786526020808720875b83811015613d985781548a820152908501908201613d7f565b505050860193505b509195945050505050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b600060208252611c676020830184613cf0565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201527f6464726573730000000000000000000000000000000000000000000000000000606082015260800190565b60208082526014908201527f59616b53747261746567793a3a6f6e6c79454f41000000000000000000000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526034908201527f5065726d697373696f6e65643a3a72656d6f76654465706f7369746f722c206e60408201527f6f20616c6c6f776564206465706f7369746f7273000000000000000000000000606082015260800190565b60208082526024908201527f417263683a3a76616c69646174655369673a20696e76616c6964207369676e6160408201527f7475726500000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252603a908201527f537761702070616972207377617050616972506f6f6c52657761726420646f6560408201527f73206e6f7420636f6e7461696e2072657761726420746f6b656e000000000000606082015260800190565b6020808252601c908201527f5065726d697373696f6e65643a3a616c6c6f774465706f7369746f7200000000604082015260600190565b60208082526029908201527f4d617374657243686566537472617465677956313a3a7265736375654465706c60408201527f6f79656446756e64730000000000000000000000000000000000000000000000606082015260800190565b6020808252602a908201527f4d617374657243686566537472617465677956313a3a5452414e534645525f4660408201527f524f4d5f4641494c454400000000000000000000000000000000000000000000606082015260800190565b6020808252600f908201527f7065726d69743a3a657870697265640000000000000000000000000000000000604082015260600190565b6020808252601e908201527f4d617374657243686566537472617465677956313a3a77697468647261770000604082015260600190565b6020808252602a908201527f5065726d697373696f6e65643a3a72656d6f76654465706f7369746f722c206e60408201527f6f7420616c6c6f77656400000000000000000000000000000000000000000000606082015260800190565b60208082526029908201527f4d617374657243686566537472617465677956313a3a5f7374616b654465706f60408201527f736974546f6b656e730000000000000000000000000000000000000000000000606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60408201527f7700000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601c908201527f5f617070726f76653a3a6f776e6572207a65726f206164647265737300000000604082015260600190565b60208082526034908201527f5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e7366657260408201527f20746f20746865207a65726f2061646472657373000000000000000000000000606082015260800190565b60208082526025908201527f4d617374657243686566537472617465677956313a3a7472616e73666572206660408201527f61696c6564000000000000000000000000000000000000000000000000000000606082015260800190565b60208082526019908201527f736574416c6c6f77616e6365733a3a6465707265636174656400000000000000604082015260600190565b60208082526014908201527f59616b53747261746567793a3a6f6e6c79446576000000000000000000000000604082015260600190565b6020808252601e908201527f4d617374657243686566537472617465677956313a3a7265696e766573740000604082015260600190565b6020808252601e908201527f4d617374657243686566537472617465677956313a3a5f6465706f7369740000604082015260600190565b6020808252601e908201527f5f617070726f76653a3a7370656e646572207a65726f20616464726573730000604082015260600190565b6020808252818101527f4465784c6962726172793a3a5452414e534645525f46524f4d5f4641494c4544604082015260600190565b918252602082015260400190565b60008582528460208301526001600160a01b0384166040830152608060608301526146346080830184613cf0565b9695505050505050565b60ff91909116815260200190565b6001600160a01b038116811461172f57600080fd5b801515811461172f57600080fdfe5f6275726e3a206275726e20616d6f756e74206578636565647320746f74616c20737570706c797472616e7366657246726f6d3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655f6275726e3a206275726e20616d6f756e7420657863656564732066726f6d2062616c616e63655f7472616e73666572546f6b656e733a207472616e7366657220657863656564732066726f6d2062616c616e6365a2646970667358221220733c54ce7a83ac1d7941a83b2d13c15c19d704500ecc32315c0faa33e8e848ce64736f6c634300070300338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e000000000000000000000000000000000000000000000000000000000000001800000000000000000000000006e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c70000000000000000000000006e84a6216ea6dacc71ee8e6b0a5b7322eebc0fdd000000000000000000000000454e67025631c065d3cfad6d71e6892f74487a1500000000000000000000000000000000000000000000000000000000000001c00000000000000000000000001a731b2299e22fbac282e7094eda41046343cb51000000000000000000000000302404cb8f34713a8b8dbf9b4989a41252332068000000000000000000000000000000000000000000000000002386f26fc10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003840000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000000f5969656c642059616b3a20734a4f4500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000b97ef9ef8734c71904d8002f8b6bc66dd9c48a6e000000000000000000000000f4003f4efbe8691b60249e6afbd307abe7758adb