Contract 0x3047799262d8D2EF41eD2a222205968bC9B0d895

 
Txn Hash
Block
From
To
Value [Txn Fee]
0x0553a3e1df488fa2c3fa823bcc8559f6b65f30d55576e53d866b8f5bf53e8d2285506592021-06-23 15:28:078 secs ago0x51a82eeb449f415fcbd03602784d04299efc8fa8 IN  CheeseSwap: Router1 BNB0.00063059
0x8c4f276c96ab0038691e6c448fc5d8182c407657c57e194cf72845d3fb2186d985506472021-06-23 15:27:3144 secs ago0x51a82eeb449f415fcbd03602784d04299efc8fa8 IN  CheeseSwap: Router0 BNB0.00094949
0x269c6b608f013ce97e3b3fdb5816db40ff80bb2a7d7a224c0546a9641569d3d485506332021-06-23 15:26:491 min ago0x51a82eeb449f415fcbd03602784d04299efc8fa8 IN  CheeseSwap: Router0 BNB0.000509495
0xdae89c183aa960435fd2cad353473aa9702e0c43da87df9e02841031209478cd85506232021-06-23 15:26:191 min ago0x51a82eeb449f415fcbd03602784d04299efc8fa8 IN  CheeseSwap: Router0 BNB0.000584495
0x5a4e334609e2626d89884b45e92e1ad806a4b93010e8745ddde0237bce9aee7c85506092021-06-23 15:25:372 mins ago0x51a82eeb449f415fcbd03602784d04299efc8fa8 IN  CheeseSwap: Router1 BNB0.00055559
0x820516ad6c5823d6096c8edab7dab1d1c2f54dce4ff6cb3112805431e982e0ae85506032021-06-23 15:25:192 mins ago0x51a82eeb449f415fcbd03602784d04299efc8fa8 IN  CheeseSwap: Router1 BNB0.00055559
0x33a3e8819abda3d0d85575893ace75ce1212cdb93d5d04d57b33947870ad278e85505922021-06-23 15:24:463 mins ago0x51a82eeb449f415fcbd03602784d04299efc8fa8 IN  CheeseSwap: Router1 BNB0.00055559
0xe5921c10a8bda67cfab6189c336aa5b0e18307a382d2e7243be68b987f0b02eb85505842021-06-23 15:24:223 mins ago0x51a82eeb449f415fcbd03602784d04299efc8fa8 IN  CheeseSwap: Router1 BNB0.00055559
0x8bb60219a1db6bb3442d166ebf54149ccdfc4700c463499a6ebec651025d2c2f85505792021-06-23 15:24:074 mins ago0x51a82eeb449f415fcbd03602784d04299efc8fa8 IN  CheeseSwap: Router1 BNB0.00063059
0xd5390b26179bd3881efda6979a1ea498b4bab76b01e7b379d3a03d1e2c60878385505572021-06-23 15:23:015 mins ago0x51a82eeb449f415fcbd03602784d04299efc8fa8 IN  CheeseSwap: Router5.5 BNB0.00055571
0xf8969e404a8bf4c9c3ca25e9fd4b5286ea94ae1ecb890d6d99293b0de273657d85499382021-06-23 14:52:0036 mins ago0xd6445cf9073b081f59d04be5c4cb8d053743c0e1 IN  CheeseSwap: Router0 BNB0.000572195
0x96db760cfab5f9d7b5a58c5adc4ce9bf5e5773ffae45e6e3c1b9277fa9ab0bf685495622021-06-23 14:33:1055 mins ago0xd275120c82d49f462e94a830f35ff8e49ab1aac7 IN  CheeseSwap: Router0 BNB0.000646715
0x57b0fa741668d40342ab1940ea1f23081bae0230bc60832ade03db6d401f4d4285492802021-06-23 14:19:041 hr 9 mins ago0xacdff5c6cb70d15a435db7bb1d8c5491b2c0ad93 IN  CheeseSwap: Router0.003 BNB0.00063022
0x0bb8b1736358139582457189d47aa750fc1d5ce3b49c46f8d88e818ee30adeaf85490112021-06-23 14:05:371 hr 22 mins ago0x8dc63bd0ce3a6cfe776d9a91d1be6c8d26abbd32 IN  CheeseSwap: Router0 BNB0.000571915
0xe225fefab4edaab96a009394088b0ab60bdef58b89514b6eaff70f332150c77e85489862021-06-23 14:04:221 hr 23 mins ago0x8dc63bd0ce3a6cfe776d9a91d1be6c8d26abbd32 IN  CheeseSwap: Router0 BNB0.00085415
0x256de60a6caca29399febfb4b2198084ea23f835bff448df81d49bb9d9631b5a85489812021-06-23 14:04:071 hr 24 mins ago0xd275120c82d49f462e94a830f35ff8e49ab1aac7 IN  CheeseSwap: Router0 BNB0.00087072
0x37df7e487b84a8a536b71c8c69bad585c264fb002c90e05508296ff160e6507585488842021-06-23 13:59:161 hr 28 mins ago0xd22ea86003c1bd1cbdd887dda1464b07a5718369 IN  CheeseSwap: Router0.033592310845818 BNB0.00067114
0x47a19964188e13262bf263bf14b63cb1f8a029304f6e0a3fe63d8cb2ca11c64985484672021-06-23 13:38:111 hr 50 mins ago0x0f1573089ec733946569c7bbdfb7f5a89dfe1216 IN  CheeseSwap: Router0.004612563264732 BNB0.00063022
0x34eaff779e7d833cabe6b33da0c9e92feb84483fa8773f2aeb3562210d3d205785478452021-06-23 13:07:002 hrs 21 mins ago0x56f3cf50f6257ae4d8abb22f550db5136cb2f4ae IN  CheeseSwap: Router0 BNB0.000571915
0x7e15b13c18e0aeebc8e710421882f0c2354b224f13e89cd46f1fcbe9634ad0cb85476292021-06-23 12:56:122 hrs 32 mins ago0xb1696abd28be2dba485f882f72bb820a42da74cc IN  CheeseSwap: Router0.03136665956836 BNB0.000907395
0x6afddc78cbfc48272ac63b1fe6cdf2d8033d666b5c7ea7176d144577344d9d3485474982021-06-23 12:49:392 hrs 38 mins ago0xb1696abd28be2dba485f882f72bb820a42da74cc IN  CheeseSwap: Router0.001177526043896 BNB0.00129443
0xfcc17d0ef79c415cecd7958af20c44fca731a0df69c1ea02bb6faad354ca73b885472952021-06-23 12:39:302 hrs 48 mins ago0x3b02e33884e5d7790c3b9206c846916cb9f6ba0a IN  CheeseSwap: Router0.01 BNB0.00063028
0xbb498bd3da55df86b071e4d910123aad347f638b7c6a7a8a5097753d7fdc88cb85471612021-06-23 12:32:482 hrs 55 mins ago0x733c968c8da47be255f6f82623ec98d45fd82716 IN  CheeseSwap: Router0 BNB0.00079723
0xb63c2a066469ce031d3201d9871f9d45846a4a9d747ae1014d5ec20957fd02e685471392021-06-23 12:31:422 hrs 56 mins ago0xaba1de3119ea1ccd8f854ddf2447a3fb73ce8954 IN  CheeseSwap: Router0 BNB0.000571975
0xc348ddd2ada0a4a93fd05c1c01eebee77e6f3cbf783d2cf2f697a3b99833e4a085467642021-06-23 12:12:523 hrs 15 mins ago0x3b02e33884e5d7790c3b9206c846916cb9f6ba0a IN  CheeseSwap: Router0.006 BNB0.00063022
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x5a4e334609e2626d89884b45e92e1ad806a4b93010e8745ddde0237bce9aee7c85506092021-06-23 15:25:372 mins ago CheeseSwap: Router Binance: WBNB Token1 BNB
0x820516ad6c5823d6096c8edab7dab1d1c2f54dce4ff6cb3112805431e982e0ae85506032021-06-23 15:25:192 mins ago CheeseSwap: Router Binance: WBNB Token1 BNB
0x33a3e8819abda3d0d85575893ace75ce1212cdb93d5d04d57b33947870ad278e85505922021-06-23 15:24:463 mins ago CheeseSwap: Router Binance: WBNB Token1 BNB
0xe5921c10a8bda67cfab6189c336aa5b0e18307a382d2e7243be68b987f0b02eb85505842021-06-23 15:24:223 mins ago CheeseSwap: Router Binance: WBNB Token1 BNB
0x8bb60219a1db6bb3442d166ebf54149ccdfc4700c463499a6ebec651025d2c2f85505792021-06-23 15:24:074 mins ago CheeseSwap: Router Binance: WBNB Token1 BNB
0xd5390b26179bd3881efda6979a1ea498b4bab76b01e7b379d3a03d1e2c60878385505572021-06-23 15:23:015 mins ago CheeseSwap: Router Binance: WBNB Token5.5 BNB
0xf8969e404a8bf4c9c3ca25e9fd4b5286ea94ae1ecb890d6d99293b0de273657d85499382021-06-23 14:52:0036 mins ago CheeseSwap: Router0xd6445cf9073b081f59d04be5c4cb8d053743c0e10.006273180569580033 BNB
0xf8969e404a8bf4c9c3ca25e9fd4b5286ea94ae1ecb890d6d99293b0de273657d85499382021-06-23 14:52:0036 mins ago Binance: WBNB Token CheeseSwap: Router0.006273180569580033 BNB
0x96db760cfab5f9d7b5a58c5adc4ce9bf5e5773ffae45e6e3c1b9277fa9ab0bf685495622021-06-23 14:33:1055 mins ago CheeseSwap: Router0xd275120c82d49f462e94a830f35ff8e49ab1aac70.006680046635038725 BNB
0x96db760cfab5f9d7b5a58c5adc4ce9bf5e5773ffae45e6e3c1b9277fa9ab0bf685495622021-06-23 14:33:1055 mins ago Binance: WBNB Token CheeseSwap: Router0.006680046635038725 BNB
0x57b0fa741668d40342ab1940ea1f23081bae0230bc60832ade03db6d401f4d4285492802021-06-23 14:19:041 hr 9 mins ago CheeseSwap: Router Binance: WBNB Token0.003 BNB
0x0bb8b1736358139582457189d47aa750fc1d5ce3b49c46f8d88e818ee30adeaf85490112021-06-23 14:05:371 hr 22 mins ago CheeseSwap: Router0x8dc63bd0ce3a6cfe776d9a91d1be6c8d26abbd321.255059885710990531 BNB
0x0bb8b1736358139582457189d47aa750fc1d5ce3b49c46f8d88e818ee30adeaf85490112021-06-23 14:05:371 hr 22 mins ago Binance: WBNB Token CheeseSwap: Router1.255059885710990531 BNB
0xe225fefab4edaab96a009394088b0ab60bdef58b89514b6eaff70f332150c77e85489862021-06-23 14:04:221 hr 23 mins ago CheeseSwap: Router0x8dc63bd0ce3a6cfe776d9a91d1be6c8d26abbd321.293615821218018187 BNB
0xe225fefab4edaab96a009394088b0ab60bdef58b89514b6eaff70f332150c77e85489862021-06-23 14:04:221 hr 23 mins ago Binance: WBNB Token CheeseSwap: Router1.293615821218018187 BNB
0x37df7e487b84a8a536b71c8c69bad585c264fb002c90e05508296ff160e6507585488842021-06-23 13:59:161 hr 28 mins ago CheeseSwap: Router0xd22ea86003c1bd1cbdd887dda1464b07a57183690.000067184756195652 BNB
0x37df7e487b84a8a536b71c8c69bad585c264fb002c90e05508296ff160e6507585488842021-06-23 13:59:161 hr 28 mins ago CheeseSwap: Router Binance: WBNB Token0.033525126089622555 BNB
0x47a19964188e13262bf263bf14b63cb1f8a029304f6e0a3fe63d8cb2ca11c64985484672021-06-23 13:38:111 hr 50 mins ago CheeseSwap: Router Binance: WBNB Token0.004612563264732549 BNB
0x34eaff779e7d833cabe6b33da0c9e92feb84483fa8773f2aeb3562210d3d205785478452021-06-23 13:07:002 hrs 21 mins ago CheeseSwap: Router0x56f3cf50f6257ae4d8abb22f550db5136cb2f4ae0.007049007192413134 BNB
0x34eaff779e7d833cabe6b33da0c9e92feb84483fa8773f2aeb3562210d3d205785478452021-06-23 13:07:002 hrs 21 mins ago Binance: WBNB Token CheeseSwap: Router0.007049007192413134 BNB
0x7e15b13c18e0aeebc8e710421882f0c2354b224f13e89cd46f1fcbe9634ad0cb85476292021-06-23 12:56:122 hrs 32 mins ago CheeseSwap: Router0xb1696abd28be2dba485f882f72bb820a42da74cc0.000094132517107093 BNB
0x7e15b13c18e0aeebc8e710421882f0c2354b224f13e89cd46f1fcbe9634ad0cb85476292021-06-23 12:56:122 hrs 32 mins ago CheeseSwap: Router Binance: WBNB Token0.03127252705125372 BNB
0x6afddc78cbfc48272ac63b1fe6cdf2d8033d666b5c7ea7176d144577344d9d3485474982021-06-23 12:49:392 hrs 38 mins ago CheeseSwap: Router0xb1696abd28be2dba485f882f72bb820a42da74cc0.000004714346246153 BNB
0x6afddc78cbfc48272ac63b1fe6cdf2d8033d666b5c7ea7176d144577344d9d3485474982021-06-23 12:49:392 hrs 38 mins ago CheeseSwap: Router Binance: WBNB Token0.001172811697650587 BNB
0xfcc17d0ef79c415cecd7958af20c44fca731a0df69c1ea02bb6faad354ca73b885472952021-06-23 12:39:302 hrs 48 mins ago CheeseSwap: Router Binance: WBNB Token0.01 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CheeseSwapRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license, Audited

Contract Source Code (Solidity)Audit Report

/**
 *Submitted for verification at BscScan.com on 2020-10-22
*/

// SPDX-License-Identifier: MIT

pragma solidity =0.6.6;


interface ICheeseSwapFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('approve(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
    }

    function safeTransfer(address token, address to, uint value) internal {
        // bytes4(keccak256(bytes('transfer(address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
    }

    function safeTransferFrom(address token, address from, address to, uint value) internal {
        // bytes4(keccak256(bytes('transferFrom(address,address,uint256)')));
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
    }

    function safeTransferETH(address to, uint value) internal {
        (bool success,) = to.call{value:value}(new bytes(0));
        require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
    }
}

interface ICheeseSwapRouter01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}

interface ICheeseSwapRouter02 is ICheeseSwapRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface ICheeseSwapPair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)
library SafeMath {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

    function sub(uint x, uint y) internal pure returns (uint z) {
        require((z = x - y) <= x, 'ds-math-sub-underflow');
    }

    function mul(uint x, uint y) internal pure returns (uint z) {
        require(y == 0 || (z = x * y) / y == x, 'ds-math-mul-overflow');
    }
}

library CheeseSwapLibrary {
    using SafeMath for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'CheeseSwapLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'CheeseSwapLibrary: ZERO_ADDRESS');
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(address factory, address tokenA, address tokenB) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(uint(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'f52c5189a89e7ca2ef4f19f2798e3900fba7a316de7cef6c5a9446621ba86286' // init code hash
            ))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint reserveA, uint reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        pairFor(factory, tokenA, tokenB);
        (uint reserve0, uint reserve1,) = ICheeseSwapPair(pairFor(factory, tokenA, tokenB)).getReserves();
        (reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
    }

    // given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
    function quote(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
        require(amountA > 0, 'CheeseSwapLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'CheeseSwapLibrary: INSUFFICIENT_LIQUIDITY');
        amountB = amountA.mul(reserveB) / reserveA;
    }

    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {
        require(amountIn > 0, 'CheeseSwapLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'CheeseSwapLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(998);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

    // given an output amount of an asset and pair reserves, returns a required input amount of the other asset
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) internal pure returns (uint amountIn) {
        require(amountOut > 0, 'CheeseSwapLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'CheeseSwapLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(998);
        amountIn = (numerator / denominator).add(1);
    }

    // performs chained getAmountOut calculations on any number of pairs
    function getAmountsOut(address factory, uint amountIn, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'CheeseSwapLibrary: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[0] = amountIn;
        for (uint i; i < path.length - 1; i++) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]);
            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);
        }
    }

    // performs chained getAmountIn calculations on any number of pairs
    function getAmountsIn(address factory, uint amountOut, address[] memory path) internal view returns (uint[] memory amounts) {
        require(path.length >= 2, 'CheeseSwapLibrary: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[amounts.length - 1] = amountOut;
        for (uint i = path.length - 1; i > 0; i--) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i - 1], path[i]);
            amounts[i - 1] = getAmountIn(amounts[i], reserveIn, reserveOut);
        }
    }
}

interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
}

interface IWETH {
    function deposit() external payable;
    function transfer(address to, uint value) external returns (bool);
    function withdraw(uint) external;
}

contract CheeseSwapRouter is ICheeseSwapRouter02 {
    using SafeMath for uint;

    address public immutable override factory;
    address public immutable override WETH;

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'CheeseSwapRouter: EXPIRED');
        _;
    }

    constructor(address _factory, address _WETH) public {
        factory = _factory;
        WETH = _WETH;
    }

    receive() external payable {
        assert(msg.sender == WETH); // only accept ETH via fallback from the WETH contract
    }

    // **** ADD LIQUIDITY ****
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin
    ) internal virtual returns (uint amountA, uint amountB) {
        // create the pair if it doesn't exist yet
        if (ICheeseSwapFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            ICheeseSwapFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = CheeseSwapLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = CheeseSwapLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'CheeseSwapRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = CheeseSwapLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'CheeseSwapRouter: INSUFFICIENT_A_AMOUNT');
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) {
        (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
        address pair = CheeseSwapLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = ICheeseSwapPair(pair).mint(to);
    }
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external virtual override payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) {
        (amountToken, amountETH) = _addLiquidity(
            token,
            WETH,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountETHMin
        );
        address pair = CheeseSwapLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = ICheeseSwapPair(pair).mint(to);
        // refund dust eth, if any
        if (msg.value > amountETH) TransferHelper.safeTransferETH(msg.sender, msg.value - amountETH);
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountA, uint amountB) {
        address pair = CheeseSwapLibrary.pairFor(factory, tokenA, tokenB);
        ICheeseSwapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = ICheeseSwapPair(pair).burn(to);
        (address token0,) = CheeseSwapLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'CheeseSwapRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'CheeseSwapRouter: INSUFFICIENT_B_AMOUNT');
    }
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountToken, uint amountETH) {
        (amountToken, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountA, uint amountB) {
        address pair = CheeseSwapLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        ICheeseSwapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountA, amountB) = removeLiquidity(tokenA, tokenB, liquidity, amountAMin, amountBMin, to, deadline);
    }
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountToken, uint amountETH) {
        address pair = CheeseSwapLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        ICheeseSwapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        (amountToken, amountETH) = removeLiquidityETH(token, liquidity, amountTokenMin, amountETHMin, to, deadline);
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) public virtual override ensure(deadline) returns (uint amountETH) {
        (, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWETH(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint amountETH) {
        address pair = CheeseSwapLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        ICheeseSwapPair(pair).permit(msg.sender, address(this), value, deadline, v, r, s);
        amountETH = removeLiquidityETHSupportingFeeOnTransferTokens(
            token, liquidity, amountTokenMin, amountETHMin, to, deadline
        );
    }

    // **** SWAP ****
    // requires the initial amount to have already been sent to the first pair
    function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = CheeseSwapLibrary.sortTokens(input, output);
            uint amountOut = amounts[i + 1];
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
            address to = i < path.length - 2 ? CheeseSwapLibrary.pairFor(factory, output, path[i + 2]) : _to;
            ICheeseSwapPair(CheeseSwapLibrary.pairFor(factory, input, output)).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = CheeseSwapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'CheeseSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CheeseSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) returns (uint[] memory amounts) {
        amounts = CheeseSwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'CheeseSwapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CheeseSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WETH, 'CheeseSwapRouter: INVALID_PATH');
        amounts = CheeseSwapLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'CheeseSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(CheeseSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'CheeseSwapRouter: INVALID_PATH');
        amounts = CheeseSwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'CheeseSwapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CheeseSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'CheeseSwapRouter: INVALID_PATH');
        amounts = CheeseSwapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'CheeseSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CheeseSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWETH(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint[] memory amounts)
    {
        require(path[0] == WETH, 'CheeseSwapRouter: INVALID_PATH');
        amounts = CheeseSwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'CheeseSwapRouter: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(CheeseSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
        // refund dust eth, if any
        if (msg.value > amounts[0]) TransferHelper.safeTransferETH(msg.sender, msg.value - amounts[0]);
    }

    // **** SWAP (supporting fee-on-transfer tokens) ****
    // requires the initial amount to have already been sent to the first pair
    function _swapSupportingFeeOnTransferTokens(address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = CheeseSwapLibrary.sortTokens(input, output);
            ICheeseSwapPair pair = ICheeseSwapPair(CheeseSwapLibrary.pairFor(factory, input, output));
            uint amountInput;
            uint amountOutput;
            { // scope to avoid stack too deep errors
            (uint reserve0, uint reserve1,) = pair.getReserves();
            (uint reserveInput, uint reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
            amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = CheeseSwapLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? CheeseSwapLibrary.pairFor(factory, output, path[i + 2]) : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external virtual override ensure(deadline) {
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CheeseSwapLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'CheeseSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'CheeseSwapRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(CheeseSwapLibrary.pairFor(factory, path[0], path[1]), amountIn));
        uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'CheeseSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(path[path.length - 1] == WETH, 'CheeseSwapRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, CheeseSwapLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'CheeseSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

    // **** LIBRARY FUNCTIONS ****
    function quote(uint amountA, uint reserveA, uint reserveB) public pure virtual override returns (uint amountB) {
        return CheeseSwapLibrary.quote(amountA, reserveA, reserveB);
    }

    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut)
        public
        pure
        virtual
        override
        returns (uint amountOut)
    {
        return CheeseSwapLibrary.getAmountOut(amountIn, reserveIn, reserveOut);
    }

    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut)
        public
        pure
        virtual
        override
        returns (uint amountIn)
    {
        return CheeseSwapLibrary.getAmountIn(amountOut, reserveIn, reserveOut);
    }

    function getAmountsOut(uint amountIn, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return CheeseSwapLibrary.getAmountsOut(factory, amountIn, path);
    }

    function getAmountsIn(uint amountOut, address[] memory path)
        public
        view
        virtual
        override
        returns (uint[] memory amounts)
    {
        return CheeseSwapLibrary.getAmountsIn(factory, amountOut, path);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WETH","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapETHForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801561001057600080fd5b506040516200477d3803806200477d8339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145f8620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372e52806137715280613a545280613bd3528061400352806140b1528061413152506145f86000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b815260040180806020018281038252602c815260200180614448602c913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b815260040180806020018281038252602c815260200180614448602c913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260288152602001806144746028913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b815260040180806020018281038252602c815260200180614448602c913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b815260040180806020018281038252602c815260200180614448602c913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b815260040180806020018281038252602c815260200180614448602c913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260288152602001806144746028913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260278152602001806144c26027913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260278152602001806145556027913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050612a748b338388613522565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b81526020600482015260196024820152600080516020614515833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601e6024820152600080516020614535833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b81526004018080602001828103825260288152602001806144746028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b815260040180806020018281038252602381526020018061457c6023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b815260040180806020018281038252602c8152602001806144e9602c913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260298152602001806143f96029913960400191505060405180910390fd5b60006132c5856103e663ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f3886103e863ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601f60248201527f436865657365537761704c6962726172793a20494e56414c49445f5041544800604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527ff52c5189a89e7ca2ef4f19f2798e3900fba7a316de7cef6c5a9446621ba86286609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b815260040180806020018281038252602481526020018061459f6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000000000000000000000000000000000000000000008888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601f60248201527f436865657365537761704c6962726172793a20494e56414c49445f5041544800604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000000000000000000000000000000000000000000008585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b815260040180806020018281038252602d8152602001806143cc602d913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b81526004018080602001828103825260298152602001806143f96029913960400191505060405180910390fd5b6000613e076103e8613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216103e6613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b81526004018080602001828103825260268152602001806144226026913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b81526004018080602001828103825260298152602001806143f96029913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b815260040180806020018281038252602681526020018061449c6026913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601f60248201527f436865657365537761704c6962726172793a205a45524f5f4144445245535300604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260278152602001806145556027913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260278152602001806144c26027913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050614315868686613462565b50600080614324888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435c57600080fd5b505afa158015614370573d6000803e3d6000fd5b505050506040513d606081101561438657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143b95780826143bc565b81815b9099909850965050505050505056fe436865657365537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54436865657365537761704c6962726172793a20494e53554646494349454e545f4c4951554944495459436865657365537761704c6962726172793a20494e53554646494349454e545f414d4f554e5443686565736553776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5443686565736553776170526f757465723a204558434553534956455f494e5055545f414d4f554e54436865657365537761704c6962726172793a204944454e544943414c5f41444452455353455343686565736553776170526f757465723a20494e53554646494349454e545f415f414d4f554e54436865657365537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5443686565736553776170526f757465723a20455850495245440000000000000043686565736553776170526f757465723a20494e56414c49445f50415448000043686565736553776170526f757465723a20494e53554646494349454e545f425f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45445472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212207e51ec9d55025e45c838e2a5d3e29a71fb45ff3239f75d85e27bda48a9da4f4464736f6c63430006060033000000000000000000000000dd538e4fd1b69b7863e1f741213276a6cf1efb3b000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000dd538e4fd1b69b7863e1f741213276a6cf1efb3b000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000dd538e4fd1b69b7863e1f741213276a6cf1efb3b
Arg [1] : 000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c


Deployed ByteCode Sourcemap

15531:18618:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16014:10;-1:-1:-1;;;;;16028:4:0;16014:18;;16007:26;;;;15531:18618;;12:1:-1;9;2:12;20181:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20181:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20181:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33089:263;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33089:263:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33089:263:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27374:854;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27374:854:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27374:854:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27374:854:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27374:854:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27374:854:0;;-1:-1:-1;27374:854:0;-1:-1:-1;;;;;;27374:854:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;27374:854:0;;;;;;;;;;;;;;;;;33892:254;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33892:254:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33892:254:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33892:254:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33892:254:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33892:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33892:254:0;;-1:-1:-1;33892:254:0;;-1:-1:-1;;;;;33892:254:0:i;20860:679::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20860:679:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20860:679:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24577:631::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24577:631:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24577:631:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24577:631:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24577:631:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24577:631:0;;-1:-1:-1;24577:631:0;-1:-1:-1;;;;;;24577:631:0;;;;;;;;:::i;26536:832::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26536:832:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26536:832:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26536:832:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26536:832:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26536:832:0;;-1:-1:-1;26536:832:0;-1:-1:-1;;;;;;26536:832:0;;;;;;;;:::i;23001:720::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23001:720:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23001:720:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30421:716::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30421:716:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30421:716:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30421:716:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30421:716:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30421:716:0;;-1:-1:-1;30421:716:0;-1:-1:-1;;;;;;30421:716:0;;;;;;;;:::i;32002:846::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32002:846:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32002:846:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32002:846:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32002:846:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32002:846:0;;-1:-1:-1;32002:846:0;-1:-1:-1;;;;;;32002:846:0;;;;;;;;:::i;25829:701::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25829:701:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25829:701:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25829:701:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25829:701:0;;-1:-1:-1;25829:701:0;-1:-1:-1;;;;;;25829:701:0;;;;;;;;:::i;33360:262::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33360:262:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33360:262:0;;;;;;;;;;;;:::i;25214:609::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25214:609:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25214:609:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25214:609:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25214:609:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25214:609:0;;-1:-1:-1;25214:609:0;-1:-1:-1;;;;;;25214:609:0;;;;;;;;:::i;15667:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15667:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;15667:38:0;;;;;;;;;;;;;;32892:189;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32892:189:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32892:189:0;;;;;;;;;;;;:::i;22295:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22295:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22295:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31143:853::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31143:853:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31143:853:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31143:853:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31143:853:0;;-1:-1:-1;31143:853:0;-1:-1:-1;;;;;;31143:853:0;;;;;;;;:::i;19304:871::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19304:871:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19304:871:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15619:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15619:41:0;;;:::i;33630:254::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33630:254:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33630:254:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33630:254:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33630:254:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33630:254:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33630:254:0;;-1:-1:-1;33630:254:0;;-1:-1:-1;;;;;33630:254:0:i;21545:671::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21545:671:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21545:671:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17539:740::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17539:740:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17539:740:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18285:976;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18285:976:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28234:814::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28234:814:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28234:814:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28234:814:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28234:814:0;;-1:-1:-1;28234:814:0;-1:-1:-1;;;;;;28234:814:0;;;;;;;;:::i;20181:673::-;20418:16;20436:14;20399:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;20490:196:::1;20520:5;20540:4;20559:9;20583:14;20612:12;20647:4;20667:8;20490:15;:196::i;:::-;20463:223:::0;;-1:-1:-1;20463:223:0;-1:-1:-1;20697:51:0::1;20725:5:::0;20732:2;20463:223;20697:27:::1;:51::i;:::-;20765:4;-1:-1:-1::0;;;;;20759:20:0::1;;20780:9;20759:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20759:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20759:31:0;;;;20801:45;20832:2;20836:9;20801:30;:45::i;:::-;20181:673:::0;;;;;;;;;;:::o;33089:263::-;33242:14;33281:63;33312:8;33322:9;33333:10;33281:30;:63::i;:::-;33274:70;33089:263;-1:-1:-1;;;;33089:263:0:o;27374:854::-;27588:21;27560:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27660:4:0::1;27635:29;:4:::0;;-1:-1:-1;;27640:15:0;;27635:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27635:21:0::1;-1:-1:-1::0;;;;;27635:29:0::1;;27627:72;;;::::0;;-1:-1:-1;;;27627:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27627:72:0;;;;;;;;;;;;;::::1;;27720:56;27752:7;27761:8;27771:4;;27720:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27720:31:0::1;::::0;-1:-1:-1;;;27720:56:0:i:1;:::-;27710:66;;27826:12;27795:7;27820:1;27803:7;:14;:18;27795:27;;;;;;;;;;;;;;:43;;27787:100;;;;-1:-1:-1::0;;;27787:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27898:142;27944:4;;27949:1;27944:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27944:7:0::1;27953:10;27965:52;27991:7;28000:4;;28005:1;28000:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28000:7:0::1;28009:4;;28014:1;28009:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28009:7:0::1;27965:25;:52::i;:::-;28019:7;28027:1;28019:10;;;;;;;;;;;;;;27898:31;:142::i;:::-;28051:35;28057:7;28066:4;;28051:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28080:4:0::1;::::0;-1:-1:-1;28051:5:0::1;::::0;-1:-1:-1;;28051:35:0:i:1;:::-;28103:4;-1:-1:-1::0;;;;;28097:20:0::1;;28118:7;28143:1;28126:7;:14;:18;28118:27;;;;;;;;;;;;;;28097:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28097:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28097:49:0;;;;28157:63;28188:2;28192:7;28217:1;28200:7;:14;:18;28192:27;;;;;;;;;;;;;;28157:30;:63::i;:::-;27374:854:::0;;;;;;;;;:::o;33892:254::-;34036:21;34082:56;34113:7;34122:9;34133:4;34082:30;:56::i;:::-;34075:63;;33892:254;;;;;:::o;20860:679::-;21166:12;21180;21205;21220:50;21246:7;21255:6;21263;21220:25;:50::i;:::-;21205:65;;21281:10;21294;:33;;21318:9;21294:33;;;-1:-1:-1;;21294:33:0;21338:81;;;-1:-1:-1;;;21338:81:0;;21367:10;21338:81;;;;21387:4;21338:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21281:46;;-1:-1:-1;;;;;;21338:28:0;;;;;:81;;;;;-1:-1:-1;;21338:81:0;;;;;;;;-1:-1:-1;21338:28:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;21338:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21338:81:0;;;;21451:80;21467:6;21475;21483:9;21494:10;21506;21518:2;21522:8;21451:15;:80::i;:::-;21430:101;;;;;;;;20860:679;;;;;;;;;;;;;;;;:::o;24577:631::-;24801:21;24782:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;24845:56:::1;24877:7;24886:8;24896:4;;24845:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24845:31:0::1;::::0;-1:-1:-1;;;24845:56:0:i:1;:::-;24835:66;;24951:12;24920:7;24945:1;24928:7;:14;:18;24920:27;;;;;;;;;;;;;;:43;;24912:100;;;;-1:-1:-1::0;;;24912:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25023:142;25069:4;;25074:1;25069:7;;;;;;25023:142;25176:24;25182:7;25191:4;;25176:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25197:2:0;;-1:-1:-1;25176:5:0::1;::::0;-1:-1:-1;;25176:24:0:i:1;26536:832::-:0;26750:21;26722:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26822:4:0::1;26797:29;:4:::0;;-1:-1:-1;;26802:15:0;;26797:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26797:21:0::1;-1:-1:-1::0;;;;;26797:29:0::1;;26789:72;;;::::0;;-1:-1:-1;;;26789:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26789:72:0;;;;;;;;;;;;;::::1;;26882:56;26913:7;26922:9;26933:4;;26882:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26882:30:0::1;::::0;-1:-1:-1;;;26882:56:0:i:1;:::-;26872:66;;26971:11;26957:7;26965:1;26957:10;;;;;;;;;;;;;;:25;;26949:78;;;;-1:-1:-1::0;;;26949:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23001:720:::0;23319:14;23346:12;23361:47;23387:7;23396:5;23403:4;23361:25;:47::i;:::-;23346:62;;23419:10;23432;:33;;23456:9;23432:33;;;-1:-1:-1;;23432:33:0;23476:81;;;-1:-1:-1;;;23476:81:0;;23505:10;23476:81;;;;23525:4;23476:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23419:46;;-1:-1:-1;;;;;;23476:28:0;;;;;:81;;;;;-1:-1:-1;;23476:81:0;;;;;;;;-1:-1:-1;23476:28:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;23476:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23476:81:0;;;;23580:133;23642:5;23649:9;23660:14;23676:12;23690:2;23694:8;23580:47;:133::i;:::-;23568:145;23001:720;-1:-1:-1;;;;;;;;;;;;;23001:720:0:o;30421:716::-;30655:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;30676:140:::1;30722:4;;30727:1;30722:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30722:7:0::1;30731:10;30743:52;30769:7;30778:4;;30783:1;30778:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30778:7:0::1;30787:4;;30792:1;30787:7;;;;;;30743:52;30797:8;30676:31;:140::i;:::-;30827:18;30855:4:::0;;-1:-1:-1;;30860:15:0;;30855:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30855:21:0::1;-1:-1:-1::0;;;;;30848:39:0::1;;30888:2;30848:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30848:43:0::1;-1:-1:-1::0;;;;;30848:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30848:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30848:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30848:43:0;30902:44:::1;::::0;;30848:43:::1;30902:44:::0;;::::1;::::0;;;;;;;;;;;30848:43;;-1:-1:-1;30902:44:0::1;::::0;;;30937:4;;;;;;30902:44;::::1;::::0;30937:4;;30902:44;30937:4;30902:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30943:2:0;;-1:-1:-1;30902:34:0::1;::::0;-1:-1:-1;;30902:44:0:i:1;:::-;31045:12:::0;30979:62:::1;31027:13:::0;30986:4;;-1:-1:-1;;30991:15:0;;30986:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30986:21:0::1;-1:-1:-1::0;;;;;30979:39:0::1;;31019:2;30979:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30979:43:0::1;-1:-1:-1::0;;;;;30979:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30979:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30979:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30979:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;30957:172;;;;-1:-1:-1::0;;;30957:172:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15832:1;30421:716:::0;;;;;;;:::o;32002:846::-;32269:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32328:4:0::1;32303:29;:4:::0;;-1:-1:-1;;32308:15:0;;32303:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32303:21:0::1;-1:-1:-1::0;;;;;32303:29:0::1;;32295:72;;;::::0;;-1:-1:-1;;;32295:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32295:72:0;;;;;;;;;;;;;::::1;;32378:140;32424:4;;32429:1;32424:7;;;;;;32378:140;32529:55;32564:4;;32529:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32578:4:0::1;::::0;-1:-1:-1;32529:34:0::1;::::0;-1:-1:-1;;32529:55:0:i:1;:::-;32612:37;::::0;;-1:-1:-1;;;32612:37:0;;32643:4:::1;32612:37;::::0;::::1;::::0;;;32595:14:::1;::::0;-1:-1:-1;;;;;32619:4:0::1;32612:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32612:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32612:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32612:37:0;;-1:-1:-1;32668:25:0;;::::1;;32660:82;;;;-1:-1:-1::0;;;32660:82:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32759:4;-1:-1:-1::0;;;;;32753:20:0::1;;32774:9;32753:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32753:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32753:31:0;;;;32795:45;32826:2;32830:9;32795:30;:45::i;25829:701::-:0;26045:21;26017:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;26103:4:::1;-1:-1:-1::0;;;;;26092:15:0::1;:4;;26097:1;26092:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26092:7:0::1;-1:-1:-1::0;;;;;26092:15:0::1;;26084:58;;;::::0;;-1:-1:-1;;;26084:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26084:58:0;;;;;;;;;;;;;::::1;;26163:57;26195:7;26204:9;26215:4;;26163:57;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26163:31:0::1;::::0;-1:-1:-1;;;26163:57:0:i:1;:::-;26153:67;;26270:12;26239:7;26264:1;26247:7;:14;:18;26239:27;;;;;;;;;;;;;;:43;;26231:100;;;;-1:-1:-1::0;;;26231:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26348:4;-1:-1:-1::0;;;;;26342:19:0::1;;26369:7;26377:1;26369:10;;;;;;;;;;;;;;26342:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26342:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26342:40:0;;;;;26406:4;-1:-1:-1::0;;;;;26400:20:0::1;;26421:52;26447:7;26456:4;;26461:1;26456:7;;;;;;26421:52;26475:7;26483:1;26475:10;;;;;;;;;;;;;;26400:86;;;;;;;;;;;;;-1:-1:-1::0;;;;;26400:86:0::1;-1:-1:-1::0;;;;;26400:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26400:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26400:86:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26400:86:0;26393:94:::1;;;;26498:24;26504:7;26513:4;;26498:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26519:2:0;;-1:-1:-1;26498:5:0::1;::::0;-1:-1:-1;;26498:24:0:i:1;:::-;25829:701:::0;;;;;;;;:::o;33360:262::-;33513:13;33551:63;33581:9;33592;33603:10;33551:29;:63::i;25214:609::-;25438:21;25419:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;25482:56:::1;25513:7;25522:9;25533:4;;25482:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25482:30:0::1;::::0;-1:-1:-1;;;25482:56:0:i:1;:::-;25472:66;;25571:11;25557:7;25565:1;25557:10;;;;;;;;;;;;;;:25;;25549:78;;;;-1:-1:-1::0;;;25549:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15667:38:::0;;;:::o;32892:189::-;32989:12;33021:52;33045:7;33054:8;33064;33021:23;:52::i;22295:700::-;22561:14;22542:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;22604:196:::1;22634:5;22654:4;22673:9;22697:14;22726:12;22761:4;22781:8;22604:15;:196::i;:::-;22850:38;::::0;;-1:-1:-1;;;22850:38:0;;22882:4:::1;22850:38;::::0;::::1;::::0;;;22588:212;;-1:-1:-1;22811:78:0::1;::::0;-1:-1:-1;22839:5:0;;22846:2;;-1:-1:-1;;;;;22850:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22850:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22850:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22850:38:0;22811:27:::1;:78::i;:::-;22906:4;-1:-1:-1::0;;;;;22900:20:0::1;;22921:9;22900:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22900:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22900:31:0;;;;22942:45;22973:2;22977:9;22942:30;:45::i;31143:853::-:0;31403:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;31448:4:::1;-1:-1:-1::0;;;;;31437:15:0::1;:4;;31442:1;31437:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31437:7:0::1;-1:-1:-1::0;;;;;31437:15:0::1;;31429:58;;;::::0;;-1:-1:-1;;;31429:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31429:58:0;;;;;;;;;;;;;::::1;;31498:13;31514:9;31498:25;;31540:4;-1:-1:-1::0;;;;;31534:19:0::1;;31561:8;31534:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31534:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31534:38:0;;;;;31596:4;-1:-1:-1::0;;;;;31590:20:0::1;;31611:52;31637:7;31646:4;;31651:1;31646:7;;;;;;31611:52;31665:8;31590:84;;;;;;;;;;;;;-1:-1:-1::0;;;;;31590:84:0::1;-1:-1:-1::0;;;;;31590:84:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31590:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31590:84:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31590:84:0;31583:92:::1;;;;31686:18;31714:4:::0;;-1:-1:-1;;31719:15:0;;31714:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31714:21:0::1;-1:-1:-1::0;;;;;31707:39:0::1;;31747:2;31707:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31707:43:0::1;-1:-1:-1::0;;;;;31707:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31707:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31707:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31707:43:0;31761:44:::1;::::0;;31707:43:::1;31761:44:::0;;::::1;::::0;;;;;;;;;;;31707:43;;-1:-1:-1;31761:44:0::1;::::0;;;31796:4;;;;;;31761:44;::::1;::::0;31796:4;;31761:44;31796:4;31761:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31802:2:0;;-1:-1:-1;31761:34:0::1;::::0;-1:-1:-1;;31761:44:0:i:1;:::-;31904:12:::0;31838:62:::1;31886:13:::0;31845:4;;-1:-1:-1;;31850:15:0;;31845:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31845:21:0::1;-1:-1:-1::0;;;;;31838:39:0::1;;31878:2;31838:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31838:43:0::1;-1:-1:-1::0;;;;;31838:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19304:871:0::0;19558:12;19572;19539:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;19597:12:::1;19612:50;19638:7;19647:6;19655;19612:25;:50::i;:::-;19673:63;::::0;;-1:-1:-1;;;19673:63:0;;19708:10:::1;19673:63;::::0;::::1;::::0;-1:-1:-1;;;;;19673:34:0;::::1;:63:::0;;;;;;;;;;;;;;19597:65;;-1:-1:-1;19673:34:0;;::::1;::::0;:63;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;19673:34:0;:63;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19673:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19673:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;19804:30:0::1;::::0;;-1:-1:-1;;;19804:30:0;;-1:-1:-1;;;;;19804:30:0;;::::1;;::::0;::::1;::::0;;;19774:12:::1;::::0;;;19804:26;;::::1;::::0;::::1;::::0;:30;;;;;;;;;;;19774:12;19804:26;:30;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19804:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19804:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19804:30:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19804:30:0;-1:-1:-1;19846:14:0::1;19865:44;19894:6:::0;19902;19865:28:::1;:44::i;:::-;19845:64;;;19951:6;-1:-1:-1::0;;;;;19941:16:0::1;:6;-1:-1:-1::0;;;;;19941:16:0::1;;:58;;19982:7;19991;19941:58;;;19961:7;19970;19941:58;19920:79:::0;;-1:-1:-1;19920:79:0;-1:-1:-1;20018:21:0;;::::1;;20010:73;;;;-1:-1:-1::0;;;20010:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20113:10;20102:7;:21;;20094:73;;;;-1:-1:-1::0;;;20094:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15832:1;;;;19304:871:::0;;;;;;;;;;;:::o;15619:41::-;;;:::o;33630:254::-;33774:21;33820:56;33852:7;33861:8;33871:4;33820:31;:56::i;21545:671::-;21834:16;21852:14;21879:12;21894:47;21920:7;21929:5;21936:4;21894:25;:47::i;:::-;21879:62;;21952:10;21965;:33;;21989:9;21965:33;;;-1:-1:-1;;21965:33:0;22009:81;;;-1:-1:-1;;;22009:81:0;;22038:10;22009:81;;;;22058:4;22009:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21952:46;;-1:-1:-1;;;;;;22009:28:0;;;;;:81;;;;;-1:-1:-1;;22009:81:0;;;;;;;;-1:-1:-1;22009:28:0;:81;;;2:2:-1;;;;27:1;24;17:12;2:2;22009:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22009:81:0;;;;22128:80;22147:5;22154:9;22165:14;22181:12;22195:2;22199:8;22128:18;:80::i;:::-;22101:107;;;;-1:-1:-1;21545:671:0;-1:-1:-1;;;;;;;;;;;;;21545:671:0:o;17539:740::-;17827:12;17841;17855:14;17808:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;17903:85:::1;17917:6;17925;17933:14;17949;17965:10;17977;17903:13;:85::i;:::-;17882:106:::0;;-1:-1:-1;17882:106:0;-1:-1:-1;17999:12:0::1;18014:50;18040:7;18049:6:::0;18057;18014:25:::1;:50::i;:::-;17999:65;;18075:66;18107:6;18115:10;18127:4;18133:7;18075:31;:66::i;:::-;18152;18184:6;18192:10;18204:4;18210:7;18152:31;:66::i;:::-;18257:4;-1:-1:-1::0;;;;;18241:26:0::1;;18268:2;18241:30;;;;;;;;;;;;;-1:-1:-1::0;;;;;18241:30:0::1;-1:-1:-1::0;;;;;18241:30:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18241:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18241:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18241:30:0;17539:740;;;;-1:-1:-1;18241:30:0;;-1:-1:-1;17539:740:0;;-1:-1:-1;;;;;;;;;17539:740:0:o;18285:976::-;18538:16;18556:14;18572;18519:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;18626:176:::1;18654:5;18674:4;18693:18;18726:9;18750:14;18779:12;18626:13;:176::i;:::-;18599:203:::0;;-1:-1:-1;18599:203:0;-1:-1:-1;18813:12:0::1;18828:47;18854:7;18863:5:::0;18870:4:::1;18828:25;:47::i;:::-;18813:62;;18886:69;18918:5;18925:10;18937:4;18943:11;18886:31;:69::i;:::-;18972:4;-1:-1:-1::0;;;;;18966:19:0::1;;18993:9;18966:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18966:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18966:39:0;;;;;19029:4;-1:-1:-1::0;;;;;19023:20:0::1;;19044:4;19050:9;19023:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19023:37:0::1;-1:-1:-1::0;;;;;19023:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19023:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19023:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19023:37:0;19016:45:::1;;;;19100:4;-1:-1:-1::0;;;;;19084:26:0::1;;19111:2;19084:30;;;;;;;;;;;;;-1:-1:-1::0;;;;;19084:30:0::1;-1:-1:-1::0;;;;;19084:30:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19084:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19084:30:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19084:30:0;;-1:-1:-1;19165:9:0::1;:21:::0;-1:-1:-1;19161:92:0::1;;;19188:65;19219:10;19243:9;19231;:21;19188:30;:65::i;:::-;15832:1;18285:976:::0;;;;;;;;;;;:::o;28234:814::-;28447:21;28419:8;15776:15;15764:8;:27;;15756:65;;;;;-1:-1:-1;;;15756:65:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15756:65:0;;;;;;;;;;;;;;;28505:4:::1;-1:-1:-1::0;;;;;28494:15:0::1;:4;;28499:1;28494:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28494:7:0::1;-1:-1:-1::0;;;;;28494:15:0::1;;28486:58;;;::::0;;-1:-1:-1;;;28486:58:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28486:58:0;;;;;;;;;;;;;::::1;;28565:56;28596:7;28605:9;28616:4;;28565:56;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28565:30:0::1;::::0;-1:-1:-1;;;28565:56:0:i:1;:::-;28555:66;;28654:9;28640:7;28648:1;28640:10;;;;;;;;;;;;;;:23;;28632:76;;;;-1:-1:-1::0;;;28632:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28725:4;-1:-1:-1::0;;;;;28719:19:0::1;;28746:7;28754:1;28746:10;;;;;;;;;;;;;;28719:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28719:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28719:40:0;;;;;28783:4;-1:-1:-1::0;;;;;28777:20:0::1;;28798:52;28824:7;28833:4;;28838:1;28833:7;;;;;;28798:52;28852:7;28860:1;28852:10;;;;;;;;;;;;;;28777:86;;;;;;;;;;;;;-1:-1:-1::0;;;;;28777:86:0::1;-1:-1:-1::0;;;;;28777:86:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28777:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28777:86:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28777:86:0;28770:94:::1;;;;28875:24;28881:7;28890:4;;28875:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28896:2:0;;-1:-1:-1;28875:5:0::1;::::0;-1:-1:-1;;28875:24:0:i:1;:::-;28962:7;28970:1;28962:10;;;;;;;;;;;;;;28950:9;:22;28946:94;;;28974:66;29005:10;29029:7;29037:1;29029:10;;;;;;;;;;;;;;29017:9;:22;28974:30;:66::i;1225:361::-:0;1420:45;;;-1:-1:-1;;;;;1420:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1420:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1409:57:0;;;;1374:12;;1388:17;;1409:10;;;;1420:45;1409:57;;;25:18:-1;1409:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1409:57:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1373:93:0;;;;1485:7;:57;;;;-1:-1:-1;1497:11:0;;:16;;:44;;;1528:4;1517:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1517:24:0;1497:44;1477:101;;;;;-1:-1:-1;;;1477:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1225:361;;;;;:::o;2004:195::-;2112:12;;;2074;2112;;;;;;;;;-1:-1:-1;;;;;2091:7:0;;;2105:5;;2091:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2091:34:0;;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;2073:52:0;;;2144:7;2136:55;;;;-1:-1:-1;;;2136:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2004:195;;;:::o;12211:519::-;12304:14;12350:1;12339:8;:12;12331:69;;;;-1:-1:-1;;;12331:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12431:1;12419:9;:13;:31;;;;;12449:1;12436:10;:14;12419:31;12411:85;;;;-1:-1:-1;;;12411:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12507:20;12530:17;:8;12543:3;12530:17;:12;:17;:::i;:::-;12507:40;-1:-1:-1;12558:14:0;12575:31;12507:40;12595:10;12575:31;:19;:31;:::i;:::-;12558:48;-1:-1:-1;12617:16:0;12636:40;12660:15;12636:19;:9;12650:4;12636:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;12617:59;;12711:11;12699:9;:23;;;;;;;12211:519;-1:-1:-1;;;;;;;12211:519:0:o;13407:512::-;13508:21;13565:1;13550:4;:11;:16;;13542:60;;;;;-1:-1:-1;;;13542:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13634:4;:11;13623:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13623:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13623:23:0;;13613:33;;13670:8;13657:7;13665:1;13657:10;;;;;;;;;;;;;:21;;;;;13694:6;13689:223;13720:1;13706:4;:11;:15;13702:1;:19;13689:223;;;13744:14;13760:15;13779:42;13791:7;13800:4;13805:1;13800:7;;;;;;;;;;;;;;13809:4;13814:1;13818;13814:5;13809:11;;;;;;;;;;;;;;13779;:42::i;:::-;13743:78;;;;13853:47;13866:7;13874:1;13866:10;;;;;;;;;;;;;;13878:9;13889:10;13853:12;:47::i;:::-;13836:7;13844:1;13848;13844:5;13836:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;13723:3:0;;13689:223;;;;13407:512;;;;;:::o;10682:478::-;10771:12;10797:14;10813;10831:26;10842:6;10850;10831:10;:26::i;:::-;10995:32;;;-1:-1:-1;;10995:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;10995:32:0;;;;;10985:43;;;;;;-1:-1:-1;;;;;;10898:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10898:251:0;;;;;;;10888:262;;;;;;;;;10682:478;-1:-1:-1;;;;;10682:478:0:o;1594:402::-;1819:51;;;-1:-1:-1;;;;;1819:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1819:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1808:63:0;;;;1773:12;;1787:17;;1808:10;;;;1819:51;1808:63;;;25:18:-1;1808:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1808:63:0;;;;;;;;;;;;;;;;;;;;;;;;12:1:-1;19;14:27;;;;67:4;61:11;56:16;;134:4;130:9;123:4;105:16;101:27;97:43;94:1;90:51;84:4;77:65;157:16;154:1;147:27;211:16;208:1;201:4;198:1;194:12;179:49;5:228;;14:27;32:4;27:9;;5:228;;1772:99:0;;;;1890:7;:57;;;;-1:-1:-1;1902:11:0;;:16;;:44;;;1933:4;1922:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1922:24:0;1902:44;1882:106;;;;-1:-1:-1;;;1882:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1594:402;;;;;;:::o;23832:739::-;23939:6;23934:630;23965:1;23951:4;:11;:15;23947:1;:19;23934:630;;;23989:13;24004:14;24023:4;24028:1;24023:7;;;;;;;;;;;;;;24032:4;24037:1;24041;24037:5;24032:11;;;;;;;;;;;;;;23988:56;;;;24060:14;24079:43;24108:5;24115:6;24079:28;:43::i;:::-;24059:63;;;24137:14;24154:7;24162:1;24166;24162:5;24154:14;;;;;;;;;;;;;;24137:31;;24184:15;24201;24229:6;-1:-1:-1;;;;;24220:15:0;:5;-1:-1:-1;;;;;24220:15:0;;:61;;24262:9;24278:1;24220:61;;;24244:1;24248:9;24220:61;24183:98;;;;24296:10;24327:1;24313:4;:11;:15;24309:1;:19;:83;;24389:3;24309:83;;;24331:55;24357:7;24366:6;24374:4;24379:1;24383;24379:5;24374:11;;;;;;;;;;;;;;24331:25;:55::i;:::-;24296:96;;24423:49;24449:7;24458:5;24465:6;24423:25;:49::i;:::-;-1:-1:-1;;;;;24407:71:0;;24497:10;24509;24521:2;24535:1;24525:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24525:12:0;87:42:-1;143:17;;-1:-1;24525:12:0;;24407:145;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24407:145:0;-1:-1:-1;;;;;24407:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24407:145:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24407:145:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23968:3:0;;;;;-1:-1:-1;23934:630:0;;-1:-1:-1;;;;;;;;23934:630:0;;;23832:739;;;:::o;14000:533::-;14101:21;14158:1;14143:4;:11;:16;;14135:60;;;;;-1:-1:-1;;;14135:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14227:4;:11;14216:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14216:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14216:23:0;;14206:33;;14280:9;14250:7;14275:1;14258:7;:14;:18;14250:27;;;;;;;;;;;;;;;;;:39;14314:11;;-1:-1:-1;;14314:15:0;14300:226;14331:5;;14300:226;;14359:14;14375:15;14394:42;14406:7;14415:4;14424:1;14420;:5;14415:11;;;;;;;;;;;;;;14428:4;14433:1;14428:7;;;;;;;14394:42;14358:78;;;;14468:46;14480:7;14488:1;14480:10;;;;;;;;;;;;;;14492:9;14503:10;14468:11;:46::i;:::-;14451:7;14463:1;14459;:5;14451:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14338:3:0;14300:226;;29195:1220;29308:6;29303:1105;29334:1;29320:4;:11;:15;29316:1;:19;29303:1105;;;29358:13;29373:14;29392:4;29397:1;29392:7;;;;;;;;;;;;;;29401:4;29406:1;29410;29406:5;29401:11;;;;;;;;;;;;;;29357:56;;;;29429:14;29448:43;29477:5;29484:6;29448:28;:43::i;:::-;29428:63;;;29506:20;29545:49;29571:7;29580:5;29587:6;29545:25;:49::i;:::-;29506:89;;29610:16;29641:17;29729:13;29744;29762:4;-1:-1:-1;;;;;29762:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29762:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29762:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29762:18:0;;;;;;;-1:-1:-1;;;;;29728:52:0;;;;-1:-1:-1;29728:52:0;;-1:-1:-1;29796:17:0;;-1:-1:-1;;;;;29837:15:0;;;;;;;:61;;29879:8;29889;29837:61;;;29856:8;29866;29837:61;29795:103;;;;29927:56;29970:12;29934:5;-1:-1:-1;;;;;29927:23:0;;29959:4;29927:38;;;;;;;;;;;;;-1:-1:-1;;;;;29927:38:0;-1:-1:-1;;;;;29927:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;29927:56:0;29913:70;;30013:72;30044:11;30057:12;30071:13;30013:30;:72::i;:::-;29998:87;;29303:1105;;;;30116:15;30133;30161:6;-1:-1:-1;;;;;30152:15:0;:5;-1:-1:-1;;;;;30152:15:0;;:67;;30197:12;30216:1;30152:67;;;30176:1;30180:12;30152:67;30115:104;;;;30234:10;30265:1;30251:4;:11;:15;30247:1;:19;:83;;30327:3;30247:83;;;30269:55;30295:7;30304:6;30312:4;30317:1;30321;30317:5;30312:11;;;;;;;30269:55;30383:12;;;30393:1;30383:12;;;;;;;;;;-1:-1:-1;;;30345:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30345:51:0;;;;;;;;;;;;;;;;;;;;;;30234:96;;-1:-1:-1;30345:9:0;;;;;;30355:10;;30367;;30234:96;;30383:12;;30345:51;;;;;;;;30383:12;;30345:51;;;;30383:12;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;30345:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30345:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29337:3:0;;;;;-1:-1:-1;29303:1105:0;;-1:-1:-1;;;;;;;;;;29303:1105:0;9787:129;9871:5;;;9866:16;;;;9858:50;;;;;-1:-1:-1;;;9858:50:0;;;;;;;;;;;;-1:-1:-1;;;9858:50:0;;;;;;;;;;;;;;12851:474;12944:13;12990:1;12978:9;:13;12970:71;;;;-1:-1:-1;;;12970:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13072:1;13060:9;:13;:31;;;;;13090:1;13077:10;:14;13060:31;13052:85;;;;-1:-1:-1;;;13052:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13148:14;13165:34;13194:4;13165:24;:9;13179;13165:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13148:51;-1:-1:-1;13210:16:0;13229:34;13259:3;13229:25;:10;13244:9;13229:25;:14;:25;:::i;:34::-;13210:53;;13285:32;13315:1;13298:11;13286:9;:23;;;;;;;13285:32;:29;:32;:::i;:::-;13274:43;12851:474;-1:-1:-1;;;;;;12851:474:0:o;11766:323::-;11848:12;11891:1;11881:7;:11;11873:62;;;;-1:-1:-1;;;11873:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11965:1;11954:8;:12;:28;;;;;11981:1;11970:8;:12;11954:28;11946:82;;;;-1:-1:-1;;;11946:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12073:8;12049:21;:7;12061:8;12049:21;:11;:21;:::i;:::-;:32;;;;;;;11766:323;-1:-1:-1;;;;11766:323:0:o;10239:351::-;10314:14;10330;10375:6;-1:-1:-1;;;;;10365:16:0;:6;-1:-1:-1;;;;;10365:16:0;;;10357:67;;;;-1:-1:-1;;;10357:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10463:6;-1:-1:-1;;;;;10454:15:0;:6;-1:-1:-1;;;;;10454:15:0;;:53;;10492:6;10500;10454:53;;;10473:6;10481;10454:53;10435:72;;-1:-1:-1;10435:72:0;-1:-1:-1;;;;;;10526:20:0;;10518:64;;;;;-1:-1:-1;;;10518:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10239:351;;;;;:::o;16136:1397::-;16449:51;;;-1:-1:-1;;;16449:51:0;;-1:-1:-1;;;;;16449:51:0;;;;;;;;;;;;;;;;16354:12;;;;;;16468:7;16449:35;;;;;;:51;;;;;;;;;;;;;;;:35;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;16449:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16449:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16449:51:0;-1:-1:-1;;;;;16449:65:0;;16445:152;;;16531:54;;;-1:-1:-1;;;16531:54:0;;-1:-1:-1;;;;;16531:54:0;;;;;;;;;;;;;;;;16550:7;16531:38;;;;;;:54;;;;;;;;;;;;;;;-1:-1:-1;16531:38:0;:54;;;2:2:-1;;;;27:1;24;17:12;2:2;16531:54:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16531:54:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16445:152:0;16608:13;16623;16640:54;16670:7;16679:6;16687;16640:29;:54::i;:::-;16607:87;;;;16709:8;16721:1;16709:13;:30;;;;-1:-1:-1;16726:13:0;;16709:30;16705:821;;;16778:14;;-1:-1:-1;16794:14:0;;-1:-1:-1;16705:821:0;;;16842:19;16864:59;16888:14;16904:8;16914;16864:23;:59::i;:::-;16842:81;;16960:14;16942;:32;16938:577;;17021:10;17003:14;:28;;16995:80;;;;-1:-1:-1;;;16995:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17116:14;;-1:-1:-1;17132:14:0;-1:-1:-1;17132:14:0;16938:577;;;17188:19;17210:59;17234:14;17250:8;17260;17210:23;:59::i;:::-;17188:81;;17313:14;17295;:32;;17288:40;;;;17373:10;17355:14;:28;;17347:80;;;;-1:-1:-1;;;17347:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17468:14;-1:-1:-1;17484:14:0;;-1:-1:-1;16938:577:0;16705:821;;16136:1397;;;;;;;;;;;:::o;9924:142::-;9976:6;10003;;;:30;;-1:-1:-1;;10018:5:0;;;10032:1;10027;10018:5;10027:1;10013:15;;;;;:20;10003:30;9995:63;;;;;-1:-1:-1;;;9995:63:0;;;;;;;;;;;;-1:-1:-1;;;9995:63:0;;;;;;;;;;;;;;9651:128;9735:5;;;9730:16;;;;9722:49;;;;;-1:-1:-1;;;9722:49:0;;;;;;;;;;;;-1:-1:-1;;;9722:49:0;;;;;;;;;;;;;;11218:435;11311:13;11326;11353:14;11372:26;11383:6;11391;11372:10;:26::i;:::-;11352:46;;;11409:32;11417:7;11426:6;11434;11409:7;:32::i;:::-;;11453:13;11468;11502:32;11510:7;11519:6;11527;11502:7;:32::i;:::-;-1:-1:-1;;;;;11486:61:0;;:63;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11486:63:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11486:63:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11486:63:0;;;;;;;-1:-1:-1;;;;;11452:97:0;;;;-1:-1:-1;11452:97:0;;-1:-1:-1;;;;;;11583:16:0;;;;;;;:62;;11626:8;11636;11583:62;;;11603:8;11613;11583:62;11560:85;;;;-1:-1:-1;11218:435:0;-1:-1:-1;;;;;;;11218:435:0:o

Swarm Source

ipfs://7e51ec9d55025e45c838e2a5d3e29a71fb45ff3239f75d85e27bda48a9da4f44
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.