Contract 0x2ad2c5314028897aecfcf37fd923c079beeb2c56

 
Txn Hash
Block
From
To
Value [Txn Fee]
0xd342eccd822d0412bea37fd70edb764e4a2fde4bbd17c3350149f6a7afba9d7a82259172021-06-12 6:41:1023 hrs 5 mins ago0xffe56f6b011272b544adbc6f973bb1c85f1439b6 IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560 BNB0.00088145
0x223d3568c944e3b0db87e490f26d01aee3746fe7cf2ffd14cb0e8626e50f241b82258902021-06-12 6:39:4923 hrs 6 mins ago0xffe56f6b011272b544adbc6f973bb1c85f1439b6 IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560 BNB0.001235095
0x5b761f9a1b0aa948cba87146f5bd2c9a9fe861a6045e91953415b193009cf2a182097482021-06-11 17:09:281 day 12 hrs ago0x4dbd8af346e80d6fbbc7621c3391fec5e61a716d IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560 BNB0.000598535
0x276ff1ed4892210abf357e86e24a3fb53981fe78aa87fdd8e56cfda64ea3380b82037632021-06-11 12:09:001 day 17 hrs ago0x4dbd8af346e80d6fbbc7621c3391fec5e61a716d IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560.4 BNB0.001025635
0xc4bd1e7344e2601e8389bd0a5d7c1df6e52112d91b3fe01fd84ce72ce4c5dd9482036702021-06-11 12:04:211 day 17 hrs ago0x4dbd8af346e80d6fbbc7621c3391fec5e61a716d IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560 BNB0.00061306
0x9fc50df90fb5d7d295b9d41d978ae894390ce26f2e39fc0d4242c422996a8d3e81973202021-06-11 6:46:051 day 23 hrs ago0x68f3a5eb3ec229ad91a658d499ef1e123408b563 IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560 BNB0.000768035
0xaff3ecfe9a730e3eb449427d0e68a7d5de0dc8c618b8590cebb91d497580a1c581865942021-06-10 21:48:582 days 7 hrs ago0x0362a9992423e8bd753166fef2d4cecb1038d98f IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560 BNB0.00107512
0xd18b3a756b62c439bc35ea363bee7c71abd914205f4cbf68d1fdf185647386df81862932021-06-10 21:33:552 days 8 hrs ago0x6a33b68894c643a92b94a95b6d950add64b2a179 IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560 BNB0.00085004
0xe55a35bb399eb2e06dc6f79a6d36171a1fcdfbbf41538a435434e7c321b970ed81229642021-06-08 16:34:574 days 13 hrs ago0x1cf5c0da11b98b6ab5431c5944bbc92c4e5c3ae7 IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560.00297773 BNB0.000115055
0x498f16739df75ecb948a74583c47034f6a2c67c5cccb5d235d55d1ad88cac7bd81203082021-06-08 14:21:434 days 15 hrs ago0x0362a9992423e8bd753166fef2d4cecb1038d98f IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560.952028 BNB0.000878505
0xd3de6eac4a9298869843915c88c1708e3fc2289e2184ae05d3bda1236304e9b681200832021-06-08 14:10:284 days 15 hrs ago0x8617df0af8f98d1a2fdcd158400590da3ee080f7 IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560.238185 BNB0.00093503
0xcd514935ba8e5f2127f4124ec93cf49c31169ea1737a3d32e3bcb393782c3dfe81193162021-06-08 13:32:074 days 16 hrs ago0x6a33b68894c643a92b94a95b6d950add64b2a179 IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560 BNB0.000867065
0x5f1a853e1a4ba80d3b3e83343b19c4a0006394c9755565342abe87bbc7973ef481151642021-06-08 10:04:314 days 19 hrs ago0x0362a9992423e8bd753166fef2d4cecb1038d98f IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560 BNB0.000844245
0xaf2d088c1ea34cc5372f23957d0953dd90b41313f6f8252f731365e08aaed2bb81150662021-06-08 9:59:374 days 19 hrs ago0x0362a9992423e8bd753166fef2d4cecb1038d98f IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560 BNB0.000844365
0x101100fe3c987e734403aaee45ce92b67ca8e89a2bef6593b6f9a79e2ce4629481147052021-06-08 9:41:174 days 20 hrs ago0x0362a9992423e8bd753166fef2d4cecb1038d98f IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560.0947 BNB0.00101015
0x8afa2d918188af28fa27d81fc3edc191a2fa4ed575aae3b46664d0dcff6b8fb181142832021-06-08 9:20:114 days 20 hrs ago0x6a33b68894c643a92b94a95b6d950add64b2a179 IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560 BNB0.000942065
0x72ce4c4f9613df05f3ddc713730cb5d88be9e323fc2fb72405d9873d44194fa981134652021-06-08 8:39:174 days 21 hrs ago0x6a33b68894c643a92b94a95b6d950add64b2a179 IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560 BNB0.000941945
0x858274d7fa232da62ab796ef6ce690a86a89f9c6bfefb64b131643de6a0025b081120312021-06-08 7:27:354 days 22 hrs ago0xc27730a73fe53b1c2664f5ad358835b6acf4ea59 IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560 BNB0.005112695
0xf17fb5155086b986c7a608cf7ac6bb12d6aaa3d625957ea71d45bb063b55e2e681070512021-06-08 3:18:115 days 2 hrs ago0x8617df0af8f98d1a2fdcd158400590da3ee080f7 IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560.00001 BNB0.000972085
0x19fda1906c4b8e8484cd9b17c05faf669d0b137f2efc4f1f0f29d9fbb0a0a30881032512021-06-08 0:07:325 days 5 hrs ago0x0362a9992423e8bd753166fef2d4cecb1038d98f IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560.00002774 BNB0.000972325
0x3b4a385323e7b3047953a8fbad5362ff2649b2ddbfa376e6c1f805b80fa8af5d80321732021-06-05 12:47:407 days 16 hrs ago0xb5005c0ca801d600602fb55d3c41e7d1b921ddf1 IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560.041096677 BNB0.00175142
0x6d7f2aa11e15ef4215c77e0b4d9656ab8a03272235989945beef105a38d5b1b280321522021-06-05 12:46:377 days 16 hrs ago0xb5005c0ca801d600602fb55d3c41e7d1b921ddf1 IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560.091094233 BNB0.00175142
0xe4ff9735020fa324e6fb66a9cd772daf0f1501d86ba28120d099609b7873025d80317312021-06-05 12:25:347 days 17 hrs ago0xdab68ed2442314f5b758cfd186e24db00f6bfd3c IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560.5 BNB0.00067189
0x11eae83ea5e2250c0fef1bc2caeaa8a03581161fcc40a1f5a435fc9d74e37ece80284892021-06-05 9:42:047 days 20 hrs ago0xb5005c0ca801d600602fb55d3c41e7d1b921ddf1 IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560.042391305 BNB0.00175142
0xe019f7a5f15353a970100a5122c7265a58e033d3446781562920632fcf0c82f880282612021-06-05 9:30:407 days 20 hrs ago0xb5005c0ca801d600602fb55d3c41e7d1b921ddf1 IN  0x2ad2c5314028897aecfcf37fd923c079beeb2c560.02139757637786 BNB0.00175142
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x276ff1ed4892210abf357e86e24a3fb53981fe78aa87fdd8e56cfda64ea3380b82037632021-06-11 12:09:001 day 17 hrs ago 0x2ad2c5314028897aecfcf37fd923c079beeb2c56 Binance: WBNB Token0.4 BNB
0xc4bd1e7344e2601e8389bd0a5d7c1df6e52112d91b3fe01fd84ce72ce4c5dd9482036702021-06-11 12:04:211 day 17 hrs ago 0x2ad2c5314028897aecfcf37fd923c079beeb2c560x4dbd8af346e80d6fbbc7621c3391fec5e61a716d0.410728951318348329 BNB
0xc4bd1e7344e2601e8389bd0a5d7c1df6e52112d91b3fe01fd84ce72ce4c5dd9482036702021-06-11 12:04:211 day 17 hrs ago Binance: WBNB Token 0x2ad2c5314028897aecfcf37fd923c079beeb2c560.410728951318348329 BNB
0xaff3ecfe9a730e3eb449427d0e68a7d5de0dc8c618b8590cebb91d497580a1c581865942021-06-10 21:48:582 days 7 hrs ago 0x2ad2c5314028897aecfcf37fd923c079beeb2c560x0362a9992423e8bd753166fef2d4cecb1038d98f1.809170372616465588 BNB
0xaff3ecfe9a730e3eb449427d0e68a7d5de0dc8c618b8590cebb91d497580a1c581865942021-06-10 21:48:582 days 7 hrs ago Binance: WBNB Token 0x2ad2c5314028897aecfcf37fd923c079beeb2c561.809170372616465588 BNB
0x498f16739df75ecb948a74583c47034f6a2c67c5cccb5d235d55d1ad88cac7bd81203082021-06-08 14:21:434 days 15 hrs ago 0x2ad2c5314028897aecfcf37fd923c079beeb2c560x0362a9992423e8bd753166fef2d4cecb1038d98f0.012685095970550512 BNB
0x498f16739df75ecb948a74583c47034f6a2c67c5cccb5d235d55d1ad88cac7bd81203082021-06-08 14:21:434 days 15 hrs ago 0x2ad2c5314028897aecfcf37fd923c079beeb2c56 Binance: WBNB Token0.939342904029449488 BNB
0xd3de6eac4a9298869843915c88c1708e3fc2289e2184ae05d3bda1236304e9b681200832021-06-08 14:10:284 days 15 hrs ago 0x2ad2c5314028897aecfcf37fd923c079beeb2c560x8617df0af8f98d1a2fdcd158400590da3ee080f70.00065768010404018 BNB
0xd3de6eac4a9298869843915c88c1708e3fc2289e2184ae05d3bda1236304e9b681200832021-06-08 14:10:284 days 15 hrs ago 0x2ad2c5314028897aecfcf37fd923c079beeb2c56 Binance: WBNB Token0.23752731989595982 BNB
0x101100fe3c987e734403aaee45ce92b67ca8e89a2bef6593b6f9a79e2ce4629481147052021-06-08 9:41:174 days 20 hrs ago 0x2ad2c5314028897aecfcf37fd923c079beeb2c560x0362a9992423e8bd753166fef2d4cecb1038d98f0.000548780621269728 BNB
0x101100fe3c987e734403aaee45ce92b67ca8e89a2bef6593b6f9a79e2ce4629481147052021-06-08 9:41:174 days 20 hrs ago 0x2ad2c5314028897aecfcf37fd923c079beeb2c56 Binance: WBNB Token0.094151219378730272 BNB
0xf17fb5155086b986c7a608cf7ac6bb12d6aaa3d625957ea71d45bb063b55e2e681070512021-06-08 3:18:115 days 2 hrs ago 0x2ad2c5314028897aecfcf37fd923c079beeb2c56 Binance: WBNB Token0.00001 BNB
0x19fda1906c4b8e8484cd9b17c05faf669d0b137f2efc4f1f0f29d9fbb0a0a30881032512021-06-08 0:07:325 days 5 hrs ago 0x2ad2c5314028897aecfcf37fd923c079beeb2c56 Binance: WBNB Token0.00002774 BNB
0x3b4a385323e7b3047953a8fbad5362ff2649b2ddbfa376e6c1f805b80fa8af5d80321732021-06-05 12:47:407 days 16 hrs ago 0x2ad2c5314028897aecfcf37fd923c079beeb2c56 Binance: WBNB Token0.041096677 BNB
0x6d7f2aa11e15ef4215c77e0b4d9656ab8a03272235989945beef105a38d5b1b280321522021-06-05 12:46:377 days 16 hrs ago 0x2ad2c5314028897aecfcf37fd923c079beeb2c56 Binance: WBNB Token0.091094233 BNB
0xe4ff9735020fa324e6fb66a9cd772daf0f1501d86ba28120d099609b7873025d80317312021-06-05 12:25:347 days 17 hrs ago 0x2ad2c5314028897aecfcf37fd923c079beeb2c56 Binance: WBNB Token0.5 BNB
0x11eae83ea5e2250c0fef1bc2caeaa8a03581161fcc40a1f5a435fc9d74e37ece80284892021-06-05 9:42:047 days 20 hrs ago 0x2ad2c5314028897aecfcf37fd923c079beeb2c56 Binance: WBNB Token0.042391305 BNB
0xe019f7a5f15353a970100a5122c7265a58e033d3446781562920632fcf0c82f880282612021-06-05 9:30:407 days 20 hrs ago 0x2ad2c5314028897aecfcf37fd923c079beeb2c56 Binance: WBNB Token0.021397576377860851 BNB
0x0ac60a8730e622b2a6de3fcd5787f61352b3e8adcfbaf2d693b5aec0127da8c079988372021-06-04 8:57:568 days 20 hrs ago 0x2ad2c5314028897aecfcf37fd923c079beeb2c560x202ffac7f3315977849a4700d42b39111d429d740.018388798365184769 BNB
0x0ac60a8730e622b2a6de3fcd5787f61352b3e8adcfbaf2d693b5aec0127da8c079988372021-06-04 8:57:568 days 20 hrs ago Binance: WBNB Token 0x2ad2c5314028897aecfcf37fd923c079beeb2c560.018388798365184769 BNB
0x5c31122a4ce982ffb97e32550860b17d8df851c4818a21a2b3f334b9b8ba905079545202021-06-02 19:53:1110 days 9 hrs ago 0x2ad2c5314028897aecfcf37fd923c079beeb2c560xb5005c0ca801d600602fb55d3c41e7d1b921ddf10.011243071785972353 BNB
0x5c31122a4ce982ffb97e32550860b17d8df851c4818a21a2b3f334b9b8ba905079545202021-06-02 19:53:1110 days 9 hrs ago Binance: WBNB Token 0x2ad2c5314028897aecfcf37fd923c079beeb2c560.011243071785972353 BNB
0xb9fb70fe9c1bfdd4feccee1e6294fcef6c20778834ac75d3652292d5112c2d0979545032021-06-02 19:52:2010 days 9 hrs ago 0x2ad2c5314028897aecfcf37fd923c079beeb2c560xb5005c0ca801d600602fb55d3c41e7d1b921ddf10.031790934591888498 BNB
0xb9fb70fe9c1bfdd4feccee1e6294fcef6c20778834ac75d3652292d5112c2d0979545032021-06-02 19:52:2010 days 9 hrs ago Binance: WBNB Token 0x2ad2c5314028897aecfcf37fd923c079beeb2c560.031790934591888498 BNB
0xd398aab62b78f7d55dd121b4aa913a32891836542b594ba108652e4efb2fad2a79270502021-06-01 20:55:1011 days 8 hrs ago 0x2ad2c5314028897aecfcf37fd923c079beeb2c560xcbd8d8660f2c1bf05e92ec1329ec9a81717d9bea0.000749151962785291 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PancakeRouter

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-04-22
*/

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

// File: contracts\interfaces\IPancakeRouter01.sol

pragma solidity >=0.6.2;

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

// File: contracts\interfaces\IPancakeRouter02.sol

pragma solidity >=0.6.2;

interface IPancakeRouter02 is IPancakeRouter01 {
    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;
}

// File: contracts\interfaces\IPancakeFactory.sol

pragma solidity >=0.5.0;

interface IPancakeFactory {
    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;

    function INIT_CODE_PAIR_HASH() external view returns (bytes32);
}

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

// File: contracts\interfaces\IPancakePair.sol

pragma solidity >=0.5.0;

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

// File: contracts\libraries\PancakeLibrary.sol

pragma solidity >=0.5.0;



library PancakeLibrary {
    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, 'PancakeLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'PancakeLibrary: 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'54562d89983c7f7ee97baf35330de08c5774b4ffbf8eb9e8594095d4224bcc6a' // 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,) = IPancakePair(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, 'PancakeLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'PancakeLibrary: 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, 'PancakeLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'PancakeLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(9975);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(10000).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, 'PancakeLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'PancakeLibrary: INSUFFICIENT_LIQUIDITY');
        uint numerator = reserveIn.mul(amountOut).mul(10000);
        uint denominator = reserveOut.sub(amountOut).mul(9975);
        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, 'PancakeLibrary: 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, 'PancakeLibrary: 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);
        }
    }
}

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

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

// File: contracts\PancakeRouter.sol

pragma solidity =0.6.6;







contract PancakeRouter is IPancakeRouter02 {
    using SafeMath for uint;

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

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

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

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

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

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

Contract ABI

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

60c06040523480156200001157600080fd5b506040516200573838038062005738833981810160405260408110156200003757600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6155b162000187600039806101ac5280610e5d5280610e985280610fd5528061129852806116f252806118d65280611e1e5280611fa252806120725280612179528061232c52806123c15280612673528061271a52806127ef52806128f452806129dc5280612a5d52806130ec5280613422528061347852806134ac528061352d528061374752806138f7528061398c5250806110c752806111c5528061136b52806113a4528061154f52806117e452806118b45280611aa1528061225f528061240052806125a95280612a9c5280612ddf5280613071528061309a52806130ca52806132a75280613456528061382d52806139cb528061444a528061448d52806147ed52806149ce5280614f49528061502a52806150aa52506155b16000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610c71578063f305d71914610cfe578063fb3bdb4114610d51576101d5565b8063c45a015514610b25578063d06ca61f14610b3a578063ded9382a14610bf1576101d5565b8063af2979eb116100b0578063af2979eb146109c8578063b6f9de9514610a28578063baa2abde14610abb576101d5565b80638803dbee146108af578063ad5c464814610954578063ad615dec14610992576101d5565b80634a25d94a11610138578063791ac94711610112578063791ac947146107415780637ff36ab5146107e657806385f8c25914610879576101d5565b80634a25d94a146105775780635b0d59841461061c5780635c11d7951461069c576101d5565b80631f00ca74116101695780631f00ca74146103905780632195995c1461044757806338ed1739146104d2576101d5565b806302751cec146101da578063054d50d41461025357806318cbafe51461029b576101d5565b366101d5573373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146101d357fe5b005b600080fd5b3480156101e657600080fd5b5061023a600480360360c08110156101fd57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a00135610de4565b6040805192835260208301919091528051918290030190f35b34801561025f57600080fd5b506102896004803603606081101561027657600080fd5b5080359060208101359060400135610f37565b60408051918252519081900360200190f35b3480156102a757600080fd5b50610340600480360360a08110156102be57600080fd5b8135916020810135918101906060810160408201356401000000008111156102e557600080fd5b8201836020820111156102f757600080fd5b8035906020019184602083028401116401000000008311171561031957600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135610f4c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561037c578181015183820152602001610364565b505050509050019250505060405180910390f35b34801561039c57600080fd5b50610340600480360360408110156103b357600080fd5b813591908101906040810160208201356401000000008111156103d557600080fd5b8201836020820111156103e757600080fd5b8035906020019184602083028401116401000000008311171561040957600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550611364945050505050565b34801561045357600080fd5b5061023a600480360361016081101561046b57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff610100820135169061012081013590610140013561139a565b3480156104de57600080fd5b50610340600480360360a08110156104f557600080fd5b81359160208101359181019060608101604082013564010000000081111561051c57600080fd5b82018360208201111561052e57600080fd5b8035906020019184602083028401116401000000008311171561055057600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356114d8565b34801561058357600080fd5b50610340600480360360a081101561059a57600080fd5b8135916020810135918101906060810160408201356401000000008111156105c157600080fd5b8201836020820111156105d357600080fd5b803590602001918460208302840111640100000000831117156105f557600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611669565b34801561062857600080fd5b50610289600480360361014081101561064057600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356118ac565b3480156106a857600080fd5b506101d3600480360360a08110156106bf57600080fd5b8135916020810135918101906060810160408201356401000000008111156106e657600080fd5b8201836020820111156106f857600080fd5b8035906020019184602083028401116401000000008311171561071a57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356119fe565b34801561074d57600080fd5b506101d3600480360360a081101561076457600080fd5b81359160208101359181019060608101604082013564010000000081111561078b57600080fd5b82018360208201111561079d57600080fd5b803590602001918460208302840111640100000000831117156107bf57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135611d97565b610340600480360360808110156107fc57600080fd5b8135919081019060408101602082013564010000000081111561081e57600080fd5b82018360208201111561083057600080fd5b8035906020019184602083028401116401000000008311171561085257600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612105565b34801561088557600080fd5b506102896004803603606081101561089c57600080fd5b5080359060208101359060400135612525565b3480156108bb57600080fd5b50610340600480360360a08110156108d257600080fd5b8135916020810135918101906060810160408201356401000000008111156108f957600080fd5b82018360208201111561090b57600080fd5b8035906020019184602083028401116401000000008311171561092d57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612532565b34801561096057600080fd5b50610969612671565b6040805173ffffffffffffffffffffffffffffffffffffffff9092168252519081900360200190f35b34801561099e57600080fd5b50610289600480360360608110156109b557600080fd5b5080359060208101359060400135612695565b3480156109d457600080fd5b50610289600480360360c08110156109eb57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356126a2565b6101d360048036036080811015610a3e57600080fd5b81359190810190604081016020820135640100000000811115610a6057600080fd5b820183602082011115610a7257600080fd5b80359060200191846020830284011164010000000083111715610a9457600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff8135169060200135612882565b348015610ac757600080fd5b5061023a600480360360e0811015610ade57600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612d65565b348015610b3157600080fd5b5061096961306f565b348015610b4657600080fd5b5061034060048036036040811015610b5d57600080fd5b81359190810190604081016020820135640100000000811115610b7f57600080fd5b820183602082011115610b9157600080fd5b80359060200191846020830284011164010000000083111715610bb357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550613093945050505050565b348015610bfd57600080fd5b5061023a6004803603610140811015610c1557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356130c0565b348015610c7d57600080fd5b50610ce06004803603610100811015610c9557600080fd5b5073ffffffffffffffffffffffffffffffffffffffff8135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135613218565b60408051938452602084019290925282820152519081900360600190f35b610ce0600480360360c0811015610d1457600080fd5b5073ffffffffffffffffffffffffffffffffffffffff81358116916020810135916040820135916060810135916080820135169060a001356133a7565b61034060048036036080811015610d6757600080fd5b81359190810190604081016020820135640100000000811115610d8957600080fd5b820183602082011115610d9b57600080fd5b80359060200191846020830284011164010000000083111715610dbd57600080fd5b919350915073ffffffffffffffffffffffffffffffffffffffff81351690602001356136d3565b6000808242811015610e5757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b610e86897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612d65565b9093509150610e96898685613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610f0957600080fd5b505af1158015610f1d573d6000803e3d6000fd5b50505050610f2b8583613cff565b50965096945050505050565b6000610f44848484613e3c565b949350505050565b60608142811015610fbe57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061102357fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110c257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6111207f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b9150868260018451038151811061113357fe5b60200260200101511015611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154336029913960400191505060405180910390fd5b611257868660008181106111a257fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff163361123d7f00000000000000000000000000000000000000000000000000000000000000008a8a60008181106111f157fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168b8b600181811061121b57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff166140c6565b8560008151811061124a57fe5b60200260200101516141b1565b61129682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614381915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836001855103815181106112e257fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561132057600080fd5b505af1158015611334573d6000803e3d6000fd5b50505050611359848360018551038151811061134c57fe5b6020026020010151613cff565b509695505050505050565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484614608565b90505b92915050565b60008060006113ca7f00000000000000000000000000000000000000000000000000000000000000008f8f6140c6565b90506000876113d9578c6113fb565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b15801561149757600080fd5b505af11580156114ab573d6000803e3d6000fd5b505050506114be8f8f8f8f8f8f8f612d65565b809450819550505050509b509b9950505050505050505050565b6060814281101561154a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b6115a87f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106115bb57fe5b6020026020010151101561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154336029913960400191505060405180910390fd5b61162a868660008181106111a257fe5b61135982878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b606081428110156116db57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001686867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff810181811061174057fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117df57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b61183d7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150868260008151811061184d57fe5b60200260200101511115611192576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154e96025913960400191505060405180910390fd5b6000806118fa7f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006140c6565b9050600086611909578b61192b565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c48101879052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156119c757600080fd5b505af11580156119db573d6000803e3d6000fd5b505050506119ed8d8d8d8d8d8d6126a2565b9d9c50505050505050505050505050565b8042811015611a6e57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b611afd85856000818110611a7e57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1633611af77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff168a8a600181811061121b57fe5b8a6141b1565b600085857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611b2d57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231856040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611bc657600080fd5b505afa158015611bda573d6000803e3d6000fd5b505050506040513d6020811015611bf057600080fd5b50516040805160208881028281018201909352888252929350611c32929091899189918291850190849080828437600092019190915250889250614796915050565b86611d368288887fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611c6557fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b505afa158015611d12573d6000803e3d6000fd5b505050506040513d6020811015611d2857600080fd5b50519063ffffffff614b2916565b1015611d8d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154336029913960400191505060405180910390fd5b5050505050505050565b8042811015611e0757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001685857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110611e6c57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f0b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b611f1b85856000818110611a7e57fe5b611f59858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250614796915050565b604080517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152905160009173ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611fe957600080fd5b505afa158015611ffd573d6000803e3d6000fd5b505050506040513d602081101561201357600080fd5b5051905086811015612070576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154336029913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156120e357600080fd5b505af11580156120f7573d6000803e3d6000fd5b50505050611d8d8482613cff565b6060814281101561217757604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16868660008181106121bb57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461225a57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6122b87f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613f6092505050565b915086826001845103815181106122cb57fe5b6020026020010151101561232a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806154336029913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061237357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123a657600080fd5b505af11580156123ba573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb61242c7f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b8460008151811061243957fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156124aa57600080fd5b505af11580156124be573d6000803e3d6000fd5b505050506040513d60208110156124d457600080fd5b50516124dc57fe5b61251b82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b5095945050505050565b6000610f44848484614b9b565b606081428110156125a457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b6126027f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150868260008151811061261257fe5b6020026020010151111561161a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154e96025913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610f44848484614cbf565b6000814281101561271457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b612743887f00000000000000000000000000000000000000000000000000000000000000008989893089612d65565b604080517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015290519194506127ed92508a91879173ffffffffffffffffffffffffffffffffffffffff8416916370a0823191602480820192602092909190829003018186803b1580156127bc57600080fd5b505afa1580156127d0573d6000803e3d6000fd5b505050506040513d60208110156127e657600080fd5b5051613b22565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561286057600080fd5b505af1158015612874573d6000803e3d6000fd5b505050506113598483613cff565b80428110156128f257604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168585600081811061293657fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146129d557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b60003490507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015612a4257600080fd5b505af1158015612a56573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb612ac87f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015612b3257600080fd5b505af1158015612b46573d6000803e3d6000fd5b505050506040513d6020811015612b5c57600080fd5b5051612b6457fe5b600086867fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612b9457fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231866040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015612c2d57600080fd5b505afa158015612c41573d6000803e3d6000fd5b505050506040513d6020811015612c5757600080fd5b50516040805160208981028281018201909352898252929350612c999290918a918a918291850190849080828437600092019190915250899250614796915050565b87611d368289897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8101818110612ccc57fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b6000808242811015612dd857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b6000612e057f00000000000000000000000000000000000000000000000000000000000000008c8c6140c6565b604080517f23b872dd00000000000000000000000000000000000000000000000000000000815233600482015273ffffffffffffffffffffffffffffffffffffffff831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612e8657600080fd5b505af1158015612e9a573d6000803e3d6000fd5b505050506040513d6020811015612eb057600080fd5b5050604080517f89afcb4400000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612f2357600080fd5b505af1158015612f37573d6000803e3d6000fd5b505050506040513d6040811015612f4d57600080fd5b50805160209091015190925090506000612f678e8e614d9f565b5090508073ffffffffffffffffffffffffffffffffffffffff168e73ffffffffffffffffffffffffffffffffffffffff1614612fa4578183612fa7565b82825b90975095508a871015613005576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061547f6024913960400191505060405180910390fd5b8986101561305e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806155586024913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606113917f00000000000000000000000000000000000000000000000000000000000000008484613f60565b60008060006131107f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006140c6565b905060008761311f578c613141565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b604080517fd505accf00000000000000000000000000000000000000000000000000000000815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c48101889052905191925073ffffffffffffffffffffffffffffffffffffffff84169163d505accf9160e48082019260009290919082900301818387803b1580156131dd57600080fd5b505af11580156131f1573d6000803e3d6000fd5b505050506132038e8e8e8e8e8e610de4565b909f909e509c50505050505050505050505050565b6000806000834281101561328d57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b61329b8c8c8c8c8c8c614ef2565b909450925060006132cd7f00000000000000000000000000000000000000000000000000000000000000008e8e6140c6565b90506132db8d3383886141b1565b6132e78c3383876141b1565b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561336657600080fd5b505af115801561337a573d6000803e3d6000fd5b505050506040513d602081101561339057600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561341c57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b61344a8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c614ef2565b9094509250600061349c7f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006140c6565b90506134aa8b3383886141b1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351257600080fd5b505af1158015613526573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb82866040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b1580156135d257600080fd5b505af11580156135e6573d6000803e3d6000fd5b505050506040513d60208110156135fc57600080fd5b505161360457fe5b8073ffffffffffffffffffffffffffffffffffffffff16636a627842886040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001915050602060405180830381600087803b15801561368357600080fd5b505af1158015613697573d6000803e3d6000fd5b505050506040513d60208110156136ad57600080fd5b50519250348410156136c5576136c533853403613cff565b505096509650969350505050565b6060814281101561374557604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f50616e63616b65526f757465723a204558504952454400000000000000000000604482015290519081900360640190fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168686600081811061378957fe5b9050602002013573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461382857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601b60248201527f50616e63616b65526f757465723a20494e56414c49445f504154480000000000604482015290519081900360640190fd5b6138867f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061460892505050565b9150348260008151811061389657fe5b602002602001015111156138f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806154e96025913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663d0e30db08360008151811061393e57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397157600080fd5b505af1158015613985573d6000803e3d6000fd5b50505050507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6139f77f000000000000000000000000000000000000000000000000000000000000000089896000818110611acd57fe5b84600081518110613a0457fe5b60200260200101516040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b158015613a7557600080fd5b505af1158015613a89573d6000803e3d6000fd5b505050506040513d6020811015613a9f57600080fd5b5051613aa757fe5b613ae682878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250614381915050565b81600081518110613af357fe5b602002602001015134111561251b5761251b3383600081518110613b1357fe5b60200260200101513403613cff565b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b60208310613bf857805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613bbb565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613c5a576040519150601f19603f3d011682016040523d82523d6000602084013e613c5f565b606091505b5091509150818015613c8d575080511580613c8d5750808060200190516020811015613c8a57600080fd5b50515b613cf857604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b6040805160008082526020820190925273ffffffffffffffffffffffffffffffffffffffff84169083906040518082805190602001908083835b60208310613d7657805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101613d39565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613dd8576040519150601f19603f3d011682016040523d82523d6000602084013e613ddd565b606091505b5050905080613e37576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154c66023913960400191505060405180910390fd5b505050565b6000808411613e96576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806153e06029913960400191505060405180910390fd5b600083118015613ea65750600082115b613efb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061550e6026913960400191505060405180910390fd5b6000613f0f856126f763ffffffff6151f316565b90506000613f23828563ffffffff6151f316565b90506000613f4983613f3d8861271063ffffffff6151f316565b9063ffffffff61527916565b9050808281613f5457fe5b04979650505050505050565b6060600282511015613fd357604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613feb57600080fd5b50604051908082528060200260200182016040528015614015578160200160208202803683370190505b509050828160008151811061402657fe5b60200260200101818152505060005b60018351038110156140be576000806140788786858151811061405457fe5b602002602001015187866001018151811061406b57fe5b60200260200101516152eb565b9150915061409a84848151811061408b57fe5b60200260200101518383613e3c565b8484600101815181106140a957fe5b60209081029190910101525050600101614035565b509392505050565b60008060006140d58585614d9f565b604080517fffffffffffffffffffffffffffffffffffffffff000000000000000000000000606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527f54562d89983c7f7ee97baf35330de08c5774b4ffbf8eb9e8594095d4224bcc6a609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815292518251600094606094938a169392918291908083835b6020831061428f57805182527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe09092019160209182019101614252565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146142f1576040519150601f19603f3d011682016040523d82523d6000602084013e6142f6565b606091505b5091509150818015614324575080511580614324575080806020019051602081101561432157600080fd5b50515b614379576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806155346024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156146025760008084838151811061439f57fe5b60200260200101518584600101815181106143b657fe5b60200260200101519150915060006143ce8383614d9f565b50905060008785600101815181106143e257fe5b602002602001015190506000808373ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161461442a5782600061442e565b6000835b91509150600060028a510388106144455788614486565b6144867f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061447957fe5b60200260200101516140c6565b90506144b37f000000000000000000000000000000000000000000000000000000000000000088886140c6565b73ffffffffffffffffffffffffffffffffffffffff1663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156144fd576020820181803683370190505b506040518563ffffffff1660e01b8152600401808581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200180602001828103825283818151815260200191508051906020019080838360005b83811015614588578181015183820152602001614570565b50505050905090810190601f1680156145b55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156145d757600080fd5b505af11580156145eb573d6000803e3d6000fd5b505060019099019850614384975050505050505050565b50505050565b606060028251101561467b57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561469357600080fd5b506040519080825280602002602001820160405280156146bd578160200160208202803683370190505b50905082816001835103815181106146d157fe5b602090810291909101015281517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff015b80156140be576000806147318786600186038151811061471d57fe5b602002602001015187868151811061406b57fe5b9150915061475384848151811061474457fe5b60200260200101518383614b9b565b84600185038151811061476257fe5b602090810291909101015250507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01614701565b60005b6001835103811015613e37576000808483815181106147b457fe5b60200260200101518584600101815181106147cb57fe5b60200260200101519150915060006147e38383614d9f565b50905060006148137f000000000000000000000000000000000000000000000000000000000000000085856140c6565b90506000806000808473ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561486157600080fd5b505afa158015614875573d6000803e3d6000fd5b505050506040513d606081101561488b57600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905060008073ffffffffffffffffffffffffffffffffffffffff8a8116908916146148d55782846148d8565b83835b9150915061495d828b73ffffffffffffffffffffffffffffffffffffffff166370a082318a6040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611cfe57600080fd5b955061496a868383613e3c565b9450505050506000808573ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16146149ae578260006149b2565b6000835b91509150600060028c51038a106149c9578a6149fd565b6149fd7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061447957fe5b60408051600080825260208201928390527f022c0d9f000000000000000000000000000000000000000000000000000000008352602482018781526044830187905273ffffffffffffffffffffffffffffffffffffffff8086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614aad578181015183820152602001614a95565b50505050905090810190601f168015614ada5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015614afc57600080fd5b505af1158015614b10573d6000803e3d6000fd5b50506001909b019a506147999950505050505050505050565b8082038281111561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411614bf5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180615409602a913960400191505060405180910390fd5b600083118015614c055750600082115b614c5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061550e6026913960400191505060405180910390fd5b6000614c7e612710614c72868863ffffffff6151f316565b9063ffffffff6151f316565b90506000614c986126f7614c72868963ffffffff614b2916565b9050614cb56001828481614ca857fe5b049063ffffffff61527916565b9695505050505050565b6000808411614d19576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806154a36023913960400191505060405180910390fd5b600083118015614d295750600082115b614d7e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602681526020018061550e6026913960400191505060405180910390fd5b82614d8f858463ffffffff6151f316565b81614d9657fe5b04949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415614e27576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602381526020018061545c6023913960400191505060405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1610614e61578284614e64565b83835b909250905073ffffffffffffffffffffffffffffffffffffffff8216614eeb57604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f50616e63616b654c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b604080517fe6a4390500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b158015614f9257600080fd5b505afa158015614fa6573d6000803e3d6000fd5b505050506040513d6020811015614fbc57600080fd5b505173ffffffffffffffffffffffffffffffffffffffff1614156150a257604080517fc9c6539600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561507557600080fd5b505af1158015615089573d6000803e3d6000fd5b505050506040513d602081101561509f57600080fd5b50505b6000806150d07f00000000000000000000000000000000000000000000000000000000000000008b8b6152eb565b915091508160001480156150e2575080155b156150f2578793508692506151e6565b60006150ff898484614cbf565b905087811161516c5785811015615161576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806155586024913960400191505060405180910390fd5b8894509250826151e4565b6000615179898486614cbf565b90508981111561518557fe5b878110156151de576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061547f6024913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061520e5750508082028282828161520b57fe5b04145b61139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561139457604080517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b60008060006152fa8585614d9f565b5090506153088686866140c6565b506000806153178888886140c6565b73ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561535c57600080fd5b505afa158015615370573d6000803e3d6000fd5b505050506040513d606081101561538657600080fd5b5080516020909101516dffffffffffffffffffffffffffff918216935016905073ffffffffffffffffffffffffffffffffffffffff878116908416146153cd5780826153d0565b81815b9099909850965050505050505056fe50616e63616b654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5450616e63616b65526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5450616e63616b654c6962726172793a204944454e544943414c5f41444452455353455350616e63616b65526f757465723a20494e53554646494349454e545f415f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454450616e63616b65526f757465723a204558434553534956455f494e5055545f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c454450616e63616b65526f757465723a20494e53554646494349454e545f425f414d4f554e54a26469706673582212202e0007a5a1b32b3ea4bcb33f38dadf8651620ea8cc53f57888130095a2af6c1264736f6c63430006060033000000000000000000000000877fe7f4e22e21be397cd9364fafd4af4e15edb6000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

000000000000000000000000877fe7f4e22e21be397cd9364fafd4af4e15edb6000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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


Deployed ByteCode Sourcemap

16285:18405:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16759:10;:18;16773:4;16759:18;;16752:26;;;;16285:18405;;12:1:-1;9;2:12;20875:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20875:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;20875:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33642:260;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33642:260:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33642:260:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27996:842;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27996:842:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27996:842:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27996:842:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27996:842: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;27996:842:0;;-1:-1:-1;27996:842:0;-1:-1:-1;27996:842:0;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;27996:842:0;;;;;;;;;;;;;;;;;34436:251;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34436:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34436:251:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34436:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34436:251: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;34436:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34436:251:0;;-1:-1:-1;34436:251:0;;-1:-1:-1;;;;;34436:251:0:i;21554:673::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21554:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;21554:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25241:622::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25241:622:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25241:622:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25241:622:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25241:622: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;25241:622:0;;-1:-1:-1;25241:622:0;-1:-1:-1;25241:622:0;;;;;;;;;:::i;27170:820::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27170:820:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27170:820:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27170:820:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27170:820: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;27170:820:0;;-1:-1:-1;27170:820:0;-1:-1:-1;27170:820:0;;;;;;;;;:::i;23683:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23683:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;23683:714:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31001:710::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31001:710:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31001:710:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31001:710:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31001:710: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;31001:710:0;;-1:-1:-1;31001:710:0;-1:-1:-1;31001:710:0;;;;;;;;;:::i;32567:837::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32567:837:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32567:837:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32567:837:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32567:837: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;32567:837:0;;-1:-1:-1;32567:837:0;-1:-1:-1;32567:837:0;;;;;;;;;:::i;26475:689::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26475:689:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26475:689:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26475:689: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;26475:689:0;;-1:-1:-1;26475:689:0;-1:-1:-1;26475:689:0;;;;;;;;;:::i;33910:259::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33910:259:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33910:259:0;;;;;;;;;;;;:::i;25869:600::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25869:600:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25869:600:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;25869:600:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25869:600: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;25869:600:0;;-1:-1:-1;25869:600:0;-1:-1:-1;25869:600:0;;;;;;;;;:::i;16415:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16415:38:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;33448:186;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33448:186:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33448:186:0;;;;;;;;;;;;:::i;22977:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22977:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;22977:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31717:844::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31717:844:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;31717:844:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31717:844: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;31717:844:0;;-1:-1:-1;31717:844:0;-1:-1:-1;31717:844:0;;;;;;;;;:::i;20016:853::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20016:853:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;20016:853:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;16367:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;16367:41:0;;;:::i;34177:251::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34177:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34177:251:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;34177:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34177:251: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;34177:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34177:251:0;;-1:-1:-1;34177:251:0;;-1:-1:-1;;;;;34177:251:0:i;22233:665::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22233:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;22233:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;18263:734::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;18263:734:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;18263:734:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19003:970;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;19003:970:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28844:802::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28844:802:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28844:802:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28844:802: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;28844:802:0;;-1:-1:-1;28844:802:0;-1:-1:-1;28844:802:0;;;;;;;;;:::i;20875:673::-;21112:16;21130:14;21093:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21184:196:::1;21214:5;21234:4;21253:9;21277:14;21306:12;21341:4;21361:8;21184:15;:196::i;:::-;21157:223:::0;;-1:-1:-1;21157:223:0;-1:-1:-1;21391:51:0::1;21419:5:::0;21426:2;21157:223;21391:27:::1;:51::i;:::-;21459:4;21453:20;;;21474:9;21453:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;21453:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21453:31:0;;;;21495:45;21526:2;21530:9;21495:30;:45::i;:::-;20875:673:::0;;;;;;;;;;:::o;33642:260::-;33795:14;33834:60;33862:8;33872:9;33883:10;33834:27;:60::i;:::-;33827:67;33642:260;-1:-1:-1;;;;33642:260:0:o;27996:842::-;28210:21;28182:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28257:29:::1;28282:4;28257:29;:4:::0;;28262:15;;;28257:21;;::::1;;;;;;;;;;;;;:29;;;28249:69;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28339:53;28368:7;28377:8;28387:4;;28339:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28339:28:0::1;::::0;-1:-1:-1;;;28339:53:0:i:1;:::-;28329:63;;28442:12;28411:7;28436:1;28419:7;:14;:18;28411:27;;;;;;;;;;;;;;:43;;28403:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28511:139;28557:4;;28562:1;28557:7;;;;;;;;;;;;;;;28566:10;28578:49;28601:7;28610:4;;28615:1;28610:7;;;;;;;;;;;;;;;28619:4;;28624:1;28619:7;;;;;;;;;;;;;;;28578:22;:49::i;:::-;28629:7;28637:1;28629:10;;;;;;;;;;;;;;28511:31;:139::i;:::-;28661:35;28667:7;28676:4;;28661:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28690:4:0::1;::::0;-1:-1:-1;28661:5:0::1;::::0;-1:-1:-1;;28661:35:0:i:1;:::-;28713:4;28707:20;;;28728:7;28753:1;28736:7;:14;:18;28728:27;;;;;;;;;;;;;;28707:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28707:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28707:49:0;;;;28767:63;28798:2;28802:7;28827:1;28810:7;:14;:18;28802:27;;;;;;;;;;;;;;28767:30;:63::i;:::-;27996:842:::0;;;;;;;;;:::o;34436:251::-;34580:21;34626:53;34654:7;34663:9;34674:4;34626:27;:53::i;:::-;34619:60;;34436:251;;;;;:::o;21554:673::-;21860:12;21874;21899;21914:47;21937:7;21946:6;21954;21914:22;:47::i;:::-;21899:62;;21972:10;21985;:33;;22009:9;21985:33;;;22003:2;21985:33;22029:78;;;;;;22055:10;22029:78;;;;22075:4;22029:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21972:46;;-1:-1:-1;22029:25:0;;;;;;:78;;;;;-1:-1:-1;;22029:78:0;;;;;;;;-1:-1:-1;22029:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;22029:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22029:78:0;;;;22139:80;22155:6;22163;22171:9;22182:10;22194;22206:2;22210:8;22139:15;:80::i;:::-;22118:101;;;;;;;;21554:673;;;;;;;;;;;;;;;;:::o;25241:622::-;25465:21;25446:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25509:53:::1;25538:7;25547:8;25557:4;;25509:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25509:28:0::1;::::0;-1:-1:-1;;;25509:53:0:i:1;:::-;25499:63;;25612:12;25581:7;25606:1;25589:7;:14;:18;25581:27;;;;;;;;;;;;;;:43;;25573:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25681:139;25727:4;;25732:1;25727:7;;;;;;25681:139;25831:24;25837:7;25846:4;;25831:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25852:2:0;;-1:-1:-1;25831:5:0::1;::::0;-1:-1:-1;;25831:24:0:i:1;27170:820::-:0;27384:21;27356:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27431:29:::1;27456:4;27431:29;:4:::0;;27436:15;;;27431:21;;::::1;;;;;;;;;;;;;:29;;;27423:69;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27513:53;27541:7;27550:9;27561:4;;27513:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27513:27:0::1;::::0;-1:-1:-1;;;27513:53:0:i:1;:::-;27503:63;;27599:11;27585:7;27593:1;27585:10;;;;;;;;;;;;;;:25;;27577:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23683:714:::0;24001:14;24028:12;24043:44;24066:7;24075:5;24082:4;24043:22;:44::i;:::-;24028:59;;24098:10;24111;:33;;24135:9;24111:33;;;24129:2;24111:33;24155:78;;;;;;24181:10;24155:78;;;;24201:4;24155:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24098:46;;-1:-1:-1;24155:25:0;;;;;;:78;;;;;-1:-1:-1;;24155:78:0;;;;;;;;-1:-1:-1;24155:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;24155:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24155:78:0;;;;24256:133;24318:5;24325:9;24336:14;24352:12;24366:2;24370:8;24256:47;:133::i;:::-;24244:145;23683:714;-1:-1:-1;;;;;;;;;;;;;23683:714:0:o;31001:710::-;31235:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31256:137:::1;31302:4;;31307:1;31302:7;;;;;;;;;;;;;;;31311:10;31323:49;31346:7;31355:4;;31360:1;31355:7;;;;;;;;;;;;;;;31364:4;;31369:1;31364:7;;;;;;31323:49;31374:8;31256:31;:137::i;:::-;31404:18;31432:4:::0;;31437:15;;;31432:21;;::::1;;;;;;;;;;;;;31425:39;;;31465:2;31425:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31425:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31425:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31425:43:0;31479:44:::1;::::0;;31425:43:::1;31479:44:::0;;::::1;::::0;;;;;;;;;;;31425:43;;-1:-1:-1;31479:44:0::1;::::0;;;31514:4;;;;;;31479:44;::::1;::::0;31514:4;;31479:44;31514:4;31479:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31520:2:0;;-1:-1:-1;31479:34:0::1;::::0;-1:-1:-1;;31479:44:0:i:1;:::-;31622:12:::0;31556:62:::1;31604:13:::0;31563:4;;31568:15;;;31563:21;;::::1;;;;;;;;;;;;;31556:39;;;31596:2;31556:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31556:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31556:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31556:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31534:169;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16577:1;31001:710:::0;;;;;;;:::o;32567:837::-;32834:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32868:29:::1;32893:4;32868:29;:4:::0;;32873:15;;;32868:21;;::::1;;;;;;;;;;;;;:29;;;32860:69;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32940:137;32986:4;;32991:1;32986:7;;;;;;32940:137;33088:55;33123:4;;33088:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33137:4:0::1;::::0;-1:-1:-1;33088:34:0::1;::::0;-1:-1:-1;;33088:55:0:i:1;:::-;33171:37;::::0;;;;;33202:4:::1;33171:37;::::0;::::1;::::0;;;33154:14:::1;::::0;33171:22:::1;33178:4;33171:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33171:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33171:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33171:37:0;;-1:-1:-1;33227:25:0;;::::1;;33219:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33315:4;33309:20;;;33330:9;33309:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33309:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33309:31:0;;;;33351:45;33382:2;33386:9;33351:30;:45::i;26475:689::-:0;26691:21;26663:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26749:4:::1;26738:15;;:4;;26743:1;26738:7;;;;;;;;;;;;;;;:15;;;26730:55;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;26806:54;26835:7;26844:9;26855:4;;26806:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26806:28:0::1;::::0;-1:-1:-1;;;26806:54:0:i:1;:::-;26796:64;;26910:12;26879:7;26904:1;26887:7;:14;:18;26879:27;;;;;;;;;;;;;;:43;;26871:97;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26985:4;26979:19;;;27006:7;27014:1;27006:10;;;;;;;;;;;;;;26979:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26979:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26979:40:0;;;;;27043:4;27037:20;;;27058:49;27081:7;27090:4;;27095:1;27090:7;;;;;;27058:49;27109:7;27117:1;27109:10;;;;;;;;;;;;;;27037:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27037:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27037:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27037:83:0;27030:91:::1;;;;27132:24;27138:7;27147:4;;27132:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27153:2:0;;-1:-1:-1;27132:5:0::1;::::0;-1:-1:-1;;27132:24:0:i:1;:::-;26475:689:::0;;;;;;;;:::o;33910:259::-;34063:13;34101:60;34128:9;34139;34150:10;34101:26;:60::i;25869:600::-;26093:21;26074:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26137:53:::1;26165:7;26174:9;26185:4;;26137:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26137:27:0::1;::::0;-1:-1:-1;;;26137:53:0:i:1;:::-;26127:63;;26223:11;26209:7;26217:1;26209:10;;;;;;;;;;;;;;:25;;26201:75;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16415:38:::0;;;:::o;33448:186::-;33545:12;33577:49;33598:7;33607:8;33617;33577:20;:49::i;22977:700::-;23243:14;23224:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23286:196:::1;23316:5;23336:4;23355:9;23379:14;23408:12;23443:4;23463:8;23286:15;:196::i;:::-;23532:38;::::0;;;;;23564:4:::1;23532:38;::::0;::::1;::::0;;;23270:212;;-1:-1:-1;23493:78:0::1;::::0;-1:-1:-1;23521:5:0;;23528:2;;23532: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;23532:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23532:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;23532:38:0;23493:27:::1;:78::i;:::-;23588:4;23582:20;;;23603:9;23582:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;23582:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;23582:31:0;;;;23624:45;23655:2;23659:9;23624:30;:45::i;31717:844::-:0;31977:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32022:4:::1;32011:15;;:4;;32016:1;32011:7;;;;;;;;;;;;;;;:15;;;32003:55;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;32069:13;32085:9;32069:25;;32111:4;32105:19;;;32132:8;32105:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32105:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32105:38:0;;;;;32167:4;32161:20;;;32182:49;32205:7;32214:4;;32219:1;32214:7;;;;;;32182:49;32233:8;32161:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32161:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32161:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32161:81:0;32154:89:::1;;;;32254:18;32282:4:::0;;32287:15;;;32282:21;;::::1;;;;;;;;;;;;;32275:39;;;32315:2;32275:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32275:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32275:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32275:43:0;32329:44:::1;::::0;;32275:43:::1;32329:44:::0;;::::1;::::0;;;;;;;;;;;32275:43;;-1:-1:-1;32329:44:0::1;::::0;;;32364:4;;;;;;32329:44;::::1;::::0;32364:4;;32329:44;32364:4;32329:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32370:2:0;;-1:-1:-1;32329:34:0::1;::::0;-1:-1:-1;;32329:44:0:i:1;:::-;32472:12:::0;32406:62:::1;32454:13:::0;32413:4;;32418:15;;;32413:21;;::::1;;;;;;;;;;;;;32406:39;;;32446:2;32406:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;20016:853:0::0;20270:12;20284;20251:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20309:12:::1;20324:47;20347:7;20356:6;20364;20324:22;:47::i;:::-;20382:60;::::0;;;;;20414:10:::1;20382:60;::::0;::::1;::::0;:31:::1;::::0;::::1;:60:::0;;;;;;;;;;;;;;20309:62;;-1:-1:-1;20382:31:0;;::::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;20382:31:0;:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20382:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20382:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;20510:27:0::1;::::0;;;;;:23:::1;:27:::0;;::::1;;::::0;::::1;::::0;;;20480:12:::1;::::0;;;20510:23;;::::1;::::0;::::1;::::0;:27;;;;;;;;;;;20480:12;20510:23;:27;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;20510:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20510:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20510:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;20510:27:0;-1:-1:-1;20549:14:0::1;20568:41;20594:6:::0;20602;20568:25:::1;:41::i;:::-;20548:61;;;20651:6;20641:16;;:6;:16;;;:58;;20682:7;20691;20641:58;;;20661:7;20670;20641:58;20620:79:::0;;-1:-1:-1;20620:79:0;-1:-1:-1;20718:21:0;;::::1;;20710:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20810:10;20799:7;:21;;20791:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16577:1;;;;20016:853:::0;;;;;;;;;;;:::o;16367:41::-;;;:::o;34177:251::-;34321:21;34367:53;34396:7;34405:8;34415:4;34367:28;:53::i;22233:665::-;22522:16;22540:14;22567:12;22582:44;22605:7;22614:5;22621:4;22582:22;:44::i;:::-;22567:59;;22637:10;22650;:33;;22674:9;22650:33;;;22668:2;22650:33;22694:78;;;;;;22720:10;22694:78;;;;22740:4;22694:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22637:46;;-1:-1:-1;22694:25:0;;;;;;:78;;;;;-1:-1:-1;;22694:78:0;;;;;;;;-1:-1:-1;22694:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;22694:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22694:78:0;;;;22810:80;22829:5;22836:9;22847:14;22863:12;22877:2;22881:8;22810:18;:80::i;:::-;22783:107;;;;-1:-1:-1;22233:665:0;-1:-1:-1;;;;;;;;;;;;;22233:665:0:o;18263:734::-;18551:12;18565;18579:14;18532:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18627:85:::1;18641:6;18649;18657:14;18673;18689:10;18701;18627:13;:85::i;:::-;18606:106:::0;;-1:-1:-1;18606:106:0;-1:-1:-1;18723:12:0::1;18738:47;18761:7;18770:6:::0;18778;18738:22:::1;:47::i;:::-;18723:62;;18796:66;18828:6;18836:10;18848:4;18854:7;18796:31;:66::i;:::-;18873;18905:6;18913:10;18925:4;18931:7;18873:31;:66::i;:::-;18975:4;18962:23;;;18986:2;18962:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18962:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18962:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18962:27:0;18263:734;;;;-1:-1:-1;18962:27:0;;-1:-1:-1;18263:734:0;;-1:-1:-1;;;;;;;;;18263:734:0:o;19003:970::-;19256:16;19274:14;19290;19237:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19344:176:::1;19372:5;19392:4;19411:18;19444:9;19468:14;19497:12;19344:13;:176::i;:::-;19317:203:::0;;-1:-1:-1;19317:203:0;-1:-1:-1;19531:12:0::1;19546:44;19569:7;19578:5:::0;19585:4:::1;19546:22;:44::i;:::-;19531:59;;19601:69;19633:5;19640:10;19652:4;19658:11;19601:31;:69::i;:::-;19687:4;19681:19;;;19708:9;19681:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19681:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19681:39:0;;;;;19744:4;19738:20;;;19759:4;19765:9;19738:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19738:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19738:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19738:37:0;19731:45:::1;;;;19812:4;19799:23;;;19823:2;19799:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19799:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19799:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19799:27:0;;-1:-1:-1;19877:9:0::1;:21:::0;-1:-1:-1;19873:92:0::1;;;19900:65;19931:10;19955:9;19943;:21;19900:30;:65::i;:::-;16577:1;19003:970:::0;;;;;;;;;;;:::o;28844:802::-;29057:21;29029:8;16524:15;16512:8;:27;;16504:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29115:4:::1;29104:15;;:4;;29109:1;29104:7;;;;;;;;;;;;;;;:15;;;29096:55;;;::::0;;::::1;::::0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;29172:53;29200:7;29209:9;29220:4;;29172:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29172:27:0::1;::::0;-1:-1:-1;;;29172:53:0:i:1;:::-;29162:63;;29258:9;29244:7;29252:1;29244:10;;;;;;;;;;;;;;:23;;29236:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29326:4;29320:19;;;29347:7;29355:1;29347:10;;;;;;;;;;;;;;29320:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29320:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29320:40:0;;;;;29384:4;29378:20;;;29399:49;29422:7;29431:4;;29436:1;29431:7;;;;;;29399:49;29450:7;29458:1;29450:10;;;;;;;;;;;;;;29378:83;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29378:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29378:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29378:83:0;29371:91:::1;;;;29473:24;29479:7;29488:4;;29473:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29494:2:0;;-1:-1:-1;29473:5:0::1;::::0;-1:-1:-1;;29473:24:0:i:1;:::-;29560:7;29568:1;29560:10;;;;;;;;;;;;;;29548:9;:22;29544:94;;;29572:66;29603:10;29627:7;29635:1;29627:10;;;;;;;;;;;;;;29615:9;:22;29572:30;:66::i;600:361::-:0;795:45;;;784:10;795:45;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;795:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;795:45:0;179:29:-1;160:49;;784:57:0;;;;749:12;;763:17;;784:10;;;;795:45;784:57;;;25:18:-1;784: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;;;784: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;;748:93:0;;;;860:7;:57;;;;-1:-1:-1;872:11:0;;:16;;:44;;;903:4;892:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;892:24:0;872:44;852:101;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;600:361;;;;;:::o;1379:195::-;1487:12;;;1449;1487;;;;;;;;;1466:7;;;;1480:5;;1466: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;;;1466: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;;1448:52:0;;;1519:7;1511:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1379:195;;;:::o;12757:515::-;12850:14;12896:1;12885:8;:12;12877:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12974:1;12962:9;:13;:31;;;;;12992:1;12979:10;:14;12962:31;12954:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13047:20;13070:18;:8;13083:4;13070:18;:12;:18;:::i;:::-;13047:41;-1:-1:-1;13099:14:0;13116:31;13047:41;13136:10;13116:31;:19;:31;:::i;:::-;13099:48;-1:-1:-1;13158:16:0;13177:41;13202:15;13177:20;:9;13191:5;13177:20;:13;:20;:::i;:::-;:24;:41;:24;:41;:::i;:::-;13158:60;;13253:11;13241:9;:23;;;;;;;12757:515;-1:-1:-1;;;;;;;12757:515:0:o;13945:509::-;14046:21;14103:1;14088:4;:11;:16;;14080:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14169:4;:11;14158:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14158:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14158:23:0;;14148:33;;14205:8;14192:7;14200:1;14192:10;;;;;;;;;;;;;:21;;;;;14229:6;14224:223;14255:1;14241:4;:11;:15;14237:1;:19;14224:223;;;14279:14;14295:15;14314:42;14326:7;14335:4;14340:1;14335:7;;;;;;;;;;;;;;14344:4;14349:1;14353;14349:5;14344:11;;;;;;;;;;;;;;14314;:42::i;:::-;14278:78;;;;14388:47;14401:7;14409:1;14401:10;;;;;;;;;;;;;;14413:9;14424:10;14388:12;:47::i;:::-;14371:7;14379:1;14383;14379:5;14371:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;14258:3:0;;14224:223;;;;13945:509;;;;;:::o;11237:478::-;11326:12;11352:14;11368;11386:26;11397:6;11405;11386:10;:26::i;:::-;11550:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11550:32:0;;;;;11540:43;;;;;;11453:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11453:251:0;;;;;;;11443:262;;;;;;;;;11237:478;-1:-1:-1;;;;;11237:478:0:o;969:402::-;1194:51;;;1183:10;1194:51;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1194:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1194:51:0;179:29:-1;160:49;;1183:63:0;;;;1148:12;;1162:17;;1183:10;;;;1194:51;1183:63;;;25:18:-1;1183: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;;;1183: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;;1147:99:0;;;;1265:7;:57;;;;-1:-1:-1;1277:11:0;;:16;;:44;;;1308:4;1297:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1297:24:0;1277:44;1257:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;969:402;;;;;;:::o;24508:727::-;24615:6;24610:618;24641:1;24627:4;:11;:15;24623:1;:19;24610:618;;;24665:13;24680:14;24699:4;24704:1;24699:7;;;;;;;;;;;;;;24708:4;24713:1;24717;24713:5;24708:11;;;;;;;;;;;;;;24664:56;;;;24736:14;24755:40;24781:5;24788:6;24755:25;:40::i;:::-;24735:60;;;24810:14;24827:7;24835:1;24839;24835:5;24827:14;;;;;;;;;;;;;;24810:31;;24857:15;24874;24902:6;24893:15;;:5;:15;;;:61;;24935:9;24951:1;24893:61;;;24917:1;24921:9;24893:61;24856:98;;;;24969:10;25000:1;24986:4;:11;:15;24982:1;:19;:80;;25059:3;24982:80;;;25004:52;25027:7;25036:6;25044:4;25049:1;25053;25049:5;25044:11;;;;;;;;;;;;;;25004:22;:52::i;:::-;24969:93;;25090:46;25113:7;25122:5;25129:6;25090:22;:46::i;:::-;25077:65;;;25161:10;25173;25185:2;25199:1;25189:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;25189:12:0;87:42:-1;143:17;;-1:-1;25189:12:0;;25077:139;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;25077:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25077:139:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;24644:3:0;;;;;-1:-1:-1;24610:618:0;;-1:-1:-1;;;;;;;;24610:618:0;;;24508:727;;;:::o;14535:530::-;14636:21;14693:1;14678:4;:11;:16;;14670:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14759:4;:11;14748:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14748:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14748:23:0;;14738:33;;14812:9;14782:7;14807:1;14790:7;:14;:18;14782:27;;;;;;;;;;;;;;;;;:39;14846:11;;:15;;14832:226;14863:5;;14832:226;;14891:14;14907:15;14926:42;14938:7;14947:4;14956:1;14952;:5;14947:11;;;;;;;;;;;;;;14960:4;14965:1;14960:7;;;;;;;14926:42;14890:78;;;;15000:46;15012:7;15020:1;15012:10;;;;;;;;;;;;;;15024:9;15035:10;15000:11;:46::i;:::-;14983:7;14995:1;14991;:5;14983:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;14870:3:0;;14832:226;;29793:1202;29906:6;29901:1087;29932:1;29918:4;:11;:15;29914:1;:19;29901:1087;;;29956:13;29971:14;29990:4;29995:1;29990:7;;;;;;;;;;;;;;29999:4;30004:1;30008;30004:5;29999:11;;;;;;;;;;;;;;29955:56;;;;30027:14;30046:40;30072:5;30079:6;30046:25;:40::i;:::-;30026:60;;;30101:17;30134:46;30157:7;30166:5;30173:6;30134:22;:46::i;:::-;30101:80;;30196:16;30227:17;30315:13;30330;30348:4;:16;;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30348:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30348:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30348:18:0;;;;;;;30314:52;;;;;-1:-1:-1;30314:52:0;;-1:-1:-1;30382:17:0;;30423:15;;;;;;;;:61;;30465:8;30475;30423:61;;;30442:8;30452;30423:61;30381:103;;;;30513:56;30556:12;30520:5;30513:23;;;30545:4;30513:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30513:56:0;30499:70;;30599:69;30627:11;30640:12;30654:13;30599:27;:69::i;:::-;30584:84;;29901:1087;;;;30699:15;30716;30744:6;30735:15;;:5;:15;;;:67;;30780:12;30799:1;30735:67;;;30759:1;30763:12;30735:67;30698:104;;;;30817:10;30848:1;30834:4;:11;:15;30830:1;:19;:80;;30907:3;30830:80;;;30852:52;30875:7;30884:6;30892:4;30897:1;30901;30897:5;30892:11;;;;;;;30852:52;30963:12;;;30973:1;30963:12;;;;;;;;;;30925:51;;;;;;;;;;;;;;;:9;:51;;;;;;;;;;;;;;;;;;;;;;30817:93;;-1:-1:-1;30925:9:0;;;;;;30935:10;;30947;;30817:93;;30963:12;;30925:51;;;;;;;;30963:12;;30925:51;;;;30963: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;30925:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30925:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29935:3:0;;;;;-1:-1:-1;29901:1087:0;;-1:-1:-1;;;;;;;;;;29901:1087:0;7742:129;7826:5;;;7821:16;;;;7813:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13393:470;13486:13;13532:1;13520:9;:13;13512:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13611:1;13599:9;:13;:31;;;;;13629:1;13616:10;:14;13599:31;13591:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13684:14;13701:35;13730:5;13701:24;:9;13715;13701:24;:13;:24;:::i;:::-;:28;:35;:28;:35;:::i;:::-;13684:52;-1:-1:-1;13747:16:0;13766:35;13796:4;13766:25;:10;13781:9;13766:25;:14;:25;:::i;:35::-;13747:54;;13823:32;13853:1;13836:11;13824:9;:23;;;;;;;13823:32;:29;:32;:::i;:::-;13812:43;13393:470;-1:-1:-1;;;;;;13393:470:0:o;12318:317::-;12400:12;12443:1;12433:7;:11;12425:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12514:1;12503:8;:12;:28;;;;;12530:1;12519:8;:12;12503:28;12495:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12619:8;12595:21;:7;12607:8;12595:21;:11;:21;:::i;:::-;:32;;;;;;;12318:317;-1:-1:-1;;;;12318:317:0:o;10800:345::-;10875:14;10891;10936:6;10926:16;;:6;:16;;;;10918:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11021:6;11012:15;;:6;:15;;;:53;;11050:6;11058;11012:53;;;11031:6;11039;11012:53;10993:72;;-1:-1:-1;10993:72:0;-1:-1:-1;11084:20:0;;;11076:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10800:345;;;;;:::o;16881:1376::-;17194:48;;;;;;:62;:48;;;;;;;;;;;;;;;;17099:12;;;;;;17210:7;17194:32;;;;;;:48;;;;;;;;;;;;;;;:32;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;17194:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17194:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17194:48:0;:62;;;17190:146;;;17273:51;;;;;;:35;:51;;;;;;;;;;;;;;;;17289:7;17273:35;;;;;;:51;;;;;;;;;;;;;;;-1:-1:-1;17273:35:0;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;17273:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17273:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17190:146:0;17347:13;17362;17379:51;17406:7;17415:6;17423;17379:26;:51::i;:::-;17346:84;;;;17445:8;17457:1;17445:13;:30;;;;-1:-1:-1;17462:13:0;;17445:30;17441:809;;;17514:14;;-1:-1:-1;17530:14:0;;-1:-1:-1;17441:809:0;;;17578:19;17600:56;17621:14;17637:8;17647;17600:20;:56::i;:::-;17578:78;;17693:14;17675;:32;17671:568;;17754:10;17736:14;:28;;17728:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17846:14;;-1:-1:-1;17862:14:0;-1:-1:-1;17862:14:0;17671:568;;;17918:19;17940:56;17961:14;17977:8;17987;17940:20;:56::i;:::-;17918:78;;18040:14;18022;:32;;18015:40;;;;18100:10;18082:14;:28;;18074:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18192:14;-1:-1:-1;18208:14:0;;-1:-1:-1;17671:568:0;17441:809;;16881:1376;;;;;;;;;;;:::o;7879:142::-;7931:6;7958;;;:30;;-1:-1:-1;;7973:5:0;;;7987:1;7982;7973:5;7982:1;7968:15;;;;;:20;7958:30;7950:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7606:128;7690:5;;;7685:16;;;;7677:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11773:432;11866:13;11881;11908:14;11927:26;11938:6;11946;11927:10;:26::i;:::-;11907:46;;;11964:32;11972:7;11981:6;11989;11964:7;:32::i;:::-;;12008:13;12023;12054:32;12062:7;12071:6;12079;12054:7;:32::i;:::-;12041:58;;;:60;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12041:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12041:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12041:60:0;;;;;;;12007:94;;;;;-1:-1:-1;12007:94:0;;-1:-1:-1;12135:16:0;;;;;;;;:62;;12178:8;12188;12135:62;;;12155:8;12165;12135:62;12112:85;;;;-1:-1:-1;11773:432:0;-1:-1:-1;;;;;;;11773:432:0:o

Swarm Source

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