Contract 0xc4e90ae0298e0e7be0102cce64089231e1e2d67c

 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0xc3788d318b6cd7f437cea9b2bcb9a471eacaff01b3bcc2ce5909c1b545d51fc0Approve202682222021-10-16 5:40:4723 hrs 46 mins ago0x97f3f355073725f454bea9a04f5e2f599d1c9fa0 IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.00139362
0xdbeda275ce62f1d6ca8501a51f4665339ebf4f611349a8dd6dd65ee39d0071ccApprove202449832021-10-15 13:51:501 day 15 hrs ago0xa022b492c69270a3845efd12f18f6cf8966e7cda IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.00139362
0x6f7f77092eaa644a6573936cb0ac6241ce3d0954857441cb0c5b42dcf2f4168eApprove201999312021-10-14 6:09:452 days 23 hrs ago0xbedeaa0991c9c90af4b52d0d8162f2f7a8acd1aa IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.00139362
0x8e7656c264e0418f268f95ebf66a5b6e4b91b1506081141d623faa550a471208Approve201295622021-10-12 7:57:504 days 21 hrs ago0x21aa112b7b1d4c3f88deb0c7d31691a302bb0c72 IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.00139362
0xc7b47fdea746397c4b320ddc5819d5735d651c44e4d8a14e2a0b5fd0529a0caaApprove200732452021-10-10 19:29:326 days 9 hrs ago0x396932cf21d7a37eb8db923d669fcd5bc0c751d2 IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.00139362
0xbe67fb6afe388b9a5dcfb9fda1571106a39b8c9ce07a6c01279fa09c5a96f0daApprove200664622021-10-10 15:24:006 days 14 hrs ago0x07a351bfa29bc0729447089740389a1c3b0d427e IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.00139362
0x2e7b3edaa3076ca2cdd53e31a854b7417f6c049a4d36746d7f4bf96dfe2700ccApprove200433602021-10-10 1:32:177 days 3 hrs ago0x4fac7c8cdb46d42f8ec76170a5459dded3c39162 IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.00139362
0xaccc1ec4e72d123412eb519b86d03c31585eeda9a4bbd726420a40936938a0b4Approve200410842021-10-10 0:07:357 days 5 hrs ago0x19bb9054b006e152aebb633fe3f62e47bcef8be7 IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.000478005
0xff0f350b51f52ccdb1aa4eef9ef7fc636f97ffe652a376d0834d7d9eb241167cApprove200015572021-10-08 23:34:198 days 5 hrs ago0x3fff000927923b18eb57c243cbb956a934a959c1 IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.00139362
0xbfafa48c4ba34a6ddf1b60b1876be7ca0c7402d2ca613258fe0819f1bcd8ded9Approve199128622021-10-06 16:24:5210 days 13 hrs ago0x321f011917e384e43e5e85b8d6f4a56dcdfe31e8 IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.00139362
0x0859141091f752afb479dd1130f4d1525233856a84eed705b8208478498935edApprove198682112021-10-05 11:06:3411 days 18 hrs ago0xf1251f54a0171d192664c596b45e778067795dc7 IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.000313438646
0x419e034508ebf5800d70b01b9aea891cb280f4a015b8398825c2d1c3efa7d7e4Approve198393922021-10-04 16:55:5312 days 12 hrs ago0x2367c80a2f2be305538333e39c7ed670c561929c IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.00139362
0xebb93ff0e9944860859910d98e5824400592cd1ace59e2d33ba1aedb164ebf36Approve198351332021-10-04 14:03:5312 days 15 hrs ago0xda1644fe1ccf3263096bc7db4a1cc205e0b2a431 IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.0005620934
0x37271de4a6d9b15ac5d04f47cd9062fe510a373918b1bb9a0a42b9c97b64d4d9Approve197993532021-10-03 14:43:3413 days 14 hrs ago0x5b7a3a14d0488eac9c1a1f943a80ecd983711797 IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.000221209302
0xf771bbaa05742ec6e5689fbb24c9b9652663a1d5f086d47ceead491ede68a05aApprove197665422021-10-02 17:51:0014 days 11 hrs ago0x4254344bb82e0c3a3e2ebe3b24dc7976304911a9 IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.0000836172
0xf9144c9950e2c18c8ee21ab59f58a31a51b1ecfcc8b8fdd53c85d99ed36f86cbApprove197664572021-10-02 17:48:0214 days 11 hrs ago0x5022c3248d85ee03a2b006209dae504918384c42 IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.000171707925
0xb52e3f03a6b2c5e2ecbe24203a13922ace9e7ab3fc1c70ee7b9b70f0b6772545Swap196853232021-09-30 15:53:2616 days 13 hrs ago0x6a58b7d28feb17108f937d00a64e1c280662b70e IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.0033444
0x84df87eefd2a13399fee5d0a0a56c00d689ee47e036895a5046a3a942d8ac4e1Approve196663692021-09-30 3:53:1117 days 1 hr ago0xaffd7a2a87e78446f97e596657449c21b9789a54 IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.00092908
0x76d291fc7bfd27efc71738de99d0451acdc15eb9e82c55de61bab36e167f8b1dApprove196535032021-09-29 19:06:3717 days 10 hrs ago0xaffd7a2a87e78446f97e596657449c21b9789a54 IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.000371632
0x21ac7788bef981e8214db7c7ed6398fb16d6deac8deae3d816ca1eb925f8bf3fApprove196476592021-09-29 15:32:0517 days 13 hrs ago0x0ed38965a966eeedaf2e6bb94b5ff4ec2a869500 IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.000173071175
0xc6b0680dd80ea11597d73ea82540603829115e9e947f1a4b5de1f3fec31c4b82Swap196461392021-09-29 14:07:5517 days 15 hrs ago0x6a58b7d28feb17108f937d00a64e1c280662b70e IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.00650668
0x8a00cde533129c6d263ce18ed8692e5840999c4d0e4399556b49ffdfad6eb224Approve196443632021-09-29 12:43:2417 days 16 hrs ago0x53968159ec02574bbd14e92601040be4306073f3 IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.00325178
0xb809b9829c9f23286e7b54ea3f02cd0acfbf81b1cda159d7a0d39d279f3e177bTransfer196057202021-09-28 8:58:1918 days 20 hrs ago0x80e76fb031f87b8673170c20398e9ae4db3131bb IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.000109596
0x4b52f11ffad77c3d767a76844d7aa29a206219c39b35155956e8fd7dee3ca7c0Approve195861552021-09-27 20:57:1219 days 8 hrs ago0x779a65c7c89bfb0e7aee78b870c5fcddebf20af2 IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.005435118
0x6c0c7c9315951322a89ddec1ceb77bc59d31dbcae0f6c40dbeb9ad5d1c0ec6b0Approve195696062021-09-27 10:44:4419 days 18 hrs ago0xb17d687306a00de2c0590cc2ea4f060ce2a96581 IN  0xc4e90ae0298e0e7be0102cce64089231e1e2d67c0 MATIC0.000278724
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x3f07347758481369a8abca898f0634e951e44d1ca16f7169bc92ff97a1aeb5c0177445002021-08-08 5:23:3470 days 4 mins ago 0x477ce834ae6b7ab003cce4bc4d8697763ff456fa  Contract Creation0 MATIC
[ Download CSV Export 
Loading

Contract Source Code Verified (Similar Match)
Note: This contract matches the deployed ByteCode of the Source Code for Contract 0x6b2d7c0cc9f75db8dd5228f329730bbc732fea05

Contract Name:
CatPair

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 8: CatPair.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity =0.6.12;

import './CatERC20.sol';
import './Math.sol';
import './UQ112x112.sol';
import './IERC20.sol';
import './ICatFactory.sol';
import './ICatCallee.sol';

contract CatPair is CatERC20 {
    using SafeMathUniswap  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, 'PolyCat: 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))), 'PolyCat: 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, 'PolyCat: 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), 'PolyCat: 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 14/24th of the growth in sqrt(k)
    function _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) {
        address feeTo = ICatFactory(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)).mul(14);
                    uint denominator = rootK.mul(10).add(rootKLast.mul(14));
                    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 = IERC20Uniswap(token0).balanceOf(address(this));
        uint balance1 = IERC20Uniswap(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, 'PolyCat: 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 = IERC20Uniswap(_token0).balanceOf(address(this));
        uint balance1 = IERC20Uniswap(_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, 'PolyCat: INSUFFICIENT_LIQUIDITY_BURNED');
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = IERC20Uniswap(_token0).balanceOf(address(this));
        balance1 = IERC20Uniswap(_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, 'PolyCat: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'PolyCat: 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, 'PolyCat: 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) ICatCallee(to).uniswapV2Call(msg.sender, amount0Out, amount1Out, data);
        balance0 = IERC20Uniswap(_token0).balanceOf(address(this));
        balance1 = IERC20Uniswap(_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, 'PolyCat: INSUFFICIENT_INPUT_AMOUNT');
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
        uint balance0Adjusted = balance0.mul(10000).sub(amount0In.mul(24));
        uint balance1Adjusted = balance1.mul(10000).sub(amount1In.mul(24));
        require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(10000**2), 'PolyCat: 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, IERC20Uniswap(_token0).balanceOf(address(this)).sub(reserve0));
        _safeTransfer(_token1, to, IERC20Uniswap(_token1).balanceOf(address(this)).sub(reserve1));
    }

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

File 2 of 8: CatERC20.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity =0.6.12;

import './SafeMath.sol';

contract CatERC20 {
    using SafeMathUniswap for uint;

    string public constant name = 'PolyCat LP';
    string public constant symbol = 'CAT-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, 'PolyCat: 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, 'PolyCat: INVALID_SIGNATURE');
        _approve(owner, spender, value);
    }
}

File 3 of 8: ICatCallee.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.5.0;

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

File 4 of 8: ICatFactory.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.5.0;

interface ICatFactory {
    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;
}

File 5 of 8: IERC20.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.5.0;

interface IERC20Uniswap {
    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);
}

File 6 of 8: Math.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity =0.6.12;

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

File 7 of 8: SafeMath.sol
// SPDX-License-Identifier: GPL-3.0

pragma solidity =0.6.12;

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

library SafeMathUniswap {
    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');
    }
}

File 8 of 8: UQ112x112.sol
// SPDX-License-Identifier: GPL-3.0

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

Contract Security Audit

Contract ABI

[{"inputs":[],"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"},{"inputs":[],"name":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINIMUM_LIQUIDITY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PERMIT_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"burn","outputs":[{"internalType":"uint256","name":"amount0","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReserves","outputs":[{"internalType":"uint112","name":"_reserve0","type":"uint112"},{"internalType":"uint112","name":"_reserve1","type":"uint112"},{"internalType":"uint32","name":"_blockTimestampLast","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token0","type":"address"},{"internalType":"address","name":"_token1","type":"address"}],"name":"initialize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"kLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"price0CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price1CumulativeLast","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"skim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sync","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"token0","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"token1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"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"}],"stateMutability":"nonpayable","type":"function"}]

60806040526001600c5534801561001557600080fd5b50604080518082018252600a8152690506f6c79436174204c560b41b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527f5c255b9d4975d03f596af9367040177cbf930e3f7c441e822f28a79be479d9b6818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b031916331790556121bb806101086000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610adc565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610b02565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b2c565b604080519115158252519081900360200190f35b610339610b43565b604080516001600160a01b039092168252519081900360200190f35b61035d610b52565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610b58565b61035d610bec565b6103b5610c10565b6040805160ff9092168252519081900360200190f35b61035d610c15565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c1b565b61035d610c9d565b61035d610ca3565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610ca9565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b0316610f83565b61035d610f95565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316610f9b565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316610fad565b6040805192835260208301919091528051918290030190f35b61024461133f565b61031d600480360360408110156104e857600080fd5b506001600160a01b038135169060200135611361565b61035d61136e565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b0316611374565b6103396114e4565b6103396114f3565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611502565b61035d600480360360408110156105a357600080fd5b506001600160a01b0381358116916020013516611702565b61023a61171f565b600c5460011461060c576040805162461bcd60e51b815260206004820152600f60248201526e141bdb1e50d85d0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c558415158061061f5750600084115b61065a5760405162461bcd60e51b81526004018080602001828103825260238152602001806120f56023913960400191505060405180910390fd5b600080610665610b02565b5091509150816001600160701b03168710801561068a5750806001600160701b031686105b6106db576040805162461bcd60e51b815260206004820152601f60248201527f506f6c794361743a20494e53554646494349454e545f4c495155494449545900604482015290519081900360640190fd5b60065460075460009182916001600160a01b039182169190811690891682148015906107195750806001600160a01b0316896001600160a01b031614155b610760576040805162461bcd60e51b8152602060048201526013602482015272506f6c794361743a20494e56414c49445f544f60681b604482015290519081900360640190fd5b8a1561077157610771828a8d61187f565b891561078257610782818a8c61187f565b861561083457886001600160a01b03166310d1e85c338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561081b57600080fd5b505af115801561082f573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561087a57600080fd5b505afa15801561088e573d6000803e3d6000fd5b505050506040513d60208110156108a457600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108f057600080fd5b505afa158015610904573d6000803e3d6000fd5b505050506040513d602081101561091a57600080fd5b5051925060009150506001600160701b0385168a9003831161093d57600061094c565b89856001600160701b03160383035b9050600089856001600160701b0316038311610969576000610978565b89856001600160701b03160383035b905060008211806109895750600081115b6109c45760405162461bcd60e51b81526004018080602001828103825260228152602001806121186022913960400191505060405180910390fd5b60006109e66109d4846018611a19565b6109e087612710611a19565b90611a7c565b905060006109f86109d4846018611a19565b9050610a1e6305f5e100610a186001600160701b038b8116908b16611a19565b90611a19565b610a288383611a19565b1015610a68576040805162461bcd60e51b815260206004820152600a602482015269506f6c794361743a204b60b01b604482015290519081900360640190fd5b5050610a7684848888611acc565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600a8152602001690506f6c79436174204c560b41b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b39338484611c89565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610bd7576001600160a01b0384166000908152600260209081526040808320338452909152902054610bb29083611a7c565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610be2848484611ceb565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610c6f576040805162461bcd60e51b81526020600482015260126024820152712837b63ca1b0ba1d102327a92124a22222a760711b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610cf4576040805162461bcd60e51b815260206004820152600f60248201526e141bdb1e50d85d0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c81905580610d04610b02565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d5857600080fd5b505afa158015610d6c573d6000803e3d6000fd5b505050506040513d6020811015610d8257600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610dd557600080fd5b505afa158015610de9573d6000803e3d6000fd5b505050506040513d6020811015610dff57600080fd5b505190506000610e18836001600160701b038716611a7c565b90506000610e2f836001600160701b038716611a7c565b90506000610e3d8787611d99565b60005490915080610e7457610e606103e86109e0610e5b8787611a19565b611ee8565b9850610e6f60006103e8611f3a565b610eb7565b610eb46001600160701b038916610e8b8684611a19565b81610e9257fe5b046001600160701b038916610ea78685611a19565b81610eae57fe5b04611fc4565b98505b60008911610ef65760405162461bcd60e51b81526004018080602001828103825260268152602001806121606026913960400191505060405180910390fd5b610f008a8a611f3a565b610f0c86868a8a611acc565b8115610f3657600854610f32906001600160701b0380821691600160701b900416611a19565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c54600114610ff9576040805162461bcd60e51b815260206004820152600f60248201526e141bdb1e50d85d0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c81905580611009610b02565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561106557600080fd5b505afa158015611079573d6000803e3d6000fd5b505050506040513d602081101561108f57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156110dd57600080fd5b505afa1580156110f1573d6000803e3d6000fd5b505050506040513d602081101561110757600080fd5b5051306000908152600160205260408120549192506111268888611d99565b600054909150806111378487611a19565b8161113e57fe5b049a508061114c8486611a19565b8161115357fe5b04995060008b118015611166575060008a115b6111a15760405162461bcd60e51b815260040180806020018281038252602681526020018061213a6026913960400191505060405180910390fd5b6111ab3084611fdc565b6111b6878d8d61187f565b6111c1868d8c61187f565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561120757600080fd5b505afa15801561121b573d6000803e3d6000fd5b505050506040513d602081101561123157600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b15801561127d57600080fd5b505afa158015611291573d6000803e3d6000fd5b505050506040513d60208110156112a757600080fd5b505193506112b785858b8b611acc565b81156112e1576008546112dd906001600160701b0380821691600160701b900416611a19565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600681526020016504341542d4c560d41b81525081565b6000610b39338484611ceb565b6103e881565b600c546001146113bd576040805162461bcd60e51b815260206004820152600f60248201526e141bdb1e50d85d0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b0394851694909316926114669285928792611461926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561142f57600080fd5b505afa158015611443573d6000803e3d6000fd5b505050506040513d602081101561145957600080fd5b505190611a7c565b61187f565b6114da81846114616008600e9054906101000a90046001600160701b03166001600160701b0316856001600160a01b03166370a08231306040518263ffffffff1660e01b815260040180826001600160a01b0316815260200191505060206040518083038186803b15801561142f57600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b4284101561154a576040805162461bcd60e51b815260206004820152601060248201526f141bdb1e50d85d0e881156141254915160821b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611665573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061169b5750886001600160a01b0316816001600160a01b0316145b6116ec576040805162461bcd60e51b815260206004820152601a60248201527f506f6c794361743a20494e56414c49445f5349474e4154555245000000000000604482015290519081900360640190fd5b6116f7898989611c89565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611768576040805162461bcd60e51b815260206004820152600f60248201526e141bdb1e50d85d0e881313d0d2d151608a1b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b81523060048201529051611878926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156117b957600080fd5b505afa1580156117cd573d6000803e3d6000fd5b505050506040513d60208110156117e357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561183057600080fd5b505afa158015611844573d6000803e3d6000fd5b505050506040513d602081101561185a57600080fd5b50516008546001600160701b0380821691600160701b900416611acc565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b6020831061192c5780518252601f19909201916020918201910161190d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d806000811461198e576040519150601f19603f3d011682016040523d82523d6000602084013e611993565b606091505b50915091508180156119c15750805115806119c157508080602001905160208110156119be57600080fd5b50515b611a12576040805162461bcd60e51b815260206004820152601860248201527f506f6c794361743a205452414e534645525f4641494c45440000000000000000604482015290519081900360640190fd5b5050505050565b6000811580611a3457505080820282828281611a3157fe5b04145b610b3d576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b3d576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611aea57506001600160701b038311155b611b2f576040805162461bcd60e51b8152602060048201526011602482015270506f6c794361743a204f564552464c4f5760781b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611b5f57506001600160701b03841615155b8015611b7357506001600160701b03831615155b15611bde578063ffffffff16611b9b85611b8c8661206e565b6001600160e01b031690612080565b600980546001600160e01b03929092169290920201905563ffffffff8116611bc684611b8c8761206e565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611d0e9082611a7c565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611d3d90826120a5565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611dea57600080fd5b505afa158015611dfe573d6000803e3d6000fd5b505050506040513d6020811015611e1457600080fd5b5051600b546001600160a01b038216158015945091925090611ed4578015611ecf576000611e51610e5b6001600160701b03888116908816611a19565b90506000611e5e83611ee8565b905080821115611ecc576000611e85600e610a18611e7c8686611a7c565b60005490611a19565b90506000611ea8611e9784600e611a19565b611ea286600a611a19565b906120a5565b90506000818381611eb557fe5b0490508015611ec857611ec88782611f3a565b5050505b50505b611ee0565b8015611ee0576000600b555b505092915050565b60006003821115611f2b575080600160028204015b81811015611f2557809150600281828581611f1457fe5b040181611f1d57fe5b049050611efd565b50611f35565b8115611f35575060015b919050565b600054611f4790826120a5565b60009081556001600160a01b038316815260016020526040902054611f6c90826120a5565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b6000818310611fd35781611fd5565b825b9392505050565b6001600160a01b038216600090815260016020526040902054611fff9082611a7c565b6001600160a01b038316600090815260016020526040812091909155546120269082611a7c565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161209d57fe5b049392505050565b80820182811015610b3d576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe506f6c794361743a20494e53554646494349454e545f4f55545055545f414d4f554e54506f6c794361743a20494e53554646494349454e545f494e5055545f414d4f554e54506f6c794361743a20494e53554646494349454e545f4c49515549444954595f4255524e4544506f6c794361743a20494e53554646494349454e545f4c49515549444954595f4d494e544544a264697066735822122086ff6995b9b023739147da4fb7382b2767aa93cbd97679a62faa783f4b4bf90664736f6c634300060c0033

Deployed ByteCode Sourcemap

214:9551:1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7294:1864;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;7294:1864:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7294:1864:1;;-1:-1:-1;7294:1864:1;-1:-1:-1;7294:1864:1;:::i;:::-;;150:42:0;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1185:227:1;;;:::i;:::-;;;;-1:-1:-1;;;;;1185:227:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2145:144:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2145:144:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;495:21:1;;;:::i;:::-;;;;-1:-1:-1;;;;;495:21:1;;;;;;;;;;;;;;285:24:0;;;:::i;:::-;;;;;;;;;;;;;;;;2437:295;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2437:295:0;;;;;;;;;;;;;;;;;:::i;571:108::-;;;:::i;244:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;430:31;;;:::i;2215:204:1:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2215:204:1;;;;;;;;;;:::i;839:32::-;;;:::i;877:::-;;;:::i;4374:1232::-;;;;;;;;;;;;;;;;-1:-1:-1;4374:1232:1;-1:-1:-1;;;;;4374:1232:1;;:::i;315:41:0:-;;;;;;;;;;;;;;;;-1:-1:-1;315:41:0;-1:-1:-1;;;;;315:41:0;;:::i;915:17:1:-;;;:::i;685:38:0:-;;;;;;;;;;;;;;;;-1:-1:-1;685:38:0;-1:-1:-1;;;;;685:38:0;;:::i;5715:1470:1:-;;;;;;;;;;;;;;;;-1:-1:-1;5715:1470:1;-1:-1:-1;;;;;5715:1470:1;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;198:40:0;;;:::i;2295:136::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2295:136:0;;;;;;;;:::i;320:46:1:-;;;:::i;9204:343::-;;;;;;;;;;;;;;;;-1:-1:-1;9204:343:1;-1:-1:-1;;;;;9204:343:1;;:::i;467:22::-;;;:::i;522:21::-;;;:::i;2738:658:0:-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;2738:658:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;362:61::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;362:61:0;;;;;;;;;;:::i;9593:170:1:-;;;:::i;7294:1864::-;1084:8;;1096:1;1084:13;1076:41;;;;;-1:-1:-1;;;1076:41:1;;;;;;;;;;;;-1:-1:-1;;;1076:41:1;;;;;;;;;;;;;;;1138:1;1127:8;:12;7407:14;;;;:32:::1;;;7438:1;7425:10;:14;7407:32;7399:80;;;;-1:-1:-1::0;;;7399:80:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7490:17;7509::::0;7531:13:::1;:11;:13::i;:::-;7489:55;;;;;7590:9;-1:-1:-1::0;;;;;7577:22:1::1;:10;:22;:48;;;;;7616:9;-1:-1:-1::0;;;;;7603:22:1::1;:10;:22;7577:48;7569:92;;;::::0;;-1:-1:-1;;;7569:92:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;7801:6;::::0;7835::::1;::::0;7672:13:::1;::::0;;;-1:-1:-1;;;;;7801:6:1;;::::1;::::0;7835;;::::1;::::0;7859:13;::::1;::::0;::::1;::::0;::::1;::::0;:30:::1;;;7882:7;-1:-1:-1::0;;;;;7876:13:1::1;:2;-1:-1:-1::0;;;;;7876:13:1::1;;;7859:30;7851:62;;;::::0;;-1:-1:-1;;;7851:62:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;7851:62:1;;;;;;;;;;;;;::::1;;7927:14:::0;;7923:58:::1;;7943:38;7957:7;7966:2;7970:10;7943:13;:38::i;:::-;8029:14:::0;;8025:58:::1;;8045:38;8059:7;8068:2;8072:10;8045:13;:38::i;:::-;8131:15:::0;;8127:91:::1;;8159:2;-1:-1:-1::0;;;;;8148:28:1::1;;8177:10;8189;8201;8213:4;;8148:70;;;;;;;;;;;;;-1:-1:-1::0;;;;;8148:70:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;8127:91;8239:47;::::0;;-1:-1:-1;;;8239:47:1;;8280:4:::1;8239:47;::::0;::::1;::::0;;;-1:-1:-1;;;;;8239:32:1;::::1;::::0;::::1;::::0;:47;;;;;::::1;::::0;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;8239:47:1;8307::::1;::::0;;-1:-1:-1;;;8307:47:1;;8348:4:::1;8307:47;::::0;::::1;::::0;;;8239;;-1:-1:-1;;;;;;8307:32:1;::::1;::::0;::::1;::::0;:47;;;;;8239::::1;::::0;8307;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;8307:47:1;;-1:-1:-1;8374:14:1::1;::::0;-1:-1:-1;;;;;;;8402:22:1;::::1;::::0;;::::1;8391:33:::0;::::1;:75;;8465:1;8391:75;;;8451:10;8439:9;-1:-1:-1::0;;;;;8439:22:1::1;;8427:8;:35;8391:75;8374:92;;8476:14;8516:10;8504:9;-1:-1:-1::0;;;;;8504:22:1::1;;8493:8;:33;:75;;8567:1;8493:75;;;8553:10;8541:9;-1:-1:-1::0;;;;;8541:22:1::1;;8529:8;:35;8493:75;8476:92;;8598:1;8586:9;:13;:30;;;;8615:1;8603:9;:13;8586:30;8578:77;;;;-1:-1:-1::0;;;8578:77:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8739:21;8763:42;8787:17;:9:::0;8801:2:::1;8787:13;:17::i;:::-;8763:19;:8:::0;8776:5:::1;8763:12;:19::i;:::-;:23:::0;::::1;:42::i;:::-;8739:66:::0;-1:-1:-1;8815:21:1::1;8839:42;8863:17;:9:::0;8877:2:::1;8863:13;:17::i;8839:42::-;8815:66:::0;-1:-1:-1;8941:44:1::1;8976:8;8941:30;-1:-1:-1::0;;;;;8941:15:1;;::::1;::::0;:30;::::1;:19;:30::i;:::-;:34:::0;::::1;:44::i;:::-;8899:38;:16:::0;8920;8899:20:::1;:38::i;:::-;:86;;8891:109;;;::::0;;-1:-1:-1;;;8891:109:1;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;8891:109:1;;;;;;;;;;;;;::::1;;1149:1;;9021:49;9029:8;9039;9049:9;9060;9021:7;:49::i;:::-;9085:66;::::0;;;;;::::1;::::0;::::1;::::0;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9085:66:1;::::1;::::0;9090:10:::1;::::0;9085:66:::1;::::0;;;;;;;::::1;-1:-1:-1::0;;1171:1:1;1160:8;:12;-1:-1:-1;;;;;;;;;7294:1864:1:o;150:42:0:-;;;;;;;;;;;;;;-1:-1:-1;;;150:42:0;;;;:::o;1185:227:1:-;1317:8;;-1:-1:-1;;;;;1317:8:1;;;;-1:-1:-1;;;1347:8:1;;;;;;-1:-1:-1;;;1387:18:1;;;;;1185:227::o;2145:144:0:-;2209:4;2225:36;2234:10;2246:7;2255:5;2225:8;:36::i;:::-;-1:-1:-1;2278:4:0;2145:144;;;;;:::o;495:21:1:-;;;-1:-1:-1;;;;;495:21:1;;:::o;285:24:0:-;;;;:::o;2437:295::-;-1:-1:-1;;;;;2535:15:0;;2515:4;2535:15;;;:9;:15;;;;;;;;2551:10;2535:27;;;;;;;;-1:-1:-1;;2535:39:0;2531:138;;-1:-1:-1;;;;;2620:15:0;;;;;;:9;:15;;;;;;;;2636:10;2620:27;;;;;;;;:38;;2652:5;2620:31;:38::i;:::-;-1:-1:-1;;;;;2590:15:0;;;;;;:9;:15;;;;;;;;2606:10;2590:27;;;;;;;:68;2531:138;2678:26;2688:4;2694:2;2698:5;2678:9;:26::i;:::-;-1:-1:-1;2721:4:0;2437:295;;;;;:::o;571:108::-;613:66;571:108;:::o;244:35::-;277:2;244:35;:::o;430:31::-;;;;:::o;2215:204:1:-;2310:7;;-1:-1:-1;;;;;2310:7:1;2296:10;:21;2288:52;;;;;-1:-1:-1;;;2288:52:1;;;;;;;;;;;;-1:-1:-1;;;2288:52:1;;;;;;;;;;;;;;;2370:6;:16;;-1:-1:-1;;;;;2370:16:1;;;-1:-1:-1;;;;;;2370:16:1;;;;;;;2396:6;:16;;;;;;;;;;;2215:204::o;839:32::-;;;;:::o;877:::-;;;;:::o;4374:1232::-;4423:14;1084:8;;1096:1;1084:13;1076:41;;;;;-1:-1:-1;;;1076:41:1;;;;;;;;;;;;-1:-1:-1;;;1076:41:1;;;;;;;;;;;;;;;1138:1;1127:8;:12;;;1138:1;4491:13:::1;:11;:13::i;:::-;-1:-1:-1::0;4559:6:1::1;::::0;4545:46:::1;::::0;;-1:-1:-1;;;4545:46:1;;4585:4:::1;4545:46;::::0;::::1;::::0;;;4449:55;;-1:-1:-1;4449:55:1;;-1:-1:-1;4529:13:1::1;::::0;-1:-1:-1;;;;;4559:6:1;;::::1;::::0;4545:31:::1;::::0;:46;;;;;::::1;::::0;;;;;;;;4559:6;4545:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;4545:46:1;4631:6:::1;::::0;4617:46:::1;::::0;;-1:-1:-1;;;4617:46:1;;4657:4:::1;4617:46;::::0;::::1;::::0;;;4545;;-1:-1:-1;4601:13:1::1;::::0;-1:-1:-1;;;;;4631:6:1;;::::1;::::0;4617:31:::1;::::0;:46;;;;;4545::::1;::::0;4617;;;;;;;;4631:6;4617:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;4617:46:1;;-1:-1:-1;4673:12:1::1;4688:23;:8:::0;-1:-1:-1;;;;;4688:23:1;::::1;:12;:23::i;:::-;4673:38:::0;-1:-1:-1;4721:12:1::1;4736:23;:8:::0;-1:-1:-1;;;;;4736:23:1;::::1;:12;:23::i;:::-;4721:38;;4770:10;4783:30;4792:9;4803;4783:8;:30::i;:::-;4823:17;4843:11:::0;4770:43;;-1:-1:-1;4946:17:1;4942:348:::1;;4991:54;361:5;4991:31;5001:20;:7:::0;5013;5001:11:::1;:20::i;:::-;4991:9;:31::i;:54::-;4979:66;;5059:36;5073:1;361:5;5059;:36::i;:::-;4942:348;;;5193:86;-1:-1:-1::0;;;;;5202:37:1;::::1;:25;:7:::0;5214:12;5202:11:::1;:25::i;:::-;:37;;;;;;-1:-1:-1::0;;;;;5241:37:1;::::1;:25;:7:::0;5253:12;5241:11:::1;:25::i;:::-;:37;;;;;;5193:8;:86::i;:::-;5181:98;;4942:348;5319:1;5307:9;:13;5299:64;;;;-1:-1:-1::0;;;5299:64:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5373:20;5379:2;5383:9;5373:5;:20::i;:::-;5404:49;5412:8;5422;5432:9;5443;5404:7;:49::i;:::-;5467:5;5463:47;;;5501:8;::::0;5482:28:::1;::::0;-1:-1:-1;;;;;5487:8:1;;::::1;::::0;-1:-1:-1;;;5501:8:1;::::1;;5482:18;:28::i;:::-;5474:5;:36:::0;5463:47:::1;5565:34;::::0;;;;;::::1;::::0;::::1;::::0;;;;;5570:10:::1;::::0;5565:34:::1;::::0;;;;;;::::1;-1:-1:-1::0;;1171:1:1;1160:8;:12;-1:-1:-1;4374:1232:1;;;-1:-1:-1;;;;;;4374:1232:1:o;315:41:0:-;;;;;;;;;;;;;:::o;915:17:1:-;;;;:::o;685:38:0:-;;;;;;;;;;;;;:::o;5715:1470:1:-;5764:12;5778;1084:8;;1096:1;1084:13;1076:41;;;;;-1:-1:-1;;;1076:41:1;;;;;;;;;;;;-1:-1:-1;;;1076:41:1;;;;;;;;;;;;;;;1138:1;1127:8;:12;;;1138:1;5844:13:::1;:11;:13::i;:::-;-1:-1:-1::0;5900:6:1::1;::::0;5980::::1;::::0;6058:47:::1;::::0;;-1:-1:-1;;;6058:47:1;;6099:4:::1;6058:47;::::0;::::1;::::0;;;5802:55;;-1:-1:-1;5802:55:1;;-1:-1:-1;;;;;;5900:6:1;;::::1;::::0;5980;::::1;::::0;5882:15:::1;::::0;5900:6;;6058:32:::1;::::0;:47;;;;;::::1;::::0;;;;;;;;5900:6;6058:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;6058:47:1;6131::::1;::::0;;-1:-1:-1;;;6131:47:1;;6172:4:::1;6131:47;::::0;::::1;::::0;;;6058;;-1:-1:-1;6115:13:1::1;::::0;-1:-1:-1;;;;;6131:32:1;::::1;::::0;::::1;::::0;:47;;;;;6058::::1;::::0;6131;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;6131:47:1;6223:4:::1;6188:14;6205:24:::0;;;:9:::1;6131:47;6205:24:::0;;;;;6131:47;;-1:-1:-1;6253:30:1::1;6262:9:::0;6273;6253:8:::1;:30::i;:::-;6293:17;6313:11:::0;6240:43;;-1:-1:-1;6313:11:1;6422:23:::1;:9:::0;6436:8;6422:13:::1;:23::i;:::-;:38;;;;;;::::0;-1:-1:-1;6554:12:1;6528:23:::1;:9:::0;6542:8;6528:13:::1;:23::i;:::-;:38;;;;;;6518:48;;6642:1;6632:7;:11;:26;;;;;6657:1;6647:7;:11;6632:26;6624:77;;;;-1:-1:-1::0;;;6624:77:1::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6711:31;6725:4;6732:9;6711:5;:31::i;:::-;6752:35;6766:7;6775:2;6779:7;6752:13;:35::i;:::-;6797;6811:7;6820:2;6824:7;6797:13;:35::i;:::-;6853:47;::::0;;-1:-1:-1;;;6853:47:1;;6894:4:::1;6853:47;::::0;::::1;::::0;;;-1:-1:-1;;;;;6853:32:1;::::1;::::0;::::1;::::0;:47;;;;;::::1;::::0;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;6853:47:1;6921::::1;::::0;;-1:-1:-1;;;6921:47:1;;6962:4:::1;6921:47;::::0;::::1;::::0;;;6853;;-1:-1:-1;;;;;;6921:32:1;::::1;::::0;::::1;::::0;:47;;;;;6853::::1;::::0;6921;;;;;;;;:32;:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;6921:47:1;;-1:-1:-1;6979:49:1::1;6987:8:::0;6921:47;7007:9;7018;6979:7:::1;:49::i;:::-;7042:5;7038:47;;;7076:8;::::0;7057:28:::1;::::0;-1:-1:-1;;;;;7062:8:1;;::::1;::::0;-1:-1:-1;;;7076:8:1;::::1;;7057:18;:28::i;:::-;7049:5;:36:::0;7038:47:::1;7140:38;::::0;;;;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;;;;;7140:38:1;::::1;::::0;7145:10:::1;::::0;7140:38:::1;::::0;;;;;;;;;::::1;1149:1;;;;;;;;;1171::::0;1160:8;:12;;;;5715:1470;;;:::o;198:40:0:-;;;;;;;;;;;;;;-1:-1:-1;;;198:40:0;;;;:::o;2295:136::-;2355:4;2371:32;2381:10;2393:2;2397:5;2371:9;:32::i;320:46:1:-;361:5;320:46;:::o;9204:343::-;1084:8;;1096:1;1084:13;1076:41;;;;;-1:-1:-1;;;1076:41:1;;;;;;;;;;;;-1:-1:-1;;;1076:41:1;;;;;;;;;;;;;;;1138:1;1127:8;:12;9272:6:::1;::::0;9321::::1;::::0;9431:8:::1;::::0;9379:47:::1;::::0;;-1:-1:-1;;;9379:47:1;;9420:4:::1;9379:47;::::0;::::1;::::0;;;-1:-1:-1;;;;;9272:6:1;;::::1;::::0;9321;;::::1;::::0;9352:89:::1;::::0;9272:6;;9375:2;;9379:61:::1;::::0;-1:-1:-1;;;;;9431:8:1::1;::::0;9272:6;;9379:32:::1;::::0;:47;;;;;::::1;::::0;;;;;;;;;9272:6;9379:47;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;9379:47:1;;:51:::1;:61::i;:::-;9352:13;:89::i;:::-;9451;9465:7;9474:2;9478:61;9530:8;;;;;;;;;-1:-1:-1::0;;;;;9530:8:1::1;-1:-1:-1::0;;;;;9478:61:1::1;9492:7;-1:-1:-1::0;;;;;9478:32:1::1;;9519:4;9478:47;;;;;;;;;;;;;-1:-1:-1::0;;;;;9478:47:1::1;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;9451:89;-1:-1:-1::0;;1171:1:1;1160:8;:12;-1:-1:-1;9204:343:1:o;467:22::-;;;-1:-1:-1;;;;;467:22:1;;:::o;522:21::-;;;-1:-1:-1;;;;;522:21:1;;:::o;2738:658:0:-;2883:15;2871:8;:27;;2863:56;;;;;-1:-1:-1;;;2863:56:0;;;;;;;;;;;;-1:-1:-1;;;2863:56:0;;;;;;;;;;;;;;;3031:16;;-1:-1:-1;;;;;3126:13:0;;;2929:14;3126:13;;;:6;:13;;;;;;;;:15;;;;;;;;;3075:77;;613:66;3075:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3065:88;;;;;;-1:-1:-1;;;2969:198:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2946:231;;;;;;;;;3214:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2929:14;;3126:15;3214:26;;;;;-1:-1:-1;;3214:26:0;;;;;;;;;;3126:15;3214:26;;;;;;;;;;;;;;;-1:-1:-1;;3214:26:0;;-1:-1:-1;;3214:26:0;;;-1:-1:-1;;;;;;;3258:30:0;;;;;;:59;;;3312:5;-1:-1:-1;;;;;3292:25:0;:16;-1:-1:-1;;;;;3292:25:0;;3258:59;3250:98;;;;;-1:-1:-1;;;3250:98:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;3358:31;3367:5;3374:7;3383:5;3358:8;:31::i;:::-;2738:658;;;;;;;;;:::o;362:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;9593:170:1:-;1084:8;;1096:1;1084:13;1076:41;;;;;-1:-1:-1;;;1076:41:1;;;;;;;;;;;;-1:-1:-1;;;1076:41:1;;;;;;;;;;;;;;;1138:1;1127:8;:12;9655:6:::1;::::0;9641:46:::1;::::0;;-1:-1:-1;;;9641:46:1;;9681:4:::1;9641:46;::::0;::::1;::::0;;;9633:123:::1;::::0;-1:-1:-1;;;;;9655:6:1::1;::::0;9641:31:::1;::::0;:46;;;;;::::1;::::0;;;;;;;;9655:6;9641:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;9641:46:1;9703:6:::1;::::0;9689:46:::1;::::0;;-1:-1:-1;;;9689:46:1;;9729:4:::1;9689:46;::::0;::::1;::::0;;;-1:-1:-1;;;;;9703:6:1;;::::1;::::0;9689:31:::1;::::0;:46;;;;;9641::::1;::::0;9689;;;;;;;;9703:6;9689:46;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;9689:46:1;9737:8:::1;::::0;-1:-1:-1;;;;;9737:8:1;;::::1;::::0;-1:-1:-1;;;9747:8:1;::::1;;9633:7;:123::i;:::-;1171:1:::0;1160:8;:12;9593:170::o;1418:282::-;424:34;;;;;;;;;;;;;;;;;1545:43;;-1:-1:-1;;;;;1545:43:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1545:43:1;-1:-1:-1;;;1545:43:1;;;1534:55;;;;1499:12;;1513:17;;1534:10;;;1545:43;1534:55;;;1545:43;1534:55;;1545:43;1534:55;;;;;;;;;;-1:-1:-1;;1534:55:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1498:91;;;;1607:7;:57;;;;-1:-1:-1;1619:11:1;;:16;;:44;;;1650:4;1639:24;;;;;;;;;;;;;;;-1:-1:-1;1639:24:1;1619:44;1599:94;;;;;-1:-1:-1;;;1599:94:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1418:282;;;;;:::o;464:140:6:-;516:6;542;;;:30;;-1:-1:-1;;557:5:6;;;571:1;566;557:5;566:1;552:15;;;;;:20;542:30;534:63;;;;;-1:-1:-1;;;534:63:6;;;;;;;;;;;;-1:-1:-1;;;534:63:6;;;;;;;;;;;;;;331:127;414:5;;;409:16;;;;401:50;;;;;-1:-1:-1;;;401:50:6;;;;;;;;;;;;-1:-1:-1;;;401:50:6;;;;;;;;;;;;;;2501:845:1;-1:-1:-1;;;;;2612:23:1;;;;;:50;;-1:-1:-1;;;;;;2639:23:1;;;2612:50;2604:80;;;;;-1:-1:-1;;;2604:80:1;;;;;;;;;;;;-1:-1:-1;;;2604:80:1;;;;;;;;;;;;;;;2797:18;;2725:23;:15;:23;;;-1:-1:-1;;;2797:18:1;;;;2780:35;;;2852:15;;;;;;:33;;-1:-1:-1;;;;;;2871:14:1;;;;2852:33;:51;;;;-1:-1:-1;;;;;;2889:14:1;;;;2852:51;2848:332;;;3056:11;3003:64;;3008:44;3042:9;3008:27;3025:9;3008:16;:27::i;:::-;-1:-1:-1;;;;;3008:33:1;;;:44::i;:::-;2979:20;:88;;-1:-1:-1;;;;;3003:50:1;;;;:64;;;;2979:88;;;3105:64;;;3110:44;3144:9;3110:27;3127:9;3110:16;:27::i;:44::-;3081:20;:88;;-1:-1:-1;;;;;3105:50:1;;;;:64;;;;3081:88;;;2848:332;3189:8;:28;;-1:-1:-1;;3189:28:1;-1:-1:-1;;;;;3189:28:1;;;;;;;-1:-1:-1;;;;3227:28:1;-1:-1:-1;;;3227:28:1;;;;;;;;;-1:-1:-1;;;;;3265:35:1;-1:-1:-1;;;3265:35:1;;;;;;;;;3315:24;;;3320:8;;;3315:24;;3330:8;;;;;;;3315:24;;;;;;;;;;;;;;;;;2501:845;;;;;;:::o;1751:166:0:-;-1:-1:-1;;;;;1831:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;1879:31;;;;;;;;;;;;;;;;;1751:166;;;:::o;1923:216::-;-1:-1:-1;;;;;2016:15:0;;;;;;:9;:15;;;;;;:26;;2036:5;2016:19;:26::i;:::-;-1:-1:-1;;;;;1998:15:0;;;;;;;:9;:15;;;;;;:44;;;;2068:13;;;;;;;:24;;2086:5;2068:17;:24::i;:::-;-1:-1:-1;;;;;2052:13:0;;;;;;;:9;:13;;;;;;;;;:40;;;;2107:25;;;;;;;2052:13;;2107:25;;;;;;;;;;;;;1923:216;;;:::o;3435:830:1:-;3508:10;3530:13;3558:7;;;;;;;;;-1:-1:-1;;;;;3558:7:1;-1:-1:-1;;;;;3546:26:1;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3546:28:1;3635:5;;-1:-1:-1;;;;;3592:19:1;;;;;;-1:-1:-1;3546:28:1;;-1:-1:-1;3635:5:1;3665:594;;3694:11;;3690:502;;3725:10;3738:41;3748:30;-1:-1:-1;;;;;3748:15:1;;;;:30;;:19;:30::i;3738:41::-;3725:54;;3797:14;3814:17;3824:6;3814:9;:17::i;:::-;3797:34;;3861:9;3853:5;:17;3849:329;;;3894:14;3911:45;3953:2;3911:37;3927:20;:5;3937:9;3927;:20::i;:::-;3911:11;;;:15;:37::i;:45::-;3894:62;-1:-1:-1;3978:16:1;3997:36;4015:17;:9;4029:2;4015:13;:17::i;:::-;3997:13;:5;4007:2;3997:9;:13::i;:::-;:17;;:36::i;:::-;3978:55;;4055:14;4084:11;4072:9;:23;;;;;;;-1:-1:-1;4121:13:1;;4117:42;;4136:23;4142:5;4149:9;4136:5;:23::i;:::-;3849:329;;;;3690:502;;;3665:594;;;4212:11;;4208:51;;4247:1;4239:5;:9;4208:51;3435:830;;;;;;:::o;344:292:5:-;389:6;415:1;411;:5;407:223;;;-1:-1:-1;436:1:5;468;464;460:5;;:9;483:89;494:1;490;:5;483:89;;;519:1;515:5;;556:1;551;547;543;:5;;;;;;:9;542:15;;;;;;538:19;;483:89;;;407:223;;;;592:6;;588:42;;-1:-1:-1;618:1:5;588:42;344:292;;;:::o;1337:197:0:-;1409:11;;:22;;1425:5;1409:15;:22::i;:::-;1395:11;:36;;;-1:-1:-1;;;;;1457:13:0;;;;:9;:13;;;;;;:24;;1475:5;1457:17;:24::i;:::-;-1:-1:-1;;;;;1441:13:0;;;;;;:9;:13;;;;;;;;:40;;;;1496:31;;;;;;;1441:13;;;;1496:31;;;;;;;;;;1337:197;;:::o;135:94:5:-;187:6;213:1;209;:5;:13;;221:1;209:13;;;217:1;209:13;205:17;135:94;-1:-1:-1;;;135:94:5:o;1540:205:0:-;-1:-1:-1;;;;;1618:15:0;;;;;;:9;:15;;;;;;:26;;1638:5;1618:19;:26::i;:::-;-1:-1:-1;;;;;1600:15:0;;;;;;:9;:15;;;;;:44;;;;1668:11;:22;;1684:5;1668:15;:22::i;:::-;1654:11;:36;;;1705:33;;;;;;;;-1:-1:-1;;;;;1705:33:0;;;;;;;;;;;;;1540:205;;:::o;320:118:7:-;-1:-1:-1;;;;;395:10:7;-1:-1:-1;;;395:17:7;;320:118::o;506:106::-;566:9;-1:-1:-1;;;;;595:10:7;;-1:-1:-1;;;;;591:14:7;;595:10;591:14;;;;;;506:106;-1:-1:-1;;;506:106:7:o;199:126:6:-;282:5;;;277:16;;;;269:49;;;;;-1:-1:-1;;;269:49:6;;;;;;;;;;;;-1:-1:-1;;;269:49:6;;;;;;;;;;;;;

Swarm Source

ipfs://86ff6995b9b023739147da4fb7382b2767aa93cbd97679a62faa783f4b4bf906
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.