Contract 0x535c3b730a28da2a45496c8fd0c561711c2dc6d4

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xa389ee423ab52a76a06c760ebf66dcef6cfca94d9767eb5bcf1e57374a7b35c9Transfer146969622022-11-26 16:52:215 hrs 39 mins ago0x22df8ff50c6b61e62d9ff21f7a3da117c304bf90 IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT35.2965
0x9c775a3b0ab332193678cfbcd4bdfc309777993904d9bba546048f09b5ff6e75Transfer146804772022-11-26 7:25:3915 hrs 6 mins ago0xca9eff53047120b0ec590b87712f2894736107da IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT35.2965
0x46acc7cda7f976a57736461dfdb6699d82e35dfaab2cbf45a76255382f21fa54Transfer146792372022-11-26 6:43:0315 hrs 48 mins ago0x652c58ef3c80309361575e3f510f74cb5a14e901 IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT35.2965
0x1d1f56658f84c9b0216b6ce4b0aceba0997bb53e821ab80de0264e167abdd49fTransfer146572812022-11-25 18:08:191 day 4 hrs ago0xe2586e1eff8acf15b3d7f0d1e276f09d34351075 IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT38.598
0x5a374e287d809d45d1cef591254c4f892a5fa06d1dd915220ad27ec886d0c3d0Transfer146565182022-11-25 17:42:051 day 4 hrs ago0x9fcac42d436c8e374f455bfc66dfc798f1c593a8 IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT35.2965
0x30f295cd7c6057c3241bd9508c89663a94c0468dcc4c51ff0aaf85f3ab5b4ef8Transfer146564812022-11-25 17:40:471 day 4 hrs ago0x967194c12408f16ca211f3651e2002d30bf93931 IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT38.6016
0x382492e3372afdf2c2bcf4e359096e3a3d3b08d21bb01d3da9719189811d5431Transfer146563602022-11-25 17:36:371 day 4 hrs ago0x967194c12408f16ca211f3651e2002d30bf93931 IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT40.4265
0x5ad0c7214b270b649dcda773420d97323493c66f2e3329b7150e64df8395c4d2Transfer146551352022-11-25 16:54:311 day 5 hrs ago0x22df8ff50c6b61e62d9ff21f7a3da117c304bf90 IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT35.2965
0x3e461e532ac6cc0e7b152db15143d306d61496e44f4787c4f6a7b737bdd4f6c1Transfer146535222022-11-25 15:59:051 day 6 hrs ago0xadd76b630b64d639501e8b9439e57525131d3d10 IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT35.2965
0x7fba7bf03f484c5b51621bd0d54d15aef9a9eb6869122c7dd60c6b5ac10a6b22Transfer146494072022-11-25 13:37:351 day 8 hrs ago0xe22332a4996cd39b54c727c68089a616aece4c31 IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT35.2965
0x17a09edb6ab02f7f35c6c89d29fe6d8ff8a8c2c703bd692a72d92fda246aca2eTransfer146485272022-11-25 13:07:231 day 9 hrs ago0xfda218f63a02c0b55363dee3ba06cf18af36291f IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT35.2965
0xffcae23394e238e08fdf9760637bf3c5e386dd8a0a2f08482419cc3f0a69f4e7Transfer146337902022-11-25 4:34:431 day 17 hrs ago0xca9eff53047120b0ec590b87712f2894736107da IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT40.4076
0x1bf694beffad24609ae31a32e863e9deb63293dae9f3d3ceb90d0c4f0325a95dTransfer146183862022-11-24 19:45:152 days 2 hrs ago0xe22332a4996cd39b54c727c68089a616aece4c31 IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT35.2965
0x206e17e6f000342287014deeaaa0ce02d0d92fded4176e6bf3a379c0ef7203adTransfer146154382022-11-24 18:03:552 days 4 hrs ago0x22df8ff50c6b61e62d9ff21f7a3da117c304bf90 IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT35.2965
0x41e4f2e311aec1a5f5a6b1eb2da019f893b179d11a2a25960e3d4a0f3881f902Transfer146136082022-11-24 17:00:592 days 5 hrs ago0x74b9e1446dc871d758fea109ffc973e9d5763f09 IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT35.2965
0x02bc3e6b7d4b4ad030e952b76055ca49e4b79808538d66640a8ce72a1249848cTransfer146045482022-11-24 11:49:352 days 10 hrs ago0xe22332a4996cd39b54c727c68089a616aece4c31 IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT35.2965
0x3c103c853f56db11b866cf8a5e799a27ab811068734c66c7508878688c94cc31Transfer145969112022-11-24 7:27:012 days 15 hrs ago0xca9eff53047120b0ec590b87712f2894736107da IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT33.4716
0xe5a0ce59f609987659417a9f1115268cc757caf09b7a6d6f5a3b7462fe7da61aTransfer145935372022-11-24 5:31:052 days 17 hrs ago0xca9eff53047120b0ec590b87712f2894736107da IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT35.2965
0x0bff840ed37786cdd33114b5b3ba43ae684fe4e9d5ce6e249148692e0f0381efTransfer145909862022-11-24 4:03:232 days 18 hrs ago0xfda218f63a02c0b55363dee3ba06cf18af36291f IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT35.2965
0x0b7634c7b74d22e03d2968d91d78298db99f8bef474ac2f645c25e8c57ded7adTransfer145757272022-11-23 19:18:493 days 3 hrs ago0xe22332a4996cd39b54c727c68089a616aece4c31 IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT35.2965
0x0f6f10af6271714ae1aef8e6c63491952cddf11e0b94763825144ded0dfab22aTransfer145748382022-11-23 18:48:153 days 3 hrs ago0x74b9e1446dc871d758fea109ffc973e9d5763f09 IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT38.598
0xdebf79635453903bae7a0f2ef17fc84fa80fa1378c7ff8934ad75ef9b2df68f2Transfer145747342022-11-23 18:44:433 days 3 hrs ago0x74b9e1446dc871d758fea109ffc973e9d5763f09 IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT37.3314
0xf8ff867fb58c7b923f1767218c313e91f2e8d30a6db717fdab38d7804a2f6466Transfer145737152022-11-23 18:09:413 days 4 hrs ago0x22df8ff50c6b61e62d9ff21f7a3da117c304bf90 IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT35.2965
0xa1cfea1c508aae7e58a3c320c4a7811516ea9768f7a270f16b46630927435a77Transfer145671932022-11-23 14:25:293 days 8 hrs ago0x57ffb07825f23829c9c7a5be1e294fd199151eff IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT35.2965
0x9a3c5c9cdf661e3fc350fa96d5a79ce56c1df003e33be337e29adfe41ebe1d88Transfer145669062022-11-23 14:15:353 days 8 hrs ago0x518c2c728cd7e389b7fcfd9439a4a566e6e2023a IN  0x535c3b730a28da2a45496c8fd0c561711c2dc6d40 BTT35.2965
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0xa0e97ba181d2d567457fffcfb28a605d2fd72f68dc434c791f2a9c912bd3f38256251182022-04-23 15:14:01217 days 7 hrs ago 0xbf6c50889d3a620eb42c0f188b65ade90de958c4  Contract Creation0 BTT
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
SoyFinancePair

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at bttcscan.com on 2022-04-25
*/

/**
 *Submitted for verification at bttcscan.com on 2022-04-25
*/

// SPDX-License-Identifier: No License (None)
pragma solidity >=0.5.17;

interface IERC223Recipient {
    function tokenReceived(address _from, uint _value, bytes calldata _data) external;
}

library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * This test is non-exhaustive, and there may be false-negatives: during the
     * execution of a contract's constructor, its address will be reported as
     * not containing a contract.
     *
     * > It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }
}

interface ISoyFinanceFactory {
    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 ISoyFinancePair {
    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 standard() 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 transfer(address to, uint value, bytes calldata data) 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 ISoyFinanceERC223 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
    event TransferData(bytes data);

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function standard() 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 transfer(address to, uint value, bytes calldata data) 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  SoyFinanceERC223 is ISoyFinanceERC223 {
    using SafeMath for uint;
    using Address for address;

    string public constant name = 'SoyFinance LPs';
    string public constant symbol = 'SOY-LP';
    string public constant standard = 'erc223';
    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) {
        bytes memory _empty = hex"00000000";
         _transfer(msg.sender, to, value);
        
        if(to.isContract()) {
            IERC223Recipient(to).tokenReceived(msg.sender, value, _empty);
        }
        emit TransferData(_empty);
        return true;
    }
    
    function transfer(address to, uint value, bytes calldata data) external returns (bool) {
        _transfer(msg.sender, to, value);
        if(to.isContract()) {
            IERC223Recipient(to).tokenReceived(msg.sender, value, data);
        }
        emit TransferData(data);
        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, 'SoyFinance: 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, 'SoyFinance: 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 ISoyFinanceCallee {
    function soyFinanceCall(address sender, uint amount0, uint amount1, bytes calldata data) external;
}

contract SoyFinancePair is ISoyFinancePair, SoyFinanceERC223 {
    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, 'SoyFinance: LOCKED');
        unlocked = 2;
        _;
        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))), 'SoyFinance: 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, 'SoyFinance: 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), 'SoyFinance: 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 = ISoyFinanceFactory(factory).feeTo();
        feeOn = feeTo != address(0);
        uint _kLast = kLast; // gas savings
        if (feeOn) {
            if (_kLast != 0) {
                uint rootK = Math.sqrt(uint(_reserve0).mul(_reserve1));
                uint rootKLast = Math.sqrt(_kLast);
                if (rootK > rootKLast) {
                    uint numerator = totalSupply.mul(rootK.sub(rootKLast));
                    uint denominator = rootK.mul(3).add(rootKLast);
                    uint liquidity = numerator / denominator;
                    if (liquidity > 0) _mint(feeTo, liquidity);
                }
            }
        } else if (_kLast != 0) {
            kLast = 0;
        }
    }

    // this low-level function should be called from a contract which performs important safety checks
    function mint(address to) external lock returns (uint liquidity) {
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        uint balance0 = ISoyFinanceERC223(token0).balanceOf(address(this));
        uint balance1 = ISoyFinanceERC223(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, 'SoyFinance: 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 = ISoyFinanceERC223(_token0).balanceOf(address(this));
        uint balance1 = ISoyFinanceERC223(_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, 'SoyFinance: INSUFFICIENT_LIQUIDITY_BURNED');
        _burn(address(this), liquidity);
        _safeTransfer(_token0, to, amount0);
        _safeTransfer(_token1, to, amount1);
        balance0 = ISoyFinanceERC223(_token0).balanceOf(address(this));
        balance1 = ISoyFinanceERC223(_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, 'SoyFinance: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'SoyFinance: 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, 'SoyFinance: 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) ISoyFinanceCallee(to).soyFinanceCall(msg.sender, amount0Out, amount1Out, data);
        balance0 = ISoyFinanceERC223(_token0).balanceOf(address(this));
        balance1 = ISoyFinanceERC223(_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, 'SoyFinance: INSUFFICIENT_INPUT_AMOUNT');
        { // scope for reserve{0,1}Adjusted, avoids stack too deep errors
        uint balance0Adjusted = balance0.mul(1000).sub(amount0In.mul(2));
        uint balance1Adjusted = balance1.mul(1000).sub(amount1In.mul(2));
        require(balance0Adjusted.mul(balance1Adjusted) >= uint(_reserve0).mul(_reserve1).mul(1000**2), 'SoyFinance: 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, ISoyFinanceERC223(_token0).balanceOf(address(this)).sub(reserve0));
        _safeTransfer(_token1, to, ISoyFinanceERC223(_token1).balanceOf(address(this)).sub(reserve1));
    }

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

    // ERC223 fallback
    function tokenReceived(address /*_from*/, uint /*_value*/, bytes calldata /*_data*/) external view {
        require(msg.sender == token0 || msg.sender == token1, "Wrong token");
    }
}


contract SoyFinanceFactory is ISoyFinanceFactory {
    bytes32 public constant INIT_CODE_PAIR_HASH = keccak256(abi.encodePacked(type(SoyFinancePair).creationCode));

    address public feeTo;
    address public feeToSetter;

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

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

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

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

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

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

    function setFeeToSetter(address _feeToSetter) external {
        require(msg.sender == feeToSetter, 'SoyFinance: FORBIDDEN');
        feeToSetter = _feeToSetter;
    }
}

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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bytes","name":"data","type":"bytes"}],"name":"TransferData","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":true,"inputs":[],"name":"standard","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"view","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":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"bytes","name":"","type":"bytes"}],"name":"tokenReceived","outputs":[],"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":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"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"}]

60806040526001600c5534801561001557600080fd5b5060405146908060526128528239604080519182900360520182208282018252600e83526d536f7946696e616e6365204c507360901b6020938401528151808301835260018152603160f81b908401528151808401919091527fba18bf6f345810720fdf25832424aad83ee214c87493b730e5c29e8c089edc42818301527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6606082015260808101949094523060a0808601919091528151808603909101815260c09094019052825192019190912060035550600580546001600160a01b03191633179055612749806101096000396000f3fe608060405234801561001057600080fd5b50600436106101da5760003560e01c806370a0823111610104578063ba9a7a56116100a2578063d21220a711610071578063d21220a714610677578063d505accf1461067f578063dd62ed3e146106d0578063fff6cae9146106fe576101da565b8063ba9a7a56146105bc578063bc25cf77146105c4578063be45fd62146105ea578063c45a01551461066f576101da565b80638943ec02116100de5780638943ec02146104c457806389afcb441461054957806395d89b4114610588578063a9059cbb14610590576101da565b806370a08231146104705780637464fc3d146104965780637ecebe001461049e576101da565b806330adf81f1161017c5780635909c0d51161014b5780635909c0d5146104325780635a3b7e421461043a5780635a3d5493146104425780636a6278421461044a576101da565b806330adf81f146103d6578063313ce567146103de5780633644e515146103fc578063485cc95514610404576101da565b8063095ea7b3116101b8578063095ea7b3146103225780630dfe16811461036257806318160ddd1461038657806323b872dd146103a0576101da565b8063022c0d9f146101df57806306fdde031461026d5780630902f1ac146102ea575b600080fd5b61026b600480360360808110156101f557600080fd5b8135916020810135916001600160a01b03604083013516919081019060808101606082013564010000000081111561022c57600080fd5b82018360208201111561023e57600080fd5b8035906020019184600183028401116401000000008311171561026057600080fd5b509092509050610706565b005b610275610c44565b6040805160208082528351818301528351919283929083019185019080838360005b838110156102af578181015183820152602001610297565b50505050905090810190601f1680156102dc5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102f2610c6e565b604080516001600160701b03948516815292909316602083015263ffffffff168183015290519081900360600190f35b61034e6004803603604081101561033857600080fd5b506001600160a01b038135169060200135610c98565b604080519115158252519081900360200190f35b61036a610caf565b604080516001600160a01b039092168252519081900360200190f35b61038e610cbe565b60408051918252519081900360200190f35b61034e600480360360608110156103b657600080fd5b506001600160a01b03813581169160208101359091169060400135610cc4565b61038e610d5e565b6103e6610d82565b6040805160ff9092168252519081900360200190f35b61038e610d87565b61026b6004803603604081101561041a57600080fd5b506001600160a01b0381358116916020013516610d8d565b61038e610e12565b610275610e18565b61038e610e3a565b61038e6004803603602081101561046057600080fd5b50356001600160a01b0316610e40565b61038e6004803603602081101561048657600080fd5b50356001600160a01b0316611141565b61038e611153565b61038e600480360360208110156104b457600080fd5b50356001600160a01b0316611159565b61026b600480360360608110156104da57600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561050a57600080fd5b82018360208201111561051c57600080fd5b8035906020019184600183028401116401000000008311171561053e57600080fd5b50909250905061116b565b61056f6004803603602081101561055f57600080fd5b50356001600160a01b03166111d3565b6040805192835260208301919091528051918290030190f35b61027561157a565b61034e600480360360408110156105a657600080fd5b506001600160a01b03813516906020013561159c565b61038e61175c565b61026b600480360360208110156105da57600080fd5b50356001600160a01b0316611762565b61034e6004803603606081101561060057600080fd5b6001600160a01b038235169160208101359181019060608101604082013564010000000081111561063057600080fd5b82018360208201111561064257600080fd5b8035906020019184600183028401116401000000008311171561066457600080fd5b5090925090506118ce565b61036a6119fd565b61036a611a0c565b61026b600480360360e081101561069557600080fd5b506001600160a01b03813581169160208101359091169060408101359060608101359060ff6080820135169060a08101359060c00135611a1b565b61038e600480360360408110156106e657600080fd5b506001600160a01b0381358116916020013516611c1e565b61026b611c3b565b600c54600114610752576040805162461bcd60e51b815260206004820152601260248201527114dbde519a5b985b98d94e881313d0d2d15160721b604482015290519081900360640190fd5b6002600c55841515806107655750600084115b6107a05760405162461bcd60e51b815260040180806020018281038252602681526020018061267b6026913960400191505060405180910390fd5b6000806107ab610c6e565b5091509150816001600160701b0316871080156107d05750806001600160701b031686105b61080b5760405162461bcd60e51b81526004018080602001828103825260228152602001806126f36022913960400191505060405180910390fd5b60065460075460009182916001600160a01b039182169190811690891682148015906108495750806001600160a01b0316896001600160a01b031614155b610893576040805162461bcd60e51b8152602060048201526016602482015275536f7946696e616e63653a20494e56414c49445f544f60501b604482015290519081900360640190fd5b8a156108a4576108a4828a8d611d9e565b89156108b5576108b5818a8c611d9e565b861561097057886001600160a01b031663cc10de30338d8d8c8c6040518663ffffffff1660e01b815260040180866001600160a01b03166001600160a01b03168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b15801561095757600080fd5b505af115801561096b573d6000803e3d6000fd5b505050505b604080516370a0823160e01b815230600482015290516001600160a01b038416916370a08231916024808301926020929190829003018186803b1580156109b657600080fd5b505afa1580156109ca573d6000803e3d6000fd5b505050506040513d60208110156109e057600080fd5b5051604080516370a0823160e01b815230600482015290519195506001600160a01b038316916370a0823191602480820192602092909190829003018186803b158015610a2c57600080fd5b505afa158015610a40573d6000803e3d6000fd5b505050506040513d6020811015610a5657600080fd5b5051925060009150506001600160701b0385168a90038311610a79576000610a88565b89856001600160701b03160383035b9050600089856001600160701b0316038311610aa5576000610ab4565b89856001600160701b03160383035b90506000821180610ac55750600081115b610b005760405162461bcd60e51b81526004018080602001828103825260258152602001806126566025913960400191505060405180910390fd5b6000610b34610b1684600263ffffffff611f3816565b610b28876103e863ffffffff611f3816565b9063ffffffff611f9b16565b90506000610b4c610b1684600263ffffffff611f3816565b9050610b7d620f4240610b716001600160701b038b8116908b1663ffffffff611f3816565b9063ffffffff611f3816565b610b8d838363ffffffff611f3816565b1015610bd0576040805162461bcd60e51b815260206004820152600d60248201526c536f7946696e616e63653a204b60981b604482015290519081900360640190fd5b5050610bde84848888611feb565b60408051838152602081018390528082018d9052606081018c905290516001600160a01b038b169133917fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229181900360800190a350506001600c55505050505050505050565b6040518060400160405280600e81526020016d536f7946696e616e6365204c507360901b81525081565b6008546001600160701b0380821692600160701b830490911691600160e01b900463ffffffff1690565b6000610ca53384846121b1565b5060015b92915050565b6006546001600160a01b031681565b60005481565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610d49576001600160a01b0384166000908152600260209081526040808320338452909152902054610d24908363ffffffff611f9b16565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610d54848484612213565b5060019392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b601281565b60035481565b6005546001600160a01b03163314610de4576040805162461bcd60e51b815260206004820152601560248201527429b7bca334b730b731b29d102327a92124a22222a760591b604482015290519081900360640190fd5b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b60095481565b6040518060400160405280600681526020016565726332323360d01b81525081565b600a5481565b6000600c54600114610e8e576040805162461bcd60e51b815260206004820152601260248201527114dbde519a5b985b98d94e881313d0d2d15160721b604482015290519081900360640190fd5b6002600c55600080610e9e610c6e565b50600654604080516370a0823160e01b815230600482015290519395509193506000926001600160a01b03909116916370a08231916024808301926020929190829003018186803b158015610ef257600080fd5b505afa158015610f06573d6000803e3d6000fd5b505050506040513d6020811015610f1c57600080fd5b5051600754604080516370a0823160e01b815230600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610f6f57600080fd5b505afa158015610f83573d6000803e3d6000fd5b505050506040513d6020811015610f9957600080fd5b505190506000610fb8836001600160701b03871663ffffffff611f9b16565b90506000610fd5836001600160701b03871663ffffffff611f9b16565b90506000610fe387876122cd565b600054909150806110205761100c6103e8610b28611007878763ffffffff611f3816565b61242b565b985061101b60006103e861247d565b61106f565b61106c6001600160701b03891661103d868463ffffffff611f3816565b8161104457fe5b046001600160701b03891661105f868563ffffffff611f3816565b8161106657fe5b04612513565b98505b600089116110ae5760405162461bcd60e51b81526004018080602001828103825260298152602001806126ca6029913960400191505060405180910390fd5b6110b88a8a61247d565b6110c486868a8a611feb565b81156110f4576008546110f0906001600160701b0380821691600160701b90041663ffffffff611f3816565b600b555b6040805185815260208101859052815133927f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f928290030190a250506001600c5550949695505050505050565b60016020526000908152604090205481565b600b5481565b60046020526000908152604090205481565b6006546001600160a01b031633148061118e57506007546001600160a01b031633145b6111cd576040805162461bcd60e51b815260206004820152600b60248201526a2bb937b733903a37b5b2b760a91b604482015290519081900360640190fd5b50505050565b600080600c54600114611222576040805162461bcd60e51b815260206004820152601260248201527114dbde519a5b985b98d94e881313d0d2d15160721b604482015290519081900360640190fd5b6002600c55600080611232610c6e565b50600654600754604080516370a0823160e01b815230600482015290519496509294506001600160a01b039182169391169160009184916370a08231916024808301926020929190829003018186803b15801561128e57600080fd5b505afa1580156112a2573d6000803e3d6000fd5b505050506040513d60208110156112b857600080fd5b5051604080516370a0823160e01b815230600482015290519192506000916001600160a01b038516916370a08231916024808301926020929190829003018186803b15801561130657600080fd5b505afa15801561131a573d6000803e3d6000fd5b505050506040513d602081101561133057600080fd5b50513060009081526001602052604081205491925061134f88886122cd565b60005490915080611366848763ffffffff611f3816565b8161136d57fe5b049a5080611381848663ffffffff611f3816565b8161138857fe5b04995060008b11801561139b575060008a115b6113d65760405162461bcd60e51b81526004018080602001828103825260298152602001806126a16029913960400191505060405180910390fd5b6113e0308461252b565b6113eb878d8d611d9e565b6113f6868d8c611d9e565b604080516370a0823160e01b815230600482015290516001600160a01b038916916370a08231916024808301926020929190829003018186803b15801561143c57600080fd5b505afa158015611450573d6000803e3d6000fd5b505050506040513d602081101561146657600080fd5b5051604080516370a0823160e01b815230600482015290519196506001600160a01b038816916370a0823191602480820192602092909190829003018186803b1580156114b257600080fd5b505afa1580156114c6573d6000803e3d6000fd5b505050506040513d60208110156114dc57600080fd5b505193506114ec85858b8b611feb565b811561151c57600854611518906001600160701b0380821691600160701b90041663ffffffff611f3816565b600b555b604080518c8152602081018c905281516001600160a01b038f169233927fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496929081900390910190a35050505050505050506001600c81905550915091565b604051806040016040528060068152602001650534f592d4c560d41b81525081565b6040805180820190915260048152600060208201819052906115bf338585612213565b6115d1846001600160a01b03166125c9565b156116b957836001600160a01b0316638943ec023385846040518463ffffffff1660e01b815260040180846001600160a01b03166001600160a01b0316815260200183815260200180602001828103825283818151815260200191508051906020019080838360005b8381101561165257818101518382015260200161163a565b50505050905090810190601f16801561167f5780820380516001836020036101000a031916815260200191505b50945050505050600060405180830381600087803b1580156116a057600080fd5b505af11580156116b4573d6000803e3d6000fd5b505050505b7f3ba9136826ac751de05d770d8d34fa4440ada49a5fb0e9aa1678aece66dad976816040518080602001828103825283818151815260200191508051906020019080838360005b83811015611718578181015183820152602001611700565b50505050905090810190601f1680156117455780820380516001836020036101000a031916815260200191505b509250505060405180910390a15060019392505050565b6103e881565b600c546001146117ae576040805162461bcd60e51b815260206004820152601260248201527114dbde519a5b985b98d94e881313d0d2d15160721b604482015290519081900360640190fd5b6002600c55600654600754600854604080516370a0823160e01b815230600482015290516001600160a01b03948516949093169261185d9285928792611858926001600160701b03169185916370a0823191602480820192602092909190829003018186803b15801561182057600080fd5b505afa158015611834573d6000803e3d6000fd5b505050506040513d602081101561184a57600080fd5b50519063ffffffff611f9b16565b611d9e565b600854604080516370a0823160e01b815230600482015290516118c4928492879261185892600160701b90046001600160701b0316916001600160a01b038616916370a0823191602480820192602092909190829003018186803b15801561182057600080fd5b50506001600c5550565b60006118db338686612213565b6118ed856001600160a01b03166125c9565b15611992576040516344a1f60160e11b8152336004820181815260248301879052606060448401908152606484018690526001600160a01b03891693638943ec0293928992899289929190608401848480828437600081840152601f19601f82011690508083019250505095505050505050600060405180830381600087803b15801561197957600080fd5b505af115801561198d573d6000803e3d6000fd5b505050505b7f3ba9136826ac751de05d770d8d34fa4440ada49a5fb0e9aa1678aece66dad976838360405180806020018281038252848482818152602001925080828437600083820152604051601f909101601f19169092018290039550909350505050a1506001949350505050565b6005546001600160a01b031681565b6007546001600160a01b031681565b42841015611a66576040805162461bcd60e51b815260206004820152601360248201527214dbde519a5b985b98d94e8811561412549151606a1b604482015290519081900360640190fd5b6003546001600160a01b0380891660008181526004602090815260408083208054600180820190925582517f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98186015280840196909652958d166060860152608085018c905260a085019590955260c08085018b90528151808603909101815260e08501825280519083012061190160f01b6101008601526101028501969096526101228085019690965280518085039096018652610142840180825286519683019690962095839052610162840180825286905260ff89166101828501526101a284018890526101c28401879052519193926101e280820193601f1981019281900390910190855afa158015611b81573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615801590611bb75750886001600160a01b0316816001600160a01b0316145b611c08576040805162461bcd60e51b815260206004820152601d60248201527f536f7946696e616e63653a20494e56414c49445f5349474e4154555245000000604482015290519081900360640190fd5b611c138989896121b1565b505050505050505050565b600260209081526000928352604080842090915290825290205481565b600c54600114611c87576040805162461bcd60e51b815260206004820152601260248201527114dbde519a5b985b98d94e881313d0d2d15160721b604482015290519081900360640190fd5b6002600c55600654604080516370a0823160e01b81523060048201529051611d97926001600160a01b0316916370a08231916024808301926020929190829003018186803b158015611cd857600080fd5b505afa158015611cec573d6000803e3d6000fd5b505050506040513d6020811015611d0257600080fd5b5051600754604080516370a0823160e01b815230600482015290516001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015611d4f57600080fd5b505afa158015611d63573d6000803e3d6000fd5b505050506040513d6020811015611d7957600080fd5b50516008546001600160701b0380821691600160701b900416611feb565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b031663a9059cbb60e01b1781529251815160009460609489169392918291908083835b60208310611e4b5780518252601f199092019160209182019101611e2c565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114611ead576040519150601f19603f3d011682016040523d82523d6000602084013e611eb2565b606091505b5091509150818015611ee0575080511580611ee05750808060200190516020811015611edd57600080fd5b50515b611f31576040805162461bcd60e51b815260206004820152601b60248201527f536f7946696e616e63653a205452414e534645525f4641494c45440000000000604482015290519081900360640190fd5b5050505050565b6000811580611f5357505080820282828281611f5057fe5b04145b610ca9576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6d756c2d6f766572666c6f7760601b604482015290519081900360640190fd5b80820382811115610ca9576040805162461bcd60e51b815260206004820152601560248201527464732d6d6174682d7375622d756e646572666c6f7760581b604482015290519081900360640190fd5b6001600160701b03841180159061200957506001600160701b038311155b612051576040805162461bcd60e51b8152602060048201526014602482015273536f7946696e616e63653a204f564552464c4f5760601b604482015290519081900360640190fd5b60085463ffffffff42811691600160e01b9004811682039081161580159061208157506001600160701b03841615155b801561209557506001600160701b03831615155b15612106578063ffffffff166120c3856120ae866125cf565b6001600160e01b03169063ffffffff6125e116565b600980546001600160e01b03929092169290920201905563ffffffff81166120ee846120ae876125cf565b600a80546001600160e01b0392909216929092020190555b600880546dffffffffffffffffffffffffffff19166001600160701b03888116919091176dffffffffffffffffffffffffffff60701b1916600160701b8883168102919091176001600160e01b0316600160e01b63ffffffff871602179283905560408051848416815291909304909116602082015281517f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1929181900390910190a1505050505050565b6001600160a01b03808416600081815260026020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b6001600160a01b03831660009081526001602052604090205461223c908263ffffffff611f9b16565b6001600160a01b038085166000908152600160205260408082209390935590841681522054612271908263ffffffff61260616565b6001600160a01b0380841660008181526001602090815260409182902094909455805185815290519193928716927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92918290030190a3505050565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561231e57600080fd5b505afa158015612332573d6000803e3d6000fd5b505050506040513d602081101561234857600080fd5b5051600b546001600160a01b03821615801594509192509061241757801561241257600061238b6110076001600160701b0388811690881663ffffffff611f3816565b905060006123988361242b565b90508082111561240f5760006123c66123b7848463ffffffff611f9b16565b6000549063ffffffff611f3816565b905060006123eb836123df86600363ffffffff611f3816565b9063ffffffff61260616565b905060008183816123f857fe5b049050801561240b5761240b878261247d565b5050505b50505b612423565b8015612423576000600b555b505092915050565b6000600382111561246e575080600160028204015b818110156124685780915060028182858161245757fe5b04018161246057fe5b049050612440565b50612478565b8115612478575060015b919050565b600054612490908263ffffffff61260616565b60009081556001600160a01b0383168152600160205260409020546124bb908263ffffffff61260616565b6001600160a01b03831660008181526001602090815260408083209490945583518581529351929391927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9281900390910190a35050565b60008183106125225781612524565b825b9392505050565b6001600160a01b038216600090815260016020526040902054612554908263ffffffff611f9b16565b6001600160a01b03831660009081526001602052604081209190915554612581908263ffffffff611f9b16565b60009081556040805183815290516001600160a01b038516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef919081900360200190a35050565b3b151590565b6001600160701b0316600160701b0290565b60006001600160701b0382166001600160e01b038416816125fe57fe5b049392505050565b80820182811015610ca9576040805162461bcd60e51b815260206004820152601460248201527364732d6d6174682d6164642d6f766572666c6f7760601b604482015290519081900360640190fdfe536f7946696e616e63653a20494e53554646494349454e545f494e5055545f414d4f554e54536f7946696e616e63653a20494e53554646494349454e545f4f55545055545f414d4f554e54536f7946696e616e63653a20494e53554646494349454e545f4c49515549444954595f4255524e4544536f7946696e616e63653a20494e53554646494349454e545f4c49515549444954595f4d494e544544536f7946696e616e63653a20494e53554646494349454e545f4c4951554944495459a265627a7a723158202f587d7cd3e713211987504eb47508e12e2bd9b1e509863644a647b487abf10164736f6c63430005110032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429

Deployed ByteCode Sourcemap

11675:10055:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11675:10055:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18957:1918;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;18957:1918:0;;;;;;;;;;;;-1:-1:-1;;;;;18957:1918:0;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;18957:1918:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;18957:1918: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;18957:1918:0;;-1:-1:-1;18957:1918:0;-1:-1:-1;18957:1918:0;:::i;:::-;;6431:46;;;:::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;6431:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12701:231;;;:::i;:::-;;;;-1:-1:-1;;;;;12701:231:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8537:147;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8537:147:0;;-1:-1:-1;;;;;8537:147:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;11989:21;;;:::i;:::-;;;;-1:-1:-1;;;;;11989:21:0;;;;;;;;;;;;;;6622:24;;;:::i;:::-;;;;;;;;;;;;;;;;9372:301;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;9372:301:0;;;;;;;;;;;;;;;;;:::i;6914:108::-;;;:::i;6580:35::-;;;:::i;:::-;;;;;;;;;;;;;;;;;;;6771:31;;;:::i;13762:211::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;13762:211:0;;;;;;;;;;:::i;12340:32::-;;;:::i;6531:42::-;;;:::i;12379:32::-;;;:::i;15959:1263::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15959:1263:0;-1:-1:-1;;;;;15959:1263:0;;:::i;6653:41::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;6653:41:0;-1:-1:-1;;;;;6653:41:0;;:::i;12418:17::-;;;:::i;7029:38::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;7029:38:0;-1:-1:-1;;;;;7029:38:0;;:::i;21541:186::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;21541:186:0;;-1:-1:-1;;;;;21541:186:0;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;21541:186:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;21541:186: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;21541:186:0;;-1:-1:-1;21541:186:0;-1:-1:-1;21541:186:0;:::i;17334:1511::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17334:1511:0;-1:-1:-1;;;;;17334:1511:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;6484:40;;;:::i;8692:350::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;8692:350:0;;-1:-1:-1;;;;;8692:350:0;;;;;;:::i;11810:46::-;;;:::i;20924:356::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20924:356:0;-1:-1:-1;;;;;20924:356:0;;:::i;9054:310::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9054:310:0;;-1:-1:-1;;;;;9054:310:0;;;;;;;;;;;;;;;;;21:11:-1;5:28;;2:2;;;46:1;43;36:12;2:2;9054:310:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;9054:310: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;9054:310:0;;-1:-1:-1;9054:310:0;-1:-1:-1;9054:310:0;:::i;11960:22::-;;;:::i;12017:21::-;;;:::i;9681:676::-;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;-1:-1;;;;;;9681:676:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9681:676:0;;;;;;;;:::i;6701:61::-;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;;;;;;6701:61:0;;;;;;;;;;:::i;21329:180::-;;;:::i;18957:1918::-;12591:8;;12603:1;12591:13;12583:44;;;;;-1:-1:-1;;;12583:44:0;;;;;;;;;;;;-1:-1:-1;;;12583:44:0;;;;;;;;;;;;;;;12649:1;12638:8;:12;19071:14;;;;:32;;;19102:1;19089:10;:14;19071:32;19063:83;;;;-1:-1:-1;;;19063:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19158:17;19177;19199:13;:11;:13::i;:::-;-1:-1:-1;19157:55:0;;-1:-1:-1;19157:55:0;-1:-1:-1;;;;;;19246:22:0;;;;:48;;;;-1:-1:-1;;;;;;19272:22:0;;;;19246:48;19238:95;;;;-1:-1:-1;;;19238:95:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19478:6;;19513;;19346:13;;;;-1:-1:-1;;;;;19478:6:0;;;;19513;;;;19538:13;;;;;;;:30;;-1:-1:-1;;;;;;19555:13:0;;;;;;;;19538:30;19530:65;;;;;-1:-1:-1;;;19530:65:0;;;;;;;;;;;;-1:-1:-1;;;19530:65:0;;;;;;;;;;;;;;;19610:14;;19606:58;;19626:38;19640:7;19649:2;19653:10;19626:13;:38::i;:::-;19713:14;;19709:58;;19729:38;19743:7;19752:2;19756:10;19729:13;:38::i;:::-;19816:15;;19812:99;;19851:2;-1:-1:-1;;;;;19833:36:0;;19870:10;19882;19894;19906:4;;19833:78;;;;;;;;;;;;;-1:-1:-1;;;;;19833:78:0;-1:-1:-1;;;;;19833:78: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;;19833:78:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19833:78:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19833:78:0;;;;19812:99;19933:51;;;-1:-1:-1;;;19933:51:0;;19978:4;19933:51;;;;;;-1:-1:-1;;;;;19933:36:0;;;-1:-1:-1;;19933:51:0;;;;;;;;;;;;;;:36;:51;;;5:2:-1;;;;30:1;27;20:12;5:2;19933:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19933:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;19933:51:0;20006;;;-1:-1:-1;;;20006:51:0;;20051:4;20006:51;;;;;;19933;;-1:-1:-1;;;;;;20006:36:0;;;-1:-1:-1;;20006:51:0;;;;;19933;;20006;;;;;;;;:36;:51;;;5:2:-1;;;;30:1;27;20:12;5:2;20006:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20006:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;20006:51:0;;-1:-1:-1;20079:14:0;;-1:-1:-1;;;;;;;20107:22:0;;;;;20096:33;;:75;;20170:1;20096:75;;;-1:-1:-1;;;;;20144:22:0;;;;;20132:35;;20096:75;20079:92;-1:-1:-1;20182:14:0;-1:-1:-1;;;;;20210:22:0;;;;;20199:33;;:75;;20273:1;20199:75;;;-1:-1:-1;;;;;20247:22:0;;;;;20235:35;;20199:75;20182:92;;20305:1;20293:9;:13;:30;;;;20322:1;20310:9;:13;20293:30;20285:80;;;;-1:-1:-1;;;20285:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20451:21;20475:40;20498:16;:9;20512:1;20498:16;:13;:16;:::i;:::-;20475:18;:8;20488:4;20475:18;:12;:18;:::i;:::-;:22;:40;:22;:40;:::i;:::-;20451:64;-1:-1:-1;20526:21:0;20550:40;20573:16;:9;20587:1;20573:16;:13;:16;:::i;20550:40::-;20526:64;-1:-1:-1;20651:43:0;20686:7;20651:30;-1:-1:-1;;;;;20651:15:0;;;;:30;;:19;:30::i;:::-;:34;:43;:34;:43;:::i;:::-;20609:38;:16;20630;20609:38;:20;:38;:::i;:::-;:85;;20601:111;;;;;-1:-1:-1;;;20601:111:0;;;;;;;;;;;;-1:-1:-1;;;20601:111:0;;;;;;;;;;;;;;;12661:1;;20736:49;20744:8;20754;20764:9;20775;20736:7;:49::i;:::-;20801:66;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20801:66:0;;;20806:10;;20801:66;;;;;;;;;-1:-1:-1;;12684:1:0;12673:8;:12;-1:-1:-1;;;;;;;;;18957:1918:0:o;6431:46::-;;;;;;;;;;;;;-1:-1:-1;;;6431:46:0;;;;;:::o;12701:231::-;12834:8;;-1:-1:-1;;;;;12834:8:0;;;;-1:-1:-1;;;12865:8:0;;;;;;-1:-1:-1;;;12906:18:0;;;;;12701:231::o;8537:147::-;8601:4;8618:36;8627:10;8639:7;8648:5;8618:8;:36::i;:::-;-1:-1:-1;8672:4:0;8537:147;;;;;:::o;11989:21::-;;;-1:-1:-1;;;;;11989:21:0;;:::o;6622:24::-;;;;:::o;9372:301::-;-1:-1:-1;;;;;9471:15:0;;9450:4;9471:15;;;:9;:15;;;;;;;;9487:10;9471:27;;;;;;;;-1:-1:-1;;9471:39:0;9467:140;;-1:-1:-1;;;;;9557:15:0;;;;;;:9;:15;;;;;;;;9573:10;9557:27;;;;;;;;:38;;9589:5;9557:31;:38::i;:::-;-1:-1:-1;;;;;9527:15:0;;;;;;:9;:15;;;;;;;;9543:10;9527:27;;;;;;;:68;9467:140;9617:26;9627:4;9633:2;9637:5;9617:9;:26::i;:::-;-1:-1:-1;9661:4:0;9372:301;;;;;:::o;6914:108::-;6956:66;6914:108;:::o;6580:35::-;6613:2;6580:35;:::o;6771:31::-;;;;:::o;13762:211::-;13858:7;;-1:-1:-1;;;;;13858:7:0;13844:10;:21;13836:55;;;;;-1:-1:-1;;;13836:55:0;;;;;;;;;;;;-1:-1:-1;;;13836:55:0;;;;;;;;;;;;;;;13922:6;:16;;-1:-1:-1;;;;;13922:16:0;;;-1:-1:-1;;;;;;13922:16:0;;;;;;;13949:6;:16;;;;;;;;;;;13762:211::o;12340:32::-;;;;:::o;6531:42::-;;;;;;;;;;;;;-1:-1:-1;;;6531:42:0;;;;;:::o;12379:32::-;;;;:::o;15959:1263::-;16008:14;12591:8;;12603:1;12591:13;12583:44;;;;;-1:-1:-1;;;12583:44:0;;;;;;;;;;;;-1:-1:-1;;;12583:44:0;;;;;;;;;;;;;;;12649:1;12638:8;:12;16036:17;;16077:13;:11;:13::i;:::-;-1:-1:-1;16150:6:0;;16132:50;;;-1:-1:-1;;;16132:50:0;;16176:4;16132:50;;;;;;16035:55;;-1:-1:-1;16035:55:0;;-1:-1:-1;;;;;;;;16150:6:0;;;;-1:-1:-1;;16132:50:0;;;;;;;;;;;;;;16150:6;16132:50;;;5:2:-1;;;;30:1;27;20:12;5:2;16132:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16132:50:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16132:50:0;16227:6;;16209:50;;;-1:-1:-1;;;16209:50:0;;16253:4;16209:50;;;;;;16132;;-1:-1:-1;;;;;;;;16227:6:0;;;;-1:-1:-1;;16209:50:0;;;;;16132;;16209;;;;;;;;16227:6;16209:50;;;5:2:-1;;;;30:1;27;20:12;5:2;16209:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16209:50:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;16209:50:0;;-1:-1:-1;16270:12:0;16285:23;:8;-1:-1:-1;;;;;16285:23:0;;:12;:23::i;:::-;16270:38;-1:-1:-1;16319:12:0;16334:23;:8;-1:-1:-1;;;;;16334:23:0;;:12;:23::i;:::-;16319:38;;16370:10;16383:30;16392:9;16403;16383:8;:30::i;:::-;16424:17;16444:11;16370:43;;-1:-1:-1;16548:17:0;16544:352;;16594:54;11851:5;16594:31;16604:20;:7;16616;16604:20;:11;:20;:::i;:::-;16594:9;:31::i;:54::-;16582:66;;16662:36;16676:1;11851:5;16662;:36::i;:::-;16544:352;;;16798:86;-1:-1:-1;;;;;16807:37:0;;:25;:7;16819:12;16807:11;:25::i;:::-;:37;;;;;;-1:-1:-1;;;;;16846:37:0;;:25;:7;16858:12;16846:11;:25::i;:::-;:37;;;;;;16798:8;:86::i;:::-;16786:98;;16544:352;16926:1;16914:9;:13;16906:67;;;;-1:-1:-1;;;16906:67:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16984:20;16990:2;16994:9;16984:5;:20::i;:::-;17017:49;17025:8;17035;17045:9;17056;17017:7;:49::i;:::-;17081:5;17077:47;;;17115:8;;17096:28;;-1:-1:-1;;;;;17101:8:0;;;;-1:-1:-1;;;17115:8:0;;;17096:18;:28::i;:::-;17088:5;:36;17077:47;17180:34;;;;;;;;;;;;;;17185:10;;17180:34;;;;;;;;-1:-1:-1;;12684:1:0;12673:8;:12;-1:-1:-1;15959:1263:0;;;-1:-1:-1;;;;;;15959:1263:0:o;6653:41::-;;;;;;;;;;;;;:::o;12418:17::-;;;;:::o;7029:38::-;;;;;;;;;;;;;:::o;21541:186::-;21673:6;;-1:-1:-1;;;;;21673:6:0;21659:10;:20;;:44;;-1:-1:-1;21697:6:0;;-1:-1:-1;;;;;21697:6:0;21683:10;:20;21659:44;21651:68;;;;;-1:-1:-1;;;21651:68:0;;;;;;;;;;;;-1:-1:-1;;;21651:68:0;;;;;;;;;;;;;;;21541:186;;;;:::o;17334:1511::-;17383:12;17397;12591:8;;12603:1;12591:13;12583:44;;;;;-1:-1:-1;;;12583:44:0;;;;;;;;;;;;-1:-1:-1;;;12583:44:0;;;;;;;;;;;;;;;12649:1;12638:8;:12;17423:17;;17464:13;:11;:13::i;:::-;-1:-1:-1;17521:6:0;;17602;;17681:51;;;-1:-1:-1;;;17681:51:0;;17726:4;17681:51;;;;;;17422:55;;-1:-1:-1;17422:55:0;;-1:-1:-1;;;;;;17521:6:0;;;;17602;;;-1:-1:-1;;17521:6:0;;-1:-1:-1;;17681:51:0;;;;;;;;;;;;;;17521:6;17681:51;;;5:2:-1;;;;30:1;27;20:12;5:2;17681:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17681:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17681:51:0;17759;;;-1:-1:-1;;;17759:51:0;;17804:4;17759:51;;;;;;17681;;-1:-1:-1;;;;;;;;17759:36:0;;;-1:-1:-1;;17759:51:0;;;;;17681;;17759;;;;;;;:36;:51;;;5:2:-1;;;;30:1;27;20:12;5:2;17759:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17759:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;17759:51:0;17856:4;17821:14;17838:24;;;:9;17759:51;17838:24;;;;;17759:51;;-1:-1:-1;17888:30:0;17897:9;17908;17888:8;:30::i;:::-;17929:17;17949:11;17875:43;;-1:-1:-1;17949:11:0;18059:23;:9;18073:8;18059:23;:13;:23;:::i;:::-;:38;;;;;;;-1:-1:-1;18192:12:0;18166:23;:9;18180:8;18166:23;:13;:23;:::i;:::-;:38;;;;;;18156:48;;18281:1;18271:7;:11;:26;;;;;18296:1;18286:7;:11;18271:26;18263:80;;;;-1:-1:-1;;;18263:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18354:31;18368:4;18375:9;18354:5;:31::i;:::-;18396:35;18410:7;18419:2;18423:7;18396:13;:35::i;:::-;18442;18456:7;18465:2;18469:7;18442:13;:35::i;:::-;18499:51;;;-1:-1:-1;;;18499:51:0;;18544:4;18499:51;;;;;;-1:-1:-1;;;;;18499:36:0;;;-1:-1:-1;;18499:51:0;;;;;;;;;;;;;;:36;:51;;;5:2:-1;;;;30:1;27;20:12;5:2;18499:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18499:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18499:51:0;18572;;;-1:-1:-1;;;18572:51:0;;18617:4;18572:51;;;;;;18499;;-1:-1:-1;;;;;;18572:36:0;;;-1:-1:-1;;18572:51:0;;;;;18499;;18572;;;;;;;;:36;:51;;;5:2:-1;;;;30:1;27;20:12;5:2;18572:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18572:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;18572:51:0;;-1:-1:-1;18636:49:0;18644:8;18572:51;18664:9;18675;18636:7;:49::i;:::-;18700:5;18696:47;;;18734:8;;18715:28;;-1:-1:-1;;;;;18720:8:0;;;;-1:-1:-1;;;18734:8:0;;;18715:18;:28::i;:::-;18707:5;:36;18696:47;18799:38;;;;;;;;;;;;;;-1:-1:-1;;;;;18799:38:0;;;18804:10;;18799:38;;;;;;;;;;;12661:1;;;;;;;;;12684;12673:8;:12;;;;17334:1511;;;:::o;6484:40::-;;;;;;;;;;;;;-1:-1:-1;;;6484:40:0;;;;;:::o;8692:350::-;8769:35;;;;;;;;;;;;8752:4;8769:35;;;;;;8752:4;8816:32;8826:10;8838:2;8842:5;8816:9;:32::i;:::-;8872:15;-1:-1:-1;;;;;8872:13:0;;;:15::i;:::-;8869:108;;;8904:61;;-1:-1:-1;;;8904:61:0;;8939:10;8904:61;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8904:34:0;;;;;8939:10;8951:5;;8958:6;;8904:61;;;;;;;;;;;;;;;;-1:-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;8904:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8904:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8904:61:0;;;;8869:108;8992:20;9005:6;8992:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;8992:20:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9030:4:0;;8692:350;-1:-1:-1;;;8692:350:0:o;11810:46::-;11851:5;11810:46;:::o;20924:356::-;12591:8;;12603:1;12591:13;12583:44;;;;;-1:-1:-1;;;12583:44:0;;;;;;;;;;;;-1:-1:-1;;;12583:44:0;;;;;;;;;;;;;;;12649:1;12638:8;:12;20993:6;;21043;;21158:8;;21102:51;;;-1:-1:-1;;;21102:51:0;;21147:4;21102:51;;;;;;-1:-1:-1;;;;;20993:6:0;;;;21043;;;;21075:93;;20993:6;;21098:2;;21102:65;;-1:-1:-1;;;;;21158:8:0;;20993:6;;-1:-1:-1;;21102:51:0;;;;;;;;;;;;;;;20993:6;21102:51;;;5:2:-1;;;;30:1;27;20:12;5:2;21102:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21102:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21102:51:0;;:65;:55;:65;:::i;:::-;21075:13;:93::i;:::-;21262:8;;21206:51;;;-1:-1:-1;;;21206:51:0;;21251:4;21206:51;;;;;;21179:93;;21193:7;;21202:2;;21206:65;;-1:-1:-1;;;21262:8:0;;-1:-1:-1;;;;;21262:8:0;;-1:-1:-1;;;;;21206:36:0;;;-1:-1:-1;;21206:51:0;;;;;;;;;;;;;;;:36;:51;;;5:2:-1;;;;30:1;27;20:12;21179:93:0;-1:-1:-1;;12684:1:0;12673:8;:12;-1:-1:-1;20924:356:0:o;9054:310::-;9135:4;9152:32;9162:10;9174:2;9178:5;9152:9;:32::i;:::-;9198:15;-1:-1:-1;;;;;9198:13:0;;;:15::i;:::-;9195:106;;;9230:59;;-1:-1:-1;;;9230:59:0;;9265:10;9230:59;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9230:34:0;;;;;9265:10;9230:59;;9284:4;;9230:59;;;;;;9284:4;9230:59;;9284:4;9230:59;1:33:-1;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;;9230:59:0;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9230:59:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9230:59:0;;;;9195:106;9316:18;9329:4;;9316:18;;;;;;;;;;;;;;;;;;;;;30:3:-1;22:6;14;1:33;99:1;81:16;;;74:27;9316:18:0;;137:4:-1;117:14;;;-1:-1;;113:30;157:16;;;9316:18:0;;;;-1:-1:-1;9316:18:0;;-1:-1:-1;;;;9316:18:0;-1:-1:-1;9352:4:0;9054:310;;;;;;:::o;11960:22::-;;;-1:-1:-1;;;;;11960:22:0;;:::o;12017:21::-;;;-1:-1:-1;;;;;12017:21:0;;:::o;9681:676::-;9827:15;9815:8;:27;;9807:59;;;;;-1:-1:-1;;;9807:59:0;;;;;;;;;;;;-1:-1:-1;;;9807:59:0;;;;;;;;;;;;;;;9982:16;;-1:-1:-1;;;;;10078:13:0;;;9877:14;10078:13;;;:6;:13;;;;;;;;:15;;-1:-1:-1;10078:15:0;;;;;;10027:77;;6956:66;10027:77;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10027:77:0;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;10027:77:0;;;;;10017:88;;;;;;-1:-1:-1;;;9918:202:0;;;;;;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;9918:202:0;;;;;;9894:237;;;;;;;;;10169:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9877:14;;-1:-1:-1;10169:26:0;;;;;-1:-1:-1;;10169:26:0;;;;;;;;;;-1:-1:-1;10169:26:0;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;-1:-1;;10169:26:0;;-1:-1:-1;;10169:26:0;;;-1:-1:-1;;;;;;;10214:30:0;;;;;;:59;;-1:-1:-1;;;;;;10248:25:0;;;;;;;10214:59;10206:101;;;;;-1:-1:-1;;;10206:101:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;10318:31;10327:5;10334:7;10343:5;10318:8;:31::i;:::-;9681:676;;;;;;;;;:::o;6701:61::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;21329:180::-;12591:8;;12603:1;12591:13;12583:44;;;;;-1:-1:-1;;;12583:44:0;;;;;;;;;;;;-1:-1:-1;;;12583:44:0;;;;;;;;;;;;;;;12649:1;12638:8;:12;21396:6;;21378:50;;;-1:-1:-1;;;21378:50:0;;21422:4;21378:50;;;;;;21370:131;;-1:-1:-1;;;;;21396:6:0;;-1:-1:-1;;21378:50:0;;;;;;;;;;;;;;21396:6;21378:50;;;5:2:-1;;;;30:1;27;20:12;5:2;21378:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21378:50:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21378:50:0;21448:6;;21430:50;;;-1:-1:-1;;;21430:50:0;;21474:4;21430:50;;;;;;-1:-1:-1;;;;;21448:6:0;;;;-1:-1:-1;;21430:50:0;;;;;21378;;21430;;;;;;;;21448:6;21430:50;;;5:2:-1;;;;30:1;27;20:12;5:2;21430:50:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;21430:50:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;21430:50:0;21482:8;;-1:-1:-1;;;;;21482:8:0;;;;-1:-1:-1;;;21492:8:0;;;21370:7;:131::i;:::-;12684:1;12673:8;:12;21329:180::o;12940:288::-;11915:34;;;;;;;;;;;;;;;;;13068:43;;-1:-1:-1;;;;;13068:43:0;;;;;;;;;;;;;;;;26:21:-1;;;22:32;;;6:49;;13068:43:0;;;;;;25:18:-1;;;61:17;;-1:-1;;;;;182:15;-1:-1;;;179:29;160:49;;13057:55:0;;;;-1:-1:-1;;13036:17:0;;13057:10;;;13068:43;13057:55;;;25:18:-1;13057: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;;;13057: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;;13021:91:0;;;;13131:7;:57;;;;-1:-1:-1;13143:11:0;;:16;;:44;;;13174:4;13163:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;13163:24:0;13143:44;13123:97;;;;;-1:-1:-1;;;13123:97:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;12940:288;;;;;:::o;6163:142::-;6215:6;6242;;;:30;;-1:-1:-1;;6257:5:0;;;6271:1;6266;6257:5;6266:1;6252:15;;;;;:20;6242:30;6234:63;;;;;-1:-1:-1;;;6234:63:0;;;;;;;;;;;;-1:-1:-1;;;6234:63:0;;;;;;;;;;;;;;6026:129;6110:5;;;6105:16;;;;6097:50;;;;;-1:-1:-1;;;6097:50:0;;;;;;;;;;;;-1:-1:-1;;;6097:50:0;;;;;;;;;;;;;;14058:861;-1:-1:-1;;;;;14170:23:0;;;;;:50;;-1:-1:-1;;;;;;14197:23:0;;;14170:50;14162:83;;;;;-1:-1:-1;;;14162:83:0;;;;;;;;;;;;-1:-1:-1;;;14162:83:0;;;;;;;;;;;;;;;14360:18;;14287:23;:15;:23;;;-1:-1:-1;;;14360:18:0;;;;14343:35;;;14416:15;;;;;;:33;;-1:-1:-1;;;;;;14435:14:0;;;;14416:33;:51;;;;-1:-1:-1;;;;;;14453:14:0;;;;14416:51;14412:336;;;14622:11;14569:64;;14574:44;14608:9;14574:27;14591:9;14574:16;:27::i;:::-;-1:-1:-1;;;;;14574:33:0;;;:44::i;:::-;14545:20;:88;;-1:-1:-1;;;;;14569:50:0;;;;:64;;;;14545:88;;;14672:64;;;14677:44;14711:9;14677:27;14694:9;14677:16;:27::i;:44::-;14648:20;:88;;-1:-1:-1;;;;;14672:50:0;;;;:64;;;;14648:88;;;14412:336;14758:8;:28;;-1:-1:-1;;14758:28:0;-1:-1:-1;;;;;14758:28:0;;;;;;;-1:-1:-1;;;;14797:28:0;-1:-1:-1;;;14797:28:0;;;;;;;;;-1:-1:-1;;;;;14836:35:0;-1:-1:-1;;;14836:35:0;;;;;;;;;14887:24;;;14892:8;;;14887:24;;14902:8;;;;;;;14887:24;;;;;;;;;;;;;;;;;14058:861;;;;;;:::o;8132:169::-;-1:-1:-1;;;;;8213:16:0;;;;;;;:9;:16;;;;;;;;:25;;;;;;;;;;;;;:33;;;8262:31;;;;;;;;;;;;;;;;;8132:169;;;:::o;8309:220::-;-1:-1:-1;;;;;8403:15:0;;;;;;-1:-1:-1;8403:15:0;;;;;;:26;;8423:5;8403:19;:26::i;:::-;-1:-1:-1;;;;;8385:15:0;;;;;;;-1:-1:-1;8385:15:0;;;;;;:44;;;;8456:13;;;;;;;:24;;8474:5;8456:17;:24::i;:::-;-1:-1:-1;;;;;8440:13:0;;;;;;;-1:-1:-1;8440:13:0;;;;;;;;;:40;;;;8496:25;;;;;;;8440:13;;8496:25;;;;;;;;;;;;;8309:220;;;:::o;15009:838::-;15140:7;;15121:35;;;-1:-1:-1;;;15121:35:0;;;;15082:10;;;;-1:-1:-1;;;;;15140:7:0;;;;15121:33;;:35;;;;;;;;;;;;;;;15140:7;15121:35;;;5:2:-1;;;;30:1;27;20:12;5:2;15121:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15121:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;-1:-1;15121:35:0;15219:5;;-1:-1:-1;;;;;15175:19:0;;;;;;-1:-1:-1;15121:35:0;;-1:-1:-1;15219:5:0;15250:590;;15280:11;;15276:494;;15312:10;15325:41;15335:30;-1:-1:-1;;;;;15335:15:0;;;;:30;;:19;:30::i;15325:41::-;15312:54;;15385:14;15402:17;15412:6;15402:9;:17::i;:::-;15385:34;;15450:9;15442:5;:17;15438:317;;;15484:14;15501:37;15517:20;:5;15527:9;15517:20;:9;:20;:::i;:::-;15501:11;;;:37;:15;:37;:::i;:::-;15484:54;-1:-1:-1;15561:16:0;15580:27;15597:9;15580:12;:5;15590:1;15580:12;:9;:12;:::i;:::-;:16;:27;:16;:27;:::i;:::-;15561:46;;15630:14;15659:11;15647:9;:23;;;;;;;-1:-1:-1;15697:13:0;;15693:42;;15712:23;15718:5;15725:9;15712:5;:23::i;:::-;15438:317;;;;15276:494;;;15250:590;;;15791:11;;15787:53;;15827:1;15819:5;:9;15787:53;15009:838;;;;;;:::o;10653:303::-;10698:6;10725:1;10721;:5;10717:232;;;-1:-1:-1;10747:1:0;10780;10776;10772:5;;:9;10796:92;10807:1;10803;:5;10796:92;;;10833:1;10829:5;;10871:1;10866;10862;10858;:5;;;;;;:9;10857:15;;;;;;10853:19;;10796:92;;;10717:232;;;;10909:6;;10905:44;;-1:-1:-1;10936:1:0;10905:44;10653:303;;;:::o;7706:201::-;7779:11;;:22;;7795:5;7779:22;:15;:22;:::i;:::-;7765:11;:36;;;-1:-1:-1;;;;;7828:13:0;;;;-1:-1:-1;7828:13:0;;;;;;:24;;7846:5;7828:17;:24::i;:::-;-1:-1:-1;;;;;7812:13:0;;;;;;-1:-1:-1;7812:13:0;;;;;;;;:40;;;;7868:31;;;;;;;7812:13;;;;7868:31;;;;;;;;;;7706:201;;:::o;10439:96::-;10491:6;10518:1;10514;:5;:13;;10526:1;10514:13;;;10522:1;10514:13;10510:17;10439:96;-1:-1:-1;;;10439:96:0:o;7915:209::-;-1:-1:-1;;;;;7994:15:0;;;;;;-1:-1:-1;7994:15:0;;;;;;:26;;8014:5;7994:19;:26::i;:::-;-1:-1:-1;;;;;7976:15:0;;;;;;-1:-1:-1;7976:15:0;;;;;:44;;;;8045:11;:22;;8061:5;8045:15;:22::i;:::-;8031:11;:36;;;8083:33;;;;;;;;-1:-1:-1;;;;;8083:33:0;;;;;;;;;;;;;7915:209;;:::o;729:422::-;1096:20;1135:8;;;729:422::o;11227:120::-;-1:-1:-1;;;;;11303:10:0;-1:-1:-1;;;11303:17:0;;11227:120::o;11418:108::-;11478:9;-1:-1:-1;;;;;11508:10:0;;-1:-1:-1;;;;;11504:14:0;;11508:10;11504:14;;;;;;11418:108;-1:-1:-1;;;11418:108:0:o;5890:128::-;5974:5;;;5969:16;;;;5961:49;;;;;-1:-1:-1;;;5961:49:0;;;;;;;;;;;;-1:-1:-1;;;5961:49:0;;;;;;;;;;;;;

Swarm Source

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