Contract 0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c6

 
Txn Hash
Block
From
To
Value [Txn Fee]
0xd39c50bdaba859670c910de37b6d69d0d3ff34484c0e720449c2616237391e1283549842021-06-16 19:23:5510 mins ago0x3a63cb086959c4d2e285c93030013cb1ca4142f9 IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.000072645
0xe718009a66cba2cab6c86324da1d82134c1a40b8219f60aeb195b9f7fe3c65a883548882021-06-16 19:19:0714 mins ago0x4044e0a0687e37fd5c9b2e0807446ac9f39ac434 IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022083
0x74eb9b902887b27b5591726c3b5f0f646803e1987caf910f2dc21912aa097c1083548542021-06-16 19:17:2516 mins ago0x0ed3f284821465097bcc29cb48d96cdb2ee9427b IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022221
0x7ba3a39dd15a6f602cbedf713a9c40b4bbbbdbf282014a56255235560b963bba83545902021-06-16 19:04:1329 mins ago0x241de364beab31a3e172506f33376f9a6db5081a IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022089
0x790834f37e3663beb64b7bf0f4d264ebaaf88bb717effca1c2b01451ccde304083545452021-06-16 19:01:5831 mins ago0x9b282f1b68ed059639579fe9b27cc73821e67581 IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022221
0x905610a252aeab6683dcda4125678304085574206d205d37103839a68751a45c83543332021-06-16 18:51:2242 mins ago0x241de364beab31a3e172506f33376f9a6db5081a IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022167
0x54cc6f762054630ca5341003d93a1ca778e0d6d269ac87c354631703dfc8c16f83543272021-06-16 18:51:0442 mins ago0x05119e9c19a50e66cc085b2dd2730897f470747f IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022221
0xcfa55e6aa37ca7414ee6ed6fddf25781c1ace03f4d53e2e735f50bc9c131dcfb83540912021-06-16 18:39:1354 mins ago0x03563e9cb4d0f7634855e1a02437b9823511f009 IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022089
0x4bba503ba004363ece3736cafcc37af68a532d7b59ce633de52220c1977c98a583538322021-06-16 18:26:161 hr 7 mins ago0x010a3d87434cbdd37b809f7d9c79247af13eacae IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022221
0xff467f4d853b5d5dcd1fe0c9856d24e1ff54a6d81658461b7dd21d939e76be3083536512021-06-16 18:17:131 hr 16 mins ago0x53c86bbfbd8c22837b73e54e37a30922eb6c7cd9 IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022089
0x7b5f5eb06d14e0f61263d70e1f418edeb24cc69b31a68903684bce7846708fe983536462021-06-16 18:16:581 hr 16 mins ago0xef4db752bc367cfc6c8620d7370704cc5c99e594 IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022221
0x6aaba8dadbad10a3ea680c170645559eb1ad56c714a7cdd6ee162f3396dafd8283534902021-06-16 18:09:061 hr 24 mins ago0x602a6c4470d5fb9755fd1c8cb634df7bc290d0bc IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022083
0x4e15e30e3fc20852ad0e474bf8788cb8498ac6a3dd91256455696a984588a61283534882021-06-16 18:09:001 hr 24 mins ago0x71ad41bfecf8cda7e49c17813fd4adc45f93b8b5 IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022221
0x1969479485b543f54ed8d38afe88913191473d1db7c718cfd8eb45cc6a57713283532462021-06-16 17:56:521 hr 37 mins ago0x183f98c3eb39a2cdfa3b7002d968fb217e1de8bb IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022221
0x3f42813e131c7dd6f4d9afa66b3ef7c0c2be8abe5f5aceee0d1d7e9c6161ef9183532092021-06-16 17:55:011 hr 38 mins ago0xa5b24b47ccffa8a0a956a33721673b371cf5216c IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022221
0x3ff18634844ab1a8581f735be2a923b0efd94f0ac971fa741efe532b013afd2f83531472021-06-16 17:51:501 hr 42 mins ago0x71c47d173bff0660cde48d534adfd80c445564cb IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022167
0xff7721b1de7ae9bea0ba036164a89778ae7e869b8b24bd1edc19d840b64035d583531162021-06-16 17:50:171 hr 43 mins ago0xeaf5ce986fb1608459c8daa7819d7fd35812b95a IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022167
0x413bec27801838814c47ec499e1f247c304d90267709b3a684e0e73603653ba683531112021-06-16 17:50:021 hr 43 mins ago0x9bc150dd08216443b3601f5778b9a751637374df IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022167
0x64147a7b251b26defaa1f9314f52c8aa7c8ebe6d84c12d95353820c19133f06283527562021-06-16 17:32:152 hrs 1 min ago0xd3270a163f9600111ed9b4fa545253aa99d933c4 IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022089
0xacd2b74cb70adb89fab14ef2fc3d6b228be589aa6f26a62746e5357fe1523b1483527432021-06-16 17:31:362 hrs 2 mins ago0x9e3781496917f5fedab2d4ecd5c7b1047c8de1bc IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022167
0x628736b70d7c60d92835c7992c34704711f29e1da0b526ee30934e653842fb8683525872021-06-16 17:23:482 hrs 10 mins ago0x6429187fd84e298bf01d1922d794dfc47c769db1 IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022089
0xcbb70099d009d9d008218047791cc7868e5c0bdc4a12f72acedf5fce8ee2ff7e83525782021-06-16 17:23:212 hrs 10 mins ago0xded3e54bbcf04c7cfb6df5a241106ec79de518ba IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00012567
0x7d01b6498664face6ba063b87f13c1618ad289f548c41e5eb2ac64299de39ac883524342021-06-16 17:15:592 hrs 17 mins ago0xee87f79a9e462808e60978cdcb1d06172b63dfc5 IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022167
0x1e3047c241c9d864e72199ad620870aa8822f54f3f84b8c0200b68eae40d7ff483522942021-06-16 17:08:562 hrs 25 mins ago0xf0e218ca0d991de6719e3fa99fe16901bcac525c IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.0002266542
0x7935f5f6a0b6411fc56986060ccba525d40add69873786ac8b491354876e66e483522502021-06-16 17:06:442 hrs 27 mins ago0xc3665984ffb6b70ba7a862b49c60d9949a8bd369 IN  0xb4814f1ca673dbe9a2637c5dd4e94a4a0ed834c60 BNB0.00022221
[ Download CSV Export 
Latest 1 internal transaction
Parent Txn Hash Block From To Value
0xc64a1aae14b42ff7368d46c7ca6cc59a9da1427b513511f469b173a5cb085d6f66590712021-04-18 0:32:4259 days 19 hrs ago 0xb42e3fe71b7e0673335b3331b3e1053bd9822570  Contract Creation0 BNB
[ Download CSV Export 
Loading

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

Contract Name:
WaultSwapPair

Compiler Version
v0.5.16+commit.9c3226ce

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIТ

pragma solidity =0.5.16;

interface IWaultSwapFactory {
    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 IWaultSwapPair {
    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 IWaultSwapERC20 {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

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

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

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

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

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

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

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

contract WaultSwapERC20 is IWaultSwapERC20 {
    using SafeMath for uint;

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

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

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

// a library for handling binary fixed point numbers (https://en.wikipedia.org/wiki/Q_(number_format))
// range: [0, 2**112 - 1]
// resolution: 1 / 2**112
library UQ112x112 {
    uint224 constant Q112 = 2**112;

    // encode a uint112 as a UQ112x112
    function encode(uint112 y) internal pure returns (uint224 z) {
        z = uint224(y) * Q112; // never overflows
    }

    // divide a UQ112x112 by a uint112, returning a UQ112x112
    function uqdiv(uint224 x, uint112 y) internal pure returns (uint224 z) {
        z = x / uint224(y);
    }
}

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

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

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

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

contract WaultSwapPair is IWaultSwapPair, WaultSwapERC20 {
    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, 'WaultSwap: 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))), 'WaultSwap: 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, 'WaultSwap: 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), 'WaultSwap: 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 = IWaultSwapFactory(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(2).add(rootKLast);
                    uint liquidity = numerator / denominator;
                    if (liquidity > 0) _mint(feeTo, liquidity);
                }
            }
        } else if (_kLast != 0) {
            kLast = 0;
        }
    }

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

        bool feeOn = _mintFee(_reserve0, _reserve1);
        uint _totalSupply = totalSupply; // gas savings, must be defined here since totalSupply can update in _mintFee
        if (_totalSupply == 0) {
            liquidity = Math.sqrt(amount0.mul(amount1)).sub(MINIMUM_LIQUIDITY);
           _mint(address(0), MINIMUM_LIQUIDITY); // permanently lock the first MINIMUM_LIQUIDITY tokens
        } else {
            liquidity = Math.min(amount0.mul(_totalSupply) / _reserve0, amount1.mul(_totalSupply) / _reserve1);
        }
        require(liquidity > 0, 'WaultSwap: 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, 'WaultSwap: 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, 'WaultSwap: INSUFFICIENT_OUTPUT_AMOUNT');
        (uint112 _reserve0, uint112 _reserve1,) = getReserves(); // gas savings
        require(amount0Out < _reserve0 && amount1Out < _reserve1, 'WaultSwap: 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, 'WaultSwap: 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) IWaultSwapCallee(to).waultSwapCall(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, 'WaultSwap: 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), 'WaultSwap: 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 WaultSwapFactory is IWaultSwapFactory {
    bytes32 public constant INIT_CODE_PAIR_HASH = keccak256(abi.encodePacked(type(WaultSwapPair).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, 'WaultSwap: IDENTICAL_ADDRESSES');
        (address token0, address token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
        require(token0 != address(0), 'WaultSwap: ZERO_ADDRESS');
        require(getPair[token0][token1] == address(0), 'WaultSwap: PAIR_EXISTS'); // single check is sufficient
        bytes memory bytecode = type(WaultSwapPair).creationCode;
        bytes32 salt = keccak256(abi.encodePacked(token0, token1));
        assembly {
            pair := create2(0, add(bytecode, 32), mload(bytecode), salt)
        }
        IWaultSwapPair(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, 'WaultSwap: FORBIDDEN');
        feeTo = _feeTo;
    }

    function setFeeToSetter(address _feeToSetter) external {
        require(msg.sender == feeToSetter, 'WaultSwap: 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"},{"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"}]

60806040526001600c5534801561001557600080fd5b5060004690506040518080613bdf60529139605201905060405180910390206040518060400160405280600c81526020017f5761756c7453776170204c500000000000000000000000000000000000000000815250805190602001206040518060400160405280600181526020017f3100000000000000000000000000000000000000000000000000000000000000815250805190602001208330604051602001808681526020018581526020018481526020018381526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200195505050505050604051602081830303815290604052805190602001206003819055505033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550613a6a806101756000396000f3fe608060405234801561001057600080fd5b50600436106101a95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a7146108c4578063d505accf1461090e578063dd62ed3e146109a7578063fff6cae914610a1f576101a9565b8063ba9a7a5614610818578063bc25cf7714610836578063c45a01551461087a576101a9565b80637ecebe00116100d35780637ecebe001461067857806389afcb44146106d057806395d89b411461072f578063a9059cbb146107b2576101a9565b80636a627842146105aa57806370a08231146106025780637464fc3d1461065a576101a9565b806323b872dd116101665780633644e515116101405780633644e515146104ec578063485cc9551461050a5780635909c0d51461056e5780635a3d54931461058c576101a9565b806323b872dd1461042457806330adf81f146104aa578063313ce567146104c8576101a9565b8063022c0d9f146101ae57806306fdde031461025b5780630902f1ac146102de578063095ea7b3146103565780630dfe1681146103bc57806318160ddd14610406575b600080fd5b610259600480360360808110156101c457600080fd5b810190808035906020019092919080359060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019064010000000081111561021557600080fd5b82018360208201111561022757600080fd5b8035906020019184600183028401116401000000008311171561024957600080fd5b9091929391929390505050610a29565b005b610263611216565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102a3578082015181840152602081019050610288565b50505050905090810190601f1680156102d05780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6102e661124f565b60405180846dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168152602001836dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1681526020018263ffffffff1663ffffffff168152602001935050505060405180910390f35b6103a26004803603604081101561036c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112ac565b604051808215151515815260200191505060405180910390f35b6103c46112c3565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61040e6112e9565b6040518082815260200191505060405180910390f35b6104906004803603606081101561043a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506112ef565b604051808215151515815260200191505060405180910390f35b6104b26114ba565b6040518082815260200191505060405180910390f35b6104d06114e1565b604051808260ff1660ff16815260200191505060405180910390f35b6104f46114e6565b6040518082815260200191505060405180910390f35b61056c6004803603604081101561052057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506114ec565b005b610576611635565b6040518082815260200191505060405180910390f35b61059461163b565b6040518082815260200191505060405180910390f35b6105ec600480360360208110156105c057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611641565b6040518082815260200191505060405180910390f35b6106446004803603602081101561061857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611af2565b6040518082815260200191505060405180910390f35b610662611b0a565b6040518082815260200191505060405180910390f35b6106ba6004803603602081101561068e57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b10565b6040518082815260200191505060405180910390f35b610712600480360360208110156106e657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b28565b604051808381526020018281526020019250505060405180910390f35b610737612115565b6040518080602001828103825283818151815260200191508051906020019080838360005b8381101561077757808201518184015260208101905061075c565b50505050905090810190601f1680156107a45780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b6107fe600480360360408110156107c857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919050505061214e565b604051808215151515815260200191505060405180910390f35b610820612165565b6040518082815260200191505060405180910390f35b6108786004803603602081101561084c57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061216b565b005b610882612446565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6108cc61246c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6109a5600480360360e081101561092457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291908035906020019092919080359060200190929190803560ff1690602001909291908035906020019092919080359060200190929190505050612492565b005b610a09600480360360408110156109bd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506127d6565b6040518082815260200191505060405180910390f35b610a276127fb565b005b6001600c5414610aa1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5761756c74537761703a204c4f434b454400000000000000000000000000000081525060200191505060405180910390fd5b6000600c819055506000851180610ab85750600084115b610b0d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806139a06025913960400191505060405180910390fd5b600080610b1861124f565b5091509150816dffffffffffffffffffffffffffff1687108015610b4b5750806dffffffffffffffffffffffffffff1686105b610ba0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806139c56021913960400191505060405180910390fd5b6000806000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508173ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614158015610c5957508073ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff1614155b610ccb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f5761756c74537761703a20494e56414c49445f544f000000000000000000000081525060200191505060405180910390fd5b60008b1115610ce057610cdf828a8d612a7b565b5b60008a1115610cf557610cf4818a8c612a7b565b5b6000888890501115610ddd578873ffffffffffffffffffffffffffffffffffffffff1663485f3994338d8d8c8c6040518663ffffffff1660e01b8152600401808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001858152602001848152602001806020018281038252848482818152602001925080828437600081840152601f19601f8201169050808301925050509650505050505050600060405180830381600087803b158015610dc457600080fd5b505af1158015610dd8573d6000803e3d6000fd5b505050505b8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610e5a57600080fd5b505afa158015610e6e573d6000803e3d6000fd5b505050506040513d6020811015610e8457600080fd5b810190808051906020019092919050505093508073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610f1457600080fd5b505afa158015610f28573d6000803e3d6000fd5b505050506040513d6020811015610f3e57600080fd5b810190808051906020019092919050505092505050600089856dffffffffffffffffffffffffffff16038311610f75576000610f8b565b89856dffffffffffffffffffffffffffff160383035b9050600089856dffffffffffffffffffffffffffff16038311610faf576000610fc5565b89856dffffffffffffffffffffffffffff160383035b90506000821180610fd65750600081115b61102b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602481526020018061397c6024913960400191505060405180910390fd5b6000611067611044600285612cc890919063ffffffff16565b6110596103e888612cc890919063ffffffff16565b612d5d90919063ffffffff16565b905060006110a5611082600285612cc890919063ffffffff16565b6110976103e888612cc890919063ffffffff16565b612d5d90919063ffffffff16565b90506110ef620f42406110e1896dffffffffffffffffffffffffffff168b6dffffffffffffffffffffffffffff16612cc890919063ffffffff16565b612cc890919063ffffffff16565b6111028284612cc890919063ffffffff16565b1015611176576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600c8152602001807f5761756c74537761703a204b000000000000000000000000000000000000000081525060200191505060405180910390fd5b505061118484848888612de0565b8873ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d82284848f8f6040518085815260200184815260200183815260200182815260200194505050505060405180910390a35050505050506001600c819055505050505050565b6040518060400160405280600c81526020017f5761756c7453776170204c50000000000000000000000000000000000000000081525081565b6000806000600860009054906101000a90046dffffffffffffffffffffffffffff1692506008600e9054906101000a90046dffffffffffffffffffffffffffff1691506008601c9054906101000a900463ffffffff169050909192565b60006112b933848461315e565b6001905092915050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60005481565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054146114a45761142382600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d5d90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6114af848484613249565b600190509392505050565b7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b81565b601281565b60035481565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f5761756c74537761703a20464f5242494444454e00000000000000000000000081525060200191505060405180910390fd5b81600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b60095481565b600a5481565b60006001600c54146116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5761756c74537761703a204c4f434b454400000000000000000000000000000081525060200191505060405180910390fd5b6000600c819055506000806116ce61124f565b50915091506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561177457600080fd5b505afa158015611788573d6000803e3d6000fd5b505050506040513d602081101561179e57600080fd5b810190808051906020019092919050505090506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561185257600080fd5b505afa158015611866573d6000803e3d6000fd5b505050506040513d602081101561187c57600080fd5b8101908080519060200190929190505050905060006118b4856dffffffffffffffffffffffffffff1684612d5d90919063ffffffff16565b905060006118db856dffffffffffffffffffffffffffff1684612d5d90919063ffffffff16565b905060006118e987876133dd565b9050600080549050600081141561193d576119296103e861191b6119168688612cc890919063ffffffff16565b6135be565b612d5d90919063ffffffff16565b985061193860006103e8613620565b6119a0565b61199d886dffffffffffffffffffffffffffff166119648387612cc890919063ffffffff16565b8161196b57fe5b04886dffffffffffffffffffffffffffff166119908487612cc890919063ffffffff16565b8161199757fe5b0461373a565b98505b600089116119f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260288152602001806139e66028913960400191505060405180910390fd5b611a038a8a613620565b611a0f86868a8a612de0565b8115611a8757611a806008600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16600860009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16612cc890919063ffffffff16565b600b819055505b3373ffffffffffffffffffffffffffffffffffffffff167f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f8585604051808381526020018281526020019250505060405180910390a250505050505050506001600c81905550919050565b60016020528060005260406000206000915090505481565b600b5481565b60046020528060005260406000206000915090505481565b6000806001600c5414611ba3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5761756c74537761703a204c4f434b454400000000000000000000000000000081525060200191505060405180910390fd5b6000600c81905550600080611bb661124f565b50915091506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611c8857600080fd5b505afa158015611c9c573d6000803e3d6000fd5b505050506040513d6020811015611cb257600080fd5b8101908080519060200190929190505050905060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611d4457600080fd5b505afa158015611d58573d6000803e3d6000fd5b505050506040513d6020811015611d6e57600080fd5b810190808051906020019092919050505090506000600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506000611dd188886133dd565b905060008054905080611ded8685612cc890919063ffffffff16565b81611df457fe5b049a5080611e0b8585612cc890919063ffffffff16565b81611e1257fe5b04995060008b118015611e25575060008a115b611e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526028815260200180613a0e6028913960400191505060405180910390fd5b611e843084613753565b611e8f878d8d612a7b565b611e9a868d8c612a7b565b8673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611f1757600080fd5b505afa158015611f2b573d6000803e3d6000fd5b505050506040513d6020811015611f4157600080fd5b810190808051906020019092919050505094508573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611fd157600080fd5b505afa158015611fe5573d6000803e3d6000fd5b505050506040513d6020811015611ffb57600080fd5b8101908080519060200190929190505050935061201a85858b8b612de0565b81156120925761208b6008600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16600860009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff16612cc890919063ffffffff16565b600b819055505b8b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d819364968d8d604051808381526020018281526020019250505060405180910390a35050505050505050506001600c81905550915091565b6040518060400160405280600381526020017f574c50000000000000000000000000000000000000000000000000000000000081525081565b600061215b338484613249565b6001905092915050565b6103e881565b6001600c54146121e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5761756c74537761703a204c4f434b454400000000000000000000000000000081525060200191505060405180910390fd5b6000600c819055506000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506123398284612334600860009054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156122eb57600080fd5b505afa1580156122ff573d6000803e3d6000fd5b505050506040513d602081101561231557600080fd5b8101908080519060200190929190505050612d5d90919063ffffffff16565b612a7b565b61243981846124346008600e9054906101000a90046dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156123eb57600080fd5b505afa1580156123ff573d6000803e3d6000fd5b505050506040513d602081101561241557600080fd5b8101908080519060200190929190505050612d5d90919063ffffffff16565b612a7b565b50506001600c8190555050565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b42841015612508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260128152602001807f5761756c74537761703a2045585049524544000000000000000000000000000081525060200191505060405180910390fd5b60006003547f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c960001b898989600460008e73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190600101919050558a604051602001808781526020018673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200184815260200183815260200182815260200196505050505050506040516020818303038152906040528051906020012060405160200180807f190100000000000000000000000000000000000000000000000000000000000081525060020183815260200182815260200192505050604051602081830303815290604052805190602001209050600060018286868660405160008152602001604052604051808581526020018460ff1660ff1681526020018381526020018281526020019450505050506020604051602081039080840390855afa1580156126da573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561274e57508873ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b6127c0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601c8152602001807f5761756c74537761703a20494e56414c49445f5349474e41545552450000000081525060200191505060405180910390fd5b6127cb89898961315e565b505050505050505050565b6002602052816000526040600020602052806000526040600020600091509150505481565b6001600c5414612873576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260118152602001807f5761756c74537761703a204c4f434b454400000000000000000000000000000081525060200191505060405180910390fd5b6000600c81905550612a71600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561291d57600080fd5b505afa158015612931573d6000803e3d6000fd5b505050506040513d602081101561294757600080fd5b8101908080519060200190929190505050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156129f757600080fd5b505afa158015612a0b573d6000803e3d6000fd5b505050506040513d6020811015612a2157600080fd5b8101908080519060200190929190505050600860009054906101000a90046dffffffffffffffffffffffffffff166008600e9054906101000a90046dffffffffffffffffffffffffffff16612de0565b6001600c81905550565b600060608473ffffffffffffffffffffffffffffffffffffffff166040518060400160405280601981526020017f7472616e7366657228616464726573732c75696e743235362900000000000000815250805190602001208585604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040518082805190602001908083835b60208310612ba85780518252602082019150602081019050602083039250612b85565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612c0a576040519150601f19603f3d011682016040523d82523d6000602084013e612c0f565b606091505b5091509150818015612c4f5750600081511480612c4e5750808060200190516020811015612c3c57600080fd5b81019080805190602001909291905050505b5b612cc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f5761756c74537761703a205452414e534645525f4641494c454400000000000081525060200191505060405180910390fd5b5050505050565b600080821480612ce55750828283850292508281612ce257fe5b04145b612d57576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6d756c2d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b92915050565b6000828284039150811115612dda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260158152602001807f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000081525060200191505060405180910390fd5b92915050565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff168411158015612e5057507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6dffffffffffffffffffffffffffff168311155b612ec2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260138152602001807f5761756c74537761703a204f564552464c4f570000000000000000000000000081525060200191505060405180910390fd5b60006401000000004281612ed257fe5b06905060006008601c9054906101000a900463ffffffff168203905060008163ffffffff16118015612f1557506000846dffffffffffffffffffffffffffff1614155b8015612f3257506000836dffffffffffffffffffffffffffff1614155b15613014578063ffffffff16612f7785612f4b8661386d565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661389890919063ffffffff16565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16026009600082825401925050819055508063ffffffff16612fe584612fb98761386d565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661389890919063ffffffff16565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1602600a600082825401925050819055505b85600860006101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550846008600e6101000a8154816dffffffffffffffffffffffffffff02191690836dffffffffffffffffffffffffffff160217905550816008601c6101000a81548163ffffffff021916908363ffffffff1602179055507f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1600860009054906101000a90046dffffffffffffffffffffffffffff166008600e9054906101000a90046dffffffffffffffffffffffffffff1660405180836dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff168152602001826dffffffffffffffffffffffffffff166dffffffffffffffffffffffffffff1681526020019250505060405180910390a1505050505050565b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b61329b81600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d5d90919063ffffffff16565b600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061333081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f890919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a3505050565b600080600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663017e7e586040518163ffffffff1660e01b815260040160206040518083038186803b15801561344857600080fd5b505afa15801561345c573d6000803e3d6000fd5b505050506040513d602081101561347257600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141591506000600b54905082156135a4576000811461359f57600061350a613505866dffffffffffffffffffffffffffff16886dffffffffffffffffffffffffffff16612cc890919063ffffffff16565b6135be565b90506000613517836135be565b90508082111561359c57600061354a6135398385612d5d90919063ffffffff16565b600054612cc890919063ffffffff16565b9050600061357483613566600287612cc890919063ffffffff16565b6138f890919063ffffffff16565b9050600081838161358157fe5b0490506000811115613598576135978782613620565b5b5050505b50505b6135b6565b600081146135b5576000600b819055505b5b505092915050565b6000600382111561360d5781905060006001600284816135da57fe5b040190505b81811015613607578091506002818285816135f657fe5b0401816135ff57fe5b0490506135df565b5061361b565b6000821461361a57600190505b5b919050565b613635816000546138f890919063ffffffff16565b60008190555061368d81600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f890919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b6000818310613749578161374b565b825b905092915050565b6137a581600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612d5d90919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137fd81600054612d5d90919063ffffffff16565b600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040518082815260200191505060405180910390a35050565b60006e010000000000000000000000000000826dffffffffffffffffffffffffffff16029050919050565b6000816dffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16816138ef57fe5b04905092915050565b6000828284019150811015613975576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260148152602001807f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000081525060200191505060405180910390fd5b9291505056fe5761756c74537761703a20494e53554646494349454e545f494e5055545f414d4f554e545761756c74537761703a20494e53554646494349454e545f4f55545055545f414d4f554e545761756c74537761703a20494e53554646494349454e545f4c49515549444954595761756c74537761703a20494e53554646494349454e545f4c49515549444954595f4d494e5445445761756c74537761703a20494e53554646494349454e545f4c49515549444954595f4255524e4544a265627a7a72315820bbaa8b48df7d32c1cc94de04b27ed04970407561996f3218562debd2c21b720164736f6c63430005100032454950373132446f6d61696e28737472696e67206e616d652c737472696e672076657273696f6e2c75696e7432353620636861696e49642c6164647265737320766572696679696e67436f6e747261637429

Deployed ByteCode Sourcemap

10400:9687:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10400:9687:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17605:1889;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;17605:1889:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21:11:-1;8;5:28;2:2;;;46:1;43;36:12;2:2;17605:1889:0;;35:9:-1;28:4;12:14;8:25;5:40;2:2;;;58:1;55;48:12;2:2;17605:1889: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;17605:1889:0;;;;;;;;;;;;:::i;:::-;;4945:44;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4945:44:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11421:231;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6991:147;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;6991:147:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10710:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5082:24;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7293:301;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7293:301:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5374:108;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5040:35;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;5231:31;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12481:210;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12481:210:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;11061:32;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11100;;;:::i;:::-;;;;;;;;;;;;;;;;;;;14675:1240;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14675:1240:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5113:41;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5113:41:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;11139:17;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5489:38;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5489:38:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16027:1466;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16027:1466:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;4996:37;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;4996:37:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7146:139;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7146:139:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10531:46;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19543:334;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19543:334:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;10681:22;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10738:21;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7602:674;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;7602:674:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;5161:61;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;5161:61:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;19926:158;;;:::i;:::-;;17605:1889;11324:1;11312:8;;:13;11304:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11369:1;11358:8;:12;;;;17732:1;17719:10;:14;:32;;;;17750:1;17737:10;:14;17719:32;17711:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17805:17;17824;17846:13;:11;:13::i;:::-;17804:55;;;;;17906:9;17893:22;;:10;:22;:48;;;;;17932:9;17919:22;;:10;:22;17893:48;17885:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17992:13;18016;18106:15;18124:6;;;;;;;;;;;18106:24;;18141:15;18159:6;;;;;;;;;;;18141:24;;18190:7;18184:13;;:2;:13;;;;:30;;;;;18207:7;18201:13;;:2;:13;;;;18184:30;18176:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18268:1;18255:10;:14;18251:58;;;18271:38;18285:7;18294:2;18298:10;18271:13;:38::i;:::-;18251:58;18371:1;18358:10;:14;18354:58;;;18374:38;18388:7;18397:2;18401:10;18374:13;:38::i;:::-;18354:58;18475:1;18461:4;;:11;;:15;18457:97;;;18495:2;18478:34;;;18513:10;18525;18537;18549:4;;18478:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;18478:76:0;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18478:76:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18478:76:0;;;;18457:97;18583:7;18576:25;;;18610:4;18576:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18576:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18576:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18576:40:0;;;;;;;;;;;;;;;;18565:51;;18645:7;18638:25;;;18672:4;18638:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18638:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18638:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;18638:40:0;;;;;;;;;;;;;;;;18627:51;;11381:1;;18700:14;18740:10;18728:9;:22;;;18717:8;:33;:75;;18791:1;18717:75;;;18777:10;18765:9;:22;;;18753:8;:35;18717:75;18700:92;;18803:14;18843:10;18831:9;:22;;;18820:8;:33;:75;;18894:1;18820:75;;;18880:10;18868:9;:22;;;18856:8;:35;18820:75;18803:92;;18926:1;18914:9;:13;:30;;;;18943:1;18931:9;:13;18914:30;18906:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19071:21;19095:40;19118:16;19132:1;19118:9;:13;;:16;;;;:::i;:::-;19095:18;19108:4;19095:8;:12;;:18;;;;:::i;:::-;:22;;:40;;;;:::i;:::-;19071:64;;19146:21;19170:40;19193:16;19207:1;19193:9;:13;;:16;;;;:::i;:::-;19170:18;19183:4;19170:8;:12;;:18;;;;:::i;:::-;:22;;:40;;;;:::i;:::-;19146:64;;19271:43;19306:7;19271:30;19291:9;19271:30;;19276:9;19271:15;;:19;;:30;;;;:::i;:::-;:34;;:43;;;;:::i;:::-;19229:38;19250:16;19229;:20;;:38;;;;:::i;:::-;:85;;19221:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11381:1;;19355:49;19363:8;19373;19383:9;19394;19355:7;:49::i;:::-;19483:2;19420:66;;19425:10;19420:66;;;19437:9;19448;19459:10;19471;19420:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11381:1;;;;;;11404;11393:8;:12;;;;17605:1889;;;;;:::o;4945:44::-;;;;;;;;;;;;;;;;;;;:::o;11421:231::-;11465:17;11484;11503:26;11554:8;;;;;;;;;;;11542:20;;11585:8;;;;;;;;;;;11573:20;;11626:18;;;;;;;;;;;11604:40;;11421:231;;;:::o;6991:147::-;7055:4;7072:36;7081:10;7093:7;7102:5;7072:8;:36::i;:::-;7126:4;7119:11;;6991:147;;;;:::o;10710:21::-;;;;;;;;;;;;;:::o;5082:24::-;;;;:::o;7293:301::-;7371:4;7428:2;7392:9;:15;7402:4;7392:15;;;;;;;;;;;;;;;:27;7408:10;7392:27;;;;;;;;;;;;;;;;:39;7388:140;;7478:38;7510:5;7478:9;:15;7488:4;7478:15;;;;;;;;;;;;;;;:27;7494:10;7478:27;;;;;;;;;;;;;;;;:31;;:38;;;;:::i;:::-;7448:9;:15;7458:4;7448:15;;;;;;;;;;;;;;;:27;7464:10;7448:27;;;;;;;;;;;;;;;:68;;;;7388:140;7538:26;7548:4;7554:2;7558:5;7538:9;:26::i;:::-;7582:4;7575:11;;7293:301;;;;;:::o;5374:108::-;5416:66;5374:108;;;:::o;5040:35::-;5073:2;5040:35;:::o;5231:31::-;;;;:::o;12481:210::-;12577:7;;;;;;;;;;;12563:21;;:10;:21;;;12555:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12649:7;12640:6;;:16;;;;;;;;;;;;;;;;;;12676:7;12667:6;;:16;;;;;;;;;;;;;;;;;;12481:210;;:::o;11061:32::-;;;;:::o;11100:::-;;;;:::o;14675:1240::-;14724:14;11324:1;11312:8;;:13;11304:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11369:1;11358:8;:12;;;;14752:17;14771;14793:13;:11;:13::i;:::-;14751:55;;;;;14832:13;14855:6;;;;;;;;;;;14848:24;;;14881:4;14848:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14848:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14848:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14848:39:0;;;;;;;;;;;;;;;;14832:55;;14898:13;14921:6;;;;;;;;;;;14914:24;;;14947:4;14914:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14914:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14914:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;14914:39:0;;;;;;;;;;;;;;;;14898:55;;14964:12;14979:23;14992:9;14979:23;;:8;:12;;:23;;;;:::i;:::-;14964:38;;15013:12;15028:23;15041:9;15028:23;;:8;:12;;:23;;;;:::i;:::-;15013:38;;15064:10;15077:30;15086:9;15097;15077:8;:30::i;:::-;15064:43;;15118:17;15138:11;;15118:31;;15258:1;15242:12;:17;15238:352;;;15288:54;10572:5;15288:31;15298:20;15310:7;15298;:11;;:20;;;;:::i;:::-;15288:9;:31::i;:::-;:35;;:54;;;;:::i;:::-;15276:66;;15356:36;15370:1;10572:5;15356;:36::i;:::-;15238:352;;;15492:86;15529:9;15501:37;;:25;15513:12;15501:7;:11;;:25;;;;:::i;:::-;:37;;;;;;15568:9;15540:37;;:25;15552:12;15540:7;:11;;:25;;;;:::i;:::-;:37;;;;;;15492:8;:86::i;:::-;15480:98;;15238:352;15620:1;15608:9;:13;15600:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15677:20;15683:2;15687:9;15677:5;:20::i;:::-;15710:49;15718:8;15728;15738:9;15749;15710:7;:49::i;:::-;15774:5;15770:47;;;15789:28;15808:8;;;;;;;;;;;15789:28;;15794:8;;;;;;;;;;;15789:14;;:18;;:28;;;;:::i;:::-;15781:5;:36;;;;15770:47;15878:10;15873:34;;;15890:7;15899;15873:34;;;;;;;;;;;;;;;;;;;;;;;;11381:1;;;;;;;;11404;11393:8;:12;;;;14675:1240;;;:::o;5113:41::-;;;;;;;;;;;;;;;;;:::o;11139:17::-;;;;:::o;5489:38::-;;;;;;;;;;;;;;;;;:::o;16027:1466::-;16076:12;16090;11324:1;11312:8;;:13;11304:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11369:1;11358:8;:12;;;;16116:17;16135;16157:13;:11;:13::i;:::-;16115:55;;;;;16196:15;16214:6;;;;;;;;;;;16196:24;;16277:15;16295:6;;;;;;;;;;;16277:24;;16358:13;16381:7;16374:25;;;16408:4;16374:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16374:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16374:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16374:40:0;;;;;;;;;;;;;;;;16358:56;;16425:13;16448:7;16441:25;;;16475:4;16441:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16441:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16441:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;16441:40:0;;;;;;;;;;;;;;;;16425:56;;16492:14;16509:9;:24;16527:4;16509:24;;;;;;;;;;;;;;;;16492:41;;16546:10;16559:30;16568:9;16579;16559:8;:30::i;:::-;16546:43;;16600:17;16620:11;;16600:31;;16756:12;16730:23;16744:8;16730:9;:13;;:23;;;;:::i;:::-;:38;;;;;;16720:48;;16863:12;16837:23;16851:8;16837:9;:13;;:23;;;;:::i;:::-;:38;;;;;;16827:48;;16952:1;16942:7;:11;:26;;;;;16967:1;16957:7;:11;16942:26;16934:79;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17024:31;17038:4;17045:9;17024:5;:31::i;:::-;17066:35;17080:7;17089:2;17093:7;17066:13;:35::i;:::-;17112;17126:7;17135:2;17139:7;17112:13;:35::i;:::-;17176:7;17169:25;;;17203:4;17169:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17169:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17169:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17169:40:0;;;;;;;;;;;;;;;;17158:51;;17238:7;17231:25;;;17265:4;17231:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17231:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17231:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;17231:40:0;;;;;;;;;;;;;;;;17220:51;;17284:49;17292:8;17302;17312:9;17323;17284:7;:49::i;:::-;17348:5;17344:47;;;17363:28;17382:8;;;;;;;;;;;17363:28;;17368:8;;;;;;;;;;;17363:14;;:18;;:28;;;;:::i;:::-;17355:5;:36;;;;17344:47;17482:2;17447:38;;17452:10;17447:38;;;17464:7;17473;17447:38;;;;;;;;;;;;;;;;;;;;;;;;11381:1;;;;;;;;;11404;11393:8;:12;;;;16027:1466;;;:::o;4996:37::-;;;;;;;;;;;;;;;;;;;:::o;7146:139::-;7206:4;7223:32;7233:10;7245:2;7249:5;7223:9;:32::i;:::-;7273:4;7266:11;;7146:139;;;;:::o;10531:46::-;10572:5;10531:46;:::o;19543:334::-;11324:1;11312:8;;:13;11304:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11369:1;11358:8;:12;;;;19594:15;19612:6;;;;;;;;;;;19594:24;;19644:15;19662:6;;;;;;;;;;;19644:24;;19694:82;19708:7;19717:2;19721:54;19766:8;;;;;;;;;;;19721:54;;19728:7;19721:25;;;19755:4;19721:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19721:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19721:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19721:40:0;;;;;;;;;;;;;;;;:44;;:54;;;;:::i;:::-;19694:13;:82::i;:::-;19787;19801:7;19810:2;19814:54;19859:8;;;;;;;;;;;19814:54;;19821:7;19814:25;;;19848:4;19814:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19814:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19814:40:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19814:40:0;;;;;;;;;;;;;;;;:44;;:54;;;;:::i;:::-;19787:13;:82::i;:::-;11381:1;;11404;11393:8;:12;;;;19543:334;:::o;10681:22::-;;;;;;;;;;;;;:::o;10738:21::-;;;;;;;;;;;;;:::o;7602:674::-;7748:15;7736:8;:27;;7728:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7797:14;7902:16;;5416:66;7958:15;;7975:5;7982:7;7991:5;7998:6;:13;8005:5;7998:13;;;;;;;;;;;;;;;;:15;;;;;;;;;;;;8015:8;7947:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;7947:77:0;;;7937:88;;;;;;7838:202;;;;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;7838:202:0;;;7814:237;;;;;;7797:254;;8062:24;8089:26;8099:6;8107:1;8110;8113;8089:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8089:26:0;;;;;;;;8062:53;;8162:1;8134:30;;:16;:30;;;;:59;;;;;8188:5;8168:25;;:16;:25;;;8134:59;8126:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8237:31;8246:5;8253:7;8262:5;8237:8;:31::i;:::-;7602:674;;;;;;;;;:::o;5161:61::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19926:158::-;11324:1;11312:8;;:13;11304:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11369:1;11358:8;:12;;;;19967:109;19982:6;;;;;;;;;;;19975:24;;;20008:4;19975:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19975:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;19975:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;19975:39:0;;;;;;;;;;;;;;;;20023:6;;;;;;;;;;;20016:24;;;20049:4;20016:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;20016:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;20016:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;20016:39:0;;;;;;;;;;;;;;;;20057:8;;;;;;;;;;;20067;;;;;;;;;;;19967:7;:109::i;:::-;11404:1;11393:8;:12;;;;19926:158::o;11660:287::-;11742:12;11756:17;11777:5;:10;;10636:34;;;;;;;;;;;;;;;;;10626:45;;;;;;11821:2;11825:5;11788:43;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;11788:43:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;11788:43:0;11777:55;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;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;;;11777: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;;11741:91:0;;;;11851:7;:57;;;;;11878:1;11863:4;:11;:16;:44;;;;11894:4;11883:24;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11883:24:0;;;;;;;;;;;;;;;;11863:44;11851:57;11843:96;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11660:287;;;;;:::o;4714:142::-;4766:6;4798:1;4793;:6;:30;;;;4822:1;4817;4812;4808;:5;4804:9;;;4803:15;;;;;;:20;4793:30;4785:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4714:142;;;;:::o;4577:129::-;4629:6;4671:1;4665;4661;:5;4657:9;;;4656:16;;4648:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4577:129;;;;:::o;12776:860::-;12908:2;12888:23;;:8;:23;;:50;;;;;12935:2;12915:23;;:8;:23;;12888:50;12880:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12973:21;13022:5;13004:15;:23;;;;;;12973:55;;13039:18;13077;;;;;;;;;;;13060:14;:35;13039:56;;13147:1;13133:11;:15;;;:33;;;;;13165:1;13152:9;:14;;;;13133:33;:51;;;;;13183:1;13170:9;:14;;;;13133:51;13129:336;;;13339:11;13286:64;;13291:44;13325:9;13291:27;13308:9;13291:16;:27::i;:::-;:33;;;;:44;;;;:::i;:::-;13286:50;;:64;13262:20;;:88;;;;;;;;;;;13442:11;13389:64;;13394:44;13428:9;13394:27;13411:9;13394:16;:27::i;:::-;:33;;;;:44;;;;:::i;:::-;13389:50;;:64;13365:20;;:88;;;;;;;;;;;13129:336;13494:8;13475;;:28;;;;;;;;;;;;;;;;;;13533:8;13514;;:28;;;;;;;;;;;;;;;;;;13574:14;13553:18;;:35;;;;;;;;;;;;;;;;;;13604:24;13609:8;;;;;;;;;;;13619;;;;;;;;;;;13604:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12776:860;;;;;;:::o;6586:169::-;6695:5;6667:9;:16;6677:5;6667:16;;;;;;;;;;;;;;;:25;6684:7;6667:25;;;;;;;;;;;;;;;:33;;;;6732:7;6716:31;;6725:5;6716:31;;;6741:5;6716:31;;;;;;;;;;;;;;;;;;6586:169;;;:::o;6763:220::-;6857:26;6877:5;6857:9;:15;6867:4;6857:15;;;;;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;6839:9;:15;6849:4;6839:15;;;;;;;;;;;;;;;:44;;;;6910:24;6928:5;6910:9;:13;6920:2;6910:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;6894:9;:13;6904:2;6894:13;;;;;;;;;;;;;;;:40;;;;6965:2;6950:25;;6959:4;6950:25;;;6969:5;6950:25;;;;;;;;;;;;;;;;;;6763:220;;;:::o;13726:837::-;13799:10;13822:13;13856:7;;;;;;;;;;;13838:32;;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13838:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13838:34:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;13838:34:0;;;;;;;;;;;;;;;;13822:50;;13908:1;13891:19;;:5;:19;;;;13883:27;;13921:11;13935:5;;13921:19;;13970:5;13966:590;;;14006:1;13996:6;:11;13992:494;;14028:10;14041:41;14051:30;14071:9;14051:30;;14056:9;14051:15;;:19;;:30;;;;:::i;:::-;14041:9;:41::i;:::-;14028:54;;14101:14;14118:17;14128:6;14118:9;:17::i;:::-;14101:34;;14166:9;14158:5;:17;14154:317;;;14200:14;14217:37;14233:20;14243:9;14233:5;:9;;:20;;;;:::i;:::-;14217:11;;:15;;:37;;;;:::i;:::-;14200:54;;14277:16;14296:27;14313:9;14296:12;14306:1;14296:5;:9;;:12;;;;:::i;:::-;:16;;:27;;;;:::i;:::-;14277:46;;14346:14;14375:11;14363:9;:23;;;;;;14346:40;;14425:1;14413:9;:13;14409:42;;;14428:23;14434:5;14441:9;14428:5;:23::i;:::-;14409:42;14154:317;;;;13992:494;;;13966:590;;;14517:1;14507:6;:11;14503:53;;14543:1;14535:5;:9;;;;14503:53;13966:590;13726:837;;;;;;:::o;8570:303::-;8615:6;8642:1;8638;:5;8634:232;;;8664:1;8660:5;;8680:6;8697:1;8693;8689;:5;;;;;;:9;8680:18;;8713:92;8724:1;8720;:5;8713:92;;;8750:1;8746:5;;8788:1;8783;8779;8775;:5;;;;;;:9;8774:15;;;;;;8770:19;;8713:92;;;8634:232;;;;8831:1;8826;:6;8822:44;;8853:1;8849:5;;8822:44;8634:232;8570:303;;;:::o;6160:201::-;6233:22;6249:5;6233:11;;:15;;:22;;;;:::i;:::-;6219:11;:36;;;;6282:24;6300:5;6282:9;:13;6292:2;6282:13;;;;;;;;;;;;;;;;:17;;:24;;;;:::i;:::-;6266:9;:13;6276:2;6266:13;;;;;;;;;;;;;;;:40;;;;6343:2;6322:31;;6339:1;6322:31;;;6347:5;6322:31;;;;;;;;;;;;;;;;;;6160:201;;:::o;8356:96::-;8408:6;8435:1;8431;:5;:13;;8443:1;8431:13;;;8439:1;8431:13;8427:17;;8356:96;;;;:::o;6369:209::-;6448:26;6468:5;6448:9;:15;6458:4;6448:15;;;;;;;;;;;;;;;;:19;;:26;;;;:::i;:::-;6430:9;:15;6440:4;6430:15;;;;;;;;;;;;;;;:44;;;;6499:22;6515:5;6499:11;;:15;;:22;;;;:::i;:::-;6485:11;:36;;;;6560:1;6537:33;;6546:4;6537:33;;;6564:5;6537:33;;;;;;;;;;;;;;;;;;6369:209;;:::o;9142:120::-;9192:9;9087:6;9226:1;9218:10;;:17;9214:21;;9142:120;;;:::o;9333:108::-;9393:9;9431:1;9423:10;;9419:14;;:1;:14;;;;;;;;9415:18;;9333:108;;;;:::o;4441:128::-;4493:6;4535:1;4529;4525;:5;4521:9;;;4520:16;;4512:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4441:128;;;;:::o

Swarm Source

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