Contract 0x16327e3fbdaca3bcf7e38f5af2599d2ddc33ae52 4

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x5d2b4726bd2653fe29ce67b9e9cfd527491b60d5c72ae7c9bb7beb2eaa806b19Swap Exact Token...200497792021-10-25 11:07:5810 secs ago0x148c8770104a30bab65af898957421236b81d77b IN  SpiritSwap: Router0 FTM0.034716480823
0x5e37cf8bb9b71fe8979d736bf4919d906bcd1882bea086837106c53e39783d11Remove Liquidity...200497772021-10-25 11:07:5513 secs ago0x86e9ec2597858ea620a2a2722673d22c80b72a20 IN  SpiritSwap: Router0 FTM0.040451924143
0xf1c4e4772231db34cd02ab0bdc1714d3349f21fdfe3eee721f0a76e84f0eb904Add Liquidity ET...200497702021-10-25 11:07:4721 secs ago0x4827599539a461c88a1d33a8b741436d964c42ec IN  SpiritSwap: Router2.610608681909485 FTM0.048589173024
0x3077a6967343d85a0ba263ad9b09252833addff5d72c04c169a54c116d1ce480Swap Exact Token...200497422021-10-25 11:07:1553 secs ago0x0825602e9d177b51af7d79acbdc68a746bc41ce4 IN  SpiritSwap: Router0 FTM0.029302667512
0x0e73ff581466fb8683b24793208283779f2a659682da174ee5359502decfc8e8Swap Exact ETH F...200497392021-10-25 11:07:1256 secs ago0x9d945d909ca91937d19563e30bb4dac12c860189 IN  SpiritSwap: Router848.867022382371176 FTM0.316628
0x03a55218d3657066a042f6eb80cad678008ed83669d37071638603d97f4d5961Add Liquidity ET...200497362021-10-25 11:07:1058 secs ago0x1915c04bcf21ab73c9e05720aeefbada4e482bff IN  SpiritSwap: Router194.063242352264108 FTM0.039203089991
0xb1b14539e023441e2eaeaef5164251feece03f68e7576971f2e81e38d50bb07dSwap Exact ETH F...200497262021-10-25 11:07:011 min ago0x8988b705bce92103d4bf995ba53f6b7589a48be7 IN  SpiritSwap: Router460 FTM0.03446221174
0xe8add025b3021481a60dea982a8e05d34adc2d779909b54374c397f575843625Swap Exact ETH F...200497252021-10-25 11:07:001 min ago0xb09a8e8a223487e3710c23aed526201951e192b6 IN  SpiritSwap: Router3.5 FTM0.049895338201
0xc6aed7b435d208a884eab202cab68158e9afdc83bc07629a840dcbd842966dd3Swap Exact Token...200497172021-10-25 11:06:521 min ago0x4534fa07a93ab9028e10b6e4c676e0e35ed26e6a IN  SpiritSwap: Router0 FTM0.031585957621
0x7b9908763beeb45cdf637e5fc01882ec020fbd1a64920928c70ccd9dc56dea59Swap Exact ETH F...200497132021-10-25 11:06:491 min ago0x9d945d909ca91937d19563e30bb4dac12c860189 IN  SpiritSwap: Router717.36 FTM0.316628
0xb950c80907f51f177d9a098aba89a29089dcda770e3b80c2b280a37e9b1f1c51Swap Exact ETH F...200496942021-10-25 11:06:331 min ago0x9013bdd406e6ea24305c2559e043679923095b66 IN  SpiritSwap: Router0.315635468 FTM0.047359311739
0x0e94aeb4fd382f7427490049b1fddd4194fd67291625dc420274e24290280898Swap Exact Token...200496902021-10-25 11:06:301 min ago0x57bf1c62bbf4ec885a65617349138a06fb72b2e8 IN  SpiritSwap: Router0 FTM0.051384430336
0x22faa24b0baecce836fb75310a1d74a0abe22726ba31ce41e68d2e1d34c24f63Swap Exact ETH F...200496902021-10-25 11:06:301 min ago0xb38c1a1225dffe7b4afc4fe0b9055d7726c6a9f2 IN  SpiritSwap: Router35 FTM0.034125494519
0x3169fb55c7132cca5e4349545f15b0f8c742e40dc7acfa16e4ce7c746995f447Swap Exact ETH F...200496502021-10-25 11:05:552 mins ago0x9d945d909ca91937d19563e30bb4dac12c860189 IN  SpiritSwap: Router995.190000000000065 FTM0.316617
0x38b5882ac81b164c462a6c82ec967c4972914242c26e64dab649ff714cab4b96Swap Exact ETH F...200496372021-10-25 11:05:442 mins ago0x148c8770104a30bab65af898957421236b81d77b IN  SpiritSwap: Router20 FTM0.034147480901
0x1f9542656fc585663ec1c1456db2f3f86b79826ba69a47d6b7c6a79d299fbfdeSwap Exact ETH F...200496312021-10-25 11:05:392 mins ago0x9d945d909ca91937d19563e30bb4dac12c860189 IN  SpiritSwap: Router629.649999999999934 FTM0.316628
0x6537bc535d856605433bdad999e459816ed9d08d6612d5621e42695d29335647Swap Exact ETH F...200496242021-10-25 11:05:342 mins ago0xc9043e76dd81194f663abe55d2762e363ff4ccc1 IN  SpiritSwap: Router0.1 FTM0.011795065049
0xd214376a9b22106b204da7f0e75b62981f1ee4c3473ddd34903f24b34adb15fdSwap Exact Token...200496122021-10-25 11:05:242 mins ago0x225f1fd720f4a4d3ffef79b264271c81cf0ab9ff IN  SpiritSwap: Router0 FTM0.061348768155
0x6ae7769bfb54f25a7d140bfe4adcd1f3808e46c5194181fc6264e80db3742332Swap Exact Token...200496032021-10-25 11:05:172 mins ago0x9f42e28d1803909de59bc980ad16b12e7c1df803 IN  SpiritSwap: Router0 FTM0.041491530458
0x8e64c1be0d86982828b41727dc0da0b892a2c0688f836e64f2e4ca0fbaa55a40Swap Exact ETH F...200496002021-10-25 11:05:152 mins ago0x8bf2744d55c1b75ee3d3d726ec227b347ffc6ec7 IN  SpiritSwap: Router1,400.577 FTM0.049542586558
0x50ff583bd1de56063b81d1983066209febb4ba46b7d63713d7bbb89988a10b2eSwap Exact Token...200495962021-10-25 11:05:122 mins ago0x148c8770104a30bab65af898957421236b81d77b IN  SpiritSwap: Router0 FTM0.040669683893
0x09e27ee23ed8bef9cd456d3b4def78c251bdf532f14f68e0e16c08f3a8f9f563Swap Exact Token...200495912021-10-25 11:05:083 mins ago0x819aada8ce4c4d73d8f2a118ef420ea3c96c88df IN  SpiritSwap: Router0 FTM0.032852837691
0xd86e172f406b0b29c9f0c4e78b5fd64d40852f780863f8735f974980ef6a878fSwap Exact Token...200495772021-10-25 11:04:573 mins ago0x63c9bfae4317b14f758355d86261da83c884d610 IN  SpiritSwap: Router0 FTM0.029844696292
0xf9458ce92cd62b4570ed0543ce502b98f2d7e1b14e009da6497a7dd101ec4014Swap Exact Token...200495652021-10-25 11:04:483 mins ago0x225f1fd720f4a4d3ffef79b264271c81cf0ab9ff IN  SpiritSwap: Router0 FTM0.040259134769
0x12742caa9a797ff3a2a29c0e378e46d05e4cb76d9b711f98527a037ac6d25bcbSwap Exact ETH F...200495642021-10-25 11:04:473 mins ago0x991b92d36076a0354a2aa3074f2d3c09b9b79d6f IN  SpiritSwap: Router676 FTM0.118523448579
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x08aabbbf6eb0bfb1c94bffbe24f3824d559bcc88111483f84237f977fb7126c220049782- SpiritSwap: Router0xfd362c8575ddae981a462611f0f24b74740003ea49.556120851719924391 FTM
0x08aabbbf6eb0bfb1c94bffbe24f3824d559bcc88111483f84237f977fb7126c220049782- Fantom Finance: Wrapped Fantom Token SpiritSwap: Router49.556120851719924391 FTM
0x5d2b4726bd2653fe29ce67b9e9cfd527491b60d5c72ae7c9bb7beb2eaa806b19200497792021-10-25 11:07:5810 secs ago SpiritSwap: Router0x148c8770104a30bab65af898957421236b81d77b151.529300350133794523 FTM
0x5d2b4726bd2653fe29ce67b9e9cfd527491b60d5c72ae7c9bb7beb2eaa806b19200497792021-10-25 11:07:5810 secs ago Fantom Finance: Wrapped Fantom Token SpiritSwap: Router151.529300350133794523 FTM
0xf1c4e4772231db34cd02ab0bdc1714d3349f21fdfe3eee721f0a76e84f0eb904200497702021-10-25 11:07:4721 secs ago SpiritSwap: Router0x4827599539a461c88a1d33a8b741436d964c42ec0.000005465226565965 FTM
0xf1c4e4772231db34cd02ab0bdc1714d3349f21fdfe3eee721f0a76e84f0eb904200497702021-10-25 11:07:4721 secs ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token2.610603216682919116 FTM
0xf1c4e4772231db34cd02ab0bdc1714d3349f21fdfe3eee721f0a76e84f0eb904200497702021-10-25 11:07:4721 secs ago 0x4827599539a461c88a1d33a8b741436d964c42ec SpiritSwap: Router2.610608681909485081 FTM
0x3077a6967343d85a0ba263ad9b09252833addff5d72c04c169a54c116d1ce480200497422021-10-25 11:07:1553 secs ago SpiritSwap: Router0x0825602e9d177b51af7d79acbdc68a746bc41ce4233.548634332515724478 FTM
0x3077a6967343d85a0ba263ad9b09252833addff5d72c04c169a54c116d1ce480200497422021-10-25 11:07:1553 secs ago Fantom Finance: Wrapped Fantom Token SpiritSwap: Router233.548634332515724478 FTM
0x0e73ff581466fb8683b24793208283779f2a659682da174ee5359502decfc8e8200497392021-10-25 11:07:1256 secs ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token848.867022382371176448 FTM
0x0e73ff581466fb8683b24793208283779f2a659682da174ee5359502decfc8e8200497392021-10-25 11:07:1256 secs ago 0x9d945d909ca91937d19563e30bb4dac12c860189 SpiritSwap: Router848.867022382371176448 FTM
0x03a55218d3657066a042f6eb80cad678008ed83669d37071638603d97f4d5961200497362021-10-25 11:07:1058 secs ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token194.063242352264108375 FTM
0x03a55218d3657066a042f6eb80cad678008ed83669d37071638603d97f4d5961200497362021-10-25 11:07:1058 secs ago 0x1915c04bcf21ab73c9e05720aeefbada4e482bff SpiritSwap: Router194.063242352264108375 FTM
0xb1b14539e023441e2eaeaef5164251feece03f68e7576971f2e81e38d50bb07d200497262021-10-25 11:07:011 min ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token460 FTM
0xb1b14539e023441e2eaeaef5164251feece03f68e7576971f2e81e38d50bb07d200497262021-10-25 11:07:011 min ago 0x8988b705bce92103d4bf995ba53f6b7589a48be7 SpiritSwap: Router460 FTM
0xe8add025b3021481a60dea982a8e05d34adc2d779909b54374c397f575843625200497252021-10-25 11:07:001 min ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token3.5 FTM
0xe8add025b3021481a60dea982a8e05d34adc2d779909b54374c397f575843625200497252021-10-25 11:07:001 min ago 0xb09a8e8a223487e3710c23aed526201951e192b6 SpiritSwap: Router3.5 FTM
0x7b9908763beeb45cdf637e5fc01882ec020fbd1a64920928c70ccd9dc56dea59200497132021-10-25 11:06:491 min ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token717.36 FTM
0x7b9908763beeb45cdf637e5fc01882ec020fbd1a64920928c70ccd9dc56dea59200497132021-10-25 11:06:491 min ago 0x9d945d909ca91937d19563e30bb4dac12c860189 SpiritSwap: Router717.36 FTM
0xb950c80907f51f177d9a098aba89a29089dcda770e3b80c2b280a37e9b1f1c51200496942021-10-25 11:06:331 min ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token0.315635468 FTM
0xb950c80907f51f177d9a098aba89a29089dcda770e3b80c2b280a37e9b1f1c51200496942021-10-25 11:06:331 min ago 0x9013bdd406e6ea24305c2559e043679923095b66 SpiritSwap: Router0.315635468 FTM
0x22faa24b0baecce836fb75310a1d74a0abe22726ba31ce41e68d2e1d34c24f63200496902021-10-25 11:06:301 min ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token35 FTM
0x22faa24b0baecce836fb75310a1d74a0abe22726ba31ce41e68d2e1d34c24f63200496902021-10-25 11:06:301 min ago 0xb38c1a1225dffe7b4afc4fe0b9055d7726c6a9f2 SpiritSwap: Router35 FTM
0x3169fb55c7132cca5e4349545f15b0f8c742e40dc7acfa16e4ce7c746995f447200496502021-10-25 11:05:552 mins ago SpiritSwap: Router Fantom Finance: Wrapped Fantom Token995.190000000000065536 FTM
0x3169fb55c7132cca5e4349545f15b0f8c742e40dc7acfa16e4ce7c746995f447200496502021-10-25 11:05:552 mins ago 0x9d945d909ca91937d19563e30bb4dac12c860189 SpiritSwap: Router995.190000000000065536 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.