Contract 0xd095675c684452825e61804da7d6ceccb613afe8

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x5bbe42e6bdc6e13953aab6acea7c63d2f515de90dfbfaa65bc09f2220bb5b793Approve233692812021-11-28 9:43:3919 hrs 49 mins ago0x23ae07851bd347cc1b4550253940a2774d1e76cc IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.00672647307
0x6db2bfdce8fec6d25791067aac5f714a5ca79b65e8e115257a3ce4e0ad067215Approve233661542021-11-28 8:58:4920 hrs 33 mins ago0xcbd6b0dee49eea88a3343ff4e5a2423586b4c1d6 IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.006960338661
0x8e7142cc91a780531221a6d084534a96beae7d15f4e52e573fa817c0996b89a5Approve232955882021-11-27 15:57:001 day 13 hrs ago0x3ad03f6408d8f4158f9fe26567d4e98be0ab92c6 IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.007845881569
0xfcea85092f412aa68ec030c4d5ccbd675f8cbdd41fcb7a946dd2250adc39e069Approve232562672021-11-27 6:02:321 day 23 hrs ago0xc37a9b3d5dbbccc6e212a7f27fb2d8d66c638d05 IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.009627705445
0x65ebdc1fbe04fb1a4a332d724c069e5ad396c6b71093ec22c8177f8232cc66dbApprove232491242021-11-27 4:17:422 days 1 hr ago0x4b1718580ea31f34beecfc41a67f9731066d35fa IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.011820241395
0xc3beba858998ddb898e106bbf084b71682cdcb450acfedaae7680797c84cb30dApprove232202792021-11-26 21:16:502 days 8 hrs ago0x5f02388e4bead88009de317400064cbe2526987e IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.006743609138
0xb913c3db74cf9cf08beac99005959a0c63adb3436155271b4168fe5da2438902Approve229340392021-11-23 21:41:235 days 7 hrs ago0xaefcbcad09d299e7292f810a38ccb067b46e32ed IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.013730397531
0x18678439a57fdb1a0e98d17f7afdf8e054017991fb628249739b8edac9fc597bApprove229090192021-11-23 15:43:115 days 13 hrs ago0x74aac15a13cb4dcaee907f92a2debe2221cd33e2 IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.02580696571
0x0bc2fff5cc433cc72f61116d9ad6e6e051f1884e662097459548469d355f5727Approve228959372021-11-23 12:24:385 days 17 hrs ago0x6c2693f5a936f37ed03cfa8465bf2d8beff19a0f IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.010544116824
0x174b92c290caf437879bc8cd75f54cf845927722311e37cf1ae4d72e0f376b08Approve228622162021-11-23 3:53:406 days 1 hr ago0xf8a90d45c54bf9784af472a461210cf36f15b18b IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.015802988413
0x4bc5e689ee7b5809f05e92de7813af4679424903217bee3074d94ba42cac0af1Approve228611712021-11-23 3:38:436 days 1 hr ago0xc07db3f37185599da355bdcdd11350a8bad93bb9 IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.016189905183
0x1a9850c85b9043a8947c2e286c5ed58b17d891e437a0e2c4665750dc6fb8bd57Approve227718812021-11-22 5:53:566 days 23 hrs ago0xe605c928dec4f78c072b56a7b5141a0a9f634f83 IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.01798288576
0xa430aabe0fc805c7b89d87371218aeab54f540398c5074da917ecac175d9fcb4Approve227200962021-11-21 17:06:527 days 12 hrs ago0xfadef248f122a005dade7d3ac69e2ed3da7b93ce IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.012165542074
0xc761af3d37a928dcdc4ba8076e17ad11804868b1359bcb93b488dd2c91446fb9Approve226699232021-11-21 4:42:268 days 50 mins ago0x93006988cf568eeee9ba469fdf655081d9582b68 IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.008229882749
0x02281709c3c14b19ec536dbae13d29b0f12b29d8db53135a5b7ec1a44c2dc3d8Approve226308832021-11-20 19:00:468 days 10 hrs ago0x2cb60fc24a543fbcdabe5e87ea90b28b5c444fb8 IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.017888018899
0xe5fc2af8e0de94d324b40e15510e4f2b6eac20fe0b306ca3168246779fe750c9Transfer226278992021-11-20 18:16:158 days 11 hrs ago0xc4e791878733fc2d6fad6c8fbbe1e0680649df72 IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.012501332597
0x3eb13ba3f462ef0cd8476f54b9c1a077f632b359607fe628adcc198507d4ddc1Transfer226270672021-11-20 18:02:458 days 11 hrs ago0xc4e791878733fc2d6fad6c8fbbe1e0680649df72 IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.009113565024
0xcf8677aa3ab91cea598702454df83cf0491d48fa9aca377a1b000f99ba576106Approve225919562021-11-20 9:22:598 days 20 hrs ago0xc90171a7b97e2cb4e5139ac49bc51f8cbd8e2c44 IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.005960853957
0x60693d29804837dbc086859e4cc59c5b33043c6b6807f459398ff50bbe569d25Approve225399012021-11-19 20:08:409 days 9 hrs ago0x6e0460b70f457a54c8dae1512e53d68b02364fa3 IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.014819509423
0xc89ab6a10e945d38de3ba15178c44e9cd6f1c1ba37a29808b48b0d9c261e442fApprove225044092021-11-19 11:21:469 days 18 hrs ago0xbac8872c6c9ce581f9c7e4d788bb4ecf57a6b1b4 IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.007623849669
0x8c3f8293c96aad85531a639e1f53c1b45abdbfe642355455896c0302a95aedb3Approve224332902021-11-18 17:11:4710 days 12 hrs ago0x528836082e417d7b839e17a17964694266aa29a5 IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.055916332152
0xe715b071cb37b32f0e81cfef91bc6137dfcd06b76d4933dd3a16d54e11cc18baApprove224254062021-11-18 14:54:2310 days 14 hrs ago0x75d3986bdf35a763dbd47be76da501e36d18596c IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.009846764072
0x50a50cfd14946f8becdac284aa7e672f1bc984ba65dc9c1625c4b4cccb84e3fcApprove224239072021-11-18 14:32:5210 days 14 hrs ago0xd9ff18bf57a664e7f8447e4eb77aa8d5f3245b54 IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.011452684434
0x72f65eaa6329b96fac48da32236653cc29a7f2fca053f2d28a6fb64f272de288Approve224112572021-11-18 11:27:3810 days 18 hrs ago0xb958505da888cdb3e8fd290347939f061d2b155e IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.016526250885
0xe6ca07710a2cede797826185d2056fd0809f405b77de44a2865cbc02d5edc40cApprove223854262021-11-18 4:54:2011 days 38 mins ago0xa537421ba24c0a7b831819a02a029080c45f5e16 IN  0xd095675c684452825e61804da7d6ceccb613afe80 FTM0.007397365287
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x1a6813b79b924d82cb053850f30e8be2cd00ecb3069f5a41b33416668145f0c3211895362021-11-05 23:09:1723 days 6 hrs ago 0x9c454510848906fddc846607e4baa27ca999fbb6  Contract Creation0 FTM
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PancakePair

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at FtmScan.com on 2021-11-07
*/

pragma solidity =0.5.16;


interface IPancakeFactory {
    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 IPancakePair {
    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 IPancakeERC20 {
    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 PancakeERC20 is IPancakeERC20 {
    using SafeMath for uint;

    string public constant name = 'Morpheus LPs';
    string public constant symbol = 'mLP';
    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, 'Morpheus: 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, 'Morpheus: 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 IPancakeCallee {
    function pancakeCall(address sender, uint amount0, uint amount1, bytes calldata data) external;
}

contract PancakePair is IPancakePair, PancakeERC20 {
    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, 'Morpheus: 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))), 'Morpheus: 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, 'Morpheus: 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), 'Morpheus: 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 the growth in sqrt(k)
    function _mintFee(uint112 _reserve0, uint112 _reserve1) private returns (bool feeOn) {
        address feeTo = IPancakeFactory(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 = 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, 'Morpheus: 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, 'Morpheus: 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, 'Morpheus: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'Morpheus: 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, 'Morpheus: 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) IPancakeCallee(to).pancakeCall(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, 'Morpheus: INSUFFICIENT_INPUT_AMOUNT');
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
        uint balance0Adjusted = balance0.mul(10000).sub(amount0In.mul(15));
        uint balance1Adjusted = balance1.mul(10000).sub(amount1In.mul(15));
        require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(10000**2), 'Morpheus: 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"}]

60806040526001600c5534801561001557600080fd5b50604051469080605261234b8239604080519182900360520182208282018252600c83526b4d6f727068657573204c507360a01b6020938401528151808301835260018152603160f81b908401528151808401919091527fd747766b852bda9e66a086072e54a6cf5bd1054d0b16ad11bbd475715f8328ab818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b03191633179055612244806101076000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610b12565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610b3a565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610b64565b604080519115158252519081900360200190f35b610339610b7b565b604080516001600160a01b039092168252519081900360200190f35b61035d610b8a565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610b90565b61035d610c2a565b6103b5610c4e565b6040805160ff9092168252519081900360200190f35b61035d610c53565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610c59565b61035d610cdc565b61035d610ce2565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610ce8565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b0316610fe7565b61035d610ff9565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b0316610fff565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b0316611011565b6040805192835260208301919091528051918290030190f35b6102446113b6565b61031d600480360360408110156104e857600080fd5b506001600160a01b0381351690602001356113d5565b61035d6113e2565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b03166113e8565b610339611552565b610339611561565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611570565b61035d600480360360408110156105a357600080fd5b506001600160a01b0381358116916020013516611771565b61023a61178e565b600c5460011461060d576040805162461bcd60e51b815260206004820152601060248201526f135bdc9c1a195d5cce881313d0d2d15160821b604482015290519081900360640190fd5b6000600c55841515806106205750600084115b61065b5760405162461bcd60e51b815260040180806020018281038252602481526020018061219e6024913960400191505060405180910390fd5b600080610666610b3a565b5091509150816001600160701b03168710801561068b5750806001600160701b031686105b6106dc576040805162461bcd60e51b815260206004820181905260248201527f4d6f7270686575733a20494e53554646494349454e545f4c4951554944495459604482015290519081900360640190fd5b60065460075460009182916001600160a01b0391821691908116908916821480159061071a5750806001600160a01b0316896001600160a01b031614155b610762576040805162461bcd60e51b81526020600482015260146024820152734d6f7270686575733a20494e56414c49445f544f60601b604482015290519081900360640190fd5b8a1561077357610773828a8d6118ef565b891561078457610784818a8c6118ef565b861561083f57886001600160a01b03166384800812338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561082657600080fd5b505af115801561083a573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561088557600080fd5b505afa158015610899573d6000803e3d6000fd5b505050506040513d60208110156108af57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108fb57600080fd5b505afa15801561090f573d6000803e3d6000fd5b505050506040513d602081101561092557600080fd5b5051925060009150506001600160701b0385168a90038311610948576000610957565b89856001600160701b03160383035b9050600089856001600160701b0316038311610974576000610983565b89856001600160701b03160383035b905060008211806109945750600081115b6109cf5760405162461bcd60e51b815260040180806020018281038252602381526020018061217b6023913960400191505060405180910390fd5b6000610a036109e584600f63ffffffff611a8916565b6109f78761271063ffffffff611a8916565b9063ffffffff611aec16565b90506000610a1b6109e584600f63ffffffff611a8916565b9050610a4d6305f5e100610a416001600160701b038b8116908b1663ffffffff611a8916565b9063ffffffff611a8916565b610a5d838363ffffffff611a8916565b1015610a9e576040805162461bcd60e51b815260206004820152600b60248201526a4d6f7270686575733a204b60a81b604482015290519081900360640190fd5b5050610aac84848888611b3c565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600c81526020016b4d6f727068657573204c507360a01b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610b71338484611d00565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610c15576001600160a01b0384166000908152600260209081526040808320338452909152902054610bf0908363ffffffff611aec16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610c20848484611d62565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610cae576040805162461bcd60e51b815260206004820152601360248201527226b7b9383432bab99d102327a92124a22222a760691b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610d34576040805162461bcd60e51b815260206004820152601060248201526f135bdc9c1a195d5cce881313d0d2d15160821b604482015290519081900360640190fd5b6000600c81905580610d44610b3a565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610d9857600080fd5b505afa158015610dac573d6000803e3d6000fd5b505050506040513d6020811015610dc257600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610e1557600080fd5b505afa158015610e29573d6000803e3d6000fd5b505050506040513d6020811015610e3f57600080fd5b505190506000610e5e836001600160701b03871663ffffffff611aec16565b90506000610e7b836001600160701b03871663ffffffff611aec16565b90506000610e898787611e1c565b60005490915080610ec657610eb26103e86109f7610ead878763ffffffff611a8916565b611f56565b9850610ec160006103e8611fa8565b610f15565b610f126001600160701b038916610ee3868463ffffffff611a8916565b81610eea57fe5b046001600160701b038916610f05868563ffffffff611a8916565b81610f0c57fe5b0461203e565b98505b60008911610f545760405162461bcd60e51b81526004018080602001828103825260278152602001806121e96027913960400191505060405180910390fd5b610f5e8a8a611fa8565b610f6a86868a8a611b3c565b8115610f9a57600854610f96906001600160701b0380821691600160701b90041663ffffffff611a8916565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c5460011461105e576040805162461bcd60e51b815260206004820152601060248201526f135bdc9c1a195d5cce881313d0d2d15160821b604482015290519081900360640190fd5b6000600c8190558061106e610b3a565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b1580156110ca57600080fd5b505afa1580156110de573d6000803e3d6000fd5b505050506040513d60208110156110f457600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561114257600080fd5b505afa158015611156573d6000803e3d6000fd5b505050506040513d602081101561116c57600080fd5b50513060009081526001602052604081205491925061118b8888611e1c565b600054909150806111a2848763ffffffff611a8916565b816111a957fe5b049a50806111bd848663ffffffff611a8916565b816111c457fe5b04995060008b1180156111d7575060008a115b6112125760405162461bcd60e51b81526004018080602001828103825260278152602001806121c26027913960400191505060405180910390fd5b61121c3084612056565b611227878d8d6118ef565b611232868d8c6118ef565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561127857600080fd5b505afa15801561128c573d6000803e3d6000fd5b505050506040513d60208110156112a257600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b1580156112ee57600080fd5b505afa158015611302573d6000803e3d6000fd5b505050506040513d602081101561131857600080fd5b5051935061132885858b8b611b3c565b811561135857600854611354906001600160701b0380821691600160701b90041663ffffffff611a8916565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600381526020016206d4c560ec1b81525081565b6000610b71338484611d62565b6103e881565b600c54600114611432576040805162461bcd60e51b815260206004820152601060248201526f135bdc9c1a195d5cce881313d0d2d15160821b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b0394851694909316926114e192859287926114dc926001600160701b03169185916370a0823191602480820192602092909190829003018186803b1580156114a457600080fd5b505afa1580156114b8573d6000803e3d6000fd5b505050506040513d60208110156114ce57600080fd5b50519063ffffffff611aec16565b6118ef565b600854604080516370a0823160e01b8152306004820152905161154892849287926114dc92600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b1580156114a457600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b428410156115b9576040805162461bcd60e51b8152602060048201526011602482015270135bdc9c1a195d5cce8811561412549151607a1b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa1580156116d4573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381161580159061170a5750886001600160a01b0316816001600160a01b0316145b61175b576040805162461bcd60e51b815260206004820152601b60248201527f4d6f7270686575733a20494e56414c49445f5349474e41545552450000000000604482015290519081900360640190fd5b611766898989611d00565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c546001146117d8576040805162461bcd60e51b815260206004820152601060248201526f135bdc9c1a195d5cce881313d0d2d15160821b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b815230600482015290516118e8926001600160a01b0316916370a08231916024808301926020929190829003018186803b15801561182957600080fd5b505afa15801561183d573d6000803e3d6000fd5b505050506040513d602081101561185357600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b1580156118a057600080fd5b505afa1580156118b4573d6000803e3d6000fd5b505050506040513d60208110156118ca57600080fd5b50516008546001600160701b0380821691600160701b900416611b3c565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b6020831061199c5780518252601f19909201916020918201910161197d565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d80600081146119fe576040519150601f19603f3d011682016040523d82523d6000602084013e611a03565b606091505b5091509150818015611a31575080511580611a315750808060200190516020811015611a2e57600080fd5b50515b611a82576040805162461bcd60e51b815260206004820152601960248201527f4d6f7270686575733a205452414e534645525f4641494c454400000000000000604482015290519081900360640190fd5b5050505050565b6000811580611aa457505080820282828281611aa157fe5b04145b610b75576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610b75576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b038411801590611b5a57506001600160701b038311155b611ba0576040805162461bcd60e51b81526020600482015260126024820152714d6f7270686575733a204f564552464c4f5760701b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611bd057506001600160701b03841615155b8015611be457506001600160701b03831615155b15611c55578063ffffffff16611c1285611bfd866120f4565b6001600160e01b03169063ffffffff61210616565b600980546001600160e01b03929092169290920201905563ffffffff8116611c3d84611bfd876120f4565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611d8b908263ffffffff611aec16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611dc0908263ffffffff61212b16565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611e6d57600080fd5b505afa158015611e81573d6000803e3d6000fd5b505050506040513d6020811015611e9757600080fd5b5051600b546001600160a01b038216158015945091925090611f42578015611f3d576000611eda610ead6001600160701b0388811690881663ffffffff611a8916565b90506000611ee783611f56565b905080821115611f3a576000611f15611f06848463ffffffff611aec16565b6000549063ffffffff611a8916565b9050816000818381611f2357fe5b0490508015611f3657611f368782611fa8565b5050505b50505b611f4e565b8015611f4e576000600b555b505092915050565b60006003821115611f99575080600160028204015b81811015611f9357809150600281828581611f8257fe5b040181611f8b57fe5b049050611f6b565b50611fa3565b8115611fa3575060015b919050565b600054611fbb908263ffffffff61212b16565b60009081556001600160a01b038316815260016020526040902054611fe6908263ffffffff61212b16565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b600081831061204d578161204f565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461207f908263ffffffff611aec16565b6001600160a01b038316600090815260016020526040812091909155546120ac908263ffffffff611aec16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161212357fe5b049392505050565b80820182811015610b75576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe4d6f7270686575733a20494e53554646494349454e545f494e5055545f414d4f554e544d6f7270686575733a20494e53554646494349454e545f4f55545055545f414d4f554e544d6f7270686575733a20494e53554646494349454e545f4c49515549444954595f4255524e45444d6f7270686575733a20494e53554646494349454e545f4c49515549444954595f4d494e544544a265627a7a723158201f2f97def880fb9571c16568ba7fe8420f156e39b611d221c374e79fd1efcc5664736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429

Deployed ByteCode Sourcemap

10352:9642:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10352:9642:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17516:1885;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;17516:1885:0;;;;;;;;-1:-1:-1;;;;;17516:1885:0;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;17516:1885:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;17516:1885: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;17516:1885:0;;-1:-1:-1;17516:1885:0;-1:-1:-1;17516:1885:0;:::i;:::-;;4903:44;;;:::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;4903:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11366:231;;;:::i;:::-;;;;-1:-1:-1;;;;;11366:231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6949:147;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;6949:147:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;10656:21;;;:::i;:::-;;;;-1:-1:-1;;;;;10656:21:0;;;;;;;;;;;;;;5040:24;;;:::i;:::-;;;;;;;;;;;;;;;;7251:301;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7251:301:0;;;;;;;;;;;;;;;;;:::i;5332:108::-;;;:::i;4998:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5189:31;;;:::i;12425:209::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12425:209:0;;;;;;;;;;:::i;11007:32::-;;;:::i;11046:::-;;;:::i;14588:1239::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14588:1239:0;-1:-1:-1;;;;;14588:1239:0;;:::i;5071:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5071:41:0;-1:-1:-1;;;;;5071:41:0;;:::i;11085:17::-;;;:::i;5447:38::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;5447:38:0;-1:-1:-1;;;;;5447:38:0;;:::i;15939:1465::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15939:1465:0;-1:-1:-1;;;;;15939:1465:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;4954:37;;;:::i;7104:139::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;7104:139:0;;;;;;;;:::i;10477:46::-;;;:::i;19450:334::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19450:334:0;-1:-1:-1;;;;;19450:334:0;;:::i;10627:22::-;;;:::i;10684:21::-;;;:::i;7560:672::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;7560:672:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;5119:61::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;5119:61:0;;;;;;;;;;:::i;19833:158::-;;;:::i;17516:1885::-;11258:8;;11270:1;11258:13;11250:42;;;;;-1:-1:-1;;;11250:42:0;;;;;;;;;;;;-1:-1:-1;;;11250:42:0;;;;;;;;;;;;;;;11314:1;11303:8;:12;17630:14;;;;:32;;;17661:1;17648:10;:14;17630:32;17622:81;;;;-1:-1:-1;;;17622:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17715:17;17734;17756:13;:11;:13::i;:::-;17714:55;;;;;17816:9;-1:-1:-1;;;;;17803:22:0;:10;:22;:48;;;;;17842:9;-1:-1:-1;;;;;17829:22:0;:10;:22;17803:48;17795:93;;;;;-1:-1:-1;;;17795:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18033:6;;18068;;17901:13;;;;-1:-1:-1;;;;;18033:6:0;;;;18068;;;;18093:13;;;;;;;:30;;;18116:7;-1:-1:-1;;;;;18110:13:0;:2;-1:-1:-1;;;;;18110:13:0;;;18093:30;18085:63;;;;;-1:-1:-1;;;18085:63:0;;;;;;;;;;;;-1:-1:-1;;;18085:63:0;;;;;;;;;;;;;;;18163:14;;18159:58;;18179:38;18193:7;18202:2;18206:10;18179:13;:38::i;:::-;18266:14;;18262:58;;18282:38;18296:7;18305:2;18309:10;18282:13;:38::i;:::-;18369:15;;18365:93;;18401:2;-1:-1:-1;;;;;18386:30:0;;18417:10;18429;18441;18453:4;;18386:72;;;;;;;;;;;;;-1:-1:-1;;;;;18386:72:0;-1:-1:-1;;;;;18386:72: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;;18386:72:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18386:72:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18386:72:0;;;;18365:93;18480:40;;;-1:-1:-1;;;18480:40:0;;18514:4;18480:40;;;;;;-1:-1:-1;;;;;18480:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;18480:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18480:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18480:40:0;18542;;;-1:-1:-1;;;18542:40:0;;18576:4;18542:40;;;;;;18480;;-1:-1:-1;;;;;;18542:25:0;;;;;:40;;;;;18480;;18542;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;18542:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18542:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18542:40:0;;-1:-1:-1;18604:14:0;;-1:-1:-1;;;;;;;18632:22:0;;;;;18621:33;;:75;;18695:1;18621:75;;;18681:10;18669:9;-1:-1:-1;;;;;18669:22:0;;18657:8;:35;18621:75;18604:92;;18707:14;18747:10;18735:9;-1:-1:-1;;;;;18735:22:0;;18724:8;:33;:75;;18798:1;18724:75;;;18784:10;18772:9;-1:-1:-1;;;;;18772:22:0;;18760:8;:35;18724:75;18707:92;;18830:1;18818:9;:13;:30;;;;18847:1;18835:9;:13;18818:30;18810:78;;;;-1:-1:-1;;;18810:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18974:21;18998:42;19022:17;:9;19036:2;19022:17;:13;:17;:::i;:::-;18998:19;:8;19011:5;18998:19;:12;:19;:::i;:::-;:23;:42;:23;:42;:::i;:::-;18974:66;-1:-1:-1;19051:21:0;19075:42;19099:17;:9;19113:2;19099:17;:13;:17;:::i;19075:42::-;19051:66;-1:-1:-1;19178:44:0;19213:8;19178:30;-1:-1:-1;;;;;19178:15:0;;;;:30;;;:19;:30;:::i;:::-;:34;:44;:34;:44;:::i;:::-;19136:38;:16;19157;19136:38;:20;:38;:::i;:::-;:86;;19128:110;;;;;-1:-1:-1;;;19128:110:0;;;;;;;;;;;;-1:-1:-1;;;19128:110:0;;;;;;;;;;;;;;;11326:1;;19262:49;19270:8;19280;19290:9;19301;19262:7;:49::i;:::-;19327:66;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19327:66:0;;;19332:10;;19327:66;;;;;;;;;-1:-1:-1;;11349:1:0;11338:8;:12;-1:-1:-1;;;;;;;;;17516:1885:0:o;4903:44::-;;;;;;;;;;;;;;-1:-1:-1;;;4903:44:0;;;;:::o;11366:231::-;11499:8;;-1:-1:-1;;;;;11499:8:0;;;;-1:-1:-1;;;11530:8:0;;;;;;-1:-1:-1;;;11571:18:0;;;;;11366:231::o;6949:147::-;7013:4;7030:36;7039:10;7051:7;7060:5;7030:8;:36::i;:::-;-1:-1:-1;7084:4:0;6949:147;;;;;:::o;10656:21::-;;;-1:-1:-1;;;;;10656:21:0;;:::o;5040:24::-;;;;:::o;7251:301::-;-1:-1:-1;;;;;7350:15:0;;7329:4;7350:15;;;:9;:15;;;;;;;;7366:10;7350:27;;;;;;;;-1:-1:-1;;7350:39:0;7346:140;;-1:-1:-1;;;;;7436:15:0;;;;;;:9;:15;;;;;;;;7452:10;7436:27;;;;;;;;:38;;7468:5;7436:38;:31;:38;:::i;:::-;-1:-1:-1;;;;;7406:15:0;;;;;;:9;:15;;;;;;;;7422:10;7406:27;;;;;;;:68;7346:140;7496:26;7506:4;7512:2;7516:5;7496:9;:26::i;:::-;-1:-1:-1;7540:4:0;7251:301;;;;;:::o;5332:108::-;5374:66;5332:108;:::o;4998:35::-;5031:2;4998:35;:::o;5189:31::-;;;;:::o;12425:209::-;12521:7;;-1:-1:-1;;;;;12521:7:0;12507:10;:21;12499:53;;;;;-1:-1:-1;;;12499:53:0;;;;;;;;;;;;-1:-1:-1;;;12499:53:0;;;;;;;;;;;;;;;12583:6;:16;;-1:-1:-1;;;;;12583:16:0;;;-1:-1:-1;;;;;;12583:16:0;;;;;;;12610:6;:16;;;;;;;;;;;12425:209::o;11007:32::-;;;;:::o;11046:::-;;;;:::o;14588:1239::-;14637:14;11258:8;;11270:1;11258:13;11250:42;;;;;-1:-1:-1;;;11250:42:0;;;;;;;;;;;;-1:-1:-1;;;11250:42:0;;;;;;;;;;;;;;;11314:1;11303:8;:12;;;11314:1;14706:13;:11;:13::i;:::-;-1:-1:-1;14768:6:0;;14761:39;;;-1:-1:-1;;;14761:39:0;;14794:4;14761:39;;;;;;14664:55;;-1:-1:-1;14664:55:0;;-1:-1:-1;14745:13:0;;-1:-1:-1;;;;;14768:6:0;;;;14761:24;;:39;;;;;;;;;;;;;;14768:6;14761:39;;;5:2:-1;;;;30:1;27;20:12;5:2;14761:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14761:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14761:39:0;14834:6;;14827:39;;;-1:-1:-1;;;14827:39:0;;14860:4;14827:39;;;;;;14761;;-1:-1:-1;14811:13:0;;-1:-1:-1;;;;;14834:6:0;;;;14827:24;;:39;;;;;14761;;14827;;;;;;;;14834:6;14827:39;;;5:2:-1;;;;30:1;27;20:12;5:2;14827:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14827:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;14827:39:0;;-1:-1:-1;14877:12:0;14892:23;:8;-1:-1:-1;;;;;14892:23:0;;;:12;:23;:::i;:::-;14877:38;-1:-1:-1;14926:12:0;14941:23;:8;-1:-1:-1;;;;;14941:23:0;;;:12;:23;:::i;:::-;14926:38;;14977:10;14990:30;14999:9;15010;14990:8;:30::i;:::-;15031:17;15051:11;14977:43;;-1:-1:-1;15155:17:0;15151:352;;15201:54;10518:5;15201:31;15211:20;:7;15223;15211:20;:11;:20;:::i;:::-;15201:9;:31::i;:54::-;15189:66;;15269:36;15283:1;10518:5;15269;:36::i;:::-;15151:352;;;15405:86;-1:-1:-1;;;;;15414:37:0;;:25;:7;15426:12;15414:25;:11;:25;:::i;:::-;:37;;;;;;-1:-1:-1;;;;;15453:37:0;;:25;:7;15465:12;15453:25;:11;:25;:::i;:::-;:37;;;;;;15405:8;:86::i;:::-;15393:98;;15151:352;15533:1;15521:9;:13;15513:65;;;;-1:-1:-1;;;15513:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15589:20;15595:2;15599:9;15589:5;:20::i;:::-;15622:49;15630:8;15640;15650:9;15661;15622:7;:49::i;:::-;15686:5;15682:47;;;15720:8;;15701:28;;-1:-1:-1;;;;;15706:8:0;;;;-1:-1:-1;;;15720:8:0;;;15701:28;:18;:28;:::i;:::-;15693:5;:36;15682:47;15785:34;;;;;;;;;;;;;;15790:10;;15785:34;;;;;;;;-1:-1:-1;;11349:1:0;11338:8;:12;-1:-1:-1;14588:1239:0;;;-1:-1:-1;;;;;;14588:1239:0:o;5071:41::-;;;;;;;;;;;;;:::o;11085:17::-;;;;:::o;5447:38::-;;;;;;;;;;;;;:::o;15939:1465::-;15988:12;16002;11258:8;;11270:1;11258:13;11250:42;;;;;-1:-1:-1;;;11250:42:0;;;;;;;;;;;;-1:-1:-1;;;11250:42:0;;;;;;;;;;;;;;;11314:1;11303:8;:12;;;11314:1;16069:13;:11;:13::i;:::-;-1:-1:-1;16126:6:0;;16207;;16286:40;;;-1:-1:-1;;;16286:40:0;;16320:4;16286:40;;;;;;16027:55;;-1:-1:-1;16027:55:0;;-1:-1:-1;;;;;;16126:6:0;;;;16207;;;16108:15;;16126:6;;16286:25;;:40;;;;;;;;;;;;;;16126:6;16286:40;;;5:2:-1;;;;30:1;27;20:12;5:2;16286:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16286:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16286:40:0;16353;;;-1:-1:-1;;;16353:40:0;;16387:4;16353:40;;;;;;16286;;-1:-1:-1;16337:13:0;;-1:-1:-1;;;;;16353:25:0;;;;;:40;;;;;16286;;16353;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;16353:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16353:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16353:40:0;16439:4;16404:14;16421:24;;;:9;16353:40;16421:24;;;;;16353:40;;-1:-1:-1;16471:30:0;16480:9;16491;16471:8;:30::i;:::-;16512:17;16532:11;16458:43;;-1:-1:-1;16532:11:0;16642:23;:9;16656:8;16642:23;:13;:23;:::i;:::-;:38;;;;;;;-1:-1:-1;16775:12:0;16749:23;:9;16763:8;16749:23;:13;:23;:::i;:::-;:38;;;;;;16739:48;;16864:1;16854:7;:11;:26;;;;;16879:1;16869:7;:11;16854:26;16846:78;;;;-1:-1:-1;;;16846:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16935:31;16949:4;16956:9;16935:5;:31::i;:::-;16977:35;16991:7;17000:2;17004:7;16977:13;:35::i;:::-;17023;17037:7;17046:2;17050:7;17023:13;:35::i;:::-;17080:40;;;-1:-1:-1;;;17080:40:0;;17114:4;17080:40;;;;;;-1:-1:-1;;;;;17080:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;17080:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17080:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17080:40:0;17142;;;-1:-1:-1;;;17142:40:0;;17176:4;17142:40;;;;;;17080;;-1:-1:-1;;;;;;17142:25:0;;;;;:40;;;;;17080;;17142;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;17142:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17142:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17142:40:0;;-1:-1:-1;17195:49:0;17203:8;17142:40;17223:9;17234;17195:7;:49::i;:::-;17259:5;17255:47;;;17293:8;;17274:28;;-1:-1:-1;;;;;17279:8:0;;;;-1:-1:-1;;;17293:8:0;;;17274:28;:18;:28;:::i;:::-;17266:5;:36;17255:47;17358:38;;;;;;;;;;;;;;-1:-1:-1;;;;;17358:38:0;;;17363:10;;17358:38;;;;;;;;;;;11326:1;;;;;;;;;11349;11338:8;:12;;;;15939:1465;;;:::o;4954:37::-;;;;;;;;;;;;;;-1:-1:-1;;;4954:37:0;;;;:::o;7104:139::-;7164:4;7181:32;7191:10;7203:2;7207:5;7181:9;:32::i;10477:46::-;10518:5;10477:46;:::o;19450:334::-;11258:8;;11270:1;11258:13;11250:42;;;;;-1:-1:-1;;;11250:42:0;;;;;;;;;;;;-1:-1:-1;;;11250:42:0;;;;;;;;;;;;;;;11314:1;11303:8;:12;19519:6;;19569;;19673:8;;19628:40;;;-1:-1:-1;;;19628:40:0;;19662:4;19628:40;;;;;;-1:-1:-1;;;;;19519:6:0;;;;19569;;;;19601:82;;19519:6;;19624:2;;19628:54;;-1:-1:-1;;;;;19673:8:0;;19519:6;;19628:25;;:40;;;;;;;;;;;;;;;19519:6;19628:40;;;5:2:-1;;;;30:1;27;20:12;5:2;19628:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19628:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19628:40:0;;:54;:44;:54;:::i;:::-;19601:13;:82::i;:::-;19766:8;;19721:40;;;-1:-1:-1;;;19721:40:0;;19755:4;19721:40;;;;;;19694:82;;19708:7;;19717:2;;19721:54;;-1:-1:-1;;;19766:8:0;;-1:-1:-1;;;;;19766:8:0;;-1:-1:-1;;;;;19721:25:0;;;;;:40;;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;19694:82:0;-1:-1:-1;;11349:1:0;11338:8;:12;-1:-1:-1;19450:334:0:o;10627:22::-;;;-1:-1:-1;;;;;10627:22:0;;:::o;10684:21::-;;;-1:-1:-1;;;;;10684:21:0;;:::o;7560:672::-;7706:15;7694:8;:27;;7686:57;;;;;-1:-1:-1;;;7686:57:0;;;;;;;;;;;;-1:-1:-1;;;7686:57:0;;;;;;;;;;;;;;;7859:16;;-1:-1:-1;;;;;7955:13:0;;;7754:14;7955:13;;;:6;:13;;;;;;;;:15;;;;;;;;;7904:77;;5374:66;7904:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;7904:77:0;;;;;7894:88;;;;;;-1:-1:-1;;;7795:202:0;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;7795:202:0;;;;;;7771:237;;;;;;;;;8046:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7754:14;;7955:15;8046:26;;;;;-1:-1:-1;;8046:26:0;;;;;;;;;;7955:15;8046:26;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;8046:26:0;;-1:-1:-1;;8046:26:0;;;-1:-1:-1;;;;;;;8091:30:0;;;;;;:59;;;8145:5;-1:-1:-1;;;;;8125:25:0;:16;-1:-1:-1;;;;;8125:25:0;;8091:59;8083:99;;;;;-1:-1:-1;;;8083:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;8193:31;8202:5;8209:7;8218:5;8193:8;:31::i;:::-;7560:672;;;;;;;;;:::o;5119:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;19833:158::-;11258:8;;11270:1;11258:13;11250:42;;;;;-1:-1:-1;;;11250:42:0;;;;;;;;;;;;-1:-1:-1;;;11250:42:0;;;;;;;;;;;;;;;11314:1;11303:8;:12;19889:6;;19882:39;;;-1:-1:-1;;;19882:39:0;;19915:4;19882:39;;;;;;19874:109;;-1:-1:-1;;;;;19889:6:0;;19882:24;;:39;;;;;;;;;;;;;;19889:6;19882:39;;;5:2:-1;;;;30:1;27;20:12;5:2;19882:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19882:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19882:39:0;19930:6;;19923:39;;;-1:-1:-1;;;19923:39:0;;19956:4;19923:39;;;;;;-1:-1:-1;;;;;19930:6:0;;;;19923:24;;:39;;;;;19882;;19923;;;;;;;;19930:6;19923:39;;;5:2:-1;;;;30:1;27;20:12;5:2;19923:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19923:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19923:39:0;19964:8;;-1:-1:-1;;;;;19964:8:0;;;;-1:-1:-1;;;19974:8:0;;;19874:7;:109::i;:::-;11349:1;11338:8;:12;19833:158::o;11605:286::-;10582:34;;;;;;;;;;;;;;;;;11733:43;;-1:-1:-1;;;;;11733:43:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;11733:43:0;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;11722:55:0;;;;11687:12;;11701:17;;11722:10;;;11733:43;11722:55;;;25:18:-1;11722: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;;;11722: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;;11686:91:0;;;;11796:7;:57;;;;-1:-1:-1;11808:11:0;;:16;;:44;;;11839:4;11828:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;11828:24:0;11808:44;11788:95;;;;;-1:-1:-1;;;11788:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;11605:286;;;;;:::o;4676:142::-;4728:6;4755;;;:30;;-1:-1:-1;;4770:5:0;;;4784:1;4779;4770:5;4779:1;4765:15;;;;;:20;4755:30;4747:63;;;;;-1:-1:-1;;;4747:63:0;;;;;;;;;;;;-1:-1:-1;;;4747:63:0;;;;;;;;;;;;;;4539:129;4623:5;;;4618:16;;;;4610:50;;;;;-1:-1:-1;;;4610:50:0;;;;;;;;;;;;-1:-1:-1;;;4610:50:0;;;;;;;;;;;;;;12719:859;-1:-1:-1;;;;;12831:23:0;;;;;:50;;-1:-1:-1;;;;;;12858:23:0;;;12831:50;12823:81;;;;;-1:-1:-1;;;12823:81:0;;;;;;;;;;;;-1:-1:-1;;;12823:81:0;;;;;;;;;;;;;;;13019:18;;12946:23;:15;:23;;;-1:-1:-1;;;13019:18:0;;;;13002:35;;;13075:15;;;;;;:33;;-1:-1:-1;;;;;;13094:14:0;;;;13075:33;:51;;;;-1:-1:-1;;;;;;13112:14:0;;;;13075:51;13071:336;;;13281:11;13228:64;;13233:44;13267:9;13233:27;13250:9;13233:16;:27::i;:::-;-1:-1:-1;;;;;13233:33:0;;:44;:33;:44;:::i;:::-;13204:20;:88;;-1:-1:-1;;;;;13228:50:0;;;;:64;;;;13204:88;;;13331:64;;;13336:44;13370:9;13336:27;13353:9;13336:16;:27::i;:44::-;13307:20;:88;;-1:-1:-1;;;;;13331:50:0;;;;:64;;;;13307:88;;;13071:336;13417:8;:28;;-1:-1:-1;;13417:28:0;-1:-1:-1;;;;;13417:28:0;;;;;;;-1:-1:-1;;;;13456:28:0;-1:-1:-1;;;13456:28:0;;;;;;;;;-1:-1:-1;;;;;13495:35:0;-1:-1:-1;;;13495:35:0;;;;;;;;;13546:24;;;13551:8;;;13546:24;;13561:8;;;;;;;13546:24;;;;;;;;;;;;;;;;;12719:859;;;;;;:::o;6544:169::-;-1:-1:-1;;;;;6625:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;6674:31;;;;;;;;;;;;;;;;;6544:169;;;:::o;6721:220::-;-1:-1:-1;;;;;6815:15:0;;;;;;:9;:15;;;;;;:26;;6835:5;6815:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;6797:15:0;;;;;;;:9;:15;;;;;;:44;;;;6868:13;;;;;;;:24;;6886:5;6868:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;6852:13:0;;;;;;;:9;:13;;;;;;;;;:40;;;;6908:25;;;;;;;6852:13;;6908:25;;;;;;;;;;;;;6721:220;;;:::o;13659:817::-;13732:10;13755:13;13787:7;;;;;;;;;-1:-1:-1;;;;;13787:7:0;-1:-1:-1;;;;;13771:30:0;;:32;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13771:32:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13771:32:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13771:32:0;13866:5;;-1:-1:-1;;;;;13822:19:0;;;;;;-1:-1:-1;13771:32:0;;-1:-1:-1;13866:5:0;13897:572;;13927:11;;13923:476;;13959:10;13972:41;13982:30;-1:-1:-1;;;;;13982:15:0;;;;:30;;;:19;:30;:::i;13972:41::-;13959:54;;14032:14;14049:17;14059:6;14049:9;:17::i;:::-;14032:34;;14097:9;14089:5;:17;14085:299;;;14131:14;14148:37;14164:20;:5;14174:9;14164:20;:9;:20;:::i;:::-;14148:11;;;:37;:15;:37;:::i;:::-;14131:54;-1:-1:-1;14227:9:0;14208:16;14227:9;14131:54;14227:9;14276:23;;;;;;-1:-1:-1;14326:13:0;;14322:42;;14341:23;14347:5;14354:9;14341:5;:23::i;:::-;14085:299;;;;13923:476;;;13897:572;;;14420:11;;14416:53;;14456:1;14448:5;:9;14416:53;13659:817;;;;;;:::o;8526:303::-;8571:6;8598:1;8594;:5;8590:232;;;-1:-1:-1;8620:1:0;8653;8649;8645:5;;:9;8669:92;8680:1;8676;:5;8669:92;;;8706:1;8702:5;;8744:1;8739;8735;8731;:5;;;;;;:9;8730:15;;;;;;8726:19;;8669:92;;;8590:232;;;;8782:6;;8778:44;;-1:-1:-1;8809:1:0;8778:44;8526:303;;;:::o;6118:201::-;6191:11;;:22;;6207:5;6191:22;:15;:22;:::i;:::-;6177:11;:36;;;-1:-1:-1;;;;;6240:13:0;;;;:9;:13;;;;;;:24;;6258:5;6240:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;6224:13:0;;;;;;:9;:13;;;;;;;;:40;;;;6280:31;;;;;;;6224:13;;;;6280:31;;;;;;;;;;6118:201;;:::o;8312:96::-;8364:6;8391:1;8387;:5;:13;;8399:1;8387:13;;;8395:1;8387:13;8383:17;8312:96;-1:-1:-1;;;8312:96:0:o;6327:209::-;-1:-1:-1;;;;;6406:15:0;;;;;;:9;:15;;;;;;:26;;6426:5;6406:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;6388:15:0;;;;;;:9;:15;;;;;:44;;;;6457:11;:22;;6473:5;6457:22;:15;:22;:::i;:::-;6443:11;:36;;;6495:33;;;;;;;;-1:-1:-1;;;;;6495:33:0;;;;;;;;;;;;;6327:209;;:::o;9098:120::-;-1:-1:-1;;;;;9174:10:0;-1:-1:-1;;;9174:17:0;;9098:120::o;9289:108::-;9349:9;-1:-1:-1;;;;;9379:10:0;;-1:-1:-1;;;;;9375:14:0;;9379:10;9375:14;;;;;;9289:108;-1:-1:-1;;;9289:108:0:o;4403:128::-;4487:5;;;4482:16;;;;4474:49;;;;;-1:-1:-1;;;4474:49:0;;;;;;;;;;;;-1:-1:-1;;;4474:49:0;;;;;;;;;;;;;

Swarm Source

bzzr://1f2f97def880fb9571c16568ba7fe8420f156e39b611d221c374e79fd1efcc56
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Validator ID :
0 FTM

Amount Staked
0

Amount Delegated
0

Staking Total
0

Staking Start Epoch
0

Staking Start Time
0

Proof of Importance
0

Origination Score
0

Validation Score
0

Active
0

Online
0

Downtime
0 s
Address Amount claimed Rewards Created On Epoch Created On
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.