Contract 0xc8c0206e79f9ee85884d7c470578fb45e2f146e8

Contract Overview

Balance:
0.001250752257854819 BNB

Token:
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x857b45f372c0894f5f134123c77f1ada0a5bc62183a9ab646e123307d471ebfaRestake103797832021-07-07 8:55:5574 days 7 hrs ago0x919a28e79d6b79ac1bd3a5ce417a77aaaa15d769 IN  0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB0.0004474
0xd115e58ba4c646464e97b92358d5f410dcd4dfbfa3f8b4e0a4f039401c0554b9Transfer103725882021-07-07 2:56:1074 days 13 hrs ago0x7132f4b7f9e6c6721e1bcad02f06d96c410f771a IN  0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB0.00198336
0xac29dfdb4d599a1de6a11c580122f98459b4c686f1dc351c2f4dfc6bb03b6468Approve103716862021-07-07 2:08:1674 days 14 hrs ago0x7132f4b7f9e6c6721e1bcad02f06d96c410f771a IN  0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB0.00044548
0xaab891fb7aeca9283b5ca5203d2633fefce905142aee346113d818f7c0b2658dUpdate Buy Limit103716302021-07-07 2:04:0974 days 14 hrs ago0x905de3f6bf620fb7dd8fc15deb394cba0cd774d7 IN  0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB0.00014204
0x1b7482a4476d5e6e75513f9bb6a91fe6ccc7c57b4b9aae058ea1fa1cbd90821cTransfer103222192021-07-05 7:27:4276 days 9 hrs ago0x905de3f6bf620fb7dd8fc15deb394cba0cd774d7 IN  0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB0.00142537
0x67f7630bc673aa35855158b56b5c8f522f597775919dfcd92542fd6251fe37d0Approve102745192021-07-03 15:42:4278 days 58 mins ago0x919a28e79d6b79ac1bd3a5ce417a77aaaa15d769 IN  0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB0.00044548
0xb804c4b5f11c2411c29065afcfbc8dea4432c1c2fae348a7d025095eaeee1ce2Approve102744422021-07-03 15:38:5178 days 1 hr ago0x905de3f6bf620fb7dd8fc15deb394cba0cd774d7 IN  0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB0.00025348
0xd3a0ca21952f00d24fa432be912ec4a8ce3c85648bc2d46f05d133290f6882e8Approve102744292021-07-03 15:38:1278 days 1 hr ago0x905de3f6bf620fb7dd8fc15deb394cba0cd774d7 IN  0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB0.00044548
0x8e94a04b5b3af474c69be4efb9ac9095448b3d350dc038b5b51d048a4a19f0300x60e06040102743822021-07-03 15:35:5178 days 1 hr ago0x905de3f6bf620fb7dd8fc15deb394cba0cd774d7 IN  Contract Creation0 BNB0.05925047
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0xc4678972aaece78556c503ba811a6d630cdbe3b9a186802b132268af223f41c1103718032021-07-07 2:16:4974 days 14 hrs ago 0xc8c0206e79f9ee85884d7c470578fb45e2f146e8 0xcf024d325de6afbafffbe2d3ac7658513f5316f00.001250752257854817 BNB
0xc4678972aaece78556c503ba811a6d630cdbe3b9a186802b132268af223f41c1103718032021-07-07 2:16:4974 days 14 hrs ago 0xcf024d325de6afbafffbe2d3ac7658513f5316f0 0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB
0xc4678972aaece78556c503ba811a6d630cdbe3b9a186802b132268af223f41c1103718032021-07-07 2:16:4974 days 14 hrs ago 0x9ac64cc6e4415144c455bd8e4837fea55603e5c3 0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB
0x5cbd9224189233633a9eed94be0fac1655ebdc6db91206f55bb9606af83224ca103717002021-07-07 2:09:1074 days 14 hrs ago 0xcf024d325de6afbafffbe2d3ac7658513f5316f0 0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB
0x5cbd9224189233633a9eed94be0fac1655ebdc6db91206f55bb9606af83224ca103717002021-07-07 2:09:1074 days 14 hrs ago 0xc8c0206e79f9ee85884d7c470578fb45e2f146e80x7132f4b7f9e6c6721e1bcad02f06d96c410f771a0.000751856152620035 BNB
0x5cbd9224189233633a9eed94be0fac1655ebdc6db91206f55bb9606af83224ca103717002021-07-07 2:09:1074 days 14 hrs ago 0xc8c0206e79f9ee85884d7c470578fb45e2f146e80x905de3f6bf620fb7dd8fc15deb394cba0cd774d70.000219476766599516 BNB
0x5cbd9224189233633a9eed94be0fac1655ebdc6db91206f55bb9606af83224ca103717002021-07-07 2:09:1074 days 14 hrs ago 0x9ac64cc6e4415144c455bd8e4837fea55603e5c3 0xc8c0206e79f9ee85884d7c470578fb45e2f146e80.001097383832997584 BNB
0x5cbd9224189233633a9eed94be0fac1655ebdc6db91206f55bb9606af83224ca103717002021-07-07 2:09:1074 days 14 hrs ago 0xcf024d325de6afbafffbe2d3ac7658513f5316f0 0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB
0x5cbd9224189233633a9eed94be0fac1655ebdc6db91206f55bb9606af83224ca103717002021-07-07 2:09:1074 days 14 hrs ago 0x9ac64cc6e4415144c455bd8e4837fea55603e5c3 0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB
0x5cbd9224189233633a9eed94be0fac1655ebdc6db91206f55bb9606af83224ca103717002021-07-07 2:09:1074 days 14 hrs ago 0x9ac64cc6e4415144c455bd8e4837fea55603e5c3 0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB
0x5cbd9224189233633a9eed94be0fac1655ebdc6db91206f55bb9606af83224ca103717002021-07-07 2:09:1074 days 14 hrs ago 0xc8c0206e79f9ee85884d7c470578fb45e2f146e8 0x9ac64cc6e4415144c455bd8e4837fea55603e5c30 BNB
0x5cbd9224189233633a9eed94be0fac1655ebdc6db91206f55bb9606af83224ca103717002021-07-07 2:09:1074 days 14 hrs ago 0xc8c0206e79f9ee85884d7c470578fb45e2f146e8 0x9ac64cc6e4415144c455bd8e4837fea55603e5c30 BNB
0x5cbd9224189233633a9eed94be0fac1655ebdc6db91206f55bb9606af83224ca103717002021-07-07 2:09:1074 days 14 hrs ago 0x9ac64cc6e4415144c455bd8e4837fea55603e5c3 0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB
0x2b545e457ebef2af18c2a3878cd80d7202849e0c9047689420dde3863d3c0388103215222021-07-05 6:52:5176 days 9 hrs ago 0xcf024d325de6afbafffbe2d3ac7658513f5316f0 0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB
0x2b545e457ebef2af18c2a3878cd80d7202849e0c9047689420dde3863d3c0388103215222021-07-05 6:52:5176 days 9 hrs ago 0x9ac64cc6e4415144c455bd8e4837fea55603e5c3 0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB
0x5ec7c83b2c9d2f7b7117b5e3bdfb8272bb1cedc4469f72c3e32bc08c2f811cc5102745272021-07-03 15:43:0678 days 57 mins ago 0xcf024d325de6afbafffbe2d3ac7658513f5316f0 0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB
0x5ec7c83b2c9d2f7b7117b5e3bdfb8272bb1cedc4469f72c3e32bc08c2f811cc5102745272021-07-03 15:43:0678 days 57 mins ago 0x9ac64cc6e4415144c455bd8e4837fea55603e5c3 0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB
0x5ec7c83b2c9d2f7b7117b5e3bdfb8272bb1cedc4469f72c3e32bc08c2f811cc5102745272021-07-03 15:43:0678 days 57 mins ago 0xc8c0206e79f9ee85884d7c470578fb45e2f146e80x919a28e79d6b79ac1bd3a5ce417a77aaaa15d7690.000175182788198178 BNB
0x5ec7c83b2c9d2f7b7117b5e3bdfb8272bb1cedc4469f72c3e32bc08c2f811cc5102745272021-07-03 15:43:0678 days 57 mins ago 0xc8c0206e79f9ee85884d7c470578fb45e2f146e80x905de3f6bf620fb7dd8fc15deb394cba0cd774d70.000324971033068741 BNB
0x5ec7c83b2c9d2f7b7117b5e3bdfb8272bb1cedc4469f72c3e32bc08c2f811cc5102745272021-07-03 15:43:0678 days 57 mins ago 0x9ac64cc6e4415144c455bd8e4837fea55603e5c3 0xc8c0206e79f9ee85884d7c470578fb45e2f146e80.001624855165343705 BNB
0x5ec7c83b2c9d2f7b7117b5e3bdfb8272bb1cedc4469f72c3e32bc08c2f811cc5102745272021-07-03 15:43:0678 days 57 mins ago 0xcf024d325de6afbafffbe2d3ac7658513f5316f0 0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB
0x5ec7c83b2c9d2f7b7117b5e3bdfb8272bb1cedc4469f72c3e32bc08c2f811cc5102745272021-07-03 15:43:0678 days 57 mins ago 0x9ac64cc6e4415144c455bd8e4837fea55603e5c3 0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB
0x5ec7c83b2c9d2f7b7117b5e3bdfb8272bb1cedc4469f72c3e32bc08c2f811cc5102745272021-07-03 15:43:0678 days 57 mins ago 0x9ac64cc6e4415144c455bd8e4837fea55603e5c3 0xc8c0206e79f9ee85884d7c470578fb45e2f146e80 BNB
0x5ec7c83b2c9d2f7b7117b5e3bdfb8272bb1cedc4469f72c3e32bc08c2f811cc5102745272021-07-03 15:43:0678 days 57 mins ago 0xc8c0206e79f9ee85884d7c470578fb45e2f146e8 0x9ac64cc6e4415144c455bd8e4837fea55603e5c30 BNB
0x5ec7c83b2c9d2f7b7117b5e3bdfb8272bb1cedc4469f72c3e32bc08c2f811cc5102745272021-07-03 15:43:0678 days 57 mins ago 0xc8c0206e79f9ee85884d7c470578fb45e2f146e8 0x9ac64cc6e4415144c455bd8e4837fea55603e5c30 BNB
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Lunar

Compiler Version
v0.8.5+commit.a4f2e591

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicensed
pragma solidity ^0.8.4;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * IMPORTANT: Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an {Approval} event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to {approve}. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IUniswapV2Factory {
    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 IUniswapV2Pair {
    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 IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}


interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}


contract InternalToken {
    // This is always expected to be
    // overwritten by a parent contract
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {}
}

contract LiquidityAcquisition is InternalToken {
    IUniswapV2Router02 public immutable uniswapV2Router;
    IUniswapV2Pair public immutable uniswapV2Pair;

    constructor() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3
        );
        IUniswapV2Pair _uniswapV2Pair = IUniswapV2Pair(
            IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
                address(this),
                _uniswapV2Router.WETH()
            )
        );
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;
    }

    event SwapFailure(string reason);

    // Always expected to be overwritten by parent contract
    // since its' implementation is contract-specific
    function _checkSwapViability(address sender) internal virtual {}

    function _isSell(address sender, address recipient) internal view returns (bool) {
        // Transfer to pair from non-router address is a sell swap
        return sender != address(uniswapV2Router) && recipient == address(uniswapV2Pair);
    }

    function _isBuy(address sender) internal view returns (bool) {
        // Transfer from pair is a buy swap
        return sender == address(uniswapV2Pair);
    }

    function swapTokensForBnb(uint256 tokenAmount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        try
            uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                tokenAmount,
                0,
                path,
                address(this),
                block.timestamp
            )
        {} catch Error(string memory reason) {
            emit SwapFailure(reason);
        }
    }

    function addLiquidity(uint256 tokenAmount, uint256 bnbAmount) internal {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        try
            uniswapV2Router.addLiquidityETH{value: bnbAmount}(
                address(this),
                tokenAmount,
                0,
                0,
                address(this),
                block.timestamp
            )
        {} catch Error(string memory reason) {
            emit SwapFailure(reason);
        }
    }
}
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _setOwner(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

contract ReflectiveERC20 is IERC20, Context, Ownable, LiquidityAcquisition {
    mapping(address => uint256) internal _rOwned;
    mapping(address => uint256) internal _tOwned;
    mapping(address => mapping(address => uint256)) internal _allowances;

    mapping(address => bool) internal _isExcludedFromFee;

    string internal _name;
    string internal _symbol;
    uint8 internal _decimals;

    uint256 private constant MAX = ~uint256(0);
    uint256 internal _tTotal;
    uint256 internal _rTotal;
    uint256 internal _tFeeTotal;

    uint8 public reflectionFee;
    uint8 public swapFee;

    constructor(
        string memory name_,
        string memory symbol_,
        uint256 totalSupply_,
        uint8 decimals_,
        uint8 reflectionFee_,
        uint8 swapFee_
    ) {
        _name = name_;
        _symbol = symbol_;
        _decimals = decimals_;
        _tTotal = totalSupply_ * 10**_decimals;
        _rTotal = (MAX - (MAX % _tTotal));

        // Reflective fee defaults
        _isExcludedFromFee[_msgSender()] = true;
        _isExcludedFromFee[address(this)] = true;
        reflectionFee = reflectionFee_;
        swapFee = swapFee_;

        _rOwned[_msgSender()] = _rTotal;

        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    /**
     * Base ERC20 Functions
     */

    function name() public view returns (string memory) {
        return _name;
    }

    function symbol() public view returns (string memory) {
        return _symbol;
    }

    function decimals() public view returns (uint8) {
        return _decimals;
    }

    function totalSupply() public view override returns (uint256) {
        return _tTotal;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return tokenFromReflection(_rOwned[account]);
    }

    function transfer(address recipient, uint256 amount) public override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    function allowance(address owner, address spender)
        public
        view
        override
        returns (uint256)
    {
        return _allowances[owner][spender];
    }

    function approve(address spender, uint256 amount) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

    /**
     * ERC20 Helpers
     */

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual override {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    // Always expected to be overwritten by parent contract
    // since its' implementation is contract-specific
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {}

    /**
     * Base Reflection Functions
     */

    function isExcludedFromFee(address account) public view returns (bool) {
        return _isExcludedFromFee[account];
    }

    function totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function tokenFromReflection(uint256 rAmount) public view returns (uint256) {
        require(rAmount <= _rTotal, "Amount must be less than total reflections");
        return rAmount / _getRate();
    }

    function reflectionFromToken(uint256 tAmount) public view returns (uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        return tAmount * _getRate();
    }

    /**
     * Reflection Helpers
     */

    function _getValues(uint256 tAmount, bool takeFee)
        internal
        view
        returns (
            uint256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        uint256 currentRate = _getRate();
        uint256 tFee = 0;
        uint256 tSwap = 0;

        if (takeFee) {
            tFee = (tAmount * reflectionFee) / 100;
            tSwap = (tAmount * swapFee) / 100;
        }

        uint256 tTransferAmount = tAmount - tFee - tSwap;

        uint256 rAmount = tAmount * currentRate;
        uint256 rFee = tFee * currentRate;
        uint256 rSwap = tSwap * currentRate;
        uint256 rTransferAmount = rAmount - rFee - rSwap;

        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tSwap);
    }

    function _getRate() internal view virtual returns (uint256) {
        return _rTotal / _tTotal;
    }

    function excludeFromFee(address account) public onlyOwner {
        _isExcludedFromFee[account] = true;
    }

    function includeInFee(address account) public onlyOwner {
        require(account != address(this), "Contract can't be included");
        _isExcludedFromFee[account] = false;
    }

    function _reflectFee(uint256 rFee, uint256 tFee) internal {
        _rTotal -= rFee;
        _tFeeTotal += tFee;
    }

    function _takeSwapFee(uint256 tSwapFee) internal virtual {
        uint256 currentRate = _getRate();
        uint256 rSwapFee = tSwapFee * currentRate;
        _rOwned[address(this)] += rSwapFee;
    }
}


contract ReflectiveToken is ReflectiveERC20 {
    constructor(
        string memory name_,
        string memory symbol_,
        uint256 totalSupply_,
        uint8 decimals_,
        uint8 reflectionFee_,
        uint8 swapFee_
    )
        ReflectiveERC20(name_, symbol_, totalSupply_, decimals_, reflectionFee_, swapFee_)
    {}

    receive() external payable {}

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual override {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");

        bool takeFee = true;

        if (_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) {
            takeFee = false;
        } else {
            _checkSwapViability(sender);
        }

        uint256 transferAmount = _tokenTransfer(sender, recipient, amount, takeFee);

        emit Transfer(sender, recipient, transferAmount);
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) internal virtual returns (uint256) {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tSwapFee
        ) = _getValues(amount, takeFee);

        _rOwned[sender] -= rAmount;
        _rOwned[recipient] += rTransferAmount;

        _takeSwapFee(tSwapFee);
        _reflectFee(rFee, tFee);

        return tTransferAmount;
    }
}


library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;
        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping(bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            if (lastIndex != toDeleteIndex) {
                bytes32 lastvalue = set._values[lastIndex];

                // Move the last value to the index where the value to delete is
                set._values[toDeleteIndex] = lastvalue;
                // Update the index for the moved value
                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex
            }

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        return set._values[index];
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }
}

contract Lunar is ReflectiveToken {
    using EnumerableSet for EnumerableSet.AddressSet;

    mapping(address => uint256) public stakeValue;
    mapping(address => uint256) public stakerPayouts;
    mapping(address => uint256) public bnbWithdrawn;

    uint256 public profitPerShare;
    uint256 public pendingShares;

    uint256 public totalDistributions;
    uint256 public totalReflected;
    uint256 public totalWithdrawn;
    uint256 public totalStaked;

    uint256 public buyLimit;
    uint256 public sellLimit;

    uint256 private immutable numTokensSellToAddToLiquidity;
    uint256 private constant DISTRIBUTION_MULTIPLIER = 2**64;

    EnumerableSet.AddressSet private _stakingExcluded;
    mapping(address => bool) private _isBlacklisted;

    event OnWithdraw(address sender, uint256 amount);
    event OnDistribute(uint256 tokenAmount, uint256 bnbReceived);
    event OnStakingInclude(address account);
    event OnStakingExclude(address account);
    event OnWithdrawIsolatedBNB(uint256 amount);
    event OnBlacklist(address account);

    constructor() ReflectiveToken("Lunar2", "LUNAR2", 10**10, 9, 2, 8) {
        _tOwned[_msgSender()] = _tTotal;

        // 0.03% of total supply
        numTokensSellToAddToLiquidity = (30000 * _tTotal) / 10**8;

        // 0.1% of total supply on both buy/sell initially
        buyLimit = (1000 * _tTotal) / 10**6;
        sellLimit = (1000 * _tTotal) / 10**6;

        _stakingExcluded.add(address(this));
        _stakingExcluded.add(_msgSender());

        emit OnStakingExclude(address(this));
        emit OnStakingExclude(_msgSender());
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        if (_stakingExcluded.contains(account)) return _tOwned[account];
        return tokenFromReflection(_rOwned[account]);
    }

    function _takeSwapFee(uint256 tSwapFee) internal override {
        uint256 currentRate = _getRate();
        uint256 rSwapFee = tSwapFee * currentRate;

        if (_stakingExcluded.contains(address(this))) _tOwned[address(this)] += tSwapFee;
        else _rOwned[address(this)] += rSwapFee;
    }

    function _getRate() internal view override returns (uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;

        // Increases gas cost noticeably but will never be problematic:
        // `_stakingExcluded` is controlled and always small (<10 in practice)
        for (uint256 i = 0; i < _stakingExcluded.length(); i++) {
            address account = _stakingExcluded.at(i);
            if (_rOwned[account] > rSupply || _tOwned[account] > tSupply)
                return _rTotal / _tTotal;
            rSupply -= _rOwned[account];
            tSupply -= _tOwned[account];
        }

        if (rSupply < (_rTotal / _tTotal)) return _rTotal / _tTotal;
        return rSupply / tSupply;
    }

    function _validateTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) private view {
        // Excluded addresses don't have limits
        //do noting
        return;
        if (takeFee) {
            if (_isBuy(sender) && buyLimit != 0) {
                require(amount <= buyLimit, "Buy amount exceeds limit");
            } else if (_isSell(sender, recipient) && sellLimit != 0) {
                require(amount <= sellLimit, "Sell amount exceeds limit");
            }
        }
    }

    function _tokenTransfer(
        address sender,
        address recipient,
        uint256 amount,
        bool takeFee
    ) internal virtual override returns (uint256) {
        require(sender != recipient, "Sending to yourself is disallowed");
        require(
            !_isBlacklisted[sender] && !_isBlacklisted[recipient],
            "Blacklisted account"
        );
        _validateTransfer(sender, recipient, amount, takeFee);

        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee,
            uint256 tSwapFee
        ) = _getValues(amount, takeFee);

        uint256 senderDividends;

        if (_stakingExcluded.contains(sender)) _tOwned[sender] -= amount;
        else {
            senderDividends = dividendsOf(sender);
            totalStaked -= stakeValue[sender];
            _rOwned[sender] -= rAmount;
        }

        if (_stakingExcluded.contains(recipient)) _tOwned[recipient] += tTransferAmount;
        else _rOwned[recipient] += rTransferAmount;

        _takeSwapFee(tSwapFee);
        _reflectFee(rFee, tFee);
        _restake(sender, recipient, tTransferAmount, senderDividends);
        totalReflected += tFee;

        return tTransferAmount;
    }

    function _restake(
        address sender,
        address recipient,
        uint256 transferAmount,
        uint256 senderDividends
    ) private {
        bool senderExcluded = _stakingExcluded.contains(sender);
        bool recipientExcluded = _stakingExcluded.contains(recipient);

        if (!recipientExcluded) {
            uint256 payout = transferAmount * profitPerShare;
            stakerPayouts[recipient] += payout;
            stakeValue[recipient] += transferAmount;
            totalStaked += transferAmount;
        }

        // Before the initial distribution, `profitPerShare` will be stuck at 0
        // this line only protects against reverts from users
        // whom hold a balance before the initial distribution.
        if (!senderExcluded) {
            // Direct lookup over `balanceOf` to save on gas cost
            uint256 senderBalance = tokenFromReflection(_rOwned[sender]);
            stakerPayouts[sender] = senderBalance * profitPerShare;
            stakeValue[sender] = senderBalance;

            totalStaked += senderBalance;

            if (senderDividends > 0) {
                _withdraw(sender, senderDividends);
            }
        }
    }

    function _withdraw(address account, uint256 amount) private {
        payable(account).transfer(amount);
        bnbWithdrawn[account] += amount;
        totalWithdrawn += amount;

        emit OnWithdraw(account, amount);
    }

    function _checkSwapViability(address sender) internal virtual override {
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity;

        if (overMinTokenBalance && sender != address(uniswapV2Pair)) {
            swapAndDistribute(contractTokenBalance);
        }
    }

    function swapAndDistribute(uint256 contractTokenBalance) private {
        uint256 initialBalance = address(this).balance;
        swapTokensForBnb(contractTokenBalance);
        uint256 swappedAmount = address(this).balance - initialBalance;

        // Forward 20% to dev wallet
        uint256 devSplit = (swappedAmount * 20) / 100;
        uint256 amount = swappedAmount - devSplit;

        payable(owner()).transfer(devSplit);

        totalDistributions += amount;

        if (totalStaked > 0) {
            if (pendingShares > 0) {
                amount += pendingShares;
                pendingShares = 0;
            }
            profitPerShare += ((amount * DISTRIBUTION_MULTIPLIER) / totalStaked);
        } else {
            pendingShares += amount;
        }

        emit OnDistribute(contractTokenBalance, amount);
    }

    function dividendsOf(address staker) public view returns (uint256) {
        // Using `stakeValue` over actual balance because reflection shares cannot be calculated
        uint256 divPayout = stakeValue[staker] * profitPerShare;
        if (divPayout < stakerPayouts[staker]) return 0;

        return (divPayout - stakerPayouts[staker]) / DISTRIBUTION_MULTIPLIER;
    }

    // reflective earnings since last collection or transfer
    function reflectionEarnings() external view returns (uint256) {
        uint256 staked = stakeValue[_msgSender()];
        uint256 balance = balanceOf(_msgSender());

        return balance - staked;
    }

    function restake() external {
        uint256 staked = stakeValue[_msgSender()];
        uint256 balance = balanceOf(_msgSender());
        uint256 earnings = balance - staked;

        stakeValue[_msgSender()] += earnings;
        stakerPayouts[_msgSender()] += earnings * profitPerShare;
        totalStaked += earnings;
    }

    function withdraw() external payable {
        uint256 share = dividendsOf(_msgSender());

        // Resetting dividends back to 0
        stakerPayouts[_msgSender()] = stakeValue[_msgSender()] * profitPerShare;

        _withdraw(_msgSender(), share);
    }

    function includeInStaking(address account) external onlyOwner {
        require(_stakingExcluded.contains(account), "Account already included");
        uint256 balance = _tOwned[account];

        _tOwned[account] = 0;
        _rOwned[account] = reflectionFromToken(balance);
        totalStaked += balance;
        stakeValue[account] = balance;
        stakerPayouts[account] = balance * profitPerShare;

        _stakingExcluded.remove(account);

        emit OnStakingInclude(account);
    }

    function excludeFromStaking(address account) external onlyOwner {
        require(!_stakingExcluded.contains(account), "Account already excluded");
        uint256 balance = tokenFromReflection(_rOwned[account]);

        uint256 dividends = dividendsOf(account);
        if (dividends > 0) _withdraw(account, dividends);

        _tOwned[account] = balance;
        totalStaked -= stakeValue[account];
        stakeValue[account] = 0;
        stakerPayouts[account] = 0;

        _stakingExcluded.add(account);

        emit OnStakingExclude(account);
    }

    function withdrawIsolatedBnb() external onlyOwner {
        uint256 pendingBnb = totalDistributions - totalWithdrawn;
        uint256 isolatedBnb = address(this).balance - pendingBnb;

        if (isolatedBnb > 0) {
            payable(_msgSender()).transfer(isolatedBnb);

            emit OnWithdrawIsolatedBNB(isolatedBnb);
        }
    }

    function updateBuyLimit(uint256 limit) external onlyOwner {
        // Buy limit can only be 0.1% or disabled, set to 0 to disable
        uint256 maxLimit = (1000 * _tTotal) / 10**6;
        require(limit == maxLimit || limit == 0, "Buy limit out of bounds");

        buyLimit = limit;
    }

    function updateSellLimit(uint256 limit) external onlyOwner {
        // Min sell limit is 0.1%, max is 0.5%. Set to 0 to disable
        uint256 minLimit = (1000 * _tTotal) / 10**6;
        uint256 maxLimit = (5000 * _tTotal) / 10**6;

        require(
            (limit <= maxLimit && limit >= minLimit) || limit == 0,
            "Sell limit out of bounds"
        );

        sellLimit = limit;
    }

    function addToBlacklist(address account) external onlyOwner {
        _isBlacklisted[account] = true;

        emit OnBlacklist(account);
    }

    function removeFromBlacklist(address account) external onlyOwner {
        _isBlacklisted[account] = false;
    }
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"OnBlacklist","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"bnbReceived","type":"uint256"}],"name":"OnDistribute","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"OnStakingExclude","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"OnStakingInclude","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"OnWithdraw","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"OnWithdrawIsolatedBNB","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"reason","type":"string"}],"name":"SwapFailure","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addToBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bnbWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"staker","type":"address"}],"name":"dividendsOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInStaking","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"profitPerShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reflectionFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restake","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakeValue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"stakerPayouts","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapFee","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDistributions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalStaked","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalWithdrawn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"updateBuyLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"updateSellLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawIsolatedBnb","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040523480156200001157600080fd5b5060405180604001604052806006815260200165263ab730b91960d11b81525060405180604001604052806006815260200165262aa720a91960d11b8152506402540be4006009600260088585858585856200007c620000766200049360201b60201c565b62000497565b6000739ac64cc6e4415144c455bd8e4837fea55603e5c390506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620000d157600080fd5b505afa158015620000e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010c9190620005ff565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200015557600080fd5b505afa1580156200016a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001909190620005ff565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620001d957600080fd5b505af1158015620001ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002149190620005ff565b6001600160601b0319606093841b8116608052921b90911660a0525085516200024590600590602089019062000559565b5084516200025b90600690602088019062000559565b506007805460ff191660ff85169081179091556200027b90600a62000691565b62000287908562000750565b60088190556200029a90600019620007c9565b620002a89060001962000772565b6009908155336000818152600460205260408082208054600160ff19918216811790925530845291832080549092168117909155600b805460ff8781166101000261ffff1990921690891617179055925492916001600160a01b03168152602081019190915260400160002055336001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6008546040516200035e91815260200190565b60405180910390a350505050505050505050505060085460026000620003896200049360201b60201c565b6001600160a01b031681526020810191909152604001600020556008546305f5e10090620003ba9061753062000750565b620003c6919062000631565b60c052600854620f424090620003df906103e862000750565b620003eb919062000631565b601555600854620f42409062000404906103e862000750565b62000410919062000631565b6016556200042c601730620004e7602090811b6200141b17901c565b5062000448336017620004e760201b6200141b1790919060201c565b50604051308152600080516020620030ee8339815191529060200160405180910390a1604080513381529051600080516020620030ee8339815191529181900360200190a16200080c565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000620004fe836001600160a01b03841662000507565b90505b92915050565b6000818152600183016020526040812054620005505750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000501565b50600062000501565b82805462000567906200078c565b90600052602060002090601f0160209004810192826200058b5760008555620005d6565b82601f10620005a657805160ff1916838001178555620005d6565b82800160010185558215620005d6579182015b82811115620005d6578251825591602001919060010190620005b9565b50620005e4929150620005e8565b5090565b5b80821115620005e45760008155600101620005e9565b6000602082840312156200061257600080fd5b81516001600160a01b03811681146200062a57600080fd5b9392505050565b600082620006435762000643620007f6565b500490565b600181815b80851115620006895781600019048211156200066d576200066d620007e0565b808516156200067b57918102915b93841c93908002906200064d565b509250929050565b6000620004fe60ff841683600082620006ad5750600162000501565b81620006bc5750600062000501565b8160018114620006d55760028114620006e05762000700565b600191505062000501565b60ff841115620006f457620006f4620007e0565b50506001821b62000501565b5060208310610133831016604e8410600b841016171562000725575081810a62000501565b62000731838362000648565b8060001904821115620007485762000748620007e0565b029392505050565b60008160001904831182151516156200076d576200076d620007e0565b500290565b600082821015620007875762000787620007e0565b500390565b600181811c90821680620007a157607f821691505b60208210811415620007c357634e487b7160e01b600052602260045260246000fd5b50919050565b600082620007db57620007db620007f6565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b60805160601c60a05160601c60c0516128906200085e6000396000611a080152600081816104e10152611a3501526000818161039a015281816122940152818161235c015261239801526128906000f3fe6080604052600436106102695760003560e01c80634f91e48c116101445780638da5cb5b116100b6578063d7a88e3c1161007a578063d7a88e3c1461070a578063dd62ed3e14610737578063e9c6e8a01461077d578063ea2f0b371461079d578063f2fde38b146107bd578063fc8690a2146107dd57600080fd5b80638da5cb5b1461068257806395d89b41146106a0578063a2a5802a146106b5578063a9059cbb146106d5578063bbf68b35146106f557600080fd5b806370a082311161010857806370a08231146105f2578063715018a61461061257806371f559e114610627578063817b1cd21461063c57806383ad7994146106525780638650e92a1461066c57600080fd5b80634f91e48c1461054e5780635342acb414610564578063537df3b61461059d57806354cf2aeb146105bd578063589210d9146105dc57600080fd5b80632d838119116101dd57806344337ea1116101a157806344337ea11461048f57806348618154146104af57806349bd5a5e146104cf5780634b319713146105035780634d1b2f9e146105195780634f91440d1461053957600080fd5b80632d83811914610409578063313ce567146104295780633732e2141461044f5780633ccfd60b14610465578063437823ec1461046f57600080fd5b806313114a9d1161022f57806313114a9d1461033d5780631392c08614610352578063163db71b146103725780631694505e1461038857806318160ddd146103d457806323b872dd146103e957600080fd5b806265318b14610275578062cefbff146102a857806306fdde03146102d5578063095ea7b3146102f757806310ecd1ac1461032757600080fd5b3661027057005b600080fd5b34801561028157600080fd5b50610295610290366004612468565b61080a565b6040519081526020015b60405180910390f35b3480156102b457600080fd5b506102956102c3366004612468565b600e6020526000908152604090205481565b3480156102e157600080fd5b506102ea61089a565b60405161029f9190612561565b34801561030357600080fd5b5061031761031236600461251c565b61092c565b604051901515815260200161029f565b34801561033357600080fd5b5061029560105481565b34801561034957600080fd5b50600a54610295565b34801561035e57600080fd5b5061029561036d366004612548565b610943565b34801561037e57600080fd5b5061029560115481565b34801561039457600080fd5b506103bc7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161029f565b3480156103e057600080fd5b50600854610295565b3480156103f557600080fd5b506103176104043660046124db565b6109ae565b34801561041557600080fd5b50610295610424366004612548565b610a5f565b34801561043557600080fd5b5060075460ff165b60405160ff909116815260200161029f565b34801561045b57600080fd5b5061029560125481565b61046d610ad8565b005b34801561047b57600080fd5b5061046d61048a366004612468565b610b3e565b34801561049b57600080fd5b5061046d6104aa366004612468565b610b8c565b3480156104bb57600080fd5b5061046d6104ca366004612468565b610c10565b3480156104db57600080fd5b506103bc7f000000000000000000000000000000000000000000000000000000000000000081565b34801561050f57600080fd5b5061029560135481565b34801561052557600080fd5b5061046d610534366004612548565b610d85565b34801561054557600080fd5b5061046d610e2f565b34801561055a57600080fd5b5061029560165481565b34801561057057600080fd5b5061031761057f366004612468565b6001600160a01b031660009081526004602052604090205460ff1690565b3480156105a957600080fd5b5061046d6105b8366004612468565b610ecf565b3480156105c957600080fd5b50600b5461043d90610100900460ff1681565b3480156105e857600080fd5b5061029560155481565b3480156105fe57600080fd5b5061029561060d366004612468565b610f1a565b34801561061e57600080fd5b5061046d610f6a565b34801561063357600080fd5b5061046d610fa0565b34801561064857600080fd5b5061029560145481565b34801561065e57600080fd5b50600b5461043d9060ff1681565b34801561067857600080fd5b50610295600f5481565b34801561068e57600080fd5b506000546001600160a01b03166103bc565b3480156106ac57600080fd5b506102ea611059565b3480156106c157600080fd5b5061046d6106d0366004612548565b611068565b3480156106e157600080fd5b506103176106f036600461251c565b611142565b34801561070157600080fd5b5061029561114f565b34801561071657600080fd5b50610295610725366004612468565b600c6020526000908152604090205481565b34801561074357600080fd5b506102956107523660046124a2565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561078957600080fd5b5061046d610798366004612468565b61117f565b3480156107a957600080fd5b5061046d6107b8366004612468565b6112df565b3480156107c957600080fd5b5061046d6107d8366004612468565b611383565b3480156107e957600080fd5b506102956107f8366004612468565b600d6020526000908152604090205481565b600f546001600160a01b0382166000908152600c6020526040812054909182916108349190612696565b6001600160a01b0384166000908152600d60205260409020549091508110156108605750600092915050565b6001600160a01b0383166000908152600d6020526040902054600160401b9061088990836126b5565b6108939190612674565b9392505050565b6060600580546108a9906126cc565b80601f01602080910402602001604051908101604052809291908181526020018280546108d5906126cc565b80156109225780601f106108f757610100808354040283529160200191610922565b820191906000526020600020905b81548152906001019060200180831161090557829003601f168201915b5050505050905090565b6000610939338484611430565b5060015b92915050565b600060085482111561099c5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064015b60405180910390fd5b6109a4611554565b61093d9083612696565b60006109bb84848461166d565b6001600160a01b038416600090815260036020908152604080832033845290915290205482811015610a405760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610993565b610a548533610a4f86856126b5565b611430565b506001949350505050565b6000600954821115610ac65760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610993565b610ace611554565b61093d9083612674565b6000610ae33361080a565b9050600f54600c6000610af33390565b6001600160a01b03166001600160a01b0316815260200190815260200160002054610b1e9190612696565b336000818152600d6020526040902091909155610b3b9082611851565b50565b6000546001600160a01b03163314610b685760405162461bcd60e51b8152600401610993906125b6565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b03163314610bb65760405162461bcd60e51b8152600401610993906125b6565b6001600160a01b038116600081815260196020908152604091829020805460ff1916600117905590519182527f3381359724badc79f08548cf28ae567b93705c5cb9788438221ca0ec5dd916a6910160405180910390a150565b6000546001600160a01b03163314610c3a5760405162461bcd60e51b8152600401610993906125b6565b610c4560178261190d565b15610c925760405162461bcd60e51b815260206004820152601860248201527f4163636f756e7420616c7265616479206578636c7564656400000000000000006044820152606401610993565b6001600160a01b038116600090815260016020526040812054610cb490610a5f565b90506000610cc18361080a565b90508015610cd357610cd38382611851565b6001600160a01b0383166000908152600260209081526040808320859055600c9091528120546014805491929091610d0c9084906126b5565b90915550506001600160a01b0383166000908152600c60209081526040808320839055600d909152812055610d4260178461141b565b506040516001600160a01b03841681527fb48a9f1927613d2f1f104664a63b65b0e865387ead40b64440110b3c0edb44d7906020015b60405180910390a1505050565b6000546001600160a01b03163314610daf5760405162461bcd60e51b8152600401610993906125b6565b6000620f42406008546103e8610dc59190612696565b610dcf9190612674565b905080821480610ddd575081155b610e295760405162461bcd60e51b815260206004820152601760248201527f427579206c696d6974206f7574206f6620626f756e64730000000000000000006044820152606401610993565b50601555565b336000818152600c602052604081205491610e4990610f1a565b90506000610e5783836126b5565b336000908152600c6020526040812080549293508392909190610e7b90849061265c565b9091555050600f54610e8d9082612696565b336000908152600d602052604081208054909190610eac90849061265c565b925050819055508060146000828254610ec5919061265c565b9091555050505050565b6000546001600160a01b03163314610ef95760405162461bcd60e51b8152600401610993906125b6565b6001600160a01b03166000908152601960205260409020805460ff19169055565b6000610f2760178361190d565b15610f4857506001600160a01b031660009081526002602052604090205490565b6001600160a01b03821660009081526001602052604090205461093d90610a5f565b6000546001600160a01b03163314610f945760405162461bcd60e51b8152600401610993906125b6565b610f9e600061192f565b565b6000546001600160a01b03163314610fca5760405162461bcd60e51b8152600401610993906125b6565b6000601354601154610fdc91906126b5565b90506000610fea82476126b5565b9050801561105557604051339082156108fc029083906000818181858888f1935050505015801561101f573d6000803e3d6000fd5b506040518181527f64cb240ae3e3a7665aad95d0a78f5cbc9aab81d050f1e5295d32d523a210fb95906020015b60405180910390a15b5050565b6060600680546108a9906126cc565b6000546001600160a01b031633146110925760405162461bcd60e51b8152600401610993906125b6565b6000620f42406008546103e86110a89190612696565b6110b29190612674565b90506000620f42406008546113886110ca9190612696565b6110d49190612674565b90508083111580156110e65750818310155b806110ef575082155b61113b5760405162461bcd60e51b815260206004820152601860248201527f53656c6c206c696d6974206f7574206f6620626f756e647300000000000000006044820152606401610993565b5050601655565b600061093933848461166d565b336000818152600c60205260408120549091829061116c90610f1a565b905061117882826126b5565b9250505090565b6000546001600160a01b031633146111a95760405162461bcd60e51b8152600401610993906125b6565b6111b460178261190d565b6112005760405162461bcd60e51b815260206004820152601860248201527f4163636f756e7420616c726561647920696e636c7564656400000000000000006044820152606401610993565b6001600160a01b0381166000908152600260205260408120805491905561122681610943565b6001600160a01b0383166000908152600160205260408120919091556014805483929061125490849061265c565b90915550506001600160a01b0382166000908152600c60205260409020819055600f546112819082612696565b6001600160a01b0383166000908152600d60205260409020556112a560178361197f565b506040516001600160a01b03831681527f5db595145b4698bbdb653740e3c5feecd94d988f9ae2a875cdc348eee10258f49060200161104c565b6000546001600160a01b031633146113095760405162461bcd60e51b8152600401610993906125b6565b6001600160a01b0381163014156113625760405162461bcd60e51b815260206004820152601a60248201527f436f6e74726163742063616e277420626520696e636c756465640000000000006044820152606401610993565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146113ad5760405162461bcd60e51b8152600401610993906125b6565b6001600160a01b0381166114125760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610993565b610b3b8161192f565b6000610893836001600160a01b038416611994565b6001600160a01b0383166114925760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610993565b6001600160a01b0382166114f35760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610993565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60095460085460009190825b61156a60176119e3565b81101561163b57600061157e6017836119ed565b6001600160a01b0381166000908152600160205260409020549091508410806115be57506001600160a01b03811660009081526002602052604090205483105b156115dc576008546009546115d39190612674565b94505050505090565b6001600160a01b0381166000908152600160205260409020546115ff90856126b5565b6001600160a01b03821660009081526002602052604090205490945061162590846126b5565b925050808061163390612742565b915050611560565b5060085460095461164c9190612674565b821015611663576008546009546111789190612674565b6111788183612674565b6001600160a01b0383166116d15760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610993565b6001600160a01b0382166117335760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610993565b600081116117955760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610993565b6001600160a01b03831660009081526004602052604090205460019060ff16806117d757506001600160a01b03831660009081526004602052604090205460ff165b156117e4575060006117ed565b6117ed846119f9565b60006117fb85858585611a7d565b9050836001600160a01b0316856001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161184291815260200190565b60405180910390a35050505050565b6040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611887573d6000803e3d6000fd5b506001600160a01b0382166000908152600e6020526040812080548392906118b090849061265c565b9250508190555080601360008282546118c9919061265c565b9091555050604080516001600160a01b0384168152602081018390527fbace9fd79d5ea02ed8b43fa96af07e4e8f859a2f71ff878c748f5c22c5780284910161104c565b6001600160a01b03811660009081526001830160205260408120541515610893565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000610893836001600160a01b038416611d08565b60008181526001830160205260408120546119db5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561093d565b50600061093d565b600061093d825490565b60006108938383611dfb565b6000611a0430610f1a565b90507f000000000000000000000000000000000000000000000000000000000000000081108015908190611a6a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b15611a7857611a7882611e25565b505050565b6000836001600160a01b0316856001600160a01b03161415611aeb5760405162461bcd60e51b815260206004820152602160248201527f53656e64696e6720746f20796f757273656c6620697320646973616c6c6f77656044820152601960fa1b6064820152608401610993565b6001600160a01b03851660009081526019602052604090205460ff16158015611b2d57506001600160a01b03841660009081526019602052604090205460ff16155b611b6f5760405162461bcd60e51b8152602060048201526013602482015272109b1858dadb1a5cdd1959081858d8dbdd5b9d606a1b6044820152606401610993565b600080600080600080611b828989611f7c565b9550955095509550955095506000611ba48c601761190d90919063ffffffff16565b15611bdc576001600160a01b038c16600090815260026020526040812080548c9290611bd19084906126b5565b90915550611c519050565b611be58c61080a565b9050600c60008d6001600160a01b03166001600160a01b031681526020019081526020016000205460146000828254611c1e91906126b5565b90915550506001600160a01b038c1660009081526001602052604081208054899290611c4b9084906126b5565b90915550505b611c5c60178c61190d565b15611c94576001600160a01b038b1660009081526002602052604081208054869290611c8990849061265c565b90915550611cc29050565b6001600160a01b038b1660009081526001602052604081208054889290611cbc90849061265c565b90915550505b611ccb82612058565b611cd585846120cb565b611ce18c8c86846120ff565b8260126000828254611cf3919061265c565b90915550939c9b505050505050505050505050565b60008181526001830160205260408120548015611df1576000611d2c6001836126b5565b8554909150600090611d40906001906126b5565b9050818114611da5576000866000018281548110611d6057611d60612789565b9060005260206000200154905080876000018481548110611d8357611d83612789565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611db657611db6612773565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061093d565b600091505061093d565b6000826000018281548110611e1257611e12612789565b9060005260206000200154905092915050565b47611e2f8261223d565b6000611e3b82476126b5565b905060006064611e4c836014612696565b611e569190612674565b90506000611e6482846126b5565b9050611e786000546001600160a01b031690565b6001600160a01b03166108fc839081150290604051600060405180830381858888f19350505050158015611eb0573d6000803e3d6000fd5b508060116000828254611ec3919061265c565b909155505060145415611f245760105415611eed57601054611ee5908261265c565b600060105590505b601454611efe600160401b83612696565b611f089190612674565b600f6000828254611f19919061265c565b90915550611f3c9050565b8060106000828254611f36919061265c565b90915550505b60408051868152602081018390527fca08746e2daf0715eeec23d67f6125b624d2d9a169aa2ee41e65306faae8345a910160405180910390a15050505050565b6000806000806000806000611f8f611554565b90506000808915611fdf57600b54606490611fad9060ff168d612696565b611fb79190612674565b600b54909250606490611fd290610100900460ff168d612696565b611fdc9190612674565b90505b600081611fec848e6126b5565b611ff691906126b5565b90506000612004858e612696565b905060006120128686612696565b905060006120208786612696565b905060008161202f84866126b5565b61203991906126b5565b939d50929b509099509197509295509093505050509295509295509295565b6000612062611554565b905060006120708284612696565b905061207d60173061190d565b156120ac5730600090815260026020526040812080548592906120a190849061265c565b90915550611a789050565b3060009081526001602052604081208054839290610ec590849061265c565b81600960008282546120dd91906126b5565b9250508190555080600a60008282546120f6919061265c565b90915550505050565b600061210c60178661190d565b9050600061211b60178661190d565b9050806121ac576000600f54856121329190612696565b6001600160a01b0387166000908152600d602052604081208054929350839290919061215f90849061265c565b90915550506001600160a01b0386166000908152600c60205260408120805487929061218c90849061265c565b9250508190555084601460008282546121a5919061265c565b9091555050505b81612235576001600160a01b0386166000908152600160205260408120546121d390610a5f565b9050600f54816121e39190612696565b6001600160a01b0388166000908152600d6020908152604080832093909355600c90529081208290556014805483929061221e90849061265c565b90915550508315612233576122338785611851565b505b505050505050565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061227257612272612789565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156122eb57600080fd5b505afa1580156122ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123239190612485565b8160018151811061233657612336612789565b60200260200101906001600160a01b031690816001600160a01b031681525050612381307f000000000000000000000000000000000000000000000000000000000000000084611430565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906123d69085906000908690309042906004016125eb565b600060405180830381600087803b1580156123f057600080fd5b505af1925050508015612401575060015b6110555761240d61279f565b806308c379a0141561245c57506124226127bb565b8061242d575061245e565b7f3e81642c7e8f95412a9f139fbfd3d1f44c43ad6e2dec4a221816fa6a8fde381b81604051610d789190612561565b505b3d6000803e3d6000fd5b60006020828403121561247a57600080fd5b813561089381612845565b60006020828403121561249757600080fd5b815161089381612845565b600080604083850312156124b557600080fd5b82356124c081612845565b915060208301356124d081612845565b809150509250929050565b6000806000606084860312156124f057600080fd5b83356124fb81612845565b9250602084013561250b81612845565b929592945050506040919091013590565b6000806040838503121561252f57600080fd5b823561253a81612845565b946020939093013593505050565b60006020828403121561255a57600080fd5b5035919050565b600060208083528351808285015260005b8181101561258e57858101830151858201604001528201612572565b818111156125a0576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561263b5784516001600160a01b031683529383019391830191600101612616565b50506001600160a01b03969096166060850152505050608001529392505050565b6000821982111561266f5761266f61275d565b500190565b60008261269157634e487b7160e01b600052601260045260246000fd5b500490565b60008160001904831182151516156126b0576126b061275d565b500290565b6000828210156126c7576126c761275d565b500390565b600181811c908216806126e057607f821691505b6020821081141561270157634e487b7160e01b600052602260045260246000fd5b50919050565b601f8201601f1916810167ffffffffffffffff8111828210171561273b57634e487b7160e01b600052604160045260246000fd5b6040525050565b60006000198214156127565761275661275d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b600060033d11156127b85760046000803e5060005160e01c5b90565b600060443d10156127c95790565b6040516003193d81016004833e81513d67ffffffffffffffff81602484011181841117156127f957505050505090565b82850191508151818111156128115750505050505090565b843d870101602082850101111561282b5750505050505090565b61283a60208286010187612707565b509095945050505050565b6001600160a01b0381168114610b3b57600080fdfea2646970667358221220624e15eadee20bf98ce09e079880fc360398c9e4733b267144de1161a171a59e64736f6c63430008050033b48a9f1927613d2f1f104664a63b65b0e865387ead40b64440110b3c0edb44d7

Deployed ByteCode Sourcemap

31749:11343:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39348:378;;;;;;;;;;-1:-1:-1;39348:378:0;;;;;:::i;:::-;;:::i;:::-;;;10971:25:1;;;10959:2;10944:18;39348:378:0;;;;;;;;31954:47;;;;;;;;;;-1:-1:-1;31954:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;16690:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;17591:161::-;;;;;;;;;;-1:-1:-1;17591:161:0;;;;;:::i;:::-;;:::i;:::-;;;2533:14:1;;2526:22;2508:41;;2496:2;2481:18;17591:161:0;2463:92:1;32046:28:0;;;;;;;;;;;;;;;;19096:87;;;;;;;;;;-1:-1:-1;19165:10:0;;19096:87;;19405:195;;;;;;;;;;-1:-1:-1;19405:195:0;;;;;:::i;:::-;;:::i;32083:33::-;;;;;;;;;;;;;;;;11249:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2045:32:1;;;2027:51;;2015:2;2000:18;11249:51:0;1982:102:1;16967:95:0;;;;;;;;;;-1:-1:-1;17047:7:0;;16967:95;;17760:456;;;;;;;;;;-1:-1:-1;17760:456:0;;;;;:::i;:::-;;:::i;19191:206::-;;;;;;;;;;-1:-1:-1;19191:206:0;;;;;:::i;:::-;;:::i;16876:83::-;;;;;;;;;;-1:-1:-1;16942:9:0;;;;16876:83;;;12417:4:1;12405:17;;;12387:36;;12375:2;12360:18;16876:83:0;12342:87:1;32123:29:0;;;;;;;;;;;;;;;;40358:266;;;:::i;:::-;;20611:111;;;;;;;;;;-1:-1:-1;20611:111:0;;;;;:::i;:::-;;:::i;42819:147::-;;;;;;;;;;-1:-1:-1;42819:147:0;;;;;:::i;:::-;;:::i;41149:573::-;;;;;;;;;;-1:-1:-1;41149:573:0;;;;;:::i;:::-;;:::i;11307:45::-;;;;;;;;;;;;;;;32159:29;;;;;;;;;;;;;;;;42089:299;;;;;;;;;;-1:-1:-1;42089:299:0;;;;;:::i;:::-;;:::i;40014:336::-;;;;;;;;;;;;;:::i;32260:24::-;;;;;;;;;;;;;;;;18964:124;;;;;;;;;;-1:-1:-1;18964:124:0;;;;;:::i;:::-;-1:-1:-1;;;;;19053:27:0;19029:4;19053:27;;;:18;:27;;;;;;;;;18964:124;42974:115;;;;;;;;;;-1:-1:-1;42974:115:0;;;;;:::i;:::-;;:::i;15911:20::-;;;;;;;;;;-1:-1:-1;15911:20:0;;;;;;;;;;;32230:23;;;;;;;;;;;;;;;;33411:220;;;;;;;;;;-1:-1:-1;33411:220:0;;;;;:::i;:::-;;:::i;14689:94::-;;;;;;;;;;;;;:::i;41730:351::-;;;;;;;;;;;;;:::i;32195:26::-;;;;;;;;;;;;;;;;15878;;;;;;;;;;-1:-1:-1;15878:26:0;;;;;;;;32010:29;;;;;;;;;;;;;;;;14038:87;;;;;;;;;;-1:-1:-1;14084:7:0;14111:6;-1:-1:-1;;;;;14111:6:0;14038:87;;16781;;;;;;;;;;;;;:::i;42396:415::-;;;;;;;;;;-1:-1:-1;42396:415:0;;;;;:::i;:::-;;:::i;17224:167::-;;;;;;;;;;-1:-1:-1;17224:167:0;;;;;:::i;:::-;;:::i;39796:210::-;;;;;;;;;;;;;:::i;31847:45::-;;;;;;;;;;-1:-1:-1;31847:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;17399:184;;;;;;;;;;-1:-1:-1;17399:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;17548:18:0;;;17516:7;17548:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17399:184;40632:509;;;;;;;;;;-1:-1:-1;40632:509:0;;;;;:::i;:::-;;:::i;20730:184::-;;;;;;;;;;-1:-1:-1;20730:184:0;;;;;:::i;:::-;;:::i;14938:192::-;;;;;;;;;;-1:-1:-1;14938:192:0;;;;;:::i;:::-;;:::i;31899:48::-;;;;;;;;;;-1:-1:-1;31899:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;39348:378;39565:14;;-1:-1:-1;;;;;39544:18:0;;39406:7;39544:18;;;:10;:18;;;;;;39406:7;;;;39544:35;;39565:14;39544:35;:::i;:::-;-1:-1:-1;;;;;39606:21:0;;;;;;:13;:21;;;;;;39524:55;;-1:-1:-1;39594:33:0;;39590:47;;;-1:-1:-1;39636:1:0;;39348:378;-1:-1:-1;;39348:378:0:o;39590:47::-;-1:-1:-1;;;;;39670:21:0;;;;;;:13;:21;;;;;;-1:-1:-1;;;32406:5:0;39658:33;;:9;:33;:::i;:::-;39657:61;;;;:::i;:::-;39650:68;39348:378;-1:-1:-1;;;39348:378:0:o;16690:83::-;16727:13;16760:5;16753:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16690:83;:::o;17591:161::-;17666:4;17683:39;180:10;17706:7;17715:6;17683:8;:39::i;:::-;-1:-1:-1;17740:4:0;17591:161;;;;;:::o;19405:195::-;19472:7;19511;;19500;:18;;19492:62;;;;-1:-1:-1;;;19492:62:0;;6866:2:1;19492:62:0;;;6848:21:1;6905:2;6885:18;;;6878:30;6944:33;6924:18;;;6917:61;6995:18;;19492:62:0;;;;;;;;;19582:10;:8;:10::i;:::-;19572:20;;:7;:20;:::i;17760:456::-;17900:4;17917:36;17927:6;17935:9;17946:6;17917:9;:36::i;:::-;-1:-1:-1;;;;;17993:19:0;;17966:24;17993:19;;;:11;:19;;;;;;;;180:10;17993:33;;;;;;;;18045:26;;;;18037:79;;;;-1:-1:-1;;;18037:79:0;;7574:2:1;18037:79:0;;;7556:21:1;7613:2;7593:18;;;7586:30;7652:34;7632:18;;;7625:62;-1:-1:-1;;;7703:18:1;;;7696:38;7751:19;;18037:79:0;7546:230:1;18037:79:0;18127:57;18136:6;180:10;18158:25;18177:6;18158:16;:25;:::i;:::-;18127:8;:57::i;:::-;-1:-1:-1;18204:4:0;;17760:456;-1:-1:-1;;;;17760:456:0:o;19191:206::-;19258:7;19297;;19286;:18;;19278:73;;;;-1:-1:-1;;;19278:73:0;;4938:2:1;19278:73:0;;;4920:21:1;4977:2;4957:18;;;4950:30;5016:34;4996:18;;;4989:62;-1:-1:-1;;;5067:18:1;;;5060:40;5117:19;;19278:73:0;4910:232:1;19278:73:0;19379:10;:8;:10::i;:::-;19369:20;;:7;:20;:::i;40358:266::-;40406:13;40422:25;180:10;39348:378;:::i;40422:25::-;40406:41;;40559:14;;40532:10;:24;40543:12;180:10;;100:98;40543:12;-1:-1:-1;;;;;40532:24:0;-1:-1:-1;;;;;40532:24:0;;;;;;;;;;;;;:41;;;;:::i;:::-;180:10;40502:27;;;;:13;:27;;;;;:71;;;;40586:30;;40610:5;40586:9;:30::i;:::-;40395:229;40358:266::o;20611:111::-;14084:7;14111:6;-1:-1:-1;;;;;14111:6:0;180:10;14258:23;14250:68;;;;-1:-1:-1;;;14250:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20680:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;20680:34:0::1;20710:4;20680:34;::::0;;20611:111::o;42819:147::-;14084:7;14111:6;-1:-1:-1;;;;;14111:6:0;180:10;14258:23;14250:68;;;;-1:-1:-1;;;14250:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42890:23:0;::::1;;::::0;;;:14:::1;:23;::::0;;;;;;;;:30;;-1:-1:-1;;42890:30:0::1;42916:4;42890:30;::::0;;42938:20;;2027:51:1;;;42938:20:0::1;::::0;2000:18:1;42938:20:0::1;;;;;;;42819:147:::0;:::o;41149:573::-;14084:7;14111:6;-1:-1:-1;;;;;14111:6:0;180:10;14258:23;14250:68;;;;-1:-1:-1;;;14250:68:0;;;;;;;:::i;:::-;41233:34:::1;:16;41259:7:::0;41233:25:::1;:34::i;:::-;41232:35;41224:72;;;::::0;-1:-1:-1;;;41224:72:0;;4232:2:1;41224:72:0::1;::::0;::::1;4214:21:1::0;4271:2;4251:18;;;4244:30;4310:26;4290:18;;;4283:54;4354:18;;41224:72:0::1;4204:174:1::0;41224:72:0::1;-1:-1:-1::0;;;;;41345:16:0;::::1;41307:15;41345:16:::0;;;:7:::1;:16;::::0;;;;;41325:37:::1;::::0;:19:::1;:37::i;:::-;41307:55;;41375:17;41395:20;41407:7;41395:11;:20::i;:::-;41375:40:::0;-1:-1:-1;41430:13:0;;41426:48:::1;;41445:29;41455:7;41464:9;41445;:29::i;:::-;-1:-1:-1::0;;;;;41487:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;;;:26;;;41539:10:::1;:19:::0;;;;;;41524:11:::1;:34:::0;;41539:19;;41524:11;;:34:::1;::::0;41539:19;;41524:34:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;41569:19:0;::::1;41591:1;41569:19:::0;;;:10:::1;:19;::::0;;;;;;;:23;;;41603:13:::1;:22:::0;;;;;:26;41642:29:::1;:16;41580:7:::0;41642:20:::1;:29::i;:::-;-1:-1:-1::0;41689:25:0::1;::::0;-1:-1:-1;;;;;2045:32:1;;2027:51;;41689:25:0::1;::::0;2015:2:1;2000:18;41689:25:0::1;;;;;;;;41213:509;;41149:573:::0;:::o;42089:299::-;14084:7;14111:6;-1:-1:-1;;;;;14111:6:0;180:10;14258:23;14250:68;;;;-1:-1:-1;;;14250:68:0;;;;;;;:::i;:::-;42230:16:::1;42268:5;42257:7;;42250:4;:14;;;;:::i;:::-;42249:24;;;;:::i;:::-;42230:43;;42301:8;42292:5;:17;:31;;;-1:-1:-1::0;42313:10:0;;42292:31:::1;42284:67;;;::::0;-1:-1:-1;;;42284:67:0;;6159:2:1;42284:67:0::1;::::0;::::1;6141:21:1::0;6198:2;6178:18;;;6171:30;6237:25;6217:18;;;6210:53;6280:18;;42284:67:0::1;6131:173:1::0;42284:67:0::1;-1:-1:-1::0;42364:8:0::1;:16:::0;42089:299::o;40014:336::-;180:10;40053:14;40070:24;;;:10;:24;;;;;;;40123:23;;33411:220;:::i;40123:23::-;40105:41;-1:-1:-1;40157:16:0;40176;40186:6;40105:41;40176:16;:::i;:::-;180:10;40205:24;;;;:10;:24;;;;;:36;;40157:35;;-1:-1:-1;40157:35:0;;40205:24;;;:36;;40157:35;;40205:36;:::i;:::-;;;;-1:-1:-1;;40294:14:0;;40283:25;;:8;:25;:::i;:::-;180:10;40252:27;;;;:13;:27;;;;;:56;;:27;;;:56;;;;;:::i;:::-;;;;;;;;40334:8;40319:11;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;40014:336:0:o;42974:115::-;14084:7;14111:6;-1:-1:-1;;;;;14111:6:0;180:10;14258:23;14250:68;;;;-1:-1:-1;;;14250:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43050:23:0::1;43076:5;43050:23:::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;43050:31:0::1;::::0;;42974:115::o;33411:220::-;33485:7;33509:34;:16;33535:7;33509:25;:34::i;:::-;33505:63;;;-1:-1:-1;;;;;;33552:16:0;;;;;:7;:16;;;;;;;33411:220::o;33505:63::-;-1:-1:-1;;;;;33606:16:0;;;;;;:7;:16;;;;;;33586:37;;:19;:37::i;14689:94::-;14084:7;14111:6;-1:-1:-1;;;;;14111:6:0;180:10;14258:23;14250:68;;;;-1:-1:-1;;;14250:68:0;;;;;;;:::i;:::-;14754:21:::1;14772:1;14754:9;:21::i;:::-;14689:94::o:0;41730:351::-;14084:7;14111:6;-1:-1:-1;;;;;14111:6:0;180:10;14258:23;14250:68;;;;-1:-1:-1;;;14250:68:0;;;;;;;:::i;:::-;41791:18:::1;41833:14;;41812:18;;:35;;;;:::i;:::-;41791:56:::0;-1:-1:-1;41858:19:0::1;41880:34;41791:56:::0;41880:21:::1;:34;:::i;:::-;41858:56:::0;-1:-1:-1;41931:15:0;;41927:147:::1;;41963:43;::::0;180:10;;41963:43;::::1;;;::::0;41994:11;;41963:43:::1;::::0;;;41994:11;180:10;41963:43;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;42028:34:0::1;::::0;10971:25:1;;;42028:34:0::1;::::0;10959:2:1;10944:18;42028:34:0::1;;;;;;;;41927:147;41780:301;;41730:351::o:0;16781:87::-;16820:13;16853:7;16846:14;;;;;:::i;42396:415::-;14084:7;14111:6;-1:-1:-1;;;;;14111:6:0;180:10;14258:23;14250:68;;;;-1:-1:-1;;;14250:68:0;;;;;;;:::i;:::-;42535:16:::1;42573:5;42562:7;;42555:4;:14;;;;:::i;:::-;42554:24;;;;:::i;:::-;42535:43;;42589:16;42627:5;42616:7;;42609:4;:14;;;;:::i;:::-;42608:24;;;;:::i;:::-;42589:43;;42677:8;42668:5;:17;;:38;;;;;42698:8;42689:5;:17;;42668:38;42667:54;;;-1:-1:-1::0;42711:10:0;;42667:54:::1;42645:128;;;::::0;-1:-1:-1;;;42645:128:0;;4585:2:1;42645:128:0::1;::::0;::::1;4567:21:1::0;4624:2;4604:18;;;4597:30;4663:26;4643:18;;;4636:54;4707:18;;42645:128:0::1;4557:174:1::0;42645:128:0::1;-1:-1:-1::0;;42786:9:0::1;:17:::0;42396:415::o;17224:167::-;17302:4;17319:42;180:10;17343:9;17354:6;17319:9;:42::i;39796:210::-;180:10;39849:7;39886:24;;;:10;:24;;;;;;39849:7;;;;39939:23;;33411:220;:::i;39939:23::-;39921:41;-1:-1:-1;39982:16:0;39992:6;39921:41;39982:16;:::i;:::-;39975:23;;;;39796:210;:::o;40632:509::-;14084:7;14111:6;-1:-1:-1;;;;;14111:6:0;180:10;14258:23;14250:68;;;;-1:-1:-1;;;14250:68:0;;;;;;;:::i;:::-;40713:34:::1;:16;40739:7:::0;40713:25:::1;:34::i;:::-;40705:71;;;::::0;-1:-1:-1;;;40705:71:0;;8754:2:1;40705:71:0::1;::::0;::::1;8736:21:1::0;8793:2;8773:18;;;8766:30;8832:26;8812:18;;;8805:54;8876:18;;40705:71:0::1;8726:174:1::0;40705:71:0::1;-1:-1:-1::0;;;;;40805:16:0;::::1;40787:15;40805:16:::0;;;:7:::1;:16;::::0;;;;;;40834:20;;;40884:28:::1;40805:16:::0;40884:19:::1;:28::i;:::-;-1:-1:-1::0;;;;;40865:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:47;;;;40923:11:::1;:22:::0;;40938:7;;40865:16;40923:22:::1;::::0;40938:7;;40923:22:::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;40956:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;:29;;;41031:14:::1;::::0;41021:24:::1;::::0;40978:7;41021:24:::1;:::i;:::-;-1:-1:-1::0;;;;;40996:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;:49;41058:32:::1;:16;41010:7:::0;41058:23:::1;:32::i;:::-;-1:-1:-1::0;41108:25:0::1;::::0;-1:-1:-1;;;;;2045:32:1;;2027:51;;41108:25:0::1;::::0;2015:2:1;2000:18;41108:25:0::1;1982:102:1::0;20730:184:0;14084:7;14111:6;-1:-1:-1;;;;;14111:6:0;180:10;14258:23;14250:68;;;;-1:-1:-1;;;14250:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20805:24:0;::::1;20824:4;20805:24;;20797:63;;;::::0;-1:-1:-1;;;20797:63:0;;6511:2:1;20797:63:0::1;::::0;::::1;6493:21:1::0;6550:2;6530:18;;;6523:30;6589:28;6569:18;;;6562:56;6635:18;;20797:63:0::1;6483:176:1::0;20797:63:0::1;-1:-1:-1::0;;;;;20871:27:0::1;20901:5;20871:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;20871:35:0::1;::::0;;20730:184::o;14938:192::-;14084:7;14111:6;-1:-1:-1;;;;;14111:6:0;180:10;14258:23;14250:68;;;;-1:-1:-1;;;14250:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15027:22:0;::::1;15019:73;;;::::0;-1:-1:-1;;;15019:73:0;;5349:2:1;15019:73:0::1;::::0;::::1;5331:21:1::0;5388:2;5368:18;;;5361:30;5427:34;5407:18;;;5400:62;-1:-1:-1;;;5478:18:1;;;5471:36;5524:19;;15019:73:0::1;5321:228:1::0;15019:73:0::1;15103:19;15113:8;15103:9;:19::i;28673:152::-:0;28743:4;28767:50;28772:3;-1:-1:-1;;;;;28792:23:0;;28767:4;:50::i;18266:389::-;-1:-1:-1;;;;;18411:19:0;;18403:68;;;;-1:-1:-1;;;18403:68:0;;10268:2:1;18403:68:0;;;10250:21:1;10307:2;10287:18;;;10280:30;10346:34;10326:18;;;10319:62;-1:-1:-1;;;10397:18:1;;;10390:34;10441:19;;18403:68:0;10240:226:1;18403:68:0;-1:-1:-1;;;;;18490:21:0;;18482:68;;;;-1:-1:-1;;;18482:68:0;;5756:2:1;18482:68:0;;;5738:21:1;5795:2;5775:18;;;5768:30;5834:34;5814:18;;;5807:62;-1:-1:-1;;;5885:18:1;;;5878:32;5927:19;;18482:68:0;5728:224:1;18482:68:0;-1:-1:-1;;;;;18563:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18615:32;;10971:25:1;;;18615:32:0;;10944:18:1;18615:32:0;;;;;;;18266:389;;;:::o;33951:738::-;34041:7;;34077;;34003;;34041;34003;34250:325;34274:25;:16;:23;:25::i;:::-;34270:1;:29;34250:325;;;34321:15;34339:22;:16;34359:1;34339:19;:22::i;:::-;-1:-1:-1;;;;;34380:16:0;;;;;;:7;:16;;;;;;34321:40;;-1:-1:-1;34380:26:0;-1:-1:-1;34380:26:0;:56;;-1:-1:-1;;;;;;34410:16:0;;;;;;:7;:16;;;;;;:26;-1:-1:-1;34380:56:0;34376:103;;;34472:7;;34462;;:17;;;;:::i;:::-;34455:24;;;;;;33951:738;:::o;34376:103::-;-1:-1:-1;;;;;34505:16:0;;;;;;:7;:16;;;;;;34494:27;;;;:::i;:::-;-1:-1:-1;;;;;34547:16:0;;;;;;:7;:16;;;;;;34494:27;;-1:-1:-1;34536:27:0;;;;:::i;:::-;;;34306:269;34301:3;;;;;:::i;:::-;;;;34250:325;;;;34612:7;;34602;;:17;;;;:::i;:::-;34591:7;:29;34587:59;;;34639:7;;34629;;:17;;;;:::i;34587:59::-;34664:17;34674:7;34664;:17;:::i;21654:736::-;-1:-1:-1;;;;;21803:20:0;;21795:70;;;;-1:-1:-1;;;21795:70:0;;9862:2:1;21795:70:0;;;9844:21:1;9901:2;9881:18;;;9874:30;9940:34;9920:18;;;9913:62;-1:-1:-1;;;9991:18:1;;;9984:35;10036:19;;21795:70:0;9834:227:1;21795:70:0;-1:-1:-1;;;;;21884:23:0;;21876:71;;;;-1:-1:-1;;;21876:71:0;;3828:2:1;21876:71:0;;;3810:21:1;3867:2;3847:18;;;3840:30;3906:34;3886:18;;;3879:62;-1:-1:-1;;;3957:18:1;;;3950:33;4000:19;;21876:71:0;3800:225:1;21876:71:0;21975:1;21966:6;:10;21958:64;;;;-1:-1:-1;;;21958:64:0;;8344:2:1;21958:64:0;;;8326:21:1;8383:2;8363:18;;;8356:30;8422:34;8402:18;;;8395:62;-1:-1:-1;;;8473:18:1;;;8466:39;8522:19;;21958:64:0;8316:231:1;21958:64:0;-1:-1:-1;;;;;22071:26:0;;22035:12;22071:26;;;:18;:26;;;;;;22050:4;;22071:26;;;:59;;-1:-1:-1;;;;;;22101:29:0;;;;;;:18;:29;;;;;;;;22071:59;22067:167;;;-1:-1:-1;22157:5:0;22067:167;;;22195:27;22215:6;22195:19;:27::i;:::-;22246:22;22271:50;22286:6;22294:9;22305:6;22313:7;22271:14;:50::i;:::-;22246:75;;22356:9;-1:-1:-1;;;;;22339:43:0;22348:6;-1:-1:-1;;;;;22339:43:0;;22367:14;22339:43;;;;10971:25:1;;10959:2;10944:18;;10926:76;22339:43:0;;;;;;;;21784:606;;21654:736;;;:::o;37851:234::-;37922:33;;-1:-1:-1;;;;;37922:25:0;;;:33;;;;;37948:6;;37922:33;;;;37948:6;37922:25;:33;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;37966:21:0;;;;;;:12;:21;;;;;:31;;37991:6;;37966:21;:31;;37991:6;;37966:31;:::i;:::-;;;;;;;;38026:6;38008:14;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;38050:27:0;;;-1:-1:-1;;;;;2281:32:1;;2263:51;;2345:2;2330:18;;2323:34;;;38050:27:0;;2236:18:1;38050:27:0;2218:145:1;29245:167:0;-1:-1:-1;;;;;29379:23:0;;29325:4;26118:19;;;:12;;;:19;;;;;;:24;;29349:55;26021:129;15138:173;15194:16;15213:6;;-1:-1:-1;;;;;15230:17:0;;;-1:-1:-1;;;;;;15230:17:0;;;;;;15263:40;;15213:6;;;;;;;15263:40;;15194:16;15263:40;15183:128;15138:173;:::o;29001:158::-;29074:4;29098:53;29106:3;-1:-1:-1;;;;;29126:23:0;;29098:7;:53::i;23925:414::-;23988:4;26118:19;;;:12;;;:19;;;;;;24005:327;;-1:-1:-1;24048:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;24231:18;;24209:19;;;:12;;;:19;;;;;;:40;;;;24264:11;;24005:327;-1:-1:-1;24315:5:0;24308:12;;29498:117;29561:7;29588:19;29596:3;26319:18;;26236:109;29969:158;30043:7;30094:22;30098:3;30110:5;30094:3;:22::i;38093:375::-;38175:28;38206:24;38224:4;38206:9;:24::i;:::-;38175:55;-1:-1:-1;38292:29:0;38268:53;;;;;;;38338:55;;;38379:13;-1:-1:-1;;;;;38361:32:0;:6;-1:-1:-1;;;;;38361:32:0;;;38338:55;38334:127;;;38410:39;38428:20;38410:17;:39::i;:::-;38164:304;;38093:375;:::o;35272:1337::-;35439:7;35477:9;-1:-1:-1;;;;;35467:19:0;:6;-1:-1:-1;;;;;35467:19:0;;;35459:65;;;;-1:-1:-1;;;35459:65:0;;9107:2:1;35459:65:0;;;9089:21:1;9146:2;9126:18;;;9119:30;9185:34;9165:18;;;9158:62;-1:-1:-1;;;9236:18:1;;;9229:31;9277:19;;35459:65:0;9079:223:1;35459:65:0;-1:-1:-1;;;;;35558:22:0;;;;;;:14;:22;;;;;;;;35557:23;:53;;;;-1:-1:-1;;;;;;35585:25:0;;;;;;:14;:25;;;;;;;;35584:26;35557:53;35535:122;;;;-1:-1:-1;;;35535:122:0;;7226:2:1;35535:122:0;;;7208:21:1;7265:2;7245:18;;;7238:30;-1:-1:-1;;;7284:18:1;;;7277:49;7343:18;;35535:122:0;7198:169:1;35535:122:0;35749:15;35779:23;35817:12;35844:23;35882:12;35909:16;35939:27;35950:6;35958:7;35939:10;:27::i;:::-;35734:232;;;;;;;;;;;;35979:23;36019:33;36045:6;36019:16;:25;;:33;;;;:::i;:::-;36015:233;;;-1:-1:-1;;;;;36054:15:0;;;;;;:7;:15;;;;;:25;;36073:6;;36054:15;:25;;36073:6;;36054:25;:::i;:::-;;;;-1:-1:-1;36015:233:0;;-1:-1:-1;36015:233:0;;36128:19;36140:6;36128:11;:19::i;:::-;36110:37;;36177:10;:18;36188:6;-1:-1:-1;;;;;36177:18:0;-1:-1:-1;;;;;36177:18:0;;;;;;;;;;;;;36162:11;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;36210:15:0;;;;;;:7;:15;;;;;:26;;36229:7;;36210:15;:26;;36229:7;;36210:26;:::i;:::-;;;;-1:-1:-1;;36015:233:0;36264:36;:16;36290:9;36264:25;:36::i;:::-;36260:132;;;-1:-1:-1;;;;;36302:18:0;;;;;;:7;:18;;;;;:37;;36324:15;;36302:18;:37;;36324:15;;36302:37;:::i;:::-;;;;-1:-1:-1;36260:132:0;;-1:-1:-1;36260:132:0;;-1:-1:-1;;;;;36355:18:0;;;;;;:7;:18;;;;;:37;;36377:15;;36355:18;:37;;36377:15;;36355:37;:::i;:::-;;;;-1:-1:-1;;36260:132:0;36405:22;36418:8;36405:12;:22::i;:::-;36438:23;36450:4;36456;36438:11;:23::i;:::-;36472:61;36481:6;36489:9;36500:15;36517;36472:8;:61::i;:::-;36562:4;36544:14;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;36586:15:0;;35272:1337;-1:-1:-1;;;;;;;;;;;;35272:1337:0:o;24515:1420::-;24581:4;24720:19;;;:12;;;:19;;;;;;24756:15;;24752:1176;;25131:21;25155:14;25168:1;25155:10;:14;:::i;:::-;25204:18;;25131:38;;-1:-1:-1;25184:17:0;;25204:22;;25225:1;;25204:22;:::i;:::-;25184:42;;25260:13;25247:9;:26;25243:405;;25294:17;25314:3;:11;;25326:9;25314:22;;;;;;;;:::i;:::-;;;;;;;;;25294:42;;25468:9;25439:3;:11;;25451:13;25439:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;25553:23;;;:12;;;:23;;;;;:36;;;25243:405;25729:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;25824:3;:12;;:19;25837:5;25824:19;;;;;;;;;;;25817:26;;;25867:4;25860:11;;;;;;;24752:1176;25911:5;25904:12;;;;;26699:120;26766:7;26793:3;:11;;26805:5;26793:18;;;;;;;;:::i;:::-;;;;;;;;;26786:25;;26699:120;;;;:::o;38476:864::-;38577:21;38609:38;38626:20;38609:16;:38::i;:::-;38658:21;38682:38;38706:14;38682:21;:38;:::i;:::-;38658:62;-1:-1:-1;38771:16:0;38813:3;38791:18;38658:62;38807:2;38791:18;:::i;:::-;38790:26;;;;:::i;:::-;38771:45;-1:-1:-1;38827:14:0;38844:24;38771:45;38844:13;:24;:::i;:::-;38827:41;;38889:7;14084;14111:6;-1:-1:-1;;;;;14111:6:0;;14038:87;38889:7;-1:-1:-1;;;;;38881:25:0;:35;38907:8;38881:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38951:6;38929:18;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;38974:11:0;;:15;38970:303;;39010:13;;:17;39006:117;;39058:13;;39048:23;;;;:::i;:::-;39106:1;39090:13;:17;39048:23;-1:-1:-1;39006:117:0;39193:11;;39157:32;-1:-1:-1;;;39157:6:0;:32;:::i;:::-;39156:48;;;;:::i;:::-;39137:14;;:68;;;;;;;:::i;:::-;;;;-1:-1:-1;38970:303:0;;-1:-1:-1;38970:303:0;;39255:6;39238:13;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;;38970:303:0;39290:42;;;12166:25:1;;;12222:2;12207:18;;12200:34;;;39290:42:0;;12139:18:1;39290:42:0;;;;;;;38541:799;;;;38476:864;:::o;19655:837::-;19770:7;19792;19814;19836;19858;19880;19915:19;19937:10;:8;:10::i;:::-;19915:32;;19958:12;19985:13;20019:7;20015:126;;;20061:13;;20078:3;;20051:23;;20061:13;;20051:7;:23;:::i;:::-;20050:31;;;;:::i;:::-;20115:7;;20043:38;;-1:-1:-1;20126:3:0;;20105:17;;20115:7;;;;;20105;:17;:::i;:::-;20104:25;;;;:::i;:::-;20096:33;;20015:126;20153:23;20196:5;20179:14;20189:4;20179:7;:14;:::i;:::-;:22;;;;:::i;:::-;20153:48;-1:-1:-1;20214:15:0;20232:21;20242:11;20232:7;:21;:::i;:::-;20214:39;-1:-1:-1;20264:12:0;20279:18;20286:11;20279:4;:18;:::i;:::-;20264:33;-1:-1:-1;20308:13:0;20324:19;20332:11;20324:5;:19;:::i;:::-;20308:35;-1:-1:-1;20354:23:0;20308:35;20380:14;20390:4;20380:7;:14;:::i;:::-;:22;;;;:::i;:::-;20423:7;;-1:-1:-1;20354:48:0;;-1:-1:-1;20449:4:0;;-1:-1:-1;20455:15:0;;-1:-1:-1;20472:4:0;;-1:-1:-1;20478:5:0;;-1:-1:-1;;;;19655:837:0;;;;;;;;:::o;33639:304::-;33708:19;33730:10;:8;:10::i;:::-;33708:32;-1:-1:-1;33751:16:0;33770:22;33708:32;33770:8;:22;:::i;:::-;33751:41;-1:-1:-1;33809:40:0;:16;33843:4;33809:25;:40::i;:::-;33805:130;;;33867:4;33851:22;;;;:7;:22;;;;;:34;;33877:8;;33851:22;:34;;33877:8;;33851:34;:::i;:::-;;;;-1:-1:-1;33805:130:0;;-1:-1:-1;33805:130:0;;33917:4;33901:22;;;;:7;:22;;;;;:34;;33927:8;;33901:22;:34;;33927:8;;33901:34;:::i;20922:121::-;21002:4;20991:7;;:15;;;;;;;:::i;:::-;;;;;;;;21031:4;21017:10;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;20922:121:0:o;36617:1226::-;36781:19;36803:33;:16;36829:6;36803:25;:33::i;:::-;36781:55;-1:-1:-1;36847:22:0;36872:36;:16;36898:9;36872:25;:36::i;:::-;36847:61;;36926:17;36921:246;;36960:14;36994;;36977;:31;;;;:::i;:::-;-1:-1:-1;;;;;37023:24:0;;;;;;:13;:24;;;;;:34;;36960:48;;-1:-1:-1;36960:48:0;;37023:24;;;:34;;36960:48;;37023:34;:::i;:::-;;;;-1:-1:-1;;;;;;;37072:21:0;;;;;;:10;:21;;;;;:39;;37097:14;;37072:21;:39;;37097:14;;37072:39;:::i;:::-;;;;;;;;37141:14;37126:11;;:29;;;;;;;:::i;:::-;;;;-1:-1:-1;;;36921:246:0;37393:14;37388:448;;-1:-1:-1;;;;;37535:15:0;;37491:21;37535:15;;;:7;:15;;;;;;37515:36;;:19;:36::i;:::-;37491:60;;37606:14;;37590:13;:30;;;;:::i;:::-;-1:-1:-1;;;;;37566:21:0;;;;;;:13;:21;;;;;;;;:54;;;;37635:10;:18;;;;;:34;;;37686:11;:28;;37656:13;;37566:21;37686:28;;37656:13;;37686:28;:::i;:::-;;;;-1:-1:-1;;37735:19:0;;37731:94;;37775:34;37785:6;37793:15;37775:9;:34::i;:::-;37409:427;37388:448;36770:1073;;36617:1226;;;;:::o;12497:614::-;12588:16;;;12602:1;12588:16;;;;;;;;12564:21;;12588:16;;;;;;;;;;-1:-1:-1;12588:16:0;12564:40;;12633:4;12615;12620:1;12615:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;12615:23:0;;;-1:-1:-1;;;;;12615:23:0;;;;;12659:15;-1:-1:-1;;;;;12659:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12649:4;12654:1;12649:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;12649:32:0;;;-1:-1:-1;;;;;12649:32:0;;;;;12694:62;12711:4;12726:15;12744:11;12694:8;:62::i;:::-;12786:220;;-1:-1:-1;;;12786:220:0;;-1:-1:-1;;;;;12786:15:0;:66;;;;:220;;12871:11;;12901:1;;12921:4;;12952;;12976:15;;12786:220;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12769:335;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;13073:19;13085:6;13073:19;;;;;;:::i;12769:335::-;;;;;;;;;;14:247:1;73:6;126:2;114:9;105:7;101:23;97:32;94:2;;;142:1;139;132:12;94:2;181:9;168:23;200:31;225:5;200:31;:::i;266:251::-;336:6;389:2;377:9;368:7;364:23;360:32;357:2;;;405:1;402;395:12;357:2;437:9;431:16;456:31;481:5;456:31;:::i;522:388::-;590:6;598;651:2;639:9;630:7;626:23;622:32;619:2;;;667:1;664;657:12;619:2;706:9;693:23;725:31;750:5;725:31;:::i;:::-;775:5;-1:-1:-1;832:2:1;817:18;;804:32;845:33;804:32;845:33;:::i;:::-;897:7;887:17;;;609:301;;;;;:::o;915:456::-;992:6;1000;1008;1061:2;1049:9;1040:7;1036:23;1032:32;1029:2;;;1077:1;1074;1067:12;1029:2;1116:9;1103:23;1135:31;1160:5;1135:31;:::i;:::-;1185:5;-1:-1:-1;1242:2:1;1227:18;;1214:32;1255:33;1214:32;1255:33;:::i;:::-;1019:352;;1307:7;;-1:-1:-1;;;1361:2:1;1346:18;;;;1333:32;;1019:352::o;1376:315::-;1444:6;1452;1505:2;1493:9;1484:7;1480:23;1476:32;1473:2;;;1521:1;1518;1511:12;1473:2;1560:9;1547:23;1579:31;1604:5;1579:31;:::i;:::-;1629:5;1681:2;1666:18;;;;1653:32;;-1:-1:-1;;;1463:228:1:o;1696:180::-;1755:6;1808:2;1796:9;1787:7;1783:23;1779:32;1776:2;;;1824:1;1821;1814:12;1776:2;-1:-1:-1;1847:23:1;;1766:110;-1:-1:-1;1766:110:1:o;3024:597::-;3136:4;3165:2;3194;3183:9;3176:21;3226:6;3220:13;3269:6;3264:2;3253:9;3249:18;3242:34;3294:1;3304:140;3318:6;3315:1;3312:13;3304:140;;;3413:14;;;3409:23;;3403:30;3379:17;;;3398:2;3375:26;3368:66;3333:10;;3304:140;;;3462:6;3459:1;3456:13;3453:2;;;3532:1;3527:2;3518:6;3507:9;3503:22;3499:31;3492:42;3453:2;-1:-1:-1;3605:2:1;3584:15;-1:-1:-1;;3580:29:1;3565:45;;;;3612:2;3561:54;;3145:476;-1:-1:-1;;;3145:476:1:o;7781:356::-;7983:2;7965:21;;;8002:18;;;7995:30;8061:34;8056:2;8041:18;;8034:62;8128:2;8113:18;;7955:182::o;11007:980::-;11269:4;11317:3;11306:9;11302:19;11348:6;11337:9;11330:25;11374:2;11412:6;11407:2;11396:9;11392:18;11385:34;11455:3;11450:2;11439:9;11435:18;11428:31;11479:6;11514;11508:13;11545:6;11537;11530:22;11583:3;11572:9;11568:19;11561:26;;11622:2;11614:6;11610:15;11596:29;;11643:1;11653:195;11667:6;11664:1;11661:13;11653:195;;;11732:13;;-1:-1:-1;;;;;11728:39:1;11716:52;;11823:15;;;;11788:12;;;;11764:1;11682:9;11653:195;;;-1:-1:-1;;;;;;;11904:32:1;;;;11899:2;11884:18;;11877:60;-1:-1:-1;;;11968:3:1;11953:19;11946:35;11865:3;11278:709;-1:-1:-1;;;11278:709:1:o;12434:128::-;12474:3;12505:1;12501:6;12498:1;12495:13;12492:2;;;12511:18;;:::i;:::-;-1:-1:-1;12547:9:1;;12482:80::o;12567:217::-;12607:1;12633;12623:2;;12677:10;12672:3;12668:20;12665:1;12658:31;12712:4;12709:1;12702:15;12740:4;12737:1;12730:15;12623:2;-1:-1:-1;12769:9:1;;12613:171::o;12789:168::-;12829:7;12895:1;12891;12887:6;12883:14;12880:1;12877:21;12872:1;12865:9;12858:17;12854:45;12851:2;;;12902:18;;:::i;:::-;-1:-1:-1;12942:9:1;;12841:116::o;12962:125::-;13002:4;13030:1;13027;13024:8;13021:2;;;13035:18;;:::i;:::-;-1:-1:-1;13072:9:1;;13011:76::o;13092:380::-;13171:1;13167:12;;;;13214;;;13235:2;;13289:4;13281:6;13277:17;13267:27;;13235:2;13342;13334:6;13331:14;13311:18;13308:38;13305:2;;;13388:10;13383:3;13379:20;13376:1;13369:31;13423:4;13420:1;13413:15;13451:4;13448:1;13441:15;13305:2;;13147:325;;;:::o;13477:346::-;13587:2;13568:13;;-1:-1:-1;;13564:27:1;13552:40;;13622:18;13607:34;;13643:22;;;13604:62;13601:2;;;13708:10;13703:3;13699:20;13696:1;13689:31;13743:4;13740:1;13733:15;13771:4;13768:1;13761:15;13601:2;13802;13795:22;-1:-1:-1;;13524:299:1:o;13828:135::-;13867:3;-1:-1:-1;;13888:17:1;;13885:2;;;13908:18;;:::i;:::-;-1:-1:-1;13955:1:1;13944:13;;13875:88::o;13968:127::-;14029:10;14024:3;14020:20;14017:1;14010:31;14060:4;14057:1;14050:15;14084:4;14081:1;14074:15;14100:127;14161:10;14156:3;14152:20;14149:1;14142:31;14192:4;14189:1;14182:15;14216:4;14213:1;14206:15;14232:127;14293:10;14288:3;14284:20;14281:1;14274:31;14324:4;14321:1;14314:15;14348:4;14345:1;14338:15;14496:179;14531:3;14573:1;14555:16;14552:23;14549:2;;;14619:1;14616;14613;14598:23;-1:-1:-1;14656:1:1;14650:8;14645:3;14641:18;14549:2;14539:136;:::o;14680:671::-;14719:3;14761:4;14743:16;14740:26;14737:2;;;14727:624;:::o;14737:2::-;14803;14797:9;-1:-1:-1;;14868:16:1;14864:25;;14861:1;14797:9;14840:50;14919:4;14913:11;14943:16;14978:18;15049:2;15042:4;15034:6;15030:17;15027:25;15022:2;15014:6;15011:14;15008:45;15005:2;;;15056:5;;;;;14727:624;:::o;15005:2::-;15093:6;15087:4;15083:17;15072:28;;15129:3;15123:10;15156:2;15148:6;15145:14;15142:2;;;15162:5;;;;;;14727:624;:::o;15142:2::-;15246;15227:16;15221:4;15217:27;15213:36;15206:4;15197:6;15192:3;15188:16;15184:27;15181:69;15178:2;;;15253:5;;;;;;14727:624;:::o;15178:2::-;15269:57;15320:4;15311:6;15303;15299:19;15295:30;15289:4;15269:57;:::i;:::-;-1:-1:-1;15342:3:1;;14727:624;-1:-1:-1;;;;;14727:624:1:o;15356:131::-;-1:-1:-1;;;;;15431:31:1;;15421:42;;15411:2;;15477:1;15474;15467:12

Swarm Source

ipfs://624e15eadee20bf98ce09e079880fc360398c9e4733b267144de1161a171a59e
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading