Contract 0x62c1dEC1fF328DCdC157Ae0068Bb21aF3967aCd9 4

 

Contract Overview

Balance:
0 BNB

BNB Value:
$0.00

Token:
 
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x520919a068e593f8617c32f1a9bc9c057680f001929886dceefdc262eee771ceApprove131593502021-12-03 12:48:371 day 16 hrs ago0x1e74746756544eb4307f0529940f41bfb069a1a1 IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.00022177
0x7f1749efa2ccfae02ed6af3db0188ca9b8b81088ecd602ebe3d98d3e01464ac9Approve130873582021-11-30 22:00:274 days 6 hrs ago0x0f156356a3989c4c1b339e08fdf7baece53d9de2 IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.00022177
0xeaf7ee0c14075f3f9d5d9020be764a935cef8dc1f5c30c0fbaa3539c5fc89926Approve130870692021-11-30 21:45:584 days 7 hrs ago0x7ba38345020365b27717c41bde6271423797bd9e IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.00022177
0x30572de9a587ca77a6716648636b7538641d3e0cb8dd6d6e14e47cf127794106Approve130610232021-11-29 22:35:545 days 6 hrs ago0xfe1953a7a610cf49e76e9d363ac23e018403ee56 IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.00022177
0xdebe595105e26b3b93fdd080bbb75d04b734cdefdd7d969d7ce5380346e7c45aApprove130432782021-11-29 6:13:245 days 22 hrs ago0x091c5d42d82812eff01eb2ea429d72bb1efec914 IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.00022177
0xc7af3d95b22432951757c07afa078f804097c7e1873ec3741c72a2ab64267b58Approve130427222021-11-29 5:43:255 days 23 hrs ago0xd5ff457eeb7742d477850cef29c360cd1b7511c4 IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.00022177
0x2d4fce54f0cc8562d84d8390b86c811d2683dc6e211428fe84eda257044cd337Approve130412612021-11-29 4:23:496 days 34 mins ago0x1bd4fc3cd7f5d5d2f7ae580828a0a9b41b59fdef IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.00012385
0x07ea73275447afa0402e1bb3e1e200edf991bb13473c106546acaefbdbace4cfApprove130226972021-11-28 11:37:046 days 17 hrs ago0x132e42dba6570ae6df86cbef6d40d991123466a7 IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.000150924
0x719d1facca6f63c07b271b8895449dbb2514dade2f9eb1236c3d92880172a6c0Approve130226612021-11-28 11:35:046 days 17 hrs ago0x132e42dba6570ae6df86cbef6d40d991123466a7 IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.000266124
0x511d1dd291bdbce1cbcd8ba1b15d97976032f60fb246c76dad79ada683304d12Approve130191412021-11-28 8:30:296 days 20 hrs ago0xaa7f0d9bc370b35b4c348f30b733b19d817c4cc3 IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.000072425
0xfca225a04fd03905756eddee2bef76bee86daf77302202ea8a657a244777be35Approve130191042021-11-28 8:28:386 days 20 hrs ago0xaa7f0d9bc370b35b4c348f30b733b19d817c4cc3 IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.000072425
0xdc432f4f0cea8d9a73832bc1244f17a8ab3c8570dbdeb4bfb3cb7b69ed535bf4Approve130121642021-11-28 2:16:127 days 2 hrs ago0x97b774732ebe0474829db4b4de91cd1ea2543524 IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.000072425
0x35707bb856ecd0d3bbf3be16707de33505a654d7a4d15eeba668e8db4d83dedeApprove130121592021-11-28 2:15:577 days 2 hrs ago0x97b774732ebe0474829db4b4de91cd1ea2543524 IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.000072425
0xfb0b3c1a3a86f43628b17cf89534bfd3d63235c9221c48c382bb39330ed53fbfApprove130104972021-11-28 0:45:147 days 4 hrs ago0x3a8b71d1fd33f68dd7d2aadeee1dc2b7cd8847c5 IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.00022177
0x4dfff1b2a5df2bfe8422a085c7b15814f8e871d47af1e7040769011827e851c4Approve130021972021-11-27 17:26:097 days 11 hrs ago0x974e975382c22587bf2092341f83288467903d00 IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.00012385
0x156ca1c35c7769685a602aef64dadf5cdb80e78fd2d2182625e76aeeb6b653d1Approve130021242021-11-27 17:22:277 days 11 hrs ago0x974e975382c22587bf2092341f83288467903d00 IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.000072425
0x61a9f88686e6af1062e5982512fd8d00117419c456f29b7537f5cd95c8b5c6cdApprove129957792021-11-27 11:39:137 days 17 hrs ago0xf344641227fcf61f8b7b4777596a3118d56b4013 IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.000101395
0xc25289a1f5e8dcbd20c01ce63074162ec2858878875ad2fda30eb13a0ad91861Approve129906192021-11-27 7:02:327 days 21 hrs ago0x6b3d1a37b5c01901341f01f4975d31bc5e6c3d81 IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.000077567175
0x16020a36e95ca3b25b6288a9550f3a888bdc5f6049ebbda761ce5b752e86087cApprove129457452021-11-25 13:36:429 days 15 hrs ago0xb36cae38b52f5d1730a273f6ce7d812f365aa122 IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.000072425
0x677a97d2fffe6d19054198d512f93cafa57a0b8a4c93398b403336ee9a8820feApprove129457422021-11-25 13:36:329 days 15 hrs ago0xb36cae38b52f5d1730a273f6ce7d812f365aa122 IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.00012385
0x617f261fd6fe13388cc51cebb81d66a8a10a177cabe85c8d02212891261128fbApprove129120022021-11-24 7:44:4510 days 21 hrs ago0xc66934982f711f475be2adf3cf138b8153c9d6fd IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.00022177
0xcd7acef1012e4292934f767edc0bc1c00250b90e7b3eff57f41b090736bdc654Approve128989472021-11-23 20:28:0711 days 8 hrs ago0x5e97ccc97f839db4634704aab6d0653e647f1611 IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.00012577
0x274080ea3c323360fe0b27b8ca52cc27b6b71aa9d3182306daf0f277fda97432Approve128988962021-11-23 20:25:2211 days 8 hrs ago0x5e97ccc97f839db4634704aab6d0653e647f1611 IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.00022177
0x617e5beca3ac72492168271738bd4bd2ac28e495f537855999df9b8361f08909Approve128938272021-11-23 15:53:5111 days 13 hrs ago0xc747afcb174e869e7c23fc37a01d97b103bd8732 IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.00022177
0xda1154ccb74229f524e4e2d8f5655ace4733ded25b8b3e338f6a10b981c42768Approve128919632021-11-23 14:15:2111 days 14 hrs ago0x9729cc86bc9cb894ddd45e6eea3d9ce8b9ffdfdd IN  0x62c1dec1ff328dcdc157ae0068bb21af3967acd90 BNB0.000243947
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0x7e43f4fac26e2269e975e7dbf66ed6ad3d148d5ad1c582f0db0f8fbaba2ff30c63431022021-04-06 23:02:10242 days 5 hrs ago 0x3cd1c46068daea5ebb0d3f55f6915b10648062b8  Contract Creation0 BNB
[ Download CSV Export 
Loading

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

Contract Name:
MdexPair

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity >=0.5.0 <0.8.0;

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

    function FEE_RATE_DENOMINATOR() external view returns (uint256);

    function feeRateNumerator() external view returns (uint256);

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function feeToRate() external view returns (uint256);

    function initCodeHash() external view returns (bytes32);

    function pairFeeToRate(address) external view returns (uint256);

    function pairFees(address) external view returns (uint256);

    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;

    function addPair(address) external returns (bool);

    function delPair(address) external returns (bool);

    function getSupportListLength() external view returns (uint256);

    function isSupportPair(address pair) external view returns (bool);

    function getSupportPair(uint256 index) external view returns (address);

    function setFeeRateNumerator(uint256) external;

    function setPairFees(address pair, uint256 fee) external;

    function setDefaultFeeToRate(uint256) external;

    function setPairFeeToRate(address pair, uint256 rate) external;

    function getPairFees(address) external view returns (uint256);

    function getPairRate(address) external view returns (uint256);

    function sortTokens(address tokenA, address tokenB) external pure returns (address token0, address token1);

    function pairFor(address tokenA, address tokenB) external view returns (address pair);

    function getReserves(address tokenA, address tokenB) external view returns (uint256 reserveA, uint256 reserveB);

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

    function getAmountOut(uint256 amountIn, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountOut);

    function getAmountIn(uint256 amountOut, uint256 reserveIn, uint256 reserveOut, address token0, address token1) external view returns (uint256 amountIn);

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

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

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

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 IswapV2Callee {
    function swapV2Call(address sender, uint amount0, uint amount1, bytes calldata data) external;
}

library SafeMath {
    uint256 constant WAD = 10 ** 18;
    uint256 constant RAY = 10 ** 27;

    function wad() public pure returns (uint256) {
        return WAD;
    }

    function ray() public pure returns (uint256) {
        return RAY;
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function min(uint256 a, uint256 b) internal pure returns (uint256) {
        return a <= b ? a : b;
    }

    function max(uint256 a, uint256 b) internal pure returns (uint256) {
        return a >= b ? a : b;
    }

    function sqrt(uint256 a) internal pure returns (uint256 b) {
        if (a > 3) {
            b = a;
            uint256 x = a / 2 + 1;
            while (x < b) {
                b = x;
                x = (a / x + x) / 2;
            }
        } else if (a != 0) {
            b = 1;
        }
    }

    function wmul(uint256 a, uint256 b) internal pure returns (uint256) {
        return mul(a, b) / WAD;
    }

    function wmulRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, b), WAD / 2) / WAD;
    }

    function rmul(uint256 a, uint256 b) internal pure returns (uint256) {
        return mul(a, b) / RAY;
    }

    function rmulRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, b), RAY / 2) / RAY;
    }

    function wdiv(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(mul(a, WAD), b);
    }

    function wdivRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, WAD), b / 2) / b;
    }

    function rdiv(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(mul(a, RAY), b);
    }

    function rdivRound(uint256 a, uint256 b) internal pure returns (uint256) {
        return add(mul(a, RAY), b / 2) / b;
    }

    function wpow(uint256 x, uint256 n) internal pure returns (uint256) {
        uint256 result = WAD;
        while (n > 0) {
            if (n % 2 != 0) {
                result = wmul(result, x);
            }
            x = wmul(x, x);
            n /= 2;
        }
        return result;
    }

    function rpow(uint256 x, uint256 n) internal pure returns (uint256) {
        uint256 result = RAY;
        while (n > 0) {
            if (n % 2 != 0) {
                result = rmul(result, x);
            }
            x = rmul(x, x);
            n /= 2;
        }
        return result;
    }
}

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 MdexERC20 is IMdexERC20 {
    using SafeMath for uint;

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

contract MdexPair is IMdexPair, MdexERC20 {
    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, 'MdexSwap: 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))), 'MdexSwap: 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, 'MdexSwap: 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), 'MdexSwap: OVERFLOW');
        uint32 blockTimestamp = uint32(block.timestamp % 2 ** 32);
        uint32 timeElapsed = blockTimestamp - blockTimestampLast;
        // overflow is desired
        if (timeElapsed > 0 && _reserve0 != 0 && _reserve1 != 0) {
            // * never overflows, and + overflow is desired
            price0CumulativeLast += uint(UQ112x112.encode(_reserve1).uqdiv(_reserve0)) * timeElapsed;
            price1CumulativeLast += uint(UQ112x112.encode(_reserve0).uqdiv(_reserve1)) * timeElapsed;
        }
        reserve0 = uint112(balance0);
        reserve1 = uint112(balance1);
        blockTimestampLast = blockTimestamp;
        emit Sync(reserve0, reserve1);
    }

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

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

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint _totalSupply = totalSupply;
        // gas savings, must be defined here since totalSupply can update in _mintFee
        if (_totalSupply == 0) {
            liquidity = SafeMath.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);
            _mint(address(0), MINIMUM_LIQUIDITY);
            // permanently lock the first MINIMUM_LIQUIDITY tokens
        } else {
            liquidity = SafeMath.min(amount0.mul(_totalSupply) / _reserve0, amount1.mul(_totalSupply) / _reserve1);
        }
        require(liquidity > 0, 'MdexSwap: 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, 'MdexSwap: 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, 'MdexSwap: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves();
        // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'MdexSwap: 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, 'MdexSwap: 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) IswapV2Callee(to).swapV2Call(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, 'MdexSwap: INSUFFICIENT_INPUT_AMOUNT');
        {// scope for reserve{0,1}Adjusted, avoids stack too deep errors
            uint balance0Adjusted = balance0.mul(1e4).sub(amount0In.mul(IMdexFactory(factory).getPairFees(address(this))));
            uint balance1Adjusted = balance1.mul(1e4).sub(amount1In.mul(IMdexFactory(factory).getPairFees(address(this))));
            require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(1e8), 'MdexSwap: 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"}]

60806040526001600c5534801561001557600080fd5b5060405146908060526125de8239604080519182900360520182208282018252600d83526c26a222ac102628102a37b5b2b760991b6020938401528151808301835260018152603160f81b908401528151808401919091527fb85ad0ab12fc9666beeb4154f24feab6f58ff8137a3f14500ba8ae1d38e72118818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b031916331790556124d6806101086000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610534578063d505accf1461053c578063dd62ed3e1461058d578063fff6cae9146105bb576101a9565b8063ba9a7a56146104fe578063bc25cf7714610506578063c45a01551461052c576101a9565b80637ecebe00116100d35780637ecebe001461046557806389afcb441461048b57806395d89b41146104ca578063a9059cbb146104d2576101a9565b80636a6278421461041157806370a08231146104375780637464fc3d1461045d576101a9565b806323b872dd116101665780633644e515116101405780633644e515146103cb578063485cc955146103d35780635909c0d5146104015780635a3d549314610409576101a9565b806323b872dd1461036f57806330adf81f146103a5578063313ce567146103ad576101a9565b8063022c0d9f146101ae57806306fdde031461023c5780630902f1ac146102b9578063095ea7b3146102f15780630dfe16811461033157806318160ddd14610355575b600080fd5b61023a600480360360808110156101c457600080fd5b8135916020810135916001600160a01b0360408301351691908101906080810160608201356401000000008111156101fb57600080fd5b82018360208201111561020d57600080fd5b8035906020019184600183028401116401000000008311171561022f57600080fd5b5090925090506105c3565b005b610244610bcc565b6040805160208082528351818301528351919283929083019185019080838360005b8381101561027e578181015183820152602001610266565b50505050905090810190601f1680156102ab5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102c1610bf5565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61031d6004803603604081101561030757600080fd5b506001600160a01b038135169060200135610c1f565b604080519115158252519081900360200190f35b610339610c36565b604080516001600160a01b039092168252519081900360200190f35b61035d610c45565b60408051918252519081900360200190f35b61031d6004803603606081101561038557600080fd5b506001600160a01b03813581169160208101359091169060400135610c4b565b61035d610ce5565b6103b5610d09565b6040805160ff9092168252519081900360200190f35b61035d610d0e565b61023a600480360360408110156103e957600080fd5b506001600160a01b0381358116916020013516610d14565b61035d610d97565b61035d610d9d565b61035d6004803603602081101561042757600080fd5b50356001600160a01b0316610da3565b61035d6004803603602081101561044d57600080fd5b50356001600160a01b03166110a2565b61035d6110b4565b61035d6004803603602081101561047b57600080fd5b50356001600160a01b03166110ba565b6104b1600480360360208110156104a157600080fd5b50356001600160a01b03166110cc565b6040805192835260208301919091528051918290030190f35b610244611471565b61031d600480360360408110156104e857600080fd5b506001600160a01b038135169060200135611494565b61035d6114a1565b61023a6004803603602081101561051c57600080fd5b50356001600160a01b03166114a7565b610339611611565b610339611620565b61023a600480360360e081101561055257600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c0013561162f565b61035d600480360360408110156105a357600080fd5b506001600160a01b0381358116916020013516611830565b61023a61184d565b600c5460011461060d576040805162461bcd60e51b815260206004820152601060248201526f1359195e14ddd85c0e881313d0d2d15160821b604482015290519081900360640190fd5b6000600c55841515806106205750600084115b61065b5760405162461bcd60e51b81526004018080602001828103825260248152602001806124136024913960400191505060405180910390fd5b600080610666610bf5565b5091509150816001600160701b03168710801561068b5750806001600160701b031686105b6106dc576040805162461bcd60e51b815260206004820181905260248201527f4d646578537761703a20494e53554646494349454e545f4c4951554944495459604482015290519081900360640190fd5b60065460075460009182916001600160a01b0391821691908116908916821480159061071a5750806001600160a01b0316896001600160a01b031614155b610762576040805162461bcd60e51b81526020600482015260146024820152734d646578537761703a20494e56414c49445f544f60601b604482015290519081900360640190fd5b8a1561077357610773828a8d6119ae565b891561078457610784818a8c6119ae565b861561083f57886001600160a01b031663b2ff9f26338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561082657600080fd5b505af115801561083a573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b15801561088557600080fd5b505afa158015610899573d6000803e3d6000fd5b505050506040513d60208110156108af57600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b1580156108fb57600080fd5b505afa15801561090f573d6000803e3d6000fd5b505050506040513d602081101561092557600080fd5b5051925060009150506001600160701b0385168a90038311610948576000610957565b89856001600160701b03160383035b9050600089856001600160701b0316038311610974576000610983565b89856001600160701b03160383035b905060008211806109945750600081115b6109cf5760405162461bcd60e51b81526004018080602001828103825260238152602001806124586023913960400191505060405180910390fd5b60055460408051634c2fc06f60e01b81523060048201529051600092610a7c92610a5e926001600160a01b0390921691634c2fc06f91602480820192602092909190829003018186803b158015610a2557600080fd5b505afa158015610a39573d6000803e3d6000fd5b505050506040513d6020811015610a4f57600080fd5b5051859063ffffffff611b4816565b610a708761271063ffffffff611b4816565b9063ffffffff611ba816565b60055460408051634c2fc06f60e01b81523060048201529051929350600092610ad592610a5e926001600160a01b0390911691634c2fc06f91602480820192602092909190829003018186803b158015610a2557600080fd5b9050610b076305f5e100610afb6001600160701b038b8116908b1663ffffffff611b4816565b9063ffffffff611b4816565b610b17838363ffffffff611b4816565b1015610b58576040805162461bcd60e51b815260206004820152600b60248201526a4d646578537761703a204b60a81b604482015290519081900360640190fd5b5050610b6684848888611bea565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600d81526020016c26a222ac102628102a37b5b2b760991b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610c2c338484611dae565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610cd0576001600160a01b0384166000908152600260209081526040808320338452909152902054610cab908363ffffffff611ba816565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610cdb848484611e10565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610d69576040805162461bcd60e51b815260206004820152601360248201527226b232bc29bbb0b81d102327a92124a22222a760691b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b600a5481565b6000600c54600114610def576040805162461bcd60e51b815260206004820152601060248201526f1359195e14ddd85c0e881313d0d2d15160821b604482015290519081900360640190fd5b6000600c81905580610dff610bf5565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610e5357600080fd5b505afa158015610e67573d6000803e3d6000fd5b505050506040513d6020811015610e7d57600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610ed057600080fd5b505afa158015610ee4573d6000803e3d6000fd5b505050506040513d6020811015610efa57600080fd5b505190506000610f19836001600160701b03871663ffffffff611ba816565b90506000610f36836001600160701b03871663ffffffff611ba816565b90506000610f448787611eca565b60005490915080610f8157610f6d6103e8610a70610f68878763ffffffff611b4816565b612126565b9850610f7c60006103e8612178565b610fd0565b610fcd6001600160701b038916610f9e868463ffffffff611b4816565b81610fa557fe5b046001600160701b038916610fc0868563ffffffff611b4816565b81610fc757fe5b0461220e565b98505b6000891161100f5760405162461bcd60e51b815260040180806020018281038252602781526020018061247b6027913960400191505060405180910390fd5b6110198a8a612178565b61102586868a8a611bea565b811561105557600854611051906001600160701b0380821691600160701b90041663ffffffff611b4816565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b600080600c54600114611119576040805162461bcd60e51b815260206004820152601060248201526f1359195e14ddd85c0e881313d0d2d15160821b604482015290519081900360640190fd5b6000600c81905580611129610bf5565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561118557600080fd5b505afa158015611199573d6000803e3d6000fd5b505050506040513d60208110156111af57600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b1580156111fd57600080fd5b505afa158015611211573d6000803e3d6000fd5b505050506040513d602081101561122757600080fd5b5051306000908152600160205260408120549192506112468888611eca565b6000549091508061125d848763ffffffff611b4816565b8161126457fe5b049a5080611278848663ffffffff611b4816565b8161127f57fe5b04995060008b118015611292575060008a115b6112cd5760405162461bcd60e51b81526004018080602001828103825260278152602001806123ec6027913960400191505060405180910390fd5b6112d73084612225565b6112e2878d8d6119ae565b6112ed868d8c6119ae565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561133357600080fd5b505afa158015611347573d6000803e3d6000fd5b505050506040513d602081101561135d57600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b1580156113a957600080fd5b505afa1580156113bd573d6000803e3d6000fd5b505050506040513d60208110156113d357600080fd5b505193506113e385858b8b611bea565b81156114135760085461140f906001600160701b0380821691600160701b90041663ffffffff611b4816565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b6040518060400160405280600781526020016604d444558204c560cc1b81525081565b6000610c2c338484611e10565b6103e881565b600c546001146114f1576040805162461bcd60e51b815260206004820152601060248201526f1359195e14ddd85c0e881313d0d2d15160821b604482015290519081900360640190fd5b6000600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b0394851694909316926115a0928592879261159b926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561156357600080fd5b505afa158015611577573d6000803e3d6000fd5b505050506040513d602081101561158d57600080fd5b50519063ffffffff611ba816565b6119ae565b600854604080516370a0823160e01b81523060048201529051611607928492879261159b92600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561156357600080fd5b50506001600c5550565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611678576040805162461bcd60e51b81526020600482015260116024820152701359195e14ddd85c0e8811561412549151607a1b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611793573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906117c95750886001600160a01b0316816001600160a01b0316145b61181a576040805162461bcd60e51b815260206004820152601b60248201527f4d646578537761703a20494e56414c49445f5349474e41545552450000000000604482015290519081900360640190fd5b611825898989611dae565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611897576040805162461bcd60e51b815260206004820152601060248201526f1359195e14ddd85c0e881313d0d2d15160821b604482015290519081900360640190fd5b6000600c55600654604080516370a0823160e01b815230600482015290516119a7926001600160a01b0316916370a08231916024808301926020929190829003018186803b1580156118e857600080fd5b505afa1580156118fc573d6000803e3d6000fd5b505050506040513d602081101561191257600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b15801561195f57600080fd5b505afa158015611973573d6000803e3d6000fd5b505050506040513d602081101561198957600080fd5b50516008546001600160701b0380821691600160701b900416611bea565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611a5b5780518252601f199092019160209182019101611a3c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611abd576040519150601f19603f3d011682016040523d82523d6000602084013e611ac2565b606091505b5091509150818015611af0575080511580611af05750808060200190516020811015611aed57600080fd5b50515b611b41576040805162461bcd60e51b815260206004820152601960248201527f4d646578537761703a205452414e534645525f4641494c454400000000000000604482015290519081900360640190fd5b5050505050565b600082611b5757506000610c30565b82820282848281611b6457fe5b0414611ba15760405162461bcd60e51b81526004018080602001828103825260218152602001806124376021913960400191505060405180910390fd5b9392505050565b6000611ba183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506122c3565b6001600160701b038411801590611c0857506001600160701b038311155b611c4e576040805162461bcd60e51b81526020600482015260126024820152714d646578537761703a204f564552464c4f5760701b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b90048116820390811615801590611c7e57506001600160701b03841615155b8015611c9257506001600160701b03831615155b15611d03578063ffffffff16611cc085611cab8661235a565b6001600160e01b03169063ffffffff61236c16565b600980546001600160e01b03929092169290920201905563ffffffff8116611ceb84611cab8761235a565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b038316600090815260016020526040902054611e39908263ffffffff611ba816565b6001600160a01b038085166000908152600160205260408082209390935590841681522054611e6e908263ffffffff61239116565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b158015611f1b57600080fd5b505afa158015611f2f573d6000803e3d6000fd5b505050506040513d6020811015611f4557600080fd5b505190506001600160a01b03811615801590611fd85750600554604080516335d0ea0b60e11b815230600482015290516001600160a01b0390921691636ba1d41691602480820192602092909190829003018186803b158015611fa757600080fd5b505afa158015611fbb573d6000803e3d6000fd5b505050506040513d6020811015611fd157600080fd5b5051600914155b600b54909250821561211257801561210d57600061200b610f686001600160701b0388811690881663ffffffff611b4816565b9050600061201883612126565b90508082111561210a576000612046612037848463ffffffff611ba816565b6000549063ffffffff611b4816565b600554604080516335d0ea0b60e11b815230600482015290519293506000926120e69286926120da926001600160a01b0390921691636ba1d41691602480820192602092909190829003018186803b1580156120a157600080fd5b505afa1580156120b5573d6000803e3d6000fd5b505050506040513d60208110156120cb57600080fd5b5051879063ffffffff611b4816565b9063ffffffff61239116565b905060008183816120f357fe5b0490508015612106576121068782612178565b5050505b50505b61211e565b801561211e576000600b555b505092915050565b60006003821115612169575080600160028204015b818110156121635780915060028182858161215257fe5b04018161215b57fe5b04905061213b565b50612173565b8115612173575060015b919050565b60005461218b908263ffffffff61239116565b60009081556001600160a01b0383168152600160205260409020546121b6908263ffffffff61239116565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183111561221e5781611ba1565b5090919050565b6001600160a01b03821660009081526001602052604090205461224e908263ffffffff611ba816565b6001600160a01b0383166000908152600160205260408120919091555461227b908263ffffffff611ba816565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b600081848411156123525760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156123175781810151838201526020016122ff565b50505050905090810190601f1680156123445780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b0384168161238957fe5b049392505050565b600082820183811015611ba1576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fdfe4d646578537761703a20494e53554646494349454e545f4c49515549444954595f4255524e45444d646578537761703a20494e53554646494349454e545f4f55545055545f414d4f554e54536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774d646578537761703a20494e53554646494349454e545f494e5055545f414d4f554e544d646578537761703a20494e53554646494349454e545f4c49515549444954595f4d494e544544a265627a7a7231582046c07a569a6b1459249f351af48901239e20429187f1402f7470459510c63def64736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429

Deployed ByteCode Sourcemap

15582:10030:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15582:10030:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22956:2043;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;22956:2043:0;;;;;;;;-1:-1:-1;;;;;22956:2043:0;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;22956:2043:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;22956:2043: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;22956:2043:0;;-1:-1:-1;22956:2043:0;-1:-1:-1;22956:2043:0;:::i;:::-;;12240:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:100:-1;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;12240:45:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16589:231;;;:::i;:::-;;;;-1:-1:-1;;;;;16589:231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14291:147;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14291:147:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;15879:21;;;:::i;:::-;;;;-1:-1:-1;;;;;15879:21:0;;;;;;;;;;;;;;12382:24;;;:::i;:::-;;;;;;;;;;;;;;;;14593:302;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14593:302:0;;;;;;;;;;;;;;;;;:::i;12674:108::-;;;:::i;12340:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12531:31;;;:::i;17648:218::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;17648:218:0;;;;;;;;;;:::i;16230:32::-;;;:::i;16269:::-;;;:::i;19978:1288::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19978:1288:0;-1:-1:-1;;;;;19978:1288:0;;:::i;12413:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12413:41:0;-1:-1:-1;;;;;12413:41:0;;:::i;16308:17::-;;;:::i;12789:38::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;12789:38:0;-1:-1:-1;;;;;12789:38:0;;:::i;21378:1466::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21378:1466:0;-1:-1:-1;;;;;21378:1466:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12292:41;;;:::i;14446:139::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;14446:139:0;;;;;;;;:::i;15698:48::-;;;:::i;25048:352::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25048:352:0;-1:-1:-1;;;;;25048:352:0;;:::i;15850:22::-;;;:::i;15907:21::-;;;:::i;14903:672::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;14903:672:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12461:61::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;12461:61:0;;;;;;;;;;:::i;25449:158::-;;;:::i;22956:2043::-;16481:8;;16493:1;16481:13;16473:42;;;;;-1:-1:-1;;;16473:42:0;;;;;;;;;;;;-1:-1:-1;;;16473:42:0;;;;;;;;;;;;;;;16537:1;16526:8;:12;23070:14;;;;:32;;;23101:1;23088:10;:14;23070:32;23062:81;;;;-1:-1:-1;;;23062:81:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23155:17;23174;23196:13;:11;:13::i;:::-;23154:55;;;;;23265:9;-1:-1:-1;;;;;23252:22:0;:10;:22;:48;;;;;23291:9;-1:-1:-1;;;;;23278:22:0;:10;:22;23252:48;23244:93;;;;;-1:-1:-1;;;23244:93:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23485:6;;23524;;23350:13;;;;-1:-1:-1;;;;;23485:6:0;;;;23524;;;;23553:13;;;;;;;:30;;;23576:7;-1:-1:-1;;;;;23570:13:0;:2;-1:-1:-1;;;;;23570:13:0;;;23553:30;23545:63;;;;;-1:-1:-1;;;23545:63:0;;;;;;;;;;;;-1:-1:-1;;;23545:63:0;;;;;;;;;;;;;;;23627:14;;23623:58;;23643:38;23657:7;23666:2;23670:10;23643:13;:38::i;:::-;23747:14;;23743:58;;23763:38;23777:7;23786:2;23790:10;23763:13;:38::i;:::-;23867:15;;23863:91;;23898:2;-1:-1:-1;;;;;23884:28:0;;23913:10;23925;23937;23949:4;;23884:70;;;;;;;;;;;;;-1:-1:-1;;;;;23884:70:0;-1:-1:-1;;;;;23884:70: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;;23884:70:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23884:70:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23884:70:0;;;;23863:91;23980:40;;;-1:-1:-1;;;23980:40:0;;24014:4;23980:40;;;;;;-1:-1:-1;;;;;23980:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;23980:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23980:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;23980:40:0;24046;;;-1:-1:-1;;;24046:40:0;;24080:4;24046:40;;;;;;23980;;-1:-1:-1;;;;;;24046:25:0;;;;;:40;;;;;23980;;24046;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;24046:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24046:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24046:40:0;;-1:-1:-1;24108:14:0;;-1:-1:-1;;;;;;;24136:22:0;;;;;24125:33;;:75;;24199:1;24125:75;;;24185:10;24173:9;-1:-1:-1;;;;;24173:22:0;;24161:8;:35;24125:75;24108:92;;24211:14;24251:10;24239:9;-1:-1:-1;;;;;24239:22:0;;24228:8;:33;:75;;24302:1;24228:75;;;24288:10;24276:9;-1:-1:-1;;;;;24276:22:0;;24264:8;:35;24228:75;24211:92;;24334:1;24322:9;:13;:30;;;;24351:1;24339:9;:13;24322:30;24314:78;;;;-1:-1:-1;;;24314:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24554:7;;24541:48;;;-1:-1:-1;;;24541:48:0;;24583:4;24541:48;;;;;;24481:21;;24505:86;;24527:63;;-1:-1:-1;;;;;24554:7:0;;;;24541:33;;:48;;;;;;;;;;;;;;;24554:7;24541:48;;;5:2:-1;;;;30:1;27;20:12;5:2;24541:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24541:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;24541:48:0;24527:9;;:63;:13;:63;:::i;:::-;24505:17;:8;24518:3;24505:17;:12;:17;:::i;:::-;:21;:86;:21;:86;:::i;:::-;24679:7;;24666:48;;;-1:-1:-1;;;24666:48:0;;24708:4;24666:48;;;;;;24481:110;;-1:-1:-1;24606:21:0;;24630:86;;24652:63;;-1:-1:-1;;;;;24679:7:0;;;;24666:33;;:48;;;;;;;;;;;;;;;24679:7;24666:48;;;5:2:-1;;;;30:1;27;20:12;24630:86:0;24606:110;-1:-1:-1;24781:39:0;24816:3;24781:30;-1:-1:-1;;;;;24781:15:0;;;;:30;;;:19;:30;:::i;:::-;:34;:39;:34;:39;:::i;:::-;24739:38;:16;24760;24739:38;:20;:38;:::i;:::-;:81;;24731:105;;;;;-1:-1:-1;;;24731:105:0;;;;;;;;;;;;-1:-1:-1;;;24731:105:0;;;;;;;;;;;;;;;16549:1;;24860:49;24868:8;24878;24888:9;24899;24860:7;:49::i;:::-;24925:66;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24925:66:0;;;24930:10;;24925:66;;;;;;;;;-1:-1:-1;;16572:1:0;16561:8;:12;-1:-1:-1;;;;;;;;;22956:2043:0:o;12240:45::-;;;;;;;;;;;;;;-1:-1:-1;;;12240:45:0;;;;:::o;16589:231::-;16722:8;;-1:-1:-1;;;;;16722:8:0;;;;-1:-1:-1;;;16753:8:0;;;;;;-1:-1:-1;;;16794:18:0;;;;;16589:231::o;14291:147::-;14355:4;14372:36;14381:10;14393:7;14402:5;14372:8;:36::i;:::-;-1:-1:-1;14426:4:0;14291:147;;;;;:::o;15879:21::-;;;-1:-1:-1;;;;;15879:21:0;;:::o;12382:24::-;;;;:::o;14593:302::-;-1:-1:-1;;;;;14692:15:0;;14671:4;14692:15;;;:9;:15;;;;;;;;14708:10;14692:27;;;;;;;;-1:-1:-1;;14692:40:0;14688:141;;-1:-1:-1;;;;;14779:15:0;;;;;;:9;:15;;;;;;;;14795:10;14779:27;;;;;;;;:38;;14811:5;14779:38;:31;:38;:::i;:::-;-1:-1:-1;;;;;14749:15:0;;;;;;:9;:15;;;;;;;;14765:10;14749:27;;;;;;;:68;14688:141;14839:26;14849:4;14855:2;14859:5;14839:9;:26::i;:::-;-1:-1:-1;14883:4:0;14593:302;;;;;:::o;12674:108::-;12716:66;12674:108;:::o;12340:35::-;12373:2;12340:35;:::o;12531:31::-;;;;:::o;17648:218::-;17744:7;;-1:-1:-1;;;;;17744:7:0;17730:10;:21;17722:53;;;;;-1:-1:-1;;;17722:53:0;;;;;;;;;;;;-1:-1:-1;;;17722:53:0;;;;;;;;;;;;;;;17815:6;:16;;-1:-1:-1;;;;;17815:16:0;;;-1:-1:-1;;;;;;17815:16:0;;;;;;;17842:6;:16;;;;;;;;;;;17648:218::o;16230:32::-;;;;:::o;16269:::-;;;;:::o;19978:1288::-;20027:14;16481:8;;16493:1;16481:13;16473:42;;;;;-1:-1:-1;;;16473:42:0;;;;;;;;;;;;-1:-1:-1;;;16473:42:0;;;;;;;;;;;;;;;16537:1;16526:8;:12;;;16537:1;20096:13;:11;:13::i;:::-;-1:-1:-1;20167:6:0;;20160:39;;;-1:-1:-1;;;20160:39:0;;20193:4;20160:39;;;;;;20054:55;;-1:-1:-1;20054:55:0;;-1:-1:-1;20144:13:0;;-1:-1:-1;;;;;20167:6:0;;;;20160:24;;:39;;;;;;;;;;;;;;20167:6;20160:39;;;5:2:-1;;;;30:1;27;20:12;5:2;20160:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20160:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20160:39:0;20233:6;;20226:39;;;-1:-1:-1;;;20226:39:0;;20259:4;20226:39;;;;;;20160;;-1:-1:-1;20210:13:0;;-1:-1:-1;;;;;20233:6:0;;;;20226:24;;:39;;;;;20160;;20226;;;;;;;;20233:6;20226:39;;;5:2:-1;;;;30:1;27;20:12;5:2;20226:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20226:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20226:39:0;;-1:-1:-1;20276:12:0;20291:23;:8;-1:-1:-1;;;;;20291:23:0;;;:12;:23;:::i;:::-;20276:38;-1:-1:-1;20325:12:0;20340:23;:8;-1:-1:-1;;;;;20340:23:0;;;:12;:23;:::i;:::-;20325:38;;20376:10;20389:30;20398:9;20409;20389:8;:30::i;:::-;20430:17;20450:11;20376:43;;-1:-1:-1;20563:17:0;20559:374;;20609:58;15739:7;20609:35;20623:20;:7;20635;20623:20;:11;:20;:::i;:::-;20609:13;:35::i;:58::-;20597:70;;20682:36;20696:1;15739:7;20682:5;:36::i;:::-;20559:374;;;20831:90;-1:-1:-1;;;;;20844:37:0;;:25;:7;20856:12;20844:25;:11;:25;:::i;:::-;:37;;;;;;-1:-1:-1;;;;;20883:37:0;;:25;:7;20895:12;20883:25;:11;:25;:::i;:::-;:37;;;;;;20831:12;:90::i;:::-;20819:102;;20559:374;20963:1;20951:9;:13;20943:65;;;;-1:-1:-1;;;20943:65:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21019:20;21025:2;21029:9;21019:5;:20::i;:::-;21052:49;21060:8;21070;21080:9;21091;21052:7;:49::i;:::-;21116:5;21112:47;;;21150:8;;21131:28;;-1:-1:-1;;;;;21136:8:0;;;;-1:-1:-1;;;21150:8:0;;;21131:28;:18;:28;:::i;:::-;21123:5;:36;21112:47;21224:34;;;;;;;;;;;;;;21229:10;;21224:34;;;;;;;;-1:-1:-1;;16572:1:0;16561:8;:12;-1:-1:-1;19978:1288:0;;;-1:-1:-1;;;;;;19978:1288:0:o;12413:41::-;;;;;;;;;;;;;:::o;16308:17::-;;;;:::o;12789:38::-;;;;;;;;;;;;;:::o;21378:1466::-;21427:12;21441;16481:8;;16493:1;16481:13;16473:42;;;;;-1:-1:-1;;;16473:42:0;;;;;;;;;;;;-1:-1:-1;;;16473:42:0;;;;;;;;;;;;;;;16537:1;16526:8;:12;;;16537:1;21508:13;:11;:13::i;:::-;-1:-1:-1;21574:6:0;;21633;;21690:40;;;-1:-1:-1;;;21690:40:0;;21724:4;21690:40;;;;;;21466:55;;-1:-1:-1;21466:55:0;;-1:-1:-1;;;;;;21574:6:0;;;;21633;;;21556:15;;21574:6;;21690:25;;:40;;;;;;;;;;;;;;21574:6;21690:40;;;5:2:-1;;;;30:1;27;20:12;5:2;21690:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21690:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21690:40:0;21757;;;-1:-1:-1;;;21757:40:0;;21791:4;21757:40;;;;;;21690;;-1:-1:-1;21741:13:0;;-1:-1:-1;;;;;21757:25:0;;;;;:40;;;;;21690;;21757;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;21757:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21757:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21757:40:0;21843:4;21808:14;21825:24;;;:9;21757:40;21825:24;;;;;21757:40;;-1:-1:-1;21875:30:0;21884:9;21895;21875:8;:30::i;:::-;21916:17;21936:11;21862:43;;-1:-1:-1;21936:11:0;22055:23;:9;22069:8;22055:23;:13;:23;:::i;:::-;:38;;;;;;;-1:-1:-1;22197:12:0;22171:23;:9;22185:8;22171:23;:13;:23;:::i;:::-;:38;;;;;;22161:48;;22295:1;22285:7;:11;:26;;;;;22310:1;22300:7;:11;22285:26;22277:78;;;;-1:-1:-1;;;22277:78:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22366:31;22380:4;22387:9;22366:5;:31::i;:::-;22408:35;22422:7;22431:2;22435:7;22408:13;:35::i;:::-;22454;22468:7;22477:2;22481:7;22454:13;:35::i;:::-;22511:40;;;-1:-1:-1;;;22511:40:0;;22545:4;22511:40;;;;;;-1:-1:-1;;;;;22511:25:0;;;;;:40;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;22511:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22511:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22511:40:0;22573;;;-1:-1:-1;;;22573:40:0;;22607:4;22573:40;;;;;;22511;;-1:-1:-1;;;;;;22573:25:0;;;;;:40;;;;;22511;;22573;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;5:2;22573:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22573:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;22573:40:0;;-1:-1:-1;22626:49:0;22634:8;22573:40;22654:9;22665;22626:7;:49::i;:::-;22690:5;22686:47;;;22724:8;;22705:28;;-1:-1:-1;;;;;22710:8:0;;;;-1:-1:-1;;;22724:8:0;;;22705:28;:18;:28;:::i;:::-;22697:5;:36;22686:47;22798:38;;;;;;;;;;;;;;-1:-1:-1;;;;;22798:38:0;;;22803:10;;22798:38;;;;;;;;;;;16549:1;;;;;;;;;16572;16561:8;:12;;;;21378:1466;;;:::o;12292:41::-;;;;;;;;;;;;;;-1:-1:-1;;;12292:41:0;;;;:::o;14446:139::-;14506:4;14523:32;14533:10;14545:2;14549:5;14523:9;:32::i;15698:48::-;15739:7;15698:48;:::o;25048:352::-;16481:8;;16493:1;16481:13;16473:42;;;;;-1:-1:-1;;;16473:42:0;;;;;;;;;;;;-1:-1:-1;;;16473:42:0;;;;;;;;;;;;;;;16537:1;16526:8;:12;25117:6;;25176;;25289:8;;25244:40;;;-1:-1:-1;;;25244:40:0;;25278:4;25244:40;;;;;;-1:-1:-1;;;;;25117:6:0;;;;25176;;;;25217:82;;25117:6;;25240:2;;25244:54;;-1:-1:-1;;;;;25289:8:0;;25117:6;;25244:25;;:40;;;;;;;;;;;;;;;25117:6;25244:40;;;5:2:-1;;;;30:1;27;20:12;5:2;25244:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25244:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25244:40:0;;:54;:44;:54;:::i;:::-;25217:13;:82::i;:::-;25382:8;;25337:40;;;-1:-1:-1;;;25337:40:0;;25371:4;25337:40;;;;;;25310:82;;25324:7;;25333:2;;25337:54;;-1:-1:-1;;;25382:8:0;;-1:-1:-1;;;;;25382:8:0;;-1:-1:-1;;;;;25337:25:0;;;;;:40;;;;;;;;;;;;;;;:25;:40;;;5:2:-1;;;;30:1;27;20:12;25310:82:0;-1:-1:-1;;16572:1:0;16561:8;:12;-1:-1:-1;25048:352:0:o;15850:22::-;;;-1:-1:-1;;;;;15850:22:0;;:::o;15907:21::-;;;-1:-1:-1;;;;;15907:21:0;;:::o;14903:672::-;15049:15;15037:8;:27;;15029:57;;;;;-1:-1:-1;;;15029:57:0;;;;;;;;;;;;-1:-1:-1;;;15029:57:0;;;;;;;;;;;;;;;15202:16;;-1:-1:-1;;;;;15298:13:0;;;15097:14;15298:13;;;:6;:13;;;;;;;;:15;;;;;;;;;15247:77;;12716:66;15247:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15247:77:0;;;;;15237:88;;;;;;-1:-1:-1;;;15138:202:0;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;15138:202:0;;;;;;15114:237;;;;;;;;;15389:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15097:14;;15298:15;15389:26;;;;;-1:-1:-1;;15389:26:0;;;;;;;;;;15298:15;15389:26;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;15389:26:0;;-1:-1:-1;;15389:26:0;;;-1:-1:-1;;;;;;;15434:30:0;;;;;;:59;;;15488:5;-1:-1:-1;;;;;15468:25:0;:16;-1:-1:-1;;;;;15468:25:0;;15434:59;15426:99;;;;;-1:-1:-1;;;15426:99:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;15536:31;15545:5;15552:7;15561:5;15536:8;:31::i;:::-;14903:672;;;;;;;;;:::o;12461:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;25449:158::-;16481:8;;16493:1;16481:13;16473:42;;;;;-1:-1:-1;;;16473:42:0;;;;;;;;;;;;-1:-1:-1;;;16473:42:0;;;;;;;;;;;;;;;16537:1;16526:8;:12;25505:6;;25498:39;;;-1:-1:-1;;;25498:39:0;;25531:4;25498:39;;;;;;25490:109;;-1:-1:-1;;;;;25505:6:0;;25498:24;;:39;;;;;;;;;;;;;;25505:6;25498:39;;;5:2:-1;;;;30:1;27;20:12;5:2;25498:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25498:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25498:39:0;25546:6;;25539:39;;;-1:-1:-1;;;25539:39:0;;25572:4;25539:39;;;;;;-1:-1:-1;;;;;25546:6:0;;;;25539:24;;:39;;;;;25498;;25539;;;;;;;;25546:6;25539:39;;;5:2:-1;;;;30:1;27;20:12;5:2;25539:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25539:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;25539:39:0;25580:8;;-1:-1:-1;;;;;25580:8:0;;;;-1:-1:-1;;;25590:8:0;;;25490:7;:109::i;:::-;16572:1;16561:8;:12;25449:158::o;16828:286::-;15805:34;;;;;;;;;;;;;;;;;16956:43;;-1:-1:-1;;;;;16956:43:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;16956:43:0;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;16945:55:0;;;;16910:12;;16924:17;;16945:10;;;16956:43;16945:55;;;25:18:-1;16945: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;;;16945: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;;16909:91:0;;;;17019:7;:57;;;;-1:-1:-1;17031:11:0;;:16;;:44;;;17062:4;17051:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17051:24:0;17031:44;17011:95;;;;;-1:-1:-1;;;17011:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;16828:286;;;;;:::o;8270:471::-;8328:7;8573:6;8569:47;;-1:-1:-1;8603:1:0;8596:8;;8569:47;8640:5;;;8644:1;8640;:5;:1;8664:5;;;;;:10;8656:56;;;;-1:-1:-1;;;8656:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8732:1;8270:471;-1:-1:-1;;;8270:471:0:o;7926:136::-;7984:7;8011:43;8015:1;8018;8011:43;;;;;;;;;;;;;;;;;:3;:43::i;17951:872::-;-1:-1:-1;;;;;18063:24:0;;;;;:52;;-1:-1:-1;;;;;;18091:24:0;;;18063:52;18055:83;;;;;-1:-1:-1;;;18055:83:0;;;;;;;;;;;;-1:-1:-1;;;18055:83:0;;;;;;;;;;;;;;;18255:18;;18180:25;:15;:25;;;-1:-1:-1;;;18255:18:0;;;;18238:35;;;18320:15;;;;;;:33;;-1:-1:-1;;;;;;18339:14:0;;;;18320:33;:51;;;;-1:-1:-1;;;;;;18357:14:0;;;;18320:51;18316:336;;;18526:11;18473:64;;18478:44;18512:9;18478:27;18495:9;18478:16;:27::i;:::-;-1:-1:-1;;;;;18478:33:0;;:44;:33;:44;:::i;:::-;18449:20;:88;;-1:-1:-1;;;;;18473:50:0;;;;:64;;;;18449:88;;;18576:64;;;18581:44;18615:9;18581:27;18598:9;18581:16;:27::i;:44::-;18552:20;:88;;-1:-1:-1;;;;;18576:50:0;;;;:64;;;;18552:88;;;18316:336;18662:8;:28;;-1:-1:-1;;18662:28:0;-1:-1:-1;;;;;18662:28:0;;;;;;;-1:-1:-1;;;;18701:28:0;-1:-1:-1;;;18701:28:0;;;;;;;;;-1:-1:-1;;;;;18740:35:0;-1:-1:-1;;;18740:35:0;;;;;;;;;18791:24;;;18796:8;;;18791:24;;18806:8;;;;;;;18791:24;;;;;;;;;;;;;;;;;17951:872;;;;;;:::o;13886:169::-;-1:-1:-1;;;;;13967:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;14016:31;;;;;;;;;;;;;;;;;13886:169;;;:::o;14063:220::-;-1:-1:-1;;;;;14157:15:0;;;;;;:9;:15;;;;;;:26;;14177:5;14157:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;14139:15:0;;;;;;;:9;:15;;;;;;:44;;;;14210:13;;;;;;;:24;;14228:5;14210:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;14194:13:0;;;;;;;:9;:13;;;;;;;;;:40;;;;14250:25;;;;;;;14194:13;;14250:25;;;;;;;;;;;;;14063:220;;;:::o;18913:953::-;18986:10;19009:13;19038:7;;;;;;;;;-1:-1:-1;;;;;19038:7:0;-1:-1:-1;;;;;19025:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19025:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19025:29:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19025:29:0;;-1:-1:-1;;;;;;19073:19:0;;;;;;:76;;-1:-1:-1;19109:7:0;;19096:48;;;-1:-1:-1;;;19096:48:0;;19138:4;19096:48;;;;;;-1:-1:-1;;;;;19109:7:0;;;;19096:33;;:48;;;;;;;;;;;;;;;19109:7;19096:48;;;5:2:-1;;;;30:1;27;20:12;5:2;19096:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19096:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19096:48:0;19148:1;19096:53;;19073:76;19174:5;;19065:84;;-1:-1:-1;19214:645:0;;;;19244:11;;19240:549;;19276:10;19289:45;19303:30;-1:-1:-1;;;;;19303:15:0;;;;:30;;;:19;:30;:::i;19289:45::-;19276:58;;19353:14;19370:21;19384:6;19370:13;:21::i;:::-;19353:38;;19422:9;19414:5;:17;19410:364;;;19456:14;19473:37;19489:20;:5;19499:9;19489:20;:9;:20;:::i;:::-;19473:11;;;:37;:15;:37;:::i;:::-;19575:7;;19562:48;;;-1:-1:-1;;;19562:48:0;;19604:4;19562:48;;;;;;19456:54;;-1:-1:-1;19533:16:0;;19552:74;;19616:9;;19552:59;;-1:-1:-1;;;;;19575:7:0;;;;19562:33;;:48;;;;;;;;;;;;;;;19575:7;19562:48;;;5:2:-1;;;;30:1;27;20:12;5:2;19562:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19562:48:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19562:48:0;19552:5;;:59;:9;:59;:::i;:::-;:63;:74;:63;:74;:::i;:::-;19533:93;;19649:14;19678:11;19666:9;:23;;;;;;;-1:-1:-1;19716:13:0;;19712:42;;19731:23;19737:5;19744:9;19731:5;:23::i;:::-;19410:364;;;;19240:549;;;19214:645;;;19810:11;;19806:53;;19846:1;19838:5;:9;19806:53;18913:953;;;;;;:::o;9784:312::-;9832:9;9862:1;9858;:5;9854:235;;;-1:-1:-1;9884:1:0;9920;9916;9912:5;;:9;9936:92;9947:1;9943;:5;9936:92;;;9973:1;9969:5;;10011:1;10006;10002;9998;:5;;;;;;:9;9997:15;;;;;;9993:19;;9936:92;;;9854:235;;;;10049:6;;10045:44;;-1:-1:-1;10076:1:0;10045:44;9784:312;;;:::o;13460:201::-;13533:11;;:22;;13549:5;13533:22;:15;:22;:::i;:::-;13519:11;:36;;;-1:-1:-1;;;;;13582:13:0;;;;:9;:13;;;;;;:24;;13600:5;13582:24;:17;:24;:::i;:::-;-1:-1:-1;;;;;13566:13:0;;;;;;:9;:13;;;;;;;;:40;;;;13622:31;;;;;;;13566:13;;;;13622:31;;;;;;;;;;13460:201;;:::o;9554:107::-;9612:7;9644:1;9639;:6;;:14;;9652:1;9639:14;;;-1:-1:-1;9648:1:0;;9554:107;-1:-1:-1;9554:107:0:o;13669:209::-;-1:-1:-1;;;;;13748:15:0;;;;;;:9;:15;;;;;;:26;;13768:5;13748:26;:19;:26;:::i;:::-;-1:-1:-1;;;;;13730:15:0;;;;;;:9;:15;;;;;:44;;;;13799:11;:22;;13815:5;13799:22;:15;:22;:::i;:::-;13785:11;:36;;;13837:33;;;;;;;;-1:-1:-1;;;;;13837:33:0;;;;;;;;;;;;;13669:209;;:::o;8070:192::-;8156:7;8192:12;8184:6;;;;8176:29;;;;-1:-1:-1;;;8176:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;90:11;;;84:18;71:11;;;64:39;52:2;45:10;8:100;;;12:14;8176:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8228:5:0;;;8070:192::o;11853:129::-;-1:-1:-1;;;;;11929:10:0;-1:-1:-1;;;11929:17:0;;11853:129::o;12053:108::-;12113:9;-1:-1:-1;;;;;12143:10:0;;-1:-1:-1;;;;;12139:14:0;;12143:10;12139:14;;;;;;12053:108;-1:-1:-1;;;12053:108:0:o;7737:181::-;7795:7;7827:5;;;7851:6;;;;7843:46;;;;;-1:-1:-1;;;7843:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;

Swarm Source

bzzr://46c07a569a6b1459249f351af48901239e20429187f1402f7470459510c63def
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.