Contract 0xb0731d50c681c45856bfc3f7539d5f61d4be81d8 18

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xee3018df182593b0d2a9bf2ca1be01f131774c2585167b5e82cb941d5ed8540bAny Swap Out Und...353404922023-09-18 10:45:2416 days 16 hrs ago0x0c621596c97f0daac86842c8e74cc324984d4c33 IN  Multichain: Router V40 AVAX0.002522164 26.5
0x5200ba31c2b671ac4b01f38b04ed7d7f885b2dc4b08af27ab6a9c6216387485dAny Swap Out Und...351838612023-09-14 17:29:1520 days 9 hrs ago0x2d78fc914a6d772bd821de10b2b826b6d241f7c2 IN  Multichain: Router V40 AVAX0.002522164 26.5
0x4538b2fec5d0425788ed7b711878b49b1fa8ec3bc2e000bf74281611b194e5e3Any Swap Out Und...348953452023-09-07 21:26:2727 days 5 hrs ago0xa784b62b78362541d3e75108c5b4daf0fcce1af7 IN  Multichain: Router V40 AVAX0.0025228 26.5
0x2f41af734d289552c642e02612c28a28e51eb9dfa3a7ae59dac002ff3ebe675bAny Swap Out Und...348873492023-09-07 16:42:3927 days 10 hrs ago0x94bac46536b189dd16ad08662487219fc29af63d IN  Multichain: Router V40 AVAX0.0025228 26.5
0xfcca8fde6464cedb816597c579d734492cb70a88bd06276eb728b7718b734d87Any Swap Out Und...348836772023-09-07 14:31:4127 days 12 hrs ago0xbac9fd8f041937d941a712ba5dd2898b90da509b IN  Multichain: Router V40 AVAX0.0025228 26.5
0x2d202e6d5fe1d69226f59f9951556ab96dc30ee6158febce5c126a5bf3da9af3Any Swap Out Und...348798732023-09-07 12:14:5627 days 14 hrs ago0xf661886c2264de5047d44e3acf749b6cf249407f IN  Multichain: Router V40 AVAX0.002522164 26.5
0x65642ff17d91e307f10bbd4498ddb2b54bd171df738c31f092f51cbc97af56afAny Swap Out Und...348664092023-09-07 4:14:4627 days 22 hrs ago0x57ea75ee1ff223bbeee929748fb6ad6b6e3eb44b IN  Multichain: Router V40 AVAX0.00256436472 26.94
0xe9cd8638e5f3f094f3b8c3e346295efb242bfc3f04c2b7b6f13c40c097dc29d4Any Swap Out Und...348028702023-09-05 14:14:5329 days 12 hrs ago0x2d84388edfd3da80fc2ace33ed2c759cc0c57766 IN  Multichain: Router V40 AVAX0.0026111891 27.425
0x25e26bb72f8b3bad6ec33a7a63d5e999f6efc2cfa3139d033a39350087d795f5Any Swap Out Und...347975342023-09-05 11:01:3829 days 16 hrs ago0xd7e7e25ce2ac2ca01b2070f39feaa10acab46055 IN  Multichain: Router V40 AVAX0.002521846 26.5
0x3897dd1fe9d7a36dfab5b94646db6f702f56765daa98ae71fcdb95b6cf374d4eAny Swap Out Und...347883752023-09-05 5:37:0729 days 21 hrs ago0xb34ea1b520e150a7db132a4150a873abc7895c18 IN  Multichain: Router V40 AVAX0.00274404719 28.827658848
0x5a4b0f97b07166137070b08b7e6ee3cce52997c9ab05a07a5cfca95fe32b2a92Any Swap Out Und...347625242023-09-04 13:50:3330 days 13 hrs ago0x231195df254d2de1d7111b9c5c06c335c18c88df IN  Multichain: Router V40 AVAX0.002523118 26.5
0xbadc85d6a4d8f4430ce1ced578bddf148b87df28a6aab579ebcd7bd266a13ec7Any Swap Out Und...347566132023-09-04 10:17:3030 days 16 hrs ago0xa7f179a35dbc53710d6965b58bb587b24ab6fbd5 IN  Multichain: Router V40 AVAX0.00284648 29.9
0x7bfa8c41622d9ce8b2cacf884cf0dee6d7514a8419864e42e40ad5b57b527322Any Swap Out Und...347210652023-09-03 13:02:2731 days 14 hrs ago0xcdc0673fc940fc8cb0f9e71d4521d2723bf668d2 IN  Multichain: Router V40 AVAX0.002522164 26.5
0xa1481843034c01d6f9048543f26022fc767a2cf0a67e21cc134846086b5be47cAny Swap Out Und...347209102023-09-03 12:57:0431 days 14 hrs ago0xcdc0673fc940fc8cb0f9e71d4521d2723bf668d2 IN  Multichain: Router V40 AVAX0.002521846 26.5
0x0927bc6a14654012ec3364caebeffcaa3dc3d01ddd4f0ef253258d79d6b1ccaeAny Swap Out Und...347051722023-09-03 3:29:3231 days 23 hrs ago0x0310155d6b1f076ef5d5dd6463dad2b8fd9f9fec IN  Multichain: Router V40 AVAX0.002603277746 27.35225
0xc2b8b9c5d947c3e42d1c404680b343bcffb5e044da1f039070128b7dd99dfed3Any Swap Out Und...346919462023-09-02 19:31:5232 days 7 hrs ago0x86a8a54f584355406d7ca680b5daf1689f3571d6 IN  Multichain: Router V40 AVAX0.002522164 26.5
0x2393db823d5d4cac3ce11efd23efdec2948a775673f75766276dbfd4eadf78d1Any Swap Out Und...346071482023-08-31 16:49:0434 days 10 hrs ago0x5a1fdf02a4d26c6411810760482f595adae5682e IN  Multichain: Router V40 AVAX0.002522164 26.5
0x51fdc210677e8567e4586dd84b2a7ef8e71590b8bc6df4d486d364d0f25eabf6Any Swap Out Und...345801662023-08-31 0:55:5935 days 2 hrs ago0xd7faac05de5334e9db1ff43f37ad04f591894889 IN  Multichain: Router V40 AVAX0.00256404144 26.94
0x3df3a68d0ee868a7dd996252a56ca991c9da0cadec7142ce3974f60d4835d50bAny Swap Out Und...345310782023-08-29 19:19:5836 days 7 hrs ago0x13a9826eb24b8baffc0cdc13fa0a09b857841830 IN  Multichain: Router V40 AVAX0.002522482 26.5
0x4ab22726a02fe319d6e3f102b0798204591dc0c2e757ea093bd1e12539691397Any Swap Out Und...344334112023-08-27 8:48:1038 days 18 hrs ago0xf5db697a5ad188fddc9258fff2206253932a467d IN  Multichain: Router V40 AVAX0.00252248226.5
0x6ae357a59aee048728e8025a27e3a2a06de5aca5ba853ae1fedda59ef43f3d9dAny Swap Out Und...344131302023-08-26 20:38:2739 days 6 hrs ago0x5853ed4f26a3fcea565b3fbc698bb19cdf6deb85 IN  Multichain: Router V40 AVAX0.00252216426.5
0x47c85d1f1d8f7c8221191e9d145b205d5e5ca2d66a2f136a674917b0babdd1c4Any Swap Out Und...343535072023-08-25 9:04:5040 days 18 hrs ago0xdba33424863e8ba8e566e68dbabbb4befb032c11 IN  Multichain: Router V40 AVAX0.002522164 26.5
0xdca4ff1b9b44c36c5b3555a0277d5ae51d947c42d068222fee782e06f37ef1e6Any Swap Out Und...343022462023-08-24 2:29:2342 days 36 mins ago0x16ae8fc2d8bc1dccc6b6586aef7f8f41e3b54e2b IN  Multichain: Router V40 AVAX0.002522164 26.5
0x1fb78dfee19018ecdfd6a6f207bf4537d6d8c278e44f5923880cfebadaca5266Any Swap Out Und...342617652023-08-23 2:18:2643 days 47 mins ago0xc76bca0fbc5467eeef4a69ab463a5c950c545338 IN  Multichain: Router V40 AVAX0.00252152826.5
0x982df13114c56d7a340ca7c2db1e9ce9fb27c6ef1c767a733e67246b175e5e0dAny Swap Out Und...342522492023-08-22 20:30:1043 days 6 hrs ago0xd0e986f506a037c25358fa63f49c6984a0c5370c IN  Multichain: Router V40 AVAX0.002522164 26.5
[ Download CSV Export 
Parent Txn Hash Block From To Value
Index Block
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AnyswapV4Router

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU LGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2021-11-08
*/

/**
 *Submitted for verification at Etherscan.io on 2021-06-18
*/

/**
 *Submitted for verification at FtmScan.com on 2021-05-31
*/

/**
 *Submitted for verification at BscScan.com on 2021-04-15
*/

/**
 *Submitted for verification at BscScan.com on 2021-04-08
*/

/**
 *Submitted for verification at hecoinfo.com on 2021-04-08
*/

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

pragma solidity >=0.8.0;

interface ISushiswapV2Pair {
    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 swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
}

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

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

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

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

library SushiswapV2Library {
    using SafeMathSushiswap for uint;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB) internal pure returns (address token0, address token1) {
        require(tokenA != tokenB, 'SushiswapV2Library: IDENTICAL_ADDRESSES');
        (token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'SushiswapV2Library: 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(uint160(uint256(keccak256(abi.encodePacked(
                hex'ff',
                factory,
                keccak256(abi.encodePacked(token0, token1)),
                hex'e18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303' // init code hash
            )))));
    }

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

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

    // given an input amount of an asset and pair reserves, returns the maximum output amount of the other asset
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {
        require(amountIn > 0, 'SushiswapV2Library: INSUFFICIENT_INPUT_AMOUNT');
        require(reserveIn > 0 && reserveOut > 0, 'SushiswapV2Library: INSUFFICIENT_LIQUIDITY');
        uint amountInWithFee = amountIn.mul(997);
        uint numerator = amountInWithFee.mul(reserveOut);
        uint denominator = reserveIn.mul(1000).add(amountInWithFee);
        amountOut = numerator / denominator;
    }

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

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

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

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

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

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

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

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

interface AnyswapV1ERC20 {
    function mint(address to, uint256 amount) external returns (bool);
    function burn(address from, uint256 amount) external returns (bool);
    function changeVault(address newVault) external returns (bool);
    function depositVault(uint amount, address to) external returns (uint);
    function withdrawVault(address from, uint amount, address to) external returns (uint);
    function underlying() external view returns (address);
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function permit(address target, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function transferWithPermit(address target, address to, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

contract AnyswapV4Router {
    using SafeMathSushiswap for uint;

    address public immutable factory;
    address public immutable wNATIVE;

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

    constructor(address _factory, address _wNATIVE, address _mpc) {
        _newMPC = _mpc;
        _newMPCEffectiveTime = block.timestamp;
        factory = _factory;
        wNATIVE = _wNATIVE;
    }

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

    address private _oldMPC;
    address private _newMPC;
    uint256 private _newMPCEffectiveTime;


    event LogChangeMPC(address indexed oldMPC, address indexed newMPC, uint indexed effectiveTime, uint chainID);
    event LogChangeRouter(address indexed oldRouter, address indexed newRouter, uint chainID);
    event LogAnySwapIn(bytes32 indexed txhash, address indexed token, address indexed to, uint amount, uint fromChainID, uint toChainID);
    event LogAnySwapOut(address indexed token, address indexed from, address indexed to, uint amount, uint fromChainID, uint toChainID);
    event LogAnySwapTradeTokensForTokens(address[] path, address indexed from, address indexed to, uint amountIn, uint amountOutMin, uint fromChainID, uint toChainID);
    event LogAnySwapTradeTokensForNative(address[] path, address indexed from, address indexed to, uint amountIn, uint amountOutMin, uint fromChainID, uint toChainID);

    modifier onlyMPC() {
        require(msg.sender == mpc(), "AnyswapV3Router: FORBIDDEN");
        _;
    }

    function mpc() public view returns (address) {
        if (block.timestamp >= _newMPCEffectiveTime) {
            return _newMPC;
        }
        return _oldMPC;
    }

    function cID() public view returns (uint id) {
        assembly {id := chainid()}
    }

    function changeMPC(address newMPC) public onlyMPC returns (bool) {
        require(newMPC != address(0), "AnyswapV3Router: address(0x0)");
        _oldMPC = mpc();
        _newMPC = newMPC;
        _newMPCEffectiveTime = block.timestamp + 2*24*3600;
        emit LogChangeMPC(_oldMPC, _newMPC, _newMPCEffectiveTime, cID());
        return true;
    }

    function changeVault(address token, address newVault) public onlyMPC returns (bool) {
        require(newVault != address(0), "AnyswapV3Router: address(0x0)");
        return AnyswapV1ERC20(token).changeVault(newVault);
    }

    function _anySwapOut(address from, address token, address to, uint amount, uint toChainID) internal {
        AnyswapV1ERC20(token).burn(from, amount);
        emit LogAnySwapOut(token, from, to, amount, cID(), toChainID);
    }

    // Swaps `amount` `token` from this chain to `toChainID` chain with recipient `to`
    function anySwapOut(address token, address to, uint amount, uint toChainID) external {
        _anySwapOut(msg.sender, token, to, amount, toChainID);
    }

    // Swaps `amount` `token` from this chain to `toChainID` chain with recipient `to` by minting with `underlying`
    function anySwapOutUnderlying(address token, address to, uint amount, uint toChainID) external {
        TransferHelper.safeTransferFrom(AnyswapV1ERC20(token).underlying(), msg.sender, token, amount);
        AnyswapV1ERC20(token).depositVault(amount, msg.sender);
        _anySwapOut(msg.sender, token, to, amount, toChainID);
    }

    function anySwapOutUnderlyingWithPermit(
        address from,
        address token,
        address to,
        uint amount,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external {
        address _underlying = AnyswapV1ERC20(token).underlying();
        IERC20(_underlying).permit(from, address(this), amount, deadline, v, r, s);
        TransferHelper.safeTransferFrom(_underlying, from, token, amount);
        AnyswapV1ERC20(token).depositVault(amount, from);
        _anySwapOut(from, token, to, amount, toChainID);
    }

    function anySwapOutUnderlyingWithTransferPermit(
        address from,
        address token,
        address to,
        uint amount,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external {
        IERC20(AnyswapV1ERC20(token).underlying()).transferWithPermit(from, token, amount, deadline, v, r, s);
        AnyswapV1ERC20(token).depositVault(amount, from);
        _anySwapOut(from, token, to, amount, toChainID);
    }

    function anySwapOut(address[] calldata tokens, address[] calldata to, uint[] calldata amounts, uint[] calldata toChainIDs) external {
        for (uint i = 0; i < tokens.length; i++) {
            _anySwapOut(msg.sender, tokens[i], to[i], amounts[i], toChainIDs[i]);
        }
    }

    // swaps `amount` `token` in `fromChainID` to `to` on this chainID
    function _anySwapIn(bytes32 txs, address token, address to, uint amount, uint fromChainID) internal {
        AnyswapV1ERC20(token).mint(to, amount);
        emit LogAnySwapIn(txs, token, to, amount, fromChainID, cID());
    }

    // swaps `amount` `token` in `fromChainID` to `to` on this chainID
    // triggered by `anySwapOut`
    function anySwapIn(bytes32 txs, address token, address to, uint amount, uint fromChainID) external onlyMPC {
        _anySwapIn(txs, token, to, amount, fromChainID);
    }

    // swaps `amount` `token` in `fromChainID` to `to` on this chainID with `to` receiving `underlying`
    function anySwapInUnderlying(bytes32 txs, address token, address to, uint amount, uint fromChainID) external onlyMPC {
        _anySwapIn(txs, token, to, amount, fromChainID);
        AnyswapV1ERC20(token).withdrawVault(to, amount, to);
    }

    // swaps `amount` `token` in `fromChainID` to `to` on this chainID with `to` receiving `underlying` if possible
    function anySwapInAuto(bytes32 txs, address token, address to, uint amount, uint fromChainID) external onlyMPC {
        _anySwapIn(txs, token, to, amount, fromChainID);
        AnyswapV1ERC20 _anyToken = AnyswapV1ERC20(token);
        address _underlying = _anyToken.underlying();
        if (_underlying != address(0) && IERC20(_underlying).balanceOf(token) >= amount) {
            _anyToken.withdrawVault(to, amount, to);
        }
    }

    // extracts mpc fee from bridge fees
    function anySwapFeeTo(address token, uint amount) external onlyMPC {
        address _mpc = mpc();
        AnyswapV1ERC20(token).mint(_mpc, amount);
        AnyswapV1ERC20(token).withdrawVault(_mpc, amount, _mpc);
    }

    function anySwapIn(bytes32[] calldata txs, address[] calldata tokens, address[] calldata to, uint256[] calldata amounts, uint[] calldata fromChainIDs) external onlyMPC {
        for (uint i = 0; i < tokens.length; i++) {
            _anySwapIn(txs[i], tokens[i], to[i], amounts[i], fromChainIDs[i]);
        }
    }

    // **** SWAP ****
    // requires the initial amount to have already been sent to the first pair
    function _swap(uint[] memory amounts, address[] memory path, address _to) internal virtual {
        for (uint i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0,) = SushiswapV2Library.sortTokens(input, output);
            uint amountOut = amounts[i + 1];
            (uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
            address to = i < path.length - 2 ? SushiswapV2Library.pairFor(factory, output, path[i + 2]) : _to;
            ISushiswapV2Pair(SushiswapV2Library.pairFor(factory, input, output)).swap(
                amount0Out, amount1Out, to, new bytes(0)
            );
        }
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint toChainID
    ) external virtual ensure(deadline) {
        AnyswapV1ERC20(path[0]).burn(msg.sender, amountIn);
        emit LogAnySwapTradeTokensForTokens(path, msg.sender, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForTokensUnderlying(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint toChainID
    ) external virtual ensure(deadline) {
        TransferHelper.safeTransferFrom(AnyswapV1ERC20(path[0]).underlying(), msg.sender, path[0], amountIn);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, msg.sender);
        AnyswapV1ERC20(path[0]).burn(msg.sender, amountIn);
        emit LogAnySwapTradeTokensForTokens(path, msg.sender, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForTokensUnderlyingWithPermit(
        address from,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external virtual ensure(deadline) {
        address _underlying = AnyswapV1ERC20(path[0]).underlying();
        IERC20(_underlying).permit(from, address(this), amountIn, deadline, v, r, s);
        TransferHelper.safeTransferFrom(_underlying, from, path[0], amountIn);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, from);
        AnyswapV1ERC20(path[0]).burn(from, amountIn);
        {
        address[] memory _path = path;
        address _from = from;
        address _to = to;
        uint _amountIn = amountIn;
        uint _amountOutMin = amountOutMin;
        uint _cID = cID();
        uint _toChainID = toChainID;
        emit LogAnySwapTradeTokensForTokens(_path, _from, _to, _amountIn, _amountOutMin, _cID, _toChainID);
        }
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForTokensUnderlyingWithTransferPermit(
        address from,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external virtual ensure(deadline) {
        IERC20(AnyswapV1ERC20(path[0]).underlying()).transferWithPermit(from, path[0], amountIn, deadline, v, r, s);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, from);
        AnyswapV1ERC20(path[0]).burn(from, amountIn);
        emit LogAnySwapTradeTokensForTokens(path, from, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // Swaps `amounts[path.length-1]` `path[path.length-1]` to `to` on this chain
    // Triggered by `anySwapOutExactTokensForTokens`
    function anySwapInExactTokensForTokens(
        bytes32 txs,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint fromChainID
    ) external onlyMPC virtual ensure(deadline) returns (uint[] memory amounts) {
        amounts = SushiswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'SushiswapV2Router: INSUFFICIENT_OUTPUT_AMOUNT');
        _anySwapIn(txs, path[0], SushiswapV2Library.pairFor(factory, path[0], path[1]), amounts[0], fromChainID);
        _swap(amounts, path, to);
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForNative(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint toChainID
    ) external virtual ensure(deadline) {
        AnyswapV1ERC20(path[0]).burn(msg.sender, amountIn);
        emit LogAnySwapTradeTokensForNative(path, msg.sender, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForNativeUnderlying(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint toChainID
    ) external virtual ensure(deadline) {
        TransferHelper.safeTransferFrom(AnyswapV1ERC20(path[0]).underlying(), msg.sender, path[0], amountIn);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, msg.sender);
        AnyswapV1ERC20(path[0]).burn(msg.sender, amountIn);
        emit LogAnySwapTradeTokensForNative(path, msg.sender, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForNativeUnderlyingWithPermit(
        address from,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external virtual ensure(deadline) {
        address _underlying = AnyswapV1ERC20(path[0]).underlying();
        IERC20(_underlying).permit(from, address(this), amountIn, deadline, v, r, s);
        TransferHelper.safeTransferFrom(_underlying, from, path[0], amountIn);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, from);
        AnyswapV1ERC20(path[0]).burn(from, amountIn);
        {
        address[] memory _path = path;
        address _from = from;
        address _to = to;
        uint _amountIn = amountIn;
        uint _amountOutMin = amountOutMin;
        uint _cID = cID();
        uint _toChainID = toChainID;
        emit LogAnySwapTradeTokensForNative(_path, _from, _to, _amountIn, _amountOutMin, _cID, _toChainID);
        }
    }

    // sets up a cross-chain trade from this chain to `toChainID` for `path` trades to `to`
    function anySwapOutExactTokensForNativeUnderlyingWithTransferPermit(
        address from,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s,
        uint toChainID
    ) external virtual ensure(deadline) {
        IERC20(AnyswapV1ERC20(path[0]).underlying()).transferWithPermit(from, path[0], amountIn, deadline, v, r, s);
        AnyswapV1ERC20(path[0]).depositVault(amountIn, from);
        AnyswapV1ERC20(path[0]).burn(from, amountIn);
        emit LogAnySwapTradeTokensForNative(path, from, to, amountIn, amountOutMin, cID(), toChainID);
    }

    // Swaps `amounts[path.length-1]` `path[path.length-1]` to `to` on this chain
    // Triggered by `anySwapOutExactTokensForNative`
    function anySwapInExactTokensForNative(
        bytes32 txs,
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline,
        uint fromChainID
    ) external onlyMPC virtual ensure(deadline) returns (uint[] memory amounts) {
        require(path[path.length - 1] == wNATIVE, 'AnyswapV3Router: INVALID_PATH');
        amounts = SushiswapV2Library.getAmountsOut(factory, amountIn, path);
        require(amounts[amounts.length - 1] >= amountOutMin, 'AnyswapV3Router: INSUFFICIENT_OUTPUT_AMOUNT');
        _anySwapIn(txs, path[0],  SushiswapV2Library.pairFor(factory, path[0], path[1]), amounts[0], fromChainID);
        _swap(amounts, path, address(this));
        IwNATIVE(wNATIVE).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferNative(to, amounts[amounts.length - 1]);
    }

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

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

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

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

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_wNATIVE","type":"address"},{"internalType":"address","name":"_mpc","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"txhash","type":"bytes32"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"LogAnySwapIn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"LogAnySwapOut","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"LogAnySwapTradeTokensForNative","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromChainID","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"LogAnySwapTradeTokensForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldMPC","type":"address"},{"indexed":true,"internalType":"address","name":"newMPC","type":"address"},{"indexed":true,"internalType":"uint256","name":"effectiveTime","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"chainID","type":"uint256"}],"name":"LogChangeMPC","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldRouter","type":"address"},{"indexed":true,"internalType":"address","name":"newRouter","type":"address"},{"indexed":false,"internalType":"uint256","name":"chainID","type":"uint256"}],"name":"LogChangeRouter","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"anySwapFeeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"txs","type":"bytes32[]"},{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"fromChainIDs","type":"uint256[]"}],"name":"anySwapIn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txs","type":"bytes32"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"name":"anySwapIn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txs","type":"bytes32"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"name":"anySwapInAuto","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txs","type":"bytes32"},{"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"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"name":"anySwapInExactTokensForNative","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txs","type":"bytes32"},{"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"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"name":"anySwapInExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"txs","type":"bytes32"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"fromChainID","type":"uint256"}],"name":"anySwapInUnderlying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOut","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"},{"internalType":"address[]","name":"to","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"toChainIDs","type":"uint256[]"}],"name":"anySwapOut","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"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForNative","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"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForNativeUnderlying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"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"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForNativeUnderlyingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"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"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForNativeUnderlyingWithTransferPermit","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"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForTokens","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"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForTokensUnderlying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"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"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForTokensUnderlyingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"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"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutExactTokensForTokensUnderlyingWithTransferPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutUnderlying","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutUnderlyingWithPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"},{"internalType":"uint256","name":"toChainID","type":"uint256"}],"name":"anySwapOutUnderlyingWithTransferPermit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cID","outputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newMPC","type":"address"}],"name":"changeMPC","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"newVault","type":"address"}],"name":"changeVault","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":[],"name":"mpc","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"wNATIVE","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040523480156200001157600080fd5b506040516200499c3803806200499c833981016040819052620000349162000095565b600180546001600160a01b039092166001600160a01b0319909216919091179055426002556001600160601b0319606092831b8116608052911b1660a052620000de565b80516001600160a01b03811681146200009057600080fd5b919050565b600080600060608486031215620000aa578283fd5b620000b58462000078565b9250620000c56020850162000078565b9150620000d56040850162000078565b90509250925092565b60805160601c60a05160601c61484c62000150600039600081816101ec01528181611499015281816116380152611e3d015260008181610aef01528181610cda01528181610dc8015281816115230152818161254b015281816128a7015281816133220152613380015261484c6000f3fe6080604052600436106101dc5760003560e01c8063825bb13c11610102578063ad615dec11610095578063d8b9f61011610064578063d8b9f610146105aa578063dcfb77b1146105ca578063edbdf5e2146105ea578063f75c26641461060a57610229565b8063ad615dec14610535578063c45a015514610555578063c8e174f61461056a578063d06ca61f1461058a57610229565b80638fd903f5116100d15780638fd903f5146104be57806399a2f2d7146104e057806399cd84b5146104f55780639aa1ac611461051557610229565b8063825bb13c1461043e57806385f8c2591461045e57806387cc6e2f1461047e5780638d7d3eea1461049e57610229565b80632fc1e7281161017a57806352a397d51161014957806352a397d5146103be5780635b7b018c146103de57806365782f56146103fe5780636a4539721461041e57610229565b80632fc1e728146103315780633f88de8914610351578063456862aa146103715780634d93bb941461039e57610229565b80631b91a934116101b65780631b91a934146102a45780631f00ca74146102c4578063241dc2df146102f157806325121b761461031157610229565b80630175b1c41461022e578063054d50d41461024e5780630bb572031461028457610229565b3661022957336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461022757634e487b7160e01b600052600160045260246000fd5b005b600080fd5b34801561023a57600080fd5b50610227610249366004613d21565b61061f565b34801561025a57600080fd5b5061026e610269366004613fa8565b61080b565b60405161027b9190614660565b60405180910390f35b34801561029057600080fd5b5061022761029f366004613f2d565b610820565b3480156102b057600080fd5b506102276102bf3660046139aa565b610954565b3480156102d057600080fd5b506102e46102df366004613e5b565b610ae8565b60405161027b91906141f3565b3480156102fd57600080fd5b5061022761030c366004613a34565b610b1e565b34801561031d57600080fd5b5061022761032c366004613c16565b610b31565b34801561033d57600080fd5b506102e461034c366004613d72565b610c7a565b34801561035d57600080fd5b5061022761036c366004613d21565b610ed3565b34801561037d57600080fd5b5061039161038c366004613972565b610fa0565b60405161027b9190614237565b3480156103aa57600080fd5b506102276103b9366004613aa4565b61107e565b3480156103ca57600080fd5b506102e46103d9366004613d72565b611434565b3480156103ea57600080fd5b506103916103f9366004613933565b611726565b34801561040a57600080fd5b50610227610419366004613f2d565b611829565b34801561042a57600080fd5b50610227610439366004613f2d565b611938565b34801561044a57600080fd5b50610227610459366004613d21565b611b16565b34801561046a57600080fd5b5061026e610479366004613fa8565b611b62565b34801561048a57600080fd5b50610227610499366004613a79565b611b6f565b3480156104aa57600080fd5b506102276104b93660046139aa565b611cb5565b3480156104ca57600080fd5b506104d3611e3b565b60405161027b919061406c565b3480156104ec57600080fd5b5061026e611e5f565b34801561050157600080fd5b50610227610510366004613aa4565b611e63565b34801561052157600080fd5b50610227610530366004613aa4565b6121e0565b34801561054157600080fd5b5061026e610550366004613fa8565b61253c565b34801561056157600080fd5b506104d3612549565b34801561057657600080fd5b50610227610585366004613aa4565b61256d565b34801561059657600080fd5b506102e46105a5366004613e5b565b6128a0565b3480156105b657600080fd5b506102276105c5366004613f2d565b6128cd565b3480156105d657600080fd5b506102276105e5366004613b57565b6129e9565b3480156105f657600080fd5b50610227610605366004613a34565b612ac7565b34801561061657600080fd5b506104d3612bd1565b610627612bd1565b6001600160a01b0316336001600160a01b0316146106605760405162461bcd60e51b815260040161065790614452565b60405180910390fd5b61066d8585858585612bff565b60008490506000816001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156106ad57600080fd5b505afa1580156106c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e59190613956565b90506001600160a01b0381161580159061077b57506040516370a0823160e01b815284906001600160a01b038316906370a0823190610728908a9060040161406c565b60206040518083038186803b15801561074057600080fd5b505afa158015610754573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107789190613e43565b10155b1561080257604051620e75bb60e21b81526001600160a01b038316906239d6ec906107ae908890889082906004016140fe565b602060405180830381600087803b1580156107c857600080fd5b505af11580156107dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108009190613e43565b505b50505050505050565b6000610818848484612cde565b949350505050565b81428110156108415760405162461bcd60e51b815260040161065790614575565b8585600081811061086257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906108779190613933565b6001600160a01b0316639dc29fac338a6040518363ffffffff1660e01b81526004016108a49291906140e5565b602060405180830381600087803b1580156108be57600080fd5b505af11580156108d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f69190613d01565b506001600160a01b038416337ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b388888c8c61092f611e5f565b8960405161094296959493929190614121565b60405180910390a35050505050505050565b876001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561098d57600080fd5b505afa1580156109a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c59190613956565b6001600160a01b031663605629d68a8a89898989896040518863ffffffff1660e01b81526004016109fc97969594939291906140a4565b602060405180830381600087803b158015610a1657600080fd5b505af1158015610a2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4e9190613d01565b50604051630bebbf4d60e41b81526001600160a01b0389169063bebbf4d090610a7d9089908d90600401614669565b602060405180830381600087803b158015610a9757600080fd5b505af1158015610aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acf9190613e43565b50610add8989898985612d78565b505050505050505050565b6060610b157f00000000000000000000000000000000000000000000000000000000000000008484612e51565b90505b92915050565b610b2b3385858585612d78565b50505050565b610b39612bd1565b6001600160a01b0316336001600160a01b031614610b695760405162461bcd60e51b815260040161065790614452565b60005b87811015610c6d57610c5b8b8b83818110610b9757634e487b7160e01b600052603260045260246000fd5b905060200201358a8a84818110610bbe57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610bd39190613933565b898985818110610bf357634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610c089190613933565b888886818110610c2857634e487b7160e01b600052603260045260246000fd5b90506020020135878787818110610c4f57634e487b7160e01b600052603260045260246000fd5b90506020020135612bff565b80610c6581614797565b915050610b6c565b5050505050505050505050565b6060610c84612bd1565b6001600160a01b0316336001600160a01b031614610cb45760405162461bcd60e51b815260040161065790614452565b8242811015610cd55760405162461bcd60e51b815260040161065790614575565b610d337f00000000000000000000000000000000000000000000000000000000000000008a89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061300b92505050565b9150878260018451610d45919061473d565b81518110610d6357634e487b7160e01b600052603260045260246000fd5b60200260200101511015610d895760405162461bcd60e51b8152600401610657906143bf565b610e878a88886000818110610dae57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610dc39190613933565b610e587f00000000000000000000000000000000000000000000000000000000000000008b8b6000818110610e0857634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610e1d9190613933565b8c8c6001818110610e3e57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610e539190613933565b6131a5565b85600081518110610e7957634e487b7160e01b600052603260045260246000fd5b602002602001015187612bff565b610ec6828888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a9250613215915050565b5098975050505050505050565b610edb612bd1565b6001600160a01b0316336001600160a01b031614610f0b5760405162461bcd60e51b815260040161065790614452565b610f188585858585612bff565b604051620e75bb60e21b81526001600160a01b038516906239d6ec90610f46908690869082906004016140fe565b602060405180830381600087803b158015610f6057600080fd5b505af1158015610f74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f989190613e43565b505050505050565b6000610faa612bd1565b6001600160a01b0316336001600160a01b031614610fda5760405162461bcd60e51b815260040161065790614452565b6001600160a01b0382166110005760405162461bcd60e51b8152600401610657906142f0565b6040516360e232a960e01b81526001600160a01b038416906360e232a99061102c90859060040161406c565b602060405180830381600087803b15801561104657600080fd5b505af115801561105a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b159190613d01565b844281101561109f5760405162461bcd60e51b815260040161065790614575565b6000898960008181106110c257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906110d79190613933565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561110f57600080fd5b505afa158015611123573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111479190613956565b9050806001600160a01b031663d505accf8e308f8b8b8b8b6040518863ffffffff1660e01b815260040161118197969594939291906140a4565b600060405180830381600087803b15801561119b57600080fd5b505af11580156111af573d6000803e3d6000fd5b505050506111f4818e8c8c60008181106111d957634e487b7160e01b600052603260045260246000fd5b90506020020160208101906111ee9190613933565b8f61344f565b8989600081811061121557634e487b7160e01b600052603260045260246000fd5b905060200201602081019061122a9190613933565b6001600160a01b031663bebbf4d08d8f6040518363ffffffff1660e01b8152600401611257929190614669565b602060405180830381600087803b15801561127157600080fd5b505af1158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a99190613e43565b50898960008181106112cb57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906112e09190613933565b6001600160a01b0316639dc29fac8e8e6040518363ffffffff1660e01b815260040161130d9291906140e5565b602060405180830381600087803b15801561132757600080fd5b505af115801561133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135f9190613d01565b5060008a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050905060008e905060008a905060008f905060008f905060006113c4611e5f565b90506000899050846001600160a01b0316866001600160a01b03167f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f4898787878760405161141695949392919061418b565b60405180910390a35050505050505050505050505050505050505050565b606061143e612bd1565b6001600160a01b0316336001600160a01b03161461146e5760405162461bcd60e51b815260040161065790614452565b824281101561148f5760405162461bcd60e51b815260040161065790614575565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001687876114c660018261473d565b8181106114e357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906114f89190613933565b6001600160a01b03161461151e5760405162461bcd60e51b8152600401610657906144be565b61157c7f00000000000000000000000000000000000000000000000000000000000000008a89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061300b92505050565b915087826001845161158e919061473d565b815181106115ac57634e487b7160e01b600052603260045260246000fd5b602002602001015110156115d25760405162461bcd60e51b8152600401610657906144f5565b6115f78a88886000818110610dae57634e487b7160e01b600052603260045260246000fd5b61163682888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613215915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551611674919061473d565b8151811061169257634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016116b69190614660565b600060405180830381600087803b1580156116d057600080fd5b505af11580156116e4573d6000803e3d6000fd5b50505050610ec68583600185516116fb919061473d565b8151811061171957634e487b7160e01b600052603260045260246000fd5b6020026020010151613537565b6000611730612bd1565b6001600160a01b0316336001600160a01b0316146117605760405162461bcd60e51b815260040161065790614452565b6001600160a01b0382166117865760405162461bcd60e51b8152600401610657906142f0565b61178e612bd1565b600080546001600160a01b03199081166001600160a01b0393841617909155600180549091169184169190911790556117ca426202a3006146e6565b60028190556001546000546001600160a01b0391821691167fcda32bc39904597666dfa9f9c845714756e1ffffad55b52e0d344673a219812161180b611e5f565b6040516118189190614660565b60405180910390a45060015b919050565b814281101561184a5760405162461bcd60e51b815260040161065790614575565b8585600081811061186b57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906118809190613933565b6001600160a01b0316639dc29fac338a6040518363ffffffff1660e01b81526004016118ad9291906140e5565b602060405180830381600087803b1580156118c757600080fd5b505af11580156118db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ff9190613d01565b506001600160a01b038416337f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f488888c8c61092f611e5f565b81428110156119595760405162461bcd60e51b815260040161065790614575565b611a3f8686600081811061197d57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906119929190613933565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156119ca57600080fd5b505afa1580156119de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a029190613956565b3388886000818110611a2457634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611a399190613933565b8b61344f565b85856000818110611a6057634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611a759190613933565b6001600160a01b031663bebbf4d089336040518363ffffffff1660e01b8152600401611aa2929190614669565b602060405180830381600087803b158015611abc57600080fd5b505af1158015611ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af49190613e43565b508585600081811061186b57634e487b7160e01b600052603260045260246000fd5b611b1e612bd1565b6001600160a01b0316336001600160a01b031614611b4e5760405162461bcd60e51b815260040161065790614452565b611b5b8585858585612bff565b5050505050565b60006108188484846135c9565b611b77612bd1565b6001600160a01b0316336001600160a01b031614611ba75760405162461bcd60e51b815260040161065790614452565b6000611bb1612bd1565b6040516340c10f1960e01b81529091506001600160a01b038416906340c10f1990611be290849086906004016140e5565b602060405180830381600087803b158015611bfc57600080fd5b505af1158015611c10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c349190613d01565b50604051620e75bb60e21b81526001600160a01b038416906239d6ec90611c63908490869082906004016140fe565b602060405180830381600087803b158015611c7d57600080fd5b505af1158015611c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2b9190613e43565b6000886001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611cf057600080fd5b505afa158015611d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d289190613956565b60405163d505accf60e01b81529091506001600160a01b0382169063d505accf90611d63908d9030908c908c908c908c908c906004016140a4565b600060405180830381600087803b158015611d7d57600080fd5b505af1158015611d91573d6000803e3d6000fd5b50505050611da1818b8b8a61344f565b604051630bebbf4d60e41b81526001600160a01b038a169063bebbf4d090611dcf908a908e90600401614669565b602060405180830381600087803b158015611de957600080fd5b505af1158015611dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e219190613e43565b50611e2f8a8a8a8a86612d78565b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b4690565b8442811015611e845760405162461bcd60e51b815260040161065790614575565b600089896000818110611ea757634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611ebc9190613933565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611ef457600080fd5b505afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c9190613956565b9050806001600160a01b031663d505accf8e308f8b8b8b8b6040518863ffffffff1660e01b8152600401611f6697969594939291906140a4565b600060405180830381600087803b158015611f8057600080fd5b505af1158015611f94573d6000803e3d6000fd5b50505050611fbe818e8c8c60008181106111d957634e487b7160e01b600052603260045260246000fd5b89896000818110611fdf57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611ff49190613933565b6001600160a01b031663bebbf4d08d8f6040518363ffffffff1660e01b8152600401612021929190614669565b602060405180830381600087803b15801561203b57600080fd5b505af115801561204f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120739190613e43565b508989600081811061209557634e487b7160e01b600052603260045260246000fd5b90506020020160208101906120aa9190613933565b6001600160a01b0316639dc29fac8e8e6040518363ffffffff1660e01b81526004016120d79291906140e5565b602060405180830381600087803b1580156120f157600080fd5b505af1158015612105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121299190613d01565b5060008a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050905060008e905060008a905060008f905060008f9050600061218e611e5f565b90506000899050846001600160a01b0316866001600160a01b03167ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b3898787878760405161141695949392919061418b565b84428110156122015760405162461bcd60e51b815260040161065790614575565b8888600081811061222257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906122379190613933565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561226f57600080fd5b505afa158015612283573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a79190613956565b6001600160a01b031663605629d68d8b8b60008181106122d757634e487b7160e01b600052603260045260246000fd5b90506020020160208101906122ec9190613933565b8e8a8a8a8a6040518863ffffffff1660e01b815260040161231397969594939291906140a4565b602060405180830381600087803b15801561232d57600080fd5b505af1158015612341573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123659190613d01565b508888600081811061238757634e487b7160e01b600052603260045260246000fd5b905060200201602081019061239c9190613933565b6001600160a01b031663bebbf4d08c8e6040518363ffffffff1660e01b81526004016123c9929190614669565b602060405180830381600087803b1580156123e357600080fd5b505af11580156123f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241b9190613e43565b508888600081811061243d57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906124529190613933565b6001600160a01b0316639dc29fac8d8d6040518363ffffffff1660e01b815260040161247f9291906140e5565b602060405180830381600087803b15801561249957600080fd5b505af11580156124ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d19190613d01565b50866001600160a01b03168c6001600160a01b03167ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b38b8b8f8f612513611e5f565b8960405161252696959493929190614121565b60405180910390a3505050505050505050505050565b600061081884848461365d565b7f000000000000000000000000000000000000000000000000000000000000000081565b844281101561258e5760405162461bcd60e51b815260040161065790614575565b888860008181106125af57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906125c49190613933565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156125fc57600080fd5b505afa158015612610573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126349190613956565b6001600160a01b031663605629d68d8b8b600081811061266457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906126799190613933565b8e8a8a8a8a6040518863ffffffff1660e01b81526004016126a097969594939291906140a4565b602060405180830381600087803b1580156126ba57600080fd5b505af11580156126ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f29190613d01565b508888600081811061271457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906127299190613933565b6001600160a01b031663bebbf4d08c8e6040518363ffffffff1660e01b8152600401612756929190614669565b602060405180830381600087803b15801561277057600080fd5b505af1158015612784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a89190613e43565b50888860008181106127ca57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906127df9190613933565b6001600160a01b0316639dc29fac8d8d6040518363ffffffff1660e01b815260040161280c9291906140e5565b602060405180830381600087803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285e9190613d01565b50866001600160a01b03168c6001600160a01b03167f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f48b8b8f8f612513611e5f565b6060610b157f0000000000000000000000000000000000000000000000000000000000000000848461300b565b81428110156128ee5760405162461bcd60e51b815260040161065790614575565b6129128686600081811061197d57634e487b7160e01b600052603260045260246000fd5b8585600081811061293357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906129489190613933565b6001600160a01b031663bebbf4d089336040518363ffffffff1660e01b8152600401612975929190614669565b602060405180830381600087803b15801561298f57600080fd5b505af11580156129a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c79190613e43565b508585600081811061086257634e487b7160e01b600052603260045260246000fd5b60005b87811015610add57612ab5338a8a84818110612a1857634e487b7160e01b600052603260045260246000fd5b9050602002016020810190612a2d9190613933565b898985818110612a4d57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190612a629190613933565b888886818110612a8257634e487b7160e01b600052603260045260246000fd5b90506020020135878787818110612aa957634e487b7160e01b600052603260045260246000fd5b90506020020135612d78565b80612abf81614797565b9150506129ec565b612b43846001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015612b0357600080fd5b505afa158015612b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3b9190613956565b33868561344f565b604051630bebbf4d60e41b81526001600160a01b0385169063bebbf4d090612b719085903390600401614669565b602060405180830381600087803b158015612b8b57600080fd5b505af1158015612b9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc39190613e43565b50610b2b3385858585612d78565b60006002544210612bee57506001546001600160a01b0316612bfc565b506000546001600160a01b03165b90565b6040516340c10f1960e01b81526001600160a01b038516906340c10f1990612c2d90869086906004016140e5565b602060405180830381600087803b158015612c4757600080fd5b505af1158015612c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7f9190613d01565b50826001600160a01b0316846001600160a01b0316867faac9ce45fe3adf5143598c4f18a369591a20a3384aedaf1b525d29127e1fcd558585612cc0611e5f565b604051612ccf939291906146d0565b60405180910390a45050505050565b6000808411612cff5760405162461bcd60e51b8152600401610657906145ac565b600083118015612d0f5750600082115b612d2b5760405162461bcd60e51b815260040161065790614242565b6000612d39856103e56136bf565b90506000612d4782856136bf565b90506000612d6183612d5b886103e86136bf565b906136ff565b9050612d6d81836146fe565b979650505050505050565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac90612da690889086906004016140e5565b602060405180830381600087803b158015612dc057600080fd5b505af1158015612dd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df89190613d01565b50826001600160a01b0316856001600160a01b0316856001600160a01b03167f97116cf6cd4f6412bb47914d6db18da9e16ab2142f543b86e207c24fbd16b23a85612e41611e5f565b86604051612ccf939291906146d0565b6060600282511015612e755760405162461bcd60e51b81526004016106579061462b565b815167ffffffffffffffff811115612e9d57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612ec6578160200160208202803683370190505b509050828160018351612ed9919061473d565b81518110612ef757634e487b7160e01b600052603260045260246000fd5b602002602001018181525050600060018351612f13919061473d565b90505b801561300357600080612f828786612f2f60018761473d565b81518110612f4d57634e487b7160e01b600052603260045260246000fd5b6020026020010151878681518110612f7557634e487b7160e01b600052603260045260246000fd5b602002602001015161372d565b91509150612fb8848481518110612fa957634e487b7160e01b600052603260045260246000fd5b602002602001015183836135c9565b84612fc460018661473d565b81518110612fe257634e487b7160e01b600052603260045260246000fd5b60200260200101818152505050508080612ffb90614780565b915050612f16565b509392505050565b606060028251101561302f5760405162461bcd60e51b81526004016106579061462b565b815167ffffffffffffffff81111561305757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015613080578160200160208202803683370190505b50905082816000815181106130a557634e487b7160e01b600052603260045260246000fd5b60200260200101818152505060005b600183516130c2919061473d565b81101561300357600080613124878685815181106130f057634e487b7160e01b600052603260045260246000fd5b60200260200101518786600161310691906146e6565b81518110612f7557634e487b7160e01b600052603260045260246000fd5b9150915061315a84848151811061314b57634e487b7160e01b600052603260045260246000fd5b60200260200101518383612cde565b846131668560016146e6565b8151811061318457634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505050808061319d90614797565b9150506130b4565b60008060006131b48585613806565b915091508582826040516020016131cc929190613fd3565b604051602081830303815290604052805190602001206040516020016131f3929190614016565b60408051601f1981840301815291905280516020909101209695505050505050565b60005b60018351613226919061473d565b811015610b2b5760008084838151811061325057634e487b7160e01b600052603260045260246000fd5b60200260200101518584600161326691906146e6565b8151811061328457634e487b7160e01b600052603260045260246000fd5b602002602001015191509150600061329c8383613806565b5090506000876132ad8660016146e6565b815181106132cb57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146132f9578260006132fd565b6000835b91509150600060028a51613311919061473d565b881061331d5788613379565b6133797f0000000000000000000000000000000000000000000000000000000000000000878c61334e8c60026146e6565b8151811061336c57634e487b7160e01b600052603260045260246000fd5b60200260200101516131a5565b90506133a67f000000000000000000000000000000000000000000000000000000000000000088886131a5565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156133e3576020820181803683370190505b506040518563ffffffff1660e01b81526004016134039493929190614680565b600060405180830381600087803b15801561341d57600080fd5b505af1158015613431573d6000803e3d6000fd5b5050505050505050505050808061344790614797565b915050613218565b600080856001600160a01b03166323b872dd86868660405160240161347693929190614080565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516134af9190613ffa565b6000604051808303816000865af19150503d80600081146134ec576040519150601f19603f3d011682016040523d82523d6000602084013e6134f1565b606091505b509150915081801561351b57508051158061351b57508080602001905181019061351b9190613d01565b610f985760405162461bcd60e51b8152600401610657906145e7565b604080516000808252602082019092526001600160a01b0384169083906040516135619190613ffa565b60006040518083038185875af1925050503d806000811461359e576040519150601f19603f3d011682016040523d82523d6000602084013e6135a3565b606091505b50509050806135c45760405162461bcd60e51b81526004016106579061440c565b505050565b60008084116135ea5760405162461bcd60e51b815260040161065790614355565b6000831180156135fa5750600082115b6136165760405162461bcd60e51b815260040161065790614242565b600061362e6103e861362886886136bf565b906136bf565b905060006136426103e56136288689613890565b90506136536001612d5b83856146fe565b9695505050505050565b600080841161367e5760405162461bcd60e51b815260040161065790614540565b60008311801561368e5750600082115b6136aa5760405162461bcd60e51b815260040161065790614242565b826136b585846136bf565b61081891906146fe565b60008115806136e3575082826136d5818361471e565b92506136e190836146fe565b145b610b185760405162461bcd60e51b815260040161065790614327565b60008261370c83826146e6565b9150811015610b185760405162461bcd60e51b815260040161065790614391565b600080600061373c8585613806565b50905060008061374d8888886131a5565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561378557600080fd5b505afa158015613799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137bd9190613df5565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b0316146137f45780826137f7565b81815b90999098509650505050505050565b600080826001600160a01b0316846001600160a01b0316141561383b5760405162461bcd60e51b8152600401610657906142a9565b826001600160a01b0316846001600160a01b03161061385b57828461385e565b83835b90925090506001600160a01b0382166138895760405162461bcd60e51b815260040161065790614489565b9250929050565b60008261389d838261473d565b9150811115610b185760405162461bcd60e51b81526004016106579061427a565b8035611824816147de565b60008083601f8401126138da578081fd5b50813567ffffffffffffffff8111156138f1578182fd5b602083019150836020808302850101111561388957600080fd5b80516001600160701b038116811461182457600080fd5b803560ff8116811461182457600080fd5b600060208284031215613944578081fd5b813561394f816147de565b9392505050565b600060208284031215613967578081fd5b815161394f816147de565b60008060408385031215613984578081fd5b823561398f816147de565b9150602083013561399f816147de565b809150509250929050565b60008060008060008060008060006101208a8c0312156139c8578485fd5b89356139d3816147de565b985060208a01356139e3816147de565b975060408a01356139f3816147de565b965060608a0135955060808a01359450613a0f60a08b01613922565b935060c08a0135925060e08a013591506101008a013590509295985092959850929598565b60008060008060808587031215613a49578384fd5b8435613a54816147de565b93506020850135613a64816147de565b93969395505050506040820135916060013590565b60008060408385031215613a8b578182fd5b8235613a96816147de565b946020939093013593505050565b60008060008060008060008060008060006101408c8e031215613ac5578182fd5b8b35613ad0816147de565b9a5060208c0135995060408c0135985060608c013567ffffffffffffffff811115613af9578283fd5b613b058e828f016138c9565b90995097505060808c0135613b19816147de565b955060a08c01359450613b2e60c08d01613922565b935060e08c013592506101008c013591506101208c013590509295989b509295989b9093969950565b6000806000806000806000806080898b031215613b72578182fd5b883567ffffffffffffffff80821115613b89578384fd5b613b958c838d016138c9565b909a50985060208b0135915080821115613bad578384fd5b613bb98c838d016138c9565b909850965060408b0135915080821115613bd1578384fd5b613bdd8c838d016138c9565b909650945060608b0135915080821115613bf5578384fd5b50613c028b828c016138c9565b999c989b5096995094979396929594505050565b60008060008060008060008060008060a08b8d031215613c34578384fd5b8a3567ffffffffffffffff80821115613c4b578586fd5b613c578e838f016138c9565b909c509a5060208d0135915080821115613c6f578586fd5b613c7b8e838f016138c9565b909a50985060408d0135915080821115613c93578586fd5b613c9f8e838f016138c9565b909850965060608d0135915080821115613cb7578586fd5b613cc38e838f016138c9565b909650945060808d0135915080821115613cdb578384fd5b50613ce88d828e016138c9565b915080935050809150509295989b9194979a5092959850565b600060208284031215613d12578081fd5b8151801515811461394f578182fd5b600080600080600060a08688031215613d38578283fd5b853594506020860135613d4a816147de565b93506040860135613d5a816147de565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b031215613d8d578182fd5b883597506020890135965060408901359550606089013567ffffffffffffffff811115613db8578283fd5b613dc48b828c016138c9565b9096509450506080890135613dd8816147de565b979a969950949793969295929450505060a08201359160c0013590565b600080600060608486031215613e09578081fd5b613e128461390b565b9250613e206020850161390b565b9150604084015163ffffffff81168114613e38578182fd5b809150509250925092565b600060208284031215613e54578081fd5b5051919050565b60008060408385031215613e6d578182fd5b8235915060208084013567ffffffffffffffff80821115613e8c578384fd5b818601915086601f830112613e9f578384fd5b813581811115613eb157613eb16147c8565b838102604051601f19603f83011681018181108582111715613ed557613ed56147c8565b604052828152858101935084860182860187018b1015613ef3578788fd5b8795505b83861015613f1c57613f08816138be565b855260019590950194938601938601613ef7565b508096505050505050509250929050565b600080600080600080600060c0888a031215613f47578081fd5b8735965060208801359550604088013567ffffffffffffffff811115613f6b578182fd5b613f778a828b016138c9565b9096509450506060880135613f8b816147de565b969995985093969295946080840135945060a09093013592915050565b600080600060608486031215613fbc578081fd5b505081359360208301359350604090920135919050565b6bffffffffffffffffffffffff19606093841b811682529190921b16601482015260280190565b6000825161400c818460208701614754565b9190910192915050565b6001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303603582015260550190565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b60a0808252810186905260008760c08301825b89811015614164578235614147816147de565b6001600160a01b0316825260209283019290910190600101614134565b50602084019790975250506040810193909352606083019190915260809091015292915050565b60a0808252865190820181905260009060209060c0840190828a01845b828110156141cd5781516001600160a01b0316845292840192908401906001016141a8565b505050908301969096525060408101939093526060830191909152608090910152919050565b6020808252825182820181905260009190848201906040850190845b8181101561422b5783518352928401929184019160010161420f565b50909695505050505050565b901515815260200190565b6020808252602a908201526000805160206147f78339815191526040820152695f4c495155494449545960b01b606082015260800190565b60208082526015908201527464732d6d6174682d7375622d756e646572666c6f7760581b604082015260600190565b60208082526027908201527f53757368697377617056324c6962726172793a204944454e544943414c5f41446040820152664452455353455360c81b606082015260800190565b6020808252601d908201527f416e79737761705633526f757465723a20616464726573732830783029000000604082015260600190565b60208082526014908201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604082015260600190565b6020808252602e908201526000805160206147f783398151915260408201526d17d3d55514155517d05353d5539560921b606082015260800190565b60208082526014908201527364732d6d6174682d6164642d6f766572666c6f7760601b604082015260600190565b6020808252602d908201527f5375736869737761705632526f757465723a20494e53554646494349454e545f60408201526c13d55514155517d05353d55395609a1b606082015260800190565b60208082526026908201527f5472616e7366657248656c7065723a204e41544956455f5452414e534645525f60408201526511905253115160d21b606082015260800190565b6020808252601a908201527f416e79737761705633526f757465723a20464f5242494444454e000000000000604082015260600190565b6020808252818101527f53757368697377617056324c6962726172793a205a45524f5f41444452455353604082015260600190565b6020808252601d908201527f416e79737761705633526f757465723a20494e56414c49445f50415448000000604082015260600190565b6020808252602b908201527f416e79737761705633526f757465723a20494e53554646494349454e545f4f5560408201526a1514155517d05353d5539560aa1b606082015260800190565b60208082526027908201526000805160206147f783398151915260408201526617d05353d5539560ca1b606082015260800190565b60208082526018908201527f416e79737761705633526f757465723a20455850495245440000000000000000604082015260600190565b6020808252602d908201526000805160206147f783398151915260408201526c17d25394155517d05353d55395609a1b606082015260800190565b60208082526024908201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416040820152631253115160e21b606082015260800190565b6020808252818101527f53757368697377617056324c6962726172793a20494e56414c49445f50415448604082015260600190565b90815260200190565b9182526001600160a01b0316602082015260400190565b600085825284602083015260018060a01b03841660408301526080606083015282518060808401526146b98160a0850160208701614754565b601f01601f19169190910160a00195945050505050565b9283526020830191909152604082015260600190565b600082198211156146f9576146f96147b2565b500190565b60008261471957634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614738576147386147b2565b500290565b60008282101561474f5761474f6147b2565b500390565b60005b8381101561476f578181015183820152602001614757565b83811115610b2b5750506000910152565b60008161478f5761478f6147b2565b506000190190565b60006000198214156147ab576147ab6147b2565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146147f357600080fd5b5056fe53757368697377617056324c6962726172793a20494e53554646494349454e54a26469706673582212201b3b5eed332d3cf385271e4302952bced8a897a420bb7ac2494f41ff570dd8d564736f6c63430008010033000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c4000000000000000000000000f20d962a6c8f70c731bd838a3a388d7d48fa6e150000000000000000000000002a038e100f8b85df21e4d44121bdbfe0c288a869

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

000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c4000000000000000000000000f20d962a6c8f70c731bd838a3a388d7d48fa6e150000000000000000000000002a038e100f8b85df21e4d44121bdbfe0c288a869

-----Decoded View---------------
Arg [0] : _factory (address): 0xc35dadb65012ec5796536bd9864ed8773abc74c4
Arg [1] : _wNATIVE (address): 0xf20d962a6c8f70c731bd838a3a388d7d48fa6e15
Arg [2] : _mpc (address): 0x2a038e100f8b85df21e4d44121bdbfe0c288a869

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c4
Arg [1] : 000000000000000000000000f20d962a6c8f70c731bd838a3a388d7d48fa6e15
Arg [2] : 0000000000000000000000002a038e100f8b85df21e4d44121bdbfe0c288a869


Deployed ByteCode Sourcemap

9049:17352:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9591:10;-1:-1:-1;;;;;9605:7:0;9591:21;;9584:29;;-1:-1:-1;;;9584:29:0;;;;;;;;;9049:17352;;;;;15060:448;;;;;;;;;;-1:-1:-1;15060:448:0;;;;;:::i;:::-;;:::i;25409:246::-;;;;;;;;;;-1:-1:-1;25409:246:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17063:416;;;;;;;;;;-1:-1:-1;17063:416:0;;;;;:::i;:::-;;:::i;13189:498::-;;;;;;;;;;-1:-1:-1;13189:498:0;;;;;:::i;:::-;;:::i;26161:237::-;;;;;;;;;;-1:-1:-1;26161:237:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11948:157::-;;;;;;;;;;-1:-1:-1;11948:157:0;;;;;:::i;:::-;;:::i;15789:319::-;;;;;;;;;;-1:-1:-1;15789:319:0;;;;;:::i;:::-;;:::i;20302:648::-;;;;;;;;;;-1:-1:-1;20302:648:0;;;;;:::i;:::-;;:::i;14690:245::-;;;;;;;;;;-1:-1:-1;14690:245:0;;;;;:::i;:::-;;:::i;11385:228::-;;;;;;;;;;-1:-1:-1;11385:228:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22275:1075::-;;;;;;;;;;-1:-1:-1;22275:1075:0;;;;;:::i;:::-;;:::i;24290:886::-;;;;;;;;;;-1:-1:-1;24290:886:0;;;;;:::i;:::-;;:::i;11020:357::-;;;;;;;;;;-1:-1:-1;11020:357:0;;;;;:::i;:::-;;:::i;21051:416::-;;;;;;;;;;-1:-1:-1;21051:416:0;;;;;:::i;:::-;;:::i;21568:606::-;;;;;;;;;;-1:-1:-1;21568:606:0;;;;;:::i;:::-;;:::i;14404:173::-;;;;;;;;;;-1:-1:-1;14404:173:0;;;;;:::i;:::-;;:::i;25663:245::-;;;;;;;;;;-1:-1:-1;25663:245:0;;;;;:::i;:::-;;:::i;15558:223::-;;;;;;;;;;-1:-1:-1;15558:223:0;;;;;:::i;:::-;;:::i;12575:606::-;;;;;;;;;;-1:-1:-1;12575:606:0;;;;;:::i;:::-;;:::i;9161:32::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10923:89::-;;;;;;;;;;;;;:::i;18287:1075::-;;;;;;;;;;-1:-1:-1;18287:1075:0;;;;;:::i;:::-;;:::i;19463:694::-;;;;;;;;;;-1:-1:-1;19463:694:0;;;;;:::i;:::-;;:::i;25220:181::-;;;;;;;;;;-1:-1:-1;25220:181:0;;;;;:::i;:::-;;:::i;9122:32::-;;;;;;;;;;;;;:::i;23451:694::-;;;;;;;;;;-1:-1:-1;23451:694:0;;;;;:::i;:::-;;:::i;25916:237::-;;;;;;;;;;-1:-1:-1;25916:237:0;;;;;:::i;:::-;;:::i;17580:606::-;;;;;;;;;;-1:-1:-1;17580:606:0;;;;;:::i;:::-;;:::i;13695:286::-;;;;;;;;;;-1:-1:-1;13695:286:0;;;;;:::i;:::-;;:::i;12230:337::-;;;;;;;;;;-1:-1:-1;12230:337:0;;;;;:::i;:::-;;:::i;10741:174::-;;;;;;;;;;;;;:::i;15060:448::-;10677:5;:3;:5::i;:::-;-1:-1:-1;;;;;10663:19:0;:10;-1:-1:-1;;;;;10663:19:0;;10655:58;;;;-1:-1:-1;;;10655:58:0;;;;;;;:::i;:::-;;;;;;;;;15182:47:::1;15193:3;15198:5;15205:2;15209:6;15217:11;15182:10;:47::i;:::-;15240:24;15282:5;15240:48;;15299:19;15321:9;-1:-1:-1::0;;;;;15321:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15299:44:::0;-1:-1:-1;;;;;;15358:25:0;::::1;::::0;;::::1;::::0;:75:::1;;-1:-1:-1::0;15387:36:0::1;::::0;-1:-1:-1;;;15387:36:0;;15427:6;;-1:-1:-1;;;;;15387:29:0;::::1;::::0;::::1;::::0;:36:::1;::::0;15417:5;;15387:36:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;15358:75;15354:147;;;15450:39;::::0;-1:-1:-1;;;15450:39:0;;-1:-1:-1;;;;;15450:23:0;::::1;::::0;::::1;::::0;:39:::1;::::0;15474:2;;15478:6;;15474:2;;15450:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15354:147;10724:1;;15060:448:::0;;;;;:::o;25409:246::-;25544:14;25583:64;25615:8;25625:9;25636:10;25583:31;:64::i;:::-;25576:71;25409:246;-1:-1:-1;;;;25409:246:0:o;17063:416::-;17290:8;9264:15;9252:8;:27;;9244:64;;;;-1:-1:-1;;;9244:64:0;;;;;;;:::i;:::-;17326:4:::1;;17331:1;17326:7;;;;;-1:-1:-1::0;;;17326:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17311:28:0::1;;17340:10;17352:8;17311:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;17377:94:0;::::1;17414:10;17377:94;17408:4:::0;;17430:8;17440:12;17454:5:::1;:3;:5::i;:::-;17461:9;17377:94;;;;;;;;;;;:::i;:::-;;;;;;;;17063:416:::0;;;;;;;;:::o;13189:498::-;13483:5;-1:-1:-1;;;;;13468:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13461:61:0;;13523:4;13529:5;13536:6;13544:8;13554:1;13557;13560;13461:101;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;13573:48:0;;-1:-1:-1;;;13573:48:0;;-1:-1:-1;;;;;13573:34:0;;;;;:48;;13608:6;;13616:4;;13573:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13632:47;13644:4;13650:5;13657:2;13661:6;13669:9;13632:11;:47::i;:::-;13189:498;;;;;;;;;:::o;26161:237::-;26287:21;26333:57;26365:7;26374:9;26385:4;26333:31;:57::i;:::-;26326:64;;26161:237;;;;;:::o;11948:157::-;12044:53;12056:10;12068:5;12075:2;12079:6;12087:9;12044:11;:53::i;:::-;11948:157;;;;:::o;15789:319::-;10677:5;:3;:5::i;:::-;-1:-1:-1;;;;;10663:19:0;:10;-1:-1:-1;;;;;10663:19:0;;10655:58;;;;-1:-1:-1;;;10655:58:0;;;;;;;:::i;:::-;15973:6:::1;15968:133;15985:17:::0;;::::1;15968:133;;;16024:65;16035:3;;16039:1;16035:6;;;;;-1:-1:-1::0;;;16035:6:0::1;;;;;;;;;;;;;;;16043;;16050:1;16043:9;;;;;-1:-1:-1::0;;;16043:9:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16054:2;;16057:1;16054:5;;;;;-1:-1:-1::0;;;16054:5:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16061:7;;16069:1;16061:10;;;;;-1:-1:-1::0;;;16061:10:0::1;;;;;;;;;;;;;;;16073:12;;16086:1;16073:15;;;;;-1:-1:-1::0;;;16073:15:0::1;;;;;;;;;;;;;;;16024:10;:65::i;:::-;16004:3:::0;::::1;::::0;::::1;:::i;:::-;;;;15968:133;;;;15789:319:::0;;;;;;;;;;:::o;20302:648::-;20579:21;10677:5;:3;:5::i;:::-;-1:-1:-1;;;;;10663:19:0;:10;-1:-1:-1;;;;;10663:19:0;;10655:58;;;;-1:-1:-1;;;10655:58:0;;;;;;;:::i;:::-;20560:8:::1;9264:15;9252:8;:27;;9244:64;;;;-1:-1:-1::0;;;9244:64:0::1;;;;;;;:::i;:::-;20623:57:::2;20656:7;20665:8;20675:4;;20623:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;20623:32:0::2;::::0;-1:-1:-1;;;20623:57:0:i:2;:::-;20613:67;;20730:12;20699:7;20724:1;20707:7;:14;:18;;;;:::i;:::-;20699:27;;;;;;-1:-1:-1::0;;;20699:27:0::2;;;;;;;;;;;;;;;:43;;20691:101;;;;-1:-1:-1::0;;;20691:101:0::2;;;;;;;:::i;:::-;20803:104;20814:3;20819:4;;20824:1;20819:7;;;;;-1:-1:-1::0;;;20819:7:0::2;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20828:53;20855:7;20864:4;;20869:1;20864:7;;;;;-1:-1:-1::0;;;20864:7:0::2;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20873:4;;20878:1;20873:7;;;;;-1:-1:-1::0;;;20873:7:0::2;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20828:26;:53::i;:::-;20883:7;20891:1;20883:10;;;;;;-1:-1:-1::0;;;20883:10:0::2;;;;;;;;;;;;;;;20895:11;20803:10;:104::i;:::-;20918:24;20924:7;20933:4;;20918:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;20939:2:0;;-1:-1:-1;20918:5:0::2;::::0;-1:-1:-1;;20918:24:0:i:2;:::-;10724:1:::1;20302:648:::0;;;;;;;;;;:::o;14690:245::-;10677:5;:3;:5::i;:::-;-1:-1:-1;;;;;10663:19:0;:10;-1:-1:-1;;;;;10663:19:0;;10655:58;;;;-1:-1:-1;;;10655:58:0;;;;;;;:::i;:::-;14818:47:::1;14829:3;14834:5;14841:2;14845:6;14853:11;14818:10;:47::i;:::-;14876:51;::::0;-1:-1:-1;;;14876:51:0;;-1:-1:-1;;;;;14876:35:0;::::1;::::0;::::1;::::0;:51:::1;::::0;14912:2;;14916:6;;14912:2;;14876:51:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14690:245:::0;;;;;:::o;11385:228::-;11463:4;10677:5;:3;:5::i;:::-;-1:-1:-1;;;;;10663:19:0;:10;-1:-1:-1;;;;;10663:19:0;;10655:58;;;;-1:-1:-1;;;10655:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11488:22:0;::::1;11480:64;;;;-1:-1:-1::0;;;11480:64:0::1;;;;;;;:::i;:::-;11562:43;::::0;-1:-1:-1;;;11562:43:0;;-1:-1:-1;;;;;11562:33:0;::::1;::::0;::::1;::::0;:43:::1;::::0;11596:8;;11562:43:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22275:1075::-:0;22603:8;9264:15;9252:8;:27;;9244:64;;;;-1:-1:-1;;;9244:64:0;;;;;;;:::i;:::-;22624:19:::1;22661:4;;22666:1;22661:7;;;;;-1:-1:-1::0;;;22661:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22646:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22624:58;;22700:11;-1:-1:-1::0;;;;;22693:26:0::1;;22720:4;22734;22741:8;22751;22761:1;22764;22767;22693:76;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22780:69;22812:11;22825:4;22831;;22836:1;22831:7;;;;;-1:-1:-1::0;;;22831:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22840:8;22780:31;:69::i;:::-;22875:4;;22880:1;22875:7;;;;;-1:-1:-1::0;;;22875:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22860:36:0::1;;22897:8;22907:4;22860:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22938:4;;22943:1;22938:7;;;;;-1:-1:-1::0;;;22938:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22923:28:0::1;;22952:4;22958:8;22923:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22989:22;23014:4;;22989:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23029:13;23045:4;23029:20;;23060:11;23074:2;23060:16;;23087:14;23104:8;23087:25;;23123:18;23144:12;23123:33;;23167:9;23179:5;:3;:5::i;:::-;23167:17;;23195:15;23213:9;23195:27;;23283:3;-1:-1:-1::0;;;;;23238:93:0::1;23276:5;-1:-1:-1::0;;;;;23238:93:0::1;;23269:5;23288:9;23299:13;23314:4;23320:10;23238:93;;;;;;;;;;:::i;:::-;;;;;;;;9319:1;;;;;;;;22275:1075:::0;;;;;;;;;;;;:::o;24290:886::-;24567:21;10677:5;:3;:5::i;:::-;-1:-1:-1;;;;;10663:19:0;:10;-1:-1:-1;;;;;10663:19:0;;10655:58;;;;-1:-1:-1;;;10655:58:0;;;;;;;:::i;:::-;24548:8:::1;9264:15;9252:8;:27;;9244:64;;;;-1:-1:-1::0;;;9244:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24634:7:0::2;24609:32;:4:::0;;24614:15:::2;24628:1;24609:4:::0;24614:15:::2;:::i;:::-;24609:21;;;;;-1:-1:-1::0;;;24609:21:0::2;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24609:32:0::2;;24601:74;;;;-1:-1:-1::0;;;24601:74:0::2;;;;;;;:::i;:::-;24696:57;24729:7;24738:8;24748:4;;24696:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;24696:32:0::2;::::0;-1:-1:-1;;;24696:57:0:i:2;:::-;24686:67;;24803:12;24772:7;24797:1;24780:7;:14;:18;;;;:::i;:::-;24772:27;;;;;;-1:-1:-1::0;;;24772:27:0::2;;;;;;;;;;;;;;;:43;;24764:99;;;;-1:-1:-1::0;;;24764:99:0::2;;;;;;;:::i;:::-;24874:105;24885:3;24890:4;;24895:1;24890:7;;;;;-1:-1:-1::0;;;24890:7:0::2;;;;;;;;24874:105;24990:35;24996:7;25005:4;;24990:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;25019:4:0::2;::::0;-1:-1:-1;24990:5:0::2;::::0;-1:-1:-1;;24990:35:0:i:2;:::-;25045:7;-1:-1:-1::0;;;;;25036:26:0::2;;25063:7;25088:1;25071:7;:14;:18;;;;:::i;:::-;25063:27;;;;;;-1:-1:-1::0;;;25063:27:0::2;;;;;;;;;;;;;;;25036:55;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;25102:66;25136:2;25140:7;25165:1;25148:7;:14;:18;;;;:::i;:::-;25140:27;;;;;;-1:-1:-1::0;;;25140:27:0::2;;;;;;;;;;;;;;;25102:33;:66::i;11020:357::-:0;11079:4;10677:5;:3;:5::i;:::-;-1:-1:-1;;;;;10663:19:0;:10;-1:-1:-1;;;;;10663:19:0;;10655:58;;;;-1:-1:-1;;;10655:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11104:20:0;::::1;11096:62;;;;-1:-1:-1::0;;;11096:62:0::1;;;;;;;:::i;:::-;11179:5;:3;:5::i;:::-;11169:7;:15:::0;;-1:-1:-1;;;;;;11169:15:0;;::::1;-1:-1:-1::0;;;;;11169:15:0;;::::1;;::::0;;;-1:-1:-1;11195:16:0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;11245:27:::1;:15;11263:9;11245:27;:::i;:::-;11222:20;:50:::0;;;11310:7:::1;::::0;::::1;11301::::0;-1:-1:-1;;;;;11310:7:0;;::::1;::::0;11301::::1;11288:59;11341:5;:3;:5::i;:::-;11288:59;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;11365:4:0::1;10724:1;11020:357:::0;;;:::o;21051:416::-;21278:8;9264:15;9252:8;:27;;9244:64;;;;-1:-1:-1;;;9244:64:0;;;;;;;:::i;:::-;21314:4:::1;;21319:1;21314:7;;;;;-1:-1:-1::0;;;21314:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21299:28:0::1;;21328:10;21340:8;21299:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;21365:94:0;::::1;21402:10;21365:94;21396:4:::0;;21418:8;21428:12;21442:5:::1;:3;:5::i;21568:606::-:0;21805:8;9264:15;9252:8;:27;;9244:64;;;;-1:-1:-1;;;9244:64:0;;;;;;;:::i;:::-;21826:100:::1;21873:4;;21878:1;21873:7;;;;;-1:-1:-1::0;;;21873:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21858:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21896:10;21908:4;;21913:1;21908:7;;;;;-1:-1:-1::0;;;21908:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21917:8;21826:31;:100::i;:::-;21952:4;;21957:1;21952:7;;;;;-1:-1:-1::0;;;21952:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21937:36:0::1;;21974:8;21984:10;21937:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22021:4;;22026:1;22021:7;;;;;-1:-1:-1::0;;;22021:7:0::1;;;;;;;;14404:173:::0;10677:5;:3;:5::i;:::-;-1:-1:-1;;;;;10663:19:0;:10;-1:-1:-1;;;;;10663:19:0;;10655:58;;;;-1:-1:-1;;;10655:58:0;;;;;;;:::i;:::-;14522:47:::1;14533:3;14538:5;14545:2;14549:6;14557:11;14522:10;:47::i;:::-;14404:173:::0;;;;;:::o;25663:245::-;25798:13;25836:64;25867:9;25878;25889:10;25836:30;:64::i;15558:223::-;10677:5;:3;:5::i;:::-;-1:-1:-1;;;;;10663:19:0;:10;-1:-1:-1;;;;;10663:19:0;;10655:58;;;;-1:-1:-1;;;10655:58:0;;;;;;;:::i;:::-;15636:12:::1;15651:5;:3;:5::i;:::-;15667:40;::::0;-1:-1:-1;;;15667:40:0;;15636:20;;-1:-1:-1;;;;;;15667:26:0;::::1;::::0;::::1;::::0;:40:::1;::::0;15636:20;;15700:6;;15667:40:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;15718:55:0::1;::::0;-1:-1:-1;;;15718:55:0;;-1:-1:-1;;;;;15718:35:0;::::1;::::0;::::1;::::0;:55:::1;::::0;15754:4;;15760:6;;15754:4;;15718:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12575:606::-:0;12839:19;12876:5;-1:-1:-1;;;;;12861:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12906:74;;-1:-1:-1;;;12906:74:0;;12839:56;;-1:-1:-1;;;;;;12906:26:0;;;;;:74;;12933:4;;12947;;12954:6;;12962:8;;12972:1;;12975;;12978;;12906:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12991:65;13023:11;13036:4;13042:5;13049:6;12991:31;:65::i;:::-;13067:48;;-1:-1:-1;;;13067:48:0;;-1:-1:-1;;;;;13067:34:0;;;;;:48;;13102:6;;13110:4;;13067:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13126:47;13138:4;13144:5;13151:2;13155:6;13163:9;13126:11;:47::i;:::-;12575:606;;;;;;;;;;:::o;9161:32::-;;;:::o;10923:89::-;10995:9;;10988:17::o;18287:1075::-;18615:8;9264:15;9252:8;:27;;9244:64;;;;-1:-1:-1;;;9244:64:0;;;;;;;:::i;:::-;18636:19:::1;18673:4;;18678:1;18673:7;;;;;-1:-1:-1::0;;;18673:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18658:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18636:58;;18712:11;-1:-1:-1::0;;;;;18705:26:0::1;;18732:4;18746;18753:8;18763;18773:1;18776;18779;18705:76;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18792:69;18824:11;18837:4;18843;;18848:1;18843:7;;;;;-1:-1:-1::0;;;18843:7:0::1;;;;;;;;18792:69;18887:4;;18892:1;18887:7;;;;;-1:-1:-1::0;;;18887:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18872:36:0::1;;18909:8;18919:4;18872:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18950:4;;18955:1;18950:7;;;;;-1:-1:-1::0;;;18950:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18935:28:0::1;;18964:4;18970:8;18935:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19001:22;19026:4;;19001:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19041:13;19057:4;19041:20;;19072:11;19086:2;19072:16;;19099:14;19116:8;19099:25;;19135:18;19156:12;19135:33;;19179:9;19191:5;:3;:5::i;:::-;19179:17;;19207:15;19225:9;19207:27;;19295:3;-1:-1:-1::0;;;;;19250:93:0::1;19288:5;-1:-1:-1::0;;;;;19250:93:0::1;;19281:5;19300:9;19311:13;19326:4;19332:10;19250:93;;;;;;;;;;:::i;19463:694::-:0;19799:8;9264:15;9252:8;:27;;9244:64;;;;-1:-1:-1;;;9244:64:0;;;;;;;:::i;:::-;19842:4:::1;;19847:1;19842:7;;;;;-1:-1:-1::0;;;19842:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19827:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19820:63:0::1;;19884:4;19890;;19895:1;19890:7;;;;;-1:-1:-1::0;;;19890:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19899:8;19909;19919:1;19922;19925;19820:107;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19953:4;;19958:1;19953:7;;;;;-1:-1:-1::0;;;19953:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19938:36:0::1;;19975:8;19985:4;19938:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20016:4;;20021:1;20016:7;;;;;-1:-1:-1::0;;;20016:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;20001:28:0::1;;20030:4;20036:8;20001:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20104:2;-1:-1:-1::0;;;;;20061:88:0::1;20098:4;-1:-1:-1::0;;;;;20061:88:0::1;;20092:4;;20108:8;20118:12;20132:5;:3;:5::i;:::-;20139:9;20061:88;;;;;;;;;;;:::i;:::-;;;;;;;;19463:694:::0;;;;;;;;;;;;:::o;25220:181::-;25308:12;25340:53;25365:7;25374:8;25384;25340:24;:53::i;9122:32::-;;;:::o;23451:694::-;23787:8;9264:15;9252:8;:27;;9244:64;;;;-1:-1:-1;;;9244:64:0;;;;;;;:::i;:::-;23830:4:::1;;23835:1;23830:7;;;;;-1:-1:-1::0;;;23830:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23815:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23808:63:0::1;;23872:4;23878;;23883:1;23878:7;;;;;-1:-1:-1::0;;;23878:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23887:8;23897;23907:1;23910;23913;23808:107;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23941:4;;23946:1;23941:7;;;;;-1:-1:-1::0;;;23941:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23926:36:0::1;;23963:8;23973:4;23926:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24004:4;;24009:1;24004:7;;;;;-1:-1:-1::0;;;24004:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23989:28:0::1;;24018:4;24024:8;23989:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24092:2;-1:-1:-1::0;;;;;24049:88:0::1;24086:4;-1:-1:-1::0;;;;;24049:88:0::1;;24080:4;;24096:8;24106:12;24120:5;:3;:5::i;25916:237::-:0;26042:21;26088:57;26121:7;26130:8;26140:4;26088:32;:57::i;17580:606::-;17817:8;9264:15;9252:8;:27;;9244:64;;;;-1:-1:-1;;;9244:64:0;;;;;;;:::i;:::-;17838:100:::1;17885:4;;17890:1;17885:7;;;;;-1:-1:-1::0;;;17885:7:0::1;;;;;;;;17838:100;17964:4;;17969:1;17964:7;;;;;-1:-1:-1::0;;;17964:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17949:36:0::1;;17986:8;17996:10;17949:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18033:4;;18038:1;18033:7;;;;;-1:-1:-1::0;;;18033:7:0::1;;;;;;;;13695:286:::0;13843:6;13838:136;13855:17;;;13838:136;;;13894:68;13906:10;13918:6;;13925:1;13918:9;;;;;-1:-1:-1;;;13918:9:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13929:2;;13932:1;13929:5;;;;;-1:-1:-1;;;13929:5:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13936:7;;13944:1;13936:10;;;;;-1:-1:-1;;;13936:10:0;;;;;;;;;;;;;;;13948;;13959:1;13948:13;;;;;-1:-1:-1;;;13948:13:0;;;;;;;;;;;;;;;13894:11;:68::i;:::-;13874:3;;;;:::i;:::-;;;;13838:136;;12230:337;12336:94;12383:5;-1:-1:-1;;;;;12368:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12404:10;12416:5;12423:6;12336:31;:94::i;:::-;12441:54;;-1:-1:-1;;;12441:54:0;;-1:-1:-1;;;;;12441:34:0;;;;;:54;;12476:6;;12484:10;;12441:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12506:53;12518:10;12530:5;12537:2;12541:6;12549:9;12506:11;:53::i;10741:174::-;10777:7;10820:20;;10801:15;:39;10797:86;;-1:-1:-1;10864:7:0;;-1:-1:-1;;;;;10864:7:0;10857:14;;10797:86;-1:-1:-1;10900:7:0;;-1:-1:-1;;;;;10900:7:0;10741:174;;:::o;14061:229::-;14172:38;;-1:-1:-1;;;14172:38:0;;-1:-1:-1;;;;;14172:26:0;;;;;:38;;14199:2;;14203:6;;14172:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14251:2;-1:-1:-1;;;;;14226:56:0;14244:5;-1:-1:-1;;;;;14226:56:0;14239:3;14226:56;14255:6;14263:11;14276:5;:3;:5::i;:::-;14226:56;;;;;;;;:::i;:::-;;;;;;;;14061:229;;;;;:::o;3528:521::-;3621:14;3667:1;3656:8;:12;3648:70;;;;-1:-1:-1;;;3648:70:0;;;;;;;:::i;:::-;3749:1;3737:9;:13;:31;;;;;3767:1;3754:10;:14;3737:31;3729:86;;;;-1:-1:-1;;;3729:86:0;;;;;;;:::i;:::-;3826:20;3849:17;:8;3862:3;3849:12;:17::i;:::-;3826:40;-1:-1:-1;3877:14:0;3894:31;3826:40;3914:10;3894:19;:31::i;:::-;3877:48;-1:-1:-1;3936:16:0;3955:40;3979:15;3955:19;:9;3969:4;3955:13;:19::i;:::-;:23;;:40::i;:::-;3936:59;-1:-1:-1;4018:23:0;3936:59;4018:9;:23;:::i;:::-;4006:35;3528:521;-1:-1:-1;;;;;;;3528:521:0:o;11621:231::-;11732:40;;-1:-1:-1;;;11732:40:0;;-1:-1:-1;;;;;11732:26:0;;;;;:40;;11759:4;;11765:6;;11732:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11815:2;-1:-1:-1;;;;;11788:56:0;11809:4;-1:-1:-1;;;;;11788:56:0;11802:5;-1:-1:-1;;;;;11788:56:0;;11819:6;11827:5;:3;:5::i;:::-;11834:9;11788:56;;;;;;;;:::i;5322:534::-;5423:21;5480:1;5465:4;:11;:16;;5457:61;;;;-1:-1:-1;;;5457:61:0;;;;;;;:::i;:::-;5550:4;:11;5539:23;;;;;;-1:-1:-1;;;5539:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5539:23:0;;5529:33;;5603:9;5573:7;5598:1;5581:7;:14;:18;;;;:::i;:::-;5573:27;;;;;;-1:-1:-1;;;5573:27:0;;;;;;;;;;;;;;:39;;;;;5628:6;5651:1;5637:4;:11;:15;;;;:::i;:::-;5628:24;;5623:226;5654:5;;5623:226;;5682:14;;5717:42;5729:7;5738:4;5743:5;5747:1;5743;:5;:::i;:::-;5738:11;;;;;;-1:-1:-1;;;5738:11:0;;;;;;;;;;;;;;;5751:4;5756:1;5751:7;;;;;;-1:-1:-1;;;5751:7:0;;;;;;;;;;;;;;;5717:11;:42::i;:::-;5681:78;;;;5791:46;5803:7;5811:1;5803:10;;;;;;-1:-1:-1;;;5803:10:0;;;;;;;;;;;;;;;5815:9;5826:10;5791:11;:46::i;:::-;5774:7;5782:5;5786:1;5782;:5;:::i;:::-;5774:14;;;;;;-1:-1:-1;;;5774:14:0;;;;;;;;;;;;;;:63;;;;;5623:226;;5661:3;;;;;:::i;:::-;;;;5623:226;;;;5322:534;;;;;:::o;4728:513::-;4829:21;4886:1;4871:4;:11;:16;;4863:61;;;;-1:-1:-1;;;4863:61:0;;;;;;;:::i;:::-;4956:4;:11;4945:23;;;;;;-1:-1:-1;;;4945:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4945:23:0;;4935:33;;4992:8;4979:7;4987:1;4979:10;;;;;;-1:-1:-1;;;4979:10:0;;;;;;;;;;;;;;:21;;;;;5016:6;5011:223;5042:1;5028:4;:11;:15;;;;:::i;:::-;5024:1;:19;5011:223;;;5066:14;5082:15;5101:42;5113:7;5122:4;5127:1;5122:7;;;;;;-1:-1:-1;;;5122:7:0;;;;;;;;;;;;;;;5131:4;5136:1;5140;5136:5;;;;:::i;:::-;5131:11;;;;;;-1:-1:-1;;;5131:11:0;;;;;;;;5101:42;5065:78;;;;5175:47;5188:7;5196:1;5188:10;;;;;;-1:-1:-1;;;5188:10:0;;;;;;;;;;;;;;;5200:9;5211:10;5175:12;:47::i;:::-;5158:7;5166:5;:1;5170;5166:5;:::i;:::-;5158:14;;;;;;-1:-1:-1;;;5158:14:0;;;;;;;;;;;;;;:64;;;;;5011:223;;5045:3;;;;;:::i;:::-;;;;5011:223;;2027:490;2116:12;2142:14;2158;2176:26;2187:6;2195;2176:10;:26::i;:::-;2141:61;;;;2315:7;2368:6;2376;2351:32;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2341:43;;;;;;2254:251;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2254:251:0;;;;;;;;;2244:262;;2254:251;2244:262;;;;;2027:490;-1:-1:-1;;;;;;2027:490:0:o;16219:743::-;16326:6;16321:634;16352:1;16338:4;:11;:15;;;;:::i;:::-;16334:1;:19;16321:634;;;16376:13;16391:14;16410:4;16415:1;16410:7;;;;;;-1:-1:-1;;;16410:7:0;;;;;;;;;;;;;;;16419:4;16424:1;16428;16424:5;;;;:::i;:::-;16419:11;;;;;;-1:-1:-1;;;16419:11:0;;;;;;;;;;;;;;;16375:56;;;;16447:14;16466:44;16496:5;16503:6;16466:29;:44::i;:::-;-1:-1:-1;16446:64:0;-1:-1:-1;16525:14:0;16542:7;16550:5;:1;16554;16550:5;:::i;:::-;16542:14;;;;;;-1:-1:-1;;;16542:14:0;;;;;;;;;;;;;;;16525:31;;16572:15;16589;16617:6;-1:-1:-1;;;;;16608:15:0;:5;-1:-1:-1;;;;;16608:15:0;;:61;;16650:9;16666:1;16608:61;;;16632:1;16636:9;16608:61;16571:98;;;;16684:10;16715:1;16701:4;:11;:15;;;;:::i;:::-;16697:1;:19;:84;;16778:3;16697:84;;;16719:56;16746:7;16755:6;16763:4;16768:5;:1;16772;16768:5;:::i;:::-;16763:11;;;;;;-1:-1:-1;;;16763:11:0;;;;;;;;;;;;;;;16719:26;:56::i;:::-;16684:97;;16813:50;16840:7;16849:5;16856:6;16813:26;:50::i;:::-;-1:-1:-1;;;;;16796:73:0;;16888:10;16900;16912:2;16926:1;16916:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16916:12:0;;16796:147;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16321:634;;;;;;;16355:3;;;;;:::i;:::-;;;;16321:634;;6743:402;6922:12;6936:17;6957:5;-1:-1:-1;;;;;6957:10:0;6991;7003:4;7009:2;7013:5;6968:51;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6968:51:0;;;;;;;;;;;6957:63;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6921:99;;;;7039:7;:57;;;;-1:-1:-1;7051:11:0;;:16;;:44;;;7082:4;7071:24;;;;;;;;;;;;:::i;:::-;7031:106;;;;-1:-1:-1;;;7031:106:0;;;;;;;:::i;7153:201::-;7264:12;;;7226;7264;;;;;;;;;-1:-1:-1;;;;;7243:7:0;;;7257:5;;7243:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7225:52;;;7296:7;7288:58;;;;-1:-1:-1;;;7288:58:0;;;;;;;:::i;:::-;7153:201;;;:::o;4170:476::-;4263:13;4309:1;4297:9;:13;4289:72;;;;-1:-1:-1;;;4289:72:0;;;;;;;:::i;:::-;4392:1;4380:9;:13;:31;;;;;4410:1;4397:10;:14;4380:31;4372:86;;;;-1:-1:-1;;;4372:86:0;;;;;;;:::i;:::-;4469:14;4486:34;4515:4;4486:24;:9;4500;4486:13;:24::i;:::-;:28;;:34::i;:::-;4469:51;-1:-1:-1;4531:16:0;4550:34;4580:3;4550:25;:10;4565:9;4550:14;:25::i;:34::-;4531:53;-1:-1:-1;4606:32:0;4636:1;4607:23;4531:53;4607:9;:23;:::i;4606:32::-;4595:43;4170:476;-1:-1:-1;;;;;;4170:476:0:o;3081:325::-;3163:12;3206:1;3196:7;:11;3188:63;;;;-1:-1:-1;;;3188:63:0;;;;;;;:::i;:::-;3281:1;3270:8;:12;:28;;;;;3297:1;3286:8;:12;3270:28;3262:83;;;;-1:-1:-1;;;3262:83:0;;;;;;;:::i;:::-;3390:8;3366:21;:7;3378:8;3366:11;:21::i;:::-;:32;;;;:::i;1257:142::-;1309:6;1336;;;:30;;-1:-1:-1;1365:1:0;1360;1351:5;1360:1;1365;1351:5;:::i;:::-;1347:9;-1:-1:-1;1346:15:0;;1347:9;1346:15;:::i;:::-;:20;1336:30;1328:63;;;;-1:-1:-1;;;1328:63:0;;;;;;;:::i;984:128::-;1036:6;1078:1;1068:5;1072:1;1078;1068:5;:::i;:::-;1064:9;;;1063:16;;1055:49;;;;-1:-1:-1;;;1055:49:0;;;;;;;:::i;2575:393::-;2668:13;2683;2710:14;2729:26;2740:6;2748;2729:10;:26::i;:::-;2709:46;;;2767:13;2782;2817:32;2825:7;2834:6;2842;2817:7;:32::i;:::-;-1:-1:-1;;;;;2800:62:0;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2766:98;-1:-1:-1;;;;;2766:98:0;;;-1:-1:-1;;;;;2766:98:0;;;2908:6;-1:-1:-1;;;;;2898:16:0;:6;-1:-1:-1;;;;;2898:16:0;;:62;;2941:8;2951;2898:62;;;2918:8;2928;2898:62;2875:85;;;;-1:-1:-1;2575:393:0;-1:-1:-1;;;;;;;2575:393:0:o;1582:353::-;1657:14;1673;1718:6;-1:-1:-1;;;;;1708:16:0;:6;-1:-1:-1;;;;;1708:16:0;;;1700:68;;;;-1:-1:-1;;;1700:68:0;;;;;;;:::i;:::-;1807:6;-1:-1:-1;;;;;1798:15:0;:6;-1:-1:-1;;;;;1798:15:0;;:53;;1836:6;1844;1798:53;;;1817:6;1825;1798:53;1779:72;;-1:-1:-1;1779:72:0;-1:-1:-1;;;;;;1870:20:0;;1862:65;;;;-1:-1:-1;;;1862:65:0;;;;;;;:::i;:::-;1582:353;;;;;:::o;1120:129::-;1172:6;1214:1;1204:5;1208:1;1214;1204:5;:::i;:::-;1200:9;;;1199:16;;1191:50;;;;-1:-1:-1;;;1191:50:0;;;;;;;:::i;14:138:1:-;84:20;;113:33;84:20;113:33;:::i;157:400::-;;;290:3;283:4;275:6;271:17;267:27;257:2;;313:6;305;298:22;257:2;-1:-1:-1;341:20:1;;384:18;373:30;;370:2;;;423:8;413;406:26;370:2;467:4;459:6;455:17;443:29;;530:3;523:4;515;507:6;503:17;495:6;491:30;487:41;484:50;481:2;;;547:1;544;537:12;562:190;643:13;;-1:-1:-1;;;;;685:42:1;;675:53;;665:2;;742:1;739;732:12;757:158;825:20;;885:4;874:16;;864:27;;854:2;;905:1;902;895:12;920:259;;1032:2;1020:9;1011:7;1007:23;1003:32;1000:2;;;1053:6;1045;1038:22;1000:2;1097:9;1084:23;1116:33;1143:5;1116:33;:::i;:::-;1168:5;990:189;-1:-1:-1;;;990:189:1:o;1184:263::-;;1307:2;1295:9;1286:7;1282:23;1278:32;1275:2;;;1328:6;1320;1313:22;1275:2;1365:9;1359:16;1384:33;1411:5;1384:33;:::i;1452:402::-;;;1581:2;1569:9;1560:7;1556:23;1552:32;1549:2;;;1602:6;1594;1587:22;1549:2;1646:9;1633:23;1665:33;1692:5;1665:33;:::i;:::-;1717:5;-1:-1:-1;1774:2:1;1759:18;;1746:32;1787:35;1746:32;1787:35;:::i;:::-;1841:7;1831:17;;;1539:315;;;;;:::o;1859:963::-;;;;;;;;;;2105:3;2093:9;2084:7;2080:23;2076:33;2073:2;;;2127:6;2119;2112:22;2073:2;2171:9;2158:23;2190:33;2217:5;2190:33;:::i;:::-;2242:5;-1:-1:-1;2299:2:1;2284:18;;2271:32;2312:35;2271:32;2312:35;:::i;:::-;2366:7;-1:-1:-1;2425:2:1;2410:18;;2397:32;2438:35;2397:32;2438:35;:::i;:::-;2492:7;-1:-1:-1;2546:2:1;2531:18;;2518:32;;-1:-1:-1;2597:3:1;2582:19;;2569:33;;-1:-1:-1;2621:39:1;2655:3;2640:19;;2621:39;:::i;:::-;2611:49;;2707:3;2696:9;2692:19;2679:33;2669:43;;2759:3;2748:9;2744:19;2731:33;2721:43;;2811:3;2800:9;2796:19;2783:33;2773:43;;2063:759;;;;;;;;;;;:::o;2827:539::-;;;;;2990:3;2978:9;2969:7;2965:23;2961:33;2958:2;;;3012:6;3004;2997:22;2958:2;3056:9;3043:23;3075:33;3102:5;3075:33;:::i;:::-;3127:5;-1:-1:-1;3184:2:1;3169:18;;3156:32;3197:35;3156:32;3197:35;:::i;:::-;2948:418;;3251:7;;-1:-1:-1;;;;3305:2:1;3290:18;;3277:32;;3356:2;3341:18;3328:32;;2948:418::o;3371:327::-;;;3500:2;3488:9;3479:7;3475:23;3471:32;3468:2;;;3521:6;3513;3506:22;3468:2;3565:9;3552:23;3584:33;3611:5;3584:33;:::i;:::-;3636:5;3688:2;3673:18;;;;3660:32;;-1:-1:-1;;;3458:240:1:o;3703:1232::-;;;;;;;;;;;;4002:3;3990:9;3981:7;3977:23;3973:33;3970:2;;;4024:6;4016;4009:22;3970:2;4068:9;4055:23;4087:33;4114:5;4087:33;:::i;:::-;4139:5;-1:-1:-1;4191:2:1;4176:18;;4163:32;;-1:-1:-1;4242:2:1;4227:18;;4214:32;;-1:-1:-1;4297:2:1;4282:18;;4269:32;4324:18;4313:30;;4310:2;;;4361:6;4353;4346:22;4310:2;4405:76;4473:7;4464:6;4453:9;4449:22;4405:76;:::i;:::-;4500:8;;-1:-1:-1;4379:102:1;-1:-1:-1;;4587:3:1;4572:19;;4559:33;4601:35;4559:33;4601:35;:::i;:::-;4655:7;-1:-1:-1;4709:3:1;4694:19;;4681:33;;-1:-1:-1;4733:39:1;4767:3;4752:19;;4733:39;:::i;:::-;4723:49;;4819:3;4808:9;4804:19;4791:33;4781:43;;4871:3;4860:9;4856:19;4843:33;4833:43;;4924:3;4913:9;4909:19;4896:33;4885:44;;3960:975;;;;;;;;;;;;;;:::o;4940:1478::-;;;;;;;;;5243:3;5231:9;5222:7;5218:23;5214:33;5211:2;;;5265:6;5257;5250:22;5211:2;5310:9;5297:23;5339:18;5380:2;5372:6;5369:14;5366:2;;;5401:6;5393;5386:22;5366:2;5445:76;5513:7;5504:6;5493:9;5489:22;5445:76;:::i;:::-;5540:8;;-1:-1:-1;5419:102:1;-1:-1:-1;5628:2:1;5613:18;;5600:32;;-1:-1:-1;5644:16:1;;;5641:2;;;5678:6;5670;5663:22;5641:2;5722:78;5792:7;5781:8;5770:9;5766:24;5722:78;:::i;:::-;5819:8;;-1:-1:-1;5696:104:1;-1:-1:-1;5907:2:1;5892:18;;5879:32;;-1:-1:-1;5923:16:1;;;5920:2;;;5957:6;5949;5942:22;5920:2;6001:78;6071:7;6060:8;6049:9;6045:24;6001:78;:::i;:::-;6098:8;;-1:-1:-1;5975:104:1;-1:-1:-1;6186:2:1;6171:18;;6158:32;;-1:-1:-1;6202:16:1;;;6199:2;;;6236:6;6228;6221:22;6199:2;;6280:78;6350:7;6339:8;6328:9;6324:24;6280:78;:::i;:::-;5201:1217;;;;-1:-1:-1;5201:1217:1;;-1:-1:-1;5201:1217:1;;;;;;6377:8;-1:-1:-1;;;5201:1217:1:o;6423:1810::-;;;;;;;;;;;6778:3;6766:9;6757:7;6753:23;6749:33;6746:2;;;6800:6;6792;6785:22;6746:2;6845:9;6832:23;6874:18;6915:2;6907:6;6904:14;6901:2;;;6936:6;6928;6921:22;6901:2;6980:76;7048:7;7039:6;7028:9;7024:22;6980:76;:::i;:::-;7075:8;;-1:-1:-1;6954:102:1;-1:-1:-1;7163:2:1;7148:18;;7135:32;;-1:-1:-1;7179:16:1;;;7176:2;;;7213:6;7205;7198:22;7176:2;7257:78;7327:7;7316:8;7305:9;7301:24;7257:78;:::i;:::-;7354:8;;-1:-1:-1;7231:104:1;-1:-1:-1;7442:2:1;7427:18;;7414:32;;-1:-1:-1;7458:16:1;;;7455:2;;;7492:6;7484;7477:22;7455:2;7536:78;7606:7;7595:8;7584:9;7580:24;7536:78;:::i;:::-;7633:8;;-1:-1:-1;7510:104:1;-1:-1:-1;7721:2:1;7706:18;;7693:32;;-1:-1:-1;7737:16:1;;;7734:2;;;7771:6;7763;7756:22;7734:2;7815:78;7885:7;7874:8;7863:9;7859:24;7815:78;:::i;:::-;7912:8;;-1:-1:-1;7789:104:1;-1:-1:-1;8000:3:1;7985:19;;7972:33;;-1:-1:-1;8017:16:1;;;8014:2;;;8051:6;8043;8036:22;8014:2;;8095:78;8165:7;8154:8;8143:9;8139:24;8095:78;:::i;:::-;8069:104;;8192:8;8182:18;;;8219:8;8209:18;;;6736:1497;;;;;;;;;;;;;:::o;8238:297::-;;8358:2;8346:9;8337:7;8333:23;8329:32;8326:2;;;8379:6;8371;8364:22;8326:2;8416:9;8410:16;8469:5;8462:13;8455:21;8448:5;8445:32;8435:2;;8496:6;8488;8481:22;8540:608;;;;;;8720:3;8708:9;8699:7;8695:23;8691:33;8688:2;;;8742:6;8734;8727:22;8688:2;8783:9;8770:23;8760:33;;8843:2;8832:9;8828:18;8815:32;8856:33;8883:5;8856:33;:::i;:::-;8908:5;-1:-1:-1;8965:2:1;8950:18;;8937:32;8978:35;8937:32;8978:35;:::i;:::-;8678:470;;;;-1:-1:-1;9032:7:1;;9086:2;9071:18;;9058:32;;-1:-1:-1;9137:3:1;9122:19;9109:33;;8678:470;-1:-1:-1;;8678:470:1:o;9153:944::-;;;;;;;;;9402:3;9390:9;9381:7;9377:23;9373:33;9370:2;;;9424:6;9416;9409:22;9370:2;9465:9;9452:23;9442:33;;9522:2;9511:9;9507:18;9494:32;9484:42;;9573:2;9562:9;9558:18;9545:32;9535:42;;9628:2;9617:9;9613:18;9600:32;9655:18;9647:6;9644:30;9641:2;;;9692:6;9684;9677:22;9641:2;9736:76;9804:7;9795:6;9784:9;9780:22;9736:76;:::i;:::-;9831:8;;-1:-1:-1;9710:102:1;-1:-1:-1;;9916:3:1;9901:19;;9888:33;9930;9888;9930;:::i;:::-;9360:737;;;;-1:-1:-1;9360:737:1;;;;;;9982:5;;-1:-1:-1;;;10034:3:1;10019:19;;10006:33;;10086:3;10071:19;10058:33;;9360:737::o;10102:474::-;;;;10258:2;10246:9;10237:7;10233:23;10229:32;10226:2;;;10279:6;10271;10264:22;10226:2;10307:42;10339:9;10307:42;:::i;:::-;10297:52;;10368:51;10415:2;10404:9;10400:18;10368:51;:::i;:::-;10358:61;;10462:2;10451:9;10447:18;10441:25;10506:10;10499:5;10495:22;10488:5;10485:33;10475:2;;10537:6;10529;10522:22;10475:2;10565:5;10555:15;;;10216:360;;;;;:::o;10581:194::-;;10704:2;10692:9;10683:7;10679:23;10675:32;10672:2;;;10725:6;10717;10710:22;10672:2;-1:-1:-1;10753:16:1;;10662:113;-1:-1:-1;10662:113:1:o;10780:1248::-;;;10934:2;10922:9;10913:7;10909:23;10905:32;10902:2;;;10955:6;10947;10940:22;10902:2;10996:9;10983:23;10973:33;;11025:2;11078;11067:9;11063:18;11050:32;11101:18;11142:2;11134:6;11131:14;11128:2;;;11163:6;11155;11148:22;11128:2;11206:6;11195:9;11191:22;11181:32;;11251:7;11244:4;11240:2;11236:13;11232:27;11222:2;;11278:6;11270;11263:22;11222:2;11319;11306:16;11341:2;11337;11334:10;11331:2;;;11347:18;;:::i;:::-;11394:2;11390;11386:11;11426:2;11420:9;11489:2;11485:7;11480:2;11476;11472:11;11468:25;11460:6;11456:38;11544:6;11532:10;11529:22;11524:2;11512:10;11509:18;11506:46;11503:2;;;11555:18;;:::i;:::-;11591:2;11584:22;11641:18;;;11675:15;;;;-1:-1:-1;11710:11:1;;;11740;;;11736:20;;11733:33;-1:-1:-1;11730:2:1;;;11784:6;11776;11769:22;11730:2;11811:6;11802:15;;11826:171;11840:2;11837:1;11834:9;11826:171;;;11897:25;11918:3;11897:25;:::i;:::-;11885:38;;11858:1;11851:9;;;;;11943:12;;;;11975;;11826:171;;;11830:3;12016:6;12006:16;;;;;;;;10892:1136;;;;;:::o;12033:875::-;;;;;;;;12265:3;12253:9;12244:7;12240:23;12236:33;12233:2;;;12287:6;12279;12272:22;12233:2;12328:9;12315:23;12305:33;;12385:2;12374:9;12370:18;12357:32;12347:42;;12440:2;12429:9;12425:18;12412:32;12467:18;12459:6;12456:30;12453:2;;;12504:6;12496;12489:22;12453:2;12548:76;12616:7;12607:6;12596:9;12592:22;12548:76;:::i;:::-;12643:8;;-1:-1:-1;12522:102:1;-1:-1:-1;;12728:2:1;12713:18;;12700:32;12741:33;12700:32;12741:33;:::i;:::-;12223:685;;;;-1:-1:-1;12223:685:1;;;;12793:5;12845:3;12830:19;;12817:33;;-1:-1:-1;12897:3:1;12882:19;;;12869:33;;12223:685;-1:-1:-1;;12223:685:1:o;12913:326::-;;;;13059:2;13047:9;13038:7;13034:23;13030:32;13027:2;;;13080:6;13072;13065:22;13027:2;-1:-1:-1;;13108:23:1;;;13178:2;13163:18;;13150:32;;-1:-1:-1;13229:2:1;13214:18;;;13201:32;;13017:222;-1:-1:-1;13017:222:1:o;13244:333::-;-1:-1:-1;;13471:2:1;13467:15;;;13463:24;;13451:37;;13522:15;;;;13518:24;13513:2;13504:12;;13497:46;13568:2;13559:12;;13391:186::o;13582:274::-;;13749:6;13743:13;13765:53;13811:6;13806:3;13799:4;13791:6;13787:17;13765:53;:::i;:::-;13834:16;;;;;13719:137;-1:-1:-1;;13719:137:1:o;13861:636::-;-1:-1:-1;;;;;;14220:26:1;;14283:2;14279:15;;;;-1:-1:-1;;14275:53:1;14271:1;14262:11;;14255:74;14354:2;14345:12;;14338:28;14396:66;14391:2;14382:12;;14375:88;14488:2;14479:12;;14210:287::o;14502:203::-;-1:-1:-1;;;;;14666:32:1;;;;14648:51;;14636:2;14621:18;;14603:102::o;14710:375::-;-1:-1:-1;;;;;14968:15:1;;;14950:34;;15020:15;;;;15015:2;15000:18;;14993:43;15067:2;15052:18;;15045:34;;;;14900:2;14885:18;;14867:218::o;15090:670::-;-1:-1:-1;;;;;15457:15:1;;;15439:34;;15509:15;;;;15504:2;15489:18;;15482:43;15556:2;15541:18;;15534:34;;;;15599:2;15584:18;;15577:34;;;;15660:4;15648:17;15642:3;15627:19;;15620:46;15419:3;15682:19;;15675:35;15741:3;15726:19;;15719:35;;;;15388:3;15373:19;;15355:405::o;15765:274::-;-1:-1:-1;;;;;15957:32:1;;;;15939:51;;16021:2;16006:18;;15999:34;15927:2;15912:18;;15894:145::o;16044:375::-;-1:-1:-1;;;;;16302:15:1;;;16284:34;;16349:2;16334:18;;16327:34;;;;16397:15;;;16392:2;16377:18;;16370:43;16234:2;16219:18;;16201:218::o;16424:1006::-;16736:3;16749:22;;;16721:19;;16806:22;;;16424:1006;16886:6;16859:3;16844:19;;16424:1006;16923:306;16937:6;16934:1;16931:13;16923:306;;;17012:6;16999:20;17032:33;17059:5;17032:33;:::i;:::-;-1:-1:-1;;;;;17090:31:1;17078:44;;17145:4;17204:15;;;;17169:12;;;;17118:1;16952:9;16923:306;;;-1:-1:-1;17280:4:1;17265:20;;17258:36;;;;-1:-1:-1;;17325:2:1;17310:18;;17303:34;;;;17368:2;17353:18;;17346:34;;;;17411:3;17396:19;;;17389:35;17246:3;16697:733;-1:-1:-1;;16697:733:1:o;17435:951::-;17737:3;17750:22;;;17821:13;;17722:19;;;17843:22;;;17435:951;;17919:4;;17896:3;17881:19;;;17946:15;;;17435:951;17992:195;18006:6;18003:1;18000:13;17992:195;;;18071:13;;-1:-1:-1;;;;;18067:39:1;18055:52;;18127:12;;;;18162:15;;;;18103:1;18021:9;17992:195;;;-1:-1:-1;;;18223:18:1;;;18216:34;;;;-1:-1:-1;18281:2:1;18266:18;;18259:34;;;;18324:2;18309:18;;18302:34;;;;18367:3;18352:19;;;18345:35;18204:3;17698:688;-1:-1:-1;17698:688:1:o;18391:635::-;18562:2;18614:21;;;18684:13;;18587:18;;;18706:22;;;18391:635;;18562:2;18785:15;;;;18759:2;18744:18;;;18391:635;18831:169;18845:6;18842:1;18839:13;18831:169;;;18906:13;;18894:26;;18975:15;;;;18940:12;;;;18867:1;18860:9;18831:169;;;-1:-1:-1;19017:3:1;;18542:484;-1:-1:-1;;;;;;18542:484:1:o;19031:187::-;19196:14;;19189:22;19171:41;;19159:2;19144:18;;19126:92::o;19223:406::-;19425:2;19407:21;;;19464:2;19444:18;;;19437:30;-1:-1:-1;;;;;;;;;;;19498:2:1;19483:18;;19476:62;-1:-1:-1;;;19569:2:1;19554:18;;19547:40;19619:3;19604:19;;19397:232::o;19634:345::-;19836:2;19818:21;;;19875:2;19855:18;;;19848:30;-1:-1:-1;;;19909:2:1;19894:18;;19887:51;19970:2;19955:18;;19808:171::o;19984:403::-;20186:2;20168:21;;;20225:2;20205:18;;;20198:30;20264:34;20259:2;20244:18;;20237:62;-1:-1:-1;;;20330:2:1;20315:18;;20308:37;20377:3;20362:19;;20158:229::o;20392:353::-;20594:2;20576:21;;;20633:2;20613:18;;;20606:30;20672:31;20667:2;20652:18;;20645:59;20736:2;20721:18;;20566:179::o;20750:344::-;20952:2;20934:21;;;20991:2;20971:18;;;20964:30;-1:-1:-1;;;21025:2:1;21010:18;;21003:50;21085:2;21070:18;;20924:170::o;21099:410::-;21301:2;21283:21;;;21340:2;21320:18;;;21313:30;-1:-1:-1;;;;;;;;;;;21374:2:1;21359:18;;21352:62;-1:-1:-1;;;21445:2:1;21430:18;;21423:44;21499:3;21484:19;;21273:236::o;21514:344::-;21716:2;21698:21;;;21755:2;21735:18;;;21728:30;-1:-1:-1;;;21789:2:1;21774:18;;21767:50;21849:2;21834:18;;21688:170::o;21863:409::-;22065:2;22047:21;;;22104:2;22084:18;;;22077:30;22143:34;22138:2;22123:18;;22116:62;-1:-1:-1;;;22209:2:1;22194:18;;22187:43;22262:3;22247:19;;22037:235::o;22277:402::-;22479:2;22461:21;;;22518:2;22498:18;;;22491:30;22557:34;22552:2;22537:18;;22530:62;-1:-1:-1;;;22623:2:1;22608:18;;22601:36;22669:3;22654:19;;22451:228::o;22684:350::-;22886:2;22868:21;;;22925:2;22905:18;;;22898:30;22964:28;22959:2;22944:18;;22937:56;23025:2;23010:18;;22858:176::o;23039:356::-;23241:2;23223:21;;;23260:18;;;23253:30;23319:34;23314:2;23299:18;;23292:62;23386:2;23371:18;;23213:182::o;23400:353::-;23602:2;23584:21;;;23641:2;23621:18;;;23614:30;23680:31;23675:2;23660:18;;23653:59;23744:2;23729:18;;23574:179::o;23758:407::-;23960:2;23942:21;;;23999:2;23979:18;;;23972:30;24038:34;24033:2;24018:18;;24011:62;-1:-1:-1;;;24104:2:1;24089:18;;24082:41;24155:3;24140:19;;23932:233::o;24170:403::-;24372:2;24354:21;;;24411:2;24391:18;;;24384:30;-1:-1:-1;;;;;;;;;;;24445:2:1;24430:18;;24423:62;-1:-1:-1;;;24516:2:1;24501:18;;24494:37;24563:3;24548:19;;24344:229::o;24578:348::-;24780:2;24762:21;;;24819:2;24799:18;;;24792:30;24858:26;24853:2;24838:18;;24831:54;24917:2;24902:18;;24752:174::o;24931:409::-;25133:2;25115:21;;;25172:2;25152:18;;;25145:30;-1:-1:-1;;;;;;;;;;;25206:2:1;25191:18;;25184:62;-1:-1:-1;;;25277:2:1;25262:18;;25255:43;25330:3;25315:19;;25105:235::o;25345:400::-;25547:2;25529:21;;;25586:2;25566:18;;;25559:30;25625:34;25620:2;25605:18;;25598:62;-1:-1:-1;;;25691:2:1;25676:18;;25669:34;25735:3;25720:19;;25519:226::o;25750:356::-;25952:2;25934:21;;;25971:18;;;25964:30;26030:34;26025:2;26010:18;;26003:62;26097:2;26082:18;;25924:182::o;26111:177::-;26257:25;;;26245:2;26230:18;;26212:76::o;26293:274::-;26467:25;;;-1:-1:-1;;;;;26528:32:1;26523:2;26508:18;;26501:60;26455:2;26440:18;;26422:145::o;26572:624::-;;26803:6;26792:9;26785:25;26846:6;26841:2;26830:9;26826:18;26819:34;26918:1;26914;26909:3;26905:11;26901:19;26893:6;26889:32;26884:2;26873:9;26869:18;26862:60;26958:3;26953:2;26942:9;26938:18;26931:31;26991:6;26985:13;27035:6;27029:3;27018:9;27014:19;27007:35;27051:67;27111:6;27105:3;27094:9;27090:19;27085:2;27077:6;27073:15;27051:67;:::i;:::-;27179:2;27158:15;-1:-1:-1;;27154:29:1;27139:45;;;;27186:3;27135:55;;26775:421;-1:-1:-1;;;;;26775:421:1:o;27201:319::-;27403:25;;;27459:2;27444:18;;27437:34;;;;27502:2;27487:18;;27480:34;27391:2;27376:18;;27358:162::o;27525:128::-;;27596:1;27592:6;27589:1;27586:13;27583:2;;;27602:18;;:::i;:::-;-1:-1:-1;27638:9:1;;27573:80::o;27658:217::-;;27724:1;27714:2;;-1:-1:-1;;;27749:31:1;;27803:4;27800:1;27793:15;27831:4;27756:1;27821:15;27714:2;-1:-1:-1;27860:9:1;;27704:171::o;27880:168::-;;27986:1;27982;27978:6;27974:14;27971:1;27968:21;27963:1;27956:9;27949:17;27945:45;27942:2;;;27993:18;;:::i;:::-;-1:-1:-1;28033:9:1;;27932:116::o;28053:125::-;;28121:1;28118;28115:8;28112:2;;;28126:18;;:::i;:::-;-1:-1:-1;28163:9:1;;28102:76::o;28183:258::-;28255:1;28265:113;28279:6;28276:1;28273:13;28265:113;;;28355:11;;;28349:18;28336:11;;;28329:39;28301:2;28294:10;28265:113;;;28396:6;28393:1;28390:13;28387:2;;;-1:-1:-1;;28431:1:1;28413:16;;28406:27;28236:205::o;28446:136::-;;28513:5;28503:2;;28522:18;;:::i;:::-;-1:-1:-1;;;28558:18:1;;28493:89::o;28587:135::-;;-1:-1:-1;;28647:17:1;;28644:2;;;28667:18;;:::i;:::-;-1:-1:-1;28714:1:1;28703:13;;28634:88::o;28727:127::-;28788:10;28783:3;28779:20;28776:1;28769:31;28819:4;28816:1;28809:15;28843:4;28840:1;28833:15;28859:127;28920:10;28915:3;28911:20;28908:1;28901:31;28951:4;28948:1;28941:15;28975:4;28972:1;28965:15;28991:133;-1:-1:-1;;;;;29068:31:1;;29058:42;;29048:2;;29114:1;29111;29104:12;29048:2;29038:86;:::o

Swarm Source

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