Contract 0xb0731d50c681c45856bfc3f7539d5f61d4be81d8 4

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xc4ca02c953e4dda458524b534ac272098a3604268a939ce733c43011fb90fc37Any Swap Out Und...(pending)2021-11-29 21:07:3138 mins ago0xacb26b906e0bda92c2c106e1798733771f0f5777 IN 0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX(Pending)
0xa4e3b74de3e55d2e5d702fd409dce70383e4dde6cbf2bb2f593e5cafc081a5beAny Swap In Auto75976532021-11-29 21:45:3717 secs ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.021559317697229.943980822
0xd5e1153a638e618cceb7f754ae99433a980c905bc0583bddf67aff13e2529124Any Swap In Auto75976512021-11-29 21:45:3420 secs ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.02087478696222.67151973
0xaae519eb835037e902359d3265e11d88e3c8ce3e41a94f15a936817dabecc59fAny Swap In Auto75976492021-11-29 21:45:3024 secs ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.024369999631219.852586277
0x2c66acfc5ba63003bd1e7eb594028366a1d0c0a687eed7d1281f3e2c2f6d61d0Any Swap In Auto75976432021-11-29 21:45:2133 secs ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.014335051883215.438342674
0xc74fd78db45ad10fbe09ab4c956e71d677eb6f9be0e873ab040dfe581b627c36Any Swap Out Und...75976342021-11-29 21:44:5955 secs ago0xebcadb96650a720b65c93f106e8a62e933b3b351 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.01898144513199.435205627
0xd678708a00582c143c16d346b902bbffd6da4272f6d51a272c810f30b6750e6cAny Swap In Auto75975692021-11-29 21:42:513 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.02206447457199.053421113
0xf40d1c1e1eef8e57c51afe33f134dfee77617fe3588601dd60a6b13216227746Any Swap Out75975682021-11-29 21:42:483 mins ago0x52a9f6c17e2e057eb90e41f351c06246ddfedbcb IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.007872822791180.30466269
0xd2da591453148a27967040c4a227ff2d5b3cf06e0269230625b602f21698ca31Any Swap Out Und...75975622021-11-29 21:42:373 mins ago0xf95c6236a41b83c0c601d66ffefc087e11a8a0ff IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.0170391568179.027872575
0x86129dcdd32ba7849520f102b6f478cd02f70607a83fb86a7a17989a6bcb1a02Any Swap Out Und...75975622021-11-29 21:42:373 mins ago0xef429ad8963e0e0d1d64c245860a7f9c4b20bfd6 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.017207665733180.798370737
0x2d205910316fa3c6be0fb292a00eb0fb3fd4a6210b7f2c065b5dd7a639ba1b03Any Swap Out75975622021-11-29 21:42:373 mins ago0x2357a396552e06a9d441f635e33dc750495a1938 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.007890040898180.798370737
0x2234bcf04aa2bc975d627b45f086b040d04c147a680dab191a4299449455cae5Any Swap In Auto75975492021-11-29 21:42:113 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.013970163627210.030273281
0x8774f1714812e72b21bfbce02e7538d8efc3fa193fe66a5be2a26e432aaa0fbaAny Swap In Auto75975232021-11-29 21:41:234 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.019601172155176.830876393
0x58decba8fcc9ae11c086531c7227988e5c5077b0c31f66ad01d3cbf6ddddd2d5Any Swap In Auto75975182021-11-29 21:41:124 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.018025165922192.249980513
0xa158b25809e66526938e21ad91da290e5afb97f39760ea79ba59f2393f4908dfAny Swap Out75975162021-11-29 21:41:094 mins ago0xeb405ac828a18e7f1f9ac27fbcc701f132583cc3 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.007536170487172.594597105
0x569fce41ba6da8da86aace8b5a055092902b6f07cc1b1f1765e4b62ea944ae84Any Swap In Auto75975142021-11-29 21:41:064 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.009385722295189.936705365
0xd2fb2f993f9b65bffe6dc50f4dd03f80f9611b38d9db6a7d06a16db2eb9bbbebAny Swap In Auto75975122021-11-29 21:41:014 mins ago0x2a038e100f8b85df21e4d44121bdbfe0c288a869 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.009745086044197.256969092
0x071af71ecfc5528d38e647d89bc868cf10145c8042b749c2fae90d88e1b264dbAny Swap Out Und...75975042021-11-29 21:40:455 mins ago0xba8d62918b242917cf67d04c7d68ecaad63df8b3 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.016815154699176.674315998
0x9bc943c95077796371a819f8a476eceea1cc7b63b098b121a72f1c5cf3d77417Any Swap Out Und...75974972021-11-29 21:40:295 mins ago0xebcadb96650a720b65c93f106e8a62e933b3b351 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.016587507431174.326419117
0x6e2f40220dd25a2b842a0653539e50a36cfbc157828b44f455e0dc57210a6998Any Swap Out Und...75974902021-11-29 21:40:135 mins ago0xe412076a3b9c08e6f4118eb0cdcf0af479022ee4 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.016339411621171.654112092
0x1ab305660a94ca7b96783e6023e6303faa22e567f79f17b23fa82d291b59c843Any Swap Out75974762021-11-29 21:39:466 mins ago0x482d748eb9bf89f81077e67c78a85de9fd07d100 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.007549586124172.949375151
0xa61a24fe42ee275823448c7ce229bd0bd517f29bf6af8901c1d03ee61355e25fAny Swap Out75974702021-11-29 21:39:346 mins ago0x82a42405484f433dd4cb76c2e1be9a37eba666d9 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.007456619025170.772696625
0x0a7f276d343953c26d0ec71c60d62f0dcc21d1a090b5e38a70734438a0683134Any Swap Out Und...75974582021-11-29 21:39:126 mins ago0x0c89b2bfea7cc8ffbe4a4998e02c91552fba0c60 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.023075904895242.455082121
0xe0558cc4421a4394dc58f3e9f7fbecf20040b43d2f0b8580bde778ebb2dcacceAny Swap Out Und...75974362021-11-29 21:38:267 mins ago0xcc9a62138ecd83b338df21dadc77ef67caf82f83 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.015374825819161.561365848
0xa315780a4abb216b8e5a1d1ab341037e2373bd5581610af9d292ac03ba69f1d0Any Swap Out75974312021-11-29 21:38:147 mins ago0xbe4ba0ab3260fab4cbc64a75b1d8a2f9e56226c7 IN  0xb0731d50c681c45856bfc3f7539d5f61d4be81d80 AVAX0.006842278144156.789141719
[ Download CSV Export 
Parent Txn Hash Block From To Value
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
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.