cic-internal-integration/apps/cic-eth/tests/testdata/bancor/TestLiquidityPoolV1Converter.json

3038 lines
261 KiB
JSON

{
"contractName": "TestLiquidityPoolV1Converter",
"abi": [
{
"inputs": [
{
"internalType": "contract ISmartToken",
"name": "_token",
"type": "address"
},
{
"internalType": "contract IContractRegistry",
"name": "_registry",
"type": "address"
},
{
"internalType": "uint32",
"name": "_maxConversionFee",
"type": "uint32"
}
],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "uint16",
"name": "_type",
"type": "uint16"
},
{
"indexed": true,
"internalType": "contract IConverterAnchor",
"name": "_anchor",
"type": "address"
},
{
"indexed": true,
"internalType": "bool",
"name": "_activated",
"type": "bool"
}
],
"name": "Activation",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "contract IERC20Token",
"name": "_fromToken",
"type": "address"
},
{
"indexed": true,
"internalType": "contract IERC20Token",
"name": "_toToken",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_trader",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_return",
"type": "uint256"
},
{
"indexed": false,
"internalType": "int256",
"name": "_conversionFee",
"type": "int256"
}
],
"name": "Conversion",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint32",
"name": "_prevFee",
"type": "uint32"
},
{
"indexed": false,
"internalType": "uint32",
"name": "_newFee",
"type": "uint32"
}
],
"name": "ConversionFeeUpdate",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_provider",
"type": "address"
},
{
"indexed": true,
"internalType": "contract IERC20Token",
"name": "_reserveToken",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_newBalance",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_newSupply",
"type": "uint256"
}
],
"name": "LiquidityAdded",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_provider",
"type": "address"
},
{
"indexed": true,
"internalType": "contract IERC20Token",
"name": "_reserveToken",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_newBalance",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_newSupply",
"type": "uint256"
}
],
"name": "LiquidityRemoved",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "_prevOwner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "_newOwner",
"type": "address"
}
],
"name": "OwnerUpdate",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "contract IERC20Token",
"name": "_connectorToken",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_tokenSupply",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_connectorBalance",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint32",
"name": "_connectorWeight",
"type": "uint32"
}
],
"name": "PriceDataUpdate",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "contract IERC20Token",
"name": "_token1",
"type": "address"
},
{
"indexed": true,
"internalType": "contract IERC20Token",
"name": "_token2",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_rateN",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "_rateD",
"type": "uint256"
}
],
"name": "TokenRateUpdate",
"type": "event"
},
{
"inputs": [],
"name": "acceptAnchorOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "acceptOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "acceptTokenOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token[]",
"name": "_reserveTokens",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "_reserveAmounts",
"type": "uint256[]"
},
{
"internalType": "uint256",
"name": "_minReturn",
"type": "uint256"
}
],
"name": "addLiquidity",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token[]",
"name": "_reserveTokens",
"type": "address[]"
},
{
"internalType": "uint256",
"name": "_reserveTokenIndex",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_reserveAmount",
"type": "uint256"
}
],
"name": "addLiquidityCost",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_reserveToken",
"type": "address"
},
{
"internalType": "uint256",
"name": "_reserveAmount",
"type": "uint256"
}
],
"name": "addLiquidityReturn",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_token",
"type": "address"
},
{
"internalType": "uint32",
"name": "_weight",
"type": "uint32"
}
],
"name": "addReserve",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "anchor",
"outputs": [
{
"internalType": "contract IConverterAnchor",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "connectorTokenCount",
"outputs": [
{
"internalType": "uint16",
"name": "",
"type": "uint16"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_index",
"type": "uint256"
}
],
"name": "connectorTokens",
"outputs": [
{
"internalType": "contract IERC20Token",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_address",
"type": "address"
}
],
"name": "connectors",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "",
"type": "uint32"
},
{
"internalType": "bool",
"name": "",
"type": "bool"
},
{
"internalType": "bool",
"name": "",
"type": "bool"
},
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "conversionFee",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "conversionWhitelist",
"outputs": [
{
"internalType": "contract IWhitelist",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "conversionsEnabled",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_sourceToken",
"type": "address"
},
{
"internalType": "contract IERC20Token",
"name": "_targetToken",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "address",
"name": "_trader",
"type": "address"
},
{
"internalType": "address payable",
"name": "_beneficiary",
"type": "address"
}
],
"name": "convert",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [],
"name": "converterType",
"outputs": [
{
"internalType": "uint16",
"name": "",
"type": "uint16"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "currentTime",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_x",
"type": "uint256"
}
],
"name": "decimalLength",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "fund",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256[]",
"name": "_values",
"type": "uint256[]"
}
],
"name": "geometricMean",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_connectorToken",
"type": "address"
}
],
"name": "getConnectorBalance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_sourceToken",
"type": "address"
},
{
"internalType": "contract IERC20Token",
"name": "_targetToken",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "getReturn",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "hasETHReserve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "isActive",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "isStandardPool",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "isV28OrHigher",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "liquidate",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "maxConversionFee",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "newOwner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "onlyOwnerCanUpdateRegistry",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "prevAverageRate",
"outputs": [
{
"internalType": "uint256",
"name": "n",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "d",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "prevAverageRateUpdateTime",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "prevRegistry",
"outputs": [
{
"internalType": "contract IContractRegistry",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_token",
"type": "address"
}
],
"name": "recentAverageRate",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "registry",
"outputs": [
{
"internalType": "contract IContractRegistry",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "contract IERC20Token[]",
"name": "_reserveTokens",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "_reserveMinReturnAmounts",
"type": "uint256[]"
}
],
"name": "removeLiquidity",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
},
{
"internalType": "contract IERC20Token[]",
"name": "_reserveTokens",
"type": "address[]"
}
],
"name": "removeLiquidityReturn",
"outputs": [
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_reserveToken",
"type": "address"
}
],
"name": "reserveBalance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "reserveRatio",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "reserveTokenCount",
"outputs": [
{
"internalType": "uint16",
"name": "",
"type": "uint16"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"name": "reserveTokens",
"outputs": [
{
"internalType": "contract IERC20Token",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_reserveToken",
"type": "address"
}
],
"name": "reserveWeight",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "",
"type": "address"
}
],
"name": "reserves",
"outputs": [
{
"internalType": "uint256",
"name": "balance",
"type": "uint256"
},
{
"internalType": "uint32",
"name": "weight",
"type": "uint32"
},
{
"internalType": "bool",
"name": "deprecated1",
"type": "bool"
},
{
"internalType": "bool",
"name": "deprecated2",
"type": "bool"
},
{
"internalType": "bool",
"name": "isSet",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "restoreRegistry",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bool",
"name": "_onlyOwnerCanUpdateRegistry",
"type": "bool"
}
],
"name": "restrictRegistryUpdate",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_n",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_d",
"type": "uint256"
}
],
"name": "roundDiv",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint32",
"name": "_conversionFee",
"type": "uint32"
}
],
"name": "setConversionFee",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IWhitelist",
"name": "_whitelist",
"type": "address"
}
],
"name": "setConversionWhitelist",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_sourceToken",
"type": "address"
},
{
"internalType": "contract IERC20Token",
"name": "_targetToken",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "targetAmountAndFee",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "token",
"outputs": [
{
"internalType": "contract IConverterAnchor",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_newOwner",
"type": "address"
}
],
"name": "transferAnchorOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_newOwner",
"type": "address"
}
],
"name": "transferTokenOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "updateRegistry",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "upgrade",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "version",
"outputs": [
{
"internalType": "uint16",
"name": "",
"type": "uint16"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address payable",
"name": "_to",
"type": "address"
}
],
"name": "withdrawETH",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_token",
"type": "address"
},
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "withdrawFromAnchor",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20Token",
"name": "_token",
"type": "address"
},
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "withdrawTokens",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"stateMutability": "payable",
"type": "receive"
},
{
"inputs": [
{
"internalType": "contract IEtherToken",
"name": "_etherToken",
"type": "address"
}
],
"name": "setEtherToken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_currentTime",
"type": "uint256"
}
],
"name": "setTime",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"contract ISmartToken\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"contract IContractRegistry\",\"name\":\"_registry\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_maxConversionFee\",\"type\":\"uint32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint16\",\"name\":\"_type\",\"type\":\"uint16\"},{\"indexed\":true,\"internalType\":\"contract IConverterAnchor\",\"name\":\"_anchor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"_activated\",\"type\":\"bool\"}],\"name\":\"Activation\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20Token\",\"name\":\"_fromToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20Token\",\"name\":\"_toToken\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_trader\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_return\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"_conversionFee\",\"type\":\"int256\"}],\"name\":\"Conversion\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"_prevFee\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"_newFee\",\"type\":\"uint32\"}],\"name\":\"ConversionFeeUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20Token\",\"name\":\"_reserveToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newSupply\",\"type\":\"uint256\"}],\"name\":\"LiquidityAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_provider\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20Token\",\"name\":\"_reserveToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_newSupply\",\"type\":\"uint256\"}],\"name\":\"LiquidityRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_prevOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"OwnerUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20Token\",\"name\":\"_connectorToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_tokenSupply\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_connectorBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"_connectorWeight\",\"type\":\"uint32\"}],\"name\":\"PriceDataUpdate\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contract IERC20Token\",\"name\":\"_token1\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"contract IERC20Token\",\"name\":\"_token2\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rateN\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_rateD\",\"type\":\"uint256\"}],\"name\":\"TokenRateUpdate\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptAnchorOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptTokenOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token[]\",\"name\":\"_reserveTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_reserveAmounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256\",\"name\":\"_minReturn\",\"type\":\"uint256\"}],\"name\":\"addLiquidity\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token[]\",\"name\":\"_reserveTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_reserveTokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_reserveAmount\",\"type\":\"uint256\"}],\"name\":\"addLiquidityCost\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_reserveToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_reserveAmount\",\"type\":\"uint256\"}],\"name\":\"addLiquidityReturn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"_weight\",\"type\":\"uint32\"}],\"name\":\"addReserve\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"anchor\",\"outputs\":[{\"internalType\":\"contract IConverterAnchor\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"connectorTokenCount\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_index\",\"type\":\"uint256\"}],\"name\":\"connectorTokens\",\"outputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"connectors\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"conversionFee\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"conversionWhitelist\",\"outputs\":[{\"internalType\":\"contract IWhitelist\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"conversionsEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_sourceToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20Token\",\"name\":\"_targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_trader\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"_beneficiary\",\"type\":\"address\"}],\"name\":\"convert\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"converterType\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_x\",\"type\":\"uint256\"}],\"name\":\"decimalLength\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"fund\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[]\",\"name\":\"_values\",\"type\":\"uint256[]\"}],\"name\":\"geometricMean\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_connectorToken\",\"type\":\"address\"}],\"name\":\"getConnectorBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_sourceToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20Token\",\"name\":\"_targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"getReturn\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"hasETHReserve\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isActive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isStandardPool\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isV28OrHigher\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"liquidate\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"maxConversionFee\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"newOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"onlyOwnerCanUpdateRegistry\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"prevAverageRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"n\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"d\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"prevAverageRateUpdateTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"prevRegistry\",\"outputs\":[{\"internalType\":\"contract IContractRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"recentAverageRate\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registry\",\"outputs\":[{\"internalType\":\"contract IContractRegistry\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20Token[]\",\"name\":\"_reserveTokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"_reserveMinReturnAmounts\",\"type\":\"uint256[]\"}],\"name\":\"removeLiquidity\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"},{\"internalType\":\"contract IERC20Token[]\",\"name\":\"_reserveTokens\",\"type\":\"address[]\"}],\"name\":\"removeLiquidityReturn\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_reserveToken\",\"type\":\"address\"}],\"name\":\"reserveBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reserveRatio\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"reserveTokenCount\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"reserveTokens\",\"outputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_reserveToken\",\"type\":\"address\"}],\"name\":\"reserveWeight\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"reserves\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"weight\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"deprecated1\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"deprecated2\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"restoreRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_onlyOwnerCanUpdateRegistry\",\"type\":\"bool\"}],\"name\":\"restrictRegistryUpdate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_n\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_d\",\"type\":\"uint256\"}],\"name\":\"roundDiv\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"_conversionFee\",\"type\":\"uint32\"}],\"name\":\"setConversionFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IWhitelist\",\"name\":\"_whitelist\",\"type\":\"address\"}],\"name\":\"setConversionWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IEtherToken\",\"name\":\"_etherToken\",\"type\":\"address\"}],\"name\":\"setEtherToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_currentTime\",\"type\":\"uint256\"}],\"name\":\"setTime\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_sourceToken\",\"type\":\"address\"},{\"internalType\":\"contract IERC20Token\",\"name\":\"_targetToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"targetAmountAndFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IConverterAnchor\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferAnchorOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newOwner\",\"type\":\"address\"}],\"name\":\"transferTokenOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"updateRegistry\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address payable\",\"name\":\"_to\",\"type\":\"address\"}],\"name\":\"withdrawETH\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawFromAnchor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20Token\",\"name\":\"_token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_to\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdrawTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{\"acceptAnchorOwnership()\":{\"details\":\"accepts ownership of the anchor after an ownership transfer also activates the converter can only be called by the contract owner note that prior to version 28, you should use 'acceptTokenOwnership' instead\"},\"acceptOwnership()\":{\"details\":\"used by a new owner to accept an ownership transfer\"},\"acceptTokenOwnership()\":{\"details\":\"deprecated, backward compatibility\"},\"addLiquidity(address[],uint256[],uint256)\":{\"details\":\"increases the pool's liquidity and mints new shares in the pool to the caller note that prior to version 28, you should use 'fund' instead\",\"params\":{\"_minReturn\":\"token minimum return-amount\",\"_reserveAmounts\":\"amount of each reserve token\",\"_reserveTokens\":\"address of each reserve token\"},\"returns\":{\"_0\":\"amount of pool tokens issued\"}},\"addLiquidityCost(address[],uint256,uint256)\":{\"details\":\"given the amount of one of the reserve tokens to add liquidity of, returns the required amount of each one of the other reserve tokens since an empty pool can be funded with any list of non-zero input amounts, this function assumes that the pool is not empty (has already been funded)\",\"params\":{\"_reserveAmount\":\"amount of the relevant reserve token\",\"_reserveTokenIndex\":\"index of the relevant reserve token\",\"_reserveTokens\":\"address of each reserve token\"},\"returns\":{\"_0\":\"the required amount of each one of the reserve tokens\"}},\"addLiquidityReturn(address,uint256)\":{\"details\":\"given the amount of one of the reserve tokens to add liquidity of, returns the amount of pool tokens entitled for it since an empty pool can be funded with any list of non-zero input amounts, this function assumes that the pool is not empty (has already been funded)\",\"params\":{\"_reserveAmount\":\"amount of the reserve token\",\"_reserveToken\":\"address of the reserve token\"},\"returns\":{\"_0\":\"the amount of pool tokens entitled\"}},\"addReserve(address,uint32)\":{\"details\":\"defines a new reserve token for the converter can only be called by the owner while the converter is inactive\",\"params\":{\"_token\":\"address of the reserve token\",\"_weight\":\"reserve weight, represented in ppm, 1-1000000\"}},\"connectorTokenCount()\":{\"details\":\"deprecated, backward compatibility\"},\"connectorTokens(uint256)\":{\"details\":\"deprecated, backward compatibility\"},\"connectors(address)\":{\"details\":\"deprecated, backward compatibility\"},\"convert(address,address,uint256,address,address)\":{\"details\":\"converts a specific amount of source tokens to target tokens can only be called by the bancor network contract\",\"params\":{\"_amount\":\"amount of tokens to convert (in units of the source token)\",\"_beneficiary\":\"wallet to receive the conversion result\",\"_sourceToken\":\"source ERC20 token\",\"_targetToken\":\"target ERC20 token\",\"_trader\":\"address of the caller who executed the conversion\"},\"returns\":{\"_0\":\"amount of tokens received (in units of the target token)\"}},\"converterType()\":{\"details\":\"returns the converter type\",\"returns\":{\"_0\":\"see the converter types in the the main contract doc\"}},\"decimalLength(uint256)\":{\"details\":\"returns the number of decimal digits in a given value\",\"params\":{\"_x\":\"value (assumed positive)\"},\"returns\":{\"_0\":\"the number of decimal digits in the given value\"}},\"fund(uint256)\":{\"details\":\"increases the pool's liquidity and mints new shares in the pool to the caller for example, if the caller increases the supply by 10%, then it will cost an amount equal to 10% of each reserve token balance note that starting from version 28, you should use 'addLiquidity' instead\",\"params\":{\"_amount\":\"amount to increase the supply by (in the pool token)\"},\"returns\":{\"_0\":\"amount of pool tokens issued\"}},\"geometricMean(uint256[])\":{\"details\":\"returns the average number of decimal digits in a given list of values\",\"params\":{\"_values\":\"list of values (each of which assumed positive)\"},\"returns\":{\"_0\":\"the average number of decimal digits in the given list of values\"}},\"getConnectorBalance(address)\":{\"details\":\"deprecated, backward compatibility\"},\"getReturn(address,address,uint256)\":{\"details\":\"deprecated, backward compatibility\"},\"hasETHReserve()\":{\"details\":\"checks whether or not the converter has an ETH reserve\",\"returns\":{\"_0\":\"true if the converter has an ETH reserve, false otherwise\"}},\"isActive()\":{\"details\":\"returns true if the converter is active, false otherwise\",\"returns\":{\"_0\":\"true if the converter is active, false otherwise\"}},\"isV28OrHigher()\":{\"details\":\"checks whether or not the converter version is 28 or higher\",\"returns\":{\"_0\":\"true, since the converter version is 28 or higher\"}},\"liquidate(uint256)\":{\"details\":\"decreases the pool's liquidity and burns the caller's shares in the pool for example, if the holder sells 10% of the supply, then they will receive 10% of each reserve token balance in return note that starting from version 28, you should use 'removeLiquidity' instead\",\"params\":{\"_amount\":\"amount to liquidate (in the pool token)\"},\"returns\":{\"_0\":\"the amount of each reserve token granted for the given amount of pool tokens\"}},\"recentAverageRate(address)\":{\"details\":\"returns the recent average rate of 1 `_token` in the other reserve token units note that the rate can only be queried for reserves in a standard pool\",\"params\":{\"_token\":\"token to get the rate for\"},\"returns\":{\"_0\":\"recent average rate between the reserves (numerator)\",\"_1\":\"recent average rate between the reserves (denominator)\"}},\"removeLiquidity(uint256,address[],uint256[])\":{\"details\":\"decreases the pool's liquidity and burns the caller's shares in the pool note that prior to version 28, you should use 'liquidate' instead\",\"params\":{\"_amount\":\"token amount\",\"_reserveMinReturnAmounts\":\"minimum return-amount of each reserve token\",\"_reserveTokens\":\"address of each reserve token\"},\"returns\":{\"_0\":\"the amount of each reserve token granted for the given amount of pool tokens\"}},\"removeLiquidityReturn(uint256,address[])\":{\"details\":\"returns the amount of each reserve token entitled for a given amount of pool tokens\",\"params\":{\"_amount\":\"amount of pool tokens\",\"_reserveTokens\":\"address of each reserve token\"},\"returns\":{\"_0\":\"the amount of each reserve token entitled for the given amount of pool tokens\"}},\"reserveBalance(address)\":{\"details\":\"returns the reserve's balance note that prior to version 17, you should use 'getConnectorBalance' instead\",\"params\":{\"_reserveToken\":\"reserve token contract address\"},\"returns\":{\"_0\":\"reserve balance\"}},\"reserveTokenCount()\":{\"details\":\"returns the number of reserve tokens defined note that prior to version 17, you should use 'connectorTokenCount' instead\",\"returns\":{\"_0\":\"number of reserve tokens\"}},\"reserveWeight(address)\":{\"details\":\"returns the reserve's weight added in version 28\",\"params\":{\"_reserveToken\":\"reserve token contract address\"},\"returns\":{\"_0\":\"reserve weight\"}},\"restoreRegistry()\":{\"details\":\"restores the previous contract-registry\"},\"restrictRegistryUpdate(bool)\":{\"details\":\"restricts the permission to update the contract-registry\",\"params\":{\"_onlyOwnerCanUpdateRegistry\":\"indicates whether or not permission is restricted to owner only\"}},\"roundDiv(uint256,uint256)\":{\"details\":\"returns the nearest integer to a given quotient\",\"params\":{\"_d\":\"quotient denominator\",\"_n\":\"quotient numerator\"},\"returns\":{\"_0\":\"the nearest integer to the given quotient\"}},\"setConversionFee(uint32)\":{\"details\":\"updates the current conversion fee can only be called by the contract owner\",\"params\":{\"_conversionFee\":\"new conversion fee, represented in ppm\"}},\"setConversionWhitelist(address)\":{\"details\":\"allows the owner to update & enable the conversion whitelist contract address when set, only addresses that are whitelisted are actually allowed to use the converter note that the whitelist check is actually done by the BancorNetwork contract\",\"params\":{\"_whitelist\":\"address of a whitelist contract\"}},\"targetAmountAndFee(address,address,uint256)\":{\"details\":\"returns the expected target amount of converting one reserve to another along with the fee\",\"params\":{\"_amount\":\"amount of tokens received from the user\",\"_sourceToken\":\"contract address of the source reserve token\",\"_targetToken\":\"contract address of the target reserve token\"},\"returns\":{\"_0\":\"expected target amount\",\"_1\":\"expected fee\"}},\"token()\":{\"details\":\"deprecated since version 28, backward compatibility - use only for earlier versions\"},\"transferAnchorOwnership(address)\":{\"details\":\"transfers the anchor ownership the new owner needs to accept the transfer can only be called by the converter upgrder while the upgrader is the owner note that prior to version 28, you should use 'transferAnchorOwnership' instead\",\"params\":{\"_newOwner\":\"new token owner\"}},\"transferOwnership(address)\":{\"details\":\"allows transferring the contract ownership the new owner still needs to accept the transfer can only be called by the contract owner\",\"params\":{\"_newOwner\":\"new contract owner\"}},\"transferTokenOwnership(address)\":{\"details\":\"deprecated, backward compatibility\"},\"updateRegistry()\":{\"details\":\"updates to the new contract-registry\"},\"upgrade()\":{\"details\":\"upgrades the converter to the latest version can only be called by the owner note that the owner needs to call acceptOwnership on the new converter after the upgrade\"},\"withdrawETH(address)\":{\"details\":\"withdraws ether can only be called by the owner if the converter is inactive or by upgrader contract can only be called after the upgrader contract has accepted the ownership of this contract can only be called if the converter has an ETH reserve\",\"params\":{\"_to\":\"address to send the ETH to\"}},\"withdrawFromAnchor(address,address,uint256)\":{\"details\":\"withdraws tokens held by the anchor and sends them to an account can only be called by the owner\",\"params\":{\"_amount\":\"amount to withdraw\",\"_to\":\"account to receive the new amount\",\"_token\":\"ERC20 token contract address\"}},\"withdrawTokens(address,address,uint256)\":{\"details\":\"withdraws tokens held by the converter and sends them to an account can only be called by the owner note that reserve tokens can only be withdrawn by the owner while the converter is inactive unless the owner is the converter upgrader contract\",\"params\":{\"_amount\":\"amount to withdraw\",\"_to\":\"account to receive the new amount\",\"_token\":\"ERC20 token contract address\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/helpers/TestLiquidityPoolV1Converter.sol\":\"TestLiquidityPoolV1Converter\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/bancorx/interfaces/IBancorX.sol\":{\"keccak256\":\"0x65b5780d710159c7540078c38406c53db37a349fb468a0bf21bdc6262e497951\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://3df931a12770d10a22451326e38ae9d405d3e2716bdbdd6306b5e2361f6fe511\",\"dweb:/ipfs/QmcRBSaFLz516dAEqb8ZEiyx8ZTHZZ6rfxHn5roL2fHA3S\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/ConverterBase.sol\":{\"keccak256\":\"0x242211f471f27635fa98bdeed238429942c55fc9a5e824c1a30cd88fad727f9b\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://f9769299a5e13c363d102c4c08b09e3a87ec053124dcc157be0a6448c13e3320\",\"dweb:/ipfs/QmUC2CaAr6emVkJN62xXBY83r1f7Hxj62UAavZsCSWcqUb\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/LiquidityPoolConverter.sol\":{\"keccak256\":\"0x075a4ba13d871f8f55da9889651f875a1f7537b2c8ea7ad330499d148345fc17\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://34f5ed00855a9737349919242b0c7f1d531ad4e7caf3c9e5c14583c743224eaa\",\"dweb:/ipfs/QmRjiQLCLCEkrkXFmaYRtu597ezB42mHCmdN2RkF876ibE\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IBancorFormula.sol\":{\"keccak256\":\"0xf30c95034af4c4ec6e8a859e90cf7a0bada29a805ede76e04644107a7c677c4e\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://b48070d4abf9c4a08c39e6c494fa9efd7389aa7f8b61b283c9ba02062b1c59b6\",\"dweb:/ipfs/Qme6U7SpspFPzMH2mTyKsXCnJEAgg1vX6NNFzuykbVSY5R\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverter.sol\":{\"keccak256\":\"0x18b0d73a3d5ee951ede1b3f840ed35b40570e34975703079a4451555f4dd089b\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://1cd7263f1ef60793e3929509150420037df9a1194c3d0f40bb2ff5516d6a373f\",\"dweb:/ipfs/QmNUbsZt2rzWPjStYycgz3vMbNP4VrAqZPRAK39QNqUoos\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverterAnchor.sol\":{\"keccak256\":\"0x9448cdbe90293fb5c1a0808b77af8754a1025b59c45f432eee01f659361a6115\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://1ef2bb2e1543c9324daf7f3fd086a57efb45b89f3d62b9d7a9fc78c138d24dbc\",\"dweb:/ipfs/QmVcXDib3K6xYJMBNxawmo4krJGiDfxb5oL64Lc3pi14XK\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/interfaces/IConverterUpgrader.sol\":{\"keccak256\":\"0x456faf61358bfd76498892509cc99f9729f310c9450e28b0d03b5e7cd9752802\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://01f7b3f24cc895a948ea44f8e067d312b55ef1e9cf491908f3fb948d02b914da\",\"dweb:/ipfs/QmfSwZrWFWmT8xeX3iwSq75Vs8pQaQBGkmxJEHehUiPP1N\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/types/liquidity-pool-v1/LiquidityPoolV1Converter.sol\":{\"keccak256\":\"0xa85da56481d8c3e936853f4292f67bb41a534163c11fdb380507fa99b8453648\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://20ab9df64f764e0b050525e489165119026ff12af769bf417ed682b5f3ee70d3\",\"dweb:/ipfs/QmVupKPZQwoTd5ifKDx71iyFVZ7hQvMeimMz7VE4TBn53v\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/helpers/TestLiquidityPoolV1Converter.sol\":{\"keccak256\":\"0xd12303567a04356c1733b883e6d9322e2d584285731d4a397da1c0df19af48b2\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://e4d5c7f62b49ba0323616dad891d919f5b30ba7b9cf1c427b61563f4dac4203a\",\"dweb:/ipfs/Qme7748qCaccxdjt2T4XrFuSxjBEHD55aVtC1FwFaJavj5\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/token/interfaces/IERC20Token.sol\":{\"keccak256\":\"0xe6f988c3156e88258474526a541d5a42b6a9adae98b04177a059d9f723bc82cd\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://9a6eb77a5b9ce70995a11a6e48ac3985a4c70896fe5fe04d46146ad7c1c83ea3\",\"dweb:/ipfs/QmYvGSveZFG51tghwkVuu6eK9Jy8frHpfLxHTMyvNZN461\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/token/interfaces/IEtherToken.sol\":{\"keccak256\":\"0x6ed324da616d70af0b21fa073b1e5329b430e38b470177633a69710eff3da893\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://44f94aa59c67de636423cbdef82efb7d8e0562e73dfc9049a48054156aebaf14\",\"dweb:/ipfs/Qmdn8KAP54s7X3J6TCoZPhCpS19aCQzFYZuFABugJ5JA5D\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/token/interfaces/ISmartToken.sol\":{\"keccak256\":\"0x5cfc15e7a23a9872059b0cea4d2ae902c3fc074a39e1c645036ce38ad47881ec\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://890ee09d24de5778e34c4c27d1377d83d378e8f4a13fcb94d5102f61d4749cce\",\"dweb:/ipfs/QmT89f61fmsUN1BVdebKxUc5VU7sitiP33LNk7TTtF18oj\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ContractRegistryClient.sol\":{\"keccak256\":\"0x74caf88eff1cb113ad8277df9ba7933a6f1e0deea8fd1855157def3be833b859\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://c7793c9f245736cd8413bc8c4b5c40b67949cbee32289a16d29c83cf59396ad6\",\"dweb:/ipfs/QmWony7b1buUrGnE32gjLAnSwkBYMrJ68vUcCwDMmp3MbJ\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Owned.sol\":{\"keccak256\":\"0x6ef69d9dcc80a8a36d5eb37783375cd5e4831c6d20c723fa6f6b6a06c0aeb53d\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://5a5d087e2c5b47739615ef22e1f29749de44b43c9a37cfae32b3dfc498a258c4\",\"dweb:/ipfs/Qmd1mXKEQbmBxqHk326LGVzNoayXsam8gZNecknnYpBnyh\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/ReentrancyGuard.sol\":{\"keccak256\":\"0x5ea87c10dd6e7e79212da712eb5f079c03361e6c96e299a4ffd9aaee8d6a3899\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://882aac64a791df35a942480e6ce611d1acb399af4ac0c4ef0288965c3785bf50\",\"dweb:/ipfs/QmeWeYYFh5HZAzJ1SzPHoTcPvZrE4NPUVfmjvH9Q3m36Gg\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/SafeMath.sol\":{\"keccak256\":\"0x1ab7391a19ca8a3ad2f3c4a1074e080d4d76dfdb834637bdd0c1e6b6acdf28af\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://d6d8c99621ca884b72da2d84eddfec8ec8c5533915691d6eec94a07adf445608\",\"dweb:/ipfs/QmaXr6DN7VbfxfMn3PsTy7SAMgZVVXbdeaw11BsAjVL2x1\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/TokenHandler.sol\":{\"keccak256\":\"0xf65b87e3bf3343e368da67878c19d1a043a1025b10e9053d3562b53b4aa447fe\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://b85c5d96642c14c53b8d5062eecd4d27d3bdb457d1d0f130900763a75a512eb7\",\"dweb:/ipfs/QmUHtbqC1khqnRZXYn11Aykus4m5e9MVNUWqorxhpr5ipJ\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/TokenHolder.sol\":{\"keccak256\":\"0xac6bc102eff6c1bb8c1bb4466eab50322c7c101e2e33d577dd3035f106627577\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://9fdbda2d4509260ca3dd43654bdaea07ef18a5e04213ff16e38e3b4abad78a5f\",\"dweb:/ipfs/QmPb69rzX1DwDeEhhfzqQNS3U2bfGcFjXNaV5ffHsZHzfP\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Types.sol\":{\"keccak256\":\"0x1616bdc4668c6396eb8e302177249284a5406dc1dfa3c9ab2e83f6c3c180be36\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://f4feb67f11147068d227366f8a13e4261ad1f927f0fd01d1e1764479ab2df8f5\",\"dweb:/ipfs/QmYV4TdmbL8pyeRi2w5ofUzTK3CEiwUZepia5JcuFgxb4x\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/Utils.sol\":{\"keccak256\":\"0x073efa69fcd6b5e60f841b28b366d63b62ff48ab12a06ce3f5a7f41afd6ce885\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://e8b8ecb2d29197ca77f0ed98f728ace54e6edcfdf5cd1194ae22701607eaf608\",\"dweb:/ipfs/QmcsR6Q35Hurh3TrPkYAboicz9bQQoGCWmZLzUCDyhotH8\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IContractRegistry.sol\":{\"keccak256\":\"0x3551889a83738b621c29ed66f1ecb6a843cca4217e54c9357198559b9cc92259\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://231a59c8f2665adeda8c7e6930832409c9b991fd27ad84b3a24335e7bf269bbe\",\"dweb:/ipfs/QmeJJbn1EAUbZenruTEdJAnwUn3dxsVNeJvxPe81qKEGqL\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IOwned.sol\":{\"keccak256\":\"0xc60a9d197abc28c1906ed4d18b59caa0242db754a0e1f67af6e6277593530dae\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://a8c6f3e6525a81a5165ccbf04f73f6c389c14b74135d11a7b5f70b1c9bdac75c\",\"dweb:/ipfs/QmaPu4Z7yUPc9sMADmoTZVY6AnyDSYHtNNCx3mm4VkJwhP\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/ITokenHolder.sol\":{\"keccak256\":\"0x9ccb8ab04d0bd874ba7aae5277e60f35c36918922649a0596bf3664ed257bfe2\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://b65e6db19cd244c9f3545695de5fd7573711c49fb306631ddbf0e1d2fa9fb589\",\"dweb:/ipfs/QmZeu5KYVMTbTx7h2BVUq52fpwL9Q44AUfzeVksucDohgf\"]},\"/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/utility/interfaces/IWhitelist.sol\":{\"keccak256\":\"0x356ad553ceeaea04d7cb8f0d6a5663c47dfccb2bd82517348128f032416ee34a\",\"license\":\"SEE LICENSE IN LICENSE\",\"urls\":[\"bzz-raw://9ea3bbb9945144ead2c1392351f2f9f7444af78569f2b95da2e68bb6b919db52\",\"dweb:/ipfs/QmPyUAk44Kj7nJB4tzYqeSXWHyYP51mRNynEmWra9m4eKS\"]}},\"version\":1}",
"bytecode": "0x60806040526003805460ff60a81b191690557fc0829421c1d260bd3cb3e0f06cfe2d52db2ce3150000000000000000000000006008556009805460ff191690553480156200004c57600080fd5b50604051620057b5380380620057b5833981810160405260608110156200007257600080fd5b5080516020820151604090920151600080546001600160a01b031916331790559091908282828282828282828180620000ab8162000148565b50600280546001600160a01b039092166001600160a01b031992831681179091556003805490921617905582620000e28162000148565b81620000ee81620001a7565b5050600480546001600160a01b039094166001600160a01b031990941693909317909255506008805463ffffffff9092166401000000000263ffffffff60201b199092169190911790555062000206975050505050505050565b6001600160a01b038116620001a4576040805162461bcd60e51b815260206004820152601360248201527f4552525f494e56414c49445f4144445245535300000000000000000000000000604482015290519081900360640190fd5b50565b620f424063ffffffff82161115620001a4576040805162461bcd60e51b815260206004820152601a60248201527f4552525f494e56414c49445f434f4e56455253494f4e5f464545000000000000604482015290519081900360640190fd5b61559f80620002166000396000f3fe6080604052600436106103b15760003560e01c806371f52bf3116101e7578063ca1d209d1161010d578063d66bd524116100a0578063e8dc12ff1161006f578063e8dc12ff14611114578063ecbca55d1461115a578063f2fde38b1461118a578063fc0c546a146111bd57610442565b8063d66bd52414611066578063d895951214611099578063dc8de379146110cc578063e2c52468146110ff57610442565b8063d260529c116100dc578063d260529c14611012578063d3fb73b414611027578063d4ee1d901461103c578063d55ec6971461105157610442565b8063ca1d209d14610fa1578063cdc91c6914610fbe578063d031370b14610fd3578063d18e81b314610ffd57610442565b80639b99a8e211610185578063b4a176d311610154578063b4a176d314610f32578063bbb7e5d814610f47578063bf75455814610f77578063c45d3d9214610f8c57610442565b80639b99a8e214610cf5578063a60e772414610d0a578063af94b8d814610db8578063b127c0a514610dfb57610442565b80637d8916bd116101c15780637d8916bd14610af357806380d9416d14610c185780638da5cb5b14610ccb57806394c275ad14610ce057610442565b806371f52bf314610ab457806379ba509714610ac95780637b10399914610ade57610442565b8063395900d4116102d7578063579cd3ca1161026a578063690d832011610239578063690d8320146109e55780636a49d2c414610a185780636aa5332c14610a575780636ad419a814610a8157610442565b8063579cd3ca146109455780635e35359e1461095a57806361cd756e1461099d57806367b6d57c146109b257610442565b806349d10b64116102a657806349d10b64146108af5780634af80f0e146108c45780634e40c260146108f757806354fd4d501461093057610442565b8063395900d4146107ec5780633beb26c41461082f5780633e8ff43f14610859578063415f12401461088557610442565b80631d4db7911161034f57806322f3e2d41161031e57806322f3e2d4146107985780632fe8a6ad146107ad57806338a5e016146107c257806338e9f27a146107d757610442565b80631d4db791146106af5780631e1401f8146106d65780631f0181bc1461073257806321e6b53d1461076557610442565b806312c2aca41161038b57806312c2aca414610508578063154588371461053157806319b64015146106365780631cfab2901461067c57610442565b8063024c7ec7146104475780630c7d5cd8146104735780630e53aae9146104a157610442565b366104425760008051602061552a83398151915260005260076020527fb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d0f54600160301b900460ff16610440576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f5245534552564560681b604482015290519081900360640190fd5b005b600080fd5b34801561045357600080fd5b506104406004803603602081101561046a57600080fd5b503515156111d2565b34801561047f57600080fd5b506104886111f8565b6040805163ffffffff9092168252519081900360200190f35b3480156104ad57600080fd5b506104d4600480360360208110156104c457600080fd5b50356001600160a01b0316611204565b6040805195865263ffffffff9094166020860152911515848401521515606084015215156080830152519081900360a00190f35b34801561051457600080fd5b5061051d61129b565b604080519115158252519081900360200190f35b34801561053d57600080fd5b506105e66004803603604081101561055457600080fd5b81359190810190604081016020820135600160201b81111561057557600080fd5b82018360208201111561058757600080fd5b803590602001918460208302840111600160201b831117156105a857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506112e2945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561062257818101518382015260200161060a565b505050509050019250505060405180910390f35b34801561064257600080fd5b506106606004803603602081101561065957600080fd5b5035611389565b604080516001600160a01b039092168252519081900360200190f35b34801561068857600080fd5b506104886004803603602081101561069f57600080fd5b50356001600160a01b03166113b3565b3480156106bb57600080fd5b506106c46113e5565b60408051918252519081900360200190f35b3480156106e257600080fd5b50610719600480360360608110156106f957600080fd5b506001600160a01b038135811691602081013590911690604001356113eb565b6040805192835260208301919091528051918290030190f35b34801561073e57600080fd5b506107196004803603602081101561075557600080fd5b50356001600160a01b0316611406565b34801561077157600080fd5b506104406004803603602081101561078857600080fd5b50356001600160a01b03166114bd565b3480156107a457600080fd5b5061051d6114d1565b3480156107b957600080fd5b5061051d611550565b3480156107ce57600080fd5b50610440611560565b3480156107e357600080fd5b5061051d611572565b3480156107f857600080fd5b506104406004803603606081101561080f57600080fd5b506001600160a01b0381358116916020810135909116906040013561157b565b34801561083b57600080fd5b506104406004803603602081101561085257600080fd5b5035611601565b34801561086557600080fd5b5061086e611606565b6040805161ffff9092168252519081900360200190f35b34801561089157600080fd5b506105e6600480360360208110156108a857600080fd5b503561160b565b3480156108bb57600080fd5b50610440611849565b3480156108d057600080fd5b50610440600480360360208110156108e757600080fd5b50356001600160a01b0316611a51565b34801561090357600080fd5b506106c46004803603604081101561091a57600080fd5b506001600160a01b038135169060200135611a86565b34801561093c57600080fd5b5061086e611bc2565b34801561095157600080fd5b50610488611bc7565b34801561096657600080fd5b506104406004803603606081101561097d57600080fd5b506001600160a01b03813581169160208101359091169060400135611bda565b3480156109a957600080fd5b50610660611d0b565b3480156109be57600080fd5b50610440600480360360208110156109d557600080fd5b50356001600160a01b0316611d1a565b3480156109f157600080fd5b5061044060048036036020811015610a0857600080fd5b50356001600160a01b0316611dc6565b348015610a2457600080fd5b5061044060048036036040811015610a3b57600080fd5b5080356001600160a01b0316906020013563ffffffff16611eed565b348015610a6357600080fd5b506106c460048036036020811015610a7a57600080fd5b5035611fb6565b348015610a8d57600080fd5b5061044060048036036020811015610aa457600080fd5b50356001600160a01b0316611fd8565b348015610ac057600080fd5b5061086e612005565b348015610ad557600080fd5b50610440612014565b348015610aea57600080fd5b506106606120cb565b6106c460048036036060811015610b0957600080fd5b810190602081018135600160201b811115610b2357600080fd5b820183602082011115610b3557600080fd5b803590602001918460208302840111600160201b83111715610b5657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610ba557600080fd5b820183602082011115610bb757600080fd5b803590602001918460208302840111600160201b83111715610bd857600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050913592506120da915050565b348015610c2457600080fd5b506105e660048036036060811015610c3b57600080fd5b810190602081018135600160201b811115610c5557600080fd5b820183602082011115610c6757600080fd5b803590602001918460208302840111600160201b83111715610c8857600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050823593505050602001356123a4565b348015610cd757600080fd5b50610660612653565b348015610cec57600080fd5b50610488612662565b348015610d0157600080fd5b5061086e612675565b348015610d1657600080fd5b506106c460048036036020811015610d2d57600080fd5b810190602081018135600160201b811115610d4757600080fd5b820183602082011115610d5957600080fd5b803590602001918460208302840111600160201b83111715610d7a57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061267b945050505050565b348015610dc457600080fd5b5061071960048036036060811015610ddb57600080fd5b506001600160a01b038135811691602081013590911690604001356126cd565b348015610e0757600080fd5b506105e660048036036060811015610e1e57600080fd5b81359190810190604081016020820135600160201b811115610e3f57600080fd5b820183602082011115610e5157600080fd5b803590602001918460208302840111600160201b83111715610e7257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610ec157600080fd5b820183602082011115610ed357600080fd5b803590602001918460208302840111600160201b83111715610ef457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612870945050505050565b348015610f3e57600080fd5b506104406129ac565b348015610f5357600080fd5b506106c460048036036040811015610f6a57600080fd5b50803590602001356129d8565b348015610f8357600080fd5b5061051d6129f0565b348015610f9857600080fd5b506106606129f5565b6106c460048036036020811015610fb757600080fd5b5035612a04565b348015610fca57600080fd5b50610440612e7f565b348015610fdf57600080fd5b5061066060048036036020811015610ff657600080fd5b5035612ed8565b34801561100957600080fd5b506106c4612eff565b34801561101e57600080fd5b5061051d611606565b34801561103357600080fd5b50610660612f05565b34801561104857600080fd5b50610660612f14565b34801561105d57600080fd5b50610440612f23565b34801561107257600080fd5b506104d46004803603602081101561108957600080fd5b50356001600160a01b031661300b565b3480156110a557600080fd5b506106c4600480360360208110156110bc57600080fd5b50356001600160a01b031661304d565b3480156110d857600080fd5b506106c4600480360360208110156110ef57600080fd5b50356001600160a01b0316613054565b34801561110b57600080fd5b5061071961307d565b6106c4600480360360a081101561112a57600080fd5b506001600160a01b0381358116916020810135821691604082013591606081013582169160809091013516613086565b34801561116657600080fd5b506104406004803603602081101561117d57600080fd5b503563ffffffff16613296565b34801561119657600080fd5b50610440600480360360208110156111ad57600080fd5b50356001600160a01b031661337d565b3480156111c957600080fd5b506106606133fb565b6111da61340a565b60038054911515600160a01b0260ff60a01b19909216919091179055565b60085463ffffffff1681565b60008060008060006112146154e1565b505050506001600160a01b03929092166000908152600760209081526040808320815160a081018352815480825260019092015463ffffffff811694820185905260ff600160201b82048116151594830194909452650100000000008104841615156060830152600160301b90049092161515608090920182905295919450919250829190565b60008051602061552a83398151915260005260076020527fb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d0f54600160301b900460ff165b90565b60048054604080516318160ddd60e01b815290516060936000936001600160a01b0316926318160ddd9281830192602092829003018186803b15801561132757600080fd5b505afa15801561133b573d6000803e3d6000fd5b505050506040513d602081101561135157600080fd5b5051905060006113706c42616e636f72466f726d756c6160981b61345d565b905061137e858584846134db565b925050505b92915050565b60006006828154811061139857fe5b6000918252602090912001546001600160a01b031692915050565b6000816113bf81613620565b50506001600160a01b031660009081526007602052604090206001015463ffffffff1690565b600c5481565b6000806113f98585856126cd565b915091505b935093915050565b600954600090819060ff1661145a576040805162461bcd60e51b815260206004820152601560248201527411549497d393d397d4d510539110549117d413d3d3605a1b604482015290519081900360640190fd5b61146261550f565b61146a61368d565b9050600660008154811061147a57fe5b6000918252602090912001546001600160a01b03858116911614156114ab57805160209091015190925090506114b8565b6020810151905190925090505b915091565b6114c561340a565b6114ce81611d1a565b50565b6004805460408051638da5cb5b60e01b8152905160009330936001600160a01b031692638da5cb5b9281830192602092829003018186803b15801561151557600080fd5b505afa158015611529573d6000803e3d6000fd5b505050506040513d602081101561153f57600080fd5b50516001600160a01b031614905090565b600354600160a01b900460ff1681565b61156861340a565b611570612e7f565b565b60095460ff1681565b61158361340a565b6004805460408051632f1a9acf60e11b81526001600160a01b038781169482019490945285841660248201526044810185905290519290911691635e35359e9160648082019260009290919082900301818387803b1580156115e457600080fd5b505af11580156115f8573d6000803e3d6000fd5b50505050505050565b600d55565b600190565b6060611615613828565b6003805460ff60a81b1916600160a81b1790558161166c576040805162461bcd60e51b815260206004820152600f60248201526e11549497d6915493d7d05353d55395608a1b604482015290519081900360640190fd5b6000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156116bc57600080fd5b505afa1580156116d0573d6000803e3d6000fd5b505050506040513d60208110156116e657600080fd5b5051600480546040805163a24835d160e01b8152339381019390935260248301879052519293506001600160a01b03169163a24835d19160448082019260009290919082900301818387803b15801561173e57600080fd5b505af1158015611752573d6000803e3d6000fd5b505060065460609250905067ffffffffffffffff8111801561177357600080fd5b5060405190808252806020026020018201604052801561179d578160200160208202803683370190505b50905060005b81518110156117cd5760018282815181106117ba57fe5b60209081029190910101526001016117a3565b50611834600680548060200260200160405190810160405280929190818152602001828054801561182757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611809575b5050505050828487613878565b6003805460ff60a81b19169055949350505050565b6000546001600160a01b031633148061186c5750600354600160a01b900460ff16155b6118b1576040805162461bcd60e51b815260206004820152601160248201527011549497d050d0d154d4d7d11153925151607a1b604482015290519081900360640190fd5b60006118cf6f436f6e7472616374526567697374727960801b61345d565b6002549091506001600160a01b038083169116148015906118f857506001600160a01b03811615155b611940576040805162461bcd60e51b81526020600482015260146024820152734552525f494e56414c49445f524547495354525960601b604482015290519081900360640190fd5b60006001600160a01b0316816001600160a01b031663bb34534c6f436f6e7472616374526567697374727960801b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156119a257600080fd5b505afa1580156119b6573d6000803e3d6000fd5b505050506040513d60208110156119cc57600080fd5b50516001600160a01b03161415611a21576040805162461bcd60e51b81526020600482015260146024820152734552525f494e56414c49445f524547495354525960601b604482015290519081900360640190fd5b60028054600380546001600160a01b038084166001600160a01b0319928316179092559091169216919091179055565b611a5961340a565b80611a6381613a83565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b60048054604080516318160ddd60e01b8152905160009384936001600160a01b0316926318160ddd9281830192602092829003018186803b158015611aca57600080fd5b505afa158015611ade573d6000803e3d6000fd5b505050506040513d6020811015611af457600080fd5b505190506000611b136c42616e636f72466f726d756c6160981b61345d565b6001600160a01b03868116600090815260076020908152604091829020546008548351632f55bdb560e01b815260048101899052602481019290925263ffffffff16604482015260648101899052915193945091841692632f55bdb592608480840193919291829003018186803b158015611b8d57600080fd5b505afa158015611ba1573d6000803e3d6000fd5b505050506040513d6020811015611bb757600080fd5b505195945050505050565b602781565b600854600160401b900463ffffffff1681565b611be2613828565b6003805460ff60a81b1916600160a81b179055611bfd61340a565b6000611c22762130b731b7b921b7b73b32b93a32b92ab833b930b232b960491b61345d565b6001600160a01b038516600090815260076020526040902060010154909150600160301b900460ff161580611c5c5750611c5a6114d1565b155b80611c7457506000546001600160a01b038281169116145b611cb9576040805162461bcd60e51b815260206004820152601160248201527011549497d050d0d154d4d7d11153925151607a1b604482015290519081900360640190fd5b611cc4848484613ad7565b6001600160a01b038416600090815260076020526040902060010154600160301b900460ff1615611cf857611cf884613b08565b50506003805460ff60a81b191690555050565b6003546001600160a01b031681565b611d2261340a565b762130b731b7b921b7b73b32b93a32b92ab833b930b232b960491b611d4681613be1565b600460009054906101000a90046001600160a01b03166001600160a01b031663f2fde38b836040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611daa57600080fd5b505af1158015611dbe573d6000803e3d6000fd5b505050505050565b611dce613828565b6003805460ff60a81b1916600160a81b179055611de961340a565b60008051602061552a833981519152611e0181613620565b6000611e26762130b731b7b921b7b73b32b93a32b92ab833b930b232b960491b61345d565b9050611e306114d1565b1580611e4957506000546001600160a01b038281169116145b611e8e576040805162461bcd60e51b815260206004820152601160248201527011549497d050d0d154d4d7d11153925151607a1b604482015290519081900360640190fd5b6040516001600160a01b038416904780156108fc02916000818181858888f19350505050158015611ec3573d6000803e3d6000fd5b50611edb60008051602061552a833981519152613b08565b50506003805460ff60a81b1916905550565b611ef561340a565b611eff8282613c43565b6006546002148015611f535750600760006006600081548110611f1e57fe5b6000918252602080832091909101546001600160a01b0316835282019290925260400190206001015463ffffffff166207a120145b8015611fa15750600760006006600181548110611f6c57fe5b6000918252602080832091909101546001600160a01b0316835282019290925260400190206001015463ffffffff166207a120145b6009805460ff19169115159190911790555050565b600080825b8015611fd15760019190910190600a9004611fbb565b5092915050565b600880546001600160a01b03909216600160601b026bffffffffffffffffffffffff909216919091179055565b600061200f612675565b905090565b6001546001600160a01b03163314612067576040805162461bcd60e51b815260206004820152601160248201527011549497d050d0d154d4d7d11153925151607a1b604482015290519081900360640190fd5b600154600080546040516001600160a01b0393841693909116917f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a91a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6002546001600160a01b031681565b60006120e4613828565b6003805460ff60a81b1916600160a81b1790556120ff613e65565b61210a848484613ead565b60005b84518110156121ba5760008051602061552a8339815191526001600160a01b031685828151811061213a57fe5b60200260200101516001600160a01b031614156121b2573484828151811061215e57fe5b6020026020010151146121b2576040805162461bcd60e51b815260206004820152601760248201527608aa4a4be8aa890be829a9eaa9ca8be9a92a69a82a8869604b1b604482015290519081900360640190fd5b60010161210d565b50341561224a5760008051602061552a83398151915260005260076020527fb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d0f54600160301b900460ff1661224a576040805162461bcd60e51b81526020600482015260126024820152714552525f4e4f5f4554485f5245534552564560701b604482015290519081900360640190fd5b6000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561229a57600080fd5b505afa1580156122ae573d6000803e3d6000fd5b505050506040513d60208110156122c457600080fd5b5051905060006122d5868684614142565b905083811015612321576040805162461bcd60e51b81526020600482015260126024820152714552525f52455455524e5f544f4f5f4c4f5760701b604482015290519081900360640190fd5b600480546040805163219e412d60e21b8152339381019390935260248301849052516001600160a01b039091169163867904b491604480830192600092919082900301818387803b15801561237557600080fd5b505af1158015612389573d6000803e3d6000fd5b50506003805460ff60a81b1916905550909695505050505050565b606080845167ffffffffffffffff811180156123bf57600080fd5b506040519080825280602002602001820160405280156123e9578160200160208202803683370190505b5090506000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561243c57600080fd5b505afa158015612450573d6000803e3d6000fd5b505050506040513d602081101561246657600080fd5b5051905060006124856c42616e636f72466f726d756c6160981b61345d565b90506000816001600160a01b0316632f55bdb584600760008c8c815181106124a957fe5b6020908102919091018101516001600160a01b031682528181019290925260409081016000205460085482516001600160e01b031960e088901b1681526004810195909552602485019190915263ffffffff166044840152606483018b905251608480840193829003018186803b15801561252357600080fd5b505afa158015612537573d6000803e3d6000fd5b505050506040513d602081101561254d57600080fd5b5051905060005b845181101561264457826001600160a01b031663ebbb215885600760008d868151811061257d57fe5b6020908102919091018101516001600160a01b031682528181019290925260409081016000205460085482516001600160e01b031960e088901b1681526004810195909552602485019190915263ffffffff1660448401526064830187905251608480840193829003018186803b1580156125f757600080fd5b505afa15801561260b573d6000803e3d6000fd5b505050506040513d602081101561262157600080fd5b5051855186908390811061263157fe5b6020908102919091010152600101612554565b509293505050505b9392505050565b6000546001600160a01b031681565b600854600160201b900463ffffffff1681565b60065490565b80516000908190815b818110156126b4576126a885828151811061269b57fe5b6020026020010151611fb6565b90920191600101612684565b5060016126c183836129d8565b03600a0a949350505050565b6000806126d8613e65565b846126e281613620565b846126ec81613620565b856001600160a01b0316876001600160a01b0316141561274c576040805162461bcd60e51b815260206004820152601660248201527511549497d4d0535157d4d3d55490d157d5105491d15560521b604482015290519081900360640190fd5b60006127676c42616e636f72466f726d756c6160981b61345d565b6001600160a01b03166394491fab61277e8a613054565b6001600160a01b038b1660009081526007602052604090206001015463ffffffff166127a98b613054565b6001600160a01b038c166000908152600760209081526040918290206001015482516001600160e01b031960e089901b168152600481019690965263ffffffff94851660248701526044860193909352929091166064840152608483018b90525160a480840193829003018186803b15801561282457600080fd5b505afa158015612838573d6000803e3d6000fd5b505050506040513d602081101561284e57600080fd5b50519050600061285d8261416d565b9182900399919850909650505050505050565b606061287a613828565b6003805460ff60a81b1916600160a81b179055612895613e65565b6128a0838386613ead565b6000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156128f057600080fd5b505afa158015612904573d6000803e3d6000fd5b505050506040513d602081101561291a57600080fd5b5051600480546040805163a24835d160e01b8152339381019390935260248301899052519293506001600160a01b03169163a24835d19160448082019260009290919082900301818387803b15801561297257600080fd5b505af1158015612986573d6000803e3d6000fd5b5050505061299684848388613878565b6003805460ff60a81b1916905595945050505050565b6129b461340a565b600354600280546001600160a01b0319166001600160a01b03909216919091179055565b600081600281048401816129e857fe5b049392505050565b600181565b6005546001600160a01b031681565b6000612a0e613828565b6003805460ff60a81b1916600160a81b179055612a2961419e565b60008051602061552a833981519152600052600760205260008051602061554a83398151915254612a5a90346141de565b60008051602061552a83398151915260009081526007602090815260008051602061554a8339815191529290925560048054604080516318160ddd60e01b8152905193946001600160a01b03909216936318160ddd938281019392829003018186803b158015612ac957600080fd5b505afa158015612add573d6000803e3d6000fd5b505050506040513d6020811015612af357600080fd5b505190506000612b126c42616e636f72466f726d756c6160981b61345d565b60065490915060005b81811015612dfc57600060068281548110612b3257fe5b60009182526020808320909101546001600160a01b03908116808452600783526040808520546008548251631d77642b60e31b8152600481018d90526024810183905263ffffffff9091166044820152606481018e9052915192965094939289169263ebbb215892608480840193829003018186803b158015612bb457600080fd5b505afa158015612bc8573d6000803e3d6000fd5b505050506040513d6020811015612bde57600080fd5b505190506001600160a01b03831660008051602061552a8339815191521415612d295780341115612c3e5760405133903483900380156108fc02916000818181858888f19350505050158015612c38573d6000803e3d6000fd5b50612d24565b80341015612d24573415612c91576040805162461bcd60e51b81526020600482015260156024820152744552525f494e56414c49445f4554485f56414c554560581b604482015290519081900360640190fd5b600854612cb090600160601b90046001600160a01b031633308461422b565b6008600c9054906101000a90046001600160a01b03166001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612d0b57600080fd5b505af1158015612d1f573d6000803e3d6000fd5b505050505b612d35565b612d358333308461422b565b6000612d418383614396565b6001600160a01b0385166000908152600760205260408120829055909150612d69898c614396565b604080518581526020810185905280820183905290519192506001600160a01b0387169133917f4a1a2a6176e9646d9e3157f7c2ab3c499f18337c0b0828cfb28e0a61de4a11f7919081900360600190a36001600160a01b038516600090815260076020526040902060010154612deb9082908790859063ffffffff166143df565b505060019093019250612b1b915050565b50600480546040805163219e412d60e21b8152339381019390935260248301889052516001600160a01b039091169163867904b491604480830192600092919082900301818387803b158015612e5157600080fd5b505af1158015612e65573d6000803e3d6000fd5b50506003805460ff60a81b19169055509495945050505050565b612e8761340a565b612e8f61444e565b6004546001906001600160a01b0316612ea6611606565b61ffff167f6b08c2e2c9969e55a647a764db9b554d64dc42f1a704da11a6d5b129ad163f2c60405160405180910390a4565b60068181548110612ee557fe5b6000918252602090912001546001600160a01b0316905081565b600d5481565b6004546001600160a01b031681565b6001546001600160a01b031681565b612f2b61340a565b6000612f50762130b731b7b921b7b73b32b93a32b92ab833b930b232b960491b61345d565b6004549091506000906001600160a01b0316612f6a611606565b61ffff167f6b08c2e2c9969e55a647a764db9b554d64dc42f1a704da11a6d5b129ad163f2c60405160405180910390a4612fa38161337d565b6040805163487ac64b60e11b81526027600482015290516001600160a01b038316916390f58c9691602480830192600092919082900301818387803b158015612feb57600080fd5b505af1158015612fff573d6000803e3d6000fd5b505050506114ce612014565b6007602052600090815260409020805460019091015463ffffffff81169060ff600160201b8204811691650100000000008104821691600160301b9091041685565b6000611383825b60008161306081613620565b50506001600160a01b031660009081526007602052604090205490565b600a54600b5482565b6000613090613828565b6003805460ff60a81b1916600160a81b1790556c42616e636f724e6574776f726b60981b6130bd81613be1565b856001600160a01b0316876001600160a01b0316141561311d576040805162461bcd60e51b815260206004820152601660248201527511549497d4d0535157d4d3d55490d157d5105491d15560521b604482015290519081900360640190fd5b6005546001600160a01b0316158061322a575060055460408051633af32abf60e01b81526001600160a01b03878116600483015291519190921691633af32abf916024808301926020929190829003018186803b15801561317d57600080fd5b505afa158015613191573d6000803e3d6000fd5b505050506040513d60208110156131a757600080fd5b5051801561322a575060055460408051633af32abf60e01b81526001600160a01b03868116600483015291519190921691633af32abf916024808301926020929190829003018186803b1580156131fd57600080fd5b505afa158015613211573d6000803e3d6000fd5b505050506040513d602081101561322757600080fd5b50515b613271576040805162461bcd60e51b815260206004820152601360248201527211549497d393d517d5d2125511531254d51151606a1b604482015290519081900360640190fd5b61327e87878787876144b2565b6003805460ff60a81b19169055979650505050505050565b61329e61340a565b60085463ffffffff600160201b90910481169082161115613306576040805162461bcd60e51b815260206004820152601a60248201527f4552525f494e56414c49445f434f4e56455253494f4e5f464545000000000000604482015290519081900360640190fd5b6008546040805163ffffffff600160401b90930483168152918316602083015280517f81cd2ffb37dd237c0e4e2a3de5265fcf9deb43d3e7801e80db9f1ccfba7ee6009281900390910190a16008805463ffffffff909216600160401b026bffffffff000000000000000019909216919091179055565b61338561340a565b6000546001600160a01b03828116911614156133d9576040805162461bcd60e51b815260206004820152600e60248201526d22a9292fa9a0a6a2afa7aba722a960911b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b031690565b6000546001600160a01b03163314611570576040805162461bcd60e51b815260206004820152601160248201527011549497d050d0d154d4d7d11153925151607a1b604482015290519081900360640190fd5b60025460408051632ecd14d360e21b81526004810184905290516000926001600160a01b03169163bb34534c916024808301926020929190829003018186803b1580156134a957600080fd5b505afa1580156134bd573d6000803e3d6000fd5b505050506040513d60208110156134d357600080fd5b505192915050565b606080845167ffffffffffffffff811180156134f657600080fd5b50604051908082528060200260200182016040528015613520578160200160208202803683370190505b50905060005b815181101561361657836001600160a01b0316638074590a86600760008a868151811061354f57fe5b6020908102919091018101516001600160a01b031682528181019290925260409081016000205460085482516001600160e01b031960e088901b1681526004810195909552602485019190915263ffffffff166044840152606483018c905251608480840193829003018186803b1580156135c957600080fd5b505afa1580156135dd573d6000803e3d6000fd5b505050506040513d60208110156135f357600080fd5b5051825183908390811061360357fe5b6020908102919091010152600101613526565b5095945050505050565b6001600160a01b038116600090815260076020526040902060010154600160301b900460ff166114ce576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f5245534552564560681b604482015290519081900360640190fd5b61369561550f565b6000600c546136a2614775565b039050806136c857505060408051808201909152600a548152600b5460208201526112df565b60006007600060066001815481106136dc57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400181205460068054919350600791839190829061371657fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054905061025883106137615760408051808201909152918252602082015291506112df9050565b61376961550f565b5060408051808201909152600a548152600b5460208201819052600090613790908561478f565b82519091506000906137a2908561478f565b905060006137c86137b3848961478f565b6137c2846102588b900361478f565b90614396565b905060006137ef6102586137e988886020015161478f90919063ffffffff16565b9061478f565b905061380982826c0c9f2c9cd04674edea400000006147ed565b6040805180820190915291825260208201529850505050505050505090565b600354600160a81b900460ff1615611570576040805162461bcd60e51b815260206004820152600e60248201526d4552525f5245454e5452414e435960901b604482015290519081900360640190fd5b606061388261419e565b600061389d6c42616e636f72466f726d756c6160981b61345d565b905060006138ab85856141de565b905060606138bb858988866134db565b905060005b8851811015613a775760008982815181106138d757fe5b6020026020010151905060008383815181106138ef57fe5b6020026020010151905089838151811061390557fe5b602002602001015181101561395a576040805162461bcd60e51b815260206004820152601660248201527511549497d6915493d7d5105491d15517d05353d5539560521b604482015290519081900360640190fd5b6001600160a01b03821660009081526007602052604081205461397d90836141de565b6001600160a01b038416600081815260076020526040902082905590915060008051602061552a83398151915214156139e357604051339083156108fc029084906000818181858888f193505050501580156139dd573d6000803e3d6000fd5b506139ee565b6139ee83338461481f565b604080518381526020810183905280820188905290516001600160a01b0385169133917fbc7d19d505c7ec4db83f3b51f19fb98c4c8a99922e7839d1ee608dfbee29501b9181900360600190a36001600160a01b038316600090815260076020526040902060010154613a6c9087908590849063ffffffff166143df565b5050506001016138c0565b50979650505050505050565b6001600160a01b0381163014156114ce576040805162461bcd60e51b815260206004820152601360248201527222a9292fa0a2222922a9a9afa4a9afa9a2a62360691b604482015290519081900360640190fd5b613adf61340a565b82613ae98161497f565b82613af38161497f565b83613afd81613a83565b611dbe86868661481f565b80613b1281613620565b6001600160a01b03821660008051602061552a8339815191521415613b51576001600160a01b0382166000908152600760205260409020479055613bdd565b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b158015613b9757600080fd5b505afa158015613bab573d6000803e3d6000fd5b505050506040513d6020811015613bc157600080fd5b50516001600160a01b0383166000908152600760205260409020555b5050565b613bea8161345d565b6001600160a01b0316336001600160a01b0316146114ce576040805162461bcd60e51b815260206004820152601160248201527011549497d050d0d154d4d7d11153925151607a1b604482015290519081900360640190fd5b613c4b61340a565b613c536149d0565b81613c5d8161497f565b82613c6781613a83565b82613c7181614a17565b6004546001600160a01b03868116911614801590613cb257506001600160a01b038516600090815260076020526040902060010154600160301b900460ff16155b613cf9576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f5245534552564560681b604482015290519081900360640190fd5b60085463ffffffff908116620f42400381169085161115613d61576040805162461bcd60e51b815260206004820152601a60248201527f4552525f494e56414c49445f524553455256455f574549474854000000000000604482015290519081900360640190fd5b61ffff613d6c612675565b61ffff1610613dbe576040805162461bcd60e51b815260206004820152601960248201527811549497d253959053125117d49154d154959157d0d3d55395603a1b604482015290519081900360640190fd5b5050506001600160a01b0390911660008181526007602052604081208181556001908101805466ff0000000000001963ffffffff80881663ffffffff199384161791909116600160301b179092556006805493840181559093527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90910180546001600160a01b031916909317909255600880548084169094019092169216919091179055565b613e6d6114d1565b611570576040805162461bcd60e51b815260206004820152600c60248201526b4552525f494e41435449564560a01b604482015290519081900360640190fd5b600654835160009182918114613f00576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f5245534552564560681b604482015290519081900360640190fd5b84518114613f4a576040805162461bcd60e51b815260206004820152601260248201527111549497d253959053125117d05353d5539560721b604482015290519081900360640190fd5b600092505b808310156140fb5760076000878581518110613f6757fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060010160069054906101000a900460ff16613fe7576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f5245534552564560681b604482015290519081900360640190fd5b600091505b808210156140495785828151811061400057fe5b60200260200101516001600160a01b03166006848154811061401e57fe5b6000918252602090912001546001600160a01b0316141561403e57614049565b600190910190613fec565b808210614093576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f5245534552564560681b604482015290519081900360640190fd5b60008584815181106140a157fe5b6020026020010151116140f0576040805162461bcd60e51b815260206004820152601260248201527111549497d253959053125117d05353d5539560721b604482015290519081900360640190fd5b600190920191613f4f565b60008411611dbe576040805162461bcd60e51b815260206004820152600f60248201526e11549497d6915493d7d05353d55395608a1b604482015290519081900360640190fd5b60008161415a576141538484614a87565b905061264c565b614165848484614ba6565b949350505050565b60085460009061138390620f424090614198908590600160401b900463ffffffff9081169061478f16565b90614ed3565b60065460005b81811015613bdd576141d6600682815481106141bc57fe5b6000918252602090912001546001600160a01b0316613b08565b6001016141a4565b600081831015614225576040805162461bcd60e51b815260206004820152600d60248201526c4552525f554e444552464c4f5760981b604482015290519081900360640190fd5b50900390565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106142b05780518252601f199092019160209182019101614291565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614312576040519150601f19603f3d011682016040523d82523d6000602084013e614317565b606091505b5091509150818015614345575080511580614345575080806020019051602081101561434257600080fd5b50515b611dbe576040805162461bcd60e51b815260206004820152601860248201527f4552525f5452414e534645525f46524f4d5f4641494c45440000000000000000604482015290519081900360640190fd5b60008282018381101561264c576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4f564552464c4f5760a01b604482015290519081900360640190fd5b6004546001600160a01b0380851691167f77f29993cf2c084e726f7e802da0719d6a0ade3e204badc7a3ffd57ecb768c2461441d85620f424061478f565b6144308863ffffffff8088169061478f16565b6040805192835260208301919091528051918290030190a350505050565b6001614458612675565b61ffff16116144aa576040805162461bcd60e51b815260206004820152601960248201527811549497d253959053125117d49154d154959157d0d3d55395603a1b604482015290519081900360640190fd5b611570614f32565b60008060006144c28888886126cd565b915091508160001415614515576040805162461bcd60e51b815260206004820152601660248201527511549497d6915493d7d5105491d15517d05353d5539560521b604482015290519081900360640190fd5b61451e87613054565b821061452657fe5b6001600160a01b03881660008051602061552a833981519152141561459857853414614593576040805162461bcd60e51b815260206004820152601760248201527608aa4a4be8aa890be829a9eaa9ca8be9a92a69a82a8869604b1b604482015290519081900360640190fd5b61466f565b341580156146295750856146266145ae8a613054565b604080516370a0823160e01b815230600482015290516001600160a01b038d16916370a08231916024808301926020929190829003018186803b1580156145f457600080fd5b505afa158015614608573d6000803e3d6000fd5b505050506040513d602081101561461e57600080fd5b5051906141de565b10155b61466f576040805162461bcd60e51b815260206004820152601260248201527111549497d253959053125117d05353d5539560721b604482015290519081900360640190fd5b61467888613b08565b6001600160a01b03871660009081526007602052604090205461469b90836141de565b6001600160a01b03881660008181526007602052604090209190915560008051602061552a8339815191521415614708576040516001600160a01b0385169083156108fc029084906000818181858888f19350505050158015614702573d6000803e3d6000fd5b50614713565b61471387858461481f565b60095460ff16801561472d5750614728614775565b600c54105b156147525761473a61368d565b8051600a5560200151600b5561474e614775565b600c555b614760888887898686614ff9565b61476a8888615062565b509695505050505050565b6000600d5460001415614788574261200f565b50600d5490565b60008261479e57506000611383565b828202828482816147ab57fe5b041461264c576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4f564552464c4f5760a01b604482015290519081900360640190fd5b600080828511806147fd57508284115b156148165761480d858585615266565b915091506113fe565b50929391925050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b6020831061489c5780518252601f19909201916020918201910161487d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146148fe576040519150601f19603f3d011682016040523d82523d6000602084013e614903565b606091505b5091509150818015614931575080511580614931575080806020019051602081101561492e57600080fd5b50515b614978576040805162461bcd60e51b815260206004820152601360248201527211549497d514905394d1915497d19052531151606a1b604482015290519081900360640190fd5b5050505050565b6001600160a01b0381166114ce576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f4144445245535360681b604482015290519081900360640190fd5b6149d86114d1565b15611570576040805162461bcd60e51b815260206004820152600a6024820152694552525f41435449564560b01b604482015290519081900360640190fd5b60008163ffffffff16118015614a365750620f424063ffffffff821611155b6114ce576040805162461bcd60e51b815260206004820152601a60248201527f4552525f494e56414c49445f524553455256455f574549474854000000000000604482015290519081900360640190fd5b600080614a938361267b565b905060005b8451811015614b9e576000858281518110614aaf57fe5b602002602001015190506000858381518110614ac757fe5b6020026020010151905060008051602061552a8339815191526001600160a01b0316826001600160a01b031614614b0457614b048233308461422b565b6001600160a01b0382166000818152600760209081526040918290208490558151848152908101849052808201879052905133917f4a1a2a6176e9646d9e3157f7c2ab3c499f18337c0b0828cfb28e0a61de4a11f7919081900360600190a36001600160a01b038216600090815260076020526040902060010154614b949085908490849063ffffffff166143df565b5050600101614a98565b509392505050565b6000614bb061419e565b60008051602061552a833981519152600052600760205260008051602061554a83398151915254614be190346141de565b60008051602061552a8339815191526000908152600760205260008051602061554a83398151915291909155614c266c42616e636f72466f726d756c6160981b61345d565b90506000614c36828588886152ab565b90506000614c448583614396565b905060005b8751811015614ec7576000888281518110614c6057fe5b6020908102919091018101516001600160a01b038082166000908152600784526040808220546008548251631d77642b60e31b8152600481018f90526024810183905263ffffffff9091166044820152606481018b90529151949650949193928a169263ebbb215892608480840193919291829003018186803b158015614ce657600080fd5b505afa158015614cfa573d6000803e3d6000fd5b505050506040513d6020811015614d1057600080fd5b5051905080614d5f576040805162461bcd60e51b815260206004820152601660248201527511549497d6915493d7d5105491d15517d05353d5539560521b604482015290519081900360640190fd5b898481518110614d6b57fe5b6020026020010151811115614d7c57fe5b6001600160a01b03831660008051602061552a83398151915214614dab57614da68333308461422b565b614e16565b808a8581518110614db857fe5b60200260200101511115614e1657336001600160a01b03166108fc828c8781518110614de057fe5b6020026020010151039081150290604051600060405180830381858888f19350505050158015614e14573d6000803e3d6000fd5b505b6000614e228383614396565b6001600160a01b03851660008181526007602090815260409182902084905581518681529081018490528082018a90529051929350909133917f4a1a2a6176e9646d9e3157f7c2ab3c499f18337c0b0828cfb28e0a61de4a11f7919081900360600190a36001600160a01b038416600090815260076020526040902060010154614eb79087908690849063ffffffff166143df565b505060019092019150614c499050565b50909695505050505050565b6000808211614f1e576040805162461bcd60e51b81526020600482015260126024820152714552525f4449564944455f42595f5a45524f60701b604482015290519081900360640190fd5b6000828481614f2957fe5b04949350505050565b614f3a61340a565b6000614f44612675565b61ffff1611614f96576040805162461bcd60e51b815260206004820152601960248201527811549497d253959053125117d49154d154959157d0d3d55395603a1b604482015290519081900360640190fd5b60048054604080516379ba509760e01b815290516001600160a01b03909216926379ba509792828201926000929082900301818387803b158015614fd957600080fd5b505af1158015614fed573d6000803e3d6000fd5b5050505061157061419e565b600160ff1b811061500657fe5b604080518481526020810184905280820183905290516001600160a01b038087169288821692918a16917f276856b36cbc45526a0ba64f44611557a2a8b68662c5388e9fe6d72e86e1c8cb9181900360600190a4505050505050565b6000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156150b257600080fd5b505afa1580156150c6573d6000803e3d6000fd5b505050506040513d60208110156150dc57600080fd5b5051905060006150eb84613054565b905060006150f884613054565b6001600160a01b038087166000908152600760205260408082206001908101549389168352908220015492935063ffffffff9182169282169161513f908590859061478f16565b905060006151568663ffffffff8086169061478f16565b604080518481526020810183905281519293506001600160a01b03808c1693908d16927f77f29993cf2c084e726f7e802da0719d6a0ade3e204badc7a3ffd57ecb768c24928290030190a36151ad878a88876143df565b6151b9878987866143df565b604080518881526020810188905263ffffffff86168183015290516001600160a01b038b16917f8a6a7f53b3c8fa1dc4b83e3f1be668c1b251ff8d44cdcb83eb3acec3fec6a788919081900360600190a2604080518881526020810187905263ffffffff85168183015290516001600160a01b038a16917f8a6a7f53b3c8fa1dc4b83e3f1be668c1b251ff8d44cdcb83eb3acec3fec6a788919081900360600190a2505050505050505050565b6000808385141561527d57505060028104806113fe565b838510156152905761480d858585615471565b60008061529e868887615471565b9890975095505050505050565b60008060015b84518110156153785761531b600760008784815181106152cd57fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000015485848151811061530557fe5b602002602001015161478f90919063ffffffff16565b6153666007600088868151811061532e57fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000015486848151811061530557fe5b1015615370578091505b6001016152b1565b50856001600160a01b0316632f55bdb5866007600088868151811061539957fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000154600860009054906101000a900463ffffffff168786815181106153e457fe5b60200260200101516040518563ffffffff1660e01b8152600401808581526020018481526020018363ffffffff16815260200182815260200194505050505060206040518083038186803b15801561543b57600080fd5b505afa15801561544f573d6000803e3d6000fd5b505050506040513d602081101561546557600080fd5b50519695505050505050565b6000806000836000198161548157fe5b049050808611156154ba57600081600101878161549a57fe5b0460010190508087816154a957fe5b0496508086816154b557fe5b049550505b60006154d18786026154cc8989614396565b6129d8565b9794889003965093945050505050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b60405180604001604052806000815260200160008152509056fe000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d0ea264697066735822122089c0c3358ca8c545b32bb44e5b659e8ecd8dc9cf301a41360cca2d8fe72d849b64736f6c634300060c0033",
"deployedBytecode": "0x6080604052600436106103b15760003560e01c806371f52bf3116101e7578063ca1d209d1161010d578063d66bd524116100a0578063e8dc12ff1161006f578063e8dc12ff14611114578063ecbca55d1461115a578063f2fde38b1461118a578063fc0c546a146111bd57610442565b8063d66bd52414611066578063d895951214611099578063dc8de379146110cc578063e2c52468146110ff57610442565b8063d260529c116100dc578063d260529c14611012578063d3fb73b414611027578063d4ee1d901461103c578063d55ec6971461105157610442565b8063ca1d209d14610fa1578063cdc91c6914610fbe578063d031370b14610fd3578063d18e81b314610ffd57610442565b80639b99a8e211610185578063b4a176d311610154578063b4a176d314610f32578063bbb7e5d814610f47578063bf75455814610f77578063c45d3d9214610f8c57610442565b80639b99a8e214610cf5578063a60e772414610d0a578063af94b8d814610db8578063b127c0a514610dfb57610442565b80637d8916bd116101c15780637d8916bd14610af357806380d9416d14610c185780638da5cb5b14610ccb57806394c275ad14610ce057610442565b806371f52bf314610ab457806379ba509714610ac95780637b10399914610ade57610442565b8063395900d4116102d7578063579cd3ca1161026a578063690d832011610239578063690d8320146109e55780636a49d2c414610a185780636aa5332c14610a575780636ad419a814610a8157610442565b8063579cd3ca146109455780635e35359e1461095a57806361cd756e1461099d57806367b6d57c146109b257610442565b806349d10b64116102a657806349d10b64146108af5780634af80f0e146108c45780634e40c260146108f757806354fd4d501461093057610442565b8063395900d4146107ec5780633beb26c41461082f5780633e8ff43f14610859578063415f12401461088557610442565b80631d4db7911161034f57806322f3e2d41161031e57806322f3e2d4146107985780632fe8a6ad146107ad57806338a5e016146107c257806338e9f27a146107d757610442565b80631d4db791146106af5780631e1401f8146106d65780631f0181bc1461073257806321e6b53d1461076557610442565b806312c2aca41161038b57806312c2aca414610508578063154588371461053157806319b64015146106365780631cfab2901461067c57610442565b8063024c7ec7146104475780630c7d5cd8146104735780630e53aae9146104a157610442565b366104425760008051602061552a83398151915260005260076020527fb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d0f54600160301b900460ff16610440576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f5245534552564560681b604482015290519081900360640190fd5b005b600080fd5b34801561045357600080fd5b506104406004803603602081101561046a57600080fd5b503515156111d2565b34801561047f57600080fd5b506104886111f8565b6040805163ffffffff9092168252519081900360200190f35b3480156104ad57600080fd5b506104d4600480360360208110156104c457600080fd5b50356001600160a01b0316611204565b6040805195865263ffffffff9094166020860152911515848401521515606084015215156080830152519081900360a00190f35b34801561051457600080fd5b5061051d61129b565b604080519115158252519081900360200190f35b34801561053d57600080fd5b506105e66004803603604081101561055457600080fd5b81359190810190604081016020820135600160201b81111561057557600080fd5b82018360208201111561058757600080fd5b803590602001918460208302840111600160201b831117156105a857600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506112e2945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561062257818101518382015260200161060a565b505050509050019250505060405180910390f35b34801561064257600080fd5b506106606004803603602081101561065957600080fd5b5035611389565b604080516001600160a01b039092168252519081900360200190f35b34801561068857600080fd5b506104886004803603602081101561069f57600080fd5b50356001600160a01b03166113b3565b3480156106bb57600080fd5b506106c46113e5565b60408051918252519081900360200190f35b3480156106e257600080fd5b50610719600480360360608110156106f957600080fd5b506001600160a01b038135811691602081013590911690604001356113eb565b6040805192835260208301919091528051918290030190f35b34801561073e57600080fd5b506107196004803603602081101561075557600080fd5b50356001600160a01b0316611406565b34801561077157600080fd5b506104406004803603602081101561078857600080fd5b50356001600160a01b03166114bd565b3480156107a457600080fd5b5061051d6114d1565b3480156107b957600080fd5b5061051d611550565b3480156107ce57600080fd5b50610440611560565b3480156107e357600080fd5b5061051d611572565b3480156107f857600080fd5b506104406004803603606081101561080f57600080fd5b506001600160a01b0381358116916020810135909116906040013561157b565b34801561083b57600080fd5b506104406004803603602081101561085257600080fd5b5035611601565b34801561086557600080fd5b5061086e611606565b6040805161ffff9092168252519081900360200190f35b34801561089157600080fd5b506105e6600480360360208110156108a857600080fd5b503561160b565b3480156108bb57600080fd5b50610440611849565b3480156108d057600080fd5b50610440600480360360208110156108e757600080fd5b50356001600160a01b0316611a51565b34801561090357600080fd5b506106c46004803603604081101561091a57600080fd5b506001600160a01b038135169060200135611a86565b34801561093c57600080fd5b5061086e611bc2565b34801561095157600080fd5b50610488611bc7565b34801561096657600080fd5b506104406004803603606081101561097d57600080fd5b506001600160a01b03813581169160208101359091169060400135611bda565b3480156109a957600080fd5b50610660611d0b565b3480156109be57600080fd5b50610440600480360360208110156109d557600080fd5b50356001600160a01b0316611d1a565b3480156109f157600080fd5b5061044060048036036020811015610a0857600080fd5b50356001600160a01b0316611dc6565b348015610a2457600080fd5b5061044060048036036040811015610a3b57600080fd5b5080356001600160a01b0316906020013563ffffffff16611eed565b348015610a6357600080fd5b506106c460048036036020811015610a7a57600080fd5b5035611fb6565b348015610a8d57600080fd5b5061044060048036036020811015610aa457600080fd5b50356001600160a01b0316611fd8565b348015610ac057600080fd5b5061086e612005565b348015610ad557600080fd5b50610440612014565b348015610aea57600080fd5b506106606120cb565b6106c460048036036060811015610b0957600080fd5b810190602081018135600160201b811115610b2357600080fd5b820183602082011115610b3557600080fd5b803590602001918460208302840111600160201b83111715610b5657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610ba557600080fd5b820183602082011115610bb757600080fd5b803590602001918460208302840111600160201b83111715610bd857600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050913592506120da915050565b348015610c2457600080fd5b506105e660048036036060811015610c3b57600080fd5b810190602081018135600160201b811115610c5557600080fd5b820183602082011115610c6757600080fd5b803590602001918460208302840111600160201b83111715610c8857600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050823593505050602001356123a4565b348015610cd757600080fd5b50610660612653565b348015610cec57600080fd5b50610488612662565b348015610d0157600080fd5b5061086e612675565b348015610d1657600080fd5b506106c460048036036020811015610d2d57600080fd5b810190602081018135600160201b811115610d4757600080fd5b820183602082011115610d5957600080fd5b803590602001918460208302840111600160201b83111715610d7a57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061267b945050505050565b348015610dc457600080fd5b5061071960048036036060811015610ddb57600080fd5b506001600160a01b038135811691602081013590911690604001356126cd565b348015610e0757600080fd5b506105e660048036036060811015610e1e57600080fd5b81359190810190604081016020820135600160201b811115610e3f57600080fd5b820183602082011115610e5157600080fd5b803590602001918460208302840111600160201b83111715610e7257600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050600160201b811115610ec157600080fd5b820183602082011115610ed357600080fd5b803590602001918460208302840111600160201b83111715610ef457600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612870945050505050565b348015610f3e57600080fd5b506104406129ac565b348015610f5357600080fd5b506106c460048036036040811015610f6a57600080fd5b50803590602001356129d8565b348015610f8357600080fd5b5061051d6129f0565b348015610f9857600080fd5b506106606129f5565b6106c460048036036020811015610fb757600080fd5b5035612a04565b348015610fca57600080fd5b50610440612e7f565b348015610fdf57600080fd5b5061066060048036036020811015610ff657600080fd5b5035612ed8565b34801561100957600080fd5b506106c4612eff565b34801561101e57600080fd5b5061051d611606565b34801561103357600080fd5b50610660612f05565b34801561104857600080fd5b50610660612f14565b34801561105d57600080fd5b50610440612f23565b34801561107257600080fd5b506104d46004803603602081101561108957600080fd5b50356001600160a01b031661300b565b3480156110a557600080fd5b506106c4600480360360208110156110bc57600080fd5b50356001600160a01b031661304d565b3480156110d857600080fd5b506106c4600480360360208110156110ef57600080fd5b50356001600160a01b0316613054565b34801561110b57600080fd5b5061071961307d565b6106c4600480360360a081101561112a57600080fd5b506001600160a01b0381358116916020810135821691604082013591606081013582169160809091013516613086565b34801561116657600080fd5b506104406004803603602081101561117d57600080fd5b503563ffffffff16613296565b34801561119657600080fd5b50610440600480360360208110156111ad57600080fd5b50356001600160a01b031661337d565b3480156111c957600080fd5b506106606133fb565b6111da61340a565b60038054911515600160a01b0260ff60a01b19909216919091179055565b60085463ffffffff1681565b60008060008060006112146154e1565b505050506001600160a01b03929092166000908152600760209081526040808320815160a081018352815480825260019092015463ffffffff811694820185905260ff600160201b82048116151594830194909452650100000000008104841615156060830152600160301b90049092161515608090920182905295919450919250829190565b60008051602061552a83398151915260005260076020527fb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d0f54600160301b900460ff165b90565b60048054604080516318160ddd60e01b815290516060936000936001600160a01b0316926318160ddd9281830192602092829003018186803b15801561132757600080fd5b505afa15801561133b573d6000803e3d6000fd5b505050506040513d602081101561135157600080fd5b5051905060006113706c42616e636f72466f726d756c6160981b61345d565b905061137e858584846134db565b925050505b92915050565b60006006828154811061139857fe5b6000918252602090912001546001600160a01b031692915050565b6000816113bf81613620565b50506001600160a01b031660009081526007602052604090206001015463ffffffff1690565b600c5481565b6000806113f98585856126cd565b915091505b935093915050565b600954600090819060ff1661145a576040805162461bcd60e51b815260206004820152601560248201527411549497d393d397d4d510539110549117d413d3d3605a1b604482015290519081900360640190fd5b61146261550f565b61146a61368d565b9050600660008154811061147a57fe5b6000918252602090912001546001600160a01b03858116911614156114ab57805160209091015190925090506114b8565b6020810151905190925090505b915091565b6114c561340a565b6114ce81611d1a565b50565b6004805460408051638da5cb5b60e01b8152905160009330936001600160a01b031692638da5cb5b9281830192602092829003018186803b15801561151557600080fd5b505afa158015611529573d6000803e3d6000fd5b505050506040513d602081101561153f57600080fd5b50516001600160a01b031614905090565b600354600160a01b900460ff1681565b61156861340a565b611570612e7f565b565b60095460ff1681565b61158361340a565b6004805460408051632f1a9acf60e11b81526001600160a01b038781169482019490945285841660248201526044810185905290519290911691635e35359e9160648082019260009290919082900301818387803b1580156115e457600080fd5b505af11580156115f8573d6000803e3d6000fd5b50505050505050565b600d55565b600190565b6060611615613828565b6003805460ff60a81b1916600160a81b1790558161166c576040805162461bcd60e51b815260206004820152600f60248201526e11549497d6915493d7d05353d55395608a1b604482015290519081900360640190fd5b6000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156116bc57600080fd5b505afa1580156116d0573d6000803e3d6000fd5b505050506040513d60208110156116e657600080fd5b5051600480546040805163a24835d160e01b8152339381019390935260248301879052519293506001600160a01b03169163a24835d19160448082019260009290919082900301818387803b15801561173e57600080fd5b505af1158015611752573d6000803e3d6000fd5b505060065460609250905067ffffffffffffffff8111801561177357600080fd5b5060405190808252806020026020018201604052801561179d578160200160208202803683370190505b50905060005b81518110156117cd5760018282815181106117ba57fe5b60209081029190910101526001016117a3565b50611834600680548060200260200160405190810160405280929190818152602001828054801561182757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611809575b5050505050828487613878565b6003805460ff60a81b19169055949350505050565b6000546001600160a01b031633148061186c5750600354600160a01b900460ff16155b6118b1576040805162461bcd60e51b815260206004820152601160248201527011549497d050d0d154d4d7d11153925151607a1b604482015290519081900360640190fd5b60006118cf6f436f6e7472616374526567697374727960801b61345d565b6002549091506001600160a01b038083169116148015906118f857506001600160a01b03811615155b611940576040805162461bcd60e51b81526020600482015260146024820152734552525f494e56414c49445f524547495354525960601b604482015290519081900360640190fd5b60006001600160a01b0316816001600160a01b031663bb34534c6f436f6e7472616374526567697374727960801b6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156119a257600080fd5b505afa1580156119b6573d6000803e3d6000fd5b505050506040513d60208110156119cc57600080fd5b50516001600160a01b03161415611a21576040805162461bcd60e51b81526020600482015260146024820152734552525f494e56414c49445f524547495354525960601b604482015290519081900360640190fd5b60028054600380546001600160a01b038084166001600160a01b0319928316179092559091169216919091179055565b611a5961340a565b80611a6381613a83565b50600580546001600160a01b0319166001600160a01b0392909216919091179055565b60048054604080516318160ddd60e01b8152905160009384936001600160a01b0316926318160ddd9281830192602092829003018186803b158015611aca57600080fd5b505afa158015611ade573d6000803e3d6000fd5b505050506040513d6020811015611af457600080fd5b505190506000611b136c42616e636f72466f726d756c6160981b61345d565b6001600160a01b03868116600090815260076020908152604091829020546008548351632f55bdb560e01b815260048101899052602481019290925263ffffffff16604482015260648101899052915193945091841692632f55bdb592608480840193919291829003018186803b158015611b8d57600080fd5b505afa158015611ba1573d6000803e3d6000fd5b505050506040513d6020811015611bb757600080fd5b505195945050505050565b602781565b600854600160401b900463ffffffff1681565b611be2613828565b6003805460ff60a81b1916600160a81b179055611bfd61340a565b6000611c22762130b731b7b921b7b73b32b93a32b92ab833b930b232b960491b61345d565b6001600160a01b038516600090815260076020526040902060010154909150600160301b900460ff161580611c5c5750611c5a6114d1565b155b80611c7457506000546001600160a01b038281169116145b611cb9576040805162461bcd60e51b815260206004820152601160248201527011549497d050d0d154d4d7d11153925151607a1b604482015290519081900360640190fd5b611cc4848484613ad7565b6001600160a01b038416600090815260076020526040902060010154600160301b900460ff1615611cf857611cf884613b08565b50506003805460ff60a81b191690555050565b6003546001600160a01b031681565b611d2261340a565b762130b731b7b921b7b73b32b93a32b92ab833b930b232b960491b611d4681613be1565b600460009054906101000a90046001600160a01b03166001600160a01b031663f2fde38b836040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050600060405180830381600087803b158015611daa57600080fd5b505af1158015611dbe573d6000803e3d6000fd5b505050505050565b611dce613828565b6003805460ff60a81b1916600160a81b179055611de961340a565b60008051602061552a833981519152611e0181613620565b6000611e26762130b731b7b921b7b73b32b93a32b92ab833b930b232b960491b61345d565b9050611e306114d1565b1580611e4957506000546001600160a01b038281169116145b611e8e576040805162461bcd60e51b815260206004820152601160248201527011549497d050d0d154d4d7d11153925151607a1b604482015290519081900360640190fd5b6040516001600160a01b038416904780156108fc02916000818181858888f19350505050158015611ec3573d6000803e3d6000fd5b50611edb60008051602061552a833981519152613b08565b50506003805460ff60a81b1916905550565b611ef561340a565b611eff8282613c43565b6006546002148015611f535750600760006006600081548110611f1e57fe5b6000918252602080832091909101546001600160a01b0316835282019290925260400190206001015463ffffffff166207a120145b8015611fa15750600760006006600181548110611f6c57fe5b6000918252602080832091909101546001600160a01b0316835282019290925260400190206001015463ffffffff166207a120145b6009805460ff19169115159190911790555050565b600080825b8015611fd15760019190910190600a9004611fbb565b5092915050565b600880546001600160a01b03909216600160601b026bffffffffffffffffffffffff909216919091179055565b600061200f612675565b905090565b6001546001600160a01b03163314612067576040805162461bcd60e51b815260206004820152601160248201527011549497d050d0d154d4d7d11153925151607a1b604482015290519081900360640190fd5b600154600080546040516001600160a01b0393841693909116917f343765429aea5a34b3ff6a3785a98a5abb2597aca87bfbb58632c173d585373a91a360018054600080546001600160a01b03199081166001600160a01b03841617909155169055565b6002546001600160a01b031681565b60006120e4613828565b6003805460ff60a81b1916600160a81b1790556120ff613e65565b61210a848484613ead565b60005b84518110156121ba5760008051602061552a8339815191526001600160a01b031685828151811061213a57fe5b60200260200101516001600160a01b031614156121b2573484828151811061215e57fe5b6020026020010151146121b2576040805162461bcd60e51b815260206004820152601760248201527608aa4a4be8aa890be829a9eaa9ca8be9a92a69a82a8869604b1b604482015290519081900360640190fd5b60010161210d565b50341561224a5760008051602061552a83398151915260005260076020527fb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d0f54600160301b900460ff1661224a576040805162461bcd60e51b81526020600482015260126024820152714552525f4e4f5f4554485f5245534552564560701b604482015290519081900360640190fd5b6000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561229a57600080fd5b505afa1580156122ae573d6000803e3d6000fd5b505050506040513d60208110156122c457600080fd5b5051905060006122d5868684614142565b905083811015612321576040805162461bcd60e51b81526020600482015260126024820152714552525f52455455524e5f544f4f5f4c4f5760701b604482015290519081900360640190fd5b600480546040805163219e412d60e21b8152339381019390935260248301849052516001600160a01b039091169163867904b491604480830192600092919082900301818387803b15801561237557600080fd5b505af1158015612389573d6000803e3d6000fd5b50506003805460ff60a81b1916905550909695505050505050565b606080845167ffffffffffffffff811180156123bf57600080fd5b506040519080825280602002602001820160405280156123e9578160200160208202803683370190505b5090506000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b15801561243c57600080fd5b505afa158015612450573d6000803e3d6000fd5b505050506040513d602081101561246657600080fd5b5051905060006124856c42616e636f72466f726d756c6160981b61345d565b90506000816001600160a01b0316632f55bdb584600760008c8c815181106124a957fe5b6020908102919091018101516001600160a01b031682528181019290925260409081016000205460085482516001600160e01b031960e088901b1681526004810195909552602485019190915263ffffffff166044840152606483018b905251608480840193829003018186803b15801561252357600080fd5b505afa158015612537573d6000803e3d6000fd5b505050506040513d602081101561254d57600080fd5b5051905060005b845181101561264457826001600160a01b031663ebbb215885600760008d868151811061257d57fe5b6020908102919091018101516001600160a01b031682528181019290925260409081016000205460085482516001600160e01b031960e088901b1681526004810195909552602485019190915263ffffffff1660448401526064830187905251608480840193829003018186803b1580156125f757600080fd5b505afa15801561260b573d6000803e3d6000fd5b505050506040513d602081101561262157600080fd5b5051855186908390811061263157fe5b6020908102919091010152600101612554565b509293505050505b9392505050565b6000546001600160a01b031681565b600854600160201b900463ffffffff1681565b60065490565b80516000908190815b818110156126b4576126a885828151811061269b57fe5b6020026020010151611fb6565b90920191600101612684565b5060016126c183836129d8565b03600a0a949350505050565b6000806126d8613e65565b846126e281613620565b846126ec81613620565b856001600160a01b0316876001600160a01b0316141561274c576040805162461bcd60e51b815260206004820152601660248201527511549497d4d0535157d4d3d55490d157d5105491d15560521b604482015290519081900360640190fd5b60006127676c42616e636f72466f726d756c6160981b61345d565b6001600160a01b03166394491fab61277e8a613054565b6001600160a01b038b1660009081526007602052604090206001015463ffffffff166127a98b613054565b6001600160a01b038c166000908152600760209081526040918290206001015482516001600160e01b031960e089901b168152600481019690965263ffffffff94851660248701526044860193909352929091166064840152608483018b90525160a480840193829003018186803b15801561282457600080fd5b505afa158015612838573d6000803e3d6000fd5b505050506040513d602081101561284e57600080fd5b50519050600061285d8261416d565b9182900399919850909650505050505050565b606061287a613828565b6003805460ff60a81b1916600160a81b179055612895613e65565b6128a0838386613ead565b6000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156128f057600080fd5b505afa158015612904573d6000803e3d6000fd5b505050506040513d602081101561291a57600080fd5b5051600480546040805163a24835d160e01b8152339381019390935260248301899052519293506001600160a01b03169163a24835d19160448082019260009290919082900301818387803b15801561297257600080fd5b505af1158015612986573d6000803e3d6000fd5b5050505061299684848388613878565b6003805460ff60a81b1916905595945050505050565b6129b461340a565b600354600280546001600160a01b0319166001600160a01b03909216919091179055565b600081600281048401816129e857fe5b049392505050565b600181565b6005546001600160a01b031681565b6000612a0e613828565b6003805460ff60a81b1916600160a81b179055612a2961419e565b60008051602061552a833981519152600052600760205260008051602061554a83398151915254612a5a90346141de565b60008051602061552a83398151915260009081526007602090815260008051602061554a8339815191529290925560048054604080516318160ddd60e01b8152905193946001600160a01b03909216936318160ddd938281019392829003018186803b158015612ac957600080fd5b505afa158015612add573d6000803e3d6000fd5b505050506040513d6020811015612af357600080fd5b505190506000612b126c42616e636f72466f726d756c6160981b61345d565b60065490915060005b81811015612dfc57600060068281548110612b3257fe5b60009182526020808320909101546001600160a01b03908116808452600783526040808520546008548251631d77642b60e31b8152600481018d90526024810183905263ffffffff9091166044820152606481018e9052915192965094939289169263ebbb215892608480840193829003018186803b158015612bb457600080fd5b505afa158015612bc8573d6000803e3d6000fd5b505050506040513d6020811015612bde57600080fd5b505190506001600160a01b03831660008051602061552a8339815191521415612d295780341115612c3e5760405133903483900380156108fc02916000818181858888f19350505050158015612c38573d6000803e3d6000fd5b50612d24565b80341015612d24573415612c91576040805162461bcd60e51b81526020600482015260156024820152744552525f494e56414c49445f4554485f56414c554560581b604482015290519081900360640190fd5b600854612cb090600160601b90046001600160a01b031633308461422b565b6008600c9054906101000a90046001600160a01b03166001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015612d0b57600080fd5b505af1158015612d1f573d6000803e3d6000fd5b505050505b612d35565b612d358333308461422b565b6000612d418383614396565b6001600160a01b0385166000908152600760205260408120829055909150612d69898c614396565b604080518581526020810185905280820183905290519192506001600160a01b0387169133917f4a1a2a6176e9646d9e3157f7c2ab3c499f18337c0b0828cfb28e0a61de4a11f7919081900360600190a36001600160a01b038516600090815260076020526040902060010154612deb9082908790859063ffffffff166143df565b505060019093019250612b1b915050565b50600480546040805163219e412d60e21b8152339381019390935260248301889052516001600160a01b039091169163867904b491604480830192600092919082900301818387803b158015612e5157600080fd5b505af1158015612e65573d6000803e3d6000fd5b50506003805460ff60a81b19169055509495945050505050565b612e8761340a565b612e8f61444e565b6004546001906001600160a01b0316612ea6611606565b61ffff167f6b08c2e2c9969e55a647a764db9b554d64dc42f1a704da11a6d5b129ad163f2c60405160405180910390a4565b60068181548110612ee557fe5b6000918252602090912001546001600160a01b0316905081565b600d5481565b6004546001600160a01b031681565b6001546001600160a01b031681565b612f2b61340a565b6000612f50762130b731b7b921b7b73b32b93a32b92ab833b930b232b960491b61345d565b6004549091506000906001600160a01b0316612f6a611606565b61ffff167f6b08c2e2c9969e55a647a764db9b554d64dc42f1a704da11a6d5b129ad163f2c60405160405180910390a4612fa38161337d565b6040805163487ac64b60e11b81526027600482015290516001600160a01b038316916390f58c9691602480830192600092919082900301818387803b158015612feb57600080fd5b505af1158015612fff573d6000803e3d6000fd5b505050506114ce612014565b6007602052600090815260409020805460019091015463ffffffff81169060ff600160201b8204811691650100000000008104821691600160301b9091041685565b6000611383825b60008161306081613620565b50506001600160a01b031660009081526007602052604090205490565b600a54600b5482565b6000613090613828565b6003805460ff60a81b1916600160a81b1790556c42616e636f724e6574776f726b60981b6130bd81613be1565b856001600160a01b0316876001600160a01b0316141561311d576040805162461bcd60e51b815260206004820152601660248201527511549497d4d0535157d4d3d55490d157d5105491d15560521b604482015290519081900360640190fd5b6005546001600160a01b0316158061322a575060055460408051633af32abf60e01b81526001600160a01b03878116600483015291519190921691633af32abf916024808301926020929190829003018186803b15801561317d57600080fd5b505afa158015613191573d6000803e3d6000fd5b505050506040513d60208110156131a757600080fd5b5051801561322a575060055460408051633af32abf60e01b81526001600160a01b03868116600483015291519190921691633af32abf916024808301926020929190829003018186803b1580156131fd57600080fd5b505afa158015613211573d6000803e3d6000fd5b505050506040513d602081101561322757600080fd5b50515b613271576040805162461bcd60e51b815260206004820152601360248201527211549497d393d517d5d2125511531254d51151606a1b604482015290519081900360640190fd5b61327e87878787876144b2565b6003805460ff60a81b19169055979650505050505050565b61329e61340a565b60085463ffffffff600160201b90910481169082161115613306576040805162461bcd60e51b815260206004820152601a60248201527f4552525f494e56414c49445f434f4e56455253494f4e5f464545000000000000604482015290519081900360640190fd5b6008546040805163ffffffff600160401b90930483168152918316602083015280517f81cd2ffb37dd237c0e4e2a3de5265fcf9deb43d3e7801e80db9f1ccfba7ee6009281900390910190a16008805463ffffffff909216600160401b026bffffffff000000000000000019909216919091179055565b61338561340a565b6000546001600160a01b03828116911614156133d9576040805162461bcd60e51b815260206004820152600e60248201526d22a9292fa9a0a6a2afa7aba722a960911b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6004546001600160a01b031690565b6000546001600160a01b03163314611570576040805162461bcd60e51b815260206004820152601160248201527011549497d050d0d154d4d7d11153925151607a1b604482015290519081900360640190fd5b60025460408051632ecd14d360e21b81526004810184905290516000926001600160a01b03169163bb34534c916024808301926020929190829003018186803b1580156134a957600080fd5b505afa1580156134bd573d6000803e3d6000fd5b505050506040513d60208110156134d357600080fd5b505192915050565b606080845167ffffffffffffffff811180156134f657600080fd5b50604051908082528060200260200182016040528015613520578160200160208202803683370190505b50905060005b815181101561361657836001600160a01b0316638074590a86600760008a868151811061354f57fe5b6020908102919091018101516001600160a01b031682528181019290925260409081016000205460085482516001600160e01b031960e088901b1681526004810195909552602485019190915263ffffffff166044840152606483018c905251608480840193829003018186803b1580156135c957600080fd5b505afa1580156135dd573d6000803e3d6000fd5b505050506040513d60208110156135f357600080fd5b5051825183908390811061360357fe5b6020908102919091010152600101613526565b5095945050505050565b6001600160a01b038116600090815260076020526040902060010154600160301b900460ff166114ce576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f5245534552564560681b604482015290519081900360640190fd5b61369561550f565b6000600c546136a2614775565b039050806136c857505060408051808201909152600a548152600b5460208201526112df565b60006007600060066001815481106136dc57fe5b60009182526020808320909101546001600160a01b0316835282019290925260400181205460068054919350600791839190829061371657fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054905061025883106137615760408051808201909152918252602082015291506112df9050565b61376961550f565b5060408051808201909152600a548152600b5460208201819052600090613790908561478f565b82519091506000906137a2908561478f565b905060006137c86137b3848961478f565b6137c2846102588b900361478f565b90614396565b905060006137ef6102586137e988886020015161478f90919063ffffffff16565b9061478f565b905061380982826c0c9f2c9cd04674edea400000006147ed565b6040805180820190915291825260208201529850505050505050505090565b600354600160a81b900460ff1615611570576040805162461bcd60e51b815260206004820152600e60248201526d4552525f5245454e5452414e435960901b604482015290519081900360640190fd5b606061388261419e565b600061389d6c42616e636f72466f726d756c6160981b61345d565b905060006138ab85856141de565b905060606138bb858988866134db565b905060005b8851811015613a775760008982815181106138d757fe5b6020026020010151905060008383815181106138ef57fe5b6020026020010151905089838151811061390557fe5b602002602001015181101561395a576040805162461bcd60e51b815260206004820152601660248201527511549497d6915493d7d5105491d15517d05353d5539560521b604482015290519081900360640190fd5b6001600160a01b03821660009081526007602052604081205461397d90836141de565b6001600160a01b038416600081815260076020526040902082905590915060008051602061552a83398151915214156139e357604051339083156108fc029084906000818181858888f193505050501580156139dd573d6000803e3d6000fd5b506139ee565b6139ee83338461481f565b604080518381526020810183905280820188905290516001600160a01b0385169133917fbc7d19d505c7ec4db83f3b51f19fb98c4c8a99922e7839d1ee608dfbee29501b9181900360600190a36001600160a01b038316600090815260076020526040902060010154613a6c9087908590849063ffffffff166143df565b5050506001016138c0565b50979650505050505050565b6001600160a01b0381163014156114ce576040805162461bcd60e51b815260206004820152601360248201527222a9292fa0a2222922a9a9afa4a9afa9a2a62360691b604482015290519081900360640190fd5b613adf61340a565b82613ae98161497f565b82613af38161497f565b83613afd81613a83565b611dbe86868661481f565b80613b1281613620565b6001600160a01b03821660008051602061552a8339815191521415613b51576001600160a01b0382166000908152600760205260409020479055613bdd565b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b158015613b9757600080fd5b505afa158015613bab573d6000803e3d6000fd5b505050506040513d6020811015613bc157600080fd5b50516001600160a01b0383166000908152600760205260409020555b5050565b613bea8161345d565b6001600160a01b0316336001600160a01b0316146114ce576040805162461bcd60e51b815260206004820152601160248201527011549497d050d0d154d4d7d11153925151607a1b604482015290519081900360640190fd5b613c4b61340a565b613c536149d0565b81613c5d8161497f565b82613c6781613a83565b82613c7181614a17565b6004546001600160a01b03868116911614801590613cb257506001600160a01b038516600090815260076020526040902060010154600160301b900460ff16155b613cf9576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f5245534552564560681b604482015290519081900360640190fd5b60085463ffffffff908116620f42400381169085161115613d61576040805162461bcd60e51b815260206004820152601a60248201527f4552525f494e56414c49445f524553455256455f574549474854000000000000604482015290519081900360640190fd5b61ffff613d6c612675565b61ffff1610613dbe576040805162461bcd60e51b815260206004820152601960248201527811549497d253959053125117d49154d154959157d0d3d55395603a1b604482015290519081900360640190fd5b5050506001600160a01b0390911660008181526007602052604081208181556001908101805466ff0000000000001963ffffffff80881663ffffffff199384161791909116600160301b179092556006805493840181559093527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f90910180546001600160a01b031916909317909255600880548084169094019092169216919091179055565b613e6d6114d1565b611570576040805162461bcd60e51b815260206004820152600c60248201526b4552525f494e41435449564560a01b604482015290519081900360640190fd5b600654835160009182918114613f00576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f5245534552564560681b604482015290519081900360640190fd5b84518114613f4a576040805162461bcd60e51b815260206004820152601260248201527111549497d253959053125117d05353d5539560721b604482015290519081900360640190fd5b600092505b808310156140fb5760076000878581518110613f6757fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060010160069054906101000a900460ff16613fe7576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f5245534552564560681b604482015290519081900360640190fd5b600091505b808210156140495785828151811061400057fe5b60200260200101516001600160a01b03166006848154811061401e57fe5b6000918252602090912001546001600160a01b0316141561403e57614049565b600190910190613fec565b808210614093576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f5245534552564560681b604482015290519081900360640190fd5b60008584815181106140a157fe5b6020026020010151116140f0576040805162461bcd60e51b815260206004820152601260248201527111549497d253959053125117d05353d5539560721b604482015290519081900360640190fd5b600190920191613f4f565b60008411611dbe576040805162461bcd60e51b815260206004820152600f60248201526e11549497d6915493d7d05353d55395608a1b604482015290519081900360640190fd5b60008161415a576141538484614a87565b905061264c565b614165848484614ba6565b949350505050565b60085460009061138390620f424090614198908590600160401b900463ffffffff9081169061478f16565b90614ed3565b60065460005b81811015613bdd576141d6600682815481106141bc57fe5b6000918252602090912001546001600160a01b0316613b08565b6001016141a4565b600081831015614225576040805162461bcd60e51b815260206004820152600d60248201526c4552525f554e444552464c4f5760981b604482015290519081900360640190fd5b50900390565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106142b05780518252601f199092019160209182019101614291565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114614312576040519150601f19603f3d011682016040523d82523d6000602084013e614317565b606091505b5091509150818015614345575080511580614345575080806020019051602081101561434257600080fd5b50515b611dbe576040805162461bcd60e51b815260206004820152601860248201527f4552525f5452414e534645525f46524f4d5f4641494c45440000000000000000604482015290519081900360640190fd5b60008282018381101561264c576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4f564552464c4f5760a01b604482015290519081900360640190fd5b6004546001600160a01b0380851691167f77f29993cf2c084e726f7e802da0719d6a0ade3e204badc7a3ffd57ecb768c2461441d85620f424061478f565b6144308863ffffffff8088169061478f16565b6040805192835260208301919091528051918290030190a350505050565b6001614458612675565b61ffff16116144aa576040805162461bcd60e51b815260206004820152601960248201527811549497d253959053125117d49154d154959157d0d3d55395603a1b604482015290519081900360640190fd5b611570614f32565b60008060006144c28888886126cd565b915091508160001415614515576040805162461bcd60e51b815260206004820152601660248201527511549497d6915493d7d5105491d15517d05353d5539560521b604482015290519081900360640190fd5b61451e87613054565b821061452657fe5b6001600160a01b03881660008051602061552a833981519152141561459857853414614593576040805162461bcd60e51b815260206004820152601760248201527608aa4a4be8aa890be829a9eaa9ca8be9a92a69a82a8869604b1b604482015290519081900360640190fd5b61466f565b341580156146295750856146266145ae8a613054565b604080516370a0823160e01b815230600482015290516001600160a01b038d16916370a08231916024808301926020929190829003018186803b1580156145f457600080fd5b505afa158015614608573d6000803e3d6000fd5b505050506040513d602081101561461e57600080fd5b5051906141de565b10155b61466f576040805162461bcd60e51b815260206004820152601260248201527111549497d253959053125117d05353d5539560721b604482015290519081900360640190fd5b61467888613b08565b6001600160a01b03871660009081526007602052604090205461469b90836141de565b6001600160a01b03881660008181526007602052604090209190915560008051602061552a8339815191521415614708576040516001600160a01b0385169083156108fc029084906000818181858888f19350505050158015614702573d6000803e3d6000fd5b50614713565b61471387858461481f565b60095460ff16801561472d5750614728614775565b600c54105b156147525761473a61368d565b8051600a5560200151600b5561474e614775565b600c555b614760888887898686614ff9565b61476a8888615062565b509695505050505050565b6000600d5460001415614788574261200f565b50600d5490565b60008261479e57506000611383565b828202828482816147ab57fe5b041461264c576040805162461bcd60e51b815260206004820152600c60248201526b4552525f4f564552464c4f5760a01b604482015290519081900360640190fd5b600080828511806147fd57508284115b156148165761480d858585615266565b915091506113fe565b50929391925050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b6020831061489c5780518252601f19909201916020918201910161487d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146148fe576040519150601f19603f3d011682016040523d82523d6000602084013e614903565b606091505b5091509150818015614931575080511580614931575080806020019051602081101561492e57600080fd5b50515b614978576040805162461bcd60e51b815260206004820152601360248201527211549497d514905394d1915497d19052531151606a1b604482015290519081900360640190fd5b5050505050565b6001600160a01b0381166114ce576040805162461bcd60e51b81526020600482015260136024820152724552525f494e56414c49445f4144445245535360681b604482015290519081900360640190fd5b6149d86114d1565b15611570576040805162461bcd60e51b815260206004820152600a6024820152694552525f41435449564560b01b604482015290519081900360640190fd5b60008163ffffffff16118015614a365750620f424063ffffffff821611155b6114ce576040805162461bcd60e51b815260206004820152601a60248201527f4552525f494e56414c49445f524553455256455f574549474854000000000000604482015290519081900360640190fd5b600080614a938361267b565b905060005b8451811015614b9e576000858281518110614aaf57fe5b602002602001015190506000858381518110614ac757fe5b6020026020010151905060008051602061552a8339815191526001600160a01b0316826001600160a01b031614614b0457614b048233308461422b565b6001600160a01b0382166000818152600760209081526040918290208490558151848152908101849052808201879052905133917f4a1a2a6176e9646d9e3157f7c2ab3c499f18337c0b0828cfb28e0a61de4a11f7919081900360600190a36001600160a01b038216600090815260076020526040902060010154614b949085908490849063ffffffff166143df565b5050600101614a98565b509392505050565b6000614bb061419e565b60008051602061552a833981519152600052600760205260008051602061554a83398151915254614be190346141de565b60008051602061552a8339815191526000908152600760205260008051602061554a83398151915291909155614c266c42616e636f72466f726d756c6160981b61345d565b90506000614c36828588886152ab565b90506000614c448583614396565b905060005b8751811015614ec7576000888281518110614c6057fe5b6020908102919091018101516001600160a01b038082166000908152600784526040808220546008548251631d77642b60e31b8152600481018f90526024810183905263ffffffff9091166044820152606481018b90529151949650949193928a169263ebbb215892608480840193919291829003018186803b158015614ce657600080fd5b505afa158015614cfa573d6000803e3d6000fd5b505050506040513d6020811015614d1057600080fd5b5051905080614d5f576040805162461bcd60e51b815260206004820152601660248201527511549497d6915493d7d5105491d15517d05353d5539560521b604482015290519081900360640190fd5b898481518110614d6b57fe5b6020026020010151811115614d7c57fe5b6001600160a01b03831660008051602061552a83398151915214614dab57614da68333308461422b565b614e16565b808a8581518110614db857fe5b60200260200101511115614e1657336001600160a01b03166108fc828c8781518110614de057fe5b6020026020010151039081150290604051600060405180830381858888f19350505050158015614e14573d6000803e3d6000fd5b505b6000614e228383614396565b6001600160a01b03851660008181526007602090815260409182902084905581518681529081018490528082018a90529051929350909133917f4a1a2a6176e9646d9e3157f7c2ab3c499f18337c0b0828cfb28e0a61de4a11f7919081900360600190a36001600160a01b038416600090815260076020526040902060010154614eb79087908690849063ffffffff166143df565b505060019092019150614c499050565b50909695505050505050565b6000808211614f1e576040805162461bcd60e51b81526020600482015260126024820152714552525f4449564944455f42595f5a45524f60701b604482015290519081900360640190fd5b6000828481614f2957fe5b04949350505050565b614f3a61340a565b6000614f44612675565b61ffff1611614f96576040805162461bcd60e51b815260206004820152601960248201527811549497d253959053125117d49154d154959157d0d3d55395603a1b604482015290519081900360640190fd5b60048054604080516379ba509760e01b815290516001600160a01b03909216926379ba509792828201926000929082900301818387803b158015614fd957600080fd5b505af1158015614fed573d6000803e3d6000fd5b5050505061157061419e565b600160ff1b811061500657fe5b604080518481526020810184905280820183905290516001600160a01b038087169288821692918a16917f276856b36cbc45526a0ba64f44611557a2a8b68662c5388e9fe6d72e86e1c8cb9181900360600190a4505050505050565b6000600460009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b1580156150b257600080fd5b505afa1580156150c6573d6000803e3d6000fd5b505050506040513d60208110156150dc57600080fd5b5051905060006150eb84613054565b905060006150f884613054565b6001600160a01b038087166000908152600760205260408082206001908101549389168352908220015492935063ffffffff9182169282169161513f908590859061478f16565b905060006151568663ffffffff8086169061478f16565b604080518481526020810183905281519293506001600160a01b03808c1693908d16927f77f29993cf2c084e726f7e802da0719d6a0ade3e204badc7a3ffd57ecb768c24928290030190a36151ad878a88876143df565b6151b9878987866143df565b604080518881526020810188905263ffffffff86168183015290516001600160a01b038b16917f8a6a7f53b3c8fa1dc4b83e3f1be668c1b251ff8d44cdcb83eb3acec3fec6a788919081900360600190a2604080518881526020810187905263ffffffff85168183015290516001600160a01b038a16917f8a6a7f53b3c8fa1dc4b83e3f1be668c1b251ff8d44cdcb83eb3acec3fec6a788919081900360600190a2505050505050505050565b6000808385141561527d57505060028104806113fe565b838510156152905761480d858585615471565b60008061529e868887615471565b9890975095505050505050565b60008060015b84518110156153785761531b600760008784815181106152cd57fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000015485848151811061530557fe5b602002602001015161478f90919063ffffffff16565b6153666007600088868151811061532e57fe5b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000206000015486848151811061530557fe5b1015615370578091505b6001016152b1565b50856001600160a01b0316632f55bdb5866007600088868151811061539957fe5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060000154600860009054906101000a900463ffffffff168786815181106153e457fe5b60200260200101516040518563ffffffff1660e01b8152600401808581526020018481526020018363ffffffff16815260200182815260200194505050505060206040518083038186803b15801561543b57600080fd5b505afa15801561544f573d6000803e3d6000fd5b505050506040513d602081101561546557600080fd5b50519695505050505050565b6000806000836000198161548157fe5b049050808611156154ba57600081600101878161549a57fe5b0460010190508087816154a957fe5b0496508086816154b557fe5b049550505b60006154d18786026154cc8989614396565b6129d8565b9794889003965093945050505050565b6040805160a08101825260008082526020820181905291810182905260608101829052608081019190915290565b60405180604001604052806000815260200160008152509056fe000000000000000000000000eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeb2084a3e4595ccf007fb44245853374aaf0de960074375e8e0fb334712e94d0ea264697066735822122089c0c3358ca8c545b32bb44e5b659e8ecd8dc9cf301a41360cca2d8fe72d849b64736f6c634300060c0033",
"immutableReferences": {},
"sourceMap": "152:641:41:-:0;;;349:27:60;;;-1:-1:-1;;;;349:27:60;;;586:89:26;2899:30:8;586:89:26;989:34;;;-1:-1:-1;;989:34:26;;;257:214:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;257:214:41;;;;;;;;;;;619:5:58;:18;;-1:-1:-1;;;;;;619:18:58;627:10;619:18;;;257:214:41;;;;;;;;;;;;;;594:23:65;257:214:41;594:13:65;:23::i;:::-;-1:-1:-1;2122:8:57::1;:39:::0;;-1:-1:-1;;;;;2122:39:57;;::::1;-1:-1:-1::0;;;;;;2122:39:57;;::::1;::::0;::::1;::::0;;;2172:12:::1;:43:::0;;;;::::1;;::::0;;6069:7:8;594:23:65;6069:7:8;594:13:65;:23::i;:::-;6168:17:8;7294:35:::2;6168:17:::0;7294:19:::2;:35::i;:::-;-1:-1:-1::0;;6203:6:8::3;:16:::0;;-1:-1:-1;;;;;6203:16:8;;::::3;-1:-1:-1::0;;;;;;6203:16:8;;::::3;::::0;;;::::3;::::0;;;-1:-1:-1;6230:16:8::3;:36:::0;;::::3;::::0;;::::3;::::0;::::3;-1:-1:-1::0;;;;6230:36:8;;::::3;::::0;;;::::3;::::0;;-1:-1:-1;152:641:41;;-1:-1:-1;;;;;;;;152:641:41;692:128:65;-1:-1:-1;;;;;766:22:65;;758:54;;;;;-1:-1:-1;;;758:54:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;692:128;:::o;7404:156:8:-;1846:7;7489:32;;;;;7481:71;;;;;-1:-1:-1;;;7481:71:8;;;;;;;;;;;;;;;;;;;;;;;;;;;152:641:41;;;;;;;",
"deployedSourceMap": "152:641:41:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;8454:29:8;;:8;:29;;:35;;-1:-1:-1;;;8454:35:8;;;;8446:67;;;;;-1:-1:-1;;;8446:67:8;;;;;;;;;;;;-1:-1:-1;;;8446:67:8;;;;;;;;;;;;;;;152:641:41;;;;;3655:224:57;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3655:224:57;;;;:::i;2899:30:8:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;22514:248;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22514:248:8;-1:-1:-1;;;;;22514:248:8;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17176:113;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;20265:410:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20265:410:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;20265:410:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20265:410:26;;-1:-1:-1;20265:410:26;;-1:-1:-1;;;;;20265:410:26:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22836:145:8;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22836:145:8;;:::i;:::-;;;;-1:-1:-1;;;;;22836:145:8;;;;;;;;;;;;;;16300:204;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16300:204:8;-1:-1:-1;;;;;16300:204:8;;:::i;1206:40:26:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23471:208:8;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23471:208:8;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7816:436:26;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7816:436:26;-1:-1:-1;;;;;7816:436:26;;:::i;22136:130:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22136:130:8;-1:-1:-1;;;;;22136:130:8;;:::i;10641:121::-;;;;;;;;;;;;;:::i;1333:38:57:-;;;;;;;;;;;;;:::i;22340:100:8:-;;;;;;;;;;;;;:::i;989:34:26:-;;;;;;;;;;;;;:::i;12220:157:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12220:157:8;;;;;;;;;;;;;;;;;:::i;702:89:41:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;702:89:41;;:::i;2555:90:26:-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16888:626;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16888:626:26;;:::i;2300:925:57:-;;;;;;;;;;;;;:::i;10268:202:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10268:202:8;-1:-1:-1;;;;;10268:202:8;;:::i;19492:419:26:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;19492:419:26;;;;;;;;:::i;2343:35:8:-;;;;;;;;;;;;;:::i;3292:40::-;;;;;;;;;;;;;:::i;13330:735::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13330:735:8;;;;;;;;;;;;;;;;;:::i;1243:37:57:-;;;;;;;;;;;;;:::i;11112:198:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11112:198:8;-1:-1:-1;;;;;11112:198:8;;:::i;9086:554::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9086:554:8;-1:-1:-1;;;;;9086:554:8;;:::i;3376:322:26:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3376:322:26;;-1:-1:-1;;;;;3376:322:26;;;;;;;;:::i;30782:180::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30782:180:26;;:::i;477:96:41:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;477:96:41;-1:-1:-1;;;;;477:96:41;;:::i;23055:114:8:-;;;;;;;;;;;;;:::i;1422:217:58:-;;;;;;;;;;;;;:::i;1154:33:57:-;;;;;;;;;;;;;:::i;10576:1538:26:-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10576:1538:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10576:1538:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10576:1538:26;;;;;;;;-1:-1:-1;10576:1538:26;;-1:-1:-1;;;;;10576:1538:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;10576:1538:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10576:1538:26;;-1:-1:-1;;10576:1538:26;;;-1:-1:-1;10576:1538:26;;-1:-1:-1;;10576:1538:26:i;18168:798::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18168:798:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;18168:798:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18168:798:26;;-1:-1:-1;;18168:798:26;;;-1:-1:-1;;;18168:798:26;;;;:::i;219:29:58:-;;;;;;;;;;;;;:::i;3041:43:8:-;;;;;;;;;;;;;:::i;14882:112::-;;;;;;;;;;;;;:::i;31607:332:26:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31607:332:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31607:332:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31607:332:26;;-1:-1:-1;31607:332:26;;-1:-1:-1;;;;;31607:332:26:i;4133:848::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;4133:848:26;;;;;;;;;;;;;;;;;:::i;12623:783::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12623:783:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12623:783:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12623:783:26;;;;;;;;-1:-1:-1;12623:783:26;;-1:-1:-1;;;;;12623:783:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12623:783:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12623:783:26;;-1:-1:-1;12623:783:26;;-1:-1:-1;;;;;12623:783:26:i;3304:137:57:-;;;;;;;;;;;;;:::i;31208:116:26:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31208:116:26;;;;;;;:::i;3417:46:8:-;;;;;;;;;;;;;:::i;2473:::-;;;;;;;;;;;;;:::i;13893:2483:26:-;;;;;;;;;;;;;;;;-1:-1:-1;13893:2483:26;;:::i;2918:166::-;;;;;;;;;;;;;:::i;2613:34:8:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2613:34:8;;:::i;224:26:41:-;;;;;;;;;;;;;:::i;9815:82:8:-;;;;;;;;;;;;;:::i;2387:39::-;;;;;;;;;;;;;:::i;255:23:58:-;;;;;;;;;;;;;:::i;14288:374:8:-;;;;;;;;;;;;;:::i;2754:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2754:48:8;-1:-1:-1;;;;;2754:48:8;;:::i;23243:154::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23243:154:8;-1:-1:-1;;;;;23243:154:8;;:::i;16773:225::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16773:225:8;-1:-1:-1;;;;;16773:225:8;;:::i;1068:31:26:-;;;;;;;;;;;;;:::i;17872:782:8:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17872:782:8;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12580:274::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12580:274:8;;;;:::i;1164:167:58:-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1164:167:58;-1:-1:-1;;;;;1164:167:58;;:::i;21965:97:8:-;;;;;;;;;;;;;:::i;3655:224:57:-;726:12:58;:10;:12::i;:::-;3815:26:57::1;:56:::0;;;::::1;;-1:-1:-1::0;;;3815:56:57::1;-1:-1:-1::0;;;;3815:56:57;;::::1;::::0;;;::::1;::::0;;3655:224::o;2899:30:8:-;;;;;;:::o;22514:248::-;22586:7;22595:6;22603:4;22609;22615;22632:22;;:::i;:::-;-1:-1:-1;;;;;;;;;22657:18:8;;;;;;;;:8;:18;;;;;;;;22632:43;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22632:43:8;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;22632:43:8;;;;;;;;;;;;;;;;;-1:-1:-1;22657:18:8;;-1:-1:-1;22657:18:8;;22632:43;22514:248::o;17176:113::-;-1:-1:-1;;;;;;;;;;;17222:4:8;17246:29;:8;:29;;:35;;-1:-1:-1;;;17246:35:8;;;;17176:113;;:::o;20265:410:26:-;20474:6;;;20454:42;;;-1:-1:-1;;;20454:42:26;;;;20398:16;;20432:19;;-1:-1:-1;;;;;20474:6:26;;20454:40;;:42;;;;;;;;;;;20474:6;20454:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20454:42:26;;-1:-1:-1;20507:22:26;20547:25;-1:-1:-1;;;20547:9:26;:25::i;:::-;20507:66;;20591:76;20621:7;20630:14;20646:11;20659:7;20591:29;:76::i;:::-;20584:83;;;;20265:410;;;;;:::o;22836:145:8:-;22907:11;22938:27;22966:6;22938:35;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22938:35:8;;22836:145;-1:-1:-1;;22836:145:8:o;16300:204::-;16435:6;16402:13;6959:23;6973:8;6959:13;:23::i;:::-;-1:-1:-1;;;;;;;16466:23:8::1;;::::0;;;:8:::1;:23;::::0;;;;:30:::1;;::::0;::::1;;::::0;16300:204::o;1206:40:26:-;;;;:::o;23471:208:8:-;23580:7;23589;23616:55;23635:12;23649;23663:7;23616:18;:55::i;:::-;23609:62;;;;23471:208;;;;;;;:::o;7816:436:26:-;7968:14;;7886:7;;;;7968:14;;7960:48;;;;;-1:-1:-1;;;7960:48:26;;;;;;;;;;;;-1:-1:-1;;;7960:48:26;;;;;;;;;;;;;;;8074:20;;:::i;:::-;8097:19;:17;:19::i;:::-;8074:42;;8141:13;8155:1;8141:16;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8131:26:26;;;8141:16;;8131:26;8127:82;;;8182:6;;8190;;;;;8182;;-1:-1:-1;8190:6:26;-1:-1:-1;8174:23:26;;8127:82;8229:6;;;;8237;;8229;;-1:-1:-1;8237:6:26;-1:-1:-1;7816:436:26;;;;:::o;22136:130:8:-;726:12:58;:10;:12::i;:::-;22224:34:8::1;22248:9;22224:23;:34::i;:::-;22136:130:::0;:::o;10641:121::-;10723:6;;;:14;;;-1:-1:-1;;;10723:14:8;;;;10699:4;;10749;;-1:-1:-1;;;;;10723:6:8;;:12;;:14;;;;;;;;;;;:6;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10723:14:8;-1:-1:-1;;;;;10723:31:8;;;-1:-1:-1;10641:121:8;:::o;1333:38:57:-;;;-1:-1:-1;;;1333:38:57;;;;;:::o;22340:100:8:-;726:12:58;:10;:12::i;:::-;22409:23:8::1;:21;:23::i;:::-;22340:100::o:0;989:34:26:-;;;;;;:::o;12220:157:8:-;726:12:58;:10;:12::i;:::-;12326:6:8::1;::::0;;:43:::1;::::0;;-1:-1:-1;;;12326:43:8;;-1:-1:-1;;;;;12326:43:8;;::::1;::::0;;::::1;::::0;;;;;;::::1;::::0;;;;;;;;;;;;:6;;;::::1;::::0;:21:::1;::::0;:43;;;;;:6:::1;::::0;:43;;;;;;;;:6;;:43;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;12220:157:::0;;;:::o;702:89:41:-;758:11;:26;702:89::o;2555:90:26:-;2636:1;2555:90;:::o;16888:626::-;16977:16;580:12:60;:10;:12::i;:::-;603:6;:13;;-1:-1:-1;;;;603:13:60;-1:-1:-1;;;603:13:60;;;17019:11:26;17011:39:::1;;;::::0;;-1:-1:-1;;;17011:39:26;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;17011:39:26;;;;;;;;;;;;;::::1;;17063:19;17105:6;;;;;;;;;-1:-1:-1::0;;;;;17105:6:26::1;-1:-1:-1::0;;;;;17085:40:26::1;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;17085:42:26;17158:6:::1;::::0;;17138:57:::1;::::0;;-1:-1:-1;;;17138:57:26;;17175:10:::1;17138:57:::0;;::::1;::::0;;;;;;;;;;;17085:42;;-1:-1:-1;;;;;;17158:6:26::1;::::0;17138:36:::1;::::0;:57;;;;;17158:6:::1;::::0;17138:57;;;;;;;;17158:6;;17138:57;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;17265:13:26::1;:20:::0;17208:40:::1;::::0;-1:-1:-1;17265:20:26;-1:-1:-1;17251:35:26::1;::::0;::::1;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;17251:35:26::1;;17208:78;;17302:9;17297:104;17321:23;:30;17317:1;:34;17297:104;;;17400:1;17371:23;17395:1;17371:26;;;;;;;;;::::0;;::::1;::::0;;;;;:30;17353:3:::1;;17297:104;;;;17421:85;17445:13;17421:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;17421:85:26::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;;;;;;17460:23;17485:11;17498:7;17421:23;:85::i;:::-;639:6:60::0;:14;;-1:-1:-1;;;;639:14:60;;;17414:92:26;16888:626;-1:-1:-1;;;;16888:626:26:o;2300:925:57:-;2417:5;;-1:-1:-1;;;;;2417:5:57;2403:10;:19;;:50;;-1:-1:-1;2427:26:57;;-1:-1:-1;;;2427:26:57;;;;2426:27;2403:50;2395:80;;;;;-1:-1:-1;;;2395:80:57;;;;;;;;;;;;-1:-1:-1;;;2395:80:57;;;;;;;;;;;;;;;2530:29;2580:28;-1:-1:-1;;;2580:9:57;:28::i;:::-;2721:8;;2530:79;;-1:-1:-1;;;;;;2706:23:57;;;2721:8;;2706:23;;;;:61;;-1:-1:-1;;;;;;2733:34:57;;;;2706:61;2698:94;;;;;-1:-1:-1;;;2698:94:57;;;;;;;;;;;;-1:-1:-1;;;2698:94:57;;;;;;;;;;;;;;;2959:1;-1:-1:-1;;;;;2907:54:57;:11;-1:-1:-1;;;;;2907:21:57;;-1:-1:-1;;;2907:40:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2907:40:57;-1:-1:-1;;;;;2907:54:57;;;2899:87;;;;;-1:-1:-1;;;2899:87:57;;;;;;;;;;;;-1:-1:-1;;;2899:87:57;;;;;;;;;;;;;;;3093:8;;;3078:12;:23;;-1:-1:-1;;;;;3093:8:57;;;-1:-1:-1;;;;;;3078:23:57;;;;;;;3195:22;;;;;;;;;;;2300:925::o;10268:202:8:-;726:12:58;:10;:12::i;:::-;10401:10:8::1;948:18:65;957:8;948;:18::i;:::-;-1:-1:-1::0;10430:19:8::2;:32:::0;;-1:-1:-1;;;;;;10430:32:8::2;-1:-1:-1::0;;;;;10430:32:8;;;::::2;::::0;;;::::2;::::0;;10268:202::o;19492:419:26:-;19686:6;;;19666:42;;;-1:-1:-1;;;19666:42:26;;;;19619:7;;;;-1:-1:-1;;;;;19686:6:26;;19666:40;;:42;;;;;;;;;;;19686:6;19666:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19666:42:26;;-1:-1:-1;19719:22:26;19759:25;-1:-1:-1;;;19759:9:26;:25::i;:::-;-1:-1:-1;;;;;19841:23:26;;;;;;;:8;:23;;;;;;;;;:31;19874:12;;19803:100;;-1:-1:-1;;;19803:100:26;;;;;;;;;;;;;;;19874:12;;19803:100;;;;;;;;;;;;19719:66;;-1:-1:-1;19803:24:26;;;;;;:100;;;;;19841:23;;19803:100;;;;;;:24;:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19803:100:26;;19492:419;-1:-1:-1;;;;;19492:419:26:o;2343:35:8:-;2376:2;2343:35;:::o;3292:40::-;;;-1:-1:-1;;;3292:40:8;;;;;:::o;13330:735::-;580:12:60;:10;:12::i;:::-;603:6;:13;;-1:-1:-1;;;;603:13:60;-1:-1:-1;;;603:13:60;;;726:12:58::1;:10;:12::i;:::-;13517:25:8::2;13545:29;-1:-1:-1::0;;;13545:9:8::2;:29::i;:::-;-1:-1:-1::0;;;;;13765:16:8;::::2;;::::0;;;:8:::2;:16;::::0;;;;:22:::2;;::::0;13517:57;;-1:-1:-1;;;;13765:22:8;::::2;;;13764:23;::::0;:38:::2;;;13792:10;:8;:10::i;:::-;13791:11;13764:38;:68;;;-1:-1:-1::0;13806:5:8::2;::::0;-1:-1:-1;;;;;13806:26:8;;::::2;:5:::0;::::2;:26;13764:68;13756:98;;;::::0;;-1:-1:-1;;;13756:98:8;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;13756:98:8;;;;;;;;;;;;;::::2;;13865:42;13886:6;13894:3;13899:7;13865:20;:42::i;:::-;-1:-1:-1::0;;;;;13994:16:8;::::2;;::::0;;;:8:::2;:16;::::0;;;;:22:::2;;::::0;-1:-1:-1;;;13994:22:8;::::2;;;13990:67;;;14031:26;14050:6;14031:18;:26::i;:::-;-1:-1:-1::0;;639:6:60;:14;;-1:-1:-1;;;;639:14:60;;;-1:-1:-1;;13330:735:8:o;1243:37:57:-;;;-1:-1:-1;;;;;1243:37:57;;:::o;11112:198:8:-;726:12:58;:10;:12::i;:::-;-1:-1:-1;;;1627:20:57::1;1633:13;1627:5;:20::i;:::-;11267:6:8::2;;;;;;;;;-1:-1:-1::0;;;;;11267:6:8::2;-1:-1:-1::0;;;;;11267:24:8::2;;11292:9;11267:35;;;;;;;;;;;;;-1:-1:-1::0;;;;;11267:35:8::2;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;749:1:58::1;11112:198:8::0;:::o;9086:554::-;580:12:60;:10;:12::i;:::-;603:6;:13;;-1:-1:-1;;;;603:13:60;-1:-1:-1;;;603:13:60;;;726:12:58::1;:10;:12::i;:::-;-1:-1:-1::0;;;;;;;;;;;6959:23:8::2;6973:8;6959:13;:23::i;:::-;9259:25:::3;9287:29;-1:-1:-1::0;;;9287:9:8::3;:29::i;:::-;9259:57;;9431:10;:8;:10::i;:::-;9430:11;:41;;;-1:-1:-1::0;9445:5:8::3;::::0;-1:-1:-1;;;;;9445:26:8;;::::3;:5:::0;::::3;:26;9430:41;9422:71;;;::::0;;-1:-1:-1;;;9422:71:8;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;9422:71:8;;;;;;;;;;;;;::::3;;9504:35;::::0;-1:-1:-1;;;;;9504:12:8;::::3;::::0;9517:21:::3;9504:35:::0;::::3;;;::::0;::::3;::::0;;;9517:21;9504:12;:35;::::3;;;;;;;;;;;;;::::0;::::3;;;;;;9593:39;-1:-1:-1::0;;;;;;;;;;;9593:18:8::3;:39::i;:::-;-1:-1:-1::0;;639:6:60;:14;;-1:-1:-1;;;;639:14:60;;;-1:-1:-1;9086:554:8:o;3376:322:26:-;726:12:58;:10;:12::i;:::-;3469:33:26::1;3486:6;3494:7;3469:16;:33::i;:::-;3545:13;:20:::0;3569:1:::1;3545:25;:85:::0;::::1;;;;3587:8;:26;3596:13;3610:1;3596:16;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;3596:16:26::1;3587:26:::0;;;::::1;::::0;;;;;;;;3596:16;3587:33:::1;::::0;::::1;;3624:6;3587:43;3545:85;:145;;;;;3647:8;:26;3656:13;3670:1;3656:16;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;3656:16:26::1;3647:26:::0;;;::::1;::::0;;;;;;;;3656:16;3647:33:::1;::::0;::::1;;3684:6;3647:43;3545:145;3515:14;:175:::0;;-1:-1:-1;;3515:175:26::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;;3376:322:26:o;30782:180::-;30838:7;;30899:2;30882:53;30903:5;;30882:53;;30932:3;;;;;;30915:2;30910:7;;30882:53;;;-1:-1:-1;30953:1:26;30782:180;-1:-1:-1;;30782:180:26:o;477:96:41:-;542:10;:24;;-1:-1:-1;;;;;542:24:41;;;-1:-1:-1;;;542:24:41;;;;;;;;;;;477:96::o;23055:114:8:-;23116:6;23142:19;:17;:19::i;:::-;23135:26;;23055:114;:::o;1422:217:58:-;1498:8;;-1:-1:-1;;;;;1498:8:58;1484:10;:22;1476:52;;;;;-1:-1:-1;;;1476:52:58;;;;;;;;;;;;-1:-1:-1;;;1476:52:58;;;;;;;;;;;;;;;1563:8;;;1556:5;;1544:28;;-1:-1:-1;;;;;1563:8:58;;;;1556:5;;;;1544:28;;;1591:8;;;;1583:16;;-1:-1:-1;;;;;;1583:16:58;;;-1:-1:-1;;;;;1591:8:58;;1583:16;;;;1610:21;;;1422:217::o;1154:33:57:-;;;-1:-1:-1;;;;;1154:33:57;;:::o;10576:1538:26:-;10775:7;580:12:60;:10;:12::i;:::-;603:6;:13;;-1:-1:-1;;;;603:13:60;-1:-1:-1;;;603:13:60;;;6356:9:8::1;:7;:9::i;:::-;10834:65:26::2;10855:14;10871:15;10888:10;10834:20;:65::i;:::-;11036:9;11031:195;11055:14;:21;11051:1;:25;11031:195;;;-1:-1:-1::0;;;;;;;;;;;;;;;;11100:40:26::2;:14;11115:1;11100:17;;;;;;;;;;;;;;-1:-1:-1::0;;;;;11100:40:26::2;;11096:130;;;11189:9;11167:15;11183:1;11167:18;;;;;;;;;;;;;;:31;11159:67;;;::::0;;-1:-1:-1;;;11159:67:26;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;11159:67:26;;;;;;;;;;;;;::::2;;11078:3;;11031:195;;;-1:-1:-1::0;11346:9:26::2;:13:::0;11342:112:::2;;-1:-1:-1::0;;;;;;;;;;;11384:29:26::2;::::0;:8:::2;:29;::::0;:35;;-1:-1:-1;;;11384:35:26;::::2;;;11376:66;;;::::0;;-1:-1:-1;;;11376:66:26;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;11376:66:26;;;;;;;;;;;;;::::2;;11499:19;11541:6;;;;;;;;;-1:-1:-1::0;;;;;11541:6:26::2;-1:-1:-1::0;;;;;11521:40:26::2;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;11521:42:26;;-1:-1:-1;11669:14:26::2;11686:64;11705:14:::0;11721:15;11521:42;11686:18:::2;:64::i;:::-;11669:81;;11887:10;11877:6;:20;;11869:51;;;::::0;;-1:-1:-1;;;11869:51:26;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;11869:51:26;;;;;;;;;;;;;::::2;;11994:6;::::0;;11974:54:::2;::::0;;-1:-1:-1;;;11974:54:26;;12009:10:::2;11974:54:::0;;::::2;::::0;;;;;;;;;;;-1:-1:-1;;;;;11994:6:26;;::::2;::::0;11974:34:::2;::::0;:54;;;;;11994:6:::2;::::0;11974:54;;;;;;;11994:6;;11974:54;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;;639:6:60;:14;;-1:-1:-1;;;;639:14:60;;;-1:-1:-1;12100:6:26;;10576:1538;-1:-1:-1;;;;;;10576:1538:26:o;18168:798::-;18331:16;18365:31;18413:14;:21;18399:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18399:36:26;;18365:70;;18448:19;18490:6;;;;;;;;;-1:-1:-1;;;;;18490:6:26;-1:-1:-1;;;;;18470:40:26;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18470:42:26;;-1:-1:-1;18523:22:26;18563:25;-1:-1:-1;;;18563:9:26;:25::i;:::-;18523:66;;18600:14;18617:7;-1:-1:-1;;;;;18617:24:26;;18642:11;18655:8;:44;18664:14;18679:18;18664:34;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18655:44:26;;;;;;;;;;;;;;-1:-1:-1;18655:44:26;:52;18709:12;;18617:121;;-1:-1:-1;;;;;;18617:121:26;;;;;;;;;;;;;;;;;;;;;18709:12;;18617:121;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18617:121:26;;-1:-1:-1;18756:9:26;18751:173;18775:14;:21;18771:1;:25;18751:173;;;18836:7;-1:-1:-1;;;;;18836:16:26;;18853:11;18866:8;:27;18875:14;18890:1;18875:17;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;18866:27:26;;;;;;;;;;;;;;-1:-1:-1;18866:27:26;:35;18903:12;;18836:88;;-1:-1:-1;;;;;;18836:88:26;;;;;;;;;;;;;;;;;;;;;18903:12;;18836:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18836:88:26;18816:17;;:14;;18831:1;;18816:17;;;;;;;;;;;;;;;:108;18798:3;;18751:173;;;-1:-1:-1;18944:14:26;;-1:-1:-1;;;;18168:798:26;;;;;;:::o;219:29:58:-;;;-1:-1:-1;;;;;219:29:58;;:::o;3041:43:8:-;;;-1:-1:-1;;;3041:43:8;;;;;:::o;14882:112::-;14965:13;:20;14882:112;:::o;31607:332:26:-;31748:14;;31677:7;;;;;31773:90;31797:6;31793:1;:10;31773:90;;;31838:25;31852:7;31860:1;31852:10;;;;;;;;;;;;;;31838:13;:25::i;:::-;31823:40;;;;31805:3;;31773:90;;;;31929:1;31897:29;31906:11;31919:6;31897:8;:29::i;:::-;:33;31889:2;31881:50;;31607:332;-1:-1:-1;;;;31607:332:26:o;4133:848::-;4384:7;4393;6356:9:8;:7;:9::i;:::-;4316:12:26::1;6959:23:8;6973:8;6959:13;:23::i;:::-;4352:12:26::2;6959:23:8;6973:8;6959:13;:23::i;:::-;4469:12:26::3;-1:-1:-1::0;;;;;4453:28:26::3;:12;-1:-1:-1::0;;;;;4453:28:26::3;;;4445:63;;;::::0;;-1:-1:-1;;;4445:63:26;;::::3;;::::0;::::3;::::0;::::3;::::0;;;;-1:-1:-1;;;4445:63:26;;;;;;;;;;;;;::::3;;4521:14;4553:25;-1:-1:-1::0;;;4553:9:26::3;:25::i;:::-;-1:-1:-1::0;;;;;4538:66:26::3;;4619:28;4634:12;4619:14;:28::i;:::-;-1:-1:-1::0;;;;;4662:22:26;::::3;;::::0;;;:8:::3;:22;::::0;;;;:29:::3;;::::0;::::3;;4706:28;4721:12:::0;4706:14:::3;:28::i;:::-;-1:-1:-1::0;;;;;4749:22:26;::::3;;::::0;;;:8:::3;:22;::::0;;;;;;;;:29:::3;;::::0;4538:273;;-1:-1:-1;;;;;;4538:273:26::3;::::0;;;;;;::::3;::::0;::::3;::::0;;;;4749:29:::3;4538:273:::0;;::::3;::::0;;;;;;;;;;;4749:29;;;::::3;4538:273:::0;;;;;;;;;;;;;;;;;;;;;;;::::3;;::::0;::::3;;;;::::0;::::3;;;;;;;;;;;;::::0;::::3;;;;;;;;;;;;;;;;;;;::::0;::::3;;-1:-1:-1::0;4538:273:26;;-1:-1:-1;4902:11:26::3;4916:20;4538:273:::0;4916:12:::3;:20::i;:::-;4955:12:::0;;;::::3;::::0;;;-1:-1:-1;4133:848:26;;-1:-1:-1;;;;;;;4133:848:26:o;12623:783::-;12814:16;580:12:60;:10;:12::i;:::-;603:6;:13;;-1:-1:-1;;;;603:13:60;-1:-1:-1;;;603:13:60;;;6356:9:8::1;:7;:9::i;:::-;12882:71:26::2;12903:14;12919:24;12945:7;12882:20;:71::i;:::-;13033:19;13075:6;;;;;;;;;-1:-1:-1::0;;;;;13075:6:26::2;-1:-1:-1::0;;;;;13055:40:26::2;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;13055:42:26;13166:6:::2;::::0;;13146:57:::2;::::0;;-1:-1:-1;;;13146:57:26;;13183:10:::2;13146:57:::0;;::::2;::::0;;;;;;;;;;;13055:42;;-1:-1:-1;;;;;;13166:6:26::2;::::0;13146:36:::2;::::0;:57;;;;;13166:6:::2;::::0;13146:57;;;;;;;;13166:6;;13146:57;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;13311:87;13335:14;13351:24;13377:11;13390:7;13311:23;:87::i;:::-;639:6:60::0;:14;;-1:-1:-1;;;;639:14:60;;;13304:94:26;12623:783;-1:-1:-1;;;;;12623:783:26:o;3304:137:57:-;726:12:58;:10;:12::i;:::-;3421::57::1;::::0;3410:8:::1;:23:::0;;-1:-1:-1;;;;;;3410:23:57::1;-1:-1:-1::0;;;;;3421:12:57;;::::1;3410:23:::0;;;::::1;::::0;;3304:137::o;31208:116:26:-;31271:7;31314:2;31309:1;31314:2;31304:6;31299:2;:11;31298:18;;;;;;;31208:116;-1:-1:-1;;;31208:116:26:o;3417:46:8:-;3459:4;3417:46;:::o;2473:::-;;;-1:-1:-1;;;;;2473:46:8;;:::o;13893:2483:26:-;13994:7;580:12:60;:10;:12::i;:::-;603:6;:13;;-1:-1:-1;;;;603:13:60;-1:-1:-1;;;603:13:60;;;14019:21:26::1;:19;:21::i;:::-;-1:-1:-1::0;;;;;;;;;;;14091:29:26::1;::::0;:8:::1;:29;::::0;-1:-1:-1;;;;;;;;;;;14091:37:26;:52:::1;::::0;14133:9:::1;14091:41;:52::i;:::-;-1:-1:-1::0;;;;;;;;;;;14051:29:26::1;::::0;;;:8:::1;:29;::::0;;;-1:-1:-1;;;;;;;;;;;14051:92:26;;;;14193:6:::1;::::0;;14051:29;14173:42;;-1:-1:-1;;;14173:42:26;;;;14051:29;;-1:-1:-1;;;;;14193:6:26;;::::1;::::0;14173:40:::1;::::0;:42;;::::1;::::0;14051:29;14173:42;;;;;14193:6;14173:42;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14173:42:26;;-1:-1:-1;14226:22:26::1;14266:25;-1:-1:-1::0;;;14266:9:26::1;:25::i;:::-;14519:13;:20:::0;14226:66;;-1:-1:-1;14496:20:26::1;14550:1612;14574:12;14570:1;:16;14550:1612;;;14608:24;14635:13;14649:1;14635:16;;;;;;;;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;14635:16:26;;::::1;14687:22:::0;;;:8:::1;:22:::0;;;;;;:30;14793:12:::1;::::0;14756:59;;-1:-1:-1;;;14756:59:26;;::::1;::::0;::::1;::::0;;;;;;;;;14793:12:::1;::::0;;::::1;14756:59:::0;;;;;;;;;;;;14635:16;;-1:-1:-1;14687:30:26;14635:16;14756;;::::1;::::0;::::1;::::0;:59;;;;;;;;;;:16;:59;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;14756:59:26;;-1:-1:-1;;;;;;14904:35:26;::::1;-1:-1:-1::0;;;;;;;;;;;14904:35:26::1;14900:616;;;14976:13;14964:9;:25;14960:415;;;15014:46;::::0;:10:::1;::::0;15034:9:::1;:25:::0;;::::1;15014:46:::0;::::1;;;::::0;::::1;::::0;;;15034:25;15014:10;:46;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;14960:415;;;15119:13;15107:9;:25;15103:272;;;15165:9;:14:::0;15157:48:::1;;;::::0;;-1:-1:-1;;;15157:48:26;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;15157:48:26;;;;;;;;;;;;;::::1;;15245:10;::::0;15228:70:::1;::::0;-1:-1:-1;;;15245:10:26;::::1;-1:-1:-1::0;;;;;15245:10:26::1;15257;15277:4;15284:13:::0;15228:16:::1;:70::i;:::-;15321:10;;;;;;;;;-1:-1:-1::0;;;;;15321:10:26::1;-1:-1:-1::0;;;;;15321:19:26::1;;15341:13;15321:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;15103:272;14900:616;;;15428:72;15445:12;15459:10;15479:4;15486:13;15428:16;:72::i;:::-;15573:25;15601:29;:10:::0;15616:13;15601:14:::1;:29::i;:::-;-1:-1:-1::0;;;;;15645:22:26;::::1;;::::0;;;:8:::1;:22;::::0;;;;:50;;;15573:57;;-1:-1:-1;15741:19:26::1;:6:::0;15752:7;15741:10:::1;:19::i;:::-;15851:94;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;15712:48;;-1:-1:-1;;;;;;15851:94:26;::::1;::::0;15866:10:::1;::::0;15851:94:::1;::::0;;;;;;;;::::1;-1:-1:-1::0;;;;;16120:22:26;::::1;;::::0;;;:8:::1;:22;::::0;;;;:29:::1;;::::0;16034:116:::1;::::0;16067:18;;16087:12;;16101:17;;16120:29:::1;;16034:32;:116::i;:::-;-1:-1:-1::0;;14588:3:26::1;::::0;;::::1;::::0;-1:-1:-1;14550:1612:26::1;::::0;-1:-1:-1;;14550:1612:26::1;;-1:-1:-1::0;16254:6:26::1;::::0;;16234:55:::1;::::0;;-1:-1:-1;;;16234:55:26;;16269:10:::1;16234:55:::0;;::::1;::::0;;;;;;;;;;;-1:-1:-1;;;;;16254:6:26;;::::1;::::0;16234:34:::1;::::0;:55;;;;;16254:6:::1;::::0;16234:55;;;;;;;16254:6;;16234:55;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;639:6:60;:14;;-1:-1:-1;;;;639:14:60;;;-1:-1:-1;16361:7:26;;13893:2483;-1:-1:-1;;;;;13893:2483:26:o;2918:166::-;726:12:58;:10;:12::i;:::-;2988:29:26::1;:27;:29::i;:::-;3063:6;::::0;3071:4:::1;::::0;-1:-1:-1;;;;;3063:6:26::1;3046:15;:13;:15::i;:::-;3035:41;;;;;;;;;;;;2918:166::o:0;2613:34:8:-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2613:34:8;;-1:-1:-1;2613:34:8;:::o;224:26:41:-;;;;:::o;2387:39:8:-;;;-1:-1:-1;;;;;2387:39:8;;:::o;255:23:58:-;;;-1:-1:-1;;;;;255:23:58;;:::o;14288:374:8:-;726:12:58;:10;:12::i;:::-;14335:36:8::1;14393:29;-1:-1:-1::0;;;14393:9:8::1;:29::i;:::-;14509:6;::::0;14335:88;;-1:-1:-1;14517:5:8::1;::::0;-1:-1:-1;;;;;14509:6:8::1;14492:15;:13;:15::i;:::-;14481:42;;;;;;;;;;;;14536:45;14562:17;14536;:45::i;:::-;14592:34;::::0;;-1:-1:-1;;;14592:34:8;;2376:2:::1;14592:34;::::0;::::1;::::0;;;-1:-1:-1;;;;;14592:25:8;::::1;::::0;::::1;::::0;:34;;;;;-1:-1:-1;;14592:34:8;;;;;;;-1:-1:-1;14592:25:8;:34;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14637:17;:15;:17::i;2754:48::-:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2754:48:8;;;;;;;;;;;-1:-1:-1;;;2754:48:8;;;;;:::o;23243:154::-;23331:7;23358:31;23373:15;16773:225;16927:7;16894:13;6959:23;6973:8;6959:13;:23::i;:::-;-1:-1:-1;;;;;;;16959:23:8::1;;::::0;;;:8:::1;:23;::::0;;;;:31;;16773:225::o;1068:31:26:-;;;;;;:::o;17872:782:8:-;18123:7;580:12:60;:10;:12::i;:::-;603:6;:13;;-1:-1:-1;;;;603:13:60;-1:-1:-1;;;603:13:60;;;-1:-1:-1;;;1627:20:57::1;18089:14:8::0;1627:5:57::1;:20::i;:::-;18199:12:8::2;-1:-1:-1::0;;;;;18183:28:8::2;:12;-1:-1:-1::0;;;;;18183:28:8::2;;;18175:63;;;::::0;;-1:-1:-1;;;18175:63:8;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;18175:63:8;;;;;;;;;;;;;::::2;;18366:19;::::0;-1:-1:-1;;;;;18366:19:8::2;18358:42:::0;;:158:::2;;-1:-1:-1::0;18422:19:8::2;::::0;:42:::2;::::0;;-1:-1:-1;;;18422:42:8;;-1:-1:-1;;;;;18422:42:8;;::::2;;::::0;::::2;::::0;;;:19;;;::::2;::::0;:33:::2;::::0;:42;;;;;::::2;::::0;;;;;;;;:19;:42;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;18422:42:8;:93;::::2;;;-1:-1:-1::0;18468:19:8::2;::::0;:47:::2;::::0;;-1:-1:-1;;;18468:47:8;;-1:-1:-1;;;;;18468:47:8;;::::2;;::::0;::::2;::::0;;;:19;;;::::2;::::0;:33:::2;::::0;:47;;;;;::::2;::::0;;;;;;;;:19;:47;::::2;;::::0;::::2;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;::::0;::::2;;-1:-1:-1::0;18468:47:8;18422:93:::2;18350:207;;;::::0;;-1:-1:-1;;;18350:207:8;;::::2;;::::0;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;18350:207:8;;;;;;;;;;;;;::::2;;18577:69;18587:12;18601;18615:7;18624;18633:12;18577:9;:69::i;:::-;639:6:60::0;:14;;-1:-1:-1;;;;639:14:60;;;18570:76:8;17872:782;-1:-1:-1;;;;;;;17872:782:8:o;12580:274::-;726:12:58;:10;:12::i;:::-;12692:16:8::1;::::0;::::1;-1:-1:-1::0;;;12692:16:8;;::::1;::::0;::::1;12674:34:::0;;::::1;;;12666:73;;;::::0;;-1:-1:-1;;;12666:73:8;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;12775:13;::::0;12755:50:::1;::::0;;12775:13:::1;-1:-1:-1::0;;;12775:13:8;;::::1;::::0;::::1;12755:50:::0;;;;::::1;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;::::1;12816:13;:30:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;12816:30:8::1;-1:-1:-1::0;;12816:30:8;;::::1;::::0;;;::::1;::::0;;12580:274::o;1164:167:58:-;726:12;:10;:12::i;:::-;1268:5:::1;::::0;-1:-1:-1;;;;;1255:18:58;;::::1;1268:5:::0;::::1;1255:18;;1247:45;;;::::0;;-1:-1:-1;;;1247:45:58;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;1247:45:58;;;;;;;;;;;;;::::1;;1303:8;:20:::0;;-1:-1:-1;;;;;;1303:20:58::1;-1:-1:-1::0;;;;;1303:20:58;;;::::1;::::0;;;::::1;::::0;;1164:167::o;21965:97:8:-;22048:6;;-1:-1:-1;;;;;22048:6:8;21965:97;:::o;813:104:58:-;882:5;;-1:-1:-1;;;;;882:5:58;868:10;:19;860:49;;;;;-1:-1:-1;;;860:49:58;;;;;;;;;;;;-1:-1:-1;;;860:49:58;;;;;;;;;;;;;;4077:133:57;4169:8;;:33;;;-1:-1:-1;;;4169:33:57;;;;;;;;;;4142:7;;-1:-1:-1;;;;;4169:8:57;;:18;;:33;;;;;;;;;;;;;;:8;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4169:33:57;;4077:133;-1:-1:-1;;4077:133:57:o;27252:534:26:-;27441:16;27475:31;27523:14;:21;27509:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27509:36:26;;27475:70;;27561:9;27556:190;27580:14;:21;27576:1;:25;27556:190;;;27641:8;-1:-1:-1;;;;;27641:31:26;;27673:12;27687:8;:27;27696:14;27711:1;27696:17;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27687:27:26;;;;;;;;;;;;;;-1:-1:-1;27687:27:26;:35;27724:12;;27641:105;;-1:-1:-1;;;;;;27641:105:26;;;;;;;;;;;;;;;;;;;;;27724:12;;27641:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27641:105:26;27621:17;;:14;;27636:1;;27621:17;;;;;;;;;;;;;;;:125;27603:3;;27556:190;;;-1:-1:-1;27764:14:26;27252:534;-1:-1:-1;;;;;27252:534:26:o;7057:134:8:-;-1:-1:-1;;;;;7135:18:8;;;;;;:8;:18;;;;;:24;;;-1:-1:-1;;;7135:24:8;;;;7127:56;;;;;-1:-1:-1;;;7127:56:8;;;;;;;;;;;;-1:-1:-1;;;7127:56:8;;;;;;;;;;;;;;8436:1703:26;8488:15;;:::i;:::-;8596:19;8627:25;;8618:6;:4;:6::i;:::-;:34;;-1:-1:-1;8757:16:26;8753:71;;-1:-1:-1;;8790:22:26;;;;;;;;;8797:15;8790:22;;;;;;;;;;;8753:71;8890:20;8913:8;:26;8922:13;8936:1;8922:16;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8922:16:26;8913:26;;;;;;;;;;;;:34;8990:13;:16;;8913:34;;-1:-1:-1;8981:8:26;;8922:16;;8990:13;8922:16;;8990;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8990:16:26;8981:26;;;;;;;;;;;;:34;;-1:-1:-1;889:10:26;9147:34;;9143:120;;9205:46;;;;;;;;;;;;;;;;;-1:-1:-1;9198:53:26;;-1:-1:-1;9198:53:26;9143:120;9546:27;;:::i;:::-;-1:-1:-1;9546:45:26;;;;;;;;;9576:15;9546:45;;;;;;;;;;;-1:-1:-1;;9616:31:26;;9634:12;9616:17;:31::i;:::-;9670:13;;9604:43;;-1:-1:-1;9658:9:26;;9670:31;;9688:12;9670:17;:31::i;:::-;9658:43;-1:-1:-1;9809:16:26;9828:64;9873:18;:1;9879:11;9873:5;:18::i;:::-;9828:40;:1;889:10;9834:33;;;9828:5;:40::i;:::-;:44;;:64::i;:::-;9809:83;;9903:16;9922:56;889:10;9922:31;9940:12;9922:11;:13;;;:17;;:31;;;;:::i;:::-;:35;;:56::i;:::-;9903:75;;10014:61;10027:8;10037;738:4;10014:12;:61::i;:::-;10093:38;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;8436:1703:26;:::o;716:89:60:-;772:6;;-1:-1:-1;;;772:6:60;;;;771:7;763:34;;;;;-1:-1:-1;;;763:34:60;;;;;;;;;;;;-1:-1:-1;;;763:34:60;;;;;;;;;;;;;;28249:1695:26;28436:16;28470:21;:19;:21::i;:::-;28504:22;28544:25;-1:-1:-1;;;28544:9:26;:25::i;:::-;28504:66;-1:-1:-1;28581:26:26;28610:25;:12;28627:7;28610:16;:25::i;:::-;28581:54;;28646:31;28680:77;28710:7;28719:14;28735:12;28749:7;28680:29;:77::i;:::-;28646:111;;28775:9;28770:1037;28794:14;:21;28790:1;:25;28770:1037;;;28837:24;28864:14;28879:1;28864:17;;;;;;;;;;;;;;28837:44;;28896:21;28920:14;28935:1;28920:17;;;;;;;;;;;;;;28896:41;;28977:24;29002:1;28977:27;;;;;;;;;;;;;;28960:13;:44;;28952:79;;;;;-1:-1:-1;;;28952:79:26;;;;;;;;;;;;-1:-1:-1;;;28952:79:26;;;;;;;;;;;;;;;-1:-1:-1;;;;;29076:22:26;;29048:25;29076:22;;;:8;:22;;;;;:30;:49;;29111:13;29076:34;:49::i;:::-;-1:-1:-1;;;;;29140:22:26;;;;;;:8;:22;;;;;:50;;;29048:77;;-1:-1:-1;;;;;;;;;;;;29294:35:26;29290:182;;;29348:34;;:10;;:34;;;;;29368:13;;29348:34;;;;29368:13;29348:10;:34;;;;;;;;;;;;;;;;;;;;;29290:182;;;29419:53;29432:12;29446:10;29458:13;29419:12;:53::i;:::-;29494:96;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29494:96:26;;;29511:10;;29494:96;;;;;;;;;-1:-1:-1;;;;;29765:22:26;;;;;;:8;:22;;;;;:29;;;29679:116;;29712:18;;29732:12;;29746:17;;29765:29;;29679:32;:116::i;:::-;-1:-1:-1;;;28817:3:26;;28770:1037;;;-1:-1:-1;29922:14:26;28249:1695;-1:-1:-1;;;;;;;28249:1695:26:o;1041:126:65:-;-1:-1:-1;;;;;1110:25:65;;1130:4;1110:25;;1102:57;;;;;-1:-1:-1;;;1102:57:65;;;;;;;;;;;;-1:-1:-1;;;1102:57:65;;;;;;;;;;;;;;1196:290:63;726:12:58;:10;:12::i;:::-;1370:6:63::1;594:23:65;608:8;594:13;:23::i;:::-;1401:3:63::2;594:23:65;608:8;594:13;:23::i;:::-;1423:3:63::3;948:18:65;957:8;948;:18::i;:::-;1444:34:63::4;1457:6;1465:3;1470:7;1444:12;:34::i;20061:322:8:-:0;20138:13;6959:23;6973:8;6959:13;:23::i;:::-;-1:-1:-1;;;;;20168:36:8;::::1;-1:-1:-1::0;;;;;;;;;;;20168:36:8::1;20164:211;;;-1:-1:-1::0;;;;;20219:23:8;::::1;;::::0;;;:8:::1;:23;::::0;;;;20253:21:::1;20219:55:::0;;20164:211:::1;;;20337:38;::::0;;-1:-1:-1;;;20337:38:8;;20369:4:::1;20337:38;::::0;::::1;::::0;;;-1:-1:-1;;;;;20337:23:8;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;:23;:38;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;20337:38:8;-1:-1:-1;;;;;20303:23:8;::::1;;::::0;;;:8:::1;20337:38;20303:23:::0;;;;:72;20164:211:::1;20061:322:::0;;:::o;1722:139:57:-;1807:24;1817:13;1807:9;:24::i;:::-;-1:-1:-1;;;;;1793:38:57;:10;-1:-1:-1;;;;;1793:38:57;;1785:68;;;;;-1:-1:-1;;;1785:68:57;;;;;;;;;;;;-1:-1:-1;;;1785:68:57;;;;;;;;;;;;;;15286:803:8;726:12:58;:10;:12::i;:::-;6615:11:8::1;:9;:11::i;:::-;15460:6:::2;594:23:65;608:8;594:13;:23::i;:::-;15494:6:8::3;948:18:65;957:8;948;:18::i;:::-;15531:7:8::4;7656:28;7676:7;7656:19;:28::i;:::-;15618:6:::5;::::0;-1:-1:-1;;;;;15591:34:8;;::::5;15618:6:::0;::::5;15591:34;::::0;::::5;::::0;:61:::5;;-1:-1:-1::0;;;;;;15630:16:8;::::5;;::::0;;;:8:::5;:16;::::0;;;;:22:::5;;::::0;-1:-1:-1;;;15630:22:8;::::5;;;15629:23;15591:61;15583:93;;;::::0;;-1:-1:-1;;;15583:93:8;;::::5;;::::0;::::5;::::0;::::5;::::0;;;;-1:-1:-1;;;15583:93:8;;;;;;;;;;;;;::::5;;15723:12;::::0;::::5;::::0;;::::5;1846:7;15706:29;15695:40:::0;::::5;::::0;;::::5;;;15687:79;;;::::0;;-1:-1:-1;;;15687:79:8;;::::5;;::::0;::::5;::::0;::::5;::::0;;;;::::5;::::0;;;;;;;;;;;;;::::5;;15785:32;:19;:17;:19::i;:::-;:32;;;15777:70;;;::::0;;-1:-1:-1;;;15777:70:8;;::::5;;::::0;::::5;::::0;::::5;::::0;;;;-1:-1:-1;;;15777:70:8;;;;;;;;;;;;;::::5;;-1:-1:-1::0;;;;;;;;15889:16:8;;::::5;15860:26;15889:16:::0;;;:8:::5;:16;::::0;;;;15916:22;;;15949:17:::5;::::0;;::::5;:27:::0;;-1:-1:-1;;15949:27:8::5;::::0;;::::5;-1:-1:-1::0;;15949:27:8;;::::5;;15987:23:::0;;;::::5;-1:-1:-1::0;;;15987:23:8::5;::::0;;;:16:::5;16021:26:::0;;;;::::5;::::0;;;;;;;;::::5;::::0;;-1:-1:-1;;;;;;16021:26:8::5;::::0;;::::5;::::0;;;16058:12:::5;:23:::0;;;;::::5;::::0;;::::5;::::0;;::::5;::::0;::::5;::::0;;;::::5;::::0;;15286:803::o;6440:87::-;6492:10;:8;:10::i;:::-;6484:35;;;;;-1:-1:-1;;;6484:35:8;;;;;;;;;;;;-1:-1:-1;;;6484:35:8;;;;;;;;;;;;;;21082:1181:26;21306:13;:20;21355:21;;21247:9;;;;21345:31;;21337:63;;;;;-1:-1:-1;;;21337:63:26;;;;;;;;;;;;-1:-1:-1;;;21337:63:26;;;;;;;;;;;;;;;21429:15;:22;21419:6;:32;21411:63;;;;;-1:-1:-1;;;21411:63:26;;;;;;;;;;;;-1:-1:-1;;;21411:63:26;;;;;;;;;;;;;;;21496:1;21492:5;;21487:650;21503:6;21499:1;:10;21487:650;;;21627:8;:27;21636:14;21651:1;21636:17;;;;;;;;;;;;;;-1:-1:-1;;;;;21627:27:26;-1:-1:-1;;;;;21627:27:26;;;;;;;;;;;;:33;;;;;;;;;;;;21619:65;;;;;-1:-1:-1;;;21619:65:26;;;;;;;;;;;;-1:-1:-1;;;21619:65:26;;;;;;;;;;;;;;;21708:1;21704:5;;21699:133;21715:6;21711:1;:10;21699:133;;;21771:14;21786:1;21771:17;;;;;;;;;;;;;;-1:-1:-1;;;;;21751:37:26;:13;21765:1;21751:16;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21751:16:26;:37;21747:69;;;21811:5;;21747:69;21723:3;;;;;21699:133;;;21946:6;21942:1;:10;21934:42;;;;;-1:-1:-1;;;21934:42:26;;;;;;;;;;;;-1:-1:-1;;;21934:42:26;;;;;;;;;;;;;;;22101:1;22080:15;22096:1;22080:18;;;;;;;;;;;;;;:22;22072:53;;;;;-1:-1:-1;;;22072:53:26;;;;;;;;;;;;-1:-1:-1;;;22072:53:26;;;;;;;;;;;;;;;21511:3;;;;;21487:650;;;22234:1;22224:7;:11;22216:39;;;;;-1:-1:-1;;;22216:39:26;;;;;;;;;;;;-1:-1:-1;;;22216:39:26;;;;;;;;;;;;;;22580:379;22736:7;22765:17;22761:99;;22804:56;22828:14;22844:15;22804:23;:56::i;:::-;22797:63;;;;22761:99;22878:73;22905:14;22921:15;22938:12;22878:26;:73::i;:::-;22871:80;22580:379;-1:-1:-1;;;;22580:379:26:o;19713:155:8:-;19826:13;;19781:7;;19808:52;;1846:7;;19808:32;;:13;;-1:-1:-1;;;19826:13:8;;19808:52;19826:13;;;;19808:17;:32;:::i;:::-;:36;;:52::i;20456:205::-;20530:13;:20;20507;20561:92;20585:12;20581:1;:16;20561:92;;;20617:36;20636:13;20650:1;20636:16;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20636:16:8;20617:18;:36::i;:::-;20599:3;;20561:92;;778:147:61;838:7;872:2;866;:8;;858:34;;;;;-1:-1:-1;;;858:34:61;;;;;;;;;;;;-1:-1:-1;;;858:34:61;;;;;;;;;;;;;;;-1:-1:-1;910:7:61;;;778:147::o;2190:348:62:-;2355:71;;;-1:-1:-1;;;;;2355:71:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2355:71:62;-1:-1:-1;;;2355:71:62;;;2334:93;;;;2299:12;;2313:17;;2334:20;;;;2355:71;2334:93;;;2355:71;2334:93;;2355:71;2334:93;;;;;;;;;;-1:-1:-1;;2334:93:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2298:129;;;;2445:7;:57;;;;-1:-1:-1;2457:11:62;;:16;;:44;;;2488:4;2477:24;;;;;;;;;;;;;;;-1:-1:-1;2477:24:62;2457:44;2437:94;;;;;-1:-1:-1;;;2437:94:62;;;;;;;;;;;;;;;;;;;;;;;;;;;386:169:61;446:7;478;;;504;;;;496:32;;;;;-1:-1:-1;;;496:32:61;;;;;;;;;;;;-1:-1:-1;;;496:32:61;;;;;;;;;;;;;;33843:310:26;34046:6;;-1:-1:-1;;;;;34010:135:26;;;;34046:6;34010:135;34071:35;:15;1846:7:8;34071:19:26;:35::i;:::-;34108:36;:16;:36;;;;;:20;:36;:::i;:::-;34010:135;;;;;;;;;;;;;;;;;;;;;;33843:310;;;;:::o;2501:239:13:-;2661:1;2639:19;:17;:19::i;:::-;:23;;;2631:61;;;;;-1:-1:-1;;;2631:61:13;;;;;;;;;;;;-1:-1:-1;;;2631:61:13;;;;;;;;;;;;;;;2703:29;:27;:29::i;5564:1852:26:-;5753:7;5826:14;5842:11;5857:55;5876:12;5890;5904:7;5857:18;:55::i;:::-;5825:87;;;;5993:6;6003:1;5993:11;;5985:46;;;;;-1:-1:-1;;;5985:46:26;;;;;;;;;;;;-1:-1:-1;;;5985:46:26;;;;;;;;;;;;;;;6128:28;6143:12;6128:14;:28::i;:::-;6119:6;:37;6112:45;;;;-1:-1:-1;;;;;6237:35:26;;-1:-1:-1;;;;;;;;;;;6237:35:26;6233:270;;;6308:7;6295:9;:20;6287:56;;;;;-1:-1:-1;;;6287:56:26;;;;;;;;;;;;-1:-1:-1;;;6287:56:26;;;;;;;;;;;;;;;6233:270;;;6380:9;:14;:100;;;;;6473:7;6398:71;6440:28;6455:12;6440:14;:28::i;:::-;6398:37;;;-1:-1:-1;;;6398:37:26;;6429:4;6398:37;;;;;;-1:-1:-1;;;;;6398:22:26;;;;;:37;;;;;;;;;;;;;;:22;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6398:37:26;;:41;:71::i;:::-;:82;;6380:100;6372:131;;;;;-1:-1:-1;;;6372:131:26;;;;;;;;;;;;-1:-1:-1;;;6372:131:26;;;;;;;;;;;;;;;6554:32;6573:12;6554:18;:32::i;:::-;-1:-1:-1;;;;;6630:22:26;;;;;;:8;:22;;;;;:30;:42;;6665:6;6630:34;:42::i;:::-;-1:-1:-1;;;;;6597:22:26;;;;;;:8;:22;;;;;:75;;;;-1:-1:-1;;;;;;;;;;;6759:35:26;6755:160;;;6809:29;;-1:-1:-1;;;;;6809:21:26;;;:29;;;;;6831:6;;6809:29;;;;6831:6;6809:21;:29;;;;;;;;;;;;;;;;;;;;;6755:160;;;6867:48;6880:12;6894;6908:6;6867:12;:48::i;:::-;6975:14;;;;:52;;;;;7021:6;:4;:6::i;:::-;6993:25;;:34;6975:52;6971:171;;;7062:19;:17;:19::i;:::-;7044:37;;:15;:37;;;;;;7124:6;:4;:6::i;:::-;7096:25;:34;6971:171;7196:82;7220:12;7234;7248:7;7257;7266:6;7274:3;7196:23;:82::i;:::-;7325:57;7355:12;7369;7325:29;:57::i;:::-;-1:-1:-1;7402:6:26;5564:1852;-1:-1:-1;;;;;;5564:1852:26:o;579:117:41:-;627:7;653:11;;668:1;653:16;;:36;;686:3;653:36;;;-1:-1:-1;672:11:41;;;579:117::o;1149:250:61:-;1209:7;1262;1258:34;;-1:-1:-1;1291:1:61;1284:8;;1258:34;1317:7;;;1322:2;1317;:7;:2;1343:6;;;;;:12;1335:37;;;;;-1:-1:-1;;;1335:37:61;;;;;;;;;;;;-1:-1:-1;;;1335:37:61;;;;;;;;;;;;;;34608:223:26;34691:7;34700;34729:4;34724:2;:9;:22;;;;34742:4;34737:2;:9;34724:22;34720:77;;;34768:29;34784:2;34788;34792:4;34768:15;:29::i;:::-;34761:36;;;;;;34720:77;-1:-1:-1;34816:2:26;;34820;;-1:-1:-1;;34608:223:26:o;1485:312:62:-;1631:59;;;-1:-1:-1;;;;;1631:59:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1631:59:62;-1:-1:-1;;;1631:59:62;;;1610:81;;;;1575:12;;1589:17;;1610:20;;;;1631:59;1610:81;;;1631:59;1610:81;;1631:59;1610:81;;;;;;;;;;-1:-1:-1;;1610:81:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1574:117;;;;1709:7;:57;;;;-1:-1:-1;1721:11:62;;:16;;:44;;;1752:4;1741:24;;;;;;;;;;;;;;;-1:-1:-1;1741:24:62;1721:44;1701:89;;;;;-1:-1:-1;;;1701:89:62;;;;;;;;;;;;-1:-1:-1;;;1701:89:62;;;;;;;;;;;;;;;1485:312;;;;;:::o;692:128:65:-;-1:-1:-1;;;;;766:22:65;;758:54;;;;;-1:-1:-1;;;758:54:65;;;;;;;;;;;;-1:-1:-1;;;758:54:65;;;;;;;;;;;;;;6701:88:8;6756:10;:8;:10::i;:::-;6755:11;6747:34;;;;;-1:-1:-1;;;6747:34:8;;;;;;;;;;;;-1:-1:-1;;;6747:34:8;;;;;;;;;;;;;;7759:157;7847:1;7837:7;:11;;;:40;;;;-1:-1:-1;1846:7:8;7852:25;;;;;7837:40;7829:79;;;;;-1:-1:-1;;;7829:79:8;;;;;;;;;;;;;;;;;;;;;;;;;;;23240:1215:26;23379:7;23489:14;23506:30;23520:15;23506:13;:30::i;:::-;23489:47;;23633:9;23628:742;23652:14;:21;23648:1;:25;23628:742;;;23695:24;23722:14;23737:1;23722:17;;;;;;;;;;;;;;23695:44;;23754:21;23778:15;23794:1;23778:18;;;;;;;;;;;;;;23754:42;;-1:-1:-1;;;;;;;;;;;;;;;;23817:35:26;:12;-1:-1:-1;;;;;23817:35:26;;23813:193;;23934:72;23951:12;23965:10;23985:4;23992:13;23934:16;:72::i;:::-;-1:-1:-1;;;;;24023:22:26;;;;;;:8;:22;;;;;;;;;:46;;;24091:78;;;;;;;;;;;;;;;;;;;24106:10;;24091:78;;;;;;;;;;-1:-1:-1;;;;;24328:22:26;;;;;;:8;:22;;;;;:29;;;24258:100;;24291:6;;24299:12;;24313:13;;24328:29;;24258:32;:100::i;:::-;-1:-1:-1;;23675:3:26;;23628:742;;;-1:-1:-1;24441:6:26;23240:1215;-1:-1:-1;;;23240:1215:26:o;24792:2004::-;24956:7;24981:21;:19;:21::i;:::-;-1:-1:-1;;;;;;;;;;;25053:29:26;;:8;:29;;-1:-1:-1;;;;;;;;;;;25053:37:26;:52;;25095:9;25053:41;:52::i;:::-;-1:-1:-1;;;;;;;;;;;25013:29:26;;;;:8;:29;;-1:-1:-1;;;;;;;;;;;25013:92:26;;;;25158:25;-1:-1:-1;;;25158:9:26;:25::i;:::-;25118:66;;25195:14;25212:67;25224:7;25233:12;25247:14;25263:15;25212:11;:67::i;:::-;25195:84;-1:-1:-1;25290:26:26;25319:24;:12;25195:84;25319:16;:24::i;:::-;25290:53;;25361:9;25356:1355;25380:14;:21;25376:1;:25;25356:1355;;;25423:24;25450:14;25465:1;25450:17;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;25503:22:26;;;25482:18;25503:22;;;:8;:22;;;;;;:30;25615:12;;25572:64;;-1:-1:-1;;;25572:64:26;;;;;;;;;;;;;;25615:12;;;;25572:64;;;;;;;;;;;;25450:17;;-1:-1:-1;25503:30:26;25482:18;;25572:16;;;;;;:64;;;;;25450:17;;25572:64;;;;;;:16;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25572:64:26;;-1:-1:-1;25659:17:26;25651:52;;;;;-1:-1:-1;;;25651:52:26;;;;;;;;;;;;-1:-1:-1;;;25651:52:26;;;;;;;;;;;;;;;25742:15;25758:1;25742:18;;;;;;;;;;;;;;25725:13;:35;;25718:43;;;;-1:-1:-1;;;;;25865:35:26;;-1:-1:-1;;;;;;;;;;;25865:35:26;25861:378;;25982:72;25999:12;26013:10;26033:4;26040:13;25982:16;:72::i;:::-;25861:378;;;26099:13;26078:15;26094:1;26078:18;;;;;;;;;;;;;;:34;26074:165;;;26184:10;-1:-1:-1;;;;;26184:19:26;:55;26225:13;26204:15;26220:1;26204:18;;;;;;;;;;;;;;:34;26184:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26074:165;26256:25;26284:29;:10;26299:13;26284:14;:29::i;:::-;-1:-1:-1;;;;;26328:22:26;;;;;;:8;:22;;;;;;;;;:50;;;26400:94;;;;;;;;;;;;;;;;;;;26256:57;;-1:-1:-1;26328:22:26;;26415:10;;26400:94;;;;;;;;;;-1:-1:-1;;;;;26669:22:26;;;;;;:8;:22;;;;;:29;;;26583:116;;26616:18;;26636:12;;26650:17;;26669:29;;26583:32;:116::i;:::-;-1:-1:-1;;25403:3:26;;;;;-1:-1:-1;25356:1355:26;;-1:-1:-1;25356:1355:26;;-1:-1:-1;26782:6:26;;24792:2004;-1:-1:-1;;;;;;24792:2004:26:o;1627:174:61:-;1687:7;1720:1;1715:2;:6;1707:37;;;;;-1:-1:-1;;;1707:37:61;;;;;;;;;;;;-1:-1:-1;;;1707:37:61;;;;;;;;;;;;;;;1755:9;1772:2;1767;:7;;;;;;;1627:174;-1:-1:-1;;;;1627:174:61:o;11633:276:8:-;726:12:58;:10;:12::i;:::-;11803:1:8::1;11781:19;:17;:19::i;:::-;:23;;;11773:61;;;::::0;;-1:-1:-1;;;11773:61:8;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;11773:61:8;;;;;;;;;;;;;::::1;;11845:6;::::0;;:24:::1;::::0;;-1:-1:-1;;;11845:24:8;;;;-1:-1:-1;;;;;11845:6:8;;::::1;::::0;:22:::1;::::0;:24;;::::1;::::0;:6:::1;::::0;:24;;;;;;:6;;:24;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11880:21;:19;:21::i;21084:758::-:0;-1:-1:-1;;;21705:10:8;:21;21698:29;;;;21743:91;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21743:91:8;;;;;;;;;;;;;;;;;;;;;21084:758;;;;;;:::o;32195:1330:26:-;32305:23;32351:6;;;;;;;;;-1:-1:-1;;;;;32351:6:26;-1:-1:-1;;;;;32331:40:26;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32331:42:26;;-1:-1:-1;32384:28:26;32415;32430:12;32415:14;:28::i;:::-;32384:59;;32454:28;32485;32500:12;32485:14;:28::i;:::-;-1:-1:-1;;;;;32553:22:26;;;32524:26;32553:22;;;:8;:22;;;;;;:29;;;;;32622:22;;;;;;;;:29;;32454:59;;-1:-1:-1;32553:29:26;;;;;32622;;;32748:45;;32454:59;;32553:29;;32748:24;:45;:::i;:::-;32732:61;-1:-1:-1;32804:13:26;32820:45;:20;:45;;;;;:24;:45;:::i;:::-;32881:57;;;;;;;;;;;;;;32804:61;;-1:-1:-1;;;;;;32881:57:26;;;;;;;;;;;;;;;;33016:106;33049:15;33066:12;33080:20;33102:19;33016:32;:106::i;:::-;33133;33166:15;33183:12;33197:20;33219:19;33133:32;:106::i;:::-;33323:89;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33323:89:26;;;;;;;;;;;;;33428;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;33428:89:26;;;;;;;;;;;;;32195:1330;;;;;;;;;:::o;34928:345::-;35016:7;35025;35055:2;35049;:8;35045:58;;;-1:-1:-1;;35089:1:26;35080:10;;;35072:31;;35045:58;35123:2;35118;:7;35114:62;;;35147:29;35161:2;35165;35169:6;35147:13;:29::i;35114:62::-;35188:9;35199;35212:29;35226:2;35230;35234:6;35212:13;:29::i;:::-;35187:54;;;-1:-1:-1;34928:345:26;-1:-1:-1;;;;;;34928:345:26:o;29952:608::-;30112:7;;30180:1;30163:249;30187:14;:21;30183:1;:25;30163:249;;;30303:66;30333:8;:27;30342:14;30357:1;30342:17;;;;;;;;;;;;;;-1:-1:-1;;;;;30333:27:26;-1:-1:-1;;;;;30333:27:26;;;;;;;;;;;;:35;;;30303:15;30319:8;30303:25;;;;;;;;;;;;;;:29;;:66;;;;:::i;:::-;30234;30257:8;:34;30266:14;30281:8;30266:24;;;;;;;;;;;;;;-1:-1:-1;;;;;30257:34:26;-1:-1:-1;;;;;30257:34:26;;;;;;;;;;;;:42;;;30234:15;30250:1;30234:18;;;;;;;:66;:135;30230:170;;;30399:1;30388:12;;30230:170;30210:3;;30163:249;;;;30429:7;-1:-1:-1;;;;;30429:24:26;;30454:12;30468:8;:34;30477:14;30492:8;30477:24;;;;;;;;;;;;;;-1:-1:-1;;;;;30468:34:26;-1:-1:-1;;;;;30468:34:26;;;;;;;;;;;;:42;;;30512:12;;;;;;;;;;;30526:15;30542:8;30526:25;;;;;;;;;;;;;;30429:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;30429:123:26;;29952:608;-1:-1:-1;;;;;;29952:608:26:o;35393:404::-;35479:7;35488;35508:14;35539:6;-1:-1:-1;;35525:20:26;;;;;;35508:37;;35565:6;35560:2;:11;35556:121;;;35588:9;35606:6;35615:1;35606:10;35600:2;:17;;;;;;35620:1;35600:21;35588:33;;35642:1;35636:7;;;;;;;;;35664:1;35658:7;;;;;;;;;35556:121;;35687:9;35699:33;35708:11;;;35721:10;35708:2;35728;35721:6;:10::i;:::-;35699:8;:33::i;:::-;35687:45;35755:10;;;;;-1:-1:-1;35393:404:26;;-1:-1:-1;;;;;35393:404:26:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;:::o",
"source": "// SPDX-License-Identifier: SEE LICENSE IN LICENSE\npragma solidity 0.6.12;\nimport \"../converter/types/liquidity-pool-v1/LiquidityPoolV1Converter.sol\";\n\ncontract TestLiquidityPoolV1Converter is LiquidityPoolV1Converter {\n uint256 public currentTime;\n\n constructor(\n ISmartToken _token,\n IContractRegistry _registry,\n uint32 _maxConversionFee\n )\n LiquidityPoolV1Converter(_token, _registry, _maxConversionFee)\n public\n {\n }\n\n function setEtherToken(IEtherToken _etherToken) public {\n etherToken = _etherToken;\n }\n\n function time() internal view override returns (uint256) {\n return currentTime != 0 ? currentTime : now;\n }\n\n function setTime(uint256 _currentTime) public {\n currentTime = _currentTime;\n }\n}\n",
"sourcePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/helpers/TestLiquidityPoolV1Converter.sol",
"ast": {
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/helpers/TestLiquidityPoolV1Converter.sol",
"exportedSymbols": {
"TestLiquidityPoolV1Converter": [
19427
]
},
"id": 19428,
"license": "SEE LICENSE IN LICENSE",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 19372,
"literals": [
"solidity",
"0.6",
".12"
],
"nodeType": "PragmaDirective",
"src": "51:23:41"
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/types/liquidity-pool-v1/LiquidityPoolV1Converter.sol",
"file": "../converter/types/liquidity-pool-v1/LiquidityPoolV1Converter.sol",
"id": 19373,
"nodeType": "ImportDirective",
"scope": 19428,
"sourceUnit": 16594,
"src": "75:75:41",
"symbolAliases": [],
"unitAlias": ""
},
{
"abstract": false,
"baseContracts": [
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 19374,
"name": "LiquidityPoolV1Converter",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 16593,
"src": "193:24:41",
"typeDescriptions": {
"typeIdentifier": "t_contract$_LiquidityPoolV1Converter_$16593",
"typeString": "contract LiquidityPoolV1Converter"
}
},
"id": 19375,
"nodeType": "InheritanceSpecifier",
"src": "193:24:41"
}
],
"contractDependencies": [
10039,
13077,
13340,
16593,
22053,
22152,
22576,
22860,
22909,
22995,
23181,
23241
],
"contractKind": "contract",
"documentation": null,
"fullyImplemented": true,
"id": 19427,
"linearizedBaseContracts": [
19427,
16593,
13077,
10039,
22576,
22053,
22909,
22995,
22152,
22860,
23241,
13340,
23181
],
"name": "TestLiquidityPoolV1Converter",
"nodeType": "ContractDefinition",
"nodes": [
{
"constant": false,
"functionSelector": "d18e81b3",
"id": 19377,
"mutability": "mutable",
"name": "currentTime",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 19427,
"src": "224:26:41",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 19376,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "224:7:41",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "public"
},
{
"body": {
"id": 19391,
"nodeType": "Block",
"src": "464:7:41",
"statements": []
},
"documentation": null,
"id": 19392,
"implemented": true,
"kind": "constructor",
"modifiers": [
{
"arguments": [
{
"argumentTypes": null,
"id": 19386,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 19379,
"src": "407:6:41",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ISmartToken_$21516",
"typeString": "contract ISmartToken"
}
},
{
"argumentTypes": null,
"id": 19387,
"name": "_registry",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 19381,
"src": "415:9:41",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IContractRegistry_$23165",
"typeString": "contract IContractRegistry"
}
},
{
"argumentTypes": null,
"id": 19388,
"name": "_maxConversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 19383,
"src": "426:17:41",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
}
],
"id": 19389,
"modifierName": {
"argumentTypes": null,
"id": 19385,
"name": "LiquidityPoolV1Converter",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 16593,
"src": "382:24:41",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_LiquidityPoolV1Converter_$16593_$",
"typeString": "type(contract LiquidityPoolV1Converter)"
}
},
"nodeType": "ModifierInvocation",
"src": "382:62:41"
}
],
"name": "",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 19384,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 19379,
"mutability": "mutable",
"name": "_token",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 19392,
"src": "278:18:41",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ISmartToken_$21516",
"typeString": "contract ISmartToken"
},
"typeName": {
"contractScope": null,
"id": 19378,
"name": "ISmartToken",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21516,
"src": "278:11:41",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ISmartToken_$21516",
"typeString": "contract ISmartToken"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 19381,
"mutability": "mutable",
"name": "_registry",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 19392,
"src": "306:27:41",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IContractRegistry_$23165",
"typeString": "contract IContractRegistry"
},
"typeName": {
"contractScope": null,
"id": 19380,
"name": "IContractRegistry",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 23165,
"src": "306:17:41",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IContractRegistry_$23165",
"typeString": "contract IContractRegistry"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 19383,
"mutability": "mutable",
"name": "_maxConversionFee",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 19392,
"src": "343:24:41",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 19382,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "343:6:41",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "268:105:41"
},
"returnParameters": {
"id": 19390,
"nodeType": "ParameterList",
"parameters": [],
"src": "464:0:41"
},
"scope": 19427,
"src": "257:214:41",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"body": {
"id": 19401,
"nodeType": "Block",
"src": "532:41:41",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 19399,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 19397,
"name": "etherToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 14431,
"src": "542:10:41",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IEtherToken_$21487",
"typeString": "contract IEtherToken"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 19398,
"name": "_etherToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 19394,
"src": "555:11:41",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IEtherToken_$21487",
"typeString": "contract IEtherToken"
}
},
"src": "542:24:41",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IEtherToken_$21487",
"typeString": "contract IEtherToken"
}
},
"id": 19400,
"nodeType": "ExpressionStatement",
"src": "542:24:41"
}
]
},
"documentation": null,
"functionSelector": "6ad419a8",
"id": 19402,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "setEtherToken",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 19395,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 19394,
"mutability": "mutable",
"name": "_etherToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 19402,
"src": "500:23:41",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IEtherToken_$21487",
"typeString": "contract IEtherToken"
},
"typeName": {
"contractScope": null,
"id": 19393,
"name": "IEtherToken",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21487,
"src": "500:11:41",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IEtherToken_$21487",
"typeString": "contract IEtherToken"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "499:25:41"
},
"returnParameters": {
"id": 19396,
"nodeType": "ParameterList",
"parameters": [],
"src": "532:0:41"
},
"scope": 19427,
"src": "477:96:41",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
16437
],
"body": {
"id": 19415,
"nodeType": "Block",
"src": "636:60:41",
"statements": [
{
"expression": {
"argumentTypes": null,
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 19410,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 19408,
"name": "currentTime",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 19377,
"src": "653:11:41",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 19409,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "668:1:41",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "653:16:41",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseExpression": {
"argumentTypes": null,
"id": 19412,
"name": "now",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -17,
"src": "686:3:41",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 19413,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "Conditional",
"src": "653:36:41",
"trueExpression": {
"argumentTypes": null,
"id": 19411,
"name": "currentTime",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 19377,
"src": "672:11:41",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 19407,
"id": 19414,
"nodeType": "Return",
"src": "646:43:41"
}
]
},
"documentation": null,
"id": 19416,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "time",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 19404,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "609:8:41"
},
"parameters": {
"id": 19403,
"nodeType": "ParameterList",
"parameters": [],
"src": "592:2:41"
},
"returnParameters": {
"id": 19407,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 19406,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 19416,
"src": "627:7:41",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 19405,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "627:7:41",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "626:9:41"
},
"scope": 19427,
"src": "579:117:41",
"stateMutability": "view",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 19425,
"nodeType": "Block",
"src": "748:43:41",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 19423,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 19421,
"name": "currentTime",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 19377,
"src": "758:11:41",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 19422,
"name": "_currentTime",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 19418,
"src": "772:12:41",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "758:26:41",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 19424,
"nodeType": "ExpressionStatement",
"src": "758:26:41"
}
]
},
"documentation": null,
"functionSelector": "3beb26c4",
"id": 19426,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "setTime",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 19419,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 19418,
"mutability": "mutable",
"name": "_currentTime",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 19426,
"src": "719:20:41",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 19417,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "719:7:41",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "718:22:41"
},
"returnParameters": {
"id": 19420,
"nodeType": "ParameterList",
"parameters": [],
"src": "748:0:41"
},
"scope": 19427,
"src": "702:89:41",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
}
],
"scope": 19428,
"src": "152:641:41"
}
],
"src": "51:743:41"
},
"legacyAST": {
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/helpers/TestLiquidityPoolV1Converter.sol",
"exportedSymbols": {
"TestLiquidityPoolV1Converter": [
19427
]
},
"id": 19428,
"license": "SEE LICENSE IN LICENSE",
"nodeType": "SourceUnit",
"nodes": [
{
"id": 19372,
"literals": [
"solidity",
"0.6",
".12"
],
"nodeType": "PragmaDirective",
"src": "51:23:41"
},
{
"absolutePath": "/home/lash/src/ext/cic/grassrootseconomics/bancor-contracts/solidity/contracts/converter/types/liquidity-pool-v1/LiquidityPoolV1Converter.sol",
"file": "../converter/types/liquidity-pool-v1/LiquidityPoolV1Converter.sol",
"id": 19373,
"nodeType": "ImportDirective",
"scope": 19428,
"sourceUnit": 16594,
"src": "75:75:41",
"symbolAliases": [],
"unitAlias": ""
},
{
"abstract": false,
"baseContracts": [
{
"arguments": null,
"baseName": {
"contractScope": null,
"id": 19374,
"name": "LiquidityPoolV1Converter",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 16593,
"src": "193:24:41",
"typeDescriptions": {
"typeIdentifier": "t_contract$_LiquidityPoolV1Converter_$16593",
"typeString": "contract LiquidityPoolV1Converter"
}
},
"id": 19375,
"nodeType": "InheritanceSpecifier",
"src": "193:24:41"
}
],
"contractDependencies": [
10039,
13077,
13340,
16593,
22053,
22152,
22576,
22860,
22909,
22995,
23181,
23241
],
"contractKind": "contract",
"documentation": null,
"fullyImplemented": true,
"id": 19427,
"linearizedBaseContracts": [
19427,
16593,
13077,
10039,
22576,
22053,
22909,
22995,
22152,
22860,
23241,
13340,
23181
],
"name": "TestLiquidityPoolV1Converter",
"nodeType": "ContractDefinition",
"nodes": [
{
"constant": false,
"functionSelector": "d18e81b3",
"id": 19377,
"mutability": "mutable",
"name": "currentTime",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 19427,
"src": "224:26:41",
"stateVariable": true,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 19376,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "224:7:41",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "public"
},
{
"body": {
"id": 19391,
"nodeType": "Block",
"src": "464:7:41",
"statements": []
},
"documentation": null,
"id": 19392,
"implemented": true,
"kind": "constructor",
"modifiers": [
{
"arguments": [
{
"argumentTypes": null,
"id": 19386,
"name": "_token",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 19379,
"src": "407:6:41",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ISmartToken_$21516",
"typeString": "contract ISmartToken"
}
},
{
"argumentTypes": null,
"id": 19387,
"name": "_registry",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 19381,
"src": "415:9:41",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IContractRegistry_$23165",
"typeString": "contract IContractRegistry"
}
},
{
"argumentTypes": null,
"id": 19388,
"name": "_maxConversionFee",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 19383,
"src": "426:17:41",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
}
],
"id": 19389,
"modifierName": {
"argumentTypes": null,
"id": 19385,
"name": "LiquidityPoolV1Converter",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 16593,
"src": "382:24:41",
"typeDescriptions": {
"typeIdentifier": "t_type$_t_contract$_LiquidityPoolV1Converter_$16593_$",
"typeString": "type(contract LiquidityPoolV1Converter)"
}
},
"nodeType": "ModifierInvocation",
"src": "382:62:41"
}
],
"name": "",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 19384,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 19379,
"mutability": "mutable",
"name": "_token",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 19392,
"src": "278:18:41",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ISmartToken_$21516",
"typeString": "contract ISmartToken"
},
"typeName": {
"contractScope": null,
"id": 19378,
"name": "ISmartToken",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21516,
"src": "278:11:41",
"typeDescriptions": {
"typeIdentifier": "t_contract$_ISmartToken_$21516",
"typeString": "contract ISmartToken"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 19381,
"mutability": "mutable",
"name": "_registry",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 19392,
"src": "306:27:41",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IContractRegistry_$23165",
"typeString": "contract IContractRegistry"
},
"typeName": {
"contractScope": null,
"id": 19380,
"name": "IContractRegistry",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 23165,
"src": "306:17:41",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IContractRegistry_$23165",
"typeString": "contract IContractRegistry"
}
},
"value": null,
"visibility": "internal"
},
{
"constant": false,
"id": 19383,
"mutability": "mutable",
"name": "_maxConversionFee",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 19392,
"src": "343:24:41",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
},
"typeName": {
"id": 19382,
"name": "uint32",
"nodeType": "ElementaryTypeName",
"src": "343:6:41",
"typeDescriptions": {
"typeIdentifier": "t_uint32",
"typeString": "uint32"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "268:105:41"
},
"returnParameters": {
"id": 19390,
"nodeType": "ParameterList",
"parameters": [],
"src": "464:0:41"
},
"scope": 19427,
"src": "257:214:41",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"body": {
"id": 19401,
"nodeType": "Block",
"src": "532:41:41",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 19399,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 19397,
"name": "etherToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 14431,
"src": "542:10:41",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IEtherToken_$21487",
"typeString": "contract IEtherToken"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 19398,
"name": "_etherToken",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 19394,
"src": "555:11:41",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IEtherToken_$21487",
"typeString": "contract IEtherToken"
}
},
"src": "542:24:41",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IEtherToken_$21487",
"typeString": "contract IEtherToken"
}
},
"id": 19400,
"nodeType": "ExpressionStatement",
"src": "542:24:41"
}
]
},
"documentation": null,
"functionSelector": "6ad419a8",
"id": 19402,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "setEtherToken",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 19395,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 19394,
"mutability": "mutable",
"name": "_etherToken",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 19402,
"src": "500:23:41",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IEtherToken_$21487",
"typeString": "contract IEtherToken"
},
"typeName": {
"contractScope": null,
"id": 19393,
"name": "IEtherToken",
"nodeType": "UserDefinedTypeName",
"referencedDeclaration": 21487,
"src": "500:11:41",
"typeDescriptions": {
"typeIdentifier": "t_contract$_IEtherToken_$21487",
"typeString": "contract IEtherToken"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "499:25:41"
},
"returnParameters": {
"id": 19396,
"nodeType": "ParameterList",
"parameters": [],
"src": "532:0:41"
},
"scope": 19427,
"src": "477:96:41",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
},
{
"baseFunctions": [
16437
],
"body": {
"id": 19415,
"nodeType": "Block",
"src": "636:60:41",
"statements": [
{
"expression": {
"argumentTypes": null,
"condition": {
"argumentTypes": null,
"commonType": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"id": 19410,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftExpression": {
"argumentTypes": null,
"id": 19408,
"name": "currentTime",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 19377,
"src": "653:11:41",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "BinaryOperation",
"operator": "!=",
"rightExpression": {
"argumentTypes": null,
"hexValue": "30",
"id": 19409,
"isConstant": false,
"isLValue": false,
"isPure": true,
"kind": "number",
"lValueRequested": false,
"nodeType": "Literal",
"src": "668:1:41",
"subdenomination": null,
"typeDescriptions": {
"typeIdentifier": "t_rational_0_by_1",
"typeString": "int_const 0"
},
"value": "0"
},
"src": "653:16:41",
"typeDescriptions": {
"typeIdentifier": "t_bool",
"typeString": "bool"
}
},
"falseExpression": {
"argumentTypes": null,
"id": 19412,
"name": "now",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": -17,
"src": "686:3:41",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 19413,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"nodeType": "Conditional",
"src": "653:36:41",
"trueExpression": {
"argumentTypes": null,
"id": 19411,
"name": "currentTime",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 19377,
"src": "672:11:41",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"functionReturnParameters": 19407,
"id": 19414,
"nodeType": "Return",
"src": "646:43:41"
}
]
},
"documentation": null,
"id": 19416,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "time",
"nodeType": "FunctionDefinition",
"overrides": {
"id": 19404,
"nodeType": "OverrideSpecifier",
"overrides": [],
"src": "609:8:41"
},
"parameters": {
"id": 19403,
"nodeType": "ParameterList",
"parameters": [],
"src": "592:2:41"
},
"returnParameters": {
"id": 19407,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 19406,
"mutability": "mutable",
"name": "",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 19416,
"src": "627:7:41",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 19405,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "627:7:41",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "626:9:41"
},
"scope": 19427,
"src": "579:117:41",
"stateMutability": "view",
"virtual": false,
"visibility": "internal"
},
{
"body": {
"id": 19425,
"nodeType": "Block",
"src": "748:43:41",
"statements": [
{
"expression": {
"argumentTypes": null,
"id": 19423,
"isConstant": false,
"isLValue": false,
"isPure": false,
"lValueRequested": false,
"leftHandSide": {
"argumentTypes": null,
"id": 19421,
"name": "currentTime",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 19377,
"src": "758:11:41",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"nodeType": "Assignment",
"operator": "=",
"rightHandSide": {
"argumentTypes": null,
"id": 19422,
"name": "_currentTime",
"nodeType": "Identifier",
"overloadedDeclarations": [],
"referencedDeclaration": 19418,
"src": "772:12:41",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"src": "758:26:41",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"id": 19424,
"nodeType": "ExpressionStatement",
"src": "758:26:41"
}
]
},
"documentation": null,
"functionSelector": "3beb26c4",
"id": 19426,
"implemented": true,
"kind": "function",
"modifiers": [],
"name": "setTime",
"nodeType": "FunctionDefinition",
"overrides": null,
"parameters": {
"id": 19419,
"nodeType": "ParameterList",
"parameters": [
{
"constant": false,
"id": 19418,
"mutability": "mutable",
"name": "_currentTime",
"nodeType": "VariableDeclaration",
"overrides": null,
"scope": 19426,
"src": "719:20:41",
"stateVariable": false,
"storageLocation": "default",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
},
"typeName": {
"id": 19417,
"name": "uint256",
"nodeType": "ElementaryTypeName",
"src": "719:7:41",
"typeDescriptions": {
"typeIdentifier": "t_uint256",
"typeString": "uint256"
}
},
"value": null,
"visibility": "internal"
}
],
"src": "718:22:41"
},
"returnParameters": {
"id": 19420,
"nodeType": "ParameterList",
"parameters": [],
"src": "748:0:41"
},
"scope": 19427,
"src": "702:89:41",
"stateMutability": "nonpayable",
"virtual": false,
"visibility": "public"
}
],
"scope": 19428,
"src": "152:641:41"
}
],
"src": "51:743:41"
},
"compiler": {
"name": "solc",
"version": "0.6.12+commit.27d51765.Emscripten.clang"
},
"networks": {},
"schemaVersion": "3.2.3",
"updatedAt": "2020-11-10T14:20:35.975Z",
"devdoc": {
"kind": "dev",
"methods": {
"acceptAnchorOwnership()": {
"details": "accepts ownership of the anchor after an ownership transfer also activates the converter can only be called by the contract owner note that prior to version 28, you should use 'acceptTokenOwnership' instead"
},
"acceptOwnership()": {
"details": "used by a new owner to accept an ownership transfer"
},
"acceptTokenOwnership()": {
"details": "deprecated, backward compatibility"
},
"addLiquidity(address[],uint256[],uint256)": {
"details": "increases the pool's liquidity and mints new shares in the pool to the caller note that prior to version 28, you should use 'fund' instead",
"params": {
"_minReturn": "token minimum return-amount",
"_reserveAmounts": "amount of each reserve token",
"_reserveTokens": "address of each reserve token"
},
"returns": {
"_0": "amount of pool tokens issued"
}
},
"addLiquidityCost(address[],uint256,uint256)": {
"details": "given the amount of one of the reserve tokens to add liquidity of, returns the required amount of each one of the other reserve tokens since an empty pool can be funded with any list of non-zero input amounts, this function assumes that the pool is not empty (has already been funded)",
"params": {
"_reserveAmount": "amount of the relevant reserve token",
"_reserveTokenIndex": "index of the relevant reserve token",
"_reserveTokens": "address of each reserve token"
},
"returns": {
"_0": "the required amount of each one of the reserve tokens"
}
},
"addLiquidityReturn(address,uint256)": {
"details": "given the amount of one of the reserve tokens to add liquidity of, returns the amount of pool tokens entitled for it since an empty pool can be funded with any list of non-zero input amounts, this function assumes that the pool is not empty (has already been funded)",
"params": {
"_reserveAmount": "amount of the reserve token",
"_reserveToken": "address of the reserve token"
},
"returns": {
"_0": "the amount of pool tokens entitled"
}
},
"addReserve(address,uint32)": {
"details": "defines a new reserve token for the converter can only be called by the owner while the converter is inactive",
"params": {
"_token": "address of the reserve token",
"_weight": "reserve weight, represented in ppm, 1-1000000"
}
},
"connectorTokenCount()": {
"details": "deprecated, backward compatibility"
},
"connectorTokens(uint256)": {
"details": "deprecated, backward compatibility"
},
"connectors(address)": {
"details": "deprecated, backward compatibility"
},
"convert(address,address,uint256,address,address)": {
"details": "converts a specific amount of source tokens to target tokens can only be called by the bancor network contract",
"params": {
"_amount": "amount of tokens to convert (in units of the source token)",
"_beneficiary": "wallet to receive the conversion result",
"_sourceToken": "source ERC20 token",
"_targetToken": "target ERC20 token",
"_trader": "address of the caller who executed the conversion"
},
"returns": {
"_0": "amount of tokens received (in units of the target token)"
}
},
"converterType()": {
"details": "returns the converter type",
"returns": {
"_0": "see the converter types in the the main contract doc"
}
},
"decimalLength(uint256)": {
"details": "returns the number of decimal digits in a given value",
"params": {
"_x": "value (assumed positive)"
},
"returns": {
"_0": "the number of decimal digits in the given value"
}
},
"fund(uint256)": {
"details": "increases the pool's liquidity and mints new shares in the pool to the caller for example, if the caller increases the supply by 10%, then it will cost an amount equal to 10% of each reserve token balance note that starting from version 28, you should use 'addLiquidity' instead",
"params": {
"_amount": "amount to increase the supply by (in the pool token)"
},
"returns": {
"_0": "amount of pool tokens issued"
}
},
"geometricMean(uint256[])": {
"details": "returns the average number of decimal digits in a given list of values",
"params": {
"_values": "list of values (each of which assumed positive)"
},
"returns": {
"_0": "the average number of decimal digits in the given list of values"
}
},
"getConnectorBalance(address)": {
"details": "deprecated, backward compatibility"
},
"getReturn(address,address,uint256)": {
"details": "deprecated, backward compatibility"
},
"hasETHReserve()": {
"details": "checks whether or not the converter has an ETH reserve",
"returns": {
"_0": "true if the converter has an ETH reserve, false otherwise"
}
},
"isActive()": {
"details": "returns true if the converter is active, false otherwise",
"returns": {
"_0": "true if the converter is active, false otherwise"
}
},
"isV28OrHigher()": {
"details": "checks whether or not the converter version is 28 or higher",
"returns": {
"_0": "true, since the converter version is 28 or higher"
}
},
"liquidate(uint256)": {
"details": "decreases the pool's liquidity and burns the caller's shares in the pool for example, if the holder sells 10% of the supply, then they will receive 10% of each reserve token balance in return note that starting from version 28, you should use 'removeLiquidity' instead",
"params": {
"_amount": "amount to liquidate (in the pool token)"
},
"returns": {
"_0": "the amount of each reserve token granted for the given amount of pool tokens"
}
},
"recentAverageRate(address)": {
"details": "returns the recent average rate of 1 `_token` in the other reserve token units note that the rate can only be queried for reserves in a standard pool",
"params": {
"_token": "token to get the rate for"
},
"returns": {
"_0": "recent average rate between the reserves (numerator)",
"_1": "recent average rate between the reserves (denominator)"
}
},
"removeLiquidity(uint256,address[],uint256[])": {
"details": "decreases the pool's liquidity and burns the caller's shares in the pool note that prior to version 28, you should use 'liquidate' instead",
"params": {
"_amount": "token amount",
"_reserveMinReturnAmounts": "minimum return-amount of each reserve token",
"_reserveTokens": "address of each reserve token"
},
"returns": {
"_0": "the amount of each reserve token granted for the given amount of pool tokens"
}
},
"removeLiquidityReturn(uint256,address[])": {
"details": "returns the amount of each reserve token entitled for a given amount of pool tokens",
"params": {
"_amount": "amount of pool tokens",
"_reserveTokens": "address of each reserve token"
},
"returns": {
"_0": "the amount of each reserve token entitled for the given amount of pool tokens"
}
},
"reserveBalance(address)": {
"details": "returns the reserve's balance note that prior to version 17, you should use 'getConnectorBalance' instead",
"params": {
"_reserveToken": "reserve token contract address"
},
"returns": {
"_0": "reserve balance"
}
},
"reserveTokenCount()": {
"details": "returns the number of reserve tokens defined note that prior to version 17, you should use 'connectorTokenCount' instead",
"returns": {
"_0": "number of reserve tokens"
}
},
"reserveWeight(address)": {
"details": "returns the reserve's weight added in version 28",
"params": {
"_reserveToken": "reserve token contract address"
},
"returns": {
"_0": "reserve weight"
}
},
"restoreRegistry()": {
"details": "restores the previous contract-registry"
},
"restrictRegistryUpdate(bool)": {
"details": "restricts the permission to update the contract-registry",
"params": {
"_onlyOwnerCanUpdateRegistry": "indicates whether or not permission is restricted to owner only"
}
},
"roundDiv(uint256,uint256)": {
"details": "returns the nearest integer to a given quotient",
"params": {
"_d": "quotient denominator",
"_n": "quotient numerator"
},
"returns": {
"_0": "the nearest integer to the given quotient"
}
},
"setConversionFee(uint32)": {
"details": "updates the current conversion fee can only be called by the contract owner",
"params": {
"_conversionFee": "new conversion fee, represented in ppm"
}
},
"setConversionWhitelist(address)": {
"details": "allows the owner to update & enable the conversion whitelist contract address when set, only addresses that are whitelisted are actually allowed to use the converter note that the whitelist check is actually done by the BancorNetwork contract",
"params": {
"_whitelist": "address of a whitelist contract"
}
},
"targetAmountAndFee(address,address,uint256)": {
"details": "returns the expected target amount of converting one reserve to another along with the fee",
"params": {
"_amount": "amount of tokens received from the user",
"_sourceToken": "contract address of the source reserve token",
"_targetToken": "contract address of the target reserve token"
},
"returns": {
"_0": "expected target amount",
"_1": "expected fee"
}
},
"token()": {
"details": "deprecated since version 28, backward compatibility - use only for earlier versions"
},
"transferAnchorOwnership(address)": {
"details": "transfers the anchor ownership the new owner needs to accept the transfer can only be called by the converter upgrder while the upgrader is the owner note that prior to version 28, you should use 'transferAnchorOwnership' instead",
"params": {
"_newOwner": "new token owner"
}
},
"transferOwnership(address)": {
"details": "allows transferring the contract ownership the new owner still needs to accept the transfer can only be called by the contract owner",
"params": {
"_newOwner": "new contract owner"
}
},
"transferTokenOwnership(address)": {
"details": "deprecated, backward compatibility"
},
"updateRegistry()": {
"details": "updates to the new contract-registry"
},
"upgrade()": {
"details": "upgrades the converter to the latest version can only be called by the owner note that the owner needs to call acceptOwnership on the new converter after the upgrade"
},
"withdrawETH(address)": {
"details": "withdraws ether can only be called by the owner if the converter is inactive or by upgrader contract can only be called after the upgrader contract has accepted the ownership of this contract can only be called if the converter has an ETH reserve",
"params": {
"_to": "address to send the ETH to"
}
},
"withdrawFromAnchor(address,address,uint256)": {
"details": "withdraws tokens held by the anchor and sends them to an account can only be called by the owner",
"params": {
"_amount": "amount to withdraw",
"_to": "account to receive the new amount",
"_token": "ERC20 token contract address"
}
},
"withdrawTokens(address,address,uint256)": {
"details": "withdraws tokens held by the converter and sends them to an account can only be called by the owner note that reserve tokens can only be withdrawn by the owner while the converter is inactive unless the owner is the converter upgrader contract",
"params": {
"_amount": "amount to withdraw",
"_to": "account to receive the new amount",
"_token": "ERC20 token contract address"
}
}
},
"version": 1
},
"userdoc": {
"kind": "user",
"methods": {},
"version": 1
}
}