Contract 0x96b244391d98b62d19ae89b1a4dccf0fc56970c7 2

Contract Overview

Beamswap: Router 02
Balance:
0 GLMR

GLMR Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xdad40615f5ffe758a1280d7a36175a0e8ca5fddde0d42c0e9afba90fadb634d7Swap Exact Token...16324382022-08-11 21:39:3625 secs ago0xfa9cd807557a8e4c62d4110418b16d55389dc9f5 IN  Beamswap: Router 020 GLMR0.‍016287908
0x2f591f77b77800755c6a9baf2fac9ad67b83195cb0f1cd84937ff03c317c9fdbAdd Liquidity ET...16324282022-08-11 21:37:302 mins ago0x7b67b9aac0c42b9cf36beb1ea156c857de2898e2 IN  Beamswap: Router 022,590.‍833378268953022 GLMR0.‍016370796
0x576d4943678452eefa026d62be1243e8c9c26f141ed987ecbfea45127eb069d4Swap Exact Token...16324072022-08-11 21:33:186 mins ago0xa32cbca700e55967c15b00d191bdeb2d00470058 IN  Beamswap: Router 020 GLMR0.‍042612755718
0x048aedaa81391660cd92638adc727f4f386f804362af88555f62f2e6f1132e29Swap Exact Token...16323802022-08-11 21:27:4212 mins ago0xf64e4ea924228fd94d727d528a5a519c9d2b278f IN  Beamswap: Router 020 GLMR0.‍0214072635
0xc95cbb59dd13ecf5df06100f3300b8ea00ca393941ef2b33feb845836afe86d7Remove Liquidity...16323182022-08-11 21:14:5425 mins ago0x489d0f060d50d46fc6e87d92b435f4e70e02cf4d IN  Beamswap: Router 020 GLMR0.‍0183756615
0xe8370268aa03988fe4e7484ffb46e9d603db87832e8e2e3a2e528fb03bd6e595Swap Exact Token...16323162022-08-11 21:14:3025 mins ago0x11cc69ac73a83f4b3cb1420f2faf7b09491f1d8e IN  Beamswap: Router 020 GLMR0.‍012569354
0x4e4a34b78702934b3306a7fc19a08f962105b0d10a4f7a04657168a7cd498c98Add Liquidity16322702022-08-11 21:05:1234 mins ago0xf441cd4c5a583e52d494b63196041b89293f47c1 IN  Beamswap: Router 020 GLMR0.‍0172049605
0xf358b61ea0001af4244c974cd06cae9f8e20cbfd158cd0cfa1332891cb6ae826Swap Exact Token...16322382022-08-11 20:58:1841 mins ago0xa32cbca700e55967c15b00d191bdeb2d00470058 IN  Beamswap: Router 020 GLMR0.‍042267725549
0x9be59a81c7363b46d91d05e6bef023ecef9c0c7c65b08771c22589e9f3022d2eAdd Liquidity ET...16322112022-08-11 20:52:4247 mins ago0x489d0f060d50d46fc6e87d92b435f4e70e02cf4d IN  Beamswap: Router 02123.‍496083829285866 GLMR0.‍016379055
0x6d39567ce18beb1002a64a19155946c22937b64573785fa3f0d7ff85b0af8982Swap Exact Token...16322042022-08-11 20:51:1848 mins ago0xf1048b7e1e861153edd122cc10e27bde2b88817d IN  Beamswap: Router 020 GLMR0.‍0115244115
0x8aea519d0bed820725a9c01cd6b71eed3d56a8e542447661752953680edae37aSwap Tokens For ...16321982022-08-11 20:50:0050 mins ago0x3fd3beb3a94caa2e898ef9d948ef68f97b911eb0 IN  Beamswap: Router 020 GLMR0.‍014994204
0x0d51f106ef696f1c8f5201961449059931b9fc9c5fedb853c13fbe2830e1e8f2Swap Exact Token...16321492022-08-11 20:39:301 hr ago0xfaa1eb1865f0e235d5dc7b56139e794a3276311e IN  Beamswap: Router 020 GLMR0.‍011172714
0xe7db2c46cdb34e010424540d4848fede1dc9834d4f49edde51acbbbaf7609e8eAdd Liquidity ET...16321342022-08-11 20:36:181 hr 3 mins ago0x5461d646ddd15732f296e78bba7ced2772417849 IN  Beamswap: Router 0238 GLMR0.‍016184784
0xe454cb156f944660819cfde16300d1a2f9f6c2adb2bf84a2b96aa096c82ff6ecSwap Exact Token...16321292022-08-11 20:35:181 hr 4 mins ago0x5461d646ddd15732f296e78bba7ced2772417849 IN  Beamswap: Router 020 GLMR0.‍0115244115
0x014ca28989f68f92f196d122efc5e74e8da2ce817415c4696a1b91b1f7271802Swap Exact Token...16321152022-08-11 20:32:301 hr 7 mins ago0x0874c4b757c6b636908522132245a71912aedc45 IN  Beamswap: Router 020 GLMR0.‍0123817
0x8e5eeac13eaef2f31de26ef1c14913f85822befe5c7721d3f46cb649de794ae8Swap Tokens For ...16321032022-08-11 20:30:061 hr 9 mins ago0xbe19479be9ec4f78d3da0e92ef640c8d6354f7b1 IN  Beamswap: Router 020 GLMR0.‍02949007
0xdca31b3cd4ad203ecc04196afa59548bafe60aef0b07ec30982427584d0c64b3Add Liquidity ET...16320962022-08-11 20:28:421 hr 11 mins ago0x2f6b10347863d9751f3d5557f1b7fc4966cb56cb IN  Beamswap: Router 0214 GLMR0.‍014816564
0xfd0521f9ad80b79acf8ed7bfeea08d590d3f75338be33fa341a5845c5c293ef1Swap Exact Token...16320922022-08-11 20:27:421 hr 12 mins ago0x2f6b10347863d9751f3d5557f1b7fc4966cb56cb IN  Beamswap: Router 020 GLMR0.‍0115254265
0x94ace07a3dd4022e66b9f53e7f915b0630094e96548ed90cab65e9045152964fSwap Exact ETH F...16320722022-08-11 20:23:241 hr 16 mins ago0xd8c8f8e07f779c34aec474ba1a04e20e792b5c5f IN  Beamswap: Router 028 GLMR0.‍0114103255
0xf31269237706e6ebcf08b8bee699fabc20dfae07f47f76ca94614b36b92b0694Swap Exact Token...16320712022-08-11 20:23:121 hr 16 mins ago0xe1c2bc92190a40af945edee3c54dc74ec644d555 IN  Beamswap: Router 020 GLMR0.‍01152634
0x87515515617dee1125ed6e40475e4734410d9f9835ad6b266a698813efff1721Remove Liquidity...16320652022-08-11 20:22:001 hr 18 mins ago0xe1c2bc92190a40af945edee3c54dc74ec644d555 IN  Beamswap: Router 020 GLMR0.‍015632421
0x2de65c0c0e2b4ac9b814b7cfd7cb2df7856e1fb4d76e3c32e30d3864756b277dSwap Exact ETH F...16320302022-08-11 20:14:421 hr 25 mins ago0x1cba0b01dc6987f755e2023579eda5a3aa71fcdd IN  Beamswap: Router 0220 GLMR0.‍011882402
0xfbadd5b8d4cba3347bf1c7926f550c6ebfe11ae408fb756afaba8832dc0118e7Remove Liquidity...16320152022-08-11 20:11:301 hr 28 mins ago0x23968bebc50fd0b7ae6d22333f797b3c7a926ae7 IN  Beamswap: Router 020 GLMR0.‍018451447575
0x92a7ea5c2873d2e30f22ace7864ae458a7f9bc1dddae65b0ad7ac92711004044Swap Exact Token...16320122022-08-11 20:10:481 hr 29 mins ago0x6b99b14cbed12e1f2b8c70681cce0874e24661ee IN  Beamswap: Router 020 GLMR0.‍0114897375
0xfb3028f10388d23f90539dfbc8e8c9900508adabb12aab31209f68bbd4e42cd8Swap Exact Token...16320112022-08-11 20:10:361 hr 29 mins ago0xd1f4047d537d7e53416a84b872d90ed5751480b1 IN  Beamswap: Router 020 GLMR0.‍00241587
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xdad40615f5ffe758a1280d7a36175a0e8ca5fddde0d42c0e9afba90fadb634d716324382022-08-11 21:39:3625 secs ago Beamswap: Router 020xfa9cd807557a8e4c62d4110418b16d55389dc9f548.‍423478797507086261 GLMR
0xdad40615f5ffe758a1280d7a36175a0e8ca5fddde0d42c0e9afba90fadb634d716324382022-08-11 21:39:3625 secs ago Moonbeam: WGLMR Token Beamswap: Router 0248.‍423478797507086261 GLMR
0x2f591f77b77800755c6a9baf2fac9ad67b83195cb0f1cd84937ff03c317c9fdb16324282022-08-11 21:37:302 mins ago Beamswap: Router 02 Moonbeam: WGLMR Token2,590.‍833378268953022882 GLMR
0x048aedaa81391660cd92638adc727f4f386f804362af88555f62f2e6f1132e2916323802022-08-11 21:27:4212 mins ago Beamswap: Router 020xf64e4ea924228fd94d727d528a5a519c9d2b278f150.‍019928435149520063 GLMR
0x048aedaa81391660cd92638adc727f4f386f804362af88555f62f2e6f1132e2916323802022-08-11 21:27:4212 mins ago Moonbeam: WGLMR Token Beamswap: Router 02150.‍019928435149520063 GLMR
0xe8370268aa03988fe4e7484ffb46e9d603db87832e8e2e3a2e528fb03bd6e59516323162022-08-11 21:14:3025 mins ago Beamswap: Router 020x11cc69ac73a83f4b3cb1420f2faf7b09491f1d8e381.‍267042476519051113 GLMR
0xe8370268aa03988fe4e7484ffb46e9d603db87832e8e2e3a2e528fb03bd6e59516323162022-08-11 21:14:3025 mins ago Moonbeam: WGLMR Token Beamswap: Router 02381.‍267042476519051113 GLMR
0x9be59a81c7363b46d91d05e6bef023ecef9c0c7c65b08771c22589e9f3022d2e16322112022-08-11 20:52:4247 mins ago Beamswap: Router 02 Moonbeam: WGLMR Token123.‍496083829285866236 GLMR
0x6d39567ce18beb1002a64a19155946c22937b64573785fa3f0d7ff85b0af898216322042022-08-11 20:51:1848 mins ago Beamswap: Router 020xf1048b7e1e861153edd122cc10e27bde2b88817d0.‍678784459790167565 GLMR
0x6d39567ce18beb1002a64a19155946c22937b64573785fa3f0d7ff85b0af898216322042022-08-11 20:51:1848 mins ago Moonbeam: WGLMR Token Beamswap: Router 020.‍678784459790167565 GLMR
0x0d51f106ef696f1c8f5201961449059931b9fc9c5fedb853c13fbe2830e1e8f216321492022-08-11 20:39:301 hr ago Beamswap: Router 020xfaa1eb1865f0e235d5dc7b56139e794a3276311e529.‍309462115597344645 GLMR
0x0d51f106ef696f1c8f5201961449059931b9fc9c5fedb853c13fbe2830e1e8f216321492022-08-11 20:39:301 hr ago Moonbeam: WGLMR Token Beamswap: Router 02529.‍309462115597344645 GLMR
0xe7db2c46cdb34e010424540d4848fede1dc9834d4f49edde51acbbbaf7609e8e16321342022-08-11 20:36:181 hr 3 mins ago Beamswap: Router 020x5461d646ddd15732f296e78bba7ced27724178491 wei
0xe7db2c46cdb34e010424540d4848fede1dc9834d4f49edde51acbbbaf7609e8e16321342022-08-11 20:36:181 hr 3 mins ago Beamswap: Router 02 Moonbeam: WGLMR Token37.‍999999999999999999 GLMR
0xe454cb156f944660819cfde16300d1a2f9f6c2adb2bf84a2b96aa096c82ff6ec16321292022-08-11 20:35:181 hr 4 mins ago Beamswap: Router 020x5461d646ddd15732f296e78bba7ced277241784937.‍361012180764927753 GLMR
0xe454cb156f944660819cfde16300d1a2f9f6c2adb2bf84a2b96aa096c82ff6ec16321292022-08-11 20:35:181 hr 4 mins ago Moonbeam: WGLMR Token Beamswap: Router 0237.‍361012180764927753 GLMR
0x014ca28989f68f92f196d122efc5e74e8da2ce817415c4696a1b91b1f727180216321152022-08-11 20:32:301 hr 7 mins ago Beamswap: Router 020x0874c4b757c6b636908522132245a71912aedc450.‍999688894914558016 GLMR
0x014ca28989f68f92f196d122efc5e74e8da2ce817415c4696a1b91b1f727180216321152022-08-11 20:32:301 hr 7 mins ago Moonbeam: WGLMR Token Beamswap: Router 020.‍999688894914558016 GLMR
0xdca31b3cd4ad203ecc04196afa59548bafe60aef0b07ec30982427584d0c64b316320962022-08-11 20:28:421 hr 11 mins ago Beamswap: Router 02 Moonbeam: WGLMR Token14 GLMR
0xfd0521f9ad80b79acf8ed7bfeea08d590d3f75338be33fa341a5845c5c293ef116320922022-08-11 20:27:421 hr 12 mins ago Beamswap: Router 020x2f6b10347863d9751f3d5557f1b7fc4966cb56cb14.‍544912138180587205 GLMR
0xfd0521f9ad80b79acf8ed7bfeea08d590d3f75338be33fa341a5845c5c293ef116320922022-08-11 20:27:421 hr 12 mins ago Moonbeam: WGLMR Token Beamswap: Router 0214.‍544912138180587205 GLMR
0x94ace07a3dd4022e66b9f53e7f915b0630094e96548ed90cab65e9045152964f16320722022-08-11 20:23:241 hr 16 mins ago Beamswap: Router 02 Moonbeam: WGLMR Token8 GLMR
0xf31269237706e6ebcf08b8bee699fabc20dfae07f47f76ca94614b36b92b069416320712022-08-11 20:23:121 hr 16 mins ago Beamswap: Router 020xe1c2bc92190a40af945edee3c54dc74ec644d555110.‍237137664921504263 GLMR
0xf31269237706e6ebcf08b8bee699fabc20dfae07f47f76ca94614b36b92b069416320712022-08-11 20:23:121 hr 16 mins ago Moonbeam: WGLMR Token Beamswap: Router 02110.‍237137664921504263 GLMR
0x2de65c0c0e2b4ac9b814b7cfd7cb2df7856e1fb4d76e3c32e30d3864756b277d16320302022-08-11 20:14:421 hr 25 mins ago Beamswap: Router 02 Moonbeam: WGLMR Token20 GLMR
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BeamSwapRouter

Compiler Version
v0.6.6+commit.6c089d02

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at moonbeam.moonscan.io on 2022-01-16
*/

// Sources flattened with hardhat v2.7.1 https://hardhat.org

// File contracts/uniswapv2/lib/IBeamSwapFactory.sol

pragma solidity >=0.5.0;

interface IBeamSwapFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint256);

    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(uint256) external view returns (address pair);
    function allPairsLength() external view returns (uint256);

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

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


// File contracts/uniswapv2/lib/TransferHelper.sol

// SPDX-License-Identifier: GPL-3.0-or-later

pragma solidity >=0.6.0;

// helper methods for interacting with ERC20 tokens and sending ETH that do not consistently return true/false
library TransferHelper {
    function safeApprove(
        address token,
        address to,
        uint256 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::safeApprove: approve failed'
        );
    }

    function safeTransfer(
        address token,
        address to,
        uint256 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::safeTransfer: transfer failed'
        );
    }

    function safeTransferFrom(
        address token,
        address from,
        address to,
        uint256 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::transferFrom: transferFrom failed'
        );
    }

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


// File contracts/uniswapv2/interfaces/IBeamSwapRouter01.sol

pragma solidity >=0.6.2;

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

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

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


// File contracts/uniswapv2/interfaces/IBeamSwapRouter02.sol

pragma solidity >=0.6.2;
interface IBeamSwapRouter02 is IBeamSwapRouter01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint256 amountETH);

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


// File contracts/uniswapv2/libraries/IBeamSwapPair.sol

// SPDX-License-Identifier: MIT
pragma solidity >=0.5.0;

interface IBeamSwapPair {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);
    function transfer(address to, uint256 value) external returns (bool);
    function transferFrom(address from, address to, uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);
    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 (uint256);
    function price1CumulativeLast() external view returns (uint256);
    function kLast() external view returns (uint256);

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

    function initialize(address, address) external;
}


// File contracts/uniswapv2/libraries/mathUpdated/SafeMath.sol

pragma solidity =0.6.6;

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

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

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

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


// File contracts/uniswapv2/libraries/BeamSwapLibrary.sol

pragma solidity >=0.5.0;
library BeamSwapLibrary {
    using SafeMath for uint256;

    // 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, 'BeamSwapLibrary: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'BeamSwapLibrary: 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(uint256(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'e31da4209ffcce713230a74b5287fa8ec84797c9e77e1f7cfeccea015cdc97ea' // init code hash
            ))));
    }

    // fetches and sorts the reserves for a pair
    function getReserves(address factory, address tokenA, address tokenB) internal view returns (uint256 reserveA, uint256 reserveB) {
        (address token0,) = sortTokens(tokenA, tokenB);
        pairFor(factory, tokenA, tokenB);
        (uint256 reserve0, uint256 reserve1,) = IBeamSwapPair(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(uint256 amountA, uint256 reserveA, uint256 reserveB) internal pure returns (uint256 amountB) {
        require(amountA > 0, 'BeamSwapLibrary: INSUFFICIENT_AMOUNT');
        require(reserveA > 0 && reserveB > 0, 'BeamSwapLibrary: 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(uint256 amountIn, uint256 reserveIn, uint256 reserveOut) internal pure returns (uint256 amountOut) {
        require(amountIn > 0, 'BeamSwapLibrary: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'BeamSwapLibrary: INSUFFICIENT_LIQUIDITY');
        uint256 amountInWithFee = amountIn.mul(997);
        uint256 numerator = amountInWithFee.mul(reserveOut);
        uint256 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(uint256 amountOut, uint256 reserveIn, uint256 reserveOut) internal pure returns (uint256 amountIn) {
        require(amountOut > 0, 'BeamSwapLibrary: INSUFFICIENT_OUTPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'BeamSwapLibrary: INSUFFICIENT_LIQUIDITY');
        uint256 numerator = reserveIn.mul(amountOut).mul(1000);
        uint256 denominator = reserveOut.sub(amountOut).mul(997);
        amountIn = (numerator / denominator).add(1);
    }

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


// File contracts/uniswapv2/interfaces/IERC20.sol

// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0;

interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint256 value);
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);
    function balanceOf(address owner) external view returns (uint256);
    function allowance(address owner, address spender) external view returns (uint256);

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


// File contracts/uniswapv2/interfaces/IWGLMR.sol

pragma solidity >=0.5.0;

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


// File contracts/uniswapv2/BeamSwapRouter.sol

pragma solidity =0.6.6;
contract BeamSwapRouter is IBeamSwapRouter02 {
    using SafeMath for uint256;

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

    modifier ensure(uint256 deadline) {
        require(deadline >= block.timestamp, 'BeamSwapRouter: 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,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin
    ) internal virtual returns (uint256 amountA, uint256 amountB) {
        // create the pair if it doesn't exist yet
        if (IBeamSwapFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IBeamSwapFactory(factory).createPair(tokenA, tokenB);
        }
        (uint256 reserveA, uint256 reserveB) = BeamSwapLibrary.getReserves(factory, tokenA, tokenB);
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint256 amountBOptimal = BeamSwapLibrary.quote(amountADesired, reserveA, reserveB);
            if (amountBOptimal <= amountBDesired) {
                require(amountBOptimal >= amountBMin, 'BeamSwapRouter: INSUFFICIENT_B_AMOUNT');
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint256 amountAOptimal = BeamSwapLibrary.quote(amountBDesired, reserveB, reserveA);
                assert(amountAOptimal <= amountADesired);
                require(amountAOptimal >= amountAMin, 'BeamSwapRouter: INSUFFICIENT_A_AMOUNT');
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) returns (uint256 amountA, uint256 amountB, uint256 liquidity) {
        (amountA, amountB) = _addLiquidity(tokenA, tokenB, amountADesired, amountBDesired, amountAMin, amountBMin);
        address pair = BeamSwapLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IBeamSwapPair(pair).mint(to);
    }
    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) external virtual override payable ensure(deadline) returns (uint256 amountToken, uint256 amountETH, uint256 liquidity) {
        (amountToken, amountETH) = _addLiquidity(
            token,
            WETH,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountETHMin
        );
        address pair = BeamSwapLibrary.pairFor(factory, token, WETH);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWGLMR(WETH).deposit{value: amountETH}();
        assert(IWGLMR(WETH).transfer(pair, amountETH));
        liquidity = IBeamSwapPair(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,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) public virtual override ensure(deadline) returns (uint256 amountA, uint256 amountB) {
        address pair = BeamSwapLibrary.pairFor(factory, tokenA, tokenB);
        IBeamSwapPair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint256 amount0, uint256 amount1) = IBeamSwapPair(pair).burn(to);
        (address token0,) = BeamSwapLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
        require(amountA >= amountAMin, 'BeamSwapRouter: INSUFFICIENT_A_AMOUNT');
        require(amountB >= amountBMin, 'BeamSwapRouter: INSUFFICIENT_B_AMOUNT');
    }
    function removeLiquidityETH(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) public virtual override ensure(deadline) returns (uint256 amountToken, uint256 amountETH) {
        (amountToken, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWGLMR(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint256 amountA, uint256 amountB) {
        address pair = BeamSwapLibrary.pairFor(factory, tokenA, tokenB);
        uint256 value = approveMax ? uint256(-1) : liquidity;
        IBeamSwapPair(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,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint256 amountToken, uint256 amountETH) {
        address pair = BeamSwapLibrary.pairFor(factory, token, WETH);
        uint256 value = approveMax ? uint256(-1) : liquidity;
        IBeamSwapPair(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,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    ) public virtual override ensure(deadline) returns (uint256 amountETH) {
        (, amountETH) = removeLiquidity(
            token,
            WETH,
            liquidity,
            amountTokenMin,
            amountETHMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, IERC20(token).balanceOf(address(this)));
        IWGLMR(WETH).withdraw(amountETH);
        TransferHelper.safeTransferETH(to, amountETH);
    }
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external virtual override returns (uint256 amountETH) {
        address pair = BeamSwapLibrary.pairFor(factory, token, WETH);
        uint256 value = approveMax ? uint256(-1) : liquidity;
        IBeamSwapPair(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(uint256[] memory amounts, address[] memory path, address _to) internal virtual {
        for (uint256 i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = BeamSwapLibrary.sortTokens(input, output);
            uint256 amountOut = amounts[i + 1];
            (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOut) : (amountOut, uint256(0));
            address to = i < path.length - 2 ? BeamSwapLibrary.pairFor(factory, output, path[i + 2]) : _to;
            IBeamSwapPair(BeamSwapLibrary.pairFor(factory, input, output)).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }
    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) returns (uint256[] memory amounts) {
        amounts = BeamSwapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BeamSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BeamSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) returns (uint256[] memory amounts) {
        amounts = BeamSwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'BeamSwapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BeamSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, to);
    }
    function swapExactETHForTokens(uint256 amountOutMin, address[] calldata path, address to, uint256 deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint256[] memory amounts)
    {
        require(path[0] == WETH, 'BeamSwapRouter: INVALID_PATH');
        amounts = BeamSwapLibrary.getAmountsOut(factory, msg.value, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BeamSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWGLMR(WETH).deposit{value: amounts[0]}();
        assert(IWGLMR(WETH).transfer(BeamSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0]));
        _swap(amounts, path, to);
    }
    function swapTokensForExactETH(uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint256[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'BeamSwapRouter: INVALID_PATH');
        amounts = BeamSwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, 'BeamSwapRouter: EXCESSIVE_INPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BeamSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWGLMR(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapExactTokensForETH(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline)
        external
        virtual
        override
        ensure(deadline)
        returns (uint256[] memory amounts)
    {
        require(path[path.length - 1] == WETH, 'BeamSwapRouter: INVALID_PATH');
        amounts = BeamSwapLibrary.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'BeamSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BeamSwapLibrary.pairFor(factory, path[0], path[1]), amounts[0]
        );
        _swap(amounts, path, address(this));
        IWGLMR(WETH).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferETH(to, amounts[amounts.length - 1]);
    }
    function swapETHForExactTokens(uint256 amountOut, address[] calldata path, address to, uint256 deadline)
        external
        virtual
        override
        payable
        ensure(deadline)
        returns (uint256[] memory amounts)
    {
        require(path[0] == WETH, 'BeamSwapRouter: INVALID_PATH');
        amounts = BeamSwapLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, 'BeamSwapRouter: EXCESSIVE_INPUT_AMOUNT');
        IWGLMR(WETH).deposit{value: amounts[0]}();
        assert(IWGLMR(WETH).transfer(BeamSwapLibrary.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 (uint256 i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = BeamSwapLibrary.sortTokens(input, output);
            IBeamSwapPair pair = IBeamSwapPair(BeamSwapLibrary.pairFor(factory, input, output));
            uint256 amountInput;
            uint256 amountOutput;
            { // scope to avoid stack too deep errors
            (uint256 reserve0, uint256 reserve1,) = pair.getReserves();
            (uint256 reserveInput, uint256 reserveOutput) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
            amountInput = IERC20(input).balanceOf(address(pair)).sub(reserveInput);
            amountOutput = BeamSwapLibrary.getAmountOut(amountInput, reserveInput, reserveOutput);
            }
            (uint256 amount0Out, uint256 amount1Out) = input == token0 ? (uint256(0), amountOutput) : (amountOutput, uint256(0));
            address to = i < path.length - 2 ? BeamSwapLibrary.pairFor(factory, output, path[i + 2]) : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) {
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BeamSwapLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'BeamSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    )
        external
        virtual
        override
        payable
        ensure(deadline)
    {
        require(path[0] == WETH, 'BeamSwapRouter: INVALID_PATH');
        uint256 amountIn = msg.value;
        IWGLMR(WETH).deposit{value: amountIn}();
        assert(IWGLMR(WETH).transfer(BeamSwapLibrary.pairFor(factory, path[0], path[1]), amountIn));
        uint256 balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
            'BeamSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT'
        );
    }
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    )
        external
        virtual
        override
        ensure(deadline)
    {
        require(path[path.length - 1] == WETH, 'BeamSwapRouter: INVALID_PATH');
        TransferHelper.safeTransferFrom(
            path[0], msg.sender, BeamSwapLibrary.pairFor(factory, path[0], path[1]), amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint256 amountOut = IERC20(WETH).balanceOf(address(this));
        require(amountOut >= amountOutMin, 'BeamSwapRouter: INSUFFICIENT_OUTPUT_AMOUNT');
        IWGLMR(WETH).withdraw(amountOut);
        TransferHelper.safeTransferETH(to, amountOut);
    }

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

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

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

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

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

Contract ABI

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

60c060405234801561001057600080fd5b5060405162004929380380620049298339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c6147a4620001856000398061019f5280610d3a5280610d755280610e6c528061109c5280611426528061159e52806119655280611a715280611b275280611bf55280611d4d5280611dd5528061201a52806120955280612144528061221052806122b7528061232b52806128425280612ab55280612b0b5280612b3f5280612bb35280612d535280612ea85280612f30525080610f0c5280610fe35280611162528061119b52806112d652806114c6528061157c52806116ec5280611c9a5280611e075280611f6a528061235d52806125b652806127c752806127f05280612820528061298d5280612ae95280612df85280612f62528061384e52806138915280613b745280613cfa5280614164528061422b52806142ab52506147a46000f3fe60806040526004361061018f5760003560e01c80638803dbee116100d6578063c45a01551161007f578063e8e3370011610059578063e8e3370014610ba1578063f305d71914610c21578063fb3bdb4114610c67576101c8565b8063c45a015514610a62578063d06ca61f14610a77578063ded9382a14610b2e576101c8565b8063af2979eb116100b0578063af2979eb1461092c578063b6f9de951461097f578063baa2abde14610a05576101c8565b80638803dbee1461082d578063ad5c4648146108c5578063ad615dec146108f6576101c8565b80634a25d94a11610138578063791ac94711610112578063791ac947146106d95780637ff36ab51461077157806385f8c259146107f7576101c8565b80634a25d94a146105365780635b0d5984146105ce5780635c11d79514610641576101c8565b80631f00ca74116101695780631f00ca74146103695780632195995c1461042057806338ed17391461049e576101c8565b806302751cec146101cd578063054d50d41461023957806318cbafe514610281576101c8565b366101c857336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101c657fe5b005b600080fd5b3480156101d957600080fd5b50610220600480360360c08110156101f057600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610ced565b6040805192835260208301919091528051918290030190f35b34801561024557600080fd5b5061026f6004803603606081101561025c57600080fd5b5080359060208101359060400135610e07565b60408051918252519081900360200190f35b34801561028d57600080fd5b50610319600480360360a08110156102a457600080fd5b8135916020810135918101906060810160408201356401000000008111156102cb57600080fd5b8201836020820111156102dd57600080fd5b803590602001918460208302840111640100000000831117156102ff57600080fd5b91935091506001600160a01b038135169060200135610e1c565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561035557818101518382015260200161033d565b505050509050019250505060405180910390f35b34801561037557600080fd5b506103196004803603604081101561038c57600080fd5b813591908101906040810160208201356401000000008111156103ae57600080fd5b8201836020820111156103c057600080fd5b803590602001918460208302840111640100000000831117156103e257600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955061115b945050505050565b34801561042c57600080fd5b50610220600480360361016081101561044457600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135611191565b3480156104aa57600080fd5b50610319600480360360a08110156104c157600080fd5b8135916020810135918101906060810160408201356401000000008111156104e857600080fd5b8201836020820111156104fa57600080fd5b8035906020019184602083028401116401000000008311171561051c57600080fd5b91935091506001600160a01b03813516906020013561128b565b34801561054257600080fd5b50610319600480360360a081101561055957600080fd5b81359160208101359181019060608101604082013564010000000081111561058057600080fd5b82018360208201111561059257600080fd5b803590602001918460208302840111640100000000831117156105b457600080fd5b91935091506001600160a01b0381351690602001356113d6565b3480156105da57600080fd5b5061026f60048036036101408110156105f257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135611574565b34801561064d57600080fd5b506101c6600480360360a081101561066457600080fd5b81359160208101359181019060608101604082013564010000000081111561068b57600080fd5b82018360208201111561069d57600080fd5b803590602001918460208302840111640100000000831117156106bf57600080fd5b91935091506001600160a01b038135169060200135611682565b3480156106e557600080fd5b506101c6600480360360a08110156106fc57600080fd5b81359160208101359181019060608101604082013564010000000081111561072357600080fd5b82018360208201111561073557600080fd5b8035906020019184602083028401116401000000008311171561075757600080fd5b91935091506001600160a01b038135169060200135611917565b6103196004803603608081101561078757600080fd5b813591908101906040810160208201356401000000008111156107a957600080fd5b8201836020820111156107bb57600080fd5b803590602001918460208302840111640100000000831117156107dd57600080fd5b91935091506001600160a01b038135169060200135611bad565b34801561080357600080fd5b5061026f6004803603606081101561081a57600080fd5b5080359060208101359060400135611f12565b34801561083957600080fd5b50610319600480360360a081101561085057600080fd5b81359160208101359181019060608101604082013564010000000081111561087757600080fd5b82018360208201111561088957600080fd5b803590602001918460208302840111640100000000831117156108ab57600080fd5b91935091506001600160a01b038135169060200135611f1f565b3480156108d157600080fd5b506108da612018565b604080516001600160a01b039092168252519081900360200190f35b34801561090257600080fd5b5061026f6004803603606081101561091957600080fd5b508035906020810135906040013561203c565b34801561093857600080fd5b5061026f600480360360c081101561094f57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612049565b6101c66004803603608081101561099557600080fd5b813591908101906040810160208201356401000000008111156109b757600080fd5b8201836020820111156109c957600080fd5b803590602001918460208302840111640100000000831117156109eb57600080fd5b91935091506001600160a01b0381351690602001356121ca565b348015610a1157600080fd5b50610220600480360360e0811015610a2857600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c00135612568565b348015610a6e57600080fd5b506108da6127c5565b348015610a8357600080fd5b5061031960048036036040811015610a9a57600080fd5b81359190810190604081016020820135640100000000811115610abc57600080fd5b820183602082011115610ace57600080fd5b80359060200191846020830284011164010000000083111715610af057600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295506127e9945050505050565b348015610b3a57600080fd5b506102206004803603610140811015610b5257600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612816565b348015610bad57600080fd5b50610c036004803603610100811015610bc557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e0013561292a565b60408051938452602084019290925282820152519081900360600190f35b610c03600480360360c0811015610c3757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612a66565b61031960048036036080811015610c7d57600080fd5b81359190810190604081016020820135640100000000811115610c9f57600080fd5b820183602082011115610cb157600080fd5b80359060200191846020830284011164010000000083111715610cd357600080fd5b91935091506001600160a01b038135169060200135612d0b565b6000808242811015610d34576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b610d63897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a612568565b9093509150610d7389868561309f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610dd957600080fd5b505af1158015610ded573d6000803e3d6000fd5b50505050610dfb8583613221565b50965096945050505050565b6000610e14848484613319565b949350505050565b60608142811015610e62576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110610e9c57fe5b905060200201356001600160a01b03166001600160a01b031614610f07576040805162461bcd60e51b815260206004820152601c60248201527f4265616d53776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b610f657f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061340992505050565b91508682600184510381518110610f7857fe5b60200260200101511015610fbd5760405162461bcd60e51b815260040180806020018281038252602a8152602001806145af602a913960400191505060405180910390fd5b61105b86866000818110610fcd57fe5b905060200201356001600160a01b0316336110417f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061100f57fe5b905060200201356001600160a01b03168b8b600181811061102c57fe5b905060200201356001600160a01b0316613555565b8560008151811061104e57fe5b602002602001015161362d565b61109a8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061379f915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855103815181106110d957fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561111757600080fd5b505af115801561112b573d6000803e3d6000fd5b50505050611150848360018551038151811061114357fe5b6020026020010151613221565b509695505050505050565b60606111887f000000000000000000000000000000000000000000000000000000000000000084846139e5565b90505b92915050565b60008060006111c17f00000000000000000000000000000000000000000000000000000000000000008f8f613555565b90506000876111d0578c6111d4565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561124a57600080fd5b505af115801561125e573d6000803e3d6000fd5b505050506112718f8f8f8f8f8f8f612568565b809450819550505050509b509b9950505050505050505050565b606081428110156112d1576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b61132f7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061340992505050565b9150868260018451038151811061134257fe5b602002602001015110156113875760405162461bcd60e51b815260040180806020018281038252602a8152602001806145af602a913960400191505060405180910390fd5b61139786866000818110610fcd57fe5b6111508287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061379f915050565b6060814281101561141c576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168686600019810181811061145657fe5b905060200201356001600160a01b03166001600160a01b0316146114c1576040805162461bcd60e51b815260206004820152601c60248201527f4265616d53776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b61151f7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506139e592505050565b9150868260008151811061152f57fe5b60200260200101511115610fbd5760405162461bcd60e51b81526004018080602001828103825260268152602001806146ad6026913960400191505060405180910390fd5b6000806115c27f00000000000000000000000000000000000000000000000000000000000000008d7f0000000000000000000000000000000000000000000000000000000000000000613555565b90506000866115d1578b6115d5565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561164b57600080fd5b505af115801561165f573d6000803e3d6000fd5b505050506116718d8d8d8d8d8d612049565b9d9c50505050505050505050505050565b80428110156116c6576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b61173b858560008181106116d657fe5b905060200201356001600160a01b0316336117357f00000000000000000000000000000000000000000000000000000000000000008989600081811061171857fe5b905060200201356001600160a01b03168a8a600181811061102c57fe5b8a61362d565b60008585600019810181811061174d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b1580156117b257600080fd5b505afa1580156117c6573d6000803e3d6000fd5b505050506040513d60208110156117dc57600080fd5b5051604080516020888102828101820190935288825292935061181e929091899189918291850190849080828437600092019190915250889250613b1d915050565b866118d0828888600019810181811061183357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561189857600080fd5b505afa1580156118ac573d6000803e3d6000fd5b505050506040513d60208110156118c257600080fd5b50519063ffffffff613e4816565b101561190d5760405162461bcd60e51b815260040180806020018281038252602a8152602001806145af602a913960400191505060405180910390fd5b5050505050505050565b804281101561195b576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061199557fe5b905060200201356001600160a01b03166001600160a01b031614611a00576040805162461bcd60e51b815260206004820152601c60248201527f4265616d53776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b611a10858560008181106116d657fe5b611a4e858580806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613b1d915050565b604080516370a0823160e01b815230600482015290516000916001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916370a0823191602480820192602092909190829003018186803b158015611ab857600080fd5b505afa158015611acc573d6000803e3d6000fd5b505050506040513d6020811015611ae257600080fd5b5051905086811015611b255760405162461bcd60e51b815260040180806020018281038252602a8152602001806145af602a913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b8b57600080fd5b505af1158015611b9f573d6000803e3d6000fd5b5050505061190d8482613221565b60608142811015611bf3576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611c2a57fe5b905060200201356001600160a01b03166001600160a01b031614611c95576040805162461bcd60e51b815260206004820152601c60248201527f4265616d53776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b611cf37f00000000000000000000000000000000000000000000000000000000000000003488888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061340992505050565b91508682600184510381518110611d0657fe5b60200260200101511015611d4b5760405162461bcd60e51b815260040180806020018281038252602a8152602001806145af602a913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611d8757fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611dba57600080fd5b505af1158015611dce573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb611e337f00000000000000000000000000000000000000000000000000000000000000008989600081811061171857fe5b84600081518110611e4057fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015611e9757600080fd5b505af1158015611eab573d6000803e3d6000fd5b505050506040513d6020811015611ec157600080fd5b5051611ec957fe5b611f088287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061379f915050565b5095945050505050565b6000610e14848484613ea0565b60608142811015611f65576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b611fc37f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506139e592505050565b91508682600081518110611fd357fe5b602002602001015111156113875760405162461bcd60e51b81526004018080602001828103825260268152602001806146ad6026913960400191505060405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610e14848484613f90565b6000814281101561208f576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b6120be887f00000000000000000000000000000000000000000000000000000000000000008989893089612568565b604080516370a0823160e01b8152306004820152905191945061214292508a9187916001600160a01b038416916370a0823191602480820192602092909190829003018186803b15801561211157600080fd5b505afa158015612125573d6000803e3d6000fd5b505050506040513d602081101561213b57600080fd5b505161309f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156121a857600080fd5b505af11580156121bc573d6000803e3d6000fd5b505050506111508483613221565b804281101561220e576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168585600081811061224557fe5b905060200201356001600160a01b03166001600160a01b0316146122b0576040805162461bcd60e51b815260206004820152601c60248201527f4265616d53776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561231057600080fd5b505af1158015612324573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6123897f00000000000000000000000000000000000000000000000000000000000000008989600081811061171857fe5b836040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b1580156123d957600080fd5b505af11580156123ed573d6000803e3d6000fd5b505050506040513d602081101561240357600080fd5b505161240b57fe5b60008686600019810181811061241d57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561248257600080fd5b505afa158015612496573d6000803e3d6000fd5b505050506040513d60208110156124ac57600080fd5b505160408051602089810282810182019093528982529293506124ee9290918a918a918291850190849080828437600092019190915250899250613b1d915050565b876118d0828989600019810181811061250357fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561189857600080fd5b60008082428110156125af576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b60006125dc7f00000000000000000000000000000000000000000000000000000000000000008c8c613555565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561263757600080fd5b505af115801561264b573d6000803e3d6000fd5b505050506040513d602081101561266157600080fd5b5050604080517f89afcb440000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156126c757600080fd5b505af11580156126db573d6000803e3d6000fd5b505050506040513d60408110156126f157600080fd5b5080516020909101519092509050600061270b8e8e61403c565b509050806001600160a01b03168e6001600160a01b03161461272e578183612731565b82825b90975095508a8710156127755760405162461bcd60e51b815260040180806020018281038252602581526020018061474a6025913960400191505060405180910390fd5b898610156127b45760405162461bcd60e51b815260040180806020018281038252602581526020018061458a6025913960400191505060405180910390fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60606111887f00000000000000000000000000000000000000000000000000000000000000008484613409565b60008060006128667f00000000000000000000000000000000000000000000000000000000000000008e7f0000000000000000000000000000000000000000000000000000000000000000613555565b9050600087612875578c612879565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b1580156128ef57600080fd5b505af1158015612903573d6000803e3d6000fd5b505050506129158e8e8e8e8e8e610ced565b909f909e509c50505050505050505050505050565b60008060008342811015612973576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b6129818c8c8c8c8c8c61411a565b909450925060006129b37f00000000000000000000000000000000000000000000000000000000000000008e8e613555565b90506129c18d33838861362d565b6129cd8c33838761362d565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612a2557600080fd5b505af1158015612a39573d6000803e3d6000fd5b505050506040513d6020811015612a4f57600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612aaf576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b612add8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c61411a565b90945092506000612b2f7f00000000000000000000000000000000000000000000000000000000000000008c7f0000000000000000000000000000000000000000000000000000000000000000613555565b9050612b3d8b33838861362d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612b9857600080fd5b505af1158015612bac573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612c3157600080fd5b505af1158015612c45573d6000803e3d6000fd5b505050506040513d6020811015612c5b57600080fd5b5051612c6357fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b03168152602001915050602060405180830381600087803b158015612cbb57600080fd5b505af1158015612ccf573d6000803e3d6000fd5b505050506040513d6020811015612ce557600080fd5b5051925034841015612cfd57612cfd33853403613221565b505096509650969350505050565b60608142811015612d51576040805162461bcd60e51b8152602060048201526017602482015260008051602061472a833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110612d8857fe5b905060200201356001600160a01b03166001600160a01b031614612df3576040805162461bcd60e51b815260206004820152601c60248201527f4265616d53776170526f757465723a20494e56414c49445f5041544800000000604482015290519081900360640190fd5b612e517f0000000000000000000000000000000000000000000000000000000000000000888888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506139e592505050565b91503482600081518110612e6157fe5b60200260200101511115612ea65760405162461bcd60e51b81526004018080602001828103825260268152602001806146ad6026913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110612ee257fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015612f1557600080fd5b505af1158015612f29573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb612f8e7f00000000000000000000000000000000000000000000000000000000000000008989600081811061171857fe5b84600081518110612f9b57fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b03166001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ff257600080fd5b505af1158015613006573d6000803e3d6000fd5b505050506040513d602081101561301c57600080fd5b505161302457fe5b6130638287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061379f915050565b8160008151811061307057fe5b6020026020010151341115611f0857611f08338360008151811061309057fe5b60200260200101513403613221565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb00000000000000000000000000000000000000000000000000000000178152925182516000946060949389169392918291908083835b6020831061314a5780518252601f19909201916020918201910161312b565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146131ac576040519150601f19603f3d011682016040523d82523d6000602084013e6131b1565b606091505b50915091508180156131df5750805115806131df57508080602001905160208110156131dc57600080fd5b50515b61321a5760405162461bcd60e51b815260040180806020018281038252602d8152602001806146fd602d913960400191505060405180910390fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b6020831061326d5780518252601f19909201916020918201910161324e565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146132cf576040519150601f19603f3d011682016040523d82523d6000602084013e6132d4565b606091505b50509050806133145760405162461bcd60e51b815260040180806020018281038252603481526020018061460a6034913960400191505060405180910390fd5b505050565b60008084116133595760405162461bcd60e51b815260040180806020018281038252602a8152602001806146d3602a913960400191505060405180910390fd5b6000831180156133695750600082115b6133a45760405162461bcd60e51b815260040180806020018281038252602781526020018061463e6027913960400191505060405180910390fd5b60006133b8856103e563ffffffff6143c016565b905060006133cc828563ffffffff6143c016565b905060006133f2836133e6886103e863ffffffff6143c016565b9063ffffffff61442c16565b90508082816133fd57fe5b04979650505050505050565b6060600282511015613462576040805162461bcd60e51b815260206004820152601d60248201527f4265616d537761704c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff8111801561347a57600080fd5b506040519080825280602002602001820160405280156134a4578160200160208202803683370190505b50905082816000815181106134b557fe5b60200260200101818152505060005b600183510381101561354d57600080613507878685815181106134e357fe5b60200260200101518786600101815181106134fa57fe5b6020026020010151614484565b9150915061352984848151811061351a57fe5b60200260200101518383613319565b84846001018151811061353857fe5b602090810291909101015250506001016134c4565b509392505050565b6000806000613564858561403c565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501207fff0000000000000000000000000000000000000000000000000000000000000060688401529a90941b9093166069840152607d8301989098527fe31da4209ffcce713230a74b5287fa8ec84797c9e77e1f7cfeccea015cdc97ea609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106136c75780518252601f1990920191602091820191016136a8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613729576040519150601f19603f3d011682016040523d82523d6000602084013e61372e565b606091505b509150915081801561375c57508051158061375c575080806020019051602081101561375957600080fd5b50515b6137975760405162461bcd60e51b81526004018080602001828103825260318152602001806145d96031913960400191505060405180910390fd5b505050505050565b60005b60018351038110156139df576000808483815181106137bd57fe5b60200260200101518584600101815181106137d457fe5b60200260200101519150915060006137ec838361403c565b509050600087856001018151811061380057fe5b60200260200101519050600080836001600160a01b0316866001600160a01b03161461382e57826000613832565b6000835b91509150600060028a51038810613849578861388a565b61388a7f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061387d57fe5b6020026020010151613555565b90506138b77f00000000000000000000000000000000000000000000000000000000000000008888613555565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156138f4576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b03166001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561396557818101518382015260200161394d565b50505050905090810190601f1680156139925780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b1580156139b457600080fd5b505af11580156139c8573d6000803e3d6000fd5b5050600190990198506137a2975050505050505050565b50505050565b6060600282511015613a3e576040805162461bcd60e51b815260206004820152601d60248201527f4265616d537761704c6962726172793a20494e56414c49445f50415448000000604482015290519081900360640190fd5b815167ffffffffffffffff81118015613a5657600080fd5b50604051908082528060200260200182016040528015613a80578160200160208202803683370190505b5090508281600183510381518110613a9457fe5b60209081029190910101528151600019015b801561354d57600080613ad687866001860381518110613ac257fe5b60200260200101518786815181106134fa57fe5b91509150613af8848481518110613ae957fe5b60200260200101518383613ea0565b846001850381518110613b0757fe5b6020908102919091010152505060001901613aa6565b60005b600183510381101561331457600080848381518110613b3b57fe5b6020026020010151858460010181518110613b5257fe5b6020026020010151915091506000613b6a838361403c565b5090506000613b9a7f00000000000000000000000000000000000000000000000000000000000000008585613555565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613bdb57600080fd5b505afa158015613bef573d6000803e3d6000fd5b505050506040513d6060811015613c0557600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506000806001600160a01b038a811690891614613c42578284613c45565b83835b91509150613ca3828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b03166001600160a01b0316815260200191505060206040518083038186803b15801561189857600080fd5b9550613cb0868383613319565b945050505050600080856001600160a01b0316886001600160a01b031614613cda57826000613cde565b6000835b91509150600060028c51038a10613cf5578a613d29565b613d297f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061387d57fe5b60408051600080825260208201928390527f022c0d9f00000000000000000000000000000000000000000000000000000000835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613dcc578181015183820152602001613db4565b50505050905090810190601f168015613df95780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613e1b57600080fd5b505af1158015613e2f573d6000803e3d6000fd5b50506001909b019a50613b209950505050505050505050565b8082038281111561118b576040805162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f770000000000000000000000604482015290519081900360640190fd5b6000808411613ee05760405162461bcd60e51b815260040180806020018281038252602b81526020018061455f602b913960400191505060405180910390fd5b600083118015613ef05750600082115b613f2b5760405162461bcd60e51b815260040180806020018281038252602781526020018061463e6027913960400191505060405180910390fd5b6000613f4f6103e8613f43868863ffffffff6143c016565b9063ffffffff6143c016565b90506000613f696103e5613f43868963ffffffff613e4816565b9050613f866001828481613f7957fe5b049063ffffffff61442c16565b9695505050505050565b6000808411613fd05760405162461bcd60e51b81526004018080602001828103825260248152602001806146656024913960400191505060405180910390fd5b600083118015613fe05750600082115b61401b5760405162461bcd60e51b815260040180806020018281038252602781526020018061463e6027913960400191505060405180910390fd5b8261402c858463ffffffff6143c016565b8161403357fe5b04949350505050565b600080826001600160a01b0316846001600160a01b031614156140905760405162461bcd60e51b81526004018080602001828103825260248152602001806146896024913960400191505060405180910390fd5b826001600160a01b0316846001600160a01b0316106140b05782846140b3565b83835b90925090506001600160a01b038216614113576040805162461bcd60e51b815260206004820152601d60248201527f4265616d537761704c6962726172793a205a45524f5f41444452455353000000604482015290519081900360640190fd5b9250929050565b604080517fe6a439050000000000000000000000000000000000000000000000000000000081526001600160a01b03888116600483015287811660248301529151600092839283927f00000000000000000000000000000000000000000000000000000000000000009092169163e6a4390591604480820192602092909190829003018186803b1580156141ad57600080fd5b505afa1580156141c1573d6000803e3d6000fd5b505050506040513d60208110156141d757600080fd5b50516001600160a01b031614156142a357604080517fc9c653960000000000000000000000000000000000000000000000000000000081526001600160a01b038a81166004830152898116602483015291517f00000000000000000000000000000000000000000000000000000000000000009092169163c9c65396916044808201926020929091908290030181600087803b15801561427657600080fd5b505af115801561428a573d6000803e3d6000fd5b505050506040513d60208110156142a057600080fd5b50505b6000806142d17f00000000000000000000000000000000000000000000000000000000000000008b8b614484565b915091508160001480156142e3575080155b156142f3578793508692506143b3565b6000614300898484613f90565b905087811161435357858110156143485760405162461bcd60e51b815260040180806020018281038252602581526020018061458a6025913960400191505060405180910390fd5b8894509250826143b1565b6000614360898486613f90565b90508981111561436c57fe5b878110156143ab5760405162461bcd60e51b815260040180806020018281038252602581526020018061474a6025913960400191505060405180910390fd5b94508793505b505b5050965096945050505050565b60008115806143db575050808202828282816143d857fe5b04145b61118b576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b8082018281101561118b576040805162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f77000000000000000000000000604482015290519081900360640190fd5b6000806000614493858561403c565b5090506144a1868686613555565b506000806144b0888888613555565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b1580156144e857600080fd5b505afa1580156144fc573d6000803e3d6000fd5b505050506040513d606081101561451257600080fd5b5080516020909101516dffffffffffffffffffffffffffff91821693501690506001600160a01b038781169084161461454c57808261454f565b81815b9099909850965050505050505056fe4265616d537761704c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e544265616d53776170526f757465723a20494e53554646494349454e545f425f414d4f554e544265616d53776170526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e545472616e7366657248656c7065723a3a7472616e7366657246726f6d3a207472616e7366657246726f6d206661696c65645472616e7366657248656c7065723a3a736166655472616e736665724554483a20455448207472616e73666572206661696c65644265616d537761704c6962726172793a20494e53554646494349454e545f4c49515549444954594265616d537761704c6962726172793a20494e53554646494349454e545f414d4f554e544265616d537761704c6962726172793a204944454e544943414c5f4144445245535345534265616d53776170526f757465723a204558434553534956455f494e5055545f414d4f554e544265616d537761704c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e545472616e7366657248656c7065723a3a736166655472616e736665723a207472616e73666572206661696c65644265616d53776170526f757465723a20455850495245440000000000000000004265616d53776170526f757465723a20494e53554646494349454e545f415f414d4f554e54a2646970667358221220d8f539e12b0e54de34727f5f76a5a5d6f9953e5492a7f70461ec16865b11f7e464736f6c63430006060033000000000000000000000000985bca32293a7a496300a48081947321177a86fd000000000000000000000000acc15dc74880c9944775448304b263d191c6077f

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

000000000000000000000000985bca32293a7a496300a48081947321177a86fd000000000000000000000000acc15dc74880c9944775448304b263d191c6077f

-----Decoded View---------------
Arg [0] : _factory (address): 0x985bca32293a7a496300a48081947321177a86fd
Arg [1] : _WETH (address): 0xacc15dc74880c9944775448304b263d191c6077f

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000985bca32293a7a496300a48081947321177a86fd
Arg [1] : 000000000000000000000000acc15dc74880c9944775448304b263d191c6077f


Deployed ByteCode Sourcemap

17061:18900:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17544:10;-1:-1:-1;;;;;17558:4:0;17544:18;;17537:26;;;;17061:18900;;12:1:-1;9;2:12;21778:692:0;;5:9:-1;2:2;;;27:1;24;17:12;2:2;21778:692:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;21778:692:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;34873:273;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34873:273:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34873:273:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;29096:859;;5:9:-1;2:2;;;27:1;24;17:12;2:2;29096:859:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29096:859:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;29096:859:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29096:859:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29096:859:0;;-1:-1:-1;29096:859:0;-1:-1:-1;;;;;;29096:859: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;29096:859:0;;;;;;;;;;;;;;;;;35700:258;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35700:258:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35700:258:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;35700:258:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35700:258:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35700:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;35700:258:0;;-1:-1:-1;35700:258:0;;-1:-1:-1;;;;;35700:258:0:i;22476:699::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;22476:699:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;22476:699:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;26279:637::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26279:637:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26279:637:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26279:637:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26279:637:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26279:637:0;;-1:-1:-1;26279:637:0;-1:-1:-1;;;;;;26279:637:0;;;;;;;;:::i;28253:837::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;28253:837:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;28253:837:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;28253:837:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;28253:837:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;28253:837:0;;-1:-1:-1;28253:837:0;-1:-1:-1;;;;;;28253:837:0;;;;;;;;:::i;24673:737::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;24673:737:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;24673:737:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32172:724::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32172:724:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32172:724:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32172:724:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32172:724:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32172:724:0;;-1:-1:-1;32172:724:0;-1:-1:-1;;;;;;32172:724:0;;;;;;;;:::i;33769:853::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;33769:853:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;33769:853:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;33769:853:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;33769:853:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;33769:853:0;;-1:-1:-1;33769:853:0;-1:-1:-1;;;;;;33769:853:0;;;;;;;;:::i;27543:704::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;27543:704:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;27543:704:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;27543:704:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;27543:704:0;;-1:-1:-1;27543:704:0;-1:-1:-1;;;;;;27543:704:0;;;;;;;;:::i;35154:272::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35154:272:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;35154:272:0;;;;;;;;;;;;:::i;26922:615::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26922:615:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;26922:615:0;;;;;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;26922:615:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;26922:615:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;26922:615:0;;-1:-1:-1;26922:615:0;-1:-1:-1;;;;;;26922:615:0;;;;;;;;:::i;17196:38::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17196:38:0;;;:::i;:::-;;;;-1:-1:-1;;;;;17196:38:0;;;;;;;;;;;;;;34666:199;;5:9:-1;2:2;;;27:1;24;17:12;2:2;34666:199:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;34666:199:0;;;;;;;;;;;;:::i;23951:716::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23951:716:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23951:716:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;32902:861::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;32902:861:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;32902:861:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;32902:861:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;32902:861:0;;-1:-1:-1;32902:861:0;-1:-1:-1;;;;;;32902:861:0;;;;;;;;:::i;20889:883::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;20889:883:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;20889:883:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17148:41::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;17148:41:0;;;:::i;35434:258::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;35434:258:0;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;35434:258:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;35434:258:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;35434:258:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;35434:258:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;74:27;;;;-1:-1;35434:258:0;;-1:-1:-1;35434:258:0;;-1:-1:-1;;;;;35434:258:0:i;23181:691::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;23181:691:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;23181:691:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19085:760::-;;5:9:-1;2:2;;;27:1;24;17:12;2:2;19085:760:0;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19085:760:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;19851:995;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;-1:-1;;;;;;19851:995:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29961:817::-;;;;;;15:3:-1;10;7:12;4:2;;;32:1;29;22:12;4:2;29961:817:0;;;;;;;;;;;;;;27:11:-1;11:28;;8:2;;;52:1;49;42:12;8:2;29961:817:0;;41:9:-1;34:4;18:14;14:25;11:40;8:2;;;64:1;61;54:12;8:2;29961:817:0;;;;;;101:9:-1;95:2;81:12;77:21;67:8;63:36;60:51;39:11;25:12;22:29;11:108;8:2;;;132:1;129;122:12;8:2;29961:817:0;;-1:-1:-1;29961:817:0;-1:-1:-1;;;;;;29961:817:0;;;;;;;;:::i;21778:692::-;22027:19;22048:17;22008:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;22105:196:::1;22135:5;22155:4;22174:9;22198:14;22227:12;22262:4;22282:8;22105:15;:196::i;:::-;22078:223:::0;;-1:-1:-1;22078:223:0;-1:-1:-1;22312:51:0::1;22340:5:::0;22347:2;22078:223;22312:27:::1;:51::i;:::-;22381:4;-1:-1:-1::0;;;;;22374:21:0::1;;22396:9;22374:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;22374:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;22374:32:0;;;;22417:45;22448:2;22452:9;22417:30;:45::i;:::-;21778:692:::0;;;;;;;;;;:::o;34873:273::-;35035:17;35077:61;35106:8;35116:9;35127:10;35077:28;:61::i;:::-;35070:68;34873:273;-1:-1:-1;;;;34873:273:0:o;29096:859::-;29319:24;29291:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;29394:4:0::1;29369:29;:4:::0;;-1:-1:-1;;29374:15:0;;29369:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;29369:21:0::1;-1:-1:-1::0;;;;;29369:29:0::1;;29361:70;;;::::0;;-1:-1:-1;;;29361:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;29452:54;29482:7;29491:8;29501:4;;29452:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29452:29:0::1;::::0;-1:-1:-1;;;29452:54:0:i:1;:::-;29442:64;;29556:12;29525:7;29550:1;29533:7;:14;:18;29525:27;;;;;;;;;;;;;;:43;;29517:98;;;;-1:-1:-1::0;;;29517:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29626:140;29672:4;;29677:1;29672:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29672:7:0::1;29681:10;29693:50;29717:7;29726:4;;29731:1;29726:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29726:7:0::1;29735:4;;29740:1;29735:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;29735:7:0::1;29693:23;:50::i;:::-;29745:7;29753:1;29745:10;;;;;;;;;;;;;;29626:31;:140::i;:::-;29777:35;29783:7;29792:4;;29777:35;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;29806:4:0::1;::::0;-1:-1:-1;29777:5:0::1;::::0;-1:-1:-1;;29777:35:0:i:1;:::-;29830:4;-1:-1:-1::0;;;;;29823:21:0::1;;29845:7;29870:1;29853:7;:14;:18;29845:27;;;;;;;;;;;;;;29823:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;29823:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;29823:50:0;;;;29884:63;29915:2;29919:7;29944:1;29927:7;:14;:18;29919:27;;;;;;;;;;;;;;29884:30;:63::i;:::-;29096:859:::0;;;;;;;;;:::o;35700:258::-;35847:24;35896:54;35925:7;35934:9;35945:4;35896:28;:54::i;:::-;35889:61;;35700:258;;;;;:::o;22476:699::-;22794:15;22811;22839:12;22854:48;22878:7;22887:6;22895;22854:23;:48::i;:::-;22839:63;;22913:13;22929:10;:36;;22956:9;22929:36;;;-1:-1:-1;;22929:36:0;22976:79;;;-1:-1:-1;;;22976:79:0;;23003:10;22976:79;;;;23023:4;22976:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22913:52;;-1:-1:-1;;;;;;22976:26:0;;;;;:79;;;;;-1:-1:-1;;22976:79:0;;;;;;;;-1:-1:-1;22976:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;22976:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22976:79:0;;;;23087:80;23103:6;23111;23119:9;23130:10;23142;23154:2;23158:8;23087:15;:80::i;:::-;23066:101;;;;;;;;22476:699;;;;;;;;;;;;;;;;:::o;26279:637::-;26512:24;26493:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;26559:54:::1;26589:7;26598:8;26608:4;;26559:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26559:29:0::1;::::0;-1:-1:-1;;;26559:54:0:i:1;:::-;26549:64;;26663:12;26632:7;26657:1;26640:7;:14;:18;26632:27;;;;;;;;;;;;;;:43;;26624:98;;;;-1:-1:-1::0;;;26624:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26733:140;26779:4;;26784:1;26779:7;;;;;;26733:140;26884:24;26890:7;26899:4;;26884:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;26905:2:0;;-1:-1:-1;26884:5:0::1;::::0;-1:-1:-1;;26884:24:0:i:1;28253:837::-:0;28476:24;28448:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;28551:4:0::1;28526:29;:4:::0;;-1:-1:-1;;28531:15:0;;28526:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;28526:21:0::1;-1:-1:-1::0;;;;;28526:29:0::1;;28518:70;;;::::0;;-1:-1:-1;;;28518:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;28609:54;28638:7;28647:9;28658:4;;28609:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28609:28:0::1;::::0;-1:-1:-1;;;28609:54:0:i:1;:::-;28599:64;;28696:11;28682:7;28690:1;28682:10;;;;;;;;;;;;;;:25;;28674:76;;;;-1:-1:-1::0;;;28674:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24673:737:::0;25003:17;25033:12;25048:45;25072:7;25081:5;25088:4;25048:23;:45::i;:::-;25033:60;;25104:13;25120:10;:36;;25147:9;25120:36;;;-1:-1:-1;;25120:36:0;25167:79;;;-1:-1:-1;;;25167:79:0;;25194:10;25167:79;;;;25214:4;25167:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25104:52;;-1:-1:-1;;;;;;25167:26:0;;;;;:79;;;;;-1:-1:-1;;25167:79:0;;;;;;;;-1:-1:-1;25167:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;25167:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25167:79:0;;;;25269:133;25331:5;25338:9;25349:14;25365:12;25379:2;25383:8;25269:47;:133::i;:::-;25257:145;24673:737;-1:-1:-1;;;;;;;;;;;;;24673:737:0:o;32172:724::-;32415:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;32436:138:::1;32482:4;;32487:1;32482:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32482:7:0::1;32491:10;32503:50;32527:7;32536:4;;32541:1;32536:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;32536:7:0::1;32545:4;;32550:1;32545:7;;;;;;32503:50;32555:8;32436:31;:138::i;:::-;32585:21;32616:4:::0;;-1:-1:-1;;32621:15:0;;32616:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32616:21:0::1;-1:-1:-1::0;;;;;32609:39:0::1;;32649:2;32609:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32609:43:0::1;-1:-1:-1::0;;;;;32609:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32609:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32609:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32609:43:0;32663:44:::1;::::0;;32609:43:::1;32663:44:::0;;::::1;::::0;;;;;;;;;;;32609:43;;-1:-1:-1;32663:44:0::1;::::0;;;32698:4;;;;;;32663:44;::::1;::::0;32698:4;;32663:44;32698:4;32663:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;32704:2:0;;-1:-1:-1;32663:34:0::1;::::0;-1:-1:-1;;32663:44:0:i:1;:::-;32806:12:::0;32740:62:::1;32788:13:::0;32747:4;;-1:-1:-1;;32752:15:0;;32747:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32747:21:0::1;-1:-1:-1::0;;;;;32740:39:0::1;;32780:2;32740:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;32740:43:0::1;-1:-1:-1::0;;;;;32740:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;32740:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;32740:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;32740:43:0;;:62:::1;:47;:62;:::i;:::-;:78;;32718:170;;;;-1:-1:-1::0;;;32718:170:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17362:1;32172:724:::0;;;;;;;:::o;33769:853::-;34045:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;34104:4:0::1;34079:29;:4:::0;;-1:-1:-1;;34084:15:0;;34079:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;34079:21:0::1;-1:-1:-1::0;;;;;34079:29:0::1;;34071:70;;;::::0;;-1:-1:-1;;;34071:70:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;34152:138;34198:4;;34203:1;34198:7;;;;;;34152:138;34301:55;34336:4;;34301:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;34350:4:0::1;::::0;-1:-1:-1;34301:34:0::1;::::0;-1:-1:-1;;34301:55:0:i:1;:::-;34387:37;::::0;;-1:-1:-1;;;34387:37:0;;34418:4:::1;34387:37;::::0;::::1;::::0;;;34367:17:::1;::::0;-1:-1:-1;;;;;34394:4:0::1;34387:22;::::0;::::1;::::0;:37;;;;;::::1;::::0;;;;;;;;;:22;:37;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;34387:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34387:37:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;34387:37:0;;-1:-1:-1;34443:25:0;;::::1;;34435:80;;;;-1:-1:-1::0;;;34435:80:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34533:4;-1:-1:-1::0;;;;;34526:21:0::1;;34548:9;34526:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;34526:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;34526:32:0;;;;34569:45;34600:2;34604:9;34569:30;:45::i;27543:704::-:0;27765:24;27737:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;27826:4:::1;-1:-1:-1::0;;;;;27815:15:0::1;:4;;27820:1;27815:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;27815:7:0::1;-1:-1:-1::0;;;;;27815:15:0::1;;27807:56;;;::::0;;-1:-1:-1;;;27807:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;27884:55;27914:7;27923:9;27934:4;;27884:55;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27884:29:0::1;::::0;-1:-1:-1;;;27884:55:0:i:1;:::-;27874:65;;27989:12;27958:7;27983:1;27966:7;:14;:18;27958:27;;;;;;;;;;;;;;:43;;27950:98;;;;-1:-1:-1::0;;;27950:98:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28066:4;-1:-1:-1::0;;;;;28059:20:0::1;;28087:7;28095:1;28087:10;;;;;;;;;;;;;;28059:41;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28059:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28059:41:0;;;;;28125:4;-1:-1:-1::0;;;;;28118:21:0::1;;28140:50;28164:7;28173:4;;28178:1;28173:7;;;;;;28140:50;28192:7;28200:1;28192:10;;;;;;;;;;;;;;28118:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;28118:85:0::1;-1:-1:-1::0;;;;;28118:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;28118:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;28118:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;28118:85:0;28111:93:::1;;;;28215:24;28221:7;28230:4;;28215:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;28236:2:0;;-1:-1:-1;28215:5:0::1;::::0;-1:-1:-1;;28215:24:0:i:1;:::-;27543:704:::0;;;;;;;;:::o;35154:272::-;35316:16;35357:61;35385:9;35396;35407:10;35357:27;:61::i;26922:615::-;27155:24;27136:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;27202:54:::1;27231:7;27240:9;27251:4;;27202:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;27202:28:0::1;::::0;-1:-1:-1;;;27202:54:0:i:1;:::-;27192:64;;27289:11;27275:7;27283:1;27275:10;;;;;;;;;;;;;;:25;;27267:76;;;;-1:-1:-1::0;;;27267:76:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17196:38:::0;;;:::o;34666:199::-;34772:15;34807:50;34829:7;34838:8;34848;34807:21;:50::i;23951:716::-;24229:17;24210:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;24275:196:::1;24305:5;24325:4;24344:9;24368:14;24397:12;24432:4;24452:8;24275:15;:196::i;:::-;24521:38;::::0;;-1:-1:-1;;;24521:38:0;;24553:4:::1;24521:38;::::0;::::1;::::0;;;24259:212;;-1:-1:-1;24482:78:0::1;::::0;-1:-1:-1;24510:5:0;;24517:2;;-1:-1:-1;;;;;24521: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;24521:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24521:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;24521:38:0;24482:27:::1;:78::i;:::-;24578:4;-1:-1:-1::0;;;;;24571:21:0::1;;24593:9;24571:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;24571:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;24571:32:0;;;;24614:45;24645:2;24649:9;24614:30;:45::i;32902:861::-:0;33168:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;33213:4:::1;-1:-1:-1::0;;;;;33202:15:0::1;:4;;33207:1;33202:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;33202:7:0::1;-1:-1:-1::0;;;;;33202:15:0::1;;33194:56;;;::::0;;-1:-1:-1;;;33194:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;33261:16;33280:9;33261:28;;33307:4;-1:-1:-1::0;;;;;33300:20:0::1;;33328:8;33300:39;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33300:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33300:39:0;;;;;33364:4;-1:-1:-1::0;;;;;33357:21:0::1;;33379:50;33403:7;33412:4;;33417:1;33412:7;;;;;;33379:50;33431:8;33357:83;;;;;;;;;;;;;-1:-1:-1::0;;;;;33357:83:0::1;-1:-1:-1::0;;;;;33357:83:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33357:83:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33357:83:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33357:83:0;33350:91:::1;;;;33452:21;33483:4:::0;;-1:-1:-1;;33488:15:0;;33483:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33483:21:0::1;-1:-1:-1::0;;;;;33476:39:0::1;;33516:2;33476:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;33476:43:0::1;-1:-1:-1::0;;;;;33476:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;33476:43:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;33476:43:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;33476:43:0;33530:44:::1;::::0;;33476:43:::1;33530:44:::0;;::::1;::::0;;;;;;;;;;;33476:43;;-1:-1:-1;33530:44:0::1;::::0;;;33565:4;;;;;;33530:44;::::1;::::0;33565:4;;33530:44;33565:4;33530:44;1:33:-1::1;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;33571:2:0;;-1:-1:-1;33530:34:0::1;::::0;-1:-1:-1;;33530:44:0:i:1;:::-;33673:12:::0;33607:62:::1;33655:13:::0;33614:4;;-1:-1:-1;;33619:15:0;;33614:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33614:21:0::1;-1:-1:-1::0;;;;;33607:39:0::1;;33647:2;33607:43;;;;;;;;;;;;;-1:-1:-1::0;;;;;33607:43:0::1;-1:-1:-1::0;;;;;33607:43:0::1;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;20889:883:0::0;21155:15;21172;21136:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;21200:12:::1;21215:48;21239:7;21248:6;21256;21215:23;:48::i;:::-;21274:61;::::0;;-1:-1:-1;;;21274:61:0;;21307:10:::1;21274:61;::::0;::::1;::::0;-1:-1:-1;;;;;21274:32:0;::::1;:61:::0;;;;;;;;;;;;;;21200:63;;-1:-1:-1;21274:32:0;;::::1;::::0;:61;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;21274:32:0;:61;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;21274:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21274:61:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;;21409:28:0::1;::::0;;;;;-1:-1:-1;;;;;21409:28:0;;::::1;;::::0;::::1;::::0;;;21373:15:::1;::::0;;;21409:24;;::::1;::::0;::::1;::::0;:28;;;;;;;;;;;21373:15;21409:24;:28;::::1;;2:2:-1::0;::::1;;;27:1;24::::0;17:12:::1;2:2;21409:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;21409:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;21409:28:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;21409:28:0;-1:-1:-1;21449:14:0::1;21468:42;21495:6:::0;21503;21468:26:::1;:42::i;:::-;21448:62;;;21552:6;-1:-1:-1::0;;;;;21542:16:0::1;:6;-1:-1:-1::0;;;;;21542:16:0::1;;:58;;21583:7;21592;21542:58;;;21562:7;21571;21542:58;21521:79:::0;;-1:-1:-1;21521:79:0;-1:-1:-1;21619:21:0;;::::1;;21611:71;;;;-1:-1:-1::0;;;21611:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21712:10;21701:7;:21;;21693:71;;;;-1:-1:-1::0;;;21693:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17362:1;;;;20889:883:::0;;;;;;;;;;;:::o;17148:41::-;;;:::o;35434:258::-;35581:24;35630:54;35660:7;35669:8;35679:4;35630:29;:54::i;23181:691::-;23482:19;23503:17;23533:12;23548:45;23572:7;23581:5;23588:4;23548:23;:45::i;:::-;23533:60;;23604:13;23620:10;:36;;23647:9;23620:36;;;-1:-1:-1;;23620:36:0;23667:79;;;-1:-1:-1;;;23667:79:0;;23694:10;23667:79;;;;23714:4;23667:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23604:52;;-1:-1:-1;;;;;;23667:26:0;;;;;:79;;;;;-1:-1:-1;;23667:79:0;;;;;;;;-1:-1:-1;23667:26:0;:79;;;2:2:-1;;;;27:1;24;17:12;2:2;23667:79:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23667:79:0;;;;23784:80;23803:5;23810:9;23821:14;23837:12;23851:2;23855:8;23784:18;:80::i;:::-;23757:107;;;;-1:-1:-1;23181:691:0;-1:-1:-1;;;;;;;;;;;;;23181:691:0:o;19085:760::-;19388:15;19405;19422:17;19369:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;19473:85:::1;19487:6;19495;19503:14;19519;19535:10;19547;19473:13;:85::i;:::-;19452:106:::0;;-1:-1:-1;19452:106:0;-1:-1:-1;19569:12:0::1;19584:48;19608:7;19617:6:::0;19625;19584:23:::1;:48::i;:::-;19569:63;;19643:66;19675:6;19683:10;19695:4;19701:7;19643:31;:66::i;:::-;19720;19752:6;19760:10;19772:4;19778:7;19720:31;:66::i;:::-;19823:4;-1:-1:-1::0;;;;;19809:24:0::1;;19834:2;19809:28;;;;;;;;;;;;;-1:-1:-1::0;;;;;19809:28:0::1;-1:-1:-1::0;;;;;19809:28:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;19809:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;19809:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;19809:28:0;19085:760;;;;-1:-1:-1;19809:28:0;;-1:-1:-1;19085:760:0;;-1:-1:-1;;;;;;;;;19085:760:0:o;19851:995::-;20116:19;20137:17;20156;20097:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;20213:176:::1;20241:5;20261:4;20280:18;20313:9;20337:14;20366:12;20213:13;:176::i;:::-;20186:203:::0;;-1:-1:-1;20186:203:0;-1:-1:-1;20400:12:0::1;20415:45;20439:7;20448:5:::0;20455:4:::1;20415:23;:45::i;:::-;20400:60;;20471:69;20503:5;20510:10;20522:4;20528:11;20471:31;:69::i;:::-;20558:4;-1:-1:-1::0;;;;;20551:20:0::1;;20579:9;20551:40;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20551:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20551:40:0;;;;;20616:4;-1:-1:-1::0;;;;;20609:21:0::1;;20631:4;20637:9;20609:38;;;;;;;;;;;;;-1:-1:-1::0;;;;;20609:38:0::1;-1:-1:-1::0;;;;;20609:38:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20609:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20609:38:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20609:38:0;20602:46:::1;;;;20685:4;-1:-1:-1::0;;;;;20671:24:0::1;;20696:2;20671:28;;;;;;;;;;;;;-1:-1:-1::0;;;;;20671:28:0::1;-1:-1:-1::0;;;;;20671:28:0::1;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;20671:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;20671:28:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;20671:28:0;;-1:-1:-1;20750:9:0::1;:21:::0;-1:-1:-1;20746:92:0::1;;;20773:65;20804:10;20828:9;20816;:21;20773:30;:65::i;:::-;17362:1;19851:995:::0;;;;;;;;;;;:::o;29961:817::-;30180:24;30152:8;17308:15;17296:8;:27;;17288:63;;;;;-1:-1:-1;;;17288:63:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;17288:63:0;;;;;;;;;;;;;;;30241:4:::1;-1:-1:-1::0;;;;;30230:15:0::1;:4;;30235:1;30230:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30230:7:0::1;-1:-1:-1::0;;;;;30230:15:0::1;;30222:56;;;::::0;;-1:-1:-1;;;30222:56:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;30299:54;30328:7;30337:9;30348:4;;30299:54;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30299:28:0::1;::::0;-1:-1:-1;;;30299:54:0:i:1;:::-;30289:64;;30386:9;30372:7;30380:1;30372:10;;;;;;;;;;;;;;:23;;30364:74;;;;-1:-1:-1::0;;;30364:74:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30456:4;-1:-1:-1::0;;;;;30449:20:0::1;;30477:7;30485:1;30477:10;;;;;;;;;;;;;;30449:41;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30449:41:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30449:41:0;;;;;30515:4;-1:-1:-1::0;;;;;30508:21:0::1;;30530:50;30554:7;30563:4;;30568:1;30563:7;;;;;;30530:50;30582:7;30590:1;30582:10;;;;;;;;;;;;;;30508:85;;;;;;;;;;;;;-1:-1:-1::0;;;;;30508:85:0::1;-1:-1:-1::0;;;;;30508:85:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24::::0;17:12:::1;2:2;30508:85:0;;;;8:9:-1;5:2;;;45:16;42:1;39::::0;24:38:::1;77:16;74:1;67:27;5:2;30508:85:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28::::0;21:12:::1;4:2;-1:-1:::0;30508:85:0;30501:93:::1;;;;30605:24;30611:7;30620:4;;30605:24;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16:::0;::::1;74:27:::0;;;;-1:-1;30626:2:0;;-1:-1:-1;30605:5:0::1;::::0;-1:-1:-1;;30605:24:0:i:1;:::-;30692:7;30700:1;30692:10;;;;;;;;;;;;;;30680:9;:22;30676:94;;;30704:66;30735:10;30759:7;30767:1;30759:10;;;;;;;;;;;;;;30747:9;:22;30704:30;:66::i;1535:449::-:0;1767:45;;;-1:-1:-1;;;;;1767:45:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;1767:45:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;1767:45:0;179:29:-1;160:49;;1756:57:0;;;;1721:12;;1735:17;;1756:10;;;;1767:45;1756:57;;;25:18:-1;1756: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;;;1756: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;;1720:93:0;;;;1846:7;:57;;;;-1:-1:-1;1858:11:0;;:16;;:44;;;1889:4;1878:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;1878:24:0;1858:44;1824:152;;;;-1:-1:-1;;;1824:152:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1535:449;;;;;:::o;2498:217::-;2611:12;;;2571;2611;;;;;;;;;-1:-1:-1;;;;;2589:7:0;;;2604:5;;2589:35;;;;;;;;;;;;;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;;;2589:35: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;;2570:54:0;;;2643:7;2635:72;;;;-1:-1:-1;;;2635:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2498:217;;;:::o;13369:536::-;13471:17;13520:1;13509:8;:12;13501:67;;;;-1:-1:-1;;;13501:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13599:1;13587:9;:13;:31;;;;;13617:1;13604:10;:14;13587:31;13579:83;;;;-1:-1:-1;;;13579:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13673:23;13699:17;:8;13712:3;13699:17;:12;:17;:::i;:::-;13673:43;-1:-1:-1;13727:17:0;13747:31;13673:43;13767:10;13747:31;:19;:31;:::i;:::-;13727:51;-1:-1:-1;13789:19:0;13811:40;13835:15;13811:19;:9;13825:4;13811:19;:13;:19;:::i;:::-;:23;:40;:23;:40;:::i;:::-;13789:62;;13886:11;13874:9;:23;;;;;;;13369:536;-1:-1:-1;;;;;;;13369:536:0:o;14596:528::-;14700:24;14760:1;14745:4;:11;:16;;14737:58;;;;;-1:-1:-1;;;14737:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;14830:4;:11;14816:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;14816:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;14816:26:0;;14806:36;;14866:8;14853:7;14861:1;14853:10;;;;;;;;;;;;;:21;;;;;14890:9;14885:232;14919:1;14905:4;:11;:15;14901:1;:19;14885:232;;;14943:17;14962:18;14984:42;14996:7;15005:4;15010:1;15005:7;;;;;;;;;;;;;;15014:4;15019:1;15023;15019:5;15014:11;;;;;;;;;;;;;;14984;:42::i;:::-;14942:84;;;;15058:47;15071:7;15079:1;15071:10;;;;;;;;;;;;;;15083:9;15094:10;15058:12;:47::i;:::-;15041:7;15049:1;15053;15049:5;15041:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;14922:3:0;;14885:232;;;;14596:528;;;;;:::o;11819:481::-;11908:12;11934:14;11950;11968:26;11979:6;11987;11968:10;:26::i;:::-;12135:32;;;-1:-1:-1;;12135:32:0;;;;;;;;;;;;;;;;;;;;;;;;;22::-1;26:21;;;22:32;6:49;;12135:32:0;;;;;12125:43;;;;;;12038:251;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;12038:251:0;;;;;;;12028:262;;;;;;;;;11819:481;-1:-1:-1;;;;;11819:481:0:o;1992:498::-;2263:51;;;-1:-1:-1;;;;;2263:51:0;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;2263:51:0;;;;;;;25:18:-1;;61:17;;96:58;182:15;-1:-1;;;179:29;160:49;;2252:63:0;;;;2217:12;;2231:17;;2252:10;;;;2263:51;2252:63;;;25:18:-1;2252: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;;;2252: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;;2216:99:0;;;;2348:7;:57;;;;-1:-1:-1;2360:11:0;;:16;;:44;;;2391:4;2380:24;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;2380:24:0;2360:44;2326:156;;;;-1:-1:-1;;;2326:156:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1992:498;;;;;;:::o;25521:752::-;25631:9;25626:640;25660:1;25646:4;:11;:15;25642:1;:19;25626:640;;;25684:13;25699:14;25718:4;25723:1;25718:7;;;;;;;;;;;;;;25727:4;25732:1;25736;25732:5;25727:11;;;;;;;;;;;;;;25683:56;;;;25755:14;25774:41;25801:5;25808:6;25774:26;:41::i;:::-;25754:61;;;25830:17;25850:7;25858:1;25862;25858:5;25850:14;;;;;;;;;;;;;;25830:34;;25880:18;25900;25931:6;-1:-1:-1;;;;;25922:15:0;:5;-1:-1:-1;;;;;25922:15:0;;:67;;25967:9;25986:1;25922:67;;;25949:1;25953:9;25922:67;25879:110;;;;26004:10;26035:1;26021:4;:11;:15;26017:1;:19;:81;;26095:3;26017:81;;;26039:53;26063:7;26072:6;26080:4;26085:1;26089;26085:5;26080:11;;;;;;;;;;;;;;26039:23;:53::i;:::-;26004:94;;26127:47;26151:7;26160:5;26167:6;26127:23;:47::i;:::-;-1:-1:-1;;;;;26113:67:0;;26199:10;26211;26223:2;26237:1;26227:12;;;;;;;;;;;;;;;;;;;;;;;;;21:6:-1;;108:14;26227:12:0;87:42:-1;143:17;;-1:-1;26227:12:0;;26113:141;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26113:141:0;-1:-1:-1;;;;;26113:141: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;26113:141:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;26113:141:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;25663:3:0;;;;;-1:-1:-1;25626:640:0;;-1:-1:-1;;;;;;;;25626:640:0;;;25521:752;;;:::o;15205:549::-;15309:24;15369:1;15354:4;:11;:16;;15346:58;;;;;-1:-1:-1;;;15346:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15439:4;:11;15425:26;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;15425:26:0;;;;;;;;;;;;;;;;;;;;;;;29:2:-1;21:6;17:15;125:4;109:14;101:6;88:42;144:17;;-1:-1;15425:26:0;;15415:36;;15492:9;15462:7;15487:1;15470:7;:14;:18;15462:27;;;;;;;;;;;;;;;;;:39;15529:11;;-1:-1:-1;;15529:15:0;15512:235;15546:5;;15512:235;;15574:17;15593:18;15615:42;15627:7;15636:4;15645:1;15641;:5;15636:11;;;;;;;;;;;;;;15649:4;15654:1;15649:7;;;;;;;15615:42;15573:84;;;;15689:46;15701:7;15709:1;15701:10;;;;;;;;;;;;;;15713:9;15724:10;15689:11;:46::i;:::-;15672:7;15684:1;15680;:5;15672:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;15553:3:0;15512:235;;30925:1241;31038:9;31033:1126;31067:1;31053:4;:11;:15;31049:1;:19;31033:1126;;;31091:13;31106:14;31125:4;31130:1;31125:7;;;;;;;;;;;;;;31134:4;31139:1;31143;31139:5;31134:11;;;;;;;;;;;;;;31090:56;;;;31162:14;31181:41;31208:5;31215:6;31181:26;:41::i;:::-;31161:61;;;31237:18;31272:47;31296:7;31305:5;31312:6;31272:23;:47::i;:::-;31237:83;;31335:19;31369:20;31460:16;31478;31499:4;-1:-1:-1;;;;;31499:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;31499:18:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;31499:18:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;31499:18:0;;;;;;;31459:58;;;;;-1:-1:-1;31459:58:0;;-1:-1:-1;31533:20:0;;-1:-1:-1;;;;;31580:15:0;;;;;;;:61;;31622:8;31632;31580:61;;;31599:8;31609;31580:61;31532:109;;;;31670:56;31713:12;31677:5;-1:-1:-1;;;;;31670:23:0;;31702:4;31670:38;;;;;;;;;;;;;-1:-1:-1;;;;;31670:38:0;-1:-1:-1;;;;;31670:38:0;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;31670:56:0;31656:70;;31756;31785:11;31798:12;31812:13;31756:28;:70::i;:::-;31741:85;;31033:1126;;;;31857:18;31877;31908:6;-1:-1:-1;;;;;31899:15:0;:5;-1:-1:-1;;;;;31899:15:0;;:73;;31947:12;31969:1;31899:73;;;31926:1;31930:12;31899:73;31856:116;;;;31987:10;32018:1;32004:4;:11;:15;32000:1;:19;:81;;32078:3;32000:81;;;32022:53;32046:7;32055:6;32063:4;32068:1;32072;32068:5;32063:11;;;;;;;32022:53;32134:12;;;32144:1;32134:12;;;;;;;;;;32096:51;;;;;;;;;;;;;;;-1:-1:-1;;;;;32096:51:0;;;;;;;;;;;;;;;;;;;;;;31987:94;;-1:-1:-1;32096:9:0;;;;;;32106:10;;32118;;31987:94;;32134:12;;32096:51;;;;;;;;32134:12;;32096:51;;;;32134: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;32096:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;32096:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;31070:3:0;;;;;-1:-1:-1;31033:1126:0;;-1:-1:-1;;;;;;;;;;31033:1126:0;10838:129;10922:5;;;10917:16;;;;10909:50;;;;;-1:-1:-1;;;10909:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;14026:488;14128:16;14177:1;14165:9;:13;14157:69;;;;-1:-1:-1;;;14157:69:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14257:1;14245:9;:13;:31;;;;;14275:1;14262:10;:14;14245:31;14237:83;;;;-1:-1:-1;;;14237:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14331:17;14351:34;14380:4;14351:24;:9;14365;14351:24;:13;:24;:::i;:::-;:28;:34;:28;:34;:::i;:::-;14331:54;-1:-1:-1;14396:19:0;14418:34;14448:3;14418:25;:10;14433:9;14418:25;:14;:25;:::i;:34::-;14396:56;;14474:32;14504:1;14487:11;14475:9;:23;;;;;;;14474:32;:29;:32;:::i;:::-;14463:43;14026:488;-1:-1:-1;;;;;;14026:488:0:o;12916:331::-;13007:15;13053:1;13043:7;:11;13035:60;;;;-1:-1:-1;;;13035:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13125:1;13114:8;:12;:28;;;;;13141:1;13130:8;:12;13114:28;13106:80;;;;-1:-1:-1;;;13106:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13231:8;13207:21;:7;13219:8;13207:21;:11;:21;:::i;:::-;:32;;;;;;;12916:331;-1:-1:-1;;;;12916:331:0:o;11380:347::-;11455:14;11471;11516:6;-1:-1:-1;;;;;11506:16:0;:6;-1:-1:-1;;;;;11506:16:0;;;11498:65;;;;-1:-1:-1;;;11498:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11602:6;-1:-1:-1;;;;;11593:15:0;:6;-1:-1:-1;;;;;11593:15:0;;:53;;11631:6;11639;11593:53;;;11612:6;11620;11593:53;11574:72;;-1:-1:-1;11574:72:0;-1:-1:-1;;;;;;11665:20:0;;11657:62;;;;;-1:-1:-1;;;11657:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11380:347;;;;;:::o;17666:1413::-;17997:49;;;;;;-1:-1:-1;;;;;17997:49:0;;;;;;;;;;;;;;;;17896:15;;;;;;18014:7;17997:33;;;;;;:49;;;;;;;;;;;;;;;:33;:49;;;2:2:-1;;;;27:1;24;17:12;2:2;17997:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17997:49:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;17997:49:0;-1:-1:-1;;;;;17997:63:0;;17993:148;;;18077:52;;;;;;-1:-1:-1;;;;;18077:52:0;;;;;;;;;;;;;;;;18094:7;18077:36;;;;;;:52;;;;;;;;;;;;;;;-1:-1:-1;18077:36:0;:52;;;2:2:-1;;;;27:1;24;17:12;2:2;18077:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18077:52:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;;17993:148:0;18152:16;18170;18190:52;18218:7;18227:6;18235;18190:27;:52::i;:::-;18151:91;;;;18257:8;18269:1;18257:13;:30;;;;-1:-1:-1;18274:13:0;;18257:30;18253:819;;;18326:14;;-1:-1:-1;18342:14:0;;-1:-1:-1;18253:819:0;;;18390:22;18415:57;18437:14;18453:8;18463;18415:21;:57::i;:::-;18390:82;;18509:14;18491;:32;18487:574;;18570:10;18552:14;:28;;18544:78;;;;-1:-1:-1;;;18544:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18663:14;;-1:-1:-1;18679:14:0;-1:-1:-1;18679:14:0;18487:574;;;18735:22;18760:57;18782:14;18798:8;18808;18760:21;:57::i;:::-;18735:82;;18861:14;18843;:32;;18836:40;;;;18921:10;18903:14;:28;;18895:78;;;;-1:-1:-1;;;18895:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19014:14;-1:-1:-1;19030:14:0;;-1:-1:-1;18487:574:0;18253:819;;17666:1413;;;;;;;;;;;:::o;10975:142::-;11027:6;11054;;;:30;;-1:-1:-1;;11069:5:0;;;11083:1;11078;11069:5;11078:1;11064:15;;;;;:20;11054:30;11046:63;;;;;-1:-1:-1;;;11046:63:0;;;;;;;;;;;;;;;;;;;;;;;;;;;10702:128;10786:5;;;10781:16;;;;10773:49;;;;;-1:-1:-1;;;10773:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;12358:445;12451:16;12469;12499:14;12518:26;12529:6;12537;12518:10;:26::i;:::-;12498:46;;;12555:32;12563:7;12572:6;12580;12555:7;:32::i;:::-;;12599:16;12617;12652:32;12660:7;12669:6;12677;12652:7;:32::i;:::-;-1:-1:-1;;;;;12638:59:0;;:61;;;;;;;;;;;;;;;;;;;;;;5:9:-1;2:2;;;27:1;24;17:12;2:2;12638:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12638:61:0;;;;;;;15:2:-1;10:3;7:11;4:2;;;31:1;28;21:12;4:2;-1:-1;12638:61:0;;;;;;;12598:101;;;;;-1:-1:-1;12598:101:0;;-1:-1:-1;;;;;;12733:16:0;;;;;;;:62;;12776:8;12786;12733:62;;;12753:8;12763;12733:62;12710:85;;;;-1:-1:-1;12358:445:0;-1:-1:-1;;;;;;;12358:445:0:o

Swarm Source

ipfs://d8f539e12b0e54de34727f5f76a5a5d6f9953e5492a7f70461ec16865b11f7e4
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.