Contract 0x9Ad6C38BE94206cA50bb0d90783181662f0Cfa10 2

Contract Overview

Balance:
0 AVAX

AVAX Value:
$0.00

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x8ccc8d8b8ca4e992b8657e42d36e80703b36a69b5af36d35e8f0651eecca276bCreate Pair146401352022-05-13 11:56:593 days 20 hrs ago0xb711eb61b1903ef44b89c42bb5c00abf4f6bc32b IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.1511337893774.257074154
0x4141f1163f1b45e726730850e3841022a6a12690b259eb37d0e2b26716722274Create Pair146353902022-05-13 9:17:333 days 23 hrs ago0xb711eb61b1903ef44b89c42bb5c00abf4f6bc32b IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.225817509253110.952223124
0xfe7654ae8d86b37966e190d1d703b3b2f10f19c70e12dc5fb2f82274809b9cb8Create Pair145463772022-05-11 8:02:556 days 45 mins ago0xaf7ebf3480b5684e4f40ae435074c09e6dc0d2a9 IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.604039459922296.786202074
0xee8079fbf18f010a1fe1ff04b00d94b49d3dd2d6cc2f1bdf6c36dbf7e815cdc8Create Pair145084782022-05-10 10:51:396 days 21 hrs ago0xaf7ebf3480b5684e4f40ae435074c09e6dc0d2a9 IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.10300290262750.608763337
0x523e4127a0609d7d165beac903adeab0853693e45350fed2fe875bffc48fdc3fCreate Pair142621852022-05-04 13:07:4712 days 19 hrs ago0x13a96ede649356c25c9157815f45fce3dda3a264 IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.167342037987 82.22072758
0x84cc6341b4f31aef1f26cdd090b1f8428878b0d83f7a7c92c387625567be2253Create Pair141749642022-05-02 11:17:4214 days 21 hrs ago0xebf9f6656968a5f9fe0a3dbcfee801392611ed89 IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.139445815028 68.51471896
0xb058038c8e9b4dd5392bdd4c3a9c5a389721ec3efa216f6e3dbe55d742d94f0dCreate Pair141717272022-05-02 9:27:2814 days 23 hrs ago0xad938465a15dda16f836a5ac96a78195da50defd IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.4579326225
0xb81da625ea2ff4bea5efe2f97c22c5d91e806b20da0ab82b28be9cbf82e8fcb8Create Pair141705852022-05-02 8:48:3615 days ago0x58b963de1e680ff89eb33ec4e33950cb7db62aff IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.4579326225
0x32f36b66a4d1db007b59e789a50653650ed7f214526b456869709d2ebf57226dCreate Pair141072992022-04-30 20:46:0716 days 12 hrs ago0xe40a133fa88f0cd4661f94c0e8bbdd007e94d98d IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.000829079541 33.601343168
0xf2aba51a4dfa3ef819fd2a5027eb37c321e49aae291d0670e3f121f8cd50ca11Create Pair140519122022-04-29 13:03:0217 days 19 hrs ago0x5b3415f36ab5abe6ec66faba9dd8c7fee8cdb5c2 IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.084708574852 41.620354102
0x5cfe1cfbd0233e85edbba6fc95d995670cc4e3549ff2b295356fc859f3bf6212Create Pair140518502022-04-29 13:00:5217 days 19 hrs ago0x5b3415f36ab5abe6ec66faba9dd8c7fee8cdb5c2 IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.089568959107 44.008694291
0x7d2b7c774f6b4d0d4ec4409db4c350ba91eaa6e272253220b70844e087a36f66Create Pair140441142022-04-29 8:32:4118 days 15 mins ago0x750a0633d31bd5fb98d04763222038a7c3e52203 IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.06202426109530.474739
0xb745182b7e428e3e857674484980f82036f431cdaa621356dfe7ed7652b9f1d0Create Pair140298422022-04-29 0:20:3018 days 8 hrs ago0xbaf880f607807bfcf8720e7908da4df021c43e52 IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.057149800242 28.079769545
0x9d4dcf103d4b8785ee42e4fd72e6656f474bb7f746cc7cb07092e86fef25f9e8Create Pair140298232022-04-29 0:19:5418 days 8 hrs ago0xbaf880f607807bfcf8720e7908da4df021c43e52 IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.057513251261 28.258179601
0x37d34dc64a5203b4881ded86d35cc80fa1aa0ff858cc0c0a106e647c450ac9c5Create Pair139613812022-04-27 9:36:0119 days 23 hrs ago0xebf9f6656968a5f9fe0a3dbcfee801392611ed89 IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.140818215651 69.189028497
0x9ed5d8b5dbb2b8dbbfb657da3a0bd48f2447c6a73285d8dd7827b41390dec178Create Pair139023222022-04-26 0:39:1221 days 8 hrs ago0x5db59b2dbe528929d2fe204dd436f222c0e2b166 IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.00173881566870.443026586
0xe5b18b6fcb65bf9b01d3ccf0250bab1270bbd87262cf3234333e4aa5adaedc45Create Pair139022342022-04-26 0:36:1521 days 8 hrs ago0x5db59b2dbe528929d2fe204dd436f222c0e2b166 IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.15040082907373.896946301
0xba5b501b78939b7eaf20da7b1085bd80af153f27bd5f82c6db8b0956c6ac277aCreate Pair138287582022-04-24 7:29:0323 days 1 hr ago0x58868bb921b7c0f3a7a2c8d4464fe859dd3e8ea4 IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.22326413899 109.700248126
0xff40ad441cefc078d9f4e62ec026847aad6e3922578f55bbcd0cf84d621f2b0bCreate Pair138116902022-04-23 21:57:1823 days 10 hrs ago0x503e333106b36dff677236c0d5ea217f5401624c IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.10674402327452.447158445
0x88cdaa046392d1c9c26c15e547683c8a91dc78bbe74f0f4514f06c8d97ebd3cbCreate Pair138078842022-04-23 19:49:5023 days 12 hrs ago0x5db59b2dbe528929d2fe204dd436f222c0e2b166 IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.16345697697480.311867457
0xa39bc78bf5b971cb3df0ee444915d549768b950cd04cd0ee6b2f0336c0b67a2bCreate Pair134661102022-04-15 20:56:3531 days 11 hrs ago0x33c6967b3095914498b7743e644db5a4db4d8880 IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.138661933265 68.129569799
0x92dc99f126da19451a2eb95b6f5b3e7110d3f8d6fc6325918b5385e264549334Create Pair134554062022-04-15 14:54:1131 days 17 hrs ago0x00000000000f80c6cd2dd285165c8172652e1edd IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.225558229677 110.824285271
0xf99242d170e4692ebc00e69a8b1fa13e3a1ea06cc36efb958ad0c273be14c66aCreate Pair133806082022-04-13 21:10:2433 days 11 hrs ago0x8a0fedd54431c2feb6905908ec59ccb5fbba8bbe IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.4070536 200
0x555d3095f14890df8bc8a80d138a50bce97637e9843a43d2f0f01ce433943652Create Pair133800382022-04-13 20:51:0433 days 11 hrs ago0x00000000000f80c6cd2dd285165c8172652e1edd IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.148410078482 72.919182379
0xa32ceb1a9b5e266123cf4990e47350be69ba84e5fdffc89874cdf89d2592ba2eCreate Pair133337962022-04-12 18:52:4034 days 13 hrs ago0xb05bfc6bdec2ecea3247f2ed2b22429c697e2f06 IN  0x9ad6c38be94206ca50bb0d90783181662f0cfa100 AVAX0.254205639705 124.899713801
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x2a34a802bd2b1dfb037847e4d224f5a5da2ced62ac2040eab5c3ac55fa0ec7de147970262022-05-17 3:07:215 hrs 41 mins ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0xd15788de2c1922702ff8ec46d1e9017ba745ef5bd209a20150363e43bf4f9721147912492022-05-16 23:54:338 hrs 54 mins ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0xd0c18fb5387bf2697bfb01ee4931f69e77a22d8c243947be11ca18b470fba1c9147872492022-05-16 21:40:5611 hrs 7 mins ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0x3a32971969e56a57bf7966d1eb72b4162fd99d4b5d5fce24096f0d870a20e80b147761552022-05-16 15:29:5517 hrs 18 mins ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0xf9e86ff4df201f62f3b2ec716daf61f6e9fbce4cd7bd04e1c08b7e60ae21a6e5147721162022-05-16 13:15:4319 hrs 32 mins ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0x056deafd4b5b637c3c0e258f90200bef5f72980aec8a031cf7b30110fcd40c19147710042022-05-16 12:38:4420 hrs 9 mins ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0xa7a47db9d4dcbf1d95c24effa45e1791c5098712f64fabcad216750c578c3a96147466532022-05-15 23:07:361 day 9 hrs ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0x2994874e8d0f23a1e2f1c04ae3153c0142842ffb18694ddb3b09be93c1b01519147407012022-05-15 19:49:331 day 12 hrs ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0x2e722b727c45f940b884dbe3435c502c67914a50ab71ebee56febd6a4b65e762147398972022-05-15 19:22:341 day 13 hrs ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0x9b168b816ffc799b4cc4f5f234f031e5f5c2582a0b9d37fdde016215dc47b70c147389202022-05-15 18:49:511 day 13 hrs ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0x46217834142c2fd7eadf56e8d9b33303fa09b9e006de399f9da7d5b4c8f9e894147349542022-05-15 16:37:031 day 16 hrs ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0x161ebcc82e373d25482e43a2d62610deec19c90788fcefce8a76ac60f5692825147332972022-05-15 15:41:311 day 17 hrs ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0xf989c67b1c2c29e47899ecf167e61919a4265bb5c919b2649b9ebeffc22e9dde147322202022-05-15 15:05:271 day 17 hrs ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0xd671e441e1f961f951a38d86bd0cbbe054abdcc7451061ac0bbd978358038700147296922022-05-15 13:41:421 day 19 hrs ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0xbb6953528aa8fb5e388dc37e7d4a9bcaacb110bf3e4cf572f6c3848e2aeceb67147291022022-05-15 13:22:011 day 19 hrs ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0x953762a5dbd2eea3a092a2f850e8edac20d7c988f9bf59d204f91b8d08f89c24147279602022-05-15 12:43:531 day 20 hrs ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0x3e6f396b576159e78e811e5e9043011ff0cc069ff60ce53efd7e851c7c67d31c147080702022-05-15 1:39:462 days 7 hrs ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0xfcd8031cdaff9c3015339b9f766745e4e1ed003e60b86da76efd5daad96f9a0c147016382022-05-14 22:05:332 days 10 hrs ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0xf237ccc7059e4a4e8d1cb66193f9c6c21d64c8f26099c587a14413e7655cca0d146992292022-05-14 20:44:572 days 12 hrs ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0xfb86af8dfd045d240d2a8ff2cb5d5e214aada3fb911a023b8aebe1e8d50e5e84146931842022-05-14 17:23:202 days 15 hrs ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0xe9c74433eed20c57125b07484ab57fa6a28494539c809128a3bd62cf55c1e7b3146910062022-05-14 16:11:202 days 16 hrs ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0xb3b4d7c818e6a5882f82587a837f46a8955d7476e5656143c46f07436bc36fa0146905062022-05-14 15:54:352 days 16 hrs ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0x4e4ea9bdf8379793fb5a9383788d82f5fb05f29a2db1ebb11ece7c979d171ad3146898642022-05-14 15:32:592 days 17 hrs ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0x2424fbe487d1bc1550ac77f244cb215cb83baf47cd7c1071d940431072ec42ae146882662022-05-14 14:39:342 days 18 hrs ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
0x9e31f6a90caa40b95d0bb1bcf2c994846fe019a8349156f884924985487b4467146838562022-05-14 12:12:242 days 20 hrs ago 0x9ad6c38be94206ca50bb0d90783181662f0cfa10  Contract Creation0 AVAX
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
JoeFactory

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/IJoeFactory.sol

// SPDX-License-Identifier: GPL-3.0

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/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/JoeERC20.sol


pragma solidity =0.6.12;


contract JoeERC20 {
    using SafeMathJoe for uint256;

    string public constant name = "Joe LP Token";
    string public constant symbol = "JLP";
    uint8 public constant decimals = 18;
    uint256 public totalSupply;
    mapping(address => uint256) public balanceOf;
    mapping(address => mapping(address => uint256)) public allowance;

    bytes32 public DOMAIN_SEPARATOR;
    // keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");
    bytes32 public constant PERMIT_TYPEHASH =
        0x6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9;
    mapping(address => uint256) public nonces;

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

    constructor() public {
        uint256 chainId;
        assembly {
            chainId := chainid()
        }
        DOMAIN_SEPARATOR = keccak256(
            abi.encode(
                keccak256(
                    "EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"
                ),
                keccak256(bytes(name)),
                keccak256(bytes("1")),
                chainId,
                address(this)
            )
        );
    }

    function _mint(address to, uint256 value) internal {
        totalSupply = totalSupply.add(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(address(0), to, value);
    }

    function _burn(address from, uint256 value) internal {
        balanceOf[from] = balanceOf[from].sub(value);
        totalSupply = totalSupply.sub(value);
        emit Transfer(from, address(0), value);
    }

    function _approve(
        address owner,
        address spender,
        uint256 value
    ) private {
        allowance[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    function _transfer(
        address from,
        address to,
        uint256 value
    ) private {
        balanceOf[from] = balanceOf[from].sub(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(from, to, value);
    }

    function approve(address spender, uint256 value) external returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    function transfer(address to, uint256 value) external returns (bool) {
        _transfer(msg.sender, to, value);
        return true;
    }

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool) {
        if (allowance[from][msg.sender] != uint256(-1)) {
            allowance[from][msg.sender] = allowance[from][msg.sender].sub(
                value
            );
        }
        _transfer(from, to, value);
        return true;
    }

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        require(deadline >= block.timestamp, "Joe: EXPIRED");
        bytes32 digest = keccak256(
            abi.encodePacked(
                "\x19\x01",
                DOMAIN_SEPARATOR,
                keccak256(
                    abi.encode(
                        PERMIT_TYPEHASH,
                        owner,
                        spender,
                        value,
                        nonces[owner]++,
                        deadline
                    )
                )
            )
        );
        address recoveredAddress = ecrecover(digest, v, r, s);
        require(
            recoveredAddress != address(0) && recoveredAddress == owner,
            "Joe: INVALID_SIGNATURE"
        );
        _approve(owner, spender, value);
    }
}

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


pragma solidity =0.6.12;

// a library for performing various math operations

library Math {
    function min(uint256 x, uint256 y) internal pure returns (uint256 z) {
        z = x < y ? x : y;
    }

    // babylonian method (https://en.wikipedia.org/wiki/Methods_of_computing_square_roots#Babylonian_method)
    function sqrt(uint256 y) internal pure returns (uint256 z) {
        if (y > 3) {
            z = y;
            uint256 x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}

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


pragma solidity =0.6.12;

// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))

// range: [0, 2**112 - 1]
// resolution: 1 / 2**112

library UQ112x112 {
    uint224 constant Q112 = 2**112;

    // encode a uint112 as a UQ112x112
    function encode(uint112 y) internal pure returns (uint224 z) {
        z = uint224(y) * Q112; // never overflows
    }

    // divide a UQ112x112 by a uint112, returning a UQ112x112
    function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) {
        z = x / uint224(y);
    }
}

// File: contracts/traderjoe/interfaces/IERC20.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/IJoeCallee.sol


pragma solidity >=0.5.0;

interface IJoeCallee {
    function joeCall(
        address sender,
        uint256 amount0,
        uint256 amount1,
        bytes calldata data
    ) external;
}

// File: contracts/traderjoe/JoePair.sol


pragma solidity =0.6.12;







interface IMigrator {
    // Return the desired amount of liquidity token that the migrator wants.
    function desiredLiquidity() external view returns (uint256);
}

contract JoePair is JoeERC20 {
    using SafeMathJoe for uint256;
    using UQ112x112 for uint224;

    uint256 public constant MINIMUM_LIQUIDITY = 10**3;
    bytes4 private constant SELECTOR =
        bytes4(keccak256(bytes("transfer(address,uint256)")));

    address public factory;
    address public token0;
    address public token1;

    uint112 private reserve0; // uses single storage slot, accessible via getReserves
    uint112 private reserve1; // uses single storage slot, accessible via getReserves
    uint32 private blockTimestampLast; // uses single storage slot, accessible via getReserves

    uint256 public price0CumulativeLast;
    uint256 public price1CumulativeLast;
    uint256 public kLast; // reserve0 * reserve1, as of immediately after the most recent liquidity event

    uint256 private unlocked = 1;
    modifier lock() {
        require(unlocked == 1, "Joe: LOCKED");
        unlocked = 0;
        _;
        unlocked = 1;
    }

    function getReserves()
        public
        view
        returns (
            uint112 _reserve0,
            uint112 _reserve1,
            uint32 _blockTimestampLast
        )
    {
        _reserve0 = reserve0;
        _reserve1 = reserve1;
        _blockTimestampLast = blockTimestampLast;
    }

    function _safeTransfer(
        address token,
        address to,
        uint256 value
    ) private {
        (bool success, bytes memory data) = token.call(
            abi.encodeWithSelector(SELECTOR, to, value)
        );
        require(
            success && (data.length == 0 || abi.decode(data, (bool))),
            "Joe: TRANSFER_FAILED"
        );
    }

    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);

    constructor() public {
        factory = msg.sender;
    }

    // called once by the factory at time of deployment
    function initialize(address _token0, address _token1) external {
        require(msg.sender == factory, "Joe: FORBIDDEN"); // sufficient check
        token0 = _token0;
        token1 = _token1;
    }

    // update reserves and, on the first call per block, price accumulators
    function _update(
        uint256 balance0,
        uint256 balance1,
        uint112 _reserve0,
        uint112 _reserve1
    ) private {
        require(
            balance0 <= uint112(-1) && balance1 <= uint112(-1),
            "Joe: OVERFLOW"
        );
        uint32 blockTimestamp = uint32(block.timestamp % 2**32);
        uint32 timeElapsed = blockTimestamp - blockTimestampLast; // overflow is desired
        if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) {
            // * never overflows, and + overflow is desired
            price0CumulativeLast +=
                uint256(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) *
                timeElapsed;
            price1CumulativeLast +=
                uint256(UQ112x112.encode(_reserve0).uqdiv(_reserve1)) *
                timeElapsed;
        }
        reserve0 = uint112(balance0);
        reserve1 = uint112(balance1);
        blockTimestampLast = blockTimestamp;
        emit Sync(reserve0, reserve1);
    }

    // if fee is on, mint liquidity equivalent to 1/6th of the growth in sqrt(k)
    function _mintFee(uint112 _reserve0, uint112 _reserve1)
        private
        returns (bool feeOn)
    {
        address feeTo = IJoeFactory(factory).feeTo();
        feeOn = feeTo != address(0);
        uint256 _kLast = kLast; // gas savings
        if (feeOn) {
            if (_kLast != 0) {
                uint256 rootK = Math.sqrt(uint256(_reserve0).mul(_reserve1));
                uint256 rootKLast = Math.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint256 numerator = totalSupply.mul(rootK.sub(rootKLast));
                    uint256 denominator = rootK.mul(5).add(rootKLast);
                    uint256 liquidity = numerator / denominator;
                    if (liquidity > 0) _mint(feeTo, liquidity);
                }
            }
        } else if (_kLast != 0) {
            kLast = 0;
        }
    }

    // this low-level function should be called from a contract which performs important safety checks
    function mint(address to) external lock returns (uint256 liquidity) {
        (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings
        uint256 balance0 = IERC20Joe(token0).balanceOf(address(this));
        uint256 balance1 = IERC20Joe(token1).balanceOf(address(this));
        uint256 amount0 = balance0.sub(_reserve0);
        uint256 amount1 = balance1.sub(_reserve1);

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint256 _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        if (_totalSupply == 0) {
            address migrator = IJoeFactory(factory).migrator();
            if (msg.sender == migrator) {
                liquidity = IMigrator(migrator).desiredLiquidity();
                require(
                    liquidity > 0 && liquidity != uint256(-1),
                    "Bad desired liquidity"
                );
            } else {
                require(migrator == address(0), "Must not have migrator");
                liquidity = Math.sqrt(amount0.mul(amount1)).sub(
                    MINIMUM_LIQUIDITY
                );
                _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens
            }
        } else {
            liquidity = Math.min(
                amount0.mul(_totalSupply) / _reserve0,
                amount1.mul(_totalSupply) / _reserve1
            );
        }
        require(liquidity > 0, "Joe: INSUFFICIENT_LIQUIDITY_MINTED");
        _mint(to, liquidity);

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint256(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date
        emit Mint(msg.sender, amount0, amount1);
    }

    // this low-level function should be called from a contract which performs important safety checks
    function burn(address to)
        external
        lock
        returns (uint256 amount0, uint256 amount1)
    {
        (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings
        address _token0 = token0; // gas savings
        address _token1 = token1; // gas savings
        uint256 balance0 = IERC20Joe(_token0).balanceOf(address(this));
        uint256 balance1 = IERC20Joe(_token1).balanceOf(address(this));
        uint256 liquidity = balanceOf[address(this)];

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint256 _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        amount0 = liquidity.mul(balance0) / _totalSupply; // using balances ensures pro-rata distribution
        amount1 = liquidity.mul(balance1) / _totalSupply; // using balances ensures pro-rata distribution
        require(
            amount0 > 0 && amount1 > 0,
            "Joe: INSUFFICIENT_LIQUIDITY_BURNED"
        );
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20Joe(_token0).balanceOf(address(this));
        balance1 = IERC20Joe(_token1).balanceOf(address(this));

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint256(reserve0).mul(reserve1); // reserve0 and reserve1 are up-to-date
        emit Burn(msg.sender, amount0, amount1, to);
    }

    // this low-level function should be called from a contract which performs important safety checks
    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external lock {
        require(
            amount0Out > 0 || amount1Out > 0,
            "Joe: INSUFFICIENT_OUTPUT_AMOUNT"
        );
        (uint112 _reserve0, uint112 _reserve1, ) = getReserves(); // gas savings
        require(
            amount0Out < _reserve0 && amount1Out < _reserve1,
            "Joe: INSUFFICIENT_LIQUIDITY"
        );

        uint256 balance0;
        uint256 balance1;
        {
            // scope for _token{0,1}, avoids stack too deep errors
            address _token0 = token0;
            address _token1 = token1;
            require(to != _token0 && to != _token1, "Joe: INVALID_TO");
            if (amount0Out > 0) _safeTransfer(_token0, to, amount0Out); // optimistically transfer tokens
            if (amount1Out > 0) _safeTransfer(_token1, to, amount1Out); // optimistically transfer tokens
            if (data.length > 0)
                IJoeCallee(to).joeCall(
                    msg.sender,
                    amount0Out,
                    amount1Out,
                    data
                );
            balance0 = IERC20Joe(_token0).balanceOf(address(this));
            balance1 = IERC20Joe(_token1).balanceOf(address(this));
        }
        uint256 amount0In = balance0 > _reserve0 - amount0Out
            ? balance0 - (_reserve0 - amount0Out)
            : 0;
        uint256 amount1In = balance1 > _reserve1 - amount1Out
            ? balance1 - (_reserve1 - amount1Out)
            : 0;
        require(
            amount0In > 0 || amount1In > 0,
            "Joe: INSUFFICIENT_INPUT_AMOUNT"
        );
        {
            // scope for reserve{0,1}Adjusted, avoids stack too deep errors
            uint256 balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(3));
            uint256 balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(3));
            require(
                balance0Adjusted.mul(balance1Adjusted) >=
                    uint256(_reserve0).mul(_reserve1).mul(1000**2),
                "Joe: K"
            );
        }

        _update(balance0, balance1, _reserve0, _reserve1);
        emit Swap(msg.sender, amount0In, amount1In, amount0Out, amount1Out, to);
    }

    // force balances to match reserves
    function skim(address to) external lock {
        address _token0 = token0; // gas savings
        address _token1 = token1; // gas savings
        _safeTransfer(
            _token0,
            to,
            IERC20Joe(_token0).balanceOf(address(this)).sub(reserve0)
        );
        _safeTransfer(
            _token1,
            to,
            IERC20Joe(_token1).balanceOf(address(this)).sub(reserve1)
        );
    }

    // force reserves to match balances
    function sync() external lock {
        _update(
            IERC20Joe(token0).balanceOf(address(this)),
            IERC20Joe(token1).balanceOf(address(this)),
            reserve0,
            reserve1
        );
    }
}

// File: contracts/traderjoe/JoeFactory.sol


pragma solidity =0.6.12;



contract JoeFactory is IJoeFactory {
    address public override feeTo;
    address public override feeToSetter;
    address public override migrator;

    mapping(address => mapping(address => address)) public override getPair;
    address[] public override allPairs;

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

    constructor(address _feeToSetter) public {
        feeToSetter = _feeToSetter;
    }

    function allPairsLength() external view override returns (uint256) {
        return allPairs.length;
    }

    function pairCodeHash() external pure returns (bytes32) {
        return keccak256(type(JoePair).creationCode);
    }

    function createPair(address tokenA, address tokenB)
        external
        override
        returns (address pair)
    {
        require(tokenA != tokenB, "Joe: IDENTICAL_ADDRESSES");
        (address token0, address token1) = tokenA < tokenB
            ? (tokenA, tokenB)
            : (tokenB, tokenA);
        require(token0 != address(0), "Joe: ZERO_ADDRESS");
        require(getPair[token0][token1] == address(0), "Joe: PAIR_EXISTS"); // single check is sufficient
        bytes memory bytecode = type(JoePair).creationCode;
        bytes32 salt = keccak256(abi.encodePacked(token0, token1));
        assembly {
            pair := create2(0, add(bytecode, 32), mload(bytecode), salt)
        }
        JoePair(pair).initialize(token0, token1);
        getPair[token0][token1] = pair;
        getPair[token1][token0] = pair; // populate mapping in the reverse direction
        allPairs.push(pair);
        emit PairCreated(token0, token1, pair, allPairs.length);
    }

    function setFeeTo(address _feeTo) external override {
        require(msg.sender == feeToSetter, "Joe: FORBIDDEN");
        feeTo = _feeTo;
    }

    function setMigrator(address _migrator) external override {
        require(msg.sender == feeToSetter, "Joe: FORBIDDEN");
        migrator = _migrator;
    }

    function setFeeToSetter(address _feeToSetter) external override {
        require(msg.sender == feeToSetter, "Joe: FORBIDDEN");
        feeToSetter = _feeToSetter;
    }
}

Contract ABI

[{"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token0","type":"address"},{"indexed":true,"internalType":"address","name":"token1","type":"address"},{"indexed":false,"internalType":"address","name":"pair","type":"address"},{"indexed":false,"internalType":"uint256","name":"","type":"uint256"}],"name":"PairCreated","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allPairs","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allPairsLength","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"createPair","outputs":[{"internalType":"address","name":"pair","type":"address"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeTo","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeToSetter","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"getPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"migrator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pairCodeHash","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"_feeTo","type":"address"}],"name":"setFeeTo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_feeToSetter","type":"address"}],"name":"setFeeToSetter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_migrator","type":"address"}],"name":"setMigrator","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b50604051612bb3380380612bb38339818101604052602081101561003357600080fd5b5051600180546001600160a01b0319166001600160a01b03909216919091179055612b50806100636000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637cd07e47116100715780637cd07e47146101395780639aab924814610141578063a2e74af614610149578063c9c653961461016f578063e6a439051461019d578063f46901ed146101cb576100a9565b8063017e7e58146100ae578063094b7415146100d25780631e3dd18b146100da57806323cf3118146100f7578063574f2ba31461011f575b600080fd5b6100b66101f1565b604080516001600160a01b039092168252519081900360200190f35b6100b6610200565b6100b6600480360360208110156100f057600080fd5b503561020f565b61011d6004803603602081101561010d57600080fd5b50356001600160a01b0316610236565b005b6101276102a8565b60408051918252519081900360200190f35b6100b66102ae565b6101276102bd565b61011d6004803603602081101561015f57600080fd5b50356001600160a01b03166102ef565b6100b66004803603604081101561018557600080fd5b506001600160a01b0381358116916020013516610361565b6100b6600480360360408110156101b357600080fd5b506001600160a01b038135811691602001351661067a565b61011d600480360360208110156101e157600080fd5b50356001600160a01b03166106a0565b6000546001600160a01b031681565b6001546001600160a01b031681565b6004818154811061021c57fe5b6000918252602090912001546001600160a01b0316905081565b6001546001600160a01b03163314610286576040805162461bcd60e51b815260206004820152600e60248201526d2537b29d102327a92124a22222a760911b604482015290519081900360640190fd5b600280546001600160a01b0319166001600160a01b0392909216919091179055565b60045490565b6002546001600160a01b031681565b6000604051806020016102cf90610712565b6020820181038252601f19601f8201166040525080519060200120905090565b6001546001600160a01b0316331461033f576040805162461bcd60e51b815260206004820152600e60248201526d2537b29d102327a92124a22222a760911b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b0316836001600160a01b031614156103ca576040805162461bcd60e51b815260206004820152601860248201527f4a6f653a204944454e544943414c5f4144445245535345530000000000000000604482015290519081900360640190fd5b600080836001600160a01b0316856001600160a01b0316106103ed5783856103f0565b84845b90925090506001600160a01b038216610444576040805162461bcd60e51b81526020600482015260116024820152704a6f653a205a45524f5f4144445245535360781b604482015290519081900360640190fd5b6001600160a01b038281166000908152600360209081526040808320858516845290915290205416156104b1576040805162461bcd60e51b815260206004820152601060248201526f4a6f653a20504149525f45584953545360801b604482015290519081900360640190fd5b6060604051806020016104c390610712565b6020820181038252601f19601f8201166040525090506000838360405160200180836001600160a01b031660601b8152601401826001600160a01b031660601b815260140192505050604051602081830303815290604052805190602001209050808251602084016000f59450846001600160a01b031663485cc95585856040518363ffffffff1660e01b815260040180836001600160a01b03168152602001826001600160a01b0316815260200192505050600060405180830381600087803b15801561059057600080fd5b505af11580156105a4573d6000803e3d6000fd5b505050506001600160a01b0384811660008181526003602081815260408084208987168086529083528185208054978d166001600160a01b031998891681179091559383528185208686528352818520805488168517905560048054600181018255958190527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b90950180549097168417909655925483519283529082015281517f0d3648bd0f6ba80134a33ba9275ac585d9d315f0ad8355cddefde31afa28d0e9929181900390910190a35050505092915050565b60036020908152600092835260408084209091529082529020546001600160a01b031681565b6001546001600160a01b031633146106f0576040805162461bcd60e51b815260206004820152600e60248201526d2537b29d102327a92124a22222a760911b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6123fb806107208339019056fe60806040526001600c5534801561001557600080fd5b50604080518082018252600c81526b2537b2902628102a37b5b2b760a11b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fd4eb8415c62493390808cc42ba6f3ba97fa30eb773771605674d83c7162115e7818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b031916331790556122f18061010a6000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610afb565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610b23565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b4d565b604080519115158252519081900360200190f35b610339610b64565b604080516001600160a01b039092168252519081900360200190f35b61035d610b73565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610b79565b61035d610c0d565b6103b5610c31565b6040805160ff9092168252519081900360200190f35b61035d610c36565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c3c565b61035d610cba565b61035d610cc0565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610cc6565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b031661113c565b61035d61114e565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316611154565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611166565b6040805192835260208301919091528051918290030190f35b6102446114f4565b61031d600480360360408110156104e857600080fd5b506001600160a01b038135169060200135611513565b61035d611520565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b0316611526565b610339611692565b6103396116a1565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c001356116b0565b61035d600480360360408110156105a357600080fd5b506001600160a01b03813581169160200135166118a5565b61023a6118c2565b600c54600114610608576040805162461bcd60e51b815260206004820152600b60248201526a129bd94e881313d0d2d15160aa1b604482015290519081900360640190fd5b6000600c558415158061061b5750600084115b61066c576040805162461bcd60e51b815260206004820152601f60248201527f4a6f653a20494e53554646494349454e545f4f55545055545f414d4f554e5400604482015290519081900360640190fd5b600080610677610b23565b5091509150816001600160701b03168710801561069c5750806001600160701b031686105b6106ed576040805162461bcd60e51b815260206004820152601b60248201527f4a6f653a20494e53554646494349454e545f4c49515549444954590000000000604482015290519081900360640190fd5b60065460075460009182916001600160a01b0391821691908116908916821480159061072b5750806001600160a01b0316896001600160a01b031614155b61076e576040805162461bcd60e51b815260206004820152600f60248201526e4a6f653a20494e56414c49445f544f60881b604482015290519081900360640190fd5b8a1561077f5761077f828a8d611a1e565b891561079057610790818a8c611a1e565b861561084257886001600160a01b031663ee22dd87338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561082957600080fd5b505af115801561083d573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561088857600080fd5b505afa15801561089c573d6000803e3d6000fd5b505050506040513d60208110156108b257600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108fe57600080fd5b505afa158015610912573d6000803e3d6000fd5b505050506040513d602081101561092857600080fd5b5051925060009150506001600160701b0385168a9003831161094b57600061095a565b89856001600160701b03160383035b9050600089856001600160701b0316038311610977576000610986565b89856001600160701b03160383035b905060008211806109975750600081115b6109e8576040805162461bcd60e51b815260206004820152601e60248201527f4a6f653a20494e53554646494349454e545f494e5055545f414d4f554e540000604482015290519081900360640190fd5b6000610a0a6109f8846003611baf565b610a04876103e8611baf565b90611c12565b90506000610a1c6109f8846003611baf565b9050610a41620f4240610a3b6001600160701b038b8116908b16611baf565b90611baf565b610a4b8383611baf565b1015610a87576040805162461bcd60e51b81526020600482015260066024820152654a6f653a204b60d01b604482015290519081900360640190fd5b5050610a9584848888611c62565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600c81526020016b2537b2902628102a37b5b2b760a11b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b5a338484611e1b565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610bf8576001600160a01b0384166000908152600260209081526040808320338452909152902054610bd39083611c12565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c03848484611e7d565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610c8c576040805162461bcd60e51b815260206004820152600e60248201526d2537b29d102327a92124a22222a760911b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610d0d576040805162461bcd60e51b815260206004820152600b60248201526a129bd94e881313d0d2d15160aa1b604482015290519081900360640190fd5b6000600c81905580610d1d610b23565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d7157600080fd5b505afa158015610d85573d6000803e3d6000fd5b505050506040513d6020811015610d9b57600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610dee57600080fd5b505afa158015610e02573d6000803e3d6000fd5b505050506040513d6020811015610e1857600080fd5b505190506000610e31836001600160701b038716611c12565b90506000610e48836001600160701b038716611c12565b90506000610e568787611f2b565b6000549091508061102d5760055460408051637cd07e4760e01b815290516000926001600160a01b031691637cd07e47916004808301926020929190829003018186803b158015610ea657600080fd5b505afa158015610eba573d6000803e3d6000fd5b505050506040513d6020811015610ed057600080fd5b50519050336001600160a01b0382161415610fab57806001600160a01b03166340dc0e376040518163ffffffff1660e01b815260040160206040518083038186803b158015610f1e57600080fd5b505afa158015610f32573d6000803e3d6000fd5b505050506040513d6020811015610f4857600080fd5b505199508915801590610f5d57506000198a14155b610fa6576040805162461bcd60e51b81526020600482015260156024820152744261642064657369726564206c697175696469747960581b604482015290519081900360640190fd5b611027565b6001600160a01b03811615611000576040805162461bcd60e51b815260206004820152601660248201527526bab9ba103737ba103430bb329036b4b3b930ba37b960511b604482015290519081900360640190fd5b6110186103e8610a046110138888611baf565b61206b565b995061102760006103e86120bd565b50611070565b61106d6001600160701b0389166110448684611baf565b8161104b57fe5b046001600160701b0389166110608685611baf565b8161106757fe5b04612147565b98505b600089116110af5760405162461bcd60e51b815260040180806020018281038252602281526020018061229a6022913960400191505060405180910390fd5b6110b98a8a6120bd565b6110c586868a8a611c62565b81156110ef576008546110eb906001600160701b0380821691600160701b900416611baf565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c546001146111ae576040805162461bcd60e51b815260206004820152600b60248201526a129bd94e881313d0d2d15160aa1b604482015290519081900360640190fd5b6000600c819055806111be610b23565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561121a57600080fd5b505afa15801561122e573d6000803e3d6000fd5b505050506040513d602081101561124457600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561129257600080fd5b505afa1580156112a6573d6000803e3d6000fd5b505050506040513d60208110156112bc57600080fd5b5051306000908152600160205260408120549192506112db8888611f2b565b600054909150806112ec8487611baf565b816112f357fe5b049a50806113018486611baf565b8161130857fe5b04995060008b11801561131b575060008a115b6113565760405162461bcd60e51b81526004018080602001828103825260228152602001806122786022913960400191505060405180910390fd5b611360308461215f565b61136b878d8d611a1e565b611376868d8c611a1e565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b1580156113bc57600080fd5b505afa1580156113d0573d6000803e3d6000fd5b505050506040513d60208110156113e657600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561143257600080fd5b505afa158015611446573d6000803e3d6000fd5b505050506040513d602081101561145c57600080fd5b5051935061146c85858b8b611c62565b811561149657600854611492906001600160701b0380821691600160701b900416611baf565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600381526020016204a4c560ec1b81525081565b6000610b5a338484611e7d565b6103e881565b600c5460011461156b576040805162461bcd60e51b815260206004820152600b60248201526a129bd94e881313d0d2d15160aa1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b039485169490931692611614928592879261160f926001600160701b03169185916370a0823191602480820192602092909190829003018186803b1580156115dd57600080fd5b505afa1580156115f1573d6000803e3d6000fd5b505050506040513d602081101561160757600080fd5b505190611c12565b611a1e565b611688818461160f6008600e9054906101000a90046001600160701b03166001600160701b0316856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b1580156115dd57600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b428410156116f4576040805162461bcd60e51b815260206004820152600c60248201526b129bd94e881156141254915160a21b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa15801561180f573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906118455750886001600160a01b0316816001600160a01b0316145b61188f576040805162461bcd60e51b81526020600482015260166024820152754a6f653a20494e56414c49445f5349474e415455524560501b604482015290519081900360640190fd5b61189a898989611e1b565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611907576040805162461bcd60e51b815260206004820152600b60248201526a129bd94e881313d0d2d15160aa1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b81523060048201529051611a17926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561195857600080fd5b505afa15801561196c573d6000803e3d6000fd5b505050506040513d602081101561198257600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156119cf57600080fd5b505afa1580156119e3573d6000803e3d6000fd5b505050506040513d60208110156119f957600080fd5b50516008546001600160701b0380821691600160701b900416611c62565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611acb5780518252601f199092019160209182019101611aac565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611b2d576040519150601f19603f3d011682016040523d82523d6000602084013e611b32565b606091505b5091509150818015611b60575080511580611b605750808060200190516020811015611b5d57600080fd5b50515b611ba8576040805162461bcd60e51b8152602060048201526014602482015273129bd94e881514905394d1915497d1905253115160621b604482015290519081900360640190fd5b5050505050565b6000811580611bca57505080820282828281611bc757fe5b04145b610b5e576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b5e576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611c8057506001600160701b038311155b611cc1576040805162461bcd60e51b815260206004820152600d60248201526c4a6f653a204f564552464c4f5760981b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611cf157506001600160701b03841615155b8015611d0557506001600160701b03831615155b15611d70578063ffffffff16611d2d85611d1e866121f1565b6001600160e01b031690612203565b600980546001600160e01b03929092169290920201905563ffffffff8116611d5884611d1e876121f1565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611ea09082611c12565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611ecf9082612228565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611f7c57600080fd5b505afa158015611f90573d6000803e3d6000fd5b505050506040513d6020811015611fa657600080fd5b5051600b546001600160a01b038216158015945091925090612057578015612052576000611fe36110136001600160701b03888116908816611baf565b90506000611ff08361206b565b90508082111561204f5760006120126120098484611c12565b60005490611baf565b9050600061202b83612025866005611baf565b90612228565b9050600081838161203857fe5b049050801561204b5761204b87826120bd565b5050505b50505b612063565b8015612063576000600b555b505092915050565b600060038211156120ae575080600160028204015b818110156120a85780915060028182858161209757fe5b0401816120a057fe5b049050612080565b506120b8565b81156120b8575060015b919050565b6000546120ca9082612228565b60009081556001600160a01b0383168152600160205260409020546120ef9082612228565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106121565781612158565b825b9392505050565b6001600160a01b0382166000908152600160205260409020546121829082611c12565b6001600160a01b038316600090815260016020526040812091909155546121a99082611c12565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161222057fe5b049392505050565b80820182811015610b5e576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe4a6f653a20494e53554646494349454e545f4c49515549444954595f4255524e45444a6f653a20494e53554646494349454e545f4c49515549444954595f4d494e544544a2646970667358221220331c7da4efdadd19669d3d4492f60d8630c0b61e019b3fe2070f1d7d2f93d55164736f6c634300060c0033a264697066735822122072c5f62c72b32dcddc3aab68fae3d47e651ccede1c68c92e010bc03be30fe43264736f6c634300060c00330000000000000000000000005d3e4c0fe11e0ae4c32f0ff74b4544c49538ac61

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

0000000000000000000000005d3e4c0fe11e0ae4c32f0ff74b4544c49538ac61

-----Decoded View---------------
Arg [0] : _feeToSetter (address): 0x5d3e4c0fe11e0ae4c32f0ff74b4544c49538ac61

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000005d3e4c0fe11e0ae4c32f0ff74b4544c49538ac61


Deployed ByteCode Sourcemap

20025:2265:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20067:29;;;:::i;:::-;;;;-1:-1:-1;;;;;20067:29:0;;;;;;;;;;;;;;20103:35;;;:::i;20264:34::-;;;;;;;;;;;;;;;;-1:-1:-1;20264:34:0;;:::i;21947:160::-;;;;;;;;;;;;;;;;-1:-1:-1;21947:160:0;-1:-1:-1;;;;;21947:160:0;;:::i;:::-;;20541:108;;;:::i;:::-;;;;;;;;;;;;;;;;20145:32;;;:::i;20657:119::-;;;:::i;22115:172::-;;;;;;;;;;;;;;;;-1:-1:-1;22115:172:0;-1:-1:-1;;;;;22115:172:0;;:::i;20784:999::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20784:999:0;;;;;;;;;;:::i;20186:71::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;20186:71:0;;;;;;;;;;:::i;21791:148::-;;;;;;;;;;;;;;;;-1:-1:-1;21791:148:0;-1:-1:-1;;;;;21791:148:0;;:::i;20067:29::-;;;-1:-1:-1;;;;;20067:29:0;;:::o;20103:35::-;;;-1:-1:-1;;;;;20103:35:0;;:::o;20264:34::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20264:34:0;;-1:-1:-1;20264:34:0;:::o;21947:160::-;22038:11;;-1:-1:-1;;;;;22038:11:0;22024:10;:25;22016:52;;;;;-1:-1:-1;;;22016:52:0;;;;;;;;;;;;-1:-1:-1;;;22016:52:0;;;;;;;;;;;;;;;22079:8;:20;;-1:-1:-1;;;;;;22079:20:0;-1:-1:-1;;;;;22079:20:0;;;;;;;;;;21947:160::o;20541:108::-;20626:8;:15;20541:108;:::o;20145:32::-;;;-1:-1:-1;;;;;20145:32:0;;:::o;20657:119::-;20704:7;20741:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;20731:37;;;;;;20724:44;;20657:119;:::o;22115:172::-;22212:11;;-1:-1:-1;;;;;22212:11:0;22198:10;:25;22190:52;;;;;-1:-1:-1;;;22190:52:0;;;;;;;;;;;;-1:-1:-1;;;22190:52:0;;;;;;;;;;;;;;;22253:11;:26;;-1:-1:-1;;;;;;22253:26:0;-1:-1:-1;;;;;22253:26:0;;;;;;;;;;22115:172::o;20784:999::-;20890:12;20938:6;-1:-1:-1;;;;;20928:16:0;:6;-1:-1:-1;;;;;20928:16:0;;;20920:53;;;;;-1:-1:-1;;;20920:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;20985:14;21001;21028:6;-1:-1:-1;;;;;21019:15:0;:6;-1:-1:-1;;;;;21019:15:0;;:79;;21083:6;21091;21019:79;;;21051:6;21059;21019:79;20984:114;;-1:-1:-1;20984:114:0;-1:-1:-1;;;;;;21117:20:0;;21109:50;;;;;-1:-1:-1;;;21109:50:0;;;;;;;;;;;;-1:-1:-1;;;21109:50:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;21178:15:0;;;21213:1;21178:15;;;:7;:15;;;;;;;;:23;;;;;;;;;;;;:37;21170:66;;;;;-1:-1:-1;;;21170:66:0;;;;;;;;;;;;-1:-1:-1;;;21170:66:0;;;;;;;;;;;;;;;21277:21;21301:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;21277:50;;21338:12;21380:6;21388;21363:32;;;;;;-1:-1:-1;;;;;21363:32:0;;;;;;;;-1:-1:-1;;;;;21363:32:0;;;;;;;;;;;;;;;;;;;;;;;21353:43;;;;;;21338:58;;21486:4;21475:8;21469:15;21464:2;21454:8;21450:17;21447:1;21439:52;21431:60;;21520:4;-1:-1:-1;;;;;21512:24:0;;21537:6;21545;21512:40;;;;;;;;;;;;;-1:-1:-1;;;;;21512:40:0;;;;;;-1:-1:-1;;;;;21512:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;21563:15:0;;;;;;;:7;:15;;;;;;;;:23;;;;;;;;;;;;:30;;;;;-1:-1:-1;;;;;;21563:30:0;;;;;;;;21604:15;;;;;;:23;;;;;;;;:30;;;;;;;;21690:8;:19;;-1:-1:-1;21690:19:0;;;;;;;;;;;;;;;;;;;;;;21759:15;;21725:50;;;;;;;;;;;;;;;;;;;;;;20784:999;;;;;;;;:::o;20186:71::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20186:71:0;;:::o;21791:148::-;21876:11;;-1:-1:-1;;;;;21876:11:0;21862:10;:25;21854:52;;;;;-1:-1:-1;;;21854:52:0;;;;;;;;;;;;-1:-1:-1;;;21854:52:0;;;;;;;;;;;;;;;21917:5;:14;;-1:-1:-1;;;;;;21917:14:0;-1:-1:-1;;;;;21917:14:0;;;;;;;;;;21791:148::o;-1:-1:-1:-;;;;;;;;:::o

Swarm Source

ipfs://72c5f62c72b32dcddc3aab68fae3d47e651ccede1c68c92e010bc03be30fe432
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.