Contract 0xbe65b8f75b9f20f4c522e0067a3887fada714800

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
Txn Hash
Block
From
To
Value [Txn Fee]
0x5ebe8a1df177c104590d15239ac491fd7810ad59d5df1d83636bb73941dd205d82587562021-06-13 10:15:031 min ago0xe960dec335db1540a46111a7303b9c126a767660 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.000905645
0x8c03ceb8f1f6d95a794431837799c4a1f1b01d69b7daecd0bdf0765281b0570f82587312021-06-13 10:13:482 mins ago0xed7e2df5ade5df81e7a09e497331ae205ba4222c IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148001 BNB0.000956295
0x2baa39d80bca766bbe76bfe60a68b92cc9da849170022dca976d0a4decf04e5f82587202021-06-13 10:13:093 mins ago0xed7e2df5ade5df81e7a09e497331ae205ba4222c IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.000618125
0xe2cef5bca78dc62d9ba5721e0dd09e96cd79264c90c74bacc78cdd0081195db082587112021-06-13 10:12:363 mins ago0xed7e2df5ade5df81e7a09e497331ae205ba4222c IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.001158945
0x4cc5568dc068909282e11180a1870e7d9a819fc5f3effe36931e54e267db198082587032021-06-13 10:12:094 mins ago0x607a13a18de0e832f3b311231b048b67f32a6b49 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148002.95 BNB0.001032445
0xb46f018a1b95b810666e9647987ef2303ddd62ab97409fe02998f88e9be0ea3282586752021-06-13 10:10:375 mins ago0x56788a2171f3416ecce2ba98f23b8fea7f988edf IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.001319
0x4fb975e22bf9f1f18426936d530fc70bc8c74cee810ffb74f0d730c1f3ff8a1882586412021-06-13 10:08:497 mins ago0xef32540c86d31cfee372cd3ff8d2a46ff8e25877 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000.748447973766011 BNB0.00090538
0x4c96b24f60924937f4aa07a9558425fb7baf61772c2aa156ec49bb4c94a1e85f82586332021-06-13 10:08:218 mins ago0x2091e4bdb4cf8b82306ea6a594f012310d1c209d IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000.10068413 BNB0.000957385
0xee77faa5b1270db63cbf7c9ec1f69bbdd3f9688fb46565faf4c70d40f8c8164e82586312021-06-13 10:08:158 mins ago0xef32540c86d31cfee372cd3ff8d2a46ff8e25877 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000.75 BNB0.001032445
0xcaf823e6846a1826f724c7909e73d35810f45177f83a111ab6a4ec9d58981d8a82586222021-06-13 10:07:468 mins ago0x1859f59a11c27b3fd1486cd259b6e3da901a0bbb IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.000987935
0x18273cbfbe88dfbd1c244b238715e0b982c69ae6888c8e632dde7892e5ca3e4f82586142021-06-13 10:07:199 mins ago0xdbdc27028228da5d2200e6be8c5a443772f98e47 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.000800385
0x1b54194f0ef2167a380bc689114bffeaede2cd1585c849aa9d5bccfbfe24c69a82586042021-06-13 10:06:459 mins ago0x53352fbf40d1117b18d5e73f00352839e1faea2a IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.00087716
0xdfbee23a2da4e72ef27090cf46ff562d7ec6bf8c272dc5082cd4e9c8d794f2ef82585862021-06-13 10:05:4310 mins ago0x4934638922ce2f489df336a0369e7e7ce811ca39 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.000887565
0xcf4731b3fd2550b268edab5b69d6694b12b8b1d85d1c5318ee00d8973c5f9bed82585832021-06-13 10:05:3410 mins ago0x4934638922ce2f489df336a0369e7e7ce811ca39 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000.04 BNB0.00067482
0xf6be38c30cac373c4423eaa5a303c6393db9e8dc13797cab28a69f3a4f63504a82585832021-06-13 10:05:3410 mins ago0x2e98b40f836841f18dfe7c2f1a581573f20477e1 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.000987815
0xb01af3f5d14eb6a33e56c781d6f374c7a64fe64c927ef66be737c399ba973e2d82585792021-06-13 10:05:1811 mins ago0x28df311388c70496f9f3ee2d15745e8d1540636d IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.000887685
0x3a73fb670df9d41adbde032d1c235d84e25eadb8ad7bb12e6c136b837aa111df82585772021-06-13 10:05:1111 mins ago0x56374f6103d3144e9e7382db0caa4cabaffec9b0 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000.115324414492799 BNB0.00115367
0x73f11a52ff1605dbf4cd5ee71665491bb5543dcffeb415bb86d7ceec9901965682585762021-06-13 10:05:0811 mins ago0xc6d76786a86b7f958aaf57794fddd25b6309e251 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.000962685
0x34c72fa0fac323fec52ff97d4d819ac223bd7a8a318a573398e620cd516ad3ff82585752021-06-13 10:05:0411 mins ago0x4934638922ce2f489df336a0369e7e7ce811ca39 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.000980645
0x7ad34c90de6db05b9622ade46919c0a7c76e201c326cc4bcad8950af5486be8682585722021-06-13 10:04:5211 mins ago0x14ff0bc9417b6796f79768729002a793b51205b8 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.00052818
0x40608ec879aa7338cc1793a51a167060bfaedb89947de51e51c600a6a46fb43582585702021-06-13 10:04:4611 mins ago0x1859f59a11c27b3fd1486cd259b6e3da901a0bbb IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.001037515
0x819ea264359bd27c755b3410c697ff72af24f9cffa5b0c7932223d2e124025fe82585642021-06-13 10:04:2612 mins ago0xcccc5812472846b6ac7b89380ba08b02a2102343 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148002.949491152366837 BNB0.000789785
0x04bd118c2cc70b97e674c8822418c7403d00e851fb735398941a65814bb3006c82585642021-06-13 10:04:2612 mins ago0xc6d76786a86b7f958aaf57794fddd25b6309e251 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.000905765
0x3799373b82c446f64ab8f6974755e9c72e3d0f8e84c09f321464255d5fe30be082585512021-06-13 10:03:3912 mins ago0x3876021d3b95adf70931f1b4c23083e34a02b3e9 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148000 BNB0.00052812
0x31941d27ee5c53e2566321345fe6fe930400872bf0ec76ec127eba6a36f79c3782585492021-06-13 10:03:3312 mins ago0xcccc5812472846b6ac7b89380ba08b02a2102343 IN  0xbe65b8f75b9f20f4c522e0067a3887fada7148002.957267484844004 BNB0.00060143
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x5ebe8a1df177c104590d15239ac491fd7810ad59d5df1d83636bb73941dd205d82587562021-06-13 10:15:031 min ago 0xbe65b8f75b9f20f4c522e0067a3887fada7148000xe960dec335db1540a46111a7303b9c126a7676600.071767358420620947 BNB
0x5ebe8a1df177c104590d15239ac491fd7810ad59d5df1d83636bb73941dd205d82587562021-06-13 10:15:031 min ago Binance: WBNB Token 0xbe65b8f75b9f20f4c522e0067a3887fada7148000.071767358420620947 BNB
0x8c03ceb8f1f6d95a794431837799c4a1f1b01d69b7daecd0bdf0765281b0570f82587312021-06-13 10:13:482 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 Binance: WBNB Token1 BNB
0x2baa39d80bca766bbe76bfe60a68b92cc9da849170022dca976d0a4decf04e5f82587202021-06-13 10:13:093 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada7148000xed7e2df5ade5df81e7a09e497331ae205ba4222c0.503739441836716226 BNB
0x2baa39d80bca766bbe76bfe60a68b92cc9da849170022dca976d0a4decf04e5f82587202021-06-13 10:13:093 mins ago Binance: WBNB Token 0xbe65b8f75b9f20f4c522e0067a3887fada7148000.503739441836716226 BNB
0xe2cef5bca78dc62d9ba5721e0dd09e96cd79264c90c74bacc78cdd0081195db082587112021-06-13 10:12:363 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada7148000xed7e2df5ade5df81e7a09e497331ae205ba4222c0.505290338867534639 BNB
0xe2cef5bca78dc62d9ba5721e0dd09e96cd79264c90c74bacc78cdd0081195db082587112021-06-13 10:12:363 mins ago Binance: WBNB Token 0xbe65b8f75b9f20f4c522e0067a3887fada7148000.505290338867534639 BNB
0x4cc5568dc068909282e11180a1870e7d9a819fc5f3effe36931e54e267db198082587032021-06-13 10:12:094 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 Binance: WBNB Token2.95 BNB
0x4fb975e22bf9f1f18426936d530fc70bc8c74cee810ffb74f0d730c1f3ff8a1882586412021-06-13 10:08:497 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 Binance: WBNB Token0.748447973766011537 BNB
0x4c96b24f60924937f4aa07a9558425fb7baf61772c2aa156ec49bb4c94a1e85f82586332021-06-13 10:08:218 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 Binance: WBNB Token0.10068413 BNB
0xee77faa5b1270db63cbf7c9ec1f69bbdd3f9688fb46565faf4c70d40f8c8164e82586312021-06-13 10:08:158 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 Binance: WBNB Token0.75 BNB
0xcf4731b3fd2550b268edab5b69d6694b12b8b1d85d1c5318ee00d8973c5f9bed82585832021-06-13 10:05:3410 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 Binance: WBNB Token0.04 BNB
0x3a73fb670df9d41adbde032d1c235d84e25eadb8ad7bb12e6c136b837aa111df82585772021-06-13 10:05:1111 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada7148000x56374f6103d3144e9e7382db0caa4cabaffec9b00.001027299718959265 BNB
0x3a73fb670df9d41adbde032d1c235d84e25eadb8ad7bb12e6c136b837aa111df82585772021-06-13 10:05:1111 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 Binance: WBNB Token0.11429711477384025 BNB
0x34c72fa0fac323fec52ff97d4d819ac223bd7a8a318a573398e620cd516ad3ff82585752021-06-13 10:05:0411 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada7148000x4934638922ce2f489df336a0369e7e7ce811ca390.045205058582414869 BNB
0x34c72fa0fac323fec52ff97d4d819ac223bd7a8a318a573398e620cd516ad3ff82585752021-06-13 10:05:0411 mins ago Binance: WBNB Token 0xbe65b8f75b9f20f4c522e0067a3887fada7148000.045205058582414869 BNB
0x819ea264359bd27c755b3410c697ff72af24f9cffa5b0c7932223d2e124025fe82585642021-06-13 10:04:2612 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 Binance: WBNB Token2.949491152366837628 BNB
0x04bd118c2cc70b97e674c8822418c7403d00e851fb735398941a65814bb3006c82585642021-06-13 10:04:2612 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada7148000xc6d76786a86b7f958aaf57794fddd25b6309e2511.78046264171057355 BNB
0x04bd118c2cc70b97e674c8822418c7403d00e851fb735398941a65814bb3006c82585642021-06-13 10:04:2612 mins ago Binance: WBNB Token 0xbe65b8f75b9f20f4c522e0067a3887fada7148001.78046264171057355 BNB
0x31941d27ee5c53e2566321345fe6fe930400872bf0ec76ec127eba6a36f79c3782585492021-06-13 10:03:3312 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 Binance: WBNB Token2.9572674848440044 BNB
0x25796f2c93e2d2dd6bb3dabb05598026d0ab1717193aceea9f3337c2f03d431682585332021-06-13 10:02:4513 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 Binance: WBNB Token2.99775 BNB
0xe1633c149aa8cf1c686a9144573a2a40a73af4e2487ec2f140a9b3ef2001d60a82585252021-06-13 10:02:2114 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada7148000x56374f6103d3144e9e7382db0caa4cabaffec9b00.001191919974501158 BNB
0xe1633c149aa8cf1c686a9144573a2a40a73af4e2487ec2f140a9b3ef2001d60a82585252021-06-13 10:02:2114 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada714800 Binance: WBNB Token0.132612724030340633 BNB
0x587f9982e8c8c05f124a7fd432b90ec7d4b388ef2fb7dda3fc6a3383d9a7367f82585212021-06-13 10:02:0914 mins ago 0xbe65b8f75b9f20f4c522e0067a3887fada7148000xfd8d2eeb583321c44e952fe6ac56956040f680750.004984821748412371 BNB
0x587f9982e8c8c05f124a7fd432b90ec7d4b388ef2fb7dda3fc6a3383d9a7367f82585212021-06-13 10:02:0914 mins ago Binance: WBNB Token 0xbe65b8f75b9f20f4c522e0067a3887fada7148000.004984821748412371 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
JetswapRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-05-03
*/

pragma solidity =0.6.6;

interface IJetswapFactory {
    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 IJetswapRouter01 {
    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 IJetswapRouter02 is IJetswapRouter01 {
    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 IJetswapPair {
    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 JetswapLibrary {
    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, 'JetswapLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'JetswapLibrary: 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'3125d0a15fa7af49ce234ba1cf5f931bad0504242e0e1ee9fcd7d1d7aa88c651' // 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,) = IJetswapPair(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, 'JetswapLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'JetswapLibrary: 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, 'JetswapLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'JetswapLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(997);
        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, 'JetswapLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'JetswapLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(1000);
        uint denominator = reserveOut.sub(amountOut).mul(997);
        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, 'JetswapLibrary: 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, 'JetswapLibrary: 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 JetswapRouter is IJetswapRouter02 {
    using SafeMath for uint;

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

    modifier ensure(uint deadline) {
        require(deadline >= block.timestamp, 'JetswapRouter: 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 (IJetswapFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IJetswapFactory(factory).createPair(tokenA, tokenB);
        }
        (uint reserveA, uint reserveB) = JetswapLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint amountBOptimal = JetswapLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'JetswapRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint amountAOptimal = JetswapLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'JetswapRouter: 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 = JetswapLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IJetswapPair(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 = JetswapLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWETH(WETH).deposit{value: amountETH}();
        assert(IWETH(WETH).transfer(pair, amountETH));
        liquidity = IJetswapPair(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 = JetswapLibrary.pairFor(factory, tokenA, tokenB);
        IJetswapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint amount0, uint amount1) = IJetswapPair(pair).burn(to);
        (address token0,) = JetswapLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'JetswapRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'JetswapRouter: 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 = JetswapLibrary.pairFor(factory, tokenA, tokenB);
        uint value = approveMax ? uint(-1) : liquidity;
        IJetswapPair(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 = JetswapLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IJetswapPair(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 = JetswapLibrary.pairFor(factory, token, WETH);
        uint value = approveMax ? uint(-1) : liquidity;
        IJetswapPair(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,) = JetswapLibrary.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 ? JetswapLibrary.pairFor(factory, output, path[i + 2]) : _to;
            IJetswapPair(JetswapLibrary.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 = JetswapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'JetswapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, JetswapLibrary.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 = JetswapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'JetswapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, JetswapLibrary.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, 'JetswapRouter: INVALID_PATH');
        amounts = JetswapLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'JetswapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(JetswapLibrary.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, 'JetswapRouter: INVALID_PATH');
        amounts = JetswapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'JetswapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, JetswapLibrary.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, 'JetswapRouter: INVALID_PATH');
        amounts = JetswapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'JetswapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, JetswapLibrary.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, 'JetswapRouter: INVALID_PATH');
        amounts = JetswapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'JetswapRouter: EXCESSIVE_INPUT_AMOUNT');
        IWETH(WETH).deposit{value: amounts[0]}();
        assert(IWETH(WETH).transfer(JetswapLibrary.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,) = JetswapLibrary.sortTokens(input, output);
            IJetswapPair pair = IJetswapPair(JetswapLibrary.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 = JetswapLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
            address to = i < path.length - 2 ? JetswapLibrary.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, JetswapLibrary.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,
            'JetswapRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'JetswapRouter: INVALID_PATH');
        uint amountIn = msg.value;
        IWETH(WETH).deposit{value: amountIn}();
        assert(IWETH(WETH).transfer(JetswapLibrary.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,
            'JetswapRouter: 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, 'JetswapRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, JetswapLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'JetswapRouter: 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 JetswapLibrary.quote(amountA, reserveA, reserveB);
    }

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

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

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

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

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"}]

60c060405234801561001057600080fd5b5060405162004762380380620047628339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145dd620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b528061277952806129ec5280612a425280612a765280612aea5280612c8a5280612dcd5280612e55525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad528061250652806126fe5280612727528061275752806128c45280612a205280612d1d5280612e87528061372e52806137715280613a545280613bd3528061400352806140b1528061413152506145dd6000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a6126fc565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612720945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e0820135169061010081013590610120013561274d565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612861565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561299d565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c42565b6000808242811015610cde576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361312e565b50965096945050505050565b6000610dbe848484613226565b949350505050565b60608142811015610e0c576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b815260206004820152601b6024820152600080516020614483833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b81526004018080602001828103825260298152602001806145136029913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b0316613462565b85600081518110610fe657fe5b6020026020010151613522565b6110328287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061367f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161312e565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138c5565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f613462565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b81526004018080602001828103825260298152602001806145136029913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e88287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b606081428110156113b4576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b815260206004820152601b6024820152600080516020614483833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b815260040180806020018281038252602581526020018061455f6025913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a613522565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a49290918991899182918501908490808284376000920191909152508892506139fd915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d0816565b10156118935760405162461bcd60e51b81526004018080602001828103825260298152602001806145136029913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b815260206004820152601b6024820152600080516020614483833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c28585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139fd915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b81526004018080602001828103825260298152602001806145136029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261312e565b60608142811015611b67576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b815260206004820152601b6024820152600080516020614483833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061331692505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b81526004018080602001828103825260298152602001806145136029913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b5095945050505050565b6000610dbe848484613d58565b60608142811015611ec7576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b815260040180806020018281038252602581526020018061455f6025913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e48565b60008142811015611ff1576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612fc4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361312e565b8042811015612170576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b815260206004820152601b6024820152600080516020614483833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a9182918501908490808284376000920191909152508992506139fd915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c613462565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613ef4565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126ac5760405162461bcd60e51b81526004018080602001828103825260248152602001806143f06024913960400191505060405180910390fd5b898610156126eb5760405162461bcd60e51b81526004018080602001828103825260248152602001806143cc6024913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613316565b600080600061279d7f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613462565b90506000876127ac578c6127b0565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b5050505061284c8e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128aa576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b6128b88c8c8c8c8c8c613fd2565b909450925060006128ea7f00000000000000000000000000000000000000000000000000000000000000008e8e613462565b90506128f88d338388613522565b6129048c338387613522565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561295c57600080fd5b505af1158015612970573d6000803e3d6000fd5b505050506040513d602081101561298657600080fd5b5051949d939c50939a509198505050505050505050565b600080600083428110156129e6576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b612a148a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613fd2565b90945092506000612a667f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613462565b9050612a748b338388613522565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612acf57600080fd5b505af1158015612ae3573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b6857600080fd5b505af1158015612b7c573d6000803e3d6000fd5b505050506040513d6020811015612b9257600080fd5b5051612b9a57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612bf257600080fd5b505af1158015612c06573d6000803e3d6000fd5b505050506040513d6020811015612c1c57600080fd5b5051925034841015612c3457612c343385340361312e565b505096509650969350505050565b60608142811015612c88576040805162461bcd60e51b815260206004820152601660248201526000805160206144f3833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612cbf57fe5b905060200201356001600160a01b03166001600160a01b031614612d18576040805162461bcd60e51b815260206004820152601b6024820152600080516020614483833981519152604482015290519081900360640190fd5b612d767f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138c592505050565b91503482600081518110612d8657fe5b60200260200101511115612dcb5760405162461bcd60e51b815260040180806020018281038252602581526020018061455f6025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e0757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3a57600080fd5b505af1158015612e4e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612eb37f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612ec057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f1757600080fd5b505af1158015612f2b573d6000803e3d6000fd5b505050506040513d6020811015612f4157600080fd5b5051612f4957fe5b612f888287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061367f915050565b81600081518110612f9557fe5b6020026020010151341115611e6a57611e6a3383600081518110612fb557fe5b6020026020010151340361312e565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106130415780518252601f199092019160209182019101613022565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130a3576040519150601f19603f3d011682016040523d82523d6000602084013e6130a8565b606091505b50915091508180156130d65750805115806130d657508080602001905160208110156130d357600080fd5b50515b613127576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061317a5780518252601f19909201916020918201910161315b565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146131dc576040519150601f19603f3d011682016040523d82523d6000602084013e6131e1565b606091505b50509050806132215760405162461bcd60e51b815260040180806020018281038252602381526020018061453c6023913960400191505060405180910390fd5b505050565b60008084116132665760405162461bcd60e51b81526004018080602001828103825260298152602001806144376029913960400191505060405180910390fd5b6000831180156132765750600082115b6132b15760405162461bcd60e51b81526004018080602001828103825260268152602001806144cd6026913960400191505060405180910390fd5b60006132c5856103e563ffffffff61424616565b905060006132d9828563ffffffff61424616565b905060006132ff836132f3886103e863ffffffff61424616565b9063ffffffff6142a916565b905080828161330a57fe5b04979650505050505050565b606060028251101561336f576040805162461bcd60e51b815260206004820152601c60248201527f4a6574737761704c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561338757600080fd5b506040519080825280602002602001820160405280156133b1578160200160208202803683370190505b50905082816000815181106133c257fe5b60200260200101818152505060005b600183510381101561345a57600080613414878685815181106133f057fe5b602002602001015187866001018151811061340757fe5b60200260200101516142f8565b9150915061343684848151811061342757fe5b60200260200101518383613226565b84846001018151811061344557fe5b602090810291909101015250506001016133d1565b509392505050565b60008060006134718585613ef4565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f3125d0a15fa7af49ce234ba1cf5f931bad0504242e0e1ee9fcd7d1d7aa88c651609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135a75780518252601f199092019160209182019101613588565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613609576040519150601f19603f3d011682016040523d82523d6000602084013e61360e565b606091505b509150915081801561363c57508051158061363c575080806020019051602081101561363957600080fd5b50515b6136775760405162461bcd60e51b81526004018080602001828103825260248152602001806145846024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138bf5760008084838151811061369d57fe5b60200260200101518584600101815181106136b457fe5b60200260200101519150915060006136cc8383613ef4565b50905060008785600101815181106136e057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461370e57826000613712565b6000835b91509150600060028a51038810613729578861376a565b61376a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061375d57fe5b6020026020010151613462565b90506137977f00000000000000000000000000000000000000000000000000000000000000008888613462565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156137d4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561384557818101518382015260200161382d565b50505050905090810190601f1680156138725780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561389457600080fd5b505af11580156138a8573d6000803e3d6000fd5b505060019099019850613682975050505050505050565b50505050565b606060028251101561391e576040805162461bcd60e51b815260206004820152601c60248201527f4a6574737761704c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561393657600080fd5b50604051908082528060200260200182016040528015613960578160200160208202803683370190505b509050828160018351038151811061397457fe5b60209081029190910101528151600019015b801561345a576000806139b6878660018603815181106139a257fe5b602002602001015187868151811061340757fe5b915091506139d88484815181106139c957fe5b60200260200101518383613d58565b8460018503815181106139e757fe5b6020908102919091010152505060001901613986565b60005b600183510381101561322157600080848381518110613a1b57fe5b6020026020010151858460010181518110613a3257fe5b6020026020010151915091506000613a4a8383613ef4565b5090506000613a7a7f00000000000000000000000000000000000000000000000000000000000000008585613462565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613abb57600080fd5b505afa158015613acf573d6000803e3d6000fd5b505050506040513d6060811015613ae557600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b1b578284613b1e565b83835b91509150613b7c828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613b89868383613226565b945050505050600080856001600160a01b0316886001600160a01b031614613bb357826000613bb7565b6000835b91509150600060028c51038a10613bce578a613c02565b613c027f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061375d57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c8c578181015183820152602001613c74565b50505050905090810190601f168015613cb95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613cdb57600080fd5b505af1158015613cef573d6000803e3d6000fd5b50506001909b019a50613a009950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d985760405162461bcd60e51b815260040180806020018281038252602a8152602001806144a3602a913960400191505060405180910390fd5b600083118015613da85750600082115b613de35760405162461bcd60e51b81526004018080602001828103825260268152602001806144cd6026913960400191505060405180910390fd5b6000613e076103e8613dfb868863ffffffff61424616565b9063ffffffff61424616565b90506000613e216103e5613dfb868963ffffffff613d0816565b9050613e3e6001828481613e3157fe5b049063ffffffff6142a916565b9695505050505050565b6000808411613e885760405162461bcd60e51b81526004018080602001828103825260238152602001806144146023913960400191505060405180910390fd5b600083118015613e985750600082115b613ed35760405162461bcd60e51b81526004018080602001828103825260268152602001806144cd6026913960400191505060405180910390fd5b82613ee4858463ffffffff61424616565b81613eeb57fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f485760405162461bcd60e51b81526004018080602001828103825260238152602001806144606023913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f68578284613f6b565b83835b90925090506001600160a01b038216613fcb576040805162461bcd60e51b815260206004820152601c60248201527f4a6574737761704c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561404c57600080fd5b505afa158015614060573d6000803e3d6000fd5b505050506040513d602081101561407657600080fd5b50516001600160a01b0316141561412957604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156140fc57600080fd5b505af1158015614110573d6000803e3d6000fd5b505050506040513d602081101561412657600080fd5b50505b6000806141577f00000000000000000000000000000000000000000000000000000000000000008b8b6142f8565b91509150816000148015614169575080155b1561417957879350869250614239565b6000614186898484613e48565b90508781116141d957858110156141ce5760405162461bcd60e51b81526004018080602001828103825260248152602001806143cc6024913960400191505060405180910390fd5b889450925082614237565b60006141e6898486613e48565b9050898111156141f257fe5b878110156142315760405162461bcd60e51b81526004018080602001828103825260248152602001806143f06024913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806142615750508082028282828161425e57fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143078585613ef4565b509050614315868686613462565b50600080614324888888613462565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561435c57600080fd5b505afa158015614370573d6000803e3d6000fd5b505050506040513d606081101561438657600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143b95780826143bc565b81815b9099909850965050505050505056fe4a657473776170526f757465723a20494e53554646494349454e545f425f414d4f554e544a657473776170526f757465723a20494e53554646494349454e545f415f414d4f554e544a6574737761704c6962726172793a20494e53554646494349454e545f414d4f554e544a6574737761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e544a6574737761704c6962726172793a204944454e544943414c5f4144445245535345534a657473776170526f757465723a20494e56414c49445f5041544800000000004a6574737761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e544a6574737761704c6962726172793a20494e53554646494349454e545f4c49515549444954594a657473776170526f757465723a2045585049524544000000000000000000004a657473776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c45444a657473776170526f757465723a204558434553534956455f494e5055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220a115c14004b33c4ade36cd53616d0872caf6311a58151a56d9f6b3bf204a5be764736f6c634300060600330000000000000000000000000eb58e5c8aa63314ff5547289185cc4583dfcbd5000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

0000000000000000000000000eb58e5c8aa63314ff5547289185cc4583dfcbd5000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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


Deployed ByteCode Sourcemap

15443:18405:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15917:10;-1:-1:-1;;;;;15931:4:0;15917:18;;15910:26;;;;15443:18405;;12:1:-1;9;2:12;20033:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20033:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20033:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32800:260;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32800:260:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32800:260:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27154:842;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27154:842:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27154:842:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27154:842:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27154:842: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;27154:842:0;;-1:-1:-1;27154:842:0;-1:-1:-1;;;;;;27154:842: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;27154:842:0;;;;;;;;;;;;;;;;;33594:251;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33594:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33594:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33594:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33594:251: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;33594:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33594:251:0;;-1:-1:-1;33594:251:0;;-1:-1:-1;;;;;33594:251:0:i;20712:673::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20712:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20712:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24399:622::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24399:622:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24399:622:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24399:622:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24399:622: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;24399:622:0;;-1:-1:-1;24399:622:0;-1:-1:-1;;;;;;24399:622:0;;;;;;;;:::i;26328:820::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26328:820:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26328:820:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26328:820:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26328:820: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;26328:820:0;;-1:-1:-1;26328:820:0;-1:-1:-1;;;;;;26328:820:0;;;;;;;;:::i;22841:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22841:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22841:714:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30159:710::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30159:710:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30159:710:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30159:710:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30159:710: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;30159:710:0;;-1:-1:-1;30159:710:0;-1:-1:-1;;;;;;30159:710:0;;;;;;;;:::i;31725:837::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31725:837:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31725:837:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31725:837:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31725:837: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;31725:837:0;;-1:-1:-1;31725:837:0;-1:-1:-1;;;;;;31725:837:0;;;;;;;;:::i;25633:689::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25633:689:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25633:689:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25633:689: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;25633:689:0;;-1:-1:-1;25633:689:0;-1:-1:-1;;;;;;25633:689:0;;;;;;;;:::i;33068:259::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33068:259:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33068:259:0;;;;;;;;;;;;:::i;25027:600::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25027:600:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25027:600:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25027:600:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25027:600: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;25027:600:0;;-1:-1:-1;25027:600:0;-1:-1:-1;;;;;;25027:600:0;;;;;;;;:::i;15573:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15573:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;15573:38:0;;;;;;;;;;;;;;32606:186;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32606:186:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32606:186:0;;;;;;;;;;;;:::i;22135:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22135:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22135:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30875:844::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30875:844:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30875:844:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30875:844: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;30875:844:0;;-1:-1:-1;30875:844:0;-1:-1:-1;;;;;;30875:844:0;;;;;;;;:::i;19174:853::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19174:853:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19174:853:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15525:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15525:41:0;;;:::i;33335:251::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33335:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33335:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33335:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33335:251: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;33335:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33335:251:0;;-1:-1:-1;33335:251:0;;-1:-1:-1;;;;;33335:251:0:i;21391:665::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21391:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21391:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17421:734::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17421:734:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17421:734:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18161:970;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18161:970:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28002:802::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28002:802:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28002:802:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28002:802: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;28002:802:0;;-1:-1:-1;28002:802:0;-1:-1:-1;;;;;;28002:802:0;;;;;;;;:::i;20033:673::-;20270:16;20288:14;20251:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;20342:196:::1;20372:5;20392:4;20411:9;20435:14;20464:12;20499:4;20519:8;20342:15;:196::i;:::-;20315:223:::0;;-1:-1:-1;20315:223:0;-1:-1:-1;20549:51:0::1;20577:5:::0;20584:2;20315:223;20549:27:::1;:51::i;:::-;20617:4;-1:-1:-1::0;;;;;20611:20:0::1;;20632:9;20611:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20611:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20611:31:0;;;;20653:45;20684:2;20688:9;20653:30;:45::i;:::-;20033:673:::0;;;;;;;;;;:::o;32800:260::-;32953:14;32992:60;33020:8;33030:9;33041:10;32992:27;:60::i;:::-;32985:67;32800:260;-1:-1:-1;;;;32800:260:0:o;27154:842::-;27368:21;27340:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27440:4:0::1;27415:29;:4:::0;;-1:-1:-1;;27420:15:0;;27415:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27415:21:0::1;-1:-1:-1::0;;;;;27415:29:0::1;;27407:69;;;::::0;;-1:-1:-1;;;27407:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27407:69:0;;;;;;;;;;;;;::::1;;27497:53;27526:7;27535:8;27545:4;;27497:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27497:28:0::1;::::0;-1:-1:-1;;;27497:53:0:i:1;:::-;27487:63;;27600:12;27569:7;27594:1;27577:7;:14;:18;27569:27;;;;;;;;;;;;;;:43;;27561:97;;;;-1:-1:-1::0;;;27561:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27669:139;27715:4;;27720:1;27715:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27715:7:0::1;27724:10;27736:49;27759:7;27768:4;;27773:1;27768:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27768:7:0::1;27777:4;;27782:1;27777:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27777:7:0::1;27736:22;:49::i;:::-;27787:7;27795:1;27787:10;;;;;;;;;;;;;;27669:31;:139::i;:::-;27819:35;27825:7;27834:4;;27819:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27848:4:0::1;::::0;-1:-1:-1;27819:5:0::1;::::0;-1:-1:-1;;27819:35:0:i:1;:::-;27871:4;-1:-1:-1::0;;;;;27865:20:0::1;;27886:7;27911:1;27894:7;:14;:18;27886:27;;;;;;;;;;;;;;27865:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27865:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27865:49:0;;;;27925:63;27956:2;27960:7;27985:1;27968:7;:14;:18;27960:27;;;;;;;;;;;;;;27925:30;:63::i;:::-;27154:842:::0;;;;;;;;;:::o;33594:251::-;33738:21;33784:53;33812:7;33821:9;33832:4;33784:27;:53::i;:::-;33777:60;;33594:251;;;;;:::o;20712:673::-;21018:12;21032;21057;21072:47;21095:7;21104:6;21112;21072:22;:47::i;:::-;21057:62;;21130:10;21143;:33;;21167:9;21143:33;;;-1:-1:-1;;21143:33:0;21187:78;;;-1:-1:-1;;;21187:78:0;;21213:10;21187:78;;;;21233:4;21187:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21130:46;;-1:-1:-1;;;;;;21187:25:0;;;;;:78;;;;;-1:-1:-1;;21187:78:0;;;;;;;;-1:-1:-1;21187:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;21187:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21187:78:0;;;;21297:80;21313:6;21321;21329:9;21340:10;21352;21364:2;21368:8;21297:15;:80::i;:::-;21276:101;;;;;;;;20712:673;;;;;;;;;;;;;;;;:::o;24399:622::-;24623:21;24604:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;24667:53:::1;24696:7;24705:8;24715:4;;24667:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24667:28:0::1;::::0;-1:-1:-1;;;24667:53:0:i:1;:::-;24657:63;;24770:12;24739:7;24764:1;24747:7;:14;:18;24739:27;;;;;;;;;;;;;;:43;;24731:97;;;;-1:-1:-1::0;;;24731:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24839:139;24885:4;;24890:1;24885:7;;;;;;24839:139;24989:24;24995:7;25004:4;;24989:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25010:2:0;;-1:-1:-1;24989:5:0::1;::::0;-1:-1:-1;;24989:24:0:i:1;26328:820::-:0;26542:21;26514:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26614:4:0::1;26589:29;:4:::0;;-1:-1:-1;;26594:15:0;;26589:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26589:21:0::1;-1:-1:-1::0;;;;;26589:29:0::1;;26581:69;;;::::0;;-1:-1:-1;;;26581:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26581:69:0;;;;;;;;;;;;;::::1;;26671:53;26699:7;26708:9;26719:4;;26671:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26671:27:0::1;::::0;-1:-1:-1;;;26671:53:0:i:1;:::-;26661:63;;26757:11;26743:7;26751:1;26743:10;;;;;;;;;;;;;;:25;;26735:75;;;;-1:-1:-1::0;;;26735:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22841:714:::0;23159:14;23186:12;23201:44;23224:7;23233:5;23240:4;23201:22;:44::i;:::-;23186:59;;23256:10;23269;:33;;23293:9;23269:33;;;-1:-1:-1;;23269:33:0;23313:78;;;-1:-1:-1;;;23313:78:0;;23339:10;23313:78;;;;23359:4;23313:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23256:46;;-1:-1:-1;;;;;;23313:25:0;;;;;:78;;;;;-1:-1:-1;;23313:78:0;;;;;;;;-1:-1:-1;23313:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;23313:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23313:78:0;;;;23414:133;23476:5;23483:9;23494:14;23510:12;23524:2;23528:8;23414:47;:133::i;:::-;23402:145;22841:714;-1:-1:-1;;;;;;;;;;;;;22841:714:0:o;30159:710::-;30393:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;30414:137:::1;30460:4;;30465:1;30460:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30460:7:0::1;30469:10;30481:49;30504:7;30513:4;;30518:1;30513:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30513:7:0::1;30522:4;;30527:1;30522:7;;;;;;30481:49;30532:8;30414:31;:137::i;:::-;30562:18;30590:4:::0;;-1:-1:-1;;30595:15:0;;30590:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30590:21:0::1;-1:-1:-1::0;;;;;30583:39:0::1;;30623:2;30583:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30583:43:0::1;-1:-1:-1::0;;;;;30583:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30583:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30583:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30583:43:0;30637:44:::1;::::0;;30583:43:::1;30637:44:::0;;::::1;::::0;;;;;;;;;;;30583:43;;-1:-1:-1;30637:44:0::1;::::0;;;30672:4;;;;;;30637:44;::::1;::::0;30672:4;;30637:44;30672:4;30637:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30678:2:0;;-1:-1:-1;30637:34:0::1;::::0;-1:-1:-1;;30637:44:0:i:1;:::-;30780:12:::0;30714:62:::1;30762:13:::0;30721:4;;-1:-1:-1;;30726:15:0;;30721:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30721:21:0::1;-1:-1:-1::0;;;;;30714:39:0::1;;30754:2;30714:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30714:43:0::1;-1:-1:-1::0;;;;;30714:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30714:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30714:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30714:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;30692:169;;;;-1:-1:-1::0;;;30692:169:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15735:1;30159:710:::0;;;;;;;:::o;31725:837::-;31992:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32051:4:0::1;32026:29;:4:::0;;-1:-1:-1;;32031:15:0;;32026:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32026:21:0::1;-1:-1:-1::0;;;;;32026:29:0::1;;32018:69;;;::::0;;-1:-1:-1;;;32018:69:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32018:69:0;;;;;;;;;;;;;::::1;;32098:137;32144:4;;32149:1;32144:7;;;;;;32098:137;32246:55;32281:4;;32246:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32295:4:0::1;::::0;-1:-1:-1;32246:34:0::1;::::0;-1:-1:-1;;32246:55:0:i:1;:::-;32329:37;::::0;;-1:-1:-1;;;32329:37:0;;32360:4:::1;32329:37;::::0;::::1;::::0;;;32312:14:::1;::::0;-1:-1:-1;;;;;32336:4:0::1;32329:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32329:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32329:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32329:37:0;;-1:-1:-1;32385:25:0;;::::1;;32377:79;;;;-1:-1:-1::0;;;32377:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32473:4;-1:-1:-1::0;;;;;32467:20:0::1;;32488:9;32467:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32467:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32467:31:0;;;;32509:45;32540:2;32544:9;32509:30;:45::i;25633:689::-:0;25849:21;25821:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;25907:4:::1;-1:-1:-1::0;;;;;25896:15:0::1;:4;;25901:1;25896:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25896:7:0::1;-1:-1:-1::0;;;;;25896:15:0::1;;25888:55;;;::::0;;-1:-1:-1;;;25888:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25888:55:0;;;;;;;;;;;;;::::1;;25964:54;25993:7;26002:9;26013:4;;25964:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25964:28:0::1;::::0;-1:-1:-1;;;25964:54:0:i:1;:::-;25954:64;;26068:12;26037:7;26062:1;26045:7;:14;:18;26037:27;;;;;;;;;;;;;;:43;;26029:97;;;;-1:-1:-1::0;;;26029:97:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26143:4;-1:-1:-1::0;;;;;26137:19:0::1;;26164:7;26172:1;26164:10;;;;;;;;;;;;;;26137:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26137:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26137:40:0;;;;;26201:4;-1:-1:-1::0;;;;;26195:20:0::1;;26216:49;26239:7;26248:4;;26253:1;26248:7;;;;;;26216:49;26267:7;26275:1;26267:10;;;;;;;;;;;;;;26195:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;26195:83:0::1;-1:-1:-1::0;;;;;26195:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26195:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26195:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26195:83:0;26188:91:::1;;;;26290:24;26296:7;26305:4;;26290:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26311:2:0;;-1:-1:-1;26290:5:0::1;::::0;-1:-1:-1;;26290:24:0:i:1;:::-;25633:689:::0;;;;;;;;:::o;33068:259::-;33221:13;33259:60;33286:9;33297;33308:10;33259:26;:60::i;25027:600::-;25251:21;25232:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;25295:53:::1;25323:7;25332:9;25343:4;;25295:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25295:27:0::1;::::0;-1:-1:-1;;;25295:53:0:i:1;:::-;25285:63;;25381:11;25367:7;25375:1;25367:10;;;;;;;;;;;;;;:25;;25359:75;;;;-1:-1:-1::0;;;25359:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15573:38:::0;;;:::o;32606:186::-;32703:12;32735:49;32756:7;32765:8;32775;32735:20;:49::i;22135:700::-;22401:14;22382:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;22444:196:::1;22474:5;22494:4;22513:9;22537:14;22566:12;22601:4;22621:8;22444:15;:196::i;:::-;22690:38;::::0;;-1:-1:-1;;;22690:38:0;;22722:4:::1;22690:38;::::0;::::1;::::0;;;22428:212;;-1:-1:-1;22651:78:0::1;::::0;-1:-1:-1;22679:5:0;;22686:2;;-1:-1:-1;;;;;22690: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;22690:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22690:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22690:38:0;22651:27:::1;:78::i;:::-;22746:4;-1:-1:-1::0;;;;;22740:20:0::1;;22761:9;22740:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22740:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22740:31:0;;;;22782:45;22813:2;22817:9;22782:30;:45::i;30875:844::-:0;31135:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;31180:4:::1;-1:-1:-1::0;;;;;31169:15:0::1;:4;;31174:1;31169:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31169:7:0::1;-1:-1:-1::0;;;;;31169:15:0::1;;31161:55;;;::::0;;-1:-1:-1;;;31161:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31161:55:0;;;;;;;;;;;;;::::1;;31227:13;31243:9;31227:25;;31269:4;-1:-1:-1::0;;;;;31263:19:0::1;;31290:8;31263:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31263:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31263:38:0;;;;;31325:4;-1:-1:-1::0;;;;;31319:20:0::1;;31340:49;31363:7;31372:4;;31377:1;31372:7;;;;;;31340:49;31391:8;31319:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;31319:81:0::1;-1:-1:-1::0;;;;;31319:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31319:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31319:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31319:81:0;31312:89:::1;;;;31412:18;31440:4:::0;;-1:-1:-1;;31445:15:0;;31440:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31440:21:0::1;-1:-1:-1::0;;;;;31433:39:0::1;;31473:2;31433:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31433:43:0::1;-1:-1:-1::0;;;;;31433:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31433:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31433:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31433:43:0;31487:44:::1;::::0;;31433:43:::1;31487:44:::0;;::::1;::::0;;;;;;;;;;;31433:43;;-1:-1:-1;31487:44:0::1;::::0;;;31522:4;;;;;;31487:44;::::1;::::0;31522:4;;31487:44;31522:4;31487:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31528:2:0;;-1:-1:-1;31487:34:0::1;::::0;-1:-1:-1;;31487:44:0:i:1;:::-;31630:12:::0;31564:62:::1;31612:13:::0;31571:4;;-1:-1:-1;;31576:15:0;;31571:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31571:21:0::1;-1:-1:-1::0;;;;;31564:39:0::1;;31604:2;31564:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31564:43:0::1;-1:-1:-1::0;;;;;31564:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19174:853:0::0;19428:12;19442;19409:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;19467:12:::1;19482:47;19505:7;19514:6;19522;19482:22;:47::i;:::-;19540:60;::::0;;-1:-1:-1;;;19540:60:0;;19572:10:::1;19540:60;::::0;::::1;::::0;-1:-1:-1;;;;;19540:31:0;::::1;:60:::0;;;;;;;;;;;;;;19467:62;;-1:-1:-1;19540:31:0;;::::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;19540:31:0;:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19540:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19540:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;19668:27:0::1;::::0;;-1:-1:-1;;;19668:27:0;;-1:-1:-1;;;;;19668:27:0;;::::1;;::::0;::::1;::::0;;;19638:12:::1;::::0;;;19668:23;;::::1;::::0;::::1;::::0;:27;;;;;;;;;;;19638:12;19668:23;:27;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19668:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19668:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19668:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19668:27:0;-1:-1:-1;19707:14:0::1;19726:41;19752:6:::0;19760;19726:25:::1;:41::i;:::-;19706:61;;;19809:6;-1:-1:-1::0;;;;;19799:16:0::1;:6;-1:-1:-1::0;;;;;19799:16:0::1;;:58;;19840:7;19849;19799:58;;;19819:7;19828;19799:58;19778:79:::0;;-1:-1:-1;19778:79:0;-1:-1:-1;19876:21:0;;::::1;;19868:70;;;;-1:-1:-1::0;;;19868:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19968:10;19957:7;:21;;19949:70;;;;-1:-1:-1::0;;;19949:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15735:1;;;;19174:853:::0;;;;;;;;;;;:::o;15525:41::-;;;:::o;33335:251::-;33479:21;33525:53;33554:7;33563:8;33573:4;33525:28;:53::i;21391:665::-;21680:16;21698:14;21725:12;21740:44;21763:7;21772:5;21779:4;21740:22;:44::i;:::-;21725:59;;21795:10;21808;:33;;21832:9;21808:33;;;-1:-1:-1;;21808:33:0;21852:78;;;-1:-1:-1;;;21852:78:0;;21878:10;21852:78;;;;21898:4;21852:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21795:46;;-1:-1:-1;;;;;;21852:25:0;;;;;:78;;;;;-1:-1:-1;;21852:78:0;;;;;;;;-1:-1:-1;21852:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;21852:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21852:78:0;;;;21968:80;21987:5;21994:9;22005:14;22021:12;22035:2;22039:8;21968:18;:80::i;:::-;21941:107;;;;-1:-1:-1;21391:665:0;-1:-1:-1;;;;;;;;;;;;;21391:665:0:o;17421:734::-;17709:12;17723;17737:14;17690:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;17785:85:::1;17799:6;17807;17815:14;17831;17847:10;17859;17785:13;:85::i;:::-;17764:106:::0;;-1:-1:-1;17764:106:0;-1:-1:-1;17881:12:0::1;17896:47;17919:7;17928:6:::0;17936;17896:22:::1;:47::i;:::-;17881:62;;17954:66;17986:6;17994:10;18006:4;18012:7;17954:31;:66::i;:::-;18031;18063:6;18071:10;18083:4;18089:7;18031:31;:66::i;:::-;18133:4;-1:-1:-1::0;;;;;18120:23:0::1;;18144:2;18120:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;18120:27:0::1;-1:-1:-1::0;;;;;18120:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18120:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18120:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18120:27:0;17421:734;;;;-1:-1:-1;18120:27:0;;-1:-1:-1;17421:734:0;;-1:-1:-1;;;;;;;;;17421:734:0:o;18161:970::-;18414:16;18432:14;18448;18395:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;18502:176:::1;18530:5;18550:4;18569:18;18602:9;18626:14;18655:12;18502:13;:176::i;:::-;18475:203:::0;;-1:-1:-1;18475:203:0;-1:-1:-1;18689:12:0::1;18704:44;18727:7;18736:5:::0;18743:4:::1;18704:22;:44::i;:::-;18689:59;;18759:69;18791:5;18798:10;18810:4;18816:11;18759:31;:69::i;:::-;18845:4;-1:-1:-1::0;;;;;18839:19:0::1;;18866:9;18839:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18839:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18839:39:0;;;;;18902:4;-1:-1:-1::0;;;;;18896:20:0::1;;18917:4;18923:9;18896:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;18896:37:0::1;-1:-1:-1::0;;;;;18896:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18896:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18896:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18896:37:0;18889:45:::1;;;;18970:4;-1:-1:-1::0;;;;;18957:23:0::1;;18981:2;18957:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;18957:27:0::1;-1:-1:-1::0;;;;;18957:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18957:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18957:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18957:27:0;;-1:-1:-1;19035:9:0::1;:21:::0;-1:-1:-1;19031:92:0::1;;;19058:65;19089:10;19113:9;19101;:21;19058:30;:65::i;:::-;15735:1;18161:970:::0;;;;;;;;;;;:::o;28002:802::-;28215:21;28187:8;15682:15;15670:8;:27;;15662:62;;;;;-1:-1:-1;;;15662:62:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15662:62:0;;;;;;;;;;;;;;;28273:4:::1;-1:-1:-1::0;;;;;28262:15:0::1;:4;;28267:1;28262:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28262:7:0::1;-1:-1:-1::0;;;;;28262:15:0::1;;28254:55;;;::::0;;-1:-1:-1;;;28254:55:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28254:55:0;;;;;;;;;;;;;::::1;;28330:53;28358:7;28367:9;28378:4;;28330:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28330:27:0::1;::::0;-1:-1:-1;;;28330:53:0:i:1;:::-;28320:63;;28416:9;28402:7;28410:1;28402:10;;;;;;;;;;;;;;:23;;28394:73;;;;-1:-1:-1::0;;;28394:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28484:4;-1:-1:-1::0;;;;;28478:19:0::1;;28505:7;28513:1;28505:10;;;;;;;;;;;;;;28478:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28478:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28478:40:0;;;;;28542:4;-1:-1:-1::0;;;;;28536:20:0::1;;28557:49;28580:7;28589:4;;28594:1;28589:7;;;;;;28557:49;28608:7;28616:1;28608:10;;;;;;;;;;;;;;28536:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;28536:83:0::1;-1:-1:-1::0;;;;;28536:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28536:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28536:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28536:83:0;28529:91:::1;;;;28631:24;28637:7;28646:4;;28631:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28652:2:0;;-1:-1:-1;28631:5:0::1;::::0;-1:-1:-1;;28631:24:0:i:1;:::-;28718:7;28726:1;28718:10;;;;;;;;;;;;;;28706:9;:22;28702:94;;;28730:66;28761:10;28785:7;28793:1;28785:10;;;;;;;;;;;;;;28773:9;:22;28730:30;:66::i;1185:361::-:0;1380:45;;;-1:-1:-1;;;;;1380:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1380:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1369:57:0;;;;1334:12;;1348:17;;1369:10;;;;1380:45;1369:57;;;25:18:-1;1369: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;;;1369: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;;1333:93:0;;;;1445:7;:57;;;;-1:-1:-1;1457:11:0;;:16;;:44;;;1488:4;1477:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1477:24:0;1457:44;1437:101;;;;;-1:-1:-1;;;1437:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1185:361;;;;;:::o;1964:195::-;2072:12;;;2034;2072;;;;;;;;;-1:-1:-1;;;;;2051:7:0;;;2065:5;;2051: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;;;2051: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;;2033:52:0;;;2104:7;2096:55;;;;-1:-1:-1;;;2096:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1964:195;;;:::o;12141:513::-;12234:14;12280:1;12269:8;:12;12261:66;;;;-1:-1:-1;;;12261:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12358:1;12346:9;:13;:31;;;;;12376:1;12363:10;:14;12346:31;12338:82;;;;-1:-1:-1;;;12338:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12431:20;12454:17;:8;12467:3;12454:17;:12;:17;:::i;:::-;12431:40;-1:-1:-1;12482:14:0;12499:31;12431:40;12519:10;12499:31;:19;:31;:::i;:::-;12482:48;-1:-1:-1;12541:16:0;12560:40;12584:15;12560:19;:9;12574:4;12560:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;12541:59;;12635:11;12623:9;:23;;;;;;;12141:513;-1:-1:-1;;;;;;;12141:513:0:o;13325:509::-;13426:21;13483:1;13468:4;:11;:16;;13460:57;;;;;-1:-1:-1;;;13460:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13549:4;:11;13538:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13538:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13538:23:0;;13528:33;;13585:8;13572:7;13580:1;13572:10;;;;;;;;;;;;;:21;;;;;13609:6;13604:223;13635:1;13621:4;:11;:15;13617:1;:19;13604:223;;;13659:14;13675:15;13694:42;13706:7;13715:4;13720:1;13715:7;;;;;;;;;;;;;;13724:4;13729:1;13733;13729:5;13724:11;;;;;;;;;;;;;;13694;:42::i;:::-;13658:78;;;;13768:47;13781:7;13789:1;13781:10;;;;;;;;;;;;;;13793:9;13804:10;13768:12;:47::i;:::-;13751:7;13759:1;13763;13759:5;13751:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;13638:3:0;;13604:223;;;;13325:509;;;;;:::o;10621:478::-;10710:12;10736:14;10752;10770:26;10781:6;10789;10770:10;:26::i;:::-;10934:32;;;-1:-1:-1;;10934:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;10934:32:0;;;;;10924:43;;;;;;-1:-1:-1;;;;;;10837:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10837:251:0;;;;;;;10827:262;;;;;;;;;10621:478;-1:-1:-1;;;;;10621:478:0:o;1554:402::-;1779:51;;;-1:-1:-1;;;;;1779:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1779:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1768:63:0;;;;1733:12;;1747:17;;1768:10;;;;1779:51;1768:63;;;25:18:-1;1768: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;;;1768: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;;1732:99:0;;;;1850:7;:57;;;;-1:-1:-1;1862:11:0;;:16;;:44;;;1893:4;1882:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1882:24:0;1862:44;1842:106;;;;-1:-1:-1;;;1842:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1554:402;;;;;;:::o;23666:727::-;23773:6;23768:618;23799:1;23785:4;:11;:15;23781:1;:19;23768:618;;;23823:13;23838:14;23857:4;23862:1;23857:7;;;;;;;;;;;;;;23866:4;23871:1;23875;23871:5;23866:11;;;;;;;;;;;;;;23822:56;;;;23894:14;23913:40;23939:5;23946:6;23913:25;:40::i;:::-;23893:60;;;23968:14;23985:7;23993:1;23997;23993:5;23985:14;;;;;;;;;;;;;;23968:31;;24015:15;24032;24060:6;-1:-1:-1;;;;;24051:15:0;:5;-1:-1:-1;;;;;24051:15:0;;:61;;24093:9;24109:1;24051:61;;;24075:1;24079:9;24051:61;24014:98;;;;24127:10;24158:1;24144:4;:11;:15;24140:1;:19;:80;;24217:3;24140:80;;;24162:52;24185:7;24194:6;24202:4;24207:1;24211;24207:5;24202:11;;;;;;;;;;;;;;24162:22;:52::i;:::-;24127:93;;24248:46;24271:7;24280:5;24287:6;24248:22;:46::i;:::-;-1:-1:-1;;;;;24235:65:0;;24319:10;24331;24343:2;24357:1;24347:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24347:12:0;87:42:-1;143:17;;-1:-1;24347:12:0;;24235:139;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24235:139:0;-1:-1:-1;;;;;24235:139: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;24235:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24235:139:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23802:3:0;;;;;-1:-1:-1;23768:618:0;;-1:-1:-1;;;;;;;;23768:618:0;;;23666:727;;;:::o;13915:530::-;14016:21;14073:1;14058:4;:11;:16;;14050:57;;;;;-1:-1:-1;;;14050:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14139:4;:11;14128:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14128:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14128:23:0;;14118:33;;14192:9;14162:7;14187:1;14170:7;:14;:18;14162:27;;;;;;;;;;;;;;;;;:39;14226:11;;-1:-1:-1;;14226:15:0;14212:226;14243:5;;14212:226;;14271:14;14287:15;14306:42;14318:7;14327:4;14336:1;14332;:5;14327:11;;;;;;;;;;;;;;14340:4;14345:1;14340:7;;;;;;;14306:42;14270:78;;;;14380:46;14392:7;14400:1;14392:10;;;;;;;;;;;;;;14404:9;14415:10;14380:11;:46::i;:::-;14363:7;14375:1;14371;:5;14363:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14250:3:0;14212:226;;28951:1202;29064:6;29059:1087;29090:1;29076:4;:11;:15;29072:1;:19;29059:1087;;;29114:13;29129:14;29148:4;29153:1;29148:7;;;;;;;;;;;;;;29157:4;29162:1;29166;29162:5;29157:11;;;;;;;;;;;;;;29113:56;;;;29185:14;29204:40;29230:5;29237:6;29204:25;:40::i;:::-;29184:60;;;29259:17;29292:46;29315:7;29324:5;29331:6;29292:22;:46::i;:::-;29259:80;;29354:16;29385:17;29473:13;29488;29506:4;-1:-1:-1;;;;;29506:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29506:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29506:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29506:18:0;;;;;;;-1:-1:-1;;;;;29472:52:0;;;;-1:-1:-1;29472:52:0;;-1:-1:-1;29540:17:0;;-1:-1:-1;;;;;29581:15:0;;;;;;;:61;;29623:8;29633;29581:61;;;29600:8;29610;29581:61;29539:103;;;;29671:56;29714:12;29678:5;-1:-1:-1;;;;;29671:23:0;;29703:4;29671:38;;;;;;;;;;;;;-1:-1:-1;;;;;29671:38:0;-1:-1:-1;;;;;29671:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;29671:56:0;29657:70;;29757:69;29785:11;29798:12;29812:13;29757:27;:69::i;:::-;29742:84;;29059:1087;;;;29857:15;29874;29902:6;-1:-1:-1;;;;;29893:15:0;:5;-1:-1:-1;;;;;29893:15:0;;:67;;29938:12;29957:1;29893:67;;;29917:1;29921:12;29893:67;29856:104;;;;29975:10;30006:1;29992:4;:11;:15;29988:1;:19;:80;;30065:3;29988:80;;;30010:52;30033:7;30042:6;30050:4;30055:1;30059;30055:5;30050:11;;;;;;;30010:52;30121:12;;;30131:1;30121:12;;;;;;;;;;-1:-1:-1;;;30083:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30083:51:0;;;;;;;;;;;;;;;;;;;;;;29975:93;;-1:-1:-1;30083:9:0;;;;;;30093:10;;30105;;29975:93;;30121:12;;30083:51;;;;;;;;30121:12;;30083:51;;;;30121: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;30083:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30083:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29093:3:0;;;;;-1:-1:-1;29059:1087:0;;-1:-1:-1;;;;;;;;;;29059:1087:0;9735:129;9819:5;;;9814:16;;;;9806:50;;;;;-1:-1:-1;;;9806:50:0;;;;;;;;;;;;-1:-1:-1;;;9806:50:0;;;;;;;;;;;;;;12775:468;12868:13;12914:1;12902:9;:13;12894:68;;;;-1:-1:-1;;;12894:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12993:1;12981:9;:13;:31;;;;;13011:1;12998:10;:14;12981:31;12973:82;;;;-1:-1:-1;;;12973:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13066:14;13083:34;13112:4;13083:24;:9;13097;13083:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13066:51;-1:-1:-1;13128:16:0;13147:34;13177:3;13147:25;:10;13162:9;13147:25;:14;:25;:::i;:34::-;13128:53;;13203:32;13233:1;13216:11;13204:9;:23;;;;;;;13203:32;:29;:32;:::i;:::-;13192:43;12775:468;-1:-1:-1;;;;;;12775:468:0:o;11702:317::-;11784:12;11827:1;11817:7;:11;11809:59;;;;-1:-1:-1;;;11809:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11898:1;11887:8;:12;:28;;;;;11914:1;11903:8;:12;11887:28;11879:79;;;;-1:-1:-1;;;11879:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12003:8;11979:21;:7;11991:8;11979:21;:11;:21;:::i;:::-;:32;;;;;;;11702:317;-1:-1:-1;;;;11702:317:0:o;10184:345::-;10259:14;10275;10320:6;-1:-1:-1;;;;;10310:16:0;:6;-1:-1:-1;;;;;10310:16:0;;;10302:64;;;;-1:-1:-1;;;10302:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10405:6;-1:-1:-1;;;;;10396:15:0;:6;-1:-1:-1;;;;;10396:15:0;;:53;;10434:6;10442;10396:53;;;10415:6;10423;10396:53;10377:72;;-1:-1:-1;10377:72:0;-1:-1:-1;;;;;;10468:20:0;;10460:61;;;;;-1:-1:-1;;;10460:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10184:345;;;;;:::o;16039:1376::-;16352:48;;;-1:-1:-1;;;16352:48:0;;-1:-1:-1;;;;;16352:48:0;;;;;;;;;;;;;;;;16257:12;;;;;;16368:7;16352:32;;;;;;:48;;;;;;;;;;;;;;;:32;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;16352:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16352:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16352:48:0;-1:-1:-1;;;;;16352:62:0;;16348:146;;;16431:51;;;-1:-1:-1;;;16431:51:0;;-1:-1:-1;;;;;16431:51:0;;;;;;;;;;;;;;;;16447:7;16431:35;;;;;;:51;;;;;;;;;;;;;;;-1:-1:-1;16431:35:0;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;16431:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16431:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16348:146:0;16505:13;16520;16537:51;16564:7;16573:6;16581;16537:26;:51::i;:::-;16504:84;;;;16603:8;16615:1;16603:13;:30;;;;-1:-1:-1;16620:13:0;;16603:30;16599:809;;;16672:14;;-1:-1:-1;16688:14:0;;-1:-1:-1;16599:809:0;;;16736:19;16758:56;16779:14;16795:8;16805;16758:20;:56::i;:::-;16736:78;;16851:14;16833;:32;16829:568;;16912:10;16894:14;:28;;16886:77;;;;-1:-1:-1;;;16886:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17004:14;;-1:-1:-1;17020:14:0;-1:-1:-1;17020:14:0;16829:568;;;17076:19;17098:56;17119:14;17135:8;17145;17098:20;:56::i;:::-;17076:78;;17198:14;17180;:32;;17173:40;;;;17258:10;17240:14;:28;;17232:77;;;;-1:-1:-1;;;17232:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17350:14;-1:-1:-1;17366:14:0;;-1:-1:-1;16829:568:0;16599:809;;16039:1376;;;;;;;;;;;:::o;9872:142::-;9924:6;9951;;;:30;;-1:-1:-1;;9966:5:0;;;9980:1;9975;9966:5;9975:1;9961:15;;;;;:20;9951:30;9943:63;;;;;-1:-1:-1;;;9943:63:0;;;;;;;;;;;;-1:-1:-1;;;9943:63:0;;;;;;;;;;;;;;9599:128;9683:5;;;9678:16;;;;9670:49;;;;;-1:-1:-1;;;9670:49:0;;;;;;;;;;;;-1:-1:-1;;;9670:49:0;;;;;;;;;;;;;;11157:432;11250:13;11265;11292:14;11311:26;11322:6;11330;11311:10;:26::i;:::-;11291:46;;;11348:32;11356:7;11365:6;11373;11348:7;:32::i;:::-;;11392:13;11407;11438:32;11446:7;11455:6;11463;11438:7;:32::i;:::-;-1:-1:-1;;;;;11425:58:0;;:60;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11425:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11425:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11425:60:0;;;;;;;-1:-1:-1;;;;;11391:94:0;;;;-1:-1:-1;11391:94:0;;-1:-1:-1;;;;;;11519:16:0;;;;;;;:62;;11562:8;11572;11519:62;;;11539:8;11549;11519:62;11496:85;;;;-1:-1:-1;11157:432:0;-1:-1:-1;;;;;;;11157:432:0:o

Swarm Source

ipfs://a115c14004b33c4ade36cd53616d0872caf6311a58151a56d9f6b3bf204a5be7
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.