Contract 0xb576c9403f39829565bd6051695e2ac7ecf850e2 8

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xe5578eaa090caa5f5d8716ee1c1ff0d14fb5d20575758c2a4b6dd5ed49d76f68Any Swap Out632821632023-05-29 10:27:583 mins ago0x8eae016b50c103a5438a5f50aaa04d409af29dc8 IN  Multichain: Router V4 20 FTM0.03959689501
0xd0834a18d969e1b13955abf43f85e602740e13dadd240a89b4164c5bdd99d818Any Swap Out632820272023-05-29 10:23:097 mins ago0x809ec84644d4cc0ae27dba154b6acfa8ffe0cbb7 IN  Multichain: Router V4 20 FTM0.002601762577
0xff90eff6d0b84cc0a2c5634f402268584105af3fed6573abb38816bdd07cfa5aAny Swap Out Und...632810582023-05-29 9:48:2842 mins ago0xee1e986590c58c50cf90e7a73d03fcdf5ff7503d IN  Multichain: Router V4 20 FTM0.071193984487
0x551b7ba9d2ead56b3c726f9548f03f763a3b20eeb4006a387f5f56a92a495292Any Swap In Auto632808292023-05-29 9:40:2950 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  Multichain: Router V4 20 FTM0.057996379868
0xf5aaec066aa81aae39ff98caaf347ba25d8404db793fec4bfcb0a633a19cf429Any Swap In Auto632806862023-05-29 9:35:0955 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  Multichain: Router V4 20 FTM0.099999019245
0x0d7e74f298d02834bae7040d883ee1139b06a6b81fbd86e6dae047607f55edaeAny Swap Out632793882023-05-29 8:53:471 hr 37 mins ago0x8eae016b50c103a5438a5f50aaa04d409af29dc8 IN  Multichain: Router V4 20 FTM0.026598451232
0x010f23645d5433a999edc3821e4d245f010fea3956b5007258728a8a648dfa74Any Swap Out632783792023-05-29 8:19:522 hrs 11 mins ago0x5e53ce97fcd3abe46f1ab45abb3e9a9c5e19f193 IN  Multichain: Router V4 20 FTM0.019742357931
0x2a62f2aa193da888ee2c5e96855b19fe8562f36bb56c370ffb48b9d5a041d2abAny Swap In Auto632756672023-05-29 6:41:363 hrs 49 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  Multichain: Router V4 20 FTM0.004659674532
0xc007f3b8f2f873fab12f056df09506af6b3b0dd463bd4399bf30c7fb33bfcaa2Any Swap In Auto632749282023-05-29 6:16:054 hrs 15 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  Multichain: Router V4 20 FTM0.004668734455
0x7a87096ff773a7ea0d39c9ceb26ac91ee4b5cb5b4e7ae44818897c0b51b007e3Any Swap In Auto632734722023-05-29 5:28:275 hrs 2 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  Multichain: Router V4 20 FTM0.005777415859
0x4c6a568688587caaed3d0e8b3051ebe20836bce777276df03bd702cc6c206335Any Swap In Auto632734672023-05-29 5:28:225 hrs 2 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  Multichain: Router V4 20 FTM0.005542591471
0x2fb70883d0687cc799b08cf74f676b810e9bc649cb6bcfedb819ff131b66671cAny Swap In Auto632734612023-05-29 5:28:105 hrs 2 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  Multichain: Router V4 20 FTM0.00525134588
0x62a6e085d4267b613d88b4ee1e92eeaa90a34fc12286cde01c52b604612770e2Any Swap In Auto632731672023-05-29 5:17:245 hrs 13 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  Multichain: Router V4 20 FTM0.00498963456
0x0f7b88bb1bdec8fb6cb965c2a1cc0255fe6fcdf67917a60e6d642e4f8400e8b3Any Swap In Auto632731592023-05-29 5:17:035 hrs 14 mins ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  Multichain: Router V4 20 FTM0.004994444709
0x66cf0e4e4499841d16e3754133c54df8430428e03cc84fb6ed0695dc0c5fe0f7Any Swap Out Und...632731162023-05-29 5:15:345 hrs 15 mins ago0x4cb6f0ef0eeb503f8065af1a6e6d5dd46197d3d9 IN  Multichain: Router V4 20 FTM0.676062918
0xdc9bca69453022380cbd4dbfbea2a90473be9e5ff03525ea5b9d9444d739f137Any Swap Out Und...632723602023-05-29 4:55:185 hrs 35 mins ago0x3a1b51be347cc35bee967fa6d32c07b63cd4e41e IN  Multichain: Router V4 20 FTM0.005947683
0x2afcc9cc9006dca7639c09cafcf22cc3aa044c59d17221775abd098485035c56Any Swap Out632713852023-05-29 4:25:306 hrs 5 mins ago0x3c5aac016ef2f178e8699d6208796a2d67557fe2 IN  Multichain: Router V4 20 FTM0.00441876
0xb3e5b294ef7cbbe7c846ab13f8b454a34ddc86343e4aab2a665996f1f5875ed5Any Swap Out Und...632711462023-05-29 4:17:306 hrs 13 mins ago0xa311f7ca3eb2fb98123a807f9b8e4bbbdbdcb2ee IN  Multichain: Router V4 20 FTM0.064313182
0xe2e21e826c188ef7f0123d47aa05ca6b310946091d25c63bd73023cf59fe7d14Any Swap Out Und...632704402023-05-29 3:56:276 hrs 34 mins ago0x8039f3aa709fec29fdc5f075449b23ab609a6998 IN  Multichain: Router V4 20 FTM0.144695545138
0x1e5ddfa9fb9d0950fd366fd68ba5e4f564d01ebd6ac4b0b4ecf38fcf8725d6e4Any Swap In Auto632696462023-05-29 3:31:027 hrs ago0x647dc1366da28f8a64eb831fc8e9f05c90d1ea5a IN  Multichain: Router V4 20 FTM0.006290123254
0xd596c421341d07023e927a76e92044b91709211e36eb45d902069b796e4b3ff4Any Swap Out Und...632696272023-05-29 3:30:287 hrs ago0xa311f7ca3eb2fb98123a807f9b8e4bbbdbdcb2ee IN  Multichain: Router V4 20 FTM0.064317593
0xb65f71f5d5a669696090d5ef2532df3ada1f84172fc0f302a5e011436b3893fdAny Swap Out Und...632692522023-05-29 3:16:037 hrs 15 mins ago0xa311f7ca3eb2fb98123a807f9b8e4bbbdbdcb2ee IN  Multichain: Router V4 20 FTM0.064313182
0x1ecfb963f6cc8cbe201548362b00743a52292fcb1e5eb9f29fd22fdb58f28081Any Swap Out Und...632692502023-05-29 3:15:577 hrs 15 mins ago0x4cb6f0ef0eeb503f8065af1a6e6d5dd46197d3d9 IN  Multichain: Router V4 20 FTM0.676495764
0x068e829f05d7bbe798e7cbe0a0dc830e37a768fcf237fae7a47c92336813ce70Any Swap Out Und...632682662023-05-29 2:45:197 hrs 45 mins ago0xa311f7ca3eb2fb98123a807f9b8e4bbbdbdcb2ee IN  Multichain: Router V4 20 FTM0.064239799
0xae248b62c76fb569b755c81fe9ed1fe69004db17c05c4e7bca547a9f13ce0b71Any Swap Out Und...632680132023-05-29 2:38:527 hrs 52 mins ago0xcba1a275e2d858ecffaf7a87f606f74b719a8a93 IN  Multichain: Router V4 20 FTM0.005695740014
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x1350ab86e6f3c4f4477ae3a83b1f19642d859bcd89ca42faf128a1021a030911167150762021-09-09 2:34:18627 days 7 hrs ago Multichain: Deployer 2  Contract Creation0 FTM
[ Download CSV Export 
Loading

Similar Match Source Code
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x85fd5f8dbd0c9ef1806e6c7d4b787d438621c1dc

Contract Name:
AnyswapV4Router

Compiler Version
v0.8.1+commit.df193b15

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *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 Security Audit

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

60c06040523480156200001157600080fd5b506040516200499c3803806200499c833981016040819052620000349162000095565b600180546001600160a01b039092166001600160a01b0319909216919091179055426002556001600160601b0319606092831b8116608052911b1660a052620000de565b80516001600160a01b03811681146200009057600080fd5b919050565b600080600060608486031215620000aa578283fd5b620000b58462000078565b9250620000c56020850162000078565b9150620000d56040850162000078565b90509250925092565b60805160601c60a05160601c61484c62000150600039600081816101ec01528181611499015281816116380152611e3d015260008181610aef01528181610cda01528181610dc8015281816115230152818161254b015281816128a7015281816133220152613380015261484c6000f3fe6080604052600436106101dc5760003560e01c8063825bb13c11610102578063ad615dec11610095578063d8b9f61011610064578063d8b9f610146105aa578063dcfb77b1146105ca578063edbdf5e2146105ea578063f75c26641461060a57610229565b8063ad615dec14610535578063c45a015514610555578063c8e174f61461056a578063d06ca61f1461058a57610229565b80638fd903f5116100d15780638fd903f5146104be57806399a2f2d7146104e057806399cd84b5146104f55780639aa1ac611461051557610229565b8063825bb13c1461043e57806385f8c2591461045e57806387cc6e2f1461047e5780638d7d3eea1461049e57610229565b80632fc1e7281161017a57806352a397d51161014957806352a397d5146103be5780635b7b018c146103de57806365782f56146103fe5780636a4539721461041e57610229565b80632fc1e728146103315780633f88de8914610351578063456862aa146103715780634d93bb941461039e57610229565b80631b91a934116101b65780631b91a934146102a45780631f00ca74146102c4578063241dc2df146102f157806325121b761461031157610229565b80630175b1c41461022e578063054d50d41461024e5780630bb572031461028457610229565b3661022957336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461022757634e487b7160e01b600052600160045260246000fd5b005b600080fd5b34801561023a57600080fd5b50610227610249366004613d21565b61061f565b34801561025a57600080fd5b5061026e610269366004613fa8565b61080b565b60405161027b9190614660565b60405180910390f35b34801561029057600080fd5b5061022761029f366004613f2d565b610820565b3480156102b057600080fd5b506102276102bf3660046139aa565b610954565b3480156102d057600080fd5b506102e46102df366004613e5b565b610ae8565b60405161027b91906141f3565b3480156102fd57600080fd5b5061022761030c366004613a34565b610b1e565b34801561031d57600080fd5b5061022761032c366004613c16565b610b31565b34801561033d57600080fd5b506102e461034c366004613d72565b610c7a565b34801561035d57600080fd5b5061022761036c366004613d21565b610ed3565b34801561037d57600080fd5b5061039161038c366004613972565b610fa0565b60405161027b9190614237565b3480156103aa57600080fd5b506102276103b9366004613aa4565b61107e565b3480156103ca57600080fd5b506102e46103d9366004613d72565b611434565b3480156103ea57600080fd5b506103916103f9366004613933565b611726565b34801561040a57600080fd5b50610227610419366004613f2d565b611829565b34801561042a57600080fd5b50610227610439366004613f2d565b611938565b34801561044a57600080fd5b50610227610459366004613d21565b611b16565b34801561046a57600080fd5b5061026e610479366004613fa8565b611b62565b34801561048a57600080fd5b50610227610499366004613a79565b611b6f565b3480156104aa57600080fd5b506102276104b93660046139aa565b611cb5565b3480156104ca57600080fd5b506104d3611e3b565b60405161027b919061406c565b3480156104ec57600080fd5b5061026e611e5f565b34801561050157600080fd5b50610227610510366004613aa4565b611e63565b34801561052157600080fd5b50610227610530366004613aa4565b6121e0565b34801561054157600080fd5b5061026e610550366004613fa8565b61253c565b34801561056157600080fd5b506104d3612549565b34801561057657600080fd5b50610227610585366004613aa4565b61256d565b34801561059657600080fd5b506102e46105a5366004613e5b565b6128a0565b3480156105b657600080fd5b506102276105c5366004613f2d565b6128cd565b3480156105d657600080fd5b506102276105e5366004613b57565b6129e9565b3480156105f657600080fd5b50610227610605366004613a34565b612ac7565b34801561061657600080fd5b506104d3612bd1565b610627612bd1565b6001600160a01b0316336001600160a01b0316146106605760405162461bcd60e51b815260040161065790614452565b60405180910390fd5b61066d8585858585612bff565b60008490506000816001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156106ad57600080fd5b505afa1580156106c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e59190613956565b90506001600160a01b0381161580159061077b57506040516370a0823160e01b815284906001600160a01b038316906370a0823190610728908a9060040161406c565b60206040518083038186803b15801561074057600080fd5b505afa158015610754573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107789190613e43565b10155b1561080257604051620e75bb60e21b81526001600160a01b038316906239d6ec906107ae908890889082906004016140fe565b602060405180830381600087803b1580156107c857600080fd5b505af11580156107dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108009190613e43565b505b50505050505050565b6000610818848484612cde565b949350505050565b81428110156108415760405162461bcd60e51b815260040161065790614575565b8585600081811061086257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906108779190613933565b6001600160a01b0316639dc29fac338a6040518363ffffffff1660e01b81526004016108a49291906140e5565b602060405180830381600087803b1580156108be57600080fd5b505af11580156108d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f69190613d01565b506001600160a01b038416337ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b388888c8c61092f611e5f565b8960405161094296959493929190614121565b60405180910390a35050505050505050565b876001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561098d57600080fd5b505afa1580156109a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109c59190613956565b6001600160a01b031663605629d68a8a89898989896040518863ffffffff1660e01b81526004016109fc97969594939291906140a4565b602060405180830381600087803b158015610a1657600080fd5b505af1158015610a2a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4e9190613d01565b50604051630bebbf4d60e41b81526001600160a01b0389169063bebbf4d090610a7d9089908d90600401614669565b602060405180830381600087803b158015610a9757600080fd5b505af1158015610aab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610acf9190613e43565b50610add8989898985612d78565b505050505050505050565b6060610b157f00000000000000000000000000000000000000000000000000000000000000008484612e51565b90505b92915050565b610b2b3385858585612d78565b50505050565b610b39612bd1565b6001600160a01b0316336001600160a01b031614610b695760405162461bcd60e51b815260040161065790614452565b60005b87811015610c6d57610c5b8b8b83818110610b9757634e487b7160e01b600052603260045260246000fd5b905060200201358a8a84818110610bbe57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610bd39190613933565b898985818110610bf357634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610c089190613933565b888886818110610c2857634e487b7160e01b600052603260045260246000fd5b90506020020135878787818110610c4f57634e487b7160e01b600052603260045260246000fd5b90506020020135612bff565b80610c6581614797565b915050610b6c565b5050505050505050505050565b6060610c84612bd1565b6001600160a01b0316336001600160a01b031614610cb45760405162461bcd60e51b815260040161065790614452565b8242811015610cd55760405162461bcd60e51b815260040161065790614575565b610d337f00000000000000000000000000000000000000000000000000000000000000008a89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061300b92505050565b9150878260018451610d45919061473d565b81518110610d6357634e487b7160e01b600052603260045260246000fd5b60200260200101511015610d895760405162461bcd60e51b8152600401610657906143bf565b610e878a88886000818110610dae57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610dc39190613933565b610e587f00000000000000000000000000000000000000000000000000000000000000008b8b6000818110610e0857634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610e1d9190613933565b8c8c6001818110610e3e57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610e539190613933565b6131a5565b85600081518110610e7957634e487b7160e01b600052603260045260246000fd5b602002602001015187612bff565b610ec6828888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a9250613215915050565b5098975050505050505050565b610edb612bd1565b6001600160a01b0316336001600160a01b031614610f0b5760405162461bcd60e51b815260040161065790614452565b610f188585858585612bff565b604051620e75bb60e21b81526001600160a01b038516906239d6ec90610f46908690869082906004016140fe565b602060405180830381600087803b158015610f6057600080fd5b505af1158015610f74573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f989190613e43565b505050505050565b6000610faa612bd1565b6001600160a01b0316336001600160a01b031614610fda5760405162461bcd60e51b815260040161065790614452565b6001600160a01b0382166110005760405162461bcd60e51b8152600401610657906142f0565b6040516360e232a960e01b81526001600160a01b038416906360e232a99061102c90859060040161406c565b602060405180830381600087803b15801561104657600080fd5b505af115801561105a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b159190613d01565b844281101561109f5760405162461bcd60e51b815260040161065790614575565b6000898960008181106110c257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906110d79190613933565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561110f57600080fd5b505afa158015611123573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111479190613956565b9050806001600160a01b031663d505accf8e308f8b8b8b8b6040518863ffffffff1660e01b815260040161118197969594939291906140a4565b600060405180830381600087803b15801561119b57600080fd5b505af11580156111af573d6000803e3d6000fd5b505050506111f4818e8c8c60008181106111d957634e487b7160e01b600052603260045260246000fd5b90506020020160208101906111ee9190613933565b8f61344f565b8989600081811061121557634e487b7160e01b600052603260045260246000fd5b905060200201602081019061122a9190613933565b6001600160a01b031663bebbf4d08d8f6040518363ffffffff1660e01b8152600401611257929190614669565b602060405180830381600087803b15801561127157600080fd5b505af1158015611285573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a99190613e43565b50898960008181106112cb57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906112e09190613933565b6001600160a01b0316639dc29fac8e8e6040518363ffffffff1660e01b815260040161130d9291906140e5565b602060405180830381600087803b15801561132757600080fd5b505af115801561133b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061135f9190613d01565b5060008a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050905060008e905060008a905060008f905060008f905060006113c4611e5f565b90506000899050846001600160a01b0316866001600160a01b03167f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f4898787878760405161141695949392919061418b565b60405180910390a35050505050505050505050505050505050505050565b606061143e612bd1565b6001600160a01b0316336001600160a01b03161461146e5760405162461bcd60e51b815260040161065790614452565b824281101561148f5760405162461bcd60e51b815260040161065790614575565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001687876114c660018261473d565b8181106114e357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906114f89190613933565b6001600160a01b03161461151e5760405162461bcd60e51b8152600401610657906144be565b61157c7f00000000000000000000000000000000000000000000000000000000000000008a89898080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061300b92505050565b915087826001845161158e919061473d565b815181106115ac57634e487b7160e01b600052603260045260246000fd5b602002602001015110156115d25760405162461bcd60e51b8152600401610657906144f5565b6115f78a88886000818110610dae57634e487b7160e01b600052603260045260246000fd5b61163682888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613215915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551611674919061473d565b8151811061169257634e487b7160e01b600052603260045260246000fd5b60200260200101516040518263ffffffff1660e01b81526004016116b69190614660565b600060405180830381600087803b1580156116d057600080fd5b505af11580156116e4573d6000803e3d6000fd5b50505050610ec68583600185516116fb919061473d565b8151811061171957634e487b7160e01b600052603260045260246000fd5b6020026020010151613537565b6000611730612bd1565b6001600160a01b0316336001600160a01b0316146117605760405162461bcd60e51b815260040161065790614452565b6001600160a01b0382166117865760405162461bcd60e51b8152600401610657906142f0565b61178e612bd1565b600080546001600160a01b03199081166001600160a01b0393841617909155600180549091169184169190911790556117ca426202a3006146e6565b60028190556001546000546001600160a01b0391821691167fcda32bc39904597666dfa9f9c845714756e1ffffad55b52e0d344673a219812161180b611e5f565b6040516118189190614660565b60405180910390a45060015b919050565b814281101561184a5760405162461bcd60e51b815260040161065790614575565b8585600081811061186b57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906118809190613933565b6001600160a01b0316639dc29fac338a6040518363ffffffff1660e01b81526004016118ad9291906140e5565b602060405180830381600087803b1580156118c757600080fd5b505af11580156118db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ff9190613d01565b506001600160a01b038416337f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f488888c8c61092f611e5f565b81428110156119595760405162461bcd60e51b815260040161065790614575565b611a3f8686600081811061197d57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906119929190613933565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156119ca57600080fd5b505afa1580156119de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a029190613956565b3388886000818110611a2457634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611a399190613933565b8b61344f565b85856000818110611a6057634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611a759190613933565b6001600160a01b031663bebbf4d089336040518363ffffffff1660e01b8152600401611aa2929190614669565b602060405180830381600087803b158015611abc57600080fd5b505af1158015611ad0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af49190613e43565b508585600081811061186b57634e487b7160e01b600052603260045260246000fd5b611b1e612bd1565b6001600160a01b0316336001600160a01b031614611b4e5760405162461bcd60e51b815260040161065790614452565b611b5b8585858585612bff565b5050505050565b60006108188484846135c9565b611b77612bd1565b6001600160a01b0316336001600160a01b031614611ba75760405162461bcd60e51b815260040161065790614452565b6000611bb1612bd1565b6040516340c10f1960e01b81529091506001600160a01b038416906340c10f1990611be290849086906004016140e5565b602060405180830381600087803b158015611bfc57600080fd5b505af1158015611c10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c349190613d01565b50604051620e75bb60e21b81526001600160a01b038416906239d6ec90611c63908490869082906004016140fe565b602060405180830381600087803b158015611c7d57600080fd5b505af1158015611c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2b9190613e43565b6000886001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611cf057600080fd5b505afa158015611d04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d289190613956565b60405163d505accf60e01b81529091506001600160a01b0382169063d505accf90611d63908d9030908c908c908c908c908c906004016140a4565b600060405180830381600087803b158015611d7d57600080fd5b505af1158015611d91573d6000803e3d6000fd5b50505050611da1818b8b8a61344f565b604051630bebbf4d60e41b81526001600160a01b038a169063bebbf4d090611dcf908a908e90600401614669565b602060405180830381600087803b158015611de957600080fd5b505af1158015611dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e219190613e43565b50611e2f8a8a8a8a86612d78565b50505050505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b4690565b8442811015611e845760405162461bcd60e51b815260040161065790614575565b600089896000818110611ea757634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611ebc9190613933565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611ef457600080fd5b505afa158015611f08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2c9190613956565b9050806001600160a01b031663d505accf8e308f8b8b8b8b6040518863ffffffff1660e01b8152600401611f6697969594939291906140a4565b600060405180830381600087803b158015611f8057600080fd5b505af1158015611f94573d6000803e3d6000fd5b50505050611fbe818e8c8c60008181106111d957634e487b7160e01b600052603260045260246000fd5b89896000818110611fdf57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190611ff49190613933565b6001600160a01b031663bebbf4d08d8f6040518363ffffffff1660e01b8152600401612021929190614669565b602060405180830381600087803b15801561203b57600080fd5b505af115801561204f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120739190613e43565b508989600081811061209557634e487b7160e01b600052603260045260246000fd5b90506020020160208101906120aa9190613933565b6001600160a01b0316639dc29fac8e8e6040518363ffffffff1660e01b81526004016120d79291906140e5565b602060405180830381600087803b1580156120f157600080fd5b505af1158015612105573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121299190613d01565b5060008a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050905060008e905060008a905060008f905060008f9050600061218e611e5f565b90506000899050846001600160a01b0316866001600160a01b03167ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b3898787878760405161141695949392919061418b565b84428110156122015760405162461bcd60e51b815260040161065790614575565b8888600081811061222257634e487b7160e01b600052603260045260246000fd5b90506020020160208101906122379190613933565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561226f57600080fd5b505afa158015612283573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122a79190613956565b6001600160a01b031663605629d68d8b8b60008181106122d757634e487b7160e01b600052603260045260246000fd5b90506020020160208101906122ec9190613933565b8e8a8a8a8a6040518863ffffffff1660e01b815260040161231397969594939291906140a4565b602060405180830381600087803b15801561232d57600080fd5b505af1158015612341573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123659190613d01565b508888600081811061238757634e487b7160e01b600052603260045260246000fd5b905060200201602081019061239c9190613933565b6001600160a01b031663bebbf4d08c8e6040518363ffffffff1660e01b81526004016123c9929190614669565b602060405180830381600087803b1580156123e357600080fd5b505af11580156123f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061241b9190613e43565b508888600081811061243d57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906124529190613933565b6001600160a01b0316639dc29fac8d8d6040518363ffffffff1660e01b815260040161247f9291906140e5565b602060405180830381600087803b15801561249957600080fd5b505af11580156124ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d19190613d01565b50866001600160a01b03168c6001600160a01b03167ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b38b8b8f8f612513611e5f565b8960405161252696959493929190614121565b60405180910390a3505050505050505050505050565b600061081884848461365d565b7f000000000000000000000000000000000000000000000000000000000000000081565b844281101561258e5760405162461bcd60e51b815260040161065790614575565b888860008181106125af57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906125c49190613933565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156125fc57600080fd5b505afa158015612610573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126349190613956565b6001600160a01b031663605629d68d8b8b600081811061266457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906126799190613933565b8e8a8a8a8a6040518863ffffffff1660e01b81526004016126a097969594939291906140a4565b602060405180830381600087803b1580156126ba57600080fd5b505af11580156126ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126f29190613d01565b508888600081811061271457634e487b7160e01b600052603260045260246000fd5b90506020020160208101906127299190613933565b6001600160a01b031663bebbf4d08c8e6040518363ffffffff1660e01b8152600401612756929190614669565b602060405180830381600087803b15801561277057600080fd5b505af1158015612784573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127a89190613e43565b50888860008181106127ca57634e487b7160e01b600052603260045260246000fd5b90506020020160208101906127df9190613933565b6001600160a01b0316639dc29fac8d8d6040518363ffffffff1660e01b815260040161280c9291906140e5565b602060405180830381600087803b15801561282657600080fd5b505af115801561283a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061285e9190613d01565b50866001600160a01b03168c6001600160a01b03167f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f48b8b8f8f612513611e5f565b6060610b157f0000000000000000000000000000000000000000000000000000000000000000848461300b565b81428110156128ee5760405162461bcd60e51b815260040161065790614575565b6129128686600081811061197d57634e487b7160e01b600052603260045260246000fd5b8585600081811061293357634e487b7160e01b600052603260045260246000fd5b90506020020160208101906129489190613933565b6001600160a01b031663bebbf4d089336040518363ffffffff1660e01b8152600401612975929190614669565b602060405180830381600087803b15801561298f57600080fd5b505af11580156129a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c79190613e43565b508585600081811061086257634e487b7160e01b600052603260045260246000fd5b60005b87811015610add57612ab5338a8a84818110612a1857634e487b7160e01b600052603260045260246000fd5b9050602002016020810190612a2d9190613933565b898985818110612a4d57634e487b7160e01b600052603260045260246000fd5b9050602002016020810190612a629190613933565b888886818110612a8257634e487b7160e01b600052603260045260246000fd5b90506020020135878787818110612aa957634e487b7160e01b600052603260045260246000fd5b90506020020135612d78565b80612abf81614797565b9150506129ec565b612b43846001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015612b0357600080fd5b505afa158015612b17573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3b9190613956565b33868561344f565b604051630bebbf4d60e41b81526001600160a01b0385169063bebbf4d090612b719085903390600401614669565b602060405180830381600087803b158015612b8b57600080fd5b505af1158015612b9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bc39190613e43565b50610b2b3385858585612d78565b60006002544210612bee57506001546001600160a01b0316612bfc565b506000546001600160a01b03165b90565b6040516340c10f1960e01b81526001600160a01b038516906340c10f1990612c2d90869086906004016140e5565b602060405180830381600087803b158015612c4757600080fd5b505af1158015612c5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7f9190613d01565b50826001600160a01b0316846001600160a01b0316867faac9ce45fe3adf5143598c4f18a369591a20a3384aedaf1b525d29127e1fcd558585612cc0611e5f565b604051612ccf939291906146d0565b60405180910390a45050505050565b6000808411612cff5760405162461bcd60e51b8152600401610657906145ac565b600083118015612d0f5750600082115b612d2b5760405162461bcd60e51b815260040161065790614242565b6000612d39856103e56136bf565b90506000612d4782856136bf565b90506000612d6183612d5b886103e86136bf565b906136ff565b9050612d6d81836146fe565b979650505050505050565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac90612da690889086906004016140e5565b602060405180830381600087803b158015612dc057600080fd5b505af1158015612dd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612df89190613d01565b50826001600160a01b0316856001600160a01b0316856001600160a01b03167f97116cf6cd4f6412bb47914d6db18da9e16ab2142f543b86e207c24fbd16b23a85612e41611e5f565b86604051612ccf939291906146d0565b6060600282511015612e755760405162461bcd60e51b81526004016106579061462b565b815167ffffffffffffffff811115612e9d57634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015612ec6578160200160208202803683370190505b509050828160018351612ed9919061473d565b81518110612ef757634e487b7160e01b600052603260045260246000fd5b602002602001018181525050600060018351612f13919061473d565b90505b801561300357600080612f828786612f2f60018761473d565b81518110612f4d57634e487b7160e01b600052603260045260246000fd5b6020026020010151878681518110612f7557634e487b7160e01b600052603260045260246000fd5b602002602001015161372d565b91509150612fb8848481518110612fa957634e487b7160e01b600052603260045260246000fd5b602002602001015183836135c9565b84612fc460018661473d565b81518110612fe257634e487b7160e01b600052603260045260246000fd5b60200260200101818152505050508080612ffb90614780565b915050612f16565b509392505050565b606060028251101561302f5760405162461bcd60e51b81526004016106579061462b565b815167ffffffffffffffff81111561305757634e487b7160e01b600052604160045260246000fd5b604051908082528060200260200182016040528015613080578160200160208202803683370190505b50905082816000815181106130a557634e487b7160e01b600052603260045260246000fd5b60200260200101818152505060005b600183516130c2919061473d565b81101561300357600080613124878685815181106130f057634e487b7160e01b600052603260045260246000fd5b60200260200101518786600161310691906146e6565b81518110612f7557634e487b7160e01b600052603260045260246000fd5b9150915061315a84848151811061314b57634e487b7160e01b600052603260045260246000fd5b60200260200101518383612cde565b846131668560016146e6565b8151811061318457634e487b7160e01b600052603260045260246000fd5b6020026020010181815250505050808061319d90614797565b9150506130b4565b60008060006131b48585613806565b915091508582826040516020016131cc929190613fd3565b604051602081830303815290604052805190602001206040516020016131f3929190614016565b60408051601f1981840301815291905280516020909101209695505050505050565b60005b60018351613226919061473d565b811015610b2b5760008084838151811061325057634e487b7160e01b600052603260045260246000fd5b60200260200101518584600161326691906146e6565b8151811061328457634e487b7160e01b600052603260045260246000fd5b602002602001015191509150600061329c8383613806565b5090506000876132ad8660016146e6565b815181106132cb57634e487b7160e01b600052603260045260246000fd5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146132f9578260006132fd565b6000835b91509150600060028a51613311919061473d565b881061331d5788613379565b6133797f0000000000000000000000000000000000000000000000000000000000000000878c61334e8c60026146e6565b8151811061336c57634e487b7160e01b600052603260045260246000fd5b60200260200101516131a5565b90506133a67f000000000000000000000000000000000000000000000000000000000000000088886131a5565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156133e3576020820181803683370190505b506040518563ffffffff1660e01b81526004016134039493929190614680565b600060405180830381600087803b15801561341d57600080fd5b505af1158015613431573d6000803e3d6000fd5b5050505050505050505050808061344790614797565b915050613218565b600080856001600160a01b03166323b872dd86868660405160240161347693929190614080565b6040516020818303038152906040529060e01b6020820180516001600160e01b0383818316178352505050506040516134af9190613ffa565b6000604051808303816000865af19150503d80600081146134ec576040519150601f19603f3d011682016040523d82523d6000602084013e6134f1565b606091505b509150915081801561351b57508051158061351b57508080602001905181019061351b9190613d01565b610f985760405162461bcd60e51b8152600401610657906145e7565b604080516000808252602082019092526001600160a01b0384169083906040516135619190613ffa565b60006040518083038185875af1925050503d806000811461359e576040519150601f19603f3d011682016040523d82523d6000602084013e6135a3565b606091505b50509050806135c45760405162461bcd60e51b81526004016106579061440c565b505050565b60008084116135ea5760405162461bcd60e51b815260040161065790614355565b6000831180156135fa5750600082115b6136165760405162461bcd60e51b815260040161065790614242565b600061362e6103e861362886886136bf565b906136bf565b905060006136426103e56136288689613890565b90506136536001612d5b83856146fe565b9695505050505050565b600080841161367e5760405162461bcd60e51b815260040161065790614540565b60008311801561368e5750600082115b6136aa5760405162461bcd60e51b815260040161065790614242565b826136b585846136bf565b61081891906146fe565b60008115806136e3575082826136d5818361471e565b92506136e190836146fe565b145b610b185760405162461bcd60e51b815260040161065790614327565b60008261370c83826146e6565b9150811015610b185760405162461bcd60e51b815260040161065790614391565b600080600061373c8585613806565b50905060008061374d8888886131a5565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561378557600080fd5b505afa158015613799573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137bd9190613df5565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b0316146137f45780826137f7565b81815b90999098509650505050505050565b600080826001600160a01b0316846001600160a01b0316141561383b5760405162461bcd60e51b8152600401610657906142a9565b826001600160a01b0316846001600160a01b03161061385b57828461385e565b83835b90925090506001600160a01b0382166138895760405162461bcd60e51b815260040161065790614489565b9250929050565b60008261389d838261473d565b9150811115610b185760405162461bcd60e51b81526004016106579061427a565b8035611824816147de565b60008083601f8401126138da578081fd5b50813567ffffffffffffffff8111156138f1578182fd5b602083019150836020808302850101111561388957600080fd5b80516001600160701b038116811461182457600080fd5b803560ff8116811461182457600080fd5b600060208284031215613944578081fd5b813561394f816147de565b9392505050565b600060208284031215613967578081fd5b815161394f816147de565b60008060408385031215613984578081fd5b823561398f816147de565b9150602083013561399f816147de565b809150509250929050565b60008060008060008060008060006101208a8c0312156139c8578485fd5b89356139d3816147de565b985060208a01356139e3816147de565b975060408a01356139f3816147de565b965060608a0135955060808a01359450613a0f60a08b01613922565b935060c08a0135925060e08a013591506101008a013590509295985092959850929598565b60008060008060808587031215613a49578384fd5b8435613a54816147de565b93506020850135613a64816147de565b93969395505050506040820135916060013590565b60008060408385031215613a8b578182fd5b8235613a96816147de565b946020939093013593505050565b60008060008060008060008060008060006101408c8e031215613ac5578182fd5b8b35613ad0816147de565b9a5060208c0135995060408c0135985060608c013567ffffffffffffffff811115613af9578283fd5b613b058e828f016138c9565b90995097505060808c0135613b19816147de565b955060a08c01359450613b2e60c08d01613922565b935060e08c013592506101008c013591506101208c013590509295989b509295989b9093969950565b6000806000806000806000806080898b031215613b72578182fd5b883567ffffffffffffffff80821115613b89578384fd5b613b958c838d016138c9565b909a50985060208b0135915080821115613bad578384fd5b613bb98c838d016138c9565b909850965060408b0135915080821115613bd1578384fd5b613bdd8c838d016138c9565b909650945060608b0135915080821115613bf5578384fd5b50613c028b828c016138c9565b999c989b5096995094979396929594505050565b60008060008060008060008060008060a08b8d031215613c34578384fd5b8a3567ffffffffffffffff80821115613c4b578586fd5b613c578e838f016138c9565b909c509a5060208d0135915080821115613c6f578586fd5b613c7b8e838f016138c9565b909a50985060408d0135915080821115613c93578586fd5b613c9f8e838f016138c9565b909850965060608d0135915080821115613cb7578586fd5b613cc38e838f016138c9565b909650945060808d0135915080821115613cdb578384fd5b50613ce88d828e016138c9565b915080935050809150509295989b9194979a5092959850565b600060208284031215613d12578081fd5b8151801515811461394f578182fd5b600080600080600060a08688031215613d38578283fd5b853594506020860135613d4a816147de565b93506040860135613d5a816147de565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b031215613d8d578182fd5b883597506020890135965060408901359550606089013567ffffffffffffffff811115613db8578283fd5b613dc48b828c016138c9565b9096509450506080890135613dd8816147de565b979a969950949793969295929450505060a08201359160c0013590565b600080600060608486031215613e09578081fd5b613e128461390b565b9250613e206020850161390b565b9150604084015163ffffffff81168114613e38578182fd5b809150509250925092565b600060208284031215613e54578081fd5b5051919050565b60008060408385031215613e6d578182fd5b8235915060208084013567ffffffffffffffff80821115613e8c578384fd5b818601915086601f830112613e9f578384fd5b813581811115613eb157613eb16147c8565b838102604051601f19603f83011681018181108582111715613ed557613ed56147c8565b604052828152858101935084860182860187018b1015613ef3578788fd5b8795505b83861015613f1c57613f08816138be565b855260019590950194938601938601613ef7565b508096505050505050509250929050565b600080600080600080600060c0888a031215613f47578081fd5b8735965060208801359550604088013567ffffffffffffffff811115613f6b578182fd5b613f778a828b016138c9565b9096509450506060880135613f8b816147de565b969995985093969295946080840135945060a09093013592915050565b600080600060608486031215613fbc578081fd5b505081359360208301359350604090920135919050565b6bffffffffffffffffffffffff19606093841b811682529190921b16601482015260280190565b6000825161400c818460208701614754565b9190910192915050565b6001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303603582015260550190565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b60a0808252810186905260008760c08301825b89811015614164578235614147816147de565b6001600160a01b0316825260209283019290910190600101614134565b50602084019790975250506040810193909352606083019190915260809091015292915050565b60a0808252865190820181905260009060209060c0840190828a01845b828110156141cd5781516001600160a01b0316845292840192908401906001016141a8565b505050908301969096525060408101939093526060830191909152608090910152919050565b6020808252825182820181905260009190848201906040850190845b8181101561422b5783518352928401929184019160010161420f565b50909695505050505050565b901515815260200190565b6020808252602a908201526000805160206147f78339815191526040820152695f4c495155494449545960b01b606082015260800190565b60208082526015908201527464732d6d6174682d7375622d756e646572666c6f7760581b604082015260600190565b60208082526027908201527f53757368697377617056324c6962726172793a204944454e544943414c5f41446040820152664452455353455360c81b606082015260800190565b6020808252601d908201527f416e79737761705633526f757465723a20616464726573732830783029000000604082015260600190565b60208082526014908201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604082015260600190565b6020808252602e908201526000805160206147f783398151915260408201526d17d3d55514155517d05353d5539560921b606082015260800190565b60208082526014908201527364732d6d6174682d6164642d6f766572666c6f7760601b604082015260600190565b6020808252602d908201527f5375736869737761705632526f757465723a20494e53554646494349454e545f60408201526c13d55514155517d05353d55395609a1b606082015260800190565b60208082526026908201527f5472616e7366657248656c7065723a204e41544956455f5452414e534645525f60408201526511905253115160d21b606082015260800190565b6020808252601a908201527f416e79737761705633526f757465723a20464f5242494444454e000000000000604082015260600190565b6020808252818101527f53757368697377617056324c6962726172793a205a45524f5f41444452455353604082015260600190565b6020808252601d908201527f416e79737761705633526f757465723a20494e56414c49445f50415448000000604082015260600190565b6020808252602b908201527f416e79737761705633526f757465723a20494e53554646494349454e545f4f5560408201526a1514155517d05353d5539560aa1b606082015260800190565b60208082526027908201526000805160206147f783398151915260408201526617d05353d5539560ca1b606082015260800190565b60208082526018908201527f416e79737761705633526f757465723a20455850495245440000000000000000604082015260600190565b6020808252602d908201526000805160206147f783398151915260408201526c17d25394155517d05353d55395609a1b606082015260800190565b60208082526024908201527f5472616e7366657248656c7065723a205452414e534645525f46524f4d5f46416040820152631253115160e21b606082015260800190565b6020808252818101527f53757368697377617056324c6962726172793a20494e56414c49445f50415448604082015260600190565b90815260200190565b9182526001600160a01b0316602082015260400190565b600085825284602083015260018060a01b03841660408301526080606083015282518060808401526146b98160a0850160208701614754565b601f01601f19169190910160a00195945050505050565b9283526020830191909152604082015260600190565b600082198211156146f9576146f96147b2565b500190565b60008261471957634e487b7160e01b81526012600452602481fd5b500490565b6000816000190483118215151615614738576147386147b2565b500290565b60008282101561474f5761474f6147b2565b500390565b60005b8381101561476f578181015183820152602001614757565b83811115610b2b5750506000910152565b60008161478f5761478f6147b2565b506000190190565b60006000198214156147ab576147ab6147b2565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146147f357600080fd5b5056fe53757368697377617056324c6962726172793a20494e53554646494349454e54a26469706673582212201b3b5eed332d3cf385271e4302952bced8a897a420bb7ac2494f41ff570dd8d564736f6c63430008010033000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c400000000000000000000000021be370d5312f44cb42ce377bc9b8a0cef1a4c830000000000000000000000008b44a687224496276811555efa3f2d0acd667a72

Deployed ByteCode Sourcemap

8908:17352:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9450:10;-1:-1:-1;;;;;9464:7:0;9450:21;;9443:29;;-1:-1:-1;;;9443:29:0;;;;;;;;;8908:17352;;;;;14919:448;;;;;;;;;;-1:-1:-1;14919:448:0;;;;;:::i;:::-;;:::i;25268:246::-;;;;;;;;;;-1:-1:-1;25268:246:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16922:416;;;;;;;;;;-1:-1:-1;16922:416:0;;;;;:::i;:::-;;:::i;13048:498::-;;;;;;;;;;-1:-1:-1;13048:498:0;;;;;:::i;:::-;;:::i;26020:237::-;;;;;;;;;;-1:-1:-1;26020:237:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11807:157::-;;;;;;;;;;-1:-1:-1;11807:157:0;;;;;:::i;:::-;;:::i;15648:319::-;;;;;;;;;;-1:-1:-1;15648:319:0;;;;;:::i;:::-;;:::i;20161:648::-;;;;;;;;;;-1:-1:-1;20161:648:0;;;;;:::i;:::-;;:::i;14549:245::-;;;;;;;;;;-1:-1:-1;14549:245:0;;;;;:::i;:::-;;:::i;11244:228::-;;;;;;;;;;-1:-1:-1;11244:228:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22134:1075::-;;;;;;;;;;-1:-1:-1;22134:1075:0;;;;;:::i;:::-;;:::i;24149:886::-;;;;;;;;;;-1:-1:-1;24149:886:0;;;;;:::i;:::-;;:::i;10879:357::-;;;;;;;;;;-1:-1:-1;10879:357:0;;;;;:::i;:::-;;:::i;20910:416::-;;;;;;;;;;-1:-1:-1;20910:416:0;;;;;:::i;:::-;;:::i;21427:606::-;;;;;;;;;;-1:-1:-1;21427:606:0;;;;;:::i;:::-;;:::i;14263:173::-;;;;;;;;;;-1:-1:-1;14263:173:0;;;;;:::i;:::-;;:::i;25522:245::-;;;;;;;;;;-1:-1:-1;25522:245:0;;;;;:::i;:::-;;:::i;15417:223::-;;;;;;;;;;-1:-1:-1;15417:223:0;;;;;:::i;:::-;;:::i;12434:606::-;;;;;;;;;;-1:-1:-1;12434:606:0;;;;;:::i;:::-;;:::i;9020:32::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;10782:89::-;;;;;;;;;;;;;:::i;18146:1075::-;;;;;;;;;;-1:-1:-1;18146:1075:0;;;;;:::i;:::-;;:::i;19322:694::-;;;;;;;;;;-1:-1:-1;19322:694:0;;;;;:::i;:::-;;:::i;25079:181::-;;;;;;;;;;-1:-1:-1;25079:181:0;;;;;:::i;:::-;;:::i;8981:32::-;;;;;;;;;;;;;:::i;23310:694::-;;;;;;;;;;-1:-1:-1;23310:694:0;;;;;:::i;:::-;;:::i;25775:237::-;;;;;;;;;;-1:-1:-1;25775:237:0;;;;;:::i;:::-;;:::i;17439:606::-;;;;;;;;;;-1:-1:-1;17439:606:0;;;;;:::i;:::-;;:::i;13554:286::-;;;;;;;;;;-1:-1:-1;13554:286:0;;;;;:::i;:::-;;:::i;12089:337::-;;;;;;;;;;-1:-1:-1;12089:337:0;;;;;:::i;:::-;;:::i;10600:174::-;;;;;;;;;;;;;:::i;14919:448::-;10536:5;:3;:5::i;:::-;-1:-1:-1;;;;;10522:19:0;:10;-1:-1:-1;;;;;10522:19:0;;10514:58;;;;-1:-1:-1;;;10514:58:0;;;;;;;:::i;:::-;;;;;;;;;15041:47:::1;15052:3;15057:5;15064:2;15068:6;15076:11;15041:10;:47::i;:::-;15099:24;15141:5;15099:48;;15158:19;15180:9;-1:-1:-1::0;;;;;15180:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15158:44:::0;-1:-1:-1;;;;;;15217:25:0;::::1;::::0;;::::1;::::0;:75:::1;;-1:-1:-1::0;15246:36:0::1;::::0;-1:-1:-1;;;15246:36:0;;15286:6;;-1:-1:-1;;;;;15246:29:0;::::1;::::0;::::1;::::0;:36:::1;::::0;15276:5;;15246:36:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;15217:75;15213:147;;;15309:39;::::0;-1:-1:-1;;;15309:39:0;;-1:-1:-1;;;;;15309:23:0;::::1;::::0;::::1;::::0;:39:::1;::::0;15333:2;;15337:6;;15333:2;;15309:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15213:147;10583:1;;14919:448:::0;;;;;:::o;25268:246::-;25403:14;25442:64;25474:8;25484:9;25495:10;25442:31;:64::i;:::-;25435:71;25268:246;-1:-1:-1;;;;25268:246:0:o;16922:416::-;17149:8;9123:15;9111:8;:27;;9103:64;;;;-1:-1:-1;;;9103:64:0;;;;;;;:::i;:::-;17185:4:::1;;17190:1;17185:7;;;;;-1:-1:-1::0;;;17185:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17170:28:0::1;;17199:10;17211:8;17170:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;17236:94:0;::::1;17273:10;17236:94;17267:4:::0;;17289:8;17299:12;17313:5:::1;:3;:5::i;:::-;17320:9;17236:94;;;;;;;;;;;:::i;:::-;;;;;;;;16922:416:::0;;;;;;;;:::o;13048:498::-;13342:5;-1:-1:-1;;;;;13327:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13320:61:0;;13382:4;13388:5;13395:6;13403:8;13413:1;13416;13419;13320:101;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;13432:48:0;;-1:-1:-1;;;13432:48:0;;-1:-1:-1;;;;;13432:34:0;;;;;:48;;13467:6;;13475:4;;13432:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13491:47;13503:4;13509:5;13516:2;13520:6;13528:9;13491:11;:47::i;:::-;13048:498;;;;;;;;;:::o;26020:237::-;26146:21;26192:57;26224:7;26233:9;26244:4;26192:31;:57::i;:::-;26185:64;;26020:237;;;;;:::o;11807:157::-;11903:53;11915:10;11927:5;11934:2;11938:6;11946:9;11903:11;:53::i;:::-;11807:157;;;;:::o;15648:319::-;10536:5;:3;:5::i;:::-;-1:-1:-1;;;;;10522:19:0;:10;-1:-1:-1;;;;;10522:19:0;;10514:58;;;;-1:-1:-1;;;10514:58:0;;;;;;;:::i;:::-;15832:6:::1;15827:133;15844:17:::0;;::::1;15827:133;;;15883:65;15894:3;;15898:1;15894:6;;;;;-1:-1:-1::0;;;15894:6:0::1;;;;;;;;;;;;;;;15902;;15909:1;15902:9;;;;;-1:-1:-1::0;;;15902:9:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15913:2;;15916:1;15913:5;;;;;-1:-1:-1::0;;;15913:5:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15920:7;;15928:1;15920:10;;;;;-1:-1:-1::0;;;15920:10:0::1;;;;;;;;;;;;;;;15932:12;;15945:1;15932:15;;;;;-1:-1:-1::0;;;15932:15:0::1;;;;;;;;;;;;;;;15883:10;:65::i;:::-;15863:3:::0;::::1;::::0;::::1;:::i;:::-;;;;15827:133;;;;15648:319:::0;;;;;;;;;;:::o;20161:648::-;20438:21;10536:5;:3;:5::i;:::-;-1:-1:-1;;;;;10522:19:0;:10;-1:-1:-1;;;;;10522:19:0;;10514:58;;;;-1:-1:-1;;;10514:58:0;;;;;;;:::i;:::-;20419:8:::1;9123:15;9111:8;:27;;9103:64;;;;-1:-1:-1::0;;;9103:64:0::1;;;;;;;:::i;:::-;20482:57:::2;20515:7;20524:8;20534:4;;20482:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;20482:32:0::2;::::0;-1:-1:-1;;;20482:57:0:i:2;:::-;20472:67;;20589:12;20558:7;20583:1;20566:7;:14;:18;;;;:::i;:::-;20558:27;;;;;;-1:-1:-1::0;;;20558:27:0::2;;;;;;;;;;;;;;;:43;;20550:101;;;;-1:-1:-1::0;;;20550:101:0::2;;;;;;;:::i;:::-;20662:104;20673:3;20678:4;;20683:1;20678:7;;;;;-1:-1:-1::0;;;20678:7:0::2;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20687:53;20714:7;20723:4;;20728:1;20723:7;;;;;-1:-1:-1::0;;;20723:7:0::2;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20732:4;;20737:1;20732:7;;;;;-1:-1:-1::0;;;20732:7:0::2;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20687:26;:53::i;:::-;20742:7;20750:1;20742:10;;;;;;-1:-1:-1::0;;;20742:10:0::2;;;;;;;;;;;;;;;20754:11;20662:10;:104::i;:::-;20777:24;20783:7;20792:4;;20777:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;20798:2:0;;-1:-1:-1;20777:5:0::2;::::0;-1:-1:-1;;20777:24:0:i:2;:::-;10583:1:::1;20161:648:::0;;;;;;;;;;:::o;14549:245::-;10536:5;:3;:5::i;:::-;-1:-1:-1;;;;;10522:19:0;:10;-1:-1:-1;;;;;10522:19:0;;10514:58;;;;-1:-1:-1;;;10514:58:0;;;;;;;:::i;:::-;14677:47:::1;14688:3;14693:5;14700:2;14704:6;14712:11;14677:10;:47::i;:::-;14735:51;::::0;-1:-1:-1;;;14735:51:0;;-1:-1:-1;;;;;14735:35:0;::::1;::::0;::::1;::::0;:51:::1;::::0;14771:2;;14775:6;;14771:2;;14735:51:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14549:245:::0;;;;;:::o;11244:228::-;11322:4;10536:5;:3;:5::i;:::-;-1:-1:-1;;;;;10522:19:0;:10;-1:-1:-1;;;;;10522:19:0;;10514:58;;;;-1:-1:-1;;;10514:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11347:22:0;::::1;11339:64;;;;-1:-1:-1::0;;;11339:64:0::1;;;;;;;:::i;:::-;11421:43;::::0;-1:-1:-1;;;11421:43:0;;-1:-1:-1;;;;;11421:33:0;::::1;::::0;::::1;::::0;:43:::1;::::0;11455:8;;11421:43:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22134:1075::-:0;22462:8;9123:15;9111:8;:27;;9103:64;;;;-1:-1:-1;;;9103:64:0;;;;;;;:::i;:::-;22483:19:::1;22520:4;;22525:1;22520:7;;;;;-1:-1:-1::0;;;22520:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22505:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22483:58;;22559:11;-1:-1:-1::0;;;;;22552:26:0::1;;22579:4;22593;22600:8;22610;22620:1;22623;22626;22552:76;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;22639:69;22671:11;22684:4;22690;;22695:1;22690:7;;;;;-1:-1:-1::0;;;22690:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22699:8;22639:31;:69::i;:::-;22734:4;;22739:1;22734:7;;;;;-1:-1:-1::0;;;22734:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22719:36:0::1;;22756:8;22766:4;22719:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22797:4;;22802:1;22797:7;;;;;-1:-1:-1::0;;;22797:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;22782:28:0::1;;22811:4;22817:8;22782:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;22848:22;22873:4;;22848:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22888:13;22904:4;22888:20;;22919:11;22933:2;22919:16;;22946:14;22963:8;22946:25;;22982:18;23003:12;22982:33;;23026:9;23038:5;:3;:5::i;:::-;23026:17;;23054:15;23072:9;23054:27;;23142:3;-1:-1:-1::0;;;;;23097:93:0::1;23135:5;-1:-1:-1::0;;;;;23097:93:0::1;;23128:5;23147:9;23158:13;23173:4;23179:10;23097:93;;;;;;;;;;:::i;:::-;;;;;;;;9178:1;;;;;;;;22134:1075:::0;;;;;;;;;;;;:::o;24149:886::-;24426:21;10536:5;:3;:5::i;:::-;-1:-1:-1;;;;;10522:19:0;:10;-1:-1:-1;;;;;10522:19:0;;10514:58;;;;-1:-1:-1;;;10514:58:0;;;;;;;:::i;:::-;24407:8:::1;9123:15;9111:8;:27;;9103:64;;;;-1:-1:-1::0;;;9103:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24493:7:0::2;24468:32;:4:::0;;24473:15:::2;24487:1;24468:4:::0;24473:15:::2;:::i;:::-;24468:21;;;;;-1:-1:-1::0;;;24468:21:0::2;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24468:32:0::2;;24460:74;;;;-1:-1:-1::0;;;24460:74:0::2;;;;;;;:::i;:::-;24555:57;24588:7;24597:8;24607:4;;24555:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;24555:32:0::2;::::0;-1:-1:-1;;;24555:57:0:i:2;:::-;24545:67;;24662:12;24631:7;24656:1;24639:7;:14;:18;;;;:::i;:::-;24631:27;;;;;;-1:-1:-1::0;;;24631:27:0::2;;;;;;;;;;;;;;;:43;;24623:99;;;;-1:-1:-1::0;;;24623:99:0::2;;;;;;;:::i;:::-;24733:105;24744:3;24749:4;;24754:1;24749:7;;;;;-1:-1:-1::0;;;24749:7:0::2;;;;;;;;24733:105;24849:35;24855:7;24864:4;;24849:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;24878:4:0::2;::::0;-1:-1:-1;24849:5:0::2;::::0;-1:-1:-1;;24849:35:0:i:2;:::-;24904:7;-1:-1:-1::0;;;;;24895:26:0::2;;24922:7;24947:1;24930:7;:14;:18;;;;:::i;:::-;24922:27;;;;;;-1:-1:-1::0;;;24922:27:0::2;;;;;;;;;;;;;;;24895:55;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;24961:66;24995:2;24999:7;25024:1;25007:7;:14;:18;;;;:::i;:::-;24999:27;;;;;;-1:-1:-1::0;;;24999:27:0::2;;;;;;;;;;;;;;;24961:33;:66::i;10879:357::-:0;10938:4;10536:5;:3;:5::i;:::-;-1:-1:-1;;;;;10522:19:0;:10;-1:-1:-1;;;;;10522:19:0;;10514:58;;;;-1:-1:-1;;;10514:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;10963:20:0;::::1;10955:62;;;;-1:-1:-1::0;;;10955:62:0::1;;;;;;;:::i;:::-;11038:5;:3;:5::i;:::-;11028:7;:15:::0;;-1:-1:-1;;;;;;11028:15:0;;::::1;-1:-1:-1::0;;;;;11028:15:0;;::::1;;::::0;;;-1:-1:-1;11054:16:0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;11104:27:::1;:15;11122:9;11104:27;:::i;:::-;11081:20;:50:::0;;;11169:7:::1;::::0;::::1;11160::::0;-1:-1:-1;;;;;11169:7:0;;::::1;::::0;11160::::1;11147:59;11200:5;:3;:5::i;:::-;11147:59;;;;;;:::i;:::-;;;;;;;;-1:-1:-1::0;11224:4:0::1;10583:1;10879:357:::0;;;:::o;20910:416::-;21137:8;9123:15;9111:8;:27;;9103:64;;;;-1:-1:-1;;;9103:64:0;;;;;;;:::i;:::-;21173:4:::1;;21178:1;21173:7;;;;;-1:-1:-1::0;;;21173:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21158:28:0::1;;21187:10;21199:8;21158:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;21224:94:0;::::1;21261:10;21224:94;21255:4:::0;;21277:8;21287:12;21301:5:::1;:3;:5::i;21427:606::-:0;21664:8;9123:15;9111:8;:27;;9103:64;;;;-1:-1:-1;;;9103:64:0;;;;;;;:::i;:::-;21685:100:::1;21732:4;;21737:1;21732:7;;;;;-1:-1:-1::0;;;21732:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21717:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21755:10;21767:4;;21772:1;21767:7;;;;;-1:-1:-1::0;;;21767:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21776:8;21685:31;:100::i;:::-;21811:4;;21816:1;21811:7;;;;;-1:-1:-1::0;;;21811:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;21796:36:0::1;;21833:8;21843:10;21796:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;21880:4;;21885:1;21880:7;;;;;-1:-1:-1::0;;;21880:7:0::1;;;;;;;;14263:173:::0;10536:5;:3;:5::i;:::-;-1:-1:-1;;;;;10522:19:0;:10;-1:-1:-1;;;;;10522:19:0;;10514:58;;;;-1:-1:-1;;;10514:58:0;;;;;;;:::i;:::-;14381:47:::1;14392:3;14397:5;14404:2;14408:6;14416:11;14381:10;:47::i;:::-;14263:173:::0;;;;;:::o;25522:245::-;25657:13;25695:64;25726:9;25737;25748:10;25695:30;:64::i;15417:223::-;10536:5;:3;:5::i;:::-;-1:-1:-1;;;;;10522:19:0;:10;-1:-1:-1;;;;;10522:19:0;;10514:58;;;;-1:-1:-1;;;10514:58:0;;;;;;;:::i;:::-;15495:12:::1;15510:5;:3;:5::i;:::-;15526:40;::::0;-1:-1:-1;;;15526:40:0;;15495:20;;-1:-1:-1;;;;;;15526:26:0;::::1;::::0;::::1;::::0;:40:::1;::::0;15495:20;;15559:6;;15526:40:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;15577:55:0::1;::::0;-1:-1:-1;;;15577:55:0;;-1:-1:-1;;;;;15577:35:0;::::1;::::0;::::1;::::0;:55:::1;::::0;15613:4;;15619:6;;15613:4;;15577:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12434:606::-:0;12698:19;12735:5;-1:-1:-1;;;;;12720:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12765:74;;-1:-1:-1;;;12765:74:0;;12698:56;;-1:-1:-1;;;;;;12765:26:0;;;;;:74;;12792:4;;12806;;12813:6;;12821:8;;12831:1;;12834;;12837;;12765:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12850:65;12882:11;12895:4;12901:5;12908:6;12850:31;:65::i;:::-;12926:48;;-1:-1:-1;;;12926:48:0;;-1:-1:-1;;;;;12926:34:0;;;;;:48;;12961:6;;12969:4;;12926:48;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12985:47;12997:4;13003:5;13010:2;13014:6;13022:9;12985:11;:47::i;:::-;12434:606;;;;;;;;;;:::o;9020:32::-;;;:::o;10782:89::-;10854:9;;10847:17::o;18146:1075::-;18474:8;9123:15;9111:8;:27;;9103:64;;;;-1:-1:-1;;;9103:64:0;;;;;;;:::i;:::-;18495:19:::1;18532:4;;18537:1;18532:7;;;;;-1:-1:-1::0;;;18532:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18517:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18495:58;;18571:11;-1:-1:-1::0;;;;;18564:26:0::1;;18591:4;18605;18612:8;18622;18632:1;18635;18638;18564:76;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;18651:69;18683:11;18696:4;18702;;18707:1;18702:7;;;;;-1:-1:-1::0;;;18702:7:0::1;;;;;;;;18651:69;18746:4;;18751:1;18746:7;;;;;-1:-1:-1::0;;;18746:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18731:36:0::1;;18768:8;18778:4;18731:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18809:4;;18814:1;18809:7;;;;;-1:-1:-1::0;;;18809:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;18794:28:0::1;;18823:4;18829:8;18794:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18860:22;18885:4;;18860:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18900:13;18916:4;18900:20;;18931:11;18945:2;18931:16;;18958:14;18975:8;18958:25;;18994:18;19015:12;18994:33;;19038:9;19050:5;:3;:5::i;:::-;19038:17;;19066:15;19084:9;19066:27;;19154:3;-1:-1:-1::0;;;;;19109:93:0::1;19147:5;-1:-1:-1::0;;;;;19109:93:0::1;;19140:5;19159:9;19170:13;19185:4;19191:10;19109:93;;;;;;;;;;:::i;19322:694::-:0;19658:8;9123:15;9111:8;:27;;9103:64;;;;-1:-1:-1;;;9103:64:0;;;;;;;:::i;:::-;19701:4:::1;;19706:1;19701:7;;;;;-1:-1:-1::0;;;19701:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19686:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19679:63:0::1;;19743:4;19749;;19754:1;19749:7;;;;;-1:-1:-1::0;;;19749:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19758:8;19768;19778:1;19781;19784;19679:107;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19812:4;;19817:1;19812:7;;;;;-1:-1:-1::0;;;19812:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19797:36:0::1;;19834:8;19844:4;19797:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19875:4;;19880:1;19875:7;;;;;-1:-1:-1::0;;;19875:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;19860:28:0::1;;19889:4;19895:8;19860:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19963:2;-1:-1:-1::0;;;;;19920:88:0::1;19957:4;-1:-1:-1::0;;;;;19920:88:0::1;;19951:4;;19967:8;19977:12;19991:5;:3;:5::i;:::-;19998:9;19920:88;;;;;;;;;;;:::i;:::-;;;;;;;;19322:694:::0;;;;;;;;;;;;:::o;25079:181::-;25167:12;25199:53;25224:7;25233:8;25243;25199:24;:53::i;8981:32::-;;;:::o;23310:694::-;23646:8;9123:15;9111:8;:27;;9103:64;;;;-1:-1:-1;;;9103:64:0;;;;;;;:::i;:::-;23689:4:::1;;23694:1;23689:7;;;;;-1:-1:-1::0;;;23689:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23674:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23667:63:0::1;;23731:4;23737;;23742:1;23737:7;;;;;-1:-1:-1::0;;;23737:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23746:8;23756;23766:1;23769;23772;23667:107;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23800:4;;23805:1;23800:7;;;;;-1:-1:-1::0;;;23800:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23785:36:0::1;;23822:8;23832:4;23785:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23863:4;;23868:1;23863:7;;;;;-1:-1:-1::0;;;23863:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23848:28:0::1;;23877:4;23883:8;23848:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;23951:2;-1:-1:-1::0;;;;;23908:88:0::1;23945:4;-1:-1:-1::0;;;;;23908:88:0::1;;23939:4;;23955:8;23965:12;23979:5;:3;:5::i;25775:237::-:0;25901:21;25947:57;25980:7;25989:8;25999:4;25947:32;:57::i;17439:606::-;17676:8;9123:15;9111:8;:27;;9103:64;;;;-1:-1:-1;;;9103:64:0;;;;;;;:::i;:::-;17697:100:::1;17744:4;;17749:1;17744:7;;;;;-1:-1:-1::0;;;17744:7:0::1;;;;;;;;17697:100;17823:4;;17828:1;17823:7;;;;;-1:-1:-1::0;;;17823:7:0::1;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17808:36:0::1;;17845:8;17855:10;17808:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17892:4;;17897:1;17892:7;;;;;-1:-1:-1::0;;;17892:7:0::1;;;;;;;;13554:286:::0;13702:6;13697:136;13714:17;;;13697:136;;;13753:68;13765:10;13777:6;;13784:1;13777:9;;;;;-1:-1:-1;;;13777:9:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13788:2;;13791:1;13788:5;;;;;-1:-1:-1;;;13788:5:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13795:7;;13803:1;13795:10;;;;;-1:-1:-1;;;13795:10:0;;;;;;;;;;;;;;;13807;;13818:1;13807:13;;;;;-1:-1:-1;;;13807:13:0;;;;;;;;;;;;;;;13753:11;:68::i;:::-;13733:3;;;;:::i;:::-;;;;13697:136;;12089:337;12195:94;12242:5;-1:-1:-1;;;;;12227:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12263:10;12275:5;12282:6;12195:31;:94::i;:::-;12300:54;;-1:-1:-1;;;12300:54:0;;-1:-1:-1;;;;;12300:34:0;;;;;:54;;12335:6;;12343:10;;12300:54;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12365:53;12377:10;12389:5;12396:2;12400:6;12408:9;12365:11;:53::i;10600:174::-;10636:7;10679:20;;10660:15;:39;10656:86;;-1:-1:-1;10723:7:0;;-1:-1:-1;;;;;10723:7:0;10716:14;;10656:86;-1:-1:-1;10759:7:0;;-1:-1:-1;;;;;10759:7:0;10600:174;;:::o;13920:229::-;14031:38;;-1:-1:-1;;;14031:38:0;;-1:-1:-1;;;;;14031:26:0;;;;;:38;;14058:2;;14062:6;;14031:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;14110:2;-1:-1:-1;;;;;14085:56:0;14103:5;-1:-1:-1;;;;;14085:56:0;14098:3;14085:56;14114:6;14122:11;14135:5;:3;:5::i;:::-;14085:56;;;;;;;;:::i;:::-;;;;;;;;13920:229;;;;;:::o;3387:521::-;3480:14;3526:1;3515:8;:12;3507:70;;;;-1:-1:-1;;;3507:70:0;;;;;;;:::i;:::-;3608:1;3596:9;:13;:31;;;;;3626:1;3613:10;:14;3596:31;3588:86;;;;-1:-1:-1;;;3588:86:0;;;;;;;:::i;:::-;3685:20;3708:17;:8;3721:3;3708:12;:17::i;:::-;3685:40;-1:-1:-1;3736:14:0;3753:31;3685:40;3773:10;3753:19;:31::i;:::-;3736:48;-1:-1:-1;3795:16:0;3814:40;3838:15;3814:19;:9;3828:4;3814:13;:19::i;:::-;:23;;:40::i;:::-;3795:59;-1:-1:-1;3877:23:0;3795:59;3877:9;:23;:::i;:::-;3865:35;3387:521;-1:-1:-1;;;;;;;3387:521:0:o;11480:231::-;11591:40;;-1:-1:-1;;;11591:40:0;;-1:-1:-1;;;;;11591:26:0;;;;;:40;;11618:4;;11624:6;;11591:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11674:2;-1:-1:-1;;;;;11647:56:0;11668:4;-1:-1:-1;;;;;11647:56:0;11661:5;-1:-1:-1;;;;;11647:56:0;;11678:6;11686:5;:3;:5::i;:::-;11693:9;11647:56;;;;;;;;:::i;5181:534::-;5282:21;5339:1;5324:4;:11;:16;;5316:61;;;;-1:-1:-1;;;5316:61:0;;;;;;;:::i;:::-;5409:4;:11;5398:23;;;;;;-1:-1:-1;;;5398:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5398:23:0;;5388:33;;5462:9;5432:7;5457:1;5440:7;:14;:18;;;;:::i;:::-;5432:27;;;;;;-1:-1:-1;;;5432:27:0;;;;;;;;;;;;;;:39;;;;;5487:6;5510:1;5496:4;:11;:15;;;;:::i;:::-;5487:24;;5482:226;5513:5;;5482:226;;5541:14;;5576:42;5588:7;5597:4;5602:5;5606:1;5602;:5;:::i;:::-;5597:11;;;;;;-1:-1:-1;;;5597:11:0;;;;;;;;;;;;;;;5610:4;5615:1;5610:7;;;;;;-1:-1:-1;;;5610:7:0;;;;;;;;;;;;;;;5576:11;:42::i;:::-;5540:78;;;;5650:46;5662:7;5670:1;5662:10;;;;;;-1:-1:-1;;;5662:10:0;;;;;;;;;;;;;;;5674:9;5685:10;5650:11;:46::i;:::-;5633:7;5641:5;5645:1;5641;:5;:::i;:::-;5633:14;;;;;;-1:-1:-1;;;5633:14:0;;;;;;;;;;;;;;:63;;;;;5482:226;;5520:3;;;;;:::i;:::-;;;;5482:226;;;;5181:534;;;;;:::o;4587:513::-;4688:21;4745:1;4730:4;:11;:16;;4722:61;;;;-1:-1:-1;;;4722:61:0;;;;;;;:::i;:::-;4815:4;:11;4804:23;;;;;;-1:-1:-1;;;4804:23:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4804:23:0;;4794:33;;4851:8;4838:7;4846:1;4838:10;;;;;;-1:-1:-1;;;4838:10:0;;;;;;;;;;;;;;:21;;;;;4875:6;4870:223;4901:1;4887:4;:11;:15;;;;:::i;:::-;4883:1;:19;4870:223;;;4925:14;4941:15;4960:42;4972:7;4981:4;4986:1;4981:7;;;;;;-1:-1:-1;;;4981:7:0;;;;;;;;;;;;;;;4990:4;4995:1;4999;4995:5;;;;:::i;:::-;4990:11;;;;;;-1:-1:-1;;;4990:11:0;;;;;;;;4960:42;4924:78;;;;5034:47;5047:7;5055:1;5047:10;;;;;;-1:-1:-1;;;5047:10:0;;;;;;;;;;;;;;;5059:9;5070:10;5034:12;:47::i;:::-;5017:7;5025:5;:1;5029;5025:5;:::i;:::-;5017:14;;;;;;-1:-1:-1;;;5017:14:0;;;;;;;;;;;;;;:64;;;;;4870:223;;4904:3;;;;;:::i;:::-;;;;4870:223;;1886:490;1975:12;2001:14;2017;2035:26;2046:6;2054;2035:10;:26::i;:::-;2000:61;;;;2174:7;2227:6;2235;2210:32;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2200:43;;;;;;2113:251;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;2113:251:0;;;;;;;;;2103:262;;2113:251;2103:262;;;;;1886:490;-1:-1:-1;;;;;;1886:490:0:o;16078:743::-;16185:6;16180:634;16211:1;16197:4;:11;:15;;;;:::i;:::-;16193:1;:19;16180:634;;;16235:13;16250:14;16269:4;16274:1;16269:7;;;;;;-1:-1:-1;;;16269:7:0;;;;;;;;;;;;;;;16278:4;16283:1;16287;16283:5;;;;:::i;:::-;16278:11;;;;;;-1:-1:-1;;;16278:11:0;;;;;;;;;;;;;;;16234:56;;;;16306:14;16325:44;16355:5;16362:6;16325:29;:44::i;:::-;-1:-1:-1;16305:64:0;-1:-1:-1;16384:14:0;16401:7;16409:5;:1;16413;16409:5;:::i;:::-;16401:14;;;;;;-1:-1:-1;;;16401:14:0;;;;;;;;;;;;;;;16384:31;;16431:15;16448;16476:6;-1:-1:-1;;;;;16467:15:0;:5;-1:-1:-1;;;;;16467:15:0;;:61;;16509:9;16525:1;16467:61;;;16491:1;16495:9;16467:61;16430:98;;;;16543:10;16574:1;16560:4;:11;:15;;;;:::i;:::-;16556:1;:19;:84;;16637:3;16556:84;;;16578:56;16605:7;16614:6;16622:4;16627:5;:1;16631;16627:5;:::i;:::-;16622:11;;;;;;-1:-1:-1;;;16622:11:0;;;;;;;;;;;;;;;16578:26;:56::i;:::-;16543:97;;16672:50;16699:7;16708:5;16715:6;16672:26;:50::i;:::-;-1:-1:-1;;;;;16655:73:0;;16747:10;16759;16771:2;16785:1;16775:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16775:12:0;;16655:147;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16180:634;;;;;;;16214:3;;;;;:::i;:::-;;;;16180:634;;6602:402;6781:12;6795:17;6816:5;-1:-1:-1;;;;;6816:10:0;6850;6862:4;6868:2;6872:5;6827:51;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6827:51:0;;;;;;;;;;;6816:63;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6780:99;;;;6898:7;:57;;;;-1:-1:-1;6910:11:0;;:16;;:44;;;6941:4;6930:24;;;;;;;;;;;;:::i;:::-;6890:106;;;;-1:-1:-1;;;6890:106:0;;;;;;;:::i;7012:201::-;7123:12;;;7085;7123;;;;;;;;;-1:-1:-1;;;;;7102:7:0;;;7116:5;;7102:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7084:52;;;7155:7;7147:58;;;;-1:-1:-1;;;7147:58:0;;;;;;;:::i;:::-;7012:201;;;:::o;4029:476::-;4122:13;4168:1;4156:9;:13;4148:72;;;;-1:-1:-1;;;4148:72:0;;;;;;;:::i;:::-;4251:1;4239:9;:13;:31;;;;;4269:1;4256:10;:14;4239:31;4231:86;;;;-1:-1:-1;;;4231:86:0;;;;;;;:::i;:::-;4328:14;4345:34;4374:4;4345:24;:9;4359;4345:13;:24::i;:::-;:28;;:34::i;:::-;4328:51;-1:-1:-1;4390:16:0;4409:34;4439:3;4409:25;:10;4424:9;4409:14;:25::i;:34::-;4390:53;-1:-1:-1;4465:32:0;4495:1;4466:23;4390:53;4466:9;:23;:::i;4465:32::-;4454:43;4029:476;-1:-1:-1;;;;;;4029:476:0:o;2940:325::-;3022:12;3065:1;3055:7;:11;3047:63;;;;-1:-1:-1;;;3047:63:0;;;;;;;:::i;:::-;3140:1;3129:8;:12;:28;;;;;3156:1;3145:8;:12;3129:28;3121:83;;;;-1:-1:-1;;;3121:83:0;;;;;;;:::i;:::-;3249:8;3225:21;:7;3237:8;3225:11;:21::i;:::-;:32;;;;:::i;1116:142::-;1168:6;1195;;;:30;;-1:-1:-1;1224:1:0;1219;1210:5;1219:1;1224;1210:5;:::i;:::-;1206:9;-1:-1:-1;1205:15:0;;1206:9;1205:15;:::i;:::-;:20;1195:30;1187:63;;;;-1:-1:-1;;;1187:63:0;;;;;;;:::i;843:128::-;895:6;937:1;927:5;931:1;937;927:5;:::i;:::-;923:9;;;922:16;;914:49;;;;-1:-1:-1;;;914:49:0;;;;;;;:::i;2434:393::-;2527:13;2542;2569:14;2588:26;2599:6;2607;2588:10;:26::i;:::-;2568:46;;;2626:13;2641;2676:32;2684:7;2693:6;2701;2676:7;:32::i;:::-;-1:-1:-1;;;;;2659:62:0;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2625:98;-1:-1:-1;;;;;2625:98:0;;;-1:-1:-1;;;;;2625:98:0;;;2767:6;-1:-1:-1;;;;;2757:16:0;:6;-1:-1:-1;;;;;2757:16:0;;:62;;2800:8;2810;2757:62;;;2777:8;2787;2757:62;2734:85;;;;-1:-1:-1;2434:393:0;-1:-1:-1;;;;;;;2434:393:0:o;1441:353::-;1516:14;1532;1577:6;-1:-1:-1;;;;;1567:16:0;:6;-1:-1:-1;;;;;1567:16:0;;;1559:68;;;;-1:-1:-1;;;1559:68:0;;;;;;;:::i;:::-;1666:6;-1:-1:-1;;;;;1657:15:0;:6;-1:-1:-1;;;;;1657:15:0;;:53;;1695:6;1703;1657:53;;;1676:6;1684;1657:53;1638:72;;-1:-1:-1;1638:72:0;-1:-1:-1;;;;;;1729:20:0;;1721:65;;;;-1:-1:-1;;;1721:65:0;;;;;;;:::i;:::-;1441:353;;;;;:::o;979:129::-;1031:6;1073:1;1063:5;1067:1;1073;1063:5;:::i;:::-;1059:9;;;1058:16;;1050:50;;;;-1:-1:-1;;;1050: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
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.