[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "address", "name": "_rewardController", "type": "address" }, { "internalType": "address", "name": "_tokenDelegator", "type": "address" }, { "internalType": "address", "name": "_depositToken", "type": "address" }, { "internalType": "address", "name": "_swapPairToken", "type": "address" }, { "components": [ { "internalType": "address", "name": "reward", "type": "address" }, { "internalType": "address", "name": "swapPair", "type": "address" } ], "internalType": "struct AaveV3StrategyV1.RewardSwapPairs[]", "name": "_rewardSwapPairs", "type": "tuple[]" }, { "internalType": "address", "name": "_avToken", "type": "address" }, { "internalType": "address", "name": "_avDebtToken", "type": "address" }, { "internalType": "address", "name": "_timelock", "type": "address" }, { "components": [ { "internalType": "uint256", "name": "leverageLevel", "type": "uint256" }, { "internalType": "uint256", "name": "safetyFactor", "type": "uint256" }, { "internalType": "uint256", "name": "leverageBips", "type": "uint256" }, { "internalType": "uint256", "name": "minMinting", "type": "uint256" } ], "internalType": "struct AaveV3StrategyV1.LeverageSettings", "name": "_leverageSettings", "type": "tuple" }, { "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 AaveV3StrategyV1.StrategySettings", "name": "_strategySettings", "type": "tuple" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "anonymous": false, "inputs": [ { "indexed": false, "internalType": "address", "name": "rewardToken", "type": "address" }, { "indexed": false, "internalType": "address", "name": "swapPair", "type": "address" } ], "name": "AddReward", "type": "event" }, { "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": false, "internalType": "address", "name": "rewardToken", "type": "address" } ], "name": "RemoveReward", "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": "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": [], "name": "getActualLeverage", "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": "leverageBips", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "leverageLevel", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "minMinting", "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": "", "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": "safetyFactor", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "setAllowances", "outputs": [], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "supportedRewards", "outputs": [ { "internalType": "address", "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": "_leverageLevel", "type": "uint256" }, { "internalType": "uint256", "name": "_safetyFactor", "type": "uint256" }, { "internalType": "uint256", "name": "_minMinting", "type": "uint256" }, { "internalType": "uint256", "name": "_leverageBips", "type": "uint256" } ], "name": "updateLeverage", "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" } ]
60c060405260096080819052685969656c642059616b60b81b60a09081526200002c916000919062000bbe565b506040805180820190915260038082526216549560ea1b6020909201918252620000599160019162000bbe565b503480156200006757600080fd5b5060405162005dc038038062005dc08339810160408190526200008a9162000e6b565b60006200009662000292565b600680546001600160a01b0319166001600160a01b0383169081179091556040519192509060009060008051602062005da0833981519152908290a3508a51620000e89060009060208e019062000bbe565b50601980546001600160a01b03808d166001600160a01b031992831617909255601a8054928c1692821692909217909155600a805490911673b31f66aa3c1e785363f0875a1b74e27b85fd66c71790558151602083015160608401516040850151620001579392919062000296565b600b8054336001600160a01b0319918216179091556009805482166001600160a01b038b811691909117909155601c80548316888316179055601d8054909216908616179055620001a887620002aa565b60005b86518110156200020057620001f7878281518110620001c657fe5b602002602001015160000151888381518110620001df57fe5b6020026020010151602001516200036360201b60201c565b600101620001ab565b5080516200020e906200048e565b60408101516200021e9062000516565b60608101516200022e90620005e4565b6200023a60016200069e565b620002458362000746565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef2346000806040516200027992919062000fa9565b60405180910390a150505050505050505050506200118f565b3390565b601593909355601792909255601655601855565b6001600160a01b038116620002dc5760405162461bcd60e51b8152600401620002d39062001124565b60405180910390fd5b601b80546001600160a01b0319166001600160a01b038381169190911791829055600954600a546200031693831692918216911662000800565b80620003415750601b54600a5460095462000341926001600160a01b03908116928116911662000800565b620003605760405162461bcd60e51b8152600401620002d390620010c7565b50565b600a546001600160a01b03838116911614620003c557620003a68183600a60009054906101000a90046001600160a01b03166200092560201b620021781760201c565b620003c55760405162461bcd60e51b8152600401620002d39062000fb7565b6001600160a01b038083166000818152601260209081526040822080549486166001600160a01b03199586161790556013805460018181018355919093527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a09090920180549094169092179092556014546200044b929091620023c962000b80821b17901c565b6014556040517f916e172c080569186aa7ea048268267257cf7cc49505908863f747bca8620f809062000482908490849062000f84565b60405180910390a15050565b6200049862000292565b6001600160a01b0316620004ab62000baf565b6001600160a01b031614620004d45760405162461bcd60e51b8152600401620002d39062001092565b7f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef849901100600c54826040516200050992919062000fa9565b60405180910390a1600c55565b6200052062000292565b6001600160a01b03166200053362000baf565b6001600160a01b0316146200055c5760405162461bcd60e51b8152600401620002d39062001092565b61271062000596600f54620005826010548562000b8060201b620023c91790919060201c565b62000b8060201b620023c91790919060201c565b1115620005a257600080fd5b7f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d65172613160115482604051620005d792919062000fa9565b60405180910390a1601155565b620005ee62000292565b6001600160a01b03166200060162000baf565b6001600160a01b0316146200062a5760405162461bcd60e51b8152600401620002d39062001092565b61271062000650601154620005826010548562000b8060201b620023c91790919060201c565b11156200065c57600080fd5b7fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f2600f54826040516200069192919062000fa9565b60405180910390a1600f55565b620006a862000292565b6001600160a01b0316620006bb62000baf565b6001600160a01b031614620006e45760405162461bcd60e51b8152600401620002d39062001092565b600e5460ff1615158115151415620006fb57600080fd5b600e805460ff19168215151790556040517f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e85906200073b90839062000f9e565b60405180910390a150565b6200075062000292565b6001600160a01b03166200076362000baf565b6001600160a01b0316146200078c5760405162461bcd60e51b8152600401620002d39062001092565b6001600160a01b038116620007b55760405162461bcd60e51b8152600401620002d39062001015565b6006546040516001600160a01b0380841692169060008051602062005da083398151915290600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6000826001600160a01b0316846001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156200084657600080fd5b505afa1580156200085b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000881919062000e4e565b6001600160a01b03161480156200091d5750816001600160a01b0316846001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015620008d757600080fd5b505afa158015620008ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000912919062000e4e565b6001600160a01b0316145b949350505050565b6000836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156200096157600080fd5b505afa15801562000976573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200099c919062000e4e565b6001600160a01b0316836001600160a01b0316148062000a415750836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015620009f157600080fd5b505afa15801562000a06573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a2c919062000e4e565b6001600160a01b0316836001600160a01b0316145b801562000b635750836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801562000a8357600080fd5b505afa15801562000a98573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000abe919062000e4e565b6001600160a01b0316826001600160a01b0316148062000b635750836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801562000b1357600080fd5b505afa15801562000b28573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b4e919062000e4e565b6001600160a01b0316826001600160a01b0316145b80156200091d5750506001600160a01b0391821691161415919050565b60008282018381101562000ba85760405162461bcd60e51b8152600401620002d3906200105b565b9392505050565b6006546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1062000c0157805160ff191683800117855562000c31565b8280016001018555821562000c31579182015b8281111562000c3157825182559160200191906001019062000c14565b5062000c3f92915062000c43565b5090565b5b8082111562000c3f576000815560010162000c44565b80516001600160a01b038116811462000c7257600080fd5b919050565b600082601f83011262000c88578081fd5b81516001600160401b0381111562000c9c57fe5b602062000cad81828402016200116b565b828152925080830184820160408085028701840188101562000cce57600080fd5b60005b8581101562000cf95762000ce6898462000df2565b8452928401929181019160010162000cd1565b50505050505092915050565b600082601f83011262000d16578081fd5b81516001600160401b0381111562000d2a57fe5b602062000d40601f8301601f191682016200116b565b9250818352848183860101111562000d5757600080fd5b60005b8281101562000d7757848101820151848201830152810162000d5a565b8281111562000d895760008284860101525b50505092915050565b60006080828403121562000da4578081fd5b604051608081016001600160401b038111828210171562000dc157fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201525092915050565b60006040828403121562000e04578081fd5b604080519081016001600160401b038111828210171562000e2157fe5b60405290508062000e328362000c5a565b815262000e426020840162000c5a565b60208201525092915050565b60006020828403121562000e60578081fd5b62000ba88262000c5a565b60008060008060008060008060008060006102208c8e03121562000e8d578687fd5b8b516001600160401b0381111562000ea3578788fd5b62000eb18e828f0162000d05565b9b505062000ec260208d0162000c5a565b995062000ed260408d0162000c5a565b985062000ee260608d0162000c5a565b975062000ef260808d0162000c5a565b60a08d01519097506001600160401b0381111562000f0e578687fd5b62000f1c8e828f0162000c77565b96505062000f2d60c08d0162000c5a565b945062000f3d60e08d0162000c5a565b935062000f4e6101008d0162000c5a565b925062000f608d6101208e0162000d92565b915062000f728d6101a08e0162000d92565b90509295989b509295989b9093969950565b6001600160a01b0392831681529116602082015260400190565b901515815260200190565b918252602082015260400190565b602080825260409082018190527f5661726961626c655265776172647353747261746567793a3a53776170207061908201527f697220646f6573206e6f7420636f6e7461696e2072657761726420746f6b656e606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526036908201527f53776170207061697220646f6573206e6f74206d61746368206465706f73697460408201527f546f6b656e20616e6420726577617264546f6b656e2e00000000000000000000606082015260800190565b60208082526027908201527f537761702070616972206973206e656365737361727920627574206e6f7420736040820152661d5c1c1b1a595960ca1b606082015260800190565b6040518181016001600160401b03811182821017156200118757fe5b604052919050565b614c01806200119f6000396000f3fe608060405234801561001057600080fd5b50600436106103eb5760003560e01c80638b73e6061161021a578063c89039c511610135578063e21ac825116100c8578063ed24911d11610097578063f2fde38b1161007c578063f2fde38b1461078c578063f7c618c11461079f578063fdb5a03e146107a7576103eb565b8063ed24911d1461077c578063f02ecb7114610784576103eb565b8063e21ac8251461073b578063e592c5fa1461074e578063e75ab04514610756578063eab89a5a14610769576103eb565b8063db8dd95c11610104578063db8dd95c14610705578063dbd9a4d41461070d578063dd62ed3e14610715578063dd8ce4d614610728576103eb565b8063c89039c5146106cf578063cff1b6ef146106d7578063d505accf146106ea578063da09c72c146106fd576103eb565b8063a8ae2b7c116101ad578063b6b55f251161017c578063b6b55f25146106a4578063b9e57b80146106b7578063bd079f55146106bf578063c4b24a46146106c7576103eb565b8063a8ae2b7c14610663578063a9059cbb14610676578063ac0d31ff14610689578063b52a321f1461069c576103eb565b806399729ec1116101e957806399729ec1146106225780639e4e731814610635578063a4d5e67c1461063d578063a5534e7114610650576103eb565b80638b73e606146105df5780638da5cb5b146105f25780639291d5631461060757806395d89b411461061a576103eb565b80634a970be71161030a578063789139bc1161029d5780637ecebe001161026c5780637ecebe001461059e57806381837230146105b15780638980f11f146105c45780638aff733d146105d7576103eb565b8063789139bc14610573578063790854251461057b5780637ae26773146105835780637d88209714610596576103eb565b80635ea682ea116102d95780635ea682ea1461054857806362ac20a51461055057806370a0823114610558578063715018a61461056b576103eb565b80634a970be7146104fc5780634bebd1e71461050f5780634e77ace5146105225780634ebb791614610535576103eb565b806323b872dd11610382578063313ce56711610351578063313ce567146104b95780633bdc6e72146104ce57806340b47e1a146104d6578063483c2ef0146104e9576103eb565b806323b872dd146104785780632e1a7d4d1461048b5780632f4f21e21461049e57806330adf81f146104b1576103eb565b806318160ddd116103be57806318160ddd1461044b5780631f15d71a1461045357806320606b701461045b57806322a0514114610463576103eb565b806306fdde03146103f0578063076771111461040e578063095ea7b3146104235780630f23475d14610443575b600080fd5b6103f86107af565b6040516104059190614287565b60405180910390f35b61041661083d565b6040516104059190614200565b610436610431366004613d17565b610843565b60405161040591906141f5565b61041661085a565b61041661086a565b610416610870565b610416610876565b610476610471366004613edf565b61089a565b005b610436610486366004613c6a565b61090c565b610476610499366004613e8b565b6109f3565b6104766104ac366004613d17565b610a9d565b610416610aa7565b6104c1610acb565b6040516104059190614aad565b610416610ad0565b6104766104e4366004613c32565b610ad6565b6104366104f7366004613bfa565b610b0a565b61047661050a366004613f10565b610b1f565b61047661051d366004613bfa565b610bb7565b610476610530366004613e05565b610c9b565b610476610543366004613e8b565b610d39565b610416610de5565b610416610deb565b610416610566366004613bfa565b610df1565b610476610e10565b610416610e99565b610416610e9f565b610476610591366004613c32565b610ea5565b610416610f6e565b6104166105ac366004613bfa565b610f92565b6104766105bf366004613e8b565b610fa4565b6104766105d2366004613d17565b611023565b610416611135565b6104766105ed366004613bfa565b61113b565b6105fa611241565b6040516104059190614047565b610476610615366004613bfa565b611250565b6103f86112e3565b610476610630366004613e8b565b61133d565b6104166113eb565b61047661064b366004613bfa565b61140f565b6105fa61065e366004613bfa565b611596565b610476610671366004613e8b565b6115b1565b610436610684366004613d17565b611659565b610476610697366004613ebb565b611666565b6104366118db565b6104766106b2366004613e8b565b6118e4565b6104166118f1565b610416611938565b61041661193e565b6105fa611c9a565b6104766106e5366004613e8b565b611ca9565b6104766106f8366004613caa565b611d51565b6105fa611e06565b610416611e15565b610476611e47565b610416610723366004613c32565b611e9e565b610416610736366004613e8b565b611ec9565b610476610749366004613e8b565b611f03565b610416611f82565b6105fa610764366004613e8b565b611f88565b610416610777366004613e8b565b611faf565b610416611fe0565b610416612077565b61047661079a366004613bfa565b61207d565b6105fa61213e565b61047661214d565b6000805460408051602060026001851615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108355780601f1061080a57610100808354040283529160200191610835565b820191906000526020600020905b81548152906001019060200180831161081857829003601f168201915b505050505081565b60105481565b60006108503384846123f5565b5060015b92915050565b6000610864610f6e565b90505b90565b60025481565b60175481565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b600b546001600160a01b031633146108cd5760405162461bcd60e51b81526004016108c49061490a565b60405180910390fd5b6108d9848484846124a9565b6000806108e46124bd565b5090925090506108fc6108f78383612630565b612672565b610904612784565b505050505050565b6001600160a01b03831660008181526003602090815260408083203380855292528220549192909190821480159061094657506000198114155b156109dc576000610972856040518060600160405280602f8152602001614b48602f9139849190612a18565b6001600160a01b03808916600081815260036020908152604080832094891680845294909152908190208490555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906109d2908590614200565b60405180910390a3505b6109e7868686612a44565b50600195945050505050565b60006109fe82611faf565b90506018548111610a215760405162461bcd60e51b81526004016108c490614750565b8015610a9957610a313383612b28565b6000610a3c82612c02565b600954909150610a56906001600160a01b03163383612cc6565b336001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436482604051610a8f9190614200565b60405180910390a2505b5050565b610a998282612d67565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60075481565b600b546001600160a01b03163314610b005760405162461bcd60e51b81526004016108c49061490a565b610a998282612f0f565b60086020526000908152604090205460ff1681565b6009546040517fd505accf0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063d505accf90610b7490339030908a908a908a908a908a9060040161407f565b600060405180830381600087803b158015610b8e57600080fd5b505af1158015610ba2573d6000803e3d6000fd5b50505050610bb03386612d67565b5050505050565b610bbf613005565b6001600160a01b0316610bd0611241565b6001600160a01b031614610bf65760405162461bcd60e51b81526004016108c49061480a565b6001600160a01b03811660009081526008602052604090205460ff1615610c2f5760405162461bcd60e51b81526004016108c490614537565b6001600160a01b0381166000908152600860205260409020805460ff19166001908117909155600754610c61916123c9565b6007556040516001600160a01b038216907fc0a1035c16faf8d1304056d92c00edf028f87e62b8235a938f00af9e3c0312c590600090a250565b610ca3613005565b6001600160a01b0316610cb4611241565b6001600160a01b031614610cda5760405162461bcd60e51b81526004016108c49061480a565b600e5460ff1615158115151415610cf057600080fd5b600e805460ff19168215151790556040517f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e8590610d2e9083906141f5565b60405180910390a150565b610d41613005565b6001600160a01b0316610d52611241565b6001600160a01b031614610d785760405162461bcd60e51b81526004016108c49061480a565b60008111610d8557600080fd5b604051339082156108fc029083906000818181858888f19350505050158015610db2573d6000803e3d6000fd5b507f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28600082604051610d2e9291906140c0565b60115481565b60185481565b6001600160a01b0381166000908152600460205260409020545b919050565b610e18613005565b6001600160a01b0316610e29611241565b6001600160a01b031614610e4f5760405162461bcd60e51b81526004016108c49061480a565b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600680546001600160a01b0319169055565b600d5481565b60145481565b610ead613005565b6001600160a01b0316610ebe611241565b6001600160a01b031614610ee45760405162461bcd60e51b81526004016108c49061480a565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b390610f139084906000906004016140c0565b602060405180830381600087803b158015610f2d57600080fd5b505af1158015610f41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f659190613e21565b610a9957600080fd5b6000806000610f7b6124bd565b509092509050610f8b8282612630565b9250505090565b60056020526000908152604090205481565b610fac613005565b6001600160a01b0316610fbd611241565b6001600160a01b031614610fe35760405162461bcd60e51b81526004016108c49061480a565b7f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef849901100600c5482604051611016929190614a67565b60405180910390a1600c55565b61102b613005565b6001600160a01b031661103c611241565b6001600160a01b0316146110625760405162461bcd60e51b81526004016108c49061480a565b6000811161106f57600080fd5b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb9061109d90339085906004016140c0565b602060405180830381600087803b1580156110b757600080fd5b505af11580156110cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110ef9190613e21565b6110f857600080fd5b7f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa2882826040516111299291906140c0565b60405180910390a15050565b600f5481565b611143613005565b6001600160a01b0316611154611241565b6001600160a01b03161461117a5760405162461bcd60e51b81526004016108c49061480a565b60006007541161119c5760405162461bcd60e51b81526004016108c49061447d565b6001600160a01b03811660009081526008602052604090205460ff1615156001146111d95760405162461bcd60e51b81526004016108c490614696565b6001600160a01b0381166000908152600860205260409020805460ff19169055600754611207906001612630565b6007556040516001600160a01b038216907f0e86f6608b536e5339a25b65ff531f5ea91e1313d056ecd4752b35cbd16137d490600090a250565b6006546001600160a01b031690565b600b546001600160a01b0316331461127a5760405162461bcd60e51b81526004016108c49061490a565b600b546040517fa8e91499ed37682f43cffb045fcc7d379a91e8c9a14e6321877ee34dee564c00916112b9916001600160a01b039091169084906140d9565b60405180910390a1600b80546001600160a01b0319166001600160a01b0392909216919091179055565b60018054604080516020600284861615610100026000190190941693909304601f810184900484028201840190925281815292918301828280156108355780601f1061080a57610100808354040283529160200191610835565b611345613005565b6001600160a01b0316611356611241565b6001600160a01b03161461137c5760405162461bcd60e51b81526004016108c49061480a565b6127106113a0600f5461139a601054856123c990919063ffffffff16565b906123c9565b11156113ab57600080fd5b7f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d651726131601154826040516113de929190614a67565b60405180910390a1601155565b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b600b546001600160a01b031633146114395760405162461bcd60e51b81526004016108c49061490a565b6001600160a01b038116600090815260126020526040812080546001600160a01b0319169055805b60135481101561150a576013818154811061147857fe5b6000918252602090912001546001600160a01b038481169116141561150257601380546001935060001981019081106114ad57fe5b600091825260209091200154601380546001600160a01b0390921691839081106114d357fe5b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b600101611461565b50806115285760405162461bcd60e51b81526004016108c4906146f3565b601380548061153357fe5b600082815260209020810160001990810180546001600160a01b0319169055019055601454611563906001612630565b6014556040517f963b7c735475147a62c589c2d7cb8ec4b0a6b7af4f97373d79ebfa42ab8aa7dc90611129908490614047565b6012602052600090815260409020546001600160a01b031681565b6115b9613005565b6001600160a01b03166115ca611241565b6001600160a01b0316146115f05760405162461bcd60e51b81526004016108c49061480a565b61271061160e60115461139a601054856123c990919063ffffffff16565b111561161957600080fd5b7fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f2600f548260405161164c929190614a67565b60405180910390a1600f55565b6000610850338484612a44565b61166e613005565b6001600160a01b031661167f611241565b6001600160a01b0316146116a55760405162461bcd60e51b81526004016108c49061480a565b6009546040516370a0823160e01b81526000916001600160a01b0316906370a08231906116d6903090600401614047565b60206040518083038186803b1580156116ee57600080fd5b505afa158015611702573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117269190613ea3565b90506000806117336124bd565b5090925090506117466108f78383612630565b601a54600954604051631a4ca37b60e21b81526001600160a01b03928316926369328dec92611780929116906000199030906004016140f3565b602060405180830381600087803b15801561179a57600080fd5b505af11580156117ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117d29190613ea3565b506009546040516370a0823160e01b81526000916001600160a01b0316906370a0823190611804903090600401614047565b60206040518083038186803b15801561181c57600080fd5b505afa158015611830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118549190613ea3565b9050856118618286612630565b101561187f5760405162461bcd60e51b81526004016108c490614639565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef2346118a8610f6e565b6002546040516118b9929190614a67565b60405180910390a1600e5460ff16151560011415610904576109046000610c9b565b600e5460ff1681565b6118ee3382612d67565b50565b6000806118fc61193e565b9050600c54811061193057611928612710611922600f548461300990919063ffffffff16565b90613043565b915050610867565b600091505090565b600c5481565b60408051600280825260608083018452600093909291906020830190803683375050601c5482519293506001600160a01b03169183915060009061197e57fe5b6001600160a01b039283166020918202929092010152601d548251911690829060019081106119a957fe5b6001600160a01b0392831660209182029290920101526019546040517f4c0369c300000000000000000000000000000000000000000000000000000000815260609283921690634c0369c390611a059086903090600401614198565b60006040518083038186803b158015611a1d57600080fd5b505afa158015611a31573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611a599190810190613d42565b6040516370a0823160e01b8152919350915060009073b31f66aa3c1e785363f0875a1b74e27b85fd66c7906370a0823190611a98903090600401614047565b60206040518083038186803b158015611ab057600080fd5b505afa158015611ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae89190613ea3565b9050611af481476123c9565b5060005b8351811015611c91576000848281518110611b0f57fe5b6020026020010151905073b31f66aa3c1e785363f0875a1b74e27b85fd66c76001600160a01b0316816001600160a01b03161415611b7457611b6d848381518110611b5657fe5b6020026020010151846123c990919063ffffffff16565b9250611c88565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190611ba3903090600401614047565b60206040518083038186803b158015611bbb57600080fd5b505afa158015611bcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf39190613ea3565b90506000611c1d868581518110611c0657fe5b6020026020010151836123c990919063ffffffff16565b6001600160a01b03808516600090815260126020526040902054919250168115801590611c5257506001600160a01b03811615155b15611c8457611c81611c7a838673b31f66aa3c1e785363f0875a1b74e27b85fd66c785613085565b87906123c9565b95505b5050505b50600101611af8565b50935050505090565b6009546001600160a01b031681565b611cb1613005565b6001600160a01b0316611cc2611241565b6001600160a01b031614611ce85760405162461bcd60e51b81526004016108c49061480a565b612710611d06600f5461139a601154856123c990919063ffffffff16565b1115611d1157600080fd5b7f3cc372f330f95ac9540626dc8a25f5bf21ba607215a5d58304cb804d446f104a60105482604051611d44929190614a67565b60405180910390a1601055565b42841015611d715760405162461bcd60e51b81526004016108c490614602565b6001600160a01b03871660009081526005602090815260408083208054600181019091559051611dcc927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c92918c9101614209565b604051602081830303815290604052805190602001209050611df18882868686613160565b611dfc8888886123f5565b5050505050505050565b600b546001600160a01b031681565b6000806000611e226124bd565b509092509050610f8b611e358383612630565b61192284670de0b6b3a7640000613009565b611e4f613005565b6001600160a01b0316611e60611241565b6001600160a01b031614611e865760405162461bcd60e51b81526004016108c49061480a565b60405162461bcd60e51b81526004016108c4906148d3565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6000611edf611ed6610f6e565b60025490613009565b611eea575080610e0b565b610854611ef5610f6e565b600254611922908590613009565b611f0b613005565b6001600160a01b0316611f1c611241565b6001600160a01b031614611f425760405162461bcd60e51b81526004016108c49061480a565b7fa5dae50539d56dfe1fb5273d883b0c39bc76750a25d036fc5fbd09ad8fd5f57f600d5482604051611f75929190614a67565b60405180910390a1600d55565b60155481565b60138181548110611f9557fe5b6000918252602090912001546001600160a01b0316905081565b6000611fbc611ed6610f6e565b611fc857506000610e0b565b610854600254611922611fd9610f6e565b8590613009565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60001b60006040516120159190613fa1565b6040519081900390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6612047613236565b3060405160200161205c95949392919061423d565b60405160208183030381529060405280519060200120905090565b60165481565b612085613005565b6001600160a01b0316612096611241565b6001600160a01b0316146120bc5760405162461bcd60e51b81526004016108c49061480a565b6001600160a01b0381166120e25760405162461bcd60e51b81526004016108c490614355565b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b600a546001600160a01b031681565b32331461216c5760405162461bcd60e51b81526004016108c4906143b2565b612176600061323a565b565b6000836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156121b357600080fd5b505afa1580156121c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121eb9190613c16565b6001600160a01b0316836001600160a01b0316148061228b5750836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561223e57600080fd5b505afa158015612252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122769190613c16565b6001600160a01b0316836001600160a01b0316145b80156123a35750836001600160a01b0316630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b1580156122cb57600080fd5b505afa1580156122df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123039190613c16565b6001600160a01b0316826001600160a01b031614806123a35750836001600160a01b031663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561235657600080fd5b505afa15801561236a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238e9190613c16565b6001600160a01b0316826001600160a01b0316145b80156123c15750816001600160a01b0316836001600160a01b031614155b949350505050565b6000828201838110156123ee5760405162461bcd60e51b81526004016108c4906143e9565b9392505050565b6001600160a01b03831661241b5760405162461bcd60e51b81526004016108c49061483f565b6001600160a01b0382166124415760405162461bcd60e51b81526004016108c4906149fb565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061249c908590614200565b60405180910390a3505050565b601593909355601792909255601655601855565b601c546040516370a0823160e01b8152600091829182916001600160a01b0316906370a08231906124f2903090600401614047565b60206040518083038186803b15801561250a57600080fd5b505afa15801561251e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125429190613ea3565b601d546040516370a0823160e01b81529194506001600160a01b0316906370a0823190612573903090600401614047565b60206040518083038186803b15801561258b57600080fd5b505afa15801561259f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125c39190613ea3565b915060009050816125f16015546119226125ea60175460155461263090919063ffffffff16565b8790613009565b111561262b576126288261262260155461192261261b60175460155461263090919063ffffffff16565b8890613009565b90612630565b90505b909192565b60006123ee83836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f7700815250612a18565b60008061267d6124bd565b50909250905060006126ca612696856126228686612630565b6126226017546119226126b660165460155461263090919063ffffffff16565b6126c48a6126228b8b612630565b90613009565b905060006126d88383612630565b90508015610bb057601a546009546040517f2dad97d40000000000000000000000000000000000000000000000000000000081526001600160a01b0392831692632dad97d492612732929116908590600290600401614143565b602060405180830381600087803b15801561274c57600080fd5b505af1158015612760573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109049190613ea3565b60008060006127916124bd565b92509250925060006127c36017546119226127b960165460155461263090919063ffffffff16565b6126c48888612630565b600954601a5460405163095ea7b360e01b81529293506001600160a01b039182169263095ea7b3926127fb92169085906004016140c0565b602060405180830381600087803b15801561281557600080fd5b505af1158015612829573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061284d9190613e21565b505b8084101561298f578061286285846123c9565b1115612875576128728185612630565b91505b6018548210156128845761298f565b601a546009546040517fa415bcad0000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263a415bcad926128db9291169086906002906000903090600401614164565b600060405180830381600087803b1580156128f557600080fd5b505af1158015612909573d6000803e3d6000fd5b5050601a5460095460405163617ba03760e01b81526001600160a01b03928316945063617ba0379350612949929091169086903090600090600401614116565b600060405180830381600087803b15801561296357600080fd5b505af1158015612977573d6000803e3d6000fd5b505050506129836124bd565b9195509350915061284f565b600954601a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b3926129c6929116906000906004016140c0565b602060405180830381600087803b1580156129e057600080fd5b505af11580156129f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb09190613e21565b60008184841115612a3c5760405162461bcd60e51b81526004016108c49190614287565b505050900390565b6001600160a01b038216612a6a5760405162461bcd60e51b81526004016108c490614876565b612aa7816040518060600160405280602e8152602001614b9e602e91396001600160a01b0386166000908152600460205260409020549190612a18565b6001600160a01b038085166000908152600460205260408082209390935590841681522054612ad690826123c9565b6001600160a01b0380841660008181526004602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061249c908590614200565b612b6581604051806060016040528060278152602001614b77602791396001600160a01b0385166000908152600460205260409020549190612a18565b60046000846001600160a01b03166001600160a01b0316815260200190815260200160002081905550612bb581604051806060016040528060278152602001614b21602791396002549190612a18565b6002556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612bf6908590614200565b60405180910390a35050565b6000612c0d82612672565b6000612c176124bd565b50509050808311612c285782612c2c565b6000195b601a54600954604051631a4ca37b60e21b81529295506000926001600160a01b03928316926369328dec92612c6a92911690889030906004016140f3565b602060405180830381600087803b158015612c8457600080fd5b505af1158015612c98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cbc9190613ea3565b90506123ee612784565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90612cf490859085906004016140c0565b602060405180830381600087803b158015612d0e57600080fd5b505af1158015612d22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d469190613e21565b612d625760405162461bcd60e51b81526004016108c49061429a565b505050565b60075415612da3573360009081526008602052604090205460ff161515600114612da35760405162461bcd60e51b81526004016108c490614420565b600e5460ff161515600114612dca5760405162461bcd60e51b81526004016108c4906145cb565b600d5415612df4576000612ddc61193e565b9050600d54811115612df257612df2600161323a565b505b6009546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906323b872dd90612e419033903090869060040161405b565b602060405180830381600087803b158015612e5b57600080fd5b505af1158015612e6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e939190613e21565b612eaf5760405162461bcd60e51b81526004016108c49061499e565b612ec182612ebc83611ec9565b613487565b612eca81613509565b816001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c82604051612f039190614200565b60405180910390a25050565b600a546001600160a01b03838116911614612f5957600a54612f3d90829084906001600160a01b0316612178565b612f595760405162461bcd60e51b81526004016108c4906142f7565b6001600160a01b03808316600081815260126020526040812080549385166001600160a01b03199485161790556013805460018181018355919092527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0909091018054909316909117909155601454612fd0916123c9565b6014556040517f916e172c080569186aa7ea048268267257cf7cc49505908863f747bca8620f809061112990849084906140d9565b3390565b60008261301857506000610854565b8282028284828161302557fe5b04146123ee5760405162461bcd60e51b81526004016108c4906147ad565b60006123ee83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613627565b600080613092858561365e565b509050600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156130d157600080fd5b505afa1580156130e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131099190613e3d565b5091509150866001600160a01b0316836001600160a01b03161461312957905b61315488836dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff1661368f565b98975050505050505050565b600061316a611fe0565b8560405160200161317c929190614011565b6040516020818303038152906040528051906020012090506000600182868686604051600081526020016040526040516131b99493929190614269565b6020604051602081039080840390855afa1580156131db573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906132115750866001600160a01b0316816001600160a01b0316145b61322d5760405162461bcd60e51b81526004016108c4906144da565b50505050505050565b4690565b60408051600280825260608083018452926020830190803683375050601c5482519293506001600160a01b03169183915060009061327457fe5b6001600160a01b039283166020918202929092010152601d5482519116908290600190811061329f57fe5b6001600160a01b0392831660209182029290920101526019546040517fbb492bf500000000000000000000000000000000000000000000000000000000815291169063bb492bf5906132f79084903090600401614198565b600060405180830381600087803b15801561331157600080fd5b505af1158015613325573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261334d9190810190613d42565b505060006133596136d7565b90508261338257600c548110156133825760405162461bcd60e51b81526004016108c490614941565b600061339f6127106119226011548561300990919063ffffffff16565b905080156133c457600a54600b546133c4916001600160a01b03908116911683612cc6565b60006133e1612710611922600f548661300990919063ffffffff16565b9050801561340057600a54613400906001600160a01b03163383612cc6565b6000613432613413836126228787612630565b600a54600954601b546001600160a01b03928316929182169116613920565b905061343d81613509565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef234613466610f6e565b600254604051613477929190614a67565b60405180910390a1505050505050565b60025461349490826123c9565b6002556001600160a01b0382166000908152600460205260409020546134ba90826123c9565b6001600160a01b0383166000818152600460205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90612bf6908590614200565b600081116135295760405162461bcd60e51b81526004016108c49061456e565b600954601a5460405163095ea7b360e01b81526001600160a01b039283169263095ea7b39261355f9291169085906004016140c0565b602060405180830381600087803b15801561357957600080fd5b505af115801561358d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b19190613e21565b50601a5460095460405163617ba03760e01b81526001600160a01b039283169263617ba037926135ed9291169085903090600090600401614116565b600060405180830381600087803b15801561360757600080fd5b505af115801561361b573d6000803e3d6000fd5b505050506118ee612784565b600081836136485760405162461bcd60e51b81526004016108c49190614287565b50600083858161365457fe5b0495945050505050565b600080826001600160a01b0316846001600160a01b031610613681578284613684565b83835b915091509250929050565b60008061369e856103e5613009565b905060006136ac8285613009565b905060006136c08361139a886103e8613009565b90506136cc8282613043565b979650505050505050565b6040516370a0823160e01b8152600090819073b31f66aa3c1e785363f0875a1b74e27b85fd66c7906370a0823190613713903090600401614047565b60206040518083038186803b15801561372b57600080fd5b505afa15801561373f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137639190613ea3565b60135490915060005b818110156139185760006013828154811061378357fe5b6000918252602090912001546001600160a01b0316905073b31f66aa3c1e785363f0875a1b74e27b85fd66c78114156138425747801561383b5773b31f66aa3c1e785363f0875a1b74e27b85fd66c76001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561380c57600080fd5b505af1158015613820573d6000803e3d6000fd5b505050505061383881866123c990919063ffffffff16565b94505b5050613910565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190613871903090600401614047565b60206040518083038186803b15801561388957600080fd5b505afa15801561389d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138c19190613ea3565b9050801561390d576001600160a01b0380831660009081526012602052604090205416801561390b57600a5461390890611c7a90849086906001600160a01b031685613920565b95505b505b50505b60010161376c565b509091505090565b60008061392d858561365e565b509050600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561396c57600080fd5b505afa158015613980573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a49190613e3d565b5091509150866001600160a01b0316836001600160a01b0316146139c457905b6000806139f28a856dffffffffffffffffffffffffffff16856dffffffffffffffffffffffffffff1661368f565b9050886001600160a01b0316856001600160a01b031614613a0f57905b613a1a89888c613ac1565b604080516000815260208101918290527f022c0d9f000000000000000000000000000000000000000000000000000000009091526001600160a01b0388169063022c0d9f90613a729085908590309060248101614a75565b600060405180830381600087803b158015613a8c57600080fd5b505af1158015613aa0573d6000803e3d6000fd5b50505050818111613ab15781613ab3565b805b9a9950505050505050505050565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90613aef90859085906004016140c0565b602060405180830381600087803b158015613b0957600080fd5b505af1158015613b1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b419190613e21565b612d625760405162461bcd60e51b81526004016108c490614a32565b600082601f830112613b6d578081fd5b8151613b80613b7b82614adf565b614abb565b818152915060208083019084810181840286018201871015613ba157600080fd5b60005b84811015613bc057815184529282019290820190600101613ba4565b505050505092915050565b80516dffffffffffffffffffffffffffff81168114610e0b57600080fd5b803560ff81168114610e0b57600080fd5b600060208284031215613c0b578081fd5b81356123ee81614afd565b600060208284031215613c27578081fd5b81516123ee81614afd565b60008060408385031215613c44578081fd5b8235613c4f81614afd565b91506020830135613c5f81614afd565b809150509250929050565b600080600060608486031215613c7e578081fd5b8335613c8981614afd565b92506020840135613c9981614afd565b929592945050506040919091013590565b600080600080600080600060e0888a031215613cc4578283fd5b8735613ccf81614afd565b96506020880135613cdf81614afd565b95506040880135945060608801359350613cfb60808901613be9565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215613d29578182fd5b8235613d3481614afd565b946020939093013593505050565b60008060408385031215613d54578182fd5b825167ffffffffffffffff80821115613d6b578384fd5b818501915085601f830112613d7e578384fd5b8151613d8c613b7b82614adf565b80828252602080830192508086018a828387028901011115613dac578889fd5b8896505b84871015613dd7578051613dc381614afd565b845260019690960195928101928101613db0565b508801519096509350505080821115613dee578283fd5b50613dfb85828601613b5d565b9150509250929050565b600060208284031215613e16578081fd5b81356123ee81614b12565b600060208284031215613e32578081fd5b81516123ee81614b12565b600080600060608486031215613e51578283fd5b613e5a84613bcb565b9250613e6860208501613bcb565b9150604084015163ffffffff81168114613e80578182fd5b809150509250925092565b600060208284031215613e9c578081fd5b5035919050565b600060208284031215613eb4578081fd5b5051919050565b60008060408385031215613ecd578182fd5b823591506020830135613c5f81614b12565b60008060008060808587031215613ef4578182fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a08688031215613f27578283fd5b8535945060208601359350613f3e60408701613be9565b94979396509394606081013594506080013592915050565b60008151808452815b81811015613f7b57602081850181015186830182015201613f5f565b81811115613f8c5782602083870101525b50601f01601f19169290920160200192915050565b6000808354600180821660008114613fc05760018114613fd757614006565b60ff198316865260028304607f1686019350614006565b600283048786526020808720875b83811015613ffe5781548a820152908501908201613fe5565b505050860193505b509195945050505050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b6001600160a01b03948516815260208101939093529216604082015261ffff909116606082015260800190565b6001600160a01b039390931683526020830191909152604082015260600190565b6001600160a01b0395861681526020810194909452604084019290925261ffff166060830152909116608082015260a00190565b604080825283519082018190526000906020906060840190828701845b828110156141da5781516001600160a01b0316845292840192908401906001016141b5565b5050506001600160a01b039490941692019190915250919050565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b6000602082526123ee6020830184613f56565b60208082526026908201527f416176655633537472617465677956313a3a5452414e534645525f46524f4d5f60408201527f4641494c45440000000000000000000000000000000000000000000000000000606082015260800190565b602080825260409082018190527f5661726961626c655265776172647353747261746567793a3a53776170207061908201527f697220646f6573206e6f7420636f6e7461696e2072657761726420746f6b656e606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201527f6464726573730000000000000000000000000000000000000000000000000000606082015260800190565b60208082526014908201527f59616b53747261746567793a3a6f6e6c79454f41000000000000000000000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252602e908201527f5065726d697373696f6e65643a3a6f6e6c79416c6c6f7765644465706f73697460408201527f732c206e6f7420616c6c6f776564000000000000000000000000000000000000606082015260800190565b60208082526034908201527f5065726d697373696f6e65643a3a72656d6f76654465706f7369746f722c206e60408201527f6f20616c6c6f776564206465706f7369746f7273000000000000000000000000606082015260800190565b60208082526024908201527f417263683a3a76616c69646174655369673a20696e76616c6964207369676e6160408201527f7475726500000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601c908201527f5065726d697373696f6e65643a3a616c6c6f774465706f7369746f7200000000604082015260600190565b60208082526025908201527f416176655633537472617465677956313a3a5f7374616b654465706f7369745460408201527f6f6b656e73000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601a908201527f416176655633537472617465677956313a3a5f6465706f736974000000000000604082015260600190565b6020808252600f908201527f7065726d69743a3a657870697265640000000000000000000000000000000000604082015260600190565b60208082526025908201527f416176655633537472617465677956313a3a7265736375654465706c6f79656460408201527f46756e6473000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602a908201527f5065726d697373696f6e65643a3a72656d6f76654465706f7369746f722c206e60408201527f6f7420616c6c6f77656400000000000000000000000000000000000000000000606082015260800190565b60208082526034908201527f5661726961626c655265776172647353747261746567793a3a5265776172642060408201527f746f2064656c657465206e6f7420666f756e6421000000000000000000000000606082015260800190565b60208082526028908201527f416176655633537472617465677956313a3a62656c6f77206d696e696d756d2060408201527f7769746864726177000000000000000000000000000000000000000000000000606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60408201527f7700000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601c908201527f5f617070726f76653a3a6f776e6572207a65726f206164647265737300000000604082015260600190565b60208082526034908201527f5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e7366657260408201527f20746f20746865207a65726f2061646472657373000000000000000000000000606082015260800190565b60208082526019908201527f736574416c6c6f77616e6365733a3a6465707265636174656400000000000000604082015260600190565b60208082526014908201527f59616b53747261746567793a3a6f6e6c79446576000000000000000000000000604082015260600190565b60208082526030908201527f5661726961626c655265776172647353747261746567793a3a5265696e76657360408201527f7420616d6f756e7420746f6f206c6f7700000000000000000000000000000000606082015260800190565b60208082526021908201527f416176655633537472617465677956313a3a7472616e73666572206661696c6560408201527f6400000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252601e908201527f5f617070726f76653a3a7370656e646572207a65726f20616464726573730000604082015260600190565b6020808252818101527f4465784c6962726172793a3a5452414e534645525f46524f4d5f4641494c4544604082015260600190565b918252602082015260400190565b60008582528460208301526001600160a01b038416604083015260806060830152614aa36080830184613f56565b9695505050505050565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715614ad757fe5b604052919050565b600067ffffffffffffffff821115614af357fe5b5060209081020190565b6001600160a01b03811681146118ee57600080fd5b80151581146118ee57600080fdfe5f6275726e3a206275726e20616d6f756e74206578636565647320746f74616c20737570706c797472616e7366657246726f6d3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655f6275726e3a206275726e20616d6f756e7420657863656564732066726f6d2062616c616e63655f7472616e73666572546f6b656e733a207472616e7366657220657863656564732066726f6d2062616c616e6365a2646970667358221220ed898c3da7b01b2110d777d041ada8f0b1501748cbb994fb3e167d68f2987d8164736f6c634300070300338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000929ec64c34a17401f460460d4b9390518e5b473e000000000000000000000000794a61358d6845594f94dc1db02a252b5b4814ad0000000000000000000000009702230a8ea53601f5cd2dc00fdbc13d4df4a8c7000000000000000000000000bb4646a764358ee93c2a9c4a147d5aded527ab7300000000000000000000000000000000000000000000000000000000000002600000000000000000000000006ab707aca953edaefbc4fd23ba73294241490620000000000000000000000000fb00ac187a8eb5afae4eace434f493eb62672df7000000000000000000000000dcedf06fd33e1d7b6eb4b309f779a0e9d3172e44000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002710000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000005af3107a40000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000025800000000000000000000000000000000000000000000000000000000000000c800000000000000000000000000000000000000000000000000000000000000145969656c642059616b3a204161766520555344540000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c70000000000000000000000000000000000000000000000000000000000000000