Annoucement: Binance Smart Chain is expected to undergo a scheduled hard fork upgrade at block height 13,082,000. For more information, read the blog here.

 

Contract 0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c

 
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x78bc1736b974c02dc9a3c8541b29ab9919ab15dbf53900e8281d0d2ba5c18a9cApprove128327052021-11-21 11:24:439 days 4 hrs ago0x539b8447cbe9f759b39d551c928b3cad424f9c74 IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.000072425
0x0ba5cf88b7f24f47244fdb4e495689358b894e7b0a5a0e9315ca4a5a0d13e8a2Approve128326912021-11-21 11:24:019 days 4 hrs ago0x539b8447cbe9f759b39d551c928b3cad424f9c74 IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.000072425
0x65a2aeb0f8048505c0b49f6b91afd9e14172094ac374477363343be9bef84e19Approve125980802021-11-12 23:07:0417 days 16 hrs ago0x6520f477fd9b1744a41fff34838e0dcae82bc07f IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.000072425
0x082cd94a48c77cdab1649aed760cfd0b8708cec333ed0f12d41cc8f2e5aad692Transfer104066102021-08-27 23:33:2694 days 16 hrs ago0x9369857e07ec9eac7538b87625adb534da1298bf IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.00018022
0x284c6d524463e80aeea147b1c6c7e99081c2d515a2a0d4e1ae6b3dae6b4235d0Approve101945682021-08-20 13:05:23102 days 3 hrs ago0x38c701081839394e6ab3134f0b98b228bbeae5dc IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.00012577
0x05de6fbc0fd9c0b2d6be93edc6b92127c02c5fe43357070f6737d09552ad95fcApprove101820492021-08-20 2:35:51102 days 13 hrs ago0xfb7259eed86d6f60dfb87f8f93a4aefcc7526487 IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.00012577
0xcedca820f6d884d6db09d9ed2ffdb9db9c6d870ed34ff32c5b7b8a82971779d0Approve91312482021-07-13 21:26:27139 days 18 hrs ago0xcd3cffd6ae69bfd73e3764ddffa8cde8ed5f71d5 IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.00012577
0x96e5b648abe0bd5584a6324408c8378354c0dfdae57c7cdf93d7e3a71bbddfe5Approve81447142021-06-09 10:45:52174 days 5 hrs ago0xf3b4bc382ea04177f56bef2d248a9e13767b7c7a IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.00012577
0x4b813c5e3a525cec4651a7d095e719fe2a9d93e12588e6d250d8640b86980da0Approve80160642021-06-04 23:20:11178 days 16 hrs ago0xfcc5d9198bb9fb2b7ced9eff8f256a42a07be867 IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.000150924
0xace37a3e04f3777536f2163b5f43e7c35ce2be78480eb0c08238a092d3785117Approve80160462021-06-04 23:19:17178 days 16 hrs ago0xfcc5d9198bb9fb2b7ced9eff8f256a42a07be867 IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.00012577
0x440ba62b5fb692456772a4ccd55ed0786df937fd3c8cb4cfa284bb199828900dApprove79909952021-06-04 2:24:36179 days 13 hrs ago0x3a794c36bef2abd47548070e394b5fd06a2f0863 IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.00012577
0x6490087dc9610e467eb2ec56bf004376bf387a2a28501b76e09445533d009041Approve78659652021-05-30 17:48:22183 days 22 hrs ago0x0ac8d9fca72ea9e2b4b81f98a962b9dfcd6236c2 IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.00012577
0x8969b93911af15b356539b2d2421263845c1f90d1cfa4acd543b2124cadb0eedApprove78483302021-05-30 3:04:08184 days 13 hrs ago0xc5b0b04daf328437931664154c995ff04c92a60a IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.00012577
0x67e472b76cea269793c96ca8180e3462716b5c56da51d6d62fc7d5ec6a0bb5caApprove77744842021-05-27 13:15:39187 days 2 hrs ago0x27e69e8ea74e0bf9eed12178ff556f7a26623d2e IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.00012577
0xddf88e7c37d572f887b7094d24e5fe05d02036a864653730783c7374f8e95b36Approve77744262021-05-27 13:12:22187 days 2 hrs ago0x27e69e8ea74e0bf9eed12178ff556f7a26623d2e IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.00012577
0x86c8dfba4f92a30c9e8d063ce9a98fca2969df4be2e337a8f8a1562fbe97b39aApprove77171592021-05-25 13:09:59189 days 2 hrs ago0x5ed4aba3f126e1e2fc7f79d06a1aa6a43b30ae05 IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.00012577
0x5181aa549764932d49af9fafc8699c1c1a9c1c3cc73261e86912e758901c30b8Approve76862792021-05-24 11:20:03190 days 4 hrs ago0x098c993b4815da963b57642e311284164d629b11 IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.00012577
0x33cb50064ad70d06c50608585548f18392aaaaa6408d5d6275577f5615421707Approve76422462021-05-22 22:27:32191 days 17 hrs ago0xac743b6a0eba954fcf8a5ca561763c3aa8c0ba62 IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.00012577
0xb404f0e2a5ffcc40cb3c25f693837fc6ec01cc4599250039c7d09063068360f2Approve76422202021-05-22 22:26:14191 days 17 hrs ago0xac743b6a0eba954fcf8a5ca561763c3aa8c0ba62 IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.00022177
0xd054dfd3dd7677a3a55345ff7141297e3995bd82a6c96012e64627cb39215cc2Approve76055582021-05-21 15:50:48193 days 15 mins ago0xf816b183418840bfa2cde691a90f44a2ec1a963c IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.00022177
0x9e726781d3af888d6a83603454593a6ea7835b3d0898331fd4622caa2bbd202eApprove75678182021-05-20 8:09:20194 days 7 hrs ago0x27e69e8ea74e0bf9eed12178ff556f7a26623d2e IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.00012577
0x26af9252721e494b554868110b3a30315b54fcdf67b335daf6515106fdcfdc14Approve75317592021-05-19 1:41:43195 days 14 hrs ago0xbd273d5294163005e8bad4dab4452fb8ce2fdc05 IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.00012577
0xe66f9d6ffa28385c516eec121bc13f819c814f6541d764be62f417da0d18c622Approve75317272021-05-19 1:40:07195 days 14 hrs ago0xbd273d5294163005e8bad4dab4452fb8ce2fdc05 IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.00012577
0x7c10c72b25a59963050dcdbc55801d9fddd0bc3cc4feffae797b97cf387056a4Approve75316012021-05-19 1:33:49195 days 14 hrs ago0xbd273d5294163005e8bad4dab4452fb8ce2fdc05 IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.00012577
0xfa292f8ee47168fa1700e1489459eedde566b46bd5d312dc725a8f0ae607079aApprove75315912021-05-19 1:33:19195 days 14 hrs ago0xbd273d5294163005e8bad4dab4452fb8ce2fdc05 IN  0xb44e6779296d489cad615f77a8b4e3b69c6d2c3c0 BNB0.00012577
[ Download CSV Export 
Latest 2 internal transactions
Parent Txn Hash Block From To Value
0x9e91ba206f01f40cbf707e01f084ee5ef0225577e5b99722286ca84a0e1a77c969487712021-04-28 4:23:43216 days 11 hrs ago 0xe8a1c3cba77fa70ff3936d3106c3f6803b145cef  Contract Creation0 BNB
0x989a73443f43b22329b23a3a025a14279f9effe9b6cb621e358ea316370bb71969484832021-04-28 4:09:19216 days 11 hrs ago 0xe8a1c3cba77fa70ff3936d3106c3f6803b145cef  Contract Creation0 BNB
[ Download CSV Export 
Loading

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

Contract Name:
MOKPair

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-04-19
*/

pragma solidity 0.5.16;


interface IMOKFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

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

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

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

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

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

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

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

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

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

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

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

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

    function initialize(address, address) external;
}

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

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

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

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

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

// a library for performing overflow-safe math, courtesy of DappHub (https://github.com/dapphub/ds-math)
library SafeMath {
    function add(uint x, uint y) internal pure returns (uint z) {
        require((z = x + y) >= x, 'ds-math-add-overflow');
    }

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

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

contract MOKERC20 is IMOKERC20 {
    using SafeMath for uint;

    string public constant name = 'MOK Token LPs';
    string public constant symbol = 'MOK-LP';
    uint8 public constant decimals = 18;
    uint  public totalSupply;
    mapping(address => uint) public balanceOf;
    mapping(address => mapping(address => uint)) 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 => uint) public nonces;

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

    constructor() public {
        uint 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, uint value) internal {
        totalSupply = totalSupply.add(value);
        balanceOf[to] = balanceOf[to].add(value);
        emit Transfer(address(0), to, value);
    }

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

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

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

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

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

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

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external {
        require(deadline >= block.timestamp, 'MOK: 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, 'MOK: INVALID_SIGNATURE');
        _approve(owner, spender, value);
    }
}

// a library for performing various math operations
library Math {
    function min(uint x, uint y) internal pure returns (uint z) {
        z = x < y ? x : y;
    }

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

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

interface IERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

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

interface IMOKCallee {
    function MOKCall(address sender, uint amount0, uint amount1, bytes calldata data) external;
}

contract MOKPair is IMOKPair, MOKERC20 {
    using SafeMath  for uint;
    using UQ112x112 for uint224;

    uint 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

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

    uint private unlocked = 1;
    modifier lock() {
        require(unlocked == 1, 'MOK: 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, uint value) private {
        (bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR, to, value));
        require(success && (data.length == 0 || abi.decode(data, (bool))), 'MOK: TRANSFER_FAILED');
    }

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

    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, 'MOK: FORBIDDEN'); // sufficient check
        token0 = _token0;
        token1 = _token1;
    }
    
    // update reserves and, on the first call per block, price accumulators
    function _update(uint balance0, uint balance1, uint112 _reserve0, uint112 _reserve1) private {
        require(balance0 <= uint112(-1) && balance1 <= uint112(-1), 'MOK: 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 += uint(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) * timeElapsed;
            price1CumulativeLast += uint(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 = IMOKFactory(factory).feeTo();
        feeOn = feeTo != address(0);
        uint _kLast = kLast; // gas savings
        if (feeOn) {
            if (_kLast != 0) {
                uint rootK = Math.sqrt(uint(_reserve0).mul(_reserve1));
                uint rootKLast = Math.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint numerator = totalSupply.mul(rootK.sub(rootKLast));
                    uint denominator = rootK.mul(3).add(rootKLast);
                    uint 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 (uint liquidity) {
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        uint balance0 = IERC20(token0).balanceOf(address(this));
        uint balance1 = IERC20(token1).balanceOf(address(this));
        uint amount0 = balance0.sub(_reserve0);
        uint amount1 = balance1.sub(_reserve1);

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        if (_totalSupply == 0) {
            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, 'MOK: INSUFFICIENT_LIQUIDITY_MINTED');
        _mint(to, liquidity);

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint(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 (uint amount0, uint amount1) {
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        address _token0 = token0;                                // gas savings
        address _token1 = token1;                                // gas savings
        uint balance0 = IERC20(_token0).balanceOf(address(this));
        uint balance1 = IERC20(_token1).balanceOf(address(this));
        uint liquidity = balanceOf[address(this)];

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint _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, 'MOK: INSUFFICIENT_LIQUIDITY_BURNED');
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20(_token0).balanceOf(address(this));
        balance1 = IERC20(_token1).balanceOf(address(this));

        _update(balance0, balance1, _reserve0, _reserve1);
        if (feeOn) kLast = uint(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(uint amount0Out, uint amount1Out, address to, bytes calldata data) external lock {
        require(amount0Out > 0 || amount1Out > 0, 'MOK: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'MOK: INSUFFICIENT_LIQUIDITY');

        uint balance0;
        uint balance1;
        { // scope for _token{0,1}, avoids stack too deep errors
        address _token0 = token0;
        address _token1 = token1;
        require(to != _token0 && to != _token1, 'MOK: 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) IMOKCallee(to).MOKCall(msg.sender, amount0Out, amount1Out, data);
        balance0 = IERC20(_token0).balanceOf(address(this));
        balance1 = IERC20(_token1).balanceOf(address(this));
        }
        uint amount0In = balance0 > _reserve0 - amount0Out ? balance0 - (_reserve0 - amount0Out) : 0;
        uint amount1In = balance1 > _reserve1 - amount1Out ? balance1 - (_reserve1 - amount1Out) : 0;
        require(amount0In > 0 || amount1In > 0, 'MOK: INSUFFICIENT_INPUT_AMOUNT');
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
        uint balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(2));
        uint balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(2));
        require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(1000**2), 'MOK: 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, IERC20(_token0).balanceOf(address(this)).sub(reserve0));
        _safeTransfer(_token1, to, IERC20(_token1).balanceOf(address(this)).sub(reserve1));
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Burn","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1","type":"uint256"}],"name":"Mint","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1In","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount0Out","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount1Out","type":"uint256"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"Swap","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint112","name":"reserve0","type":"uint112"},{"indexed":false,"internalType":"uint112","name":"reserve1","type":"uint112"}],"name":"Sync","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"constant":true,"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint32","name":"_blockTimestampLast","type":"uint32"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"name":"initialize","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"amount0Out","type":"uint256"},{"internalType":"uint256","name":"amount1Out","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"swap","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"sync","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]

60806040526001600c5534801561001557600080fd5b50604051469080605261230c8239604080519182900360520182208282018252600d83526c4d4f4b20546f6b656e204c507360981b6020938401528151808301835260018152603160f81b908401528151808401919091527f5368e4bcb491545307b15887d73c6a907b296d62b30e77179e389f271a629fd7818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b03191633179055612204806101086000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610b2e565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610b57565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b81565b604080519115158252519081900360200190f35b610339610b98565b604080516001600160a01b039092168252519081900360200190f35b61035d610ba7565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610bad565b61035d610c47565b6103b5610c6b565b6040805160ff9092168252519081900360200190f35b61035d610c70565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c76565b61035d610cf4565b61035d610cfa565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610d00565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b0316610ffa565b61035d61100c565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316611012565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611024565b6040805192835260208301919091528051918290030190f35b6102446113c4565b61031d600480360360408110156104e857600080fd5b506001600160a01b0381351690602001356113e6565b61035d6113f3565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b03166113f9565b61033961155e565b61033961156d565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c0013561157c565b61035d600480360360408110156105a357600080fd5b506001600160a01b0381358116916020013516611771565b61023a61178e565b600c54600114610608576040805162461bcd60e51b815260206004820152600b60248201526a1353d2ce881313d0d2d15160aa1b604482015290519081900360640190fd5b6000600c558415158061061b5750600084115b61066c576040805162461bcd60e51b815260206004820152601f60248201527f4d4f4b3a20494e53554646494349454e545f4f55545055545f414d4f554e5400604482015290519081900360640190fd5b600080610677610b57565b5091509150816001600160701b03168710801561069c5750806001600160701b031686105b6106ed576040805162461bcd60e51b815260206004820152601b60248201527f4d4f4b3a20494e53554646494349454e545f4c49515549444954590000000000604482015290519081900360640190fd5b60065460075460009182916001600160a01b0391821691908116908916821480159061072b5750806001600160a01b0316896001600160a01b031614155b61076e576040805162461bcd60e51b815260206004820152600f60248201526e4d4f4b3a20494e56414c49445f544f60881b604482015290519081900360640190fd5b8a1561077f5761077f828a8d6118ea565b891561079057610790818a8c6118ea565b861561084b57886001600160a01b03166347170b9d338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561083257600080fd5b505af1158015610846573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561089157600080fd5b505afa1580156108a5573d6000803e3d6000fd5b505050506040513d60208110156108bb57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b15801561090757600080fd5b505afa15801561091b573d6000803e3d6000fd5b505050506040513d602081101561093157600080fd5b5051925060009150506001600160701b0385168a90038311610954576000610963565b89856001600160701b03160383035b9050600089856001600160701b031603831161098057600061098f565b89856001600160701b03160383035b905060008211806109a05750600081115b6109f1576040805162461bcd60e51b815260206004820152601e60248201527f4d4f4b3a20494e53554646494349454e545f494e5055545f414d4f554e540000604482015290519081900360640190fd5b6000610a25610a0784600263ffffffff611a7b16565b610a19876103e863ffffffff611a7b16565b9063ffffffff611ade16565b90506000610a3d610a0784600263ffffffff611a7b16565b9050610a6e620f4240610a626001600160701b038b8116908b1663ffffffff611a7b16565b9063ffffffff611a7b16565b610a7e838363ffffffff611a7b16565b1015610aba576040805162461bcd60e51b81526020600482015260066024820152654d4f4b3a204b60d01b604482015290519081900360640190fd5b5050610ac884848888611b2e565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600d81526020016c4d4f4b20546f6b656e204c507360981b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b8e338484611ced565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c32576001600160a01b0384166000908152600260209081526040808320338452909152902054610c0d908363ffffffff611ade16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c3d848484611d4f565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610cc6576040805162461bcd60e51b815260206004820152600e60248201526d26a7a59d102327a92124a22222a760911b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610d47576040805162461bcd60e51b815260206004820152600b60248201526a1353d2ce881313d0d2d15160aa1b604482015290519081900360640190fd5b6000600c81905580610d57610b57565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610dab57600080fd5b505afa158015610dbf573d6000803e3d6000fd5b505050506040513d6020811015610dd557600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e2857600080fd5b505afa158015610e3c573d6000803e3d6000fd5b505050506040513d6020811015610e5257600080fd5b505190506000610e71836001600160701b03871663ffffffff611ade16565b90506000610e8e836001600160701b03871663ffffffff611ade16565b90506000610e9c8787611e09565b60005490915080610ed957610ec56103e8610a19610ec0878763ffffffff611a7b16565b611f67565b9850610ed460006103e8611fb9565b610f28565b610f256001600160701b038916610ef6868463ffffffff611a7b16565b81610efd57fe5b046001600160701b038916610f18868563ffffffff611a7b16565b81610f1f57fe5b0461204f565b98505b60008911610f675760405162461bcd60e51b81526004018080602001828103825260228152602001806121ae6022913960400191505060405180910390fd5b610f718a8a611fb9565b610f7d86868a8a611b2e565b8115610fad57600854610fa9906001600160701b0380821691600160701b90041663ffffffff611a7b16565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c5460011461106c576040805162461bcd60e51b815260206004820152600b60248201526a1353d2ce881313d0d2d15160aa1b604482015290519081900360640190fd5b6000600c8190558061107c610b57565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b1580156110d857600080fd5b505afa1580156110ec573d6000803e3d6000fd5b505050506040513d602081101561110257600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561115057600080fd5b505afa158015611164573d6000803e3d6000fd5b505050506040513d602081101561117a57600080fd5b5051306000908152600160205260408120549192506111998888611e09565b600054909150806111b0848763ffffffff611a7b16565b816111b757fe5b049a50806111cb848663ffffffff611a7b16565b816111d257fe5b04995060008b1180156111e5575060008a115b6112205760405162461bcd60e51b815260040180806020018281038252602281526020018061218c6022913960400191505060405180910390fd5b61122a3084612067565b611235878d8d6118ea565b611240868d8c6118ea565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561128657600080fd5b505afa15801561129a573d6000803e3d6000fd5b505050506040513d60208110156112b057600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b1580156112fc57600080fd5b505afa158015611310573d6000803e3d6000fd5b505050506040513d602081101561132657600080fd5b5051935061133685858b8b611b2e565b811561136657600854611362906001600160701b0380821691600160701b90041663ffffffff611a7b16565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600681526020016504d4f4b2d4c560d41b81525081565b6000610b8e338484611d4f565b6103e881565b600c5460011461143e576040805162461bcd60e51b815260206004820152600b60248201526a1353d2ce881313d0d2d15160aa1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b0394851694909316926114ed92859287926114e8926001600160701b03169185916370a0823191602480820192602092909190829003018186803b1580156114b057600080fd5b505afa1580156114c4573d6000803e3d6000fd5b505050506040513d60208110156114da57600080fd5b50519063ffffffff611ade16565b6118ea565b600854604080516370a0823160e01b8152306004820152905161155492849287926114e892600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b1580156114b057600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b428410156115c0576040805162461bcd60e51b815260206004820152600c60248201526b1353d2ce881156141254915160a21b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156116db573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117115750886001600160a01b0316816001600160a01b0316145b61175b576040805162461bcd60e51b81526020600482015260166024820152754d4f4b3a20494e56414c49445f5349474e415455524560501b604482015290519081900360640190fd5b611766898989611ced565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c546001146117d3576040805162461bcd60e51b815260206004820152600b60248201526a1353d2ce881313d0d2d15160aa1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b815230600482015290516118e3926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561182457600080fd5b505afa158015611838573d6000803e3d6000fd5b505050506040513d602081101561184e57600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561189b57600080fd5b505afa1580156118af573d6000803e3d6000fd5b505050506040513d60208110156118c557600080fd5b50516008546001600160701b0380821691600160701b900416611b2e565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b602083106119975780518252601f199092019160209182019101611978565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146119f9576040519150601f19603f3d011682016040523d82523d6000602084013e6119fe565b606091505b5091509150818015611a2c575080511580611a2c5750808060200190516020811015611a2957600080fd5b50515b611a74576040805162461bcd60e51b81526020600482015260146024820152731353d2ce881514905394d1915497d1905253115160621b604482015290519081900360640190fd5b5050505050565b6000811580611a9657505080820282828281611a9357fe5b04145b610b92576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b92576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611b4c57506001600160701b038311155b611b8d576040805162461bcd60e51b815260206004820152600d60248201526c4d4f4b3a204f564552464c4f5760981b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611bbd57506001600160701b03841615155b8015611bd157506001600160701b03831615155b15611c42578063ffffffff16611bff85611bea86612105565b6001600160e01b03169063ffffffff61211716565b600980546001600160e01b03929092169290920201905563ffffffff8116611c2a84611bea87612105565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611d78908263ffffffff611ade16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611dad908263ffffffff61213c16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611e5a57600080fd5b505afa158015611e6e573d6000803e3d6000fd5b505050506040513d6020811015611e8457600080fd5b5051600b546001600160a01b038216158015945091925090611f53578015611f4e576000611ec7610ec06001600160701b0388811690881663ffffffff611a7b16565b90506000611ed483611f67565b905080821115611f4b576000611f02611ef3848463ffffffff611ade16565b6000549063ffffffff611a7b16565b90506000611f2783611f1b86600363ffffffff611a7b16565b9063ffffffff61213c16565b90506000818381611f3457fe5b0490508015611f4757611f478782611fb9565b5050505b50505b611f5f565b8015611f5f576000600b555b505092915050565b60006003821115611faa575080600160028204015b81811015611fa457809150600281828581611f9357fe5b040181611f9c57fe5b049050611f7c565b50611fb4565b8115611fb4575060015b919050565b600054611fcc908263ffffffff61213c16565b60009081556001600160a01b038316815260016020526040902054611ff7908263ffffffff61213c16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061205e5781612060565b825b9392505050565b6001600160a01b038216600090815260016020526040902054612090908263ffffffff611ade16565b6001600160a01b038316600090815260016020526040812091909155546120bd908263ffffffff611ade16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161213457fe5b049392505050565b80820182811015610b92576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe4d4f4b3a20494e53554646494349454e545f4c49515549444954595f4255524e45444d4f4b3a20494e53554646494349454e545f4c49515549444954595f4d494e544544a265627a7a72315820850fb777cd193d3ab5f1ace200dc850e8084eafbb9ebcd99cf51f86354a8295564736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429

Deployed ByteCode Sourcemap

10315:9589:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10315:9589:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17464:1847;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;17464:1847:0;;;;;;;;-1:-1:-1;;;;;17464:1847:0;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;17464:1847:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;17464:1847:0;;;;;;100:9:-1;95:1;81:12;77:20;67:8;63:35;60:50;39:11;25:12;22:29;11:107;8:2;;;131:1;128;121:12;8:2;-1:-1;17464:1847:0;;-1:-1:-1;17464:1847:0;-1:-1:-1;17464:1847:0;:::i;:::-;;4880:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;4880:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11312:231;;;:::i;:::-;;;;-1:-1:-1;;;;;11312:231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6930:147;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;6930:147:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;10607:21;;;:::i;:::-;;;;-1:-1:-1;;;;;10607:21:0;;;;;;;;;;;;;;5021:24;;;:::i;:::-;;;;;;;;;;;;;;;;7232:301;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7232:301:0;;;;;;;;;;;;;;;;;:::i;5313:108::-;;;:::i;4979:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5170:31;;;:::i;12366:204::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12366:204:0;;;;;;;;;;:::i;10958:32::-;;;:::i;10997:::-;;;:::i;14546:1234::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14546:1234:0;-1:-1:-1;;;;;14546:1234:0;;:::i;5052:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5052:41:0;-1:-1:-1;;;;;5052:41:0;;:::i;11036:17::-;;;:::i;5428:38::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5428:38:0;-1:-1:-1;;;;;5428:38:0;;:::i;15892:1460::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15892:1460:0;-1:-1:-1;;;;;15892:1460:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4932:40;;;:::i;7085:139::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7085:139:0;;;;;;;;:::i;10428:46::-;;;:::i;19360:334::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19360:334:0;-1:-1:-1;;;;;19360:334:0;;:::i;10578:22::-;;;:::i;10635:21::-;;;:::i;7541:662::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;7541:662:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;5100:61::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5100:61:0;;;;;;;;;;:::i;19743:158::-;;;:::i;17464:1847::-;11209:8;;11221:1;11209:13;11201:37;;;;;-1:-1:-1;;;11201:37:0;;;;;;;;;;;;-1:-1:-1;;;11201:37:0;;;;;;;;;;;;;;;11260:1;11249:8;:12;17578:14;;;;:32;;;17609:1;17596:10;:14;17578:32;17570:76;;;;;-1:-1:-1;;;17570:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17658:17;17677;17699:13;:11;:13::i;:::-;17657:55;;;;;17759:9;-1:-1:-1;;;;;17746:22:0;:10;:22;:48;;;;;17785:9;-1:-1:-1;;;;;17772:22:0;:10;:22;17746:48;17738:88;;;;;-1:-1:-1;;;17738:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17971:6;;18006;;17839:13;;;;-1:-1:-1;;;;;17971:6:0;;;;18006;;;;18031:13;;;;;;;:30;;;18054:7;-1:-1:-1;;;;;18048:13:0;:2;-1:-1:-1;;;;;18048:13:0;;;18031:30;18023:58;;;;;-1:-1:-1;;;18023:58:0;;;;;;;;;;;;-1:-1:-1;;;18023:58:0;;;;;;;;;;;;;;;18096:14;;18092:58;;18112:38;18126:7;18135:2;18139:10;18112:13;:38::i;:::-;18199:14;;18195:58;;18215:38;18229:7;18238:2;18242:10;18215:13;:38::i;:::-;18302:15;;18298:85;;18330:2;-1:-1:-1;;;;;18319:22:0;;18342:10;18354;18366;18378:4;;18319:64;;;;;;;;;;;;;-1:-1:-1;;;;;18319:64:0;-1:-1:-1;;;;;18319:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;93:3;85:6;81:16;74:27;137:4;133:9;126:4;121:3;117:14;113:30;106:37;;169:3;161:6;157:16;147:26;;18319:64:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18319:64:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18319:64:0;;;;18298:85;18405:40;;;-1:-1:-1;;;18405:40:0;;18439:4;18405:40;;;;;;-1:-1:-1;;;;;18405:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;18405:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18405:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18405:40:0;18467;;;-1:-1:-1;;;18467:40:0;;18501:4;18467:40;;;;;;18405;;-1:-1:-1;;;;;;18467:25:0;;;;;:40;;;;;18405;;18467;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;18467:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18467:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18467:40:0;;-1:-1:-1;18529:14:0;;-1:-1:-1;;;;;;;18557:22:0;;;;;18546:33;;:75;;18620:1;18546:75;;;18606:10;18594:9;-1:-1:-1;;;;;18594:22:0;;18582:8;:35;18546:75;18529:92;;18632:14;18672:10;18660:9;-1:-1:-1;;;;;18660:22:0;;18649:8;:33;:75;;18723:1;18649:75;;;18709:10;18697:9;-1:-1:-1;;;;;18697:22:0;;18685:8;:35;18649:75;18632:92;;18755:1;18743:9;:13;:30;;;;18772:1;18760:9;:13;18743:30;18735:73;;;;;-1:-1:-1;;;18735:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;18894:21;18918:40;18941:16;:9;18955:1;18941:16;:13;:16;:::i;:::-;18918:18;:8;18931:4;18918:18;:12;:18;:::i;:::-;:22;:40;:22;:40;:::i;:::-;18894:64;-1:-1:-1;18969:21:0;18993:40;19016:16;:9;19030:1;19016:16;:13;:16;:::i;18993:40::-;18969:64;-1:-1:-1;19094:43:0;19129:7;19094:30;-1:-1:-1;;;;;19094:15:0;;;;:30;;;:19;:30;:::i;:::-;:34;:43;:34;:43;:::i;:::-;19052:38;:16;19073;19052:38;:20;:38;:::i;:::-;:85;;19044:104;;;;;-1:-1:-1;;;19044:104:0;;;;;;;;;;;;-1:-1:-1;;;19044:104:0;;;;;;;;;;;;;;;11272:1;;19172:49;19180:8;19190;19200:9;19211;19172:7;:49::i;:::-;19237:66;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19237:66:0;;;19242:10;;19237:66;;;;;;;;;-1:-1:-1;;11295:1:0;11284:8;:12;-1:-1:-1;;;;;;;;;17464:1847:0:o;4880:45::-;;;;;;;;;;;;;;-1:-1:-1;;;4880:45:0;;;;:::o;11312:231::-;11445:8;;-1:-1:-1;;;;;11445:8:0;;;;-1:-1:-1;;;11476:8:0;;;;;;-1:-1:-1;;;11517:18:0;;;;;11312:231::o;6930:147::-;6994:4;7011:36;7020:10;7032:7;7041:5;7011:8;:36::i;:::-;-1:-1:-1;7065:4:0;6930:147;;;;;:::o;10607:21::-;;;-1:-1:-1;;;;;10607:21:0;;:::o;5021:24::-;;;;:::o;7232:301::-;-1:-1:-1;;;;;7331:15:0;;7310:4;7331:15;;;:9;:15;;;;;;;;7347:10;7331:27;;;;;;;;-1:-1:-1;;7331:39:0;7327:140;;-1:-1:-1;;;;;7417:15:0;;;;;;:9;:15;;;;;;;;7433:10;7417:27;;;;;;;;:38;;7449:5;7417:38;:31;:38;:::i;:::-;-1:-1:-1;;;;;7387:15:0;;;;;;:9;:15;;;;;;;;7403:10;7387:27;;;;;;;:68;7327:140;7477:26;7487:4;7493:2;7497:5;7477:9;:26::i;:::-;-1:-1:-1;7521:4:0;7232:301;;;;;:::o;5313:108::-;5355:66;5313:108;:::o;4979:35::-;5012:2;4979:35;:::o;5170:31::-;;;;:::o;12366:204::-;12462:7;;-1:-1:-1;;;;;12462:7:0;12448:10;:21;12440:48;;;;;-1:-1:-1;;;12440:48:0;;;;;;;;;;;;-1:-1:-1;;;12440:48:0;;;;;;;;;;;;;;;12519:6;:16;;-1:-1:-1;;;;;12519:16:0;;;-1:-1:-1;;;;;;12519:16:0;;;;;;;12546:6;:16;;;;;;;;;;;12366:204::o;10958:32::-;;;;:::o;10997:::-;;;;:::o;14546:1234::-;14595:14;11209:8;;11221:1;11209:13;11201:37;;;;;-1:-1:-1;;;11201:37:0;;;;;;;;;;;;-1:-1:-1;;;11201:37:0;;;;;;;;;;;;;;;11260:1;11249:8;:12;;;11260:1;14664:13;:11;:13::i;:::-;-1:-1:-1;14726:6:0;;14719:39;;;-1:-1:-1;;;14719:39:0;;14752:4;14719:39;;;;;;14622:55;;-1:-1:-1;14622:55:0;;-1:-1:-1;14703:13:0;;-1:-1:-1;;;;;14726:6:0;;;;14719:24;;:39;;;;;;;;;;;;;;14726:6;14719:39;;;5:2:-1;;;;30:1;27;20:12;5:2;14719:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14719:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14719:39:0;14792:6;;14785:39;;;-1:-1:-1;;;14785:39:0;;14818:4;14785:39;;;;;;14719;;-1:-1:-1;14769:13:0;;-1:-1:-1;;;;;14792:6:0;;;;14785:24;;:39;;;;;14719;;14785;;;;;;;;14792:6;14785:39;;;5:2:-1;;;;30:1;27;20:12;5:2;14785:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14785:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14785:39:0;;-1:-1:-1;14835:12:0;14850:23;:8;-1:-1:-1;;;;;14850:23:0;;;:12;:23;:::i;:::-;14835:38;-1:-1:-1;14884:12:0;14899:23;:8;-1:-1:-1;;;;;14899:23:0;;;:12;:23;:::i;:::-;14884:38;;14935:10;14948:30;14957:9;14968;14948:8;:30::i;:::-;14989:17;15009:11;14935:43;;-1:-1:-1;15113:17:0;15109:352;;15159:54;10469:5;15159:31;15169:20;:7;15181;15169:20;:11;:20;:::i;:::-;15159:9;:31::i;:54::-;15147:66;;15227:36;15241:1;10469:5;15227;:36::i;:::-;15109:352;;;15363:86;-1:-1:-1;;;;;15372:37:0;;:25;:7;15384:12;15372:25;:11;:25;:::i;:::-;:37;;;;;;-1:-1:-1;;;;;15411:37:0;;:25;:7;15423:12;15411:25;:11;:25;:::i;:::-;:37;;;;;;15363:8;:86::i;:::-;15351:98;;15109:352;15491:1;15479:9;:13;15471:60;;;;-1:-1:-1;;;15471:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15542:20;15548:2;15552:9;15542:5;:20::i;:::-;15575:49;15583:8;15593;15603:9;15614;15575:7;:49::i;:::-;15639:5;15635:47;;;15673:8;;15654:28;;-1:-1:-1;;;;;15659:8:0;;;;-1:-1:-1;;;15673:8:0;;;15654:28;:18;:28;:::i;:::-;15646:5;:36;15635:47;15738:34;;;;;;;;;;;;;;15743:10;;15738:34;;;;;;;;-1:-1:-1;;11295:1:0;11284:8;:12;-1:-1:-1;14546:1234:0;;;-1:-1:-1;;;;;;14546:1234:0:o;5052:41::-;;;;;;;;;;;;;:::o;11036:17::-;;;;:::o;5428:38::-;;;;;;;;;;;;;:::o;15892:1460::-;15941:12;15955;11209:8;;11221:1;11209:13;11201:37;;;;;-1:-1:-1;;;11201:37:0;;;;;;;;;;;;-1:-1:-1;;;11201:37:0;;;;;;;;;;;;;;;11260:1;11249:8;:12;;;11260:1;16022:13;:11;:13::i;:::-;-1:-1:-1;16079:6:0;;16160;;16239:40;;;-1:-1:-1;;;16239:40:0;;16273:4;16239:40;;;;;;15980:55;;-1:-1:-1;15980:55:0;;-1:-1:-1;;;;;;16079:6:0;;;;16160;;;16061:15;;16079:6;;16239:25;;:40;;;;;;;;;;;;;;16079:6;16239:40;;;5:2:-1;;;;30:1;27;20:12;5:2;16239:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16239:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16239:40:0;16306;;;-1:-1:-1;;;16306:40:0;;16340:4;16306:40;;;;;;16239;;-1:-1:-1;16290:13:0;;-1:-1:-1;;;;;16306:25:0;;;;;:40;;;;;16239;;16306;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;16306:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16306:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16306:40:0;16392:4;16357:14;16374:24;;;:9;16306:40;16374:24;;;;;16306:40;;-1:-1:-1;16424:30:0;16433:9;16444;16424:8;:30::i;:::-;16465:17;16485:11;16411:43;;-1:-1:-1;16485:11:0;16595:23;:9;16609:8;16595:23;:13;:23;:::i;:::-;:38;;;;;;;-1:-1:-1;16728:12:0;16702:23;:9;16716:8;16702:23;:13;:23;:::i;:::-;:38;;;;;;16692:48;;16817:1;16807:7;:11;:26;;;;;16832:1;16822:7;:11;16807:26;16799:73;;;;-1:-1:-1;;;16799:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16883:31;16897:4;16904:9;16883:5;:31::i;:::-;16925:35;16939:7;16948:2;16952:7;16925:13;:35::i;:::-;16971;16985:7;16994:2;16998:7;16971:13;:35::i;:::-;17028:40;;;-1:-1:-1;;;17028:40:0;;17062:4;17028:40;;;;;;-1:-1:-1;;;;;17028:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;17028:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17028:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17028:40:0;17090;;;-1:-1:-1;;;17090:40:0;;17124:4;17090:40;;;;;;17028;;-1:-1:-1;;;;;;17090:25:0;;;;;:40;;;;;17028;;17090;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;17090:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17090:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17090:40:0;;-1:-1:-1;17143:49:0;17151:8;17090:40;17171:9;17182;17143:7;:49::i;:::-;17207:5;17203:47;;;17241:8;;17222:28;;-1:-1:-1;;;;;17227:8:0;;;;-1:-1:-1;;;17241:8:0;;;17222:28;:18;:28;:::i;:::-;17214:5;:36;17203:47;17306:38;;;;;;;;;;;;;;-1:-1:-1;;;;;17306:38:0;;;17311:10;;17306:38;;;;;;;;;;;11272:1;;;;;;;;;11295;11284:8;:12;;;;15892:1460;;;:::o;4932:40::-;;;;;;;;;;;;;;-1:-1:-1;;;4932:40:0;;;;:::o;7085:139::-;7145:4;7162:32;7172:10;7184:2;7188:5;7162:9;:32::i;10428:46::-;10469:5;10428:46;:::o;19360:334::-;11209:8;;11221:1;11209:13;11201:37;;;;;-1:-1:-1;;;11201:37:0;;;;;;;;;;;;-1:-1:-1;;;11201:37:0;;;;;;;;;;;;;;;11260:1;11249:8;:12;19429:6;;19479;;19583:8;;19538:40;;;-1:-1:-1;;;19538:40:0;;19572:4;19538:40;;;;;;-1:-1:-1;;;;;19429:6:0;;;;19479;;;;19511:82;;19429:6;;19534:2;;19538:54;;-1:-1:-1;;;;;19583:8:0;;19429:6;;19538:25;;:40;;;;;;;;;;;;;;;19429:6;19538:40;;;5:2:-1;;;;30:1;27;20:12;5:2;19538:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19538:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19538:40:0;;:54;:44;:54;:::i;:::-;19511:13;:82::i;:::-;19676:8;;19631:40;;;-1:-1:-1;;;19631:40:0;;19665:4;19631:40;;;;;;19604:82;;19618:7;;19627:2;;19631:54;;-1:-1:-1;;;19676:8:0;;-1:-1:-1;;;;;19676:8:0;;-1:-1:-1;;;;;19631:25:0;;;;;:40;;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;19604:82:0;-1:-1:-1;;11295:1:0;11284:8;:12;-1:-1:-1;19360:334:0:o;10578:22::-;;;-1:-1:-1;;;;;10578:22:0;;:::o;10635:21::-;;;-1:-1:-1;;;;;10635:21:0;;:::o;7541:662::-;7687:15;7675:8;:27;;7667:52;;;;;-1:-1:-1;;;7667:52:0;;;;;;;;;;;;-1:-1:-1;;;7667:52:0;;;;;;;;;;;;;;;7835:16;;-1:-1:-1;;;;;7931:13:0;;;7730:14;7931:13;;;:6;:13;;;;;;;;:15;;;;;;;;;7880:77;;5355:66;7880:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;7880:77:0;;;;;7870:88;;;;;;-1:-1:-1;;;7771:202:0;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;7771:202:0;;;;;;7747:237;;;;;;;;;8022:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7730:14;;7931:15;8022:26;;;;;-1:-1:-1;;8022:26:0;;;;;;;;;;7931:15;8022:26;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;8022:26:0;;-1:-1:-1;;8022:26:0;;;-1:-1:-1;;;;;;;8067:30:0;;;;;;:59;;;8121:5;-1:-1:-1;;;;;8101:25:0;:16;-1:-1:-1;;;;;8101:25:0;;8067:59;8059:94;;;;;-1:-1:-1;;;8059:94:0;;;;;;;;;;;;-1:-1:-1;;;8059:94:0;;;;;;;;;;;;;;;8164:31;8173:5;8180:7;8189:5;8164:8;:31::i;:::-;7541:662;;;;;;;;;:::o;5100:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;19743:158::-;11209:8;;11221:1;11209:13;11201:37;;;;;-1:-1:-1;;;11201:37:0;;;;;;;;;;;;-1:-1:-1;;;11201:37:0;;;;;;;;;;;;;;;11260:1;11249:8;:12;19799:6;;19792:39;;;-1:-1:-1;;;19792:39:0;;19825:4;19792:39;;;;;;19784:109;;-1:-1:-1;;;;;19799:6:0;;19792:24;;:39;;;;;;;;;;;;;;19799:6;19792:39;;;5:2:-1;;;;30:1;27;20:12;5:2;19792:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19792:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19792:39:0;19840:6;;19833:39;;;-1:-1:-1;;;19833:39:0;;19866:4;19833:39;;;;;;-1:-1:-1;;;;;19840:6:0;;;;19833:24;;:39;;;;;19792;;19833;;;;;;;;19840:6;19833:39;;;5:2:-1;;;;30:1;27;20:12;5:2;19833:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19833:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19833:39:0;19874:8;;-1:-1:-1;;;;;19874:8:0;;;;-1:-1:-1;;;19884:8:0;;;19784:7;:109::i;:::-;11295:1;11284:8;:12;19743:158::o;11551:281::-;10533:34;;;;;;;;;;;;;;;;;11679:43;;-1:-1:-1;;;;;11679:43:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11679:43:0;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;11668:55:0;;;;11633:12;;11647:17;;11668:10;;;11679:43;11668:55;;;25:18:-1;11668:55:0;;25:18:-1;36:153;66:2;61:3;58:11;36:153;;176:10;;164:23;;-1:-1;;139:12;;;;98:2;89:12;;;;114;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;11668:55:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;11632:91:0;;;;11742:7;:57;;;;-1:-1:-1;11754:11:0;;:16;;:44;;;11785:4;11774:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11774:24:0;11754:44;11734:90;;;;;-1:-1:-1;;;11734:90:0;;;;;;;;;;;;-1:-1:-1;;;11734:90:0;;;;;;;;;;;;;;;11551:281;;;;;:::o;4661:142::-;4713:6;4740;;;:30;;-1:-1:-1;;4755:5:0;;;4769:1;4764;4755:5;4764:1;4750:15;;;;;:20;4740:30;4732:63;;;;;-1:-1:-1;;;4732:63:0;;;;;;;;;;;;-1:-1:-1;;;4732:63:0;;;;;;;;;;;;;;4524:129;4608:5;;;4603:16;;;;4595:50;;;;;-1:-1:-1;;;4595:50:0;;;;;;;;;;;;-1:-1:-1;;;4595:50:0;;;;;;;;;;;;;;12659:854;-1:-1:-1;;;;;12771:23:0;;;;;:50;;-1:-1:-1;;;;;;12798:23:0;;;12771:50;12763:76;;;;;-1:-1:-1;;;12763:76:0;;;;;;;;;;;;-1:-1:-1;;;12763:76:0;;;;;;;;;;;;;;;12954:18;;12881:23;:15;:23;;;-1:-1:-1;;;12954:18:0;;;;12937:35;;;13010:15;;;;;;:33;;-1:-1:-1;;;;;;13029:14:0;;;;13010:33;:51;;;;-1:-1:-1;;;;;;13047:14:0;;;;13010:51;13006:336;;;13216:11;13163:64;;13168:44;13202:9;13168:27;13185:9;13168:16;:27::i;:::-;-1:-1:-1;;;;;13168:33:0;;:44;:33;:44;:::i;:::-;13139:20;:88;;-1:-1:-1;;;;;13163:50:0;;;;:64;;;;13139:88;;;13266:64;;;13271:44;13305:9;13271:27;13288:9;13271:16;:27::i;:44::-;13242:20;:88;;-1:-1:-1;;;;;13266:50:0;;;;:64;;;;13242:88;;;13006:336;13352:8;:28;;-1:-1:-1;;13352:28:0;-1:-1:-1;;;;;13352:28:0;;;;;;;-1:-1:-1;;;;13391:28:0;-1:-1:-1;;;13391:28:0;;;;;;;;;-1:-1:-1;;;;;13430:35:0;-1:-1:-1;;;13430:35:0;;;;;;;;;13481:24;;;13486:8;;;13481:24;;13496:8;;;;;;;13481:24;;;;;;;;;;;;;;;;;12659:854;;;;;;:::o;6525:169::-;-1:-1:-1;;;;;6606:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;6655:31;;;;;;;;;;;;;;;;;6525:169;;;:::o;6702:220::-;-1:-1:-1;;;;;6796:15:0;;;;;;:9;:15;;;;;;:26;;6816:5;6796:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;6778:15:0;;;;;;;:9;:15;;;;;;:44;;;;6849:13;;;;;;;:24;;6867:5;6849:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;6833:13:0;;;;;;;:9;:13;;;;;;;;;:40;;;;6889:25;;;;;;;6833:13;;6889:25;;;;;;;;;;;;;6702:220;;;:::o;13603:831::-;13676:10;13699:13;13727:7;;;;;;;;;-1:-1:-1;;;;;13727:7:0;-1:-1:-1;;;;;13715:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13715:28:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13715:28:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13715:28:0;13806:5;;-1:-1:-1;;;;;13762:19:0;;;;;;-1:-1:-1;13715:28:0;;-1:-1:-1;13806:5:0;13837:590;;13867:11;;13863:494;;13899:10;13912:41;13922:30;-1:-1:-1;;;;;13922:15:0;;;;:30;;;:19;:30;:::i;13912:41::-;13899:54;;13972:14;13989:17;13999:6;13989:9;:17::i;:::-;13972:34;;14037:9;14029:5;:17;14025:317;;;14071:14;14088:37;14104:20;:5;14114:9;14104:20;:9;:20;:::i;:::-;14088:11;;;:37;:15;:37;:::i;:::-;14071:54;-1:-1:-1;14148:16:0;14167:27;14184:9;14167:12;:5;14177:1;14167:12;:9;:12;:::i;:::-;:16;:27;:16;:27;:::i;:::-;14148:46;;14217:14;14246:11;14234:9;:23;;;;;;;-1:-1:-1;14284:13:0;;14280:42;;14299:23;14305:5;14312:9;14299:5;:23::i;:::-;14025:317;;;;13863:494;;;13837:590;;;14378:11;;14374:53;;14414:1;14406:5;:9;14374:53;13603:831;;;;;;:::o;8497:303::-;8542:6;8569:1;8565;:5;8561:232;;;-1:-1:-1;8591:1:0;8624;8620;8616:5;;:9;8640:92;8651:1;8647;:5;8640:92;;;8677:1;8673:5;;8715:1;8710;8706;8702;:5;;;;;;:9;8701:15;;;;;;8697:19;;8640:92;;;8561:232;;;;8753:6;;8749:44;;-1:-1:-1;8780:1:0;8749:44;8497:303;;;:::o;6099:201::-;6172:11;;:22;;6188:5;6172:22;:15;:22;:::i;:::-;6158:11;:36;;;-1:-1:-1;;;;;6221:13:0;;;;:9;:13;;;;;;:24;;6239:5;6221:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;6205:13:0;;;;;;:9;:13;;;;;;;;:40;;;;6261:31;;;;;;;6205:13;;;;6261:31;;;;;;;;;;6099:201;;:::o;8283:96::-;8335:6;8362:1;8358;:5;:13;;8370:1;8358:13;;;8366:1;8358:13;8354:17;8283:96;-1:-1:-1;;;8283:96:0:o;6308:209::-;-1:-1:-1;;;;;6387:15:0;;;;;;:9;:15;;;;;;:26;;6407:5;6387:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;6369:15:0;;;;;;:9;:15;;;;;:44;;;;6438:11;:22;;6454:5;6438:22;:15;:22;:::i;:::-;6424:11;:36;;;6476:33;;;;;;;;-1:-1:-1;;;;;6476:33:0;;;;;;;;;;;;;6308:209;;:::o;9069:120::-;-1:-1:-1;;;;;9145:10:0;-1:-1:-1;;;9145:17:0;;9069:120::o;9260:108::-;9320:9;-1:-1:-1;;;;;9350:10:0;;-1:-1:-1;;;;;9346:14:0;;9350:10;9346:14;;;;;;9260:108;-1:-1:-1;;;9260:108:0:o;4388:128::-;4472:5;;;4467:16;;;;4459:49;;;;;-1:-1:-1;;;4459:49:0;;;;;;;;;;;;-1:-1:-1;;;4459:49:0;;;;;;;;;;;;;

Swarm Source

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