Contract 0x60ae616a2155ee3d9a68541ba4544862310933d4 13

Contract Overview

Trader Joe: Router
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xdb995c168be0e0fa15d143fc3890881a8d736ebc73dd368b10ea1b93a6642646Swap Exact AVAX ...101059152022-01-27 2:31:4614 secs ago0xf8dcde1c4641b179dc9cad3445ba285f8627805c IN  Trader Joe: Router3 AVAX0.00507729665927.54355696
0x757769b0bd098aa37b44203878a1b7b8832fc0450053cf87ba1faffb0c373e9cSwap Exact Token...101059122022-01-27 2:31:4218 secs ago0xba0d8d4bb35bb8e98b6ee8732ddfbc1455127ab8 IN  Trader Joe: Router0 AVAX0.0030202727.5
0x91b2140a81fee68fcddb8672e15a5cd3dfafe515ea24fbc54d3c7ff5e0ec9890Swap Exact Token...101059102022-01-27 2:31:4020 secs ago0x797b00ff517ed9b755e8039ee092ba9d1890b9ae IN  Trader Joe: Router0 AVAX0.003142725 25
0x8e08dca94cd1a5cc2c6ab773bb984c9ae266543b7cdc07ccf533647d8657a007Swap Exact Token...101059102022-01-27 2:31:4020 secs ago0xa88235065d97a56719ea7d4fe72f8f953c984c0b IN  Trader Joe: Router0 AVAX0.00358 25
0xa704a3dc5ec44987f84f8c2163a9fbcb602aaa9470ee872a8385908004bb9b63Swap Tokens For ...101059102022-01-27 2:31:4020 secs ago0xead52e95cb3dd35585aca6e45db744c608492646 IN  Trader Joe: Router0 AVAX0.0025512525
0x1bff217abf79cb2579bd21e45888f1d836a87d64ce3c6c9af9b885d07737840fSwap Exact Token...101059092022-01-27 2:31:3525 secs ago0x9f447fdd8a95fb42416ad1aaad9b214de20fb990 IN  Trader Joe: Router0 AVAX0.00432416426
0xc4541c2334d599b39e60e9018cb8498a578619f5b4b3a14a2b6e04548e032a0cSwap Exact AVAX ...101059082022-01-27 2:31:3426 secs ago0x0b9f6643872b67a62fae6ccbf4b8e0733f3a728f IN  Trader Joe: Router1.75 AVAX0.00366592525
0xedb74f67e9a639ef26bbda42a08f18fd6ce97555c8607c3f66353901bd997a19Swap Exact Token...101059072022-01-27 2:31:3327 secs ago0x20c1b3b7a26f4a1855121c362e4d8f83f4fabe29 IN  Trader Joe: Router0 AVAX0.005308066433 25.214910403
0x4e1f10f4ac6934b20ef2c6b21cb724e9df653721ff6ecc5257e4768903119daeSwap Exact Token...101059052022-01-27 2:31:3129 secs ago0xf34b73f56a7f8ef5d3eadc6ebf75f80fd2926d92 IN  Trader Joe: Router0 AVAX0.00360555 25
0x96d16adfa79e9cd8cede2209f754d2d5a2f235ce57f72f307979e7c22b6bc165Swap Exact Token...101059052022-01-27 2:31:3129 secs ago0xf3efe3d0f8fe6f5dc0ab40d0264f4cf43f57cc0c IN  Trader Joe: Router0 AVAX0.0037389 25
0x2a6c69856958dd5f8fa337cafff7a13b182dc750c2b6f7e0c3d25da275514f5fSwap AVAX For Ex...101059042022-01-27 2:31:2931 secs ago0x7bfa568f8e7072bcb1f3e39031b8557202421d39 IN  Trader Joe: Router0.145387625687274 AVAX0.003341825 25
0x42bc9c1280a4a7b30cb2956a43731179dbcc7226f7ee8cd6c351cfb213c75f28Swap Exact Token...101059042022-01-27 2:31:2931 secs ago0x5ab124f18056113d0884251d45544e2188af5fae IN  Trader Joe: Router0 AVAX0.0045104 25
0xeff7f598e865ba122356a4b630182cb6f5eb2d3133ca0eda9b2b9540a609efe0Swap AVAX For Ex...101059032022-01-27 2:31:2733 secs ago0x28569d7a6388976f23e6239bc6e27780516b4f9a IN  Trader Joe: Router1.382421283802906 AVAX0.005274525 25
0x98900bbafbc548d9b727eb3c7d2ceb387b80cefa9c0fa35180da2267e561ebd6Swap Exact Token...101059022022-01-27 2:31:2535 secs ago0x683297aee4be3a09850cc071aa41b6516a2bcd71 IN  Trader Joe: Router0 AVAX0.003629575 25
0x62afc692da4dc5cfb9c6b25ea298eb56662637a8881f3dca448b7a0b50a621e7Swap Exact AVAX ...101059022022-01-27 2:31:2535 secs ago0x6f61733cab4032216128654b2fc85c27ddabf132 IN  Trader Joe: Router5.736563565 AVAX0.0035597 25
0xa3866f10e2b2db290bd3e31291c8ffaecae9acd3b53c32ca2b1157f41e1dcc74Swap Exact AVAX ...101059022022-01-27 2:31:2535 secs ago0x02bf656bc7551197d8cec36ebcbd0fc568339835 IN  Trader Joe: Router4.661783510660299 AVAX0.003417725 25
0xce2e1977c7f2f5e17e3a7c55f3f6848e533b14e65f75f4f3ddc230db65c14c78Swap Exact Token...101059022022-01-27 2:31:2535 secs ago0x2cbbc048d158d60bc93c2cddc8b4ec084851bbbb IN  Trader Joe: Router0 AVAX0.003609375 25
0x9b9ed20bc66eeadb557bc384e523eb4c9228873b908a58c757ca0da5c43e45d8Swap Exact Token...101059022022-01-27 2:31:2535 secs ago0x2235cd349113837ffc6d3e41ad8f64a84f3d20e5 IN  Trader Joe: Router0 AVAX0.0045152 25
0xa82315c63c1448b55dcf229bb733bb37cfe5a79f30bff9d4e1b9ff3e356eb20fSwap AVAX For Ex...101059022022-01-27 2:31:2535 secs ago0x697c7cf5bd9605c7a2d53f4e52ef96ca082e8ecf IN  Trader Joe: Router38.246458166642372 AVAX0.003437375 25
0xcf601580b934f673083c6c0696cfe3715c529849c79e29f903268b3926a8b6d2Swap Exact Token...101059022022-01-27 2:31:2535 secs ago0xcd107c6e6ee8a00642402a96b5a20f09c8829157 IN  Trader Joe: Router0 AVAX0.0035603730
0xda32001c44b2473ed4bb52ce47ea88ba10969fd7a988175f1298c3008c0d1b29Swap Exact Token...101059022022-01-27 2:31:2535 secs ago0xd2b078163be5abb465b88b9eb5562d9814e2aa67 IN  Trader Joe: Router0 AVAX0.00329667008530.042649758
0x3abe2d9c483b52918e7b905725f40f31478b44482b0d8904b7315563a091359fSwap Exact Token...101059012022-01-27 2:31:2139 secs ago0x35d1223cb4bd658c03a80a92c38bcdc60a965f5e IN  Trader Joe: Router0 AVAX0.007366525 25
0xae8cfdc3909fdc045309de9d2da0ffe972be1f45a8e180681225599899fc5bf2Swap Tokens For ...101059012022-01-27 2:31:2139 secs ago0x8291b929c43809045db84a205cb93e9300dc4eff IN  Trader Joe: Router0 AVAX0.007496725
0xab8a92f59176ca31cc4f0f4083b238d8931c8560d5eda6c3c0ef3e31e2c4bebbSwap Exact Token...101059012022-01-27 2:31:2139 secs ago0x88f91f639d183965748e7f8c3b8bc23f20b60104 IN  Trader Joe: Router0 AVAX0.003572475 25
0x8247334a24873d0fc5936fa724883d354da7e68109bf2a4afeda9d2728a5c291Swap AVAX For Ex...101059012022-01-27 2:31:2139 secs ago0xcb4f9a94363d688e11f5f3d87814aa492092ff97 IN  Trader Joe: Router0.335390115986032 AVAX0.003864875 25
[ Download CSV Export 

OVERVIEW

One-stop-shop decentralized trading on Avalanche.

Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x2870a4b4e5abb32499dfd1994f3725503ca01e13ddc051e809021695bd5150f2101059102022-01-27 2:31:4020 secs ago Trader Joe: Router 0x6c1c0319d8ddcb0ffe1a68c5b3829fd361587db40.152159452866351352 AVAX
0x2870a4b4e5abb32499dfd1994f3725503ca01e13ddc051e809021695bd5150f2101059102022-01-27 2:31:4020 secs ago Wrapped AVAX Trader Joe: Router0.152159452866351352 AVAX
0x8e08dca94cd1a5cc2c6ab773bb984c9ae266543b7cdc07ccf533647d8657a007101059102022-01-27 2:31:4020 secs ago Trader Joe: Router0xa88235065d97a56719ea7d4fe72f8f953c984c0b6.382512590713683363 AVAX
0x8e08dca94cd1a5cc2c6ab773bb984c9ae266543b7cdc07ccf533647d8657a007101059102022-01-27 2:31:4020 secs ago Wrapped AVAX Trader Joe: Router6.382512590713683363 AVAX
0xc4541c2334d599b39e60e9018cb8498a578619f5b4b3a14a2b6e04548e032a0c101059082022-01-27 2:31:3426 secs ago Trader Joe: Router Wrapped AVAX1.75 AVAX
0x4e1f10f4ac6934b20ef2c6b21cb724e9df653721ff6ecc5257e4768903119dae101059052022-01-27 2:31:3129 secs ago Trader Joe: Router0xf34b73f56a7f8ef5d3eadc6ebf75f80fd2926d920.031793409134438457 AVAX
0x4e1f10f4ac6934b20ef2c6b21cb724e9df653721ff6ecc5257e4768903119dae101059052022-01-27 2:31:3129 secs ago Wrapped AVAX Trader Joe: Router0.031793409134438457 AVAX
0x96d16adfa79e9cd8cede2209f754d2d5a2f235ce57f72f307979e7c22b6bc165101059052022-01-27 2:31:3129 secs ago Trader Joe: Router0xf3efe3d0f8fe6f5dc0ab40d0264f4cf43f57cc0c0.804838719707960631 AVAX
0x96d16adfa79e9cd8cede2209f754d2d5a2f235ce57f72f307979e7c22b6bc165101059052022-01-27 2:31:3129 secs ago Wrapped AVAX Trader Joe: Router0.804838719707960631 AVAX
0x2a6c69856958dd5f8fa337cafff7a13b182dc750c2b6f7e0c3d25da275514f5f101059042022-01-27 2:31:2931 secs ago Trader Joe: Router0x7bfa568f8e7072bcb1f3e39031b8557202421d390.000895891335918719 AVAX
0x2a6c69856958dd5f8fa337cafff7a13b182dc750c2b6f7e0c3d25da275514f5f101059042022-01-27 2:31:2931 secs ago Trader Joe: Router Wrapped AVAX0.144491734351355791 AVAX
0xeff7f598e865ba122356a4b630182cb6f5eb2d3133ca0eda9b2b9540a609efe0101059032022-01-27 2:31:2733 secs ago Trader Joe: Router0x28569d7a6388976f23e6239bc6e27780516b4f9a0.006902298215393076 AVAX
0xeff7f598e865ba122356a4b630182cb6f5eb2d3133ca0eda9b2b9540a609efe0101059032022-01-27 2:31:2733 secs ago Trader Joe: Router Wrapped AVAX1.375518985587513092 AVAX
0x98900bbafbc548d9b727eb3c7d2ceb387b80cefa9c0fa35180da2267e561ebd6101059022022-01-27 2:31:2535 secs ago Trader Joe: Router0x683297aee4be3a09850cc071aa41b6516a2bcd711.405362457175926987 AVAX
0x98900bbafbc548d9b727eb3c7d2ceb387b80cefa9c0fa35180da2267e561ebd6101059022022-01-27 2:31:2535 secs ago Wrapped AVAX Trader Joe: Router1.405362457175926987 AVAX
0x62afc692da4dc5cfb9c6b25ea298eb56662637a8881f3dca448b7a0b50a621e7101059022022-01-27 2:31:2535 secs ago Trader Joe: Router Wrapped AVAX5.736563565 AVAX
0xa3866f10e2b2db290bd3e31291c8ffaecae9acd3b53c32ca2b1157f41e1dcc74101059022022-01-27 2:31:2535 secs ago Trader Joe: Router Wrapped AVAX4.661783510660299239 AVAX
0xce2e1977c7f2f5e17e3a7c55f3f6848e533b14e65f75f4f3ddc230db65c14c78101059022022-01-27 2:31:2535 secs ago Trader Joe: Router0x2cbbc048d158d60bc93c2cddc8b4ec084851bbbb0.462684827273781301 AVAX
0xce2e1977c7f2f5e17e3a7c55f3f6848e533b14e65f75f4f3ddc230db65c14c78101059022022-01-27 2:31:2535 secs ago Wrapped AVAX Trader Joe: Router0.462684827273781301 AVAX
0xa82315c63c1448b55dcf229bb733bb37cfe5a79f30bff9d4e1b9ff3e356eb20f101059022022-01-27 2:31:2535 secs ago Trader Joe: Router0x697c7cf5bd9605c7a2d53f4e52ef96ca082e8ecf0.195057377703126912 AVAX
0xa82315c63c1448b55dcf229bb733bb37cfe5a79f30bff9d4e1b9ff3e356eb20f101059022022-01-27 2:31:2535 secs ago Trader Joe: Router Wrapped AVAX38.051400788939245953 AVAX
0xae8cfdc3909fdc045309de9d2da0ffe972be1f45a8e180681225599899fc5bf2101059012022-01-27 2:31:2139 secs ago Trader Joe: Router0x8291b929c43809045db84a205cb93e9300dc4eff4.8 AVAX
0xae8cfdc3909fdc045309de9d2da0ffe972be1f45a8e180681225599899fc5bf2101059012022-01-27 2:31:2139 secs ago Wrapped AVAX Trader Joe: Router4.8 AVAX
0xab8a92f59176ca31cc4f0f4083b238d8931c8560d5eda6c3c0ef3e31e2c4bebb101059012022-01-27 2:31:2139 secs ago Trader Joe: Router0x88f91f639d183965748e7f8c3b8bc23f20b601040.815281864227874752 AVAX
0xab8a92f59176ca31cc4f0f4083b238d8931c8560d5eda6c3c0ef3e31e2c4bebb101059012022-01-27 2:31:2139 secs ago Wrapped AVAX Trader Joe: Router0.815281864227874752 AVAX
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
JoeRouter02

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

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

// File: contracts/traderjoe/interfaces/IJoePair.sol

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.5.0;

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

// File: contracts/traderjoe/libraries/SafeMath.sol

pragma solidity =0.6.12;

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

library SafeMathJoe {
    function add(uint256 x, uint256 y) internal pure returns (uint256 z) {
        require((z = x + y) >= x, "ds-math-add-overflow");
    }

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

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

// File: contracts/traderjoe/libraries/JoeLibrary.sol

pragma solidity >=0.5.0;

library JoeLibrary {
    using SafeMathJoe for uint256;

    // returns sorted token addresses, used to handle return values from pairs sorted in this order
    function sortTokens(address tokenA, address tokenB)
        internal
        pure
        returns (address token0, address token1)
    {
        require(tokenA != tokenB, "JoeLibrary: IDENTICAL_ADDRESSES");
        (token0, token1) = tokenA < tokenB
            ? (tokenA, tokenB)
            : (tokenB, tokenA);
        require(token0 != address(0), "JoeLibrary: ZERO_ADDRESS");
    }

    // calculates the CREATE2 address for a pair without making any external calls
    function pairFor(
        address factory,
        address tokenA,
        address tokenB
    ) internal pure returns (address pair) {
        (address token0, address token1) = sortTokens(tokenA, tokenB);
        pair = address(
            uint256(
                keccak256(
                    abi.encodePacked(
                        hex"ff",
                        factory,
                        keccak256(abi.encodePacked(token0, token1)),
                        hex"0bbca9af0511ad1a1da383135cf3a8d2ac620e549ef9f6ae3a4c33c2fed0af91"
                    )
                )
            )
        );
    }

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

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

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

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

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

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

// File: contracts/traderjoe/libraries/TransferHelper.sol

pragma solidity >=0.6.0;

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

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

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

    function safeTransferAVAX(address to, uint256 value) internal {
        (bool success, ) = to.call{value: value}(new bytes(0));
        require(success, "TransferHelper: AVAX_TRANSFER_FAILED");
    }
}

pragma solidity >=0.5.0;

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;

    function setMigrator(address) external;
}
// File: contracts/traderjoe/interfaces/IJoeRouter01.sol

pragma solidity >=0.6.2;

interface IJoeRouter01 {
    function factory() external pure returns (address);

    function WAVAX() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityAVAX(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountAVAX,
            uint256 liquidity
        );

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityAVAX(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountToken, uint256 amountAVAX);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountA, uint256 amountB);

    function removeLiquidityAVAXWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountToken, uint256 amountAVAX);

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactAVAXForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function swapTokensForExactAVAX(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapExactTokensForAVAX(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external returns (uint256[] memory amounts);

    function swapAVAXForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable returns (uint256[] memory amounts);

    function quote(
        uint256 amountA,
        uint256 reserveA,
        uint256 reserveB
    ) external pure returns (uint256 amountB);

    function getAmountOut(
        uint256 amountIn,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountOut);

    function getAmountIn(
        uint256 amountOut,
        uint256 reserveIn,
        uint256 reserveOut
    ) external pure returns (uint256 amountIn);

    function getAmountsOut(uint256 amountIn, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);

    function getAmountsIn(uint256 amountOut, address[] calldata path)
        external
        view
        returns (uint256[] memory amounts);
}

// File: contracts/traderjoe/interfaces/IJoeRouter02.sol

pragma solidity >=0.6.2;

interface IJoeRouter02 is IJoeRouter01 {
    function removeLiquidityAVAXSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline
    ) external returns (uint256 amountAVAX);

    function removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint256 amountAVAX);

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

    function swapExactAVAXForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForAVAXSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

// File: contracts/traderjoe/interfaces/IJoeFactory.sol

pragma solidity >=0.5.0;

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

    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);

    function totalSupply() external view returns (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

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

// File: contracts/traderjoe/interfaces/IWAVAX.sol

pragma solidity >=0.5.0;

interface IWAVAX {
    function deposit() external payable;

    function transfer(address to, uint256 value) external returns (bool);

    function withdraw(uint256) external;
}

// File: contracts/traderjoe/JoeRouter02.sol

pragma solidity =0.6.12;

contract JoeRouter02 is IJoeRouter02 {
    using SafeMathJoe for uint256;

    address public immutable override factory;
    address public immutable override WAVAX;

    modifier ensure(uint256 deadline) {
        require(deadline >= block.timestamp, "JoeRouter: EXPIRED");
        _;
    }

    constructor(address _factory, address _WAVAX) public {
        factory = _factory;
        WAVAX = _WAVAX;
    }

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

    // **** ADD LIQUIDITY ****
    function _addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin
    ) internal virtual returns (uint256 amountA, uint256 amountB) {
        // create the pair if it doesn't exist yet
        if (IJoeFactory(factory).getPair(tokenA, tokenB) == address(0)) {
            IJoeFactory(factory).createPair(tokenA, tokenB);
        }
        (uint256 reserveA, uint256 reserveB) = JoeLibrary.getReserves(
            factory,
            tokenA,
            tokenB
        );
        if (reserveA == 0 && reserveB == 0) {
            (amountA, amountB) = (amountADesired, amountBDesired);
        } else {
            uint256 amountBOptimal = JoeLibrary.quote(
                amountADesired,
                reserveA,
                reserveB
            );
            if (amountBOptimal <= amountBDesired) {
                require(
                    amountBOptimal >= amountBMin,
                    "JoeRouter: INSUFFICIENT_B_AMOUNT"
                );
                (amountA, amountB) = (amountADesired, amountBOptimal);
            } else {
                uint256 amountAOptimal = JoeLibrary.quote(
                    amountBDesired,
                    reserveB,
                    reserveA
                );
                assert(amountAOptimal <= amountADesired);
                require(
                    amountAOptimal >= amountAMin,
                    "JoeRouter: INSUFFICIENT_A_AMOUNT"
                );
                (amountA, amountB) = (amountAOptimal, amountBDesired);
            }
        }
    }

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        virtual
        override
        ensure(deadline)
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        )
    {
        (amountA, amountB) = _addLiquidity(
            tokenA,
            tokenB,
            amountADesired,
            amountBDesired,
            amountAMin,
            amountBMin
        );
        address pair = JoeLibrary.pairFor(factory, tokenA, tokenB);
        TransferHelper.safeTransferFrom(tokenA, msg.sender, pair, amountA);
        TransferHelper.safeTransferFrom(tokenB, msg.sender, pair, amountB);
        liquidity = IJoePair(pair).mint(to);
    }

    function addLiquidityAVAX(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline
    )
        external
        payable
        virtual
        override
        ensure(deadline)
        returns (
            uint256 amountToken,
            uint256 amountAVAX,
            uint256 liquidity
        )
    {
        (amountToken, amountAVAX) = _addLiquidity(
            token,
            WAVAX,
            amountTokenDesired,
            msg.value,
            amountTokenMin,
            amountAVAXMin
        );
        address pair = JoeLibrary.pairFor(factory, token, WAVAX);
        TransferHelper.safeTransferFrom(token, msg.sender, pair, amountToken);
        IWAVAX(WAVAX).deposit{value: amountAVAX}();
        assert(IWAVAX(WAVAX).transfer(pair, amountAVAX));
        liquidity = IJoePair(pair).mint(to);
        // refund dust eth, if any
        if (msg.value > amountAVAX)
            TransferHelper.safeTransferAVAX(msg.sender, msg.value - amountAVAX);
    }

    // **** REMOVE LIQUIDITY ****
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        public
        virtual
        override
        ensure(deadline)
        returns (uint256 amountA, uint256 amountB)
    {
        address pair = JoeLibrary.pairFor(factory, tokenA, tokenB);
        IJoePair(pair).transferFrom(msg.sender, pair, liquidity); // send liquidity to pair
        (uint256 amount0, uint256 amount1) = IJoePair(pair).burn(to);
        (address token0, ) = JoeLibrary.sortTokens(tokenA, tokenB);
        (amountA, amountB) = tokenA == token0
            ? (amount0, amount1)
            : (amount1, amount0);
        require(amountA >= amountAMin, "JoeRouter: INSUFFICIENT_A_AMOUNT");
        require(amountB >= amountBMin, "JoeRouter: INSUFFICIENT_B_AMOUNT");
    }

    function removeLiquidityAVAX(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline
    )
        public
        virtual
        override
        ensure(deadline)
        returns (uint256 amountToken, uint256 amountAVAX)
    {
        (amountToken, amountAVAX) = removeLiquidity(
            token,
            WAVAX,
            liquidity,
            amountTokenMin,
            amountAVAXMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(token, to, amountToken);
        IWAVAX(WAVAX).withdraw(amountAVAX);
        TransferHelper.safeTransferAVAX(to, amountAVAX);
    }

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint256 liquidity,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external virtual override returns (uint256 amountA, uint256 amountB) {
        address pair = JoeLibrary.pairFor(factory, tokenA, tokenB);
        uint256 value = approveMax ? uint256(-1) : liquidity;
        IJoePair(pair).permit(
            msg.sender,
            address(this),
            value,
            deadline,
            v,
            r,
            s
        );
        (amountA, amountB) = removeLiquidity(
            tokenA,
            tokenB,
            liquidity,
            amountAMin,
            amountBMin,
            to,
            deadline
        );
    }

    function removeLiquidityAVAXWithPermit(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    )
        external
        virtual
        override
        returns (uint256 amountToken, uint256 amountAVAX)
    {
        address pair = JoeLibrary.pairFor(factory, token, WAVAX);
        uint256 value = approveMax ? uint256(-1) : liquidity;
        IJoePair(pair).permit(
            msg.sender,
            address(this),
            value,
            deadline,
            v,
            r,
            s
        );
        (amountToken, amountAVAX) = removeLiquidityAVAX(
            token,
            liquidity,
            amountTokenMin,
            amountAVAXMin,
            to,
            deadline
        );
    }

    // **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens) ****
    function removeLiquidityAVAXSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline
    ) public virtual override ensure(deadline) returns (uint256 amountAVAX) {
        (, amountAVAX) = removeLiquidity(
            token,
            WAVAX,
            liquidity,
            amountTokenMin,
            amountAVAXMin,
            address(this),
            deadline
        );
        TransferHelper.safeTransfer(
            token,
            to,
            IERC20Joe(token).balanceOf(address(this))
        );
        IWAVAX(WAVAX).withdraw(amountAVAX);
        TransferHelper.safeTransferAVAX(to, amountAVAX);
    }

    function removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint256 liquidity,
        uint256 amountTokenMin,
        uint256 amountAVAXMin,
        address to,
        uint256 deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external virtual override returns (uint256 amountAVAX) {
        address pair = JoeLibrary.pairFor(factory, token, WAVAX);
        uint256 value = approveMax ? uint256(-1) : liquidity;
        IJoePair(pair).permit(
            msg.sender,
            address(this),
            value,
            deadline,
            v,
            r,
            s
        );
        amountAVAX = removeLiquidityAVAXSupportingFeeOnTransferTokens(
            token,
            liquidity,
            amountTokenMin,
            amountAVAXMin,
            to,
            deadline
        );
    }

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

    function swapExactTokensForTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    )
        external
        virtual
        override
        ensure(deadline)
        returns (uint256[] memory amounts)
    {
        amounts = JoeLibrary.getAmountsOut(factory, amountIn, path);
        require(
            amounts[amounts.length - 1] >= amountOutMin,
            "JoeRouter: INSUFFICIENT_OUTPUT_AMOUNT"
        );
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            JoeLibrary.pairFor(factory, path[0], path[1]),
            amounts[0]
        );
        _swap(amounts, path, to);
    }

    function swapTokensForExactTokens(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    )
        external
        virtual
        override
        ensure(deadline)
        returns (uint256[] memory amounts)
    {
        amounts = JoeLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, "JoeRouter: EXCESSIVE_INPUT_AMOUNT");
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            JoeLibrary.pairFor(factory, path[0], path[1]),
            amounts[0]
        );
        _swap(amounts, path, to);
    }

    function swapExactAVAXForTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    )
        external
        payable
        virtual
        override
        ensure(deadline)
        returns (uint256[] memory amounts)
    {
        require(path[0] == WAVAX, "JoeRouter: INVALID_PATH");
        amounts = JoeLibrary.getAmountsOut(factory, msg.value, path);
        require(
            amounts[amounts.length - 1] >= amountOutMin,
            "JoeRouter: INSUFFICIENT_OUTPUT_AMOUNT"
        );
        IWAVAX(WAVAX).deposit{value: amounts[0]}();
        assert(
            IWAVAX(WAVAX).transfer(
                JoeLibrary.pairFor(factory, path[0], path[1]),
                amounts[0]
            )
        );
        _swap(amounts, path, to);
    }

    function swapTokensForExactAVAX(
        uint256 amountOut,
        uint256 amountInMax,
        address[] calldata path,
        address to,
        uint256 deadline
    )
        external
        virtual
        override
        ensure(deadline)
        returns (uint256[] memory amounts)
    {
        require(path[path.length - 1] == WAVAX, "JoeRouter: INVALID_PATH");
        amounts = JoeLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= amountInMax, "JoeRouter: EXCESSIVE_INPUT_AMOUNT");
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            JoeLibrary.pairFor(factory, path[0], path[1]),
            amounts[0]
        );
        _swap(amounts, path, address(this));
        IWAVAX(WAVAX).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferAVAX(to, amounts[amounts.length - 1]);
    }

    function swapExactTokensForAVAX(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    )
        external
        virtual
        override
        ensure(deadline)
        returns (uint256[] memory amounts)
    {
        require(path[path.length - 1] == WAVAX, "JoeRouter: INVALID_PATH");
        amounts = JoeLibrary.getAmountsOut(factory, amountIn, path);
        require(
            amounts[amounts.length - 1] >= amountOutMin,
            "JoeRouter: INSUFFICIENT_OUTPUT_AMOUNT"
        );
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            JoeLibrary.pairFor(factory, path[0], path[1]),
            amounts[0]
        );
        _swap(amounts, path, address(this));
        IWAVAX(WAVAX).withdraw(amounts[amounts.length - 1]);
        TransferHelper.safeTransferAVAX(to, amounts[amounts.length - 1]);
    }

    function swapAVAXForExactTokens(
        uint256 amountOut,
        address[] calldata path,
        address to,
        uint256 deadline
    )
        external
        payable
        virtual
        override
        ensure(deadline)
        returns (uint256[] memory amounts)
    {
        require(path[0] == WAVAX, "JoeRouter: INVALID_PATH");
        amounts = JoeLibrary.getAmountsIn(factory, amountOut, path);
        require(amounts[0] <= msg.value, "JoeRouter: EXCESSIVE_INPUT_AMOUNT");
        IWAVAX(WAVAX).deposit{value: amounts[0]}();
        assert(
            IWAVAX(WAVAX).transfer(
                JoeLibrary.pairFor(factory, path[0], path[1]),
                amounts[0]
            )
        );
        _swap(amounts, path, to);
        // refund dust eth, if any
        if (msg.value > amounts[0])
            TransferHelper.safeTransferAVAX(msg.sender, msg.value - amounts[0]);
    }

    // **** SWAP (supporting fee-on-transfer tokens) ****
    // requires the initial amount to have already been sent to the first pair
    function _swapSupportingFeeOnTransferTokens(
        address[] memory path,
        address _to
    ) internal virtual {
        for (uint256 i; i < path.length - 1; i++) {
            (address input, address output) = (path[i], path[i + 1]);
            (address token0, ) = JoeLibrary.sortTokens(input, output);
            IJoePair pair = IJoePair(
                JoeLibrary.pairFor(factory, input, output)
            );
            uint256 amountInput;
            uint256 amountOutput;
            {
                // scope to avoid stack too deep errors
                (uint256 reserve0, uint256 reserve1, ) = pair.getReserves();
                (uint256 reserveInput, uint256 reserveOutput) = input == token0
                    ? (reserve0, reserve1)
                    : (reserve1, reserve0);
                amountInput = IERC20Joe(input).balanceOf(address(pair)).sub(
                    reserveInput
                );
                amountOutput = JoeLibrary.getAmountOut(
                    amountInput,
                    reserveInput,
                    reserveOutput
                );
            }
            (uint256 amount0Out, uint256 amount1Out) = input == token0
                ? (uint256(0), amountOutput)
                : (amountOutput, uint256(0));
            address to = i < path.length - 2
                ? JoeLibrary.pairFor(factory, output, path[i + 2])
                : _to;
            pair.swap(amount0Out, amount1Out, to, new bytes(0));
        }
    }

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) {
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            JoeLibrary.pairFor(factory, path[0], path[1]),
            amountIn
        );
        uint256 balanceBefore = IERC20Joe(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20Joe(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >=
                amountOutMin,
            "JoeRouter: INSUFFICIENT_OUTPUT_AMOUNT"
        );
    }

    function swapExactAVAXForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable virtual override ensure(deadline) {
        require(path[0] == WAVAX, "JoeRouter: INVALID_PATH");
        uint256 amountIn = msg.value;
        IWAVAX(WAVAX).deposit{value: amountIn}();
        assert(
            IWAVAX(WAVAX).transfer(
                JoeLibrary.pairFor(factory, path[0], path[1]),
                amountIn
            )
        );
        uint256 balanceBefore = IERC20Joe(path[path.length - 1]).balanceOf(to);
        _swapSupportingFeeOnTransferTokens(path, to);
        require(
            IERC20Joe(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >=
                amountOutMin,
            "JoeRouter: INSUFFICIENT_OUTPUT_AMOUNT"
        );
    }

    function swapExactTokensForAVAXSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external virtual override ensure(deadline) {
        require(path[path.length - 1] == WAVAX, "JoeRouter: INVALID_PATH");
        TransferHelper.safeTransferFrom(
            path[0],
            msg.sender,
            JoeLibrary.pairFor(factory, path[0], path[1]),
            amountIn
        );
        _swapSupportingFeeOnTransferTokens(path, address(this));
        uint256 amountOut = IERC20Joe(WAVAX).balanceOf(address(this));
        require(
            amountOut >= amountOutMin,
            "JoeRouter: INSUFFICIENT_OUTPUT_AMOUNT"
        );
        IWAVAX(WAVAX).withdraw(amountOut);
        TransferHelper.safeTransferAVAX(to, amountOut);
    }

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

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

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

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

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

Contract ABI

[{"inputs":[{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_WAVAX","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"WAVAX","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountAVAXMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityAVAX","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountAVAX","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountIn","outputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"reserveIn","type":"uint256"},{"internalType":"uint256","name":"reserveOut","type":"uint256"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsIn","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"name":"quote","outputs":[{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountAVAXMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityAVAX","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountAVAX","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountAVAXMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityAVAXSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountAVAX","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountAVAXMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityAVAXWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountAVAX","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountAVAXMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityAVAXWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountAVAX","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapAVAXForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactAVAXForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactAVAXForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForAVAX","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForAVAXSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactAVAX","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOut","type":"uint256"},{"internalType":"uint256","name":"amountInMax","type":"uint256"},{"internalType":"address[]","name":"path","type":"address[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapTokensForExactTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405234801561001057600080fd5b50604051620046ae380380620046ae8339818101604052604081101561003557600080fd5b5080516020909101516001600160601b0319606092831b8116608052911b1660a05260805160601c60a05160601c614529620001856000398061015f5280610e085280610f3d5280610f7852806114bb528061164b5280611701528061176f528061182352806118f752806119d25280611aac5280611b825280611e0c5280611f4f5280611fd75280612171528061229d52806123e3528061246b528061287c528061291152806129855280612d565280612dac5280612de05280612e54525080610cb35280610cec5280610de65280611055528061112c528061125852806115495280611c105280611d165280611e9f5280612009528061214f5280612330528061249d52806125f0528061281452806129b75280612bae5280612c375280612d8a528061381a528061385d52806139ff5280613b755280613f92528061404b52806140fe52506145296000f3fe60806040526004361061014f5760003560e01c806385f8c259116100b6578063baa2abde1161006f578063baa2abde14610a26578063c45a015514610a83578063c57559dd14610a98578063d06ca61f14610b1c578063e8e3370014610bd1578063f91b3f7214610c5157610188565b806385f8c259146107a95780638803dbee146107df5780638a657e67146108755780639fc27226146108f9578063a2a1623d1461096c578063ad615dec146109f057610188565b80635c11d795116101085780635c11d795146104cd578063676528d11461056357806373b295c2146105f957806373bc79cf1461062a578063762b15621461067d5780637a42416a1461071357610188565b8063054d50d41461018d5780631f00ca74146101d55780632195995c146102da5780632c4070241461037157806333c6b725146103e457806338ed17391461043757610188565b3661018857336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461018657fe5b005b600080fd5b34801561019957600080fd5b506101c3600480360360608110156101b057600080fd5b5080359060208101359060400135610c97565b60408051918252519081900360200190f35b3480156101e157600080fd5b5061028a600480360360408110156101f857600080fd5b81359190810190604081016020820135600160201b81111561021957600080fd5b82018360208201111561022b57600080fd5b803590602001918460208302840111600160201b8311171561024c57600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550610cac945050505050565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156102c65781810151838201526020016102ae565b505050509050019250505060405180910390f35b3480156102e657600080fd5b5061035860048036036101608110156102fe57600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c08101359060e081013515159060ff6101008201351690610120810135906101400135610ce2565b6040805192835260208301919091528051918290030190f35b34801561037d57600080fd5b50610358600480360361014081101561039557600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135610ddc565b3480156103f057600080fd5b50610358600480360360c081101561040757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135610ef0565b34801561044357600080fd5b5061028a600480360360a081101561045a57600080fd5b813591602081013591810190606081016040820135600160201b81111561048057600080fd5b82018360208201111561049257600080fd5b803590602001918460208302840111600160201b831117156104b357600080fd5b91935091506001600160a01b03813516906020013561100a565b3480156104d957600080fd5b50610186600480360360a08110156104f057600080fd5b813591602081013591810190606081016040820135600160201b81111561051657600080fd5b82018360208201111561052857600080fd5b803590602001918460208302840111600160201b8311171561054957600080fd5b91935091506001600160a01b0381351690602001356111ee565b34801561056f57600080fd5b5061028a600480360360a081101561058657600080fd5b813591602081013591810190606081016040820135600160201b8111156105ac57600080fd5b8201836020820111156105be57600080fd5b803590602001918460208302840111600160201b831117156105df57600080fd5b91935091506001600160a01b03813516906020013561146b565b34801561060557600080fd5b5061060e6116ff565b604080516001600160a01b039092168252519081900360200190f35b34801561063657600080fd5b506101c3600480360360c081101561064d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135611723565b34801561068957600080fd5b50610186600480360360a08110156106a057600080fd5b813591602081013591810190606081016040820135600160201b8111156106c657600080fd5b8201836020820111156106d857600080fd5b803590602001918460208302840111600160201b831117156106f957600080fd5b91935091506001600160a01b0381351690602001356118a9565b34801561071f57600080fd5b5061028a600480360360a081101561073657600080fd5b813591602081013591810190606081016040820135600160201b81111561075c57600080fd5b82018360208201111561076e57600080fd5b803590602001918460208302840111600160201b8311171561078f57600080fd5b91935091506001600160a01b038135169060200135611b32565b3480156107b557600080fd5b506101c3600480360360608110156107cc57600080fd5b5080359060208101359060400135611cbe565b3480156107eb57600080fd5b5061028a600480360360a081101561080257600080fd5b813591602081013591810190606081016040820135600160201b81111561082857600080fd5b82018360208201111561083a57600080fd5b803590602001918460208302840111600160201b8311171561085b57600080fd5b91935091506001600160a01b038135169060200135611ccb565b61028a6004803603608081101561088b57600080fd5b81359190810190604081016020820135600160201b8111156108ac57600080fd5b8201836020820111156108be57600080fd5b803590602001918460208302840111600160201b831117156108df57600080fd5b91935091506001600160a01b038135169060200135611dc4565b34801561090557600080fd5b506101c3600480360361014081101561091d57600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a08101359060c081013515159060ff60e08201351690610100810135906101200135612147565b61028a6004803603608081101561098257600080fd5b81359190810190604081016020820135600160201b8111156109a357600080fd5b8201836020820111156109b557600080fd5b803590602001918460208302840111600160201b831117156109d657600080fd5b91935091506001600160a01b038135169060200135612255565b3480156109fc57600080fd5b506101c360048036036060811015610a1357600080fd5b5080359060208101359060400135612595565b348015610a3257600080fd5b50610358600480360360e0811015610a4957600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359091169060c001356125a2565b348015610a8f57600080fd5b5061060e612812565b61018660048036036080811015610aae57600080fd5b81359190810190604081016020820135600160201b811115610acf57600080fd5b820183602082011115610ae157600080fd5b803590602001918460208302840111600160201b83111715610b0257600080fd5b91935091506001600160a01b038135169060200135612836565b348015610b2857600080fd5b5061028a60048036036040811015610b3f57600080fd5b81359190810190604081016020820135600160201b811115610b6057600080fd5b820183602082011115610b7257600080fd5b803590602001918460208302840111600160201b83111715610b9357600080fd5b919080806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929550612ba7945050505050565b348015610bdd57600080fd5b50610c336004803603610100811015610bf557600080fd5b506001600160a01b038135811691602081013582169160408201359160608101359160808201359160a08101359160c0820135169060e00135612bd4565b60408051938452602084019290925282820152519081900360600190f35b610c33600480360360c0811015610c6757600080fd5b506001600160a01b0381358116916020810135916040820135916060810135916080820135169060a00135612d07565b6000610ca4848484612f9a565b949350505050565b6060610cd97f00000000000000000000000000000000000000000000000000000000000000008484613072565b90505b92915050565b6000806000610d127f00000000000000000000000000000000000000000000000000000000000000008f8f6131ba565b9050600087610d21578c610d25565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610d9b57600080fd5b505af1158015610daf573d6000803e3d6000fd5b50505050610dc28f8f8f8f8f8f8f6125a2565b809450819550505050509b509b9950505050505050505050565b6000806000610e2c7f00000000000000000000000000000000000000000000000000000000000000008e7f00000000000000000000000000000000000000000000000000000000000000006131ba565b9050600087610e3b578c610e3f565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018c905260ff8a16608482015260a4810189905260c4810188905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b158015610eb557600080fd5b505af1158015610ec9573d6000803e3d6000fd5b50505050610edb8e8e8e8e8e8e610ef0565b909f909e509c50505050505050505050505050565b6000808242811015610f37576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b610f66897f00000000000000000000000000000000000000000000000000000000000000008a8a8a308a6125a2565b9093509150610f7689868561327a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015610fdc57600080fd5b505af1158015610ff0573d6000803e3d6000fd5b50505050610ffe85836133e4565b50965096945050505050565b60608142811015611050576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b6110ae7f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134dc92505050565b915086826001845103815181106110c157fe5b602002602001015110156111065760405162461bcd60e51b815260040180806020018281038252602581526020018061446b6025913960400191505060405180910390fd5b6111a48686600081811061111657fe5b905060200201356001600160a01b03163361118a7f00000000000000000000000000000000000000000000000000000000000000008a8a600081811061115857fe5b905060200201356001600160a01b03168b8b600181811061117557fe5b905060200201356001600160a01b03166131ba565b8560008151811061119757fe5b602002602001015161360e565b6111e38287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061376b915050565b509695505050505050565b8042811015611232576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b6112a78585600081811061124257fe5b905060200201356001600160a01b0316336112a17f00000000000000000000000000000000000000000000000000000000000000008989600081811061128457fe5b905060200201356001600160a01b03168a8a600181811061117557fe5b8a61360e565b6000858560001981018181106112b957fe5b905060200201356001600160a01b03166001600160a01b03166370a08231856040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561131557600080fd5b505afa158015611329573d6000803e3d6000fd5b505050506040513d602081101561133f57600080fd5b505160408051602088810282810182019093528882529293506113819290918991899182918501908490808284376000920191909152508892506139a8915050565b86611424828888600019810181811061139657fe5b905060200201356001600160a01b03166001600160a01b03166370a08231886040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156113f257600080fd5b505afa158015611406573d6000803e3d6000fd5b505050506040513d602081101561141c57600080fd5b505190613caa565b10156114615760405162461bcd60e51b815260040180806020018281038252602581526020018061446b6025913960400191505060405180910390fd5b5050505050505050565b606081428110156114b1576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016868660001981018181106114eb57fe5b905060200201356001600160a01b03166001600160a01b031614611544576040805162461bcd60e51b815260206004820152601760248201526000805160206144b0833981519152604482015290519081900360640190fd5b6115a27f0000000000000000000000000000000000000000000000000000000000000000898888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134dc92505050565b915086826001845103815181106115b557fe5b602002602001015110156115fa5760405162461bcd60e51b815260040180806020018281038252602581526020018061446b6025913960400191505060405180910390fd5b61160a8686600081811061111657fe5b6116498287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525030925061376b915050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d8360018551038151811061168857fe5b60200260200101516040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156116c657600080fd5b505af11580156116da573d6000803e3d6000fd5b505050506111e384836001855103815181106116f257fe5b60200260200101516133e4565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008142811015611769576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b611798887f000000000000000000000000000000000000000000000000000000000000000089898930896125a2565b90508092505061182188858a6001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156117f057600080fd5b505afa158015611804573d6000803e3d6000fd5b505050506040513d602081101561181a57600080fd5b505161327a565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561188757600080fd5b505af115801561189b573d6000803e3d6000fd5b505050506111e384836133e4565b80428110156118ed576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168585600019810181811061192757fe5b905060200201356001600160a01b03166001600160a01b031614611980576040805162461bcd60e51b815260206004820152601760248201526000805160206144b0833981519152604482015290519081900360640190fd5b6119908585600081811061124257fe5b6119ce8585808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152503092506139a8915050565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015611a3d57600080fd5b505afa158015611a51573d6000803e3d6000fd5b505050506040513d6020811015611a6757600080fd5b5051905086811015611aaa5760405162461bcd60e51b815260040180806020018281038252602581526020018061446b6025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632e1a7d4d826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b158015611b1057600080fd5b505af1158015611b24573d6000803e3d6000fd5b5050505061146184826133e4565b60608142811015611b78576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001686866000198101818110611bb257fe5b905060200201356001600160a01b03166001600160a01b031614611c0b576040805162461bcd60e51b815260206004820152601760248201526000805160206144b0833981519152604482015290519081900360640190fd5b611c697f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061307292505050565b91508682600081518110611c7957fe5b602002602001015111156115fa5760405162461bcd60e51b81526004018080602001828103825260218152602001806143ff6021913960400191505060405180910390fd5b6000610ca4848484613cfa565b60608142811015611d11576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b611d6f7f00000000000000000000000000000000000000000000000000000000000000008988888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061307292505050565b91508682600081518110611d7f57fe5b602002602001015111156111065760405162461bcd60e51b81526004018080602001828103825260218152602001806143ff6021913960400191505060405180910390fd5b60608142811015611e0a576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031686866000818110611e4157fe5b905060200201356001600160a01b03166001600160a01b031614611e9a576040805162461bcd60e51b815260206004820152601760248201526000805160206144b0833981519152604482015290519081900360640190fd5b611ef87f00000000000000000000000000000000000000000000000000000000000000008888888080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525061307292505050565b91503482600081518110611f0857fe5b60200260200101511115611f4d5760405162461bcd60e51b81526004018080602001828103825260218152602001806143ff6021913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db083600081518110611f8957fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b158015611fbc57600080fd5b505af1158015611fd0573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6120357f00000000000000000000000000000000000000000000000000000000000000008989600081811061128457fe5b8460008151811061204257fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561209057600080fd5b505af11580156120a4573d6000803e3d6000fd5b505050506040513d60208110156120ba57600080fd5b50516120c257fe5b6121018287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061376b915050565b8160008151811061210e57fe5b602002602001015134111561213d5761213d338360008151811061212e57fe5b602002602001015134036133e4565b5095945050505050565b6000806121957f00000000000000000000000000000000000000000000000000000000000000008d7f00000000000000000000000000000000000000000000000000000000000000006131ba565b90506000866121a4578b6121a8565b6000195b6040805163d505accf60e01b815233600482015230602482015260448101839052606481018b905260ff8916608482015260a4810188905260c4810187905290519192506001600160a01b0384169163d505accf9160e48082019260009290919082900301818387803b15801561221e57600080fd5b505af1158015612232573d6000803e3d6000fd5b505050506122448d8d8d8d8d8d611723565b9d9c50505050505050505050505050565b6060814281101561229b576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316868660008181106122d257fe5b905060200201356001600160a01b03166001600160a01b03161461232b576040805162461bcd60e51b815260206004820152601760248201526000805160206144b0833981519152604482015290519081900360640190fd5b6123897f0000000000000000000000000000000000000000000000000000000000000000348888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506134dc92505050565b9150868260018451038151811061239c57fe5b602002602001015110156123e15760405162461bcd60e51b815260040180806020018281038252602581526020018061446b6025913960400191505060405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db08360008151811061241d57fe5b60200260200101516040518263ffffffff1660e01b81526004016000604051808303818588803b15801561245057600080fd5b505af1158015612464573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6124c97f00000000000000000000000000000000000000000000000000000000000000008989600081811061128457fe5b846000815181106124d657fe5b60200260200101516040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b15801561252457600080fd5b505af1158015612538573d6000803e3d6000fd5b505050506040513d602081101561254e57600080fd5b505161255657fe5b61213d8287878080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525089925061376b915050565b6000610ca4848484613dd2565b60008082428110156125e9576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b60006126167f00000000000000000000000000000000000000000000000000000000000000008c8c6131ba565b604080516323b872dd60e01b81523360048201526001600160a01b03831660248201819052604482018d9052915192935090916323b872dd916064808201926020929091908290030181600087803b15801561267157600080fd5b505af1158015612685573d6000803e3d6000fd5b505050506040513d602081101561269b57600080fd5b50506040805163226bf2d160e21b81526001600160a01b03888116600483015282516000938493928616926389afcb44926024808301939282900301818787803b1580156126e857600080fd5b505af11580156126fc573d6000803e3d6000fd5b505050506040513d604081101561271257600080fd5b5080516020909101519092509050600061272c8e8e613e8e565b509050806001600160a01b03168e6001600160a01b03161461274f578183612752565b82825b90975095508a8710156127ac576040805162461bcd60e51b815260206004820181905260248201527f4a6f65526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b89861015612801576040805162461bcd60e51b815260206004820181905260248201527f4a6f65526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b505050505097509795505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b804281101561287a576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316858560008181106128b157fe5b905060200201356001600160a01b03166001600160a01b03161461290a576040805162461bcd60e51b815260206004820152601760248201526000805160206144b0833981519152604482015290519081900360640190fd5b60003490507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561296a57600080fd5b505af115801561297e573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb6129e37f00000000000000000000000000000000000000000000000000000000000000008989600081811061128457fe5b836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612a2a57600080fd5b505af1158015612a3e573d6000803e3d6000fd5b505050506040513d6020811015612a5457600080fd5b5051612a5c57fe5b600086866000198101818110612a6e57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231866040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b158015612aca57600080fd5b505afa158015612ade573d6000803e3d6000fd5b505050506040513d6020811015612af457600080fd5b50516040805160208981028281018201909352898252929350612b369290918a918a9182918501908490808284376000920191909152508992506139a8915050565b876114248289896000198101818110612b4b57fe5b905060200201356001600160a01b03166001600160a01b03166370a08231896040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156113f257600080fd5b6060610cd97f000000000000000000000000000000000000000000000000000000000000000084846134dc565b60008060008342811015612c1d576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b612c2b8c8c8c8c8c8c613f82565b90945092506000612c5d7f00000000000000000000000000000000000000000000000000000000000000008e8e6131ba565b9050612c6b8d33838861360e565b612c778c33838761360e565b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b158015612cc657600080fd5b505af1158015612cda573d6000803e3d6000fd5b505050506040513d6020811015612cf057600080fd5b5051949d939c50939a509198505050505050505050565b60008060008342811015612d50576040805162461bcd60e51b81526020600482015260126024820152600080516020614490833981519152604482015290519081900360640190fd5b612d7e8a7f00000000000000000000000000000000000000000000000000000000000000008b348c8c613f82565b90945092506000612dd07f00000000000000000000000000000000000000000000000000000000000000008c7f00000000000000000000000000000000000000000000000000000000000000006131ba565b9050612dde8b33838861360e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0856040518263ffffffff1660e01b81526004016000604051808303818588803b158015612e3957600080fd5b505af1158015612e4d573d6000803e3d6000fd5b50505050507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663a9059cbb82866040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050602060405180830381600087803b158015612ec957600080fd5b505af1158015612edd573d6000803e3d6000fd5b505050506040513d6020811015612ef357600080fd5b5051612efb57fe5b806001600160a01b0316636a627842886040518263ffffffff1660e01b815260040180826001600160a01b03168152602001915050602060405180830381600087803b158015612f4a57600080fd5b505af1158015612f5e573d6000803e3d6000fd5b505050506040513d6020811015612f7457600080fd5b5051925034841015612f8c57612f8c338534036133e4565b505096509650969350505050565b6000808411612fda5760405162461bcd60e51b81526004018080602001828103825260258152602001806144466025913960400191505060405180910390fd5b600083118015612fea5750600082115b6130255760405162461bcd60e51b81526004018080602001828103825260228152602001806143b96022913960400191505060405180910390fd5b6000613033856103e561423f565b90506000613041828561423f565b9050600061305b83613055886103e861423f565b906142a2565b905080828161306657fe5b04979650505050505050565b60606002825110156130c6576040805162461bcd60e51b8152602060048201526018602482015277094deca98d2c4e4c2e4f27440929cac82989288bea082a8960431b604482015290519081900360640190fd5b815167ffffffffffffffff811180156130de57600080fd5b50604051908082528060200260200182016040528015613108578160200160208202803683370190505b509050828160018351038151811061311c57fe5b60209081029190910101528151600019015b80156131b25760008061316b8786600186038151811061314a57fe5b602002602001015187868151811061315e57fe5b60200260200101516142f1565b9150915061318d84848151811061317e57fe5b60200260200101518383613cfa565b84600185038151811061319c57fe5b602090810291909101015250506000190161312e565b509392505050565b60008060006131c98585613e8e565b604080516bffffffffffffffffffffffff19606094851b811660208084019190915293851b81166034830152825160288184030181526048830184528051908501206001600160f81b031960688401529a90941b9093166069840152607d8301989098527f0bbca9af0511ad1a1da383135cf3a8d2ac620e549ef9f6ae3a4c33c2fed0af91609d808401919091528851808403909101815260bd909201909752805196019590952095945050505050565b604080516001600160a01b038481166024830152604480830185905283518084039091018152606490920183526020820180516001600160e01b031663a9059cbb60e01b178152925182516000946060949389169392918291908083835b602083106132f75780518252601f1990920191602091820191016132d8565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114613359576040519150601f19603f3d011682016040523d82523d6000602084013e61335e565b606091505b509150915081801561338c57508051158061338c575080806020019051602081101561338957600080fd5b50515b6133dd576040805162461bcd60e51b815260206004820152601f60248201527f5472616e7366657248656c7065723a205452414e534645525f4641494c454400604482015290519081900360640190fd5b5050505050565b604080516000808252602082019092526001600160a01b0384169083906040518082805190602001908083835b602083106134305780518252601f199092019160209182019101613411565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d8060008114613492576040519150601f19603f3d011682016040523d82523d6000602084013e613497565b606091505b50509050806134d75760405162461bcd60e51b81526004018080602001828103825260248152602001806143db6024913960400191505060405180910390fd5b505050565b6060600282511015613530576040805162461bcd60e51b8152602060048201526018602482015277094deca98d2c4e4c2e4f27440929cac82989288bea082a8960431b604482015290519081900360640190fd5b815167ffffffffffffffff8111801561354857600080fd5b50604051908082528060200260200182016040528015613572578160200160208202803683370190505b509050828160008151811061358357fe5b60200260200101818152505060005b60018351038110156131b2576000806135c8878685815181106135b157fe5b602002602001015187866001018151811061315e57fe5b915091506135ea8484815181106135db57fe5b60200260200101518383612f9a565b8484600101815181106135f957fe5b60209081029190910101525050600101613592565b604080516001600160a01b0385811660248301528481166044830152606480830185905283518084039091018152608490920183526020820180516001600160e01b03166323b872dd60e01b17815292518251600094606094938a169392918291908083835b602083106136935780518252601f199092019160209182019101613674565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146136f5576040519150601f19603f3d011682016040523d82523d6000602084013e6136fa565b606091505b5091509150818015613728575080511580613728575080806020019051602081101561372557600080fd5b50515b6137635760405162461bcd60e51b81526004018080602001828103825260248152602001806144d06024913960400191505060405180910390fd5b505050505050565b60005b60018351038110156139a25760008084838151811061378957fe5b60200260200101518584600101815181106137a057fe5b60200260200101519150915060006137b88383613e8e565b50905060008785600101815181106137cc57fe5b60200260200101519050600080836001600160a01b0316866001600160a01b0316146137fa578260006137fe565b6000835b91509150600060028a510388106138155788613856565b6138567f0000000000000000000000000000000000000000000000000000000000000000878c8b6002018151811061384957fe5b60200260200101516131ba565b90506138837f000000000000000000000000000000000000000000000000000000000000000088886131ba565b6001600160a01b031663022c0d9f84848460006040519080825280601f01601f1916602001820160405280156138c0576020820181803683370190505b506040518563ffffffff1660e01b815260040180858152602001848152602001836001600160a01b0316815260200180602001828103825283818151815260200191508051906020019080838360005b83811015613928578181015183820152602001613910565b50505050905090810190601f1680156139555780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b15801561397757600080fd5b505af115801561398b573d6000803e3d6000fd5b50506001909901985061376e975050505050505050565b50505050565b60005b60018351038110156134d7576000808483815181106139c657fe5b60200260200101518584600101815181106139dd57fe5b60200260200101519150915060006139f58383613e8e565b5090506000613a257f000000000000000000000000000000000000000000000000000000000000000085856131ba565b9050600080600080846001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015613a6657600080fd5b505afa158015613a7a573d6000803e3d6000fd5b505050506040513d6060811015613a9057600080fd5b5080516020909101516001600160701b0391821693501690506000806001600160a01b038a811690891614613ac6578284613ac9565b83835b91509150613b1e828b6001600160a01b03166370a082318a6040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156113f257600080fd5b9550613b2b868383612f9a565b945050505050600080856001600160a01b0316886001600160a01b031614613b5557826000613b59565b6000835b91509150600060028c51038a10613b70578a613ba4565b613ba47f0000000000000000000000000000000000000000000000000000000000000000898e8d6002018151811061384957fe5b604080516000808252602082019283905263022c0d9f60e01b835260248201878152604483018790526001600160a01b038086166064850152608060848501908152845160a48601819052969750908c169563022c0d9f958a958a958a9591949193919260c486019290918190849084905b83811015613c2e578181015183820152602001613c16565b50505050905090810190601f168015613c5b5780820380516001836020036101000a031916815260200191505b5095505050505050600060405180830381600087803b158015613c7d57600080fd5b505af1158015613c91573d6000803e3d6000fd5b50506001909b019a506139ab9950505050505050505050565b80820382811115610cdc576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6000808411613d3a5760405162461bcd60e51b81526004018080602001828103825260268152602001806144206026913960400191505060405180910390fd5b600083118015613d4a5750600082115b613d855760405162461bcd60e51b81526004018080602001828103825260228152602001806143b96022913960400191505060405180910390fd5b6000613d9d6103e8613d97868861423f565b9061423f565b90506000613db16103e5613d978689613caa565b9050613dc86001828481613dc157fe5b04906142a2565b9695505050505050565b6000808411613e28576040805162461bcd60e51b815260206004820152601f60248201527f4a6f654c6962726172793a20494e53554646494349454e545f414d4f554e5400604482015290519081900360640190fd5b600083118015613e385750600082115b613e735760405162461bcd60e51b81526004018080602001828103825260228152602001806143b96022913960400191505060405180910390fd5b82613e7e858461423f565b81613e8557fe5b04949350505050565b600080826001600160a01b0316846001600160a01b03161415613ef8576040805162461bcd60e51b815260206004820152601f60248201527f4a6f654c6962726172793a204944454e544943414c5f41444452455353455300604482015290519081900360640190fd5b826001600160a01b0316846001600160a01b031610613f18578284613f1b565b83835b90925090506001600160a01b038216613f7b576040805162461bcd60e51b815260206004820152601860248201527f4a6f654c6962726172793a205a45524f5f414444524553530000000000000000604482015290519081900360640190fd5b9250929050565b60008060006001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e6a439058a8a6040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b031681526020019250505060206040518083038186803b15801561400e57600080fd5b505afa158015614022573d6000803e3d6000fd5b505050506040513d602081101561403857600080fd5b50516001600160a01b031614156140f6577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663c9c6539689896040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050602060405180830381600087803b1580156140c957600080fd5b505af11580156140dd573d6000803e3d6000fd5b505050506040513d60208110156140f357600080fd5b50505b6000806141247f00000000000000000000000000000000000000000000000000000000000000008b8b6142f1565b91509150816000148015614136575080155b1561414657879350869250614232565b6000614153898484613dd2565b90508781116141bc57858110156141b1576040805162461bcd60e51b815260206004820181905260248201527f4a6f65526f757465723a20494e53554646494349454e545f425f414d4f554e54604482015290519081900360640190fd5b889450925082614230565b60006141c9898486613dd2565b9050898111156141d557fe5b8781101561422a576040805162461bcd60e51b815260206004820181905260248201527f4a6f65526f757465723a20494e53554646494349454e545f415f414d4f554e54604482015290519081900360640190fd5b94508793505b505b5050965096945050505050565b600081158061425a5750508082028282828161425757fe5b04145b610cdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820182811015610cdc576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fd5b60008060006143008585613e8e565b5090506000806143118888886131ba565b6001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561434957600080fd5b505afa15801561435d573d6000803e3d6000fd5b505050506040513d606081101561437357600080fd5b5080516020909101516001600160701b0391821693501690506001600160a01b03878116908416146143a65780826143a9565b81815b9099909850965050505050505056fe4a6f654c6962726172793a20494e53554646494349454e545f4c49515549444954595472616e7366657248656c7065723a20415641585f5452414e534645525f4641494c45444a6f65526f757465723a204558434553534956455f494e5055545f414d4f554e544a6f654c6962726172793a20494e53554646494349454e545f4f55545055545f414d4f554e544a6f654c6962726172793a20494e53554646494349454e545f494e5055545f414d4f554e544a6f65526f757465723a20494e53554646494349454e545f4f55545055545f414d4f554e544a6f65526f757465723a204558504952454400000000000000000000000000004a6f65526f757465723a20494e56414c49445f504154480000000000000000005472616e7366657248656c7065723a205452414e534645525f46524f4d5f4641494c4544a26469706673582212203f3d67ce47da7aa25e492a7e03f86ea9251e9c9dc8ef6d26b44b2744d200957164736f6c634300060c00330000000000000000000000009ad6c38be94206ca50bb0d90783181662f0cfa10000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7

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

0000000000000000000000009ad6c38be94206ca50bb0d90783181662f0cfa10000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7

-----Decoded View---------------
Arg [0] : _factory (address): 0x9ad6c38be94206ca50bb0d90783181662f0cfa10
Arg [1] : _WAVAX (address): 0xb31f66aa3c1e785363f0875a1b74e27b85fd66c7

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 0000000000000000000000009ad6c38be94206ca50bb0d90783181662f0cfa10
Arg [1] : 000000000000000000000000b31f66aa3c1e785363f0875a1b74e27b85fd66c7


Deployed ByteCode Sourcemap

18948:21501:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19425:10;-1:-1:-1;;;;;19439:5:0;19425:19;;19418:27;;;;18948:21501;;;;;39413:252;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39413:252:0;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;40193:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;40193:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;40193:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;40193:253:0;;-1:-1:-1;40193:253:0;;-1:-1:-1;;;;;40193:253:0:i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25065:920;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25065:920:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;25993:947;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;25993:947:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;24305:752::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;24305:752:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;29739:748::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29739:748:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;29739:748:0;;;;;;;;;;;;-1:-1:-1;29739:748:0;-1:-1:-1;;;;;;29739:748:0;;;;;;;;:::i;36564:776::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36564:776:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;36564:776:0;;;;;;;;;;;;-1:-1:-1;36564:776:0;-1:-1:-1;;;;;;36564:776:0;;;;;;;;:::i;32961:971::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32961:971:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32961:971:0;;;;;;;;;;;;-1:-1:-1;32961:971:0;-1:-1:-1;;;;;;32961:971:0;;;;;;;;:::i;19078:39::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;19078:39:0;;;;;;;;;;;;;;27019:779;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27019:779:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;38252:881::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38252:881:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;38252:881:0;;;;;;;;;;;;-1:-1:-1;38252:881:0;-1:-1:-1;;;;;;38252:881:0;;;;;;;;:::i;32041:912::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32041:912:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;32041:912:0;;;;;;;;;;;;-1:-1:-1;32041:912:0;-1:-1:-1;;;;;;32041:912:0;;;;;;;;:::i;39673:251::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39673:251:0;;;;;;;;;;;;:::i;30495:689::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30495:689:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;30495:689:0;;;;;;;;;;;;-1:-1:-1;30495:689:0;-1:-1:-1;;;;;;30495:689:0;;;;;;;;:::i;33940:931::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33940:931:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;33940:931:0;;;;;;;;;;;;-1:-1:-1;33940:931:0;-1:-1:-1;;;;;;33940:931:0;;;;;;;;:::i;27806:928::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;27806:928:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;31192:841::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31192:841:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;31192:841:0;;;;;;;;;;;;-1:-1:-1;31192:841:0;-1:-1:-1;;;;;;31192:841:0;;;;;;;;:::i;39177:228::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39177:228:0;;;;;;;;;;;;:::i;23367:930::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;23367:930:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;19030:41::-;;;;;;;;;;;;;:::i;37348:896::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37348:896:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;37348:896:0;;;;;;;;;;;;-1:-1:-1;37348:896:0;-1:-1:-1;;;;;;37348:896:0;;;;;;;;:::i;39932:253::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39932:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;39932:253:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39932:253:0;;-1:-1:-1;39932:253:0;;-1:-1:-1;;;;;39932:253:0:i;21256:939::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;21256:939:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;22203:1121;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;22203:1121:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;39413:252::-;39564:17;39601:56;39625:8;39635:9;39646:10;39601:23;:56::i;:::-;39594:63;39413:252;-1:-1:-1;;;;39413:252:0:o;40193:253::-;40340:24;40389:49;40413:7;40422:9;40433:4;40389:23;:49::i;:::-;40382:56;;40193:253;;;;;:::o;25065:920::-;25410:15;25427;25455:12;25470:43;25489:7;25498:6;25506;25470:18;:43::i;:::-;25455:58;;25524:13;25540:10;:36;;25567:9;25540:36;;;-1:-1:-1;;25540:36:0;25587:176;;;-1:-1:-1;;;25587:176:0;;25623:10;25587:176;;;;25656:4;25587:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25524:52;;-1:-1:-1;;;;;;25587:21:0;;;;;:176;;;;;-1:-1:-1;;25587:176:0;;;;;;;;-1:-1:-1;25587:21:0;:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25795:182;25825:6;25846;25867:9;25891:10;25916;25941:2;25958:8;25795:15;:182::i;:::-;25774:203;;;;;;;;25065:920;;;;;;;;;;;;;;;;:::o;25993:947::-;26359:19;26380:18;26416:12;26431:41;26450:7;26459:5;26466;26431:18;:41::i;:::-;26416:56;;26483:13;26499:10;:36;;26526:9;26499:36;;;-1:-1:-1;;26499:36:0;26546:176;;;-1:-1:-1;;;26546:176:0;;26582:10;26546:176;;;;26615:4;26546:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26483:52;;-1:-1:-1;;;;;;26546:21:0;;;;;:176;;;;;-1:-1:-1;;26546:176:0;;;;;;;;-1:-1:-1;26546:21:0;:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26761:171;26795:5;26815:9;26839:14;26868:13;26896:2;26913:8;26761:19;:171::i;:::-;26733:199;;;;-1:-1:-1;25993:947:0;-1:-1:-1;;;;;;;;;;;;;25993:947:0:o;24305:752::-;24601:19;24622:18;24573:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;24686:198:::1;24716:5;24736;24756:9;24780:14;24809:13;24845:4;24865:8;24686:15;:198::i;:::-;24658:226:::0;;-1:-1:-1;24658:226:0;-1:-1:-1;24895:51:0::1;24923:5:::0;24930:2;24658:226;24895:27:::1;:51::i;:::-;24964:5;-1:-1:-1::0;;;;;24957:22:0::1;;24980:10;24957:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;25002:47;25034:2;25038:10;25002:31;:47::i;:::-;24305:752:::0;;;;;;;;;;:::o;29739:748::-;30017:24;29989:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;30069:49:::1;30094:7;30103:8;30113:4;;30069:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;30069:24:0::1;::::0;-1:-1:-1;;;30069:49:0:i:1;:::-;30059:59;;30182:12;30151:7;30176:1;30159:7;:14;:18;30151:27;;;;;;;;;;;;;;:43;;30129:130;;;;-1:-1:-1::0;;;30129:130:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30270:174;30316:4;;30321:1;30316:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30316:7:0::1;30338:10;30363:45;30382:7;30391:4;;30396:1;30391:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30391:7:0::1;30400:4;;30405:1;30400:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;30400:7:0::1;30363:18;:45::i;:::-;30423:7;30431:1;30423:10;;;;;;;;;;;;;;30270:31;:174::i;:::-;30455:24;30461:7;30470:4;;30455:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;30476:2:0;;-1:-1:-1;30455:5:0::1;::::0;-1:-1:-1;;30455:24:0:i:1;:::-;29739:748:::0;;;;;;;;;:::o;36564:776::-;36807:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;36828:172:::1;36874:4;;36879:1;36874:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;36874:7:0::1;36896:10;36921:45;36940:7;36949:4;;36954:1;36949:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;36949:7:0::1;36958:4;;36963:1;36958:7;;;;;;36921:45;36981:8;36828:31;:172::i;:::-;37011:21;37045:4:::0;;-1:-1:-1;;37050:15:0;;37045:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37045:21:0::1;-1:-1:-1::0;;;;;37035:42:0::1;;37078:2;37035:46;;;;;;;;;;;;;-1:-1:-1::0;;;;;37035:46:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;37035:46:0;37092:44:::1;::::0;;37035:46:::1;37092:44:::0;;::::1;::::0;;;;;;;;;;;37035:46;;-1:-1:-1;37092:44:0::1;::::0;;;37127:4;;;;;;37092:44;::::1;::::0;37127:4;;37092:44;37127:4;37092:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;37133:2:0;;-1:-1:-1;37092:34:0::1;::::0;-1:-1:-1;;37092:44:0:i:1;:::-;37255:12:::0;37169:65:::1;37220:13:::0;37179:4;;-1:-1:-1;;37184:15:0;;37179:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37179:21:0::1;-1:-1:-1::0;;;;;37169:42:0::1;;37212:2;37169:46;;;;;;;;;;;;;-1:-1:-1::0;;;;;37169:46:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;37169:46:0;;:50:::1;:65::i;:::-;:98;;37147:185;;;;-1:-1:-1::0;;;37147:185:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19240:1;36564:776:::0;;;;;;;:::o;32961:971::-;33237:24;33209:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;33312:5:0::1;33287:30;:4:::0;;-1:-1:-1;;33292:15:0;;33287:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;33287:21:0::1;-1:-1:-1::0;;;;;33287:30:0::1;;33279:66;;;::::0;;-1:-1:-1;;;33279:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;33279:66:0;;;;;;;;;;;;;::::1;;33366:49;33391:7;33400:8;33410:4;;33366:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;33366:24:0::1;::::0;-1:-1:-1;;;33366:49:0:i:1;:::-;33356:59;;33479:12;33448:7;33473:1;33456:7;:14;:18;33448:27;;;;;;;;;;;;;;:43;;33426:130;;;;-1:-1:-1::0;;;33426:130:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33567:174;33613:4;;33618:1;33613:7;;;;;;33567:174;33752:35;33758:7;33767:4;;33752:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;33781:4:0::1;::::0;-1:-1:-1;33752:5:0::1;::::0;-1:-1:-1;;33752:35:0:i:1;:::-;33805:5;-1:-1:-1::0;;;;;33798:22:0::1;;33821:7;33846:1;33829:7;:14;:18;33821:27;;;;;;;;;;;;;;33798:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33860:64;33892:2;33896:7;33921:1;33904:7;:14;:18;33896:27;;;;;;;;;;;;;;33860:31;:64::i;19078:39::-:0;;;:::o;27019:779::-;27299:18;27280:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;27347:198:::1;27377:5;27397;27417:9;27441:14;27470:13;27506:4;27526:8;27347:15;:198::i;:::-;27330:215;;;;;;27556:131;27598:5;27618:2;27645:5;-1:-1:-1::0;;;;;27635:26:0::1;;27670:4;27635:41;;;;;;;;;;;;;-1:-1:-1::0;;;;;27635:41:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;27635:41:0;27556:27:::1;:131::i;:::-;27705:5;-1:-1:-1::0;;;;;27698:22:0::1;;27721:10;27698:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;27743:47;27775:2;27779:10;27743:31;:47::i;38252:881::-:0;38493:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;38547:5:0::1;38522:30;:4:::0;;-1:-1:-1;;38527:15:0;;38522:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;38522:21:0::1;-1:-1:-1::0;;;;;38522:30:0::1;;38514:66;;;::::0;;-1:-1:-1;;;38514:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;38514:66:0;;;;;;;;;;;;;::::1;;38591:172;38637:4;;38642:1;38637:7;;;;;;38591:172;38774:55;38809:4;;38774:55;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;38823:4:0::1;::::0;-1:-1:-1;38774:34:0::1;::::0;-1:-1:-1;;38774:55:0:i:1;:::-;38840:17;38870:5;-1:-1:-1::0;;;;;38860:26:0::1;;38895:4;38860:41;;;;;;;;;;;;;-1:-1:-1::0;;;;;38860:41:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;38860:41:0;;-1:-1:-1;38934:25:0;;::::1;;38912:112;;;;-1:-1:-1::0;;;38912:112:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39042:5;-1:-1:-1::0;;;;;39035:22:0::1;;39058:9;39035:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;39079:46;39111:2;39115:9;39079:31;:46::i;32041:912::-:0;32317:24;32289:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;32392:5:0::1;32367:30;:4:::0;;-1:-1:-1;;32372:15:0;;32367:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;32367:21:0::1;-1:-1:-1::0;;;;;32367:30:0::1;;32359:66;;;::::0;;-1:-1:-1;;;32359:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;32359:66:0;;;;;;;;;;;;;::::1;;32446:49;32470:7;32479:9;32490:4;;32446:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;32446:23:0::1;::::0;-1:-1:-1;;;32446:49:0:i:1;:::-;32436:59;;32528:11;32514:7;32522:1;32514:10;;;;;;;;;;;;;;:25;;32506:71;;;;-1:-1:-1::0;;;32506:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39673:251:::0;39824:16;39860:56;39883:9;39894;39905:10;39860:22;:56::i;30495:689::-;30773:24;30745:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;30825:49:::1;30849:7;30858:9;30869:4;;30825:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;30825:23:0::1;::::0;-1:-1:-1;;;30825:49:0:i:1;:::-;30815:59;;30907:11;30893:7;30901:1;30893:10;;;;;;;;;;;;;;:25;;30885:71;;;;-1:-1:-1::0;;;30885:71:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33940:931:::0;34203:24;34175:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;34264:5:::1;-1:-1:-1::0;;;;;34253:16:0::1;:4;;34258:1;34253:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;34253:7:0::1;-1:-1:-1::0;;;;;34253:16:0::1;;34245:52;;;::::0;;-1:-1:-1;;;34245:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;34245:52:0;;;;;;;;;;;;;::::1;;34318:49;34342:7;34351:9;34362:4;;34318:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;34318:23:0::1;::::0;-1:-1:-1;;;34318:49:0:i:1;:::-;34308:59;;34400:9;34386:7;34394:1;34386:10;;;;;;;;;;;;;;:23;;34378:69;;;;-1:-1:-1::0;;;34378:69:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34465:5;-1:-1:-1::0;;;;;34458:21:0::1;;34487:7;34495:1;34487:10;;;;;;;;;;;;;;34458:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;34539:5;-1:-1:-1::0;;;;;34532:22:0::1;;34573:45;34592:7;34601:4;;34606:1;34601:7;;;;;;34573:45;34637:7;34645:1;34637:10;;;;;;;;;;;;;;34532:130;;;;;;;;;;;;;-1:-1:-1::0;;;;;34532:130:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;34532:130:0;34511:162:::1;;;;34684:24;34690:7;34699:4;;34684:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;34705:2:0;;-1:-1:-1;34684:5:0::1;::::0;-1:-1:-1;;34684:24:0:i:1;:::-;34771:7;34779:1;34771:10;;;;;;;;;;;;;;34759:9;:22;34755:108;;;34796:67;34828:10;34852:7;34860:1;34852:10;;;;;;;;;;;;;;34840:9;:22;34796:31;:67::i;:::-;33940:931:::0;;;;;;;;:::o;27806:928::-;28165:18;28196:12;28211:41;28230:7;28239:5;28246;28211:18;:41::i;:::-;28196:56;;28263:13;28279:10;:36;;28306:9;28279:36;;;-1:-1:-1;;28279:36:0;28326:176;;;-1:-1:-1;;;28326:176:0;;28362:10;28326:176;;;;28395:4;28326:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28263:52;;-1:-1:-1;;;;;;28326:21:0;;;;;:176;;;;;-1:-1:-1;;28326:176:0;;;;;;;;-1:-1:-1;28326:21:0;:176;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28526:200;28589:5;28609:9;28633:14;28662:13;28690:2;28707:8;28526:48;:200::i;:::-;28513:213;27806:928;-1:-1:-1;;;;;;;;;;;;;27806:928:0:o;31192:841::-;31458:24;31430:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;31519:5:::1;-1:-1:-1::0;;;;;31508:16:0::1;:4;;31513:1;31508:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;31508:7:0::1;-1:-1:-1::0;;;;;31508:16:0::1;;31500:52;;;::::0;;-1:-1:-1;;;31500:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;31500:52:0;;;;;;;;;;;;;::::1;;31573:50;31598:7;31607:9;31618:4;;31573:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;31573:24:0::1;::::0;-1:-1:-1;;;31573:50:0:i:1;:::-;31563:60;;31687:12;31656:7;31681:1;31664:7;:14;:18;31656:27;;;;;;;;;;;;;;:43;;31634:130;;;;-1:-1:-1::0;;;31634:130:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31782:5;-1:-1:-1::0;;;;;31775:21:0::1;;31804:7;31812:1;31804:10;;;;;;;;;;;;;;31775:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;31856:5;-1:-1:-1::0;;;;;31849:22:0::1;;31890:45;31909:7;31918:4;;31923:1;31918:7;;;;;;31890:45;31954:7;31962:1;31954:10;;;;;;;;;;;;;;31849:130;;;;;;;;;;;;;-1:-1:-1::0;;;;;31849:130:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;31849:130:0;31828:162:::1;;;;32001:24;32007:7;32016:4;;32001:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;32022:2:0;;-1:-1:-1;32001:5:0::1;::::0;-1:-1:-1;;32001:24:0:i:1;39177:228::-:0;39317:15;39352:45;39369:7;39378:8;39388;39352:16;:45::i;23367:930::-;23678:15;23695;23650:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;23728:12:::1;23743:43;23762:7;23771:6;23779;23743:18;:43::i;:::-;23797:56;::::0;;-1:-1:-1;;;23797:56:0;;23825:10:::1;23797:56;::::0;::::1;::::0;-1:-1:-1;;;;;23797:27:0;::::1;:56:::0;;;;;;;;;;;;;;23728:58;;-1:-1:-1;23797:27:0;;::::1;::::0;:56;;;;;::::1;::::0;;;;;;;;;-1:-1:-1;23797:27:0;:56;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;;23927:23:0::1;::::0;;-1:-1:-1;;;23927:23:0;;-1:-1:-1;;;;;23927:23:0;;::::1;;::::0;::::1;::::0;;;23891:15:::1;::::0;;;23927:19;;::::1;::::0;::::1;::::0;:23;;;;;;;;;;;23891:15;23927:19;:23;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23927:23:0;;::::1;::::0;;::::1;::::0;;;-1:-1:-1;23927:23:0;-1:-1:-1;23962:14:0::1;23982:37;24004:6:::0;24012;23982:21:::1;:37::i;:::-;23961:58;;;24061:6;-1:-1:-1::0;;;;;24051:16:0::1;:6;-1:-1:-1::0;;;;;24051:16:0::1;;:84;;24118:7;24127;24051:84;;;24084:7;24093;24051:84;24030:105:::0;;-1:-1:-1;24030:105:0;-1:-1:-1;24154:21:0;;::::1;;24146:66;;;::::0;;-1:-1:-1;;;24146:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;24242:10;24231:7;:21;;24223:66;;;::::0;;-1:-1:-1;;;24223:66:0;;::::1;;::::0;::::1;::::0;;;;;;;::::1;::::0;;;;;;;;;;;;;::::1;;19240:1;;;;23367:930:::0;;;;;;;;;;;:::o;19030:41::-;;;:::o;37348:896::-;37570:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;37610:5:::1;-1:-1:-1::0;;;;;37599:16:0::1;:4;;37604:1;37599:7;;;;;;;;;;;;;-1:-1:-1::0;;;;;37599:7:0::1;-1:-1:-1::0;;;;;37599:16:0::1;;37591:52;;;::::0;;-1:-1:-1;;;37591:52:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;;;;;;;;;37591:52:0;;;;;;;;;;;;;::::1;;37654:16;37673:9;37654:28;;37700:5;-1:-1:-1::0;;;;;37693:21:0::1;;37722:8;37693:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;37772:5;-1:-1:-1::0;;;;;37765:22:0::1;;37806:45;37825:7;37834:4;;37839:1;37834:7;;;;;;37806:45;37870:8;37765:128;;;;;;;;;;;;;-1:-1:-1::0;;;;;37765:128:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;37765:128:0;37744:160:::1;;;;37915:21;37949:4:::0;;-1:-1:-1;;37954:15:0;;37949:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;37949:21:0::1;-1:-1:-1::0;;;;;37939:42:0::1;;37982:2;37939:46;;;;;;;;;;;;;-1:-1:-1::0;;;;;37939:46:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;37939:46:0;37996:44:::1;::::0;;37939:46:::1;37996:44:::0;;::::1;::::0;;;;;;;;;;;37939:46;;-1:-1:-1;37996:44:0::1;::::0;;;38031:4;;;;;;37996:44;::::1;::::0;38031:4;;37996:44;38031:4;37996:44;::::1;;::::0;::::1;::::0;;;;-1:-1:-1;38037:2:0;;-1:-1:-1;37996:34:0::1;::::0;-1:-1:-1;;37996:44:0:i:1;:::-;38159:12:::0;38073:65:::1;38124:13:::0;38083:4;;-1:-1:-1;;38088:15:0;;38083:21;;::::1;;;;;;;;;;;-1:-1:-1::0;;;;;38083:21:0::1;-1:-1:-1::0;;;;;38073:42:0::1;;38116:2;38073:46;;;;;;;;;;;;;-1:-1:-1::0;;;;;38073:46:0::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;39932:253:::0;40079:24;40128:49;40153:7;40162:8;40172:4;40128:24;:49::i;21256:939::-;21618:15;21648;21678:17;21576:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;21744:174:::1;21772:6;21793;21814:14;21843;21872:10;21897;21744:13;:174::i;:::-;21723:195:::0;;-1:-1:-1;21723:195:0;-1:-1:-1;21929:12:0::1;21944:43;21963:7;21972:6:::0;21980;21944:18:::1;:43::i;:::-;21929:58;;21998:66;22030:6;22038:10;22050:4;22056:7;21998:31;:66::i;:::-;22075;22107:6;22115:10;22127:4;22133:7;22075:31;:66::i;:::-;22173:4;-1:-1:-1::0;;;;;22164:19:0::1;;22184:2;22164:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;22164:23:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;22164:23:0;21256:939;;;;-1:-1:-1;22164:23:0;;-1:-1:-1;21256:939:0;;-1:-1:-1;;;;;;;;;21256:939:0:o;22203:1121::-;22538:19;22572:18;22605:17;22496:8;19191:15;19179:8;:27;;19171:58;;;;;-1:-1:-1;;;19171:58:0;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;19171:58:0;;;;;;;;;;;;;;;22678:178:::1;22706:5;22726;22746:18;22779:9;22803:14;22832:13;22678;:178::i;:::-;22650:206:::0;;-1:-1:-1;22650:206:0;-1:-1:-1;22867:12:0::1;22882:41;22901:7;22910:5:::0;22917::::1;22882:18;:41::i;:::-;22867:56;;22934:69;22966:5;22973:10;22985:4;22991:11;22934:31;:69::i;:::-;23021:5;-1:-1:-1::0;;;;;23014:21:0::1;;23043:10;23014:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;23081:5;-1:-1:-1::0;;;;;23074:22:0::1;;23097:4;23103:10;23074:40;;;;;;;;;;;;;-1:-1:-1::0;;;;;23074:40:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23074:40:0;23067:48:::1;;;;23147:4;-1:-1:-1::0;;;;;23138:19:0::1;;23158:2;23138:23;;;;;;;;;;;;;-1:-1:-1::0;;;;;23138:23:0::1;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;23138:23:0;;-1:-1:-1;23212:9:0::1;:22:::0;-1:-1:-1;23208:108:0::1;;;23249:67;23281:10;23305;23293:9;:22;23249:31;:67::i;:::-;19240:1;22203:1121:::0;;;;;;;;;;;:::o;6242:597::-;6378:17;6427:1;6416:8;:12;6408:62;;;;-1:-1:-1;;;6408:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6515:1;6503:9;:13;:31;;;;;6533:1;6520:10;:14;6503:31;6481:115;;;;-1:-1:-1;;;6481:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6607:23;6633:17;:8;6646:3;6633:12;:17::i;:::-;6607:43;-1:-1:-1;6661:17:0;6681:31;6607:43;6701:10;6681:19;:31::i;:::-;6661:51;-1:-1:-1;6723:19:0;6745:40;6769:15;6745:19;:9;6759:4;6745:13;:19::i;:::-;:23;;:40::i;:::-;6723:62;;6820:11;6808:9;:23;;;;;;;6242:597;-1:-1:-1;;;;;;;6242:597:0:o;8295:644::-;8433:24;8493:1;8478:4;:11;:16;;8470:53;;;;;-1:-1:-1;;;8470:53:0;;;;;;;;;;;;-1:-1:-1;;;8470:53:0;;;;;;;;;;;;;;;8558:4;:11;8544:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8544:26:0;;8534:36;;8611:9;8581:7;8606:1;8589:7;:14;:18;8581:27;;;;;;;;;;;;;;;;;:39;8648:11;;-1:-1:-1;;8648:15:0;8631:301;8665:5;;8631:301;;8693:17;8712:18;8734:108;8764:7;8790:4;8799:1;8795;:5;8790:11;;;;;;;;;;;;;;8820:4;8825:1;8820:7;;;;;;;;;;;;;;8734:11;:108::i;:::-;8692:150;;;;8874:46;8886:7;8894:1;8886:10;;;;;;;;;;;;;;8898:9;8909:10;8874:11;:46::i;:::-;8857:7;8869:1;8865;:5;8857:14;;;;;;;;;;;;;;;;;:63;-1:-1:-1;;;;8672:3:0;8631:301;;;;8295:644;;;;;:::o;4441:633::-;4564:12;4590:14;4606;4624:26;4635:6;4643;4624:10;:26::i;:::-;4869:32;;;-1:-1:-1;;4869:32:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4859:43;;;;;;-1:-1:-1;;;;;;4748:273:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4716:324;;;;;;;;;4441:633;-1:-1:-1;;;;;4441:633:0:o;9642:459::-;9888:45;;;-1:-1:-1;;;;;9888:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9888:45:0;-1:-1:-1;;;9888:45:0;;;9863:81;;;;9828:12;;9842:17;;9863:10;;;;9888:45;9863:81;;;9888:45;9863:81;;9888:45;9863:81;;;;;;;;;;-1:-1:-1;;9863:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9827:117;;;;9977:7;:57;;;;-1:-1:-1;9989:11:0;;:16;;:44;;;10020:4;10009:24;;;;;;;;;;;;;;;-1:-1:-1;10009:24:0;9989:44;9955:138;;;;;-1:-1:-1;;;9955:138:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;9642:459;;;;;:::o;10626:202::-;10740:12;;;10700;10740;;;;;;;;;-1:-1:-1;;;;;10718:7:0;;;10733:5;;10718:35;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10718:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10699:54;;;10772:7;10764:56;;;;-1:-1:-1;;;10764:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10626:202;;;:::o;7591:623::-;7729:24;7789:1;7774:4;:11;:16;;7766:53;;;;;-1:-1:-1;;;7766:53:0;;;;;;;;;;;;-1:-1:-1;;;7766:53:0;;;;;;;;;;;;;;;7854:4;:11;7840:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7840:26:0;;7830:36;;7890:8;7877:7;7885:1;7877:10;;;;;;;;;;;;;:21;;;;;7914:9;7909:298;7943:1;7929:4;:11;:15;7925:1;:19;7909:298;;;7967:17;7986:18;8008:108;8038:7;8064:4;8069:1;8064:7;;;;;;;;;;;;;;8090:4;8095:1;8099;8095:5;8090:11;;;;;;;8008:108;7966:150;;;;8148:47;8161:7;8169:1;8161:10;;;;;;;;;;;;;;8173:9;8184:10;8148:12;:47::i;:::-;8131:7;8139:1;8143;8139:5;8131:14;;;;;;;;;;;;;;;;;:64;-1:-1:-1;;7946:3:0;;7909:298;;10109:509;10394:51;;;-1:-1:-1;;;;;10394:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10394:51:0;-1:-1:-1;;;10394:51:0;;;10369:87;;;;10334:12;;10348:17;;10369:10;;;;10394:51;10369:87;;;10394:51;10369:87;;10394:51;10369:87;;;;;;;;;;-1:-1:-1;;10369:87:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10333:123;;;;10489:7;:57;;;;-1:-1:-1;10501:11:0;;:16;;:44;;;10532:4;10521:24;;;;;;;;;;;;;;;-1:-1:-1;10521:24:0;10501:44;10467:143;;;;-1:-1:-1;;;10467:143:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10109:509;;;;;;:::o;28845:886::-;28989:9;28984:740;29018:1;29004:4;:11;:15;29000:1;:19;28984:740;;;29042:13;29057:14;29076:4;29081:1;29076:7;;;;;;;;;;;;;;29085:4;29090:1;29094;29090:5;29085:11;;;;;;;;;;;;;;29041:56;;;;29113:14;29133:36;29155:5;29162:6;29133:21;:36::i;:::-;29112:57;;;29184:17;29204:7;29212:1;29216;29212:5;29204:14;;;;;;;;;;;;;;29184:34;;29234:18;29254;29285:6;-1:-1:-1;;;;;29276:15:0;:5;-1:-1:-1;;;;;29276:15:0;;:101;;29355:9;29374:1;29276:101;;;29320:1;29324:9;29276:101;29233:144;;;;29392:10;29423:1;29409:4;:11;:15;29405:1;:19;:110;;29512:3;29405:110;;;29444:48;29463:7;29472:6;29480:4;29485:1;29489;29485:5;29480:11;;;;;;;;;;;;;;29444:18;:48::i;:::-;29392:123;;29539:42;29558:7;29567:5;29574:6;29539:18;:42::i;:::-;-1:-1:-1;;;;;29530:57:0;;29606:10;29635;29664:2;29695:1;29685:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;29685:12:0;;29530:182;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;29530:182:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;29021:3:0;;;;;-1:-1:-1;28984:740:0;;-1:-1:-1;;;;;;;;28984:740:0;;;28845:886;;;:::o;35018:1538::-;35156:9;35151:1398;35185:1;35171:4;:11;:15;35167:1;:19;35151:1398;;;35209:13;35224:14;35243:4;35248:1;35243:7;;;;;;;;;;;;;;35252:4;35257:1;35261;35257:5;35252:11;;;;;;;;;;;;;;35208:56;;;;35280:14;35300:36;35322:5;35329:6;35300:21;:36::i;:::-;35279:57;;;35351:13;35394:42;35413:7;35422:5;35429:6;35394:18;:42::i;:::-;35351:100;;35466:19;35500:20;35612:16;35630;35652:4;-1:-1:-1;;;;;35652:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;35652:18:0;;;;;;;-1:-1:-1;;;;;35611:59:0;;;;-1:-1:-1;35611:59:0;;-1:-1:-1;35690:20:0;;-1:-1:-1;;;;;35737:15:0;;;;;;;:103;;35821:8;35831;35737:103;;;35777:8;35787;35737:103;35689:151;;;;35873:99;35941:12;35883:5;-1:-1:-1;;;;;35873:26:0;;35908:4;35873:41;;;;;;;;;;;;;-1:-1:-1;;;;;35873:41:0;;;;;;;;;;;;;;;;;;;;;;;;;;:99;35859:113;;36006:147;36052:11;36086:12;36121:13;36006:23;:147::i;:::-;35991:162;;35151:1398;;;;36184:18;36204;36235:6;-1:-1:-1;;;;;36226:15:0;:5;-1:-1:-1;;;;;36226:15:0;;:107;;36308:12;36330:1;36226:107;;;36270:1;36274:12;36226:107;36183:150;;;;36348:10;36379:1;36365:4;:11;:15;36361:1;:19;:110;;36468:3;36361:110;;;36400:48;36419:7;36428:6;36436:4;36441:1;36445;36441:5;36436:11;;;;;;;36400:48;36524:12;;;36534:1;36524:12;;;;;;;;;;-1:-1:-1;;;36486:51:0;;;;;;;;;;;;;;-1:-1:-1;;;;;36486:51:0;;;;;;;;;;;;;;;;;;;;;;36348:123;;-1:-1:-1;36486:9:0;;;;;;36496:10;;36508;;36348:123;;36524:12;;36486:51;;;;;;;;36524:12;;36486:51;;;;36524:12;;36486:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35188:3:0;;;;;-1:-1:-1;35151:1398:0;;-1:-1:-1;;;;;;;;;;35151:1398:0;3400:138;3493:5;;;3488:16;;;;3480:50;;;;;-1:-1:-1;;;3480:50:0;;;;;;;;;;;;-1:-1:-1;;;3480:50:0;;;;;;;;;;;;;;6960:549;7096:16;7145:1;7133:9;:13;7125:64;;;;-1:-1:-1;;;7125:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7234:1;7222:9;:13;:31;;;;;7252:1;7239:10;:14;7222:31;7200:115;;;;-1:-1:-1;;;7200:115:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7326:17;7346:34;7375:4;7346:24;:9;7360;7346:13;:24::i;:::-;:28;;:34::i;:::-;7326:54;-1:-1:-1;7391:19:0;7413:34;7443:3;7413:25;:10;7428:9;7413:14;:25::i;:34::-;7391:56;;7469:32;7499:1;7482:11;7470:9;:23;;;;;;;7469:29;:32::i;:::-;7458:43;6960:549;-1:-1:-1;;;;;;6960:549:0:o;5728:392::-;5853:15;5899:1;5889:7;:11;5881:55;;;;;-1:-1:-1;;;5881:55:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;5980:1;5969:8;:12;:28;;;;;5996:1;5985:8;:12;5969:28;5947:112;;;;-1:-1:-1;;;5947:112:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6104:8;6080:21;:7;6092:8;6080:11;:21::i;:::-;:32;;;;;;;5728:392;-1:-1:-1;;;;5728:392:0:o;3954:395::-;4056:14;4072;4122:6;-1:-1:-1;;;;;4112:16:0;:6;-1:-1:-1;;;;;4112:16:0;;;4104:60;;;;;-1:-1:-1;;;4104:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;4203:6;-1:-1:-1;;;;;4194:15:0;:6;-1:-1:-1;;;;;4194:15:0;;:79;;4258:6;4266;4194:79;;;4226:6;4234;4194:79;4175:98;;-1:-1:-1;4175:98:0;-1:-1:-1;;;;;;4292:20:0;;4284:57;;;;;-1:-1:-1;;;4284:57:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3954:395;;;;;:::o;19550:1698::-;19780:15;19797;19937:1;-1:-1:-1;;;;;19881:58:0;19893:7;-1:-1:-1;;;;;19881:28:0;;19910:6;19918;19881:44;;;;;;;;;;;;;-1:-1:-1;;;;;19881:44:0;;;;;;-1:-1:-1;;;;;19881:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19881:44:0;-1:-1:-1;;;;;19881:58:0;;19877:138;;;19968:7;-1:-1:-1;;;;;19956:31:0;;19988:6;19996;19956:47;;;;;;;;;;;;;-1:-1:-1;;;;;19956:47:0;;;;;;-1:-1:-1;;;;;19956:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19877:138:0;20026:16;20044;20064:97;20101:7;20123:6;20144;20064:22;:97::i;:::-;20025:136;;;;20176:8;20188:1;20176:13;:30;;;;-1:-1:-1;20193:13:0;;20176:30;20172:1069;;;20245:14;;-1:-1:-1;20261:14:0;;-1:-1:-1;20172:1069:0;;;20309:22;20334:118;20369:14;20402:8;20429;20334:16;:118::i;:::-;20309:143;;20489:14;20471;:32;20467:763;;20572:10;20554:14;:28;;20524:134;;;;;-1:-1:-1;;;20524:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20699:14;;-1:-1:-1;20715:14:0;-1:-1:-1;20715:14:0;20467:763;;;20771:22;20796:134;20835:14;20872:8;20903;20796:16;:134::i;:::-;20771:159;;20974:14;20956;:32;;20949:40;;;;21056:10;21038:14;:28;;21008:134;;;;;-1:-1:-1;;;21008:134:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21183:14;-1:-1:-1;21199:14:0;;-1:-1:-1;20467:763:0;20172:1069;;19550:1698;;;;;;;;;;;:::o;3546:151::-;3604:9;3634:6;;;:30;;-1:-1:-1;;3649:5:0;;;3663:1;3658;3649:5;3658:1;3644:15;;;;;:20;3634:30;3626:63;;;;;-1:-1:-1;;;3626:63:0;;;;;;;;;;;;-1:-1:-1;;;3626:63:0;;;;;;;;;;;;;;3255:137;3348:5;;;3343:16;;;;3335:49;;;;;-1:-1:-1;;;3335:49:0;;;;;;;;;;;;-1:-1:-1;;;3335:49:0;;;;;;;;;;;;;;5132:483;5259:16;5277;5307:14;5327:26;5338:6;5346;5327:10;:26::i;:::-;5306:47;;;5365:16;5383;5428:32;5436:7;5445:6;5453;5428:7;:32::i;:::-;-1:-1:-1;;;;;5405:78:0;;:80;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5405:80:0;;;;;;;-1:-1:-1;;;;;5364:121:0;;;;-1:-1:-1;5364:121:0;;-1:-1:-1;;;;;;5519:16:0;;;;;;;:88;;5588:8;5598;5519:88;;;5552:8;5562;5519:88;5496:111;;;;-1:-1:-1;5132:483:0;-1:-1:-1;;;;;;;5132:483:0:o

Swarm Source

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