Contract 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac 1

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x434f0a4003d64be9f51c8d7c77486c5c53d7c0a2fcc79eefd7964925d262f9d1Add Liquidity ET...109753292021-09-16 21:44:142 hrs 26 mins ago0x2c32db62c8227a5f733a99ae817778781a766357 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.210904516159992 BNB0.00086121
0x8cc803ae15fe0cdf2e00730e7aa5cb5aff7f01c939559a81006631a1b97ed3fbSwap Exact ETH F...109753072021-09-16 21:43:082 hrs 27 mins ago0x2c32db62c8227a5f733a99ae817778781a766357 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.21 BNB0.00062626
0x14725d5b6d66f5f5b835e7d8c2dd85a4df254986e1fa42eb88b2eba3b19f4ebdSwap Exact Token...109748732021-09-16 21:21:262 hrs 48 mins ago0xc58196897479677598c2022ac665bc4ff02d77d5 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0 BNB0.00056802
0x16fe94e6bef3b6a1b14221e8ffe5cb17a175f9c4e132988d95f19e0954316c59Swap Exact Token...109743162021-09-16 20:53:353 hrs 16 mins ago0x23dd1605159dbf46d5a35e97ac6c611db8032528 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0 BNB0.00126517
0x4d1f52ade6209088c7f29eae3e3d9119e345b577854f86994478594847f7184eSwap Exact Token...109742902021-09-16 20:52:173 hrs 18 mins ago0x23dd1605159dbf46d5a35e97ac6c611db8032528 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0 BNB0.00056796
0xcdbdafc652f3e4fd7a7e5fb744fae54f3d1f60cd405002b8ff560cb299d63b34Remove Liquidity...109741352021-09-16 20:44:323 hrs 25 mins ago0x23dd1605159dbf46d5a35e97ac6c611db8032528 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0 BNB0.00104565
0x6fdb284f89a235f0872bea862be46903a18d065753dec68de328dcba9219c54eSwap Exact ETH F...109729662021-09-16 19:46:054 hrs 24 mins ago0x25d27cb6408fd7d7849f75256a7232b52790f5f8 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.01 BNB0.00054941
0xcf207f37e516b50db32ec3e8a709151acc477f119ddcccc69a04e74c3dcce306Swap Exact ETH F...109725522021-09-16 19:25:234 hrs 45 mins ago0x3084d1ef6f25b53bf766150c562f32a6c4bac0f7 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.404219021 BNB0.00062626
0xc33e743c98137720865fa8d677780ec0d4c71f9d3261e07bcc2b99add7c9c706Add Liquidity ET...109719602021-09-16 18:55:475 hrs 14 mins ago0x505e242d8a9e20254c6a1e56eee967e00f59dc3c IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.082529892072828 BNB0.00086121
0x452fa5721dcf416b44f7eb99af34688329dd7b1d2b424c5099b9023a591d81c2Swap Exact ETH F...109719502021-09-16 18:55:175 hrs 15 mins ago0x505e242d8a9e20254c6a1e56eee967e00f59dc3c IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.082514 BNB0.00055126
0x80c1da6e461c4239d10910ee84978616d704f8a55afff41f0506845d2a20bb56Swap Exact Token...109718702021-09-16 18:51:175 hrs 19 mins ago0x37a550fa31169e76d39d758e766f45541c793c49 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0 BNB0.00078831
0xf99fd29b840cb90339889c35de7b83141986bddb0b1e62adc674f45196db667dSwap Exact ETH F...109707612021-09-16 17:55:506 hrs 14 mins ago0x136966017abbb8258412a1ea30dbd84ee1c5714c IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.03 BNB0.00062626
0x87f3e53f3742284f0687fc68a10916ab60ffccfde9263b8baec080432256a8a5Swap Exact ETH F...109695482021-09-16 16:54:247 hrs 16 mins ago0xc58196897479677598c2022ac665bc4ff02d77d5 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.0128 BNB0.0005512
0x71e95e760588ce5ed8858acc2e26f0d1e870bccc521a846372158744a80fe508Swap Exact Token...109687682021-09-16 16:15:247 hrs 55 mins ago0xfa8d50cbabd18393a613e6e54ef842fec9014a06 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0 BNB0.00056802
0x0a574f9040d7a37c6f7e1381c3d240202259da03023130d8f37e0dee29f329a2Swap Exact ETH F...109686792021-09-16 16:10:577 hrs 59 mins ago0xc58196897479677598c2022ac665bc4ff02d77d5 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.05 BNB0.00062626
0xb78b17d248cddd87210f36a47a346f5edb12207ad7b7a67936dee704fa6dccebAdd Liquidity ET...109685082021-09-16 16:02:248 hrs 8 mins ago0x505e242d8a9e20254c6a1e56eee967e00f59dc3c IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.007009223355769 BNB0.00086103
0x1ce02480728b2c8534a3ccec000b7292d719aea41b63b9485ba8b61721eb2628Swap Exact ETH F...109684912021-09-16 16:01:338 hrs 8 mins ago0x505e242d8a9e20254c6a1e56eee967e00f59dc3c IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.007028559 BNB0.0006262
0x745dc0208522a2eb018b6b4b026834baf0feaec257d5df0d6f38bc9f3fad401bSwap Exact ETH F...109683302021-09-16 15:53:308 hrs 16 mins ago0xfa8d50cbabd18393a613e6e54ef842fec9014a06 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.05 BNB0.00062626
0x5efaae3d5724cd0cdf5afb82001609dacc1f1dd207bcbab13bb2b643602e9453Swap Exact Token...109673482021-09-16 15:04:089 hrs 6 mins ago0x951ea513992e4d331609c96f12c4c4ca85070f53 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0 BNB0.00056802
0x8912385bf9ed455b7673cc90e72217367b0522038a6c8c59b3af1e5c26d3c6f4Swap Exact Token...109671672021-09-16 14:54:599 hrs 15 mins ago0x763b8cd955f6d167af9c50cf96fa7b3e42099249 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0 BNB0.001094995
0xdf3120391c59d75c37b885b5366acb302fc069918b464fcf996e4d1610635fd4Add Liquidity ET...109618232021-09-16 10:26:3713 hrs 43 mins ago0x4f9ffc0fd01749258437e571a29d6921b5017b0a IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac4.059283680002602 BNB0.00084086
0x63ea36bb776787a4e9a994692bddee0d5177a45bd9e2c6341ab42a669050bb66Swap Exact ETH F...109595822021-09-16 8:33:5015 hrs 36 mins ago0xaaba35d7eaf99562cf25844a4f6bd7dd3b109e71 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.01 BNB0.0005512
0xc50819c41e1d70db204a74f84085ea5edfffbd0c13b57a007201d0ee2522e16dSwap Exact Token...109582512021-09-16 7:27:1716 hrs 43 mins ago0x705e31f53b9d4409069e2de05d89852543ab8357 IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0 BNB0.00086337
0x9fa895b70a30bd06b39e81c4e94b1692040aa26d13cec86e38dd2f83e48191b7Add Liquidity ET...109567922021-09-16 6:14:1817 hrs 56 mins ago0x505e242d8a9e20254c6a1e56eee967e00f59dc3c IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.006651296678701 BNB0.00086103
0x4a808ccf77bc321f298517f0a827e23ecc4186f4a333c8cea2b07ec7fbb92f90Swap Exact ETH F...109567352021-09-16 6:11:2717 hrs 58 mins ago0x505e242d8a9e20254c6a1e56eee967e00f59dc3c IN  0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.006669729802963 BNB0.0006262
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x434f0a4003d64be9f51c8d7c77486c5c53d7c0a2fcc79eefd7964925d262f9d1109753292021-09-16 21:44:142 hrs 26 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.210904516159992248 BNB
0x8cc803ae15fe0cdf2e00730e7aa5cb5aff7f01c939559a81006631a1b97ed3fb109753072021-09-16 21:43:082 hrs 27 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.21 BNB
0x14725d5b6d66f5f5b835e7d8c2dd85a4df254986e1fa42eb88b2eba3b19f4ebd109748732021-09-16 21:21:262 hrs 48 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0xc58196897479677598c2022ac665bc4ff02d77d50.064391643949621071 BNB
0x14725d5b6d66f5f5b835e7d8c2dd85a4df254986e1fa42eb88b2eba3b19f4ebd109748732021-09-16 21:21:262 hrs 48 mins ago Binance: WBNB Token 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.064391643949621071 BNB
0x16fe94e6bef3b6a1b14221e8ffe5cb17a175f9c4e132988d95f19e0954316c59109743162021-09-16 20:53:353 hrs 16 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0x23dd1605159dbf46d5a35e97ac6c611db80325280.021256558575768333 BNB
0x16fe94e6bef3b6a1b14221e8ffe5cb17a175f9c4e132988d95f19e0954316c59109743162021-09-16 20:53:353 hrs 16 mins ago Binance: WBNB Token 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.021256558575768333 BNB
0x4d1f52ade6209088c7f29eae3e3d9119e345b577854f86994478594847f7184e109742902021-09-16 20:52:173 hrs 18 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0x23dd1605159dbf46d5a35e97ac6c611db80325280.02161241236625958 BNB
0x4d1f52ade6209088c7f29eae3e3d9119e345b577854f86994478594847f7184e109742902021-09-16 20:52:173 hrs 18 mins ago Binance: WBNB Token 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.02161241236625958 BNB
0xcdbdafc652f3e4fd7a7e5fb744fae54f3d1f60cd405002b8ff560cb299d63b34109741352021-09-16 20:44:323 hrs 25 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0x23dd1605159dbf46d5a35e97ac6c611db80325280.019522296660923175 BNB
0xcdbdafc652f3e4fd7a7e5fb744fae54f3d1f60cd405002b8ff560cb299d63b34109741352021-09-16 20:44:323 hrs 25 mins ago Binance: WBNB Token 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.019522296660923175 BNB
0x6fdb284f89a235f0872bea862be46903a18d065753dec68de328dcba9219c54e109729662021-09-16 19:46:054 hrs 24 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.01 BNB
0xcf207f37e516b50db32ec3e8a709151acc477f119ddcccc69a04e74c3dcce306109725522021-09-16 19:25:234 hrs 45 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.404219021 BNB
0xc33e743c98137720865fa8d677780ec0d4c71f9d3261e07bcc2b99add7c9c706109719602021-09-16 18:55:475 hrs 14 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.082529892072828887 BNB
0x452fa5721dcf416b44f7eb99af34688329dd7b1d2b424c5099b9023a591d81c2109719502021-09-16 18:55:175 hrs 15 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.082514 BNB
0xf99fd29b840cb90339889c35de7b83141986bddb0b1e62adc674f45196db667d109707612021-09-16 17:55:506 hrs 14 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.03 BNB
0x87f3e53f3742284f0687fc68a10916ab60ffccfde9263b8baec080432256a8a5109695482021-09-16 16:54:247 hrs 16 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.0128 BNB
0x71e95e760588ce5ed8858acc2e26f0d1e870bccc521a846372158744a80fe508109687682021-09-16 16:15:247 hrs 55 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0xfa8d50cbabd18393a613e6e54ef842fec9014a060.049902101734875234 BNB
0x71e95e760588ce5ed8858acc2e26f0d1e870bccc521a846372158744a80fe508109687682021-09-16 16:15:247 hrs 55 mins ago Binance: WBNB Token 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.049902101734875234 BNB
0x0a574f9040d7a37c6f7e1381c3d240202259da03023130d8f37e0dee29f329a2109686792021-09-16 16:10:577 hrs 59 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.05 BNB
0xb78b17d248cddd87210f36a47a346f5edb12207ad7b7a67936dee704fa6dcceb109685082021-09-16 16:02:248 hrs 8 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.007009223355769365 BNB
0x1ce02480728b2c8534a3ccec000b7292d719aea41b63b9485ba8b61721eb2628109684912021-09-16 16:01:338 hrs 8 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.007028559 BNB
0x745dc0208522a2eb018b6b4b026834baf0feaec257d5df0d6f38bc9f3fad401b109683302021-09-16 15:53:308 hrs 16 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.05 BNB
0x5efaae3d5724cd0cdf5afb82001609dacc1f1dd207bcbab13bb2b643602e9453109673482021-09-16 15:04:089 hrs 6 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0x951ea513992e4d331609c96f12c4c4ca85070f530.03513400874968406 BNB
0x5efaae3d5724cd0cdf5afb82001609dacc1f1dd207bcbab13bb2b643602e9453109673482021-09-16 15:04:089 hrs 6 mins ago Binance: WBNB Token 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac0.03513400874968406 BNB
0x82db6d96e27a35939058963caa1de786dc907223b800ed1481e6286efd09297b109631602021-09-16 11:33:4612 hrs 36 mins ago 0x319ef69a98c8e8aab36aea561daba0bf3d0fa3ac Binance: WBNB Token0.006416924280897064 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PinkswapRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 999999 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// Dependency file: @uniswap/v2-core/contracts/interfaces/IPinkswapPair.sol

// pragma solidity >=0.5.0;

interface IPinkswapPair {
    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;
}

// Dependency file: contracts/interfaces/IPinkswapRouter01.sol

// pragma solidity >=0.6.2;

interface IPinkswapRouter01 {
    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);
}

// Dependency file: contracts/interfaces/IWETH.sol

// pragma solidity >=0.5.0;

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

// Dependency file: contracts/interfaces/IERC20.sol

// pragma solidity >=0.5.0;

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);
}

// Dependency file: contracts/libraries/SafeMath.sol

// pragma solidity =0.6.6;

// 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');
    }
}

// Dependency file: contracts/libraries/PinkswapLibrary.sol

// pragma solidity >=0.5.0;

// import '@uniswap/v2-core/contracts/interfaces/IPinkswapPair.sol';

// import "./SafeMath.sol";

library PinkswapLibrary {
    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, 'PinkswapLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'PinkswapLibrary: 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'78ee0c97de2aaecb976bed43c44c0619b5458672edd3ac64adc68a286cf86283' // 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,) = IPinkswapPair(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, 'PinkswapLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'PinkswapLibrary: 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, 'PinkswapLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'PinkswapLibrary: 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, 'PinkswapLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'PinkswapLibrary: 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, 'PinkswapLibrary: 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, 'PinkswapLibrary: 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);
        }
    }
}

// Dependency file: contracts/interfaces/IPinkswapRouter02.sol

// pragma solidity >=0.6.2;

// import './IPinkswapRouter01.sol';

interface IPinkswapRouter02 is IPinkswapRouter01 {
    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;
}

// Dependency file: @uniswap/lib/contracts/libraries/TransferHelper.sol

// pragma solidity >=0.6.0;

// 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');
    }
}

// Dependency file: @uniswap/v2-core/contracts/interfaces/IPinkswapFactory.sol

// pragma solidity >=0.5.0;

interface IPinkswapFactory {
    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;
}

pragma solidity =0.6.6;

// import '@uniswap/v2-core/contracts/interfaces/IPinkswapFactory.sol';
// import '@uniswap/lib/contracts/libraries/TransferHelper.sol';

// import './interfaces/IPinkswapRouter02.sol';
// import './libraries/PinkswapLibrary.sol';
// import './libraries/SafeMath.sol';
// import './interfaces/IERC20.sol';
// import './interfaces/IWETH.sol';

contract PinkswapRouter is IPinkswapRouter02 {
    using SafeMath for uint;

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

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

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

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

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

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

Contract Security Audit

Contract ABI

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

60c06040523480156200001157600080fd5b506040516200574138038062005741833981810160405260408110156200003757600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6155ba62000187600039806101ac5280610e5d5280610e985280610fd5528061129852806116f252806118d65280611e1e5280611fa252806120725280612179528061232c52806123c15280612673528061271a52806127ef52806128f452806129dc5280612a5d52806130ec5280613422528061347852806134ac528061352d528061374752806138f7528061398c5250806110c752806111c5528061136b52806113a4528061154f52806117e452806118b45280611aa1528061225f528061240052806125a95280612a9c5280612ddf5280613071528061309a52806130ca52806132a75280613456528061382d52806139cb528061444a528061448d52806147ed52806149ce5280614f49528061502a52806150aa52506155ba6000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d97565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612105565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b5080359060208101359060400135612525565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612532565b34801561096057600080fd5b50610969612671565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612695565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356126a2565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612882565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d65565b348015610b3157600080fd5b5061096961306f565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613093945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356130c0565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613218565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356133a7565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356136d3565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b610e86897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612d65565b9093509150610e96898685613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613cff565b50965096945050505050565b6000610f44848484613e3c565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50696e6b73776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b6111207f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061544f602a913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166140c6565b8560008151811061124a57fe5b60200260200101516141b1565b61129682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614381915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613cff565b509695505050505050565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484614608565b90505b92915050565b60008060006113ca7f00000000000000000000000000000000000000000000000000000000000000008f8f6140c6565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612d65565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b6115a87f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061544f602a913960400191505060405180910390fd5b61162a868660008181106111a257fe5b61135982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50696e6b73776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b61183d7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154ec6026913960400191505060405180910390fd5b6000806118fa7f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006140c6565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d6126a2565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a6141b1565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d6020811015611bf057600080fd5b50516040805160208881028281018201909352888252929350611c32929091899189918291850190849080828437600092019190915250889250614796915050565b86611d368288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b505afa158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b50519063ffffffff614b2916565b1015611d8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061544f602a913960400191505060405180910390fd5b5050505050505050565b8042811015611e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e6c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50696e6b73776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b611f1b85856000818110611a7e57fe5b611f59858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614796915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051905086811015612070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061544f602a913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505050611d8d8482613cff565b6060814281101561217757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660008181106121bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50696e6b73776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b6122b87f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106122cb57fe5b6020026020010151101561232a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a81526020018061544f602a913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061237357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123a657600080fd5b505af11580156123ba573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61242c7f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b8460008151811061243957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b50516124dc57fe5b61251b82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b5095945050505050565b6000610f44848484614b9b565b606081428110156125a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b6126027f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150868260008151811061261257fe5b6020026020010151111561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154ec6026913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610f44848484614cbf565b6000814281101561271457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b612743887f00000000000000000000000000000000000000000000000000000000000000008989893089612d65565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506127ed92508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b1580156127bc57600080fd5b505afa1580156127d0573d6000803e3d6000fd5b505050506040513d60208110156127e657600080fd5b5051613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506113598483613cff565b80428110156128f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168585600081811061293657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50696e6b73776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b60003490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a4257600080fd5b505af1158015612a56573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612ac87f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b505050506040513d6020811015612b5c57600080fd5b5051612b6457fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b9457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2d57600080fd5b505afa158015612c41573d6000803e3d6000fd5b505050506040513d6020811015612c5757600080fd5b50516040805160208981028281018201909352898252929350612c999290918a918a918291850190849080828437600092019190915250899250614796915050565b87611d368289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612ccc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b6000808242811015612dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b6000612e057f00000000000000000000000000000000000000000000000000000000000000008c8c6140c6565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612e8657600080fd5b505af1158015612e9a573d6000803e3d6000fd5b505050506040513d6020811015612eb057600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6040811015612f4d57600080fd5b50805160209091015190925090506000612f678e8e614d9f565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612fa4578183612fa7565b82825b90975095508a871015613005576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154796025913960400191505060405180910390fd5b8986101561305e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806155606025913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484613f60565b60008060006131107f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006140c6565b905060008761311f578c613141565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b505050506132038e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b6000806000834281101561328d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b61329b8c8c8c8c8c8c614ef2565b909450925060006132cd7f00000000000000000000000000000000000000000000000000000000000000008e8e6140c6565b90506132db8d3383886141b1565b6132e78c3383876141b1565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b505050506040513d602081101561339057600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561341c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b61344a8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614ef2565b9094509250600061349c7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006140c6565b90506134aa8b3383886141b1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351257600080fd5b505af1158015613526573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135d257600080fd5b505af11580156135e6573d6000803e3d6000fd5b505050506040513d60208110156135fc57600080fd5b505161360457fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561368357600080fd5b505af1158015613697573d6000803e3d6000fd5b505050506040513d60208110156136ad57600080fd5b50519250348410156136c5576136c533853403613cff565b505096509650969350505050565b6060814281101561374557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f50696e6b73776170526f757465723a2045585049524544000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061378957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461382857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50696e6b73776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b6138867f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150348260008151811061389657fe5b602002602001015111156138f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806154ec6026913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061393e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397157600080fd5b505af1158015613985573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6139f77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b84600081518110613a0457fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a7557600080fd5b505af1158015613a89573d6000803e3d6000fd5b505050506040513d6020811015613a9f57600080fd5b5051613aa757fe5b613ae682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b81600081518110613af357fe5b602002602001015134111561251b5761251b3383600081518110613b1357fe5b60200260200101513403613cff565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613bf857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bbb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c5a576040519150601f19603f3d011682016040523d82523d6000602084013e613c5f565b606091505b5091509150818015613c8d575080511580613c8d5750808060200190516020811015613c8a57600080fd5b50515b613cf857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613d7657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613d39565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613dd8576040519150601f19603f3d011682016040523d82523d6000602084013e613ddd565b606091505b5050905080613e37576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061549e6023913960400191505060405180910390fd5b505050565b6000808411613e96576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615512602a913960400191505060405180910390fd5b600083118015613ea65750600082115b613efb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154046027913960400191505060405180910390fd5b6000613f0f856103e563ffffffff6151f316565b90506000613f23828563ffffffff6151f316565b90506000613f4983613f3d886103e863ffffffff6151f316565b9063ffffffff61527916565b9050808281613f5457fe5b04979650505050505050565b6060600282511015613fd357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f50696e6b737761704c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613feb57600080fd5b50604051908082528060200260200182016040528015614015578160200160208202803683370190505b509050828160008151811061402657fe5b60200260200101818152505060005b60018351038110156140be576000806140788786858151811061405457fe5b602002602001015187866001018151811061406b57fe5b60200260200101516152eb565b9150915061409a84848151811061408b57fe5b60200260200101518383613e3c565b8484600101815181106140a957fe5b60209081029190910101525050600101614035565b509392505050565b60008060006140d58585614d9f565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f78ee0c97de2aaecb976bed43c44c0619b5458672edd3ac64adc68a286cf86283609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061428f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614252565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146142f1576040519150601f19603f3d011682016040523d82523d6000602084013e6142f6565b606091505b5091509150818015614324575080511580614324575080806020019051602081101561432157600080fd5b50515b614379576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061553c6024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156146025760008084838151811061439f57fe5b60200260200101518584600101815181106143b657fe5b60200260200101519150915060006143ce8383614d9f565b50905060008785600101815181106143e257fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461442a5782600061442e565b6000835b91509150600060028a510388106144455788614486565b6144867f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061447957fe5b60200260200101516140c6565b90506144b37f000000000000000000000000000000000000000000000000000000000000000088886140c6565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156144fd576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614588578181015183820152602001614570565b50505050905090810190601f1680156145b55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156145d757600080fd5b505af11580156145eb573d6000803e3d6000fd5b505060019099019850614384975050505050505050565b50505050565b606060028251101561467b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f50696e6b737761704c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561469357600080fd5b506040519080825280602002602001820160405280156146bd578160200160208202803683370190505b50905082816001835103815181106146d157fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b80156140be576000806147318786600186038151811061471d57fe5b602002602001015187868151811061406b57fe5b9150915061475384848151811061474457fe5b60200260200101518383614b9b565b84600185038151811061476257fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01614701565b60005b6001835103811015613e37576000808483815181106147b457fe5b60200260200101518584600101815181106147cb57fe5b60200260200101519150915060006147e38383614d9f565b50905060006148137f000000000000000000000000000000000000000000000000000000000000000085856140c6565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561486157600080fd5b505afa158015614875573d6000803e3d6000fd5b505050506040513d606081101561488b57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a8116908916146148d55782846148d8565b83835b9150915061495d828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b955061496a868383613e3c565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146149ae578260006149b2565b6000835b91509150600060028c51038a106149c9578a6149fd565b6149fd7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061447957fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614aad578181015183820152602001614a95565b50505050905090810190601f168015614ada5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614afc57600080fd5b505af1158015614b10573d6000803e3d6000fd5b50506001909b019a506147999950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411614bf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602b8152602001806154c1602b913960400191505060405180910390fd5b600083118015614c055750600082115b614c5a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154046027913960400191505060405180910390fd5b6000614c7e6103e8614c72868863ffffffff6151f316565b9063ffffffff6151f316565b90506000614c986103e5614c72868963ffffffff614b2916565b9050614cb56001828481614ca857fe5b049063ffffffff61527916565b9695505050505050565b6000808411614d19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806153e06024913960400191505060405180910390fd5b600083118015614d295750600082115b614d7e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260278152602001806154046027913960400191505060405180910390fd5b82614d8f858463ffffffff6151f316565b81614d9657fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614e27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061542b6024913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614e61578284614e64565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614eeb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f50696e6b737761704c6962726172793a205a45524f5f41444452455353000000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614f9257600080fd5b505afa158015614fa6573d6000803e3d6000fd5b505050506040513d6020811015614fbc57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614156150a257604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561507557600080fd5b505af1158015615089573d6000803e3d6000fd5b505050506040513d602081101561509f57600080fd5b50505b6000806150d07f00000000000000000000000000000000000000000000000000000000000000008b8b6152eb565b915091508160001480156150e2575080155b156150f2578793508692506151e6565b60006150ff898484614cbf565b905087811161516c5785811015615161576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806155606025913960400191505060405180910390fd5b8894509250826151e4565b6000615179898486614cbf565b90508981111561518557fe5b878110156151de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154796025913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061520e5750508082028282828161520b57fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006152fa8585614d9f565b5090506153088686866140c6565b506000806153178888886140c6565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561535c57600080fd5b505afa158015615370573d6000803e3d6000fd5b505050506040513d606081101561538657600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff878116908416146153cd5780826153d0565b81815b9099909850965050505050505056fe50696e6b737761704c6962726172793a20494e53554646494349454e545f414d4f554e5450696e6b737761704c6962726172793a20494e53554646494349454e545f4c495155494449545950696e6b737761704c6962726172793a204944454e544943414c5f41444452455353455350696e6b73776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5450696e6b73776170526f757465723a20494e53554646494349454e545f415f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454450696e6b737761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5450696e6b73776170526f757465723a204558434553534956455f494e5055545f414d4f554e5450696e6b737761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454450696e6b73776170526f757465723a20494e53554646494349454e545f425f414d4f554e54a26469706673582212208aadca8ddee0905076884f3e637dc0cbe034a378a2bbe7e74fbed7f5493130bc64736f6c634300060600330000000000000000000000007d2ce25c28334e40f37b2a068ec8d5a59f11ea54000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

0000000000000000000000007d2ce25c28334e40f37b2a068ec8d5a59f11ea54000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

-----Decoded View---------------
Arg [0] : _factory (address): 0x7d2ce25c28334e40f37b2a068ec8d5a59f11ea54
Arg [1] : _WETH (address): 0xbb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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


Deployed ByteCode Sourcemap

16831:18476:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17308:10;:18;17322:4;17308:18;;17301:26;;;;16831:18476;;12:1:-1;9;2:12;21441:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21441:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;21441:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34255:261;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34255:261:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34255:261:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28586:846;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28586:846:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28586:846:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28586:846:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28586:846:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28586:846:0;;-1:-1:-1;28586:846:0;-1:-1:-1;28586:846: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;28586:846:0;;;;;;;;;;;;;;;;;35052:252;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35052:252:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35052:252:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;35052:252:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35052:252:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35052:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;35052:252:0;;-1:-1:-1;35052:252:0;;-1:-1:-1;;;;;35052:252:0:i;22120:675::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22120:675:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;22120:675:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25817:625::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25817:625:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25817:625:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25817:625:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25817:625:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25817:625:0;;-1:-1:-1;25817:625:0;-1:-1:-1;25817:625:0;;;;;;;;;:::i;27756:824::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27756:824:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27756:824:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27756:824:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27756:824:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27756:824:0;;-1:-1:-1;27756:824:0;-1:-1:-1;27756:824:0;;;;;;;;;:::i;24253:716::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24253:716:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;24253:716:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31605:712::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31605:712:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31605:712:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31605:712:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31605:712:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31605:712:0;;-1:-1:-1;31605:712:0;-1:-1:-1;31605:712:0;;;;;;;;;:::i;33176:840::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33176:840:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33176:840:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;33176:840:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33176:840:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33176:840:0;;-1:-1:-1;33176:840:0;-1:-1:-1;33176:840:0;;;;;;;;;:::i;27057:693::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27057:693:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27057:693:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27057:693:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27057:693:0;;-1:-1:-1;27057:693:0;-1:-1:-1;27057:693:0;;;;;;;;;:::i;34524:260::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34524:260:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34524:260:0;;;;;;;;;;;;:::i;26448:603::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26448:603:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26448:603:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26448:603:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26448:603:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26448:603:0;;-1:-1:-1;26448:603:0;-1:-1:-1;26448:603:0;;;;;;;;;:::i;16963:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16963:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34060:187;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34060:187:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34060:187:0;;;;;;;;;;;;:::i;23547:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23547:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;23547:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32323:847::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32323:847:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32323:847:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32323:847:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32323:847:0;;-1:-1:-1;32323:847:0;-1:-1:-1;32323:847:0;;;;;;;;;:::i;20576:859::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20576:859:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;20576:859:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16915:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16915:41:0;;;:::i;34792:252::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34792:252:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34792:252:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34792:252:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34792:252:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34792:252:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34792:252:0;;-1:-1:-1;34792:252:0;;-1:-1:-1;;;;;34792:252:0:i;22801:667::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22801:667:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;22801:667:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18819:736::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18819:736:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;18819:736:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19561:972;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;19561:972:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29438:806::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29438:806:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;29438:806:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29438:806:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29438:806:0;;-1:-1:-1;29438:806:0;-1:-1:-1;29438:806:0;;;;;;;;;:::i;21441:673::-;21678:16;21696:14;21659:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21750:196:::1;21780:5;21800:4;21819:9;21843:14;21872:12;21907:4;21927:8;21750:15;:196::i;:::-;21723:223:::0;;-1:-1:-1;21723:223:0;-1:-1:-1;21957:51:0::1;21985:5:::0;21992:2;21723:223;21957:27:::1;:51::i;:::-;22025:4;22019:20;;;22040:9;22019:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22019:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22019:31:0;;;;22061:45;22092:2;22096:9;22061:30;:45::i;:::-;21441:673:::0;;;;;;;;;;:::o;34255:261::-;34408:14;34447:61;34476:8;34486:9;34497:10;34447:28;:61::i;:::-;34440:68;34255:261;-1:-1:-1;;;;34255:261:0:o;28586:846::-;28800:21;28772:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28847:29:::1;28872:4;28847:29;:4:::0;;28852:15;;;28847:21;;::::1;;;;;;;;;;;;;:29;;;28839:70;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28930:54;28960:7;28969:8;28979:4;;28930:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28930:29:0::1;::::0;-1:-1:-1;;;28930:54:0:i:1;:::-;28920:64;;29034:12;29003:7;29028:1;29011:7;:14;:18;29003:27;;;;;;;;;;;;;;:43;;28995:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29104:140;29150:4;;29155:1;29150:7;;;;;;;;;;;;;;;29159:10;29171:50;29195:7;29204:4;;29209:1;29204:7;;;;;;;;;;;;;;;29213:4;;29218:1;29213:7;;;;;;;;;;;;;;;29171:23;:50::i;:::-;29223:7;29231:1;29223:10;;;;;;;;;;;;;;29104:31;:140::i;:::-;29255:35;29261:7;29270:4;;29255:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29284:4:0::1;::::0;-1:-1:-1;29255:5:0::1;::::0;-1:-1:-1;;29255:35:0:i:1;:::-;29307:4;29301:20;;;29322:7;29347:1;29330:7;:14;:18;29322:27;;;;;;;;;;;;;;29301:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29301:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29301:49:0;;;;29361:63;29392:2;29396:7;29421:1;29404:7;:14;:18;29396:27;;;;;;;;;;;;;;29361:30;:63::i;:::-;28586:846:::0;;;;;;;;;:::o;35052:252::-;35196:21;35242:54;35271:7;35280:9;35291:4;35242:28;:54::i;:::-;35235:61;;35052:252;;;;;:::o;22120:675::-;22426:12;22440;22465;22480:48;22504:7;22513:6;22521;22480:23;:48::i;:::-;22465:63;;22539:10;22552;:33;;22576:9;22552:33;;;22570:2;22552:33;22596:79;;;;;;22623:10;22596:79;;;;22643:4;22596:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22539:46;;-1:-1:-1;22596:26:0;;;;;;:79;;;;;-1:-1:-1;;22596:79:0;;;;;;;;-1:-1:-1;22596:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;22596:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22596:79:0;;;;22707:80;22723:6;22731;22739:9;22750:10;22762;22774:2;22778:8;22707:15;:80::i;:::-;22686:101;;;;;;;;22120:675;;;;;;;;;;;;;;;;:::o;25817:625::-;26041:21;26022:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26085:54:::1;26115:7;26124:8;26134:4;;26085:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26085:29:0::1;::::0;-1:-1:-1;;;26085:54:0:i:1;:::-;26075:64;;26189:12;26158:7;26183:1;26166:7;:14;:18;26158:27;;;;;;;;;;;;;;:43;;26150:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26259:140;26305:4;;26310:1;26305:7;;;;;;26259:140;26410:24;26416:7;26425:4;;26410:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26431:2:0;;-1:-1:-1;26410:5:0::1;::::0;-1:-1:-1;;26410:24:0:i:1;27756:824::-:0;27970:21;27942:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28017:29:::1;28042:4;28017:29;:4:::0;;28022:15;;;28017:21;;::::1;;;;;;;;;;;;;:29;;;28009:70;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28100:54;28129:7;28138:9;28149:4;;28100:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28100:28:0::1;::::0;-1:-1:-1;;;28100:54:0:i:1;:::-;28090:64;;28187:11;28173:7;28181:1;28173:10;;;;;;;;;;;;;;:25;;28165:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24253:716:::0;24571:14;24598:12;24613:45;24637:7;24646:5;24653:4;24613:23;:45::i;:::-;24598:60;;24669:10;24682;:33;;24706:9;24682:33;;;24700:2;24682:33;24726:79;;;;;;24753:10;24726:79;;;;24773:4;24726:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24669:46;;-1:-1:-1;24726:26:0;;;;;;:79;;;;;-1:-1:-1;;24726:79:0;;;;;;;;-1:-1:-1;24726:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;24726:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24726:79:0;;;;24828:133;24890:5;24897:9;24908:14;24924:12;24938:2;24942:8;24828:47;:133::i;:::-;24816:145;24253:716;-1:-1:-1;;;;;;;;;;;;;24253:716:0:o;31605:712::-;31839:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31860:138:::1;31906:4;;31911:1;31906:7;;;;;;;;;;;;;;;31915:10;31927:50;31951:7;31960:4;;31965:1;31960:7;;;;;;;;;;;;;;;31969:4;;31974:1;31969:7;;;;;;31927:50;31979:8;31860:31;:138::i;:::-;32009:18;32037:4:::0;;32042:15;;;32037:21;;::::1;;;;;;;;;;;;;32030:39;;;32070:2;32030:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32030:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32030:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32030:43:0;32084:44:::1;::::0;;32030:43:::1;32084:44:::0;;::::1;::::0;;;;;;;;;;;32030:43;;-1:-1:-1;32084:44:0::1;::::0;;;32119:4;;;;;;32084:44;::::1;::::0;32119:4;;32084:44;32119:4;32084:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32125:2:0;;-1:-1:-1;32084:34:0::1;::::0;-1:-1:-1;;32084:44:0:i:1;:::-;32227:12:::0;32161:62:::1;32209:13:::0;32168:4;;32173:15;;;32168:21;;::::1;;;;;;;;;;;;;32161:39;;;32201:2;32161:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32161:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32161:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32161:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;32139:170;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17126:1;31605:712:::0;;;;;;;:::o;33176:840::-;33443:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33477:29:::1;33502:4;33477:29;:4:::0;;33482:15;;;33477:21;;::::1;;;;;;;;;;;;;:29;;;33469:70;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;33550:138;33596:4;;33601:1;33596:7;;;;;;33550:138;33699:55;33734:4;;33699:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33748:4:0::1;::::0;-1:-1:-1;33699:34:0::1;::::0;-1:-1:-1;;33699:55:0:i:1;:::-;33782:37;::::0;;;;;33813:4:::1;33782:37;::::0;::::1;::::0;;;33765:14:::1;::::0;33782:22:::1;33789:4;33782:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33782:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33782:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33782:37:0;;-1:-1:-1;33838:25:0;;::::1;;33830:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33927:4;33921:20;;;33942:9;33921:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33921:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33921:31:0;;;;33963:45;33994:2;33998:9;33963:30;:45::i;27057:693::-:0;27273:21;27245:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27331:4:::1;27320:15;;:4;;27325:1;27320:7;;;;;;;;;;;;;;;:15;;;27312:56;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27389:55;27419:7;27428:9;27439:4;;27389:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27389:29:0::1;::::0;-1:-1:-1;;;27389:55:0:i:1;:::-;27379:65;;27494:12;27463:7;27488:1;27471:7;:14;:18;27463:27;;;;;;;;;;;;;;:43;;27455:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27570:4;27564:19;;;27591:7;27599:1;27591:10;;;;;;;;;;;;;;27564:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27564:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27564:40:0;;;;;27628:4;27622:20;;;27643:50;27667:7;27676:4;;27681:1;27676:7;;;;;;27643:50;27695:7;27703:1;27695:10;;;;;;;;;;;;;;27622:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27622:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27622:84:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27622:84:0;27615:92:::1;;;;27718:24;27724:7;27733:4;;27718:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27739:2:0;;-1:-1:-1;27718:5:0::1;::::0;-1:-1:-1;;27718:24:0:i:1;:::-;27057:693:::0;;;;;;;;:::o;34524:260::-;34677:13;34715:61;34743:9;34754;34765:10;34715:27;:61::i;26448:603::-;26672:21;26653:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26716:54:::1;26745:7;26754:9;26765:4;;26716:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26716:28:0::1;::::0;-1:-1:-1;;;26716:54:0:i:1;:::-;26706:64;;26803:11;26789:7;26797:1;26789:10;;;;;;;;;;;;;;:25;;26781:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16963:38:::0;;;:::o;34060:187::-;34157:12;34189:50;34211:7;34220:8;34230;34189:21;:50::i;23547:700::-;23813:14;23794:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23856:196:::1;23886:5;23906:4;23925:9;23949:14;23978:12;24013:4;24033:8;23856:15;:196::i;:::-;24102:38;::::0;;;;;24134:4:::1;24102:38;::::0;::::1;::::0;;;23840:212;;-1:-1:-1;24063:78:0::1;::::0;-1:-1:-1;24091:5:0;;24098:2;;24102:23:::1;::::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;24102:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24102:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24102:38:0;24063:27:::1;:78::i;:::-;24158:4;24152:20;;;24173:9;24152:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24152:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24152:31:0;;;;24194:45;24225:2;24229:9;24194:30;:45::i;32323:847::-:0;32583:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32628:4:::1;32617:15;;:4;;32622:1;32617:7;;;;;;;;;;;;;;;:15;;;32609:56;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32676:13;32692:9;32676:25;;32718:4;32712:19;;;32739:8;32712:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32712:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32712:38:0;;;;;32774:4;32768:20;;;32789:50;32813:7;32822:4;;32827:1;32822:7;;;;;;32789:50;32841:8;32768:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32768:82:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32768:82:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32768:82:0;32761:90:::1;;;;32862:18;32890:4:::0;;32895:15;;;32890:21;;::::1;;;;;;;;;;;;;32883:39;;;32923:2;32883:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32883:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32883:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32883:43:0;32937:44:::1;::::0;;32883:43:::1;32937:44:::0;;::::1;::::0;;;;;;;;;;;32883:43;;-1:-1:-1;32937:44:0::1;::::0;;;32972:4;;;;;;32937:44;::::1;::::0;32972:4;;32937:44;32972:4;32937:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32978:2:0;;-1:-1:-1;32937:34:0::1;::::0;-1:-1:-1;;32937:44:0:i:1;:::-;33080:12:::0;33014:62:::1;33062:13:::0;33021:4;;33026:15;;;33021:21;;::::1;;;;;;;;;;;;;33014:39;;;33054:2;33014:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;20576:859:0::0;20830:12;20844;20811:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20869:12:::1;20884:48;20908:7;20917:6;20925;20884:23;:48::i;:::-;20943:61;::::0;;;;;20976:10:::1;20943:61;::::0;::::1;::::0;:32:::1;::::0;::::1;:61:::0;;;;;;;;;;;;;;20869:63;;-1:-1:-1;20943:32:0;;::::1;::::0;:61;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20943:32:0;:61;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20943:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20943:61:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;21072:28:0::1;::::0;;;;;:24:::1;:28:::0;;::::1;;::::0;::::1;::::0;;;21042:12:::1;::::0;;;21072:24;;::::1;::::0;::::1;::::0;:28;;;;;;;;;;;21042:12;21072:24;:28;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;21072:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21072:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21072:28:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;21072:28:0;-1:-1:-1;21112:14:0::1;21131:42;21158:6:::0;21166;21131:26:::1;:42::i;:::-;21111:62;;;21215:6;21205:16;;:6;:16;;;:58;;21246:7;21255;21205:58;;;21225:7;21234;21205:58;21184:79:::0;;-1:-1:-1;21184:79:0;-1:-1:-1;21282:21:0;;::::1;;21274:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21375:10;21364:7;:21;;21356:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17126:1;;;;20576:859:::0;;;;;;;;;;;:::o;16915:41::-;;;:::o;34792:252::-;34936:21;34982:54;35012:7;35021:8;35031:4;34982:29;:54::i;22801:667::-;23090:16;23108:14;23135:12;23150:45;23174:7;23183:5;23190:4;23150:23;:45::i;:::-;23135:60;;23206:10;23219;:33;;23243:9;23219:33;;;23237:2;23219:33;23263:79;;;;;;23290:10;23263:79;;;;23310:4;23263:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23206:46;;-1:-1:-1;23263:26:0;;;;;;:79;;;;;-1:-1:-1;;23263:79:0;;;;;;;;-1:-1:-1;23263:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;23263:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23263:79:0;;;;23380:80;23399:5;23406:9;23417:14;23433:12;23447:2;23451:8;23380:18;:80::i;:::-;23353:107;;;;-1:-1:-1;22801:667:0;-1:-1:-1;;;;;;;;;;;;;22801:667:0:o;18819:736::-;19107:12;19121;19135:14;19088:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19183:85:::1;19197:6;19205;19213:14;19229;19245:10;19257;19183:13;:85::i;:::-;19162:106:::0;;-1:-1:-1;19162:106:0;-1:-1:-1;19279:12:0::1;19294:48;19318:7;19327:6:::0;19335;19294:23:::1;:48::i;:::-;19279:63;;19353:66;19385:6;19393:10;19405:4;19411:7;19353:31;:66::i;:::-;19430;19462:6;19470:10;19482:4;19488:7;19430:31;:66::i;:::-;19533:4;19519:24;;;19544:2;19519:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19519:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19519:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19519:28:0;18819:736;;;;-1:-1:-1;19519:28:0;;-1:-1:-1;18819:736:0;;-1:-1:-1;;;;;;;;;18819:736:0:o;19561:972::-;19814:16;19832:14;19848;19795:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19902:176:::1;19930:5;19950:4;19969:18;20002:9;20026:14;20055:12;19902:13;:176::i;:::-;19875:203:::0;;-1:-1:-1;19875:203:0;-1:-1:-1;20089:12:0::1;20104:45;20128:7;20137:5:::0;20144:4:::1;20104:23;:45::i;:::-;20089:60;;20160:69;20192:5;20199:10;20211:4;20217:11;20160:31;:69::i;:::-;20246:4;20240:19;;;20267:9;20240:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20240:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20240:39:0;;;;;20303:4;20297:20;;;20318:4;20324:9;20297:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20297:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20297:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20297:37:0;20290:45:::1;;;;20372:4;20358:24;;;20383:2;20358:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20358:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20358:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20358:28:0;;-1:-1:-1;20437:9:0::1;:21:::0;-1:-1:-1;20433:92:0::1;;;20460:65;20491:10;20515:9;20503;:21;20460:30;:65::i;:::-;17126:1;19561:972:::0;;;;;;;;;;;:::o;29438:806::-;29651:21;29623:8;17072:15;17060:8;:27;;17052:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29709:4:::1;29698:15;;:4;;29703:1;29698:7;;;;;;;;;;;;;;;:15;;;29690:56;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;29767:54;29796:7;29805:9;29816:4;;29767:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29767:28:0::1;::::0;-1:-1:-1;;;29767:54:0:i:1;:::-;29757:64;;29854:9;29840:7;29848:1;29840:10;;;;;;;;;;;;;;:23;;29832:74;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29923:4;29917:19;;;29944:7;29952:1;29944:10;;;;;;;;;;;;;;29917:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29917:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29917:40:0;;;;;29981:4;29975:20;;;29996:50;30020:7;30029:4;;30034:1;30029:7;;;;;;29996:50;30048:7;30056:1;30048:10;;;;;;;;;;;;;;29975:84;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29975:84:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29975:84:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29975:84:0;29968:92:::1;;;;30071:24;30077:7;30086:4;;30071:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30092:2:0;;-1:-1:-1;30071:5:0::1;::::0;-1:-1:-1;;30071:24:0:i:1;:::-;30158:7;30166:1;30158:10;;;;;;;;;;;;;;30146:9;:22;30142:94;;;30170:66;30201:10;30225:7;30233:1;30225:10;;;;;;;;;;;;;;30213:9;:22;30170:30;:66::i;14707:361::-:0;14902:45;;;14891:10;14902:45;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;14902:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;14902:45:0;179:29:-1;160:49;;14891:57:0;;;;14856:12;;14870:17;;14891:10;;;;14902:45;14891:57;;;25:18:-1;14891:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;14891: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;;14855:93:0;;;;14967:7;:57;;;;-1:-1:-1;14979:11:0;;:16;;:44;;;15010:4;14999:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;14999:24:0;14979:44;14959:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14707:361;;;;;:::o;15486:195::-;15594:12;;;15556;15594;;;;;;;;;15573:7;;;;15587:5;;15573:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;15573: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;;15555:52:0;;;15626:7;15618:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15486:195;;;:::o;10375:515::-;10468:14;10514:1;10503:8;:12;10495:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10593:1;10581:9;:13;:31;;;;;10611:1;10598:10;:14;10581:31;10573:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10667:20;10690:17;:8;10703:3;10690:17;:12;:17;:::i;:::-;10667:40;-1:-1:-1;10718:14:0;10735:31;10667:40;10755:10;10735:31;:19;:31;:::i;:::-;10718:48;-1:-1:-1;10777:16:0;10796:40;10820:15;10796:19;:9;10810:4;10796:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;10777:59;;10871:11;10859:9;:23;;;;;;;10375:515;-1:-1:-1;;;;;;;10375:515:0:o;11563:510::-;11664:21;11721:1;11706:4;:11;:16;;11698:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11788:4;:11;11777:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11777:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;11777:23:0;;11767:33;;11824:8;11811:7;11819:1;11811:10;;;;;;;;;;;;;:21;;;;;11848:6;11843:223;11874:1;11860:4;:11;:15;11856:1;:19;11843:223;;;11898:14;11914:15;11933:42;11945:7;11954:4;11959:1;11954:7;;;;;;;;;;;;;;11963:4;11968:1;11972;11968:5;11963:11;;;;;;;;;;;;;;11933;:42::i;:::-;11897:78;;;;12007:47;12020:7;12028:1;12020:10;;;;;;;;;;;;;;12032:9;12043:10;12007:12;:47::i;:::-;11990:7;11998:1;12002;11998:5;11990:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;11877:3:0;;11843:223;;;;11563:510;;;;;:::o;8852:478::-;8941:12;8967:14;8983;9001:26;9012:6;9020;9001:10;:26::i;:::-;9165:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;9165:32:0;;;;;9155:43;;;;;;9068:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;9068:251:0;;;;;;;9058:262;;;;;;;;;8852:478;-1:-1:-1;;;;;8852:478:0:o;15076:402::-;15301:51;;;15290:10;15301:51;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15301:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;15301:51:0;179:29:-1;160:49;;15290:63:0;;;;15255:12;;15269:17;;15290:10;;;;15301:51;15290:63;;;25:18:-1;15290:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;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;;;15290: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;;15254:99:0;;;;15372:7;:57;;;;-1:-1:-1;15384:11:0;;:16;;:44;;;15415:4;15404:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;15404:24:0;15384:44;15364:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15076:402;;;;;;:::o;25080:731::-;25187:6;25182:622;25213:1;25199:4;:11;:15;25195:1;:19;25182:622;;;25237:13;25252:14;25271:4;25276:1;25271:7;;;;;;;;;;;;;;25280:4;25285:1;25289;25285:5;25280:11;;;;;;;;;;;;;;25236:56;;;;25308:14;25327:41;25354:5;25361:6;25327:26;:41::i;:::-;25307:61;;;25383:14;25400:7;25408:1;25412;25408:5;25400:14;;;;;;;;;;;;;;25383:31;;25430:15;25447;25475:6;25466:15;;:5;:15;;;:61;;25508:9;25524:1;25466:61;;;25490:1;25494:9;25466:61;25429:98;;;;25542:10;25573:1;25559:4;:11;:15;25555:1;:19;:81;;25633:3;25555:81;;;25577:53;25601:7;25610:6;25618:4;25623:1;25627;25623:5;25618:11;;;;;;;;;;;;;;25577:23;:53::i;:::-;25542:94;;25665:47;25689:7;25698:5;25705:6;25665:23;:47::i;:::-;25651:67;;;25737:10;25749;25761:2;25775:1;25765:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25765:12:0;87:42:-1;143:17;;-1:-1;25765:12:0;;25651:141;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;25651:141:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25651:141:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25216:3:0;;;;;-1:-1:-1;25182:622:0;;-1:-1:-1;;;;;;;;25182:622:0;;;25080:731;;;:::o;12154:531::-;12255:21;12312:1;12297:4;:11;:16;;12289:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12379:4;:11;12368:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12368:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;12368:23:0;;12358:33;;12432:9;12402:7;12427:1;12410:7;:14;:18;12402:27;;;;;;;;;;;;;;;;;:39;12466:11;;:15;;12452:226;12483:5;;12452:226;;12511:14;12527:15;12546:42;12558:7;12567:4;12576:1;12572;:5;12567:11;;;;;;;;;;;;;;12580:4;12585:1;12580:7;;;;;;;12546:42;12510:78;;;;12620:46;12632:7;12640:1;12632:10;;;;;;;;;;;;;;12644:9;12655:10;12620:11;:46::i;:::-;12603:7;12615:1;12611;:5;12603:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;12490:3:0;;12452:226;;30391:1208;30504:6;30499:1093;30530:1;30516:4;:11;:15;30512:1;:19;30499:1093;;;30554:13;30569:14;30588:4;30593:1;30588:7;;;;;;;;;;;;;;30597:4;30602:1;30606;30602:5;30597:11;;;;;;;;;;;;;;30553:56;;;;30625:14;30644:41;30671:5;30678:6;30644:26;:41::i;:::-;30624:61;;;30700:18;30735:47;30759:7;30768:5;30775:6;30735:23;:47::i;:::-;30700:83;;30798:16;30829:17;30917:13;30932;30950:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30950:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30950:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30950:18:0;;;;;;;30916:52;;;;;-1:-1:-1;30916:52:0;;-1:-1:-1;30984:17:0;;31025:15;;;;;;;;:61;;31067:8;31077;31025:61;;;31044:8;31054;31025:61;30983:103;;;;31115:56;31158:12;31122:5;31115:23;;;31147:4;31115:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;31115:56:0;31101:70;;31201;31230:11;31243:12;31257:13;31201:28;:70::i;:::-;31186:85;;30499:1093;;;;31302:15;31319;31347:6;31338:15;;:5;:15;;;:67;;31383:12;31402:1;31338:67;;;31362:1;31366:12;31338:67;31301:104;;;;31420:10;31451:1;31437:4;:11;:15;31433:1;:19;:81;;31511:3;31433:81;;;31455:53;31479:7;31488:6;31496:4;31501:1;31505;31501:5;31496:11;;;;;;;31455:53;31567:12;;;31577:1;31567:12;;;;;;;;;;31529:51;;;;;;;;;;;;;;;:9;:51;;;;;;;;;;;;;;;;;;;;;;31420:94;;-1:-1:-1;31529:9:0;;;;;;31539:10;;31551;;31420:94;;31567:12;;31529:51;;;;;;;;31567:12;;31529:51;;;;31567: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;31529:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31529:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;30533:3:0;;;;;-1:-1:-1;30499:1093:0;;-1:-1:-1;;;;;;;;;;30499:1093:0;7766:129;7850:5;;;7845:16;;;;7837:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11011:470;11104:13;11150:1;11138:9;:13;11130:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11230:1;11218:9;:13;:31;;;;;11248:1;11235:10;:14;11218:31;11210:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11304:14;11321:34;11350:4;11321:24;:9;11335;11321:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;11304:51;-1:-1:-1;11366:16:0;11385:34;11415:3;11385:25;:10;11400:9;11385:25;:14;:25;:::i;:34::-;11366:53;;11441:32;11471:1;11454:11;11442:9;:23;;;;;;;11441:32;:29;:32;:::i;:::-;11430:43;11011:470;-1:-1:-1;;;;;;11011:470:0:o;9934:319::-;10016:12;10059:1;10049:7;:11;10041:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10131:1;10120:8;:12;:28;;;;;10147:1;10136:8;:12;10120:28;10112:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10237:8;10213:21;:7;10225:8;10213:21;:11;:21;:::i;:::-;:32;;;;;;;9934:319;-1:-1:-1;;;;9934:319:0:o;8413:347::-;8488:14;8504;8549:6;8539:16;;:6;:16;;;;8531:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8635:6;8626:15;;:6;:15;;;:53;;8664:6;8672;8626:53;;;8645:6;8653;8626:53;8607:72;;-1:-1:-1;8607:72:0;-1:-1:-1;8698:20:0;;;8690:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8413:347;;;;;:::o;17430:1383::-;17743:49;;;;;;:63;:49;;;;;;;;;;;;;;;;17648:12;;;;;;17760:7;17743:33;;;;;;:49;;;;;;;;;;;;;;;:33;:49;;;2:2:-1;;;;27:1;24;17:12;2:2;17743:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17743:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17743:49:0;:63;;;17739:148;;;17823:52;;;;;;:36;:52;;;;;;;;;;;;;;;;17840:7;17823:36;;;;;;:52;;;;;;;;;;;;;;;-1:-1:-1;17823:36:0;:52;;;2:2:-1;;;;27:1;24;17:12;2:2;17823:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17823:52:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17739:148:0;17898:13;17913;17930:52;17958:7;17967:6;17975;17930:27;:52::i;:::-;17897:85;;;;17997:8;18009:1;17997:13;:30;;;;-1:-1:-1;18014:13:0;;17997:30;17993:813;;;18066:14;;-1:-1:-1;18082:14:0;;-1:-1:-1;17993:813:0;;;18130:19;18152:57;18174:14;18190:8;18200;18152:21;:57::i;:::-;18130:79;;18246:14;18228;:32;18224:571;;18307:10;18289:14;:28;;18281:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18400:14;;-1:-1:-1;18416:14:0;-1:-1:-1;18416:14:0;18224:571;;;18472:19;18494:57;18516:14;18532:8;18542;18494:21;:57::i;:::-;18472:79;;18595:14;18577;:32;;18570:40;;;;18655:10;18637:14;:28;;18629:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18748:14;-1:-1:-1;18764:14:0;;-1:-1:-1;18224:571:0;17993:813;;17430:1383;;;;;;;;;;;:::o;7903:142::-;7955:6;7982;;;:30;;-1:-1:-1;;7997:5:0;;;8011:1;8006;7997:5;8006:1;7992:15;;;;;:20;7982:30;7974:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7630:128;7714:5;;;7709:16;;;;7701:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9388:433;9481:13;9496;9523:14;9542:26;9553:6;9561;9542:10;:26::i;:::-;9522:46;;;9579:32;9587:7;9596:6;9604;9579:7;:32::i;:::-;;9623:13;9638;9670:32;9678:7;9687:6;9695;9670:7;:32::i;:::-;9656:59;;;:61;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;9656:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9656:61:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;9656:61:0;;;;;;;9622:95;;;;;-1:-1:-1;9622:95:0;;-1:-1:-1;9751:16:0;;;;;;;;:62;;9794:8;9804;9751:62;;;9771:8;9781;9751:62;9728:85;;;;-1:-1:-1;9388:433:0;-1:-1:-1;;;;;;;9388:433:0:o

Swarm Source

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