ETH Price: $3,071.92 (+0.76%)
Gas: 4 Gwei

Token

MOONSHOT (MOON)
 

Overview

Max Total Supply

99,000,000,000 MOON

Holders

181

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
154.806286212 MOON

Value
$0.00
0x20d31d6ad6fbb4e3f9b2122da40a55457dbbe4d1
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:
MOONSHOT

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// Moonshot Socials

// Website: http://moonshothodl.com/
// Telegram: t.me/moonshothodl
// Twitter: https://twitter.com/moonshothodl

// SPDX-License-Identifier: License not specified. Consider specifying a license.
pragma solidity ^0.8.2;

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

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

        return c;
    }

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

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

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

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

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

        return c;
    }

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

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

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

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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

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

pragma solidity ^0.8.0;

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(
        address account
    ) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(
        address owner,
        address spender
    ) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(
        address spender,
        uint256 amount
    ) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(
            fromBalance >= amount,
            "ERC20: transfer amount exceeds balance"
        );
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    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);
    }

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(
                currentAllowance >= amount,
                "ERC20: insufficient allowance"
            );
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

pragma solidity ^0.8.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;
}

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

    function balanceOf(address owner) external view returns (uint);

    function allowance(
        address owner,
        address spender
    ) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);

    function transfer(address to, uint value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint);

    function permit(
        address owner,
        address spender,
        uint value,
        uint deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(
        address indexed sender,
        uint amount0,
        uint amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

    function mint(address to) external returns (uint liquidity);

    function burn(address to) external returns (uint amount0, uint amount1);

    function swap(
        uint amount0Out,
        uint amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    )
        external
        payable
        returns (uint amountToken, uint amountETH, uint liquidity);

    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);

    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountA, uint amountB);

    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external returns (uint amountToken, uint amountETH);

    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactETHForTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function swapTokensForExactETH(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapExactTokensForETH(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);

    function swapETHForExactTokens(
        uint amountOut,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable returns (uint[] memory amounts);

    function quote(
        uint amountA,
        uint reserveA,
        uint reserveB
    ) external pure returns (uint amountB);

    function getAmountOut(
        uint amountIn,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountOut);

    function getAmountIn(
        uint amountOut,
        uint reserveIn,
        uint reserveOut
    ) external pure returns (uint amountIn);

    function getAmountsOut(
        uint amountIn,
        address[] calldata path
    ) external view returns (uint[] memory amounts);

    function getAmountsIn(
        uint amountOut,
        address[] calldata path
    ) external view returns (uint[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

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

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

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

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

// Main contract definition inheriting Context, IERC20, and Ownable
contract MOONSHOT is Context, IERC20, Ownable {
    using SafeMath for uint256; // SafeMath library usage for uint256 type.

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address deadWallet;
    address private _feeWallet; // Address of the wallet to receive the fees.

    mapping(address => uint256) private _rOwned;
    mapping(address => uint256) private _tOwned;
    mapping(address => bool) private _blacklist;
    mapping(address => uint256) public timeStamps;
    mapping(address => bool) public excludedFromLockPeriod;
    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private constant lockPeriod = 99 hours;
    uint256 private _feePercent = 1;
    uint256 private _transferFeePercent = 90;
    uint256 public burnRate = 1;
    uint256 private constant MAX = ~uint256(0);
    uint256 private _tTotal = 99 * 10 ** 9 * 10 ** 9;
    uint256 private _maxTokenBalance;
    uint256 private _rTotal = (MAX - (MAX % _tTotal));
    uint256 private _tFeeTotal;

    mapping(address => bool) public automatedMarketMakerPairs;

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    // Token details.
    string private _name = "MOONSHOT";
    string private _symbol = "MOON";
    uint8 private _decimals = 9;

    constructor() {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        // IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_router);
        // uniswapV2Router = _uniswapV2Router;
        // uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
        //     .createPair(address(this), _uniswapV2Router.WETH());
        deadWallet = 0x000000000000000000000000000000000000dEaD;
        _feeWallet = _msgSender();
        _rOwned[_msgSender()] = _rTotal;
        _maxTokenBalance = _tTotal.div((100));
        excludedFromLockPeriod[_msgSender()] = true;
        excludedFromLockPeriod[_feeWallet] = true;
        excludedFromLockPeriod[address(this)] = true;
        excludedFromLockPeriod[address(uniswapV2Pair)] = true;
        excludedFromLockPeriod[address(uniswapV2Router)] = true;
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Router), true);
        emit Transfer(address(0), _msgSender(), _tTotal);
    }

    function airdrop(
        address _recipient,
        uint256 _amount
    ) public onlyOwner returns (bool) {
        require(
            (balanceOf(_recipient) + _amount) <= _maxTokenBalance,
            "Max token balance exceeded"
        );
        _transferStandard(_msgSender(), _recipient, _amount);
        timeStamps[_recipient] = block.timestamp + lockPeriod;
        return true;
    }

    function addBlacklist(address _address) public onlyOwner {
        _blacklist[_address] = true;
    }

    function removeBlacklist(address _address) public onlyOwner {
        _blacklist[_address] = false;
    }

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

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

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

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

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

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

    function getTimeStamp(address _address) public view returns (uint256) {
        return timeStamps[_address];
    }

    function getBlockTimestamp() public view returns (uint256) {
        return block.timestamp;
    }

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

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

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

    function 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 totalFees() public view returns (uint256) {
        return _tFeeTotal;
    }

    function reflect(uint256 tAmount) public {
        address sender = _msgSender();
        // require(
        //     !_isExcluded[sender],
        //     "Excluded addresses cannot call this function"
        // );
        (uint256 rAmount, , , , ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rTotal = _rTotal.sub(rAmount);
        _tFeeTotal = _tFeeTotal.add(tAmount);
    }

    function reflectionFromToken(
        uint256 tAmount,
        bool deductTransferFee
    ) public view returns (uint256) {
        require(tAmount <= _tTotal, "Amount must be less than supply");
        if (!deductTransferFee) {
            (uint256 rAmount, , , , ) = _getValues(tAmount);
            return rAmount;
        } else {
            (, uint256 rTransferAmount, , , ) = _getValues(tAmount);
            return rTransferAmount;
        }
    }

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

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

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

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

        uint256 fee;
        uint256 burnAmount = amount.mul(burnRate).div(100);
        uint256 amountAfterTaxAndBurn;
        // Transfer between wallets 99% tax
        if (
            !excludedFromLockPeriod[sender] &&
            !automatedMarketMakerPairs[sender] &&
            !excludedFromLockPeriod[recipient] &&
            !automatedMarketMakerPairs[recipient] &&
            recipient != deadWallet
        ) {
            fee = amount.mul(_transferFeePercent).div(100);
            amountAfterTaxAndBurn = amount.sub(fee);
            _transferStandard(sender, _feeWallet, fee);
            _transferStandard(sender, recipient, amountAfterTaxAndBurn);
        }
        // burn
        else if (recipient == deadWallet) {
            fee = 0;
            _transferStandard(sender, recipient, amount);
        }
        // buy
        else if (automatedMarketMakerPairs[sender]) {
            if (!excludedFromLockPeriod[recipient]) {
                require(
                    (balanceOf(recipient) + amount) <= _maxTokenBalance,
                    "Max token balance exceeded"
                );
                fee = amount.mul(_feePercent).div(100);
                amountAfterTaxAndBurn = amount.sub(fee).sub(burnAmount);
                _transferStandard(sender, deadWallet, burnAmount);
                _transferStandard(sender, _feeWallet, fee);
                _transferStandard(sender, recipient, amountAfterTaxAndBurn);
                timeStamps[recipient] = block.timestamp + lockPeriod;
            } else {
                fee = 0;
                _transferStandard(sender, recipient, amount);
            }
        }
        // sell
        else if (automatedMarketMakerPairs[recipient]) {
            if (!excludedFromLockPeriod[sender]) {
                require(timeStamps[sender] < block.timestamp, "Locked");
                fee = amount.mul(_feePercent).div(100);
                amountAfterTaxAndBurn = amount.sub(fee).sub(burnAmount);
                _transferStandard(sender, deadWallet, burnAmount);
                _transferStandard(sender, _feeWallet, fee);
                _transferStandard(sender, recipient, amountAfterTaxAndBurn);
            } else {
                fee = 0;
                _transferStandard(sender, recipient, amount);
            }
        } else {
            if (!excludedFromLockPeriod[recipient]) {
                require(
                    (balanceOf(recipient) + amount) <= _maxTokenBalance,
                    "Max token balance exceeded"
                );
            }
            fee = 0;
            _transferStandard(sender, recipient, amount);
        }
    }

    function _transferStandard(
        address sender,
        address recipient,
        uint256 tAmount
    ) private {
        (
            uint256 rAmount,
            uint256 rTransferAmount,
            uint256 rFee,
            uint256 tTransferAmount,
            uint256 tFee
        ) = _getValues(tAmount);
        _rOwned[sender] = _rOwned[sender].sub(rAmount);
        _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);
        _reflectFee(rFee, tFee);
        emit Transfer(sender, recipient, tTransferAmount);
    }

    function _reflectFee(uint256 rFee, uint256 tFee) private {
        _rTotal = _rTotal.sub(rFee);
        _tFeeTotal = _tFeeTotal.add(tFee);
    }

    function _getValues(
        uint256 tAmount
    ) private view returns (uint256, uint256, uint256, uint256, uint256) {
        (uint256 tTransferAmount, uint256 tFee) = _getTValues(tAmount);
        uint256 currentRate = _getRate();
        (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(
            tAmount,
            tFee,
            currentRate
        );
        return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee);
    }

    function _getTValues(
        uint256 tAmount
    ) private pure returns (uint256, uint256) {
        uint256 tFee = tAmount.div(100); // Calculate fee as a percentage of the transaction amount.
        uint256 tTransferAmount = tAmount.sub(tFee); // Subtract fee from transaction amount for net transfer.
        return (tTransferAmount, tFee);
    }

    function _getRValues(
        uint256 tAmount,
        uint256 tFee,
        uint256 currentRate
    ) private pure returns (uint256, uint256, uint256) {
        uint256 rAmount = tAmount.mul(currentRate); // Calculate reflected amount of the transaction.
        uint256 rFee = tFee.mul(currentRate); // Calculate reflected fee.
        uint256 rTransferAmount = rAmount.sub(rFee); // Net reflected amount after subtracting fee.
        return (rAmount, rTransferAmount, rFee);
    }

    function _getRate() private view returns (uint256) {
        (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
        return rSupply.div(tSupply);
    }

    function _getCurrentSupply() private view returns (uint256, uint256) {
        uint256 rSupply = _rTotal;
        uint256 tSupply = _tTotal;

        if (rSupply < _rTotal.div(_tTotal)) {
            return (_rTotal, _tTotal);
        }
        return (rSupply, tSupply);
    }

    function transactionBurn(uint256 tAmount) private {
        address sender = _msgSender();
        require(sender != address(0), "ERC20: burn from the zero address");
        require(
            balanceOf(sender) >= tAmount,
            "ERC20: burn amount exceeds balance"
        );

        _transferStandard(sender, deadWallet, tAmount);
    }

    function ownerBurn(uint256 tAmount) public onlyOwner {
        transactionBurn(tAmount);
    }

    function setFeePercent(uint256 feePercent) external onlyOwner {
        _feePercent = feePercent;
    }

    function setTransferFeePercent(
        uint256 transferFeePercent
    ) external onlyOwner {
        _transferFeePercent = transferFeePercent;
    }

    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function setBurnRate(uint256 _burnRate) external onlyOwner {
        require(burnRate <= 100, "Burn rate must be less than 100");
        burnRate = _burnRate;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"addBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"airdrop","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedFromLockPeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getBlockTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getTimeStamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"ownerBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"reflect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"removeBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnRate","type":"uint256"}],"name":"setBurnRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feePercent","type":"uint256"}],"name":"setFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"transferFeePercent","type":"uint256"}],"name":"setTransferFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"timeStamps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60c06040526001600955605a600a556001600b5568055de6a779bbac0000600c55600c545f19620000319190620008d0565b5f196200003f919062000934565b600e556040518060400160405280600881526020017f4d4f4f4e53484f540000000000000000000000000000000000000000000000008152506011908162000088919062000bc9565b506040518060400160405280600481526020017f4d4f4f4e0000000000000000000000000000000000000000000000000000000081525060129081620000cf919062000bc9565b50600960135f6101000a81548160ff021916908360ff160217905550348015620000f7575f80fd5b50620001186200010c6200067d60201b60201c565b6200068460201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ae573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001d4919062000d12565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200023a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000260919062000d12565b6040518363ffffffff1660e01b81526004016200027f92919062000d53565b6020604051808303815f875af11580156200029c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002c2919062000d12565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505061dead60015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003476200067d60201b60201c565b60025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600e5460035f6200039c6200067d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550620003f16064600c546200074560201b90919060201c565b600d81905550600160075f6200040c6200067d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f60a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160075f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620005e960a05160016200079660201b60201c565b620005fe60805160016200079660201b60201c565b6200060e6200067d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600c546040516200066e919062000d8f565b60405180910390a35062000e8d565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6200078e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506200083460201b60201c565b905092915050565b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f80831182906200087d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000874919062000e34565b60405180910390fd5b505f83856200088d919062000e56565b9050809150509392505050565b5f819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620008dc826200089a565b9150620008e9836200089a565b925082620008fc57620008fb620008a3565b5b828206905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000940826200089a565b91506200094d836200089a565b925082820390508181111562000968576200096762000907565b5b92915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620009ea57607f821691505b60208210810362000a0057620009ff620009a5565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000a647fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000a27565b62000a70868362000a27565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62000ab162000aab62000aa5846200089a565b62000a88565b6200089a565b9050919050565b5f819050919050565b62000acc8362000a91565b62000ae462000adb8262000ab8565b84845462000a33565b825550505050565b5f90565b62000afa62000aec565b62000b0781848462000ac1565b505050565b5b8181101562000b2e5762000b225f8262000af0565b60018101905062000b0d565b5050565b601f82111562000b7d5762000b478162000a06565b62000b528462000a18565b8101602085101562000b62578190505b62000b7a62000b718562000a18565b83018262000b0c565b50505b505050565b5f82821c905092915050565b5f62000b9f5f198460080262000b82565b1980831691505092915050565b5f62000bb9838362000b8e565b9150826002028217905092915050565b62000bd4826200096e565b67ffffffffffffffff81111562000bf05762000bef62000978565b5b62000bfc8254620009d2565b62000c0982828562000b32565b5f60209050601f83116001811462000c3f575f841562000c2a578287015190505b62000c36858262000bac565b86555062000ca5565b601f19841662000c4f8662000a06565b5f5b8281101562000c785784890151825560018201915060208501945060208101905062000c51565b8683101562000c98578489015162000c94601f89168262000b8e565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000cdc8262000cb1565b9050919050565b62000cee8162000cd0565b811462000cf9575f80fd5b50565b5f8151905062000d0c8162000ce3565b92915050565b5f6020828403121562000d2a5762000d2962000cad565b5b5f62000d398482850162000cfc565b91505092915050565b62000d4d8162000cd0565b82525050565b5f60408201905062000d685f83018562000d42565b62000d77602083018462000d42565b9392505050565b62000d89816200089a565b82525050565b5f60208201905062000da45f83018462000d7e565b92915050565b5f82825260208201905092915050565b5f5b8381101562000dd957808201518184015260208101905062000dbc565b5f8484015250505050565b5f601f19601f8301169050919050565b5f62000e00826200096e565b62000e0c818562000daa565b935062000e1e81856020860162000dba565b62000e298162000de4565b840191505092915050565b5f6020820190508181035f83015262000e4e818462000df4565b905092915050565b5f62000e62826200089a565b915062000e6f836200089a565b92508262000e825762000e81620008a3565b5b828204905092915050565b60805160a05161330262000eb65f395f8181610bc30152610ded01525f61087901526133025ff3fe608060405234801561000f575f80fd5b5060043610610204575f3560e01c8063715018a611610118578063a457c2d7116100ab578063c831f6061161007a578063c831f60614610612578063dd62ed3e14610642578063eb470ebf14610672578063eb91e651146106a2578063f2fde38b146106be57610204565b8063a457c2d714610564578063a9059cbb14610594578063b62496f5146105c4578063bed99850146105f457610204565b80638da5cb5b116100e75780638da5cb5b146104f057806395d89b411461050e5780639a7a23d61461052c5780639cfe42da1461054857610204565b8063715018a61461047c578063796b89b9146104865780637ce3489b146104a45780638ba4cc3c146104c057610204565b806323b872dd1161019b578063395093511161016a57806339509351146103b25780633a4b3664146103e25780634549b039146103fe57806349bd5a5e1461042e57806370a082311461044c57610204565b806323b872dd146103045780632d838119146103345780633078381c14610364578063313ce5671461039457610204565b80631694505e116101d75780631694505e1461029057806318160ddd146102ae578063189d165e146102cc5780631f36d925146102e857610204565b8063053ab1821461020857806306fdde0314610224578063095ea7b31461024257806313114a9d14610272575b5f80fd5b610222600480360381019061021d9190612496565b6106da565b005b61022c6107c1565b604051610239919061254b565b60405180910390f35b61025c600480360381019061025791906125c5565b610851565b604051610269919061261d565b60405180910390f35b61027a61086e565b6040516102879190612645565b60405180910390f35b610298610877565b6040516102a591906126b9565b60405180910390f35b6102b661089b565b6040516102c39190612645565b60405180910390f35b6102e660048036038101906102e19190612496565b6108a4565b005b61030260048036038101906102fd9190612496565b6108fc565b005b61031e600480360381019061031991906126d2565b61090e565b60405161032b919061261d565b60405180910390f35b61034e60048036038101906103499190612496565b6109e2565b60405161035b9190612645565b60405180910390f35b61037e60048036038101906103799190612722565b610a4e565b60405161038b919061261d565b60405180910390f35b61039c610a6b565b6040516103a99190612768565b60405180910390f35b6103cc60048036038101906103c791906125c5565b610a80565b6040516103d9919061261d565b60405180910390f35b6103fc60048036038101906103f79190612496565b610b2e565b005b610418600480360381019061041391906127ab565b610b42565b6040516104259190612645565b60405180910390f35b610436610bc1565b60405161044391906127f8565b60405180910390f35b61046660048036038101906104619190612722565b610be5565b6040516104739190612645565b60405180910390f35b610484610c33565b005b61048e610c46565b60405161049b9190612645565b60405180910390f35b6104be60048036038101906104b99190612496565b610c4d565b005b6104da60048036038101906104d591906125c5565b610c5f565b6040516104e7919061261d565b60405180910390f35b6104f8610d2c565b60405161050591906127f8565b60405180910390f35b610516610d53565b604051610523919061254b565b60405180910390f35b61054660048036038101906105419190612811565b610de3565b005b610562600480360381019061055d9190612722565b610e87565b005b61057e600480360381019061057991906125c5565b610ee7565b60405161058b919061261d565b60405180910390f35b6105ae60048036038101906105a991906125c5565b610faf565b6040516105bb919061261d565b60405180910390f35b6105de60048036038101906105d99190612722565b610fcc565b6040516105eb919061261d565b60405180910390f35b6105fc610fe9565b6040516106099190612645565b60405180910390f35b61062c60048036038101906106279190612722565b610fef565b6040516106399190612645565b60405180910390f35b61065c6004803603810190610657919061284f565b611004565b6040516106699190612645565b60405180910390f35b61068c60048036038101906106879190612722565b611086565b6040516106999190612645565b60405180910390f35b6106bc60048036038101906106b79190612722565b6110cc565b005b6106d860048036038101906106d39190612722565b61112b565b005b5f6106e36111ad565b90505f6106ef836111b4565b5050505090506107458160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461120590919063ffffffff16565b60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061079b81600e5461120590919063ffffffff16565b600e819055506107b683600f5461124e90919063ffffffff16565b600f81905550505050565b6060601180546107d0906128ba565b80601f01602080910402602001604051908101604052809291908181526020018280546107fc906128ba565b80156108475780601f1061081e57610100808354040283529160200191610847565b820191905f5260205f20905b81548152906001019060200180831161082a57829003601f168201915b5050505050905090565b5f61086461085d6111ad565b84846112ab565b6001905092915050565b5f600f54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600c54905090565b6108ac61146e565b6064600b5411156108f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e990612934565b60405180910390fd5b80600b8190555050565b61090461146e565b80600a8190555050565b5f61091a8484846114ec565b6109d7846109266111ad565b6109d2856040518060600160405280602881526020016132806028913960085f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6109896111ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611d939092919063ffffffff16565b6112ab565b600190509392505050565b5f600e54821115610a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1f906129c2565b60405180910390fd5b5f610a31611df5565b9050610a468184611e1e90919063ffffffff16565b915050919050565b6007602052805f5260405f205f915054906101000a900460ff1681565b5f60135f9054906101000a900460ff16905090565b5f610b24610a8c6111ad565b84610b1f8560085f610a9c6111ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461124e90919063ffffffff16565b6112ab565b6001905092915050565b610b3661146e565b610b3f81611e67565b50565b5f600c54831115610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f90612a2a565b60405180910390fd5b81610ba6575f610b97846111b4565b50505050905080915050610bbb565b5f610bb0846111b4565b505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f610c2c60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546109e2565b9050919050565b610c3b61146e565b610c445f611f5b565b565b5f42905090565b610c5561146e565b8060098190555050565b5f610c6861146e565b600d5482610c7585610be5565b610c7f9190612a75565b1115610cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb790612af2565b60405180910390fd5b610cd2610ccb6111ad565b848461201c565b6205703042610ce19190612a75565b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506001905092915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060128054610d62906128ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8e906128ba565b8015610dd95780601f10610db057610100808354040283529160200191610dd9565b820191905f5260205f20905b815481529060010190602001808311610dbc57829003601f168201915b5050505050905090565b610deb61146e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7090612b80565b60405180910390fd5b610e8382826121cf565b5050565b610e8f61146e565b600160055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f610fa5610ef36111ad565b84610fa0856040518060600160405280602581526020016132a86025913960085f610f1c6111ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611d939092919063ffffffff16565b6112ab565b6001905092915050565b5f610fc2610fbb6111ad565b84846114ec565b6001905092915050565b6010602052805f5260405f205f915054906101000a900460ff1681565b600b5481565b6006602052805f5260405f205f915090505481565b5f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6110d461146e565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b61113361146e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119890612c0e565b60405180910390fd5b6111aa81611f5b565b50565b5f33905090565b5f805f805f805f6111c48861226d565b915091505f6111d1611df5565b90505f805f6111e18c86866122a9565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b5f61124683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d93565b905092915050565b5f80828461125c9190612a75565b9050838110156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129890612c76565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090612d04565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e90612d92565b60405180910390fd5b8060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114619190612645565b60405180910390a3505050565b6114766111ad565b73ffffffffffffffffffffffffffffffffffffffff16611494610d2c565b73ffffffffffffffffffffffffffffffffffffffff16146114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190612dfa565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190612e88565b60405180910390fd5b5f811161159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390612f16565b60405180910390fd5b60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d90612f7e565b60405180910390fd5b5f806116506064611642600b548661230390919063ffffffff16565b611e1e90919063ffffffff16565b90505f60075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156116f1575060105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611744575060075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611797575060105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156117f0575060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156118705761181d606461180f600a548761230390919063ffffffff16565b611e1e90919063ffffffff16565b9250611832838561120590919063ffffffff16565b90506118608660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561201c565b61186b86868361201c565b611d8b565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036118d7575f92506118d286868661201c565b611d8a565b60105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611ae95760075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611ad557600d548461198187610be5565b61198b9190612a75565b11156119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c390612af2565b60405180910390fd5b6119f460646119e66009548761230390919063ffffffff16565b611e1e90919063ffffffff16565b9250611a1b82611a0d858761120590919063ffffffff16565b61120590919063ffffffff16565b9050611a498660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461201c565b611a758660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561201c565b611a8086868361201c565b6205703042611a8f9190612a75565b60065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611ae4565b5f9250611ae386868661201c565b5b611d89565b60105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611cd25760075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611cbe574260065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc90612fe6565b60405180910390fd5b611c2d6064611c1f6009548761230390919063ffffffff16565b611e1e90919063ffffffff16565b9250611c5482611c46858761120590919063ffffffff16565b61120590919063ffffffff16565b9050611c828660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461201c565b611cae8660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561201c565b611cb986868361201c565b611ccd565b5f9250611ccc86868661201c565b5b611d88565b60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611d7957600d5484611d2d87610be5565b611d379190612a75565b1115611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f90612af2565b60405180910390fd5b5b5f9250611d8786868661201c565b5b5b5b5b505050505050565b5f838311158290611dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd1919061254b565b60405180910390fd5b505f8385611de89190613004565b9050809150509392505050565b5f805f611e0061237a565b91509150611e178183611e1e90919063ffffffff16565b9250505090565b5f611e5f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506123c4565b905092915050565b5f611e706111ad565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed7906130a7565b60405180910390fd5b81611eea82610be5565b1015611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2290613135565b60405180910390fd5b611f578160015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461201c565b5050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f805f805f61202a866111b4565b945094509450945094506120848560035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461120590919063ffffffff16565b60035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506121158460035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461124e90919063ffffffff16565b60035f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506121608382612425565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121bd9190612645565b60405180910390a35050505050505050565b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f805f612284606485611e1e90919063ffffffff16565b90505f61229a828661120590919063ffffffff16565b90508082935093505050915091565b5f805f806122c0858861230390919063ffffffff16565b90505f6122d6868861230390919063ffffffff16565b90505f6122ec828461120590919063ffffffff16565b905082818395509550955050505093509350939050565b5f808303612313575f9050612374565b5f82846123209190613153565b905082848261232f91906131c1565b1461236f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236690613261565b60405180910390fd5b809150505b92915050565b5f805f600e5490505f600c54905061239f600c54600e54611e1e90919063ffffffff16565b8210156123b757600e54600c549350935050506123c0565b81819350935050505b9091565b5f808311829061240a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612401919061254b565b60405180910390fd5b505f838561241891906131c1565b9050809150509392505050565b61243a82600e5461120590919063ffffffff16565b600e8190555061245581600f5461124e90919063ffffffff16565b600f819055505050565b5f80fd5b5f819050919050565b61247581612463565b811461247f575f80fd5b50565b5f813590506124908161246c565b92915050565b5f602082840312156124ab576124aa61245f565b5b5f6124b884828501612482565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156124f85780820151818401526020810190506124dd565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61251d826124c1565b61252781856124cb565b93506125378185602086016124db565b61254081612503565b840191505092915050565b5f6020820190508181035f8301526125638184612513565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6125948261256b565b9050919050565b6125a48161258a565b81146125ae575f80fd5b50565b5f813590506125bf8161259b565b92915050565b5f80604083850312156125db576125da61245f565b5b5f6125e8858286016125b1565b92505060206125f985828601612482565b9150509250929050565b5f8115159050919050565b61261781612603565b82525050565b5f6020820190506126305f83018461260e565b92915050565b61263f81612463565b82525050565b5f6020820190506126585f830184612636565b92915050565b5f819050919050565b5f61268161267c6126778461256b565b61265e565b61256b565b9050919050565b5f61269282612667565b9050919050565b5f6126a382612688565b9050919050565b6126b381612699565b82525050565b5f6020820190506126cc5f8301846126aa565b92915050565b5f805f606084860312156126e9576126e861245f565b5b5f6126f6868287016125b1565b9350506020612707868287016125b1565b925050604061271886828701612482565b9150509250925092565b5f602082840312156127375761273661245f565b5b5f612744848285016125b1565b91505092915050565b5f60ff82169050919050565b6127628161274d565b82525050565b5f60208201905061277b5f830184612759565b92915050565b61278a81612603565b8114612794575f80fd5b50565b5f813590506127a581612781565b92915050565b5f80604083850312156127c1576127c061245f565b5b5f6127ce85828601612482565b92505060206127df85828601612797565b9150509250929050565b6127f28161258a565b82525050565b5f60208201905061280b5f8301846127e9565b92915050565b5f80604083850312156128275761282661245f565b5b5f612834858286016125b1565b925050602061284585828601612797565b9150509250929050565b5f80604083850312156128655761286461245f565b5b5f612872858286016125b1565b9250506020612883858286016125b1565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806128d157607f821691505b6020821081036128e4576128e361288d565b5b50919050565b7f4275726e2072617465206d757374206265206c657373207468616e20313030005f82015250565b5f61291e601f836124cb565b9150612929826128ea565b602082019050919050565b5f6020820190508181035f83015261294b81612912565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f6129ac602a836124cb565b91506129b782612952565b604082019050919050565b5f6020820190508181035f8301526129d9816129a0565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c79005f82015250565b5f612a14601f836124cb565b9150612a1f826129e0565b602082019050919050565b5f6020820190508181035f830152612a4181612a08565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612a7f82612463565b9150612a8a83612463565b9250828201905080821115612aa257612aa1612a48565b5b92915050565b7f4d617820746f6b656e2062616c616e63652065786365656465640000000000005f82015250565b5f612adc601a836124cb565b9150612ae782612aa8565b602082019050919050565b5f6020820190508181035f830152612b0981612ad0565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f612b6a6039836124cb565b9150612b7582612b10565b604082019050919050565b5f6020820190508181035f830152612b9781612b5e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612bf86026836124cb565b9150612c0382612b9e565b604082019050919050565b5f6020820190508181035f830152612c2581612bec565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f612c60601b836124cb565b9150612c6b82612c2c565b602082019050919050565b5f6020820190508181035f830152612c8d81612c54565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612cee6024836124cb565b9150612cf982612c94565b604082019050919050565b5f6020820190508181035f830152612d1b81612ce2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612d7c6022836124cb565b9150612d8782612d22565b604082019050919050565b5f6020820190508181035f830152612da981612d70565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612de46020836124cb565b9150612def82612db0565b602082019050919050565b5f6020820190508181035f830152612e1181612dd8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612e726025836124cb565b9150612e7d82612e18565b604082019050919050565b5f6020820190508181035f830152612e9f81612e66565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f612f006029836124cb565b9150612f0b82612ea6565b604082019050919050565b5f6020820190508181035f830152612f2d81612ef4565b9050919050565b7f4164647265737320697320626c61636b6c6973746564000000000000000000005f82015250565b5f612f686016836124cb565b9150612f7382612f34565b602082019050919050565b5f6020820190508181035f830152612f9581612f5c565b9050919050565b7f4c6f636b656400000000000000000000000000000000000000000000000000005f82015250565b5f612fd06006836124cb565b9150612fdb82612f9c565b602082019050919050565b5f6020820190508181035f830152612ffd81612fc4565b9050919050565b5f61300e82612463565b915061301983612463565b925082820390508181111561303157613030612a48565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f6130916021836124cb565b915061309c82613037565b604082019050919050565b5f6020820190508181035f8301526130be81613085565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f61311f6022836124cb565b915061312a826130c5565b604082019050919050565b5f6020820190508181035f83015261314c81613113565b9050919050565b5f61315d82612463565b915061316883612463565b925082820261317681612463565b9150828204841483151761318d5761318c612a48565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6131cb82612463565b91506131d683612463565b9250826131e6576131e5613194565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61324b6021836124cb565b9150613256826131f1565b604082019050919050565b5f6020820190508181035f8301526132788161323f565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220683ecc603d8f4302cdb82ab2fda43214695c5eb344c5e659d4d89e2120388ff364736f6c63430008160033

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610204575f3560e01c8063715018a611610118578063a457c2d7116100ab578063c831f6061161007a578063c831f60614610612578063dd62ed3e14610642578063eb470ebf14610672578063eb91e651146106a2578063f2fde38b146106be57610204565b8063a457c2d714610564578063a9059cbb14610594578063b62496f5146105c4578063bed99850146105f457610204565b80638da5cb5b116100e75780638da5cb5b146104f057806395d89b411461050e5780639a7a23d61461052c5780639cfe42da1461054857610204565b8063715018a61461047c578063796b89b9146104865780637ce3489b146104a45780638ba4cc3c146104c057610204565b806323b872dd1161019b578063395093511161016a57806339509351146103b25780633a4b3664146103e25780634549b039146103fe57806349bd5a5e1461042e57806370a082311461044c57610204565b806323b872dd146103045780632d838119146103345780633078381c14610364578063313ce5671461039457610204565b80631694505e116101d75780631694505e1461029057806318160ddd146102ae578063189d165e146102cc5780631f36d925146102e857610204565b8063053ab1821461020857806306fdde0314610224578063095ea7b31461024257806313114a9d14610272575b5f80fd5b610222600480360381019061021d9190612496565b6106da565b005b61022c6107c1565b604051610239919061254b565b60405180910390f35b61025c600480360381019061025791906125c5565b610851565b604051610269919061261d565b60405180910390f35b61027a61086e565b6040516102879190612645565b60405180910390f35b610298610877565b6040516102a591906126b9565b60405180910390f35b6102b661089b565b6040516102c39190612645565b60405180910390f35b6102e660048036038101906102e19190612496565b6108a4565b005b61030260048036038101906102fd9190612496565b6108fc565b005b61031e600480360381019061031991906126d2565b61090e565b60405161032b919061261d565b60405180910390f35b61034e60048036038101906103499190612496565b6109e2565b60405161035b9190612645565b60405180910390f35b61037e60048036038101906103799190612722565b610a4e565b60405161038b919061261d565b60405180910390f35b61039c610a6b565b6040516103a99190612768565b60405180910390f35b6103cc60048036038101906103c791906125c5565b610a80565b6040516103d9919061261d565b60405180910390f35b6103fc60048036038101906103f79190612496565b610b2e565b005b610418600480360381019061041391906127ab565b610b42565b6040516104259190612645565b60405180910390f35b610436610bc1565b60405161044391906127f8565b60405180910390f35b61046660048036038101906104619190612722565b610be5565b6040516104739190612645565b60405180910390f35b610484610c33565b005b61048e610c46565b60405161049b9190612645565b60405180910390f35b6104be60048036038101906104b99190612496565b610c4d565b005b6104da60048036038101906104d591906125c5565b610c5f565b6040516104e7919061261d565b60405180910390f35b6104f8610d2c565b60405161050591906127f8565b60405180910390f35b610516610d53565b604051610523919061254b565b60405180910390f35b61054660048036038101906105419190612811565b610de3565b005b610562600480360381019061055d9190612722565b610e87565b005b61057e600480360381019061057991906125c5565b610ee7565b60405161058b919061261d565b60405180910390f35b6105ae60048036038101906105a991906125c5565b610faf565b6040516105bb919061261d565b60405180910390f35b6105de60048036038101906105d99190612722565b610fcc565b6040516105eb919061261d565b60405180910390f35b6105fc610fe9565b6040516106099190612645565b60405180910390f35b61062c60048036038101906106279190612722565b610fef565b6040516106399190612645565b60405180910390f35b61065c6004803603810190610657919061284f565b611004565b6040516106699190612645565b60405180910390f35b61068c60048036038101906106879190612722565b611086565b6040516106999190612645565b60405180910390f35b6106bc60048036038101906106b79190612722565b6110cc565b005b6106d860048036038101906106d39190612722565b61112b565b005b5f6106e36111ad565b90505f6106ef836111b4565b5050505090506107458160035f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461120590919063ffffffff16565b60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555061079b81600e5461120590919063ffffffff16565b600e819055506107b683600f5461124e90919063ffffffff16565b600f81905550505050565b6060601180546107d0906128ba565b80601f01602080910402602001604051908101604052809291908181526020018280546107fc906128ba565b80156108475780601f1061081e57610100808354040283529160200191610847565b820191905f5260205f20905b81548152906001019060200180831161082a57829003601f168201915b5050505050905090565b5f61086461085d6111ad565b84846112ab565b6001905092915050565b5f600f54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600c54905090565b6108ac61146e565b6064600b5411156108f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e990612934565b60405180910390fd5b80600b8190555050565b61090461146e565b80600a8190555050565b5f61091a8484846114ec565b6109d7846109266111ad565b6109d2856040518060600160405280602881526020016132806028913960085f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6109896111ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611d939092919063ffffffff16565b6112ab565b600190509392505050565b5f600e54821115610a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1f906129c2565b60405180910390fd5b5f610a31611df5565b9050610a468184611e1e90919063ffffffff16565b915050919050565b6007602052805f5260405f205f915054906101000a900460ff1681565b5f60135f9054906101000a900460ff16905090565b5f610b24610a8c6111ad565b84610b1f8560085f610a9c6111ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461124e90919063ffffffff16565b6112ab565b6001905092915050565b610b3661146e565b610b3f81611e67565b50565b5f600c54831115610b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7f90612a2a565b60405180910390fd5b81610ba6575f610b97846111b4565b50505050905080915050610bbb565b5f610bb0846111b4565b505050915050809150505b92915050565b7f0000000000000000000000005219780a101cac9662cc0d96cabd118f145316ab81565b5f610c2c60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546109e2565b9050919050565b610c3b61146e565b610c445f611f5b565b565b5f42905090565b610c5561146e565b8060098190555050565b5f610c6861146e565b600d5482610c7585610be5565b610c7f9190612a75565b1115610cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb790612af2565b60405180910390fd5b610cd2610ccb6111ad565b848461201c565b6205703042610ce19190612a75565b60065f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506001905092915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060128054610d62906128ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610d8e906128ba565b8015610dd95780601f10610db057610100808354040283529160200191610dd9565b820191905f5260205f20905b815481529060010190602001808311610dbc57829003601f168201915b5050505050905090565b610deb61146e565b7f0000000000000000000000005219780a101cac9662cc0d96cabd118f145316ab73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7090612b80565b60405180910390fd5b610e8382826121cf565b5050565b610e8f61146e565b600160055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b5f610fa5610ef36111ad565b84610fa0856040518060600160405280602581526020016132a86025913960085f610f1c6111ad565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611d939092919063ffffffff16565b6112ab565b6001905092915050565b5f610fc2610fbb6111ad565b84846114ec565b6001905092915050565b6010602052805f5260405f205f915054906101000a900460ff1681565b600b5481565b6006602052805f5260405f205f915090505481565b5f60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6110d461146e565b5f60055f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b61113361146e565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119890612c0e565b60405180910390fd5b6111aa81611f5b565b50565b5f33905090565b5f805f805f805f6111c48861226d565b915091505f6111d1611df5565b90505f805f6111e18c86866122a9565b92509250925082828288889a509a509a509a509a5050505050505091939590929450565b5f61124683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d93565b905092915050565b5f80828461125c9190612a75565b9050838110156112a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129890612c76565b60405180910390fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090612d04565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137e90612d92565b60405180910390fd5b8060085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114619190612645565b60405180910390a3505050565b6114766111ad565b73ffffffffffffffffffffffffffffffffffffffff16611494610d2c565b73ffffffffffffffffffffffffffffffffffffffff16146114ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e190612dfa565b60405180910390fd5b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361155a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161155190612e88565b60405180910390fd5b5f811161159c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159390612f16565b60405180910390fd5b60055f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d90612f7e565b60405180910390fd5b5f806116506064611642600b548661230390919063ffffffff16565b611e1e90919063ffffffff16565b90505f60075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156116f1575060105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611744575060075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611797575060105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156117f0575060015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b156118705761181d606461180f600a548761230390919063ffffffff16565b611e1e90919063ffffffff16565b9250611832838561120590919063ffffffff16565b90506118608660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561201c565b61186b86868361201c565b611d8b565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16036118d7575f92506118d286868661201c565b611d8a565b60105f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611ae95760075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611ad557600d548461198187610be5565b61198b9190612a75565b11156119cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c390612af2565b60405180910390fd5b6119f460646119e66009548761230390919063ffffffff16565b611e1e90919063ffffffff16565b9250611a1b82611a0d858761120590919063ffffffff16565b61120590919063ffffffff16565b9050611a498660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461201c565b611a758660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561201c565b611a8086868361201c565b6205703042611a8f9190612a75565b60065f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550611ae4565b5f9250611ae386868661201c565b5b611d89565b60105f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615611cd25760075f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611cbe574260065f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410611c05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bfc90612fe6565b60405180910390fd5b611c2d6064611c1f6009548761230390919063ffffffff16565b611e1e90919063ffffffff16565b9250611c5482611c46858761120590919063ffffffff16565b61120590919063ffffffff16565b9050611c828660015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461201c565b611cae8660025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561201c565b611cb986868361201c565b611ccd565b5f9250611ccc86868661201c565b5b611d88565b60075f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16611d7957600d5484611d2d87610be5565b611d379190612a75565b1115611d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6f90612af2565b60405180910390fd5b5b5f9250611d8786868661201c565b5b5b5b5b505050505050565b5f838311158290611dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd1919061254b565b60405180910390fd5b505f8385611de89190613004565b9050809150509392505050565b5f805f611e0061237a565b91509150611e178183611e1e90919063ffffffff16565b9250505090565b5f611e5f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506123c4565b905092915050565b5f611e706111ad565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ed7906130a7565b60405180910390fd5b81611eea82610be5565b1015611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2290613135565b60405180910390fd5b611f578160015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461201c565b5050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f805f805f61202a866111b4565b945094509450945094506120848560035f8b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461120590919063ffffffff16565b60035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506121158460035f8a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461124e90919063ffffffff16565b60035f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506121608382612425565b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121bd9190612645565b60405180910390a35050505050505050565b8060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f805f612284606485611e1e90919063ffffffff16565b90505f61229a828661120590919063ffffffff16565b90508082935093505050915091565b5f805f806122c0858861230390919063ffffffff16565b90505f6122d6868861230390919063ffffffff16565b90505f6122ec828461120590919063ffffffff16565b905082818395509550955050505093509350939050565b5f808303612313575f9050612374565b5f82846123209190613153565b905082848261232f91906131c1565b1461236f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236690613261565b60405180910390fd5b809150505b92915050565b5f805f600e5490505f600c54905061239f600c54600e54611e1e90919063ffffffff16565b8210156123b757600e54600c549350935050506123c0565b81819350935050505b9091565b5f808311829061240a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612401919061254b565b60405180910390fd5b505f838561241891906131c1565b9050809150509392505050565b61243a82600e5461120590919063ffffffff16565b600e8190555061245581600f5461124e90919063ffffffff16565b600f819055505050565b5f80fd5b5f819050919050565b61247581612463565b811461247f575f80fd5b50565b5f813590506124908161246c565b92915050565b5f602082840312156124ab576124aa61245f565b5b5f6124b884828501612482565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156124f85780820151818401526020810190506124dd565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61251d826124c1565b61252781856124cb565b93506125378185602086016124db565b61254081612503565b840191505092915050565b5f6020820190508181035f8301526125638184612513565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6125948261256b565b9050919050565b6125a48161258a565b81146125ae575f80fd5b50565b5f813590506125bf8161259b565b92915050565b5f80604083850312156125db576125da61245f565b5b5f6125e8858286016125b1565b92505060206125f985828601612482565b9150509250929050565b5f8115159050919050565b61261781612603565b82525050565b5f6020820190506126305f83018461260e565b92915050565b61263f81612463565b82525050565b5f6020820190506126585f830184612636565b92915050565b5f819050919050565b5f61268161267c6126778461256b565b61265e565b61256b565b9050919050565b5f61269282612667565b9050919050565b5f6126a382612688565b9050919050565b6126b381612699565b82525050565b5f6020820190506126cc5f8301846126aa565b92915050565b5f805f606084860312156126e9576126e861245f565b5b5f6126f6868287016125b1565b9350506020612707868287016125b1565b925050604061271886828701612482565b9150509250925092565b5f602082840312156127375761273661245f565b5b5f612744848285016125b1565b91505092915050565b5f60ff82169050919050565b6127628161274d565b82525050565b5f60208201905061277b5f830184612759565b92915050565b61278a81612603565b8114612794575f80fd5b50565b5f813590506127a581612781565b92915050565b5f80604083850312156127c1576127c061245f565b5b5f6127ce85828601612482565b92505060206127df85828601612797565b9150509250929050565b6127f28161258a565b82525050565b5f60208201905061280b5f8301846127e9565b92915050565b5f80604083850312156128275761282661245f565b5b5f612834858286016125b1565b925050602061284585828601612797565b9150509250929050565b5f80604083850312156128655761286461245f565b5b5f612872858286016125b1565b9250506020612883858286016125b1565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806128d157607f821691505b6020821081036128e4576128e361288d565b5b50919050565b7f4275726e2072617465206d757374206265206c657373207468616e20313030005f82015250565b5f61291e601f836124cb565b9150612929826128ea565b602082019050919050565b5f6020820190508181035f83015261294b81612912565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c20725f8201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b5f6129ac602a836124cb565b91506129b782612952565b604082019050919050565b5f6020820190508181035f8301526129d9816129a0565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c79005f82015250565b5f612a14601f836124cb565b9150612a1f826129e0565b602082019050919050565b5f6020820190508181035f830152612a4181612a08565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612a7f82612463565b9150612a8a83612463565b9250828201905080821115612aa257612aa1612a48565b5b92915050565b7f4d617820746f6b656e2062616c616e63652065786365656465640000000000005f82015250565b5f612adc601a836124cb565b9150612ae782612aa8565b602082019050919050565b5f6020820190508181035f830152612b0981612ad0565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f612b6a6039836124cb565b9150612b7582612b10565b604082019050919050565b5f6020820190508181035f830152612b9781612b5e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612bf86026836124cb565b9150612c0382612b9e565b604082019050919050565b5f6020820190508181035f830152612c2581612bec565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f612c60601b836124cb565b9150612c6b82612c2c565b602082019050919050565b5f6020820190508181035f830152612c8d81612c54565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612cee6024836124cb565b9150612cf982612c94565b604082019050919050565b5f6020820190508181035f830152612d1b81612ce2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612d7c6022836124cb565b9150612d8782612d22565b604082019050919050565b5f6020820190508181035f830152612da981612d70565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612de46020836124cb565b9150612def82612db0565b602082019050919050565b5f6020820190508181035f830152612e1181612dd8565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f612e726025836124cb565b9150612e7d82612e18565b604082019050919050565b5f6020820190508181035f830152612e9f81612e66565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f612f006029836124cb565b9150612f0b82612ea6565b604082019050919050565b5f6020820190508181035f830152612f2d81612ef4565b9050919050565b7f4164647265737320697320626c61636b6c6973746564000000000000000000005f82015250565b5f612f686016836124cb565b9150612f7382612f34565b602082019050919050565b5f6020820190508181035f830152612f9581612f5c565b9050919050565b7f4c6f636b656400000000000000000000000000000000000000000000000000005f82015250565b5f612fd06006836124cb565b9150612fdb82612f9c565b602082019050919050565b5f6020820190508181035f830152612ffd81612fc4565b9050919050565b5f61300e82612463565b915061301983612463565b925082820390508181111561303157613030612a48565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f6130916021836124cb565b915061309c82613037565b604082019050919050565b5f6020820190508181035f8301526130be81613085565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f61311f6022836124cb565b915061312a826130c5565b604082019050919050565b5f6020820190508181035f83015261314c81613113565b9050919050565b5f61315d82612463565b915061316883612463565b925082820261317681612463565b9150828204841483151761318d5761318c612a48565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6131cb82612463565b91506131d683612463565b9250826131e6576131e5613194565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f61324b6021836124cb565b9150613256826131f1565b604082019050919050565b5f6020820190508181035f8301526132788161323f565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220683ecc603d8f4302cdb82ab2fda43214695c5eb344c5e659d4d89e2120388ff364736f6c63430008160033

Deployed Bytecode Sourcemap

36927:14479:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42822:429;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40243:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41377:186;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42727:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37059:51;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40520:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51235:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;50564:153;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41571:446;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43735:306;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37470:54;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40429:83;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42025:293;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50347:96;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43259:468;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37117:38;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40623:138;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7607:103;;;:::i;:::-;;41093:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50451:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39601:408;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6959:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40334;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50725:306;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40017:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42326:393;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40769:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38013:57;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37745:27;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37418:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41201:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40969:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40128:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7865:238;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42822:429;42874:14;42891:12;:10;:12::i;:::-;42874:29;;43052:15;43079:19;43090:7;43079:10;:19::i;:::-;43051:47;;;;;;43127:28;43147:7;43127;:15;43135:6;43127:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43109:7;:15;43117:6;43109:15;;;;;;;;;;;;;;;:46;;;;43176:20;43188:7;43176;;:11;;:20;;;;:::i;:::-;43166:7;:30;;;;43220:23;43235:7;43220:10;;:14;;:23;;;;:::i;:::-;43207:10;:36;;;;42863:388;;42822:429;:::o;40243:83::-;40280:13;40313:5;40306:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40243:83;:::o;41377:186::-;41477:4;41494:39;41503:12;:10;:12::i;:::-;41517:7;41526:6;41494:8;:39::i;:::-;41551:4;41544:11;;41377:186;;;;:::o;42727:87::-;42769:7;42796:10;;42789:17;;42727:87;:::o;37059:51::-;;;:::o;40520:95::-;40573:7;40600;;40593:14;;40520:95;:::o;51235:168::-;6845:13;:11;:13::i;:::-;51325:3:::1;51313:8;;:15;;51305:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;51386:9;51375:8;:20;;;;51235:168:::0;:::o;50564:153::-;6845:13;:11;:13::i;:::-;50691:18:::1;50669:19;:40;;;;50564:153:::0;:::o;41571:446::-;41703:4;41720:36;41730:6;41738:9;41749:6;41720:9;:36::i;:::-;41767:220;41790:6;41811:12;:10;:12::i;:::-;41838:138;41894:6;41838:138;;;;;;;;;;;;;;;;;:11;:19;41850:6;41838:19;;;;;;;;;;;;;;;:33;41858:12;:10;:12::i;:::-;41838:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;41767:8;:220::i;:::-;42005:4;41998:11;;41571:446;;;;;:::o;43735:306::-;43818:7;43871;;43860;:18;;43838:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;43959:19;43981:10;:8;:10::i;:::-;43959:32;;44009:24;44021:11;44009:7;:11;;:24;;;;:::i;:::-;44002:31;;;43735:306;;;:::o;37470:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;40429:83::-;40470:5;40495:9;;;;;;;;;;;40488:16;;40429:83;:::o;42025:293::-;42138:4;42155:133;42178:12;:10;:12::i;:::-;42205:7;42227:50;42266:10;42227:11;:25;42239:12;:10;:12::i;:::-;42227:25;;;;;;;;;;;;;;;:34;42253:7;42227:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;42155:8;:133::i;:::-;42306:4;42299:11;;42025:293;;;;:::o;50347:96::-;6845:13;:11;:13::i;:::-;50411:24:::1;50427:7;50411:15;:24::i;:::-;50347:96:::0;:::o;43259:468::-;43375:7;43414;;43403;:18;;43395:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;43473:17;43468:252;;43508:15;43535:19;43546:7;43535:10;:19::i;:::-;43507:47;;;;;;43576:7;43569:14;;;;;43468:252;43619:23;43652:19;43663:7;43652:10;:19::i;:::-;43616:55;;;;;;43693:15;43686:22;;;43259:468;;;;;:::o;37117:38::-;;;:::o;40623:138::-;40689:7;40716:37;40736:7;:16;40744:7;40736:16;;;;;;;;;;;;;;;;40716:19;:37::i;:::-;40709:44;;40623:138;;;:::o;7607:103::-;6845:13;:11;:13::i;:::-;7672:30:::1;7699:1;7672:18;:30::i;:::-;7607:103::o:0;41093:100::-;41143:7;41170:15;41163:22;;41093:100;:::o;50451:105::-;6845:13;:11;:13::i;:::-;50538:10:::1;50524:11;:24;;;;50451:105:::0;:::o;39601:408::-;39706:4;6845:13;:11;:13::i;:::-;39782:16:::1;;39770:7;39746:21;39756:10;39746:9;:21::i;:::-;:31;;;;:::i;:::-;39745:53;;39723:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;39863:52;39881:12;:10;:12::i;:::-;39895:10;39907:7;39863:17;:52::i;:::-;37645:8;39951:15;:28;;;;:::i;:::-;39926:10;:22;39937:10;39926:22;;;;;;;;;;;;;;;:53;;;;39997:4;39990:11;;39601:408:::0;;;;:::o;6959:87::-;7005:7;7032:6;;;;;;;;;;;7025:13;;6959:87;:::o;40334:::-;40373:13;40406:7;40399:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40334:87;:::o;50725:306::-;6845:13;:11;:13::i;:::-;50871::::1;50863:21;;:4;:21;;::::0;50841:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;50982:41;51011:4;51017:5;50982:28;:41::i;:::-;50725:306:::0;;:::o;40017:103::-;6845:13;:11;:13::i;:::-;40108:4:::1;40085:10;:20;40096:8;40085:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;40017:103:::0;:::o;42326:393::-;42444:4;42461:228;42484:12;:10;:12::i;:::-;42511:7;42533:145;42590:15;42533:145;;;;;;;;;;;;;;;;;:11;:25;42545:12;:10;:12::i;:::-;42533:25;;;;;;;;;;;;;;;:34;42559:7;42533:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;42461:8;:228::i;:::-;42707:4;42700:11;;42326:393;;;;:::o;40769:192::-;40872:4;40889:42;40899:12;:10;:12::i;:::-;40913:9;40924:6;40889:9;:42::i;:::-;40949:4;40942:11;;40769:192;;;;:::o;38013:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;37745:27::-;;;;:::o;37418:45::-;;;;;;;;;;;;;;;;;:::o;41201:168::-;41307:7;41334:11;:18;41346:5;41334:18;;;;;;;;;;;;;;;:27;41353:7;41334:27;;;;;;;;;;;;;;;;41327:34;;41201:168;;;;:::o;40969:116::-;41030:7;41057:10;:20;41068:8;41057:20;;;;;;;;;;;;;;;;41050:27;;40969:116;;;:::o;40128:107::-;6845:13;:11;:13::i;:::-;40222:5:::1;40199:10;:20;40210:8;40199:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;40128:107:::0;:::o;7865:238::-;6845:13;:11;:13::i;:::-;7988:1:::1;7968:22;;:8;:22;;::::0;7946:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;8067:28;8086:8;8067:18;:28::i;:::-;7865:238:::0;:::o;791:98::-;844:7;871:10;864:17;;791:98;:::o;48167:476::-;48242:7;48251;48260;48269;48278;48299:23;48324:12;48340:20;48352:7;48340:11;:20::i;:::-;48298:62;;;;48371:19;48393:10;:8;:10::i;:::-;48371:32;;48415:15;48432:23;48457:12;48473:89;48499:7;48521:4;48540:11;48473;:89::i;:::-;48414:148;;;;;;48581:7;48590:15;48607:4;48613:15;48630:4;48573:62;;;;;;;;;;;;;;;;48167:476;;;;;;;:::o;1732:136::-;1790:7;1817:43;1821:1;1824;1817:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1810:50;;1732:136;;;;:::o;1268:181::-;1326:7;1346:9;1362:1;1358;:5;;;;:::i;:::-;1346:17;;1387:1;1382;:6;;1374:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;1440:1;1433:8;;;1268:181;;;;:::o;44049:337::-;44159:1;44142:19;;:5;:19;;;44134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44240:1;44221:21;;:7;:21;;;44213:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44324:6;44294:11;:18;44306:5;44294:18;;;;;;;;;;;;;;;:27;44313:7;44294:27;;;;;;;;;;;;;;;:36;;;;44362:7;44346:32;;44355:5;44346:32;;;44371:6;44346:32;;;;;;:::i;:::-;;;;;;;;44049:337;;;:::o;7124:132::-;7199:12;:10;:12::i;:::-;7188:23;;:7;:5;:7::i;:::-;:23;;;7180:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7124:132::o;44394:3047::-;44543:1;44525:20;;:6;:20;;;44517:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;44615:1;44606:6;:10;44598:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;44682:10;:18;44693:6;44682:18;;;;;;;;;;;;;;;;;;;;;;;;;44681:19;44673:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;44740:11;44762:18;44783:29;44808:3;44783:20;44794:8;;44783:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;44762:50;;44823:29;44927:22;:30;44950:6;44927:30;;;;;;;;;;;;;;;;;;;;;;;;;44926:31;:82;;;;;44975:25;:33;45001:6;44975:33;;;;;;;;;;;;;;;;;;;;;;;;;44974:34;44926:82;:133;;;;;45026:22;:33;45049:9;45026:33;;;;;;;;;;;;;;;;;;;;;;;;;45025:34;44926:133;:187;;;;;45077:25;:36;45103:9;45077:36;;;;;;;;;;;;;;;;;;;;;;;;;45076:37;44926:187;:227;;;;;45143:10;;;;;;;;;;;45130:23;;:9;:23;;;;44926:227;44908:2526;;;45186:40;45222:3;45186:31;45197:19;;45186:6;:10;;:31;;;;:::i;:::-;:35;;:40;;;;:::i;:::-;45180:46;;45265:15;45276:3;45265:6;:10;;:15;;;;:::i;:::-;45241:39;;45295:42;45313:6;45321:10;;;;;;;;;;;45333:3;45295:17;:42::i;:::-;45352:59;45370:6;45378:9;45389:21;45352:17;:59::i;:::-;44908:2526;;;45472:10;;;;;;;;;;;45459:23;;:9;:23;;;45455:1979;;45505:1;45499:7;;45521:44;45539:6;45547:9;45558:6;45521:17;:44::i;:::-;45455:1979;;;45612:25;:33;45638:6;45612:33;;;;;;;;;;;;;;;;;;;;;;;;;45608:1826;;;45667:22;:33;45690:9;45667:33;;;;;;;;;;;;;;;;;;;;;;;;;45662:746;;45786:16;;45775:6;45752:20;45762:9;45752;:20::i;:::-;:29;;;;:::i;:::-;45751:51;;45721:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;45897:32;45925:3;45897:23;45908:11;;45897:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;45891:38;;45972:31;45992:10;45972:15;45983:3;45972:6;:10;;:15;;;;:::i;:::-;:19;;:31;;;;:::i;:::-;45948:55;;46022:49;46040:6;46048:10;;;;;;;;;;;46060;46022:17;:49::i;:::-;46090:42;46108:6;46116:10;;;;;;;;;;;46128:3;46090:17;:42::i;:::-;46151:59;46169:6;46177:9;46188:21;46151:17;:59::i;:::-;37645:8;46253:15;:28;;;;:::i;:::-;46229:10;:21;46240:9;46229:21;;;;;;;;;;;;;;;:52;;;;45662:746;;;46328:1;46322:7;;46348:44;46366:6;46374:9;46385:6;46348:17;:44::i;:::-;45662:746;45608:1826;;;46455:25;:36;46481:9;46455:36;;;;;;;;;;;;;;;;;;;;;;;;;46451:983;;;46513:22;:30;46536:6;46513:30;;;;;;;;;;;;;;;;;;;;;;;;;46508:576;;46593:15;46572:10;:18;46583:6;46572:18;;;;;;;;;;;;;;;;:36;46564:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;46644:32;46672:3;46644:23;46655:11;;46644:6;:10;;:23;;;;:::i;:::-;:27;;:32;;;;:::i;:::-;46638:38;;46719:31;46739:10;46719:15;46730:3;46719:6;:10;;:15;;;;:::i;:::-;:19;;:31;;;;:::i;:::-;46695:55;;46769:49;46787:6;46795:10;;;;;;;;;;;46807;46769:17;:49::i;:::-;46837:42;46855:6;46863:10;;;;;;;;;;;46875:3;46837:17;:42::i;:::-;46898:59;46916:6;46924:9;46935:21;46898:17;:59::i;:::-;46508:576;;;47004:1;46998:7;;47024:44;47042:6;47050:9;47061:6;47024:17;:44::i;:::-;46508:576;46451:983;;;47121:22;:33;47144:9;47121:33;;;;;;;;;;;;;;;;;;;;;;;;;47116:226;;47240:16;;47229:6;47206:20;47216:9;47206;:20::i;:::-;:29;;;;:::i;:::-;47205:51;;47175:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;47116:226;47362:1;47356:7;;47378:44;47396:6;47404:9;47415:6;47378:17;:44::i;:::-;46451:983;45608:1826;45455:1979;44908:2526;44506:2935;;;44394:3047;;;:::o;2171:226::-;2291:7;2324:1;2319;:6;;2327:12;2311:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;2351:9;2367:1;2363;:5;;;;:::i;:::-;2351:17;;2388:1;2381:8;;;2171:226;;;;;:::o;49517:164::-;49559:7;49580:15;49597;49616:19;:17;:19::i;:::-;49579:56;;;;49653:20;49665:7;49653;:11;;:20;;;;:::i;:::-;49646:27;;;;49517:164;:::o;3603:132::-;3661:7;3688:39;3692:1;3695;3688:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;3681:46;;3603:132;;;;:::o;49982:357::-;50043:14;50060:12;:10;:12::i;:::-;50043:29;;50109:1;50091:20;;:6;:20;;;50083:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;50203:7;50182:17;50192:6;50182:9;:17::i;:::-;:28;;50160:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;50285:46;50303:6;50311:10;;;;;;;;;;;50323:7;50285:17;:46::i;:::-;50032:307;49982:357;:::o;8263:191::-;8337:16;8356:6;;;;;;;;;;;8337:25;;8382:8;8373:6;;:17;;;;;;;;;;;;;;;;;;8437:8;8406:40;;8427:8;8406:40;;;;;;;;;;;;8326:128;8263:191;:::o;47449:555::-;47596:15;47626:23;47664:12;47691:23;47729:12;47755:19;47766:7;47755:10;:19::i;:::-;47581:193;;;;;;;;;;47803:28;47823:7;47803;:15;47811:6;47803:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;47785:7;:15;47793:6;47785:15;;;;;;;;;;;;;;;:46;;;;47863:39;47886:15;47863:7;:18;47871:9;47863:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;47842:7;:18;47850:9;47842:18;;;;;;;;;;;;;;;:60;;;;47913:23;47925:4;47931;47913:11;:23::i;:::-;47969:9;47952:44;;47961:6;47952:44;;;47980:15;47952:44;;;;;;:::i;:::-;;;;;;;;47570:434;;;;;47449:555;;;:::o;51039:188::-;51156:5;51122:25;:31;51148:4;51122:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;51213:5;51179:40;;51207:4;51179:40;;;;;;;;;;;;51039:188;;:::o;48651:357::-;48727:7;48736;48756:12;48771:16;48783:3;48771:7;:11;;:16;;;;:::i;:::-;48756:31;;48858:23;48884:17;48896:4;48884:7;:11;;:17;;;;:::i;:::-;48858:43;;48978:15;48995:4;48970:30;;;;;;48651:357;;;:::o;49016:493::-;49145:7;49154;49163;49183:15;49201:24;49213:11;49201:7;:11;;:24;;;;:::i;:::-;49183:42;;49286:12;49301:21;49310:11;49301:4;:8;;:21;;;;:::i;:::-;49286:36;;49361:23;49387:17;49399:4;49387:7;:11;;:17;;;;:::i;:::-;49361:43;;49470:7;49479:15;49496:4;49462:39;;;;;;;;;49016:493;;;;;;;:::o;2656:471::-;2714:7;2964:1;2959;:6;2955:47;;2989:1;2982:8;;;;2955:47;3014:9;3030:1;3026;:5;;;;:::i;:::-;3014:17;;3059:1;3054;3050;:5;;;;:::i;:::-;:10;3042:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;3118:1;3111:8;;;2656:471;;;;;:::o;49689:285::-;49740:7;49749;49769:15;49787:7;;49769:25;;49805:15;49823:7;;49805:25;;49857:20;49869:7;;49857;;:11;;:20;;;;:::i;:::-;49847:7;:30;49843:88;;;49902:7;;49911;;49894:25;;;;;;;;49843:88;49949:7;49958;49941:25;;;;;;49689:285;;;:::o;4231:312::-;4351:7;4383:1;4379;:5;4386:12;4371:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;4410:9;4426:1;4422;:5;;;;:::i;:::-;4410:17;;4534:1;4527:8;;;4231:312;;;;;:::o;48012:147::-;48090:17;48102:4;48090:7;;:11;;:17;;;;:::i;:::-;48080:7;:27;;;;48131:20;48146:4;48131:10;;:14;;:20;;;;:::i;:::-;48118:10;:33;;;;48012:147;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:246::-;1386:1;1396:113;1410:6;1407:1;1404:13;1396:113;;;1495:1;1490:3;1486:11;1480:18;1476:1;1471:3;1467:11;1460:39;1432:2;1429:1;1425:10;1420:15;;1396:113;;;1543:1;1534:6;1529:3;1525:16;1518:27;1367:184;1305:246;;;:::o;1557:102::-;1598:6;1649:2;1645:7;1640:2;1633:5;1629:14;1625:28;1615:38;;1557:102;;;:::o;1665:377::-;1753:3;1781:39;1814:5;1781:39;:::i;:::-;1836:71;1900:6;1895:3;1836:71;:::i;:::-;1829:78;;1916:65;1974:6;1969:3;1962:4;1955:5;1951:16;1916:65;:::i;:::-;2006:29;2028:6;2006:29;:::i;:::-;2001:3;1997:39;1990:46;;1757:285;1665:377;;;;:::o;2048:313::-;2161:4;2199:2;2188:9;2184:18;2176:26;;2248:9;2242:4;2238:20;2234:1;2223:9;2219:17;2212:47;2276:78;2349:4;2340:6;2276:78;:::i;:::-;2268:86;;2048:313;;;;:::o;2367:126::-;2404:7;2444:42;2437:5;2433:54;2422:65;;2367:126;;;:::o;2499:96::-;2536:7;2565:24;2583:5;2565:24;:::i;:::-;2554:35;;2499:96;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:60::-;4161:3;4182:5;4175:12;;4133:60;;;:::o;4199:142::-;4249:9;4282:53;4300:34;4309:24;4327:5;4309:24;:::i;:::-;4300:34;:::i;:::-;4282:53;:::i;:::-;4269:66;;4199:142;;;:::o;4347:126::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4347:126;;;:::o;4479:153::-;4556:9;4589:37;4620:5;4589:37;:::i;:::-;4576:50;;4479:153;;;:::o;4638:185::-;4752:64;4810:5;4752:64;:::i;:::-;4747:3;4740:77;4638:185;;:::o;4829:276::-;4949:4;4987:2;4976:9;4972:18;4964:26;;5000:98;5095:1;5084:9;5080:17;5071:6;5000:98;:::i;:::-;4829:276;;;;:::o;5111:619::-;5188:6;5196;5204;5253:2;5241:9;5232:7;5228:23;5224:32;5221:119;;;5259:79;;:::i;:::-;5221:119;5379:1;5404:53;5449:7;5440:6;5429:9;5425:22;5404:53;:::i;:::-;5394:63;;5350:117;5506:2;5532:53;5577:7;5568:6;5557:9;5553:22;5532:53;:::i;:::-;5522:63;;5477:118;5634:2;5660:53;5705:7;5696:6;5685:9;5681:22;5660:53;:::i;:::-;5650:63;;5605:118;5111:619;;;;;:::o;5736:329::-;5795:6;5844:2;5832:9;5823:7;5819:23;5815:32;5812:119;;;5850:79;;:::i;:::-;5812:119;5970:1;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5941:117;5736:329;;;;:::o;6071:86::-;6106:7;6146:4;6139:5;6135:16;6124:27;;6071:86;;;:::o;6163:112::-;6246:22;6262:5;6246:22;:::i;:::-;6241:3;6234:35;6163:112;;:::o;6281:214::-;6370:4;6408:2;6397:9;6393:18;6385:26;;6421:67;6485:1;6474:9;6470:17;6461:6;6421:67;:::i;:::-;6281:214;;;;:::o;6501:116::-;6571:21;6586:5;6571:21;:::i;:::-;6564:5;6561:32;6551:60;;6607:1;6604;6597:12;6551:60;6501:116;:::o;6623:133::-;6666:5;6704:6;6691:20;6682:29;;6720:30;6744:5;6720:30;:::i;:::-;6623:133;;;;:::o;6762:468::-;6827:6;6835;6884:2;6872:9;6863:7;6859:23;6855:32;6852:119;;;6890:79;;:::i;:::-;6852:119;7010:1;7035:53;7080:7;7071:6;7060:9;7056:22;7035:53;:::i;:::-;7025:63;;6981:117;7137:2;7163:50;7205:7;7196:6;7185:9;7181:22;7163:50;:::i;:::-;7153:60;;7108:115;6762:468;;;;;:::o;7236:118::-;7323:24;7341:5;7323:24;:::i;:::-;7318:3;7311:37;7236:118;;:::o;7360:222::-;7453:4;7491:2;7480:9;7476:18;7468:26;;7504:71;7572:1;7561:9;7557:17;7548:6;7504:71;:::i;:::-;7360:222;;;;:::o;7588:468::-;7653:6;7661;7710:2;7698:9;7689:7;7685:23;7681:32;7678:119;;;7716:79;;:::i;:::-;7678:119;7836:1;7861:53;7906:7;7897:6;7886:9;7882:22;7861:53;:::i;:::-;7851:63;;7807:117;7963:2;7989:50;8031:7;8022:6;8011:9;8007:22;7989:50;:::i;:::-;7979:60;;7934:115;7588:468;;;;;:::o;8062:474::-;8130:6;8138;8187:2;8175:9;8166:7;8162:23;8158:32;8155:119;;;8193:79;;:::i;:::-;8155:119;8313:1;8338:53;8383:7;8374:6;8363:9;8359:22;8338:53;:::i;:::-;8328:63;;8284:117;8440:2;8466:53;8511:7;8502:6;8491:9;8487:22;8466:53;:::i;:::-;8456:63;;8411:118;8062:474;;;;;:::o;8542:180::-;8590:77;8587:1;8580:88;8687:4;8684:1;8677:15;8711:4;8708:1;8701:15;8728:320;8772:6;8809:1;8803:4;8799:12;8789:22;;8856:1;8850:4;8846:12;8877:18;8867:81;;8933:4;8925:6;8921:17;8911:27;;8867:81;8995:2;8987:6;8984:14;8964:18;8961:38;8958:84;;9014:18;;:::i;:::-;8958:84;8779:269;8728:320;;;:::o;9054:181::-;9194:33;9190:1;9182:6;9178:14;9171:57;9054:181;:::o;9241:366::-;9383:3;9404:67;9468:2;9463:3;9404:67;:::i;:::-;9397:74;;9480:93;9569:3;9480:93;:::i;:::-;9598:2;9593:3;9589:12;9582:19;;9241:366;;;:::o;9613:419::-;9779:4;9817:2;9806:9;9802:18;9794:26;;9866:9;9860:4;9856:20;9852:1;9841:9;9837:17;9830:47;9894:131;10020:4;9894:131;:::i;:::-;9886:139;;9613:419;;;:::o;10038:229::-;10178:34;10174:1;10166:6;10162:14;10155:58;10247:12;10242:2;10234:6;10230:15;10223:37;10038:229;:::o;10273:366::-;10415:3;10436:67;10500:2;10495:3;10436:67;:::i;:::-;10429:74;;10512:93;10601:3;10512:93;:::i;:::-;10630:2;10625:3;10621:12;10614:19;;10273:366;;;:::o;10645:419::-;10811:4;10849:2;10838:9;10834:18;10826:26;;10898:9;10892:4;10888:20;10884:1;10873:9;10869:17;10862:47;10926:131;11052:4;10926:131;:::i;:::-;10918:139;;10645:419;;;:::o;11070:181::-;11210:33;11206:1;11198:6;11194:14;11187:57;11070:181;:::o;11257:366::-;11399:3;11420:67;11484:2;11479:3;11420:67;:::i;:::-;11413:74;;11496:93;11585:3;11496:93;:::i;:::-;11614:2;11609:3;11605:12;11598:19;;11257:366;;;:::o;11629:419::-;11795:4;11833:2;11822:9;11818:18;11810:26;;11882:9;11876:4;11872:20;11868:1;11857:9;11853:17;11846:47;11910:131;12036:4;11910:131;:::i;:::-;11902:139;;11629:419;;;:::o;12054:180::-;12102:77;12099:1;12092:88;12199:4;12196:1;12189:15;12223:4;12220:1;12213:15;12240:191;12280:3;12299:20;12317:1;12299:20;:::i;:::-;12294:25;;12333:20;12351:1;12333:20;:::i;:::-;12328:25;;12376:1;12373;12369:9;12362:16;;12397:3;12394:1;12391:10;12388:36;;;12404:18;;:::i;:::-;12388:36;12240:191;;;;:::o;12437:176::-;12577:28;12573:1;12565:6;12561:14;12554:52;12437:176;:::o;12619:366::-;12761:3;12782:67;12846:2;12841:3;12782:67;:::i;:::-;12775:74;;12858:93;12947:3;12858:93;:::i;:::-;12976:2;12971:3;12967:12;12960:19;;12619:366;;;:::o;12991:419::-;13157:4;13195:2;13184:9;13180:18;13172:26;;13244:9;13238:4;13234:20;13230:1;13219:9;13215:17;13208:47;13272:131;13398:4;13272:131;:::i;:::-;13264:139;;12991:419;;;:::o;13416:244::-;13556:34;13552:1;13544:6;13540:14;13533:58;13625:27;13620:2;13612:6;13608:15;13601:52;13416:244;:::o;13666:366::-;13808:3;13829:67;13893:2;13888:3;13829:67;:::i;:::-;13822:74;;13905:93;13994:3;13905:93;:::i;:::-;14023:2;14018:3;14014:12;14007:19;;13666:366;;;:::o;14038:419::-;14204:4;14242:2;14231:9;14227:18;14219:26;;14291:9;14285:4;14281:20;14277:1;14266:9;14262:17;14255:47;14319:131;14445:4;14319:131;:::i;:::-;14311:139;;14038:419;;;:::o;14463:225::-;14603:34;14599:1;14591:6;14587:14;14580:58;14672:8;14667:2;14659:6;14655:15;14648:33;14463:225;:::o;14694:366::-;14836:3;14857:67;14921:2;14916:3;14857:67;:::i;:::-;14850:74;;14933:93;15022:3;14933:93;:::i;:::-;15051:2;15046:3;15042:12;15035:19;;14694:366;;;:::o;15066:419::-;15232:4;15270:2;15259:9;15255:18;15247:26;;15319:9;15313:4;15309:20;15305:1;15294:9;15290:17;15283:47;15347:131;15473:4;15347:131;:::i;:::-;15339:139;;15066:419;;;:::o;15491:177::-;15631:29;15627:1;15619:6;15615:14;15608:53;15491:177;:::o;15674:366::-;15816:3;15837:67;15901:2;15896:3;15837:67;:::i;:::-;15830:74;;15913:93;16002:3;15913:93;:::i;:::-;16031:2;16026:3;16022:12;16015:19;;15674:366;;;:::o;16046:419::-;16212:4;16250:2;16239:9;16235:18;16227:26;;16299:9;16293:4;16289:20;16285:1;16274:9;16270:17;16263:47;16327:131;16453:4;16327:131;:::i;:::-;16319:139;;16046:419;;;:::o;16471:223::-;16611:34;16607:1;16599:6;16595:14;16588:58;16680:6;16675:2;16667:6;16663:15;16656:31;16471:223;:::o;16700:366::-;16842:3;16863:67;16927:2;16922:3;16863:67;:::i;:::-;16856:74;;16939:93;17028:3;16939:93;:::i;:::-;17057:2;17052:3;17048:12;17041:19;;16700:366;;;:::o;17072:419::-;17238:4;17276:2;17265:9;17261:18;17253:26;;17325:9;17319:4;17315:20;17311:1;17300:9;17296:17;17289:47;17353:131;17479:4;17353:131;:::i;:::-;17345:139;;17072:419;;;:::o;17497:221::-;17637:34;17633:1;17625:6;17621:14;17614:58;17706:4;17701:2;17693:6;17689:15;17682:29;17497:221;:::o;17724:366::-;17866:3;17887:67;17951:2;17946:3;17887:67;:::i;:::-;17880:74;;17963:93;18052:3;17963:93;:::i;:::-;18081:2;18076:3;18072:12;18065:19;;17724:366;;;:::o;18096:419::-;18262:4;18300:2;18289:9;18285:18;18277:26;;18349:9;18343:4;18339:20;18335:1;18324:9;18320:17;18313:47;18377:131;18503:4;18377:131;:::i;:::-;18369:139;;18096:419;;;:::o;18521:182::-;18661:34;18657:1;18649:6;18645:14;18638:58;18521:182;:::o;18709:366::-;18851:3;18872:67;18936:2;18931:3;18872:67;:::i;:::-;18865:74;;18948:93;19037:3;18948:93;:::i;:::-;19066:2;19061:3;19057:12;19050:19;;18709:366;;;:::o;19081:419::-;19247:4;19285:2;19274:9;19270:18;19262:26;;19334:9;19328:4;19324:20;19320:1;19309:9;19305:17;19298:47;19362:131;19488:4;19362:131;:::i;:::-;19354:139;;19081:419;;;:::o;19506:224::-;19646:34;19642:1;19634:6;19630:14;19623:58;19715:7;19710:2;19702:6;19698:15;19691:32;19506:224;:::o;19736:366::-;19878:3;19899:67;19963:2;19958:3;19899:67;:::i;:::-;19892:74;;19975:93;20064:3;19975:93;:::i;:::-;20093:2;20088:3;20084:12;20077:19;;19736:366;;;:::o;20108:419::-;20274:4;20312:2;20301:9;20297:18;20289:26;;20361:9;20355:4;20351:20;20347:1;20336:9;20332:17;20325:47;20389:131;20515:4;20389:131;:::i;:::-;20381:139;;20108:419;;;:::o;20533:228::-;20673:34;20669:1;20661:6;20657:14;20650:58;20742:11;20737:2;20729:6;20725:15;20718:36;20533:228;:::o;20767:366::-;20909:3;20930:67;20994:2;20989:3;20930:67;:::i;:::-;20923:74;;21006:93;21095:3;21006:93;:::i;:::-;21124:2;21119:3;21115:12;21108:19;;20767:366;;;:::o;21139:419::-;21305:4;21343:2;21332:9;21328:18;21320:26;;21392:9;21386:4;21382:20;21378:1;21367:9;21363:17;21356:47;21420:131;21546:4;21420:131;:::i;:::-;21412:139;;21139:419;;;:::o;21564:172::-;21704:24;21700:1;21692:6;21688:14;21681:48;21564:172;:::o;21742:366::-;21884:3;21905:67;21969:2;21964:3;21905:67;:::i;:::-;21898:74;;21981:93;22070:3;21981:93;:::i;:::-;22099:2;22094:3;22090:12;22083:19;;21742:366;;;:::o;22114:419::-;22280:4;22318:2;22307:9;22303:18;22295:26;;22367:9;22361:4;22357:20;22353:1;22342:9;22338:17;22331:47;22395:131;22521:4;22395:131;:::i;:::-;22387:139;;22114:419;;;:::o;22539:156::-;22679:8;22675:1;22667:6;22663:14;22656:32;22539:156;:::o;22701:365::-;22843:3;22864:66;22928:1;22923:3;22864:66;:::i;:::-;22857:73;;22939:93;23028:3;22939:93;:::i;:::-;23057:2;23052:3;23048:12;23041:19;;22701:365;;;:::o;23072:419::-;23238:4;23276:2;23265:9;23261:18;23253:26;;23325:9;23319:4;23315:20;23311:1;23300:9;23296:17;23289:47;23353:131;23479:4;23353:131;:::i;:::-;23345:139;;23072:419;;;:::o;23497:194::-;23537:4;23557:20;23575:1;23557:20;:::i;:::-;23552:25;;23591:20;23609:1;23591:20;:::i;:::-;23586:25;;23635:1;23632;23628:9;23620:17;;23659:1;23653:4;23650:11;23647:37;;;23664:18;;:::i;:::-;23647:37;23497:194;;;;:::o;23697:220::-;23837:34;23833:1;23825:6;23821:14;23814:58;23906:3;23901:2;23893:6;23889:15;23882:28;23697:220;:::o;23923:366::-;24065:3;24086:67;24150:2;24145:3;24086:67;:::i;:::-;24079:74;;24162:93;24251:3;24162:93;:::i;:::-;24280:2;24275:3;24271:12;24264:19;;23923:366;;;:::o;24295:419::-;24461:4;24499:2;24488:9;24484:18;24476:26;;24548:9;24542:4;24538:20;24534:1;24523:9;24519:17;24512:47;24576:131;24702:4;24576:131;:::i;:::-;24568:139;;24295:419;;;:::o;24720:221::-;24860:34;24856:1;24848:6;24844:14;24837:58;24929:4;24924:2;24916:6;24912:15;24905:29;24720:221;:::o;24947:366::-;25089:3;25110:67;25174:2;25169:3;25110:67;:::i;:::-;25103:74;;25186:93;25275:3;25186:93;:::i;:::-;25304:2;25299:3;25295:12;25288:19;;24947:366;;;:::o;25319:419::-;25485:4;25523:2;25512:9;25508:18;25500:26;;25572:9;25566:4;25562:20;25558:1;25547:9;25543:17;25536:47;25600:131;25726:4;25600:131;:::i;:::-;25592:139;;25319:419;;;:::o;25744:410::-;25784:7;25807:20;25825:1;25807:20;:::i;:::-;25802:25;;25841:20;25859:1;25841:20;:::i;:::-;25836:25;;25896:1;25893;25889:9;25918:30;25936:11;25918:30;:::i;:::-;25907:41;;26097:1;26088:7;26084:15;26081:1;26078:22;26058:1;26051:9;26031:83;26008:139;;26127:18;;:::i;:::-;26008:139;25792:362;25744:410;;;;:::o;26160:180::-;26208:77;26205:1;26198:88;26305:4;26302:1;26295:15;26329:4;26326:1;26319:15;26346:185;26386:1;26403:20;26421:1;26403:20;:::i;:::-;26398:25;;26437:20;26455:1;26437:20;:::i;:::-;26432:25;;26476:1;26466:35;;26481:18;;:::i;:::-;26466:35;26523:1;26520;26516:9;26511:14;;26346:185;;;;:::o;26537:220::-;26677:34;26673:1;26665:6;26661:14;26654:58;26746:3;26741:2;26733:6;26729:15;26722:28;26537:220;:::o;26763:366::-;26905:3;26926:67;26990:2;26985:3;26926:67;:::i;:::-;26919:74;;27002:93;27091:3;27002:93;:::i;:::-;27120:2;27115:3;27111:12;27104:19;;26763:366;;;:::o;27135:419::-;27301:4;27339:2;27328:9;27324:18;27316:26;;27388:9;27382:4;27378:20;27374:1;27363:9;27359:17;27352:47;27416:131;27542:4;27416:131;:::i;:::-;27408:139;;27135:419;;;:::o

Swarm Source

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