ETH Price: $3,462.33 (+1.89%)
Gas: 10 Gwei

Token

Barney (BARNEY)
 

Overview

Max Total Supply

420,690,000,000 BARNEY

Holders

80

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.530522643197797199 BARNEY

Value
$0.00
0x4bc4218f4244315584d315786e4503f2eb4b5645
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
BARNEY

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-05-15
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
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() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// OpenZeppelin Contracts (last updated v4.6.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

pragma solidity >=0.5.0;

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;
}

pragma solidity >=0.6.2;

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);
}

pragma solidity >=0.6.2;

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 BARNEY is Context, IERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 private _uniswapV2Router;

    mapping (address => uint) private _cooldown;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    mapping (address => bool) private _isExcludedFromFees;
    mapping (address => bool) private _isExcludedMaxTransactionAmount;
    mapping (address => bool) private _isBlacklisted;

    bool public tradingOpen;
    bool private _swapping;
    bool public swapEnabled = false;
    bool public cooldownEnabled = false;
    bool public feesEnabled = true;

    string private constant _name = "Barney";
    string private constant _symbol = "BARNEY";

    uint8 private constant _decimals = 18;

    uint256 private constant _totalSupply = 420_690_000_000 * (10**_decimals);
    uint256 public maxBuyAmount = _totalSupply.div(50);
    uint256 public maxSellAmount = _totalSupply.div(50);
    uint256 public maxWalletAmount = _totalSupply.div(50);
    uint256 public tradingOpenBlock = 0;
    uint256 private _blocksToBlacklist = 0;
    uint256 private _cooldownBlocks = 1;
    uint256 public constant FEE_DIVISOR = 1000;
    uint256 public buyTreasuryFee = 0;
    uint256 private _previousBuyTreasuryFee = buyTreasuryFee;
    uint256 public buyOpsFee = 0;
    uint256 private _previousBuyOpsFee = buyOpsFee;
    uint256 public sellTreasuryFee = 0;
    uint256 private _previousSellTreasuryFee = sellTreasuryFee;
    uint256 public sellOpsFee = 0;
    uint256 private _previousSellOpsFee = sellOpsFee;
    uint256 private _tokensForTreasury;
    uint256 private _tokensForOps;
    uint256 private _swapTokensAtAmount = 0;

    address payable private _treasuryWallet = payable(0x4fE55557D1587B6d608137DdAC02748de7cf751E);
    address payable private _opsWallet = payable(0x4fE55557D1587B6d608137DdAC02748de7cf751E);
    address private _uniswapV2Pair;
    address private DEAD = 0x000000000000000000000000000000000000dEaD;
    address private ZERO = 0x0000000000000000000000000000000000000000;
    
    constructor () {
        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(_uniswapV2Router), _totalSupply);
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        IERC20(_uniswapV2Pair).approve(address(_uniswapV2Router), type(uint).max);

        _balances[_msgSender()] = _totalSupply;

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[DEAD] = true;
        _isExcludedFromFees[_treasuryWallet] = true;
        _isExcludedFromFees[_opsWallet] = true;

        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[DEAD] = true;
        _isExcludedMaxTransactionAmount[_treasuryWallet] = true;
        _isExcludedMaxTransactionAmount[_opsWallet] = true;

        emit Transfer(ZERO, _msgSender(), _totalSupply);
    }

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

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

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

    function totalSupply() public pure override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view override returns (uint256) {
        return _balances[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 override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function setCooldownEnabled(bool onoff) public onlyOwner {
        cooldownEnabled = onoff;
    }

    function setSwapEnabled(bool onoff) public onlyOwner {
        swapEnabled = onoff;
    }

    function setFeesEnabled(bool onoff) public onlyOwner {
        feesEnabled = onoff;
    }

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != ZERO, "ERC20: approve from the zero address");
        require(spender != ZERO, "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address from, address to, uint256 amount) private {
        require(from != ZERO, "ERC20: transfer from the zero address");
        require(to != ZERO, "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        bool takeFee = true;
        bool shouldSwap = false;
        if (from != owner() && to != owner() && to != ZERO && to != DEAD && !_swapping) {
            require(!_isBlacklisted[from] && !_isBlacklisted[to]);

            if(!tradingOpen) require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not allowed yet.");

            if (cooldownEnabled) {
                if (to != address(_uniswapV2Router) && to != address(_uniswapV2Pair)) {
                    require(_cooldown[tx.origin] < block.number - _cooldownBlocks && _cooldown[to] < block.number - _cooldownBlocks, "Transfer delay enabled. Try again later.");
                    _cooldown[tx.origin] = block.number;
                    _cooldown[to] = block.number;
                }
            }

            if (from == _uniswapV2Pair && to != address(_uniswapV2Router) && !_isExcludedMaxTransactionAmount[to]) {
                require(amount <= maxBuyAmount, "Transfer amount exceeds the maxBuyAmount.");
                require(balanceOf(to) + amount <= maxWalletAmount, "Exceeds maximum wallet token amount.");
            }
            
            if (to == _uniswapV2Pair && from != address(_uniswapV2Router) && !_isExcludedMaxTransactionAmount[from]) {
                require(amount <= maxSellAmount, "Transfer amount exceeds the maxSellAmount.");
                shouldSwap = true;
            }
        }

        if(_isExcludedFromFees[from] || _isExcludedFromFees[to] || !feesEnabled) takeFee = false;

        uint256 contractTokenBalance = balanceOf(address(this));
        bool canSwap = (contractTokenBalance > _swapTokensAtAmount) && shouldSwap;

        if (canSwap && swapEnabled && !_swapping && !_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            _swapping = true;
            swapBack();
            _swapping = false;
        }

        _tokenTransfer(from, to, amount, takeFee, shouldSwap);
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap =  _tokensForTreasury.add(_tokensForOps);
        bool success;
        
        if (contractBalance == 0 || totalTokensToSwap == 0) return;

        if (contractBalance > _swapTokensAtAmount.mul(5)) contractBalance = _swapTokensAtAmount.mul(5);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForETH(contractBalance);
        
        uint256 ethBalance = address(this).balance.sub(initialETHBalance);
        uint256 ethForTreasury = ethBalance.mul(_tokensForTreasury).div(totalTokensToSwap);
        
        _tokensForTreasury = 0;
        _tokensForOps = 0;

        (success,) = address(_treasuryWallet).call{value: ethForTreasury}("");
        (success,) = address(_opsWallet).call{value: address(this).balance}("");
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }
        
    function sendETHToFee(uint256 amount) private {
        _treasuryWallet.transfer(amount.div(2));
        _opsWallet.transfer(amount.div(2));
    }

    function isBlacklisted(address wallet) external view returns (bool) {
        return _isBlacklisted[wallet];
    }

    function openTrading(uint256 blocks) public onlyOwner() {
        require(!tradingOpen, "Trading is already open");
        swapEnabled = true;
        cooldownEnabled = true;
        _swapTokensAtAmount = _totalSupply.mul(10).div(10000);
        tradingOpen = true;
        tradingOpenBlock = block.number;
        _blocksToBlacklist = blocks;
    }

    function setMaxBuyAmount(uint256 maxBuy) public onlyOwner {
        require(maxBuy >= (totalSupply().mul(1).div(10000)), "Max buy amount cannot be lower than 0.01% total supply.");
        maxBuyAmount = maxBuy;
    }

    function setMaxSellAmount(uint256 maxSell) public onlyOwner {
        require(maxSell >= (totalSupply().mul(1).div(10000)), "Max sell amount cannot be lower than 0.01% total supply.");
        maxSellAmount = maxSell;
    }
    
    function setMaxWalletAmount(uint256 maxToken) public onlyOwner {
        require(maxToken >= (totalSupply().mul(1).div(1000)), "Max wallet amount cannot be lower than 0.1% total supply.");
        maxWalletAmount = maxToken;
    }
    
    function setSwapTokensAtAmount(uint256 swapAmount) public onlyOwner {
        require(swapAmount >= (totalSupply().mul(1).div(100000)), "Swap amount cannot be lower than 0.001% total supply.");
        require(swapAmount <= (totalSupply().mul(5).div(1000)), "Swap amount cannot be higher than 0.5% total supply.");
        _swapTokensAtAmount = swapAmount;
    }

    function setTreasuryWallet(address _treasuryWalletAddy) public onlyOwner {
        require(_treasuryWalletAddy != ZERO, "_treasuryWallet address cannot be 0");
        _isExcludedFromFees[_treasuryWallet] = false;
        _isExcludedMaxTransactionAmount[_treasuryWallet] = false;
        _treasuryWallet = payable(_treasuryWalletAddy);
        _isExcludedFromFees[_treasuryWallet] = true;
        _isExcludedMaxTransactionAmount[_treasuryWallet] = true;
    }

    function setOpsWallet(address _opsWalletAddy) public onlyOwner {
        require(_opsWalletAddy != ZERO, "_opsWallet address cannot be 0");
        _isExcludedFromFees[_opsWallet] = false;
        _isExcludedMaxTransactionAmount[_opsWallet] = false;
        _opsWallet = payable(_opsWalletAddy);
        _isExcludedFromFees[_opsWallet] = true;
        _isExcludedMaxTransactionAmount[_opsWallet] = true;
    }

    function setExcludedFromFees(address[] memory accounts, bool isEx) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) _isExcludedFromFees[accounts[i]] = isEx;
    }
    
    function setExcludeFromMaxTransaction(address[] memory accounts, bool isEx) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) _isExcludedMaxTransactionAmount[accounts[i]] = isEx;
    }
    
    function setBlacklisted(address[] memory accounts, bool exempt) public onlyOwner {
        for (uint i = 0; i < accounts.length; i++) {
            if(accounts[i] != _uniswapV2Pair) _isBlacklisted[accounts[i]] = exempt;
        }
    }

    function setBuyFee(uint256 newBuyTreasuryFee, uint256 newBuyOpsFee) public onlyOwner {
        require(newBuyTreasuryFee.add(newBuyOpsFee) <= 250, "Must keep buy taxes below 25%");
        buyTreasuryFee = newBuyTreasuryFee;
        buyOpsFee = newBuyOpsFee;
    }

    function setSellFee(uint256 newSellTreasuryFee, uint256 newSellOpsFee) public onlyOwner {
        require(newSellTreasuryFee.add(newSellOpsFee) <= 750, "Must keep sell taxes below 75%");
        sellTreasuryFee = newSellTreasuryFee;
        sellOpsFee = newSellOpsFee;
    }

    function setCooldownBlocks(uint256 blocks) public onlyOwner {
        require(blocks >= 0 && blocks <= 10, "Invalid blocks count.");
        _cooldownBlocks = blocks;
    }

    function removeAllFee() private {
        if (buyTreasuryFee == 0 && buyOpsFee == 0 && sellTreasuryFee == 0 && sellOpsFee == 0) return;

        _previousBuyTreasuryFee = buyTreasuryFee;
        _previousBuyOpsFee = buyOpsFee;
        _previousSellTreasuryFee = sellTreasuryFee;
        _previousSellOpsFee = sellOpsFee;
        
        buyTreasuryFee = 0;
        buyOpsFee = 0;
        sellTreasuryFee = 0;
        sellOpsFee = 0;
    }
    
    function restoreAllFee() private {
        buyTreasuryFee = _previousBuyTreasuryFee;
        buyOpsFee = _previousBuyOpsFee;
        sellTreasuryFee = _previousSellTreasuryFee;
        sellOpsFee = _previousSellOpsFee;
    }
        
    function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee, bool isSell) private {
        if (!takeFee) removeAllFee();
        else amount = _takeFees(sender, amount, isSell);

        _transferStandard(sender, recipient, amount);
        
        if (!takeFee) restoreAllFee();
    }

    function _transferStandard(address sender, address recipient, uint256 tAmount) private {
        _balances[sender] = _balances[sender].sub(tAmount);
        _balances[recipient] = _balances[recipient].add(tAmount);
        emit Transfer(sender, recipient, tAmount);
    }

    function _takeFees(address sender, uint256 amount, bool isSell) private returns (uint256) {
        uint256 _totalFees;
        uint treasury;
        uint ops;
        if(tradingOpenBlock + _blocksToBlacklist >= block.number) {
            _totalFees = _getBotFees();
            treasury = _getBotTreasuryFees();
            ops = _getBotOpsFees();
        } else {
            _totalFees = _getTotalFees(isSell);
            if (isSell) {
                treasury = sellTreasuryFee;
                ops = sellOpsFee;
            } else {
                treasury = buyTreasuryFee;
                ops = buyOpsFee;
            }
        }
        
        uint256 fees;
        if (_totalFees > 0) {
            fees = amount.mul(_totalFees).div(FEE_DIVISOR);
            _tokensForTreasury += fees * treasury / _totalFees;
            _tokensForOps += fees * ops / _totalFees;
        }

        if (fees > 0) _transferStandard(sender, address(this), fees);

        return amount -= fees;
    }

    function _getTotalFees(bool isSell) private view returns(uint256) {
        if (isSell) return sellTreasuryFee.add(sellOpsFee);
        return buyTreasuryFee.add(buyOpsFee);
    }

    function _getBotFees() private pure returns(uint256) {
        return 998;
    }

    function _getBotTreasuryFees() private pure returns(uint256) {
        return 499;
    }

    function _getBotOpsFees() private pure returns(uint256) {
        return 499;
    }

    receive() external payable {}
    fallback() external payable {}
    
    function unclog() public onlyOwner {
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForETH(contractBalance);
    }
    
    function distributeFees() public onlyOwner {
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function withdrawStuckETH() public onlyOwner {
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function withdrawStuckTokens(address tkn) public onlyOwner {
        require(tkn != address(this), "Cannot withdraw this token");
        require(IERC20(tkn).balanceOf(address(this)) > 0, "No tokens");
        uint amount = IERC20(tkn).balanceOf(address(this));
        IERC20(tkn).transfer(msg.sender, amount);
    }

    function removeLimits() public onlyOwner {
        maxBuyAmount = _totalSupply;
        maxSellAmount = _totalSupply;
        maxWalletAmount = _totalSupply;
        cooldownEnabled = false;
    }

}

Contract Security Audit

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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"FEE_DIVISOR","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[],"name":"buyOpsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"distributeFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellOpsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTreasuryFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setBlacklisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"newBuyOpsFee","type":"uint256"}],"name":"setBuyFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"setCooldownBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setCooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"setExcludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"}],"name":"setMaxBuyAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"setMaxSellAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxToken","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_opsWalletAddy","type":"address"}],"name":"setOpsWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newSellTreasuryFee","type":"uint256"},{"internalType":"uint256","name":"newSellOpsFee","type":"uint256"}],"name":"setSellFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"onoff","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"swapAmount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_treasuryWalletAddy","type":"address"}],"name":"setTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpenBlock","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":"unclog","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"withdrawStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526008805464ffffff000019166401000000001790556200005260326200002d6012600a62000875565b6200003e906461f313f88062000960565b620005ad60201b620013181790919060201c565b6009556200006960326200002d6012600a62000875565b600a556200008260326012600a6200002d919062000875565b600b556000600c819055600d8190556001600e55600f8190556010819055601181905560128190556013819055601481905560158190556016819055601955601a80546001600160a01b0319908116734fe55557d1587b6d608137ddac02748de7cf751e908117909255601b80548216909217909155601d8054821661dead179055601e805490911690553480156200011a57600080fd5b506200012f62000129620005c2565b620005c6565b600180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d17908190556200018c9030906001600160a01b0316620001756012600a62000875565b62000186906461f313f88062000960565b62000616565b600160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001db57600080fd5b505afa158015620001f0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002169190620006fa565b6001600160a01b031663c9c6539630600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200027457600080fd5b505afa15801562000289573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002af9190620006fa565b6040518363ffffffff1660e01b8152600401620002ce92919062000745565b602060405180830381600087803b158015620002e957600080fd5b505af1158015620002fe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003249190620006fa565b601c80546001600160a01b0319166001600160a01b03928316179081905560015460405163095ea7b360e01b81529183169263095ea7b392620003729290911690600019906004016200075f565b602060405180830381600087803b1580156200038d57600080fd5b505af1158015620003a2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003c8919062000723565b50620003d76012600a62000875565b620003e8906461f313f88062000960565b60036000620003f6620005c2565b6001600160a01b03166001600160a01b031681526020019081526020016000208190555060016005600062000430620006eb60201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526005909352818320805485166001908117909155601d54821684528284208054861682179055601a54821684528284208054861682179055601b54909116835290822080549093168117909255600690620004bb620006eb565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff199687161790553081526006909352818320805485166001908117909155601d54821684528284208054861682179055601a54821684528284208054861682179055601b5490911683529120805490921617905562000540620005c2565b601e546001600160a01b0391821691167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6200057f6012600a62000875565b62000590906461f313f88062000960565b6040516200059f9190620007fe565b60405180910390a362000998565b6000620005bb828462000807565b9392505050565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b601e546001600160a01b0384811691161415620006505760405162461bcd60e51b81526004016200064790620007ba565b60405180910390fd5b601e546001600160a01b0383811691161415620006815760405162461bcd60e51b8152600401620006479062000778565b6001600160a01b0380841660008181526004602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590620006de908590620007fe565b60405180910390a3505050565b6000546001600160a01b031690565b6000602082840312156200070c578081fd5b81516001600160a01b0381168114620005bb578182fd5b60006020828403121562000735578081fd5b81518015158114620005bb578182fd5b6001600160a01b0392831681529116602082015260400190565b6001600160a01b03929092168252602082015260400190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b90815260200190565b6000826200082357634e487b7160e01b81526012600452602481fd5b500490565b80825b60018086116200083c57506200086c565b81870482111562000851576200085162000982565b808616156200085f57918102915b9490941c9380026200082b565b94509492505050565b6000620005bb60001960ff8516846000826200089457506001620005bb565b81620008a357506000620005bb565b8160018114620008bc5760028114620008c757620008fb565b6001915050620005bb565b60ff841115620008db57620008db62000982565b6001841b915084821115620008f457620008f462000982565b50620005bb565b5060208310610133831016604e8410600b841016171562000933575081810a838111156200092d576200092d62000982565b620005bb565b62000942848484600162000828565b80860482111562000957576200095762000982565b02949350505050565b60008160001904831182151516156200097d576200097d62000982565b500290565b634e487b7160e01b600052601160045260246000fd5b612c0980620009a86000396000f3fe60806040526004361061028c5760003560e01c806395d89b411161015a578063d1633649116100c1578063f34eb0b81161007a578063f34eb0b814610718578063f5648a4f14610738578063f5a6682f1461074d578063fb0ecfa41461076d578063fe575a871461078d578063ffb54a99146107ad57610293565b8063d163364914610658578063dd62ed3e14610678578063e01af92c14610698578063e1baae1f146106b8578063e99c9d09146106d8578063f2fde38b146106f857610293565b8063a985ceef11610113578063a985ceef146105b9578063aa4bde28146105ce578063afa4f3b2146105e3578063ba8f63c914610603578063bb57ad2014610623578063cb9637281461063857610293565b806395d89b411461051a5780639e93ad8e1461052f578063a64e4f8a14610544578063a8602fea14610559578063a901dd9214610579578063a9059cbb1461059957610293565b8063659ffb9c116101fe57806370a08231116101b757806370a0823114610484578063715018a6146104a4578063751039fc146104b957806378dd7d41146104ce57806388e765ff146104e35780638da5cb5b146104f857610293565b8063659ffb9c146103fb57806366d602ae1461041057806367c45349146104255780636ac9a8701461043a5780636b2fb1241461045a5780636ddd17131461046f57610293565b806318160ddd1161025057806318160ddd1461034f57806323b872dd1461036457806327a14fc214610384578063313ce567146103a45780635932ead1146103c65780635c068a8c146103e657610293565b806306fdde0314610295578063095ea7b3146102c05780630e23500e146102ed578063105222f91461030f57806314626dc61461032f57610293565b3661029357005b005b3480156102a157600080fd5b506102aa6107c2565b6040516102b79190612252565b60405180910390f35b3480156102cc57600080fd5b506102e06102db366004612090565b6107e2565b6040516102b79190612247565b3480156102f957600080fd5b506103026107ff565b6040516102b79190612935565b34801561031b57600080fd5b5061029361032a3660046120bb565b610805565b34801561033b57600080fd5b5061029361034a3660046121c6565b610887565b34801561035b57600080fd5b506103026108be565b34801561037057600080fd5b506102e061037f366004612050565b6108e0565b34801561039057600080fd5b5061029361039f3660046121c6565b610968565b3480156103b057600080fd5b506103b96109b3565b6040516102b791906129ae565b3480156103d257600080fd5b506102936103e136600461218e565b6109b8565b3480156103f257600080fd5b506103026109de565b34801561040757600080fd5b506103026109e4565b34801561041c57600080fd5b506103026109ea565b34801561043157600080fd5b506102936109f0565b34801561044657600080fd5b506102936104553660046121f6565b610a11565b34801561046657600080fd5b50610302610a4f565b34801561047b57600080fd5b506102e0610a55565b34801561049057600080fd5b5061030261049f366004611fe0565b610a64565b3480156104b057600080fd5b50610293610a83565b3480156104c557600080fd5b50610293610a97565b3480156104da57600080fd5b50610302610b0a565b3480156104ef57600080fd5b50610302610b10565b34801561050457600080fd5b5061050d610b16565b6040516102b7919061221a565b34801561052657600080fd5b506102aa610b25565b34801561053b57600080fd5b50610302610b45565b34801561055057600080fd5b506102e0610b4b565b34801561056557600080fd5b50610293610574366004611fe0565b610b5c565b34801561058557600080fd5b5061029361059436600461218e565b610c13565b3480156105a557600080fd5b506102e06105b4366004612090565b610c3b565b3480156105c557600080fd5b506102e0610c4f565b3480156105da57600080fd5b50610302610c5f565b3480156105ef57600080fd5b506102936105fe3660046121c6565b610c65565b34801561060f57600080fd5b5061029361061e366004611fe0565b610cd7565b34801561062f57600080fd5b50610293610d8e565b34801561064457600080fd5b50610293610653366004611fe0565b610da0565b34801561066457600080fd5b506102936106733660046121c6565b610f6f565b34801561068457600080fd5b50610302610693366004612018565b610ff8565b3480156106a457600080fd5b506102936106b336600461218e565b611023565b3480156106c457600080fd5b506102936106d33660046120bb565b611047565b3480156106e457600080fd5b506102936106f33660046121c6565b611119565b34801561070457600080fd5b50610293610713366004611fe0565b611158565b34801561072457600080fd5b506102936107333660046121c6565b61118f565b34801561074457600080fd5b506102936111ce565b34801561075957600080fd5b506102936107683660046120bb565b611237565b34801561077957600080fd5b506102936107883660046121f6565b6112b4565b34801561079957600080fd5b506102e06107a8366004611fe0565b6112f1565b3480156107b957600080fd5b506102e061130f565b6040805180820190915260068152654261726e657960d01b602082015290565b60006107f66107ef611324565b8484611328565b50600192915050565b600c5481565b61080d6113ec565b60005b825181101561088257816005600085848151811061083e57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061087a81612b41565b915050610810565b505050565b61088f6113ec565b600a8111156108b95760405162461bcd60e51b81526004016108b090612885565b60405180910390fd5b600e55565b60006108cc6012600a612a3a565b6108db906461f313f880612b0b565b905090565b60006108ed84848461142b565b61095d846108f9611324565b61095885604051806060016040528060288152602001612bac602891396001600160a01b038a16600090815260046020526040812090610937611324565b6001600160a01b031681526020810191909152604001600020549190611911565b611328565b5060015b9392505050565b6109706113ec565b61098f6103e861098960016109836108be565b9061193d565b90611318565b8110156109ae5760405162461bcd60e51b81526004016108b0906124dd565b600b55565b601290565b6109c06113ec565b6008805491151563010000000263ff00000019909216919091179055565b600f5481565b60155481565b600a5481565b6109f86113ec565b6000610a0330610a64565b9050610a0e81611949565b50565b610a196113ec565b6102ee610a268383611ace565b1115610a445760405162461bcd60e51b81526004016108b0906127ad565b601391909155601555565b60135481565b60085462010000900460ff1681565b6001600160a01b0381166000908152600360205260409020545b919050565b610a8b6113ec565b610a956000611ada565b565b610a9f6113ec565b610aab6012600a612a3a565b610aba906461f313f880612b0b565b600955610ac96012600a612a3a565b610ad8906461f313f880612b0b565b600a908155610ae990601290612a3a565b610af8906461f313f880612b0b565b600b556008805463ff00000019169055565b60115481565b60095481565b6000546001600160a01b031690565b6040805180820190915260068152654241524e455960d01b602082015290565b6103e881565b600854640100000000900460ff1681565b610b646113ec565b601e546001600160a01b0382811691161415610b925760405162461bcd60e51b81526004016108b0906125e3565b601a80546001600160a01b039081166000908152600560208181526040808420805460ff19908116909155865486168552600680845282862080548316905587546001600160a01b03191698871698909817808855861685529282528084208054841660019081179091559554909416835294909452208054909216179055565b610c1b6113ec565b600880549115156401000000000264ff0000000019909216919091179055565b60006107f6610c48611324565b848461142b565b6008546301000000900460ff1681565b600b5481565b610c6d6113ec565b610c81620186a061098960016109836108be565b811015610ca05760405162461bcd60e51b81526004016108b09061253a565b610cb36103e861098960056109836108be565b811115610cd25760405162461bcd60e51b81526004016108b09061258f565b601955565b610cdf6113ec565b601e546001600160a01b0382811691161415610d0d5760405162461bcd60e51b81526004016108b09061230b565b601b80546001600160a01b039081166000908152600560208181526040808420805460ff19908116909155865486168552600680845282862080548316905587546001600160a01b03191698871698909817808855861685529282528084208054841660019081179091559554909416835294909452208054909216179055565b610d966113ec565b47610a0e81611b2a565b610da86113ec565b6001600160a01b038116301415610dd15760405162461bcd60e51b81526004016108b0906126e8565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610e0090309060040161221a565b60206040518083038186803b158015610e1857600080fd5b505afa158015610e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5091906121de565b11610e6d5760405162461bcd60e51b81526004016108b0906122a5565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610e9c90309060040161221a565b60206040518083038186803b158015610eb457600080fd5b505afa158015610ec8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eec91906121de565b60405163a9059cbb60e01b81529091506001600160a01b0383169063a9059cbb90610f1d903390859060040161222e565b602060405180830381600087803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088291906121aa565b610f776113ec565b60085460ff1615610f9a5760405162461bcd60e51b81526004016108b090612427565b6008805463ff0000001962ff0000199091166201000017166301000000179055610fdf612710610989600a610fd0601282612a3a565b610983906461f313f880612b0b565b6019556008805460ff1916600117905543600c55600d55565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b61102b6113ec565b60088054911515620100000262ff000019909216919091179055565b61104f6113ec565b60005b825181101561088257601c5483516001600160a01b039091169084908390811061108c57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316146111075781600760008584815181106110c757634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8061111181612b41565b915050611052565b6111216113ec565b61113461271061098960016109836108be565b8110156111535760405162461bcd60e51b81526004016108b0906123ca565b600a55565b6111606113ec565b6001600160a01b0381166111865760405162461bcd60e51b81526004016108b090612342565b610a0e81611ada565b6111976113ec565b6111aa61271061098960016109836108be565b8110156111c95760405162461bcd60e51b81526004016108b0906127e4565b600955565b6111d66113ec565b6000336001600160a01b0316476040516111ef90612217565b60006040518083038185875af1925050503d806000811461122c576040519150601f19603f3d011682016040523d82523d6000602084013e611231565b606091505b50505050565b61123f6113ec565b60005b825181101561088257816006600085848151811061127057634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806112ac81612b41565b915050611242565b6112bc6113ec565b60fa6112c88383611ace565b11156112e65760405162461bcd60e51b81526004016108b0906128fe565b600f91909155601155565b6001600160a01b031660009081526007602052604090205460ff1690565b60085460ff1681565b600061096182846129d4565b3390565b601e546001600160a01b03848116911614156113565760405162461bcd60e51b81526004016108b090612841565b601e546001600160a01b03838116911614156113845760405162461bcd60e51b81526004016108b090612388565b6001600160a01b0380841660008181526004602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906113df908590612935565b60405180910390a3505050565b6113f4611324565b6001600160a01b0316611405610b16565b6001600160a01b031614610a955760405162461bcd60e51b81526004016108b0906126b3565b601e546001600160a01b03848116911614156114595760405162461bcd60e51b81526004016108b090612768565b601e546001600160a01b03838116911614156114875760405162461bcd60e51b81526004016108b0906122c8565b600081116114a75760405162461bcd60e51b81526004016108b09061271f565b600160006114b3610b16565b6001600160a01b0316856001600160a01b0316141580156114ed57506114d7610b16565b6001600160a01b0316846001600160a01b031614155b80156115075750601e546001600160a01b03858116911614155b80156115215750601d546001600160a01b03858116911614155b80156115355750600854610100900460ff16155b156117e2576001600160a01b03851660009081526007602052604090205460ff1615801561157c57506001600160a01b03841660009081526007602052604090205460ff16155b61158557600080fd5b60085460ff166115ea576001600160a01b03851660009081526005602052604090205460ff16806115ce57506001600160a01b03841660009081526005602052604090205460ff165b6115ea5760405162461bcd60e51b81526004016108b0906124a6565b6008546301000000900460ff16156116bb576001546001600160a01b038581169116148015906116285750601c546001600160a01b03858116911614155b156116bb57600e5461163a9043612b2a565b3260009081526002602052604090205410801561167a5750600e5461165f9043612b2a565b6001600160a01b038516600090815260026020526040902054105b6116965760405162461bcd60e51b81526004016108b09061245e565b3260009081526002602052604080822043908190556001600160a01b03871683529120555b601c546001600160a01b0386811691161480156116e657506001546001600160a01b03858116911614155b801561170b57506001600160a01b03841660009081526006602052604090205460ff16155b15611767576009548311156117325760405162461bcd60e51b81526004016108b09061266a565b600b548361173f86610a64565b61174991906129bc565b11156117675760405162461bcd60e51b81526004016108b090612626565b601c546001600160a01b03858116911614801561179257506001546001600160a01b03868116911614155b80156117b757506001600160a01b03851660009081526006602052604090205460ff16155b156117e257600a548311156117de5760405162461bcd60e51b81526004016108b0906128b4565b5060015b6001600160a01b03851660009081526005602052604090205460ff168061182157506001600160a01b03841660009081526005602052604090205460ff165b806118375750600854640100000000900460ff16155b1561184157600091505b600061184c30610a64565b905060006019548211801561185e5750825b9050808015611875575060085462010000900460ff165b80156118895750600854610100900460ff16155b80156118ae57506001600160a01b03871660009081526005602052604090205460ff16155b80156118d357506001600160a01b03861660009081526005602052604090205460ff16155b156118fb576008805461ff0019166101001790556118ef611bb3565b6008805461ff00191690555b6119088787878787611d25565b50505050505050565b600081848411156119355760405162461bcd60e51b81526004016108b09190612252565b505050900390565b60006109618284612b0b565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061198c57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156119e057600080fd5b505afa1580156119f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a189190611ffc565b81600181518110611a3957634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600154611a5f9130911684611328565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790611a9890859060009086903090429060040161293e565b600060405180830381600087803b158015611ab257600080fd5b505af1158015611ac6573d6000803e3d6000fd5b505050505050565b600061096182846129bc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b601a546001600160a01b03166108fc611b44836002611318565b6040518115909202916000818181858888f19350505050158015611b6c573d6000803e3d6000fd5b50601b546001600160a01b03166108fc611b87836002611318565b6040518115909202916000818181858888f19350505050158015611baf573d6000803e3d6000fd5b5050565b6000611bbe30610a64565b90506000611bd9601854601754611ace90919063ffffffff16565b90506000821580611be8575081155b15611bf557505050610a95565b601954611c0390600561193d565b831115611c1b57601954611c1890600561193d565b92505b47611c2584611949565b6000611c314783611d64565b90506000611c4e856109896017548561193d90919063ffffffff16565b60006017819055601855601a546040519192506001600160a01b0316908290611c7690612217565b60006040518083038185875af1925050503d8060008114611cb3576040519150601f19603f3d011682016040523d82523d6000602084013e611cb8565b606091505b5050601b546040519195506001600160a01b0316904790611cd890612217565b60006040518083038185875af1925050503d8060008114611d15576040519150601f19603f3d011682016040523d82523d6000602084013e611d1a565b606091505b505050505050505050565b81611d3757611d32611d70565b611d45565b611d42858483611dce565b92505b611d50858585611ecd565b81611d5d57611d5d611f71565b5050505050565b60006109618284612b2a565b600f54158015611d805750601154155b8015611d8c5750601354155b8015611d985750601554155b15611da257610a95565b600f80546010556011805460125560138054601455601580546016556000938490559183905582905555565b60008060008043600d54600c54611de591906129bc565b10611e0d57611df2611f8b565b9250611dfc611f91565b9150611e06611f91565b9050611e34565b611e1685611f97565b92508415611e2b575050601354601554611e34565b5050600f546011545b60008315611ea657611e4c6103e8610989898761193d565b905083611e598483612b0b565b611e6391906129d4565b60176000828254611e7491906129bc565b90915550849050611e858383612b0b565b611e8f91906129d4565b60186000828254611ea091906129bc565b90915550505b8015611eb757611eb7883083611ecd565b611ec18188612b2a565b98975050505050505050565b6001600160a01b038316600090815260036020526040902054611ef09082611d64565b6001600160a01b038085166000908152600360205260408082209390935590841681522054611f1f9082611ace565b6001600160a01b0380841660008181526003602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113df908590612935565b601054600f55601254601155601454601355601654601555565b6103e690565b6101f390565b60008115611fb557601554601354611fae91611ace565b9050610a7e565b601154600f54611fc491611ace565b92915050565b8035610a7e81612b88565b8035610a7e81612b9d565b600060208284031215611ff1578081fd5b813561096181612b88565b60006020828403121561200d578081fd5b815161096181612b88565b6000806040838503121561202a578081fd5b823561203581612b88565b9150602083013561204581612b88565b809150509250929050565b600080600060608486031215612064578081fd5b833561206f81612b88565b9250602084013561207f81612b88565b929592945050506040919091013590565b600080604083850312156120a2578182fd5b82356120ad81612b88565b946020939093013593505050565b600080604083850312156120cd578182fd5b823567ffffffffffffffff808211156120e4578384fd5b818501915085601f8301126120f7578384fd5b813560208282111561210b5761210b612b72565b8082026040518282820101818110868211171561212a5761212a612b72565b604052838152828101945085830182870184018b1015612148578889fd5b8896505b848710156121715761215d81611fca565b86526001969096019594830194830161214c565b5096506121819050878201611fd5565b9450505050509250929050565b60006020828403121561219f578081fd5b813561096181612b9d565b6000602082840312156121bb578081fd5b815161096181612b9d565b6000602082840312156121d7578081fd5b5035919050565b6000602082840312156121ef578081fd5b5051919050565b60008060408385031215612208578182fd5b50508035926020909101359150565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b8181101561227e57858101830151858201604001528201612262565b8181111561228f5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600990820152684e6f20746f6b656e7360b81b604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252601e908201527f5f6f707357616c6c657420616464726573732063616e6e6f7420626520300000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526038908201527f4d61782073656c6c20616d6f756e742063616e6e6f74206265206c6f7765722060408201527f7468616e20302e30312520746f74616c20737570706c792e0000000000000000606082015260800190565b60208082526017908201527f54726164696e6720697320616c7265616479206f70656e000000000000000000604082015260600190565b60208082526028908201527f5472616e736665722064656c617920656e61626c65642e20547279206167616960408201526737103630ba32b91760c11b606082015260800190565b6020808252601b908201527f54726164696e67206973206e6f7420616c6c6f776564207965742e0000000000604082015260600190565b60208082526039908201527f4d61782077616c6c657420616d6f756e742063616e6e6f74206265206c6f776560408201527f72207468616e20302e312520746f74616c20737570706c792e00000000000000606082015260800190565b60208082526035908201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60408201527410181718181892903a37ba30b61039bab838363c9760591b606082015260800190565b60208082526034908201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604082015273371018171a92903a37ba30b61039bab838363c9760611b606082015260800190565b60208082526023908201527f5f747265617375727957616c6c657420616464726573732063616e6e6f74206260408201526206520360ec1b606082015260800190565b60208082526024908201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6040820152633ab73a1760e11b606082015260800190565b60208082526029908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178426040820152683abca0b6b7bab73a1760b91b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f43616e6e6f74207769746864726177207468697320746f6b656e000000000000604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252601e908201527f4d757374206b6565702073656c6c2074617865732062656c6f77203735250000604082015260600190565b60208082526037908201527f4d61782062757920616d6f756e742063616e6e6f74206265206c6f776572207460408201527f68616e20302e30312520746f74616c20737570706c792e000000000000000000606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526015908201527424b73b30b634b210313637b1b5b99031b7bab73a1760591b604082015260600190565b6020808252602a908201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785360408201526932b63620b6b7bab73a1760b11b606082015260800190565b6020808252601d908201527f4d757374206b656570206275792074617865732062656c6f7720323525000000604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b8181101561298d5784516001600160a01b031683529383019391830191600101612968565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff91909116815260200190565b600082198211156129cf576129cf612b5c565b500190565b6000826129ef57634e487b7160e01b81526012600452602481fd5b500490565b80825b6001808611612a065750612a31565b818704821115612a1857612a18612b5c565b80861615612a2557918102915b9490941c9380026129f7565b94509492505050565b600061096160001960ff851684600082612a5657506001610961565b81612a6357506000610961565b8160018114612a795760028114612a8357612ab0565b6001915050610961565b60ff841115612a9457612a94612b5c565b6001841b915084821115612aaa57612aaa612b5c565b50610961565b5060208310610133831016604e8410600b8410161715612ae3575081810a83811115612ade57612ade612b5c565b610961565b612af084848460016129f4565b808604821115612b0257612b02612b5c565b02949350505050565b6000816000190483118215151615612b2557612b25612b5c565b500290565b600082821015612b3c57612b3c612b5c565b500390565b6000600019821415612b5557612b55612b5c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610a0e57600080fd5b8015158114610a0e57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220f942fed529fa9c5687afbe6cf9476a18df7cc64fe54423b07ec9ad3951f9343964736f6c63430008000033

Deployed Bytecode

0x60806040526004361061028c5760003560e01c806395d89b411161015a578063d1633649116100c1578063f34eb0b81161007a578063f34eb0b814610718578063f5648a4f14610738578063f5a6682f1461074d578063fb0ecfa41461076d578063fe575a871461078d578063ffb54a99146107ad57610293565b8063d163364914610658578063dd62ed3e14610678578063e01af92c14610698578063e1baae1f146106b8578063e99c9d09146106d8578063f2fde38b146106f857610293565b8063a985ceef11610113578063a985ceef146105b9578063aa4bde28146105ce578063afa4f3b2146105e3578063ba8f63c914610603578063bb57ad2014610623578063cb9637281461063857610293565b806395d89b411461051a5780639e93ad8e1461052f578063a64e4f8a14610544578063a8602fea14610559578063a901dd9214610579578063a9059cbb1461059957610293565b8063659ffb9c116101fe57806370a08231116101b757806370a0823114610484578063715018a6146104a4578063751039fc146104b957806378dd7d41146104ce57806388e765ff146104e35780638da5cb5b146104f857610293565b8063659ffb9c146103fb57806366d602ae1461041057806367c45349146104255780636ac9a8701461043a5780636b2fb1241461045a5780636ddd17131461046f57610293565b806318160ddd1161025057806318160ddd1461034f57806323b872dd1461036457806327a14fc214610384578063313ce567146103a45780635932ead1146103c65780635c068a8c146103e657610293565b806306fdde0314610295578063095ea7b3146102c05780630e23500e146102ed578063105222f91461030f57806314626dc61461032f57610293565b3661029357005b005b3480156102a157600080fd5b506102aa6107c2565b6040516102b79190612252565b60405180910390f35b3480156102cc57600080fd5b506102e06102db366004612090565b6107e2565b6040516102b79190612247565b3480156102f957600080fd5b506103026107ff565b6040516102b79190612935565b34801561031b57600080fd5b5061029361032a3660046120bb565b610805565b34801561033b57600080fd5b5061029361034a3660046121c6565b610887565b34801561035b57600080fd5b506103026108be565b34801561037057600080fd5b506102e061037f366004612050565b6108e0565b34801561039057600080fd5b5061029361039f3660046121c6565b610968565b3480156103b057600080fd5b506103b96109b3565b6040516102b791906129ae565b3480156103d257600080fd5b506102936103e136600461218e565b6109b8565b3480156103f257600080fd5b506103026109de565b34801561040757600080fd5b506103026109e4565b34801561041c57600080fd5b506103026109ea565b34801561043157600080fd5b506102936109f0565b34801561044657600080fd5b506102936104553660046121f6565b610a11565b34801561046657600080fd5b50610302610a4f565b34801561047b57600080fd5b506102e0610a55565b34801561049057600080fd5b5061030261049f366004611fe0565b610a64565b3480156104b057600080fd5b50610293610a83565b3480156104c557600080fd5b50610293610a97565b3480156104da57600080fd5b50610302610b0a565b3480156104ef57600080fd5b50610302610b10565b34801561050457600080fd5b5061050d610b16565b6040516102b7919061221a565b34801561052657600080fd5b506102aa610b25565b34801561053b57600080fd5b50610302610b45565b34801561055057600080fd5b506102e0610b4b565b34801561056557600080fd5b50610293610574366004611fe0565b610b5c565b34801561058557600080fd5b5061029361059436600461218e565b610c13565b3480156105a557600080fd5b506102e06105b4366004612090565b610c3b565b3480156105c557600080fd5b506102e0610c4f565b3480156105da57600080fd5b50610302610c5f565b3480156105ef57600080fd5b506102936105fe3660046121c6565b610c65565b34801561060f57600080fd5b5061029361061e366004611fe0565b610cd7565b34801561062f57600080fd5b50610293610d8e565b34801561064457600080fd5b50610293610653366004611fe0565b610da0565b34801561066457600080fd5b506102936106733660046121c6565b610f6f565b34801561068457600080fd5b50610302610693366004612018565b610ff8565b3480156106a457600080fd5b506102936106b336600461218e565b611023565b3480156106c457600080fd5b506102936106d33660046120bb565b611047565b3480156106e457600080fd5b506102936106f33660046121c6565b611119565b34801561070457600080fd5b50610293610713366004611fe0565b611158565b34801561072457600080fd5b506102936107333660046121c6565b61118f565b34801561074457600080fd5b506102936111ce565b34801561075957600080fd5b506102936107683660046120bb565b611237565b34801561077957600080fd5b506102936107883660046121f6565b6112b4565b34801561079957600080fd5b506102e06107a8366004611fe0565b6112f1565b3480156107b957600080fd5b506102e061130f565b6040805180820190915260068152654261726e657960d01b602082015290565b60006107f66107ef611324565b8484611328565b50600192915050565b600c5481565b61080d6113ec565b60005b825181101561088257816005600085848151811061083e57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff19169115159190911790558061087a81612b41565b915050610810565b505050565b61088f6113ec565b600a8111156108b95760405162461bcd60e51b81526004016108b090612885565b60405180910390fd5b600e55565b60006108cc6012600a612a3a565b6108db906461f313f880612b0b565b905090565b60006108ed84848461142b565b61095d846108f9611324565b61095885604051806060016040528060288152602001612bac602891396001600160a01b038a16600090815260046020526040812090610937611324565b6001600160a01b031681526020810191909152604001600020549190611911565b611328565b5060015b9392505050565b6109706113ec565b61098f6103e861098960016109836108be565b9061193d565b90611318565b8110156109ae5760405162461bcd60e51b81526004016108b0906124dd565b600b55565b601290565b6109c06113ec565b6008805491151563010000000263ff00000019909216919091179055565b600f5481565b60155481565b600a5481565b6109f86113ec565b6000610a0330610a64565b9050610a0e81611949565b50565b610a196113ec565b6102ee610a268383611ace565b1115610a445760405162461bcd60e51b81526004016108b0906127ad565b601391909155601555565b60135481565b60085462010000900460ff1681565b6001600160a01b0381166000908152600360205260409020545b919050565b610a8b6113ec565b610a956000611ada565b565b610a9f6113ec565b610aab6012600a612a3a565b610aba906461f313f880612b0b565b600955610ac96012600a612a3a565b610ad8906461f313f880612b0b565b600a908155610ae990601290612a3a565b610af8906461f313f880612b0b565b600b556008805463ff00000019169055565b60115481565b60095481565b6000546001600160a01b031690565b6040805180820190915260068152654241524e455960d01b602082015290565b6103e881565b600854640100000000900460ff1681565b610b646113ec565b601e546001600160a01b0382811691161415610b925760405162461bcd60e51b81526004016108b0906125e3565b601a80546001600160a01b039081166000908152600560208181526040808420805460ff19908116909155865486168552600680845282862080548316905587546001600160a01b03191698871698909817808855861685529282528084208054841660019081179091559554909416835294909452208054909216179055565b610c1b6113ec565b600880549115156401000000000264ff0000000019909216919091179055565b60006107f6610c48611324565b848461142b565b6008546301000000900460ff1681565b600b5481565b610c6d6113ec565b610c81620186a061098960016109836108be565b811015610ca05760405162461bcd60e51b81526004016108b09061253a565b610cb36103e861098960056109836108be565b811115610cd25760405162461bcd60e51b81526004016108b09061258f565b601955565b610cdf6113ec565b601e546001600160a01b0382811691161415610d0d5760405162461bcd60e51b81526004016108b09061230b565b601b80546001600160a01b039081166000908152600560208181526040808420805460ff19908116909155865486168552600680845282862080548316905587546001600160a01b03191698871698909817808855861685529282528084208054841660019081179091559554909416835294909452208054909216179055565b610d966113ec565b47610a0e81611b2a565b610da86113ec565b6001600160a01b038116301415610dd15760405162461bcd60e51b81526004016108b0906126e8565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610e0090309060040161221a565b60206040518083038186803b158015610e1857600080fd5b505afa158015610e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e5091906121de565b11610e6d5760405162461bcd60e51b81526004016108b0906122a5565b6040516370a0823160e01b81526000906001600160a01b038316906370a0823190610e9c90309060040161221a565b60206040518083038186803b158015610eb457600080fd5b505afa158015610ec8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eec91906121de565b60405163a9059cbb60e01b81529091506001600160a01b0383169063a9059cbb90610f1d903390859060040161222e565b602060405180830381600087803b158015610f3757600080fd5b505af1158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061088291906121aa565b610f776113ec565b60085460ff1615610f9a5760405162461bcd60e51b81526004016108b090612427565b6008805463ff0000001962ff0000199091166201000017166301000000179055610fdf612710610989600a610fd0601282612a3a565b610983906461f313f880612b0b565b6019556008805460ff1916600117905543600c55600d55565b6001600160a01b03918216600090815260046020908152604080832093909416825291909152205490565b61102b6113ec565b60088054911515620100000262ff000019909216919091179055565b61104f6113ec565b60005b825181101561088257601c5483516001600160a01b039091169084908390811061108c57634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b0316146111075781600760008584815181106110c757634e487b7160e01b600052603260045260246000fd5b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060006101000a81548160ff0219169083151502179055505b8061111181612b41565b915050611052565b6111216113ec565b61113461271061098960016109836108be565b8110156111535760405162461bcd60e51b81526004016108b0906123ca565b600a55565b6111606113ec565b6001600160a01b0381166111865760405162461bcd60e51b81526004016108b090612342565b610a0e81611ada565b6111976113ec565b6111aa61271061098960016109836108be565b8110156111c95760405162461bcd60e51b81526004016108b0906127e4565b600955565b6111d66113ec565b6000336001600160a01b0316476040516111ef90612217565b60006040518083038185875af1925050503d806000811461122c576040519150601f19603f3d011682016040523d82523d6000602084013e611231565b606091505b50505050565b61123f6113ec565b60005b825181101561088257816006600085848151811061127057634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806112ac81612b41565b915050611242565b6112bc6113ec565b60fa6112c88383611ace565b11156112e65760405162461bcd60e51b81526004016108b0906128fe565b600f91909155601155565b6001600160a01b031660009081526007602052604090205460ff1690565b60085460ff1681565b600061096182846129d4565b3390565b601e546001600160a01b03848116911614156113565760405162461bcd60e51b81526004016108b090612841565b601e546001600160a01b03838116911614156113845760405162461bcd60e51b81526004016108b090612388565b6001600160a01b0380841660008181526004602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906113df908590612935565b60405180910390a3505050565b6113f4611324565b6001600160a01b0316611405610b16565b6001600160a01b031614610a955760405162461bcd60e51b81526004016108b0906126b3565b601e546001600160a01b03848116911614156114595760405162461bcd60e51b81526004016108b090612768565b601e546001600160a01b03838116911614156114875760405162461bcd60e51b81526004016108b0906122c8565b600081116114a75760405162461bcd60e51b81526004016108b09061271f565b600160006114b3610b16565b6001600160a01b0316856001600160a01b0316141580156114ed57506114d7610b16565b6001600160a01b0316846001600160a01b031614155b80156115075750601e546001600160a01b03858116911614155b80156115215750601d546001600160a01b03858116911614155b80156115355750600854610100900460ff16155b156117e2576001600160a01b03851660009081526007602052604090205460ff1615801561157c57506001600160a01b03841660009081526007602052604090205460ff16155b61158557600080fd5b60085460ff166115ea576001600160a01b03851660009081526005602052604090205460ff16806115ce57506001600160a01b03841660009081526005602052604090205460ff165b6115ea5760405162461bcd60e51b81526004016108b0906124a6565b6008546301000000900460ff16156116bb576001546001600160a01b038581169116148015906116285750601c546001600160a01b03858116911614155b156116bb57600e5461163a9043612b2a565b3260009081526002602052604090205410801561167a5750600e5461165f9043612b2a565b6001600160a01b038516600090815260026020526040902054105b6116965760405162461bcd60e51b81526004016108b09061245e565b3260009081526002602052604080822043908190556001600160a01b03871683529120555b601c546001600160a01b0386811691161480156116e657506001546001600160a01b03858116911614155b801561170b57506001600160a01b03841660009081526006602052604090205460ff16155b15611767576009548311156117325760405162461bcd60e51b81526004016108b09061266a565b600b548361173f86610a64565b61174991906129bc565b11156117675760405162461bcd60e51b81526004016108b090612626565b601c546001600160a01b03858116911614801561179257506001546001600160a01b03868116911614155b80156117b757506001600160a01b03851660009081526006602052604090205460ff16155b156117e257600a548311156117de5760405162461bcd60e51b81526004016108b0906128b4565b5060015b6001600160a01b03851660009081526005602052604090205460ff168061182157506001600160a01b03841660009081526005602052604090205460ff165b806118375750600854640100000000900460ff16155b1561184157600091505b600061184c30610a64565b905060006019548211801561185e5750825b9050808015611875575060085462010000900460ff165b80156118895750600854610100900460ff16155b80156118ae57506001600160a01b03871660009081526005602052604090205460ff16155b80156118d357506001600160a01b03861660009081526005602052604090205460ff16155b156118fb576008805461ff0019166101001790556118ef611bb3565b6008805461ff00191690555b6119088787878787611d25565b50505050505050565b600081848411156119355760405162461bcd60e51b81526004016108b09190612252565b505050900390565b60006109618284612b0b565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061198c57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156119e057600080fd5b505afa1580156119f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a189190611ffc565b81600181518110611a3957634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600154611a5f9130911684611328565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790611a9890859060009086903090429060040161293e565b600060405180830381600087803b158015611ab257600080fd5b505af1158015611ac6573d6000803e3d6000fd5b505050505050565b600061096182846129bc565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b601a546001600160a01b03166108fc611b44836002611318565b6040518115909202916000818181858888f19350505050158015611b6c573d6000803e3d6000fd5b50601b546001600160a01b03166108fc611b87836002611318565b6040518115909202916000818181858888f19350505050158015611baf573d6000803e3d6000fd5b5050565b6000611bbe30610a64565b90506000611bd9601854601754611ace90919063ffffffff16565b90506000821580611be8575081155b15611bf557505050610a95565b601954611c0390600561193d565b831115611c1b57601954611c1890600561193d565b92505b47611c2584611949565b6000611c314783611d64565b90506000611c4e856109896017548561193d90919063ffffffff16565b60006017819055601855601a546040519192506001600160a01b0316908290611c7690612217565b60006040518083038185875af1925050503d8060008114611cb3576040519150601f19603f3d011682016040523d82523d6000602084013e611cb8565b606091505b5050601b546040519195506001600160a01b0316904790611cd890612217565b60006040518083038185875af1925050503d8060008114611d15576040519150601f19603f3d011682016040523d82523d6000602084013e611d1a565b606091505b505050505050505050565b81611d3757611d32611d70565b611d45565b611d42858483611dce565b92505b611d50858585611ecd565b81611d5d57611d5d611f71565b5050505050565b60006109618284612b2a565b600f54158015611d805750601154155b8015611d8c5750601354155b8015611d985750601554155b15611da257610a95565b600f80546010556011805460125560138054601455601580546016556000938490559183905582905555565b60008060008043600d54600c54611de591906129bc565b10611e0d57611df2611f8b565b9250611dfc611f91565b9150611e06611f91565b9050611e34565b611e1685611f97565b92508415611e2b575050601354601554611e34565b5050600f546011545b60008315611ea657611e4c6103e8610989898761193d565b905083611e598483612b0b565b611e6391906129d4565b60176000828254611e7491906129bc565b90915550849050611e858383612b0b565b611e8f91906129d4565b60186000828254611ea091906129bc565b90915550505b8015611eb757611eb7883083611ecd565b611ec18188612b2a565b98975050505050505050565b6001600160a01b038316600090815260036020526040902054611ef09082611d64565b6001600160a01b038085166000908152600360205260408082209390935590841681522054611f1f9082611ace565b6001600160a01b0380841660008181526003602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906113df908590612935565b601054600f55601254601155601454601355601654601555565b6103e690565b6101f390565b60008115611fb557601554601354611fae91611ace565b9050610a7e565b601154600f54611fc491611ace565b92915050565b8035610a7e81612b88565b8035610a7e81612b9d565b600060208284031215611ff1578081fd5b813561096181612b88565b60006020828403121561200d578081fd5b815161096181612b88565b6000806040838503121561202a578081fd5b823561203581612b88565b9150602083013561204581612b88565b809150509250929050565b600080600060608486031215612064578081fd5b833561206f81612b88565b9250602084013561207f81612b88565b929592945050506040919091013590565b600080604083850312156120a2578182fd5b82356120ad81612b88565b946020939093013593505050565b600080604083850312156120cd578182fd5b823567ffffffffffffffff808211156120e4578384fd5b818501915085601f8301126120f7578384fd5b813560208282111561210b5761210b612b72565b8082026040518282820101818110868211171561212a5761212a612b72565b604052838152828101945085830182870184018b1015612148578889fd5b8896505b848710156121715761215d81611fca565b86526001969096019594830194830161214c565b5096506121819050878201611fd5565b9450505050509250929050565b60006020828403121561219f578081fd5b813561096181612b9d565b6000602082840312156121bb578081fd5b815161096181612b9d565b6000602082840312156121d7578081fd5b5035919050565b6000602082840312156121ef578081fd5b5051919050565b60008060408385031215612208578182fd5b50508035926020909101359150565b90565b6001600160a01b0391909116815260200190565b6001600160a01b03929092168252602082015260400190565b901515815260200190565b6000602080835283518082850152825b8181101561227e57858101830151858201604001528201612262565b8181111561228f5783604083870101525b50601f01601f1916929092016040019392505050565b6020808252600990820152684e6f20746f6b656e7360b81b604082015260600190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6020808252601e908201527f5f6f707357616c6c657420616464726573732063616e6e6f7420626520300000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526038908201527f4d61782073656c6c20616d6f756e742063616e6e6f74206265206c6f7765722060408201527f7468616e20302e30312520746f74616c20737570706c792e0000000000000000606082015260800190565b60208082526017908201527f54726164696e6720697320616c7265616479206f70656e000000000000000000604082015260600190565b60208082526028908201527f5472616e736665722064656c617920656e61626c65642e20547279206167616960408201526737103630ba32b91760c11b606082015260800190565b6020808252601b908201527f54726164696e67206973206e6f7420616c6c6f776564207965742e0000000000604082015260600190565b60208082526039908201527f4d61782077616c6c657420616d6f756e742063616e6e6f74206265206c6f776560408201527f72207468616e20302e312520746f74616c20737570706c792e00000000000000606082015260800190565b60208082526035908201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60408201527410181718181892903a37ba30b61039bab838363c9760591b606082015260800190565b60208082526034908201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604082015273371018171a92903a37ba30b61039bab838363c9760611b606082015260800190565b60208082526023908201527f5f747265617375727957616c6c657420616464726573732063616e6e6f74206260408201526206520360ec1b606082015260800190565b60208082526024908201527f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f6040820152633ab73a1760e11b606082015260800190565b60208082526029908201527f5472616e7366657220616d6f756e74206578636565647320746865206d6178426040820152683abca0b6b7bab73a1760b91b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f43616e6e6f74207769746864726177207468697320746f6b656e000000000000604082015260600190565b60208082526029908201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206040820152687468616e207a65726f60b81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252601e908201527f4d757374206b6565702073656c6c2074617865732062656c6f77203735250000604082015260600190565b60208082526037908201527f4d61782062757920616d6f756e742063616e6e6f74206265206c6f776572207460408201527f68616e20302e30312520746f74616c20737570706c792e000000000000000000606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526015908201527424b73b30b634b210313637b1b5b99031b7bab73a1760591b604082015260600190565b6020808252602a908201527f5472616e7366657220616d6f756e74206578636565647320746865206d61785360408201526932b63620b6b7bab73a1760b11b606082015260800190565b6020808252601d908201527f4d757374206b656570206275792074617865732062656c6f7720323525000000604082015260600190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b8181101561298d5784516001600160a01b031683529383019391830191600101612968565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff91909116815260200190565b600082198211156129cf576129cf612b5c565b500190565b6000826129ef57634e487b7160e01b81526012600452602481fd5b500490565b80825b6001808611612a065750612a31565b818704821115612a1857612a18612b5c565b80861615612a2557918102915b9490941c9380026129f7565b94509492505050565b600061096160001960ff851684600082612a5657506001610961565b81612a6357506000610961565b8160018114612a795760028114612a8357612ab0565b6001915050610961565b60ff841115612a9457612a94612b5c565b6001841b915084821115612aaa57612aaa612b5c565b50610961565b5060208310610133831016604e8410600b8410161715612ae3575081810a83811115612ade57612ade612b5c565b610961565b612af084848460016129f4565b808604821115612b0257612b02612b5c565b02949350505050565b6000816000190483118215151615612b2557612b25612b5c565b500290565b600082821015612b3c57612b3c612b5c565b500390565b6000600019821415612b5557612b55612b5c565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610a0e57600080fd5b8015158114610a0e57600080fdfe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a2646970667358221220f942fed529fa9c5687afbe6cf9476a18df7cc64fe54423b07ec9ad3951f9343964736f6c63430008000033

Deployed Bytecode Sourcemap

18934:16827:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22165:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23003:161;;;;;;;;;;-1:-1:-1;23003:161:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;20023:35::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;30425:185::-;;;;;;;;;;-1:-1:-1;30425:185:0;;;;;:::i;:::-;;:::i;31649:175::-;;;;;;;;;;-1:-1:-1;31649:175:0;;;;;:::i;:::-;;:::i;22442:100::-;;;;;;;;;;;;;:::i;23172:313::-;;;;;;;;;;-1:-1:-1;23172:313:0;;;;;:::i;:::-;;:::i;28908:233::-;;;;;;;;;;-1:-1:-1;28908:233:0;;;;;:::i;:::-;;:::i;22351:83::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;23493:99::-;;;;;;;;;;-1:-1:-1;23493:99:0;;;;;:::i;:::-;;:::i;20201:33::-;;;;;;;;;;;;;:::i;20498:29::-;;;;;;;;;;;;;:::i;19905:51::-;;;;;;;;;;;;;:::i;34736:148::-;;;;;;;;;;;;;:::i;31363:278::-;;;;;;;;;;-1:-1:-1;31363:278:0;;;;;:::i;:::-;;:::i;20392:34::-;;;;;;;;;;;;;:::i;19505:31::-;;;;;;;;;;;;;:::i;22550:119::-;;;;;;;;;;-1:-1:-1;22550:119:0;;;;;:::i;:::-;;:::i;2723:103::-;;;;;;;;;;;;;:::i;35555:201::-;;;;;;;;;;;;;:::i;20304:28::-;;;;;;;;;;;;;:::i;19848:50::-;;;;;;;;;;;;;:::i;2075:87::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22256:::-;;;;;;;;;;;;;:::i;20152:42::-;;;;;;;;;;;;;:::i;19585:30::-;;;;;;;;;;;;;:::i;29527:466::-;;;;;;;;;;-1:-1:-1;29527:466:0;;;;;:::i;:::-;;:::i;23699:91::-;;;;;;;;;;-1:-1:-1;23699:91:0;;;;;:::i;:::-;;:::i;22677:167::-;;;;;;;;;;-1:-1:-1;22677:167:0;;;;;:::i;:::-;;:::i;19543:35::-;;;;;;;;;;;;;:::i;19963:53::-;;;;;;;;;;;;;:::i;29153:366::-;;;;;;;;;;-1:-1:-1;29153:366:0;;;;;:::i;:::-;;:::i;30001:416::-;;;;;;;;;;-1:-1:-1;30001:416:0;;;;;:::i;:::-;;:::i;34896:155::-;;;;;;;;;;;;;:::i;35225:322::-;;;;;;;;;;-1:-1:-1;35225:322:0;;;;;:::i;:::-;;:::i;28076:358::-;;;;;;;;;;-1:-1:-1;28076:358:0;;;;;:::i;:::-;;:::i;22852:143::-;;;;;;;;;;-1:-1:-1;22852:143:0;;;;;:::i;:::-;;:::i;23600:91::-;;;;;;;;;;-1:-1:-1;23600:91:0;;;;;:::i;:::-;;:::i;30840:239::-;;;;;;;;;;-1:-1:-1;30840:239:0;;;;;:::i;:::-;;:::i;28670:226::-;;;;;;;;;;-1:-1:-1;28670:226:0;;;;;:::i;:::-;;:::i;2981:201::-;;;;;;;;;;-1:-1:-1;2981:201:0;;;;;:::i;:::-;;:::i;28442:220::-;;;;;;;;;;-1:-1:-1;28442:220:0;;;;;:::i;:::-;;:::i;35059:158::-;;;;;;;;;;;;;:::i;30622:206::-;;;;;;;;;;-1:-1:-1;30622:206:0;;;;;:::i;:::-;;:::i;31087:268::-;;;;;;;;;;-1:-1:-1;31087:268:0;;;;;:::i;:::-;;:::i;27952:116::-;;;;;;;;;;-1:-1:-1;27952:116:0;;;;;:::i;:::-;;:::i;19446:23::-;;;;;;;;;;;;;:::i;22165:83::-;22235:5;;;;;;;;;;;;-1:-1:-1;;;22235:5:0;;;;22165:83;:::o;23003:161::-;23078:4;23095:39;23104:12;:10;:12::i;:::-;23118:7;23127:6;23095:8;:39::i;:::-;-1:-1:-1;23152:4:0;23003:161;;;;:::o;20023:35::-;;;;:::o;30425:185::-;1961:13;:11;:13::i;:::-;30525:6:::1;30520:82;30541:8;:15;30537:1;:19;30520:82;;;30598:4;30563:19;:32;30583:8;30592:1;30583:11;;;;;;-1:-1:-1::0;;;30583:11:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;30563:32:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;30563:32:0;:39;;-1:-1:-1;;30563:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30558:3;::::1;::::0;::::1;:::i;:::-;;;;30520:82;;;;30425:185:::0;;:::o;31649:175::-;1961:13;:11;:13::i;:::-;31753:2:::1;31743:6;:12;;31720:61;;;;-1:-1:-1::0;;;31720:61:0::1;;;;;;;:::i;:::-;;;;;;;;;31792:15;:24:::0;31649:175::o;22442:100::-;22495:7;19827:13;19757:2;19827;:13;:::i;:::-;19808:33;;:15;:33;:::i;:::-;22515:19;;22442:100;:::o;23172:313::-;23270:4;23287:36;23297:6;23305:9;23316:6;23287:9;:36::i;:::-;23334:121;23343:6;23351:12;:10;:12::i;:::-;23365:89;23403:6;23365:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;23365:19:0;;;;;;:11;:19;;;;;;23385:12;:10;:12::i;:::-;-1:-1:-1;;;;;23365:33:0;;;;;;;;;;;;-1:-1:-1;23365:33:0;;;:89;:37;:89::i;:::-;23334:8;:121::i;:::-;-1:-1:-1;23473:4:0;23172:313;;;;;;:::o;28908:233::-;1961:13;:11;:13::i;:::-;29003:30:::1;29028:4;29003:20;29021:1;29003:13;:11;:13::i;:::-;:17:::0;::::1;:20::i;:::-;:24:::0;::::1;:30::i;:::-;28990:8;:44;;28982:114;;;;-1:-1:-1::0;;;28982:114:0::1;;;;;;;:::i;:::-;29107:15;:26:::0;28908:233::o;22351:83::-;19757:2;22351:83;:::o;23493:99::-;1961:13;:11;:13::i;:::-;23561:15:::1;:23:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;23561:23:0;;::::1;::::0;;;::::1;::::0;;23493:99::o;20201:33::-;;;;:::o;20498:29::-;;;;:::o;19905:51::-;;;;:::o;34736:148::-;1961:13;:11;:13::i;:::-;34782:23:::1;34808:24;34826:4;34808:9;:24::i;:::-;34782:50;;34843:33;34860:15;34843:16;:33::i;:::-;1985:1;34736:148::o:0;31363:278::-;1961:13;:11;:13::i;:::-;31511:3:::1;31470:37;:18:::0;31493:13;31470:22:::1;:37::i;:::-;:44;;31462:87;;;;-1:-1:-1::0;;;31462:87:0::1;;;;;;;:::i;:::-;31560:15;:36:::0;;;;31607:10:::1;:26:::0;31363:278::o;20392:34::-;;;;:::o;19505:31::-;;;;;;;;;:::o;22550:119::-;-1:-1:-1;;;;;22643:18:0;;22616:7;22643:18;;;:9;:18;;;;;;22550:119;;;;:::o;2723:103::-;1961:13;:11;:13::i;:::-;2788:30:::1;2815:1;2788:18;:30::i;:::-;2723:103::o:0;35555:201::-;1961:13;:11;:13::i;:::-;19827::::1;19757:2;19827;:13;:::i;:::-;19808:33;::::0;:15:::1;:33;:::i;:::-;35607:12;:27:::0;19827:13:::1;19757:2;19827;:13;:::i;:::-;19808:33;::::0;:15:::1;:33;:::i;:::-;35645:13;:28:::0;;;19827:13:::1;::::0;19757:2:::1;::::0;19827:13:::1;:::i;:::-;19808:33;::::0;:15:::1;:33;:::i;:::-;35684:15;:30:::0;35725:15:::1;:23:::0;;-1:-1:-1;;35725:23:0::1;::::0;;35555:201::o;20304:28::-;;;;:::o;19848:50::-;;;;:::o;2075:87::-;2121:7;2148:6;-1:-1:-1;;;;;2148:6:0;2075:87;:::o;22256:::-;22328:7;;;;;;;;;;;;-1:-1:-1;;;22328:7:0;;;;22256:87;:::o;20152:42::-;20190:4;20152:42;:::o;19585:30::-;;;;;;;;;:::o;29527:466::-;1961:13;:11;:13::i;:::-;29642:4:::1;::::0;-1:-1:-1;;;;;29619:27:0;;::::1;29642:4:::0;::::1;29619:27;;29611:75;;;;-1:-1:-1::0;;;29611:75:0::1;;;;;;;:::i;:::-;29717:15;::::0;;-1:-1:-1;;;;;29717:15:0;;::::1;29736:5;29697:36:::0;;;:19:::1;:36;::::0;;;;;;;:44;;-1:-1:-1;;29697:44:0;;::::1;::::0;;;29784:15;;;::::1;29752:48:::0;;:31:::1;:48:::0;;;;;;:56;;;::::1;::::0;;29819:46;;-1:-1:-1;;;;;;29819:46:0::1;::::0;;::::1;::::0;;;::::1;::::0;;;29896:15;::::1;29876:36:::0;;;;;;;;:43;;;::::1;-1:-1:-1::0;29876:43:0;;::::1;::::0;;;29962:15;;;;::::1;29930:48:::0;;;;;;;:55;;;;::::1;;::::0;;29527:466::o;23699:91::-;1961:13;:11;:13::i;:::-;23763:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;23763:19:0;;::::1;::::0;;;::::1;::::0;;23699:91::o;22677:167::-;22755:4;22772:42;22782:12;:10;:12::i;:::-;22796:9;22807:6;22772:9;:42::i;19543:35::-;;;;;;;;;:::o;19963:53::-;;;;:::o;29153:366::-;1961:13;:11;:13::i;:::-;29255:32:::1;29280:6;29255:20;29273:1;29255:13;:11;:13::i;:32::-;29240:10;:48;;29232:114;;;;-1:-1:-1::0;;;29232:114:0::1;;;;;;;:::i;:::-;29380:30;29405:4;29380:20;29398:1;29380:13;:11;:13::i;:30::-;29365:10;:46;;29357:111;;;;-1:-1:-1::0;;;29357:111:0::1;;;;;;;:::i;:::-;29479:19;:32:::0;29153:366::o;30001:416::-;1961:13;:11;:13::i;:::-;30101:4:::1;::::0;-1:-1:-1;;;;;30083:22:0;;::::1;30101:4:::0;::::1;30083:22;;30075:65;;;;-1:-1:-1::0;;;30075:65:0::1;;;;;;;:::i;:::-;30171:10;::::0;;-1:-1:-1;;;;;30171:10:0;;::::1;30185:5;30151:31:::0;;;:19:::1;:31;::::0;;;;;;;:39;;-1:-1:-1;;30151:39:0;;::::1;::::0;;;30233:10;;;::::1;30201:43:::0;;:31:::1;:43:::0;;;;;;:51;;;::::1;::::0;;30263:36;;-1:-1:-1;;;;;;30263:36:0::1;::::0;;::::1;::::0;;;::::1;::::0;;;30330:10;::::1;30310:31:::0;;;;;;;;:38;;;::::1;-1:-1:-1::0;30310:38:0;;::::1;::::0;;;30391:10;;;;::::1;30359:43:::0;;;;;;;:50;;;;::::1;;::::0;;30001:416::o;34896:155::-;1961:13;:11;:13::i;:::-;34979:21:::1;35011:32;34979:21:::0;35011:12:::1;:32::i;35225:322::-:0;1961:13;:11;:13::i;:::-;-1:-1:-1;;;;;35303:20:0;::::1;35318:4;35303:20;;35295:59;;;;-1:-1:-1::0;;;35295:59:0::1;;;;;;;:::i;:::-;35373:36;::::0;-1:-1:-1;;;35373:36:0;;35412:1:::1;::::0;-1:-1:-1;;;;;35373:21:0;::::1;::::0;::::1;::::0;:36:::1;::::0;35403:4:::1;::::0;35373:36:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;35365:62;;;;-1:-1:-1::0;;;35365:62:0::1;;;;;;;:::i;:::-;35452:36;::::0;-1:-1:-1;;;35452:36:0;;35438:11:::1;::::0;-1:-1:-1;;;;;35452:21:0;::::1;::::0;::::1;::::0;:36:::1;::::0;35482:4:::1;::::0;35452:36:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35499:40;::::0;-1:-1:-1;;;35499:40:0;;35438:50;;-1:-1:-1;;;;;;35499:20:0;::::1;::::0;::::1;::::0;:40:::1;::::0;35520:10:::1;::::0;35438:50;;35499:40:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28076:358::-:0;1961:13;:11;:13::i;:::-;28152:11:::1;::::0;::::1;;28151:12;28143:48;;;;-1:-1:-1::0;;;28143:48:0::1;;;;;;;:::i;:::-;28202:11;:18:::0;;-1:-1:-1;;;;28202:18:0;;::::1;::::0;::::1;28231:22;::::0;::::1;::::0;;28286:31:::1;28311:5;28286:20;28303:2;19827:13;19757:2;28303::::0;19827:13:::1;:::i;:::-;19808:33;::::0;:15:::1;:33;:::i;28286:31::-;28264:19;:53:::0;28328:11:::1;:18:::0;;-1:-1:-1;;28328:18:0::1;28342:4;28328:18;::::0;;28376:12:::1;28357:16;:31:::0;-1:-1:-1;28399:27:0;28076:358::o;22852:143::-;-1:-1:-1;;;;;22960:18:0;;;22933:7;22960:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;22852:143::o;23600:91::-;1961:13;:11;:13::i;:::-;23664:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;23664:19:0;;::::1;::::0;;;::::1;::::0;;23600:91::o;30840:239::-;1961:13;:11;:13::i;:::-;30937:6:::1;30932:140;30953:8;:15;30949:1;:19;30932:140;;;31008:14;::::0;30993:11;;-1:-1:-1;;;;;31008:14:0;;::::1;::::0;30993:8;;31002:1;;30993:11;::::1;;;-1:-1:-1::0;;;30993:11:0::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;30993:29:0::1;;30990:70;;31054:6;31024:14;:27;31039:8;31048:1;31039:11;;;;;;-1:-1:-1::0;;;31039:11:0::1;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;31024:27:0::1;-1:-1:-1::0;;;;;31024:27:0::1;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;30990:70;30970:3:::0;::::1;::::0;::::1;:::i;:::-;;;;30932:140;;28670:226:::0;1961:13;:11;:13::i;:::-;28761:31:::1;28786:5;28761:20;28779:1;28761:13;:11;:13::i;:31::-;28749:7;:44;;28741:113;;;;-1:-1:-1::0;;;28741:113:0::1;;;;;;;:::i;:::-;28865:13;:23:::0;28670:226::o;2981:201::-;1961:13;:11;:13::i;:::-;-1:-1:-1;;;;;3070:22:0;::::1;3062:73;;;;-1:-1:-1::0;;;3062:73:0::1;;;;;;;:::i;:::-;3146:28;3165:8;3146:18;:28::i;28442:220::-:0;1961:13;:11;:13::i;:::-;28530:31:::1;28555:5;28530:20;28548:1;28530:13;:11;:13::i;:31::-;28519:6;:43;;28511:111;;;;-1:-1:-1::0;;;28511:111:0::1;;;;;;;:::i;:::-;28633:12;:21:::0;28442:220::o;35059:158::-;1961:13;:11;:13::i;:::-;35115:12:::1;35159:10;-1:-1:-1::0;;;;;35151:24:0::1;35183:21;35151:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;35059:158:0:o;30622:206::-;1961:13;:11;:13::i;:::-;30731:6:::1;30726:94;30747:8;:15;30743:1;:19;30726:94;;;30816:4;30769:31;:44;30801:8;30810:1;30801:11;;;;;;-1:-1:-1::0;;;30801:11:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;30769:44:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;30769:44:0;:51;;-1:-1:-1;;30769:51:0::1;::::0;::::1;;::::0;;;::::1;::::0;;30764:3;::::1;::::0;::::1;:::i;:::-;;;;30726:94;;31087:268:::0;1961:13;:11;:13::i;:::-;31230:3:::1;31191:35;:17:::0;31213:12;31191:21:::1;:35::i;:::-;:42;;31183:84;;;;-1:-1:-1::0;;;31183:84:0::1;;;;;;;:::i;:::-;31278:14;:34:::0;;;;31323:9:::1;:24:::0;31087:268::o;27952:116::-;-1:-1:-1;;;;;28038:22:0;28014:4;28038:22;;;:14;:22;;;;;;;;;27952:116::o;19446:23::-;;;;;;:::o;10309:98::-;10367:7;10394:5;10398:1;10394;:5;:::i;685:98::-;765:10;685:98;:::o;23798:323::-;23900:4;;-1:-1:-1;;;;;23891:13:0;;;23900:4;;23891:13;;23883:62;;;;-1:-1:-1;;;23883:62:0;;;;;;;:::i;:::-;23975:4;;-1:-1:-1;;;;;23964:15:0;;;23975:4;;23964:15;;23956:62;;;;-1:-1:-1;;;23956:62:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24029:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;24081:32;;;;;24059:6;;24081:32;:::i;:::-;;;;;;;;23798:323;;;:::o;2240:132::-;2315:12;:10;:12::i;:::-;-1:-1:-1;;;;;2304:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2304:23:0;;2296:68;;;;-1:-1:-1;;;2296:68:0;;;;;;;:::i;24129:2255::-;24225:4;;-1:-1:-1;;;;;24217:12:0;;;24225:4;;24217:12;;24209:62;;;;-1:-1:-1;;;24209:62:0;;;;;;;:::i;:::-;24296:4;;-1:-1:-1;;;;;24290:10:0;;;24296:4;;24290:10;;24282:58;;;;-1:-1:-1;;;24282:58:0;;;;;;;:::i;:::-;24368:1;24359:6;:10;24351:64;;;;-1:-1:-1;;;24351:64:0;;;;;;;:::i;:::-;24441:4;24426:12;24502:7;:5;:7::i;:::-;-1:-1:-1;;;;;24494:15:0;:4;-1:-1:-1;;;;;24494:15:0;;;:32;;;;;24519:7;:5;:7::i;:::-;-1:-1:-1;;;;;24513:13:0;:2;-1:-1:-1;;;;;24513:13:0;;;24494:32;:46;;;;-1:-1:-1;24536:4:0;;-1:-1:-1;;;;;24530:10:0;;;24536:4;;24530:10;;24494:46;:60;;;;-1:-1:-1;24550:4:0;;-1:-1:-1;;;;;24544:10:0;;;24550:4;;24544:10;;24494:60;:74;;;;-1:-1:-1;24559:9:0;;;;;;;24558:10;24494:74;24490:1356;;;-1:-1:-1;;;;;24594:20:0;;;;;;:14;:20;;;;;;;;24593:21;:44;;;;-1:-1:-1;;;;;;24619:18:0;;;;;;:14;:18;;;;;;;;24618:19;24593:44;24585:53;;;;;;24659:11;;;;24655:109;;-1:-1:-1;;;;;24680:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;24709:23:0;;;;;;:19;:23;;;;;;;;24680:52;24672:92;;;;-1:-1:-1;;;24672:92:0;;;;;;;:::i;:::-;24785:15;;;;;;;24781:433;;;24839:16;;-1:-1:-1;;;;;24825:31:0;;;24839:16;;24825:31;;;;:64;;-1:-1:-1;24874:14:0;;-1:-1:-1;;;;;24860:29:0;;;24874:14;;24860:29;;24825:64;24821:378;;;24960:15;;24945:30;;:12;:30;:::i;:::-;24932:9;24922:20;;;;:9;:20;;;;;;:53;:103;;;;-1:-1:-1;25010:15:0;;24995:30;;:12;:30;:::i;:::-;-1:-1:-1;;;;;24979:13:0;;;;;;:9;:13;;;;;;:46;24922:103;24914:156;;;;-1:-1:-1;;;24914:156:0;;;;;;;:::i;:::-;25103:9;25093:20;;;;:9;:20;;;;;;25116:12;25093:35;;;;-1:-1:-1;;;;;25151:13:0;;;;;;:28;24821:378;25242:14;;-1:-1:-1;;;;;25234:22:0;;;25242:14;;25234:22;:57;;;;-1:-1:-1;25274:16:0;;-1:-1:-1;;;;;25260:31:0;;;25274:16;;25260:31;;25234:57;:97;;;;-1:-1:-1;;;;;;25296:35:0;;;;;;:31;:35;;;;;;;;25295:36;25234:97;25230:323;;;25370:12;;25360:6;:22;;25352:76;;;;-1:-1:-1;;;25352:76:0;;;;;;;:::i;:::-;25481:15;;25471:6;25455:13;25465:2;25455:9;:13::i;:::-;:22;;;;:::i;:::-;:41;;25447:90;;;;-1:-1:-1;;;25447:90:0;;;;;;;:::i;:::-;25591:14;;-1:-1:-1;;;;;25585:20:0;;;25591:14;;25585:20;:57;;;;-1:-1:-1;25625:16:0;;-1:-1:-1;;;;;25609:33:0;;;25625:16;;25609:33;;25585:57;:99;;;;-1:-1:-1;;;;;;25647:37:0;;;;;;:31;:37;;;;;;;;25646:38;25585:99;25581:254;;;25723:13;;25713:6;:23;;25705:78;;;;-1:-1:-1;;;25705:78:0;;;;;;;:::i;:::-;-1:-1:-1;25815:4:0;25581:254;-1:-1:-1;;;;;25861:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;25890:23:0;;;;;;:19;:23;;;;;;;;25861:52;:68;;;-1:-1:-1;25918:11:0;;;;;;;25917:12;25861:68;25858:88;;;25941:5;25931:15;;25858:88;25959:28;25990:24;26008:4;25990:9;:24::i;:::-;25959:55;;26025:12;26064:19;;26041:20;:42;26040:58;;;;;26088:10;26040:58;26025:73;;26115:7;:22;;;;-1:-1:-1;26126:11:0;;;;;;;26115:22;:36;;;;-1:-1:-1;26142:9:0;;;;;;;26141:10;26115:36;:66;;;;-1:-1:-1;;;;;;26156:25:0;;;;;;:19;:25;;;;;;;;26155:26;26115:66;:94;;;;-1:-1:-1;;;;;;26186:23:0;;;;;;:19;:23;;;;;;;;26185:24;26115:94;26111:200;;;26226:9;:16;;-1:-1:-1;;26226:16:0;;;;;26257:10;:8;:10::i;:::-;26282:9;:17;;-1:-1:-1;;26282:17:0;;;26111:200;26323:53;26338:4;26344:2;26348:6;26356:7;26365:10;26323:14;:53::i;:::-;24129:2255;;;;;;;:::o;11451:240::-;11571:7;11632:12;11624:6;;;;11616:29;;;;-1:-1:-1;;;11616:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;11667:5:0;;;11451:240::o;9910:98::-;9968:7;9995:5;9999:1;9995;:5;:::i;27305:474::-;27395:16;;;27409:1;27395:16;;;;;;;;27371:21;;27395:16;;;;;;;;;;-1:-1:-1;27395:16:0;27371:40;;27440:4;27422;27427:1;27422:7;;;;;;-1:-1:-1;;;27422:7:0;;;;;;;;;-1:-1:-1;;;;;27422:23:0;;;:7;;;;;;;;;;:23;;;;27466:16;;:23;;;-1:-1:-1;;;27466:23:0;;;;:16;;;;;:21;;:23;;;;;27422:7;;27466:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27456:4;27461:1;27456:7;;;;;;-1:-1:-1;;;27456:7:0;;;;;;;;;-1:-1:-1;;;;;27456:33:0;;;:7;;;;;;;;;:33;27532:16;;27500:63;;27517:4;;27532:16;27551:11;27500:8;:63::i;:::-;27574:16;;:197;;-1:-1:-1;;;27574:197:0;;-1:-1:-1;;;;;27574:16:0;;;;:67;;:197;;27656:11;;27574:16;;27698:4;;27725;;27745:15;;27574:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27305:474;;:::o;9172:98::-;9230:7;9257:5;9261:1;9257;:5;:::i;3342:191::-;3416:16;3435:6;;-1:-1:-1;;;;;3452:17:0;;;-1:-1:-1;;;;;;3452:17:0;;;;;;3485:40;;3435:6;;;;;;;3485:40;;3416:16;3485:40;3342:191;;:::o;27795:149::-;27852:15;;-1:-1:-1;;;;;27852:15:0;:39;27877:13;:6;27888:1;27877:10;:13::i;:::-;27852:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27902:10:0;;-1:-1:-1;;;;;27902:10:0;:34;27922:13;:6;27933:1;27922:10;:13::i;:::-;27902:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27795:149;:::o;26392:905::-;26431:23;26457:24;26475:4;26457:9;:24::i;:::-;26431:50;;26492:25;26521:37;26544:13;;26521:18;;:22;;:37;;;;:::i;:::-;26492:66;-1:-1:-1;26569:12:0;26606:20;;;:46;;-1:-1:-1;26630:22:0;;26606:46;26602:59;;;26654:7;;;;;26602:59;26695:19;;:26;;26719:1;26695:23;:26::i;:::-;26677:15;:44;26673:94;;;26741:19;;:26;;26765:1;26741:23;:26::i;:::-;26723:44;;26673:94;26808:21;26842:33;26859:15;26842:16;:33::i;:::-;26896:18;26917:44;:21;26943:17;26917:25;:44::i;:::-;26896:65;;26972:22;26997:57;27036:17;26997:34;27012:18;;26997:10;:14;;:34;;;;:::i;:57::-;27096:1;27075:18;:22;;;27108:13;:17;27159:15;;27151:56;;26972:82;;-1:-1:-1;;;;;;27159:15:0;;26972:82;;27151:56;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;27239:10:0;;27231:58;;27138:69;;-1:-1:-1;;;;;;27239:10:0;;27263:21;;27231:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;26392:905:0:o;32540:322::-;32666:7;32661:86;;32675:14;:12;:14::i;:::-;32661:86;;;32714:33;32724:6;32732;32740;32714:9;:33::i;:::-;32705:42;;32661:86;32760:44;32778:6;32786:9;32797:6;32760:17;:44::i;:::-;32830:7;32825:29;;32839:15;:13;:15::i;:::-;32540:322;;;;;:::o;9553:98::-;9611:7;9638:5;9642:1;9638;:5;:::i;31832:451::-;31879:14;;:19;:37;;;;-1:-1:-1;31902:9:0;;:14;31879:37;:61;;;;-1:-1:-1;31920:15:0;;:20;31879:61;:80;;;;-1:-1:-1;31944:10:0;;:15;31879:80;31875:93;;;31961:7;;31875:93;32006:14;;;31980:23;:40;32052:9;;;32031:18;:30;32099:15;;;32072:24;:42;32147:10;;;32125:19;:32;-1:-1:-1;32178:18:0;;;;32207:13;;;;32231:19;;;32261:14;31832:451::o;33153:1027::-;33234:7;33254:18;33283:13;33307:8;33370:12;33348:18;;33329:16;;:37;;;;:::i;:::-;:53;33326:484;;33412:13;:11;:13::i;:::-;33399:26;;33451:21;:19;:21::i;:::-;33440:32;;33493:16;:14;:16::i;:::-;33487:22;;33326:484;;;33555:21;33569:6;33555:13;:21::i;:::-;33542:34;;33595:6;33591:208;;;-1:-1:-1;;33633:15:0;;33673:10;;33591:208;;;-1:-1:-1;;33735:14:0;;33774:9;;33591:208;33830:12;33857:14;;33853:213;;33895:39;20190:4;33895:22;:6;33906:10;33895;:22::i;:39::-;33888:46;-1:-1:-1;33989:10:0;33971:15;33978:8;33888:46;33971:15;:::i;:::-;:28;;;;:::i;:::-;33949:18;;:50;;;;;;;:::i;:::-;;;;-1:-1:-1;34044:10:0;;-1:-1:-1;34031:10:0;34038:3;34031:4;:10;:::i;:::-;:23;;;;:::i;:::-;34014:13;;:40;;;;;;;:::i;:::-;;;;-1:-1:-1;;33853:213:0;34082:8;;34078:60;;34092:46;34110:6;34126:4;34133;34092:17;:46::i;:::-;34158:14;34168:4;34158:14;;:::i;:::-;;33153:1027;-1:-1:-1;;;;;;;;33153:1027:0:o;32870:275::-;-1:-1:-1;;;;;32988:17:0;;;;;;:9;:17;;;;;;:30;;33010:7;32988:21;:30::i;:::-;-1:-1:-1;;;;;32968:17:0;;;;;;;:9;:17;;;;;;:50;;;;33052:20;;;;;;;:33;;33077:7;33052:24;:33::i;:::-;-1:-1:-1;;;;;33029:20:0;;;;;;;:9;:20;;;;;;;:56;;;;33101:36;;;;;;;;;;33129:7;;33101:36;:::i;32295:229::-;32356:23;;32339:14;:40;32402:18;;32390:9;:30;32449:24;;32431:15;:42;32497:19;;32484:10;:32;32295:229::o;34378:82::-;34449:3;34378:82;:::o;34468:90::-;34547:3;34468:90;:::o;34188:182::-;34245:7;34269:6;34265:50;;;34304:10;;34284:15;;:31;;:19;:31::i;:::-;34277:38;;;;34265:50;34352:9;;34333:14;;:29;;:18;:29::i;:::-;34326:36;34188:182;-1:-1:-1;;34188:182:0:o;14:138:1:-;84:20;;113:33;84:20;113:33;:::i;157:132::-;224:20;;253:30;224:20;253:30;:::i;294:259::-;;406:2;394:9;385:7;381:23;377:32;374:2;;;427:6;419;412:22;374:2;471:9;458:23;490:33;517:5;490:33;:::i;558:263::-;;681:2;669:9;660:7;656:23;652:32;649:2;;;702:6;694;687:22;649:2;739:9;733:16;758:33;785:5;758:33;:::i;826:402::-;;;955:2;943:9;934:7;930:23;926:32;923:2;;;976:6;968;961:22;923:2;1020:9;1007:23;1039:33;1066:5;1039:33;:::i;:::-;1091:5;-1:-1:-1;1148:2:1;1133:18;;1120:32;1161:35;1120:32;1161:35;:::i;:::-;1215:7;1205:17;;;913:315;;;;;:::o;1233:470::-;;;;1379:2;1367:9;1358:7;1354:23;1350:32;1347:2;;;1400:6;1392;1385:22;1347:2;1444:9;1431:23;1463:33;1490:5;1463:33;:::i;:::-;1515:5;-1:-1:-1;1572:2:1;1557:18;;1544:32;1585:35;1544:32;1585:35;:::i;:::-;1337:366;;1639:7;;-1:-1:-1;;;1693:2:1;1678:18;;;;1665:32;;1337:366::o;1708:327::-;;;1837:2;1825:9;1816:7;1812:23;1808:32;1805:2;;;1858:6;1850;1843:22;1805:2;1902:9;1889:23;1921:33;1948:5;1921:33;:::i;:::-;1973:5;2025:2;2010:18;;;;1997:32;;-1:-1:-1;;;1795:240:1:o;2040:1238::-;;;2191:2;2179:9;2170:7;2166:23;2162:32;2159:2;;;2212:6;2204;2197:22;2159:2;2257:9;2244:23;2286:18;2327:2;2319:6;2316:14;2313:2;;;2348:6;2340;2333:22;2313:2;2391:6;2380:9;2376:22;2366:32;;2436:7;2429:4;2425:2;2421:13;2417:27;2407:2;;2463:6;2455;2448:22;2407:2;2504;2491:16;2526:4;2549:2;2545;2542:10;2539:2;;;2555:18;;:::i;:::-;2602:2;2598;2594:11;2634:2;2628:9;2685:2;2680;2672:6;2668:15;2664:24;2738:6;2726:10;2723:22;2718:2;2706:10;2703:18;2700:46;2697:2;;;2749:18;;:::i;:::-;2785:2;2778:22;2835:18;;;2869:15;;;;-1:-1:-1;2904:11:1;;;2934;;;2930:20;;2927:33;-1:-1:-1;2924:2:1;;;2978:6;2970;2963:22;2924:2;3005:6;2996:15;;3020:171;3034:2;3031:1;3028:9;3020:171;;;3091:25;3112:3;3091:25;:::i;:::-;3079:38;;3052:1;3045:9;;;;;3137:12;;;;3169;;3020:171;;;-1:-1:-1;3210:6:1;-1:-1:-1;3235:37:1;;-1:-1:-1;3253:18:1;;;3235:37;:::i;:::-;3225:47;;;;;;2149:1129;;;;;:::o;3283:253::-;;3392:2;3380:9;3371:7;3367:23;3363:32;3360:2;;;3413:6;3405;3398:22;3360:2;3457:9;3444:23;3476:30;3500:5;3476:30;:::i;3541:257::-;;3661:2;3649:9;3640:7;3636:23;3632:32;3629:2;;;3682:6;3674;3667:22;3629:2;3719:9;3713:16;3738:30;3762:5;3738:30;:::i;3803:190::-;;3915:2;3903:9;3894:7;3890:23;3886:32;3883:2;;;3936:6;3928;3921:22;3883:2;-1:-1:-1;3964:23:1;;3873:120;-1:-1:-1;3873:120:1:o;3998:194::-;;4121:2;4109:9;4100:7;4096:23;4092:32;4089:2;;;4142:6;4134;4127:22;4089:2;-1:-1:-1;4170:16:1;;4079:113;-1:-1:-1;4079:113:1:o;4197:258::-;;;4326:2;4314:9;4305:7;4301:23;4297:32;4294:2;;;4347:6;4339;4332:22;4294:2;-1:-1:-1;;4375:23:1;;;4445:2;4430:18;;;4417:32;;-1:-1:-1;4284:171:1:o;4460:205::-;4660:3;4651:14::o;4670:203::-;-1:-1:-1;;;;;4834:32:1;;;;4816:51;;4804:2;4789:18;;4771:102::o;4878:274::-;-1:-1:-1;;;;;5070:32:1;;;;5052:51;;5134:2;5119:18;;5112:34;5040:2;5025:18;;5007:145::o;5157:187::-;5322:14;;5315:22;5297:41;;5285:2;5270:18;;5252:92::o;5349:603::-;;5490:2;5519;5508:9;5501:21;5551:6;5545:13;5594:6;5589:2;5578:9;5574:18;5567:34;5619:4;5632:140;5646:6;5643:1;5640:13;5632:140;;;5741:14;;;5737:23;;5731:30;5707:17;;;5726:2;5703:26;5696:66;5661:10;;5632:140;;;5790:6;5787:1;5784:13;5781:2;;;5860:4;5855:2;5846:6;5835:9;5831:22;5827:31;5820:45;5781:2;-1:-1:-1;5936:2:1;5915:15;-1:-1:-1;;5911:29:1;5896:45;;;;5943:2;5892:54;;5470:482;-1:-1:-1;;;5470:482:1:o;5957:332::-;6159:2;6141:21;;;6198:1;6178:18;;;6171:29;-1:-1:-1;;;6231:2:1;6216:18;;6209:39;6280:2;6265:18;;6131:158::o;6294:399::-;6496:2;6478:21;;;6535:2;6515:18;;;6508:30;6574:34;6569:2;6554:18;;6547:62;-1:-1:-1;;;6640:2:1;6625:18;;6618:33;6683:3;6668:19;;6468:225::o;6698:354::-;6900:2;6882:21;;;6939:2;6919:18;;;6912:30;6978:32;6973:2;6958:18;;6951:60;7043:2;7028:18;;6872:180::o;7057:402::-;7259:2;7241:21;;;7298:2;7278:18;;;7271:30;7337:34;7332:2;7317:18;;7310:62;-1:-1:-1;;;7403:2:1;7388:18;;7381:36;7449:3;7434:19;;7231:228::o;7464:398::-;7666:2;7648:21;;;7705:2;7685:18;;;7678:30;7744:34;7739:2;7724:18;;7717:62;-1:-1:-1;;;7810:2:1;7795:18;;7788:32;7852:3;7837:19;;7638:224::o;7867:420::-;8069:2;8051:21;;;8108:2;8088:18;;;8081:30;8147:34;8142:2;8127:18;;8120:62;8218:26;8213:2;8198:18;;8191:54;8277:3;8262:19;;8041:246::o;8292:347::-;8494:2;8476:21;;;8533:2;8513:18;;;8506:30;8572:25;8567:2;8552:18;;8545:53;8630:2;8615:18;;8466:173::o;8644:404::-;8846:2;8828:21;;;8885:2;8865:18;;;8858:30;8924:34;8919:2;8904:18;;8897:62;-1:-1:-1;;;8990:2:1;8975:18;;8968:38;9038:3;9023:19;;8818:230::o;9053:351::-;9255:2;9237:21;;;9294:2;9274:18;;;9267:30;9333:29;9328:2;9313:18;;9306:57;9395:2;9380:18;;9227:177::o;9409:421::-;9611:2;9593:21;;;9650:2;9630:18;;;9623:30;9689:34;9684:2;9669:18;;9662:62;9760:27;9755:2;9740:18;;9733:55;9820:3;9805:19;;9583:247::o;9835:417::-;10037:2;10019:21;;;10076:2;10056:18;;;10049:30;10115:34;10110:2;10095:18;;10088:62;-1:-1:-1;;;10181:2:1;10166:18;;10159:51;10242:3;10227:19;;10009:243::o;10257:416::-;10459:2;10441:21;;;10498:2;10478:18;;;10471:30;10537:34;10532:2;10517:18;;10510:62;-1:-1:-1;;;10603:2:1;10588:18;;10581:50;10663:3;10648:19;;10431:242::o;10678:399::-;10880:2;10862:21;;;10919:2;10899:18;;;10892:30;10958:34;10953:2;10938:18;;10931:62;-1:-1:-1;;;11024:2:1;11009:18;;11002:33;11067:3;11052:19;;10852:225::o;11082:400::-;11284:2;11266:21;;;11323:2;11303:18;;;11296:30;11362:34;11357:2;11342:18;;11335:62;-1:-1:-1;;;11428:2:1;11413:18;;11406:34;11472:3;11457:19;;11256:226::o;11487:405::-;11689:2;11671:21;;;11728:2;11708:18;;;11701:30;11767:34;11762:2;11747:18;;11740:62;-1:-1:-1;;;11833:2:1;11818:18;;11811:39;11882:3;11867:19;;11661:231::o;11897:356::-;12099:2;12081:21;;;12118:18;;;12111:30;12177:34;12172:2;12157:18;;12150:62;12244:2;12229:18;;12071:182::o;12258:350::-;12460:2;12442:21;;;12499:2;12479:18;;;12472:30;12538:28;12533:2;12518:18;;12511:56;12599:2;12584:18;;12432:176::o;12613:405::-;12815:2;12797:21;;;12854:2;12834:18;;;12827:30;12893:34;12888:2;12873:18;;12866:62;-1:-1:-1;;;12959:2:1;12944:18;;12937:39;13008:3;12993:19;;12787:231::o;13023:401::-;13225:2;13207:21;;;13264:2;13244:18;;;13237:30;13303:34;13298:2;13283:18;;13276:62;-1:-1:-1;;;13369:2:1;13354:18;;13347:35;13414:3;13399:19;;13197:227::o;13429:354::-;13631:2;13613:21;;;13670:2;13650:18;;;13643:30;13709:32;13704:2;13689:18;;13682:60;13774:2;13759:18;;13603:180::o;13788:419::-;13990:2;13972:21;;;14029:2;14009:18;;;14002:30;14068:34;14063:2;14048:18;;14041:62;14139:25;14134:2;14119:18;;14112:53;14197:3;14182:19;;13962:245::o;14212:400::-;14414:2;14396:21;;;14453:2;14433:18;;;14426:30;14492:34;14487:2;14472:18;;14465:62;-1:-1:-1;;;14558:2:1;14543:18;;14536:34;14602:3;14587:19;;14386:226::o;14617:345::-;14819:2;14801:21;;;14858:2;14838:18;;;14831:30;-1:-1:-1;;;14892:2:1;14877:18;;14870:51;14953:2;14938:18;;14791:171::o;14967:406::-;15169:2;15151:21;;;15208:2;15188:18;;;15181:30;15247:34;15242:2;15227:18;;15220:62;-1:-1:-1;;;15313:2:1;15298:18;;15291:40;15363:3;15348:19;;15141:232::o;15378:353::-;15580:2;15562:21;;;15619:2;15599:18;;;15592:30;15658:31;15653:2;15638:18;;15631:59;15722:2;15707:18;;15552:179::o;15736:177::-;15882:25;;;15870:2;15855:18;;15837:76::o;15918:983::-;;16228:3;16217:9;16213:19;16259:6;16248:9;16241:25;16285:2;16323:6;16318:2;16307:9;16303:18;16296:34;16366:3;16361:2;16350:9;16346:18;16339:31;16390:6;16425;16419:13;16456:6;16448;16441:22;16494:3;16483:9;16479:19;16472:26;;16533:2;16525:6;16521:15;16507:29;;16554:4;16567:195;16581:6;16578:1;16575:13;16567:195;;;16646:13;;-1:-1:-1;;;;;16642:39:1;16630:52;;16737:15;;;;16702:12;;;;16678:1;16596:9;16567:195;;;-1:-1:-1;;;;;;;16818:32:1;;;;16813:2;16798:18;;16791:60;-1:-1:-1;;;16882:3:1;16867:19;16860:35;16779:3;16189:712;-1:-1:-1;;;16189:712:1:o;16906:184::-;17078:4;17066:17;;;;17048:36;;17036:2;17021:18;;17003:87::o;17095:128::-;;17166:1;17162:6;17159:1;17156:13;17153:2;;;17172:18;;:::i;:::-;-1:-1:-1;17208:9:1;;17143:80::o;17228:217::-;;17294:1;17284:2;;-1:-1:-1;;;17319:31:1;;17373:4;17370:1;17363:15;17401:4;17326:1;17391:15;17284:2;-1:-1:-1;17430:9:1;;17274:171::o;17450:453::-;17546:6;17569:5;17583:314;17632:1;17669:2;17659:8;17656:16;17646:2;;17676:5;;;17646:2;17717:4;17712:3;17708:14;17702:4;17699:24;17696:2;;;17726:18;;:::i;:::-;17776:2;17766:8;17762:17;17759:2;;;17791:16;;;;17759:2;17870:17;;;;;17830:15;;17583:314;;;17527:376;;;;;;;:::o;17908:148::-;;17995:55;-1:-1:-1;;18036:4:1;18022:19;;18016:4;18061:922;18145:8;18135:2;;-1:-1:-1;18186:1:1;18200:5;;18135:2;18234:4;18224:2;;-1:-1:-1;18271:1:1;18285:5;;18224:2;18316:4;18334:1;18329:59;;;;18402:1;18397:183;;;;18309:271;;18329:59;18359:1;18350:10;;18373:5;;;18397:183;18434:3;18424:8;18421:17;18418:2;;;18441:18;;:::i;:::-;18497:1;18487:8;18483:16;18474:25;;18525:3;18518:5;18515:14;18512:2;;;18532:18;;:::i;:::-;18565:5;;;18309:271;;18664:2;18654:8;18651:16;18645:3;18639:4;18636:13;18632:36;18626:2;18616:8;18613:16;18608:2;18602:4;18599:12;18595:35;18592:77;18589:2;;;-1:-1:-1;18701:19:1;;;18736:14;;;18733:2;;;18753:18;;:::i;:::-;18786:5;;18589:2;18833:42;18871:3;18861:8;18855:4;18852:1;18833:42;:::i;:::-;18908:6;18903:3;18899:16;18890:7;18887:29;18884:2;;;18919:18;;:::i;:::-;18957:20;;18125:858;-1:-1:-1;;;;18125:858:1:o;18988:168::-;;19094:1;19090;19086:6;19082:14;19079:1;19076:21;19071:1;19064:9;19057:17;19053:45;19050:2;;;19101:18;;:::i;:::-;-1:-1:-1;19141:9:1;;19040:116::o;19161:125::-;;19229:1;19226;19223:8;19220:2;;;19234:18;;:::i;:::-;-1:-1:-1;19271:9:1;;19210:76::o;19291:135::-;;-1:-1:-1;;19351:17:1;;19348:2;;;19371:18;;:::i;:::-;-1:-1:-1;19418:1:1;19407:13;;19338:88::o;19431:127::-;19492:10;19487:3;19483:20;19480:1;19473:31;19523:4;19520:1;19513:15;19547:4;19544:1;19537:15;19563:127;19624:10;19619:3;19615:20;19612:1;19605:31;19655:4;19652:1;19645:15;19679:4;19676:1;19669:15;19695:133;-1:-1:-1;;;;;19772:31:1;;19762:42;;19752:2;;19818:1;19815;19808:12;19833:120;19921:5;19914:13;19907:21;19900:5;19897:32;19887:2;;19943:1;19940;19933:12

Swarm Source

ipfs://f942fed529fa9c5687afbe6cf9476a18df7cc64fe54423b07ec9ad3951f93439
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.