[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "address", "name": "_rewardDistribution", "type": "address" }, { "internalType": "address", "name": "_blizzChef", "type": "address" }, { "internalType": "address", "name": "_poolRewardToken", "type": "address" }, { "internalType": "address", "name": "_swapPairPoolReward", "type": "address" }, { "internalType": "address", "name": "_tokenDelegator", "type": "address" }, { "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 BlizzStrategyAvaxV1.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 BlizzStrategyAvaxV1.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": "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": "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": [], "name": "deposit", "outputs": [], "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "depositFor", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" } ], "name": "depositFor", "outputs": [], "stateMutability": "payable", "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": "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": [], "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": "rewardToken", "outputs": [ { "internalType": "contract IERC20", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "setAllowances", "outputs": [], "stateMutability": "nonpayable", "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" }, { "stateMutability": "payable", "type": "receive" } ]
60c060405260096080819052685969656c642059616b60b81b60a09081526200002c916000919062000874565b506040805180820190915260038082526216549560ea1b6020909201918252620000599160019162000874565b503480156200006757600080fd5b5060405162005819380380620058198339810160408190526200008a91620009af565b60006200009662000267565b600680546001600160a01b0319166001600160a01b03831690811790915560405191925090600090600080516020620057f9833981519152908290a35060016012558a51620000ed9060009060208e019062000874565b50601380546001600160a01b03808d166001600160a01b031992831617909255601480548c841690831617905560158054898416908316179055600a8054821673b31f66aa3c1e785363f0875a1b74e27b85fd66c7179055601c80548b8416908316179055601d8054928a16929091169190911790556200016e826200026b565b600b8054732d580f9cf2fb2d09bc411532988f2afda4e7beff6001600160a01b031991821617909155601a805482166001600160a01b0388811691909117909155601b8054909216908616179055620001c662000289565b8051620001d3906200040a565b6020810151620001e39062000492565b6040810151620001f39062000560565b606081015162000203906200061a565b6200020f6001620006d4565b6200021a836200077c565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef2346000806040516200024e92919062000b47565b60405180910390a1505050505050505050505062000c2b565b3390565b80516016556040810151601855602081015160175560600151601955565b6200029362000267565b6001600160a01b0316620002a662000836565b6001600160a01b031614620002d85760405162461bcd60e51b8152600401620002cf9062000bd2565b60405180910390fd5b60155460405163095ea7b360e01b815273b31f66aa3c1e785363f0875a1b74e27b85fd66c79163095ea7b39162000320916001600160a01b0316906000199060040162000b23565b602060405180830381600087803b1580156200033b57600080fd5b505af115801562000350573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037691906200098d565b50601a5460155460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392620003b1929116906000199060040162000b23565b602060405180830381600087803b158015620003cc57600080fd5b505af1158015620003e1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040791906200098d565b50565b6200041462000267565b6001600160a01b03166200042762000836565b6001600160a01b031614620004505760405162461bcd60e51b8152600401620002cf9062000bd2565b7f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef849901100600c54826040516200048592919062000b47565b60405180910390a1600c55565b6200049c62000267565b6001600160a01b0316620004af62000836565b6001600160a01b031614620004d85760405162461bcd60e51b8152600401620002cf9062000bd2565b61271062000512600f54620004fe601154856200084560201b6200216b1790919060201c565b6200084560201b6200216b1790919060201c565b11156200051e57600080fd5b7f3cc372f330f95ac9540626dc8a25f5bf21ba607215a5d58304cb804d446f104a601054826040516200055392919062000b47565b60405180910390a1601055565b6200056a62000267565b6001600160a01b03166200057d62000836565b6001600160a01b031614620005a65760405162461bcd60e51b8152600401620002cf9062000bd2565b612710620005cc600f54620004fe601054856200084560201b6200216b1790919060201c565b1115620005d857600080fd5b7f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d651726131601154826040516200060d92919062000b47565b60405180910390a1601155565b6200062462000267565b6001600160a01b03166200063762000836565b6001600160a01b031614620006605760405162461bcd60e51b8152600401620002cf9062000bd2565b61271062000686601154620004fe601054856200084560201b6200216b1790919060201c565b11156200069257600080fd5b7fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f2600f5482604051620006c792919062000b47565b60405180910390a1600f55565b620006de62000267565b6001600160a01b0316620006f162000836565b6001600160a01b0316146200071a5760405162461bcd60e51b8152600401620002cf9062000bd2565b600e5460ff16151581151514156200073157600080fd5b600e805460ff19168215151790556040517f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e85906200077190839062000b3c565b60405180910390a150565b6200078662000267565b6001600160a01b03166200079962000836565b6001600160a01b031614620007c25760405162461bcd60e51b8152600401620002cf9062000bd2565b6001600160a01b038116620007eb5760405162461bcd60e51b8152600401620002cf9062000b55565b6006546040516001600160a01b03808416921690600080516020620057f983398151915290600090a3600680546001600160a01b0319166001600160a01b0392909216919091179055565b6006546001600160a01b031690565b6000828201838110156200086d5760405162461bcd60e51b8152600401620002cf9062000b9b565b9392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620008b757805160ff1916838001178555620008e7565b82800160010185558215620008e7579182015b82811115620008e7578251825591602001919060010190620008ca565b50620008f5929150620008f9565b5090565b5b80821115620008f55760008155600101620008fa565b80516001600160a01b03811681146200092857600080fd5b919050565b6000608082840312156200093f578081fd5b604051608081016001600160401b03811182821017156200095c57fe5b8060405250809150825181526020830151602082015260408301516040820152606083015160608201525092915050565b6000602082840312156200099f578081fd5b815180151581146200086d578182fd5b60008060008060008060008060008060006102208c8e031215620009d1578687fd5b8b516001600160401b0380821115620009e8578889fd5b818e0191508e601f830112620009fc578889fd5b81518181111562000a0957fe5b62000a1e601f8201601f191660200162000c07565b91508082528f602082850101111562000a3557898afd5b895b8181101562000a555760208185018101518483018201520162000a37565b8181111562000a67578a602083850101525b5050809c50505062000a7c60208d0162000910565b995062000a8c60408d0162000910565b985062000a9c60608d0162000910565b975062000aac60808d0162000910565b965062000abc60a08d0162000910565b955062000acc60c08d0162000910565b945062000adc60e08d0162000910565b935062000aed6101008d0162000910565b925062000aff8d6101208e016200092d565b915062000b118d6101a08e016200092d565b90509295989b509295989b9093969950565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b918252602082015260400190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6040518181016001600160401b038111828210171562000c2357fe5b604052919050565b614bbe8062000c3b6000396000f3fe6080604052600436106103855760003560e01c80638da5cb5b116101d1578063c89039c511610102578063dd62ed3e116100a0578063ed24911d1161006f578063ed24911d146109a0578063f2fde38b146109b5578063f7c618c1146109d5578063fdb5a03e146109ea576103c8565b8063dd62ed3e14610920578063dd8ce4d614610940578063e21ac82514610960578063eab89a5a14610980576103c8565b8063d505accf116100dc578063d505accf146108c1578063da09c72c146108e1578063db8dd95c146108f6578063dbd9a4d41461090b576103c8565b8063c89039c514610884578063cff1b6ef14610899578063d0e30db0146108b9576103c8565b8063aa67c9191161016f578063b6b55f2511610149578063b6b55f251461082a578063b9e57b8014610845578063bd079f551461085a578063c4b24a461461086f576103c8565b8063aa67c919146107e2578063ac0d31ff146107f5578063b52a321f14610815576103c8565b806399729ec1116101ab57806399729ec11461076d5780639e4e73181461078d578063a8ae2b7c146107a2578063a9059cbb146107c2576103c8565b80638da5cb5b146107165780639291d5631461073857806395d89b4114610758576103c8565b80634a970be7116102b6578063789139bc11610254578063818372301161022357806381837230146106a15780638980f11f146106c15780638aff733d146106e15780638b73e606146106f6576103c8565b8063789139bc146106375780637ae267731461064c5780637d8820971461066c5780637ecebe0014610681576103c8565b80634ebb7916116102905780634ebb7916146105cd5780635ea682ea146105ed57806370a0823114610602578063715018a614610622576103c8565b80634a970be7146105725780634bebd1e71461058d5780634e77ace5146105ad576103c8565b806323b872dd1161032357806330adf81f116102fd57806330adf81f14610506578063313ce5671461051b5780633bdc6e721461053d578063483c2ef014610552576103c8565b806323b872dd146104a65780632e1a7d4d146104c65780632f4f21e2146104e6576103c8565b80630f23475d1161035f5780630f23475d1461044757806318160ddd1461045c57806320606b701461047157806322a0514114610486576103c8565b806306fdde03146103cd57806307677111146103f8578063095ea7b31461041a576103c8565b366103c8573373b31f66aa3c1e785363f0875a1b74e27b85fd66c7146103c65760405162461bcd60e51b81526004016103bd906146aa565b60405180910390fd5b005b600080fd5b3480156103d957600080fd5b506103e26109ff565b6040516103ef9190614330565b60405180910390f35b34801561040457600080fd5b5061040d610a8d565b6040516103ef91906142a9565b34801561042657600080fd5b5061043a610435366004613e2a565b610a93565b6040516103ef919061429e565b34801561045357600080fd5b5061040d610aaa565b34801561046857600080fd5b5061040d610aba565b34801561047d57600080fd5b5061040d610ac0565b34801561049257600080fd5b506103c66104a1366004613fe6565b610ae4565b3480156104b257600080fd5b5061043a6104c1366004613d7d565b610b6a565b3480156104d257600080fd5b506103c66104e1366004613f92565b610c51565b3480156104f257600080fd5b506103c6610501366004613e2a565b6103c8565b34801561051257600080fd5b5061040d610d86565b34801561052757600080fd5b50610530610daa565b6040516103ef9190614aac565b34801561054957600080fd5b5061040d610daf565b34801561055e57600080fd5b5061043a61056d366004613d29565b610db5565b34801561057e57600080fd5b506103c6610501366004614017565b34801561059957600080fd5b506103c66105a8366004613d29565b610dca565b3480156105b957600080fd5b506103c66105c8366004613e55565b610eae565b3480156105d957600080fd5b506103c66105e8366004613f92565b610f4c565b3480156105f957600080fd5b5061040d610ff8565b34801561060e57600080fd5b5061040d61061d366004613d29565b610ffe565b34801561062e57600080fd5b506103c661101d565b34801561064357600080fd5b5061040d6110b3565b34801561065857600080fd5b506103c6610667366004613d45565b6110b9565b34801561067857600080fd5b5061040d611186565b34801561068d57600080fd5b5061040d61069c366004613d29565b6111aa565b3480156106ad57600080fd5b506103c66106bc366004613f92565b6111bc565b3480156106cd57600080fd5b506103c66106dc366004613e2a565b61123b565b3480156106ed57600080fd5b5061040d61134d565b34801561070257600080fd5b506103c6610711366004613d29565b611353565b34801561072257600080fd5b5061072b611459565b6040516103ef919061414e565b34801561074457600080fd5b506103c6610753366004613d29565b611468565b34801561076457600080fd5b506103e2611508565b34801561077957600080fd5b506103c6610788366004613f92565b611562565b34801561079957600080fd5b5061040d611610565b3480156107ae57600080fd5b506103c66107bd366004613f92565b611634565b3480156107ce57600080fd5b5061043a6107dd366004613e2a565b6116dc565b6103c66107f0366004613d29565b6116e9565b34801561080157600080fd5b506103c6610810366004613fc2565b61178e565b34801561082157600080fd5b5061043a611a33565b34801561083657600080fd5b506103c6610501366004613f92565b34801561085157600080fd5b5061040d611a3c565b34801561086657600080fd5b5061040d611a83565b34801561087b57600080fd5b5061040d611a89565b34801561089057600080fd5b5061072b611a9c565b3480156108a557600080fd5b506103c66108b4366004613f92565b611aab565b6103c6611b53565b3480156108cd57600080fd5b506103c66108dc366004613dbd565b611bf7565b3480156108ed57600080fd5b5061072b611cac565b34801561090257600080fd5b5061040d611cbb565b34801561091757600080fd5b506103c6611ced565b34801561092c57600080fd5b5061040d61093b366004613d45565b611e52565b34801561094c57600080fd5b5061040d61095b366004613f92565b611e7d565b34801561096c57600080fd5b506103c661097b366004613f92565b611eb7565b34801561098c57600080fd5b5061040d61099b366004613f92565b611f36565b3480156109ac57600080fd5b5061040d611f67565b3480156109c157600080fd5b506103c66109d0366004613d29565b611ffe565b3480156109e157600080fd5b5061072b6120cc565b3480156109f657600080fd5b506103c66120db565b6000805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a855780601f10610a5a57610100808354040283529160200191610a85565b820191906000526020600020905b815481529060010190602001808311610a6857829003601f168201915b505050505081565b60105481565b6000610aa0338484612197565b5060015b92915050565b6000610ab4611186565b90505b90565b60025481565b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81565b600b546001600160a01b03163314610b0e5760405162461bcd60e51b81526004016103bd9061492f565b610b3760405180608001604052808681526020018581526020018381526020018481525061224b565b600080610b42612269565b509092509050610b5a610b5583836123dc565b61241e565b610b6261261c565b505050505050565b6001600160a01b038316600081815260036020908152604080832033808552925282205491929091908214801590610ba457506000198114155b15610c3a576000610bd0856040518060600160405280602f8152602001614b05602f91398491906127c3565b6001600160a01b03808916600081815260036020908152604080832094891680845294909152908190208490555192935090917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610c309085906142a9565b60405180910390a3505b610c458686866127ef565b50600195945050505050565b60026012541415610c745760405162461bcd60e51b81526004016103bd9061499d565b60026012556000610c8482611f36565b90506019548111610ca75760405162461bcd60e51b81526004016103bd90614616565b610cb133836128d3565b6000610cbc826129ad565b90506000336001600160a01b031682604051610cd790610ab7565b60006040518083038185875af1925050503d8060008114610d14576040519150601f19603f3d011682016040523d82523d6000602084013e610d19565b606091505b5050905080610d3a5760405162461bcd60e51b81526004016103bd906149d4565b336001600160a01b03167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a942436483604051610d7391906142a9565b60405180910390a2505060016012555050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60075481565b60086020526000908152604090205460ff1681565b610dd2612b04565b6001600160a01b0316610de3611459565b6001600160a01b031614610e095760405162461bcd60e51b81526004016103bd90614809565b6001600160a01b03811660009081526008602052604090205460ff1615610e425760405162461bcd60e51b81526004016103bd90614673565b6001600160a01b0381166000908152600860205260409020805460ff19166001908117909155600754610e749161216b565b6007556040516001600160a01b038216907fc0a1035c16faf8d1304056d92c00edf028f87e62b8235a938f00af9e3c0312c590600090a250565b610eb6612b04565b6001600160a01b0316610ec7611459565b6001600160a01b031614610eed5760405162461bcd60e51b81526004016103bd90614809565b600e5460ff1615158115151415610f0357600080fd5b600e805460ff19168215151790556040517f7b014ed3854e7f5cb0218d58b3c6ae7d53a68bb0af2f67bfb029ea42c38a7e8590610f4190839061429e565b60405180910390a150565b610f54612b04565b6001600160a01b0316610f65611459565b6001600160a01b031614610f8b5760405162461bcd60e51b81526004016103bd90614809565b60008111610f9857600080fd5b604051339082156108fc029083906000818181858888f19350505050158015610fc5573d6000803e3d6000fd5b507f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28600082604051610f419291906141bc565b60115481565b6001600160a01b0381166000908152600460205260409020545b919050565b611025612b04565b6001600160a01b0316611036611459565b6001600160a01b03161461105c5760405162461bcd60e51b81526004016103bd90614809565b6006546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36006805473ffffffffffffffffffffffffffffffffffffffff19169055565b600d5481565b6110c1612b04565b6001600160a01b03166110d2611459565b6001600160a01b0316146110f85760405162461bcd60e51b81526004016103bd90614809565b60405163095ea7b360e01b81526001600160a01b0383169063095ea7b3906111279084906000906004016141bc565b602060405180830381600087803b15801561114157600080fd5b505af1158015611155573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111799190613e71565b61118257600080fd5b5050565b6000806000611193612269565b5090925090506111a382826123dc565b9250505090565b60056020526000908152604090205481565b6111c4612b04565b6001600160a01b03166111d5611459565b6001600160a01b0316146111fb5760405162461bcd60e51b81526004016103bd90614809565b7f481f79ac3a523b6d6db3c5a720e190e986d1cc1b41adcdf50f9caef849901100600c548260405161122e929190614a66565b60405180910390a1600c55565b611243612b04565b6001600160a01b0316611254611459565b6001600160a01b03161461127a5760405162461bcd60e51b81526004016103bd90614809565b6000811161128757600080fd5b60405163a9059cbb60e01b81526001600160a01b0383169063a9059cbb906112b590339085906004016141bc565b602060405180830381600087803b1580156112cf57600080fd5b505af11580156112e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113079190613e71565b61131057600080fd5b7f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa2882826040516113419291906141bc565b60405180910390a15050565b600f5481565b61135b612b04565b6001600160a01b031661136c611459565b6001600160a01b0316146113925760405162461bcd60e51b81526004016103bd90614809565b6000600754116113b45760405162461bcd60e51b81526004016103bd9061455c565b6001600160a01b03811660009081526008602052604090205460ff1615156001146113f15760405162461bcd60e51b81526004016103bd90614718565b6001600160a01b0381166000908152600860205260409020805460ff1916905560075461141f9060016123dc565b6007556040516001600160a01b038216907f0e86f6608b536e5339a25b65ff531f5ea91e1313d056ecd4752b35cbd16137d490600090a250565b6006546001600160a01b031690565b600b546001600160a01b031633146114925760405162461bcd60e51b81526004016103bd9061492f565b600b546040517fa8e91499ed37682f43cffb045fcc7d379a91e8c9a14e6321877ee34dee564c00916114d1916001600160a01b039091169084906141d5565b60405180910390a1600b805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b60018054604080516020600284861615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015610a855780601f10610a5a57610100808354040283529160200191610a85565b61156a612b04565b6001600160a01b031661157b611459565b6001600160a01b0316146115a15760405162461bcd60e51b81526004016103bd90614809565b6127106115c5600f546115bf6010548561216b90919063ffffffff16565b9061216b565b11156115d057600080fd5b7f2a42303d002f0ba6cfe8259c91d4684443fb0b3de286ba74991175d65172613160115482604051611603929190614a66565b60405180910390a1601155565b7fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc681565b61163c612b04565b6001600160a01b031661164d611459565b6001600160a01b0316146116735760405162461bcd60e51b81526004016103bd90614809565b6127106116916011546115bf6010548561216b90919063ffffffff16565b111561169c57600080fd5b7fe7f97d51d307dc44045597c9978bec0f842e6bb40d19b9444084cfa30d9ed4f2600f54826040516116cf929190614a66565b60405180910390a1600f55565b6000610aa03384846127ef565b6002601254141561170c5760405162461bcd60e51b81526004016103bd9061499d565b600260128190555073b31f66aa3c1e785363f0875a1b74e27b85fd66c76001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b15801561176357600080fd5b505af1158015611777573d6000803e3d6000fd5b50505050506117868134612b08565b506001601255565b611796612b04565b6001600160a01b03166117a7611459565b6001600160a01b0316146117cd5760405162461bcd60e51b81526004016103bd90614809565b6040516370a0823160e01b815260009073b31f66aa3c1e785363f0875a1b74e27b85fd66c7906370a082319061180790309060040161414e565b60206040518083038186803b15801561181f57600080fd5b505afa158015611833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118579190613faa565b9050600080611864612269565b509092509050611877610b5583836123dc565b601554604051631a4ca37b60e21b81526001600160a01b03909116906369328dec906118c19073b31f66aa3c1e785363f0875a1b74e27b85fd66c7906000199030906004016141ef565b602060405180830381600087803b1580156118db57600080fd5b505af11580156118ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119139190613faa565b506040516370a0823160e01b815260009073b31f66aa3c1e785363f0875a1b74e27b85fd66c7906370a082319061194e90309060040161414e565b60206040518083038186803b15801561196657600080fd5b505afa15801561197a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199e9190613faa565b9050856119ab82866123dc565b10156119c95760405162461bcd60e51b81526004016103bd9061483e565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef2346119f2611186565b600254604051611a03929190614a66565b60405180910390a1600e5460ff1615156001148015611a2457506001851515145b15610b6257610b626000610eae565b600e5460ff1681565b600080611a47611a89565b9050600c548110611a7b57611a73612710611a6d600f5484612bff90919063ffffffff16565b90612c39565b915050610ab7565b600091505090565b600c5481565b600080611a94612c7b565b935050505090565b6009546001600160a01b031681565b611ab3612b04565b6001600160a01b0316611ac4611459565b6001600160a01b031614611aea5760405162461bcd60e51b81526004016103bd90614809565b612710611b08600f546115bf6011548561216b90919063ffffffff16565b1115611b1357600080fd5b7f3cc372f330f95ac9540626dc8a25f5bf21ba607215a5d58304cb804d446f104a60105482604051611b46929190614a66565b60405180910390a1601055565b60026012541415611b765760405162461bcd60e51b81526004016103bd9061499d565b600260128190555073b31f66aa3c1e785363f0875a1b74e27b85fd66c76001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611bcd57600080fd5b505af1158015611be1573d6000803e3d6000fd5b5050505050611bf03334612b08565b6001601255565b42841015611c175760405162461bcd60e51b81526004016103bd906146e1565b6001600160a01b03871660009081526005602090815260408083208054600181019091559051611c72927f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9928c928c928c92918c91016142b2565b604051602081830303815290604052805190602001209050611c978882868686613220565b611ca2888888612197565b5050505050505050565b600b546001600160a01b031681565b6000806000611cc8612269565b5090925090506111a3611cdb83836123dc565b611a6d84670de0b6b3a7640000612bff565b611cf5612b04565b6001600160a01b0316611d06611459565b6001600160a01b031614611d2c5760405162461bcd60e51b81526004016103bd90614809565b60155460405163095ea7b360e01b815273b31f66aa3c1e785363f0875a1b74e27b85fd66c79163095ea7b391611d72916001600160a01b031690600019906004016141bc565b602060405180830381600087803b158015611d8c57600080fd5b505af1158015611da0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dc49190613e71565b50601a5460155460405163095ea7b360e01b81526001600160a01b039283169263095ea7b392611dfd92911690600019906004016141bc565b602060405180830381600087803b158015611e1757600080fd5b505af1158015611e2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e4f9190613e71565b50565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b6000611e93611e8a611186565b60025490612bff565b611e9e575080611018565b610aa4611ea9611186565b600254611a6d908590612bff565b611ebf612b04565b6001600160a01b0316611ed0611459565b6001600160a01b031614611ef65760405162461bcd60e51b81526004016103bd90614809565b7fa5dae50539d56dfe1fb5273d883b0c39bc76750a25d036fc5fbd09ad8fd5f57f600d5482604051611f29929190614a66565b60405180910390a1600d55565b6000611f43611e8a611186565b611f4f57506000611018565b610aa4600254611a6d611f60611186565b8590612bff565b60007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60001b6000604051611f9c91906140a8565b6040519081900390207fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6611fce6132f6565b30604051602001611fe39594939291906142e6565b60405160208183030381529060405280519060200120905090565b612006612b04565b6001600160a01b0316612017611459565b6001600160a01b03161461203d5760405162461bcd60e51b81526004016103bd90614809565b6001600160a01b0381166120635760405162461bcd60e51b81526004016103bd906143d7565b6006546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a36006805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0392909216919091179055565b600a546001600160a01b031681565b3233146120fa5760405162461bcd60e51b81526004016103bd90614434565b6002601254141561211d5760405162461bcd60e51b81526004016103bd9061499d565b60026012556000808061212e612c7b565b925092509250600c548110156121565760405162461bcd60e51b81526004016103bd90614775565b6121618383836132fa565b5050600160125550565b6000828201838110156121905760405162461bcd60e51b81526004016103bd9061446b565b9392505050565b6001600160a01b0383166121bd5760405162461bcd60e51b81526004016103bd9061489b565b6001600160a01b0382166121e35760405162461bcd60e51b81526004016103bd90614966565b6001600160a01b0380841660008181526003602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061223e9085906142a9565b60405180910390a3505050565b80516016556040810151601855602081015160175560600151601955565b601a546040516370a0823160e01b8152600091829182916001600160a01b0316906370a082319061229e90309060040161414e565b60206040518083038186803b1580156122b657600080fd5b505afa1580156122ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ee9190613faa565b601b546040516370a0823160e01b81529194506001600160a01b0316906370a082319061231f90309060040161414e565b60206040518083038186803b15801561233757600080fd5b505afa15801561234b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061236f9190613faa565b9150600090508161239d601654611a6d6123966018546016546123dc90919063ffffffff16565b8790612bff565b11156123d7576123d4826123ce601654611a6d6123c76018546016546123dc90919063ffffffff16565b8890612bff565b906123dc565b90505b909192565b600061219083836040518060400160405280601f81526020017f536166654d6174683a207375627472616374696f6e20756e646572666c6f77008152506127c3565b600080600061242b612269565b919450925090506000612479612445866123ce87876123dc565b6123ce601854611a6d6124656017546016546123dc90919063ffffffff16565b6124738b6123ce8c8c6123dc565b90612bff565b9050600061248784836123dc565b90505b8015610b6257828481111561249c5750835b601554604051631a4ca37b60e21b81526001600160a01b03909116906369328dec906124e49073b31f66aa3c1e785363f0875a1b74e27b85fd66c790859030906004016141ef565b602060405180830381600087803b1580156124fe57600080fd5b505af1158015612512573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125369190613faa565b506015546040517f573ade810000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063573ade819061259b9073b31f66aa3c1e785363f0875a1b74e27b85fd66c7908590600290309060040161423f565b602060405180830381600087803b1580156125b557600080fd5b505af11580156125c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125ed9190613faa565b506125f6612269565b9197509550935084831061260a5750610b62565b61261485846123dc565b91505061248a565b6000806000612629612269565b925092509250600061265b601854611a6d6126516017546016546123dc90919063ffffffff16565b61247388886123dc565b90505b808410156127bd5780612671858461216b565b11156126845761268181856123dc565b91505b601954821015612693576127bd565b6015546040517fa415bcad0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a415bcad906126fa9073b31f66aa3c1e785363f0875a1b74e27b85fd66c7908690600290600090309060040161426a565b600060405180830381600087803b15801561271457600080fd5b505af1158015612728573d6000803e3d6000fd5b505060155460405163e8eda9df60e01b81526001600160a01b03909116925063e8eda9df91506127779073b31f66aa3c1e785363f0875a1b74e27b85fd66c79086903090600090600401614212565b600060405180830381600087803b15801561279157600080fd5b505af11580156127a5573d6000803e3d6000fd5b505050506127b1612269565b9195509350915061265e565b50505050565b600081848411156127e75760405162461bcd60e51b81526004016103bd9190614330565b505050900390565b6001600160a01b0382166128155760405162461bcd60e51b81526004016103bd906148d2565b612852816040518060600160405280602e8152602001614b5b602e91396001600160a01b03861660009081526004602052604090205491906127c3565b6001600160a01b038085166000908152600460205260408082209390935590841681522054612881908261216b565b6001600160a01b0380841660008181526004602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061223e9085906142a9565b61291081604051806060016040528060278152602001614b34602791396001600160a01b03851660009081526004602052604090205491906127c3565b60046000846001600160a01b03166001600160a01b031681526020019081526020016000208190555061296081604051806060016040528060278152602001614ade6027913960025491906127c3565b6002556040516000906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906129a19085906142a9565b60405180910390a35050565b60006129b88261241e565b60006129c2612269565b505090508083116129d357826129d7565b6000195b601554604051631a4ca37b60e21b81529194506000916001600160a01b03909116906369328dec90612a259073b31f66aa3c1e785363f0875a1b74e27b85fd66c790889030906004016141ef565b602060405180830381600087803b158015612a3f57600080fd5b505af1158015612a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a779190613faa565b6040517f2e1a7d4d00000000000000000000000000000000000000000000000000000000815290915073b31f66aa3c1e785363f0875a1b74e27b85fd66c790632e1a7d4d90612aca9084906004016142a9565b600060405180830381600087803b158015612ae457600080fd5b505af1158015612af8573d6000803e3d6000fd5b5050505061219061261c565b3390565b60075415612b44573360009081526008602052604090205460ff161515600114612b445760405162461bcd60e51b81526004016103bd906144ff565b600e5460ff161515600114612b6b5760405162461bcd60e51b81526004016103bd90614343565b600d5415612b9f576000806000612b80612c7b565b925092509250600d54811115612b9b57612b9b8383836132fa565b5050505b612bb182612bac83611e7d565b61354d565b612bba816135cf565b816001600160a01b03167fe1fffcc4923d04b559f4d29a8bfc6cda04eb5b0d3c460751c2402c5c5cc9109c82604051612bf391906142a9565b60405180910390a25050565b600082612c0e57506000610aa4565b82820282848281612c1b57fe5b04146121905760405162461bcd60e51b81526004016103bd906147ac565b600061219083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613674565b6014546040517fbfccff450000000000000000000000000000000000000000000000000000000081526000918291829182916001600160a01b039091169063bfccff4590612ccd90309060040161414e565b60206040518083038186803b158015612ce557600080fd5b505afa158015612cf9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1d9190613faa565b6040805160028082526060808301845293945090916020830190803683375050601a5482519293506001600160a01b031691839150600090612d5b57fe5b6001600160a01b039283166020918202929092010152601b54825191169082906001908110612d8657fe5b60200260200101906001600160a01b031690816001600160a01b031681525050612dae613ca8565b60145482516001600160a01b0390911690639a7b5f11908490600090612dd057fe5b60200260200101516040518263ffffffff1660e01b8152600401612df4919061414e565b60a06040518083038186803b158015612e0c57600080fd5b505afa158015612e20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e449190613e8d565b9050612e4f816136ab565b9050612e59613ce0565b60145483516001600160a01b0390911690630f208beb908590600090612e7b57fe5b6020026020010151306040518363ffffffff1660e01b8152600401612ea19291906141d5565b604080518083038186803b158015612eb857600080fd5b505afa158015612ecc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ef09190613efc565b90506000612f1864e8d4a51000611a6d85606001518560000151612bff90919063ffffffff16565b9050612f3b612f348360200151836123dc90919063ffffffff16565b869061216b565b60145485519196506001600160a01b031690639a7b5f119086906001908110612f6057fe5b60200260200101516040518263ffffffff1660e01b8152600401612f84919061414e565b60a06040518083038186803b158015612f9c57600080fd5b505afa158015612fb0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fd49190613e8d565b9250612fdf836136ab565b60145485519194506001600160a01b031690630f208beb908690600190811061300457fe5b6020026020010151306040518363ffffffff1660e01b815260040161302a9291906141d5565b604080518083038186803b15801561304157600080fd5b505afa158015613055573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130799190613efc565b915061309f64e8d4a51000611a6d85606001518560000151612bff90919063ffffffff16565b90506130bb612f348360200151836123dc90919063ffffffff16565b94506130c8856002612c39565b601c546040516370a0823160e01b815291965061314f916001600160a01b03909116906370a08231906130ff90309060040161414e565b60206040518083038186803b15801561311757600080fd5b505afa15801561312b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f349190613faa565b601c54600a54601d5492975060009261317a9289926001600160a01b0391821692908216911661384e565b600a546040516370a0823160e01b81529192506000916001600160a01b03909116906370a08231906131b090309060040161414e565b60206040518083038186803b1580156131c857600080fd5b505afa1580156131dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132009190613faa565b9050600061320e838361216b565b979b919a509698509650505050505050565b600061322a611f67565b8560405160200161323c929190614118565b6040516020818303038152906040528051906020012090506000600182868686604051600081526020016040526040516132799493929190614312565b6020604051602081039080840390855afa15801561329b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906132d15750866001600160a01b0316816001600160a01b0316145b6132ed5760405162461bcd60e51b81526004016103bd906145b9565b50505050505050565b4690565b60408051600280825260608083018452926020830190803683375050601a5482519293506001600160a01b03169183915060009061333457fe5b6001600160a01b039283166020918202929092010152601b5482519116908290600190811061335f57fe5b6001600160a01b0392831660209182029290920101526014546040517f8e2eba09000000000000000000000000000000000000000000000000000000008152911690638e2eba09906133b79030908590600401614162565b600060405180830381600087803b1580156133d157600080fd5b505af11580156133e5573d6000803e3d6000fd5b50506013546040517fe6c91a150000000000000000000000000000000000000000000000000000000081526001600160a01b03909116925063e6c91a1591506134339060019060040161429e565b600060405180830381600087803b15801561344d57600080fd5b505af1158015613461573d6000803e3d6000fd5b5050505061346e84613929565b50600061348c612710611a6d60115486612bff90919063ffffffff16565b905080156134b157600a54600b546134b1916001600160a01b03908116911683613951565b60006134ce612710611a6d600f5487612bff90919063ffffffff16565b905080156134ed57600a546134ed906001600160a01b03163383613951565b6135036134fe826123ce87866123dc565b6135cf565b7fc7606d21ac05cd309191543e409f0845c016120563783d70e4f41419dc0ef23461352c611186565b60025460405161353d929190614a66565b60405180910390a1505050505050565b60025461355a908261216b565b6002556001600160a01b038216600090815260046020526040902054613580908261216b565b6001600160a01b0383166000818152600460205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906129a19085906142a9565b600081116135ef5760405162461bcd60e51b81526004016103bd906144a2565b60155460405163e8eda9df60e01b81526001600160a01b039091169063e8eda9df9061363a9073b31f66aa3c1e785363f0875a1b74e27b85fd66c79085903090600090600401614212565b600060405180830381600087803b15801561365457600080fd5b505af1158015613668573d6000803e3d6000fd5b50505050611e4f61261c565b600081836136955760405162461bcd60e51b81526004016103bd9190614330565b5060008385816136a157fe5b0495945050505050565b6136b3613ca8565b816040015142116136c5575080611018565b8151806136da57505042604082015280611018565b60006136f38460400151426123dc90919063ffffffff16565b9050600061381d601460009054906101000a90046001600160a01b03166001600160a01b03166317caf6f16040518163ffffffff1660e01b815260040160206040518083038186803b15801561374857600080fd5b505afa15801561375c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137809190613faa565b602080880151601454604080517feacdaabc0000000000000000000000000000000000000000000000000000000081529051611a6d94612473936001600160a01b03169263eacdaabc9260048083019392829003018186803b1580156137e557600080fd5b505afa1580156137f9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123969190613faa565b905061384061383584611a6d8464e8d4a51000612bff565b60608701519061216b565b606086015250929392505050565b60008061385b85856139f2565b509050600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561389a57600080fd5b505afa1580156138ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138d29190613f44565b5091509150866001600160a01b0316836001600160a01b0316146138f257905b61391d88836dffffffffffffffffffffffffffff16836dffffffffffffffffffffffffffff16613a23565b98975050505050505050565b601c54600a54601d54600092610aa49285926001600160a01b03928316929182169116613a6b565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb9061397f90859085906004016141bc565b602060405180830381600087803b15801561399957600080fd5b505af11580156139ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139d19190613e71565b6139ed5760405162461bcd60e51b81526004016103bd9061437a565b505050565b600080826001600160a01b0316846001600160a01b031610613a15578284613a18565b83835b915091509250929050565b600080613a32856103e5612bff565b90506000613a408285612bff565b90506000613a54836115bf886103e8612bff565b9050613a608282612c39565b979650505050505050565b600080613a7885856139f2565b509050600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613ab757600080fd5b505afa158015613acb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613aef9190613f44565b5091509150866001600160a01b0316836001600160a01b031614613b0f57905b600080613b3d8a856dffffffffffffffffffffffffffff16856dffffffffffffffffffffffffffff16613a23565b9050886001600160a01b0316856001600160a01b031614613b5a57905b613b6589888c613c0c565b604080516000815260208101918290527f022c0d9f000000000000000000000000000000000000000000000000000000009091526001600160a01b0388169063022c0d9f90613bbd9085908590309060248101614a74565b600060405180830381600087803b158015613bd757600080fd5b505af1158015613beb573d6000803e3d6000fd5b50505050818111613bfc5781613bfe565b805b9a9950505050505050505050565b60405163a9059cbb60e01b81526001600160a01b0384169063a9059cbb90613c3a90859085906004016141bc565b602060405180830381600087803b158015613c5457600080fd5b505af1158015613c68573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c8c9190613e71565b6139ed5760405162461bcd60e51b81526004016103bd90614a31565b6040518060a001604052806000815260200160008152602001600081526020016000815260200160006001600160a01b031681525090565b604051806040016040528060008152602001600081525090565b80516dffffffffffffffffffffffffffff8116811461101857600080fd5b803560ff8116811461101857600080fd5b600060208284031215613d3a578081fd5b813561219081614aba565b60008060408385031215613d57578081fd5b8235613d6281614aba565b91506020830135613d7281614aba565b809150509250929050565b600080600060608486031215613d91578081fd5b8335613d9c81614aba565b92506020840135613dac81614aba565b929592945050506040919091013590565b600080600080600080600060e0888a031215613dd7578283fd5b8735613de281614aba565b96506020880135613df281614aba565b95506040880135945060608801359350613e0e60808901613d18565b925060a0880135915060c0880135905092959891949750929550565b60008060408385031215613e3c578182fd5b8235613e4781614aba565b946020939093013593505050565b600060208284031215613e66578081fd5b813561219081614acf565b600060208284031215613e82578081fd5b815161219081614acf565b600060a08284031215613e9e578081fd5b60405160a0810181811067ffffffffffffffff82111715613ebb57fe5b8060405250825181526020830151602082015260408301516040820152606083015160608201526080830151613ef081614aba565b60808201529392505050565b600060408284031215613f0d578081fd5b6040516040810181811067ffffffffffffffff82111715613f2a57fe5b604052825181526020928301519281019290925250919050565b600080600060608486031215613f58578283fd5b613f6184613cfa565b9250613f6f60208501613cfa565b9150604084015163ffffffff81168114613f87578182fd5b809150509250925092565b600060208284031215613fa3578081fd5b5035919050565b600060208284031215613fbb578081fd5b5051919050565b60008060408385031215613fd4578182fd5b823591506020830135613d7281614acf565b60008060008060808587031215613ffb578182fd5b5050823594602084013594506040840135936060013592509050565b600080600080600060a0868803121561402e578283fd5b853594506020860135935061404560408701613d18565b94979396509394606081013594506080013592915050565b60008151808452815b8181101561408257602081850181015186830182015201614066565b818111156140935782602083870101525b50601f01601f19169290920160200192915050565b60008083546001808216600081146140c757600181146140de5761410d565b60ff198316865260028304607f168601935061410d565b600283048786526020808720875b838110156141055781548a8201529085019082016140ec565b505050860193505b509195945050505050565b7f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6000604082016001600160a01b03808616845260206040818601528286518085526060870191508288019450855b818110156141ae578551851683529483019491830191600101614190565b509098975050505050505050565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b6001600160a01b03948516815260208101939093529216604082015261ffff909116606082015260800190565b6001600160a01b03948516815260208101939093526040830191909152909116606082015260800190565b6001600160a01b0395861681526020810194909452604084019290925261ffff166060830152909116608082015260a00190565b901515815260200190565b90815260200190565b9586526001600160a01b0394851660208701529290931660408501526060840152608083019190915260a082015260c00190565b9485526020850193909352604084019190915260608301526001600160a01b0316608082015260a00190565b93845260ff9290921660208401526040830152606082015260800190565b600060208252612190602083018461405d565b6020808252601d908201527f426c697a7a53747261746567794176617856313a3a5f6465706f736974000000604082015260600190565b60208082526029908201527f426c697a7a53747261746567794176617856313a3a5452414e534645525f465260408201527f4f4d5f4641494c45440000000000000000000000000000000000000000000000606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201527f6464726573730000000000000000000000000000000000000000000000000000606082015260800190565b60208082526014908201527f59616b53747261746567793a3a6f6e6c79454f41000000000000000000000000604082015260600190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526028908201527f426c697a7a53747261746567794176617856313a3a5f7374616b654465706f7360408201527f6974546f6b656e73000000000000000000000000000000000000000000000000606082015260800190565b6020808252602e908201527f5065726d697373696f6e65643a3a6f6e6c79416c6c6f7765644465706f73697460408201527f732c206e6f7420616c6c6f776564000000000000000000000000000000000000606082015260800190565b60208082526034908201527f5065726d697373696f6e65643a3a72656d6f76654465706f7369746f722c206e60408201527f6f20616c6c6f776564206465706f7369746f7273000000000000000000000000606082015260800190565b60208082526024908201527f417263683a3a76616c69646174655369673a20696e76616c6964207369676e6160408201527f7475726500000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252602b908201527f426c697a7a53747261746567794176617856313a3a62656c6f77206d696e696d60408201527f756d207769746864726177000000000000000000000000000000000000000000606082015260800190565b6020808252601c908201527f5065726d697373696f6e65643a3a616c6c6f774465706f7369746f7200000000604082015260600190565b6020808252600b908201527f6e6f7420616c6c6f776564000000000000000000000000000000000000000000604082015260600190565b6020808252600f908201527f7065726d69743a3a657870697265640000000000000000000000000000000000604082015260600190565b6020808252602a908201527f5065726d697373696f6e65643a3a72656d6f76654465706f7369746f722c206e60408201527f6f7420616c6c6f77656400000000000000000000000000000000000000000000606082015260800190565b6020808252601d908201527f426c697a7a53747261746567794176617856313a3a7265696e76657374000000604082015260600190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60408201527f7700000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f426c697a7a53747261746567794176617856313a3a7265736375654465706c6f60408201527f79656446756e6473000000000000000000000000000000000000000000000000606082015260800190565b6020808252601c908201527f5f617070726f76653a3a6f776e6572207a65726f206164647265737300000000604082015260600190565b60208082526034908201527f5f7472616e73666572546f6b656e733a2063616e6e6f74207472616e7366657260408201527f20746f20746865207a65726f2061646472657373000000000000000000000000606082015260800190565b60208082526014908201527f59616b53747261746567793a3a6f6e6c79446576000000000000000000000000604082015260600190565b6020808252601e908201527f5f617070726f76653a3a7370656e646572207a65726f20616464726573730000604082015260600190565b6020808252601f908201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00604082015260600190565b60208082526024908201527f426c697a7a53747261746567794176617856313a3a7472616e7366657220666160408201527f696c656400000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252818101527f4465784c6962726172793a3a5452414e534645525f46524f4d5f4641494c4544604082015260600190565b918252602082015260400190565b60008582528460208301526001600160a01b038416604083015260806060830152614aa2608083018461405d565b9695505050505050565b60ff91909116815260200190565b6001600160a01b0381168114611e4f57600080fd5b8015158114611e4f57600080fdfe5f6275726e3a206275726e20616d6f756e74206578636565647320746f74616c20737570706c797472616e7366657246726f6d3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655f6275726e3a206275726e20616d6f756e7420657863656564732066726f6d2062616c616e63655f7472616e73666572546f6b656e733a207472616e7366657220657863656564732066726f6d2062616c616e6365a26469706673582212205449f34d56d21e225cd5d522da0fb46524171caa48e284e543244414f5369ee064736f6c634300070300338be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e00000000000000000000000000000000000000000000000000000000000000220000000000000000000000000a867c1aca4b5f1e0a66cf7b1fe33525d576088540000000000000000000000002d867ae30400fffad9bed8472c514c2d6b827f5f0000000000000000000000000f34919404a290e71fc6a510cb4a6acb8d764b24000000000000000000000000ac3f978714c613e768272c502a8912bc03dcf62400000000000000000000000070bbe4a294878a14cb3cdd9315f5eb490e346163000000000000000000000000b2ac04b71888e17aa2c5102cf3d0215467d7410000000000000000000000000085db3e9d6b12fb8140d202a5695a04b5c4c863cd0000000000000000000000008d36c5c6947adccd25ef49ea1aac2ceacfff0bd700000000000000000000000000000000000000000000000000000000000027100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000271000000000000000000000000000000000000000000000000000038d7ea4c6800000000000000000000000000000000000000000000000000000038d7ea4c68000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002bc000000000000000000000000000000000000000000000000000000000000006400000000000000000000000000000000000000000000000000000000000000155969656c642059616b3a20426c697a7a20415641580000000000000000000000