ETH Price: $3,675.63 (+0.98%)

Token

ERC-20: Jōkotō (KOTŌ)
 

Overview

Max Total Supply

1,000,000,000,000 KOTŌ

Holders

50

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
663,727,677.690765438781505489 KOTŌ

Value
$0.00
0x9cd46e6cd165d78282a7b7b310359adde78e97ad
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:
Jokoto

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-24
*/

/**

    The sword has to be more than a simple weapon;
    it has to be an answer to life's questions.

    https://t.me/JokotoKoto

**/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.17;

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

    IUniswapV2Router02 private _uniswapV2Router;

    mapping (address => uint256) private _balances;

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

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

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

    string private constant _name = "\x4a\xc5\x8d\x6b\x6f\x74\xc5\x8d";
    string private constant _symbol = "\x4b\x4f\x54\xc5\x8c";

    uint8 private constant _decimals = 18;

    uint256 private constant _totalSupply = 1e12 * (10**_decimals);
    uint256 public mxBuy = _totalSupply;
    uint256 public mxSell = _totalSupply;
    uint256 public mxWallet = _totalSupply;
    uint256 public constant FEE_DIVISOR = 1000;
    uint256 public buyFee = 50;
    uint256 private _previousBuyFee = buyFee;
    uint256 public sellFee = 50;
    uint256 private _previousSellFee = sellFee;
    uint256 private _tokensForTreasury;
    uint256 private _swapTokensAtAmount = 0;

    address payable private treasuryWallet;
    address private _uniswapV2Pair;
    address private DEAD = 0x000000000000000000000000000000000000dEaD;
    address private ZERO = 0x0000000000000000000000000000000000000000;
    
    constructor () {
        treasuryWallet = payable(_msgSender());
        _balances[_msgSender()] = _totalSupply;

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

        _isExcludedMaxTransactionAmount[owner()] = true;
        _isExcludedMaxTransactionAmount[address(this)] = true;
        _isExcludedMaxTransactionAmount[DEAD] = 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, "\x4b\x4f\x54\xc5\x8c: transfer amount exceeds allowance"));
        return true;
    }

    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, "\x4b\x4f\x54\xc5\x8c: approve from the zero address");
        require(spender != ZERO, "\x4b\x4f\x54\xc5\x8c: 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, "\x4b\x4f\x54\xc5\x8c: transfer from the zero address");
        require(to != ZERO, "\x4b\x4f\x54\xc5\x8c: transfer to the zero address");
        require(amount > 0, "\x4b\x4f\x54\xc5\x8c: Transfer amount must be greater than zero");
        bool takeFee = true;
        bool shouldSwap = false;
        if (from != owner() && to != owner() && to != ZERO && to != DEAD && !_swapping) {
            if(!tradingOpen) require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "\x4b\x4f\x54\xc5\x8c: Trading is not allowed yet.");

            if (from == _uniswapV2Pair && to != address(_uniswapV2Router) && !_isExcludedMaxTransactionAmount[to]) {
                require(amount <= mxBuy, "\x4b\x4f\x54\xc5\x8c: Transfer amount exceeds the mxBuy.");
                require(balanceOf(to) + amount <= mxWallet, "\x4b\x4f\x54\xc5\x8c: Exceeds maximum wallet token amount.");
            }
            
            if (to == _uniswapV2Pair && from != address(_uniswapV2Router) && !_isExcludedMaxTransactionAmount[from]) {
                require(amount <= mxSell, "\x4b\x4f\x54\xc5\x8c: Transfer amount exceeds the mxSell.");
                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));
        bool success;
        
        if (contractBalance == 0 || _tokensForTreasury == 0) return;

        if (contractBalance > _swapTokensAtAmount * 5) contractBalance = _swapTokensAtAmount * 5;

        swapTokensForETH(contractBalance); 
        
        _tokensForTreasury = 0;
        
        (success,) = address(treasuryWallet).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);
    }
    
    function launch() public onlyOwner {
        require(!tradingOpen,"\x4b\x4f\x54\xc5\x8c: Trading is already open");
        _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(_uniswapV2Router), _totalSupply);
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        _uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        swapEnabled = true;
        mxBuy = _totalSupply.mul(12).div(1000);
        mxSell = _totalSupply.mul(12).div(1000);
        mxWallet = _totalSupply.mul(12).div(1000);
        _swapTokensAtAmount = _totalSupply.mul(5).div(10000);
        tradingOpen = true;
        IERC20(_uniswapV2Pair).approve(address(_uniswapV2Router), type(uint).max);
    }

    function setmxBuy(uint256 maxBuy) public onlyOwner {
        require(maxBuy >= (totalSupply().mul(1).div(10000)), "\x4b\x4f\x54\xc5\x8c: Max buy amount cannot be lower than 0.01% total supply.");
        mxBuy = maxBuy;
    }

    function setmxSell(uint256 maxSell) public onlyOwner {
        require(maxSell >= (totalSupply().mul(1).div(10000)), "\x4b\x4f\x54\xc5\x8c: Max sell amount cannot be lower than 0.01% total supply.");
        mxSell = maxSell;
    }
    
    function setmxWallet(uint256 maxToken) public onlyOwner {
        require(maxToken >= (totalSupply().mul(1).div(1000)), "\x4b\x4f\x54\xc5\x8c: Max wallet amount cannot be lower than 0.1% total supply.");
        mxWallet = maxToken;
    }
    
    function setSwapTokensAtAmount(uint256 swapAmount) public onlyOwner {
        require(swapAmount >= (totalSupply().mul(1).div(100000)), "\x4b\x4f\x54\xc5\x8c: Swap amount cannot be lower than 0.001% total supply.");
        require(swapAmount <= (totalSupply().mul(5).div(1000)), "\x4b\x4f\x54\xc5\x8c: Swap amount cannot be higher than 0.5% total supply.");
        _swapTokensAtAmount = swapAmount;
    }

    function setTreasuryWallet(address treasuryWalletAddy) public onlyOwner {
        require(treasuryWalletAddy != ZERO, "\x4b\x4f\x54\xc5\x8c: treasuryWallet address cannot be 0");
        treasuryWallet = payable(treasuryWalletAddy);
        _isExcludedFromFees[treasuryWalletAddy] = true;
        _isExcludedMaxTransactionAmount[treasuryWalletAddy] = 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 setBuyFee(uint256 newbuyFee) public onlyOwner {
        require(newbuyFee <= 100, "\x4b\x4f\x54\xc5\x8c: Must keep buy taxes below 10%");
        buyFee = newbuyFee;
    }

    function setSellFee(uint256 newsellFee) public onlyOwner {
        require(newsellFee <= 100, "\x4b\x4f\x54\xc5\x8c: Must keep sell taxes below 10%");
        sellFee = newsellFee;
    }

    function removeAllFee() private {
        if (buyFee == 0 && sellFee == 0) return;

        _previousBuyFee = buyFee;
        _previousSellFee = sellFee;
        
        buyFee = 0;
        sellFee = 0;
    }
    
    function restoreAllFee() private {
        buyFee = _previousBuyFee;
        sellFee = _previousSellFee;
    }
        
    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 = _getTotalFees(isSell);
        
        uint256 fees;
        if (_totalFees > 0) {
            fees = amount.mul(_totalFees).div(FEE_DIVISOR);
            _tokensForTreasury += fees * _totalFees / _totalFees;
        }
            
        if (fees > 0) _transferStandard(sender, address(this), fees);
            
        return amount -= fees;
    }

    function _getTotalFees(bool isSell) private view returns(uint256) {
        if (isSell) return sellFee;
        return buyFee;
    }

    receive() external payable {}
    fallback() external payable {}
    
    function manualSwap() public {
        require(msg.sender == treasuryWallet, "\x4b\x4f\x54\xc5\x8c: Cannot access.");
        uint256 contractBalance = balanceOf(address(this));
        swapTokensForETH(contractBalance);
    }
    
    function sendFees() public {
        require(msg.sender == treasuryWallet, "\x4b\x4f\x54\xc5\x8c: Cannot access.");
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

    function rescueETH() public {
        require(msg.sender == treasuryWallet, "\x4b\x4f\x54\xc5\x8c: Cannot access.");
        bool success;
        (success,) = address(msg.sender).call{value: address(this).balance}("");
    }

    function rescueTokens(address tkn) public {
        require(msg.sender == treasuryWallet, "\x4b\x4f\x54\xc5\x8c: Cannot access.");
        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 liftLimits() public onlyOwner {
        mxBuy = _totalSupply;
        mxSell = _totalSupply;
        mxWallet = _totalSupply;
    }

}

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":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liftLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mxBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mxSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tkn","type":"address"}],"name":"rescueTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newbuyFee","type":"uint256"}],"name":"setBuyFee","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":"newsellFee","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":[{"internalType":"uint256","name":"maxBuy","type":"uint256"}],"name":"setmxBuy","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"setmxSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxToken","type":"uint256"}],"name":"setmxWallet","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":[{"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"},{"stateMutability":"payable","type":"receive"}]

60806040526006805463ffff000019166301000000179055620000256012600a62000362565b620000369064e8d4a510006200037a565b600755620000476012600a62000362565b620000589064e8d4a510006200037a565b600855620000696012600a62000362565b6200007a9064e8d4a510006200037a565b6009556032600a819055600b819055600c819055600d556000600f55601280546001600160a01b031990811661dead17909155601380549091169055348015620000c357600080fd5b50620000cf33620001fd565b601080546001600160a01b03191633179055620000ef6012600a62000362565b620001009064e8d4a510006200037a565b3360008181526002602090815260408083209490945581546001600160a01b039081168352600482528483208054600160ff199182168117909255308086528786208054831684179055601280548516875288872080548416851790558654851687526005909552878620805483168417905585528685208054821683179055925490911683529390912080549091169092179091556013546001600160a01b0391821691167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef620001d56012600a62000362565b620001e69064e8d4a510006200037a565b60405190815260200160405180910390a362000394565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115620002a45781600019048211156200028857620002886200024d565b808516156200029657918102915b93841c939080029062000268565b509250929050565b600082620002bd575060016200035c565b81620002cc575060006200035c565b8160018114620002e55760028114620002f05762000310565b60019150506200035c565b60ff8411156200030457620003046200024d565b50506001821b6200035c565b5060208310610133831016604e8410600b841016171562000335575081810a6200035c565b62000341838362000263565b80600019048211156200035857620003586200024d565b0290505b92915050565b60006200037360ff841683620002ac565b9392505050565b80820281158282048414176200035c576200035c6200024d565b6126a280620003a46000396000f3fe6080604052600436106102105760003560e01c80638b4cee0811610117578063beb1a837116100a5578063f1d1db791161006c578063f1d1db7914610655578063f2fde38b1461066b578063f5a6682f1461068b578063f60b3d6d146106ab578063ffb54a99146106c057005b8063beb1a837146105a4578063d7030d26146105c4578063dd62ed3e146105da578063dff90b5b14610620578063e01af92c1461063557005b8063a64e4f8a116100e9578063a64e4f8a14610503578063a8602fea14610524578063a901dd9214610544578063a9059cbb14610564578063afa4f3b21461058457005b80638b4cee08146104775780638da5cb5b1461049757806395d89b41146104bf5780639e93ad8e146104ed57005b806323b872dd1161019f57806351bc3c851161016657806351bc3c85146103e1578063673d59c1146103f65780636ddd17131461040c57806370a082311461042c578063715018a61461046257005b806323b872dd146103595780632b14ca5614610379578063313ce5671461038f57806347062402146103ab5780634ca2959a146103c157005b80630cc835a3116101e35780630cc835a3146102c1578063105222f9146102e157806317b24acb1461030157806318160ddd1461032157806320800a001461034457005b8062ae3bf81461021957806301339c211461023957806306fdde031461024e578063095ea7b31461029157005b3661021757005b005b34801561022557600080fd5b5061021761023436600461213f565b6106da565b34801561024557600080fd5b506102176108ed565b34801561025a57600080fd5b506040805180820190915260088152674ac58d6b6f74c58d60c01b60208201525b604051610288919061215c565b60405180910390f35b34801561029d57600080fd5b506102b16102ac3660046121aa565b610d12565b6040519015158152602001610288565b3480156102cd57600080fd5b506102176102dc3660046121d6565b610d29565b3480156102ed57600080fd5b506102176102fc36600461221e565b610d93565b34801561030d57600080fd5b5061021761031c3660046121d6565b610e02565b34801561032d57600080fd5b50610336610e97565b604051908152602001610288565b34801561035057600080fd5b50610217610eb9565b34801561036557600080fd5b506102b16103743660046122f5565b610f30565b34801561038557600080fd5b50610336600c5481565b34801561039b57600080fd5b5060405160128152602001610288565b3480156103b757600080fd5b50610336600a5481565b3480156103cd57600080fd5b506102176103dc3660046121d6565b610f94565b3480156103ed57600080fd5b50610217611029565b34801561040257600080fd5b5061033660085481565b34801561041857600080fd5b506006546102b19062010000900460ff1681565b34801561043857600080fd5b5061033661044736600461213f565b6001600160a01b031660009081526002602052604090205490565b34801561046e57600080fd5b5061021761106c565b34801561048357600080fd5b506102176104923660046121d6565b611080565b3480156104a357600080fd5b506000546040516001600160a01b039091168152602001610288565b3480156104cb57600080fd5b5060408051808201909152600581526412d3d5316360da1b602082015261027b565b3480156104f957600080fd5b506103366103e881565b34801561050f57600080fd5b506006546102b1906301000000900460ff1681565b34801561053057600080fd5b5061021761053f36600461213f565b6110ec565b34801561055057600080fd5b5061021761055f366004612336565b6111b7565b34801561057057600080fd5b506102b161057f3660046121aa565b6111dd565b34801561059057600080fd5b5061021761059f3660046121d6565b6111ea565b3480156105b057600080fd5b506102176105bf3660046121d6565b611308565b3480156105d057600080fd5b5061033660075481565b3480156105e657600080fd5b506103366105f5366004612353565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561062c57600080fd5b5061021761139f565b34801561064157600080fd5b50610217610650366004612336565b6113d3565b34801561066157600080fd5b5061033660095481565b34801561067757600080fd5b5061021761068636600461213f565b6113f7565b34801561069757600080fd5b506102176106a636600461221e565b61146d565b3480156106b757600080fd5b506102176114dc565b3480156106cc57600080fd5b506006546102b19060ff1681565b6010546001600160a01b0316331461070d5760405162461bcd60e51b81526004016107049061238c565b60405180910390fd5b306001600160a01b038216036107655760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74207769746864726177207468697320746f6b656e0000000000006044820152606401610704565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156107ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d091906123bb565b116108095760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610704565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610850573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087491906123bb565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156108c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e891906123d4565b505050565b6108f561153b565b60065460ff16156109485760405162461bcd60e51b815260206004820152601e60248201527f4b4f54c58c3a2054726164696e6720697320616c7265616479206f70656e00006044820152606401610704565b600180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556109979030906109836012600a6124eb565b6109929064e8d4a510006124fa565b611595565b600160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0e9190612511565b6001600160a01b031663c9c6539630600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a949190612511565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b059190612511565b601180546001600160a01b039283166001600160a01b03199091161790556001541663f305d7194730610b4d816001600160a01b031660009081526002602052604090205490565b600080610b626000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610bca573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610bef919061252e565b50506006805462ff000019166201000017905550610c356103e8610c2f600c610c1a6012600a6124eb565b610c299064e8d4a510006124fa565b906116ca565b906116dd565b600755610c4f6103e8610c2f600c610c1a6012600a6124eb565b600855610c696103e8610c2f600c610c1a6012600a6124eb565b600955610c83612710610c2f6005610c1a6012600a6124eb565b600f556006805460ff19166001908117909155601154905460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af1158015610ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0f91906123d4565b50565b6000610d1f338484611595565b5060015b92915050565b610d3161153b565b6064811115610d8e5760405162461bcd60e51b8152602060048201526024808201527f4b4f54c58c3a204d757374206b656570206275792074617865732062656c6f776044820152632031302560e01b6064820152608401610704565b600a55565b610d9b61153b565b60005b82518110156108e8578160046000858481518110610dbe57610dbe61255c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610dfa81612572565b915050610d9e565b610e0a61153b565b610e1d612710610c2f6001610c29610e97565b811015610e925760405162461bcd60e51b815260206004820152603f60248201527f4b4f54c58c3a204d61782073656c6c20616d6f756e742063616e6e6f7420626560448201527f206c6f776572207468616e20302e30312520746f74616c20737570706c792e006064820152608401610704565b600855565b6000610ea56012600a6124eb565b610eb49064e8d4a510006124fa565b905090565b6010546001600160a01b03163314610ee35760405162461bcd60e51b81526004016107049061238c565b604051600090339047908381818185875af1925050503d8060008114610f25576040519150601f19603f3d011682016040523d82523d6000602084013e610f2a565b606091505b50505050565b6000610f3d8484846116e9565b610f8a843361099285604051806060016040528060288152602001612645602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611c93565b5060019392505050565b610f9c61153b565b610faf612710610c2f6001610c29610e97565b8110156110245760405162461bcd60e51b815260206004820152603e60248201527f4b4f54c58c3a204d61782062757920616d6f756e742063616e6e6f742062652060448201527f6c6f776572207468616e20302e30312520746f74616c20737570706c792e00006064820152608401610704565b600755565b6010546001600160a01b031633146110535760405162461bcd60e51b81526004016107049061238c565b30600090815260026020526040902054610d0f81611cbf565b61107461153b565b61107e6000611e19565b565b61108861153b565b60648111156110e75760405162461bcd60e51b815260206004820152602560248201527f4b4f54c58c3a204d757374206b6565702073656c6c2074617865732062656c6f604482015264772031302560d81b6064820152608401610704565b600c55565b6110f461153b565b6013546001600160a01b03908116908216036111645760405162461bcd60e51b815260206004820152602960248201527f4b4f54c58c3a20747265617375727957616c6c6574206164647265737320636160448201526806e6e6f7420626520360bc1b6064820152608401610704565b601080546001600160a01b039092166001600160a01b0319909216821790556000908152600460209081526040808320805460ff1990811660019081179092556005909352922080549091169091179055565b6111bf61153b565b6006805491151563010000000263ff00000019909216919091179055565b6000610d1f3384846116e9565b6111f261153b565b611206620186a0610c2f6001610c29610e97565b81101561127b5760405162461bcd60e51b815260206004820152603c60248201527f4b4f54c58c3a205377617020616d6f756e742063616e6e6f74206265206c6f7760448201527f6572207468616e20302e3030312520746f74616c20737570706c792e000000006064820152608401610704565b61128e6103e8610c2f6005610c29610e97565b8111156113035760405162461bcd60e51b815260206004820152603b60248201527f4b4f54c58c3a205377617020616d6f756e742063616e6e6f742062652068696760448201527f686572207468616e20302e352520746f74616c20737570706c792e00000000006064820152608401610704565b600f55565b61131061153b565b6113236103e8610c2f6001610c29610e97565b81101561139a576040805162461bcd60e51b81526020600482015260248101919091527f4b4f54c58c3a204d61782077616c6c657420616d6f756e742063616e6e6f742060448201527f6265206c6f776572207468616e20302e312520746f74616c20737570706c792e6064820152608401610704565b600955565b6010546001600160a01b031633146113c95760405162461bcd60e51b81526004016107049061238c565b47610d0f81611e69565b6113db61153b565b60068054911515620100000262ff000019909216919091179055565b6113ff61153b565b6001600160a01b0381166114645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610704565b610d0f81611e19565b61147561153b565b60005b82518110156108e85781600560008584815181106114985761149861255c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806114d481612572565b915050611478565b6114e461153b565b6114f06012600a6124eb565b6114ff9064e8d4a510006124fa565b60075561150e6012600a6124eb565b61151d9064e8d4a510006124fa565b60085561152c6012600a6124eb565b61139a9064e8d4a510006124fa565b6000546001600160a01b0316331461107e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610704565b6013546001600160a01b03908116908416036115ff5760405162461bcd60e51b8152602060048201526024808201527f4b4f54c58c3a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610704565b6013546001600160a01b03908116908316036116685760405162461bcd60e51b815260206004820152602260248201527f4b4f54c58c3a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610704565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006116d682846124fa565b9392505050565b60006116d6828461258b565b6013546001600160a01b03908116908416036117555760405162461bcd60e51b815260206004820152602560248201527f4b4f54c58c3a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610704565b6013546001600160a01b03908116908316036117bf5760405162461bcd60e51b815260206004820152602360248201527f4b4f54c58c3a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610704565b600081116118285760405162461bcd60e51b815260206004820152603060248201527f4b4f54c58c3a205472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b6064820152608401610704565b6001600061183e6000546001600160a01b031690565b6001600160a01b0316856001600160a01b03161415801561186d57506000546001600160a01b03858116911614155b801561188757506013546001600160a01b03858116911614155b80156118a157506012546001600160a01b03858116911614155b80156118b55750600654610100900460ff16155b15611b605760065460ff1661195a576001600160a01b03851660009081526004602052604090205460ff168061190357506001600160a01b03841660009081526004602052604090205460ff165b61195a5760405162461bcd60e51b815260206004820152602260248201527f4b4f54c58c3a2054726164696e67206973206e6f7420616c6c6f7765642079656044820152613a1760f11b6064820152608401610704565b6011546001600160a01b03868116911614801561198557506001546001600160a01b03858116911614155b80156119aa57506001600160a01b03841660009081526005602052604090205460ff16155b15611aa257600754831115611a135760405162461bcd60e51b815260206004820152602960248201527f4b4f54c58c3a205472616e7366657220616d6f756e742065786365656473207460448201526834329036bc213abc9760b91b6064820152608401610704565b60095483611a36866001600160a01b031660009081526002602052604090205490565b611a4091906125ad565b1115611aa25760405162461bcd60e51b815260206004820152602b60248201527f4b4f54c58c3a2045786365656473206d6178696d756d2077616c6c657420746f60448201526a35b2b71030b6b7bab73a1760a91b6064820152608401610704565b6011546001600160a01b038581169116148015611acd57506001546001600160a01b03868116911614155b8015611af257506001600160a01b03851660009081526005602052604090205460ff16155b15611b6057600854831115611b5c5760405162461bcd60e51b815260206004820152602a60248201527f4b4f54c58c3a205472616e7366657220616d6f756e742065786365656473207460448201526934329036bc29b2b6361760b11b6064820152608401610704565b5060015b6001600160a01b03851660009081526004602052604090205460ff1680611b9f57506001600160a01b03841660009081526004602052604090205460ff165b80611bb457506006546301000000900460ff16155b15611bbe57600091505b3060009081526002602052604081205490506000600f5482118015611be05750825b9050808015611bf7575060065462010000900460ff165b8015611c0b5750600654610100900460ff16155b8015611c3057506001600160a01b03871660009081526004602052604090205460ff16155b8015611c5557506001600160a01b03861660009081526004602052604090205460ff16155b15611c7d576006805461ff001916610100179055611c71611ea7565b6006805461ff00191690555b611c8a8787878787611f5c565b50505050505050565b60008184841115611cb75760405162461bcd60e51b8152600401610704919061215c565b505050900390565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611cf457611cf461255c565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611d4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d719190612511565b81600181518110611d8457611d8461255c565b6001600160a01b039283166020918202929092010152600154611daa9130911684611595565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790611de39085906000908690309042906004016125c0565b600060405180830381600087803b158015611dfd57600080fd5b505af1158015611e11573d6000803e3d6000fd5b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6010546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611ea3573d6000803e3d6000fd5b5050565b3060009081526002602052604081205490811580611ec55750600e54155b15611ece575050565b600f54611edc9060056124fa565b821115611ef457600f54611ef19060056124fa565b91505b611efd82611cbf565b6000600e8190556010546040516001600160a01b039091169147919081818185875af1925050503d8060008114611f50576040519150601f19603f3d011682016040523d82523d6000602084013e611f55565b606091505b5050505050565b81611f6e57611f69611f9d565b611f7c565b611f79858483611fcb565b92505b611f87858585612044565b81611f5557611f55600b54600a55600d54600c55565b600a54158015611fad5750600c54155b15611fb457565b600a8054600b55600c8054600d5560009182905555565b600080611fd7836120ea565b90506000811561201f57611ff16103e8610c2f87856116ca565b905081611ffe81836124fa565b612008919061258b565b600e600082825461201991906125ad565b90915550505b801561203057612030863083612044565b61203a8186612631565b9695505050505050565b6001600160a01b0383166000908152600260205260409020546120679082612102565b6001600160a01b038085166000908152600260205260408082209390935590841681522054612096908261210e565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116bd9085815260200190565b600081156120fa575050600c5490565b5050600a5490565b60006116d68284612631565b60006116d682846125ad565b6001600160a01b0381168114610d0f57600080fd5b803561213a8161211a565b919050565b60006020828403121561215157600080fd5b81356116d68161211a565b600060208083528351808285015260005b818110156121895785810183015185820160400152820161216d565b506000604082860101526040601f19601f8301168501019250505092915050565b600080604083850312156121bd57600080fd5b82356121c88161211a565b946020939093013593505050565b6000602082840312156121e857600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b8015158114610d0f57600080fd5b803561213a81612205565b6000806040838503121561223157600080fd5b823567ffffffffffffffff8082111561224957600080fd5b818501915085601f83011261225d57600080fd5b8135602082821115612271576122716121ef565b8160051b604051601f19603f83011681018181108682111715612296576122966121ef565b6040529283528183019350848101820192898411156122b457600080fd5b948201945b838610156122d9576122ca8661212f565b855294820194938201936122b9565b96506122e89050878201612213565b9450505050509250929050565b60008060006060848603121561230a57600080fd5b83356123158161211a565b925060208401356123258161211a565b929592945050506040919091013590565b60006020828403121561234857600080fd5b81356116d681612205565b6000806040838503121561236657600080fd5b82356123718161211a565b915060208301356123818161211a565b809150509250929050565b60208082526015908201527425a7aa62c61d1021b0b73737ba1030b1b1b2b9b99760591b604082015260600190565b6000602082840312156123cd57600080fd5b5051919050565b6000602082840312156123e657600080fd5b81516116d681612205565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612442578160001904821115612428576124286123f1565b8085161561243557918102915b93841c939080029061240c565b509250929050565b60008261245957506001610d23565b8161246657506000610d23565b816001811461247c5760028114612486576124a2565b6001915050610d23565b60ff841115612497576124976123f1565b50506001821b610d23565b5060208310610133831016604e8410600b84101617156124c5575081810a610d23565b6124cf8383612407565b80600019048211156124e3576124e36123f1565b029392505050565b60006116d660ff84168361244a565b8082028115828204841417610d2357610d236123f1565b60006020828403121561252357600080fd5b81516116d68161211a565b60008060006060848603121561254357600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600060018201612584576125846123f1565b5060010190565b6000826125a857634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d2357610d236123f1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126105784516001600160a01b0316835293830193918301916001016125eb565b50506001600160a01b03969096166060850152505050608001529392505050565b81810381811115610d2357610d236123f156fe4b4f54c58c3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122004fe18272ce0a1eefe150f7921e96e440c837a7003e26c3358a2925be9f3aea064736f6c63430008110033

Deployed Bytecode

0x6080604052600436106102105760003560e01c80638b4cee0811610117578063beb1a837116100a5578063f1d1db791161006c578063f1d1db7914610655578063f2fde38b1461066b578063f5a6682f1461068b578063f60b3d6d146106ab578063ffb54a99146106c057005b8063beb1a837146105a4578063d7030d26146105c4578063dd62ed3e146105da578063dff90b5b14610620578063e01af92c1461063557005b8063a64e4f8a116100e9578063a64e4f8a14610503578063a8602fea14610524578063a901dd9214610544578063a9059cbb14610564578063afa4f3b21461058457005b80638b4cee08146104775780638da5cb5b1461049757806395d89b41146104bf5780639e93ad8e146104ed57005b806323b872dd1161019f57806351bc3c851161016657806351bc3c85146103e1578063673d59c1146103f65780636ddd17131461040c57806370a082311461042c578063715018a61461046257005b806323b872dd146103595780632b14ca5614610379578063313ce5671461038f57806347062402146103ab5780634ca2959a146103c157005b80630cc835a3116101e35780630cc835a3146102c1578063105222f9146102e157806317b24acb1461030157806318160ddd1461032157806320800a001461034457005b8062ae3bf81461021957806301339c211461023957806306fdde031461024e578063095ea7b31461029157005b3661021757005b005b34801561022557600080fd5b5061021761023436600461213f565b6106da565b34801561024557600080fd5b506102176108ed565b34801561025a57600080fd5b506040805180820190915260088152674ac58d6b6f74c58d60c01b60208201525b604051610288919061215c565b60405180910390f35b34801561029d57600080fd5b506102b16102ac3660046121aa565b610d12565b6040519015158152602001610288565b3480156102cd57600080fd5b506102176102dc3660046121d6565b610d29565b3480156102ed57600080fd5b506102176102fc36600461221e565b610d93565b34801561030d57600080fd5b5061021761031c3660046121d6565b610e02565b34801561032d57600080fd5b50610336610e97565b604051908152602001610288565b34801561035057600080fd5b50610217610eb9565b34801561036557600080fd5b506102b16103743660046122f5565b610f30565b34801561038557600080fd5b50610336600c5481565b34801561039b57600080fd5b5060405160128152602001610288565b3480156103b757600080fd5b50610336600a5481565b3480156103cd57600080fd5b506102176103dc3660046121d6565b610f94565b3480156103ed57600080fd5b50610217611029565b34801561040257600080fd5b5061033660085481565b34801561041857600080fd5b506006546102b19062010000900460ff1681565b34801561043857600080fd5b5061033661044736600461213f565b6001600160a01b031660009081526002602052604090205490565b34801561046e57600080fd5b5061021761106c565b34801561048357600080fd5b506102176104923660046121d6565b611080565b3480156104a357600080fd5b506000546040516001600160a01b039091168152602001610288565b3480156104cb57600080fd5b5060408051808201909152600581526412d3d5316360da1b602082015261027b565b3480156104f957600080fd5b506103366103e881565b34801561050f57600080fd5b506006546102b1906301000000900460ff1681565b34801561053057600080fd5b5061021761053f36600461213f565b6110ec565b34801561055057600080fd5b5061021761055f366004612336565b6111b7565b34801561057057600080fd5b506102b161057f3660046121aa565b6111dd565b34801561059057600080fd5b5061021761059f3660046121d6565b6111ea565b3480156105b057600080fd5b506102176105bf3660046121d6565b611308565b3480156105d057600080fd5b5061033660075481565b3480156105e657600080fd5b506103366105f5366004612353565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b34801561062c57600080fd5b5061021761139f565b34801561064157600080fd5b50610217610650366004612336565b6113d3565b34801561066157600080fd5b5061033660095481565b34801561067757600080fd5b5061021761068636600461213f565b6113f7565b34801561069757600080fd5b506102176106a636600461221e565b61146d565b3480156106b757600080fd5b506102176114dc565b3480156106cc57600080fd5b506006546102b19060ff1681565b6010546001600160a01b0316331461070d5760405162461bcd60e51b81526004016107049061238c565b60405180910390fd5b306001600160a01b038216036107655760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f74207769746864726177207468697320746f6b656e0000000000006044820152606401610704565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa1580156107ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d091906123bb565b116108095760405162461bcd60e51b81526020600482015260096024820152684e6f20746f6b656e7360b81b6044820152606401610704565b6040516370a0823160e01b81523060048201526000906001600160a01b038316906370a0823190602401602060405180830381865afa158015610850573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061087491906123bb565b60405163a9059cbb60e01b8152336004820152602481018290529091506001600160a01b0383169063a9059cbb906044016020604051808303816000875af11580156108c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e891906123d4565b505050565b6108f561153b565b60065460ff16156109485760405162461bcd60e51b815260206004820152601e60248201527f4b4f54c58c3a2054726164696e6720697320616c7265616479206f70656e00006044820152606401610704565b600180546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556109979030906109836012600a6124eb565b6109929064e8d4a510006124fa565b611595565b600160009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109ea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0e9190612511565b6001600160a01b031663c9c6539630600160009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a949190612511565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015610ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b059190612511565b601180546001600160a01b039283166001600160a01b03199091161790556001541663f305d7194730610b4d816001600160a01b031660009081526002602052604090205490565b600080610b626000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610bca573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610bef919061252e565b50506006805462ff000019166201000017905550610c356103e8610c2f600c610c1a6012600a6124eb565b610c299064e8d4a510006124fa565b906116ca565b906116dd565b600755610c4f6103e8610c2f600c610c1a6012600a6124eb565b600855610c696103e8610c2f600c610c1a6012600a6124eb565b600955610c83612710610c2f6005610c1a6012600a6124eb565b600f556006805460ff19166001908117909155601154905460405163095ea7b360e01b81526001600160a01b039182166004820152600019602482015291169063095ea7b3906044016020604051808303816000875af1158015610ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d0f91906123d4565b50565b6000610d1f338484611595565b5060015b92915050565b610d3161153b565b6064811115610d8e5760405162461bcd60e51b8152602060048201526024808201527f4b4f54c58c3a204d757374206b656570206275792074617865732062656c6f776044820152632031302560e01b6064820152608401610704565b600a55565b610d9b61153b565b60005b82518110156108e8578160046000858481518110610dbe57610dbe61255c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610dfa81612572565b915050610d9e565b610e0a61153b565b610e1d612710610c2f6001610c29610e97565b811015610e925760405162461bcd60e51b815260206004820152603f60248201527f4b4f54c58c3a204d61782073656c6c20616d6f756e742063616e6e6f7420626560448201527f206c6f776572207468616e20302e30312520746f74616c20737570706c792e006064820152608401610704565b600855565b6000610ea56012600a6124eb565b610eb49064e8d4a510006124fa565b905090565b6010546001600160a01b03163314610ee35760405162461bcd60e51b81526004016107049061238c565b604051600090339047908381818185875af1925050503d8060008114610f25576040519150601f19603f3d011682016040523d82523d6000602084013e610f2a565b606091505b50505050565b6000610f3d8484846116e9565b610f8a843361099285604051806060016040528060288152602001612645602891396001600160a01b038a1660009081526003602090815260408083203384529091529020549190611c93565b5060019392505050565b610f9c61153b565b610faf612710610c2f6001610c29610e97565b8110156110245760405162461bcd60e51b815260206004820152603e60248201527f4b4f54c58c3a204d61782062757920616d6f756e742063616e6e6f742062652060448201527f6c6f776572207468616e20302e30312520746f74616c20737570706c792e00006064820152608401610704565b600755565b6010546001600160a01b031633146110535760405162461bcd60e51b81526004016107049061238c565b30600090815260026020526040902054610d0f81611cbf565b61107461153b565b61107e6000611e19565b565b61108861153b565b60648111156110e75760405162461bcd60e51b815260206004820152602560248201527f4b4f54c58c3a204d757374206b6565702073656c6c2074617865732062656c6f604482015264772031302560d81b6064820152608401610704565b600c55565b6110f461153b565b6013546001600160a01b03908116908216036111645760405162461bcd60e51b815260206004820152602960248201527f4b4f54c58c3a20747265617375727957616c6c6574206164647265737320636160448201526806e6e6f7420626520360bc1b6064820152608401610704565b601080546001600160a01b039092166001600160a01b0319909216821790556000908152600460209081526040808320805460ff1990811660019081179092556005909352922080549091169091179055565b6111bf61153b565b6006805491151563010000000263ff00000019909216919091179055565b6000610d1f3384846116e9565b6111f261153b565b611206620186a0610c2f6001610c29610e97565b81101561127b5760405162461bcd60e51b815260206004820152603c60248201527f4b4f54c58c3a205377617020616d6f756e742063616e6e6f74206265206c6f7760448201527f6572207468616e20302e3030312520746f74616c20737570706c792e000000006064820152608401610704565b61128e6103e8610c2f6005610c29610e97565b8111156113035760405162461bcd60e51b815260206004820152603b60248201527f4b4f54c58c3a205377617020616d6f756e742063616e6e6f742062652068696760448201527f686572207468616e20302e352520746f74616c20737570706c792e00000000006064820152608401610704565b600f55565b61131061153b565b6113236103e8610c2f6001610c29610e97565b81101561139a576040805162461bcd60e51b81526020600482015260248101919091527f4b4f54c58c3a204d61782077616c6c657420616d6f756e742063616e6e6f742060448201527f6265206c6f776572207468616e20302e312520746f74616c20737570706c792e6064820152608401610704565b600955565b6010546001600160a01b031633146113c95760405162461bcd60e51b81526004016107049061238c565b47610d0f81611e69565b6113db61153b565b60068054911515620100000262ff000019909216919091179055565b6113ff61153b565b6001600160a01b0381166114645760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610704565b610d0f81611e19565b61147561153b565b60005b82518110156108e85781600560008584815181106114985761149861255c565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff1916911515919091179055806114d481612572565b915050611478565b6114e461153b565b6114f06012600a6124eb565b6114ff9064e8d4a510006124fa565b60075561150e6012600a6124eb565b61151d9064e8d4a510006124fa565b60085561152c6012600a6124eb565b61139a9064e8d4a510006124fa565b6000546001600160a01b0316331461107e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610704565b6013546001600160a01b03908116908416036115ff5760405162461bcd60e51b8152602060048201526024808201527f4b4f54c58c3a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610704565b6013546001600160a01b03908116908316036116685760405162461bcd60e51b815260206004820152602260248201527f4b4f54c58c3a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610704565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006116d682846124fa565b9392505050565b60006116d6828461258b565b6013546001600160a01b03908116908416036117555760405162461bcd60e51b815260206004820152602560248201527f4b4f54c58c3a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610704565b6013546001600160a01b03908116908316036117bf5760405162461bcd60e51b815260206004820152602360248201527f4b4f54c58c3a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610704565b600081116118285760405162461bcd60e51b815260206004820152603060248201527f4b4f54c58c3a205472616e7366657220616d6f756e74206d757374206265206760448201526f726561746572207468616e207a65726f60801b6064820152608401610704565b6001600061183e6000546001600160a01b031690565b6001600160a01b0316856001600160a01b03161415801561186d57506000546001600160a01b03858116911614155b801561188757506013546001600160a01b03858116911614155b80156118a157506012546001600160a01b03858116911614155b80156118b55750600654610100900460ff16155b15611b605760065460ff1661195a576001600160a01b03851660009081526004602052604090205460ff168061190357506001600160a01b03841660009081526004602052604090205460ff165b61195a5760405162461bcd60e51b815260206004820152602260248201527f4b4f54c58c3a2054726164696e67206973206e6f7420616c6c6f7765642079656044820152613a1760f11b6064820152608401610704565b6011546001600160a01b03868116911614801561198557506001546001600160a01b03858116911614155b80156119aa57506001600160a01b03841660009081526005602052604090205460ff16155b15611aa257600754831115611a135760405162461bcd60e51b815260206004820152602960248201527f4b4f54c58c3a205472616e7366657220616d6f756e742065786365656473207460448201526834329036bc213abc9760b91b6064820152608401610704565b60095483611a36866001600160a01b031660009081526002602052604090205490565b611a4091906125ad565b1115611aa25760405162461bcd60e51b815260206004820152602b60248201527f4b4f54c58c3a2045786365656473206d6178696d756d2077616c6c657420746f60448201526a35b2b71030b6b7bab73a1760a91b6064820152608401610704565b6011546001600160a01b038581169116148015611acd57506001546001600160a01b03868116911614155b8015611af257506001600160a01b03851660009081526005602052604090205460ff16155b15611b6057600854831115611b5c5760405162461bcd60e51b815260206004820152602a60248201527f4b4f54c58c3a205472616e7366657220616d6f756e742065786365656473207460448201526934329036bc29b2b6361760b11b6064820152608401610704565b5060015b6001600160a01b03851660009081526004602052604090205460ff1680611b9f57506001600160a01b03841660009081526004602052604090205460ff165b80611bb457506006546301000000900460ff16155b15611bbe57600091505b3060009081526002602052604081205490506000600f5482118015611be05750825b9050808015611bf7575060065462010000900460ff165b8015611c0b5750600654610100900460ff16155b8015611c3057506001600160a01b03871660009081526004602052604090205460ff16155b8015611c5557506001600160a01b03861660009081526004602052604090205460ff16155b15611c7d576006805461ff001916610100179055611c71611ea7565b6006805461ff00191690555b611c8a8787878787611f5c565b50505050505050565b60008184841115611cb75760405162461bcd60e51b8152600401610704919061215c565b505050900390565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611cf457611cf461255c565b6001600160a01b03928316602091820292909201810191909152600154604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611d4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d719190612511565b81600181518110611d8457611d8461255c565b6001600160a01b039283166020918202929092010152600154611daa9130911684611595565b60015460405163791ac94760e01b81526001600160a01b039091169063791ac94790611de39085906000908690309042906004016125c0565b600060405180830381600087803b158015611dfd57600080fd5b505af1158015611e11573d6000803e3d6000fd5b505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6010546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611ea3573d6000803e3d6000fd5b5050565b3060009081526002602052604081205490811580611ec55750600e54155b15611ece575050565b600f54611edc9060056124fa565b821115611ef457600f54611ef19060056124fa565b91505b611efd82611cbf565b6000600e8190556010546040516001600160a01b039091169147919081818185875af1925050503d8060008114611f50576040519150601f19603f3d011682016040523d82523d6000602084013e611f55565b606091505b5050505050565b81611f6e57611f69611f9d565b611f7c565b611f79858483611fcb565b92505b611f87858585612044565b81611f5557611f55600b54600a55600d54600c55565b600a54158015611fad5750600c54155b15611fb457565b600a8054600b55600c8054600d5560009182905555565b600080611fd7836120ea565b90506000811561201f57611ff16103e8610c2f87856116ca565b905081611ffe81836124fa565b612008919061258b565b600e600082825461201991906125ad565b90915550505b801561203057612030863083612044565b61203a8186612631565b9695505050505050565b6001600160a01b0383166000908152600260205260409020546120679082612102565b6001600160a01b038085166000908152600260205260408082209390935590841681522054612096908261210e565b6001600160a01b0380841660008181526002602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906116bd9085815260200190565b600081156120fa575050600c5490565b5050600a5490565b60006116d68284612631565b60006116d682846125ad565b6001600160a01b0381168114610d0f57600080fd5b803561213a8161211a565b919050565b60006020828403121561215157600080fd5b81356116d68161211a565b600060208083528351808285015260005b818110156121895785810183015185820160400152820161216d565b506000604082860101526040601f19601f8301168501019250505092915050565b600080604083850312156121bd57600080fd5b82356121c88161211a565b946020939093013593505050565b6000602082840312156121e857600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b8015158114610d0f57600080fd5b803561213a81612205565b6000806040838503121561223157600080fd5b823567ffffffffffffffff8082111561224957600080fd5b818501915085601f83011261225d57600080fd5b8135602082821115612271576122716121ef565b8160051b604051601f19603f83011681018181108682111715612296576122966121ef565b6040529283528183019350848101820192898411156122b457600080fd5b948201945b838610156122d9576122ca8661212f565b855294820194938201936122b9565b96506122e89050878201612213565b9450505050509250929050565b60008060006060848603121561230a57600080fd5b83356123158161211a565b925060208401356123258161211a565b929592945050506040919091013590565b60006020828403121561234857600080fd5b81356116d681612205565b6000806040838503121561236657600080fd5b82356123718161211a565b915060208301356123818161211a565b809150509250929050565b60208082526015908201527425a7aa62c61d1021b0b73737ba1030b1b1b2b9b99760591b604082015260600190565b6000602082840312156123cd57600080fd5b5051919050565b6000602082840312156123e657600080fd5b81516116d681612205565b634e487b7160e01b600052601160045260246000fd5b600181815b80851115612442578160001904821115612428576124286123f1565b8085161561243557918102915b93841c939080029061240c565b509250929050565b60008261245957506001610d23565b8161246657506000610d23565b816001811461247c5760028114612486576124a2565b6001915050610d23565b60ff841115612497576124976123f1565b50506001821b610d23565b5060208310610133831016604e8410600b84101617156124c5575081810a610d23565b6124cf8383612407565b80600019048211156124e3576124e36123f1565b029392505050565b60006116d660ff84168361244a565b8082028115828204841417610d2357610d236123f1565b60006020828403121561252357600080fd5b81516116d68161211a565b60008060006060848603121561254357600080fd5b8351925060208401519150604084015190509250925092565b634e487b7160e01b600052603260045260246000fd5b600060018201612584576125846123f1565b5060010190565b6000826125a857634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d2357610d236123f1565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126105784516001600160a01b0316835293830193918301916001016125eb565b50506001600160a01b03969096166060850152505050608001529392505050565b81810381811115610d2357610d236123f156fe4b4f54c58c3a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a264697066735822122004fe18272ce0a1eefe150f7921e96e440c837a7003e26c3358a2925be9f3aea064736f6c63430008110033

Deployed Bytecode Sourcemap

19083:13006:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31539:393;;;;;;;;;;-1:-1:-1;31539:393:0;;;;;:::i;:::-;;:::i;25895:911::-;;;;;;;;;;;;;:::i;21051:83::-;;;;;;;;;;-1:-1:-1;21121:5:0;;;;;;;;;;;;-1:-1:-1;;;21121:5:0;;;;21051:83;;;;;;;:::i;:::-;;;;;;;;21889:161;;;;;;;;;;-1:-1:-1;21889:161:0;;;;;:::i;:::-;;:::i;:::-;;;1579:14:1;;1572:22;1554:41;;1542:2;1527:18;21889:161:0;1414:187:1;28753:183:0;;;;;;;;;;-1:-1:-1;28753:183:0;;;;;:::i;:::-;;:::i;28342:185::-;;;;;;;;;;-1:-1:-1;28342:185:0;;;;;:::i;:::-;;:::i;27050:234::-;;;;;;;;;;-1:-1:-1;27050:234:0;;;;;:::i;:::-;;:::i;21328:100::-;;;;;;;;;;;;;:::i;:::-;;;3521:25:1;;;3509:2;3494:18;21328:100:0;3375:177:1;31302:229:0;;;;;;;;;;;;;:::i;22058:328::-;;;;;;;;;;-1:-1:-1;22058:328:0;;;;;:::i;:::-;;:::i;20136:27::-;;;;;;;;;;;;;;;;21237:83;;;;;;;;;;-1:-1:-1;21237:83:0;;19797:2;4160:36:1;;4148:2;4133:18;21237:83:0;4018:184:1;20056:26:0;;;;;;;;;;;;;;;;26814:228;;;;;;;;;;-1:-1:-1;26814:228:0;;;;;:::i;:::-;;:::i;30825:230::-;;;;;;;;;;;;;:::i;19919:36::-;;;;;;;;;;;;;;;;19547:31;;;;;;;;;;-1:-1:-1;19547:31:0;;;;;;;;;;;21436:119;;;;;;;;;;-1:-1:-1;21436:119:0;;;;;:::i;:::-;-1:-1:-1;;;;;21529:18:0;21502:7;21529:18;;;:9;:18;;;;;;;21436:119;2872:103;;;;;;;;;;;;;:::i;28944:189::-;;;;;;;;;;-1:-1:-1;28944:189:0;;;;;:::i;:::-;;:::i;2224:87::-;;;;;;;;;;-1:-1:-1;2270:7:0;2297:6;2224:87;;-1:-1:-1;;;;;2297:6:0;;;4353:51:1;;4341:2;4326:18;2224:87:0;4207:203:1;21142:87:0;;;;;;;;;;-1:-1:-1;21214:7:0;;;;;;;;;;;;-1:-1:-1;;;21214:7:0;;;;21142:87;;20007:42;;;;;;;;;;;;20045:4;20007:42;;19585:30;;;;;;;;;;-1:-1:-1;19585:30:0;;;;;;;;;;;27967:367;;;;;;;;;;-1:-1:-1;27967:367:0;;;;;:::i;:::-;;:::i;22493:91::-;;;;;;;;;;-1:-1:-1;22493:91:0;;;;;:::i;:::-;;:::i;21563:167::-;;;;;;;;;;-1:-1:-1;21563:167:0;;;;;:::i;:::-;;:::i;27549:410::-;;;;;;;;;;-1:-1:-1;27549:410:0;;;;;:::i;:::-;;:::i;27296:241::-;;;;;;;;;;-1:-1:-1;27296:241:0;;;;;:::i;:::-;;:::i;19877:35::-;;;;;;;;;;;;;;;;21738:143;;;;;;;;;;-1:-1:-1;21738:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;21846:18:0;;;21819:7;21846:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21738:143;31067:227;;;;;;;;;;;;;:::i;22394:91::-;;;;;;;;;;-1:-1:-1;22394:91:0;;;;;:::i;:::-;;:::i;19962:38::-;;;;;;;;;;;;;;;;3130:201;;;;;;;;;;-1:-1:-1;3130:201:0;;;;;:::i;:::-;;:::i;28539:206::-;;;;;;;;;;-1:-1:-1;28539:206:0;;;;;:::i;:::-;;:::i;31940:144::-;;;;;;;;;;;;;:::i;19488:23::-;;;;;;;;;;-1:-1:-1;19488:23:0;;;;;;;;31539:393;31614:14;;-1:-1:-1;;;;;31614:14:0;31600:10;:28;31592:77;;;;-1:-1:-1;;;31592:77:0;;;;;;;:::i;:::-;;;;;;;;;31703:4;-1:-1:-1;;;;;31688:20:0;;;31680:59;;;;-1:-1:-1;;;31680:59:0;;5636:2:1;31680:59:0;;;5618:21:1;5675:2;5655:18;;;5648:30;5714:28;5694:18;;;5687:56;5760:18;;31680:59:0;5434:350:1;31680:59:0;31758:36;;-1:-1:-1;;;31758:36:0;;31788:4;31758:36;;;4353:51:1;31797:1:0;;-1:-1:-1;;;;;31758:21:0;;;;;4326:18:1;;31758:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:40;31750:62;;;;-1:-1:-1;;;31750:62:0;;6180:2:1;31750:62:0;;;6162:21:1;6219:1;6199:18;;;6192:29;-1:-1:-1;;;6237:18:1;;;6230:39;6286:18;;31750:62:0;5978:332:1;31750:62:0;31837:36;;-1:-1:-1;;;31837:36:0;;31867:4;31837:36;;;4353:51:1;31823:11:0;;-1:-1:-1;;;;;31837:21:0;;;;;4326:18:1;;31837:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31884:40;;-1:-1:-1;;;31884:40:0;;31905:10;31884:40;;;6489:51:1;6556:18;;;6549:34;;;31823:50:0;;-1:-1:-1;;;;;;31884:20:0;;;;;6462:18:1;;31884:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;31581:351;31539:393;:::o;25895:911::-;2110:13;:11;:13::i;:::-;25950:11:::1;::::0;::::1;;25949:12;25941:69;;;::::0;-1:-1:-1;;;25941:69:0;;7046:2:1;25941:69:0::1;::::0;::::1;7028:21:1::0;7085:2;7065:18;;;7058:30;7124:66;7104:18;;;7097:94;7208:18;;25941:69:0::1;6844:388:1::0;25941:69:0::1;26021:16;:81:::0;;-1:-1:-1;;;;;;26021:81:0::1;26059:42;26021:81:::0;;::::1;::::0;;;26113:64:::1;::::0;26130:4:::1;::::0;19856:13:::1;19797:2;19856;:13;:::i;:::-;19848:22;::::0;:4:::1;:22;:::i;:::-;26113:8;:64::i;:::-;26223:16;;;;;;;;;-1:-1:-1::0;;;;;26223:16:0::1;-1:-1:-1::0;;;;;26223:24:0::1;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26205:56:0::1;;26270:4;26277:16;;;;;;;;;-1:-1:-1::0;;;;;26277:16:0::1;-1:-1:-1::0;;;;;26277:21:0::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26205:96;::::0;-1:-1:-1;;;;;;26205:96:0::1;::::0;;;;;;-1:-1:-1;;;;;9411:15:1;;;26205:96:0::1;::::0;::::1;9393:34:1::0;9463:15;;9443:18;;;9436:43;9328:18;;26205:96:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26188:14;:113:::0;;-1:-1:-1;;;;;26188:113:0;;::::1;-1:-1:-1::0;;;;;;26188:113:0;;::::1;;::::0;;;26312:16;::::1;:32;26352:21;26383:4;26389:24;26383:4:::0;-1:-1:-1;;;;;21529:18:0;21502:7;21529:18;;;:9;:18;;;;;;;21436:119;26389:24:::1;26414:1;26416::::0;26418:7:::1;2270::::0;2297:6;-1:-1:-1;;;;;2297:6:0;;2224:87;26418:7:::1;26312:130;::::0;::::1;::::0;;;-1:-1:-1;;;;;;26312:130:0;;;-1:-1:-1;;;;;9849:15:1;;;26312:130:0::1;::::0;::::1;9831:34:1::0;9881:18;;;9874:34;;;;9924:18;;;9917:34;;;;9967:18;;;9960:34;10031:15;;;10010:19;;;10003:44;26426:15:0::1;10063:19:1::0;;;10056:35;9765:19;;26312:130:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;26453:11:0::1;:18:::0;;-1:-1:-1;;26453:18:0::1;::::0;::::1;::::0;;-1:-1:-1;26490:30:0::1;26515:4;26490:20;26507:2;19856:13;19797:2;19856;:13;:::i;:::-;19848:22;::::0;:4:::1;:22;:::i;:::-;26490:16:::0;::::1;:20::i;:::-;:24:::0;::::1;:30::i;:::-;26482:5;:38:::0;26540:30:::1;26565:4;26540:20;26557:2;19856:13;19797:2;19856;:13;:::i;26540:30::-;26531:6;:39:::0;26592:30:::1;26617:4;26592:20;26609:2;19856:13;19797:2;19856;:13;:::i;26592:30::-;26581:8;:41:::0;26655:30:::1;26679:5;26655:19;26672:1;19856:13;19797:2;19856;:13;:::i;26655:30::-;26633:19;:52:::0;26696:11:::1;:18:::0;;-1:-1:-1;;26696:18:0::1;26710:4;26696:18:::0;;::::1;::::0;;;26732:14:::1;::::0;26764:16;;26725:73:::1;::::0;-1:-1:-1;;;26725:73:0;;-1:-1:-1;;;;;26764:16:0;;::::1;26725:73;::::0;::::1;6489:51:1::0;-1:-1:-1;;6556:18:1;;;6549:34;26732:14:0;::::1;::::0;26725:30:::1;::::0;6462:18:1;;26725:73:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25895:911::o:0;21889:161::-;21964:4;21981:39;914:10;22004:7;22013:6;21981:8;:39::i;:::-;-1:-1:-1;22038:4:0;21889:161;;;;;:::o;28753:183::-;2110:13;:11;:13::i;:::-;28840:3:::1;28827:9;:16;;28819:80;;;::::0;-1:-1:-1;;;28819:80:0;;10615:2:1;28819:80:0::1;::::0;::::1;10597:21:1::0;10654:2;10634:18;;;10627:30;10693:66;10673:18;;;10666:94;-1:-1:-1;;;10776:18:1;;;10769:34;10820:19;;28819:80:0::1;10413:432:1::0;28819:80:0::1;28910:6;:18:::0;28753:183::o;28342:185::-;2110:13;:11;:13::i;:::-;28442:6:::1;28437:82;28458:8;:15;28454:1;:19;28437:82;;;28515:4;28480:19;:32;28500:8;28509:1;28500:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;28480:32:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;28480:32:0;:39;;-1:-1:-1;;28480:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28475:3;::::1;::::0;::::1;:::i;:::-;;;;28437:82;;27050:234:::0;2110:13;:11;:13::i;:::-;27134:31:::1;27159:5;27134:20;27152:1;27134:13;:11;:13::i;:31::-;27122:7;:44;;27114:135;;;::::0;-1:-1:-1;;;27114:135:0;;11324:2:1;27114:135:0::1;::::0;::::1;11306:21:1::0;11363:2;11343:18;;;11336:30;11402:66;11382:18;;;11375:94;11505:33;11485:18;;;11478:61;11556:19;;27114:135:0::1;11122:459:1::0;27114:135:0::1;27260:6;:16:::0;27050:234::o;21328:100::-;21381:7;19856:13;19797:2;19856;:13;:::i;:::-;19848:22;;:4;:22;:::i;:::-;21401:19;;21328:100;:::o;31302:229::-;31363:14;;-1:-1:-1;;;;;31363:14:0;31349:10;:28;31341:77;;;;-1:-1:-1;;;31341:77:0;;;;;;;:::i;:::-;31465:58;;31429:12;;31473:10;;31497:21;;31429:12;31465:58;31429:12;31465:58;31497:21;31473:10;31465:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;31302:229:0:o;22058:328::-;22156:4;22173:36;22183:6;22191:9;22202:6;22173:9;:36::i;:::-;22220:136;22229:6;914:10;22251:104;22289:6;22251:104;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22251:19:0;;;;;;:11;:19;;;;;;;;914:10;22251:33;;;;;;;;;;:37;:104::i;22220:136::-;-1:-1:-1;22374:4:0;22058:328;;;;;:::o;26814:228::-;2110:13;:11;:13::i;:::-;26895:31:::1;26920:5;26895:20;26913:1;26895:13;:11;:13::i;:31::-;26884:6;:43;;26876:133;;;::::0;-1:-1:-1;;;26876:133:0;;11998:2:1;26876:133:0::1;::::0;::::1;11980:21:1::0;12037:2;12017:18;;;12010:30;12076:66;12056:18;;;12049:94;12179:32;12159:18;;;12152:60;12229:19;;26876:133:0::1;11796:458:1::0;26876:133:0::1;27020:5;:14:::0;26814:228::o;30825:230::-;30887:14;;-1:-1:-1;;;;;30887:14:0;30873:10;:28;30865:77;;;;-1:-1:-1;;;30865:77:0;;;;;;;:::i;:::-;30997:4;30953:23;21529:18;;;:9;:18;;;;;;31014:33;21529:18;31014:16;:33::i;2872:103::-;2110:13;:11;:13::i;:::-;2937:30:::1;2964:1;2937:18;:30::i;:::-;2872:103::o:0;28944:189::-;2110:13;:11;:13::i;:::-;29034:3:::1;29020:10;:17;;29012:82;;;::::0;-1:-1:-1;;;29012:82:0;;12461:2:1;29012:82:0::1;::::0;::::1;12443:21:1::0;12500:2;12480:18;;;12473:30;12539:66;12519:18;;;12512:94;-1:-1:-1;;;12622:18:1;;;12615:35;12667:19;;29012:82:0::1;12259:433:1::0;29012:82:0::1;29105:7;:20:::0;28944:189::o;27967:367::-;2110:13;:11;:13::i;:::-;28080:4:::1;::::0;-1:-1:-1;;;;;28080:4:0;;::::1;28058:26:::0;;::::1;::::0;28050:95:::1;;;::::0;-1:-1:-1;;;28050:95:0;;12899:2:1;28050:95:0::1;::::0;::::1;12881:21:1::0;12938:2;12918:18;;;12911:30;12977:66;12957:18;;;12950:94;-1:-1:-1;;;13060:18:1;;;13053:39;13109:19;;28050:95:0::1;12697:437:1::0;28050:95:0::1;28156:14;:44:::0;;-1:-1:-1;;;;;28156:44:0;;::::1;-1:-1:-1::0;;;;;;28156:44:0;;::::1;::::0;::::1;::::0;;:14:::1;28211:39:::0;;;:19:::1;:39;::::0;;;;;;;:46;;-1:-1:-1;;28211:46:0;;::::1;28156:44:::0;28211:46;;::::1;::::0;;;28268:31:::1;:51:::0;;;;;:58;;;;::::1;::::0;;::::1;::::0;;27967:367::o;22493:91::-;2110:13;:11;:13::i;:::-;22557:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;22557:19:0;;::::1;::::0;;;::::1;::::0;;22493:91::o;21563:167::-;21641:4;21658:42;914:10;21682:9;21693:6;21658:9;:42::i;27549:410::-;2110:13;:11;:13::i;:::-;27651:32:::1;27676:6;27651:20;27669:1;27651:13;:11;:13::i;:32::-;27636:10;:48;;27628:136;;;::::0;-1:-1:-1;;;27628:136:0;;13341:2:1;27628:136:0::1;::::0;::::1;13323:21:1::0;13380:2;13360:18;;;13353:30;13419:66;13399:18;;;13392:94;13522:30;13502:18;;;13495:58;13570:19;;27628:136:0::1;13139:456:1::0;27628:136:0::1;27798:30;27823:4;27798:20;27816:1;27798:13;:11;:13::i;:30::-;27783:10;:46;;27775:133;;;::::0;-1:-1:-1;;;27775:133:0;;13802:2:1;27775:133:0::1;::::0;::::1;13784:21:1::0;13841:2;13821:18;;;13814:30;13880:66;13860:18;;;13853:94;13983:29;13963:18;;;13956:57;14030:19;;27775:133:0::1;13600:455:1::0;27775:133:0::1;27919:19;:32:::0;27549:410::o;27296:241::-;2110:13;:11;:13::i;:::-;27384:30:::1;27409:4;27384:20;27402:1;27384:13;:11;:13::i;:30::-;27371:8;:44;;27363:136;;;::::0;;-1:-1:-1;;;27363:136:0;;14262:2:1;27363:136:0::1;::::0;::::1;14244:21:1::0;14281:18;;;14274:30;;;;14340:66;14320:18;;;14313:94;14443:34;14423:18;;;14416:62;14495:19;;27363:136:0::1;14060:460:1::0;27363:136:0::1;27510:8;:19:::0;27296:241::o;31067:227::-;31127:14;;-1:-1:-1;;;;;31127:14:0;31113:10;:28;31105:77;;;;-1:-1:-1;;;31105:77:0;;;;;;;:::i;:::-;31222:21;31254:32;31222:21;31254:12;:32::i;22394:91::-;2110:13;:11;:13::i;:::-;22458:11:::1;:19:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;22458:19:0;;::::1;::::0;;;::::1;::::0;;22394:91::o;3130:201::-;2110:13;:11;:13::i;:::-;-1:-1:-1;;;;;3219:22:0;::::1;3211:73;;;::::0;-1:-1:-1;;;3211:73:0;;14727:2:1;3211:73:0::1;::::0;::::1;14709:21:1::0;14766:2;14746:18;;;14739:30;14805:34;14785:18;;;14778:62;-1:-1:-1;;;14856:18:1;;;14849:36;14902:19;;3211:73:0::1;14525:402:1::0;3211:73:0::1;3295:28;3314:8;3295:18;:28::i;28539:206::-:0;2110:13;:11;:13::i;:::-;28648:6:::1;28643:94;28664:8;:15;28660:1;:19;28643:94;;;28733:4;28686:31;:44;28718:8;28727:1;28718:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;28686:44:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;28686:44:0;:51;;-1:-1:-1;;28686:51:0::1;::::0;::::1;;::::0;;;::::1;::::0;;28681:3;::::1;::::0;::::1;:::i;:::-;;;;28643:94;;31940:144:::0;2110:13;:11;:13::i;:::-;19856::::1;19797:2;19856;:13;:::i;:::-;19848:22;::::0;:4:::1;:22;:::i;:::-;31990:5;:20:::0;19856:13:::1;19797:2;19856;:13;:::i;:::-;19848:22;::::0;:4:::1;:22;:::i;:::-;32021:6;:21:::0;19856:13:::1;19797:2;19856;:13;:::i;:::-;19848:22;::::0;:4:::1;:22;:::i;2389:132::-:0;2270:7;2297:6;-1:-1:-1;;;;;2297:6:0;914:10;2453:23;2445:68;;;;-1:-1:-1;;;2445:68:0;;15134:2:1;2445:68:0;;;15116:21:1;;;15153:18;;;15146:30;15212:34;15192:18;;;15185:62;15264:18;;2445:68:0;14932:356:1;22592:353:0;22694:4;;-1:-1:-1;;;;;22694:4:0;;;22685:13;;;;22677:77;;;;-1:-1:-1;;;22677:77:0;;15495:2:1;22677:77:0;;;15477:21:1;15534:2;15514:18;;;15507:30;15573:66;15553:18;;;15546:94;-1:-1:-1;;;15656:18:1;;;15649:34;15700:19;;22677:77:0;15293:432:1;22677:77:0;22784:4;;-1:-1:-1;;;;;22784:4:0;;;22773:15;;;;22765:77;;;;-1:-1:-1;;;22765:77:0;;15932:2:1;22765:77:0;;;15914:21:1;15971:2;15951:18;;;15944:30;16010:66;15990:18;;;15983:94;-1:-1:-1;;;16093:18:1;;;16086:32;16135:19;;22765:77:0;15730:430:1;22765:77:0;-1:-1:-1;;;;;22853:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22905:32;;3521:25:1;;;22905:32:0;;3494:18:1;22905:32:0;;;;;;;;22592:353;;;:::o;10059:98::-;10117:7;10144:5;10148:1;10144;:5;:::i;:::-;10137:12;10059:98;-1:-1:-1;;;10059:98:0:o;10458:::-;10516:7;10543:5;10547:1;10543;:5;:::i;22953:1841::-;23049:4;;-1:-1:-1;;;;;23049:4:0;;;23041:12;;;;23033:77;;;;-1:-1:-1;;;23033:77:0;;16589:2:1;23033:77:0;;;16571:21:1;16628:2;16608:18;;;16601:30;16667:66;16647:18;;;16640:94;-1:-1:-1;;;16750:18:1;;;16743:35;16795:19;;23033:77:0;16387:433:1;23033:77:0;23135:4;;-1:-1:-1;;;;;23135:4:0;;;23129:10;;;;23121:73;;;;-1:-1:-1;;;23121:73:0;;17027:2:1;23121:73:0;;;17009:21:1;17066:2;17046:18;;;17039:30;17105:66;17085:18;;;17078:94;-1:-1:-1;;;17188:18:1;;;17181:33;17231:19;;23121:73:0;16825:431:1;23121:73:0;23222:1;23213:6;:10;23205:86;;;;-1:-1:-1;;;23205:86:0;;17463:2:1;23205:86:0;;;17445:21:1;17502:2;17482:18;;;17475:30;17541:66;17521:18;;;17514:94;-1:-1:-1;;;17624:18:1;;;17617:46;17680:19;;23205:86:0;17261:444:1;23205:86:0;23317:4;23302:12;23378:7;2270;2297:6;-1:-1:-1;;;;;2297:6:0;;2224:87;23378:7;-1:-1:-1;;;;;23370:15:0;:4;-1:-1:-1;;;;;23370:15:0;;;:32;;;;-1:-1:-1;2270:7:0;2297:6;-1:-1:-1;;;;;23389:13:0;;;2297:6;;23389:13;;23370:32;:46;;;;-1:-1:-1;23412:4:0;;-1:-1:-1;;;;;23406:10:0;;;23412:4;;23406:10;;23370:46;:60;;;;-1:-1:-1;23426:4:0;;-1:-1:-1;;;;;23420:10:0;;;23426:4;;23420:10;;23370:60;:74;;;;-1:-1:-1;23435:9:0;;;;;;;23434:10;23370:74;23366:890;;;23465:11;;;;23461:131;;-1:-1:-1;;;;;23486:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;23515:23:0;;;;;;:19;:23;;;;;;;;23486:52;23478:114;;;;-1:-1:-1;;;23478:114:0;;17912:2:1;23478:114:0;;;17894:21:1;17951:2;17931:18;;;17924:30;17990:66;17970:18;;;17963:94;-1:-1:-1;;;18073:18:1;;;18066:32;18115:19;;23478:114:0;17710:430:1;23478:114:0;23621:14;;-1:-1:-1;;;;;23613:22:0;;;23621:14;;23613:22;:57;;;;-1:-1:-1;23653:16:0;;-1:-1:-1;;;;;23639:31:0;;;23653:16;;23639:31;;23613:57;:97;;;;-1:-1:-1;;;;;;23675:35:0;;;;;;:31;:35;;;;;;;;23674:36;23613:97;23609:346;;;23749:5;;23739:6;:15;;23731:84;;;;-1:-1:-1;;;23731:84:0;;18347:2:1;23731:84:0;;;18329:21:1;18386:2;18366:18;;;18359:30;18425:66;18405:18;;;18398:94;-1:-1:-1;;;18508:18:1;;;18501:39;18557:19;;23731:84:0;18145:437:1;23731:84:0;23868:8;;23858:6;23842:13;23852:2;-1:-1:-1;;;;;21529:18:0;21502:7;21529:18;;;:9;:18;;;;;;;21436:119;23842:13;:22;;;;:::i;:::-;:34;;23834:105;;;;-1:-1:-1;;;23834:105:0;;18919:2:1;23834:105:0;;;18901:21:1;18958:2;18938:18;;;18931:30;18997:66;18977:18;;;18970:94;-1:-1:-1;;;19080:18:1;;;19073:41;19131:19;;23834:105:0;18717:439:1;23834:105:0;23993:14;;-1:-1:-1;;;;;23987:20:0;;;23993:14;;23987:20;:57;;;;-1:-1:-1;24027:16:0;;-1:-1:-1;;;;;24011:33:0;;;24027:16;;24011:33;;23987:57;:99;;;;-1:-1:-1;;;;;;24049:37:0;;;;;;:31;:37;;;;;;;;24048:38;23987:99;23983:262;;;24125:6;;24115;:16;;24107:86;;;;-1:-1:-1;;;24107:86:0;;19363:2:1;24107:86:0;;;19345:21:1;19402:2;19382:18;;;19375:30;19441:66;19421:18;;;19414:94;-1:-1:-1;;;19524:18:1;;;19517:40;19574:19;;24107:86:0;19161:438:1;24107:86:0;-1:-1:-1;24225:4:0;23983:262;-1:-1:-1;;;;;24271:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;24300:23:0;;;;;;:19;:23;;;;;;;;24271:52;:68;;;-1:-1:-1;24328:11:0;;;;;;;24327:12;24271:68;24268:88;;;24351:5;24341:15;;24268:88;24418:4;24369:28;21529:18;;;:9;:18;;;;;;24369:55;;24435:12;24474:19;;24451:20;:42;24450:58;;;;;24498:10;24450:58;24435:73;;24525:7;:22;;;;-1:-1:-1;24536:11:0;;;;;;;24525:22;:36;;;;-1:-1:-1;24552:9:0;;;;;;;24551:10;24525:36;:66;;;;-1:-1:-1;;;;;;24566:25:0;;;;;;:19;:25;;;;;;;;24565:26;24525:66;:94;;;;-1:-1:-1;;;;;;24596:23:0;;;;;;:19;:23;;;;;;;;24595:24;24525:94;24521:200;;;24636:9;:16;;-1:-1:-1;;24636:16:0;;;;;24667:10;:8;:10::i;:::-;24692:9;:17;;-1:-1:-1;;24692:17:0;;;24521:200;24733:53;24748:4;24754:2;24758:6;24766:7;24775:10;24733:14;:53::i;:::-;23022:1772;;;;22953:1841;;;:::o;11600:240::-;11720:7;11781:12;11773:6;;;;11765:29;;;;-1:-1:-1;;;11765:29:0;;;;;;;;:::i;:::-;-1:-1:-1;;;11816:5:0;;;11600:240::o;25297:474::-;25387:16;;;25401:1;25387:16;;;;;;;;25363:21;;25387:16;;;;;;;;;;-1:-1:-1;25387:16:0;25363:40;;25432:4;25414;25419:1;25414:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25414:23:0;;;:7;;;;;;;;;;:23;;;;25458:16;;:23;;;-1:-1:-1;;;25458:23:0;;;;:16;;;;;:21;;:23;;;;;25414:7;;25458:23;;;;;:16;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25448:4;25453:1;25448:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25448:33:0;;;:7;;;;;;;;;:33;25524:16;;25492:63;;25509:4;;25524:16;25543:11;25492:8;:63::i;:::-;25566:16;;:197;;-1:-1:-1;;;25566:197:0;;-1:-1:-1;;;;;25566:16:0;;;;:67;;:197;;25648:11;;25566:16;;25690:4;;25717;;25737:15;;25566:197;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25352:419;25297:474;:::o;3491:191::-;3565:16;3584:6;;-1:-1:-1;;;;;3601:17:0;;;-1:-1:-1;;;;;;3601:17:0;;;;;;3634:40;;3584:6;;;;;;;3634:40;;3565:16;3634:40;3554:128;3491:191;:::o;25787:96::-;25844:14;;:31;;-1:-1:-1;;;;;25844:14:0;;;;:31;;;;;25868:6;;25844:14;:31;:14;:31;25868:6;25844:14;:31;;;;;;;;;;;;;;;;;;;;;25787:96;:::o;24802:487::-;24885:4;24841:23;21529:18;;;:9;:18;;;;;;;24939:20;;;:47;;-1:-1:-1;24963:18:0;;:23;24939:47;24935:60;;;24988:7;;24802:487::o;24935:60::-;25029:19;;:23;;25051:1;25029:23;:::i;:::-;25011:15;:41;25007:88;;;25072:19;;:23;;25094:1;25072:23;:::i;:::-;25054:41;;25007:88;25108:33;25125:15;25108:16;:33::i;:::-;25184:1;25163:18;:22;;;25227:14;;25219:62;;-1:-1:-1;;;;;25227:14:0;;;;25255:21;;25219:62;;25184:1;25219:62;25255:21;25227:14;25219:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24802:487:0:o;29499:322::-;29625:7;29620:86;;29634:14;:12;:14::i;:::-;29620:86;;;29673:33;29683:6;29691;29699;29673:9;:33::i;:::-;29664:42;;29620:86;29719:44;29737:6;29745:9;29756:6;29719:17;:44::i;:::-;29789:7;29784:29;;29798:15;29423;;29414:6;:24;29459:16;;29449:7;:26;29370:113;29141:217;29188:6;;:11;:27;;;;-1:-1:-1;29203:7:0;;:12;29188:27;29184:40;;;29141:217::o;29184:40::-;29254:6;;;29236:15;:24;29290:7;;;29271:16;:26;-1:-1:-1;29318:10:0;;;;29339:11;29141:217::o;30112:485::-;30193:7;30213:18;30234:21;30248:6;30234:13;:21::i;:::-;30213:42;-1:-1:-1;30276:12:0;30303:14;;30299:160;;30341:39;20045:4;30341:22;:6;30352:10;30341;:22::i;:39::-;30334:46;-1:-1:-1;30437:10:0;30417:17;30437:10;30334:46;30417:17;:::i;:::-;:30;;;;:::i;:::-;30395:18;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;30299:160:0;30487:8;;30483:60;;30497:46;30515:6;30531:4;30538;30497:17;:46::i;:::-;30575:14;30585:4;30575:14;;:::i;:::-;;30112:485;-1:-1:-1;;;;;;30112:485:0:o;29829:275::-;-1:-1:-1;;;;;29947:17:0;;;;;;:9;:17;;;;;;:30;;29969:7;29947:21;:30::i;:::-;-1:-1:-1;;;;;29927:17:0;;;;;;;:9;:17;;;;;;:50;;;;30011:20;;;;;;;:33;;30036:7;30011:24;:33::i;:::-;-1:-1:-1;;;;;29988:20:0;;;;;;;:9;:20;;;;;;;:56;;;;30060:36;;;;;;;;;;30088:7;3521:25:1;;3509:2;3494:18;;3375:177;30605:135:0;30662:7;30686:6;30682:26;;;-1:-1:-1;;30701:7:0;;;30605:135::o;30682:26::-;-1:-1:-1;;30726:6:0;;;30605:135::o;9702:98::-;9760:7;9787:5;9791:1;9787;:5;:::i;9321:98::-;9379:7;9406:5;9410:1;9406;:5;:::i;14:131:1:-;-1:-1:-1;;;;;89:31:1;;79:42;;69:70;;135:1;132;125:12;150:134;218:20;;247:31;218:20;247:31;:::i;:::-;150:134;;;:::o;289:247::-;348:6;401:2;389:9;380:7;376:23;372:32;369:52;;;417:1;414;407:12;369:52;456:9;443:23;475:31;500:5;475:31;:::i;541:548::-;653:4;682:2;711;700:9;693:21;743:6;737:13;786:6;781:2;770:9;766:18;759:34;811:1;821:140;835:6;832:1;829:13;821:140;;;930:14;;;926:23;;920:30;896:17;;;915:2;892:26;885:66;850:10;;821:140;;;825:3;1010:1;1005:2;996:6;985:9;981:22;977:31;970:42;1080:2;1073;1069:7;1064:2;1056:6;1052:15;1048:29;1037:9;1033:45;1029:54;1021:62;;;;541:548;;;;:::o;1094:315::-;1162:6;1170;1223:2;1211:9;1202:7;1198:23;1194:32;1191:52;;;1239:1;1236;1229:12;1191:52;1278:9;1265:23;1297:31;1322:5;1297:31;:::i;:::-;1347:5;1399:2;1384:18;;;;1371:32;;-1:-1:-1;;;1094:315:1:o;1606:180::-;1665:6;1718:2;1706:9;1697:7;1693:23;1689:32;1686:52;;;1734:1;1731;1724:12;1686:52;-1:-1:-1;1757:23:1;;1606:180;-1:-1:-1;1606:180:1:o;1791:127::-;1852:10;1847:3;1843:20;1840:1;1833:31;1883:4;1880:1;1873:15;1907:4;1904:1;1897:15;1923:118;2009:5;2002:13;1995:21;1988:5;1985:32;1975:60;;2031:1;2028;2021:12;2046:128;2111:20;;2140:28;2111:20;2140:28;:::i;2179:1191::-;2269:6;2277;2330:2;2318:9;2309:7;2305:23;2301:32;2298:52;;;2346:1;2343;2336:12;2298:52;2386:9;2373:23;2415:18;2456:2;2448:6;2445:14;2442:34;;;2472:1;2469;2462:12;2442:34;2510:6;2499:9;2495:22;2485:32;;2555:7;2548:4;2544:2;2540:13;2536:27;2526:55;;2577:1;2574;2567:12;2526:55;2613:2;2600:16;2635:4;2658:2;2654;2651:10;2648:36;;;2664:18;;:::i;:::-;2710:2;2707:1;2703:10;2742:2;2736:9;2805:2;2801:7;2796:2;2792;2788:11;2784:25;2776:6;2772:38;2860:6;2848:10;2845:22;2840:2;2828:10;2825:18;2822:46;2819:72;;;2871:18;;:::i;:::-;2907:2;2900:22;2957:18;;;2991:15;;;;-1:-1:-1;3033:11:1;;;3029:20;;;3061:19;;;3058:39;;;3093:1;3090;3083:12;3058:39;3117:11;;;;3137:148;3153:6;3148:3;3145:15;3137:148;;;3219:23;3238:3;3219:23;:::i;:::-;3207:36;;3170:12;;;;3263;;;;3137:148;;;3304:6;-1:-1:-1;3329:35:1;;-1:-1:-1;3345:18:1;;;3329:35;:::i;:::-;3319:45;;;;;;2179:1191;;;;;:::o;3557:456::-;3634:6;3642;3650;3703:2;3691:9;3682:7;3678:23;3674:32;3671:52;;;3719:1;3716;3709:12;3671:52;3758:9;3745:23;3777:31;3802:5;3777:31;:::i;:::-;3827:5;-1:-1:-1;3884:2:1;3869:18;;3856:32;3897:33;3856:32;3897:33;:::i;:::-;3557:456;;3949:7;;-1:-1:-1;;;4003:2:1;3988:18;;;;3975:32;;3557:456::o;4415:241::-;4471:6;4524:2;4512:9;4503:7;4499:23;4495:32;4492:52;;;4540:1;4537;4530:12;4492:52;4579:9;4566:23;4598:28;4620:5;4598:28;:::i;4661:388::-;4729:6;4737;4790:2;4778:9;4769:7;4765:23;4761:32;4758:52;;;4806:1;4803;4796:12;4758:52;4845:9;4832:23;4864:31;4889:5;4864:31;:::i;:::-;4914:5;-1:-1:-1;4971:2:1;4956:18;;4943:32;4984:33;4943:32;4984:33;:::i;:::-;5036:7;5026:17;;;4661:388;;;;;:::o;5054:375::-;5256:2;5238:21;;;5295:2;5275:18;;;5268:30;-1:-1:-1;;;5329:2:1;5314:18;;5307:81;5420:2;5405:18;;5054:375::o;5789:184::-;5859:6;5912:2;5900:9;5891:7;5887:23;5883:32;5880:52;;;5928:1;5925;5918:12;5880:52;-1:-1:-1;5951:16:1;;5789:184;-1:-1:-1;5789:184:1:o;6594:245::-;6661:6;6714:2;6702:9;6693:7;6689:23;6685:32;6682:52;;;6730:1;6727;6720:12;6682:52;6762:9;6756:16;6781:28;6803:5;6781:28;:::i;7237:127::-;7298:10;7293:3;7289:20;7286:1;7279:31;7329:4;7326:1;7319:15;7353:4;7350:1;7343:15;7369:422;7458:1;7501:5;7458:1;7515:270;7536:7;7526:8;7523:21;7515:270;;;7595:4;7591:1;7587:6;7583:17;7577:4;7574:27;7571:53;;;7604:18;;:::i;:::-;7654:7;7644:8;7640:22;7637:55;;;7674:16;;;;7637:55;7753:22;;;;7713:15;;;;7515:270;;;7519:3;7369:422;;;;;:::o;7796:806::-;7845:5;7875:8;7865:80;;-1:-1:-1;7916:1:1;7930:5;;7865:80;7964:4;7954:76;;-1:-1:-1;8001:1:1;8015:5;;7954:76;8046:4;8064:1;8059:59;;;;8132:1;8127:130;;;;8039:218;;8059:59;8089:1;8080:10;;8103:5;;;8127:130;8164:3;8154:8;8151:17;8148:43;;;8171:18;;:::i;:::-;-1:-1:-1;;8227:1:1;8213:16;;8242:5;;8039:218;;8341:2;8331:8;8328:16;8322:3;8316:4;8313:13;8309:36;8303:2;8293:8;8290:16;8285:2;8279:4;8276:12;8272:35;8269:77;8266:159;;;-1:-1:-1;8378:19:1;;;8410:5;;8266:159;8457:34;8482:8;8476:4;8457:34;:::i;:::-;8527:6;8523:1;8519:6;8515:19;8506:7;8503:32;8500:58;;;8538:18;;:::i;:::-;8576:20;;7796:806;-1:-1:-1;;;7796:806:1:o;8607:140::-;8665:5;8694:47;8735:4;8725:8;8721:19;8715:4;8694:47;:::i;8752:168::-;8825:9;;;8856;;8873:15;;;8867:22;;8853:37;8843:71;;8894:18;;:::i;8925:251::-;8995:6;9048:2;9036:9;9027:7;9023:23;9019:32;9016:52;;;9064:1;9061;9054:12;9016:52;9096:9;9090:16;9115:31;9140:5;9115:31;:::i;10102:306::-;10190:6;10198;10206;10259:2;10247:9;10238:7;10234:23;10230:32;10227:52;;;10275:1;10272;10265:12;10227:52;10304:9;10298:16;10288:26;;10354:2;10343:9;10339:18;10333:25;10323:35;;10398:2;10387:9;10383:18;10377:25;10367:35;;10102:306;;;;;:::o;10850:127::-;10911:10;10906:3;10902:20;10899:1;10892:31;10942:4;10939:1;10932:15;10966:4;10963:1;10956:15;10982:135;11021:3;11042:17;;;11039:43;;11062:18;;:::i;:::-;-1:-1:-1;11109:1:1;11098:13;;10982:135::o;16165:217::-;16205:1;16231;16221:132;;16275:10;16270:3;16266:20;16263:1;16256:31;16310:4;16307:1;16300:15;16338:4;16335:1;16328:15;16221:132;-1:-1:-1;16367:9:1;;16165:217::o;18587:125::-;18652:9;;;18673:10;;;18670:36;;;18686:18;;:::i;19604:980::-;19866:4;19914:3;19903:9;19899:19;19945:6;19934:9;19927:25;19971:2;20009:6;20004:2;19993:9;19989:18;19982:34;20052:3;20047:2;20036:9;20032:18;20025:31;20076:6;20111;20105:13;20142:6;20134;20127:22;20180:3;20169:9;20165:19;20158:26;;20219:2;20211:6;20207:15;20193:29;;20240:1;20250:195;20264:6;20261:1;20258:13;20250:195;;;20329:13;;-1:-1:-1;;;;;20325:39:1;20313:52;;20420:15;;;;20385:12;;;;20361:1;20279:9;20250:195;;;-1:-1:-1;;;;;;;20501:32:1;;;;20496:2;20481:18;;20474:60;-1:-1:-1;;;20565:3:1;20550:19;20543:35;20462:3;19604:980;-1:-1:-1;;;19604:980:1:o;20589:128::-;20656:9;;;20677:11;;;20674:37;;;20691:18;;:::i

Swarm Source

ipfs://04fe18272ce0a1eefe150f7921e96e440c837a7003e26c3358a2925be9f3aea0
Loading...
Loading
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.