Contract 0x16327e3fbdaca3bcf7e38f5af2599d2ddc33ae52 9

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x725b83b5baab0d0ac6be224ee360802e80184533d36aa42960491cff6ee92cb5Swap Exact Token...551312722023-02-05 11:17:2140 secs ago0x7394f269bc585371508faeb14006253fed245519 IN  SpiritSwap: Router0 FTM0.024498723554
0x9fac53b5dbbc6ae6a88754cca479b8e7f18d3f8e2223030f888082a44709debbSwap Exact ETH F...551312362023-02-05 11:16:281 min ago0xdad243a6c75fcb6d65f957664a2dd2570dcc119f IN  SpiritSwap: Router910 FTM0.010269225847
0x4d59cfe8229e94fb4450aeda620bb75b5bf666453e74c57b8d8ab2a59ee11476Swap Exact Token...551312272023-02-05 11:16:181 min ago0x9f3aadbbcc3f8cf2516a2baf56608e7ee613e10d IN  SpiritSwap: Router0 FTM0.04416276
0x962a1cbdbcfb299f8706b2cc4547d18cff4f7f688d9615891f82d05d37a35e89Swap Exact Token...551312152023-02-05 11:16:081 min ago0x7394f269bc585371508faeb14006253fed245519 IN  SpiritSwap: Router0 FTM0.00644825301
0x54330be7c8df7d08ccd4e9a59b80024d99bccd566171ee82bdefe38c54892001Swap Exact Token...551311912023-02-05 11:15:442 mins ago0xa74c80cff5176d800be2df880a09d36b1e2ed942 IN  SpiritSwap: Router0 FTM0.023369453173
0xb2782f19314ce1c0aa38530f46b2ca14c382c723cf738cac7522d600c466e0e3Swap Exact Token...551311752023-02-05 11:15:292 mins ago0xa74c80cff5176d800be2df880a09d36b1e2ed942 IN  SpiritSwap: Router0 FTM0.014985238077
0xf6fc3a2dfb5dcc2e416af4597ef29157653410ccaff8080d0dcdd42dd8509e61Swap Exact Token...551311732023-02-05 11:15:262 mins ago0xe59150cc54b28d55b9b1df175a3bdff10a29d1ba IN  SpiritSwap: Router0 FTM0.010691821553
0x018378af729b9912458c6b02f2c4ae4904465ceb8a2563ebffaaf5c9449e018cSwap Exact ETH F...551311502023-02-05 11:15:022 mins ago0xe97b492f81d9dda181e06b3a6417caa48dda9008 IN  SpiritSwap: Router164 FTM0.011972612215
0x08d9a416eed52aff70e796abfc46bdde9f7f602247a50bf9bc6e91856a4c4eadSwap Exact ETH F...551311472023-02-05 11:14:583 mins ago0x651abf37ed8fea4d2ed09792490a3fe4a9c50c3b IN  SpiritSwap: Router10 FTM0.012091483157
0xef4d308aa9ec33f8cbc04831d00d37092cc6761e2795c171612916e2dbf600c9Swap Exact Token...551311162023-02-05 11:14:253 mins ago0x709da071467d3ae5b4cb961394f5cb5b590e7c9f IN  SpiritSwap: Router0 FTM0.013469353858
0x3c957d412392263b18d7c7129b6d0f9a4feda178ab86c994df1606d90c7f9893Swap Exact ETH F...551311032023-02-05 11:14:093 mins ago0xdad243a6c75fcb6d65f957664a2dd2570dcc119f IN  SpiritSwap: Router122.834792646373222 FTM0.030569238126
0xe1cef6ccee7d1846a83fdbb557ad4d471ff4c936b40a9825ca5d8c7ce82143e5Swap Exact Token...551310632023-02-05 11:13:034 mins ago0xe88102f2900483c63d0adcdaf4839c2759949de6 IN  SpiritSwap: Router0 FTM0.04416276
0xbd761d215277c9268f12c8a47bc6d46836a1703656832eca4edda25d137992ddSwap Exact Token...551310412023-02-05 11:12:325 mins ago0xf1f57f23a67d1f483998f5e4316499be9d1316d2 IN  SpiritSwap: Router0 FTM0.022023234271
0x8783d9efee42d56069fab61415af0f2b497802fb6cf0a24ccdc73e9ec3f60278Swap Exact Token...551309942023-02-05 11:11:196 mins ago0x2571a9313456662fb5f584f5a7f68268255c1aa8 IN  SpiritSwap: Router0 FTM0.012050665611
0x505697742ff2489d5fb2136e05b4533bf97f4bad81ee1f08fe6a2dd04bf6795cSwap Exact Token...551309572023-02-05 11:10:257 mins ago0x2699465609aaec51f814899c2a87583bd472c286 IN  SpiritSwap: Router0 FTM0.013306898834
0xf2f341e08e02b462acea8e51599d878748a88649ebe203cbd8c0352c7b862c11Swap Exact ETH F...551309522023-02-05 11:10:197 mins ago0x9b9c1482f56d443bdc36268c89efc394f8a49b3d IN  SpiritSwap: Router600 FTM0.010167226735
0xbc5d9a6ec8f6d2321f4b1786c2416a4249d10e182e02c41b4d314652637d29ccSwap Exact Token...551309462023-02-05 11:10:047 mins ago0x9e35977c8966a528e95e5c430318b0709b8e4cba IN  SpiritSwap: Router0 FTM0.034022475838
0x758dbb74f64a84b7c34a43e3bb7a93841ad98c46122e47ef8772afce98d8ad9dSwap Exact Token...551309032023-02-05 11:09:108 mins ago0x9f91f075f7c4aba9551e9a11861f1047f0da4717 IN  SpiritSwap: Router0 FTM0.04416276
0xc95a4d43e34b0b6e90dc929635b76bba976b391d07de2c4544549310cec96197Swap Exact Token...551308692023-02-05 11:08:199 mins ago0xe7f7f821b703f888745a10f3aabe1a8c792031d8 IN  SpiritSwap: Router0 FTM0.01253009078
0x10238b7718300bf5a7431c5b67f4761817d8cbc76890e7e2deaad3a660452fe2Swap Exact Token...551308592023-02-05 11:08:039 mins ago0x2a43517003d740e499a3b15881202d9303e78b4f IN  SpiritSwap: Router0 FTM0.016727115517
0x1b71f7f71daffaab24f1ec5c6488d66f0df9bf3d8984e4e43e94c1cf1c43b6d1Swap Exact Token...551308542023-02-05 11:07:5010 mins ago0x1d226020f9deb6d2a9bc96863aa1d21738da6d52 IN  SpiritSwap: Router0 FTM0.00862832174
0x2c69f63cc713edadbb800980af3bb14ea14d3b280632b8a1523970203f0e8107Swap Exact Token...551308222023-02-05 11:07:0610 mins ago0x9ba2a5fc3a1c13befabdec3af8d92e6bb22415dd IN  SpiritSwap: Router0 FTM0.04480464
0x17293c365780d50ef0b3a942a1f4a323988b84e33071f7d2cb8f88baa0baedb2Swap Exact Token...551306992023-02-05 11:04:3313 mins ago0x87425d8ef3dfc1e1ddb434fa8763b6ec8af74e5c IN  SpiritSwap: Router0 FTM0.04416144
0x86626ce199c5d574ddbe25c0261eec713a3463fbaa0c1e83ea1551930dd5413dSwap Exact Token...551306792023-02-05 11:03:5614 mins ago0xe7f7f821b703f888745a10f3aabe1a8c792031d8 IN  SpiritSwap: Router0 FTM0.012400482338
0x429bb96cfff62e92e9ed41d9af6d07f52bfb5c2c4a3ec9566405d095f37aa895Swap Exact Token...551305302023-02-05 11:01:1016 mins ago0xcf7dbd09bb3be557b1520b1836cab415528f28c8 IN  SpiritSwap: Router0 FTM0.04416276
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x9fac53b5dbbc6ae6a88754cca479b8e7f18d3f8e2223030f888082a44709debb551312362023-02-05 11:16:281 min ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token910 FTM
0x4d59cfe8229e94fb4450aeda620bb75b5bf666453e74c57b8d8ab2a59ee11476551312272023-02-05 11:16:181 min ago SpiritSwap: Router0x9f3aadbbcc3f8cf2516a2baf56608e7ee613e10d174.941392765733549633 FTM
0x4d59cfe8229e94fb4450aeda620bb75b5bf666453e74c57b8d8ab2a59ee11476551312272023-02-05 11:16:181 min ago Fantom Finance: Wrapped Fantom Token SpiritSwap: Router174.941392765733549633 FTM
0x018378af729b9912458c6b02f2c4ae4904465ceb8a2563ebffaaf5c9449e018c551311502023-02-05 11:15:022 mins ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token164 FTM
0x08d9a416eed52aff70e796abfc46bdde9f7f602247a50bf9bc6e91856a4c4ead551311472023-02-05 11:14:583 mins ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token10 FTM
0xef4d308aa9ec33f8cbc04831d00d37092cc6761e2795c171612916e2dbf600c9551311162023-02-05 11:14:253 mins ago SpiritSwap: Router0x709da071467d3ae5b4cb961394f5cb5b590e7c9f96.9870758876853722 FTM
0xef4d308aa9ec33f8cbc04831d00d37092cc6761e2795c171612916e2dbf600c9551311162023-02-05 11:14:253 mins ago Fantom Finance: Wrapped Fantom Token SpiritSwap: Router96.9870758876853722 FTM
0x3c957d412392263b18d7c7129b6d0f9a4feda178ab86c994df1606d90c7f9893551311032023-02-05 11:14:093 mins ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token122.8347926463732225 FTM
0xe1cef6ccee7d1846a83fdbb557ad4d471ff4c936b40a9825ca5d8c7ce82143e5551310632023-02-05 11:13:034 mins ago SpiritSwap: Router0xe88102f2900483c63d0adcdaf4839c2759949de6206.018673451707928133 FTM
0xe1cef6ccee7d1846a83fdbb557ad4d471ff4c936b40a9825ca5d8c7ce82143e5551310632023-02-05 11:13:034 mins ago Fantom Finance: Wrapped Fantom Token SpiritSwap: Router206.018673451707928133 FTM
0x8783d9efee42d56069fab61415af0f2b497802fb6cf0a24ccdc73e9ec3f60278551309942023-02-05 11:11:196 mins ago SpiritSwap: Router0x2571a9313456662fb5f584f5a7f68268255c1aa88.189979251777694974 FTM
0x8783d9efee42d56069fab61415af0f2b497802fb6cf0a24ccdc73e9ec3f60278551309942023-02-05 11:11:196 mins ago Fantom Finance: Wrapped Fantom Token SpiritSwap: Router8.189979251777694974 FTM
0xf2f341e08e02b462acea8e51599d878748a88649ebe203cbd8c0352c7b862c11551309522023-02-05 11:10:197 mins ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token600 FTM
0x758dbb74f64a84b7c34a43e3bb7a93841ad98c46122e47ef8772afce98d8ad9d551309032023-02-05 11:09:108 mins ago SpiritSwap: Router0x9f91f075f7c4aba9551e9a11861f1047f0da4717145.409603578365207068 FTM
0x758dbb74f64a84b7c34a43e3bb7a93841ad98c46122e47ef8772afce98d8ad9d551309032023-02-05 11:09:108 mins ago Fantom Finance: Wrapped Fantom Token SpiritSwap: Router145.409603578365207068 FTM
0x2c69f63cc713edadbb800980af3bb14ea14d3b280632b8a1523970203f0e8107551308222023-02-05 11:07:0610 mins ago SpiritSwap: Router0x9ba2a5fc3a1c13befabdec3af8d92e6bb22415dd224.762444975938586972 FTM
0x2c69f63cc713edadbb800980af3bb14ea14d3b280632b8a1523970203f0e8107551308222023-02-05 11:07:0610 mins ago Fantom Finance: Wrapped Fantom Token SpiritSwap: Router224.762444975938586972 FTM
0x17293c365780d50ef0b3a942a1f4a323988b84e33071f7d2cb8f88baa0baedb2551306992023-02-05 11:04:3313 mins ago SpiritSwap: Router0x87425d8ef3dfc1e1ddb434fa8763b6ec8af74e5c82.076734503752789406 FTM
0x17293c365780d50ef0b3a942a1f4a323988b84e33071f7d2cb8f88baa0baedb2551306992023-02-05 11:04:3313 mins ago Fantom Finance: Wrapped Fantom Token SpiritSwap: Router82.076734503752789406 FTM
0x429bb96cfff62e92e9ed41d9af6d07f52bfb5c2c4a3ec9566405d095f37aa895551305302023-02-05 11:01:1016 mins ago SpiritSwap: Router0xcf7dbd09bb3be557b1520b1836cab415528f28c8224.628372987996275242 FTM
0x429bb96cfff62e92e9ed41d9af6d07f52bfb5c2c4a3ec9566405d095f37aa895551305302023-02-05 11:01:1016 mins ago Fantom Finance: Wrapped Fantom Token SpiritSwap: Router224.628372987996275242 FTM
0xd42dc963dd126dd2c2c02cedcbb3ebdf62cfab69ca02118840eebf8cf709023e551303992023-02-05 10:58:3119 mins ago SpiritSwap: Router0xe88102f2900483c63d0adcdaf4839c2759949de6189.881459041054710544 FTM
0xd42dc963dd126dd2c2c02cedcbb3ebdf62cfab69ca02118840eebf8cf709023e551303992023-02-05 10:58:3119 mins ago Fantom Finance: Wrapped Fantom Token SpiritSwap: Router189.881459041054710544 FTM
0x6e494bdd9883c787e199ad52f2d9af19bc65b94ec9a4a220bc979d54c790e179551303982023-02-05 10:58:3019 mins ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token163 FTM
0x662ae4d657cc355be06f39cf02a3a4a79be7f1f7bf50ae2b9aeb7f7ef1aba107551303022023-02-05 10:56:2021 mins ago SpiritSwap: Router0x4bc985a2d5b1eefc2c2bedb0bc3d4f29b938896467.078299504983944397 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SpiritRouter

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 FtmScan.com on 2021-04-25
*/

/**
 *Submitted for verification at FtmScan.com on 2020-09-19
*/

pragma solidity =0.6.6;


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

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

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

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

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

    function locked() external view returns (bool);
    function setLocked(bool) external;
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

// 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 PancakeLibrary {
    using SafeMath for uint;

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

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

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

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

    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {
        require(amountIn > 0, 'PancakeLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'PancakeLibrary: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(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, 'PancakeLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'PancakeLibrary: 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, 'PancakeLibrary: INVALID_PATH');
        amounts = new uint[](path.length);
        amounts[0] = amountIn;
        for (uint i; i < path.length - 1; i++) {
            (uint reserveIn, uint reserveOut) = getReserves(factory, path[i], path[i + 1]);
            amounts[i + 1] = getAmountOut(amounts[i], reserveIn, reserveOut);
        }
    }

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

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 SpiritRouter is IPancakeRouter02 {
    using SafeMath for uint;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

60c060405234801561001057600080fd5b5060405162004e9838038062004e988339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614ce6620001b26000398061015f5280610ce45280610d1f5280610edb52806110f9528061160d52806117735280611cc45280611dbe5280611e745280612007528061214d52806121d552806124df528061255a5280612609528061279a528061282f52806128a35280612da15280613014528061306a528061309e5280613112528061337752806134ba5280613542525080610e0e5280610f69528061104052806111bf52806111f8528061133052806113f85280611540528061169b5280611751528061189d52806119865280611bf75280611f42528061209a52806122075280612367528061242f52806126d552806128d55280612b2e5280612d265280612d4f5280612d7f5280612eec528061304852806132b2528061340a52806135745280613e1b5280613e5e528061414152806142c052806146f0528061479e528061481e5250614ce66000f3fe60806040526004361061014f5760003560e01c80638803dbee116100b6578063c45a01551161006f578063c45a015514610a10578063d06ca61f14610a25578063ded9382a14610ada578063e8e3370014610b4d578063f305d71914610bcd578063fb3bdb4114610c1357610188565b80638803dbee146107df578063ad5c464814610875578063ad615dec146108a6578063af2979eb146108dc578063b6f9de951461092f578063baa2abde146109b357610188565b80634a25d94a116101085780634a25d94a146104f05780635b0d5984146105865780635c11d795146105f9578063791ac9471461068f5780637ff36ab51461072557806385f8c259146107a957610188565b806302751cec1461018d578063054d50d4146101f957806318cbafe5146102415780631f00ca74146103275780632195995c146103dc57806338ed17391461045a57610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101e0600480360360c08110156101b057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610c97565b6040805192835260208301919091528051918290030190f35b34801561020557600080fd5b5061022f6004803603606081101561021c57600080fd5b5080359060208101359060400135610db1565b60408051918252519081900360200190f35b34801561024d57600080fd5b506102d7600480360360a081101561026457600080fd5b813591602081013591810190606081016040820135600160201b81111561028a57600080fd5b82018360208201111561029c57600080fd5b803590602001918460208302840111600160201b831117156102bd57600080fd5b91935091506001600160a01b038135169060200135610dc6565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156103135781810151838201526020016102fb565b505050509050019250505060405180910390f35b34801561033357600080fd5b506102d76004803603604081101561034a57600080fd5b81359190810190604081016020820135600160201b81111561036b57600080fd5b82018360208201111561037d57600080fd5b803590602001918460208302840111600160201b8311171561039e57600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506111b8945050505050565b3480156103e857600080fd5b506101e0600480360361016081101561040057600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff61010082013516906101208101359061014001356111ee565b34801561046657600080fd5b506102d7600480360360a081101561047d57600080fd5b813591602081013591810190606081016040820135600160201b8111156104a357600080fd5b8201836020820111156104b557600080fd5b803590602001918460208302840111600160201b831117156104d657600080fd5b91935091506001600160a01b0381351690602001356112e8565b3480156104fc57600080fd5b506102d7600480360360a081101561051357600080fd5b813591602081013591810190606081016040820135600160201b81111561053957600080fd5b82018360208201111561054b57600080fd5b803590602001918460208302840111600160201b8311171561056c57600080fd5b91935091506001600160a01b0381351690602001356114f8565b34801561059257600080fd5b5061022f60048036036101408110156105aa57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611749565b34801561060557600080fd5b50610186600480360360a081101561061c57600080fd5b813591602081013591810190606081016040820135600160201b81111561064257600080fd5b82018360208201111561065457600080fd5b803590602001918460208302840111600160201b8311171561067557600080fd5b91935091506001600160a01b038135169060200135611857565b34801561069b57600080fd5b50610186600480360360a08110156106b257600080fd5b813591602081013591810190606081016040820135600160201b8111156106d857600080fd5b8201836020820111156106ea57600080fd5b803590602001918460208302840111600160201b8311171561070b57600080fd5b91935091506001600160a01b038135169060200135611bb1565b6102d76004803603608081101561073b57600080fd5b81359190810190604081016020820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611efa565b3480156107b557600080fd5b5061022f600480360360608110156107cc57600080fd5b5080359060208101359060400135612312565b3480156107eb57600080fd5b506102d7600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b03813516906020013561231f565b34801561088157600080fd5b5061088a6124dd565b604080516001600160a01b039092168252519081900360200190f35b3480156108b257600080fd5b5061022f600480360360608110156108c957600080fd5b5080359060208101359060400135612501565b3480156108e857600080fd5b5061022f600480360360c08110156108ff57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a0013561250e565b6101866004803603608081101561094557600080fd5b81359190810190604081016020820135600160201b81111561096657600080fd5b82018360208201111561097857600080fd5b803590602001918460208302840111600160201b8311171561099957600080fd5b91935091506001600160a01b03813516906020013561268f565b3480156109bf57600080fd5b506101e0600480360360e08110156109d657600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612ae0565b348015610a1c57600080fd5b5061088a612d24565b348015610a3157600080fd5b506102d760048036036040811015610a4857600080fd5b81359190810190604081016020820135600160201b811115610a6957600080fd5b820183602082011115610a7b57600080fd5b803590602001918460208302840111600160201b83111715610a9c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612d48945050505050565b348015610ae657600080fd5b506101e06004803603610140811015610afe57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612d75565b348015610b5957600080fd5b50610baf6004803603610100811015610b7157600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612e89565b60408051938452602084019290925282820152519081900360600190f35b610baf600480360360c0811015610be357600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612fc5565b6102d760048036036080811015610c2957600080fd5b81359190810190604081016020820135600160201b811115610c4a57600080fd5b820183602082011115610c5c57600080fd5b803590602001918460208302840111600160201b83111715610c7d57600080fd5b91935091506001600160a01b03813516906020013561326a565b6000808242811015610cde576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b610d0d897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612ae0565b9093509150610d1d8986856136b1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610d8357600080fd5b505af1158015610d97573d6000803e3d6000fd5b50505050610da5858361381b565b50965096945050505050565b6000610dbe848484613913565b949350505050565b60608142811015610e0c576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cf3090126040518163ffffffff1660e01b815260040160206040518083038186803b158015610e6557600080fd5b505afa158015610e79573d6000803e3d6000fd5b505050506040513d6020811015610e8f57600080fd5b505115610ed1576040805162461bcd60e51b815260206004820152601f6024820152600080516020614c01833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610f0b57fe5b905060200201356001600160a01b03166001600160a01b031614610f64576040805162461bcd60e51b815260206004820152601a6024820152600080516020614b2c833981519152604482015290519081900360640190fd5b610fc27f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a0392505050565b91508682600184510381518110610fd557fe5b6020026020010151101561101a5760405162461bcd60e51b8152600401808060200182810382526028815260200180614bb66028913960400191505060405180910390fd5b6110b88686600081811061102a57fe5b905060200201356001600160a01b03163361109e7f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061106c57fe5b905060200201356001600160a01b03168b8b600181811061108957fe5b905060200201356001600160a01b0316613b4f565b856000815181106110ab57fe5b6020026020010151613c0f565b6110f782878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613d6c915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061113657fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561117457600080fd5b505af1158015611188573d6000803e3d6000fd5b505050506111ad84836001855103815181106111a057fe5b602002602001015161381b565b509695505050505050565b60606111e57f00000000000000000000000000000000000000000000000000000000000000008484613fb2565b90505b92915050565b600080600061121e7f00000000000000000000000000000000000000000000000000000000000000008f8f613b4f565b905060008761122d578c611231565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156112a757600080fd5b505af11580156112bb573d6000803e3d6000fd5b505050506112ce8f8f8f8f8f8f8f612ae0565b809450819550505050509b509b9950505050505050505050565b6060814281101561132e576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cf3090126040518163ffffffff1660e01b815260040160206040518083038186803b15801561138757600080fd5b505afa15801561139b573d6000803e3d6000fd5b505050506040513d60208110156113b157600080fd5b5051156113f3576040805162461bcd60e51b815260206004820152601f6024820152600080516020614c01833981519152604482015290519081900360640190fd5b6114517f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a0392505050565b9150868260018451038151811061146457fe5b602002602001015110156114a95760405162461bcd60e51b8152600401808060200182810382526028815260200180614bb66028913960400191505060405180910390fd5b6114b98686600081811061102a57fe5b6111ad82878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613d6c915050565b6060814281101561153e576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cf3090126040518163ffffffff1660e01b815260040160206040518083038186803b15801561159757600080fd5b505afa1580156115ab573d6000803e3d6000fd5b505050506040513d60208110156115c157600080fd5b505115611603576040805162461bcd60e51b815260206004820152601f6024820152600080516020614c01833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061163d57fe5b905060200201356001600160a01b03166001600160a01b031614611696576040805162461bcd60e51b815260206004820152601a6024820152600080516020614b2c833981519152604482015290519081900360640190fd5b6116f47f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613fb292505050565b9150868260008151811061170457fe5b6020026020010151111561101a5760405162461bcd60e51b8152600401808060200182810382526024815260200180614b926024913960400191505060405180910390fd5b6000806117977f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613b4f565b90506000866117a6578b6117aa565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561182057600080fd5b505af1158015611834573d6000803e3d6000fd5b505050506118468d8d8d8d8d8d61250e565b9d9c50505050505050505050505050565b804281101561189b576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cf3090126040518163ffffffff1660e01b815260040160206040518083038186803b1580156118f457600080fd5b505afa158015611908573d6000803e3d6000fd5b505050506040513d602081101561191e57600080fd5b505115611960576040805162461bcd60e51b815260206004820152601f6024820152600080516020614c01833981519152604482015290519081900360640190fd5b6119d58585600081811061197057fe5b905060200201356001600160a01b0316336119cf7f0000000000000000000000000000000000000000000000000000000000000000898960008181106119b257fe5b905060200201356001600160a01b03168a8a600181811061108957fe5b8a613c0f565b6000858560001981018181106119e757fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611a4c57600080fd5b505afa158015611a60573d6000803e3d6000fd5b505050506040513d6020811015611a7657600080fd5b50516040805160208881028281018201909352888252929350611ab89290918991899182918501908490808284376000920191909152508892506140ea915050565b86611b6a8288886000198101818110611acd57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611b3257600080fd5b505afa158015611b46573d6000803e3d6000fd5b505050506040513d6020811015611b5c57600080fd5b50519063ffffffff6143f516565b1015611ba75760405162461bcd60e51b8152600401808060200182810382526028815260200180614bb66028913960400191505060405180910390fd5b5050505050505050565b8042811015611bf5576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cf3090126040518163ffffffff1660e01b815260040160206040518083038186803b158015611c4e57600080fd5b505afa158015611c62573d6000803e3d6000fd5b505050506040513d6020811015611c7857600080fd5b505115611cba576040805162461bcd60e51b815260206004820152601f6024820152600080516020614c01833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001685856000198101818110611cf457fe5b905060200201356001600160a01b03166001600160a01b031614611d4d576040805162461bcd60e51b815260206004820152601a6024820152600080516020614b2c833981519152604482015290519081900360640190fd5b611d5d8585600081811061197057fe5b611d9b8585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506140ea915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611e0557600080fd5b505afa158015611e19573d6000803e3d6000fd5b505050506040513d6020811015611e2f57600080fd5b5051905086811015611e725760405162461bcd60e51b8152600401808060200182810382526028815260200180614bb66028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611ed857600080fd5b505af1158015611eec573d6000803e3d6000fd5b50505050611ba7848261381b565b60608142811015611f40576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cf3090126040518163ffffffff1660e01b815260040160206040518083038186803b158015611f9957600080fd5b505afa158015611fad573d6000803e3d6000fd5b505050506040513d6020811015611fc357600080fd5b505115612005576040805162461bcd60e51b815260206004820152601f6024820152600080516020614c01833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168686600081811061203c57fe5b905060200201356001600160a01b03166001600160a01b031614612095576040805162461bcd60e51b815260206004820152601a6024820152600080516020614b2c833981519152604482015290519081900360640190fd5b6120f37f000000000000000000000000000000000000000000000000000000000000000034888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613a0392505050565b9150868260018451038151811061210657fe5b6020026020010151101561214b5760405162461bcd60e51b8152600401808060200182810382526028815260200180614bb66028913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061218757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b1580156121ba57600080fd5b505af11580156121ce573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6122337f0000000000000000000000000000000000000000000000000000000000000000898960008181106119b257fe5b8460008151811061224057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561229757600080fd5b505af11580156122ab573d6000803e3d6000fd5b505050506040513d60208110156122c157600080fd5b50516122c957fe5b61230882878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613d6c915050565b5095945050505050565b6000610dbe848484614445565b60608142811015612365576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cf3090126040518163ffffffff1660e01b815260040160206040518083038186803b1580156123be57600080fd5b505afa1580156123d2573d6000803e3d6000fd5b505050506040513d60208110156123e857600080fd5b50511561242a576040805162461bcd60e51b815260206004820152601f6024820152600080516020614c01833981519152604482015290519081900360640190fd5b6124887f000000000000000000000000000000000000000000000000000000000000000089888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613fb292505050565b9150868260008151811061249857fe5b602002602001015111156114a95760405162461bcd60e51b8152600401808060200182810382526024815260200180614b926024913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610dbe848484614535565b60008142811015612554576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b612583887f00000000000000000000000000000000000000000000000000000000000000008989893089612ae0565b604080516370a0823160e01b8152306004820152905191945061260792508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b1580156125d657600080fd5b505afa1580156125ea573d6000803e3d6000fd5b505050506040513d602081101561260057600080fd5b50516136b1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561266d57600080fd5b505af1158015612681573d6000803e3d6000fd5b505050506111ad848361381b565b80428110156126d3576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cf3090126040518163ffffffff1660e01b815260040160206040518083038186803b15801561272c57600080fd5b505afa158015612740573d6000803e3d6000fd5b505050506040513d602081101561275657600080fd5b505115612798576040805162461bcd60e51b815260206004820152601f6024820152600080516020614c01833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106127cf57fe5b905060200201356001600160a01b03166001600160a01b031614612828576040805162461bcd60e51b815260206004820152601a6024820152600080516020614b2c833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561288857600080fd5b505af115801561289c573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6129017f0000000000000000000000000000000000000000000000000000000000000000898960008181106119b257fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561295157600080fd5b505af1158015612965573d6000803e3d6000fd5b505050506040513d602081101561297b57600080fd5b505161298357fe5b60008686600019810181811061299557fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156129fa57600080fd5b505afa158015612a0e573d6000803e3d6000fd5b505050506040513d6020811015612a2457600080fd5b50516040805160208981028281018201909352898252929350612a669290918a918a9182918501908490808284376000920191909152508992506140ea915050565b87611b6a8289896000198101818110612a7b57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611b3257600080fd5b6000808242811015612b27576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b6000612b547f00000000000000000000000000000000000000000000000000000000000000008c8c613b4f565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b158015612baf57600080fd5b505af1158015612bc3573d6000803e3d6000fd5b505050506040513d6020811015612bd957600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b158015612c2657600080fd5b505af1158015612c3a573d6000803e3d6000fd5b505050506040513d6040811015612c5057600080fd5b50805160209091015190925090506000612c6a8e8e6145e1565b509050806001600160a01b03168e6001600160a01b031614612c8d578183612c90565b82825b90975095508a871015612cd45760405162461bcd60e51b8152600401808060200182810382526023815260200180614bde6023913960400191505060405180910390fd5b89861015612d135760405162461bcd60e51b8152600401808060200182810382526023815260200180614b4c6023913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111e57f00000000000000000000000000000000000000000000000000000000000000008484613a03565b6000806000612dc57f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613b4f565b9050600087612dd4578c612dd8565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015612e4e57600080fd5b505af1158015612e62573d6000803e3d6000fd5b50505050612e748e8e8e8e8e8e610c97565b909f909e509c50505050505050505050505050565b60008060008342811015612ed2576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b612ee08c8c8c8c8c8c6146bf565b90945092506000612f127f00000000000000000000000000000000000000000000000000000000000000008e8e613b4f565b9050612f208d338388613c0f565b612f2c8c338387613c0f565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612f8457600080fd5b505af1158015612f98573d6000803e3d6000fd5b505050506040513d6020811015612fae57600080fd5b5051949d939c50939a509198505050505050505050565b6000806000834281101561300e576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b61303c8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c6146bf565b9094509250600061308e7f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613b4f565b905061309c8b338388613c0f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b1580156130f757600080fd5b505af115801561310b573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561319057600080fd5b505af11580156131a4573d6000803e3d6000fd5b505050506040513d60208110156131ba57600080fd5b50516131c257fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b15801561321a57600080fd5b505af115801561322e573d6000803e3d6000fd5b505050506040513d602081101561324457600080fd5b505192503484101561325c5761325c3385340361381b565b505096509650969350505050565b606081428110156132b0576040805162461bcd60e51b81526020600482015260156024820152600080516020614b0c833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663cf3090126040518163ffffffff1660e01b815260040160206040518083038186803b15801561330957600080fd5b505afa15801561331d573d6000803e3d6000fd5b505050506040513d602081101561333357600080fd5b505115613375576040805162461bcd60e51b815260206004820152601f6024820152600080516020614c01833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106133ac57fe5b905060200201356001600160a01b03166001600160a01b031614613405576040805162461bcd60e51b815260206004820152601a6024820152600080516020614b2c833981519152604482015290519081900360640190fd5b6134637f000000000000000000000000000000000000000000000000000000000000000088888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250613fb292505050565b9150348260008151811061347357fe5b602002602001015111156134b85760405162461bcd60e51b8152600401808060200182810382526024815260200180614b926024913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0836000815181106134f457fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561352757600080fd5b505af115801561353b573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6135a07f0000000000000000000000000000000000000000000000000000000000000000898960008181106119b257fe5b846000815181106135ad57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561360457600080fd5b505af1158015613618573d6000803e3d6000fd5b505050506040513d602081101561362e57600080fd5b505161363657fe5b61367582878780806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250899250613d6c915050565b8160008151811061368257fe5b60200260200101513411156123085761230833836000815181106136a257fe5b6020026020010151340361381b565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b6020831061372e5780518252601f19909201916020918201910161370f565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613790576040519150601f19603f3d011682016040523d82523d6000602084013e613795565b606091505b50915091508180156137c35750805115806137c357508080602001905160208110156137c057600080fd5b50515b613814576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106138675780518252601f199092019160209182019101613848565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146138c9576040519150601f19603f3d011682016040523d82523d6000602084013e6138ce565b606091505b505090508061390e5760405162461bcd60e51b8152600401808060200182810382526023815260200180614c446023913960400191505060405180910390fd5b505050565b60008084116139535760405162461bcd60e51b8152600401808060200182810382526029815260200180614ab96029913960400191505060405180910390fd5b6000831180156139635750600082115b61399e5760405162461bcd60e51b8152600401808060200182810382526026815260200180614c676026913960400191505060405180910390fd5b60006139b2856103e563ffffffff61493316565b905060006139c6828563ffffffff61493316565b905060006139ec836139e0886103e863ffffffff61493316565b9063ffffffff61499616565b90508082816139f757fe5b04979650505050505050565b6060600282511015613a5c576040805162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613a7457600080fd5b50604051908082528060200260200182016040528015613a9e578160200160208202803683370190505b5090508281600081518110613aaf57fe5b60200260200101818152505060005b6001835103811015613b4757600080613b0187868581518110613add57fe5b6020026020010151878660010181518110613af457fe5b60200260200101516149e5565b91509150613b23848481518110613b1457fe5b60200260200101518383613913565b848460010181518110613b3257fe5b60209081029190910101525050600101613abe565b509392505050565b6000806000613b5e85856145e1565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527fe242e798f6cee26a9cb0bbf24653bf066e5356ffeac160907fe2cc108e238617609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b60208310613c945780518252601f199092019160209182019101613c75565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613cf6576040519150601f19603f3d011682016040523d82523d6000602084013e613cfb565b606091505b5091509150818015613d29575080511580613d295750808060200190516020811015613d2657600080fd5b50515b613d645760405162461bcd60e51b8152600401808060200182810382526024815260200180614c8d6024913960400191505060405180910390fd5b505050505050565b60005b6001835103811015613fac57600080848381518110613d8a57fe5b6020026020010151858460010181518110613da157fe5b6020026020010151915091506000613db983836145e1565b5090506000878560010181518110613dcd57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b031614613dfb57826000613dff565b6000835b91509150600060028a51038810613e165788613e57565b613e577f0000000000000000000000000000000000000000000000000000000000000000878c8b60020181518110613e4a57fe5b6020026020010151613b4f565b9050613e847f00000000000000000000000000000000000000000000000000000000000000008888613b4f565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613ec1576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613f32578181015183820152602001613f1a565b50505050905090810190601f168015613f5f5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613f8157600080fd5b505af1158015613f95573d6000803e3d6000fd5b505060019099019850613d6f975050505050505050565b50505050565b606060028251101561400b576040805162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561402357600080fd5b5060405190808252806020026020018201604052801561404d578160200160208202803683370190505b509050828160018351038151811061406157fe5b60209081029190910101528151600019015b8015613b47576000806140a38786600186038151811061408f57fe5b6020026020010151878681518110613af457fe5b915091506140c58484815181106140b657fe5b60200260200101518383614445565b8460018503815181106140d457fe5b6020908102919091010152505060001901614073565b60005b600183510381101561390e5760008084838151811061410857fe5b602002602001015185846001018151811061411f57fe5b602002602001015191509150600061413783836145e1565b50905060006141677f00000000000000000000000000000000000000000000000000000000000000008585613b4f565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156141a857600080fd5b505afa1580156141bc573d6000803e3d6000fd5b505050506040513d60608110156141d257600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a81169089161461420857828461420b565b83835b91509150614269828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b158015611b3257600080fd5b9550614276868383613913565b945050505050600080856001600160a01b0316886001600160a01b0316146142a0578260006142a4565b6000835b91509150600060028c51038a106142bb578a6142ef565b6142ef7f0000000000000000000000000000000000000000000000000000000000000000898e8d60020181518110613e4a57fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015614379578181015183820152602001614361565b50505050905090810190601f1680156143a65780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156143c857600080fd5b505af11580156143dc573d6000803e3d6000fd5b50506001909b019a506140ed9950505050505050505050565b808203828111156111e8576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b60008084116144855760405162461bcd60e51b815260040180806020018281038252602a815260200180614ae2602a913960400191505060405180910390fd5b6000831180156144955750600082115b6144d05760405162461bcd60e51b8152600401808060200182810382526026815260200180614c676026913960400191505060405180910390fd5b60006144f46103e86144e8868863ffffffff61493316565b9063ffffffff61493316565b9050600061450e6103e56144e8868963ffffffff6143f516565b905061452b600182848161451e57fe5b049063ffffffff61499616565b9695505050505050565b60008084116145755760405162461bcd60e51b8152600401808060200182810382526023815260200180614c216023913960400191505060405180910390fd5b6000831180156145855750600082115b6145c05760405162461bcd60e51b8152600401808060200182810382526026815260200180614c676026913960400191505060405180910390fd5b826145d1858463ffffffff61493316565b816145d857fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156146355760405162461bcd60e51b8152600401808060200182810382526023815260200180614b6f6023913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b031610614655578284614658565b83835b90925090506001600160a01b0382166146b8576040805162461bcd60e51b815260206004820152601c60248201527f50616e63616b654c6962726172793a205a45524f5f4144445245535300000000604482015290519081900360640190fd5b9250929050565b6040805163e6a4390560e01b81526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b15801561473957600080fd5b505afa15801561474d573d6000803e3d6000fd5b505050506040513d602081101561476357600080fd5b50516001600160a01b0316141561481657604080516364e329cb60e11b81526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b1580156147e957600080fd5b505af11580156147fd573d6000803e3d6000fd5b505050506040513d602081101561481357600080fd5b50505b6000806148447f00000000000000000000000000000000000000000000000000000000000000008b8b6149e5565b91509150816000148015614856575080155b1561486657879350869250614926565b6000614873898484614535565b90508781116148c657858110156148bb5760405162461bcd60e51b8152600401808060200182810382526023815260200180614b4c6023913960400191505060405180910390fd5b889450925082614924565b60006148d3898486614535565b9050898111156148df57fe5b8781101561491e5760405162461bcd60e51b8152600401808060200182810382526023815260200180614bde6023913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b600081158061494e5750508082028282828161494b57fe5b04145b6111e8576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b808201828110156111e8576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006149f485856145e1565b509050614a02868686613b4f565b50600080614a11888888613b4f565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015614a4957600080fd5b505afa158015614a5d573d6000803e3d6000fd5b505050506040513d6060811015614a7357600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b0387811690841614614aa6578082614aa9565b81815b9099909850965050505050505056fe50616e63616b654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e5450616e63616b654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e54537069726974526f757465723a20455850495245440000000000000000000000537069726974526f757465723a20494e56414c49445f50415448000000000000537069726974526f757465723a20494e53554646494349454e545f425f414d4f554e5450616e63616b654c6962726172793a204944454e544943414c5f414444524553534553537069726974526f757465723a204558434553534956455f494e5055545f414d4f554e54537069726974526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e54537069726974526f757465723a20494e53554646494349454e545f415f414d4f554e54537069726974526f757465723a205065726d697373696f6e2044656e6965640050616e63616b654c6962726172793a20494e53554646494349454e545f414d4f554e545472616e7366657248656c7065723a204554485f5452414e534645525f4641494c454450616e63616b654c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212208d64c255186fe1daa3037b737254d8578dcec7cf7bd0dcfeea1249bfb7c5c30c64736f6c63430006060033000000000000000000000000ef45d134b73241eda7703fa787148d9c9f4950b000000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83

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

000000000000000000000000ef45d134b73241eda7703fa787148d9c9f4950b000000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83

-----Decoded View---------------
Arg [0] : _factory (address): 0xef45d134b73241eda7703fa787148d9c9f4950b0
Arg [1] : _WETH (address): 0x21be370d5312f44cb42ce377bc9b8a0cef1a4c83

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000ef45d134b73241eda7703fa787148d9c9f4950b0
Arg [1] : 00000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c83


Deployed ByteCode Sourcemap

15610:19185:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16082:10;-1:-1:-1;;;;;16096:4:0;16082:18;;16075:26;;;;15610:19185;;12:1:-1;9;2:12;20194:673:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20194:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20194:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;33747:260;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33747:260:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33747:260:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;27665:929;;5:9:-1;2:2;;;27:1;24;17:12;2:2;27665:929:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27665:929:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;27665:929:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27665:929: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;27665:929:0;;-1:-1:-1;27665:929:0;-1:-1:-1;;;;;;27665:929: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;27665:929:0;;;;;;;;;;;;;;;;;34541:251;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34541:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34541:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34541:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34541:251:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34541:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34541:251:0;;-1:-1:-1;34541:251:0;;-1:-1:-1;;;;;34541:251:0:i;20873:673::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20873:673:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20873:673:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24560:710::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24560:710:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;24560:710:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;24560:710:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;24560:710:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;24560:710:0;;-1:-1:-1;24560:710:0;-1:-1:-1;;;;;;24560:710:0;;;;;;;;:::i;26752:907::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26752:907:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26752:907:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;26752:907:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26752:907: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;26752:907:0;;-1:-1:-1;26752:907:0;-1:-1:-1;;;;;;26752:907:0;;;;;;;;:::i;23002:714::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23002:714:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23002:714:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;30844:798::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30844:798:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;30844:798:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;30844:798:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;30844:798: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;30844:798:0;;-1:-1:-1;30844:798:0;-1:-1:-1;;;;;;30844:798:0;;;;;;;;:::i;32585:924::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32585:924:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32585:924:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;32585:924:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32585:924: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;32585:924:0;;-1:-1:-1;32585:924:0;-1:-1:-1;;;;;;32585:924:0;;;;;;;;:::i;25970:776::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25970:776:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25970:776:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25970:776: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;25970:776:0;;-1:-1:-1;25970:776:0;-1:-1:-1;;;;;;25970:776:0;;;;;;;;:::i;34015:259::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34015:259:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34015:259:0;;;;;;;;;;;;:::i;25276:688::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;25276:688:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;25276:688:0;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;25276:688:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;25276:688: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;25276:688:0;;-1:-1:-1;25276:688:0;-1:-1:-1;;;;;;25276:688:0;;;;;;;;:::i;15739:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15739:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;15739:38:0;;;;;;;;;;;;;;33553:186;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33553:186:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;33553:186:0;;;;;;;;;;;;:::i;22296:700::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22296:700:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22296:700:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31648:931::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;31648:931:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;31648:931:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;31648:931: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;31648:931:0;;-1:-1:-1;31648:931:0;-1:-1:-1;;;;;;31648:931:0;;;;;;;;:::i;19337:851::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19337:851:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19337:851:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15691:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15691:41:0;;;:::i;34282:251::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34282:251:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;34282:251:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;34282:251:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;34282:251:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;-1:-1;;;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;34282:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;34282:251:0;;-1:-1:-1;34282:251:0;;-1:-1:-1;;;;;34282:251:0:i;21552:665::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21552:665:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21552:665:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17584:734::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17584:734:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;17584:734:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;18324:970;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;18324:970:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28600:889::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28600:889:0;;;;;;;;;;;;;;-1:-1:-1;;;11:28;;8:2;;;52:1;49;42:12;8:2;28600:889:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28600:889: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;28600:889:0;;-1:-1:-1;28600:889:0;-1:-1:-1;;;;;;28600:889:0;;;;;;;;:::i;20194:673::-;20431:16;20449:14;20412:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;20503:196:::1;20533:5;20553:4;20572:9;20596:14;20625:12;20660:4;20680:8;20503:15;:196::i;:::-;20476:223:::0;;-1:-1:-1;20476:223:0;-1:-1:-1;20710:51:0::1;20738:5:::0;20745:2;20476:223;20710:27:::1;:51::i;:::-;20778:4;-1:-1:-1::0;;;;;20772:20:0::1;;20793:9;20772:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20772:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20772:31:0;;;;20814:45;20845:2;20849:9;20814:30;:45::i;:::-;20194:673:::0;;;;;;;;;;:::o;33747:260::-;33900:14;33939:60;33967:8;33977:9;33988:10;33939:27;:60::i;:::-;33932:67;33747:260;-1:-1:-1;;;;33747:260:0:o;27665:929::-;27879:21;27851:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;27943:7:::1;-1:-1:-1::0;;;;;27927:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27927:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27927:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27927:33:0;27926:34:::1;27918:78;;;::::0;;-1:-1:-1;;;27918:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27918:78:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;28040:4:0::1;28015:29;:4:::0;;-1:-1:-1;;28020:15:0;;28015:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28015:21:0::1;-1:-1:-1::0;;;;;28015:29:0::1;;28007:68;;;::::0;;-1:-1:-1;;;28007:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28007:68:0;;;;;;;;;;;;;::::1;;28096:53;28125:7;28134:8;28144:4;;28096:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28096:28:0::1;::::0;-1:-1:-1;;;28096:53:0:i:1;:::-;28086:63;;28199:12;28168:7;28193:1;28176:7;:14;:18;28168:27;;;;;;;;;;;;;;:43;;28160:96;;;;-1:-1:-1::0;;;28160:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28267:139;28313:4;;28318:1;28313:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28313:7:0::1;28322:10;28334:49;28357:7;28366:4;;28371:1;28366:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28366:7:0::1;28375:4;;28380:1;28375:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28375:7:0::1;28334:22;:49::i;:::-;28385:7;28393:1;28385:10;;;;;;;;;;;;;;28267:31;:139::i;:::-;28417:35;28423:7;28432:4;;28417:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28446:4:0::1;::::0;-1:-1:-1;28417:5:0::1;::::0;-1:-1:-1;;28417:35:0:i:1;:::-;28469:4;-1:-1:-1::0;;;;;28463:20:0::1;;28484:7;28509:1;28492:7;:14;:18;28484:27;;;;;;;;;;;;;;28463:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28463:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28463:49:0;;;;28523:63;28554:2;28558:7;28583:1;28566:7;:14;:18;28558:27;;;;;;;;;;;;;;28523:30;:63::i;:::-;27665:929:::0;;;;;;;;;:::o;34541:251::-;34685:21;34731:53;34759:7;34768:9;34779:4;34731:27;:53::i;:::-;34724:60;;34541:251;;;;;:::o;20873:673::-;21179:12;21193;21218;21233:47;21256:7;21265:6;21273;21233:22;:47::i;:::-;21218:62;;21291:10;21304;:33;;21328:9;21304:33;;;-1:-1:-1;;21304:33:0;21348:78;;;-1:-1:-1;;;21348:78:0;;21374:10;21348:78;;;;21394:4;21348:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21291:46;;-1:-1:-1;;;;;;21348:25:0;;;;;:78;;;;;-1:-1:-1;;21348:78:0;;;;;;;;-1:-1:-1;21348:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;21348:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21348:78:0;;;;21458:80;21474:6;21482;21490:9;21501:10;21513;21525:2;21529:8;21458:15;:80::i;:::-;21437:101;;;;;;;;20873:673;;;;;;;;;;;;;;;;:::o;24560:710::-;24784:21;24765:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;24843:7:::1;-1:-1:-1::0;;;;;24827:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24827:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24827:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24827:33:0;24826:34:::1;24818:78;;;::::0;;-1:-1:-1;;;24818:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;24818:78:0;;;;;;;;;;;;;::::1;;24917:53;24946:7;24955:8;24965:4;;24917:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;24917:28:0::1;::::0;-1:-1:-1;;;24917:53:0:i:1;:::-;24907:63;;25020:12;24989:7;25014:1;24997:7;:14;:18;24989:27;;;;;;;;;;;;;;:43;;24981:96;;;;-1:-1:-1::0;;;24981:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25088:139;25134:4;;25139:1;25134:7;;;;;;25088:139;25238:24;25244:7;25253:4;;25238:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25259:2:0;;-1:-1:-1;25238:5:0::1;::::0;-1:-1:-1;;25238:24:0:i:1;26752:907::-:0;26966:21;26938:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;27030:7:::1;-1:-1:-1::0;;;;;27014:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;27014:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;27014:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;27014:33:0;27013:34:::1;27005:78;;;::::0;;-1:-1:-1;;;27005:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27005:78:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;27127:4:0::1;27102:29;:4:::0;;-1:-1:-1;;27107:15:0;;27102:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;27102:21:0::1;-1:-1:-1::0;;;;;27102:29:0::1;;27094:68;;;::::0;;-1:-1:-1;;;27094:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;27094:68:0;;;;;;;;;;;;;::::1;;27183:53;27211:7;27220:9;27231:4;;27183:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27183:27:0::1;::::0;-1:-1:-1;;;27183:53:0:i:1;:::-;27173:63;;27269:11;27255:7;27263:1;27255:10;;;;;;;;;;;;;;:25;;27247:74;;;;-1:-1:-1::0;;;27247:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23002:714:::0;23320:14;23347:12;23362:44;23385:7;23394:5;23401:4;23362:22;:44::i;:::-;23347:59;;23417:10;23430;:33;;23454:9;23430:33;;;-1:-1:-1;;23430:33:0;23474:78;;;-1:-1:-1;;;23474:78:0;;23500:10;23474:78;;;;23520:4;23474:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23417:46;;-1:-1:-1;;;;;;23474:25:0;;;;;:78;;;;;-1:-1:-1;;23474:78:0;;;;;;;;-1:-1:-1;23474:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;23474:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23474:78:0;;;;23575:133;23637:5;23644:9;23655:14;23671:12;23685:2;23689:8;23575:47;:133::i;:::-;23563:145;23002:714;-1:-1:-1;;;;;;;;;;;;;23002:714:0:o;30844:798::-;31078:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;31124:7:::1;-1:-1:-1::0;;;;;31108:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31108:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31108:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31108:33:0;31107:34:::1;31099:78;;;::::0;;-1:-1:-1;;;31099:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31099:78:0;;;;;;;;;;;;;::::1;;31188:137;31234:4;;31239:1;31234:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31234:7:0::1;31243:10;31255:49;31278:7;31287:4;;31292:1;31287:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31287:7:0::1;31296:4;;31301:1;31296:7;;;;;;31255:49;31306:8;31188:31;:137::i;:::-;31336:18;31364:4:::0;;-1:-1:-1;;31369:15:0;;31364:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31364:21:0::1;-1:-1:-1::0;;;;;31357:39:0::1;;31397:2;31357:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31357:43:0::1;-1:-1:-1::0;;;;;31357:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31357:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31357:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31357:43:0;31411:44:::1;::::0;;31357:43:::1;31411:44:::0;;::::1;::::0;;;;;;;;;;;31357:43;;-1:-1:-1;31411:44:0::1;::::0;;;31446:4;;;;;;31411:44;::::1;::::0;31446:4;;31411:44;31446:4;31411:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;31452:2:0;;-1:-1:-1;31411:34:0::1;::::0;-1:-1:-1;;31411:44:0:i:1;:::-;31554:12:::0;31488:62:::1;31536:13:::0;31495:4;;-1:-1:-1;;31500:15:0;;31495:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;31495:21:0::1;-1:-1:-1::0;;;;;31488:39:0::1;;31528:2;31488:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;31488:43:0::1;-1:-1:-1::0;;;;;31488:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31488:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31488:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31488:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;31466:168;;;;-1:-1:-1::0;;;31466:168:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15900:1;30844:798:::0;;;;;;;:::o;32585:924::-;32852:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;32903:7:::1;-1:-1:-1::0;;;;;32887:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32887:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32887:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32887:33:0;32886:34:::1;32878:78;;;::::0;;-1:-1:-1;;;32878:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32878:78:0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;33000:4:0::1;32975:29;:4:::0;;-1:-1:-1;;32980:15:0;;32975:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32975:21:0::1;-1:-1:-1::0;;;;;32975:29:0::1;;32967:68;;;::::0;;-1:-1:-1;;;32967:68:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32967:68:0;;;;;;;;;;;;;::::1;;33046:137;33092:4;;33097:1;33092:7;;;;;;33046:137;33194:55;33229:4;;33194:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33243:4:0::1;::::0;-1:-1:-1;33194:34:0::1;::::0;-1:-1:-1;;33194:55:0:i:1;:::-;33277:37;::::0;;-1:-1:-1;;;33277:37:0;;33308:4:::1;33277:37;::::0;::::1;::::0;;;33260:14:::1;::::0;-1:-1:-1;;;;;33284:4:0::1;33277:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;33277:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33277:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33277:37:0;;-1:-1:-1;33333:25:0;;::::1;;33325:78;;;;-1:-1:-1::0;;;33325:78:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33420:4;-1:-1:-1::0;;;;;33414:20:0::1;;33435:9;33414:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33414:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33414:31:0;;;;33456:45;33487:2;33491:9;33456:30;:45::i;25970:776::-:0;26186:21;26158:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;26250:7:::1;-1:-1:-1::0;;;;;26234:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26234:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26234:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26234:33:0;26233:34:::1;26225:78;;;::::0;;-1:-1:-1;;;26225:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26225:78:0;;;;;;;;;;;;;::::1;;26333:4;-1:-1:-1::0;;;;;26322:15:0::1;:4;;26327:1;26322:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;26322:7:0::1;-1:-1:-1::0;;;;;26322:15:0::1;;26314:54;;;::::0;;-1:-1:-1;;;26314:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;26314:54:0;;;;;;;;;;;;;::::1;;26389;26418:7;26427:9;26438:4;;26389:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26389:28:0::1;::::0;-1:-1:-1;;;26389:54:0:i:1;:::-;26379:64;;26493:12;26462:7;26487:1;26470:7;:14;:18;26462:27;;;;;;;;;;;;;;:43;;26454:96;;;;-1:-1:-1::0;;;26454:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26567:4;-1:-1:-1::0;;;;;26561:19:0::1;;26588:7;26596:1;26588:10;;;;;;;;;;;;;;26561:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26561:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26561:40:0;;;;;26625:4;-1:-1:-1::0;;;;;26619:20:0::1;;26640:49;26663:7;26672:4;;26677:1;26672:7;;;;;;26640:49;26691:7;26699:1;26691:10;;;;;;;;;;;;;;26619:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;26619:83:0::1;-1:-1:-1::0;;;;;26619:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;26619:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;26619:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;26619:83:0;26612:91:::1;;;;26714:24;26720:7;26729:4;;26714:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26735:2:0;;-1:-1:-1;26714:5:0::1;::::0;-1:-1:-1;;26714:24:0:i:1;:::-;25970:776:::0;;;;;;;;:::o;34015:259::-;34168:13;34206:60;34233:9;34244;34255:10;34206:26;:60::i;25276:688::-;25500:21;25481:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;25559:7:::1;-1:-1:-1::0;;;;;25543:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;25543:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;25543:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;25543:33:0;25542:34:::1;25534:78;;;::::0;;-1:-1:-1;;;25534:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;25534:78:0;;;;;;;;;;;;;::::1;;25633:53;25661:7;25670:9;25681:4;;25633:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;25633:27:0::1;::::0;-1:-1:-1;;;25633:53:0:i:1;:::-;25623:63;;25719:11;25705:7;25713:1;25705:10;;;;;;;;;;;;;;:25;;25697:74;;;;-1:-1:-1::0;;;25697:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15739:38:::0;;;:::o;33553:186::-;33650:12;33682:49;33703:7;33712:8;33722;33682:20;:49::i;22296:700::-;22562:14;22543:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;22605:196:::1;22635:5;22655:4;22674:9;22698:14;22727:12;22762:4;22782:8;22605:15;:196::i;:::-;22851:38;::::0;;-1:-1:-1;;;22851:38:0;;22883:4:::1;22851:38;::::0;::::1;::::0;;;22589:212;;-1:-1:-1;22812:78:0::1;::::0;-1:-1:-1;22840:5:0;;22847:2;;-1:-1:-1;;;;;22851: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;22851:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22851:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;22851:38:0;22812:27:::1;:78::i;:::-;22907:4;-1:-1:-1::0;;;;;22901:20:0::1;;22922:9;22901:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22901:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22901:31:0;;;;22943:45;22974:2;22978:9;22943:30;:45::i;31648:931::-:0;31908:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;31959:7:::1;-1:-1:-1::0;;;;;31943:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;31943:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;31943:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;31943:33:0;31942:34:::1;31934:78;;;::::0;;-1:-1:-1;;;31934:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31934:78:0;;;;;;;;;;;;;::::1;;32042:4;-1:-1:-1::0;;;;;32031:15:0::1;:4;;32036:1;32031:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32031:7:0::1;-1:-1:-1::0;;;;;32031:15:0::1;;32023:54;;;::::0;;-1:-1:-1;;;32023:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32023:54:0;;;;;;;;;;;;;::::1;;32088:13;32104:9;32088:25;;32130:4;-1:-1:-1::0;;;;;32124:19:0::1;;32151:8;32124:38;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32124:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32124:38:0;;;;;32186:4;-1:-1:-1::0;;;;;32180:20:0::1;;32201:49;32224:7;32233:4;;32238:1;32233:7;;;;;;32201:49;32252:8;32180:81;;;;;;;;;;;;;-1:-1:-1::0;;;;;32180:81:0::1;-1:-1:-1::0;;;;;32180:81:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32180:81:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32180:81:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32180:81:0;32173:89:::1;;;;32273:18;32301:4:::0;;-1:-1:-1;;32306:15:0;;32301:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32301:21:0::1;-1:-1:-1::0;;;;;32294:39:0::1;;32334:2;32294:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32294:43:0::1;-1:-1:-1::0;;;;;32294:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32294:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32294:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32294:43:0;32348:44:::1;::::0;;32294:43:::1;32348:44:::0;;::::1;::::0;;;;;;;;;;;32294:43;;-1:-1:-1;32348:44:0::1;::::0;;;32383:4;;;;;;32348:44;::::1;::::0;32383:4;;32348:44;32383:4;32348:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32389:2:0;;-1:-1:-1;32348:34:0::1;::::0;-1:-1:-1;;32348:44:0:i:1;:::-;32491:12:::0;32425:62:::1;32473:13:::0;32432:4;;-1:-1:-1;;32437:15:0;;32432:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32432:21:0::1;-1:-1:-1::0;;;;;32425:39:0::1;;32465:2;32425:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32425:43:0::1;-1:-1:-1::0;;;;;32425:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;19337:851:0::0;19591:12;19605;19572:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;19630:12:::1;19645:47;19668:7;19677:6;19685;19645:22;:47::i;:::-;19703:60;::::0;;-1:-1:-1;;;19703:60:0;;19735:10:::1;19703:60;::::0;::::1;::::0;-1:-1:-1;;;;;19703:31:0;::::1;:60:::0;;;;;;;;;;;;;;19630:62;;-1:-1:-1;19703:31:0;;::::1;::::0;:60;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;19703:31:0;:60;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19703:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19703:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;19831:27:0::1;::::0;;-1:-1:-1;;;19831:27:0;;-1:-1:-1;;;;;19831:27:0;;::::1;;::::0;::::1;::::0;;;19801:12:::1;::::0;;;19831:23;;::::1;::::0;::::1;::::0;:27;;;;;;;;;;;19801:12;19831:23;:27;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;19831:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19831:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19831:27:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;19831:27:0;-1:-1:-1;19870:14:0::1;19889:41;19915:6:::0;19923;19889:25:::1;:41::i;:::-;19869:61;;;19972:6;-1:-1:-1::0;;;;;19962:16:0::1;:6;-1:-1:-1::0;;;;;19962:16:0::1;;:58;;20003:7;20012;19962:58;;;19982:7;19991;19962:58;19941:79:::0;;-1:-1:-1;19941:79:0;-1:-1:-1;20039:21:0;;::::1;;20031:69;;;;-1:-1:-1::0;;;20031:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20130:10;20119:7;:21;;20111:69;;;;-1:-1:-1::0;;;20111:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15900:1;;;;19337:851:::0;;;;;;;;;;;:::o;15691:41::-;;;:::o;34282:251::-;34426:21;34472:53;34501:7;34510:8;34520:4;34472:28;:53::i;21552:665::-;21841:16;21859:14;21886:12;21901:44;21924:7;21933:5;21940:4;21901:22;:44::i;:::-;21886:59;;21956:10;21969;:33;;21993:9;21969:33;;;-1:-1:-1;;21969:33:0;22013:78;;;-1:-1:-1;;;22013:78:0;;22039:10;22013:78;;;;22059:4;22013:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21956:46;;-1:-1:-1;;;;;;22013:25:0;;;;;:78;;;;;-1:-1:-1;;22013:78:0;;;;;;;;-1:-1:-1;22013:25:0;:78;;;2:2:-1;;;;27:1;24;17:12;2:2;22013:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22013:78:0;;;;22129:80;22148:5;22155:9;22166:14;22182:12;22196:2;22200:8;22129:18;:80::i;:::-;22102:107;;;;-1:-1:-1;21552:665:0;-1:-1:-1;;;;;;;;;;;;;21552:665:0:o;17584:734::-;17872:12;17886;17900:14;17853:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;17948:85:::1;17962:6;17970;17978:14;17994;18010:10;18022;17948:13;:85::i;:::-;17927:106:::0;;-1:-1:-1;17927:106:0;-1:-1:-1;18044:12:0::1;18059:47;18082:7;18091:6:::0;18099;18059:22:::1;:47::i;:::-;18044:62;;18117:66;18149:6;18157:10;18169:4;18175:7;18117:31;:66::i;:::-;18194;18226:6;18234:10;18246:4;18252:7;18194:31;:66::i;:::-;18296:4;-1:-1:-1::0;;;;;18283:23:0::1;;18307:2;18283:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;18283:27:0::1;-1:-1:-1::0;;;;;18283:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;18283:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;18283:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;18283:27:0;17584:734;;;;-1:-1:-1;18283:27:0;;-1:-1:-1;17584:734:0;;-1:-1:-1;;;;;;;;;17584:734:0:o;18324:970::-;18577:16;18595:14;18611;18558:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;18665:176:::1;18693:5;18713:4;18732:18;18765:9;18789:14;18818:12;18665:13;:176::i;:::-;18638:203:::0;;-1:-1:-1;18638:203:0;-1:-1:-1;18852:12:0::1;18867:44;18890:7;18899:5:::0;18906:4:::1;18867:22;:44::i;:::-;18852:59;;18922:69;18954:5;18961:10;18973:4;18979:11;18922:31;:69::i;:::-;19008:4;-1:-1:-1::0;;;;;19002:19:0::1;;19029:9;19002:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19002:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19002:39:0;;;;;19065:4;-1:-1:-1::0;;;;;19059:20:0::1;;19080:4;19086:9;19059:37;;;;;;;;;;;;;-1:-1:-1::0;;;;;19059:37:0::1;-1:-1:-1::0;;;;;19059:37:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19059:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19059:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19059:37:0;19052:45:::1;;;;19133:4;-1:-1:-1::0;;;;;19120:23:0::1;;19144:2;19120:27;;;;;;;;;;;;;-1:-1:-1::0;;;;;19120:27:0::1;-1:-1:-1::0;;;;;19120:27:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19120:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19120:27:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19120:27:0;;-1:-1:-1;19198:9:0::1;:21:::0;-1:-1:-1;19194:92:0::1;;;19221:65;19252:10;19276:9;19264;:21;19221:30;:65::i;:::-;15900:1;18324:970:::0;;;;;;;;;;;:::o;28600:889::-;28813:21;28785:8;15848:15;15836:8;:27;;15828:61;;;;;-1:-1:-1;;;15828:61:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15828:61:0;;;;;;;;;;;;;;;28877:7:::1;-1:-1:-1::0;;;;;28861:31:0::1;;:33;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28861:33:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28861:33:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28861:33:0;28860:34:::1;28852:78;;;::::0;;-1:-1:-1;;;28852:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28852:78:0;;;;;;;;;;;;;::::1;;28960:4;-1:-1:-1::0;;;;;28949:15:0::1;:4;;28954:1;28949:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;28949:7:0::1;-1:-1:-1::0;;;;;28949:15:0::1;;28941:54;;;::::0;;-1:-1:-1;;;28941:54:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;28941:54:0;;;;;;;;;;;;;::::1;;29016:53;29044:7;29053:9;29064:4;;29016:53;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29016:27:0::1;::::0;-1:-1:-1;;;29016:53:0:i:1;:::-;29006:63;;29102:9;29088:7;29096:1;29088:10;;;;;;;;;;;;;;:23;;29080:72;;;;-1:-1:-1::0;;;29080:72:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29169:4;-1:-1:-1::0;;;;;29163:19:0::1;;29190:7;29198:1;29190:10;;;;;;;;;;;;;;29163:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29163:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29163:40:0;;;;;29227:4;-1:-1:-1::0;;;;;29221:20:0::1;;29242:49;29265:7;29274:4;;29279:1;29274:7;;;;;;29242:49;29293:7;29301:1;29293:10;;;;;;;;;;;;;;29221:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;29221:83:0::1;-1:-1:-1::0;;;;;29221:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29221:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29221:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;29221:83:0;29214:91:::1;;;;29316:24;29322:7;29331:4;;29316:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29337:2:0;;-1:-1:-1;29316:5:0::1;::::0;-1:-1:-1;;29316:24:0:i:1;:::-;29403:7;29411:1;29403:10;;;;;;;;;;;;;;29391:9;:22;29387:94;;;29415:66;29446:10;29470:7;29478:1;29470:10;;;;;;;;;;;;;;29458:9;:22;29415:30;:66::i;1352:361::-:0;1547:45;;;-1:-1:-1;;;;;1547:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1547:45:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1536:57:0;;;;1501:12;;1515:17;;1536:10;;;;1547:45;1536:57;;;25:18:-1;1536: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;;;1536: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;;1500:93:0;;;;1612:7;:57;;;;-1:-1:-1;1624:11:0;;:16;;:44;;;1655:4;1644:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1644:24:0;1624:44;1604:101;;;;;-1:-1:-1;;;1604:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;1352:361;;;;;:::o;2131:195::-;2239:12;;;2201;2239;;;;;;;;;-1:-1:-1;;;;;2218:7:0;;;2232:5;;2218: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;;;2218: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;;2200:52:0;;;2271:7;2263:55;;;;-1:-1:-1;;;2263:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2131:195;;;:::o;12308:513::-;12401:14;12447:1;12436:8;:12;12428:66;;;;-1:-1:-1;;;12428:66:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12525:1;12513:9;:13;:31;;;;;12543:1;12530:10;:14;12513:31;12505:82;;;;-1:-1:-1;;;12505:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12598:20;12621:17;:8;12634:3;12621:17;:12;:17;:::i;:::-;12598:40;-1:-1:-1;12649:14:0;12666:31;12598:40;12686:10;12666:31;:19;:31;:::i;:::-;12649:48;-1:-1:-1;12708:16:0;12727:40;12751:15;12727:19;:9;12741:4;12727:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;12708:59;;12802:11;12790:9;:23;;;;;;;12308:513;-1:-1:-1;;;;;;;12308:513:0:o;13492:509::-;13593:21;13650:1;13635:4;:11;:16;;13627:57;;;;;-1:-1:-1;;;13627:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;13716:4;:11;13705:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;13705:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;13705:23:0;;13695:33;;13752:8;13739:7;13747:1;13739:10;;;;;;;;;;;;;:21;;;;;13776:6;13771:223;13802:1;13788:4;:11;:15;13784:1;:19;13771:223;;;13826:14;13842:15;13861:42;13873:7;13882:4;13887:1;13882:7;;;;;;;;;;;;;;13891:4;13896:1;13900;13896:5;13891:11;;;;;;;;;;;;;;13861;:42::i;:::-;13825:78;;;;13935:47;13948:7;13956:1;13948:10;;;;;;;;;;;;;;13960:9;13971:10;13935:12;:47::i;:::-;13918:7;13926:1;13930;13926:5;13918:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;13805:3:0;;13771:223;;;;13492:509;;;;;:::o;10788:478::-;10877:12;10903:14;10919;10937:26;10948:6;10956;10937:10;:26::i;:::-;11101:32;;;-1:-1:-1;;11101:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;11101:32:0;;;;;11091:43;;;;;;-1:-1:-1;;;;;;11004:251:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11004:251:0;;;;;;;10994:262;;;;;;;;;10788:478;-1:-1:-1;;;;;10788:478:0:o;1721:402::-;1946:51;;;-1:-1:-1;;;;;1946:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1946:51:0;;;;;;;25:18:-1;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;1935:63:0;;;;1900:12;;1914:17;;1935:10;;;;1946:51;1935:63;;;25:18:-1;1935: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;;;1935: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;;1899:99:0;;;;2017:7;:57;;;;-1:-1:-1;2029:11:0;;:16;;:44;;;2060:4;2049:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2049:24:0;2029:44;2009:106;;;;-1:-1:-1;;;2009:106:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1721:402;;;;;;:::o;23827:727::-;23934:6;23929:618;23960:1;23946:4;:11;:15;23942:1;:19;23929:618;;;23984:13;23999:14;24018:4;24023:1;24018:7;;;;;;;;;;;;;;24027:4;24032:1;24036;24032:5;24027:11;;;;;;;;;;;;;;23983:56;;;;24055:14;24074:40;24100:5;24107:6;24074:25;:40::i;:::-;24054:60;;;24129:14;24146:7;24154:1;24158;24154:5;24146:14;;;;;;;;;;;;;;24129:31;;24176:15;24193;24221:6;-1:-1:-1;;;;;24212:15:0;:5;-1:-1:-1;;;;;24212:15:0;;:61;;24254:9;24270:1;24212:61;;;24236:1;24240:9;24212:61;24175:98;;;;24288:10;24319:1;24305:4;:11;:15;24301:1;:19;:80;;24378:3;24301:80;;;24323:52;24346:7;24355:6;24363:4;24368:1;24372;24368:5;24363:11;;;;;;;;;;;;;;24323:22;:52::i;:::-;24288:93;;24409:46;24432:7;24441:5;24448:6;24409:22;:46::i;:::-;-1:-1:-1;;;;;24396:65:0;;24480:10;24492;24504:2;24518:1;24508:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;24508:12:0;87:42:-1;143:17;;-1:-1;24508:12:0;;24396:139;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24396:139:0;-1:-1:-1;;;;;24396:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;24396:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24396:139:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;23963:3:0;;;;;-1:-1:-1;23929:618:0;;-1:-1:-1;;;;;;;;23929:618:0;;;23827:727;;;:::o;14082:530::-;14183:21;14240:1;14225:4;:11;:16;;14217:57;;;;;-1:-1:-1;;;14217:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14306:4;:11;14295:23;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14295:23:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14295:23:0;;14285:33;;14359:9;14329:7;14354:1;14337:7;:14;:18;14329:27;;;;;;;;;;;;;;;;;:39;14393:11;;-1:-1:-1;;14393:15:0;14379:226;14410:5;;14379:226;;14438:14;14454:15;14473:42;14485:7;14494:4;14503:1;14499;:5;14494:11;;;;;;;;;;;;;;14507:4;14512:1;14507:7;;;;;;;14473:42;14437:78;;;;14547:46;14559:7;14567:1;14559:10;;;;;;;;;;;;;;14571:9;14582:10;14547:11;:46::i;:::-;14530:7;14542:1;14538;:5;14530:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;14417:3:0;14379:226;;29636:1202;29749:6;29744:1087;29775:1;29761:4;:11;:15;29757:1;:19;29744:1087;;;29799:13;29814:14;29833:4;29838:1;29833:7;;;;;;;;;;;;;;29842:4;29847:1;29851;29847:5;29842:11;;;;;;;;;;;;;;29798:56;;;;29870:14;29889:40;29915:5;29922:6;29889:25;:40::i;:::-;29869:60;;;29944:17;29977:46;30000:7;30009:5;30016:6;29977:22;:46::i;:::-;29944:80;;30039:16;30070:17;30158:13;30173;30191:4;-1:-1:-1;;;;;30191:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30191:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;30191:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;30191:18:0;;;;;;;-1:-1:-1;;;;;30157:52:0;;;;-1:-1:-1;30157:52:0;;-1:-1:-1;30225:17:0;;-1:-1:-1;;;;;30266:15:0;;;;;;;:61;;30308:8;30318;30266:61;;;30285:8;30295;30266:61;30224:103;;;;30356:56;30399:12;30363:5;-1:-1:-1;;;;;30356:23:0;;30388:4;30356:38;;;;;;;;;;;;;-1:-1:-1;;;;;30356:38:0;-1:-1:-1;;;;;30356:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;30356:56:0;30342:70;;30442:69;30470:11;30483:12;30497:13;30442:27;:69::i;:::-;30427:84;;29744:1087;;;;30542:15;30559;30587:6;-1:-1:-1;;;;;30578:15:0;:5;-1:-1:-1;;;;;30578:15:0;;:67;;30623:12;30642:1;30578:67;;;30602:1;30606:12;30578:67;30541:104;;;;30660:10;30691:1;30677:4;:11;:15;30673:1;:19;:80;;30750:3;30673:80;;;30695:52;30718:7;30727:6;30735:4;30740:1;30744;30740:5;30735:11;;;;;;;30695:52;30806:12;;;30816:1;30806:12;;;;;;;;;;-1:-1:-1;;;30768:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;30768:51:0;;;;;;;;;;;;;;;;;;;;;;30660:93;;-1:-1:-1;30768:9:0;;;;;;30778:10;;30790;;30660:93;;30806:12;;30768:51;;;;;;;;30806:12;;30768:51;;;;30806: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;30768:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;30768:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;29778:3:0;;;;;-1:-1:-1;29744:1087:0;;-1:-1:-1;;;;;;;;;;29744:1087:0;9902:129;9986:5;;;9981:16;;;;9973:50;;;;;-1:-1:-1;;;9973:50:0;;;;;;;;;;;;-1:-1:-1;;;9973:50:0;;;;;;;;;;;;;;12942:468;13035:13;13081:1;13069:9;:13;13061:68;;;;-1:-1:-1;;;13061:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13160:1;13148:9;:13;:31;;;;;13178:1;13165:10;:14;13148:31;13140:82;;;;-1:-1:-1;;;13140:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13233:14;13250:34;13279:4;13250:24;:9;13264;13250:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;13233:51;-1:-1:-1;13295:16:0;13314:34;13344:3;13314:25;:10;13329:9;13314:25;:14;:25;:::i;:34::-;13295:53;;13370:32;13400:1;13383:11;13371:9;:23;;;;;;;13370:32;:29;:32;:::i;:::-;13359:43;12942:468;-1:-1:-1;;;;;;12942:468:0:o;11869:317::-;11951:12;11994:1;11984:7;:11;11976:59;;;;-1:-1:-1;;;11976:59:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12065:1;12054:8;:12;:28;;;;;12081:1;12070:8;:12;12054:28;12046:79;;;;-1:-1:-1;;;12046:79:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12170:8;12146:21;:7;12158:8;12146:21;:11;:21;:::i;:::-;:32;;;;;;;11869:317;-1:-1:-1;;;;11869:317:0:o;10351:345::-;10426:14;10442;10487:6;-1:-1:-1;;;;;10477:16:0;:6;-1:-1:-1;;;;;10477:16:0;;;10469:64;;;;-1:-1:-1;;;10469:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10572:6;-1:-1:-1;;;;;10563:15:0;:6;-1:-1:-1;;;;;10563:15:0;;:53;;10601:6;10609;10563:53;;;10582:6;10590;10563:53;10544:72;;-1:-1:-1;10544:72:0;-1:-1:-1;;;;;;10635:20:0;;10627:61;;;;;-1:-1:-1;;;10627:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10351:345;;;;;:::o;16204:1374::-;16517:48;;;-1:-1:-1;;;16517:48:0;;-1:-1:-1;;;;;16517:48:0;;;;;;;;;;;;;;;;16422:12;;;;;;16533:7;16517:32;;;;;;:48;;;;;;;;;;;;;;;:32;:48;;;2:2:-1;;;;27:1;24;17:12;2:2;16517:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16517:48:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;16517:48:0;-1:-1:-1;;;;;16517:62:0;;16513:146;;;16596:51;;;-1:-1:-1;;;16596:51:0;;-1:-1:-1;;;;;16596:51:0;;;;;;;;;;;;;;;;16612:7;16596:35;;;;;;:51;;;;;;;;;;;;;;;-1:-1:-1;16596:35:0;:51;;;2:2:-1;;;;27:1;24;17:12;2:2;16596:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16596:51:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;16513:146:0;16670:13;16685;16702:51;16729:7;16738:6;16746;16702:26;:51::i;:::-;16669:84;;;;16768:8;16780:1;16768:13;:30;;;;-1:-1:-1;16785:13:0;;16768:30;16764:807;;;16837:14;;-1:-1:-1;16853:14:0;;-1:-1:-1;16764:807:0;;;16901:19;16923:56;16944:14;16960:8;16970;16923:20;:56::i;:::-;16901:78;;17016:14;16998;:32;16994:566;;17077:10;17059:14;:28;;17051:76;;;;-1:-1:-1;;;17051:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17168:14;;-1:-1:-1;17184:14:0;-1:-1:-1;17184:14:0;16994:566;;;17240:19;17262:56;17283:14;17299:8;17309;17262:20;:56::i;:::-;17240:78;;17362:14;17344;:32;;17337:40;;;;17422:10;17404:14;:28;;17396:76;;;;-1:-1:-1;;;17396:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17513:14;-1:-1:-1;17529:14:0;;-1:-1:-1;16994:566:0;16764:807;;16204:1374;;;;;;;;;;;:::o;10039:142::-;10091:6;10118;;;:30;;-1:-1:-1;;10133:5:0;;;10147:1;10142;10133:5;10142:1;10128:15;;;;;:20;10118:30;10110:63;;;;;-1:-1:-1;;;10110:63:0;;;;;;;;;;;;-1:-1:-1;;;10110:63:0;;;;;;;;;;;;;;9766:128;9850:5;;;9845:16;;;;9837:49;;;;;-1:-1:-1;;;9837:49:0;;;;;;;;;;;;-1:-1:-1;;;9837:49:0;;;;;;;;;;;;;;11324:432;11417:13;11432;11459:14;11478:26;11489:6;11497;11478:10;:26::i;:::-;11458:46;;;11515:32;11523:7;11532:6;11540;11515:7;:32::i;:::-;;11559:13;11574;11605:32;11613:7;11622:6;11630;11605:7;:32::i;:::-;-1:-1:-1;;;;;11592:58:0;;:60;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;11592:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11592:60:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;11592:60:0;;;;;;;-1:-1:-1;;;;;11558:94:0;;;;-1:-1:-1;11558:94:0;;-1:-1:-1;;;;;;11686:16:0;;;;;;;:62;;11729:8;11739;11686:62;;;11706:8;11716;11686:62;11663:85;;;;-1:-1:-1;11324:432:0;-1:-1:-1;;;;;;;11324:432:0:o

Swarm Source

ipfs://8d64c255186fe1daa3037b737254d8578dcec7cf7bd0dcfeea1249bfb7c5c30c
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
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.