[ { "inputs": [ { "internalType": "string", "name": "_name", "type": "string" }, { "internalType": "string", "name": "_symbol", "type": "string" }, { "components": [ { "internalType": "address", "name": "partner", "type": "address" }, { "internalType": "bool", "name": "hasTransferTax", "type": "bool" }, { "internalType": "bool", "name": "blacklistTKNpTKNPoolV2", "type": "bool" } ], "internalType": "struct IDecentralizedIndex.Config", "name": "_config", "type": "tuple" }, { "components": [ { "internalType": "uint16", "name": "burn", "type": "uint16" }, { "internalType": "uint16", "name": "bond", "type": "uint16" }, { "internalType": "uint16", "name": "debond", "type": "uint16" }, { "internalType": "uint16", "name": "buy", "type": "uint16" }, { "internalType": "uint16", "name": "sell", "type": "uint16" }, { "internalType": "uint16", "name": "partner", "type": "uint16" } ], "internalType": "struct IDecentralizedIndex.Fees", "name": "_fees", "type": "tuple" }, { "internalType": "address[]", "name": "_tokens", "type": "address[]" }, { "internalType": "uint256[]", "name": "_weights", "type": "uint256[]" }, { "internalType": "address", "name": "_pairedLpToken", "type": "address" }, { "internalType": "address", "name": "_lpRewardsToken", "type": "address" }, { "internalType": "address", "name": "_dexHandler", "type": "address" }, { "internalType": "bool", "name": "_stakeRestriction", "type": "bool" } ], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [], "name": "InvalidShortString", "type": "error" }, { "inputs": [ { "internalType": "string", "name": "str", "type": "string" } ], "name": "StringTooLong", "type": "error" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "wallet", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountTokens", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountDAI", "type": "uint256" } ], "name": "AddLiquidity", "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": "wallet", "type": "address" }, { "indexed": true, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountTokensBonded", "type": "uint256" }, { "indexed": false, "internalType": "uint256", "name": "amountTokensMinted", "type": "uint256" } ], "name": "Bond", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "newIdx", "type": "address" }, { "indexed": true, "internalType": "address", "name": "wallet", "type": "address" } ], "name": "Create", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "wallet", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountDebonded", "type": "uint256" } ], "name": "Debond", "type": "event" }, { "anonymous": false, "inputs": [], "name": "EIP712DomainChanged", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "executor", "type": "address" }, { "indexed": true, "internalType": "address", "name": "recipient", "type": "address" }, { "indexed": false, "internalType": "address", "name": "token", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "FlashLoan", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "wallet", "type": "address" }, { "indexed": false, "internalType": "address", "name": "v2Pool", "type": "address" } ], "name": "Initialize", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "wallet", "type": "address" }, { "indexed": false, "internalType": "uint256", "name": "amountLiquidity", "type": "uint256" } ], "name": "RemoveLiquidity", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "wallet", "type": "address" }, { "indexed": false, "internalType": "address", "name": "newPartner", "type": "address" } ], "name": "SetPartner", "type": "event" }, { "anonymous": false, "inputs": [ { "indexed": true, "internalType": "address", "name": "wallet", "type": "address" }, { "indexed": false, "internalType": "uint16", "name": "newFee", "type": "uint16" } ], "name": "SetPartnerFee", "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" }, { "inputs": [], "name": "BOND_FEE", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEBOND_FEE", "outputs": [ { "internalType": "uint16", "name": "", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DEX_HANDLER", "outputs": [ { "internalType": "contract IDexAdapter", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "DOMAIN_SEPARATOR", "outputs": [ { "internalType": "bytes32", "name": "", "type": "bytes32" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "FLASH_FEE_AMOUNT_DAI", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "PAIRED_LP_TOKEN", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_idxLPTokens", "type": "uint256" }, { "internalType": "uint256", "name": "_pairedLPTokens", "type": "uint256" }, { "internalType": "uint256", "name": "_slippage", "type": "uint256" }, { "internalType": "uint256", "name": "_deadline", "type": "uint256" } ], "name": "addLiquidityV2", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" }, { "internalType": "address", "name": "spender", "type": "address" } ], "name": "allowance", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "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": [ { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "uint256", "name": "_amountMintMin", "type": "uint256" } ], "name": "bond", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "config", "outputs": [ { "internalType": "address", "name": "partner", "type": "address" }, { "internalType": "bool", "name": "hasTransferTax", "type": "bool" }, { "internalType": "bool", "name": "blacklistTKNpTKNPoolV2", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "created", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "address[]", "name": "", "type": "address[]" }, { "internalType": "uint8[]", "name": "", "type": "uint8[]" } ], "name": "debond", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "subtractedValue", "type": "uint256" } ], "name": "decreaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "eip712Domain", "outputs": [ { "internalType": "bytes1", "name": "fields", "type": "bytes1" }, { "internalType": "string", "name": "name", "type": "string" }, { "internalType": "string", "name": "version", "type": "string" }, { "internalType": "uint256", "name": "chainId", "type": "uint256" }, { "internalType": "address", "name": "verifyingContract", "type": "address" }, { "internalType": "bytes32", "name": "salt", "type": "bytes32" }, { "internalType": "uint256[]", "name": "extensions", "type": "uint256[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "fees", "outputs": [ { "internalType": "uint16", "name": "burn", "type": "uint16" }, { "internalType": "uint16", "name": "bond", "type": "uint16" }, { "internalType": "uint16", "name": "debond", "type": "uint16" }, { "internalType": "uint16", "name": "buy", "type": "uint16" }, { "internalType": "uint16", "name": "sell", "type": "uint16" }, { "internalType": "uint16", "name": "partner", "type": "uint16" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_recipient", "type": "address" }, { "internalType": "address", "name": "_token", "type": "address" }, { "internalType": "uint256", "name": "_amount", "type": "uint256" }, { "internalType": "bytes", "name": "_data", "type": "bytes" } ], "name": "flash", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "getAllAssets", "outputs": [ { "components": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "weighting", "type": "uint256" }, { "internalType": "uint256", "name": "basePriceUSDX96", "type": "uint256" }, { "internalType": "address", "name": "c1", "type": "address" }, { "internalType": "uint256", "name": "q1", "type": "uint256" } ], "internalType": "struct IDecentralizedIndex.IndexAssetInfo[]", "name": "", "type": "tuple[]" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "getIdxPriceUSDX96", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" }, { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_sourceToken", "type": "address" }, { "internalType": "uint256", "name": "_sourceAmount", "type": "uint256" }, { "internalType": "address", "name": "_targetToken", "type": "address" } ], "name": "getInitialAmount", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "name": "getTokenPriceUSDX96", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "addedValue", "type": "uint256" } ], "name": "increaseAllowance", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "name": "indexTokens", "outputs": [ { "internalType": "address", "name": "token", "type": "address" }, { "internalType": "uint256", "name": "weighting", "type": "uint256" }, { "internalType": "uint256", "name": "basePriceUSDX96", "type": "uint256" }, { "internalType": "address", "name": "c1", "type": "address" }, { "internalType": "uint256", "name": "q1", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "indexType", "outputs": [ { "internalType": "enum IDecentralizedIndex.IndexType", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "name": "isAsset", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lpRewardsToken", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "lpStakingPool", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_slip", "type": "uint256" } ], "name": "manualProcessFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "name", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "owner", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "partner", "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": [], "name": "processPreSwapFeesAndSwap", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint256", "name": "_lpTokens", "type": "uint256" }, { "internalType": "uint256", "name": "_minIdxTokens", "type": "uint256" }, { "internalType": "uint256", "name": "_minPairedLpToken", "type": "uint256" }, { "internalType": "uint256", "name": "_deadline", "type": "uint256" } ], "name": "removeLiquidityV2", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_token", "type": "address" } ], "name": "rescueERC20", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "rescueETH", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "_partner", "type": "address" } ], "name": "setPartner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "uint16", "name": "_fee", "type": "uint16" } ], "name": "setPartnerFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "symbol", "outputs": [ { "internalType": "string", "name": "", "type": "string" } ], "stateMutability": "view", "type": "function" }, { "inputs": [], "name": "totalSupply", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transfer", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "from", "type": "address" }, { "internalType": "address", "name": "to", "type": "address" }, { "internalType": "uint256", "name": "amount", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
6102806040526011805461ffff60881b191661010160881b1790553480156200002757600080fd5b506040516200b5353803806200b5358339810160408190526200004a91620013ae565b898960008a8a888888888880604051806040016040528060018152602001603160f81b8152508b8b81600390816200008391906200156e565b5060046200009282826200156e565b50620000a49150839050600562000d3b565b61012052620000b581600662000d3b565b61014052815160208084019190912060e052815190820120610100524660a0526200014360e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c0525060646200015e612710601462001650565b6200016a91906200166a565b856060015161ffff1611156200017f57600080fd5b606462000190612710601462001650565b6200019c91906200166a565b856080015161ffff161115620001b157600080fd5b6064620001c2612710604662001650565b620001ce91906200166a565b855161ffff161115620001e057600080fd5b6064620001f1612710606362001650565b620001fd91906200166a565b856020015161ffff1611156200021257600080fd5b606462000223612710606362001650565b6200022f91906200166a565b856040015161ffff1611156200024457600080fd5b606462000255612710600562001650565b6200026191906200166a565b8560a0015161ffff1611156200027657600080fd5b8660018111156200028b576200028b6200168d565b610220816001811115620002a357620002a36200168d565b90525042610240528451600c80546020808901516040808b015160608c015160808d015160a08e015161ffff9081166a01000000000000000000000261ffff60501b1992821668010000000000000000029290921663ffffffff60401b1993821666010000000000000261ffff60301b19958316640100000000029590951663ffffffff60201b19978316620100000263ffffffff19909a1692909b1691909117979097179490941697909717179590951692909217919091179091558751600b80548a8401518b8601511515600160a81b0260ff60a81b19911515600160a01b026001600160a81b03199093166001600160a01b039586161792909217161790558581166102605284166101a0819052825163456d019760e11b815292516000939192638ada032e92600481810193918290030181865afa158015620003ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004149190620016a3565b9050806001600160a01b03166101c0816001600160a01b0316815250506101a0516001600160a01b031663a11198566040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000473573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004999190620016a3565b6001600160a01b039081166101e052600090861615620004ba5785620004d0565b736b175474e89094c44da98b954eedeac495271d0f5b9050806001600160a01b0316610180816001600160a01b031681525050736b175474e89094c44da98b954eedeac495271d0f6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000540573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005669190620016c8565b6200057390600a620017ea565b6200058090600a62001650565b6101605260405162000597908c90602001620017fb565b6040516020818303038152906040528a604051602001620005b991906200182c565b604051602081830303815290604052826102605186620005db576000620005dd565b335b737d544dd34abbe24c8832db27820ff53c151e949b73ec0eb48d2d638f241c1a7f109e38ef2901e9450f6101a05173024ff47d552cb222b265d68c7aeb26e586d5229d6040516200062e906200104f565b620006429998979695949392919062001885565b604051809103906000f0801580156200065f573d6000803e3d6000fd5b50600a60006101000a8154816001600160a01b0302191690836001600160a01b031602179055506101a0516001600160a01b031663c3749ae56040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006ee9190620018fd565b620006fd57620006fd62000d74565b816001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200073c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620007629190620016a3565b6001600160a01b031661020052604051339030907f96b5b9b8a7193304150caccf9b80d150675fa3d6af57761d8d8ef1d6f9a1a90990600090a350505050505050505050508451865114620007e25760405162461bcd60e51b81526020600482015260016024820152602b60f91b60448201526064015b60405180910390fd5b855160005b818160ff16101562000bbe57600e6000898360ff16815181106200080f576200080f6200191b565b6020908102919091018101516001600160a01b031682528101919091526040016000205460ff1615620008695760405162461bcd60e51b81526020600482015260016024820152601160fa1b6044820152606401620007d9565b6000878260ff16815181106200088357620008836200191b565b602002602001015111620008be5760405162461bcd60e51b81526020600482015260016024820152605760f81b6044820152606401620007d9565b600d6040518060a001604052808a8460ff1681518110620008e357620008e36200191b565b60200260200101516001600160a01b03168152602001898460ff16815181106200091157620009116200191b565b602090810291909101810151825260008282018190526040808401829052606093840182905285546001818101885596835291839020855160059093020180546001600160a01b039384166001600160a01b03199182161782559386015196810196909655840151600286015591830151600385018054919093169116179055608001516004909101558651879060ff8316908110620009b557620009b56200191b565b602002602001015160126000828254620009d0919062001931565b9250508190555080600f60008a8460ff1681518110620009f457620009f46200191b565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff021916908360ff1602179055506001600e60008a8460ff168151811062000a525762000a526200191b565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055508960400151801562000ad45750856001600160a01b0316888260ff168151811062000ac05762000ac06200191b565b60200260200101516001600160a01b031614155b1562000ba9576000846001600160a01b031663c4f3e9d7308b8560ff168151811062000b045762000b046200191b565b60200260200101516040518363ffffffff1660e01b815260040162000b3f9291906001600160a01b0392831681529116602082015260400190565b6020604051808303816000875af115801562000b5f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b859190620016a3565b6001600160a01b03166000908152601060205260409020805460ff19166001179055505b8062000bb58162001947565b915050620007e7565b5060008660008151811062000bd75762000bd76200191b565b60200260200101516012546c0100000000000000000000000062000bfc919062001650565b62000c0891906200166a565b905060005b8281101562000d285760125489828151811062000c2e5762000c2e6200191b565b60200260200101516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000c74573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000c9a9190620016c8565b62000ca790600a620017ea565b838a848151811062000cbd5762000cbd6200191b565b602002602001015162000cd1919062001650565b62000cdd919062001650565b62000ce991906200166a565b600d828154811062000cff5762000cff6200191b565b60009182526020909120600460059092020101558062000d1f8162001969565b91505062000c0d565b50505050505050505050505050620019bf565b600060208351101562000d5b5762000d53836200100c565b905062000d6e565b8162000d6884826200156e565b5060ff90505b92915050565b601154600160981b900460ff161562000db45760405162461bcd60e51b81526020600482015260016024820152604f60f81b6044820152606401620007d9565b6011805460ff60981b1916600160981b1790556101a05161018051604051639f4f974560e01b81523060048201526001600160a01b0391821660248201526000929190911690639f4f974590604401602060405180830381865afa15801562000e21573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e479190620016a3565b90506001600160a01b03811662000ed8576101a0516101805160405163c4f3e9d760e01b81523060048201526001600160a01b03918216602482015291169063c4f3e9d7906044016020604051808303816000875af115801562000eaf573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ed59190620016a3565b90505b600a54604051631e9b12ef60e01b81526001600160a01b03838116600483015290911690631e9b12ef90602401600060405180830381600087803b15801562000f2057600080fd5b505af115801562000f35573d6000803e3d6000fd5b50505050600a60009054906101000a90046001600160a01b03166001600160a01b031663715018a66040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562000f8a57600080fd5b505af115801562000f9f573d6000803e3d6000fd5b5050600980546001600160a01b0319166001600160a01b0385161790555062000fc790503390565b6040516001600160a01b03838116825291909116907fdc90fed0326ba91706deeac7eb34ac9f8b680734f9d782864dc29704d23bed6a9060200160405180910390a250565b600080829050601f815111156200103a578260405163305a27a960e01b8152600401620007d9919062001985565b805162001047826200199a565b179392505050565b6142cc806200726983390190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156200109e576200109e6200105d565b604052919050565b60005b83811015620010c3578181015183820152602001620010a9565b50506000910152565b600082601f830112620010de57600080fd5b81516001600160401b03811115620010fa57620010fa6200105d565b6200110f601f8201601f191660200162001073565b8181528460208386010111156200112557600080fd5b62001138826020830160208701620010a6565b949350505050565b80516001600160a01b03811681146200115857600080fd5b919050565b805180151581146200115857600080fd5b6000606082840312156200118157600080fd5b604051606081016001600160401b0381118282101715620011a657620011a66200105d565b604052905080620011b78362001140565b8152620011c7602084016200115d565b6020820152620011da604084016200115d565b60408201525092915050565b805161ffff811681146200115857600080fd5b600060c082840312156200120c57600080fd5b60405160c081016001600160401b03811182821017156200123157620012316200105d565b6040529050806200124283620011e6565b81526200125260208401620011e6565b60208201526200126560408401620011e6565b60408201526200127860608401620011e6565b60608201526200128b60808401620011e6565b60808201526200129e60a08401620011e6565b60a08201525092915050565b60006001600160401b03821115620012c657620012c66200105d565b5060051b60200190565b600082601f830112620012e257600080fd5b81516020620012fb620012f583620012aa565b62001073565b82815260059290921b840181019181810190868411156200131b57600080fd5b8286015b848110156200134157620013338162001140565b83529183019183016200131f565b509695505050505050565b600082601f8301126200135e57600080fd5b8151602062001371620012f583620012aa565b82815260059290921b840181019181810190868411156200139157600080fd5b8286015b8481101562001341578051835291830191830162001395565b6000806000806000806000806000806102208b8d031215620013cf57600080fd5b8a516001600160401b0380821115620013e757600080fd5b620013f58e838f01620010cc565b9b5060208d01519150808211156200140c57600080fd5b6200141a8e838f01620010cc565b9a506200142b8e60408f016200116e565b99506200143c8e60a08f01620011f9565b98506101608d01519150808211156200145457600080fd5b620014628e838f01620012d0565b97506101808d01519150808211156200147a57600080fd5b50620014898d828e016200134c565b9550506200149b6101a08c0162001140565b9350620014ac6101c08c0162001140565b9250620014bd6101e08c0162001140565b9150620014ce6102008c016200115d565b90509295989b9194979a5092959850565b600181811c90821680620014f457607f821691505b6020821081036200151557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200156957600081815260208120601f850160051c81016020861015620015445750805b601f850160051c820191505b81811015620015655782815560010162001550565b5050505b505050565b81516001600160401b038111156200158a576200158a6200105d565b620015a2816200159b8454620014df565b846200151b565b602080601f831160018114620015da5760008415620015c15750858301515b600019600386901b1c1916600185901b17855562001565565b600085815260208120601f198616915b828110156200160b57888601518255948401946001909101908401620015ea565b50858210156200162a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808202811582820484141762000d6e5762000d6e6200163a565b6000826200168857634e487b7160e01b600052601260045260246000fd5b500490565b634e487b7160e01b600052602160045260246000fd5b600060208284031215620016b657600080fd5b620016c18262001140565b9392505050565b600060208284031215620016db57600080fd5b815160ff81168114620016c157600080fd5b600181815b808511156200172e5781600019048211156200171257620017126200163a565b808516156200172057918102915b93841c9390800290620016f2565b509250929050565b600082620017475750600162000d6e565b81620017565750600062000d6e565b81600181146200176f57600281146200177a576200179a565b600191505062000d6e565b60ff8411156200178e576200178e6200163a565b50506001821b62000d6e565b5060208310610133831016604e8410600b8410161715620017bf575081810a62000d6e565b620017cb8383620016ed565b8060001904821115620017e257620017e26200163a565b029392505050565b6000620016c160ff84168362001736565b66029ba30b5b2b2160cd1b8152600082516200181f816007850160208701620010a6565b9190910160070192915050565b607360f81b8152600082516200184a816001850160208701620010a6565b9190910160010192915050565b6000815180845262001871816020860160208601620010a6565b601f01601f19169290920160200192915050565b60006101208083526200189b8184018d62001857565b90508281036020840152620018b1818c62001857565b6001600160a01b039a8b166040850152988a1660608401525050948716608086015292861660a085015290851660c0840152841660e08301529092166101009092019190915292915050565b6000602082840312156200191057600080fd5b620016c1826200115d565b634e487b7160e01b600052603260045260246000fd5b8082018082111562000d6e5762000d6e6200163a565b600060ff821660ff81036200196057620019606200163a565b60010192915050565b6000600182016200197e576200197e6200163a565b5060010190565b602081526000620016c1602083018462001857565b80516020808301519190811015620015155760001960209190910360031b1b16919050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051610260516156d762001b926000396000818161044d01528181611b6d01528181611cd001526147170152600081816103280152613b0c015260006104190152600081816132c901528181613327015281816135cc01526140d401526000505060008181611159015281816111e20152818161121301528181611371015281816127c4015281816128530152612b3201526000818161051b01528181612fd10152818161309301528181613352015281816141010152818161452401526146a50152600081816103da015281816110db01528181611183015281816111c00152818161123b0152818161134f015281816113eb0152818161147f0152818161150601528181611bb10152818161280701528181612fa60152818161306b015281816145dc0152818161466401528181614741015281816147920152818161482601526148b901526000818161055d01528181611c9401528181611d180152611d6501526000610d8601526000610d5b01526000612db801526000612d9001526000612ceb01526000612d1501526000612d3f01526156d76000f3fe608060405234801561001057600080fd5b506004361061028a5760003560e01c806393b404bd1161015c578063bdbc91ab116100ce578063d757a9fb11610087578063d757a9fb14610735578063dd62ed3e14610748578063e4b549571461075b578063ee9c79da1461076e578063f682399614610781578063ff140ca61461079457600080fd5b8063bdbc91ab1461069c578063bdc8d060146106af578063be10862b146106d2578063c87fa42a146106e3578063ccec37161461070f578063d505accf1461072257600080fd5b8063a16d596011610120578063a16d596014610635578063a457c2d714610648578063a9059cbb1461065b578063a9e9c8bc1461066e578063b08d033314610681578063bb4630271461069457600080fd5b806393b404bd1461055857806394cc699e1461057f57806395b3921e1461059257806395d89b41146105af5780639af1d35a146105b757600080fd5b806342966c681161020057806370a08231116101b957806370a082311461048257806379502c55146104ab5780637ecebe00146104fb5780638129fc1c1461050e578063822631d81461051657806384b0196e1461053d57600080fd5b806342966c68146103785780634a437f881461038b5780634f4ce61d146103d557806353f504471461041457806358f4dcc314610448578063625452f11461046f57600080fd5b80632acada4d116102525780632acada4d146102ff578063313ce56714610314578063325a19f1146103235780633644e5151461034a578063395093511461035257806341dc12531461036557600080fd5b806306fdde031461028f578063095ea7b3146102ad57806318160ddd146102d057806320800a00146102e257806323b872dd146102ec575b600080fd5b6102976107a6565b6040516102a49190614d3b565b60405180910390f35b6102c06102bb366004614d6a565b610838565b60405190151581526020016102a4565b6002545b6040519081526020016102a4565b6102ea610852565b005b6102c06102fa366004614d96565b6109d7565b6103076109fb565b6040516102a49190614dd7565b604051601281526020016102a4565b6102d47f000000000000000000000000000000000000000000000000000000000000000081565b6102d4610a92565b6102c0610360366004614d6a565b610aa1565b6102ea610373366004614e53565b610ac3565b6102ea610386366004614e77565b610b9d565b61039e610399366004614e77565b610be0565b604080516001600160a01b03968716815260208101959095528401929092529092166060820152608081019190915260a0016102a4565b6103fc7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016102a4565b61043b7f000000000000000000000000000000000000000000000000000000000000000081565b6040516102a49190614ea6565b6103fc7f000000000000000000000000000000000000000000000000000000000000000081565b6102ea61047d366004614e77565b610c2d565b6102d4610490366004614ece565b6001600160a01b031660009081526020819052604090205490565b600b546104d4906001600160a01b0381169060ff600160a01b8204811691600160a81b90041683565b604080516001600160a01b03909416845291151560208401521515908201526060016102a4565b6102d4610509366004614ece565b610d25565b6102ea610d43565b6103fc7f000000000000000000000000000000000000000000000000000000000000000081565b610545610d4d565b6040516102a49796959493929190614eeb565b6102d47f000000000000000000000000000000000000000000000000000000000000000081565b600a546103fc906001600160a01b031681565b61059a610dd6565b604080519283526020830191909152016102a4565b610297610f3c565b600c546105f89061ffff808216916201000081048216916401000000008204811691600160301b8104821691600160401b8204811691600160501b90041686565b6040805161ffff978816815295871660208701529386169385019390935290841660608401528316608083015290911660a082015260c0016102a4565b6102ea610643366004614ece565b610f4b565b6102c0610656366004614d6a565b610fe2565b6102c0610669366004614d6a565b61105d565b6102d461067c366004614f81565b61106b565b6102ea61068f366004614fb3565b611588565b6102ea6119b1565b6102ea6106aa366004614fe8565b611a74565b600c54640100000000900461ffff165b60405161ffff90911681526020016102a4565b600b546001600160a01b03166103fc565b6102c06106f1366004614ece565b6001600160a01b03166000908152600e602052604090205460ff1690565b6102ea61071d366004614ece565b611fbe565b6102ea610730366004615096565b61214b565b6102d4610743366004614ece565b6122af565b6102d4610756366004615107565b6122ba565b6102d4610769366004615140565b6122e5565b6102ea61077c366004615261565b612465565b6102ea61078f366004614f81565b6126a3565b600c5462010000900461ffff166106bf565b6060600380546107b59061532e565b80601f01602080910402602001604051908101604052809291908181526020018280546107e19061532e565b801561082e5780601f106108035761010080835404028352916020019161082e565b820191906000526020600020905b81548152906001019060200180831161081157829003601f168201915b5050505050905090565b600033610846818585612928565b60019150505b92915050565b601154600160901b900460ff166001146108875760405162461bcd60e51b815260040161087e90615362565b60405180910390fd5b6011805460ff60901b19169055476108c55760405162461bcd60e51b81526020600482015260016024820152604560f81b604482015260640161087e565b600073024ff47d552cb222b265d68c7aeb26e586d5229d6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610919573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061093d919061537d565b6001600160a01b03164760405160006040518083038185875af1925050503d8060008114610987576040519150601f19603f3d011682016040523d82523d6000602084013e61098c565b606091505b50509050806109c15760405162461bcd60e51b81526020600482015260016024820152605360f81b604482015260640161087e565b506011805460ff60901b1916600160901b179055565b6000336109e5858285612a4d565b6109f0858585612ac7565b506001949350505050565b6060600d805480602002602001604051908101604052809291908181526020016000905b82821015610a895760008481526020908190206040805160a0810182526005860290920180546001600160a01b0390811684526001808301548587015260028301549385019390935260038201541660608401526004015460808301529083529092019101610a1f565b50505050905090565b6000610a9c612cde565b905090565b600033610846818585610ab483836122ba565b610abe91906153b0565b612928565b600b546001600160a01b0316336001600160a01b031614610b0a5760405162461bcd60e51b81526020600482015260016024820152600560fc1b604482015260640161087e565b600c5461ffff600160501b909104811690821610610b3a5760405162461bcd60e51b815260040161087e90615362565b600c805461ffff60501b1916600160501b61ffff8416021790553360405161ffff831681526001600160a01b0391909116907ffc0cb6bfc0e2e72ceb9097dc52c953b7d46c4f1d173de188581cba3fab46ad4a906020015b60405180910390a250565b601154600160901b900460ff16600114610bc95760405162461bcd60e51b815260040161087e90615362565b6011805460ff60901b191690556109c13382612e09565b600d8181548110610bf057600080fd5b6000918252602090912060059091020180546001820154600283015460038401546004909401546001600160a01b03938416955091939092169085565b610c3930306000612ac7565b600a54604080516345e35f5960e11b815290516000926001600160a01b031691638bc6beb29160048083019260209291908290030181865afa158015610c83573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ca7919061537d565b9050806001600160a01b03166370b9f1f9600060328511610cc85784610ccb565b60325b6040516001600160e01b031960e085901b16815260048101929092526024820152604401600060405180830381600087803b158015610d0957600080fd5b505af1158015610d1d573d6000803e3d6000fd5b505050505050565b6001600160a01b03811660009081526007602052604081205461084c565b610d4b612f38565b565b600060608082808083610d817f0000000000000000000000000000000000000000000000000000000000000000600561321a565b610dac7f0000000000000000000000000000000000000000000000000000000000000000600661321a565b60408051600080825260208201909252600f60f81b9b939a50919850469750309650945092509050565b600d5460009081908190600160301b90825b81811015610f2e57600083610e28600d8481548110610e0957610e096153c3565b60009182526020909120600590910201546001600160a01b03166132c5565b610e3291906153d9565b905083600d8381548110610e4857610e486153c3565b6000918252602091829020600590910201546040805163313ce56760e01b815290516001600160a01b039092169263313ce567926004808401938290030181865afa158015610e9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ebf91906153fb565b610eca90600a6154fc565b600d8481548110610edd57610edd6153c3565b90600052602060002090600502016004015483610efa919061550b565b610f0491906153d9565b610f0e91906153d9565b610f1890866153b0565b9450508080610f2690615522565b915050610de8565b506000959294509192505050565b6060600480546107b59061532e565b600b546001600160a01b0316336001600160a01b031614610f925760405162461bcd60e51b81526020600482015260016024820152600560fc1b604482015260640161087e565b600b80546001600160a01b0319166001600160a01b03831690811790915560405190815233907f4b74c6905f914d7a5f408442bc16a267312648abfc3909c994cc6c2643ae5c9690602001610b92565b60003381610ff082866122ba565b9050838110156110505760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161087e565b6109f08286868403612928565b600033610846818585612ac7565b601154600090600160901b900460ff1660011461109a5760405162461bcd60e51b815260040161087e90615362565b6011805461ffff60881b19169055306000908152602081905260408120546040516370a0823160e01b81523060048201529091506000906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611146919061553b565b90506111533330896136b7565b61117e307f000000000000000000000000000000000000000000000000000000000000000089612928565b6111b37f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031633308961385b565b6112076001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f0000000000000000000000000000000000000000000000000000000000000000886138c6565b60006001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001663e8e33700307f00000000000000000000000000000000000000000000000000000000000000008b8b6103e86112698d82615554565b8f611274919061550b565b61127e91906153d9565b6103e861128b8e82615554565b8f611296919061550b565b6112a091906153d9565b3360405160e089901b6001600160e01b03191681526001600160a01b039788166004820152958716602487015260448601949094526064850192909252608484015260a483015290911660c482015260e48101889052610104016060604051808303816000875af1158015611319573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133d9190615567565b92506113979150506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f00000000000000000000000000000000000000000000000000000000000000006000613973565b306000908152602081905260409020548310156113d4576113d430333060009081526020819052604090205486906113cf9190615554565b6136b7565b6040516370a0823160e01b815230600482015282907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa15801561143a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061145e919061553b565b111561152d5761152d336040516370a0823160e01b815230600482015284907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156114ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f2919061553b565b6114fc9190615554565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169190613a88565b604080518981526020810189905233917f06239653922ac7bea6aa2b19dc486b9361821d37712eb796adfd38d81de278ca910160405180910390a26011805461ffff60881b191661010160881b179055979650505050505050565b601154600160901b900460ff166001146115b45760405162461bcd60e51b815260040161087e90615362565b6011805461ffff60881b191690556001600160a01b0383166000908152600e602052604090205460ff1661160f5760405162461bcd60e51b8152602060048201526002602482015261125560f21b604482015260640161087e565b6001600160a01b0383166000818152600f60205260408082205490516370a0823160e01b815230600482015260ff90911692906370a0823190602401602060405180830381865afa158015611668573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061168c919061553b565b90506000611698613ab8565b90506000816116bf57826116b0600160601b8861550b565b6116ba91906153d9565b6116c5565b600160601b5b90506000821561173057600d85815481106116e2576116e26153c3565b9060005260206000209060050201600401546116fc601290565b61170790600a6154fc565b611715600160601b8a61550b565b61171f919061550b565b61172991906153d9565b9050611756565b600160601b8261173f60025490565b611749919061550b565b61175391906153d9565b90505b600061176133613ac9565b61178f57600c54612710906117809062010000900461ffff168461550b565b61178a91906153d9565b611792565b60005b90508661179f8284615554565b10156117d15760405162461bcd60e51b81526020600482015260016024820152604d60f81b604482015260640161087e565b6117e4336117df8385615554565b613b3d565b80156117fd576117f43082613b3d565b6117fd81613bfc565b600d5460005b81811015611941576000866118be57600160601b86600d848154811061182b5761182b6153c3565b60009182526020909120600590910201546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611881573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a5919061553b565b6118af919061550b565b6118b991906153d9565b6118f5565b6118f58c8c600d85815481106118d6576118d66153c3565b60009182526020909120600590910201546001600160a01b03166122e5565b905061192e600d838154811061190d5761190d6153c3565b60009182526020909120600590910201546001600160a01b03163383613c42565b508061193981615522565b915050611803565b5061194a613d69565b604080518a8152602081018590526001600160a01b038c169133917fad49529616fd9fe4b34e00ac3f98d5cc3531e1232a95f249113b23fdf13c7e85910160405180910390a350506011805461ffff60881b191661010160881b1790555050505050505050565b600a60009054906101000a90046001600160a01b03166001600160a01b0316638bc6beb26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a28919061537d565b6001600160a01b0316336001600160a01b031614611a6c5760405162461bcd60e51b81526020600482015260016024820152602960f91b604482015260640161087e565b610d4b613df7565b601154600160901b900460ff16600114611aa05760405162461bcd60e51b815260040161087e90615362565b6011805460ff60901b191690556001600160a01b0384166000908152600e602052604090205460ff16611af95760405162461bcd60e51b81526020600482015260016024820152600b60fb1b604482015260640161087e565b600a54604080516345e35f5960e11b815290516000926001600160a01b031691638bc6beb29160048083019260209291908290030181865afa158015611b43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b67919061537d565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316736b175474e89094c44da98b954eedeac495271d0f14611c74577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316736b175474e89094c44da98b954eedeac495271d0f14611c6e5773024ff47d552cb222b265d68c7aeb26e586d5229d6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611c45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c69919061537d565b611c76565b81611c76565b305b9050611cb8736b175474e89094c44da98b954eedeac495271d0f33837f000000000000000000000000000000000000000000000000000000000000000061385b565b736b175474e89094c44da98b954eedeac495271d0e197f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031601611dd057611d3c736b175474e89094c44da98b954eedeac495271d0f837f00000000000000000000000000000000000000000000000000000000000000006138c6565b604051634bd68e6760e11b8152736b175474e89094c44da98b954eedeac495271d0f60048201527f000000000000000000000000000000000000000000000000000000000000000060248201526001600160a01b038316906397ad1cce90604401600060405180830381600087803b158015611db757600080fd5b505af1158015611dcb573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526000906001600160a01b038816906370a0823190602401602060405180830381865afa158015611e17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3b919061553b565b9050611e516001600160a01b0388168988613a88565b604051633a62959560e21b81526001600160a01b0389169063e98a565490611e7f9088908890600401615595565b600060405180830381600087803b158015611e9957600080fd5b505af1158015611ead573d6000803e3d6000fd5b50506040516370a0823160e01b81523060048201528392506001600160a01b038a1691506370a0823190602401602060405180830381865afa158015611ef7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f1b919061553b565b1015611f4e5760405162461bcd60e51b8152602060048201526002602482015261464160f01b604482015260640161087e565b6001600160a01b03881633604080516001600160a01b038b81168252602082018b905292909216917f5a9eeaf8949838813289046091e8ea8a9196a2265ac24841464a2d27026a8549910160405180910390a350506011805460ff60901b1916600160901b179055505050505050565b601154600160901b900460ff16600114611fea5760405162461bcd60e51b815260040161087e90615362565b6011805460ff60901b191690556001600160a01b0381166000908152600e602052604090205460ff1615801561202957506001600160a01b0381163014155b6120595760405162461bcd60e51b81526020600482015260016024820152605560f81b604482015260640161087e565b6109c173024ff47d552cb222b265d68c7aeb26e586d5229d6001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d2919061537d565b6040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015612116573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061213a919061553b565b6001600160a01b0384169190613a88565b8342111561219b5760405162461bcd60e51b815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e65000000604482015260640161087e565b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886121ca8c613fba565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e001604051602081830303815290604052805190602001209050600061222582613fe2565b905060006122358287878761400f565b9050896001600160a01b0316816001600160a01b0316146122985760405162461bcd60e51b815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e61747572650000604482015260640161087e565b6122a38a8a8a612928565b50505050505050505050565b600061084c826132c5565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6001600160a01b038084166000818152600f6020908152604080832054948616835280832054815163313ce56760e01b81529151939560ff90811695911693909263313ce56792600480820193918290030181865afa15801561234c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061237091906153fb565b61237b90600a6154fc565b600d838154811061238e5761238e6153c3565b906000526020600020906005020160010154856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240291906153fb565b61240d90600a6154fc565b600d8481548110612420576124206153c3565b9060005260206000209060050201600101548861243d919061550b565b612447919061550b565b61245191906153d9565b61245b91906153d9565b9695505050505050565b601154600160901b900460ff166001146124915760405162461bcd60e51b815260040161087e90615362565b6011805461ffff60881b1916905560006124aa84614039565b6124e857600c54612710906124cb90640100000000900461ffff16826155c4565b6124d99061ffff168661550b565b6124e391906153d9565b6124ea565b835b905060006124f760025490565b612505600160601b8461550b565b61250f91906153d9565b905061251c333087612ac7565b6125263083612e09565b6125386125338387615554565b613bfc565b600d5460005b81811015612648576000600d828154811061255b5761255b6153c3565b60009182526020909120600590910201546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156125b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d5919061553b565b90506000600160601b6125e8868461550b565b6125f291906153d9565b90508015612633576126333382600d8681548110612612576126126153c3565b60009182526020909120600590910201546001600160a01b03169190613a88565b5050808061264090615522565b91505061253e565b50612651613df7565b60405186815233907fe4bf69c2fff7ace5eed72842e9abf52af2218a3a78cb83d7824f999dbfd75e719060200160405180910390a250506011805461ffff60881b191661010160881b17905550505050565b601154600160901b900460ff166001146126cf5760405162461bcd60e51b815260040161087e90615362565b6011805461ffff60881b1916905583156126e95783612763565b6009546001600160a01b03166370a08231336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561273f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612763919061553b565b93506000841161279a5760405162461bcd60e51b8152602060048201526002602482015261131560f21b604482015260640161087e565b6127b2336009546001600160a01b031690308761385b565b6009546127e9906001600160a01b03167f0000000000000000000000000000000000000000000000000000000000000000866138c6565b60408051635d5155ef60e11b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301526044820187905260648201869052608482018590523360a483015260c4820184905282517f00000000000000000000000000000000000000000000000000000000000000009091169263baa2abde9260e4808201939182900301816000875af115801561289e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128c291906155e6565b50506128cb3390565b6001600160a01b03167fdfdd120ded9b7afc0c23dd5310e93aaa3e1c3b9f75af9b805fab3030842439f28560405161290591815260200190565b60405180910390a250506011805461ffff60881b191661010160881b1790555050565b6001600160a01b03831661298a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161087e565b6001600160a01b0382166129eb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161087e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6000612a5984846122ba565b90506000198114612ac15781811015612ab45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161087e565b612ac18484848403612928565b50505050565b6001600160a01b03821660009081526010602052604090205460ff1615612b155760405162461bcd60e51b8152602060048201526002602482015261424b60f01b604482015260640161087e565b6009546000906001600160a01b038581169116148015612b6757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b6009546011549192506001600160a01b038581169116149060009060ff600160801b90910416158015612ba65750601154600160881b900460ff166001145b15612cc6576009546001600160a01b03878116911614612bc857612bc8613df7565b828015612be15750600c54600160301b900461ffff1615155b15612c1957600c5461271090612c0290600160301b900461ffff168661550b565b612c0c91906153d9565b9050612c198630836136b7565b818015612c325750600c54600160401b900461ffff1615155b15612c6a57600c5461271090612c5390600160401b900461ffff168661550b565b612c5d91906153d9565b9050612c6a8630836136b7565b82158015612c76575081155b8015612c8b5750600b54600160a01b900460ff165b15612cc657612c9c612710856153d9565b905080158015612cac5750600084115b612cb65780612cb9565b60015b9050612cc68630836136b7565b612ccf81613bfc565b610d1d86866113cf8488615554565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015612d3757507f000000000000000000000000000000000000000000000000000000000000000046145b15612d6157507f000000000000000000000000000000000000000000000000000000000000000090565b610a9c604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b6001600160a01b038216612e695760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161087e565b6001600160a01b03821660009081526020819052604090205481811015612edd5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161087e565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101612a40565b505050565b601154600160981b900460ff1615612f765760405162461bcd60e51b81526020600482015260016024820152604f60f81b604482015260640161087e565b6011805460ff60981b1916600160981b179055604051639f4f974560e01b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690639f4f974590604401602060405180830381865afa15801561301a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061303e919061537d565b90506001600160a01b0381166131035760405163c4f3e9d760e01b81523060048201526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811660248301527f0000000000000000000000000000000000000000000000000000000000000000169063c4f3e9d7906044016020604051808303816000875af11580156130dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613100919061537d565b90505b600a54604051631e9b12ef60e01b81526001600160a01b03838116600483015290911690631e9b12ef90602401600060405180830381600087803b15801561314a57600080fd5b505af115801561315e573d6000803e3d6000fd5b50505050600a60009054906101000a90046001600160a01b03166001600160a01b031663715018a66040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156131b257600080fd5b505af11580156131c6573d6000803e3d6000fd5b5050600980546001600160a01b0319166001600160a01b0385169081179091556040519081523392507fdc90fed0326ba91706deeac7eb34ac9f8b680734f9d782864dc29704d23bed6a9150602001610b92565b606060ff83146132345761322d83614064565b905061084c565b8180546132409061532e565b80601f016020809104026020016040519081016040528092919081815260200182805461326c9061532e565b80156132b95780601f1061328e576101008083540402835291602001916132b9565b820191906000526020600020905b81548152906001019060200180831161329c57829003601f168201915b5050505050905061084c565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036133085761084c6140a3565b604051639f4f974560e01b81526001600160a01b0383811660048301527f0000000000000000000000000000000000000000000000000000000000000000811660248301526000917f000000000000000000000000000000000000000000000000000000000000000090911690639f4f974590604401602060405180830381865afa15801561339b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133bf919061537d565b90506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015613401573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613425919061537d565b90506000816001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015613467573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061348b91906153fb565b90506000836001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134f1919061537d565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561352e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061355291906153fb565b9050600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015613595573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135b99190615626565b509150915060006135c86140a3565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316146136595761360e84600a6154fc565b6001600160701b03841661362387600a6154fc565b6136366001600160701b0386168561550b565b613640919061550b565b61364a91906153d9565b61365491906153d9565b6136aa565b61366485600a6154fc565b6001600160701b03831661367986600a6154fc565b61368c6001600160701b0387168561550b565b613696919061550b565b6136a091906153d9565b6136aa91906153d9565b9998505050505050505050565b6001600160a01b03831661371b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161087e565b6001600160a01b03821661377d5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161087e565b6001600160a01b038316600090815260208190526040902054818110156137f55760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161087e565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3612ac1565b6040516001600160a01b0380851660248301528316604482015260648101829052612ac19085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614449565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015613916573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061393a919061553b565b9050612ac18463095ea7b360e01b8561395386866153b0565b6040516001600160a01b039092166024830152604482015260640161388f565b8015806139ed5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e90604401602060405180830381865afa1580156139c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139eb919061553b565b155b613a585760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b606482015260840161087e565b6040516001600160a01b038316602482015260448101829052612f3390849063095ea7b360e01b9060640161388f565b6040516001600160a01b038316602482015260448101829052612f3390849063a9059cbb60e01b9060640161388f565b6000613ac360025490565b15919050565b6000613ad3613ab8565b8061084c5750600b546001600160a01b038381169116148015613b00575060115467ffffffffffffffff16155b801561084c5750613b347f000000000000000000000000000000000000000000000000000000000000000062093a806153b0565b42111592915050565b6001600160a01b038216613b935760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161087e565b8060026000828254613ba591906153b0565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b801580613c0d5750600c5461ffff16155b15613c155750565b600c54613c3f90309061271090613c309061ffff168561550b565b613c3a91906153d9565b612e09565b50565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa158015613c89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cad919061553b565b9050613cc46001600160a01b03851684308561385b565b613cce82826153b0565b6040516370a0823160e01b81523060048201526001600160a01b038616906370a0823190602401602060405180830381865afa158015613d12573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d36919061553b565b1015612ac15760405162461bcd60e51b81526020600482015260026024820152612a2b60f11b604482015260640161087e565b601154600160981b900460ff16613da65760405162461bcd60e51b81526020600482015260016024820152604960f81b604482015260640161087e565b60115467ffffffffffffffff16158015613dd35750600b546001600160a01b0316336001600160a01b0316145b15610d4b576011805467ffffffffffffffff19164267ffffffffffffffff16179055565b601154600090613e1a90601490600160401b900467ffffffffffffffff1661566b565b67ffffffffffffffff164211905080613e305750565b3060009081526020819052604081205490819003613e4c575050565b6009546001600160a01b03166000908152602081905260408120549060014614613e8157613e7c610fa0836153d9565b613e8d565b613e8d6103e8836153d9565b90506000613e9c6064846153d9565b9050818410158015613eae5750600083115b15613fb3576011805467ffffffffffffffff4216600160401b0270ffffffffffffffffff00000000000000001990911617600160801b1790556000818511613ef65784613ef8565b815b600c54909150600090600160501b900461ffff1615801590613f245750600b546001600160a01b031615155b8015613f4b5750600b546001600160a01b031660009081526010602052604090205460ff16155b15613f9157600c5461271090613f6c90600160501b900461ffff168461550b565b613f7691906153d9565b600b54909150613f919030906001600160a01b0316836136b7565b613fa3613f9e8284615554565b61451e565b50506011805460ff60801b191690555b5050505050565b6001600160a01b03811660009081526007602052604090208054600181018255905b50919050565b600061084c613fef612cde565b8360405161190160f01b8152600281019290925260228201526042902090565b600080600061402087878787614992565b9150915061402d81614a56565b5090505b949350505050565b6000606461404660025490565b61405190606261550b565b61405b91906153d9565b90911015919050565b6060600061407183614ba0565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b604051639f4f974560e01b8152736b175474e89094c44da98b954eedeac495271d0f60048201526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116602483015260009182917f00000000000000000000000000000000000000000000000000000000000000001690639f4f974590604401602060405180830381865afa158015614148573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061416c919061537d565b90506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156141ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141d2919061537d565b9050600080826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015614215573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061423991906153fb565b846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015614277573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061429b919061537d565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142fc91906153fb565b91509150600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015614341573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143659190615626565b5090925090506001600160a01b038516736b175474e89094c44da98b954eedeac495271d0f146143e95761439a83600a6154fc565b6001600160701b0383166143af86600a6154fc565b6143c66001600160701b038516600160601b61550b565b6143d0919061550b565b6143da91906153d9565b6143e491906153d9565b61443e565b6143f484600a6154fc565b6001600160701b03821661440985600a6154fc565b6144206001600160701b038616600160601b61550b565b61442a919061550b565b61443491906153d9565b61443e91906153d9565b965050505050505090565b600061449e826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316614bc89092919063ffffffff16565b90508051600014806144bf5750808060200190518101906144bf919061568c565b612f335760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161087e565b614549307f000000000000000000000000000000000000000000000000000000000000000083612928565b600a54604080516345e35f5960e11b815290516000926001600160a01b031691638bc6beb29160048083019260209291908290030181865afa158015614593573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145b7919061537d565b6040516370a0823160e01b81526001600160a01b0380831660048301529192506000917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa158015614623573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614647919061553b565b6040516383e4b89f60e01b81523060048201526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166024830152604482018690526000606483015284811660848301529192507f0000000000000000000000000000000000000000000000000000000000000000909116906383e4b89f9060a4016020604051808303816000875af11580156146f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614714919061553b565b507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603614897576040516370a0823160e01b81526001600160a01b03838116600483015260009183917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401602060405180830381865afa1580156147d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147fd919061553b565b6148079190615554565b90508015612ac157604051633dc60e8360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201839052841690633dc60e8390604401600060405180830381600087803b15801561487957600080fd5b505af115801561488d573d6000803e3d6000fd5b5050505050505050565b6040516370a0823160e01b81526001600160a01b0383811660048301526000917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401602060405180830381865afa158015614902573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614926919061553b565b1115612f33576040516370b9f1f960e01b815260006004820181905260248201526001600160a01b038316906370b9f1f990604401600060405180830381600087803b15801561497557600080fd5b505af1158015614989573d6000803e3d6000fd5b50505050505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156149c95750600090506003614a4d565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa158015614a1d573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116614a4657600060019250925050614a4d565b9150600090505b94509492505050565b6000816004811115614a6a57614a6a614e90565b03614a725750565b6001816004811115614a8657614a86614e90565b03614ad35760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e61747572650000000000000000604482015260640161087e565b6002816004811115614ae757614ae7614e90565b03614b345760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e67746800604482015260640161087e565b6003816004811115614b4857614b48614e90565b03613c3f5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b606482015260840161087e565b600060ff8216601f81111561084c57604051632cd44ac360e21b815260040160405180910390fd5b6060614031848460008585600080866001600160a01b03168587604051614bef91906156ae565b60006040518083038185875af1925050503d8060008114614c2c576040519150601f19603f3d011682016040523d82523d6000602084013e614c31565b606091505b5091509150614c4287838387614c4d565b979650505050505050565b60608315614cbc578251600003614cb5576001600160a01b0385163b614cb55760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161087e565b5081614031565b6140318383815115614cd15781518083602001fd5b8060405162461bcd60e51b815260040161087e9190614d3b565b60005b83811015614d06578181015183820152602001614cee565b50506000910152565b60008151808452614d27816020860160208601614ceb565b601f01601f19169290920160200192915050565b602081526000614d4e6020830184614d0f565b9392505050565b6001600160a01b0381168114613c3f57600080fd5b60008060408385031215614d7d57600080fd5b8235614d8881614d55565b946020939093013593505050565b600080600060608486031215614dab57600080fd5b8335614db681614d55565b92506020840135614dc681614d55565b929592945050506040919091013590565b602080825282518282018190526000919060409081850190868401855b82811015614e4657815180516001600160a01b03908116865287820151888701528682015187870152606080830151909116908601526080908101519085015260a09093019290850190600101614df4565b5091979650505050505050565b600060208284031215614e6557600080fd5b813561ffff81168114614d4e57600080fd5b600060208284031215614e8957600080fd5b5035919050565b634e487b7160e01b600052602160045260246000fd5b6020810160028310614ec857634e487b7160e01b600052602160045260246000fd5b91905290565b600060208284031215614ee057600080fd5b8135614d4e81614d55565b60ff60f81b881681526000602060e081840152614f0b60e084018a614d0f565b8381036040850152614f1d818a614d0f565b606085018990526001600160a01b038816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015614f6f57835183529284019291840191600101614f53565b50909c9b505050505050505050505050565b60008060008060808587031215614f9757600080fd5b5050823594602084013594506040840135936060013592509050565b600080600060608486031215614fc857600080fd5b8335614fd381614d55565b95602085013595506040909401359392505050565b60008060008060006080868803121561500057600080fd5b853561500b81614d55565b9450602086013561501b81614d55565b935060408601359250606086013567ffffffffffffffff8082111561503f57600080fd5b818801915088601f83011261505357600080fd5b81358181111561506257600080fd5b89602082850101111561507457600080fd5b9699959850939650602001949392505050565b60ff81168114613c3f57600080fd5b600080600080600080600060e0888a0312156150b157600080fd5b87356150bc81614d55565b965060208801356150cc81614d55565b9550604088013594506060880135935060808801356150ea81615087565b9699959850939692959460a0840135945060c09093013592915050565b6000806040838503121561511a57600080fd5b823561512581614d55565b9150602083013561513581614d55565b809150509250929050565b60008060006060848603121561515557600080fd5b833561516081614d55565b925060208401359150604084013561517781614d55565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff811182821017156151c1576151c1615182565b604052919050565b600067ffffffffffffffff8211156151e3576151e3615182565b5060051b60200190565b600082601f8301126151fe57600080fd5b8135602061521361520e836151c9565b615198565b82815260059290921b8401810191818101908684111561523257600080fd5b8286015b8481101561525657803561524981615087565b8352918301918301615236565b509695505050505050565b60008060006060848603121561527657600080fd5b8335925060208085013567ffffffffffffffff8082111561529657600080fd5b818701915087601f8301126152aa57600080fd5b81356152b861520e826151c9565b81815260059190911b8301840190848101908a8311156152d757600080fd5b938501935b828510156152fe5784356152ef81614d55565b825293850193908501906152dc565b96505050604087013592508083111561531657600080fd5b5050615324868287016151ed565b9150509250925092565b600181811c9082168061534257607f821691505b602082108103613fdc57634e487b7160e01b600052602260045260246000fd5b6020808252600190820152601360fa1b604082015260600190565b60006020828403121561538f57600080fd5b8151614d4e81614d55565b634e487b7160e01b600052601160045260246000fd5b8082018082111561084c5761084c61539a565b634e487b7160e01b600052603260045260246000fd5b6000826153f657634e487b7160e01b600052601260045260246000fd5b500490565b60006020828403121561540d57600080fd5b8151614d4e81615087565b600181815b808511156154535781600019048211156154395761543961539a565b8085161561544657918102915b93841c939080029061541d565b509250929050565b60008261546a5750600161084c565b816154775750600061084c565b816001811461548d5760028114615497576154b3565b600191505061084c565b60ff8411156154a8576154a861539a565b50506001821b61084c565b5060208310610133831016604e8410600b84101617156154d6575081810a61084c565b6154e08383615418565b80600019048211156154f4576154f461539a565b029392505050565b6000614d4e60ff84168361545b565b808202811582820484141761084c5761084c61539a565b6000600182016155345761553461539a565b5060010190565b60006020828403121561554d57600080fd5b5051919050565b8181038181111561084c5761084c61539a565b60008060006060848603121561557c57600080fd5b8351925060208401519150604084015190509250925092565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b61ffff8281168282160390808211156155df576155df61539a565b5092915050565b600080604083850312156155f957600080fd5b505080516020909101519092909150565b80516001600160701b038116811461562157600080fd5b919050565b60008060006060848603121561563b57600080fd5b6156448461560a565b92506156526020850161560a565b9150604084015163ffffffff8116811461517757600080fd5b67ffffffffffffffff8181168382160190808211156155df576155df61539a565b60006020828403121561569e57600080fd5b81518015158114614d4e57600080fd5b600082516156c0818460208701614ceb565b919091019291505056fea164736f6c6343000813000a60c06040523480156200001157600080fd5b50604051620042cc380380620042cc833981016040819052620000349162000282565b8888600362000044838262000403565b50600462000053828262000403565b505050620000706200006a6200012e60201b60201c565b62000132565b336080819052600680546001600160a01b0319166001600160a01b03881617905560405185918591859185918c9030908d90620000ad9062000184565b6001600160a01b0398891681529688166020880152948716604087015292861660608601529085166080850152841660a0840152831660c083015290911660e082015261010001604051809103906000f08015801562000111573d6000803e3d6000fd5b506001600160a01b031660a05250620004cf975050505050505050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b612968806200196483390190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112620001ba57600080fd5b81516001600160401b0380821115620001d757620001d762000192565b604051601f8301601f19908116603f0116810190828211818310171562000202576200020262000192565b816040528381526020925086838588010111156200021f57600080fd5b600091505b8382101562000243578582018301518183018401529082019062000224565b600093810190920192909252949350505050565b6001600160a01b03811681146200026d57600080fd5b50565b80516200027d8162000257565b919050565b60008060008060008060008060006101208a8c031215620002a257600080fd5b89516001600160401b0380821115620002ba57600080fd5b620002c88d838e01620001a8565b9a5060208c0151915080821115620002df57600080fd5b50620002ee8c828d01620001a8565b98505060408a0151620003018162000257565b60608b0151909750620003148162000257565b95506200032460808b0162000270565b94506200033460a08b0162000270565b93506200034460c08b0162000270565b92506200035460e08b0162000270565b9150620003656101008b0162000270565b90509295985092959850929598565b600181811c908216806200038957607f821691505b602082108103620003aa57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620003fe57600081815260208120601f850160051c81016020861015620003d95750805b601f850160051c820191505b81811015620003fa57828155600101620003e5565b5050505b505050565b81516001600160401b038111156200041f576200041f62000192565b620004378162000430845462000374565b84620003b0565b602080601f8311600181146200046f5760008415620004565750858301515b600019600386901b1c1916600185901b178555620003fa565b600085815260208120601f198616915b82811015620004a0578886015182559484019460019091019084016200047f565b5085821015620004bf5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611461620005036000396000818161026301528181610efc0152610fae0152600061029b01526114616000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c80638bc6beb2116100c3578063adc9772e1161007c578063adc9772e146102eb578063c56e0ad8146102fe578063da0e1dab14610306578063dba802d914610319578063dd62ed3e1461032c578063f2fde38b1461033f57600080fd5b80638bc6beb21461025e5780638da5cb5b1461028557806390eb39111461029657806395d89b41146102bd578063a457c2d7146102c5578063a9059cbb146102d857600080fd5b80632e17de78116101155780632e17de78146101cd578063313ce567146101e057806339509351146101ef57806370a0823114610202578063715018a61461022b57806372f702f31461023357600080fd5b806306fdde0314610152578063095ea7b31461017057806318160ddd146101935780631e9b12ef146101a557806323b872dd146101ba575b600080fd5b61015a610352565b6040516101679190611298565b60405180910390f35b61018361017e3660046112e7565b6103e4565b6040519015158152602001610167565b6002545b604051908152602001610167565b6101b86101b3366004611311565b6103fe565b005b6101836101c8366004611333565b61046a565b6101b86101db36600461136f565b61048e565b60405160128152602001610167565b6101836101fd3660046112e7565b6104e7565b610197610210366004611311565b6001600160a01b031660009081526020819052604090205490565b6101b8610509565b600754610246906001600160a01b031681565b6040516001600160a01b039091168152602001610167565b6102467f000000000000000000000000000000000000000000000000000000000000000081565b6005546001600160a01b0316610246565b6102467f000000000000000000000000000000000000000000000000000000000000000081565b61015a61051d565b6101836102d33660046112e7565b61052c565b6101836102e63660046112e7565b6105a7565b6101b86102f93660046112e7565b6105b5565b6101b86106a9565b600654610246906001600160a01b031681565b6101b8610327366004611311565b610702565b61019761033a366004611388565b61076b565b6101b861034d366004611311565b610796565b606060038054610361906113bb565b80601f016020809104026020016040519081016040528092919081815260200182805461038d906113bb565b80156103da5780601f106103af576101008083540402835291602001916103da565b820191906000526020600020905b8154815290600101906020018083116103bd57829003601f168201915b5050505050905090565b6000336103f281858561080f565b60019150505b92915050565b610406610933565b6007546001600160a01b0316156104485760405162461bcd60e51b81526020600482015260016024820152605360f81b60448201526064015b60405180910390fd5b600780546001600160a01b0319166001600160a01b0392909216919091179055565b60003361047885828561098d565b610483858585610a07565b506001949350505050565b6104983382610bb1565b6104af336007546001600160a01b03169083610cef565b60405181815233907f85082129d87b2fe11527cb1b3b7a520aeb5aa6913f88a3d8757fe40d1db02fdd9060200160405180910390a250565b6000336103f28185856104fa838361076b565b61050491906113f5565b61080f565b610511610933565b61051b6000610d52565b565b606060048054610361906113bb565b6000338161053a828661076b565b90508381101561059a5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161043f565b610483828686840361080f565b6000336103f2818585610a07565b6007546001600160a01b03166105f15760405162461bcd60e51b81526020600482015260016024820152604960f81b604482015260640161043f565b6006546001600160a01b031615610643576006546001600160a01b038381169116146106435760405162461bcd60e51b81526020600482015260016024820152605560f81b604482015260640161043f565b61064d8282610da4565b610665336007546001600160a01b0316903084610e6f565b6040518181526001600160a01b0383169033907f99039fcf0a98f484616c5196ee8b2ecfa971babf0b519848289ea4db381f85f79060200160405180910390a35050565b6006546001600160a01b0316336001600160a01b0316146106f05760405162461bcd60e51b81526020600482015260016024820152602960f91b604482015260640161043f565b600680546001600160a01b0319169055565b6006546001600160a01b0316336001600160a01b0316146107495760405162461bcd60e51b81526020600482015260016024820152602960f91b604482015260640161043f565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61079e610933565b6001600160a01b0381166108035760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161043f565b61080c81610d52565b50565b6001600160a01b0383166108715760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161043f565b6001600160a01b0382166108d25760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161043f565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6005546001600160a01b0316331461051b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640161043f565b6000610999848461076b565b90506000198114610a0157818110156109f45760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161043f565b610a01848484840361080f565b50505050565b6001600160a01b038316610a6b5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161043f565b6001600160a01b038216610acd5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161043f565b6001600160a01b03831660009081526020819052604090205481811015610b455760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161043f565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610a01848484610ea7565b6001600160a01b038216610c115760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161043f565b6001600160a01b03821660009081526020819052604090205481811015610c855760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161043f565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610cea83600084610ea7565b505050565b6040516001600160a01b038316602482015260448101829052610cea90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261100f565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216610dfa5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640161043f565b8060026000828254610e0c91906113f5565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610e6b60008383610ea7565b5050565b6040516001600160a01b0380851660248301528316604482015260648101829052610a019085906323b872dd60e01b90608401610d1b565b6001600160a01b03831615801590610eca57506001600160a01b03831661dead14155b15610f595760405163d6460b4b60e01b81526001600160a01b03848116600483015260248201839052600160448301527f0000000000000000000000000000000000000000000000000000000000000000169063d6460b4b90606401600060405180830381600087803b158015610f4057600080fd5b505af1158015610f54573d6000803e3d6000fd5b505050505b6001600160a01b03821615801590610f7c57506001600160a01b03821661dead14155b15610cea5760405163d6460b4b60e01b81526001600160a01b03838116600483015260248201839052600060448301527f0000000000000000000000000000000000000000000000000000000000000000169063d6460b4b90606401600060405180830381600087803b158015610ff257600080fd5b505af1158015611006573d6000803e3d6000fd5b50505050505050565b6000611064826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166110e49092919063ffffffff16565b90508051600014806110855750808060200190518101906110859190611416565b610cea5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161043f565b60606110f384846000856110fb565b949350505050565b60608247101561115c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161043f565b600080866001600160a01b031685876040516111789190611438565b60006040518083038185875af1925050503d80600081146111b5576040519150601f19603f3d011682016040523d82523d6000602084013e6111ba565b606091505b50915091506111cb878383876111d6565b979650505050505050565b6060831561124557825160000361123e576001600160a01b0385163b61123e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161043f565b50816110f3565b6110f3838381511561125a5781518083602001fd5b8060405162461bcd60e51b815260040161043f9190611298565b60005b8381101561128f578181015183820152602001611277565b50506000910152565b60208152600082518060208401526112b7816040850160208701611274565b601f01601f19169190910160400192915050565b80356001600160a01b03811681146112e257600080fd5b919050565b600080604083850312156112fa57600080fd5b611303836112cb565b946020939093013593505050565b60006020828403121561132357600080fd5b61132c826112cb565b9392505050565b60008060006060848603121561134857600080fd5b611351846112cb565b925061135f602085016112cb565b9150604084013590509250925092565b60006020828403121561138157600080fd5b5035919050565b6000806040838503121561139b57600080fd5b6113a4836112cb565b91506113b2602084016112cb565b90509250929050565b600181811c908216806113cf57607f821691505b6020821081036113ef57634e487b7160e01b600052602260045260246000fd5b50919050565b808201808211156103f857634e487b7160e01b600052601160045260246000fd5b60006020828403121561142857600080fd5b8151801515811461132c57600080fd5b6000825161144a818460208701611274565b919091019291505056fea164736f6c6343000813000a61018060405260146004553480156200001757600080fd5b5060405162002968380380620029688339810160408190526200003a9162000090565b6001600160a01b0397881660c05295871660e05293861661010052918516610120528416608052831660a052821661014052166101605262000151565b6001600160a01b03811681146200008d57600080fd5b50565b600080600080600080600080610100898b031215620000ae57600080fd5b8851620000bb8162000077565b60208a0151909850620000ce8162000077565b60408a0151909750620000e18162000077565b60608a0151909650620000f48162000077565b60808a0151909550620001078162000077565b60a08a01519094506200011a8162000077565b60c08a01519093506200012d8162000077565b60e08a0151909250620001408162000077565b809150509295985092959890939650565b60805160a05160c05160e051610100516101205161014051610160516126d1620002976000396000818161023a015281816103660152818161053901528181610592015281816105fa01528181610e0b01528181610f260152818161115b0152818161148101528181611612015281816116890152818161209c015261210a0152600081816101a801526109c20152600081816106e20152818161077201528181610bbc015261108801526000818161065201528181610eaf01528181610ede0152611052015260006114d9015260008181610cfe015281816116c901526119c60152600081816103900152818161042a0152818161047201528181610563015281816105b3015281816105d9015281816107e301528181610e8d01528181610f050152818161103001526111120152600081816102ec0152611e5101526126d16000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c8063cc85bd1611610097578063d279c19111610066578063d279c1911461025c578063d6460b4b1461026f578063e70b9e2714610282578063f2c03c58146102c957600080fd5b8063cc85bd16146101e2578063ce7c2ac214610202578063d076eabc14610222578063d1af0c7d1461023557600080fd5b806386989038116100d357806386989038146101745780638e79fd9a1461017d57806397ad1cce14610190578063bde30818146101a357600080fd5b80633a98ef39146101055780633dc60e831461012157806370b9f1f914610136578063849c4f1d14610149575b600080fd5b61010e60005481565b6040519081526020015b60405180910390f35b61013461012f36600461236d565b6102e9565b005b610134610144366004612399565b610364565b61010e61015736600461236d565b600860209081526000928352604080842090915290825290205481565b61010e60015481565b61010e61018b3660046123bb565b610885565b61013461019e36600461236d565b610920565b6101ca7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610118565b61010e6101f03660046123f4565b60066020526000908152604090205481565b61010e6102103660046123f4565b60026020526000908152604090205481565b61010e610230366004612411565b61092d565b6101ca7f000000000000000000000000000000000000000000000000000000000000000081565b61013461026a3660046123f4565b61097f565b61013461027d366004612438565b6109bf565b6102b46102903660046123bb565b60036020908152600092835260408084209091529082529020805460019091015482565b60408051928352602083019190915201610118565b61010e6102d73660046123f4565b60076020526000908152604090205481565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146103535760405162461bcd60e51b815260040161034a90602080825260049082015263082aaa8960e31b604082015260600190565b60405180910390fd5b6103603383836000610a36565b5050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036103e95760405162461bcd60e51b81526020600482015260016024820152602960f91b604482015260640161034a565b60c881111561041f5760405162461bcd60e51b81526020600482015260026024820152614d5360f01b604482015260640161034a565b811561045a5761045a7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316333085610c6c565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa1580156104c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e5919061247a565b90506000811161051b5760405162461bcd60e51b81526020600482015260016024820152604160f81b604482015260640161034a565b600061052682610cdd565b905061053281836124a9565b91506000807f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316106105d7577f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000061061a565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000005b60405163e3ddd77960e01b81526001600160a01b038084166004830152808316602483015261271060448301529294509092506000917f0000000000000000000000000000000000000000000000000000000000000000169063e3ddd77990606401602060405180830381865afa158015610699573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106bd91906124bc565b604051637fb4f79d60e01b81526001600160a01b0380831660048301529192506000917f00000000000000000000000000000000000000000000000000000000000000001690637fb4f79d90602401602060405180830381865afa158015610729573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061074d91906124bc565b60405163352fc4cd60e21b81526001600160a01b0380831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063d4bf133490602401602060405180830381865afa1580156107b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107dd919061247a565b905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316146108385781610829600160601b8a6124d9565b6108339190612506565b610851565b600160601b61084789846124d9565b6108519190612506565b90506000808a1161086457600454610866565b895b905061087889838360008e118c610df3565b5050505050505050505050565b6001600160a01b03811660009081526002602052604081205481036108ac5750600061091a565b6001600160a01b0382166000908152600260205260408120546108d09085906111e1565b6001600160a01b0380861660009081526003602090815260408083209388168352929052205490915080821161090b5760009250505061091a565b61091581836124a9565b925050505b92915050565b6103603383836001610a36565b60008061093983611215565b92505050620151808361094c919061251a565b6109576001836124a9565b61096490620151806124d9565b61096e90856124a9565b61097891906124a9565b9392505050565b6109888161123b565b6040516001600160a01b038216907f63e32091e4445d16e29c33a6b264577c2d86694021aa4e6f4dd590048f5792e890600090a250565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614610a265760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b604482015260640161034a565b610a318383836113d8565b505050565b60008211610a6a5760405162461bcd60e51b81526020600482015260016024820152604160f81b604482015260640161034a565b610a738361147d565b610aa35760405162461bcd60e51b81526020600482015260016024820152602b60f91b604482015260640161034a565b818115610ba4576040516370a0823160e01b81523060048201526000906001600160a01b038616906370a0823190602401602060405180830381865afa158015610af1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b15919061247a565b9050610b2c6001600160a01b038616873085610c6c565b6040516370a0823160e01b815230600482015281906001600160a01b038716906370a0823190602401602060405180830381865afa158015610b72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b96919061247a565b610ba091906124a9565b9150505b6000610baf82610cdd565b90508015610c5a57610c4d7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3c91906124bc565b6001600160a01b0387169083611544565b610c5781836124a9565b91505b610c648583611574565b505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610cd79085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526118ea565b50505050565b600080610ce86119bf565b50905080600003610cfc5750600092915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631ad8b03b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d7e91906124bc565b6001600160a01b0316633c9a07006040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddf919061247a565b610de982856124d9565b6109789190612506565b6040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a0823190602401602060405180830381865afa158015610e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7e919061247a565b9050610ed46001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000088611b25565b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016638d5752d67f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000006127108a6103e8610f568b826124a9565b610f60908d6124d9565b610f6a9190612506565b6040516001600160e01b031960e088901b1681526001600160a01b03958616600482015294909316602485015262ffffff9091166044840152606483015260848201523060a482015260c4016020604051808303816000875af1925050508015610ff1575060408051601f3d908101601f19168201909252610fee9181019061247a565b60015b61107c5782158015611005575060c8600454105b1561102357600a6004600082825461101d919061252e565b90915550505b6110776001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000167f000000000000000000000000000000000000000000000000000000000000000088611bd2565b610c64565b508115611139576111397f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110891906124bc565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169084611544565b601460049081556040516370a0823160e01b81523091810191909152610c64907f00000000000000000000000000000000000000000000000000000000000000009083906001600160a01b038316906370a0823190602401602060405180830381865afa1580156111ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d2919061247a565b6111dc91906124a9565b611574565b6001600160a01b0382166000908152600560205260408120546ec097ce7bc90715b34b9f100000000090610de990846124d9565b6000808061122e6112296201518086612506565b611cdb565b9196909550909350915050565b6001600160a01b038116600090815260026020526040812054900361125d5750565b60005b6009548110156103605760006009828154811061127f5761127f612541565b60009182526020822001546001600160a01b0316915061129f8285610885565b6001600160a01b0380841660009081526003602090815260408083209389168352929052908120600101805492935083929091906112de90849061252e565b90915550506001600160a01b0384166000908152600260205260409020546113079083906111e1565b6001600160a01b0380841660009081526003602090815260408083209389168352929052205580156113c3576001600160a01b0382166000908152600660205260408120805483929061135b90849061252e565b9091555061137590506001600160a01b0383168583611544565b816001600160a01b0316846001600160a01b03167f4fa9693cae526341d334e2862ca2413b2e503f1266255f9e0869fb36e6d89b17836040516113ba91815260200190565b60405180910390a35b505080806113d090612557565b915050611260565b6113e0611e4f565b8015611438576113f08383611ebe565b826001600160a01b03167fae0577e1c96b26fbc0b9df702431f5470979d001d24f136eded791b8b6521d6f8360405161142b91815260200190565b60405180910390a2505050565b6114428383611fb8565b826001600160a01b03167fba8f3777cf908803bf1f3dd58e7f4b7d3de4dbe3c234c4ccab0975d98f7cd3888360405161142b91815260200190565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316148061091a5750604051634d8c928d60e11b81526001600160a01b0383811660048301527f00000000000000000000000000000000000000000000000000000000000000001690639b19251a90602401602060405180830381865afa158015611520573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061091a9190612570565b6040516001600160a01b038316602482015260448101829052610a3190849063a9059cbb60e01b90606401610ca0565b6001600160a01b0382166000908152600a602052604090205460ff166115fa576001600160a01b0382166000818152600a60205260408120805460ff191660019081179091556009805491820181559091527f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b03191690911790555b80600003611606575050565b60005460000361167e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146116755760405162461bcd60e51b81526020600482015260016024820152602960f91b604482015260640161034a565b61036081612086565b806001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116908416036117e05760006116bc6119bf565b91505080156117de5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631ad8b03b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611725573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061174991906124bc565b6001600160a01b0316633c9a07006040518163ffffffff1660e01b8152600401602060405180830381865afa158015611786573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117aa919061247a565b6117b483866124d9565b6117be9190612506565b905080156117dc576117cf81612086565b6117d981846124a9565b92505b505b505b6001600160a01b0383166000908152600760205260408120805483929061180890849061252e565b90915550506001600160a01b038316600090815260086020526040812082916118304261092d565b8152602001908152602001600020600082825461184d919061252e565b909155505060005461186e826ec097ce7bc90715b34b9f10000000006124d9565b6118789190612506565b6001600160a01b038416600090815260056020526040812080549091906118a090849061252e565b90915550506040518181526001600160a01b0384169033907f6f1ecfed9dbd8c39701eb5288ad020f77ec8a5b2f93133e85482bf66cb877a309060200160405180910390a3505050565b600061193f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166121369092919063ffffffff16565b90508051600014806119605750808060200190518101906119609190612570565b610a315760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b606482015260840161034a565b60008060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316631ad8b03b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4691906124bc565b90506001600160a01b03811615611b2057806001600160a01b031663676011556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a95573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab9919061247a565b9250806001600160a01b0316630389ed176040518163ffffffff1660e01b8152600401602060405180830381865afa158015611af9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b1d919061247a565b91505b509091565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015611b75573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b99919061247a565b9050610cd78463095ea7b360e01b85611bb2868661252e565b6040516001600160a01b0390921660248301526044820152606401610ca0565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e90604401602060405180830381865afa158015611c22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c46919061247a565b905081811015611caa5760405162461bcd60e51b815260206004820152602960248201527f5361666545524332303a2064656372656173656420616c6c6f77616e63652062604482015268656c6f77207a65726f60b81b606482015260840161034a565b6040516001600160a01b03841660248201528282036044820152610cd790859063095ea7b360e01b90606401610ca0565b60008080838162253d8c611cf28362010bd961258d565b611cfc919061258d565b9050600062023ab1611d0f8360046125b5565b611d1991906125e5565b90506004611d2a8262023ab16125b5565b611d3590600361258d565b611d3f91906125e5565b611d499083612613565b9150600062164b09611d5c84600161258d565b611d6890610fa06125b5565b611d7291906125e5565b90506004611d82826105b56125b5565b611d8c91906125e5565b611d969084612613565b611da190601f61258d565b9250600061098f611db38560506125b5565b611dbd91906125e5565b905060006050611dcf8361098f6125b5565b611dd991906125e5565b611de39086612613565b9050611df0600b836125e5565b9450611dfd85600c6125b5565b611e0883600261258d565b611e129190612613565b91508483611e21603187612613565b611e2c9060646125b5565b611e36919061258d565b611e40919061258d565b9a919950975095505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663bb4630276040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611eaa57600080fd5b505af1158015610cd7573d6000803e3d6000fd5b6001600160a01b03821660009081526002602052604090205415801590611efd57506001600160a01b0382166000908152600260205260409020548111155b611f2e5760405162461bcd60e51b8152602060048201526002602482015261524560f01b604482015260640161034a565b611f378261123b565b80600080828254611f4891906124a9565b90915550506001600160a01b03821660009081526002602052604081208054839290611f759084906124a9565b90915550506001600160a01b0382166000908152600260205260408120549003611faf5760018054906000611fa98361263a565b91905055505b6103608261214d565b6001600160a01b03821660009081526002602052604090205415611fdf57611fdf8261123b565b6001600160a01b038216600090815260026020526040812054815490918391819061200b90849061252e565b90915550506001600160a01b0383166000908152600260205260408120805484929061203890849061252e565b90915550508015801561206257506001600160a01b03831660009081526002602052604090205415155b1561207d576001805490600061207783612557565b91905055505b610a318361214d565b604051630852cd8d60e31b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906342966c6890602401600060405180830381600087803b1580156120e857600080fd5b505af19250505080156120f9575060015b612133576121336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661dead83611544565b50565b606061214584846000856121df565b949350505050565b60005b6009548110156103605760006009828154811061216f5761216f612541565b60009182526020808320909101546001600160a01b0386811684526002909252604090922054911691506121a49082906111e1565b6001600160a01b03918216600090815260036020908152604080832094871683529390529190912055806121d781612557565b915050612150565b6060824710156122405760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b606482015260840161034a565b600080866001600160a01b0316858760405161225c9190612675565b60006040518083038185875af1925050503d8060008114612299576040519150601f19603f3d011682016040523d82523d6000602084013e61229e565b606091505b50915091506122af878383876122ba565b979650505050505050565b60608315612329578251600003612322576001600160a01b0385163b6123225760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161034a565b5081612145565b612145838381511561233e5781518083602001fd5b8060405162461bcd60e51b815260040161034a9190612691565b6001600160a01b038116811461213357600080fd5b6000806040838503121561238057600080fd5b823561238b81612358565b946020939093013593505050565b600080604083850312156123ac57600080fd5b50508035926020909101359150565b600080604083850312156123ce57600080fd5b82356123d981612358565b915060208301356123e981612358565b809150509250929050565b60006020828403121561240657600080fd5b813561097881612358565b60006020828403121561242357600080fd5b5035919050565b801515811461213357600080fd5b60008060006060848603121561244d57600080fd5b833561245881612358565b925060208401359150604084013561246f8161242a565b809150509250925092565b60006020828403121561248c57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561091a5761091a612493565b6000602082840312156124ce57600080fd5b815161097881612358565b808202811582820484141761091a5761091a612493565b634e487b7160e01b600052601260045260246000fd5b600082612515576125156124f0565b500490565b600082612529576125296124f0565b500690565b8082018082111561091a5761091a612493565b634e487b7160e01b600052603260045260246000fd5b60006001820161256957612569612493565b5060010190565b60006020828403121561258257600080fd5b81516109788161242a565b80820182811260008312801582168215821617156125ad576125ad612493565b505092915050565b80820260008212600160ff1b841416156125d1576125d1612493565b818105831482151761091a5761091a612493565b6000826125f4576125f46124f0565b600160ff1b82146000198414161561260e5761260e612493565b500590565b818103600083128015838313168383128216171561263357612633612493565b5092915050565b60008161264957612649612493565b506000190190565b60005b8381101561266c578181015183820152602001612654565b50506000910152565b60008251612687818460208701612651565b9190910192915050565b60208152600082518060208401526126b0816040850160208701612651565b601f01601f1916919091016040019291505056fea164736f6c6343000813000a00000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000260000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000138800000000000000000000000000000000000000000000000000000000000000640000000000000000000000000000000000000000000000000000000000000064000000000000000000000000000000000000000000000000000000000000004d000000000000000000000000000000000000000000000000000000000000004d000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a000000000000000000000000000000000000000000000000000000000000002e000000000000000000000000088e08adb69f2618adf1a3ff6cc43c671612d1ca400000000000000000000000002f92800f57bcd74066f5709f1daa1a4302df8750000000000000000000000007686aa8b32aa9eb135ac15a549ccd71976c878bb0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000870656168616c6c6100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097056616c68616c6c6100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000dfc5964141c018485b4d017634660f85aa66771400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000056bc75e2d63100000