Contract 0xafaace7138ab3c2bcb2db4264f8312e1bbb80653 3

 

Contract Overview

Balance:
0 MATIC

MATIC Value:
$0.00

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x0777f51a97c87d26e48c1d40099d8ab1d16130b5da13b7fb2d8ee617b5313115Any Swap In Auto285248942022-05-19 22:29:388 hrs 27 mins ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.00219919049733.076999974
0x2079cb2f222d737381d71dfc90f6bbee8bb4fdaea4fabcc4fe93d7dabd890fdeAny Swap In Auto284637532022-05-18 9:41:161 day 21 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.00219571663333.012834464
0xce9d09fc98e9b400deacbc77a1381dfd6969e82a0ea6afe5604a42fcfe36bcbcAny Swap Out284430562022-05-17 21:04:442 days 9 hrs ago0x2fc092eb640b78bf990e232c8beb6b83d903da96 IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.004304913111
0xf911c304351de44d97462add400368278e62279ee6b30d37031f8a5573a1514fAny Swap Out284117102022-05-17 2:03:383 days 4 hrs ago0x2b38ae873456cfd942b23e6a346cb4e12c3e4072 IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.002092986002 54.00000007
0xfe9286a9fad95334d28eb42546de781784da5b9b3b7bbfa9338189a667af26daAny Swap Out284046512022-05-16 21:58:323 days 8 hrs ago0xdceb0bb3311342e3ce9e49f57affce9deac40ba1 IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.001380451681 35.594247011
0xf876ce233750df3e8861664b86f58252174efc0c700f90c95b71ff67b947f143Any Swap Out283994062022-05-16 18:49:403 days 12 hrs ago0x61c41492c69dd33a44e9e4861399736e53dbd4df IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.006360412164
0x2d24f5c2e948c90e30c2f4d6e814011ad6120e2c82904d64f6e46bf2634f0bb8Any Swap In Auto283700552022-05-16 1:32:034 days 5 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.00219742690133.03854854
0xc1a8a0cb27bcd3dbfb5abf85ec69e1634cf9e64995c9f1abcf162203fe1c3950Any Swap Out283683382022-05-16 0:33:004 days 6 hrs ago0x48378d7b1417d2a514317526fd8cacee38f9904a IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.001349917403 30.999090716
0x30bd129b3262c99379b4836e78b4af84d85b154fcbc0057d5ebd4b37a8923abeAny Swap Out283440642022-05-15 10:18:564 days 20 hrs ago0x5e5b0a2c56a4c6139f772946d68cdf3aac06e713 IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.0011711323 30.187712357
0xe00c248dba109cd1be121a298d9b606c6defac4c0a15047cfb7d8453ba54ee19Any Swap Out283133272022-05-14 16:00:035 days 14 hrs ago0xcd0b67a61e5e8f4616c19e421e929813b6d947df IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.00228742207858.963295315
0xfd21e10a93e5a8de67d01435bc33183c071b4909e891dd6dc44cc2934d547afaAny Swap In Auto283111532022-05-14 14:36:395 days 16 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.00249081921437.494268048
0x9cae4b0ef231dea2ec03c2976419122af694ede51e212c65a325a387fb038329Any Swap In Auto283088162022-05-14 13:12:055 days 17 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.00276848976341.632051059
0x95914fe1b2bfa97fdc7fd0e50e8da0ddfdf0c6c1fcad4efa57a2c4494011d66cAny Swap Out282860252022-05-13 23:37:416 days 7 hrs ago0x622661ab4b6ab93c659e751f47ebb0c6e6ad9f48 IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.001168044293 30.11820672
0x02890f2beb3ab5ce0ba6b20e5c7fadac90a004ea3de30b095c3108ab77d92e6eAny Swap In Auto282821602022-05-13 21:20:296 days 9 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.00235931185835.521105968
0xb448aff45d07fa42a2f7b258c4688d4ab14a766516cdd01a0d9699fb3b9d11fcAny Swap Out282704902022-05-13 14:15:076 days 16 hrs ago0xef4b88280f522e1d444206bee06d271760a70a2a IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.035381859541 912.021124925
0x2aefd92b2332829c1a465a0ce645f9025ad545c9c99c11ced68170ebf800b413Any Swap In Auto282365222022-05-12 17:34:127 days 13 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.023121957709347.766596622
0x01d530005774943712f678fac94dfd565253127dea581f38fa776b9ba5702ea7Any Swap Out282202522022-05-12 6:54:208 days 2 mins ago0xef4b88280f522e1d444206bee06d271760a70a2a IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.029309720506 755.502526271
0xed5f7a86c3964923eefa056cac599f1c4ddb0a23ea56e14ae9dbd73f99e5dc4aAny Swap Out282156742022-05-12 4:09:558 days 2 hrs ago0x083e958db271a5ba105c0878a94507fe37f25446 IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.050461226063 1,301.117140584
0xdba9f68948db5ada21b207284dcd6522331b1a7090d9334ba8d888feb554ab28Any Swap In Auto281958212022-05-11 15:44:408 days 15 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.022566970542339.296816199
0xaf887da2381d5565a8819e8f669df147206b733c2b72d406068b26d9498b7535Any Swap Out281926052022-05-11 13:45:368 days 17 hrs ago0xc64d769eb79d35246b45813365a99c8e92c694a3 IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.052576264571 1,354.848852547
0x755dd3deadbb9a74c0854491480b3de0f7d93a658b2e0161ded3281d927c9c77Any Swap In Auto281925142022-05-11 13:42:308 days 17 hrs ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.0745513839871,121.613167053
0x19a95c3075db4a3eeaaf7378af3d92f0420921831b0c82446af50c1121e20086Any Swap Out281843712022-05-11 8:45:298 days 22 hrs ago0x44bcb25469c882a567188824c45e4dbeafe04cba IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.007310410319 188.495225227
0x079ae1bed9ca5bd377c393cf182f4655c0fa92b9551b191c2aa4650b1b94d614Any Swap In Auto281814142022-05-11 6:51:009 days 5 mins ago0xf39fee2fdfe7db022591f4a82e3537fa0b55fb9c IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.01104903384166.093438975
0x9923635db51caf917d5b0d817bf734d2a3a5db3074706aab5652ce79815b2779Any Swap Out281674242022-05-10 21:51:459 days 9 hrs ago0x2fc092eb640b78bf990e232c8beb6b83d903da96 IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.008609826222
0xd0391e0b6cb2c0c0ba5655f5cf73caceeecfd4ae7453814b7941d4b0bf232f62Any Swap Out281140182022-05-09 14:01:3510 days 16 hrs ago0x622661ab4b6ab93c659e751f47ebb0c6e6ad9f48 IN  0xafaace7138ab3c2bcb2db4264f8312e1bbb806530 MATIC0.004756272303 122.641233127
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xcf838a2edaed09f7e1a1f3b15b1b332685aa389d9dda4d6c5f136b5fc7cb2343235904172022-01-11 10:04:58128 days 20 hrs ago 0xafaace7138ab3c2bcb2db4264f8312e1bbb80653 Polygon: WMATIC Token36.741 MATIC
0x5533e85d0a8ee0790f9ba8526f12de3e87a77f7facc3cb0b7512a1e4f25885d4235903522022-01-11 10:02:44128 days 20 hrs ago 0xafaace7138ab3c2bcb2db4264f8312e1bbb806530xd99f49e0d421afa94e4689519cb1f3e5f5c586f9183.6 MATIC
0x5533e85d0a8ee0790f9ba8526f12de3e87a77f7facc3cb0b7512a1e4f25885d4235903522022-01-11 10:02:44128 days 20 hrs ago Polygon: WMATIC Token 0xafaace7138ab3c2bcb2db4264f8312e1bbb80653183.6 MATIC
0xb4b52e1ee4feeda8a3b412beed57b3f14bc1f8a154f8508ee22e4d523094b3af235894202022-01-11 9:30:33128 days 21 hrs ago 0xafaace7138ab3c2bcb2db4264f8312e1bbb80653 Polygon: WMATIC Token1,292.73 MATIC
0xc55a142f4ef1f8a4c8c3af325fbaa22686d054344a9e7b8b13b7b56bed99fa52235892732022-01-11 9:23:09128 days 21 hrs ago 0xafaace7138ab3c2bcb2db4264f8312e1bbb806530x9122a6026494242eb5563834fb9316cbc9720f6010 MATIC
0xc55a142f4ef1f8a4c8c3af325fbaa22686d054344a9e7b8b13b7b56bed99fa52235892732022-01-11 9:23:09128 days 21 hrs ago Polygon: WMATIC Token 0xafaace7138ab3c2bcb2db4264f8312e1bbb8065310 MATIC
0xdc16bc3ad3b48f60fe5891b3502dd4c56e027bef478078d3c086a84169badad5235892402022-01-11 9:21:59128 days 21 hrs ago 0xafaace7138ab3c2bcb2db4264f8312e1bbb80653 Polygon: WMATIC Token3.6 MATIC
0xa88b0e4fc4d243fbf8534c2d430e9536314a75e46950062d13fccd4804206b3f235892182022-01-11 9:21:15128 days 21 hrs ago 0xafaace7138ab3c2bcb2db4264f8312e1bbb806530x6e68fc15fe49cfa3d711937fc7f7da0f37bd60b2229.068 MATIC
0xa88b0e4fc4d243fbf8534c2d430e9536314a75e46950062d13fccd4804206b3f235892182022-01-11 9:21:15128 days 21 hrs ago Polygon: WMATIC Token 0xafaace7138ab3c2bcb2db4264f8312e1bbb80653229.068 MATIC
0x6c8610bd992f55718d3f73e8e1e1c6c78c2906085230aa9b86225719448ef59f235890022022-01-11 9:13:51128 days 21 hrs ago 0xafaace7138ab3c2bcb2db4264f8312e1bbb806530x299b77259970f64d5e19f600154e42adb03cb1e511.5 MATIC
0x6c8610bd992f55718d3f73e8e1e1c6c78c2906085230aa9b86225719448ef59f235890022022-01-11 9:13:51128 days 21 hrs ago Polygon: WMATIC Token 0xafaace7138ab3c2bcb2db4264f8312e1bbb8065311.5 MATIC
0x1560d4405f2add32884589a9b336a55e2b4f721e837b181a4da2d90405ebdf2f235888682022-01-11 9:09:15128 days 21 hrs ago 0xafaace7138ab3c2bcb2db4264f8312e1bbb806530x42c4f161062c22408f2c6fd38211de3059bcbe8a364.653 MATIC
0x1560d4405f2add32884589a9b336a55e2b4f721e837b181a4da2d90405ebdf2f235888682022-01-11 9:09:15128 days 21 hrs ago Polygon: WMATIC Token 0xafaace7138ab3c2bcb2db4264f8312e1bbb80653364.653 MATIC
0xb25eb72f6ee4271a65137b761025724fce36335095a48a12fcac184a3edd7ca3235888422022-01-11 9:08:19128 days 21 hrs ago 0xafaace7138ab3c2bcb2db4264f8312e1bbb80653 Polygon: WMATIC Token52.5 MATIC
0x7b4a37392c8767fa3b762fefaac0dc7dffb356e0828a27e34d3d1b022319452e235887722022-01-11 9:05:55128 days 21 hrs ago 0xafaace7138ab3c2bcb2db4264f8312e1bbb80653 Polygon: WMATIC Token10 MATIC
0x16413fbcb7359e14384456e8a75cabc2edc4fcee27868220819fe0838c1e459d235884942022-01-11 8:56:23128 days 22 hrs ago 0xafaace7138ab3c2bcb2db4264f8312e1bbb806530xc5f9aa209153c14d104b8b595e0ba29daac55f736.3917 MATIC
0x16413fbcb7359e14384456e8a75cabc2edc4fcee27868220819fe0838c1e459d235884942022-01-11 8:56:23128 days 22 hrs ago Polygon: WMATIC Token 0xafaace7138ab3c2bcb2db4264f8312e1bbb806536.3917 MATIC
0x5b38423775b3548362ca43d24e69958ac78ce0a989ad32e975d98318c283be9a235880332022-01-11 8:38:25128 days 22 hrs ago 0xafaace7138ab3c2bcb2db4264f8312e1bbb806530x3b3479297047dcb53dcf6507175645b826b30986173.92 MATIC
0x5b38423775b3548362ca43d24e69958ac78ce0a989ad32e975d98318c283be9a235880332022-01-11 8:38:25128 days 22 hrs ago Polygon: WMATIC Token 0xafaace7138ab3c2bcb2db4264f8312e1bbb80653173.92 MATIC
0xcd570f36ae13a18a1f041a8901f299ab171a61affa705c38090b851d1123ebba235869832022-01-11 8:00:09128 days 22 hrs ago 0xafaace7138ab3c2bcb2db4264f8312e1bbb806530xd81445823588639fb525f1bc7eadf481d22ce0b24,536.3591 MATIC
0xcd570f36ae13a18a1f041a8901f299ab171a61affa705c38090b851d1123ebba235869832022-01-11 8:00:09128 days 22 hrs ago Polygon: WMATIC Token 0xafaace7138ab3c2bcb2db4264f8312e1bbb806534,536.3591 MATIC
0x93692f4012f30eec18cbaed9323fcb42a5f56833d8b82fabb4a000606e419395235867812022-01-11 7:53:13128 days 23 hrs ago 0xafaace7138ab3c2bcb2db4264f8312e1bbb80653 Polygon: WMATIC Token25.5 MATIC
0xb83bbef234a142a567171bc816a15340e26383de3666915c85ff7cec2f0605fa235865222022-01-11 7:44:19128 days 23 hrs ago 0xafaace7138ab3c2bcb2db4264f8312e1bbb806530xf82e4a24e4d4f6fa431c0e6710b6d9ffe9c425d188.3498 MATIC
0xb83bbef234a142a567171bc816a15340e26383de3666915c85ff7cec2f0605fa235865222022-01-11 7:44:19128 days 23 hrs ago Polygon: WMATIC Token 0xafaace7138ab3c2bcb2db4264f8312e1bbb8065388.3498 MATIC
0x75d5cb0add1d7797689b4762f7f024098b5625c074f4e70e226fe1db7c3063e7235856652022-01-11 7:12:45128 days 23 hrs ago 0xafaace7138ab3c2bcb2db4264f8312e1bbb806530xc8b93b77495303ef9576557d9ac9de4809be2ce56,227.52624 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
AnyswapV3Router

Compiler Version
v0.8.6+commit.11564f7e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at polygonscan.com on 2021-10-28
*/

/**
 *Submitted for verification at FtmScan.com on 2021-10-28
*/

/**
 *Submitted for verification at BscScan.com on 2021-10-28
*/

/**
 *Submitted for verification at arbiscan.io on 2021-09-22
*/

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

pragma solidity >=0.8.2;

interface ISushiswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

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

    function initialize(address, address) external;
}

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

library 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 ISushiswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
    function migrator() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

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

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

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);
    function deposit(uint amount, address to) external returns (uint);
    function withdraw(uint amount, address to) external returns (uint);
}

/**
 * @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);
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
}

library SafeERC20 {
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

contract AnyswapV3Router {
    using SafeERC20 for IERC20;
    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 {
        IERC20(AnyswapV1ERC20(token).underlying()).safeTransferFrom(msg.sender, token, amount);
        AnyswapV1ERC20(token).depositVault(amount, msg.sender);
        _anySwapOut(msg.sender, token, to, amount, toChainID);
    }

    function anySwapOutNative(address token, address to, uint toChainID) external payable {
        require(AnyswapV1ERC20(token).underlying() == wNATIVE, "AnyswapV3Router: underlying is not wNATIVE");
        IwNATIVE(wNATIVE).deposit{value: msg.value}();
        assert(IwNATIVE(wNATIVE).transfer(token, msg.value));
        AnyswapV1ERC20(token).depositVault(msg.value, msg.sender);
        _anySwapOut(msg.sender, token, to, msg.value, 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);
        IERC20(_underlying).safeTransferFrom(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) {
            if (_underlying == wNATIVE) {
                _anyToken.withdrawVault(to, amount, address(this));
                IwNATIVE(wNATIVE).withdraw(amount);
                TransferHelper.safeTransferNative(to, amount);
            } else {
                _anyToken.withdrawVault(to, amount, to);
            }
        }
    }

    function depositNative(address token, address to) external payable returns (uint) {
        require(AnyswapV1ERC20(token).underlying() == wNATIVE, "AnyswapV3Router: underlying is not wNATIVE");
        IwNATIVE(wNATIVE).deposit{value: msg.value}();
        assert(IwNATIVE(wNATIVE).transfer(token, msg.value));
        AnyswapV1ERC20(token).depositVault(msg.value, to);
        return msg.value;
    }

    function withdrawNative(address token, uint amount, address to) external returns (uint) {
        require(AnyswapV1ERC20(token).underlying() == wNATIVE, "AnyswapV3Router: underlying is not wNATIVE");
        AnyswapV1ERC20(token).withdrawVault(msg.sender, amount, address(this));
        IwNATIVE(wNATIVE).withdraw(amount);
        TransferHelper.safeTransferNative(to, amount);
        return amount;
    }

    // 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) {
        IERC20(AnyswapV1ERC20(path[0]).underlying()).safeTransferFrom(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);
        IERC20(_underlying).safeTransferFrom(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) {
        IERC20(AnyswapV1ERC20(path[0]).underlying()).safeTransferFrom(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);
        IERC20(_underlying).safeTransferFrom(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":"toChainID","type":"uint256"}],"name":"anySwapOutNative","outputs":[],"stateMutability":"payable","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":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"depositNative","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"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"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawNative","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040523480156200001157600080fd5b506040516200504d3803806200504d833981016040819052620000349162000095565b600180546001600160a01b039092166001600160a01b0319909216919091179055426002556001600160601b0319606092831b8116608052911b1660a052620000df565b80516001600160a01b03811681146200009057600080fd5b919050565b600080600060608486031215620000ab57600080fd5b620000b68462000078565b9250620000c66020850162000078565b9150620000d66040850162000078565b90509250925092565b60805160601c60a05160601c614eb6620001976000396000818161020d0152818161051601528181610820015281816108ef015281816116270152818161181001528181611cc401528181611d8501528181611e0b01528181611f7d015281816120d301528181612aa001528181612b610152612be70152600081816105e801528181610cbf01528181610e6401528181610f7c015281816116d30152818161302401528181613b0a0152613b5a0152614eb66000f3fe6080604052600436106101fd5760003560e01c8063832e94921161010d578063a5e56571116100a0578063d06ca61f1161006f578063d06ca61f1461062a578063d8b9f6101461064a578063dcfb77b11461066a578063edbdf5e21461068a578063f75c2664146106aa57600080fd5b8063a5e56571146105a3578063ad615dec146105b6578063c45a0155146105d6578063c8e174f61461060a57600080fd5b80638fd903f5116100dc5780638fd903f51461050457806399a2f2d71461055057806399cd84b5146105635780639aa1ac611461058357600080fd5b8063832e94921461048457806385f8c259146104a457806387cc6e2f146104c45780638d7d3eea146104e457600080fd5b80633f88de89116101905780635b7b018c1161015f5780635b7b018c146103f157806365782f56146104115780636a45397214610431578063701bb89114610451578063825bb13c1461046457600080fd5b80633f88de8914610361578063456862aa146103815780634d93bb94146103b157806352a397d5146103d157600080fd5b80631f00ca74116101cc5780631f00ca74146102d4578063241dc2df1461030157806325121b76146103215780632fc1e7281461034157600080fd5b80630175b1c414610241578063054d50d4146102615780630bb57203146102945780631b91a934146102b457600080fd5b3661023c57336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461023a5761023a614df0565b005b600080fd5b34801561024d57600080fd5b5061023a61025c36600461477d565b6106bf565b34801561026d57600080fd5b5061028161027c366004614a07565b6109ed565b6040519081526020015b60405180910390f35b3480156102a057600080fd5b5061023a6102af36600461498a565b610a02565b3480156102c057600080fd5b5061023a6102cf366004614371565b610b22565b3480156102e057600080fd5b506102f46102ef3660046148b2565b610cb8565b60405161028b9190614b9e565b34801561030d57600080fd5b5061023a61031c36600461443d565b610cee565b34801561032d57600080fd5b5061023a61033c36600461466a565b610d01565b34801561034d57600080fd5b506102f461035c3660046147cf565b610e04565b34801561036d57600080fd5b5061023a61037c36600461477d565b61105d565b34801561038d57600080fd5b506103a161039c366004614338565b61112a565b604051901515815260200161028b565b3480156103bd57600080fd5b5061023a6103cc3660046144f1565b611235565b3480156103dd57600080fd5b506102f46103ec3660046147cf565b6115c2565b3480156103fd57600080fd5b506103a161040c3660046142f7565b6118e4565b34801561041d57600080fd5b5061023a61042c36600461498a565b611a0c565b34801561043d57600080fd5b5061023a61044c36600461498a565b611b0b565b61028161045f366004614338565b611cc0565b34801561047057600080fd5b5061023a61047f36600461477d565b611f2d565b34801561049057600080fd5b5061028161049f3660046144af565b611f79565b3480156104b057600080fd5b506102816104bf366004614a07565b612149565b3480156104d057600080fd5b5061023a6104df366004614483565b612156565b3480156104f057600080fd5b5061023a6104ff366004614371565b61229c565b34801561051057600080fd5b506105387f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161028b565b34801561055c57600080fd5b5046610281565b34801561056f57600080fd5b5061023a61057e3660046144f1565b61242e565b34801561058f57600080fd5b5061023a61059e3660046144f1565b612776565b61023a6105b13660046143fc565b612a9e565b3480156105c257600080fd5b506102816105d1366004614a07565b612d11565b3480156105e257600080fd5b506105387f000000000000000000000000000000000000000000000000000000000000000081565b34801561061657600080fd5b5061023a6106253660046144f1565b612d1e565b34801561063657600080fd5b506102f46106453660046148b2565b61301d565b34801561065657600080fd5b5061023a61066536600461498a565b61304a565b34801561067657600080fd5b5061023a6106853660046145a6565b613140565b34801561069657600080fd5b5061023a6106a536600461443d565b6131e6565b3480156106b657600080fd5b506105386132b3565b6106c76132b3565b6001600160a01b0316336001600160a01b0316146107005760405162461bcd60e51b81526004016106f790614c64565b60405180910390fd5b61070d85858585856132de565b60008490506000816001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b15801561074d57600080fd5b505afa158015610761573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610785919061431b565b90506001600160a01b0381161580159061081957506040516370a0823160e01b81526001600160a01b0387811660048301528591908316906370a082319060240160206040518083038186803b1580156107de57600080fd5b505afa1580156107f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108169190614899565b10155b156109e4577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316816001600160a01b0316141561096257604051620e75bb60e21b81526001600160a01b038316906239d6ec9061088690889088903090600401614aa9565b602060405180830381600087803b1580156108a057600080fd5b505af11580156108b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d89190614899565b50604051632e1a7d4d60e01b8152600481018590527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561093b57600080fd5b505af115801561094f573d6000803e3d6000fd5b5050505061095d85856133c4565b6109e4565b604051620e75bb60e21b81526001600160a01b038316906239d6ec9061099090889088908290600401614aa9565b602060405180830381600087803b1580156109aa57600080fd5b505af11580156109be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e29190614899565b505b50505050505050565b60006109fa848484613490565b949350505050565b8142811015610a235760405162461bcd60e51b81526004016106f790614c9b565b85856000818110610a3657610a36614e1c565b9050602002016020810190610a4b91906142f7565b6001600160a01b0316639dc29fac338a6040518363ffffffff1660e01b8152600401610a78929190614a90565b602060405180830381600087803b158015610a9257600080fd5b505af1158015610aa6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aca919061475b565b506001600160a01b038416337ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b388888c8c465b89604051610b1096959493929190614acc565b60405180910390a35050505050505050565b876001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015610b5b57600080fd5b505afa158015610b6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b93919061431b565b6001600160a01b031663605629d68a8a89898989896040518863ffffffff1660e01b8152600401610bca9796959493929190614a4f565b602060405180830381600087803b158015610be457600080fd5b505af1158015610bf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1c919061475b565b50604051630bebbf4d60e41b8152600481018790526001600160a01b038a8116602483015289169063bebbf4d090604401602060405180830381600087803b158015610c6757600080fd5b505af1158015610c7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c9f9190614899565b50610cad898989898561355e565b505050505050505050565b6060610ce57f00000000000000000000000000000000000000000000000000000000000000008484613642565b90505b92915050565b610cfb338585858561355e565b50505050565b610d096132b3565b6001600160a01b0316336001600160a01b031614610d395760405162461bcd60e51b81526004016106f790614c64565b60005b87811015610df757610de58b8b83818110610d5957610d59614e1c565b905060200201358a8a84818110610d7257610d72614e1c565b9050602002016020810190610d8791906142f7565b898985818110610d9957610d99614e1c565b9050602002016020810190610dae91906142f7565b888886818110610dc057610dc0614e1c565b90506020020135878787818110610dd957610dd9614e1c565b905060200201356132de565b80610def81614dd5565b915050610d3c565b5050505050505050505050565b6060610e0e6132b3565b6001600160a01b0316336001600160a01b031614610e3e5760405162461bcd60e51b81526004016106f790614c64565b8242811015610e5f5760405162461bcd60e51b81526004016106f790614c9b565b610ebd7f00000000000000000000000000000000000000000000000000000000000000008a8989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506137d892505050565b9150878260018451610ecf9190614d7b565b81518110610edf57610edf614e1c565b60200260200101511015610f4b5760405162461bcd60e51b815260206004820152602d60248201527f5375736869737761705632526f757465723a20494e53554646494349454e545f60448201526c13d55514155517d05353d55395609a1b60648201526084016106f7565b6110118a88886000818110610f6257610f62614e1c565b9050602002016020810190610f7791906142f7565b610ff07f00000000000000000000000000000000000000000000000000000000000000008b8b6000818110610fae57610fae614e1c565b9050602002016020810190610fc391906142f7565b8c8c6001818110610fd657610fd6614e1c565b9050602002016020810190610feb91906142f7565b61394e565b8560008151811061100357611003614e1c565b6020026020010151876132de565b611050828888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152508a9250613a27915050565b5098975050505050505050565b6110656132b3565b6001600160a01b0316336001600160a01b0316146110955760405162461bcd60e51b81526004016106f790614c64565b6110a285858585856132de565b604051620e75bb60e21b81526001600160a01b038516906239d6ec906110d090869086908290600401614aa9565b602060405180830381600087803b1580156110ea57600080fd5b505af11580156110fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111229190614899565b505050505050565b60006111346132b3565b6001600160a01b0316336001600160a01b0316146111645760405162461bcd60e51b81526004016106f790614c64565b6001600160a01b0382166111ba5760405162461bcd60e51b815260206004820152601d60248201527f416e79737761705633526f757465723a2061646472657373283078302900000060448201526064016106f7565b6040516360e232a960e01b81526001600160a01b0383811660048301528416906360e232a990602401602060405180830381600087803b1580156111fd57600080fd5b505af1158015611211573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce5919061475b565b84428110156112565760405162461bcd60e51b81526004016106f790614c9b565b60008989600081811061126b5761126b614e1c565b905060200201602081019061128091906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156112b857600080fd5b505afa1580156112cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112f0919061431b565b9050806001600160a01b031663d505accf8e308f8b8b8b8b6040518863ffffffff1660e01b815260040161132a9796959493929190614a4f565b600060405180830381600087803b15801561134457600080fd5b505af1158015611358573d6000803e3d6000fd5b5050505061139a8d8b8b600081811061137357611373614e1c565b905060200201602081019061138891906142f7565b6001600160a01b03841691908f613c29565b898960008181106113ad576113ad614e1c565b90506020020160208101906113c291906142f7565b604051630bebbf4d60e41b8152600481018e90526001600160a01b038f81166024830152919091169063bebbf4d090604401602060405180830381600087803b15801561140e57600080fd5b505af1158015611422573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114469190614899565b508989600081811061145a5761145a614e1c565b905060200201602081019061146f91906142f7565b6001600160a01b0316639dc29fac8e8e6040518363ffffffff1660e01b815260040161149c929190614a90565b602060405180830381600087803b1580156114b657600080fd5b505af11580156114ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ee919061475b565b5060008a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050905060008e905060008a905060008f905060008f905060006115524690565b90506000899050846001600160a01b0316866001600160a01b03167f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f489878787876040516115a4959493929190614b36565b60405180910390a35050505050505050505050505050505050505050565b60606115cc6132b3565b6001600160a01b0316336001600160a01b0316146115fc5760405162461bcd60e51b81526004016106f790614c64565b824281101561161d5760405162461bcd60e51b81526004016106f790614c9b565b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168787611654600182614d7b565b81811061166357611663614e1c565b905060200201602081019061167891906142f7565b6001600160a01b0316146116ce5760405162461bcd60e51b815260206004820152601d60248201527f416e79737761705633526f757465723a20494e56414c49445f5041544800000060448201526064016106f7565b61172c7f00000000000000000000000000000000000000000000000000000000000000008a8989808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506137d892505050565b915087826001845161173e9190614d7b565b8151811061174e5761174e614e1c565b602002602001015110156117b85760405162461bcd60e51b815260206004820152602b60248201527f416e79737761705633526f757465723a20494e53554646494349454e545f4f5560448201526a1514155517d05353d5539560aa1b60648201526084016106f7565b6117cf8a88886000818110610f6257610f62614e1c565b61180e82888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250309250613a27915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836001855161184c9190614d7b565b8151811061185c5761185c614e1c565b60200260200101516040518263ffffffff1660e01b815260040161188291815260200190565b600060405180830381600087803b15801561189c57600080fd5b505af11580156118b0573d6000803e3d6000fd5b505050506110508583600185516118c79190614d7b565b815181106118d7576118d7614e1c565b60200260200101516133c4565b60006118ee6132b3565b6001600160a01b0316336001600160a01b03161461191e5760405162461bcd60e51b81526004016106f790614c64565b6001600160a01b0382166119745760405162461bcd60e51b815260206004820152601d60248201527f416e79737761705633526f757465723a2061646472657373283078302900000060448201526064016106f7565b61197c6132b3565b600080546001600160a01b03199081166001600160a01b0393841617909155600180549091169184169190911790556119b8426202a300614d22565b60028190556001546000546001600160a01b0391821691167fcda32bc39904597666dfa9f9c845714756e1ffffad55b52e0d344673a21981214660405190815260200160405180910390a45060015b919050565b8142811015611a2d5760405162461bcd60e51b81526004016106f790614c9b565b85856000818110611a4057611a40614e1c565b9050602002016020810190611a5591906142f7565b6001600160a01b0316639dc29fac338a6040518363ffffffff1660e01b8152600401611a82929190614a90565b602060405180830381600087803b158015611a9c57600080fd5b505af1158015611ab0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad4919061475b565b506001600160a01b038416337f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f488888c8c46610afd565b8142811015611b2c5760405162461bcd60e51b81526004016106f790614c9b565b611c023387876000818110611b4357611b43614e1c565b9050602002016020810190611b5891906142f7565b8a89896000818110611b6c57611b6c614e1c565b9050602002016020810190611b8191906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611bb957600080fd5b505afa158015611bcd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bf1919061431b565b6001600160a01b0316929190613c29565b85856000818110611c1557611c15614e1c565b9050602002016020810190611c2a91906142f7565b604051630bebbf4d60e41b8152600481018a90523360248201526001600160a01b03919091169063bebbf4d090604401602060405180830381600087803b158015611c7457600080fd5b505af1158015611c88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cac9190614899565b5085856000818110611a4057611a40614e1c565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611d2557600080fd5b505afa158015611d39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5d919061431b565b6001600160a01b031614611d835760405162461bcd60e51b81526004016106f790614c1a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015611dde57600080fd5b505af1158015611df2573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb9250611e45915086903490600401614a90565b602060405180830381600087803b158015611e5f57600080fd5b505af1158015611e73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e97919061475b565b611ea357611ea3614df0565b604051630bebbf4d60e41b81523460048201526001600160a01b03838116602483015284169063bebbf4d090604401602060405180830381600087803b158015611eec57600080fd5b505af1158015611f00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f249190614899565b50349392505050565b611f356132b3565b6001600160a01b0316336001600160a01b031614611f655760405162461bcd60e51b81526004016106f790614c64565b611f7285858585856132de565b5050505050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611fde57600080fd5b505afa158015611ff2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612016919061431b565b6001600160a01b03161461203c5760405162461bcd60e51b81526004016106f790614c1a565b604051620e75bb60e21b81526001600160a01b038516906239d6ec9061206a90339087903090600401614aa9565b602060405180830381600087803b15801561208457600080fd5b505af1158015612098573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120bc9190614899565b50604051632e1a7d4d60e01b8152600481018490527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561211f57600080fd5b505af1158015612133573d6000803e3d6000fd5b5050505061214182846133c4565b509092915050565b60006109fa848484613c83565b61215e6132b3565b6001600160a01b0316336001600160a01b03161461218e5760405162461bcd60e51b81526004016106f790614c64565b60006121986132b3565b6040516340c10f1960e01b81529091506001600160a01b038416906340c10f19906121c99084908690600401614a90565b602060405180830381600087803b1580156121e357600080fd5b505af11580156121f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221b919061475b565b50604051620e75bb60e21b81526001600160a01b038416906239d6ec9061224a90849086908290600401614aa9565b602060405180830381600087803b15801561226457600080fd5b505af1158015612278573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cfb9190614899565b6000886001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156122d757600080fd5b505afa1580156122eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061230f919061431b565b60405163d505accf60e01b81529091506001600160a01b0382169063d505accf9061234a908d9030908c908c908c908c908c90600401614a4f565b600060405180830381600087803b15801561236457600080fd5b505af1158015612378573d6000803e3d6000fd5b50612392925050506001600160a01b0382168b8b8a613c29565b604051630bebbf4d60e41b8152600481018890526001600160a01b038b811660248301528a169063bebbf4d090604401602060405180830381600087803b1580156123dc57600080fd5b505af11580156123f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124149190614899565b506124228a8a8a8a8661355e565b50505050505050505050565b844281101561244f5760405162461bcd60e51b81526004016106f790614c9b565b60008989600081811061246457612464614e1c565b905060200201602081019061247991906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156124b157600080fd5b505afa1580156124c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124e9919061431b565b9050806001600160a01b031663d505accf8e308f8b8b8b8b6040518863ffffffff1660e01b81526004016125239796959493929190614a4f565b600060405180830381600087803b15801561253d57600080fd5b505af1158015612551573d6000803e3d6000fd5b5050505061256c8d8b8b600081811061137357611373614e1c565b8989600081811061257f5761257f614e1c565b905060200201602081019061259491906142f7565b604051630bebbf4d60e41b8152600481018e90526001600160a01b038f81166024830152919091169063bebbf4d090604401602060405180830381600087803b1580156125e057600080fd5b505af11580156125f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126189190614899565b508989600081811061262c5761262c614e1c565b905060200201602081019061264191906142f7565b6001600160a01b0316639dc29fac8e8e6040518363ffffffff1660e01b815260040161266e929190614a90565b602060405180830381600087803b15801561268857600080fd5b505af115801561269c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126c0919061475b565b5060008a8a80806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050905060008e905060008a905060008f905060008f905060006127244690565b90506000899050846001600160a01b0316866001600160a01b03167ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b389878787876040516115a4959493929190614b36565b84428110156127975760405162461bcd60e51b81526004016106f790614c9b565b888860008181106127aa576127aa614e1c565b90506020020160208101906127bf91906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b1580156127f757600080fd5b505afa15801561280b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061282f919061431b565b6001600160a01b031663605629d68d8b8b600081811061285157612851614e1c565b905060200201602081019061286691906142f7565b8e8a8a8a8a6040518863ffffffff1660e01b815260040161288d9796959493929190614a4f565b602060405180830381600087803b1580156128a757600080fd5b505af11580156128bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128df919061475b565b50888860008181106128f3576128f3614e1c565b905060200201602081019061290891906142f7565b604051630bebbf4d60e41b8152600481018d90526001600160a01b038e81166024830152919091169063bebbf4d090604401602060405180830381600087803b15801561295457600080fd5b505af1158015612968573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298c9190614899565b50888860008181106129a0576129a0614e1c565b90506020020160208101906129b591906142f7565b6001600160a01b0316639dc29fac8d8d6040518363ffffffff1660e01b81526004016129e2929190614a90565b602060405180830381600087803b1580156129fc57600080fd5b505af1158015612a10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a34919061475b565b50866001600160a01b03168c6001600160a01b03167ffea6abdf4fd32f20966dff7619354cd82cd43dc78a3bee479f04c74dbfc585b38b8b8f8f612a754690565b89604051612a8896959493929190614acc565b60405180910390a3505050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015612b0157600080fd5b505afa158015612b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b39919061431b565b6001600160a01b031614612b5f5760405162461bcd60e51b81526004016106f790614c1a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0346040518263ffffffff1660e01b81526004016000604051808303818588803b158015612bba57600080fd5b505af1158015612bce573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb9250612c21915086903490600401614a90565b602060405180830381600087803b158015612c3b57600080fd5b505af1158015612c4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c73919061475b565b612c7f57612c7f614df0565b604051630bebbf4d60e41b81523460048201523360248201526001600160a01b0384169063bebbf4d090604401602060405180830381600087803b158015612cc657600080fd5b505af1158015612cda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfe9190614899565b50612d0c338484348561355e565b505050565b60006109fa848484613d4c565b8442811015612d3f5760405162461bcd60e51b81526004016106f790614c9b565b88886000818110612d5257612d52614e1c565b9050602002016020810190612d6791906142f7565b6001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015612d9f57600080fd5b505afa158015612db3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dd7919061431b565b6001600160a01b031663605629d68d8b8b6000818110612df957612df9614e1c565b9050602002016020810190612e0e91906142f7565b8e8a8a8a8a6040518863ffffffff1660e01b8152600401612e359796959493929190614a4f565b602060405180830381600087803b158015612e4f57600080fd5b505af1158015612e63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e87919061475b565b5088886000818110612e9b57612e9b614e1c565b9050602002016020810190612eb091906142f7565b604051630bebbf4d60e41b8152600481018d90526001600160a01b038e81166024830152919091169063bebbf4d090604401602060405180830381600087803b158015612efc57600080fd5b505af1158015612f10573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f349190614899565b5088886000818110612f4857612f48614e1c565b9050602002016020810190612f5d91906142f7565b6001600160a01b0316639dc29fac8d8d6040518363ffffffff1660e01b8152600401612f8a929190614a90565b602060405180830381600087803b158015612fa457600080fd5b505af1158015612fb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fdc919061475b565b50866001600160a01b03168c6001600160a01b03167f278277e0209c347189add7bd92411973b5f6b8644f7ac62ea1be984ce993f8f48b8b8f8f612a754690565b6060610ce57f000000000000000000000000000000000000000000000000000000000000000084846137d8565b814281101561306b5760405162461bcd60e51b81526004016106f790614c9b565b6130823387876000818110611b4357611b43614e1c565b8585600081811061309557613095614e1c565b90506020020160208101906130aa91906142f7565b604051630bebbf4d60e41b8152600481018a90523360248201526001600160a01b03919091169063bebbf4d090604401602060405180830381600087803b1580156130f457600080fd5b505af1158015613108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061312c9190614899565b5085856000818110610a3657610a36614e1c565b60005b87811015610cad576131d4338a8a8481811061316157613161614e1c565b905060200201602081019061317691906142f7565b89898581811061318857613188614e1c565b905060200201602081019061319d91906142f7565b8888868181106131af576131af614e1c565b905060200201358787878181106131c8576131c8614e1c565b9050602002013561355e565b806131de81614dd5565b915050613143565b613225338584876001600160a01b0316636f307dc36040518163ffffffff1660e01b815260040160206040518083038186803b158015611bb957600080fd5b604051630bebbf4d60e41b8152600481018390523360248201526001600160a01b0385169063bebbf4d090604401602060405180830381600087803b15801561326d57600080fd5b505af1158015613281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132a59190614899565b50610cfb338585858561355e565b600060025442106132ce57506001546001600160a01b031690565b506000546001600160a01b031690565b6040516340c10f1960e01b81526001600160a01b038516906340c10f199061330c9086908690600401614a90565b602060405180830381600087803b15801561332657600080fd5b505af115801561333a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061335e919061475b565b50826001600160a01b0316846001600160a01b0316867faac9ce45fe3adf5143598c4f18a369591a20a3384aedaf1b525d29127e1fcd55858561339e4690565b604080519384526020840192909252908201526060015b60405180910390a45050505050565b604080516000808252602082019092526001600160a01b0384169083906040516133ee9190614a33565b60006040518083038185875af1925050503d806000811461342b576040519150601f19603f3d011682016040523d82523d6000602084013e613430565b606091505b5050905080612d0c5760405162461bcd60e51b815260206004820152602660248201527f5472616e7366657248656c7065723a204e41544956455f5452414e534645525f60448201526511905253115160d21b60648201526084016106f7565b60008084116134e55760405162461bcd60e51b815260206004820152602d6024820152600080516020614e6183398151915260448201526c17d25394155517d05353d55395609a1b60648201526084016106f7565b6000831180156134f55750600082115b6135115760405162461bcd60e51b81526004016106f790614be2565b600061351f856103e5613ddc565b9050600061352d8285613ddc565b9050600061354783613541886103e8613ddc565b90613e43565b90506135538183614d3a565b979650505050505050565b604051632770a7eb60e21b81526001600160a01b03851690639dc29fac9061358c9088908690600401614a90565b602060405180830381600087803b1580156135a657600080fd5b505af11580156135ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135de919061475b565b50826001600160a01b0316856001600160a01b0316856001600160a01b03167f97116cf6cd4f6412bb47914d6db18da9e16ab2142f543b86e207c24fbd16b23a856136264690565b60408051928352602083019190915281018690526060016133b5565b60606002825110156136965760405162461bcd60e51b815260206004820181905260248201527f53757368697377617056324c6962726172793a20494e56414c49445f5041544860448201526064016106f7565b815167ffffffffffffffff8111156136b0576136b0614e32565b6040519080825280602002602001820160405280156136d9578160200160208202803683370190505b5090508281600183516136ec9190614d7b565b815181106136fc576136fc614e1c565b6020026020010181815250506000600183516137189190614d7b565b90505b80156137d05760008061376b8786613734600187614d7b565b8151811061374457613744614e1c565b602002602001015187868151811061375e5761375e614e1c565b6020026020010151613e98565b9150915061379384848151811061378457613784614e1c565b60200260200101518383613c83565b8461379f600186614d7b565b815181106137af576137af614e1c565b602002602001018181525050505080806137c890614dbe565b91505061371b565b509392505050565b606060028251101561382c5760405162461bcd60e51b815260206004820181905260248201527f53757368697377617056324c6962726172793a20494e56414c49445f5041544860448201526064016106f7565b815167ffffffffffffffff81111561384657613846614e32565b60405190808252806020026020018201604052801561386f578160200160208202803683370190505b509050828160008151811061388657613886614e1c565b60200260200101818152505060005b600183516138a39190614d7b565b8110156137d0576000806138e9878685815181106138c3576138c3614e1c565b6020026020010151878660016138d99190614d22565b8151811061375e5761375e614e1c565b9150915061391184848151811061390257613902614e1c565b60200260200101518383613490565b8461391d856001614d22565b8151811061392d5761392d614e1c565b6020026020010181815250505050808061394690614dd5565b915050613895565b600080600061395d8585613f71565b6040516bffffffffffffffffffffffff19606084811b8216602084015283901b1660348201529193509150869060480160405160208183030381529060405280519060200120604051602001613a059291906001600160f81b0319815260609290921b6bffffffffffffffffffffffff1916600183015260158201527fe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303603582015260550190565b60408051601f1981840301815291905280516020909101209695505050505050565b60005b60018351613a389190614d7b565b811015610cfb57600080848381518110613a5457613a54614e1c565b602002602001015185846001613a6a9190614d22565b81518110613a7a57613a7a614e1c565b6020026020010151915091506000613a928383613f71565b509050600087613aa3866001614d22565b81518110613ab357613ab3614e1c565b60200260200101519050600080836001600160a01b0316866001600160a01b031614613ae157826000613ae5565b6000835b91509150600060028a51613af99190614d7b565b8810613b055788613b53565b613b537f0000000000000000000000000000000000000000000000000000000000000000878c613b368c6002614d22565b81518110613b4657613b46614e1c565b602002602001015161394e565b9050613b807f0000000000000000000000000000000000000000000000000000000000000000888861394e565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f191660200182016040528015613bbd576020820181803683370190505b506040518563ffffffff1660e01b8152600401613bdd9493929190614cd2565b600060405180830381600087803b158015613bf757600080fd5b505af1158015613c0b573d6000803e3d6000fd5b50505050505050505050508080613c2190614dd5565b915050613a2a565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052610cfb90859061406b565b6000808411613cd95760405162461bcd60e51b815260206004820152602e6024820152600080516020614e6183398151915260448201526d17d3d55514155517d05353d5539560921b60648201526084016106f7565b600083118015613ce95750600082115b613d055760405162461bcd60e51b81526004016106f790614be2565b6000613d1d6103e8613d178688613ddc565b90613ddc565b90506000613d316103e5613d1786896141f2565b9050613d4260016135418385614d3a565b9695505050505050565b6000808411613d9b5760405162461bcd60e51b81526020600482015260276024820152600080516020614e6183398151915260448201526617d05353d5539560ca1b60648201526084016106f7565b600083118015613dab5750600082115b613dc75760405162461bcd60e51b81526004016106f790614be2565b82613dd28584613ddc565b6109fa9190614d3a565b6000811580613e0057508282613df28183614d5c565b9250613dfe9083614d3a565b145b610ce85760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b60448201526064016106f7565b600082613e508382614d22565b9150811015610ce85760405162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b60448201526064016106f7565b6000806000613ea78585613f71565b509050600080613eb888888861394e565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613ef057600080fd5b505afa158015613f04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f289190614854565b506001600160701b031691506001600160701b03169150826001600160a01b0316876001600160a01b031614613f5f578082613f62565b81815b90999098509650505050505050565b600080826001600160a01b0316846001600160a01b03161415613fe65760405162461bcd60e51b815260206004820152602760248201527f53757368697377617056324c6962726172793a204944454e544943414c5f41446044820152664452455353455360c81b60648201526084016106f7565b826001600160a01b0316846001600160a01b031610614006578284614009565b83835b90925090506001600160a01b0382166140645760405162461bcd60e51b815260206004820181905260248201527f53757368697377617056324c6962726172793a205a45524f5f4144445245535360448201526064016106f7565b9250929050565b61407d826001600160a01b0316614248565b6140c95760405162461bcd60e51b815260206004820152601f60248201527f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740060448201526064016106f7565b600080836001600160a01b0316836040516140e49190614a33565b6000604051808303816000865af19150503d8060008114614121576040519150601f19603f3d011682016040523d82523d6000602084013e614126565b606091505b5091509150816141785760405162461bcd60e51b815260206004820181905260248201527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656460448201526064016106f7565b805115610cfb5780806020019051810190614193919061475b565b610cfb5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016106f7565b6000826141ff8382614d7b565b9150811115610ce85760405162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b60448201526064016106f7565b6000813f7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47081158015906109fa5750141592915050565b8035611a0781614e48565b60008083601f84011261429c57600080fd5b50813567ffffffffffffffff8111156142b457600080fd5b6020830191508360208260051b850101111561406457600080fd5b80516001600160701b0381168114611a0757600080fd5b803560ff81168114611a0757600080fd5b60006020828403121561430957600080fd5b813561431481614e48565b9392505050565b60006020828403121561432d57600080fd5b815161431481614e48565b6000806040838503121561434b57600080fd5b823561435681614e48565b9150602083013561436681614e48565b809150509250929050565b60008060008060008060008060006101208a8c03121561439057600080fd5b893561439b81614e48565b985060208a01356143ab81614e48565b975060408a01356143bb81614e48565b965060608a0135955060808a013594506143d760a08b016142e6565b935060c08a0135925060e08a013591506101008a013590509295985092959850929598565b60008060006060848603121561441157600080fd5b833561441c81614e48565b9250602084013561442c81614e48565b929592945050506040919091013590565b6000806000806080858703121561445357600080fd5b843561445e81614e48565b9350602085013561446e81614e48565b93969395505050506040820135916060013590565b6000806040838503121561449657600080fd5b82356144a181614e48565b946020939093013593505050565b6000806000606084860312156144c457600080fd5b83356144cf81614e48565b92506020840135915060408401356144e681614e48565b809150509250925092565b60008060008060008060008060008060006101408c8e03121561451357600080fd5b8b3561451e81614e48565b9a5060208c0135995060408c0135985060608c013567ffffffffffffffff81111561454857600080fd5b6145548e828f0161428a565b90995097505060808c013561456881614e48565b955060a08c0135945061457d60c08d016142e6565b935060e08c013592506101008c013591506101208c013590509295989b509295989b9093969950565b6000806000806000806000806080898b0312156145c257600080fd5b883567ffffffffffffffff808211156145da57600080fd5b6145e68c838d0161428a565b909a50985060208b01359150808211156145ff57600080fd5b61460b8c838d0161428a565b909850965060408b013591508082111561462457600080fd5b6146308c838d0161428a565b909650945060608b013591508082111561464957600080fd5b506146568b828c0161428a565b999c989b5096995094979396929594505050565b60008060008060008060008060008060a08b8d03121561468957600080fd5b8a3567ffffffffffffffff808211156146a157600080fd5b6146ad8e838f0161428a565b909c509a5060208d01359150808211156146c657600080fd5b6146d28e838f0161428a565b909a50985060408d01359150808211156146eb57600080fd5b6146f78e838f0161428a565b909850965060608d013591508082111561471057600080fd5b61471c8e838f0161428a565b909650945060808d013591508082111561473557600080fd5b506147428d828e0161428a565b915080935050809150509295989b9194979a5092959850565b60006020828403121561476d57600080fd5b8151801515811461431457600080fd5b600080600080600060a0868803121561479557600080fd5b8535945060208601356147a781614e48565b935060408601356147b781614e48565b94979396509394606081013594506080013592915050565b60008060008060008060008060e0898b0312156147eb57600080fd5b883597506020890135965060408901359550606089013567ffffffffffffffff81111561481757600080fd5b6148238b828c0161428a565b909650945050608089013561483781614e48565b979a969950949793969295929450505060a08201359160c0013590565b60008060006060848603121561486957600080fd5b614872846142cf565b9250614880602085016142cf565b9150604084015163ffffffff811681146144e657600080fd5b6000602082840312156148ab57600080fd5b5051919050565b600080604083850312156148c557600080fd5b8235915060208084013567ffffffffffffffff808211156148e557600080fd5b818601915086601f8301126148f957600080fd5b81358181111561490b5761490b614e32565b8060051b604051601f19603f8301168101818110858211171561493057614930614e32565b604052828152858101935084860182860187018b101561494f57600080fd5b600095505b83861015614979576149658161427f565b855260019590950194938601938601614954565b508096505050505050509250929050565b600080600080600080600060c0888a0312156149a557600080fd5b8735965060208801359550604088013567ffffffffffffffff8111156149ca57600080fd5b6149d68a828b0161428a565b90965094505060608801356149ea81614e48565b969995985093969295946080840135945060a09093013592915050565b600080600060608486031215614a1c57600080fd5b505081359360208301359350604090920135919050565b60008251614a45818460208701614d92565b9190910192915050565b6001600160a01b0397881681529590961660208601526040850193909352606084019190915260ff16608083015260a082015260c081019190915260e00190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b0393841681526020810192909252909116604082015260600190565b60a0808252810186905260008760c08301825b89811015614b0f578235614af281614e48565b6001600160a01b0316825260209283019290910190600101614adf565b50602084019790975250506040810193909352606083019190915260809091015292915050565b60a0808252865190820181905260009060209060c0840190828a01845b82811015614b785781516001600160a01b031684529284019290840190600101614b53565b505050908301969096525060408101939093526060830191909152608090910152919050565b6020808252825182820181905260009190848201906040850190845b81811015614bd657835183529284019291840191600101614bba565b50909695505050505050565b6020808252602a90820152600080516020614e618339815191526040820152695f4c495155494449545960b01b606082015260800190565b6020808252602a908201527f416e79737761705633526f757465723a20756e6465726c79696e67206973206e6040820152696f7420774e415449564560b01b606082015260800190565b6020808252601a908201527f416e79737761705633526f757465723a20464f5242494444454e000000000000604082015260600190565b60208082526018908201527f416e79737761705633526f757465723a20455850495245440000000000000000604082015260600190565b84815283602082015260018060a01b03831660408201526080606082015260008251806080840152614d0b8160a0850160208701614d92565b601f01601f19169190910160a00195945050505050565b60008219821115614d3557614d35614e06565b500190565b600082614d5757634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614d7657614d76614e06565b500290565b600082821015614d8d57614d8d614e06565b500390565b60005b83811015614dad578181015183820152602001614d95565b83811115610cfb5750506000910152565b600081614dcd57614dcd614e06565b506000190190565b6000600019821415614de957614de9614e06565b5060010190565b634e487b7160e01b600052600160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114614e5d57600080fd5b5056fe53757368697377617056324c6962726172793a20494e53554646494349454e54a264697066735822122073407528f159bfea36d084e49afe223dc0f542434e791cc076c52d87bb5c136a64736f6c63430008060033000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c40000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270000000000000000000000000f39fee2fdfe7db022591f4a82e3537fa0b55fb9c

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

000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c40000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270000000000000000000000000f39fee2fdfe7db022591f4a82e3537fa0b55fb9c

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

-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000c35dadb65012ec5796536bd9864ed8773abc74c4
Arg [1] : 0000000000000000000000000d500b1d8e8ef31e21c99d1db9a6444d3adf1270
Arg [2] : 000000000000000000000000f39fee2fdfe7db022591f4a82e3537fa0b55fb9c


Deployed ByteCode Sourcemap

13654:18910:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14229:10;-1:-1:-1;;;;;14243:7:0;14229:21;;14222:29;;;;:::i;:::-;13654:18910;;;;;20149:718;;;;;;;;;;-1:-1:-1;20149:718:0;;;;;:::i;:::-;;:::i;31572:246::-;;;;;;;;;;-1:-1:-1;31572:246:0;;;;;:::i;:::-;;:::i;:::-;;;27805:25:1;;;27793:2;27778:18;31572:246:0;;;;;;;;23258:416;;;;;;;;;;-1:-1:-1;23258:416:0;;;;;:::i;:::-;;:::i;18278:498::-;;;;;;;;;;-1:-1:-1;18278:498:0;;;;;:::i;:::-;;:::i;32324:237::-;;;;;;;;;;-1:-1:-1;32324:237:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;16586:157::-;;;;;;;;;;-1:-1:-1;16586:157:0;;;;;:::i;:::-;;:::i;21984:319::-;;;;;;;;;;-1:-1:-1;21984:319:0;;;;;:::i;:::-;;:::i;26481:648::-;;;;;;;;;;-1:-1:-1;26481:648:0;;;;;:::i;:::-;;:::i;19779:245::-;;;;;;;;;;-1:-1:-1;19779:245:0;;;;;:::i;:::-;;:::i;16023:228::-;;;;;;;;;;-1:-1:-1;16023:228:0;;;;;:::i;:::-;;:::i;:::-;;;19606:14:1;;19599:22;19581:41;;19569:2;19554:18;16023:228:0;19536:92:1;28446:1067:0;;;;;;;;;;-1:-1:-1;28446:1067:0;;;;;:::i;:::-;;:::i;30453:886::-;;;;;;;;;;-1:-1:-1;30453:886:0;;;;;:::i;:::-;;:::i;15658:357::-;;;;;;;;;;-1:-1:-1;15658:357:0;;;;;:::i;:::-;;:::i;27230:416::-;;;;;;;;;;-1:-1:-1;27230:416:0;;;;;:::i;:::-;;:::i;27747:598::-;;;;;;;;;;-1:-1:-1;27747:598:0;;;;;:::i;:::-;;:::i;20875:407::-;;;;;;:::i;:::-;;:::i;19493:173::-;;;;;;;;;;-1:-1:-1;19493:173:0;;;;;:::i;:::-;;:::i;21290:413::-;;;;;;;;;;-1:-1:-1;21290:413:0;;;;;:::i;:::-;;:::i;31826:245::-;;;;;;;;;;-1:-1:-1;31826:245:0;;;;;:::i;:::-;;:::i;21753:223::-;;;;;;;;;;-1:-1:-1;21753:223:0;;;;;:::i;:::-;;:::i;17672:598::-;;;;;;;;;;-1:-1:-1;17672:598:0;;;;;:::i;:::-;;:::i;13799:32::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15087:32:1;;;15069:51;;15057:2;15042:18;13799:32:0;15024:102:1;15561:89:0;;;;;;;;;;-1:-1:-1;15633:9:0;15561:89;;24474:1067;;;;;;;;;;-1:-1:-1;24474:1067:0;;;;;:::i;:::-;;:::i;25642:694::-;;;;;;;;;;-1:-1:-1;25642:694:0;;;;;:::i;:::-;;:::i;17205:459::-;;;;;;:::i;:::-;;:::i;31383:181::-;;;;;;;;;;-1:-1:-1;31383:181:0;;;;;:::i;:::-;;:::i;13760:32::-;;;;;;;;;;;;;;;29614:694;;;;;;;;;;-1:-1:-1;29614:694:0;;;;;:::i;:::-;;:::i;32079:237::-;;;;;;;;;;-1:-1:-1;32079:237:0;;;;;:::i;:::-;;:::i;23775:598::-;;;;;;;;;;-1:-1:-1;23775:598:0;;;;;:::i;:::-;;:::i;18784:286::-;;;;;;;;;;-1:-1:-1;18784:286:0;;;;;:::i;:::-;;:::i;16868:329::-;;;;;;;;;;-1:-1:-1;16868:329:0;;;;;:::i;:::-;;:::i;15379:174::-;;;;;;;;;;;;;:::i;20149:718::-;15315:5;:3;:5::i;:::-;-1:-1:-1;;;;;15301:19:0;:10;-1:-1:-1;;;;;15301:19:0;;15293:58;;;;-1:-1:-1;;;15293:58:0;;;;;;;:::i;:::-;;;;;;;;;20271:47:::1;20282:3;20287:5;20294:2;20298:6;20306:11;20271:10;:47::i;:::-;20329:24;20371:5;20329:48;;20388:19;20410:9;-1:-1:-1::0;;;;;20410:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20388:44:::0;-1:-1:-1;;;;;;20447:25:0;::::1;::::0;;::::1;::::0;:75:::1;;-1:-1:-1::0;20476:36:0::1;::::0;-1:-1:-1;;;20476:36:0;;-1:-1:-1;;;;;15087:32:1;;;20476:36:0::1;::::0;::::1;15069:51:1::0;20516:6:0;;20476:29;;::::1;::::0;::::1;::::0;15042:18:1;;20476:36:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;20447:75;20443:417;;;20558:7;-1:-1:-1::0;;;;;20543:22:0::1;:11;-1:-1:-1::0;;;;;20543:22:0::1;;20539:310;;;20586:50;::::0;-1:-1:-1;;;20586:50:0;;-1:-1:-1;;;;;20586:23:0;::::1;::::0;::::1;::::0;:50:::1;::::0;20610:2;;20614:6;;20630:4:::1;::::0;20586:50:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;20655:34:0::1;::::0;-1:-1:-1;;;20655:34:0;;::::1;::::0;::::1;27805:25:1::0;;;20664:7:0::1;-1:-1:-1::0;;;;;20655:26:0::1;::::0;::::1;::::0;27778:18:1;;20655:34:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;20708:45;20742:2;20746:6;20708:33;:45::i;:::-;20539:310;;;20794:39;::::0;-1:-1:-1;;;20794:39:0;;-1:-1:-1;;;;;20794:23:0;::::1;::::0;::::1;::::0;:39:::1;::::0;20818:2;;20822:6;;20818:2;;20794:39:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;20539:310;20260:607;;20149:718:::0;;;;;:::o;31572:246::-;31707:14;31746:64;31778:8;31788:9;31799:10;31746:31;:64::i;:::-;31739:71;31572:246;-1:-1:-1;;;;31572:246:0:o;23258:416::-;23485:8;13902:15;13890:8;:27;;13882:64;;;;-1:-1:-1;;;13882:64:0;;;;;;;:::i;:::-;23521:4:::1;;23526:1;23521:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23506:28:0::1;;23535:10;23547:8;23506:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;23572:94:0;::::1;23609:10;23572:94;23603:4:::0;;23625:8;23635:12;15633:9;23649:5:::1;23656:9;23572:94;;;;;;;;;;;:::i;:::-;;;;;;;;23258:416:::0;;;;;;;;:::o;18278:498::-;18572:5;-1:-1:-1;;;;;18557:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;18550:61:0;;18612:4;18618:5;18625:6;18633:8;18643:1;18646;18649;18550:101;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18662:48:0;;-1:-1:-1;;;18662:48:0;;;;;28015:25:1;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;18662:34:0;;;;;27988:18:1;;18662:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18721:47;18733:4;18739:5;18746:2;18750:6;18758:9;18721:11;:47::i;:::-;18278:498;;;;;;;;;:::o;32324:237::-;32450:21;32496:57;32528:7;32537:9;32548:4;32496:31;:57::i;:::-;32489:64;;32324:237;;;;;:::o;16586:157::-;16682:53;16694:10;16706:5;16713:2;16717:6;16725:9;16682:11;:53::i;:::-;16586:157;;;;:::o;21984:319::-;15315:5;:3;:5::i;:::-;-1:-1:-1;;;;;15301:19:0;:10;-1:-1:-1;;;;;15301:19:0;;15293:58;;;;-1:-1:-1;;;15293:58:0;;;;;;;:::i;:::-;22168:6:::1;22163:133;22180:17:::0;;::::1;22163:133;;;22219:65;22230:3;;22234:1;22230:6;;;;;;;:::i;:::-;;;;;;;22238;;22245:1;22238:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;22249:2;;22252:1;22249:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;22256:7;;22264:1;22256:10;;;;;;;:::i;:::-;;;;;;;22268:12;;22281:1;22268:15;;;;;;;:::i;:::-;;;;;;;22219:10;:65::i;:::-;22199:3:::0;::::1;::::0;::::1;:::i;:::-;;;;22163:133;;;;21984:319:::0;;;;;;;;;;:::o;26481:648::-;26758:21;15315:5;:3;:5::i;:::-;-1:-1:-1;;;;;15301:19:0;:10;-1:-1:-1;;;;;15301:19:0;;15293:58;;;;-1:-1:-1;;;15293:58:0;;;;;;;:::i;:::-;26739:8:::1;13902:15;13890:8;:27;;13882:64;;;;-1:-1:-1::0;;;13882:64:0::1;;;;;;;:::i;:::-;26802:57:::2;26835:7;26844:8;26854:4;;26802:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;26802:32:0::2;::::0;-1:-1:-1;;;26802:57:0:i:2;:::-;26792:67;;26909:12;26878:7;26903:1;26886:7;:14;:18;;;;:::i;:::-;26878:27;;;;;;;;:::i;:::-;;;;;;;:43;;26870:101;;;::::0;-1:-1:-1;;;26870:101:0;;22886:2:1;26870:101:0::2;::::0;::::2;22868:21:1::0;22925:2;22905:18;;;22898:30;22964:34;22944:18;;;22937:62;-1:-1:-1;;;23015:18:1;;;23008:43;23068:19;;26870:101:0::2;22858:235:1::0;26870:101:0::2;26982:104;26993:3;26998:4;;27003:1;26998:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;27007:53;27034:7;27043:4;;27048:1;27043:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;27052:4;;27057:1;27052:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;27007:26;:53::i;:::-;27062:7;27070:1;27062:10;;;;;;;;:::i;:::-;;;;;;;27074:11;26982:10;:104::i;:::-;27097:24;27103:7;27112:4;;27097:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;27118:2:0;;-1:-1:-1;27097:5:0::2;::::0;-1:-1:-1;;27097:24:0:i:2;:::-;15362:1:::1;26481:648:::0;;;;;;;;;;:::o;19779:245::-;15315:5;:3;:5::i;:::-;-1:-1:-1;;;;;15301:19:0;:10;-1:-1:-1;;;;;15301:19:0;;15293:58;;;;-1:-1:-1;;;15293:58:0;;;;;;;:::i;:::-;19907:47:::1;19918:3;19923:5;19930:2;19934:6;19942:11;19907:10;:47::i;:::-;19965:51;::::0;-1:-1:-1;;;19965:51:0;;-1:-1:-1;;;;;19965:35:0;::::1;::::0;::::1;::::0;:51:::1;::::0;20001:2;;20005:6;;20001:2;;19965:51:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19779:245:::0;;;;;:::o;16023:228::-;16101:4;15315:5;:3;:5::i;:::-;-1:-1:-1;;;;;15301:19:0;:10;-1:-1:-1;;;;;15301:19:0;;15293:58;;;;-1:-1:-1;;;15293:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16126:22:0;::::1;16118:64;;;::::0;-1:-1:-1;;;16118:64:0;;21415:2:1;16118:64:0::1;::::0;::::1;21397:21:1::0;21454:2;21434:18;;;21427:30;21493:31;21473:18;;;21466:59;21542:18;;16118:64:0::1;21387:179:1::0;16118:64:0::1;16200:43;::::0;-1:-1:-1;;;16200:43:0;;-1:-1:-1;;;;;15087:32:1;;;16200:43:0::1;::::0;::::1;15069:51:1::0;16200:33:0;::::1;::::0;::::1;::::0;15042:18:1;;16200:43:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28446:1067::-:0;28774:8;13902:15;13890:8;:27;;13882:64;;;;-1:-1:-1;;;13882:64:0;;;;;;;:::i;:::-;28795:19:::1;28832:4;;28837:1;28832:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28817:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28795:58;;28871:11;-1:-1:-1::0;;;;;28864:26:0::1;;28891:4;28905;28912:8;28922;28932:1;28935;28938;28864:76;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;28951:61;28988:4;28994;;28999:1;28994:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28951:36:0;::::1;::::0;:61;29003:8;28951:36:::1;:61::i;:::-;29038:4;;29043:1;29038:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;29023:52;::::0;-1:-1:-1;;;29023:52:0;;::::1;::::0;::::1;28015:25:1::0;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;29023:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;29023:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29101:4;;29106:1;29101:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29086:28:0::1;;29115:4;29121:8;29086:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29152:22;29177:4;;29152:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29192:13;29208:4;29192:20;;29223:11;29237:2;29223:16;;29250:14;29267:8;29250:25;;29286:18;29307:12;29286:33;;29330:9;29342:5;15633:9:::0;;15561:89;29342:5:::1;29330:17;;29358:15;29376:9;29358:27;;29446:3;-1:-1:-1::0;;;;;29401:93:0::1;29439:5;-1:-1:-1::0;;;;;29401:93:0::1;;29432:5;29451:9;29462:13;29477:4;29483:10;29401:93;;;;;;;;;;:::i;:::-;;;;;;;;29141:365;;;;;;;28784:729;28446:1067:::0;;;;;;;;;;;;:::o;30453:886::-;30730:21;15315:5;:3;:5::i;:::-;-1:-1:-1;;;;;15301:19:0;:10;-1:-1:-1;;;;;15301:19:0;;15293:58;;;;-1:-1:-1;;;15293:58:0;;;;;;;:::i;:::-;30711:8:::1;13902:15;13890:8;:27;;13882:64;;;;-1:-1:-1::0;;;13882:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30797:7:0::2;30772:32;:4:::0;;30777:15:::2;30791:1;30772:4:::0;30777:15:::2;:::i;:::-;30772:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30772:32:0::2;;30764:74;;;::::0;-1:-1:-1;;;30764:74:0;;24784:2:1;30764:74:0::2;::::0;::::2;24766:21:1::0;24823:2;24803:18;;;24796:30;24862:31;24842:18;;;24835:59;24911:18;;30764:74:0::2;24756:179:1::0;30764:74:0::2;30859:57;30892:7;30901:8;30911:4;;30859:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;30859:32:0::2;::::0;-1:-1:-1;;;30859:57:0:i:2;:::-;30849:67;;30966:12;30935:7;30960:1;30943:7;:14;:18;;;;:::i;:::-;30935:27;;;;;;;;:::i;:::-;;;;;;;:43;;30927:99;;;::::0;-1:-1:-1;;;30927:99:0;;25142:2:1;30927:99:0::2;::::0;::::2;25124:21:1::0;25181:2;25161:18;;;25154:30;25220:34;25200:18;;;25193:62;-1:-1:-1;;;25271:18:1;;;25264:41;25322:19;;30927:99:0::2;25114:233:1::0;30927:99:0::2;31037:105;31048:3;31053:4;;31058:1;31053:7;;;;;;;:::i;31037:105::-;31153:35;31159:7;31168:4;;31153:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;::::0;;;;-1:-1:-1;31182:4:0::2;::::0;-1:-1:-1;31153:5:0::2;::::0;-1:-1:-1;;31153:35:0:i:2;:::-;31208:7;-1:-1:-1::0;;;;;31199:26:0::2;;31226:7;31251:1;31234:7;:14;:18;;;;:::i;:::-;31226:27;;;;;;;;:::i;:::-;;;;;;;31199:55;;;;;;;;;;;;;27805:25:1::0;;27793:2;27778:18;;27760:76;31199:55:0::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;31265:66;31299:2;31303:7;31328:1;31311:7;:14;:18;;;;:::i;:::-;31303:27;;;;;;;;:::i;:::-;;;;;;;31265:33;:66::i;15658:357::-:0;15717:4;15315:5;:3;:5::i;:::-;-1:-1:-1;;;;;15301:19:0;:10;-1:-1:-1;;;;;15301:19:0;;15293:58;;;;-1:-1:-1;;;15293:58:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15742:20:0;::::1;15734:62;;;::::0;-1:-1:-1;;;15734:62:0;;21415:2:1;15734:62:0::1;::::0;::::1;21397:21:1::0;21454:2;21434:18;;;21427:30;21493:31;21473:18;;;21466:59;21542:18;;15734:62:0::1;21387:179:1::0;15734:62:0::1;15817:5;:3;:5::i;:::-;15807:7;:15:::0;;-1:-1:-1;;;;;;15807:15:0;;::::1;-1:-1:-1::0;;;;;15807:15:0;;::::1;;::::0;;;-1:-1:-1;15833:16:0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;15883:27:::1;:15;15901:9;15883:27;:::i;:::-;15860:20;:50:::0;;;15948:7:::1;::::0;::::1;15939::::0;-1:-1:-1;;;;;15948:7:0;;::::1;::::0;15939::::1;15926:59;15633:9:::0;15926:59:::1;::::0;27805:25:1;;;27793:2;27778:18;15926:59:0::1;;;;;;;-1:-1:-1::0;16003:4:0::1;15362:1;15658:357:::0;;;:::o;27230:416::-;27457:8;13902:15;13890:8;:27;;13882:64;;;;-1:-1:-1;;;13882:64:0;;;;;;;:::i;:::-;27493:4:::1;;27498:1;27493:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27478:28:0::1;;27507:10;27519:8;27478:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;;27544:94:0;::::1;27581:10;27544:94;27575:4:::0;;27597:8;27607:12;15633:9;27621:5:::1;15561:89:::0;27747:598;27984:8;13902:15;13890:8;:27;;13882:64;;;;-1:-1:-1;;;13882:64:0;;;;;;;:::i;:::-;28005:92:::1;28067:10;28079:4;;28084:1;28079:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28088:8;28027:4;;28032:1;28027:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28012:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;28005:61:0::1;::::0;:92;;:61:::1;:92::i;:::-;28123:4;;28128:1;28123:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;28108:58;::::0;-1:-1:-1;;;28108:58:0;;::::1;::::0;::::1;28015:25:1::0;;;28155:10:0::1;28056:18:1::0;;;28049:60;-1:-1:-1;;;;;28108:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;28108:58:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28192:4;;28197:1;28192:7;;;;;;;:::i;20875:407::-:0;20951:4;21014:7;-1:-1:-1;;;;;20976:45:0;20991:5;-1:-1:-1;;;;;20976:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;20976:45:0;;20968:100;;;;-1:-1:-1;;;20968:100:0;;;;;;;:::i;:::-;21088:7;-1:-1:-1;;;;;21079:25:0;;21112:9;21079:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21142:44:0;;-1:-1:-1;;;21142:44:0;;-1:-1:-1;;;;;21151:7:0;21142:26;;-1:-1:-1;21142:26:0;;-1:-1:-1;21142:44:0;;-1:-1:-1;21169:5:0;;21176:9;;21142:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21135:52;;;;:::i;:::-;21198:49;;-1:-1:-1;;;21198:49:0;;21233:9;21198:49;;;28015:25:1;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;21198:34:0;;;;;27988:18:1;;21198:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;21265:9:0;;20875:407;-1:-1:-1;;;20875:407:0:o;19493:173::-;15315:5;:3;:5::i;:::-;-1:-1:-1;;;;;15301:19:0;:10;-1:-1:-1;;;;;15301:19:0;;15293:58;;;;-1:-1:-1;;;15293:58:0;;;;;;;:::i;:::-;19611:47:::1;19622:3;19627:5;19634:2;19638:6;19646:11;19611:10;:47::i;:::-;19493:173:::0;;;;;:::o;21290:413::-;21372:4;21435:7;-1:-1:-1;;;;;21397:45:0;21412:5;-1:-1:-1;;;;;21397:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;21397:45:0;;21389:100;;;;-1:-1:-1;;;21389:100:0;;;;;;;:::i;:::-;21500:70;;-1:-1:-1;;;21500:70:0;;-1:-1:-1;;;;;21500:35:0;;;;;:70;;21536:10;;21548:6;;21564:4;;21500:70;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;21581:34:0;;-1:-1:-1;;;21581:34:0;;;;;27805:25:1;;;21590:7:0;-1:-1:-1;;;;;21581:26:0;;;;27778:18:1;;21581:34:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21626:45;21660:2;21664:6;21626:33;:45::i;:::-;-1:-1:-1;21689:6:0;;21290:413;-1:-1:-1;;21290:413:0:o;31826:245::-;31961:13;31999:64;32030:9;32041;32052:10;31999:30;:64::i;21753:223::-;15315:5;:3;:5::i;:::-;-1:-1:-1;;;;;15301:19:0;:10;-1:-1:-1;;;;;15301:19:0;;15293:58;;;;-1:-1:-1;;;15293:58:0;;;;;;;:::i;:::-;21831:12:::1;21846:5;:3;:5::i;:::-;21862:40;::::0;-1:-1:-1;;;21862:40:0;;21831:20;;-1:-1:-1;;;;;;21862:26:0;::::1;::::0;::::1;::::0;:40:::1;::::0;21831:20;;21895:6;;21862:40:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;21913:55:0::1;::::0;-1:-1:-1;;;21913:55:0;;-1:-1:-1;;;;;21913:35:0;::::1;::::0;::::1;::::0;:55:::1;::::0;21949:4;;21955:6;;21949:4;;21913:55:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17672:598::-:0;17936:19;17973:5;-1:-1:-1;;;;;17958:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18003:74;;-1:-1:-1;;;18003:74:0;;17936:56;;-1:-1:-1;;;;;;18003:26:0;;;;;:74;;18030:4;;18044;;18051:6;;18059:8;;18069:1;;18072;;18075;;18003:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18088:57:0;;-1:-1:-1;;;;;;;;18088:36:0;;18125:4;18131:5;18138:6;18088:36;:57::i;:::-;18156:48;;-1:-1:-1;;;18156:48:0;;;;;28015:25:1;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;18156:34:0;;;;;27988:18:1;;18156:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18215:47;18227:4;18233:5;18240:2;18244:6;18252:9;18215:11;:47::i;:::-;17925:345;17672:598;;;;;;;;;:::o;24474:1067::-;24802:8;13902:15;13890:8;:27;;13882:64;;;;-1:-1:-1;;;13882:64:0;;;;;;;:::i;:::-;24823:19:::1;24860:4;;24865:1;24860:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24845:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24823:58;;24899:11;-1:-1:-1::0;;;;;24892:26:0::1;;24919:4;24933;24940:8;24950;24960:1;24963;24966;24892:76;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24979:61;25016:4;25022;;25027:1;25022:7;;;;;;;:::i;24979:61::-;25066:4;;25071:1;25066:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;25051:52;::::0;-1:-1:-1;;;25051:52:0;;::::1;::::0;::::1;28015:25:1::0;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;25051:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;25051:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25129:4;;25134:1;25129:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25114:28:0::1;;25143:4;25149:8;25114:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25180:22;25205:4;;25180:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25220:13;25236:4;25220:20;;25251:11;25265:2;25251:16;;25278:14;25295:8;25278:25;;25314:18;25335:12;25314:33;;25358:9;25370:5;15633:9:::0;;15561:89;25370:5:::1;25358:17;;25386:15;25404:9;25386:27;;25474:3;-1:-1:-1::0;;;;;25429:93:0::1;25467:5;-1:-1:-1::0;;;;;25429:93:0::1;;25460:5;25479:9;25490:13;25505:4;25511:10;25429:93;;;;;;;;;;:::i;25642:694::-:0;25978:8;13902:15;13890:8;:27;;13882:64;;;;-1:-1:-1;;;13882:64:0;;;;;;;:::i;:::-;26021:4:::1;;26026:1;26021:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26006:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25999:63:0::1;;26063:4;26069;;26074:1;26069:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26078:8;26088;26098:1;26101;26104;25999:107;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26132:4;;26137:1;26132:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26117:52;::::0;-1:-1:-1;;;26117:52:0;;::::1;::::0;::::1;28015:25:1::0;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;26117:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;26117:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26195:4;;26200:1;26195:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26180:28:0::1;;26209:4;26215:8;26180:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;26283:2;-1:-1:-1::0;;;;;26240:88:0::1;26277:4;-1:-1:-1::0;;;;;26240:88:0::1;;26271:4;;26287:8;26297:12;26311:5;15633:9:::0;;15561:89;26311:5:::1;26318:9;26240:88;;;;;;;;;;;:::i;:::-;;;;;;;;25642:694:::0;;;;;;;;;;;;:::o;17205:459::-;17348:7;-1:-1:-1;;;;;17310:45:0;17325:5;-1:-1:-1;;;;;17310:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;17310:45:0;;17302:100;;;;-1:-1:-1;;;17302:100:0;;;;;;;:::i;:::-;17422:7;-1:-1:-1;;;;;17413:25:0;;17446:9;17413:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17476:44:0;;-1:-1:-1;;;17476:44:0;;-1:-1:-1;;;;;17485:7:0;17476:26;;-1:-1:-1;17476:26:0;;-1:-1:-1;17476:44:0;;-1:-1:-1;17503:5:0;;17510:9;;17476:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17469:52;;;;:::i;:::-;17532:57;;-1:-1:-1;;;17532:57:0;;17567:9;17532:57;;;28015:25:1;17578:10:0;28056:18:1;;;28049:60;-1:-1:-1;;;;;17532:34:0;;;;;27988:18:1;;17532:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17600:56;17612:10;17624:5;17631:2;17635:9;17646;17600:11;:56::i;:::-;17205:459;;;:::o;31383:181::-;31471:12;31503:53;31528:7;31537:8;31547;31503:24;:53::i;29614:694::-;29950:8;13902:15;13890:8;:27;;13882:64;;;;-1:-1:-1;;;13882:64:0;;;;;;;:::i;:::-;29993:4:::1;;29998:1;29993:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29978:34:0::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;29971:63:0::1;;30035:4;30041;;30046:1;30041:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;30050:8;30060;30070:1;30073;30076;29971:107;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30104:4;;30109:1;30104:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;30089:52;::::0;-1:-1:-1;;;30089:52:0;;::::1;::::0;::::1;28015:25:1::0;;;-1:-1:-1;;;;;28076:32:1;;;28056:18;;;28049:60;30089:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;30089:52:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30167:4;;30172:1;30167:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;30152:28:0::1;;30181:4;30187:8;30152:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30255:2;-1:-1:-1::0;;;;;30212:88:0::1;30249:4;-1:-1:-1::0;;;;;30212:88:0::1;;30243:4;;30259:8;30269:12;30283:5;15633:9:::0;;15561:89;32079:237;32205:21;32251:57;32284:7;32293:8;32303:4;32251:32;:57::i;23775:598::-;24012:8;13902:15;13890:8;:27;;13882:64;;;;-1:-1:-1;;;13882:64:0;;;;;;;:::i;:::-;24033:92:::1;24095:10;24107:4;;24112:1;24107:7;;;;;;;:::i;24033:92::-;24151:4;;24156:1;24151:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;24136:58;::::0;-1:-1:-1;;;24136:58:0;;::::1;::::0;::::1;28015:25:1::0;;;24183:10:0::1;28056:18:1::0;;;28049:60;-1:-1:-1;;;;;24136:36:0;;;::::1;::::0;::::1;::::0;27988:18:1;;24136:58:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24220:4;;24225:1;24220:7;;;;;;;:::i;18784:286::-:0;18932:6;18927:136;18944:17;;;18927:136;;;18983:68;18995:10;19007:6;;19014:1;19007:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19018:2;;19021:1;19018:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19025:7;;19033:1;19025:10;;;;;;;:::i;:::-;;;;;;;19037;;19048:1;19037:13;;;;;;;:::i;:::-;;;;;;;18983:11;:68::i;:::-;18963:3;;;;:::i;:::-;;;;18927:136;;16868:329;16974:86;17034:10;17046:5;17053:6;16996:5;-1:-1:-1;;;;;16981:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16974:86;17071:54;;-1:-1:-1;;;17071:54:0;;;;;28015:25:1;;;17114:10:0;28056:18:1;;;28049:60;-1:-1:-1;;;;;17071:34:0;;;;;27988:18:1;;17071:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17136:53;17148:10;17160:5;17167:2;17171:6;17179:9;17136:11;:53::i;15379:174::-;15415:7;15458:20;;15439:15;:39;15435:86;;-1:-1:-1;15502:7:0;;-1:-1:-1;;;;;15502:7:0;;15379:174::o;15435:86::-;-1:-1:-1;15538:7:0;;-1:-1:-1;;;;;15538:7:0;;15379:174::o;19150:229::-;19261:38;;-1:-1:-1;;;19261:38:0;;-1:-1:-1;;;;;19261:26:0;;;;;:38;;19288:2;;19292:6;;19261:38;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;19340:2;-1:-1:-1;;;;;19315:56:0;19333:5;-1:-1:-1;;;;;19315:56:0;19328:3;19315:56;19344:6;19352:11;19365:5;15633:9;;15561:89;19365:5;19315:56;;;28951:25:1;;;29007:2;28992:18;;28985:34;;;;29035:18;;;29028:34;28939:2;28924:18;19315:56:0;;;;;;;;19150:229;;;;;:::o;9048:201::-;9159:12;;;9121;9159;;;;;;;;;-1:-1:-1;;;;;9138:7:0;;;9152:5;;9138:34;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9120:52;;;9191:7;9183:58;;;;-1:-1:-1;;;9183:58:0;;23661:2:1;9183:58:0;;;23643:21:1;23700:2;23680:18;;;23673:30;23739:34;23719:18;;;23712:62;-1:-1:-1;;;23790:18:1;;;23783:36;23836:19;;9183:58:0;23633:228:1;5423:521:0;5516:14;5562:1;5551:8;:12;5543:70;;;;-1:-1:-1;;;5543:70:0;;26726:2:1;5543:70:0;;;26708:21:1;26765:2;26745:18;;;26738:30;-1:-1:-1;;;;;;;;;;;26784:18:1;;;26777:62;-1:-1:-1;;;26855:18:1;;;26848:43;26908:19;;5543:70:0;26698:235:1;5543:70:0;5644:1;5632:9;:13;:31;;;;;5662:1;5649:10;:14;5632:31;5624:86;;;;-1:-1:-1;;;5624:86:0;;;;;;;:::i;:::-;5721:20;5744:17;:8;5757:3;5744:12;:17::i;:::-;5721:40;-1:-1:-1;5772:14:0;5789:31;5721:40;5809:10;5789:19;:31::i;:::-;5772:48;-1:-1:-1;5831:16:0;5850:40;5874:15;5850:19;:9;5864:4;5850:13;:19::i;:::-;:23;;:40::i;:::-;5831:59;-1:-1:-1;5913:23:0;5831:59;5913:9;:23;:::i;:::-;5901:35;5423:521;-1:-1:-1;;;;;;;5423:521:0:o;16259:231::-;16370:40;;-1:-1:-1;;;16370:40:0;;-1:-1:-1;;;;;16370:26:0;;;;;:40;;16397:4;;16403:6;;16370:40;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16453:2;-1:-1:-1;;;;;16426:56:0;16447:4;-1:-1:-1;;;;;16426:56:0;16440:5;-1:-1:-1;;;;;16426:56:0;;16457:6;16465:5;15633:9;;15561:89;16465:5;16426:56;;;28951:25:1;;;29007:2;28992:18;;28985:34;;;;29035:18;;29028:34;;;28939:2;28924:18;16426:56:0;28906:162:1;7217:534:0;7318:21;7375:1;7360:4;:11;:16;;7352:61;;;;-1:-1:-1;;;7352:61:0;;27500:2:1;7352:61:0;;;27482:21:1;;;27519:18;;;27512:30;27578:34;27558:18;;;27551:62;27630:18;;7352:61:0;27472:182:1;7352:61:0;7445:4;:11;7434:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7434:23:0;;7424:33;;7498:9;7468:7;7493:1;7476:7;:14;:18;;;;:::i;:::-;7468:27;;;;;;;;:::i;:::-;;;;;;:39;;;;;7523:6;7546:1;7532:4;:11;:15;;;;:::i;:::-;7523:24;;7518:226;7549:5;;7518:226;;7577:14;;7612:42;7624:7;7633:4;7638:5;7642:1;7638;:5;:::i;:::-;7633:11;;;;;;;;:::i;:::-;;;;;;;7646:4;7651:1;7646:7;;;;;;;;:::i;:::-;;;;;;;7612:11;:42::i;:::-;7576:78;;;;7686:46;7698:7;7706:1;7698:10;;;;;;;;:::i;:::-;;;;;;;7710:9;7721:10;7686:11;:46::i;:::-;7669:7;7677:5;7681:1;7677;:5;:::i;:::-;7669:14;;;;;;;;:::i;:::-;;;;;;:63;;;;;7561:183;;7556:3;;;;;:::i;:::-;;;;7518:226;;;;7217:534;;;;;:::o;6623:513::-;6724:21;6781:1;6766:4;:11;:16;;6758:61;;;;-1:-1:-1;;;6758:61:0;;27500:2:1;6758:61:0;;;27482:21:1;;;27519:18;;;27512:30;27578:34;27558:18;;;27551:62;27630:18;;6758:61:0;27472:182:1;6758:61:0;6851:4;:11;6840:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6840:23:0;;6830:33;;6887:8;6874:7;6882:1;6874:10;;;;;;;;:::i;:::-;;;;;;:21;;;;;6911:6;6906:223;6937:1;6923:4;:11;:15;;;;:::i;:::-;6919:1;:19;6906:223;;;6961:14;6977:15;6996:42;7008:7;7017:4;7022:1;7017:7;;;;;;;;:::i;:::-;;;;;;;7026:4;7031:1;7035;7031:5;;;;:::i;:::-;7026:11;;;;;;;;:::i;6996:42::-;6960:78;;;;7070:47;7083:7;7091:1;7083:10;;;;;;;;:::i;:::-;;;;;;;7095:9;7106:10;7070:12;:47::i;:::-;7053:7;7061:5;:1;7065;7061:5;:::i;:::-;7053:14;;;;;;;;:::i;:::-;;;;;;:64;;;;;6945:184;;6940:3;;;;;:::i;:::-;;;;6906:223;;3922:490;4011:12;4037:14;4053;4071:26;4082:6;4090;4071:10;:26::i;:::-;4246:32;;-1:-1:-1;;13892:2:1;13888:15;;;13884:24;;4246:32:0;;;13872:37:1;13943:15;;;13939:24;13925:12;;;13918:46;4036:61:0;;-1:-1:-1;4036:61:0;-1:-1:-1;4210:7:0;;13980:12:1;;4246:32:0;;;;;;;;;;;;4236:43;;;;;;4149:251;;;;;;;;-1:-1:-1;;;;;;14641:26:1;;14704:2;14700:15;;;;-1:-1:-1;;14696:53:1;14692:1;14683:11;;14676:74;14775:2;14766:12;;14759:28;14817:66;14812:2;14803:12;;14796:88;14909:2;14900:12;;14631:287;4149:251:0;;;;-1:-1:-1;;4149:251:0;;;;;;;;;4139:262;;4149:251;4139:262;;;;;3922:490;-1:-1:-1;;;;;;3922:490:0:o;22414:743::-;22521:6;22516:634;22547:1;22533:4;:11;:15;;;;:::i;:::-;22529:1;:19;22516:634;;;22571:13;22586:14;22605:4;22610:1;22605:7;;;;;;;;:::i;:::-;;;;;;;22614:4;22619:1;22623;22619:5;;;;:::i;:::-;22614:11;;;;;;;;:::i;:::-;;;;;;;22570:56;;;;22642:14;22661:44;22691:5;22698:6;22661:29;:44::i;:::-;-1:-1:-1;22641:64:0;-1:-1:-1;22720:14:0;22737:7;22745:5;:1;22749;22745:5;:::i;:::-;22737:14;;;;;;;;:::i;:::-;;;;;;;22720:31;;22767:15;22784;22812:6;-1:-1:-1;;;;;22803:15:0;:5;-1:-1:-1;;;;;22803:15:0;;:61;;22845:9;22861:1;22803:61;;;22827:1;22831:9;22803:61;22766:98;;;;22879:10;22910:1;22896:4;:11;:15;;;;:::i;:::-;22892:1;:19;:84;;22973:3;22892:84;;;22914:56;22941:7;22950:6;22958:4;22963:5;:1;22967;22963:5;:::i;:::-;22958:11;;;;;;;;:::i;:::-;;;;;;;22914:26;:56::i;:::-;22879:97;;23008:50;23035:7;23044:5;23051:6;23008:26;:50::i;:::-;-1:-1:-1;;;;;22991:73:0;;23083:10;23095;23107:2;23121:1;23111:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23111:12:0;;22991:147;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22555:595;;;;;;;22550:3;;;;;:::i;:::-;;;;22516:634;;12490:201;12614:68;;;-1:-1:-1;;;;;15389:15:1;;;12614:68:0;;;15371:34:1;15441:15;;15421:18;;;15414:43;15473:18;;;;15466:34;;;12614:68:0;;;;;;;;;;15306:18:1;;;;12614:68:0;;;;;;;;-1:-1:-1;;;;;12614:68:0;-1:-1:-1;;;12614:68:0;;;12588:95;;12607:5;;12588:18;:95::i;6065:476::-;6158:13;6204:1;6192:9;:13;6184:72;;;;-1:-1:-1;;;6184:72:0;;22122:2:1;6184:72:0;;;22104:21:1;22161:2;22141:18;;;22134:30;-1:-1:-1;;;;;;;;;;;22180:18:1;;;22173:62;-1:-1:-1;;;22251:18:1;;;22244:44;22305:19;;6184:72:0;22094:236:1;6184:72:0;6287:1;6275:9;:13;:31;;;;;6305:1;6292:10;:14;6275:31;6267:86;;;;-1:-1:-1;;;6267:86:0;;;;;;;:::i;:::-;6364:14;6381:34;6410:4;6381:24;:9;6395;6381:13;:24::i;:::-;:28;;:34::i;:::-;6364:51;-1:-1:-1;6426:16:0;6445:34;6475:3;6445:25;:10;6460:9;6445:14;:25::i;:34::-;6426:53;-1:-1:-1;6501:32:0;6531:1;6502:23;6426:53;6502:9;:23;:::i;6501:32::-;6490:43;6065:476;-1:-1:-1;;;;;;6065:476:0:o;4976:325::-;5058:12;5101:1;5091:7;:11;5083:63;;;;-1:-1:-1;;;5083:63:0;;25554:2:1;5083:63:0;;;25536:21:1;25593:2;25573:18;;;25566:30;-1:-1:-1;;;;;;;;;;;25612:18:1;;;25605:62;-1:-1:-1;;;25683:18:1;;;25676:37;25730:19;;5083:63:0;25526:229:1;5083:63:0;5176:1;5165:8;:12;:28;;;;;5192:1;5181:8;:12;5165:28;5157:83;;;;-1:-1:-1;;;5157:83:0;;;;;;;:::i;:::-;5285:8;5261:21;:7;5273:8;5261:11;:21::i;:::-;:32;;;;:::i;3152:142::-;3204:6;3231;;;:30;;-1:-1:-1;3260:1:0;3255;3246:5;3255:1;3260;3246:5;:::i;:::-;3242:9;-1:-1:-1;3241:15:0;;3242:9;3241:15;:::i;:::-;:20;3231:30;3223:63;;;;-1:-1:-1;;;3223:63:0;;21773:2:1;3223:63:0;;;21755:21:1;21812:2;21792:18;;;21785:30;-1:-1:-1;;;21831:18:1;;;21824:50;21891:18;;3223:63:0;21745:170:1;2879:128:0;2931:6;2973:1;2963:5;2967:1;2973;2963:5;:::i;:::-;2959:9;;;2958:16;;2950:49;;;;-1:-1:-1;;;2950:49:0;;22537:2:1;2950:49:0;;;22519:21:1;22576:2;22556:18;;;22549:30;-1:-1:-1;;;22595:18:1;;;22588:50;22655:18;;2950:49:0;22509:170:1;4470:393:0;4563:13;4578;4605:14;4624:26;4635:6;4643;4624:10;:26::i;:::-;4604:46;;;4662:13;4677;4712:32;4720:7;4729:6;4737;4712:7;:32::i;:::-;-1:-1:-1;;;;;4695:62:0;;:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4661:98;-1:-1:-1;;;;;4661:98:0;;;-1:-1:-1;;;;;4661:98:0;;;4803:6;-1:-1:-1;;;;;4793:16:0;:6;-1:-1:-1;;;;;4793:16:0;;:62;;4836:8;4846;4793:62;;;4813:8;4823;4793:62;4770:85;;;;-1:-1:-1;4470:393:0;-1:-1:-1;;;;;;;4470:393:0:o;3477:353::-;3552:14;3568;3613:6;-1:-1:-1;;;;;3603:16:0;:6;-1:-1:-1;;;;;3603:16:0;;;3595:68;;;;-1:-1:-1;;;3595:68:0;;21007:2:1;3595:68:0;;;20989:21:1;21046:2;21026:18;;;21019:30;21085:34;21065:18;;;21058:62;-1:-1:-1;;;21136:18:1;;;21129:37;21183:19;;3595:68:0;20979:229:1;3595:68:0;3702:6;-1:-1:-1;;;;;3693:15:0;:6;-1:-1:-1;;;;;3693:15:0;;:53;;3731:6;3739;3693:53;;;3712:6;3720;3693:53;3674:72;;-1:-1:-1;3674:72:0;-1:-1:-1;;;;;;3765:20:0;;3757:65;;;;-1:-1:-1;;;3757:65:0;;24423:2:1;3757:65:0;;;24405:21:1;;;24442:18;;;24435:30;24501:34;24481:18;;;24474:62;24553:18;;3757:65:0;24395:182:1;3757:65:0;3477:353;;;;;:::o;13049:598::-;13137:27;13145:5;-1:-1:-1;;;;;13137:25:0;;:27::i;:::-;13129:71;;;;-1:-1:-1;;;13129:71:0;;27140:2:1;13129:71:0;;;27122:21:1;27179:2;27159:18;;;27152:30;27218:33;27198:18;;;27191:61;27269:18;;13129:71:0;27112:181:1;13129:71:0;13274:12;13288:23;13323:5;-1:-1:-1;;;;;13315:19:0;13335:4;13315:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13273:67;;;;13359:7;13351:52;;;;-1:-1:-1;;;13351:52:0;;23300:2:1;13351:52:0;;;23282:21:1;;;23319:18;;;23312:30;23378:34;23358:18;;;23351:62;23430:18;;13351:52:0;23272:182:1;13351:52:0;13420:17;;:21;13416:224;;13562:10;13551:30;;;;;;;;;;;;:::i;:::-;13543:85;;;;-1:-1:-1;;;13543:85:0;;26315:2:1;13543:85:0;;;26297:21:1;26354:2;26334:18;;;26327:30;26393:34;26373:18;;;26366:62;-1:-1:-1;;;26444:18:1;;;26437:40;26494:19;;13543:85:0;26287:232:1;3015:129:0;3067:6;3109:1;3099:5;3103:1;3109;3099:5;:::i;:::-;3095:9;;;3094:16;;3086:50;;;;-1:-1:-1;;;3086:50:0;;20246:2:1;3086:50:0;;;20228:21:1;20285:2;20265:18;;;20258:30;-1:-1:-1;;;20304:18:1;;;20297:51;20365:18;;3086:50:0;20218:171:1;11869:374:0;11929:4;12152:20;;11995:66;12192:15;;;;;:42;;-1:-1:-1;12211:23:0;;;12184:51;-1:-1:-1;;11869:374:0:o;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;153:367::-;216:8;226:6;280:3;273:4;265:6;261:17;257:27;247:2;;298:1;295;288:12;247:2;-1:-1:-1;321:20:1;;364:18;353:30;;350:2;;;396:1;393;386:12;350:2;433:4;425:6;421:17;409:29;;493:3;486:4;476:6;473:1;469:14;461:6;457:27;453:38;450:47;447:2;;;510:1;507;500:12;525:188;604:13;;-1:-1:-1;;;;;646:42:1;;636:53;;626:2;;703:1;700;693:12;718:156;784:20;;844:4;833:16;;823:27;;813:2;;864:1;861;854:12;879:247;938:6;991:2;979:9;970:7;966:23;962:32;959:2;;;1007:1;1004;997:12;959:2;1046:9;1033:23;1065:31;1090:5;1065:31;:::i;:::-;1115:5;949:177;-1:-1:-1;;;949:177:1:o;1131:251::-;1201:6;1254:2;1242:9;1233:7;1229:23;1225:32;1222:2;;;1270:1;1267;1260:12;1222:2;1302:9;1296:16;1321:31;1346:5;1321:31;:::i;1387:388::-;1455:6;1463;1516:2;1504:9;1495:7;1491:23;1487:32;1484:2;;;1532:1;1529;1522:12;1484:2;1571:9;1558:23;1590:31;1615:5;1590:31;:::i;:::-;1640:5;-1:-1:-1;1697:2:1;1682:18;;1669:32;1710:33;1669:32;1710:33;:::i;:::-;1762:7;1752:17;;;1474:301;;;;;:::o;1780:945::-;1909:6;1917;1925;1933;1941;1949;1957;1965;1973;2026:3;2014:9;2005:7;2001:23;1997:33;1994:2;;;2043:1;2040;2033:12;1994:2;2082:9;2069:23;2101:31;2126:5;2101:31;:::i;:::-;2151:5;-1:-1:-1;2208:2:1;2193:18;;2180:32;2221:33;2180:32;2221:33;:::i;:::-;2273:7;-1:-1:-1;2332:2:1;2317:18;;2304:32;2345:33;2304:32;2345:33;:::i;:::-;2397:7;-1:-1:-1;2451:2:1;2436:18;;2423:32;;-1:-1:-1;2502:3:1;2487:19;;2474:33;;-1:-1:-1;2526:37:1;2558:3;2543:19;;2526:37;:::i;:::-;2516:47;;2610:3;2599:9;2595:19;2582:33;2572:43;;2662:3;2651:9;2647:19;2634:33;2624:43;;2714:3;2703:9;2699:19;2686:33;2676:43;;1984:741;;;;;;;;;;;:::o;2730:456::-;2807:6;2815;2823;2876:2;2864:9;2855:7;2851:23;2847:32;2844:2;;;2892:1;2889;2882:12;2844:2;2931:9;2918:23;2950:31;2975:5;2950:31;:::i;:::-;3000:5;-1:-1:-1;3057:2:1;3042:18;;3029:32;3070:33;3029:32;3070:33;:::i;:::-;2834:352;;3122:7;;-1:-1:-1;;;3176:2:1;3161:18;;;;3148:32;;2834:352::o;3191:525::-;3277:6;3285;3293;3301;3354:3;3342:9;3333:7;3329:23;3325:33;3322:2;;;3371:1;3368;3361:12;3322:2;3410:9;3397:23;3429:31;3454:5;3429:31;:::i;:::-;3479:5;-1:-1:-1;3536:2:1;3521:18;;3508:32;3549:33;3508:32;3549:33;:::i;:::-;3312:404;;3601:7;;-1:-1:-1;;;;3655:2:1;3640:18;;3627:32;;3706:2;3691:18;3678:32;;3312:404::o;3721:315::-;3789:6;3797;3850:2;3838:9;3829:7;3825:23;3821:32;3818:2;;;3866:1;3863;3856:12;3818:2;3905:9;3892:23;3924:31;3949:5;3924:31;:::i;:::-;3974:5;4026:2;4011:18;;;;3998:32;;-1:-1:-1;;;3808:228:1:o;4041:456::-;4118:6;4126;4134;4187:2;4175:9;4166:7;4162:23;4158:32;4155:2;;;4203:1;4200;4193:12;4155:2;4242:9;4229:23;4261:31;4286:5;4261:31;:::i;:::-;4311:5;-1:-1:-1;4363:2:1;4348:18;;4335:32;;-1:-1:-1;4419:2:1;4404:18;;4391:32;4432:33;4391:32;4432:33;:::i;:::-;4484:7;4474:17;;;4145:352;;;;;:::o;4502:1200::-;4667:6;4675;4683;4691;4699;4707;4715;4723;4731;4739;4747:7;4801:3;4789:9;4780:7;4776:23;4772:33;4769:2;;;4818:1;4815;4808:12;4769:2;4857:9;4844:23;4876:31;4901:5;4876:31;:::i;:::-;4926:5;-1:-1:-1;4978:2:1;4963:18;;4950:32;;-1:-1:-1;5029:2:1;5014:18;;5001:32;;-1:-1:-1;5084:2:1;5069:18;;5056:32;5111:18;5100:30;;5097:2;;;5143:1;5140;5133:12;5097:2;5182:70;5244:7;5235:6;5224:9;5220:22;5182:70;:::i;:::-;5271:8;;-1:-1:-1;5156:96:1;-1:-1:-1;;5358:3:1;5343:19;;5330:33;5372;5330;5372;:::i;:::-;5424:7;-1:-1:-1;5478:3:1;5463:19;;5450:33;;-1:-1:-1;5502:37:1;5534:3;5519:19;;5502:37;:::i;:::-;5492:47;;5586:3;5575:9;5571:19;5558:33;5548:43;;5638:3;5627:9;5623:19;5610:33;5600:43;;5691:3;5680:9;5676:19;5663:33;5652:44;;4759:943;;;;;;;;;;;;;;:::o;5707:1404::-;5901:6;5909;5917;5925;5933;5941;5949;5957;6010:3;5998:9;5989:7;5985:23;5981:33;5978:2;;;6027:1;6024;6017:12;5978:2;6067:9;6054:23;6096:18;6137:2;6129:6;6126:14;6123:2;;;6153:1;6150;6143:12;6123:2;6192:70;6254:7;6245:6;6234:9;6230:22;6192:70;:::i;:::-;6281:8;;-1:-1:-1;6166:96:1;-1:-1:-1;6369:2:1;6354:18;;6341:32;;-1:-1:-1;6385:16:1;;;6382:2;;;6414:1;6411;6404:12;6382:2;6453:72;6517:7;6506:8;6495:9;6491:24;6453:72;:::i;:::-;6544:8;;-1:-1:-1;6427:98:1;-1:-1:-1;6632:2:1;6617:18;;6604:32;;-1:-1:-1;6648:16:1;;;6645:2;;;6677:1;6674;6667:12;6645:2;6716:72;6780:7;6769:8;6758:9;6754:24;6716:72;:::i;:::-;6807:8;;-1:-1:-1;6690:98:1;-1:-1:-1;6895:2:1;6880:18;;6867:32;;-1:-1:-1;6911:16:1;;;6908:2;;;6940:1;6937;6930:12;6908:2;;6979:72;7043:7;7032:8;7021:9;7017:24;6979:72;:::i;:::-;5968:1143;;;;-1:-1:-1;5968:1143:1;;-1:-1:-1;5968:1143:1;;;;;;7070:8;-1:-1:-1;;;5968:1143:1:o;7116:1720::-;7346:6;7354;7362;7370;7378;7386;7394;7402;7410;7418;7471:3;7459:9;7450:7;7446:23;7442:33;7439:2;;;7488:1;7485;7478:12;7439:2;7528:9;7515:23;7557:18;7598:2;7590:6;7587:14;7584:2;;;7614:1;7611;7604:12;7584:2;7653:70;7715:7;7706:6;7695:9;7691:22;7653:70;:::i;:::-;7742:8;;-1:-1:-1;7627:96:1;-1:-1:-1;7830:2:1;7815:18;;7802:32;;-1:-1:-1;7846:16:1;;;7843:2;;;7875:1;7872;7865:12;7843:2;7914:72;7978:7;7967:8;7956:9;7952:24;7914:72;:::i;:::-;8005:8;;-1:-1:-1;7888:98:1;-1:-1:-1;8093:2:1;8078:18;;8065:32;;-1:-1:-1;8109:16:1;;;8106:2;;;8138:1;8135;8128:12;8106:2;8177:72;8241:7;8230:8;8219:9;8215:24;8177:72;:::i;:::-;8268:8;;-1:-1:-1;8151:98:1;-1:-1:-1;8356:2:1;8341:18;;8328:32;;-1:-1:-1;8372:16:1;;;8369:2;;;8401:1;8398;8391:12;8369:2;8440:72;8504:7;8493:8;8482:9;8478:24;8440:72;:::i;:::-;8531:8;;-1:-1:-1;8414:98:1;-1:-1:-1;8619:3:1;8604:19;;8591:33;;-1:-1:-1;8636:16:1;;;8633:2;;;8665:1;8662;8655:12;8633:2;;8704:72;8768:7;8757:8;8746:9;8742:24;8704:72;:::i;:::-;8678:98;;8795:8;8785:18;;;8822:8;8812:18;;;7429:1407;;;;;;;;;;;;;:::o;8841:277::-;8908:6;8961:2;8949:9;8940:7;8936:23;8932:32;8929:2;;;8977:1;8974;8967:12;8929:2;9009:9;9003:16;9062:5;9055:13;9048:21;9041:5;9038:32;9028:2;;9084:1;9081;9074:12;9123:594;9218:6;9226;9234;9242;9250;9303:3;9291:9;9282:7;9278:23;9274:33;9271:2;;;9320:1;9317;9310:12;9271:2;9356:9;9343:23;9333:33;;9416:2;9405:9;9401:18;9388:32;9429:31;9454:5;9429:31;:::i;:::-;9479:5;-1:-1:-1;9536:2:1;9521:18;;9508:32;9549:33;9508:32;9549:33;:::i;:::-;9261:456;;;;-1:-1:-1;9601:7:1;;9655:2;9640:18;;9627:32;;-1:-1:-1;9706:3:1;9691:19;9678:33;;9261:456;-1:-1:-1;;9261:456:1:o;9722:916::-;9862:6;9870;9878;9886;9894;9902;9910;9918;9971:3;9959:9;9950:7;9946:23;9942:33;9939:2;;;9988:1;9985;9978:12;9939:2;10024:9;10011:23;10001:33;;10081:2;10070:9;10066:18;10053:32;10043:42;;10132:2;10121:9;10117:18;10104:32;10094:42;;10187:2;10176:9;10172:18;10159:32;10214:18;10206:6;10203:30;10200:2;;;10246:1;10243;10236:12;10200:2;10285:70;10347:7;10338:6;10327:9;10323:22;10285:70;:::i;:::-;10374:8;;-1:-1:-1;10259:96:1;-1:-1:-1;;10459:3:1;10444:19;;10431:33;10473:31;10431:33;10473:31;:::i;:::-;9929:709;;;;-1:-1:-1;9929:709:1;;;;;;10523:5;;-1:-1:-1;;;10575:3:1;10560:19;;10547:33;;10627:3;10612:19;10599:33;;9929:709::o;10643:450::-;10730:6;10738;10746;10799:2;10787:9;10778:7;10774:23;10770:32;10767:2;;;10815:1;10812;10805:12;10767:2;10838:40;10868:9;10838:40;:::i;:::-;10828:50;;10897:49;10942:2;10931:9;10927:18;10897:49;:::i;:::-;10887:59;;10989:2;10978:9;10974:18;10968:25;11033:10;11026:5;11022:22;11015:5;11012:33;11002:2;;11059:1;11056;11049:12;11098:184;11168:6;11221:2;11209:9;11200:7;11196:23;11192:32;11189:2;;;11237:1;11234;11227:12;11189:2;-1:-1:-1;11260:16:1;;11179:103;-1:-1:-1;11179:103:1:o;11287:1200::-;11380:6;11388;11441:2;11429:9;11420:7;11416:23;11412:32;11409:2;;;11457:1;11454;11447:12;11409:2;11493:9;11480:23;11470:33;;11522:2;11575;11564:9;11560:18;11547:32;11598:18;11639:2;11631:6;11628:14;11625:2;;;11655:1;11652;11645:12;11625:2;11693:6;11682:9;11678:22;11668:32;;11738:7;11731:4;11727:2;11723:13;11719:27;11709:2;;11760:1;11757;11750:12;11709:2;11796;11783:16;11818:2;11814;11811:10;11808:2;;;11824:18;;:::i;:::-;11870:2;11867:1;11863:10;11902:2;11896:9;11965:2;11961:7;11956:2;11952;11948:11;11944:25;11936:6;11932:38;12020:6;12008:10;12005:22;12000:2;11988:10;11985:18;11982:46;11979:2;;;12031:18;;:::i;:::-;12067:2;12060:22;12117:18;;;12151:15;;;;-1:-1:-1;12186:11:1;;;12216;;;12212:20;;12209:33;-1:-1:-1;12206:2:1;;;12255:1;12252;12245:12;12206:2;12277:1;12268:10;;12287:169;12301:2;12298:1;12295:9;12287:169;;;12358:23;12377:3;12358:23;:::i;:::-;12346:36;;12319:1;12312:9;;;;;12402:12;;;;12434;;12287:169;;;12291:3;12475:6;12465:16;;;;;;;;11399:1088;;;;;:::o;12492:847::-;12623:6;12631;12639;12647;12655;12663;12671;12724:3;12712:9;12703:7;12699:23;12695:33;12692:2;;;12741:1;12738;12731:12;12692:2;12777:9;12764:23;12754:33;;12834:2;12823:9;12819:18;12806:32;12796:42;;12889:2;12878:9;12874:18;12861:32;12916:18;12908:6;12905:30;12902:2;;;12948:1;12945;12938:12;12902:2;12987:70;13049:7;13040:6;13029:9;13025:22;12987:70;:::i;:::-;13076:8;;-1:-1:-1;12961:96:1;-1:-1:-1;;13161:2:1;13146:18;;13133:32;13174:31;13133:32;13174:31;:::i;:::-;12682:657;;;;-1:-1:-1;12682:657:1;;;;13224:5;13276:3;13261:19;;13248:33;;-1:-1:-1;13328:3:1;13313:19;;;13300:33;;12682:657;-1:-1:-1;;12682:657:1:o;13344:316::-;13421:6;13429;13437;13490:2;13478:9;13469:7;13465:23;13461:32;13458:2;;;13506:1;13503;13496:12;13458:2;-1:-1:-1;;13529:23:1;;;13599:2;13584:18;;13571:32;;-1:-1:-1;13650:2:1;13635:18;;;13622:32;;13448:212;-1:-1:-1;13448:212:1:o;14003:274::-;14132:3;14170:6;14164:13;14186:53;14232:6;14227:3;14220:4;14212:6;14208:17;14186:53;:::i;:::-;14255:16;;;;;14140:137;-1:-1:-1;;14140:137:1:o;15511:670::-;-1:-1:-1;;;;;15878:15:1;;;15860:34;;15930:15;;;;15925:2;15910:18;;15903:43;15977:2;15962:18;;15955:34;;;;16020:2;16005:18;;15998:34;;;;16081:4;16069:17;16063:3;16048:19;;16041:46;15840:3;16103:19;;16096:35;16162:3;16147:19;;16140:35;;;;15809:3;15794:19;;15776:405::o;16186:274::-;-1:-1:-1;;;;;16378:32:1;;;;16360:51;;16442:2;16427:18;;16420:34;16348:2;16333:18;;16315:145::o;16465:375::-;-1:-1:-1;;;;;16723:15:1;;;16705:34;;16770:2;16755:18;;16748:34;;;;16818:15;;;16813:2;16798:18;;16791:43;16655:2;16640:18;;16622:218::o;16845:1001::-;17157:3;17170:22;;;17142:19;;17227:22;;;17109:4;17307:6;17280:3;17265:19;;17109:4;17341:304;17355:6;17352:1;17349:13;17341:304;;;17430:6;17417:20;17450:31;17475:5;17450:31;:::i;:::-;-1:-1:-1;;;;;17506:31:1;17494:44;;17561:4;17620:15;;;;17585:12;;;;17534:1;17370:9;17341:304;;;-1:-1:-1;17696:4:1;17681:20;;17674:36;;;;-1:-1:-1;;17741:2:1;17726:18;;17719:34;;;;17784:2;17769:18;;17762:34;;;;17827:3;17812:19;;;17805:35;17662:3;17118:728;-1:-1:-1;;17118:728:1:o;17851:948::-;18153:3;18166:22;;;18237:13;;18138:19;;;18259:22;;;18105:4;;18335;;18312:3;18297:19;;;18362:15;;;18105:4;18405:195;18419:6;18416:1;18413:13;18405:195;;;18484:13;;-1:-1:-1;;;;;18480:39:1;18468:52;;18540:12;;;;18575:15;;;;18516:1;18434:9;18405:195;;;-1:-1:-1;;;18636:18:1;;;18629:34;;;;-1:-1:-1;18694:2:1;18679:18;;18672:34;;;;18737:2;18722:18;;18715:34;;;;18780:3;18765:19;;;18758:35;18617:3;18114:685;-1:-1:-1;18114:685:1:o;18804:632::-;18975:2;19027:21;;;19097:13;;19000:18;;;19119:22;;;18946:4;;18975:2;19198:15;;;;19172:2;19157:18;;;18946:4;19241:169;19255:6;19252:1;19249:13;19241:169;;;19316:13;;19304:26;;19385:15;;;;19350:12;;;;19277:1;19270:9;19241:169;;;-1:-1:-1;19427:3:1;;18955:481;-1:-1:-1;;;;;;18955:481:1:o;19633:406::-;19835:2;19817:21;;;19874:2;19854:18;;;19847:30;-1:-1:-1;;;;;;;;;;;19908:2:1;19893:18;;19886:62;-1:-1:-1;;;19979:2:1;19964:18;;19957:40;20029:3;20014:19;;19807:232::o;20394:406::-;20596:2;20578:21;;;20635:2;20615:18;;;20608:30;20674:34;20669:2;20654:18;;20647:62;-1:-1:-1;;;20740:2:1;20725:18;;20718:40;20790:3;20775:19;;20568:232::o;23866:350::-;24068:2;24050:21;;;24107:2;24087:18;;;24080:30;24146:28;24141:2;24126:18;;24119:56;24207:2;24192:18;;24040:176::o;25760:348::-;25962:2;25944:21;;;26001:2;25981:18;;;25974:30;26040:26;26035:2;26020:18;;26013:54;26099:2;26084:18;;25934:174::o;28120:624::-;28351:6;28340:9;28333:25;28394:6;28389:2;28378:9;28374:18;28367:34;28466:1;28462;28457:3;28453:11;28449:19;28441:6;28437:32;28432:2;28421:9;28417:18;28410:60;28506:3;28501:2;28490:9;28486:18;28479:31;28314:4;28539:6;28533:13;28583:6;28577:3;28566:9;28562:19;28555:35;28599:67;28659:6;28653:3;28642:9;28638:19;28633:2;28625:6;28621:15;28599:67;:::i;:::-;28727:2;28706:15;-1:-1:-1;;28702:29:1;28687:45;;;;28734:3;28683:55;;28323:421;-1:-1:-1;;;;;28323:421:1:o;29073:128::-;29113:3;29144:1;29140:6;29137:1;29134:13;29131:2;;;29150:18;;:::i;:::-;-1:-1:-1;29186:9:1;;29121:80::o;29206:217::-;29246:1;29272;29262:2;;29316:10;29311:3;29307:20;29304:1;29297:31;29351:4;29348:1;29341:15;29379:4;29376:1;29369:15;29262:2;-1:-1:-1;29408:9:1;;29252:171::o;29428:168::-;29468:7;29534:1;29530;29526:6;29522:14;29519:1;29516:21;29511:1;29504:9;29497:17;29493:45;29490:2;;;29541:18;;:::i;:::-;-1:-1:-1;29581:9:1;;29480:116::o;29601:125::-;29641:4;29669:1;29666;29663:8;29660:2;;;29674:18;;:::i;:::-;-1:-1:-1;29711:9:1;;29650:76::o;29731:258::-;29803:1;29813:113;29827:6;29824:1;29821:13;29813:113;;;29903:11;;;29897:18;29884:11;;;29877:39;29849:2;29842:10;29813:113;;;29944:6;29941:1;29938:13;29935:2;;;-1:-1:-1;;29979:1:1;29961:16;;29954:27;29784:205::o;29994:136::-;30033:3;30061:5;30051:2;;30070:18;;:::i;:::-;-1:-1:-1;;;30106:18:1;;30041:89::o;30135:135::-;30174:3;-1:-1:-1;;30195:17:1;;30192:2;;;30215:18;;:::i;:::-;-1:-1:-1;30262:1:1;30251:13;;30182:88::o;30275:127::-;30336:10;30331:3;30327:20;30324:1;30317:31;30367:4;30364:1;30357:15;30391:4;30388:1;30381:15;30407:127;30468:10;30463:3;30459:20;30456:1;30449:31;30499:4;30496:1;30489:15;30523:4;30520:1;30513:15;30539:127;30600:10;30595:3;30591:20;30588:1;30581:31;30631:4;30628:1;30621:15;30655:4;30652:1;30645:15;30671:127;30732:10;30727:3;30723:20;30720:1;30713:31;30763:4;30760:1;30753:15;30787:4;30784:1;30777:15;30803:131;-1:-1:-1;;;;;30878:31:1;;30868:42;;30858:2;;30924:1;30921;30914:12;30858:2;30848:86;:::o

Swarm Source

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