ETH Price: $3,462.38 (-1.26%)
Gas: 4 Gwei

Token

CryptoonNetwork (CN)
 

Overview

Max Total Supply

1,000,000,000,000 CN

Holders

52

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
3,060,963,552.698901989438560873 CN

Value
$0.00
0x9463e5bc3504725a212f3ebd686cdbcca7a21ccc
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:
CryptoonNetwork

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-12-01
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.4;

/*
TG:               :  https://t.me/CryptoonNetworkEth
Website.          :  https://cryptoon-network.com
                       Join us in the adventure to building our CryptoonVerse
*/

/*
 * @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 GSN 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 virtual view returns (address) {
        return msg.sender;
    }

    function _msgData() internal virtual view returns (bytes memory) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @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) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @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 sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @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) {
        // 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 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts 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) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts 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 mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message 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,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function ceil(uint256 a, uint256 m) internal pure returns (uint256) {
    uint256 c = add(a,m);
    uint256 d = sub(c,1);
    return mul(div(d,m),m);
  }
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
        // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
        // for accounts without code, i.e. `keccak256('')`
        bytes32 codehash;


            bytes32 accountHash
         = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            codehash := extcodehash(account)
        }
        return (codehash != accountHash && codehash != 0x0);
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        return _functionCallWithValue(target, data, value, errorMessage);
    }

    function _functionCallWithValue(
        address target,
        bytes memory data,
        uint256 weiValue,
        string memory errorMessage
    ) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value: weiValue}(
            data
        );
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

/**
 * @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.
 */
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() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}


interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Pair {
    function sync() external;
}

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
      address token,
      uint liquidity,
      uint amountTokenMin,
      uint amountETHMin,
      address to,
      uint deadline
    ) external returns (uint amountETH);
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    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;
}


contract CryptoonNetwork is Context, IERC20, Ownable {
    using SafeMath for uint256;
    using Address for address;

    string private _name = "CryptoonNetwork";
    string private _symbol = "CN";
    uint256 private _decimals = 18;

    mapping(address => uint256) internal _reflectionBalance;
    mapping(address => uint256) internal _tokenBalance;
    mapping(address => mapping(address => uint256)) internal _allowances;

    uint256 private constant MAX = ~uint256(0);
    uint256 internal _tokenTotal = 1_000_000_000_000*(10**decimals());
    uint256 internal _reflectionTotal = (MAX - (MAX % _tokenTotal));

    mapping(address => bool) isTaxless;
    mapping(address => bool) internal _isExcluded;
    address[] internal _excluded;
    mapping(address => bool) internal _excludedFromMaxWallet;

    mapping(address => bool) internal _bots;

    uint256 public _feeDecimal = 0; // do not change this value...
    uint256 public _taxFee = 0; // means 0% which distribute to all holders
    uint256 public _liquidityFee = 10; // means 10% adds to liquidity on each buy and sell
    uint256 public _burnFee = 0; // 0% burn fee however burn wallet receives redistribution 


    address liquidityWallet=0x698175f92f49Bc42f97F36Cc467aa25B97F86876;
    address DEAD = 0x000000000000000000000000000000000000dEaD;

    uint256 public _taxFeeTotal;
    uint256 public _burnFeeTotal;
    uint256 public _liquidityFeeTotal;

    bool public isFeeActive = true; // should be true
    bool private inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;

    uint256 public maxWalletAmount = 25_000_000_000*(10**decimals()) ; // 2.5%
    uint256 public minTokensBeforeSwap = 10_000_000*(10**decimals());

    IUniswapV2Router02 public  uniswapV2Router;
    address public  uniswapV2Pair;

    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(uint256 tokensSwapped,uint256 ethReceived, uint256 tokensIntoLiqudity);

    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    constructor() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        uniswapV2Router = _uniswapV2Router;

        isTaxless[owner()] = true;
        isTaxless[address(this)] = true;

        setExcludedFromMaxWallet(owner(), true);
        setExcludedFromMaxWallet(address(this), true);
        setExcludedFromMaxWallet(address(uniswapV2Pair), true);
        setExcludedFromMaxWallet(address(uniswapV2Router), true);
        setExcludedFromMaxWallet(liquidityWallet, true);

        // exlcude pair address from tax rewards
        _isExcluded[address(uniswapV2Pair)] = true;
        _excluded.push(address(uniswapV2Pair));

        _reflectionBalance[owner()] = _reflectionTotal;
        emit Transfer(address(0),owner(), _tokenTotal);
    }

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

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

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

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

    function balanceOf(address account) public override view returns (uint256) {
        if (_isExcluded[account]) return _tokenBalance[account];
        return tokenFromReflection(_reflectionBalance[account]);
    }

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

    function allowance(address owner, address spender)
        public
        override
        view
        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 virtual returns (bool) {
        _transfer(sender,recipient,amount);

        _approve(sender,_msgSender(),_allowances[sender][_msgSender()].sub( amount,"ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(addedValue)
        );
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

    function isExcluded(address account) public view returns (bool) {
        return _isExcluded[account];
    }

    function reflectionFromToken(uint256 tokenAmount, bool deductTransferFee)
        public
        view
        returns (uint256)
    {
        require(tokenAmount <= _tokenTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            return tokenAmount.mul(_getReflectionRate());
        } else {
            return
                tokenAmount.sub(tokenAmount.mul(_taxFee).div(10** _feeDecimal + 2)).mul(
                    _getReflectionRate()
                );
        }
    }

    function tokenFromReflection(uint256 reflectionAmount)
        public
        view
        returns (uint256)
    {
        require(
            reflectionAmount <= _reflectionTotal,
            "Amount must be less than total reflections"
        );
        uint256 currentRate = _getReflectionRate();
        return reflectionAmount.div(currentRate);
    }

    function excludeAccount(address account) external onlyOwner() {
        require(
            account != address(uniswapV2Router),
            "ERC20: We can not exclude Uniswap router."
        );
        require(!_isExcluded[account], "ERC20: Account is already excluded");
        if (_reflectionBalance[account] > 0) {
            _tokenBalance[account] = tokenFromReflection(
                _reflectionBalance[account]
            );
        }
        _isExcluded[account] = true;
        _excluded.push(account);
    }

    function includeAccount(address account) external onlyOwner() {
        require(_isExcluded[account], "ERC20: Account is already included");
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (_excluded[i] == account) {
                _excluded[i] = _excluded[_excluded.length - 1];
                _tokenBalance[account] = 0;
                _isExcluded[account] = false;
                _excluded.pop();
                break;
            }
        }
    }

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

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

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

        if(!_excludedFromMaxWallet[recipient]) {
            require(balanceOf(recipient).add(amount) <= maxWalletAmount, "Transfer Limit Exceeds");
        }

        require(!_bots[sender], "bots cannot use token");

        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinTokenBalance = contractTokenBalance >= minTokensBeforeSwap;
        if (!inSwapAndLiquify && overMinTokenBalance && sender != uniswapV2Pair && swapAndLiquifyEnabled) {
            swapAndLiquify(contractTokenBalance);
        }

        uint256 transferAmount = amount;
        uint256 rate = _getReflectionRate();

        if(isFeeActive && !isTaxless[sender] && !isTaxless[recipient] && !inSwapAndLiquify){

            transferAmount = collectFee(sender,transferAmount,rate);

        }

        //transfer reflection
        _reflectionBalance[sender] = _reflectionBalance[sender].sub(amount.mul(rate));

        _reflectionBalance[recipient] = _reflectionBalance[recipient].add(transferAmount.mul(rate));

        //if any account belongs to the excludedAccount transfer token
        if (_isExcluded[sender]) {
            _tokenBalance[sender] = _tokenBalance[sender].sub(amount);
        }
        if (_isExcluded[recipient]) {
            _tokenBalance[recipient] = _tokenBalance[recipient].add(transferAmount);

            emit Transfer(sender, recipient, transferAmount);

        return;
        }

        emit Transfer(sender, recipient, transferAmount);

    }

    function collectFee(address account, uint256 amount, uint256 rate) private returns (uint256) {
        uint256 transferAmount = amount;

        //@dev tax fee
        if(_taxFee != 0){
            uint256 taxFee = amount.mul(_taxFee).div(10**(_feeDecimal + 2));
            transferAmount = transferAmount.sub(taxFee);
            _reflectionTotal = _reflectionTotal.sub(taxFee.mul(rate));
            _taxFeeTotal = _taxFeeTotal.add(taxFee);
        }

        //@dev liquidity fee
        if(_liquidityFee != 0){
            uint256 liquidityFee = amount.mul(_liquidityFee).div(10**(_feeDecimal + 2));
            transferAmount = transferAmount.sub(liquidityFee);
            _reflectionBalance[address(this)] = _reflectionBalance[address(this)].add(liquidityFee.mul(rate));
            if(_isExcluded[address(this)]){
                _tokenBalance[address(this)] = _tokenBalance[address(this)].add(liquidityFee);
            }
            _liquidityFeeTotal = _liquidityFeeTotal.add(liquidityFee);
            emit Transfer(account,address(this),liquidityFee);
        }

        if(_burnFee != 0){
            uint256 burnFee = amount.mul(_burnFee).div(10**(_feeDecimal + 2));
            transferAmount = transferAmount.sub(burnFee);
            _tokenTotal = _tokenTotal.sub(burnFee);
            _reflectionBalance[DEAD] = _reflectionBalance[DEAD].add(burnFee.mul(rate));
            if (_isExcluded[DEAD]) {
                _tokenBalance[DEAD] = _tokenBalance[DEAD].add(burnFee);
            }
            _reflectionTotal = _reflectionTotal.sub(burnFee.mul(rate));
            _burnFeeTotal = _burnFeeTotal.add(burnFee);
            emit Transfer(account,DEAD,burnFee);
        }

        return transferAmount;
    }

    function _getReflectionRate() private view returns (uint256) {
        uint256 reflectionSupply = _reflectionTotal;
        uint256 tokenSupply = _tokenTotal;
        for (uint256 i = 0; i < _excluded.length; i++) {
            if (
                _reflectionBalance[_excluded[i]] > reflectionSupply ||
                _tokenBalance[_excluded[i]] > tokenSupply
            ) return _reflectionTotal.div(_tokenTotal);
            reflectionSupply = reflectionSupply.sub(
                _reflectionBalance[_excluded[i]]
            );
            tokenSupply = tokenSupply.sub(_tokenBalance[_excluded[i]]);
        }
        if (reflectionSupply < _reflectionTotal.div(_tokenTotal))
            return _reflectionTotal.div(_tokenTotal);
        return reflectionSupply.div(tokenSupply);
    }

     function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        // capture the contract's current ETH balance.
        // this is so that we can capture exactly the amount of ETH that the
        // swap creates, and not make the liquidity event include any ETH that
        // has been manually sent to the contract
        uint256 initialBalance = address(this).balance;

        // swap tokens for ETH
        swapTokensForEth(contractTokenBalance); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered

        // how much ETH did we just swap into?
        uint256 newBalance = address(this).balance.sub(initialBalance);

        payable(liquidityWallet).transfer(newBalance);


    }

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }


    function setPair(address pair) external onlyOwner {
        uniswapV2Pair = pair;
    }

    function setTaxless(address account, bool value) external onlyOwner {
        isTaxless[account] = value;
    }

    function setExcludedFromMaxWallet(address account, bool value) public onlyOwner {
        _excludedFromMaxWallet[account] = value;
    }

    function setBots(address[] memory accounts, bool value) external onlyOwner {
        for(uint i = 0; i < accounts.length; i++) {
            _bots[accounts[i]] = value;
        }
    }

    function setSwapAndLiquifyEnabled(bool enabled) external onlyOwner {
        swapAndLiquifyEnabled = enabled;
        emit SwapAndLiquifyEnabledUpdated(enabled);
    }

    function setFeeActive(bool value) external onlyOwner {
        isFeeActive = value;
    }

    function setTaxFee(uint256 fee) external onlyOwner {
        _taxFee = fee;
    }

    function setBurnFee(uint256 fee) external onlyOwner {
        _burnFee = fee;
    }

    function setLiquidityFee(uint256 fee) external onlyOwner {
        _liquidityFee = fee;
    }

    function setMaxWalletAmount(uint256 amount) external onlyOwner {
        maxWalletAmount = amount;
    }

    function setMinTokensBeforeSwap(uint256 amount) external onlyOwner {
        minTokensBeforeSwap = amount;
    }

    receive() external payable {}
}

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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_burnFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_feeDecimal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFeeTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFeeTotal","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":"decimals","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isFeeActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setBurnFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"value","type":"bool"}],"name":"setFeeActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setLiquidityFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMinTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"fee","type":"uint256"}],"name":"setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setTaxless","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectionAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600f60808190526e43727970746f6f6e4e6574776f726b60881b60a0908152620000329160019190620005c7565b506040805180820190915260028082526121a760f11b60209092019182526200005c9181620005c7565b50601260038190556200007190600a620006e6565b620000829064e8d4a51000620007a4565b600781905562000095906000196200081d565b620000a390600019620007c6565b6008556000600e819055600f819055600a6010556011556012805473698175f92f49bc42f97f36cc467aa25b97f868766001600160a01b0319918216179091556013805461dead92169190911790556017805462ff00ff1916620100011790556003546200011390600a620006e6565b62000124906405d21dba00620007a4565b6018556003546200013790600a620006e6565b620001469062989680620007a4565b6019553480156200015657600080fd5b50600080546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001eb57600080fd5b505afa15801562000200573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022691906200066d565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200026f57600080fd5b505afa15801562000284573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002aa91906200066d565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002f357600080fd5b505af115801562000308573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032e91906200066d565b601b80546001600160a01b03199081166001600160a01b0393841617909155601a8054909116918316919091179055600160096000620003766000546001600160a01b031690565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526009909252902080549091166001179055620003d5620003cd6000546001600160a01b031690565b60016200053d565b620003e23060016200053d565b601b54620003fb906001600160a01b031660016200053d565b601a5462000414906001600160a01b031660016200053d565b6012546200042d906001600160a01b031660016200053d565b601b80546001600160a01b039081166000908152600a60205260408120805460ff191660019081179091559254600b8054948501815582527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db990930180546001600160a01b0319169390921692909217905560085490600490620004b96000546001600160a01b031690565b6001600160a01b03168152602081019190915260400160002055620004e66000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6007546040516200052e91815260200190565b60405180910390a35062000854565b6000546001600160a01b031633146200059c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640160405180910390fd5b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b828054620005d590620007e0565b90600052602060002090601f016020900481019282620005f9576000855562000644565b82601f106200061457805160ff191683800117855562000644565b8280016001018555821562000644579182015b828111156200064457825182559160200191906001019062000627565b506200065292915062000656565b5090565b5b8082111562000652576000815560010162000657565b6000602082840312156200067f578081fd5b81516001600160a01b038116811462000696578182fd5b9392505050565b600181815b80851115620006de578160001904821115620006c257620006c26200083e565b80851615620006d057918102915b93841c9390800290620006a2565b509250929050565b6000620006968383600082620006ff575060016200079e565b816200070e575060006200079e565b8160018114620007275760028114620007325762000752565b60019150506200079e565b60ff8411156200074657620007466200083e565b50506001821b6200079e565b5060208310610133831016604e8410600b841016171562000777575081810a6200079e565b6200078383836200069d565b80600019048211156200079a576200079a6200083e565b0290505b92915050565b6000816000190483118215151615620007c157620007c16200083e565b500290565b600082821015620007db57620007db6200083e565b500390565b600181811c90821680620007f557607f821691505b602082108114156200081757634e487b7160e01b600052602260045260246000fd5b50919050565b6000826200083957634e487b7160e01b81526012600452602481fd5b500690565b634e487b7160e01b600052601160045260246000fd5b61277480620008646000396000f3fe6080604052600436106102605760003560e01c80636bc87c3a11610144578063b7bfff65116100b6578063dd62ed3e1161007a578063dd62ed3e146106ea578063e43504da14610730578063e5d41c6b1461074a578063f2cc0c1814610760578063f2fde38b14610780578063f84354f1146107a057600080fd5b8063b7bfff651461063b578063c0b0fda21461065b578063c4081a4c14610671578063c49b9a8014610691578063cba0e996146106b157600080fd5b806395d89b411161010857806395d89b411461059a5780639c0db5f3146105af5780639d46cf8a146105cf578063a457c2d7146105e5578063a9059cbb14610605578063aa4bde281461062557600080fd5b80636bc87c3a1461051157806370a0823114610527578063715018a6146105475780638187f5161461055c5780638da5cb5b1461057c57600080fd5b8063355bc60b116101dd5780634549b039116101a15780634549b0391461045157806347f2dc5b1461047157806348a464731461049157806349bd5a5e146104b15780634a74bb02146104d15780634bf2c7c9146104f157600080fd5b8063355bc60b146103c5578063357bf15c146103db57806339509351146103fb5780633b124fe71461041b578063412201041461043157600080fd5b806319db457d1161022457806319db457d1461033857806323b872dd1461034e57806327a14fc21461036e5780632d83811914610390578063313ce567146103b057600080fd5b806306fdde031461026c578063095ea7b3146102975780630d9a5219146102c75780631694505e146102eb57806318160ddd1461032357600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102816107c0565b60405161028e91906123e6565b60405180910390f35b3480156102a357600080fd5b506102b76102b236600461228e565b610852565b604051901515815260200161028e565b3480156102d357600080fd5b506102dd60155481565b60405190815260200161028e565b3480156102f757600080fd5b50601a5461030b906001600160a01b031681565b6040516001600160a01b03909116815260200161028e565b34801561032f57600080fd5b506007546102dd565b34801561034457600080fd5b506102dd600e5481565b34801561035a57600080fd5b506102b761036936600461221a565b610869565b34801561037a57600080fd5b5061038e6103893660046123ac565b6108d2565b005b34801561039c57600080fd5b506102dd6103ab3660046123ac565b61090a565b3480156103bc57600080fd5b506003546102dd565b3480156103d157600080fd5b506102dd60145481565b3480156103e757600080fd5b5061038e6103f63660046123ac565b61098e565b34801561040757600080fd5b506102b761041636600461228e565b6109bd565b34801561042757600080fd5b506102dd600f5481565b34801561043d57600080fd5b5061038e61044c36600461225a565b6109f3565b34801561045d57600080fd5b506102dd61046c3660046123c4565b610a48565b34801561047d57600080fd5b5061038e61048c36600461225a565b610b06565b34801561049d57600080fd5b5061038e6104ac3660046123ac565b610b5b565b3480156104bd57600080fd5b50601b5461030b906001600160a01b031681565b3480156104dd57600080fd5b506017546102b79062010000900460ff1681565b3480156104fd57600080fd5b5061038e61050c3660046123ac565b610b8a565b34801561051d57600080fd5b506102dd60105481565b34801561053357600080fd5b506102dd6105423660046121aa565b610bb9565b34801561055357600080fd5b5061038e610c18565b34801561056857600080fd5b5061038e6105773660046121aa565b610c8c565b34801561058857600080fd5b506000546001600160a01b031661030b565b3480156105a657600080fd5b50610281610cd8565b3480156105bb57600080fd5b5061038e6105ca3660046122b9565b610ce7565b3480156105db57600080fd5b506102dd60165481565b3480156105f157600080fd5b506102b761060036600461228e565b610d8b565b34801561061157600080fd5b506102b761062036600461228e565b610dda565b34801561063157600080fd5b506102dd60185481565b34801561064757600080fd5b5061038e610656366004612392565b610de7565b34801561066757600080fd5b506102dd60115481565b34801561067d57600080fd5b5061038e61068c3660046123ac565b610e24565b34801561069d57600080fd5b5061038e6106ac366004612392565b610e53565b3480156106bd57600080fd5b506102b76106cc3660046121aa565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156106f657600080fd5b506102dd6107053660046121e2565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561073c57600080fd5b506017546102b79060ff1681565b34801561075657600080fd5b506102dd60195481565b34801561076c57600080fd5b5061038e61077b3660046121aa565b610ed3565b34801561078c57600080fd5b5061038e61079b3660046121aa565b6110a1565b3480156107ac57600080fd5b5061038e6107bb3660046121aa565b61118b565b6060600180546107cf90612637565b80601f01602080910402602001604051908101604052809291908181526020018280546107fb90612637565b80156108485780601f1061081d57610100808354040283529160200191610848565b820191906000526020600020905b81548152906001019060200180831161082b57829003601f168201915b5050505050905090565b600061085f338484611385565b5060015b92915050565b60006108768484846114a9565b6108c884336108c3856040518060600160405280602881526020016126d2602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611946565b611385565b5060019392505050565b6000546001600160a01b031633146109055760405162461bcd60e51b81526004016108fc90612439565b60405180910390fd5b601855565b60006008548211156109715760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108fc565b600061097b611980565b90506109878382611b42565b9392505050565b6000546001600160a01b031633146109b85760405162461bcd60e51b81526004016108fc90612439565b601055565b3360008181526006602090815260408083206001600160a01b0387168452909152812054909161085f9185906108c39086611b84565b6000546001600160a01b03163314610a1d5760405162461bcd60e51b81526004016108fc90612439565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000600754831115610a9c5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108fc565b81610aba57610ab3610aac611980565b8490611be3565b9050610863565b610ab3610ac5611980565b610b00610af9600e54600a610ada9190612559565b610ae59060026124de565b600f54610af3908990611be3565b90611b42565b8690611c62565b90611be3565b6000546001600160a01b03163314610b305760405162461bcd60e51b81526004016108fc90612439565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610b855760405162461bcd60e51b81526004016108fc90612439565b601955565b6000546001600160a01b03163314610bb45760405162461bcd60e51b81526004016108fc90612439565b601155565b6001600160a01b0381166000908152600a602052604081205460ff1615610bf657506001600160a01b031660009081526005602052604090205490565b6001600160a01b0382166000908152600460205260409020546108639061090a565b6000546001600160a01b03163314610c425760405162461bcd60e51b81526004016108fc90612439565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610cb65760405162461bcd60e51b81526004016108fc90612439565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600280546107cf90612637565b6000546001600160a01b03163314610d115760405162461bcd60e51b81526004016108fc90612439565b60005b8251811015610d865781600d6000858481518110610d4257634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d7e81612672565b915050610d14565b505050565b600061085f33846108c38560405180606001604052806025815260200161271a602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190611946565b600061085f3384846114a9565b6000546001600160a01b03163314610e115760405162461bcd60e51b81526004016108fc90612439565b6017805460ff1916911515919091179055565b6000546001600160a01b03163314610e4e5760405162461bcd60e51b81526004016108fc90612439565b600f55565b6000546001600160a01b03163314610e7d5760405162461bcd60e51b81526004016108fc90612439565b60178054821515620100000262ff0000199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610ec890831515815260200190565b60405180910390a150565b6000546001600160a01b03163314610efd5760405162461bcd60e51b81526004016108fc90612439565b601a546001600160a01b0382811691161415610f6d5760405162461bcd60e51b815260206004820152602960248201527f45524332303a2057652063616e206e6f74206578636c75646520556e6973776160448201526838103937baba32b91760b91b60648201526084016108fc565b6001600160a01b0381166000908152600a602052604090205460ff1615610fe15760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c7265616479206578636c7564604482015261195960f21b60648201526084016108fc565b6001600160a01b0381166000908152600460205260409020541561103b576001600160a01b0381166000908152600460205260409020546110219061090a565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b031633146110cb5760405162461bcd60e51b81526004016108fc90612439565b6001600160a01b0381166111305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108fc565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111b55760405162461bcd60e51b81526004016108fc90612439565b6001600160a01b0381166000908152600a602052604090205460ff166112285760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c726561647920696e636c7564604482015261195960f21b60648201526084016108fc565b60005b600b5481101561138157816001600160a01b0316600b828154811061126057634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561136f57600b805461128b90600190612620565b815481106112a957634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600b80546001600160a01b0390921691839081106112e357634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600a90925220805460ff19169055600b80548061134957634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061137981612672565b91505061122b565b5050565b6001600160a01b0383166113e75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108fc565b6001600160a01b0382166114485760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108fc565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661150d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108fc565b6001600160a01b03821661156f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108fc565b600081116115d15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108fc565b6001600160a01b0382166000908152600c602052604090205460ff1661164e576018546116078261160185610bb9565b90611b84565b111561164e5760405162461bcd60e51b81526020600482015260166024820152755472616e73666572204c696d6974204578636565647360501b60448201526064016108fc565b6001600160a01b0383166000908152600d602052604090205460ff16156116af5760405162461bcd60e51b81526020600482015260156024820152743137ba399031b0b73737ba103ab9b2903a37b5b2b760591b60448201526064016108fc565b60006116ba30610bb9565b60195460175491925082101590610100900460ff161580156116d95750805b80156116f35750601b546001600160a01b03868116911614155b8015611707575060175462010000900460ff165b156117155761171582611ca4565b826000611720611980565b60175490915060ff16801561174e57506001600160a01b03871660009081526009602052604090205460ff16155b801561177357506001600160a01b03861660009081526009602052604090205460ff16155b80156117875750601754610100900460ff16155b1561179a57611797878383611d15565b91505b6117c66117a78683611be3565b6001600160a01b03891660009081526004602052604090205490611c62565b6001600160a01b03881660009081526004602052604090205561180b6117ec8383611be3565b6001600160a01b03881660009081526004602052604090205490611b84565b6001600160a01b03808816600090815260046020908152604080832094909455918a168152600a909152205460ff161561187c576001600160a01b0387166000908152600560205260409020546118629086611c62565b6001600160a01b0388166000908152600560205260409020555b6001600160a01b0386166000908152600a602052604090205460ff1615611913576001600160a01b0386166000908152600560205260409020546118c09083611b84565b6001600160a01b0380881660008181526005602052604090819020939093559151908916906000805160206126fa833981519152906119029086815260200190565b60405180910390a350505050505050565b856001600160a01b0316876001600160a01b03166000805160206126fa8339815191528460405161190291815260200190565b6000818484111561196a5760405162461bcd60e51b81526004016108fc91906123e6565b5060006119778486612620565b95945050505050565b60085460075460009190825b600b54811015611b0f578260046000600b84815481106119bc57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611a3557508160056000600b8481548110611a0e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611a5157600754600854611a4991611b42565b935050505090565b611aa560046000600b8481548110611a7957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611c62565b9250611afb60056000600b8481548110611acf57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611c62565b915080611b0781612672565b91505061198c565b50600754600854611b1f91611b42565b821015611b3c57600754600854611b3591611b42565b9250505090565b611b3582825b600061098783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611fd7565b600080611b9183856124de565b9050838110156109875760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108fc565b600082611bf257506000610863565b6000611bfe8385612601565b905082611c0b85836124f6565b146109875760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108fc565b600061098783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611946565b6017805461ff00191661010017905547611cbd82612005565b6000611cc94783611c62565b6012546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611d04573d6000803e3d6000fd5b50506017805461ff00191690555050565b600f54600090839015611d88576000611d4f600e546002611d3691906124de565b611d4190600a612559565b600f54610af3908890611be3565b9050611d5b8282611c62565b9150611d73611d6a8286611be3565b60085490611c62565b600855601454611d839082611b84565b601455505b60105415611e7d576000611dbd600e546002611da491906124de565b611daf90600a612559565b601054610af3908890611be3565b9050611dc98282611c62565b9150611dee611dd88286611be3565b3060009081526004602052604090205490611b84565b30600090815260046020908152604080832093909355600a9052205460ff1615611e3d5730600090815260056020526040902054611e2c9082611b84565b306000908152600560205260409020555b601654611e4a9082611b84565b60165560405181815230906001600160a01b038816906000805160206126fa8339815191529060200160405180910390a3505b60115415611fcf576000611eb2600e546002611e9991906124de565b611ea490600a612559565b601154610af3908890611be3565b9050611ebe8282611c62565b600754909250611ece9082611c62565b600755611eff611ede8286611be3565b6013546001600160a01b031660009081526004602052604090205490611b84565b601380546001600160a01b0390811660009081526004602090815260408083209590955592549091168152600a909152205460ff1615611f7a576013546001600160a01b0316600090815260056020526040902054611f5e9082611b84565b6013546001600160a01b03166000908152600560205260409020555b611f87611d6a8286611be3565b600855601554611f979082611b84565b6015556013546040518281526001600160a01b03918216918816906000805160206126fa8339815191529060200160405180910390a3505b949350505050565b60008183611ff85760405162461bcd60e51b81526004016108fc91906123e6565b50600061197784866124f6565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061204857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561209c57600080fd5b505afa1580156120b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d491906121c6565b816001815181106120f557634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601a5461211b9130911684611385565b601a5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061215490859060009086903090429060040161246e565b600060405180830381600087803b15801561216e57600080fd5b505af1158015612182573d6000803e3d6000fd5b505050505050565b8035612195816126b9565b919050565b8035801515811461219557600080fd5b6000602082840312156121bb578081fd5b8135610987816126b9565b6000602082840312156121d7578081fd5b8151610987816126b9565b600080604083850312156121f4578081fd5b82356121ff816126b9565b9150602083013561220f816126b9565b809150509250929050565b60008060006060848603121561222e578081fd5b8335612239816126b9565b92506020840135612249816126b9565b929592945050506040919091013590565b6000806040838503121561226c578182fd5b8235612277816126b9565b91506122856020840161219a565b90509250929050565b600080604083850312156122a0578182fd5b82356122ab816126b9565b946020939093013593505050565b600080604083850312156122cb578182fd5b823567ffffffffffffffff808211156122e2578384fd5b818501915085601f8301126122f5578384fd5b8135602082821115612309576123096126a3565b8160051b604051601f19603f8301168101818110868211171561232e5761232e6126a3565b604052838152828101945085830182870184018b101561234c578889fd5b8896505b84871015612375576123618161218a565b865260019690960195948301948301612350565b509650612385905087820161219a565b9450505050509250929050565b6000602082840312156123a3578081fd5b6109878261219a565b6000602082840312156123bd578081fd5b5035919050565b600080604083850312156123d6578182fd5b823591506122856020840161219a565b6000602080835283518082850152825b81811015612412578581018301518582016040015282016123f6565b818111156124235783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156124bd5784516001600160a01b031683529383019391830191600101612498565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156124f1576124f161268d565b500190565b60008261251157634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156125515781600019048211156125375761253761268d565b8085161561254457918102915b93841c939080029061251b565b509250929050565b6000610987838360008261256f57506001610863565b8161257c57506000610863565b8160018114612592576002811461259c576125b8565b6001915050610863565b60ff8411156125ad576125ad61268d565b50506001821b610863565b5060208310610133831016604e8410600b84101617156125db575081810a610863565b6125e58383612516565b80600019048211156125f9576125f961268d565b029392505050565b600081600019048311821515161561261b5761261b61268d565b500290565b6000828210156126325761263261268d565b500390565b600181811c9082168061264b57607f821691505b6020821081141561266c57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126865761268661268d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146126ce57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220930a7b2561a82bbce6fb8024a9b7a068725f100833e20609c484d8d6083bd15464736f6c63430008040033

Deployed Bytecode

0x6080604052600436106102605760003560e01c80636bc87c3a11610144578063b7bfff65116100b6578063dd62ed3e1161007a578063dd62ed3e146106ea578063e43504da14610730578063e5d41c6b1461074a578063f2cc0c1814610760578063f2fde38b14610780578063f84354f1146107a057600080fd5b8063b7bfff651461063b578063c0b0fda21461065b578063c4081a4c14610671578063c49b9a8014610691578063cba0e996146106b157600080fd5b806395d89b411161010857806395d89b411461059a5780639c0db5f3146105af5780639d46cf8a146105cf578063a457c2d7146105e5578063a9059cbb14610605578063aa4bde281461062557600080fd5b80636bc87c3a1461051157806370a0823114610527578063715018a6146105475780638187f5161461055c5780638da5cb5b1461057c57600080fd5b8063355bc60b116101dd5780634549b039116101a15780634549b0391461045157806347f2dc5b1461047157806348a464731461049157806349bd5a5e146104b15780634a74bb02146104d15780634bf2c7c9146104f157600080fd5b8063355bc60b146103c5578063357bf15c146103db57806339509351146103fb5780633b124fe71461041b578063412201041461043157600080fd5b806319db457d1161022457806319db457d1461033857806323b872dd1461034e57806327a14fc21461036e5780632d83811914610390578063313ce567146103b057600080fd5b806306fdde031461026c578063095ea7b3146102975780630d9a5219146102c75780631694505e146102eb57806318160ddd1461032357600080fd5b3661026757005b600080fd5b34801561027857600080fd5b506102816107c0565b60405161028e91906123e6565b60405180910390f35b3480156102a357600080fd5b506102b76102b236600461228e565b610852565b604051901515815260200161028e565b3480156102d357600080fd5b506102dd60155481565b60405190815260200161028e565b3480156102f757600080fd5b50601a5461030b906001600160a01b031681565b6040516001600160a01b03909116815260200161028e565b34801561032f57600080fd5b506007546102dd565b34801561034457600080fd5b506102dd600e5481565b34801561035a57600080fd5b506102b761036936600461221a565b610869565b34801561037a57600080fd5b5061038e6103893660046123ac565b6108d2565b005b34801561039c57600080fd5b506102dd6103ab3660046123ac565b61090a565b3480156103bc57600080fd5b506003546102dd565b3480156103d157600080fd5b506102dd60145481565b3480156103e757600080fd5b5061038e6103f63660046123ac565b61098e565b34801561040757600080fd5b506102b761041636600461228e565b6109bd565b34801561042757600080fd5b506102dd600f5481565b34801561043d57600080fd5b5061038e61044c36600461225a565b6109f3565b34801561045d57600080fd5b506102dd61046c3660046123c4565b610a48565b34801561047d57600080fd5b5061038e61048c36600461225a565b610b06565b34801561049d57600080fd5b5061038e6104ac3660046123ac565b610b5b565b3480156104bd57600080fd5b50601b5461030b906001600160a01b031681565b3480156104dd57600080fd5b506017546102b79062010000900460ff1681565b3480156104fd57600080fd5b5061038e61050c3660046123ac565b610b8a565b34801561051d57600080fd5b506102dd60105481565b34801561053357600080fd5b506102dd6105423660046121aa565b610bb9565b34801561055357600080fd5b5061038e610c18565b34801561056857600080fd5b5061038e6105773660046121aa565b610c8c565b34801561058857600080fd5b506000546001600160a01b031661030b565b3480156105a657600080fd5b50610281610cd8565b3480156105bb57600080fd5b5061038e6105ca3660046122b9565b610ce7565b3480156105db57600080fd5b506102dd60165481565b3480156105f157600080fd5b506102b761060036600461228e565b610d8b565b34801561061157600080fd5b506102b761062036600461228e565b610dda565b34801561063157600080fd5b506102dd60185481565b34801561064757600080fd5b5061038e610656366004612392565b610de7565b34801561066757600080fd5b506102dd60115481565b34801561067d57600080fd5b5061038e61068c3660046123ac565b610e24565b34801561069d57600080fd5b5061038e6106ac366004612392565b610e53565b3480156106bd57600080fd5b506102b76106cc3660046121aa565b6001600160a01b03166000908152600a602052604090205460ff1690565b3480156106f657600080fd5b506102dd6107053660046121e2565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205490565b34801561073c57600080fd5b506017546102b79060ff1681565b34801561075657600080fd5b506102dd60195481565b34801561076c57600080fd5b5061038e61077b3660046121aa565b610ed3565b34801561078c57600080fd5b5061038e61079b3660046121aa565b6110a1565b3480156107ac57600080fd5b5061038e6107bb3660046121aa565b61118b565b6060600180546107cf90612637565b80601f01602080910402602001604051908101604052809291908181526020018280546107fb90612637565b80156108485780601f1061081d57610100808354040283529160200191610848565b820191906000526020600020905b81548152906001019060200180831161082b57829003601f168201915b5050505050905090565b600061085f338484611385565b5060015b92915050565b60006108768484846114a9565b6108c884336108c3856040518060600160405280602881526020016126d2602891396001600160a01b038a1660009081526006602090815260408083203384529091529020549190611946565b611385565b5060019392505050565b6000546001600160a01b031633146109055760405162461bcd60e51b81526004016108fc90612439565b60405180910390fd5b601855565b60006008548211156109715760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b60648201526084016108fc565b600061097b611980565b90506109878382611b42565b9392505050565b6000546001600160a01b031633146109b85760405162461bcd60e51b81526004016108fc90612439565b601055565b3360008181526006602090815260408083206001600160a01b0387168452909152812054909161085f9185906108c39086611b84565b6000546001600160a01b03163314610a1d5760405162461bcd60e51b81526004016108fc90612439565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000600754831115610a9c5760405162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c790060448201526064016108fc565b81610aba57610ab3610aac611980565b8490611be3565b9050610863565b610ab3610ac5611980565b610b00610af9600e54600a610ada9190612559565b610ae59060026124de565b600f54610af3908990611be3565b90611b42565b8690611c62565b90611be3565b6000546001600160a01b03163314610b305760405162461bcd60e51b81526004016108fc90612439565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610b855760405162461bcd60e51b81526004016108fc90612439565b601955565b6000546001600160a01b03163314610bb45760405162461bcd60e51b81526004016108fc90612439565b601155565b6001600160a01b0381166000908152600a602052604081205460ff1615610bf657506001600160a01b031660009081526005602052604090205490565b6001600160a01b0382166000908152600460205260409020546108639061090a565b6000546001600160a01b03163314610c425760405162461bcd60e51b81526004016108fc90612439565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000546001600160a01b03163314610cb65760405162461bcd60e51b81526004016108fc90612439565b601b80546001600160a01b0319166001600160a01b0392909216919091179055565b6060600280546107cf90612637565b6000546001600160a01b03163314610d115760405162461bcd60e51b81526004016108fc90612439565b60005b8251811015610d865781600d6000858481518110610d4257634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610d7e81612672565b915050610d14565b505050565b600061085f33846108c38560405180606001604052806025815260200161271a602591393360009081526006602090815260408083206001600160a01b038d1684529091529020549190611946565b600061085f3384846114a9565b6000546001600160a01b03163314610e115760405162461bcd60e51b81526004016108fc90612439565b6017805460ff1916911515919091179055565b6000546001600160a01b03163314610e4e5760405162461bcd60e51b81526004016108fc90612439565b600f55565b6000546001600160a01b03163314610e7d5760405162461bcd60e51b81526004016108fc90612439565b60178054821515620100000262ff0000199091161790556040517f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc15990610ec890831515815260200190565b60405180910390a150565b6000546001600160a01b03163314610efd5760405162461bcd60e51b81526004016108fc90612439565b601a546001600160a01b0382811691161415610f6d5760405162461bcd60e51b815260206004820152602960248201527f45524332303a2057652063616e206e6f74206578636c75646520556e6973776160448201526838103937baba32b91760b91b60648201526084016108fc565b6001600160a01b0381166000908152600a602052604090205460ff1615610fe15760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c7265616479206578636c7564604482015261195960f21b60648201526084016108fc565b6001600160a01b0381166000908152600460205260409020541561103b576001600160a01b0381166000908152600460205260409020546110219061090a565b6001600160a01b0382166000908152600560205260409020555b6001600160a01b03166000818152600a60205260408120805460ff19166001908117909155600b805491820181559091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319169091179055565b6000546001600160a01b031633146110cb5760405162461bcd60e51b81526004016108fc90612439565b6001600160a01b0381166111305760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016108fc565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146111b55760405162461bcd60e51b81526004016108fc90612439565b6001600160a01b0381166000908152600a602052604090205460ff166112285760405162461bcd60e51b815260206004820152602260248201527f45524332303a204163636f756e7420697320616c726561647920696e636c7564604482015261195960f21b60648201526084016108fc565b60005b600b5481101561138157816001600160a01b0316600b828154811061126057634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561136f57600b805461128b90600190612620565b815481106112a957634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600b80546001600160a01b0390921691839081106112e357634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600582526040808220829055600a90925220805460ff19169055600b80548061134957634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061137981612672565b91505061122b565b5050565b6001600160a01b0383166113e75760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016108fc565b6001600160a01b0382166114485760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016108fc565b6001600160a01b0383811660008181526006602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b03831661150d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016108fc565b6001600160a01b03821661156f5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016108fc565b600081116115d15760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016108fc565b6001600160a01b0382166000908152600c602052604090205460ff1661164e576018546116078261160185610bb9565b90611b84565b111561164e5760405162461bcd60e51b81526020600482015260166024820152755472616e73666572204c696d6974204578636565647360501b60448201526064016108fc565b6001600160a01b0383166000908152600d602052604090205460ff16156116af5760405162461bcd60e51b81526020600482015260156024820152743137ba399031b0b73737ba103ab9b2903a37b5b2b760591b60448201526064016108fc565b60006116ba30610bb9565b60195460175491925082101590610100900460ff161580156116d95750805b80156116f35750601b546001600160a01b03868116911614155b8015611707575060175462010000900460ff165b156117155761171582611ca4565b826000611720611980565b60175490915060ff16801561174e57506001600160a01b03871660009081526009602052604090205460ff16155b801561177357506001600160a01b03861660009081526009602052604090205460ff16155b80156117875750601754610100900460ff16155b1561179a57611797878383611d15565b91505b6117c66117a78683611be3565b6001600160a01b03891660009081526004602052604090205490611c62565b6001600160a01b03881660009081526004602052604090205561180b6117ec8383611be3565b6001600160a01b03881660009081526004602052604090205490611b84565b6001600160a01b03808816600090815260046020908152604080832094909455918a168152600a909152205460ff161561187c576001600160a01b0387166000908152600560205260409020546118629086611c62565b6001600160a01b0388166000908152600560205260409020555b6001600160a01b0386166000908152600a602052604090205460ff1615611913576001600160a01b0386166000908152600560205260409020546118c09083611b84565b6001600160a01b0380881660008181526005602052604090819020939093559151908916906000805160206126fa833981519152906119029086815260200190565b60405180910390a350505050505050565b856001600160a01b0316876001600160a01b03166000805160206126fa8339815191528460405161190291815260200190565b6000818484111561196a5760405162461bcd60e51b81526004016108fc91906123e6565b5060006119778486612620565b95945050505050565b60085460075460009190825b600b54811015611b0f578260046000600b84815481106119bc57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180611a3557508160056000600b8481548110611a0e57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15611a5157600754600854611a4991611b42565b935050505090565b611aa560046000600b8481548110611a7957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548490611c62565b9250611afb60056000600b8481548110611acf57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020548390611c62565b915080611b0781612672565b91505061198c565b50600754600854611b1f91611b42565b821015611b3c57600754600854611b3591611b42565b9250505090565b611b3582825b600061098783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611fd7565b600080611b9183856124de565b9050838110156109875760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016108fc565b600082611bf257506000610863565b6000611bfe8385612601565b905082611c0b85836124f6565b146109875760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016108fc565b600061098783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611946565b6017805461ff00191661010017905547611cbd82612005565b6000611cc94783611c62565b6012546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611d04573d6000803e3d6000fd5b50506017805461ff00191690555050565b600f54600090839015611d88576000611d4f600e546002611d3691906124de565b611d4190600a612559565b600f54610af3908890611be3565b9050611d5b8282611c62565b9150611d73611d6a8286611be3565b60085490611c62565b600855601454611d839082611b84565b601455505b60105415611e7d576000611dbd600e546002611da491906124de565b611daf90600a612559565b601054610af3908890611be3565b9050611dc98282611c62565b9150611dee611dd88286611be3565b3060009081526004602052604090205490611b84565b30600090815260046020908152604080832093909355600a9052205460ff1615611e3d5730600090815260056020526040902054611e2c9082611b84565b306000908152600560205260409020555b601654611e4a9082611b84565b60165560405181815230906001600160a01b038816906000805160206126fa8339815191529060200160405180910390a3505b60115415611fcf576000611eb2600e546002611e9991906124de565b611ea490600a612559565b601154610af3908890611be3565b9050611ebe8282611c62565b600754909250611ece9082611c62565b600755611eff611ede8286611be3565b6013546001600160a01b031660009081526004602052604090205490611b84565b601380546001600160a01b0390811660009081526004602090815260408083209590955592549091168152600a909152205460ff1615611f7a576013546001600160a01b0316600090815260056020526040902054611f5e9082611b84565b6013546001600160a01b03166000908152600560205260409020555b611f87611d6a8286611be3565b600855601554611f979082611b84565b6015556013546040518281526001600160a01b03918216918816906000805160206126fa8339815191529060200160405180910390a3505b949350505050565b60008183611ff85760405162461bcd60e51b81526004016108fc91906123e6565b50600061197784866124f6565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061204857634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601a54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561209c57600080fd5b505afa1580156120b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120d491906121c6565b816001815181106120f557634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152601a5461211b9130911684611385565b601a5460405163791ac94760e01b81526001600160a01b039091169063791ac9479061215490859060009086903090429060040161246e565b600060405180830381600087803b15801561216e57600080fd5b505af1158015612182573d6000803e3d6000fd5b505050505050565b8035612195816126b9565b919050565b8035801515811461219557600080fd5b6000602082840312156121bb578081fd5b8135610987816126b9565b6000602082840312156121d7578081fd5b8151610987816126b9565b600080604083850312156121f4578081fd5b82356121ff816126b9565b9150602083013561220f816126b9565b809150509250929050565b60008060006060848603121561222e578081fd5b8335612239816126b9565b92506020840135612249816126b9565b929592945050506040919091013590565b6000806040838503121561226c578182fd5b8235612277816126b9565b91506122856020840161219a565b90509250929050565b600080604083850312156122a0578182fd5b82356122ab816126b9565b946020939093013593505050565b600080604083850312156122cb578182fd5b823567ffffffffffffffff808211156122e2578384fd5b818501915085601f8301126122f5578384fd5b8135602082821115612309576123096126a3565b8160051b604051601f19603f8301168101818110868211171561232e5761232e6126a3565b604052838152828101945085830182870184018b101561234c578889fd5b8896505b84871015612375576123618161218a565b865260019690960195948301948301612350565b509650612385905087820161219a565b9450505050509250929050565b6000602082840312156123a3578081fd5b6109878261219a565b6000602082840312156123bd578081fd5b5035919050565b600080604083850312156123d6578182fd5b823591506122856020840161219a565b6000602080835283518082850152825b81811015612412578581018301518582016040015282016123f6565b818111156124235783604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156124bd5784516001600160a01b031683529383019391830191600101612498565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156124f1576124f161268d565b500190565b60008261251157634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156125515781600019048211156125375761253761268d565b8085161561254457918102915b93841c939080029061251b565b509250929050565b6000610987838360008261256f57506001610863565b8161257c57506000610863565b8160018114612592576002811461259c576125b8565b6001915050610863565b60ff8411156125ad576125ad61268d565b50506001821b610863565b5060208310610133831016604e8410600b84101617156125db575081810a610863565b6125e58383612516565b80600019048211156125f9576125f961268d565b029392505050565b600081600019048311821515161561261b5761261b61268d565b500290565b6000828210156126325761263261268d565b500390565b600181811c9082168061264b57607f821691505b6020821081141561266c57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156126865761268661268d565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146126ce57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220930a7b2561a82bbce6fb8024a9b7a068725f100833e20609c484d8d6083bd15464736f6c63430008040033

Deployed Bytecode Sourcemap

20249:15049:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23339:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24361:193;;;;;;;;;;-1:-1:-1;24361:193:0;;;;;:::i;:::-;;:::i;:::-;;;4658:14:1;;4651:22;4633:41;;4621:2;4606:18;24361:193:0;4588:92:1;21636:28:0;;;;;;;;;;;;;;;;;;;11915:25:1;;;11903:2;11888:18;21636:28:0;11870:76:1;22006:42:0;;;;;;;;;;-1:-1:-1;22006:42:0;;;;-1:-1:-1;;;;;22006:42:0;;;;;;-1:-1:-1;;;;;4449:32:1;;;4431:51;;4419:2;4404:18;22006:42:0;4386:102:1;23618:99:0;;;;;;;;;;-1:-1:-1;23698:11:0;;23618:99;;21128:30;;;;;;;;;;;;;;;;24562:353;;;;;;;;;;-1:-1:-1;24562:353:0;;;;;:::i;:::-;;:::i;35030:106::-;;;;;;;;;;-1:-1:-1;35030:106:0;;;;;:::i;:::-;;:::i;:::-;;26285:368;;;;;;;;;;-1:-1:-1;26285:368:0;;;;;:::i;:::-;;:::i;23525:85::-;;;;;;;;;;-1:-1:-1;23593:9:0;;23525:85;;21602:27;;;;;;;;;;;;;;;;34927:95;;;;;;;;;;-1:-1:-1;34927:95:0;;;;;:::i;:::-;;:::i;24923:300::-;;;;;;;;;;-1:-1:-1;24923:300:0;;;;;:::i;:::-;;:::i;21196:26::-;;;;;;;;;;;;;;;;34124:138;;;;;;;;;;-1:-1:-1;34124:138:0;;;;;:::i;:::-;;:::i;25757:520::-;;;;;;;;;;-1:-1:-1;25757:520:0;;;;;:::i;:::-;;:::i;34003:113::-;;;;;;;;;;-1:-1:-1;34003:113:0;;;;;:::i;:::-;;:::i;35144:114::-;;;;;;;;;;-1:-1:-1;35144:114:0;;;;;:::i;:::-;;:::i;22055:29::-;;;;;;;;;;-1:-1:-1;22055:29:0;;;;-1:-1:-1;;;;;22055:29:0;;;21804:40;;;;;;;;;;-1:-1:-1;21804:40:0;;;;;;;;;;;34834:85;;;;;;;;;;-1:-1:-1;34834:85:0;;;;;:::i;:::-;;:::i;21273:33::-;;;;;;;;;;;;;;;;23725:215;;;;;;;;;;-1:-1:-1;23725:215:0;;;;;:::i;:::-;;:::i;17808:148::-;;;;;;;;;;;;;:::i;33906:89::-;;;;;;;;;;-1:-1:-1;33906:89:0;;;;;:::i;:::-;;:::i;17166:79::-;;;;;;;;;;-1:-1:-1;17204:7:0;17231:6;-1:-1:-1;;;;;17231:6:0;17166:79;;23430:87;;;;;;;;;;;;;:::i;34270:188::-;;;;;;;;;;-1:-1:-1;34270:188:0;;;;;:::i;:::-;;:::i;21671:33::-;;;;;;;;;;;;;;;;25231:400;;;;;;;;;;-1:-1:-1;25231:400:0;;;;;:::i;:::-;;:::i;23948:213::-;;;;;;;;;;-1:-1:-1;23948:213:0;;;;;:::i;:::-;;:::i;21853:64::-;;;;;;;;;;;;;;;;34644:91;;;;;;;;;;-1:-1:-1;34644:91:0;;;;;:::i;:::-;;:::i;21365:27::-;;;;;;;;;;;;;;;;34743:83;;;;;;;;;;-1:-1:-1;34743:83:0;;;;;:::i;:::-;;:::i;34466:170::-;;;;;;;;;;-1:-1:-1;34466:170:0;;;;;:::i;:::-;;:::i;25639:110::-;;;;;;;;;;-1:-1:-1;25639:110:0;;;;;:::i;:::-;-1:-1:-1;;;;;25721:20:0;25697:4;25721:20;;;:11;:20;;;;;;;;;25639:110;24169:184;;;;;;;;;;-1:-1:-1;24169:184:0;;;;;:::i;:::-;-1:-1:-1;;;;;24318:18:0;;;24286:7;24318:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;24169:184;21713:30;;;;;;;;;;-1:-1:-1;21713:30:0;;;;;;;;21933:64;;;;;;;;;;;;;;;;26661:537;;;;;;;;;;-1:-1:-1;26661:537:0;;;;;:::i;:::-;;:::i;18111:281::-;;;;;;;;;;-1:-1:-1;18111:281:0;;;;;:::i;:::-;;:::i;27206:491::-;;;;;;;;;;-1:-1:-1;27206:491:0;;;;;:::i;:::-;;:::i;23339:83::-;23376:13;23409:5;23402:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23339:83;:::o;24361:193::-;24463:4;24485:39;879:10;24508:7;24517:6;24485:8;:39::i;:::-;-1:-1:-1;24542:4:0;24361:193;;;;;:::o;24562:353::-;24702:4;24719:34;24729:6;24736:9;24746:6;24719:9;:34::i;:::-;24766:119;24775:6;879:10;24795:89;24834:6;24795:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;24795:19:0;;;;;;:11;:19;;;;;;;;879:10;24795:33;;;;;;;;;;:37;:89::i;:::-;24766:8;:119::i;:::-;-1:-1:-1;24903:4:0;24562:353;;;;;:::o;35030:106::-;17378:6;;-1:-1:-1;;;;;17378:6:0;879:10;17378:22;17370:67;;;;-1:-1:-1;;;17370:67:0;;;;;;;:::i;:::-;;;;;;;;;35104:15:::1;:24:::0;35030:106::o;26285:368::-;26388:7;26455:16;;26435;:36;;26413:128;;;;-1:-1:-1;;;26413:128:0;;6536:2:1;26413:128:0;;;6518:21:1;6575:2;6555:18;;;6548:30;6614:34;6594:18;;;6587:62;-1:-1:-1;;;6665:18:1;;;6658:40;6715:19;;26413:128:0;6508:232:1;26413:128:0;26552:19;26574:20;:18;:20::i;:::-;26552:42;-1:-1:-1;26612:33:0;:16;26552:42;26612:20;:33::i;:::-;26605:40;26285:368;-1:-1:-1;;;26285:368:0:o;34927:95::-;17378:6;;-1:-1:-1;;;;;17378:6:0;879:10;17378:22;17370:67;;;;-1:-1:-1;;;17370:67:0;;;;;;;:::i;:::-;34995:13:::1;:19:::0;34927:95::o;24923:300::-;879:10;25038:4;25132:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;25132:34:0;;;;;;;;;;25038:4;;25060:133;;25110:7;;25132:50;;25171:10;25132:38;:50::i;34124:138::-;17378:6;;-1:-1:-1;;;;;17378:6:0;879:10;17378:22;17370:67;;;;-1:-1:-1;;;17370:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34215:31:0;;;::::1;;::::0;;;:22:::1;:31;::::0;;;;:39;;-1:-1:-1;;34215:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34124:138::o;25757:520::-;25879:7;25927:11;;25912;:26;;25904:70;;;;-1:-1:-1;;;25904:70:0;;8464:2:1;25904:70:0;;;8446:21:1;8503:2;8483:18;;;8476:30;8542:33;8522:18;;;8515:61;8593:18;;25904:70:0;8436:181:1;25904:70:0;25990:17;25985:285;;26031:37;26047:20;:18;:20::i;:::-;26031:11;;:15;:37::i;:::-;26024:44;;;;25985:285;26125:133;26219:20;:18;:20::i;:::-;26125:67;26141:50;26175:11;;26170:2;:16;;;;:::i;:::-;:20;;26189:1;26170:20;:::i;:::-;26157:7;;26141:24;;:11;;:15;:24::i;:::-;:28;;:50::i;:::-;26125:11;;:15;:67::i;:::-;:71;;:133::i;34003:113::-;17378:6;;-1:-1:-1;;;;;17378:6:0;879:10;17378:22;17370:67;;;;-1:-1:-1;;;17370:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34082:18:0;;;::::1;;::::0;;;:9:::1;:18;::::0;;;;:26;;-1:-1:-1;;34082:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34003:113::o;35144:114::-;17378:6;;-1:-1:-1;;;;;17378:6:0;879:10;17378:22;17370:67;;;;-1:-1:-1;;;17370:67:0;;;;;;;:::i;:::-;35222:19:::1;:28:::0;35144:114::o;34834:85::-;17378:6;;-1:-1:-1;;;;;17378:6:0;879:10;17378:22;17370:67;;;;-1:-1:-1;;;17370:67:0;;;;;;;:::i;:::-;34897:8:::1;:14:::0;34834:85::o;23725:215::-;-1:-1:-1;;;;;23815:20:0;;23791:7;23815:20;;;:11;:20;;;;;;;;23811:55;;;-1:-1:-1;;;;;;23844:22:0;;;;;:13;:22;;;;;;;23725:215::o;23811:55::-;-1:-1:-1;;;;;23904:27:0;;;;;;:18;:27;;;;;;23884:48;;:19;:48::i;17808:148::-;17378:6;;-1:-1:-1;;;;;17378:6:0;879:10;17378:22;17370:67;;;;-1:-1:-1;;;17370:67:0;;;;;;;:::i;:::-;17915:1:::1;17899:6:::0;;17878:40:::1;::::0;-1:-1:-1;;;;;17899:6:0;;::::1;::::0;17878:40:::1;::::0;17915:1;;17878:40:::1;17946:1;17929:19:::0;;-1:-1:-1;;;;;;17929:19:0::1;::::0;;17808:148::o;33906:89::-;17378:6;;-1:-1:-1;;;;;17378:6:0;879:10;17378:22;17370:67;;;;-1:-1:-1;;;17370:67:0;;;;;;;:::i;:::-;33967:13:::1;:20:::0;;-1:-1:-1;;;;;;33967:20:0::1;-1:-1:-1::0;;;;;33967:20:0;;;::::1;::::0;;;::::1;::::0;;33906:89::o;23430:87::-;23469:13;23502:7;23495:14;;;;;:::i;34270:188::-;17378:6;;-1:-1:-1;;;;;17378:6:0;879:10;17378:22;17370:67;;;;-1:-1:-1;;;17370:67:0;;;;;;;:::i;:::-;34360:6:::1;34356:95;34376:8;:15;34372:1;:19;34356:95;;;34434:5;34413;:18;34419:8;34428:1;34419:11;;;;;;-1:-1:-1::0;;;34419:11:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;34413:18:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;34413:18:0;:26;;-1:-1:-1;;34413:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34393:3;::::1;::::0;::::1;:::i;:::-;;;;34356:95;;;;34270:188:::0;;:::o;25231:400::-;25351:4;25373:228;879:10;25423:7;25445:145;25502:15;25445:145;;;;;;;;;;;;;;;;;879:10;25445:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;25445:34:0;;;;;;;;;;;;:38;:145::i;23948:213::-;24070:4;24091:40;879:10;24114:9;24124:6;24091:9;:40::i;34644:91::-;17378:6;;-1:-1:-1;;;;;17378:6:0;879:10;17378:22;17370:67;;;;-1:-1:-1;;;17370:67:0;;;;;;;:::i;:::-;34708:11:::1;:19:::0;;-1:-1:-1;;34708:19:0::1;::::0;::::1;;::::0;;;::::1;::::0;;34644:91::o;34743:83::-;17378:6;;-1:-1:-1;;;;;17378:6:0;879:10;17378:22;17370:67;;;;-1:-1:-1;;;17370:67:0;;;;;;;:::i;:::-;34805:7:::1;:13:::0;34743:83::o;34466:170::-;17378:6;;-1:-1:-1;;;;;17378:6:0;879:10;17378:22;17370:67;;;;-1:-1:-1;;;17370:67:0;;;;;;;:::i;:::-;34544:21:::1;:31:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;34544:31:0;;::::1;;::::0;;34591:37:::1;::::0;::::1;::::0;::::1;::::0;34568:7;4658:14:1;4651:22;4633:41;;4621:2;4606:18;;4588:92;34591:37:0::1;;;;;;;;34466:170:::0;:::o;26661:537::-;17378:6;;-1:-1:-1;;;;;17378:6:0;879:10;17378:22;17370:67;;;;-1:-1:-1;;;17370:67:0;;;;;;;:::i;:::-;26775:15:::1;::::0;-1:-1:-1;;;;;26756:35:0;;::::1;26775:15:::0;::::1;26756:35;;26734:126;;;::::0;-1:-1:-1;;;26734:126:0;;10347:2:1;26734:126:0::1;::::0;::::1;10329:21:1::0;10386:2;10366:18;;;10359:30;10425:34;10405:18;;;10398:62;-1:-1:-1;;;10476:18:1;;;10469:39;10525:19;;26734:126:0::1;10319:231:1::0;26734:126:0::1;-1:-1:-1::0;;;;;26880:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;26879:21;26871:68;;;::::0;-1:-1:-1;;;26871:68:0;;6133:2:1;26871:68:0::1;::::0;::::1;6115:21:1::0;6172:2;6152:18;;;6145:30;6211:34;6191:18;;;6184:62;-1:-1:-1;;;6262:18:1;;;6255:32;6304:19;;26871:68:0::1;6105:224:1::0;26871:68:0::1;-1:-1:-1::0;;;;;26954:27:0;::::1;26984:1;26954:27:::0;;;:18:::1;:27;::::0;;;;;:31;26950:169:::1;;-1:-1:-1::0;;;;;27065:27:0;::::1;;::::0;;;:18:::1;:27;::::0;;;;;27027:80:::1;::::0;:19:::1;:80::i;:::-;-1:-1:-1::0;;;;;27002:22:0;::::1;;::::0;;;:13:::1;:22;::::0;;;;:105;26950:169:::1;-1:-1:-1::0;;;;;27129:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;27129:27:0::1;27152:4;27129:27:::0;;::::1;::::0;;;27167:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;27167:23:0::1;::::0;;::::1;::::0;;26661:537::o;18111:281::-;17378:6;;-1:-1:-1;;;;;17378:6:0;879:10;17378:22;17370:67;;;;-1:-1:-1;;;17370:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18214:22:0;::::1;18192:110;;;::::0;-1:-1:-1;;;18192:110:0;;6947:2:1;18192:110:0::1;::::0;::::1;6929:21:1::0;6986:2;6966:18;;;6959:30;7025:34;7005:18;;;6998:62;-1:-1:-1;;;7076:18:1;;;7069:36;7122:19;;18192:110:0::1;6919:228:1::0;18192:110:0::1;18339:6;::::0;;18318:38:::1;::::0;-1:-1:-1;;;;;18318:38:0;;::::1;::::0;18339:6;::::1;::::0;18318:38:::1;::::0;::::1;18367:6;:17:::0;;-1:-1:-1;;;;;;18367:17:0::1;-1:-1:-1::0;;;;;18367:17:0;;;::::1;::::0;;;::::1;::::0;;18111:281::o;27206:491::-;17378:6;;-1:-1:-1;;;;;17378:6:0;879:10;17378:22;17370:67;;;;-1:-1:-1;;;17370:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27287:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;27279:67;;;::::0;-1:-1:-1;;;27279:67:0;;11568:2:1;27279:67:0::1;::::0;::::1;11550:21:1::0;11607:2;11587:18;;;11580:30;11646:34;11626:18;;;11619:62;-1:-1:-1;;;11697:18:1;;;11690:32;11739:19;;27279:67:0::1;11540:224:1::0;27279:67:0::1;27362:9;27357:333;27381:9;:16:::0;27377:20;::::1;27357:333;;;27439:7;-1:-1:-1::0;;;;;27423:23:0::1;:9;27433:1;27423:12;;;;;;-1:-1:-1::0;;;27423:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;27423:12:0::1;:23;27419:260;;;27482:9;27492:16:::0;;:20:::1;::::0;27511:1:::1;::::0;27492:20:::1;:::i;:::-;27482:31;;;;;;-1:-1:-1::0;;;27482:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;27467:9:::1;:12:::0;;-1:-1:-1;;;;;27482:31:0;;::::1;::::0;27477:1;;27467:12;::::1;;;-1:-1:-1::0;;;27467:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;27467:46:0::1;-1:-1:-1::0;;;;;27467:46:0;;::::1;;::::0;;27532:22;;::::1;::::0;;:13:::1;:22:::0;;;;;;:26;;;27577:11:::1;:20:::0;;;;:28;;-1:-1:-1;;27577:28:0::1;::::0;;27624:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;27624:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;27624:15:0;;;;;-1:-1:-1;;;;;;27624:15:0::1;::::0;;;;;27357:333:::1;27206:491:::0;:::o;27419:260::-:1;27399:3:::0;::::1;::::0;::::1;:::i;:::-;;;;27357:333;;;;27206:491:::0;:::o;27705:371::-;-1:-1:-1;;;;;27832:19:0;;27824:68;;;;-1:-1:-1;;;27824:68:0;;11163:2:1;27824:68:0;;;11145:21:1;11202:2;11182:18;;;11175:30;11241:34;11221:18;;;11214:62;-1:-1:-1;;;11292:18:1;;;11285:34;11336:19;;27824:68:0;11135:226:1;27824:68:0;-1:-1:-1;;;;;27911:21:0;;27903:68;;;;-1:-1:-1;;;27903:68:0;;7354:2:1;27903:68:0;;;7336:21:1;7393:2;7373:18;;;7366:30;7432:34;7412:18;;;7405:62;-1:-1:-1;;;7483:18:1;;;7476:32;7525:19;;27903:68:0;7326:224:1;27903:68:0;-1:-1:-1;;;;;27984:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28036:32;;11915:25:1;;;28036:32:0;;11888:18:1;28036:32:0;;;;;;;27705:371;;;:::o;28084:1875::-;-1:-1:-1;;;;;28215:20:0;;28207:70;;;;-1:-1:-1;;;28207:70:0;;10757:2:1;28207:70:0;;;10739:21:1;10796:2;10776:18;;;10769:30;10835:34;10815:18;;;10808:62;-1:-1:-1;;;10886:18:1;;;10879:35;10931:19;;28207:70:0;10729:227:1;28207:70:0;-1:-1:-1;;;;;28296:23:0;;28288:71;;;;-1:-1:-1;;;28288:71:0;;5729:2:1;28288:71:0;;;5711:21:1;5768:2;5748:18;;;5741:30;5807:34;5787:18;;;5780:62;-1:-1:-1;;;5858:18:1;;;5851:33;5901:19;;28288:71:0;5701:225:1;28288:71:0;28387:1;28378:6;:10;28370:64;;;;-1:-1:-1;;;28370:64:0;;9937:2:1;28370:64:0;;;9919:21:1;9976:2;9956:18;;;9949:30;10015:34;9995:18;;;9988:62;-1:-1:-1;;;10066:18:1;;;10059:39;10115:19;;28370:64:0;9909:231:1;28370:64:0;-1:-1:-1;;;;;28451:33:0;;;;;;:22;:33;;;;;;;;28447:152;;28545:15;;28509:32;28534:6;28509:20;28519:9;28509;:20::i;:::-;:24;;:32::i;:::-;:51;;28501:86;;;;-1:-1:-1;;;28501:86:0;;8113:2:1;28501:86:0;;;8095:21:1;8152:2;8132:18;;;8125:30;-1:-1:-1;;;8171:18:1;;;8164:52;8233:18;;28501:86:0;8085:172:1;28501:86:0;-1:-1:-1;;;;;28620:13:0;;;;;;:5;:13;;;;;;;;28619:14;28611:48;;;;-1:-1:-1;;;28611:48:0;;8824:2:1;28611:48:0;;;8806:21:1;8863:2;8843:18;;;8836:30;-1:-1:-1;;;8882:18:1;;;8875:51;8943:18;;28611:48:0;8796:171:1;28611:48:0;28672:28;28703:24;28721:4;28703:9;:24::i;:::-;28789:19;;28824:16;;28672:55;;-1:-1:-1;28765:43:0;;;;28824:16;;;;;28823:17;:40;;;;;28844:19;28823:40;:67;;;;-1:-1:-1;28877:13:0;;-1:-1:-1;;;;;28867:23:0;;;28877:13;;28867:23;;28823:67;:92;;;;-1:-1:-1;28894:21:0;;;;;;;28823:92;28819:161;;;28932:36;28947:20;28932:14;:36::i;:::-;29017:6;28992:22;29049:20;:18;:20::i;:::-;29085:11;;29034:35;;-1:-1:-1;29085:11:0;;:33;;;;-1:-1:-1;;;;;;29101:17:0;;;;;;:9;:17;;;;;;;;29100:18;29085:33;:58;;;;-1:-1:-1;;;;;;29123:20:0;;;;;;:9;:20;;;;;;;;29122:21;29085:58;:79;;;;-1:-1:-1;29148:16:0;;;;;;;29147:17;29085:79;29082:169;;;29199:38;29210:6;29217:14;29232:4;29199:10;:38::i;:::-;29182:55;;29082:169;29323:48;29354:16;:6;29365:4;29354:10;:16::i;:::-;-1:-1:-1;;;;;29323:26:0;;;;;;:18;:26;;;;;;;:30;:48::i;:::-;-1:-1:-1;;;;;29294:26:0;;;;;;:18;:26;;;;;:77;29416:59;29450:24;:14;29469:4;29450:18;:24::i;:::-;-1:-1:-1;;;;;29416:29:0;;;;;;:18;:29;;;;;;;:33;:59::i;:::-;-1:-1:-1;;;;;29384:29:0;;;;;;;:18;:29;;;;;;;;:91;;;;29564:19;;;;;:11;:19;;;;;;;29560:109;;;-1:-1:-1;;;;;29624:21:0;;;;;;:13;:21;;;;;;:33;;29650:6;29624:25;:33::i;:::-;-1:-1:-1;;;;;29600:21:0;;;;;;:13;:21;;;;;:57;29560:109;-1:-1:-1;;;;;29683:22:0;;;;;;:11;:22;;;;;;;;29679:210;;;-1:-1:-1;;;;;29749:24:0;;;;;;:13;:24;;;;;;:44;;29778:14;29749:28;:44::i;:::-;-1:-1:-1;;;;;29722:24:0;;;;;;;:13;:24;;;;;;;:71;;;;29815:43;;;;;;-1:-1:-1;;;;;;;;;;;29815:43:0;;;29843:14;11915:25:1;;11903:2;11888:18;;11870:76;29815:43:0;;;;;;;;29871:7;;;;28084:1875;;;:::o;29679:210::-;29923:9;-1:-1:-1;;;;;29906:43:0;29915:6;-1:-1:-1;;;;;29906:43:0;-1:-1:-1;;;;;;;;;;;29934:14:0;29906:43;;;;11915:25:1;;11903:2;11888:18;;11870:76;5714:226:0;5834:7;5870:12;5862:6;;;;5854:29;;;;-1:-1:-1;;;5854:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5894:9:0;5906:5;5910:1;5906;:5;:::i;:::-;5894:17;5714:226;-1:-1:-1;;;;;5714:226:0:o;31740:808::-;31839:16;;31888:11;;31792:7;;31839:16;31792:7;31910:458;31934:9;:16;31930:20;;31910:458;;;32029:16;31994:18;:32;32013:9;32023:1;32013:12;;;;;;-1:-1:-1;;;32013:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32013:12:0;31994:32;;;;;;;;;;;;;:51;;:113;;;32096:11;32066:13;:27;32080:9;32090:1;32080:12;;;;;;-1:-1:-1;;;32080:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32080:12:0;32066:27;;;;;;;;;;;;;:41;31994:113;31972:191;;;32151:11;;32130:16;;:33;;:20;:33::i;:::-;32123:40;;;;;31740:808;:::o;31972:191::-;32197:86;32236:18;:32;32255:9;32265:1;32255:12;;;;;;-1:-1:-1;;;32255:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32255:12:0;32236:32;;;;;;;;;;;;;32197:16;;:20;:86::i;:::-;32178:105;;32312:44;32328:13;:27;32342:9;32352:1;32342:12;;;;;;-1:-1:-1;;;32342:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32342:12:0;32328:27;;;;;;;;;;;;;32312:11;;:15;:44::i;:::-;32298:58;-1:-1:-1;31952:3:0;;;;:::i;:::-;;;;31910:458;;;-1:-1:-1;32422:11:0;;32401:16;;:33;;:20;:33::i;:::-;32382:16;:52;32378:111;;;32477:11;;32456:16;;:33;;:20;:33::i;:::-;32449:40;;;;31740:808;:::o;32378:111::-;32507:33;:16;32528:11;7146:132;7204:7;7231:39;7235:1;7238;7231:39;;;;;;;;;;;;;;;;;:3;:39::i;4811:181::-;4869:7;;4901:5;4905:1;4901;:5;:::i;:::-;4889:17;;4930:1;4925;:6;;4917:46;;;;-1:-1:-1;;;4917:46:0;;7757:2:1;4917:46:0;;;7739:21:1;7796:2;7776:18;;;7769:30;7835:29;7815:18;;;7808:57;7882:18;;4917:46:0;7729:177:1;6199:471:0;6257:7;6502:6;6498:47;;-1:-1:-1;6532:1:0;6525:8;;6498:47;6557:9;6569:5;6573:1;6569;:5;:::i;:::-;6557:17;-1:-1:-1;6602:1:0;6593:5;6597:1;6557:17;6593:5;:::i;:::-;:10;6585:56;;;;-1:-1:-1;;;6585:56:0;;9174:2:1;6585:56:0;;;9156:21:1;9213:2;9193:18;;;9186:30;9252:34;9232:18;;;9225:62;-1:-1:-1;;;9303:18:1;;;9296:31;9344:19;;6585:56:0;9146:223:1;5275:136:0;5333:7;5360:43;5364:1;5367;5360:43;;;;;;;;;;;;;;;;;:3;:43::i;32557:742::-;22280:16;:23;;-1:-1:-1;;22280:23:0;;;;;32932:21:::1;32998:38;33015:20:::0;32998:16:::1;:38::i;:::-;33167:18;33188:41;:21;33214:14:::0;33188:25:::1;:41::i;:::-;33250:15;::::0;33242:45:::1;::::0;33167:62;;-1:-1:-1;;;;;;33250:15:0::1;::::0;33242:45;::::1;;;::::0;33167:62;;33250:15:::1;33242:45:::0;33250:15;33242:45;33167:62;33250:15;33242:45;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;22326:16:0;:24;;-1:-1:-1;;22326:24:0;;;-1:-1:-1;;32557:742:0:o;29967:1765::-;30142:7;;30051;;30096:6;;30142:12;30139:290;;30170:14;30187:46;30216:11;;30230:1;30216:15;;;;:::i;:::-;30211:21;;:2;:21;:::i;:::-;30198:7;;30187:19;;:6;;:10;:19::i;:46::-;30170:63;-1:-1:-1;30265:26:0;:14;30170:63;30265:18;:26::i;:::-;30248:43;-1:-1:-1;30325:38:0;30346:16;:6;30357:4;30346:10;:16::i;:::-;30325;;;:20;:38::i;:::-;30306:16;:57;30393:12;;:24;;30410:6;30393:16;:24::i;:::-;30378:12;:39;-1:-1:-1;30139:290:0;30474:13;;:18;30471:592;;30508:20;30531:52;30566:11;;30580:1;30566:15;;;;:::i;:::-;30561:21;;:2;:21;:::i;:::-;30542:13;;30531:25;;:6;;:10;:25::i;:52::-;30508:75;-1:-1:-1;30615:32:0;:14;30508:75;30615:18;:32::i;:::-;30598:49;-1:-1:-1;30698:61:0;30736:22;:12;30753:4;30736:16;:22::i;:::-;30725:4;30698:33;;;;:18;:33;;;;;;;:37;:61::i;:::-;30689:4;30662:33;;;;:18;:33;;;;;;;;:97;;;;30777:11;:26;;;;;;30774:142;;;30876:4;30854:28;;;;:13;:28;;;;;;:46;;30887:12;30854:32;:46::i;:::-;30845:4;30823:28;;;;:13;:28;;;;;:77;30774:142;30951:18;;:36;;30974:12;30951:22;:36::i;:::-;30930:18;:57;31007:44;;11915:25:1;;;31032:4:0;;-1:-1:-1;;;;;31007:44:0;;;-1:-1:-1;;;;;;;;;;;31007:44:0;11903:2:1;11888:18;31007:44:0;;;;;;;30471:592;;31078:8;;:13;31075:616;;31107:15;31125:47;31155:11;;31169:1;31155:15;;;;:::i;:::-;31150:21;;:2;:21;:::i;:::-;31136:8;;31125:20;;:6;;:10;:20::i;:47::-;31107:65;-1:-1:-1;31204:27:0;:14;31107:65;31204:18;:27::i;:::-;31260:11;;31187:44;;-1:-1:-1;31260:24:0;;31276:7;31260:15;:24::i;:::-;31246:11;:38;31326:47;31355:17;:7;31367:4;31355:11;:17::i;:::-;31345:4;;-1:-1:-1;;;;;31345:4:0;31326:24;;;;:18;:24;;;;;;;:28;:47::i;:::-;31318:4;;;-1:-1:-1;;;;;31318:4:0;;;31299:24;;;;:18;:24;;;;;;;;:74;;;;31404:4;;;;;31392:17;;:11;:17;;;;;;;31388:112;;;31466:4;;-1:-1:-1;;;;;31466:4:0;31452:19;;;;:13;:19;;;;;;:32;;31476:7;31452:23;:32::i;:::-;31444:4;;-1:-1:-1;;;;;31444:4:0;31430:19;;;;:13;:19;;;;;:54;31388:112;31533:39;31554:17;:7;31566:4;31554:11;:17::i;31533:39::-;31514:16;:58;31603:13;;:26;;31621:7;31603:17;:26::i;:::-;31587:13;:42;31666:4;;31649:30;;11915:25:1;;;-1:-1:-1;;;;;31666:4:0;;;;31649:30;;;-1:-1:-1;;;;;;;;;;;31649:30:0;11903:2:1;11888:18;31649:30:0;;;;;;;31075:616;;31710:14;29967:1765;-1:-1:-1;;;;29967:1765:0:o;7774:312::-;7894:7;7929:12;7922:5;7914:28;;;;-1:-1:-1;;;7914:28:0;;;;;;;;:::i;:::-;-1:-1:-1;7953:9:0;7965:5;7969:1;7965;:5;:::i;33307:589::-;33457:16;;;33471:1;33457:16;;;;;;;;33433:21;;33457:16;;;;;;;;;;-1:-1:-1;33457:16:0;33433:40;;33502:4;33484;33489:1;33484:7;;;;;;-1:-1:-1;;;33484:7:0;;;;;;;;;-1:-1:-1;;;;;33484:23:0;;;:7;;;;;;;;;;:23;;;;33528:15;;:22;;;-1:-1:-1;;;33528:22:0;;;;:15;;;;;:20;;:22;;;;;33484:7;;33528:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33518:4;33523:1;33518:7;;;;;;-1:-1:-1;;;33518:7:0;;;;;;;;;-1:-1:-1;;;;;33518:32:0;;;:7;;;;;;;;;:32;33595:15;;33563:62;;33580:4;;33595:15;33613:11;33563:8;:62::i;:::-;33664:15;;:224;;-1:-1:-1;;;33664:224:0;;-1:-1:-1;;;;;33664:15:0;;;;:66;;:224;;33745:11;;33664:15;;33815:4;;33842;;33862:15;;33664:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33307:589;;:::o;14:134:1:-;82:20;;111:31;82:20;111:31;:::i;:::-;63:85;;;:::o;153:160::-;218:20;;274:13;;267:21;257:32;;247:2;;303:1;300;293:12;318:257;377:6;430:2;418:9;409:7;405:23;401:32;398:2;;;451:6;443;436:22;398:2;495:9;482:23;514:31;539:5;514:31;:::i;580:261::-;650:6;703:2;691:9;682:7;678:23;674:32;671:2;;;724:6;716;709:22;671:2;761:9;755:16;780:31;805:5;780:31;:::i;846:398::-;914:6;922;975:2;963:9;954:7;950:23;946:32;943:2;;;996:6;988;981:22;943:2;1040:9;1027:23;1059:31;1084:5;1059:31;:::i;:::-;1109:5;-1:-1:-1;1166:2:1;1151:18;;1138:32;1179:33;1138:32;1179:33;:::i;:::-;1231:7;1221:17;;;933:311;;;;;:::o;1249:466::-;1326:6;1334;1342;1395:2;1383:9;1374:7;1370:23;1366:32;1363:2;;;1416:6;1408;1401:22;1363:2;1460:9;1447:23;1479:31;1504:5;1479:31;:::i;:::-;1529:5;-1:-1:-1;1586:2:1;1571:18;;1558:32;1599:33;1558:32;1599:33;:::i;:::-;1353:362;;1651:7;;-1:-1:-1;;;1705:2:1;1690:18;;;;1677:32;;1353:362::o;1720:325::-;1785:6;1793;1846:2;1834:9;1825:7;1821:23;1817:32;1814:2;;;1867:6;1859;1852:22;1814:2;1911:9;1898:23;1930:31;1955:5;1930:31;:::i;:::-;1980:5;-1:-1:-1;2004:35:1;2035:2;2020:18;;2004:35;:::i;:::-;1994:45;;1804:241;;;;;:::o;2050:325::-;2118:6;2126;2179:2;2167:9;2158:7;2154:23;2150:32;2147:2;;;2200:6;2192;2185:22;2147:2;2244:9;2231:23;2263:31;2288:5;2263:31;:::i;:::-;2313:5;2365:2;2350:18;;;;2337:32;;-1:-1:-1;;;2137:238:1:o;2380:1247::-;2470:6;2478;2531:2;2519:9;2510:7;2506:23;2502:32;2499:2;;;2552:6;2544;2537:22;2499:2;2597:9;2584:23;2626:18;2667:2;2659:6;2656:14;2653:2;;;2688:6;2680;2673:22;2653:2;2731:6;2720:9;2716:22;2706:32;;2776:7;2769:4;2765:2;2761:13;2757:27;2747:2;;2803:6;2795;2788:22;2747:2;2844;2831:16;2866:4;2889:2;2885;2882:10;2879:2;;;2895:18;;:::i;:::-;2941:2;2938:1;2934:10;2973:2;2967:9;3036:2;3032:7;3027:2;3023;3019:11;3015:25;3007:6;3003:38;3091:6;3079:10;3076:22;3071:2;3059:10;3056:18;3053:46;3050:2;;;3102:18;;:::i;:::-;3138:2;3131:22;3188:18;;;3222:15;;;;-1:-1:-1;3257:11:1;;;3287;;;3283:20;;3280:33;-1:-1:-1;3277:2:1;;;3331:6;3323;3316:22;3277:2;3358:6;3349:15;;3373:169;3387:2;3384:1;3381:9;3373:169;;;3444:23;3463:3;3444:23;:::i;:::-;3432:36;;3405:1;3398:9;;;;;3488:12;;;;3520;;3373:169;;;-1:-1:-1;3561:6:1;-1:-1:-1;3586:35:1;;-1:-1:-1;3602:18:1;;;3586:35;:::i;:::-;3576:45;;;;;;2489:1138;;;;;:::o;3632:190::-;3688:6;3741:2;3729:9;3720:7;3716:23;3712:32;3709:2;;;3762:6;3754;3747:22;3709:2;3790:26;3806:9;3790:26;:::i;3827:190::-;3886:6;3939:2;3927:9;3918:7;3914:23;3910:32;3907:2;;;3960:6;3952;3945:22;3907:2;-1:-1:-1;3988:23:1;;3897:120;-1:-1:-1;3897:120:1:o;4022:258::-;4087:6;4095;4148:2;4136:9;4127:7;4123:23;4119:32;4116:2;;;4169:6;4161;4154:22;4116:2;4210:9;4197:23;4187:33;;4239:35;4270:2;4259:9;4255:18;4239:35;:::i;4919:603::-;5031:4;5060:2;5089;5078:9;5071:21;5121:6;5115:13;5164:6;5159:2;5148:9;5144:18;5137:34;5189:4;5202:140;5216:6;5213:1;5210:13;5202:140;;;5311:14;;;5307:23;;5301:30;5277:17;;;5296:2;5273:26;5266:66;5231:10;;5202:140;;;5360:6;5357:1;5354:13;5351:2;;;5430:4;5425:2;5416:6;5405:9;5401:22;5397:31;5390:45;5351:2;-1:-1:-1;5506:2:1;5485:15;-1:-1:-1;;5481:29:1;5466:45;;;;5513:2;5462:54;;5040:482;-1:-1:-1;;;5040:482:1:o;9374:356::-;9576:2;9558:21;;;9595:18;;;9588:30;9654:34;9649:2;9634:18;;9627:62;9721:2;9706:18;;9548:182::o;11951:983::-;12213:4;12261:3;12250:9;12246:19;12292:6;12281:9;12274:25;12318:2;12356:6;12351:2;12340:9;12336:18;12329:34;12399:3;12394:2;12383:9;12379:18;12372:31;12423:6;12458;12452:13;12489:6;12481;12474:22;12527:3;12516:9;12512:19;12505:26;;12566:2;12558:6;12554:15;12540:29;;12587:4;12600:195;12614:6;12611:1;12608:13;12600:195;;;12679:13;;-1:-1:-1;;;;;12675:39:1;12663:52;;12770:15;;;;12735:12;;;;12711:1;12629:9;12600:195;;;-1:-1:-1;;;;;;;12851:32:1;;;;12846:2;12831:18;;12824:60;-1:-1:-1;;;12915:3:1;12900:19;12893:35;12812:3;12222:712;-1:-1:-1;;;12222:712:1:o;12939:128::-;12979:3;13010:1;13006:6;13003:1;13000:13;12997:2;;;13016:18;;:::i;:::-;-1:-1:-1;13052:9:1;;12987:80::o;13072:217::-;13112:1;13138;13128:2;;-1:-1:-1;;;13163:31:1;;13217:4;13214:1;13207:15;13245:4;13170:1;13235:15;13128:2;-1:-1:-1;13274:9:1;;13118:171::o;13294:422::-;13383:1;13426:5;13383:1;13440:270;13461:7;13451:8;13448:21;13440:270;;;13520:4;13516:1;13512:6;13508:17;13502:4;13499:27;13496:2;;;13529:18;;:::i;:::-;13579:7;13569:8;13565:22;13562:2;;;13599:16;;;;13562:2;13678:22;;;;13638:15;;;;13440:270;;;13444:3;13358:358;;;;;:::o;13721:131::-;13781:5;13810:36;13837:8;13831:4;13906:5;13936:8;13926:2;;-1:-1:-1;13977:1:1;13991:5;;13926:2;14025:4;14015:2;;-1:-1:-1;14062:1:1;14076:5;;14015:2;14107:4;14125:1;14120:59;;;;14193:1;14188:130;;;;14100:218;;14120:59;14150:1;14141:10;;14164:5;;;14188:130;14225:3;14215:8;14212:17;14209:2;;;14232:18;;:::i;:::-;-1:-1:-1;;14288:1:1;14274:16;;14303:5;;14100:218;;14402:2;14392:8;14389:16;14383:3;14377:4;14374:13;14370:36;14364:2;14354:8;14351:16;14346:2;14340:4;14337:12;14333:35;14330:77;14327:2;;;-1:-1:-1;14439:19:1;;;14471:5;;14327:2;14518:34;14543:8;14537:4;14518:34;:::i;:::-;14588:6;14584:1;14580:6;14576:19;14567:7;14564:32;14561:2;;;14599:18;;:::i;:::-;14637:20;;13916:747;-1:-1:-1;;;13916:747:1:o;14668:168::-;14708:7;14774:1;14770;14766:6;14762:14;14759:1;14756:21;14751:1;14744:9;14737:17;14733:45;14730:2;;;14781:18;;:::i;:::-;-1:-1:-1;14821:9:1;;14720:116::o;14841:125::-;14881:4;14909:1;14906;14903:8;14900:2;;;14914:18;;:::i;:::-;-1:-1:-1;14951:9:1;;14890:76::o;14971:380::-;15050:1;15046:12;;;;15093;;;15114:2;;15168:4;15160:6;15156:17;15146:27;;15114:2;15221;15213:6;15210:14;15190:18;15187:38;15184:2;;;15267:10;15262:3;15258:20;15255:1;15248:31;15302:4;15299:1;15292:15;15330:4;15327:1;15320:15;15184:2;;15026:325;;;:::o;15356:135::-;15395:3;-1:-1:-1;;15416:17:1;;15413:2;;;15436:18;;:::i;:::-;-1:-1:-1;15483:1:1;15472:13;;15403:88::o;15496:127::-;15557:10;15552:3;15548:20;15545:1;15538:31;15588:4;15585:1;15578:15;15612:4;15609:1;15602:15;15628:127;15689:10;15684:3;15680:20;15677:1;15670:31;15720:4;15717:1;15710:15;15744:4;15741:1;15734:15;15760:131;-1:-1:-1;;;;;15835:31:1;;15825:42;;15815:2;;15881:1;15878;15871:12;15815:2;15805:86;:::o

Swarm Source

ipfs://930a7b2561a82bbce6fb8024a9b7a068725f100833e20609c484d8d6083bd154
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.