Contract 0x0a04fa4a842fa21e202dd07e721b048b466edb47

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x8f9a7820795c63068612f4aa9580110cbd2150e559b984b12e27fc6c35d240feSwap Exact Token...111355952021-09-22 11:55:1716 secs ago0xa426ae5e927c2ea641029615c2b9c9f9a9437fed IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.0005745252
0xfd6e71d4a06c2016be21205c9356526fdb44fb075cfccc586b56dd2c0e784941Swap Exact Token...111355892021-09-22 11:54:5934 secs ago0x19f7b7cd47325a2432bcc58b55c185a6be982589 IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.0005797068
0x5fa38c9f4a3ecf99b01c25064779dd6910bba506aafd74b94d6a2e1b2a09ffe7Swap Exact Token...111355472021-09-22 11:52:532 mins ago0x6b2e6c334d7fe738ca42b021635dfb2be5aa6c5a IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.0005855004
0xa4fbd5380a003e1f6d3a3eedbb032b04068010a57ff530e1064e8b24332c00feSwap Exact Token...111355162021-09-22 11:51:204 mins ago0xf17e60cdc3c5b9a6fe70bcc37a18e39c2be449ea IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.0004980864
0xcab4bc2576f5382a621cd77c703bd4f9a40165322cb1f520766ab6b7e1ff049dRemove Liquidity...111354842021-09-22 11:49:445 mins ago0xf17e60cdc3c5b9a6fe70bcc37a18e39c2be449ea IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.0010008852
0x926ac8c8ebf021be747f92551e7d083e718b6f9ee5ecfa9e541ee6c170beb99fAdd Liquidity111354412021-09-22 11:47:357 mins ago0x2043b51bb1c54af0031afbb979667fb2ef21680c IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.000808275
0xfb895c5f6cd7facfd1fb7b9ebf8efb9a568b99a8b66bb18120a80fefd93ec15bSwap Exact Token...111354412021-09-22 11:47:357 mins ago0x159073a5fef31c732565d5556e36fa3c2d1efebc IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.0005855004
0xc033da7d64754a508351eb11841820948a2f0928539aaa71bcc747a03979d451Swap Exact Token...111354342021-09-22 11:47:148 mins ago0xa330f607a29f54e2936c0fff9b370b920e9b3f24 IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.0005794722
0xa1e069937cc6043c89c8310917ec775b1cac4cdba694705b06b60f3869ed9de7Swap Exact Token...111354102021-09-22 11:46:029 mins ago0x2043b51bb1c54af0031afbb979667fb2ef21680c IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.0005744028
0xa1b6354f66f8acdeae9b0df3f5bf7e4a2bea773051fc6841d2c683625fefa6bfSwap Exact Token...111353902021-09-22 11:45:0210 mins ago0x5f82a634d560ae6fe3b62dc05033ba637817bfbb IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.000574464
0xf42f0862421de61495e7982f23b033e033f999ef07553ed40931d7a1421e69caSwap Exact Token...111353802021-09-22 11:44:3211 mins ago0x24a679901524f925e72d2950366fca1bfc10a16a IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.000579768
0x2faec6a9ad8f86ae90d4c9e46592e8a09b19ef654098040c541d0979171313e9Swap Exact Token...111353732021-09-22 11:44:1111 mins ago0x574908b0f1ab25f7de074759fa1d9e940969462b IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.0006509028
0xe73c2921a1f2870e1ea381e3bf6294cbd214a76535cb758daa1b9d9e49f82bbaAdd Liquidity111353222021-09-22 11:41:3613 mins ago0xba6706319f3389241a6dbd1c0294bc39fc5ede31 IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.0008863851
0xbef7e3e186c8db46d0b5b6d05fe2ce10ab90de680cafa67fef13dd2a00609436Swap Exact Token...111353012021-09-22 11:40:3315 mins ago0xba6706319f3389241a6dbd1c0294bc39fc5ede31 IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.0006509028
0x1d252cf2754d693e8060b447a2cbaf7fec4e7f1973778d4b2d6e224ba4666e7cSwap Tokens For ...111352912021-09-22 11:40:0315 mins ago0x60149ced3f0bfa7a82929dfe642b36f232796f7e IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.000507215
0x9214c313609e8649c245122db5f616cef777bc3119cde7192b2ca6ef71b13f17Swap Exact Token...111351712021-09-22 11:34:0321 mins ago0x2396ae6df988da93e03fded42669cae037f24b07 IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.0005734797
0xf22586d092dab78c300321f4b6aed48c333ed3e5d58caff658cfd4a3bab1747bSwap Exact Token...111351612021-09-22 11:33:3322 mins ago0x614a1f69c740a403312ccb50f89b8ffb43cdeb10 IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.0005744028
0xbeed306558feb726b20385f4fee3877651abf4fb0ff642ed13d1ca0a894779f3Swap Exact Token...111351432021-09-22 11:32:3922 mins ago0x8fb3079f400d95adb08402f3bf55b1191c4d2944 IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.0005744028
0x0f40b5fa7a7601cd75f18c61cecbeaa3d055004232260250bda2978f508431eaSwap Exact Token...111351142021-09-22 11:31:1224 mins ago0x58f36cf65ded787e1b68e4ea5a63d0f93355fb2e IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.0005745864
0xf25e46786e2f3e5c6ec7a6cf70dece3d311fe176a19995b1d79c4ee882e97217Swap Exact Token...111351022021-09-22 11:30:3624 mins ago0x136e03883f3b0c50a499585f17c20ef9cf5cc27c IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.0005745252
0x60f8fb6995d328a85a26e3fb95b08c02b1b660864a10e3b2785d66e0e86cbf7cRemove Liquidity...111350812021-09-22 11:29:3326 mins ago0x136e03883f3b0c50a499585f17c20ef9cf5cc27c IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.0009485745
0xddac78dcf2a4936061df5987ddf72f77120ceeda4186a908c468290419d239afAdd Liquidity111350222021-09-22 11:26:3628 mins ago0xfb47a320f6cccd11055f6c3da887b03a41215190 IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.000857865
0x1f8b10823d53e84c7838f9a4bd8c48933d0590c3a71c2458d16f303d28b658baSwap Exact Token...111350062021-09-22 11:25:4829 mins ago0xfb47a320f6cccd11055f6c3da887b03a41215190 IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.00056302
0x9ee5f4a5d8caec448b953937e0f95125f486a55a8023597a0d009ffb45cf4c50Swap Exact Token...111349922021-09-22 11:25:0630 mins ago0xfb47a320f6cccd11055f6c3da887b03a41215190 IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.000652625
0xb0f278ea437df9f84c2126333bef3a4d97afd24b24df252249feea7c1ea8b80aSwap Exact Token...111349282021-09-22 11:21:5433 mins ago0x136e03883f3b0c50a499585f17c20ef9cf5cc27c IN  0x0a04fa4a842fa21e202dd07e721b048b466edb470 BNB0.0006510864
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xcab4bc2576f5382a621cd77c703bd4f9a40165322cb1f520766ab6b7e1ff049d111354842021-09-22 11:49:445 mins ago 0x0a04fa4a842fa21e202dd07e721b048b466edb470xf17e60cdc3c5b9a6fe70bcc37a18e39c2be449ea1.112300024279490898 BNB
0xcab4bc2576f5382a621cd77c703bd4f9a40165322cb1f520766ab6b7e1ff049d111354842021-09-22 11:49:445 mins ago Binance: WBNB Token 0x0a04fa4a842fa21e202dd07e721b048b466edb471.112300024279490898 BNB
0x9ee5f4a5d8caec448b953937e0f95125f486a55a8023597a0d009ffb45cf4c50111349922021-09-22 11:25:0630 mins ago 0x0a04fa4a842fa21e202dd07e721b048b466edb470xfb47a320f6cccd11055f6c3da887b03a412151900.005726067560097653 BNB
0x9ee5f4a5d8caec448b953937e0f95125f486a55a8023597a0d009ffb45cf4c50111349922021-09-22 11:25:0630 mins ago Binance: WBNB Token 0x0a04fa4a842fa21e202dd07e721b048b466edb470.005726067560097653 BNB
0x26d9c601683669bf2c77e1aeec888747e6ffa35374dc7b8ce560562bd1d37420111349042021-09-22 11:20:4234 mins ago 0x0a04fa4a842fa21e202dd07e721b048b466edb470xd24d47d0db8b7e488b8a64982e5f41d6030a63370.037221477863140616 BNB
0x26d9c601683669bf2c77e1aeec888747e6ffa35374dc7b8ce560562bd1d37420111349042021-09-22 11:20:4234 mins ago Binance: WBNB Token 0x0a04fa4a842fa21e202dd07e721b048b466edb470.037221477863140616 BNB
0x9608cdefc7eb2e3bc3acf8cdd79607efbb91e8866c933eba339208f9d652a5a0111344062021-09-22 10:55:3859 mins ago 0x0a04fa4a842fa21e202dd07e721b048b466edb470xf6b5c85eecc0d3a43795aab9205f94fd89683dac0.028634307798080771 BNB
0x9608cdefc7eb2e3bc3acf8cdd79607efbb91e8866c933eba339208f9d652a5a0111344062021-09-22 10:55:3859 mins ago Binance: WBNB Token 0x0a04fa4a842fa21e202dd07e721b048b466edb470.028634307798080771 BNB
0x35197f7d554585067e64c74ef7949e0208fcfe5b7484de957dde35f057f2591c111337192021-09-22 10:21:141 hr 34 mins ago 0x0a04fa4a842fa21e202dd07e721b048b466edb470x3d15a191ddb09ff5835963d998966c0c46f29c8a0.008804123387051544 BNB
0x35197f7d554585067e64c74ef7949e0208fcfe5b7484de957dde35f057f2591c111337192021-09-22 10:21:141 hr 34 mins ago Binance: WBNB Token 0x0a04fa4a842fa21e202dd07e721b048b466edb470.008804123387051544 BNB
0x624c1cf7fc6b9d7285891fa7cc009fce73d4818070c3038ec18f197d6ee5933a111335692021-09-22 10:13:441 hr 41 mins ago 0x0a04fa4a842fa21e202dd07e721b048b466edb470xf945a17499c4079c40635e19c21f10a5ff89c86f0.069317306658206971 BNB
0x624c1cf7fc6b9d7285891fa7cc009fce73d4818070c3038ec18f197d6ee5933a111335692021-09-22 10:13:441 hr 41 mins ago Binance: WBNB Token 0x0a04fa4a842fa21e202dd07e721b048b466edb470.069317306658206971 BNB
0xf390094e9479cd83a71a7169b05fcde2f73ece7c7e9086a052ee220248081d2c111335522021-09-22 10:12:531 hr 42 mins ago 0x0a04fa4a842fa21e202dd07e721b048b466edb470xec697908b84c1466fd9b1a58dcd8d46545e2f7400.025970623679784242 BNB
0xf390094e9479cd83a71a7169b05fcde2f73ece7c7e9086a052ee220248081d2c111335522021-09-22 10:12:531 hr 42 mins ago Binance: WBNB Token 0x0a04fa4a842fa21e202dd07e721b048b466edb470.025970623679784242 BNB
0xe97315d734ff7562ccae7c372822d0813ca1a050e211bf95bb1d95bb61e07a32111329642021-09-22 9:43:292 hrs 12 mins ago 0x0a04fa4a842fa21e202dd07e721b048b466edb470xb51c64385d136641566ae7418dab541390237a190.086244468266655111 BNB
0xe97315d734ff7562ccae7c372822d0813ca1a050e211bf95bb1d95bb61e07a32111329642021-09-22 9:43:292 hrs 12 mins ago Binance: WBNB Token 0x0a04fa4a842fa21e202dd07e721b048b466edb470.086244468266655111 BNB
0xd93677ee2dd298adf6cf17cb73698df88ba6fb22ff7e88e0527b2230767d3c9f111328822021-09-22 9:39:232 hrs 16 mins ago 0x0a04fa4a842fa21e202dd07e721b048b466edb470x3eaa25d1a7a28c0482071b2266be0939135daa550.028752356315300648 BNB
0xd93677ee2dd298adf6cf17cb73698df88ba6fb22ff7e88e0527b2230767d3c9f111328822021-09-22 9:39:232 hrs 16 mins ago Binance: WBNB Token 0x0a04fa4a842fa21e202dd07e721b048b466edb470.028752356315300648 BNB
0x0fb9b370f41b37ab843d6f2d2c2482c167385587fc160a93fe4c6a7ddabe32e4111327562021-09-22 9:33:052 hrs 22 mins ago 0x0a04fa4a842fa21e202dd07e721b048b466edb470x34b471001d89bc3622c0b8e5c6ebf7ce9d1747530.017252422391883317 BNB
0x0fb9b370f41b37ab843d6f2d2c2482c167385587fc160a93fe4c6a7ddabe32e4111327562021-09-22 9:33:052 hrs 22 mins ago Binance: WBNB Token 0x0a04fa4a842fa21e202dd07e721b048b466edb470.017252422391883317 BNB
0x7f2cf6566a552ea71baf79d274efa2c5c14a5431c811abd180df6799b7a3669f111325402021-09-22 9:22:172 hrs 33 mins ago 0x0a04fa4a842fa21e202dd07e721b048b466edb470xf717339229d79a8b616e1f827e1c296de6ea2a730.017253179188978887 BNB
0x7f2cf6566a552ea71baf79d274efa2c5c14a5431c811abd180df6799b7a3669f111325402021-09-22 9:22:172 hrs 33 mins ago Binance: WBNB Token 0x0a04fa4a842fa21e202dd07e721b048b466edb470.017253179188978887 BNB
0xb13ea0dfed4ee1bd3e2bba8ce6cd663062194a72632013bdf08d1af99f1aa098111321432021-09-22 9:02:172 hrs 53 mins ago 0x0a04fa4a842fa21e202dd07e721b048b466edb47 Binance: WBNB Token0.057684911520060584 BNB
0x9806d637ad5882670f6afa6b14f1e4f70fe7ec3099b834e49bb8cc765e6e3d01111321132021-09-22 9:00:472 hrs 54 mins ago 0x0a04fa4a842fa21e202dd07e721b048b466edb470xec3f1fea064a07f011f8ea04d5842735797a0d2b0.057228467127063101 BNB
0x9806d637ad5882670f6afa6b14f1e4f70fe7ec3099b834e49bb8cc765e6e3d01111321132021-09-22 9:00:472 hrs 54 mins ago Binance: WBNB Token 0x0a04fa4a842fa21e202dd07e721b048b466edb470.057228467127063101 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PippiRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-06-28
*/

pragma solidity =0.6.6;

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

// File: @uniswap/lib/contracts/libraries/TransferHelper.sol

 

// 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/IPippiRouter01.sol
 

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

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

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

 

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

 

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)

library SafeMath {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

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

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

 



library PippiLibrary {
    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, 'PippiLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'PippiLibrary: 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'877576efdb9f58ae586c6dd57a256a53a5f56fda1ac314680b131d2d5eb2e24c' // 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,) = IPippiPair(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, 'PippiLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'PippiLibrary: 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, 'PippiLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'PippiLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(997);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

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

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

 

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

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

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

 

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

 



contract PippiRouter is IPippiRouter02 {
    using SafeMath for uint;

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

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

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

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

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

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

Contract Security Audit

Contract ABI

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

60c060405234801561001057600080fd5b5060405162004760380380620047608339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6145db620001856000398061015f5280610ce45280610d1f5280610e16528061103452806113be528061152452806118eb52806119e55280611a9b5280611b695280611caf5280611d375280611f7c5280611ff752806120a652806121725280612207528061227b52806127a55280612a185280612a6e5280612aa25280612b165280612cb65280612df95280612e81525080610ea45280610f7b52806110fa5280611133528061126e528061144c528061150252806116725280611bfc5280611d695280611ecc52806122ad5280612506528061272a5280612753528061278352806128f05280612a4c5280612d495280612eb3528061375a528061379d5280613a805280613bff528061402f52806140dd528061415d52506145db6000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506110f3945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611129565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b038135169060200135611223565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b03813516906020013561136e565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e082013516906101008101359061012001356114fa565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611608565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b03813516906020013561189d565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b21565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135611e74565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611e81565b34801561088157600080fd5b5061088a611f7a565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135611f9e565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611fab565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561212c565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356124b8565b348015610a1c57600080fd5b5061088a612728565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061274c945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612779565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e0013561288d565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a001356129c9565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b038135169060200135612c6e565b6000808242811015610cde576040805162461bcd60e51b81526020600482015260126024820152600080516020614562833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6124b8565b9093509150610d1d898685612ff0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361315a565b50965096945050505050565b6000610dbe848484613252565b949350505050565b60608142811015610e0c576040805162461bcd60e51b81526020600482015260126024820152600080516020614562833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e4657fe5b905060200201356001600160a01b03166001600160a01b031614610e9f576040805162461bcd60e51b8152602060048201526017602482015260008051602061451f833981519152604482015290519081900360640190fd5b610efd7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061334292505050565b91508682600184510381518110610f1057fe5b60200260200101511015610f555760405162461bcd60e51b81526004018080602001828103825260258152602001806144736025913960400191505060405180910390fd5b610ff386866000818110610f6557fe5b905060200201356001600160a01b031633610fd97f00000000000000000000000000000000000000000000000000000000000000008a8a6000818110610fa757fe5b905060200201356001600160a01b03168b8b6001818110610fc457fe5b905060200201356001600160a01b031661348e565b85600081518110610fe657fe5b602002602001015161354e565b611032828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506136ab915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061107157fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156110af57600080fd5b505af11580156110c3573d6000803e3d6000fd5b505050506110e884836001855103815181106110db57fe5b602002602001015161315a565b509695505050505050565b60606111207f000000000000000000000000000000000000000000000000000000000000000084846138f1565b90505b92915050565b60008060006111597f00000000000000000000000000000000000000000000000000000000000000008f8f61348e565b9050600087611168578c61116c565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156111e257600080fd5b505af11580156111f6573d6000803e3d6000fd5b505050506112098f8f8f8f8f8f8f6124b8565b809450819550505050509b509b9950505050505050505050565b60608142811015611269576040805162461bcd60e51b81526020600482015260126024820152600080516020614562833981519152604482015290519081900360640190fd5b6112c77f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061334292505050565b915086826001845103815181106112da57fe5b6020026020010151101561131f5760405162461bcd60e51b81526004018080602001828103825260258152602001806144736025913960400191505060405180910390fd5b61132f86866000818110610f6557fe5b6110e8828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506136ab915050565b606081428110156113b4576040805162461bcd60e51b81526020600482015260126024820152600080516020614562833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106113ee57fe5b905060200201356001600160a01b03166001600160a01b031614611447576040805162461bcd60e51b8152602060048201526017602482015260008051602061451f833981519152604482015290519081900360640190fd5b6114a57f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138f192505050565b915086826000815181106114b557fe5b60200260200101511115610f555760405162461bcd60e51b81526004018080602001828103825260218152602001806144fe6021913960400191505060405180910390fd5b6000806115487f00000000000000000000000000000000000000000000000000000000000000008d7f000000000000000000000000000000000000000000000000000000000000000061348e565b9050600086611557578b61155b565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156115d157600080fd5b505af11580156115e5573d6000803e3d6000fd5b505050506115f78d8d8d8d8d8d611fab565b9d9c50505050505050505050505050565b804281101561164c576040805162461bcd60e51b81526020600482015260126024820152600080516020614562833981519152604482015290519081900360640190fd5b6116c18585600081811061165c57fe5b905060200201356001600160a01b0316336116bb7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b905060200201356001600160a01b03168a8a6001818110610fc457fe5b8a61354e565b6000858560001981018181106116d357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561173857600080fd5b505afa15801561174c573d6000803e3d6000fd5b505050506040513d602081101561176257600080fd5b505160408051602088810282810182019093528882529293506117a4929091899189918291850190849080828437600092019190915250889250613a29915050565b8661185682888860001981018181106117b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b505afa158015611832573d6000803e3d6000fd5b505050506040513d602081101561184857600080fd5b50519063ffffffff613d3416565b10156118935760405162461bcd60e51b81526004018080602001828103825260258152602001806144736025913960400191505060405180910390fd5b5050505050505050565b80428110156118e1576040805162461bcd60e51b81526020600482015260126024820152600080516020614562833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061191b57fe5b905060200201356001600160a01b03166001600160a01b031614611974576040805162461bcd60e51b8152602060048201526017602482015260008051602061451f833981519152604482015290519081900360640190fd5b6119848585600081811061165c57fe5b6119c2858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613a29915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611a2c57600080fd5b505afa158015611a40573d6000803e3d6000fd5b505050506040513d6020811015611a5657600080fd5b5051905086811015611a995760405162461bcd60e51b81526004018080602001828103825260258152602001806144736025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611aff57600080fd5b505af1158015611b13573d6000803e3d6000fd5b50505050611893848261315a565b60608142811015611b67576040805162461bcd60e51b81526020600482015260126024820152600080516020614562833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611b9e57fe5b905060200201356001600160a01b03166001600160a01b031614611bf7576040805162461bcd60e51b8152602060048201526017602482015260008051602061451f833981519152604482015290519081900360640190fd5b611c557f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061334292505050565b91508682600184510381518110611c6857fe5b60200260200101511015611cad5760405162461bcd60e51b81526004018080602001828103825260258152602001806144736025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611ce957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611d1c57600080fd5b505af1158015611d30573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611d957f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110611da257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611df957600080fd5b505af1158015611e0d573d6000803e3d6000fd5b505050506040513d6020811015611e2357600080fd5b5051611e2b57fe5b611e6a828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506136ab915050565b5095945050505050565b6000610dbe848484613d84565b60608142811015611ec7576040805162461bcd60e51b81526020600482015260126024820152600080516020614562833981519152604482015290519081900360640190fd5b611f257f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138f192505050565b91508682600081518110611f3557fe5b6020026020010151111561131f5760405162461bcd60e51b81526004018080602001828103825260218152602001806144fe6021913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484613e74565b60008142811015611ff1576040805162461bcd60e51b81526020600482015260126024820152600080516020614562833981519152604482015290519081900360640190fd5b612020887f000000000000000000000000000000000000000000000000000000000000000089898930896124b8565b604080516370a0823160e01b815230600482015290519194506120a492508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561207357600080fd5b505afa158015612087573d6000803e3d6000fd5b505050506040513d602081101561209d57600080fd5b5051612ff0565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561210a57600080fd5b505af115801561211e573d6000803e3d6000fd5b505050506110e8848361315a565b8042811015612170576040805162461bcd60e51b81526020600482015260126024820152600080516020614562833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106121a757fe5b905060200201356001600160a01b03166001600160a01b031614612200576040805162461bcd60e51b8152602060048201526017602482015260008051602061451f833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561226057600080fd5b505af1158015612274573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122d97f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561232957600080fd5b505af115801561233d573d6000803e3d6000fd5b505050506040513d602081101561235357600080fd5b505161235b57fe5b60008686600019810181811061236d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156123d257600080fd5b505afa1580156123e6573d6000803e3d6000fd5b505050506040513d60208110156123fc57600080fd5b5051604080516020898102828101820190935289825292935061243e9290918a918a918291850190849080828437600092019190915250899250613a29915050565b87611856828989600019810181811061245357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b60008082428110156124ff576040805162461bcd60e51b81526020600482015260126024820152600080516020614562833981519152604482015290519081900360640190fd5b600061252c7f00000000000000000000000000000000000000000000000000000000000000008c8c61348e565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561258757600080fd5b505af115801561259b573d6000803e3d6000fd5b505050506040513d60208110156125b157600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156125fe57600080fd5b505af1158015612612573d6000803e3d6000fd5b505050506040513d604081101561262857600080fd5b508051602090910151909250905060006126428e8e613f20565b509050806001600160a01b03168e6001600160a01b031614612665578183612668565b82825b90975095508a8710156126c2576040805162461bcd60e51b815260206004820181905260248201527f574643526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b89861015612717576040805162461bcd60e51b815260206004820181905260248201527f574643526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111207f00000000000000000000000000000000000000000000000000000000000000008484613342565b60008060006127c97f00000000000000000000000000000000000000000000000000000000000000008e7f000000000000000000000000000000000000000000000000000000000000000061348e565b90506000876127d8578c6127dc565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561285257600080fd5b505af1158015612866573d6000803e3d6000fd5b505050506128788e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b600080600083428110156128d6576040805162461bcd60e51b81526020600482015260126024820152600080516020614562833981519152604482015290519081900360640190fd5b6128e48c8c8c8c8c8c613ffe565b909450925060006129167f00000000000000000000000000000000000000000000000000000000000000008e8e61348e565b90506129248d33838861354e565b6129308c33838761354e565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561298857600080fd5b505af115801561299c573d6000803e3d6000fd5b505050506040513d60208110156129b257600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612a12576040805162461bcd60e51b81526020600482015260126024820152600080516020614562833981519152604482015290519081900360640190fd5b612a408a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613ffe565b90945092506000612a927f00000000000000000000000000000000000000000000000000000000000000008c7f000000000000000000000000000000000000000000000000000000000000000061348e565b9050612aa08b33838861354e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612afb57600080fd5b505af1158015612b0f573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612b9457600080fd5b505af1158015612ba8573d6000803e3d6000fd5b505050506040513d6020811015612bbe57600080fd5b5051612bc657fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612c1e57600080fd5b505af1158015612c32573d6000803e3d6000fd5b505050506040513d6020811015612c4857600080fd5b5051925034841015612c6057612c603385340361315a565b505096509650969350505050565b60608142811015612cb4576040805162461bcd60e51b81526020600482015260126024820152600080516020614562833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612ceb57fe5b905060200201356001600160a01b03166001600160a01b031614612d44576040805162461bcd60e51b8152602060048201526017602482015260008051602061451f833981519152604482015290519081900360640190fd5b612da27f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506138f192505050565b91503482600081518110612db257fe5b60200260200101511115612df75760405162461bcd60e51b81526004018080602001828103825260218152602001806144fe6021913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612e3357fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e6657600080fd5b505af1158015612e7a573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612edf7f00000000000000000000000000000000000000000000000000000000000000008989600081811061169e57fe5b84600081518110612eec57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612f4357600080fd5b505af1158015612f57573d6000803e3d6000fd5b505050506040513d6020811015612f6d57600080fd5b5051612f7557fe5b612fb4828787808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508992506136ab915050565b81600081518110612fc157fe5b6020026020010151341115611e6a57611e6a3383600081518110612fe157fe5b6020026020010151340361315a565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b6020831061306d5780518252601f19909201916020918201910161304e565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146130cf576040519150601f19603f3d011682016040523d82523d6000602084013e6130d4565b606091505b509150915081801561310257508051158061310257508080602001905160208110156130ff57600080fd5b50515b613153576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106131a65780518252601f199092019160209182019101613187565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613208576040519150601f19603f3d011682016040523d82523d6000602084013e61320d565b606091505b505090508061324d5760405162461bcd60e51b815260040180806020018281038252602381526020018061453f6023913960400191505060405180910390fd5b505050565b60008084116132925760405162461bcd60e51b815260040180806020018281038252602781526020018061444c6027913960400191505060405180910390fd5b6000831180156132a25750600082115b6132dd5760405162461bcd60e51b81526004018080602001828103825260248152602001806144da6024913960400191505060405180910390fd5b60006132f1856103e563ffffffff61429e16565b90506000613305828563ffffffff61429e16565b9050600061332b8361331f886103e863ffffffff61429e16565b9063ffffffff61430116565b905080828161333657fe5b04979650505050505050565b606060028251101561339b576040805162461bcd60e51b815260206004820152601a60248201527f50697070694c6962726172793a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b815167ffffffffffffffff811180156133b357600080fd5b506040519080825280602002602001820160405280156133dd578160200160208202803683370190505b50905082816000815181106133ee57fe5b60200260200101818152505060005b6001835103811015613486576000806134408786858151811061341c57fe5b602002602001015187866001018151811061343357fe5b6020026020010151614350565b9150915061346284848151811061345357fe5b60200260200101518383613252565b84846001018151811061347157fe5b602090810291909101015250506001016133fd565b509392505050565b600080600061349d8585613f20565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f877576efdb9f58ae586c6dd57a256a53a5f56fda1ac314680b131d2d5eb2e24c609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106135d35780518252601f1990920191602091820191016135b4565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613635576040519150601f19603f3d011682016040523d82523d6000602084013e61363a565b606091505b5091509150818015613668575080511580613668575080806020019051602081101561366557600080fd5b50515b6136a35760405162461bcd60e51b81526004018080602001828103825260248152602001806145826024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156138eb576000808483815181106136c957fe5b60200260200101518584600101815181106136e057fe5b60200260200101519150915060006136f88383613f20565b509050600087856001018151811061370c57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461373a5782600061373e565b6000835b91509150600060028a510388106137555788613796565b6137967f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061378957fe5b602002602001015161348e565b90506137c37f0000000000000000000000000000000000000000000000000000000000000000888861348e565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613800576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613871578181015183820152602001613859565b50505050905090810190601f16801561389e5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156138c057600080fd5b505af11580156138d4573d6000803e3d6000fd5b5050600190990198506136ae975050505050505050565b50505050565b606060028251101561394a576040805162461bcd60e51b815260206004820152601a60248201527f50697070694c6962726172793a20494e56414c49445f50415448000000000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561396257600080fd5b5060405190808252806020026020018201604052801561398c578160200160208202803683370190505b50905082816001835103815181106139a057fe5b60209081029190910101528151600019015b8015613486576000806139e2878660018603815181106139ce57fe5b602002602001015187868151811061343357fe5b91509150613a048484815181106139f557fe5b60200260200101518383613d84565b846001850381518110613a1357fe5b60209081029190910101525050600019016139b2565b60005b600183510381101561324d57600080848381518110613a4757fe5b6020026020010151858460010181518110613a5e57fe5b6020026020010151915091506000613a768383613f20565b5090506000613aa67f0000000000000000000000000000000000000000000000000000000000000000858561348e565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613ae757600080fd5b505afa158015613afb573d6000803e3d6000fd5b505050506040513d6060811015613b1157600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613b47578284613b4a565b83835b91509150613ba8828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561181e57600080fd5b9550613bb5868383613252565b945050505050600080856001600160a01b0316886001600160a01b031614613bdf57826000613be3565b6000835b91509150600060028c51038a10613bfa578a613c2e565b613c2e7f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061378957fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613cb8578181015183820152602001613ca0565b50505050905090810190601f168015613ce55780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613d0757600080fd5b505af1158015613d1b573d6000803e3d6000fd5b50506001909b019a50613a2c9950505050505050505050565b80820382811115611123576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613dc45760405162461bcd60e51b81526004018080602001828103825260288152602001806144246028913960400191505060405180910390fd5b600083118015613dd45750600082115b613e0f5760405162461bcd60e51b81526004018080602001828103825260248152602001806144da6024913960400191505060405180910390fd5b6000613e336103e8613e27868863ffffffff61429e16565b9063ffffffff61429e16565b90506000613e4d6103e5613e27868963ffffffff613d3416565b9050613e6a6001828481613e5d57fe5b049063ffffffff61430116565b9695505050505050565b6000808411613eb45760405162461bcd60e51b81526004018080602001828103825260218152602001806144b96021913960400191505060405180910390fd5b600083118015613ec45750600082115b613eff5760405162461bcd60e51b81526004018080602001828103825260248152602001806144da6024913960400191505060405180910390fd5b82613f10858463ffffffff61429e16565b81613f1757fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613f745760405162461bcd60e51b81526004018080602001828103825260218152602001806144986021913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610613f94578284613f97565b83835b90925090506001600160a01b038216613ff7576040805162461bcd60e51b815260206004820152601a60248201527f50697070694c6962726172793a205a45524f5f41444452455353000000000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561407857600080fd5b505afa15801561408c573d6000803e3d6000fd5b505050506040513d60208110156140a257600080fd5b50516001600160a01b0316141561415557604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561412857600080fd5b505af115801561413c573d6000803e3d6000fd5b505050506040513d602081101561415257600080fd5b50505b6000806141837f00000000000000000000000000000000000000000000000000000000000000008b8b614350565b91509150816000148015614195575080155b156141a557879350869250614291565b60006141b2898484613e74565b905087811161421b5785811015614210576040805162461bcd60e51b815260206004820181905260248201527f574643526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b88945092508261428f565b6000614228898486613e74565b90508981111561423457fe5b87811015614289576040805162461bcd60e51b815260206004820181905260248201527f574643526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b94508793505b505b5050965096945050505050565b60008115806142b9575050808202828282816142b657fe5b04145b611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015611123576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b600080600061435f8585613f20565b50905061436d86868661348e565b5060008061437c88888861348e565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156143b457600080fd5b505afa1580156143c8573d6000803e3d6000fd5b505050506040513d60608110156143de57600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614614411578082614414565b81815b9099909850965050505050505056fe50697070694c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e5450697070694c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e54574643526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e5450697070694c6962726172793a204944454e544943414c5f41444452455353455350697070694c6962726172793a20494e53554646494349454e545f414d4f554e5450697070694c6962726172793a20494e53554646494349454e545f4c4951554944495459574643526f757465723a204558434553534956455f494e5055545f414d4f554e54574643526f757465723a20494e56414c49445f504154480000000000000000005472616e7366657248656c7065723a204554485f5452414e534645525f4641494c4544574643526f757465723a204558504952454400000000000000000000000000005472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a2646970667358221220c9e2b17b591b2cd30e2645624c9b718c85fff2d718590b9c1188d756170f1f6564736f6c6343000606003300000000000000000000000070eab9fafee9bfa372ebee7b2b6cff78b996f6df000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

00000000000000000000000070eab9fafee9bfa372ebee7b2b6cff78b996f6df000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c

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

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


Deployed ByteCode Sourcemap

15578:18223:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16044:10;-1:-1:-1;;;;;16058:4:0;16044:18;;16037:26;;;;15578:18223;;12:1:-1;9;2:12;20118:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20118:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20118:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;32761:258;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32761:258:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32761:258:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27179:830;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27179:830:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27179:830:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27179:830:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27179:830:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27179:830:0;;-1:-1:-1;27179:830:0;-1:-1:-1;;;;;;27179:830: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;27179:830:0;;;;;;;;;;;;;;;;;33549:249;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33549:249:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33549:249:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33549:249:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33549:249:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33549:249:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33549:249:0;;-1:-1:-1;33549:249:0;;-1:-1:-1;;;;;33549:249:0:i;20797:669::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20797:669:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20797:669:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24464:614::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24464:614:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24464:614:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24464:614:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24464:614:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24464:614:0;;-1:-1:-1;24464:614:0;-1:-1:-1;;;;;;24464:614:0;;;;;;;;:::i;26365:808::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26365:808:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26365:808:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26365:808:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26365:808:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26365:808:0;;-1:-1:-1;26365:808:0;-1:-1:-1;;;;;;26365:808:0;;;;;;;;:::i;22918:710::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22918:710:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22918:710:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30148:704::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30148:704:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30148:704:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30148:704:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30148:704:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30148:704:0;;-1:-1:-1;30148:704:0;-1:-1:-1;;;;;;30148:704:0;;;;;;;;:::i;31698:827::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31698:827:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31698:827:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31698:827:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31698:827:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;31698:827:0;;-1:-1:-1;31698:827:0;-1:-1:-1;;;;;;31698:827:0;;;;;;;;:::i;25682:677::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25682:677:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25682:677:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25682:677:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25682:677:0;;-1:-1:-1;25682:677:0;-1:-1:-1;;;;;;25682:677:0;;;;;;;;:::i;33027:257::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33027:257:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33027:257:0;;;;;;;;;;;;:::i;25084:592::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25084:592:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25084:592:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25084:592:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25084:592:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;25084:592:0;;-1:-1:-1;25084:592:0;-1:-1:-1;;;;;;25084:592:0;;;;;;;;:::i;15704:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15704:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;15704:38:0;;;;;;;;;;;;;;32569:184;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32569:184:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;32569:184:0;;;;;;;;;;;;:::i;22212:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22212:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22212:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30858:834::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30858:834:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30858:834:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30858:834:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;30858:834:0;;-1:-1:-1;30858:834:0;-1:-1:-1;;;;;;30858:834:0;;;;;;;;:::i;19275:837::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19275:837:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19275:837:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15656:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15656:41:0;;;:::i;33292:249::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33292:249:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;33292:249:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;33292:249:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33292:249:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33292:249:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;33292:249:0;;-1:-1:-1;33292:249:0;;-1:-1:-1;;;;;33292:249:0:i;21472:661::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21472:661:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21472:661:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17530:730::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17530:730:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17530:730:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18266:966;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18266:966:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28015:790::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28015:790:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28015:790:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28015:790:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28015:790:0;;-1:-1:-1;28015:790:0;-1:-1:-1;;;;;;28015:790:0;;;;;;;;:::i;20118:673::-;20355:16;20373:14;20336:8;15813:15;15801:8;:27;;15793:58;;;;;-1:-1:-1;;;15793:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15793:58:0;;;;;;;;;;;;;;;20427:196:::1;20457:5;20477:4;20496:9;20520:14;20549:12;20584:4;20604:8;20427:15;:196::i;:::-;20400:223:::0;;-1:-1:-1;20400:223:0;-1:-1:-1;20634:51:0::1;20662:5:::0;20669:2;20400:223;20634:27:::1;:51::i;:::-;20702:4;-1:-1:-1::0;;;;;20696:20:0::1;;20717:9;20696:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20696:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20696:31:0;;;;20738:45;20769:2;20773:9;20738:30;:45::i;:::-;20118:673:::0;;;;;;;;;;:::o;32761:258::-;32914:14;32953:58;32979:8;32989:9;33000:10;32953:25;:58::i;:::-;32946:65;32761:258;-1:-1:-1;;;;32761:258:0:o;27179:830::-;27393:21;27365:8;15813:15;15801:8;:27;;15793:58;;;;;-1:-1:-1;;;15793:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15793:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;27465:4:0::1;27440:29;:4:::0;;-1:-1:-1;;27445:15:0;;27440:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27440:21:0::1;-1:-1:-1::0;;;;;27440:29:0::1;;27432:65;;;::::0;;-1:-1:-1;;;27432:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27432:65:0;;;;;;;;;;;;;::::1;;27518:51;27545:7;27554:8;27564:4;;27518:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27518:26:0::1;::::0;-1:-1:-1;;;27518:51:0:i:1;:::-;27508:61;;27619:12;27588:7;27613:1;27596:7;:14;:18;27588:27;;;;;;;;;;;;;;:43;;27580:93;;;;-1:-1:-1::0;;;27580:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27684:137;27730:4;;27735:1;27730:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27730:7:0::1;27739:10;27751:47;27772:7;27781:4;;27786:1;27781:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27781:7:0::1;27790:4;;27795:1;27790:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27790:7:0::1;27751:20;:47::i;:::-;27800:7;27808:1;27800:10;;;;;;;;;;;;;;27684:31;:137::i;:::-;27832:35;27838:7;27847:4;;27832:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27861:4:0::1;::::0;-1:-1:-1;27832:5:0::1;::::0;-1:-1:-1;;27832:35:0:i:1;:::-;27884:4;-1:-1:-1::0;;;;;27878:20:0::1;;27899:7;27924:1;27907:7;:14;:18;27899:27;;;;;;;;;;;;;;27878:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27878:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27878:49:0;;;;27938:63;27969:2;27973:7;27998:1;27981:7;:14;:18;27973:27;;;;;;;;;;;;;;27938:30;:63::i;:::-;27179:830:::0;;;;;;;;;:::o;33549:249::-;33693:21;33739:51;33765:7;33774:9;33785:4;33739:25;:51::i;:::-;33732:58;;33549:249;;;;;:::o;20797:669::-;21103:12;21117;21142;21157:45;21178:7;21187:6;21195;21157:20;:45::i;:::-;21142:60;;21213:10;21226;:33;;21250:9;21226:33;;;-1:-1:-1;;21226:33:0;21270:76;;;-1:-1:-1;;;21270:76:0;;21294:10;21270:76;;;;21314:4;21270:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21213:46;;-1:-1:-1;;;;;;21270:23:0;;;;;:76;;;;;-1:-1:-1;;21270:76:0;;;;;;;;-1:-1:-1;21270:23:0;:76;;;2:2:-1;;;;27:1;24;17:12;2:2;21270:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21270:76:0;;;;21378:80;21394:6;21402;21410:9;21421:10;21433;21445:2;21449:8;21378:15;:80::i;:::-;21357:101;;;;;;;;20797:669;;;;;;;;;;;;;;;;:::o;24464:614::-;24688:21;24669:8;15813:15;15801:8;:27;;15793:58;;;;;-1:-1:-1;;;15793:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15793:58:0;;;;;;;;;;;;;;;24732:51:::1;24759:7;24768:8;24778:4;;24732:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24732:26:0::1;::::0;-1:-1:-1;;;24732:51:0:i:1;:::-;24722:61;;24833:12;24802:7;24827:1;24810:7;:14;:18;24802:27;;;;;;;;;;;;;;:43;;24794:93;;;;-1:-1:-1::0;;;24794:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24898:137;24944:4;;24949:1;24944:7;;;;;;24898:137;25046:24;25052:7;25061:4;;25046:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25067:2:0;;-1:-1:-1;25046:5:0::1;::::0;-1:-1:-1;;25046:24:0:i:1;26365:808::-:0;26579:21;26551:8;15813:15;15801:8;:27;;15793:58;;;;;-1:-1:-1;;;15793:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15793:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;26651:4:0::1;26626:29;:4:::0;;-1:-1:-1;;26631:15:0;;26626:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;26626:21:0::1;-1:-1:-1::0;;;;;26626:29:0::1;;26618:65;;;::::0;;-1:-1:-1;;;26618:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26618:65:0;;;;;;;;;;;;;::::1;;26704:51;26730:7;26739:9;26750:4;;26704:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26704:25:0::1;::::0;-1:-1:-1;;;26704:51:0:i:1;:::-;26694:61;;26788:11;26774:7;26782:1;26774:10;;;;;;;;;;;;;;:25;;26766:71;;;;-1:-1:-1::0;;;26766:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22918:710:::0;23236:14;23263:12;23278:42;23299:7;23308:5;23315:4;23278:20;:42::i;:::-;23263:57;;23331:10;23344;:33;;23368:9;23344:33;;;-1:-1:-1;;23344:33:0;23388:76;;;-1:-1:-1;;;23388:76:0;;23412:10;23388:76;;;;23432:4;23388:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23331:46;;-1:-1:-1;;;;;;23388:23:0;;;;;:76;;;;;-1:-1:-1;;23388:76:0;;;;;;;;-1:-1:-1;23388:23:0;:76;;;2:2:-1;;;;27:1;24;17:12;2:2;23388:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23388:76:0;;;;23487:133;23549:5;23556:9;23567:14;23583:12;23597:2;23601:8;23487:47;:133::i;:::-;23475:145;22918:710;-1:-1:-1;;;;;;;;;;;;;22918:710:0:o;30148:704::-;30382:8;15813:15;15801:8;:27;;15793:58;;;;;-1:-1:-1;;;15793:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15793:58:0;;;;;;;;;;;;;;;30403:135:::1;30449:4;;30454:1;30449:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30449:7:0::1;30458:10;30470:47;30491:7;30500:4;;30505:1;30500:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30500:7:0::1;30509:4;;30514:1;30509:7;;;;;;30470:47;30519:8;30403:31;:135::i;:::-;30549:18;30577:4:::0;;-1:-1:-1;;30582:15:0;;30577:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30577:21:0::1;-1:-1:-1::0;;;;;30570:39:0::1;;30610:2;30570:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30570:43:0::1;-1:-1:-1::0;;;;;30570:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30570:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30570:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30570:43:0;30624:44:::1;::::0;;30570:43:::1;30624:44:::0;;::::1;::::0;;;;;;;;;;;30570:43;;-1:-1:-1;30624:44:0::1;::::0;;;30659:4;;;;;;30624:44;::::1;::::0;30659:4;;30624:44;30659:4;30624:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30665:2:0;;-1:-1:-1;30624:34:0::1;::::0;-1:-1:-1;;30624:44:0:i:1;:::-;30767:12:::0;30701:62:::1;30749:13:::0;30708:4;;-1:-1:-1;;30713:15:0;;30708:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;30708:21:0::1;-1:-1:-1::0;;;;;30701:39:0::1;;30741:2;30701:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;30701:43:0::1;-1:-1:-1::0;;;;;30701:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30701:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30701:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30701:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;30679:165;;;;-1:-1:-1::0;;;30679:165:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15862:1;30148:704:::0;;;;;;;:::o;31698:827::-;31965:8;15813:15;15801:8;:27;;15793:58;;;;;-1:-1:-1;;;15793:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15793:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32024:4:0::1;31999:29;:4:::0;;-1:-1:-1;;32004:15:0;;31999:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31999:21:0::1;-1:-1:-1::0;;;;;31999:29:0::1;;31991:65;;;::::0;;-1:-1:-1;;;31991:65:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31991:65:0;;;;;;;;;;;;;::::1;;32067:135;32113:4;;32118:1;32113:7;;;;;;32067:135;32213:55;32248:4;;32213:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32262:4:0::1;::::0;-1:-1:-1;32213:34:0::1;::::0;-1:-1:-1;;32213:55:0:i:1;:::-;32296:37;::::0;;-1:-1:-1;;;32296:37:0;;32327:4:::1;32296:37;::::0;::::1;::::0;;;32279:14:::1;::::0;-1:-1:-1;;;;;32303:4:0::1;32296:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;32296:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32296:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32296:37:0;;-1:-1:-1;32352:25:0;;::::1;;32344:75;;;;-1:-1:-1::0;;;32344:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32436:4;-1:-1:-1::0;;;;;32430:20:0::1;;32451:9;32430:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32430:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32430:31:0;;;;32472:45;32503:2;32507:9;32472:30;:45::i;25682:677::-:0;25898:21;25870:8;15813:15;15801:8;:27;;15793:58;;;;;-1:-1:-1;;;15793:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15793:58:0;;;;;;;;;;;;;;;25956:4:::1;-1:-1:-1::0;;;;;25945:15:0::1;:4;;25950:1;25945:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;25945:7:0::1;-1:-1:-1::0;;;;;25945:15:0::1;;25937:51;;;::::0;;-1:-1:-1;;;25937:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25937:51:0;;;;;;;;;;;;;::::1;;26009:52;26036:7;26045:9;26056:4;;26009:52;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26009:26:0::1;::::0;-1:-1:-1;;;26009:52:0:i:1;:::-;25999:62;;26111:12;26080:7;26105:1;26088:7;:14;:18;26080:27;;;;;;;;;;;;;;:43;;26072:93;;;;-1:-1:-1::0;;;26072:93:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26182:4;-1:-1:-1::0;;;;;26176:19:0::1;;26203:7;26211:1;26203:10;;;;;;;;;;;;;;26176:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26176:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26176:40:0;;;;;26240:4;-1:-1:-1::0;;;;;26234:20:0::1;;26255:47;26276:7;26285:4;;26290:1;26285:7;;;;;;26255:47;26304:7;26312:1;26304:10;;;;;;;;;;;;;;26234:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;26234:81:0::1;-1:-1:-1::0;;;;;26234:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26234:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26234:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26234:81:0;26227:89:::1;;;;26327:24;26333:7;26342:4;;26327:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26348:2:0;;-1:-1:-1;26327:5:0::1;::::0;-1:-1:-1;;26327:24:0:i:1;:::-;25682:677:::0;;;;;;;;:::o;33027:257::-;33180:13;33218:58;33243:9;33254;33265:10;33218:24;:58::i;25084:592::-;25308:21;25289:8;15813:15;15801:8;:27;;15793:58;;;;;-1:-1:-1;;;15793:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15793:58:0;;;;;;;;;;;;;;;25352:51:::1;25378:7;25387:9;25398:4;;25352:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25352:25:0::1;::::0;-1:-1:-1;;;25352:51:0:i:1;:::-;25342:61;;25436:11;25422:7;25430:1;25422:10;;;;;;;;;;;;;;:25;;25414:71;;;;-1:-1:-1::0;;;25414:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15704:38:::0;;;:::o;32569:184::-;32666:12;32698:47;32717:7;32726:8;32736;32698:18;:47::i;22212:700::-;22478:14;22459:8;15813:15;15801:8;:27;;15793:58;;;;;-1:-1:-1;;;15793:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15793:58:0;;;;;;;;;;;;;;;22521:196:::1;22551:5;22571:4;22590:9;22614:14;22643:12;22678:4;22698:8;22521:15;:196::i;:::-;22767:38;::::0;;-1:-1:-1;;;22767:38:0;;22799:4:::1;22767:38;::::0;::::1;::::0;;;22505:212;;-1:-1:-1;22728:78:0::1;::::0;-1:-1:-1;22756:5:0;;22763:2;;-1:-1:-1;;;;;22767:23:0;::::1;::::0;::::1;::::0;:38;;;;;::::1;::::0;;;;;;;;;:23;:38;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;22767:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22767:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22767:38:0;22728:27:::1;:78::i;:::-;22823:4;-1:-1:-1::0;;;;;22817:20:0::1;;22838:9;22817:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22817:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22817:31:0;;;;22859:45;22890:2;22894:9;22859:30;:45::i;30858:834::-:0;31118:8;15813:15;15801:8;:27;;15793:58;;;;;-1:-1:-1;;;15793:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15793:58:0;;;;;;;;;;;;;;;31163:4:::1;-1:-1:-1::0;;;;;31152:15:0::1;:4;;31157:1;31152:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31152:7:0::1;-1:-1:-1::0;;;;;31152:15:0::1;;31144:51;;;::::0;;-1:-1:-1;;;31144:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31144:51:0;;;;;;;;;;;;;::::1;;31206:13;31222:9;31206:25;;31248:4;-1:-1:-1::0;;;;;31242:19:0::1;;31269:8;31242:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31242:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31242:38:0;;;;;31304:4;-1:-1:-1::0;;;;;31298:20:0::1;;31319:47;31340:7;31349:4;;31354:1;31349:7;;;;;;31319:47;31368:8;31298:79;;;;;;;;;;;;;-1:-1:-1::0;;;;;31298:79:0::1;-1:-1:-1::0;;;;;31298:79:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31298:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31298:79:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31298:79:0;31291:87:::1;;;;31389:18;31417:4:::0;;-1:-1:-1;;31422:15:0;;31417:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31417:21:0::1;-1:-1:-1::0;;;;;31410:39:0::1;;31450:2;31410:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31410:43:0::1;-1:-1:-1::0;;;;;31410:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31410:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31410:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31410:43:0;31464:44:::1;::::0;;31410:43:::1;31464:44:::0;;::::1;::::0;;;;;;;;;;;31410:43;;-1:-1:-1;31464:44:0::1;::::0;;;31499:4;;;;;;31464:44;::::1;::::0;31499:4;;31464:44;31499:4;31464:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31505:2:0;;-1:-1:-1;31464:34:0::1;::::0;-1:-1:-1;;31464:44:0:i:1;:::-;31607:12:::0;31541:62:::1;31589:13:::0;31548:4;;-1:-1:-1;;31553:15:0;;31548:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31548:21:0::1;-1:-1:-1::0;;;;;31541:39:0::1;;31581:2;31541:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31541:43:0::1;-1:-1:-1::0;;;;;31541:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19275:837:0::0;19529:12;19543;19510:8;15813:15;15801:8;:27;;15793:58;;;;;-1:-1:-1;;;15793:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15793:58:0;;;;;;;;;;;;;;;19568:12:::1;19583:45;19604:7;19613:6;19621;19583:20;:45::i;:::-;19639:58;::::0;;-1:-1:-1;;;19639:58:0;;19669:10:::1;19639:58;::::0;::::1;::::0;-1:-1:-1;;;;;19639:29:0;::::1;:58:::0;;;;;;;;;;;;;;19568:60;;-1:-1:-1;19639:29:0;;::::1;::::0;:58;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;19639:29:0;:58;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19639:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19639:58:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;19765:25:0::1;::::0;;-1:-1:-1;;;19765:25:0;;-1:-1:-1;;;;;19765:25:0;;::::1;;::::0;::::1;::::0;;;19735:12:::1;::::0;;;19765:21;;::::1;::::0;::::1;::::0;:25;;;;;;;;;;;19735:12;19765:21;:25;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19765:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19765:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19765:25:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19765:25:0;-1:-1:-1;19802:14:0::1;19821:39;19845:6:::0;19853;19821:23:::1;:39::i;:::-;19801:59;;;19902:6;-1:-1:-1::0;;;;;19892:16:0::1;:6;-1:-1:-1::0;;;;;19892:16:0::1;;:58;;19933:7;19942;19892:58;;;19912:7;19921;19892:58;19871:79:::0;;-1:-1:-1;19871:79:0;-1:-1:-1;19969:21:0;;::::1;;19961:66;;;::::0;;-1:-1:-1;;;19961:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;20057:10;20046:7;:21;;20038:66;;;::::0;;-1:-1:-1;;;20038:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;15862:1;;;;19275:837:::0;;;;;;;;;;;:::o;15656:41::-;;;:::o;33292:249::-;33436:21;33482:51;33509:7;33518:8;33528:4;33482:26;:51::i;21472:661::-;21761:16;21779:14;21806:12;21821:42;21842:7;21851:5;21858:4;21821:20;:42::i;:::-;21806:57;;21874:10;21887;:33;;21911:9;21887:33;;;-1:-1:-1;;21887:33:0;21931:76;;;-1:-1:-1;;;21931:76:0;;21955:10;21931:76;;;;21975:4;21931:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21874:46;;-1:-1:-1;;;;;;21931:23:0;;;;;:76;;;;;-1:-1:-1;;21931:76:0;;;;;;;;-1:-1:-1;21931:23:0;:76;;;2:2:-1;;;;27:1;24;17:12;2:2;21931:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21931:76:0;;;;22045:80;22064:5;22071:9;22082:14;22098:12;22112:2;22116:8;22045:18;:80::i;:::-;22018:107;;;;-1:-1:-1;21472:661:0;-1:-1:-1;;;;;;;;;;;;;21472:661:0:o;17530:730::-;17818:12;17832;17846:14;17799:8;15813:15;15801:8;:27;;15793:58;;;;;-1:-1:-1;;;15793:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15793:58:0;;;;;;;;;;;;;;;17894:85:::1;17908:6;17916;17924:14;17940;17956:10;17968;17894:13;:85::i;:::-;17873:106:::0;;-1:-1:-1;17873:106:0;-1:-1:-1;17990:12:0::1;18005:45;18026:7;18035:6:::0;18043;18005:20:::1;:45::i;:::-;17990:60;;18061:66;18093:6;18101:10;18113:4;18119:7;18061:31;:66::i;:::-;18138;18170:6;18178:10;18190:4;18196:7;18138:31;:66::i;:::-;18238:4;-1:-1:-1::0;;;;;18227:21:0::1;;18249:2;18227:25;;;;;;;;;;;;;-1:-1:-1::0;;;;;18227:25:0::1;-1:-1:-1::0;;;;;18227:25:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18227:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18227:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18227:25:0;17530:730;;;;-1:-1:-1;18227:25:0;;-1:-1:-1;17530:730:0;;-1:-1:-1;;;;;;;;;17530:730:0:o;18266:966::-;18519:16;18537:14;18553;18500:8;15813:15;15801:8;:27;;15793:58;;;;;-1:-1:-1;;;15793:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15793:58:0;;;;;;;;;;;;;;;18607:176:::1;18635:5;18655:4;18674:18;18707:9;18731:14;18760:12;18607:13;:176::i;:::-;18580:203:::0;;-1:-1:-1;18580:203:0;-1:-1:-1;18794:12:0::1;18809:42;18830:7;18839:5:::0;18846:4:::1;18809:20;:42::i;:::-;18794:57;;18862:69;18894:5;18901:10;18913:4;18919:11;18862:31;:69::i;:::-;18948:4;-1:-1:-1::0;;;;;18942:19:0::1;;18969:9;18942:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18942:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18942:39:0;;;;;19005:4;-1:-1:-1::0;;;;;18999:20:0::1;;19020:4;19026:9;18999:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;18999:37:0::1;-1:-1:-1::0;;;;;18999:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18999:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18999:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18999:37:0;18992:45:::1;;;;19071:4;-1:-1:-1::0;;;;;19060:21:0::1;;19082:2;19060:25;;;;;;;;;;;;;-1:-1:-1::0;;;;;19060:25:0::1;-1:-1:-1::0;;;;;19060:25:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19060:25:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19060:25:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19060:25:0;;-1:-1:-1;19136:9:0::1;:21:::0;-1:-1:-1;19132:92:0::1;;;19159:65;19190:10;19214:9;19202;:21;19159:30;:65::i;:::-;15862:1;18266:966:::0;;;;;;;;;;;:::o;28015:790::-;28228:21;28200:8;15813:15;15801:8;:27;;15793:58;;;;;-1:-1:-1;;;15793:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15793:58:0;;;;;;;;;;;;;;;28286:4:::1;-1:-1:-1::0;;;;;28275:15:0::1;:4;;28280:1;28275:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28275:7:0::1;-1:-1:-1::0;;;;;28275:15:0::1;;28267:51;;;::::0;;-1:-1:-1;;;28267:51:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28267:51:0;;;;;;;;;;;;;::::1;;28339;28365:7;28374:9;28385:4;;28339:51;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28339:25:0::1;::::0;-1:-1:-1;;;28339:51:0:i:1;:::-;28329:61;;28423:9;28409:7;28417:1;28409:10;;;;;;;;;;;;;;:23;;28401:69;;;;-1:-1:-1::0;;;28401:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28487:4;-1:-1:-1::0;;;;;28481:19:0::1;;28508:7;28516:1;28508:10;;;;;;;;;;;;;;28481:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28481:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28481:40:0;;;;;28545:4;-1:-1:-1::0;;;;;28539:20:0::1;;28560:47;28581:7;28590:4;;28595:1;28590:7;;;;;;28560:47;28609:7;28617:1;28609:10;;;;;;;;;;;;;;28539:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;28539:81:0::1;-1:-1:-1::0;;;;;28539:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28539:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28539:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28539:81:0;28532:89:::1;;;;28632:24;28638:7;28647:4;;28632:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28653:2:0;;-1:-1:-1;28632:5:0::1;::::0;-1:-1:-1;;28632:24:0:i:1;:::-;28719:7;28727:1;28719:10;;;;;;;;;;;;;;28707:9;:22;28703:94;;;28731:66;28762:10;28786:7;28794:1;28786:10;;;;;;;;;;;;;;28774:9;:22;28731:30;:66::i;1252:361::-:0;1447:45;;;-1:-1:-1;;;;;1447:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1447:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1436:57:0;;;;1401:12;;1415:17;;1436:10;;;;1447:45;1436:57;;;25:18:-1;1436:57:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1436: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;;1400:93:0;;;;1512:7;:57;;;;-1:-1:-1;1524:11:0;;:16;;:44;;;1555:4;1544:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1544:24:0;1524:44;1504:101;;;;;-1:-1:-1;;;1504:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1252:361;;;;;:::o;2031:195::-;2139:12;;;2101;2139;;;;;;;;;-1:-1:-1;;;;;2118:7:0;;;2132:5;;2118:34;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;2118: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;;2100:52:0;;;2171:7;2163:55;;;;-1:-1:-1;;;2163:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2031:195;;;:::o;12269:509::-;12362:14;12408:1;12397:8;:12;12389:64;;;;-1:-1:-1;;;12389:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12484:1;12472:9;:13;:31;;;;;12502:1;12489:10;:14;12472:31;12464:80;;;;-1:-1:-1;;;12464:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12555:20;12578:17;:8;12591:3;12578:17;:12;:17;:::i;:::-;12555:40;-1:-1:-1;12606:14:0;12623:31;12555:40;12643:10;12623:31;:19;:31;:::i;:::-;12606:48;-1:-1:-1;12665:16:0;12684:40;12708:15;12684:19;:9;12698:4;12684:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;12665:59;;12759:11;12747:9;:23;;;;;;;12269:509;-1:-1:-1;;;;;;;12269:509:0:o;13445:507::-;13546:21;13603:1;13588:4;:11;:16;;13580:55;;;;;-1:-1:-1;;;13580:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13667:4;:11;13656:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13656:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13656:23:0;;13646:33;;13703:8;13690:7;13698:1;13690:10;;;;;;;;;;;;;:21;;;;;13727:6;13722:223;13753:1;13739:4;:11;:15;13735:1;:19;13722:223;;;13777:14;13793:15;13812:42;13824:7;13833:4;13838:1;13833:7;;;;;;;;;;;;;;13842:4;13847:1;13851;13847:5;13842:11;;;;;;;;;;;;;;13812;:42::i;:::-;13776:78;;;;13886:47;13899:7;13907:1;13899:10;;;;;;;;;;;;;;13911:9;13922:10;13886:12;:47::i;:::-;13869:7;13877:1;13881;13877:5;13869:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;13756:3:0;;13722:223;;;;13445:507;;;;;:::o;10753:478::-;10842:12;10868:14;10884;10902:26;10913:6;10921;10902:10;:26::i;:::-;11066:32;;;-1:-1:-1;;11066:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11066:32:0;;;;;11056:43;;;;;;-1:-1:-1;;;;;;10969:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10969:251:0;;;;;;;10959:262;;;;;;;;;10753:478;-1:-1:-1;;;;;10753:478:0:o;1621:402::-;1846:51;;;-1:-1:-1;;;;;1846:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1846:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1835:63:0;;;;1800:12;;1814:17;;1835:10;;;;1846:51;1835:63;;;25:18:-1;1835:63:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;1835: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;;1799:99:0;;;;1917:7;:57;;;;-1:-1:-1;1929:11:0;;:16;;:44;;;1960:4;1949:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1949:24:0;1929:44;1909:106;;;;-1:-1:-1;;;1909:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1621:402;;;;;;:::o;23739:719::-;23846:6;23841:610;23872:1;23858:4;:11;:15;23854:1;:19;23841:610;;;23896:13;23911:14;23930:4;23935:1;23930:7;;;;;;;;;;;;;;23939:4;23944:1;23948;23944:5;23939:11;;;;;;;;;;;;;;23895:56;;;;23967:14;23986:38;24010:5;24017:6;23986:23;:38::i;:::-;23966:58;;;24039:14;24056:7;24064:1;24068;24064:5;24056:14;;;;;;;;;;;;;;24039:31;;24086:15;24103;24131:6;-1:-1:-1;;;;;24122:15:0;:5;-1:-1:-1;;;;;24122:15:0;;:61;;24164:9;24180:1;24122:61;;;24146:1;24150:9;24122:61;24085:98;;;;24198:10;24229:1;24215:4;:11;:15;24211:1;:19;:78;;24286:3;24211:78;;;24233:50;24254:7;24263:6;24271:4;24276:1;24280;24276:5;24271:11;;;;;;;;;;;;;;24233:20;:50::i;:::-;24198:91;;24315:44;24336:7;24345:5;24352:6;24315:20;:44::i;:::-;-1:-1:-1;;;;;24304:61:0;;24384:10;24396;24408:2;24422:1;24412:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24412:12:0;87:42:-1;143:17;;-1:-1;24412:12:0;;24304:135;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24304:135:0;-1:-1:-1;;;;;24304:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24304:135:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24304:135:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23875:3:0;;;;;-1:-1:-1;23841:610:0;;-1:-1:-1;;;;;;;;23841:610:0;;;23739:719;;;:::o;14033:528::-;14134:21;14191:1;14176:4;:11;:16;;14168:55;;;;;-1:-1:-1;;;14168:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14255:4;:11;14244:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14244:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14244:23:0;;14234:33;;14308:9;14278:7;14303:1;14286:7;:14;:18;14278:27;;;;;;;;;;;;;;;;;:39;14342:11;;-1:-1:-1;;14342:15:0;14328:226;14359:5;;14328:226;;14387:14;14403:15;14422:42;14434:7;14443:4;14452:1;14448;:5;14443:11;;;;;;;;;;;;;;14456:4;14461:1;14456:7;;;;;;;14422:42;14386:78;;;;14496:46;14508:7;14516:1;14508:10;;;;;;;;;;;;;;14520:9;14531:10;14496:11;:46::i;:::-;14479:7;14491:1;14487;:5;14479:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14366:3:0;14328:226;;28952:1190;29065:6;29060:1075;29091:1;29077:4;:11;:15;29073:1;:19;29060:1075;;;29115:13;29130:14;29149:4;29154:1;29149:7;;;;;;;;;;;;;;29158:4;29163:1;29167;29163:5;29158:11;;;;;;;;;;;;;;29114:56;;;;29186:14;29205:38;29229:5;29236:6;29205:23;:38::i;:::-;29185:58;;;29258:15;29287:44;29308:7;29317:5;29324:6;29287:20;:44::i;:::-;29258:74;;29347:16;29378:17;29466:13;29481;29499:4;-1:-1:-1;;;;;29499:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29499:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;29499:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;29499:18:0;;;;;;;-1:-1:-1;;;;;29465:52:0;;;;-1:-1:-1;29465:52:0;;-1:-1:-1;29533:17:0;;-1:-1:-1;;;;;29574:15:0;;;;;;;:61;;29616:8;29626;29574:61;;;29593:8;29603;29574:61;29532:103;;;;29664:56;29707:12;29671:5;-1:-1:-1;;;;;29664:23:0;;29696:4;29664:38;;;;;;;;;;;;;-1:-1:-1;;;;;29664:38:0;-1:-1:-1;;;;;29664:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;29664:56:0;29650:70;;29750:67;29776:11;29789:12;29803:13;29750:25;:67::i;:::-;29735:82;;29060:1075;;;;29848:15;29865;29893:6;-1:-1:-1;;;;;29884:15:0;:5;-1:-1:-1;;;;;29884:15:0;;:67;;29929:12;29948:1;29884:67;;;29908:1;29912:12;29884:67;29847:104;;;;29966:10;29997:1;29983:4;:11;:15;29979:1;:19;:78;;30054:3;29979:78;;;30001:50;30022:7;30031:6;30039:4;30044:1;30048;30044:5;30039:11;;;;;;;30001:50;30110:12;;;30120:1;30110:12;;;;;;;;;;-1:-1:-1;;;30072:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30072:51:0;;;;;;;;;;;;;;;;;;;;;;29966:91;;-1:-1:-1;30072:9:0;;;;;;30082:10;;30094;;29966:91;;30110:12;;30072:51;;;;;;;;30110:12;;30072:51;;;;30110: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;30072:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30072:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29094:3:0;;;;;-1:-1:-1;29060:1075:0;;-1:-1:-1;;;;;;;;;;29060:1075:0;9864:129;9948:5;;;9943:16;;;;9935:50;;;;;-1:-1:-1;;;9935:50:0;;;;;;;;;;;;-1:-1:-1;;;9935:50:0;;;;;;;;;;;;;;12899:464;12992:13;13038:1;13026:9;:13;13018:66;;;;-1:-1:-1;;;13018:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13115:1;13103:9;:13;:31;;;;;13133:1;13120:10;:14;13103:31;13095:80;;;;-1:-1:-1;;;13095:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13186:14;13203:34;13232:4;13203:24;:9;13217;13203:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13186:51;-1:-1:-1;13248:16:0;13267:34;13297:3;13267:25;:10;13282:9;13267:25;:14;:25;:::i;:34::-;13248:53;;13323:32;13353:1;13336:11;13324:9;:23;;;;;;;13323:32;:29;:32;:::i;:::-;13312:43;12899:464;-1:-1:-1;;;;;;12899:464:0:o;11834:313::-;11916:12;11959:1;11949:7;:11;11941:57;;;;-1:-1:-1;;;11941:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12028:1;12017:8;:12;:28;;;;;12044:1;12033:8;:12;12017:28;12009:77;;;;-1:-1:-1;;;12009:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12131:8;12107:21;:7;12119:8;12107:21;:11;:21;:::i;:::-;:32;;;;;;;11834:313;-1:-1:-1;;;;11834:313:0:o;10320:341::-;10395:14;10411;10456:6;-1:-1:-1;;;;;10446:16:0;:6;-1:-1:-1;;;;;10446:16:0;;;10438:62;;;;-1:-1:-1;;;10438:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10539:6;-1:-1:-1;;;;;10530:15:0;:6;-1:-1:-1;;;;;10530:15:0;;:53;;10568:6;10576;10530:53;;;10549:6;10557;10530:53;10511:72;;-1:-1:-1;10511:72:0;-1:-1:-1;;;;;;10602:20:0;;10594:59;;;;;-1:-1:-1;;;10594:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10320:341;;;;;:::o;16166:1358::-;16479:46;;;-1:-1:-1;;;16479:46:0;;-1:-1:-1;;;;;16479:46:0;;;;;;;;;;;;;;;;16384:12;;;;;;16493:7;16479:30;;;;;;:46;;;;;;;;;;;;;;;:30;:46;;;2:2:-1;;;;27:1;24;17:12;2:2;16479:46:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16479:46:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16479:46:0;-1:-1:-1;;;;;16479:60:0;;16475:142;;;16556:49;;;-1:-1:-1;;;16556:49:0;;-1:-1:-1;;;;;16556:49:0;;;;;;;;;;;;;;;;16570:7;16556:33;;;;;;:49;;;;;;;;;;;;;;;-1:-1:-1;16556:33:0;:49;;;2:2:-1;;;;27:1;24;17:12;2:2;16556:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16556:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16475:142:0;16628:13;16643;16660:49;16685:7;16694:6;16702;16660:24;:49::i;:::-;16627:82;;;;16724:8;16736:1;16724:13;:30;;;;-1:-1:-1;16741:13:0;;16724:30;16720:797;;;16793:14;;-1:-1:-1;16809:14:0;;-1:-1:-1;16720:797:0;;;16857:19;16879:54;16898:14;16914:8;16924;16879:18;:54::i;:::-;16857:76;;16970:14;16952;:32;16948:558;;17031:10;17013:14;:28;;17005:73;;;;;-1:-1:-1;;;17005:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17119:14;;-1:-1:-1;17135:14:0;-1:-1:-1;17135:14:0;16948:558;;;17191:19;17213:54;17232:14;17248:8;17258;17213:18;:54::i;:::-;17191:76;;17311:14;17293;:32;;17286:40;;;;17371:10;17353:14;:28;;17345:73;;;;;-1:-1:-1;;;17345:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17459:14;-1:-1:-1;17475:14:0;;-1:-1:-1;16948:558:0;16720:797;;16166:1358;;;;;;;;;;;:::o;10001:142::-;10053:6;10080;;;:30;;-1:-1:-1;;10095:5:0;;;10109:1;10104;10095:5;10104:1;10090:15;;;;;:20;10080:30;10072:63;;;;;-1:-1:-1;;;10072:63:0;;;;;;;;;;;;-1:-1:-1;;;10072:63:0;;;;;;;;;;;;;;9728:128;9812:5;;;9807:16;;;;9799:49;;;;;-1:-1:-1;;;9799:49:0;;;;;;;;;;;;-1:-1:-1;;;9799:49:0;;;;;;;;;;;;;;11291:430;11384:13;11399;11426:14;11445:26;11456:6;11464;11445:10;:26::i;:::-;11425:46;;;11482:32;11490:7;11499:6;11507;11482:7;:32::i;:::-;;11526:13;11541;11570:32;11578:7;11587:6;11595;11570:7;:32::i;:::-;-1:-1:-1;;;;;11559:56:0;;:58;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11559:58:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11559:58:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11559:58:0;;;;;;;-1:-1:-1;;;;;11525:92:0;;;;-1:-1:-1;11525:92:0;;-1:-1:-1;;;;;;11651:16:0;;;;;;;:62;;11694:8;11704;11651:62;;;11671:8;11681;11651:62;11628:85;;;;-1:-1:-1;11291:430:0;-1:-1:-1;;;;;;;11291:430:0:o

Swarm Source

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