ETH Price: $3,487.96 (-0.00%)
Gas: 2 Gwei

Token

Heqet Coin (HEQET)
 

Overview

Max Total Supply

333,333,333 HEQET

Holders

225

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.716582376562038626 HEQET

Value
$0.00
0xD04339EfdE997E97DCf7356e242B4ba9c49cDE53
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:
HEQET

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/*
    https://sacrifice.heqethereum.com/
    https://twitter.com/Heqethereum
    https://t.me/HeqetPortal
*/
// SPDX-License-Identifier: MIT

pragma solidity 0.8.19;
pragma experimental ABIEncoderV2;

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

// pragma solidity ^0.8.0;

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

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

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

// pragma solidity ^0.8.0;

// import "../utils/Context.sol";

/**
 * @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. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby disabling any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

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

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

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

// pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

// pragma solidity ^0.8.0;

// import "../IERC20.sol";

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

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

// pragma solidity ^0.8.0;

// import "./IERC20.sol";
// import "./extensions/IERC20Metadata.sol";
// import "../../utils/Context.sol";

/**
 * @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].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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}.
     *
     * 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 default value returned by this function, unless
     * it's 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 {}
}

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

// pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// pragma solidity >=0.5.0;

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

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

// pragma solidity >=0.5.0;

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

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

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

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

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

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

// pragma solidity >=0.6.2;

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// pragma solidity >=0.6.2;

// import './IUniswapV2Router01.sol';

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

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

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

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

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

contract HEQET is ERC20, Ownable {
    using SafeMath for uint256;

    string internal constant TOKEN_NAME = "Heqet Coin";
    string internal constant TOKEN_SYMBOL = "HEQET";

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    uint256 public launchedAt;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = true;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => bool) public isBot;
    uint256 public snipingTime = 25 seconds; //25 seconds snipping time
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;

    /***************************************************************/
    bool public sacrificeActive = true;
    bool public sacrificedTradingActive = false;
    uint256 public sacrificeFee = 0.1 ether;
    mapping(address => bool) public sacrificied;

    /***************************************************************/

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) private _isExcludedMaxTransactionAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) private automatedMarketMakerPairs;

    /***************************************************************/

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

    /***************************************************************/

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

        uint256 totalSupply = 333_333_333 ether;

        maxTransactionAmount = (totalSupply * 333) / 100000; // 0.333% from total supply maxTransactionAmountTxn
        maxWallet = (totalSupply * 333) / 100000; // 0.333% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% swap back amount

        buyMarketingFee = 333;
        buyLiquidityFee = 0;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;

        sellMarketingFee = 333;
        sellLiquidityFee = 0;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;

        marketingWallet = owner(); // marketing wallet address

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(deadAddress, true);
        excludeFromFees(address(uniswapV2Router), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(deadAddress, true);
        excludeFromMaxTransaction(address(uniswapV2Router), true);
        excludeFromMaxTransaction(address(uniswapV2Pair), true);

        _sacrifice(owner(), true);
        _sacrifice(address(this), true);
        _sacrifice(deadAddress, true);
        _sacrifice(address(uniswapV2Router), true);

        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading(uint256 x) external onlyOwner {
        require(!tradingActive, "HEQET: already enabled");
        tradingActive = true;
        swapEnabled = true;
        launchedAt = block.timestamp;
        snipingTime = ((1 seconds * x));
    }

    // enable sacrificed trading
    function enableSacrificedTrading() external onlyOwner {
        sacrificedTradingActive = true;
    }

    // disable sacrificed trading
    function disableSacrificedTrading() external onlyOwner {
        sacrificedTradingActive = false;
    }

    // enable sacrifice
    function enableSacrifice() external onlyOwner {
        sacrificeActive = true;
    }

    // disable sacrifice
    function disableSacrifice() external onlyOwner {
        sacrificeActive = false;
    }

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= ((totalSupply() * 1) / 100000) / 1e18,
            "HEQET: Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= ((totalSupply() * 5) / 1000) / 1e18,
            "HEQET: Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "HEQET: Cannot set maxTransactionAmount lower than 0.1%"
        );
        maxTransactionAmount = newNum;
        maxWallet = newNum;
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 1) / 1000) / 1e18,
            "HEQET: Cannot set maxWallet lower than 0.1%"
        );
        maxWallet = newNum;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function sacrifice() public payable {
        require(sacrificeActive, "HEQET: sacrifice not enabled yet");
        _chargeSacrificeFee();
        _sacrifice(msg.sender, true);
    }

    function _sacrifice(address updAds, bool isEx) internal {
        sacrificied[updAds] = isEx;
    }

    function _chargeSacrificeFee() internal {
        if (sacrificeFee > 0) {
            require(msg.value >= sacrificeFee, "HEQET: fee not met");
        }
    }

    function updateSacrificeFee(uint256 _sacrificeFee) public onlyOwner {
        require(_sacrificeFee >= 0, "HEQET: fee should be greater or equal 0");
        sacrificeFee = _sacrificeFee;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee)
        external
        onlyOwner
    {
        require(
            (_marketingFee + _liquidityFee) <= 333,
            "HEQET: Max Buy Fee 33.3%"
        );
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee;
    }

    function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee)
        external
        onlyOwner
    {
        require(
            (_marketingFee + _liquidityFee) <= 333,
            "HEQET: Max Sell Fee 33.3%"
        );
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function addOrRemoveBots(address[] calldata accounts, bool value)
        external
        onlyOwner
    {
        for (uint256 i = 0; i < accounts.length; i++) {
            isBot[accounts[i]] = value;
        }
    }

    function updateMarketingWallet(address _marketingWallet)
        external
        onlyOwner
    {
        require(_marketingWallet != address(0), "HEQET: Address 0");
        marketingWallet = _marketingWallet;
    }

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

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "HEQET: transfer from the zero address");
        require(to != address(0), "HEQET: transfer to the zero address");

        require(!isBot[from], "HEQET: bot detected");
        require(!isBot[msg.sender], "HEQET: bot detected");
        require(!isBot[tx.origin], "HEQET: bot detected");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != deadAddress &&
                !swapping
            ) {
                if (!sacrificied[from] && !sacrificied[to]) {
                    require(tradingActive, "HEQET: trading not enabled yet");

                    if (
                        block.timestamp < launchedAt + snipingTime &&
                        from != address(uniswapV2Router)
                    ) {
                        if (address(uniswapV2Pair) == from) {
                            isBot[to] = true;
                        } else if (address(uniswapV2Pair) == to) {
                            isBot[from] = true;
                        }
                    }
                }

                require(
                    sacrificedTradingActive,
                    "HEQET: sacrificed trading not enabled yet"
                );

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "HEQET: transfer delay enabled, only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

                //when buy
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedMaxTransactionAmount[to]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "HEQET: buy transfer amount exceeds the maxTransactionAmount."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "HEQET: max wallet exceeded"
                    );
                }
                //when sell
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedMaxTransactionAmount[from]
                ) {
                    require(
                        amount <= maxTransactionAmount,
                        "HEQET: sell transfer amount exceeds the maxTransactionAmount."
                    );
                } else if (!_isExcludedMaxTransactionAmount[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "HEQET: max wallet exceeded"
                    );
                }
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(1000);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(1000);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }

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

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) internal {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            marketingWallet,
            block.timestamp
        );
    }

    function swapBack() internal {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(
            totalTokensToSwap
        );

        uint256 ethForLiquidity = ethBalance - ethForMarketing;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

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

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"value","type":"bool"}],"name":"addOrRemoveBots","outputs":[],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"disableSacrifice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableSacrificedTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableSacrifice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableSacrificedTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"x","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sacrifice","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"sacrificeActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sacrificeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sacrificedTradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"sacrificied","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"snipingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_sacrificeFee","type":"uint256"}],"name":"updateSacrificeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600b805462ffffff1916620100011790556019600d819055600f805460ff191660019081179091556018805461ffff1916909117905567016345785d8a000090553480156200005257600080fd5b506040518060400160405280600a8152602001692432b8b2ba1021b7b4b760b11b81525060405180604001604052806005815260200164121154515560da1b8152508160039081620000a5919062000775565b506004620000b4828262000775565b505050620000d1620000cb6200045f60201b60201c565b62000463565b737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801562000127573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200014d919062000841565b6001600160a01b031663c9c65396306080516001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200019d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001c3919062000841565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000211573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000237919062000841565b6001600160a01b031660a0526b0113ba1430a5432dc0340000620186a0620002628261014d62000889565b6200026e9190620008a9565b600755620186a0620002838261014d62000889565b6200028f9190620008a9565b600955612710620002a282600562000889565b620002ae9190620008a9565b60085561014d601181905560006012819055620002cb91620008cc565b60105561014d601481905560006015819055620002e891620008cc565b601355600554600680546001600160a01b0319166001600160a01b03909216918217905562000319906001620004b5565b62000326306001620004b5565b6200033561dead6001620004b5565b60805162000345906001620004b5565b620003646200035c6005546001600160a01b031690565b60016200051e565b620003713060016200051e565b6200038061dead60016200051e565b608051620003909060016200051e565b60a051620003a09060016200051e565b620003db620003b76005546001600160a01b031690565b6001600160a01b03166000908152601a60205260409020805460ff19166001179055565b306000908152601a60205260408082208054600160ff1991821681179092557f428bdc965569ef4717764ecfd84e88946a9a226b52b813e6ab6a7f46aad86e8880548216831790556080516001600160a01b031684529190922080549091168217905560a0516200044c9162000553565b620004583382620005a7565b50620008e2565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b620004bf6200066e565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b620005286200066e565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b6001600160a01b0382166000818152601d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b038216620006035760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064015b60405180910390fd5b8060026000828254620006179190620008cc565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b6005546001600160a01b03163314620006ca5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620005fa565b565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620006fc57607f821691505b6020821081036200071d57634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620006cc57600081815260208120601f850160051c810160208610156200074c5750805b601f850160051c820191505b818110156200076d5782815560010162000758565b505050505050565b81516001600160401b03811115620007915762000791620006d1565b620007a981620007a28454620006e7565b8462000723565b602080601f831160018114620007e15760008415620007c85750858301515b600019600386901b1c1916600185901b1785556200076d565b600085815260208120601f198616915b828110156200081257888601518255948401946001909101908401620007f1565b5085821015620008315787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200085457600080fd5b81516001600160a01b03811681146200086c57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082028115828204841417620008a357620008a362000873565b92915050565b600082620008c757634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115620008a357620008a362000873565b60805160a051612d4262000955600039600081816105f001528181610ff301528181611a3101528181611a920152611bb001526000818161046c015281816119eb01528181611b72015281816126b10152818161276a015281816127a60152818161282001526128880152612d426000f3fe6080604052600436106103b15760003560e01c806381c7246b116101e7578063bbc0c7421161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610a9c578063f5648a4f14610abc578063f637434214610ad1578063f8b45b0514610ae757600080fd5b8063dd62ed3e14610a3b578063e2f4560514610a5b578063e884f26014610a71578063f11a24d314610a8657600080fd5b8063c876d0b9116100dc578063c876d0b9146109d5578063c8c8ebe4146109ef578063d257b34f14610a05578063d85ba06314610a2557600080fd5b8063bbc0c74214610960578063bf56b3711461097f578063c024666814610995578063c18bc195146109b557600080fd5b806393a0dc6711610185578063a5bad98511610154578063a5bad985146108f6578063a5d370a41461090b578063a9059cbb14610920578063aacebbe31461094057600080fd5b806393a0dc671461088257806395d89b41146108a15780639a7a23d6146108b6578063a457c2d7146108d657600080fd5b80638da5cb5b116101c15780638da5cb5b146107fe578063921369131461081c578063924de9b714610832578063928e45e31461085257600080fd5b806381c7246b146107c157806382aa7c68146107d65780638a040df4146107f657600080fd5b80633bbac579116102d757806370a082311161026a5780637571336a116102395780637571336a1461075557806375f0a874146107755780637bce5a04146107955780637d99c66d146107ab57600080fd5b806370a08231146106db578063715018a6146107115780637494f24914610726578063751039fc1461074057600080fd5b806366ca9b83116102a657806366ca9b83146106655780636a486a8e146106855780636aa643eb1461069b5780636ddd1713146106bb57600080fd5b80633bbac579146105ae57806349bd5a5e146105de5780634a62bb65146106125780634fbee1931461062c57600080fd5b80631f3fed8f1161034f5780632a8c077e1161031e5780632a8c077e146105475780632ea3d11c1461055c578063313ce56714610572578063395093511461058e57600080fd5b80631f3fed8f146104db578063203e727e146104f157806323b872dd1461051157806327c8f8351461053157600080fd5b806310a60f021161038b57806310a60f021461043a5780631694505e1461045a57806318160ddd146104a65780631a8145bb146104c557600080fd5b806302dbd8f8146103bd57806306fdde03146103df578063095ea7b31461040a57600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103dd6103d8366004612900565b610afd565b005b3480156103eb57600080fd5b506103f4610b80565b6040516104019190612922565b60405180910390f35b34801561041657600080fd5b5061042a610425366004612985565b610c12565b6040519015158152602001610401565b34801561044657600080fd5b506103dd6104553660046129c1565b610c2c565b34801561046657600080fd5b5061048e7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610401565b3480156104b257600080fd5b506002545b604051908152602001610401565b3480156104d157600080fd5b506104b760175481565b3480156104e757600080fd5b506104b760165481565b3480156104fd57600080fd5b506103dd61050c366004612a45565b610cab565b34801561051d57600080fd5b5061042a61052c366004612a5e565b610d5f565b34801561053d57600080fd5b5061048e61dead81565b34801561055357600080fd5b506103dd610d83565b34801561056857600080fd5b506104b760195481565b34801561057e57600080fd5b5060405160128152602001610401565b34801561059a57600080fd5b5061042a6105a9366004612985565b610d9a565b3480156105ba57600080fd5b5061042a6105c9366004612a9f565b600c6020526000908152604090205460ff1681565b3480156105ea57600080fd5b5061048e7f000000000000000000000000000000000000000000000000000000000000000081565b34801561061e57600080fd5b50600b5461042a9060ff1681565b34801561063857600080fd5b5061042a610647366004612a9f565b6001600160a01b03166000908152601b602052604090205460ff1690565b34801561067157600080fd5b506103dd610680366004612900565b610dbc565b34801561069157600080fd5b506104b760135481565b3480156106a757600080fd5b506103dd6106b6366004612a45565b610e3a565b3480156106c757600080fd5b50600b5461042a9062010000900460ff1681565b3480156106e757600080fd5b506104b76106f6366004612a9f565b6001600160a01b031660009081526020819052604090205490565b34801561071d57600080fd5b506103dd610e47565b34801561073257600080fd5b5060185461042a9060ff1681565b34801561074c57600080fd5b5061042a610e5b565b34801561076157600080fd5b506103dd610770366004612abc565b610e75565b34801561078157600080fd5b5060065461048e906001600160a01b031681565b3480156107a157600080fd5b506104b760115481565b3480156107b757600080fd5b506104b7600d5481565b3480156107cd57600080fd5b506103dd610ea8565b3480156107e257600080fd5b506103dd6107f1366004612a45565b610ec1565b6103dd610f40565b34801561080a57600080fd5b506005546001600160a01b031661048e565b34801561082857600080fd5b506104b760145481565b34801561083e57600080fd5b506103dd61084d366004612af1565b610fb6565b34801561085e57600080fd5b5061042a61086d366004612a9f565b601a6020526000908152604090205460ff1681565b34801561088e57600080fd5b5060185461042a90610100900460ff1681565b3480156108ad57600080fd5b506103f4610fda565b3480156108c257600080fd5b506103dd6108d1366004612abc565b610fe9565b3480156108e257600080fd5b5061042a6108f1366004612985565b6110a8565b34801561090257600080fd5b506103dd611123565b34801561091757600080fd5b506103dd611137565b34801561092c57600080fd5b5061042a61093b366004612985565b61114c565b34801561094c57600080fd5b506103dd61095b366004612a9f565b61115a565b34801561096c57600080fd5b50600b5461042a90610100900460ff1681565b34801561098b57600080fd5b506104b7600a5481565b3480156109a157600080fd5b506103dd6109b0366004612abc565b6111cd565b3480156109c157600080fd5b506103dd6109d0366004612a45565b611234565b3480156109e157600080fd5b50600f5461042a9060ff1681565b3480156109fb57600080fd5b506104b760075481565b348015610a1157600080fd5b5061042a610a20366004612a45565b6112d8565b348015610a3157600080fd5b506104b760105481565b348015610a4757600080fd5b506104b7610a56366004612b0c565b611443565b348015610a6757600080fd5b506104b760085481565b348015610a7d57600080fd5b5061042a61146e565b348015610a9257600080fd5b506104b760125481565b348015610aa857600080fd5b506103dd610ab7366004612a9f565b611488565b348015610ac857600080fd5b506103dd611501565b348015610add57600080fd5b506104b760155481565b348015610af357600080fd5b506104b760095481565b610b0561154b565b61014d610b128284612b5b565b1115610b655760405162461bcd60e51b815260206004820152601960248201527f48455145543a204d61782053656c6c204665652033332e33250000000000000060448201526064015b60405180910390fd5b60148290556015819055610b798183612b5b565b6013555050565b606060038054610b8f90612b6e565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbb90612b6e565b8015610c085780601f10610bdd57610100808354040283529160200191610c08565b820191906000526020600020905b815481529060010190602001808311610beb57829003601f168201915b5050505050905090565b600033610c208185856115a5565b60019150505b92915050565b610c3461154b565b60005b82811015610ca55781600c6000868685818110610c5657610c56612ba8565b9050602002016020810190610c6b9190612a9f565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610c9d81612bbe565b915050610c37565b50505050565b610cb361154b565b670de0b6b3a76400006103e8610cc860025490565b610cd3906001612bd7565b610cdd9190612bee565b610ce79190612bee565b811015610d555760405162461bcd60e51b815260206004820152603660248201527f48455145543a2043616e6e6f7420736574206d61785472616e73616374696f6e604482015275416d6f756e74206c6f776572207468616e20302e312560501b6064820152608401610b5c565b6007819055600955565b600033610d6d8582856116c9565b610d7885858561173d565b506001949350505050565b610d8b61154b565b6018805460ff19166001179055565b600033610c20818585610dad8383611443565b610db79190612b5b565b6115a5565b610dc461154b565b61014d610dd18284612b5b565b1115610e1f5760405162461bcd60e51b815260206004820152601860248201527f48455145543a204d617820427579204665652033332e332500000000000000006044820152606401610b5c565b60118290556012819055610e338183612b5b565b6010555050565b610e4261154b565b601955565b610e4f61154b565b610e5960006121ed565b565b6000610e6561154b565b50600b805460ff19169055600190565b610e7d61154b565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b610eb061154b565b6018805461ff001916610100179055565b610ec961154b565b600b54610100900460ff1615610f1a5760405162461bcd60e51b815260206004820152601660248201527512115451550e88185b1c9958591e48195b98589b195960521b6044820152606401610b5c565b600b805462ffff0019166201010017905542600a55610f3a816001612bd7565b600d5550565b60185460ff16610f925760405162461bcd60e51b815260206004820181905260248201527f48455145543a20736163726966696365206e6f7420656e61626c6564207965746044820152606401610b5c565b610f9a61223f565b336000908152601a60205260409020805460ff19166001179055565b610fbe61154b565b600b8054911515620100000262ff000019909216919091179055565b606060048054610b8f90612b6e565b610ff161154b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03160361109a576040805162461bcd60e51b81526020600482015260248101919091527f48455145543a2054686520706169722063616e6e6f742062652072656d6f766560448201527f642066726f6d206175746f6d617465644d61726b65744d616b657250616972736064820152608401610b5c565b6110a4828261228e565b5050565b600033816110b68286611443565b9050838110156111165760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b5c565b610d7882868684036115a5565b61112b61154b565b6018805460ff19169055565b61113f61154b565b6018805461ff0019169055565b600033610c2081858561173d565b61116261154b565b6001600160a01b0381166111ab5760405162461bcd60e51b815260206004820152601060248201526f048455145543a204164647265737320360841b6044820152606401610b5c565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6111d561154b565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b61123c61154b565b670de0b6b3a76400006103e861125160025490565b61125c906001612bd7565b6112669190612bee565b6112709190612bee565b8110156112d35760405162461bcd60e51b815260206004820152602b60248201527f48455145543a2043616e6e6f7420736574206d617857616c6c6574206c6f776560448201526a72207468616e20302e312560a81b6064820152608401610b5c565b600955565b60006112e261154b565b670de0b6b3a7640000620186a06112f860025490565b611303906001612bd7565b61130d9190612bee565b6113179190612bee565b82101561138c5760405162461bcd60e51b815260206004820152603c60248201527f48455145543a205377617020616d6f756e742063616e6e6f74206265206c6f7760448201527f6572207468616e20302e3030312520746f74616c20737570706c792e000000006064820152608401610b5c565b670de0b6b3a76400006103e86113a160025490565b6113ac906005612bd7565b6113b69190612bee565b6113c09190612bee565b8211156114355760405162461bcd60e51b815260206004820152603b60248201527f48455145543a205377617020616d6f756e742063616e6e6f742062652068696760448201527f686572207468616e20302e352520746f74616c20737570706c792e00000000006064820152608401610b5c565b50600881905560015b919050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600061147861154b565b50600f805460ff19169055600190565b61149061154b565b6001600160a01b0381166114f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b5c565b6114fe816121ed565b50565b61150961154b565b604051600090339047908381818185875af1925050503d8060008114610ca5576040519150601f19603f3d011682016040523d82523d6000602084013e610ca5565b6005546001600160a01b03163314610e595760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b5c565b6001600160a01b0383166116075760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b5c565b6001600160a01b0382166116685760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b5c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006116d58484611443565b90506000198114610ca557818110156117305760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b5c565b610ca584848484036115a5565b6001600160a01b0383166117a15760405162461bcd60e51b815260206004820152602560248201527f48455145543a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b5c565b6001600160a01b0382166118035760405162461bcd60e51b815260206004820152602360248201527f48455145543a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b5c565b6001600160a01b0383166000908152600c602052604090205460ff161561183c5760405162461bcd60e51b8152600401610b5c90612c10565b336000908152600c602052604090205460ff161561186c5760405162461bcd60e51b8152600401610b5c90612c10565b326000908152600c602052604090205460ff161561189c5760405162461bcd60e51b8152600401610b5c90612c10565b806000036118b5576118b0838360006122e2565b505050565b600b5460ff1615611f16576005546001600160a01b038481169116148015906118ec57506005546001600160a01b03838116911614155b801561190057506001600160a01b03821615155b801561191757506001600160a01b03821661dead14155b801561192d5750600554600160a01b900460ff16155b15611f16576001600160a01b0383166000908152601a602052604090205460ff1615801561197457506001600160a01b0382166000908152601a602052604090205460ff16155b15611ae357600b54610100900460ff166119d05760405162461bcd60e51b815260206004820152601e60248201527f48455145543a2074726164696e67206e6f7420656e61626c65642079657400006044820152606401610b5c565b600d54600a546119e09190612b5b565b42108015611a2057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b15611ae357826001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603611a86576001600160a01b0382166000908152600c60205260409020805460ff19166001179055611ae3565b816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031603611ae3576001600160a01b0383166000908152600c60205260409020805460ff191660011790555b601854610100900460ff16611b4c5760405162461bcd60e51b815260206004820152602960248201527f48455145543a20736163726966696365642074726164696e67206e6f7420656e60448201526818589b1959081e595d60ba1b6064820152608401610b5c565b600f5460ff1615611c8d576005546001600160a01b03838116911614801590611ba757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611be557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15611c8d57326000908152600e60205260409020544311611c7a5760405162461bcd60e51b815260206004820152604360248201527f48455145543a207472616e736665722064656c617920656e61626c65642c206f60448201527f6e6c79206f6e652070757263686173652070657220626c6f636b20616c6c6f7760648201526232b21760e91b608482015260a401610b5c565b326000908152600e602052604090204390555b6001600160a01b0383166000908152601d602052604090205460ff168015611cce57506001600160a01b0382166000908152601c602052604090205460ff16155b15611dc457600754811115611d4b5760405162461bcd60e51b815260206004820152603c60248201527f48455145543a20627579207472616e7366657220616d6f756e7420657863656560448201527f647320746865206d61785472616e73616374696f6e416d6f756e742e000000006064820152608401610b5c565b6009546001600160a01b038316600090815260208190526040902054611d719083612b5b565b1115611dbf5760405162461bcd60e51b815260206004820152601a60248201527f48455145543a206d61782077616c6c65742065786365656465640000000000006044820152606401610b5c565b611f16565b6001600160a01b0382166000908152601d602052604090205460ff168015611e0557506001600160a01b0383166000908152601c602052604090205460ff16155b15611e8257600754811115611dbf5760405162461bcd60e51b815260206004820152603d60248201527f48455145543a2073656c6c207472616e7366657220616d6f756e74206578636560448201527f65647320746865206d61785472616e73616374696f6e416d6f756e742e0000006064820152608401610b5c565b6001600160a01b0382166000908152601c602052604090205460ff16611f16576009546001600160a01b038316600090815260208190526040902054611ec89083612b5b565b1115611f165760405162461bcd60e51b815260206004820152601a60248201527f48455145543a206d61782077616c6c65742065786365656465640000000000006044820152606401610b5c565b3060009081526020819052604090205460085481108015908190611f425750600b5462010000900460ff165b8015611f585750600554600160a01b900460ff16155b8015611f7d57506001600160a01b0385166000908152601d602052604090205460ff16155b8015611fa257506001600160a01b0385166000908152601b602052604090205460ff16155b8015611fc757506001600160a01b0384166000908152601b602052604090205460ff16155b15611ff5576005805460ff60a01b1916600160a01b179055611fe7612486565b6005805460ff60a01b191690555b6005546001600160a01b0386166000908152601b602052604090205460ff600160a01b90920482161591168061204357506001600160a01b0385166000908152601b602052604090205460ff165b1561204c575060005b600081156121d9576001600160a01b0386166000908152601d602052604090205460ff16801561207e57506000601354115b1561210d576120a46103e861209e6013548861262f90919063ffffffff16565b90612642565b9050601354601554826120b79190612bd7565b6120c19190612bee565b601760008282546120d29190612b5b565b90915550506013546014546120e79083612bd7565b6120f19190612bee565b601660008282546121029190612b5b565b909155506121bb9050565b6001600160a01b0387166000908152601d602052604090205460ff16801561213757506000601054115b156121bb576121576103e861209e6010548861262f90919063ffffffff16565b90506010546012548261216a9190612bd7565b6121749190612bee565b601760008282546121859190612b5b565b909155505060105460115461219a9083612bd7565b6121a49190612bee565b601660008282546121b59190612b5b565b90915550505b80156121cc576121cc8730836122e2565b6121d68186612c3d565b94505b6121e48787876122e2565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60195415610e5957601954341015610e595760405162461bcd60e51b815260206004820152601260248201527112115451550e88199959481b9bdd081b595d60721b6044820152606401610b5c565b6001600160a01b0382166000818152601d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166123465760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b5c565b6001600160a01b0382166123a85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b5c565b6001600160a01b038316600090815260208190526040902054818110156124205760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b5c565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ca5565b30600090815260208190526040812054905060006016546017546124aa9190612b5b565b905060008215806124b9575081155b156124c357505050565b6008546124d1906014612bd7565b8311156124e9576008546124e6906014612bd7565b92505b6000600283601754866124fc9190612bd7565b6125069190612bee565b6125109190612bee565b9050600061251e858361264e565b90504761252a8261265a565b6000612536478361264e565b905060006125538761209e6016548561262f90919063ffffffff16565b905060006125618284612c3d565b600060178190556016559050851580159061257c5750600081115b156125cf5761258b868261281a565b601754604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d806000811461261c576040519150601f19603f3d011682016040523d82523d6000602084013e612621565b606091505b505050505050505050505050565b600061263b8284612bd7565b9392505050565b600061263b8284612bee565b600061263b8284612c3d565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061268f5761268f612ba8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561270d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127319190612c50565b8160018151811061274457612744612ba8565b60200260200101906001600160a01b031690816001600160a01b03168152505061278f307f0000000000000000000000000000000000000000000000000000000000000000846115a5565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906127e4908590600090869030904290600401612c6d565b600060405180830381600087803b1580156127fe57600080fd5b505af1158015612812573d6000803e3d6000fd5b505050505050565b612845307f0000000000000000000000000000000000000000000000000000000000000000846115a5565b60065460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f00000000000000000000000000000000000000000000000000000000000000009091169063f305d71990839060c40160606040518083038185885af11580156128d4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128f99190612cde565b5050505050565b6000806040838503121561291357600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561294f57858101830151858201604001528201612933565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114fe57600080fd5b6000806040838503121561299857600080fd5b82356129a381612970565b946020939093013593505050565b8035801515811461143e57600080fd5b6000806000604084860312156129d657600080fd5b833567ffffffffffffffff808211156129ee57600080fd5b818601915086601f830112612a0257600080fd5b813581811115612a1157600080fd5b8760208260051b8501011115612a2657600080fd5b602092830195509350612a3c91860190506129b1565b90509250925092565b600060208284031215612a5757600080fd5b5035919050565b600080600060608486031215612a7357600080fd5b8335612a7e81612970565b92506020840135612a8e81612970565b929592945050506040919091013590565b600060208284031215612ab157600080fd5b813561263b81612970565b60008060408385031215612acf57600080fd5b8235612ada81612970565b9150612ae8602084016129b1565b90509250929050565b600060208284031215612b0357600080fd5b61263b826129b1565b60008060408385031215612b1f57600080fd5b8235612b2a81612970565b91506020830135612b3a81612970565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c2657610c26612b45565b600181811c90821680612b8257607f821691505b602082108103612ba257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201612bd057612bd0612b45565b5060010190565b8082028115828204841417610c2657610c26612b45565b600082612c0b57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526013908201527212115451550e88189bdd0819195d1958dd1959606a1b604082015260600190565b81810381811115610c2657610c26612b45565b600060208284031215612c6257600080fd5b815161263b81612970565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612cbd5784516001600160a01b031683529383019391830191600101612c98565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612cf357600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212204dd0bfda33bb96d3a9c79e896477020f57c152d3fa101f060ab57d0ff75b244f64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c806381c7246b116101e7578063bbc0c7421161010d578063dd62ed3e116100a0578063f2fde38b1161006f578063f2fde38b14610a9c578063f5648a4f14610abc578063f637434214610ad1578063f8b45b0514610ae757600080fd5b8063dd62ed3e14610a3b578063e2f4560514610a5b578063e884f26014610a71578063f11a24d314610a8657600080fd5b8063c876d0b9116100dc578063c876d0b9146109d5578063c8c8ebe4146109ef578063d257b34f14610a05578063d85ba06314610a2557600080fd5b8063bbc0c74214610960578063bf56b3711461097f578063c024666814610995578063c18bc195146109b557600080fd5b806393a0dc6711610185578063a5bad98511610154578063a5bad985146108f6578063a5d370a41461090b578063a9059cbb14610920578063aacebbe31461094057600080fd5b806393a0dc671461088257806395d89b41146108a15780639a7a23d6146108b6578063a457c2d7146108d657600080fd5b80638da5cb5b116101c15780638da5cb5b146107fe578063921369131461081c578063924de9b714610832578063928e45e31461085257600080fd5b806381c7246b146107c157806382aa7c68146107d65780638a040df4146107f657600080fd5b80633bbac579116102d757806370a082311161026a5780637571336a116102395780637571336a1461075557806375f0a874146107755780637bce5a04146107955780637d99c66d146107ab57600080fd5b806370a08231146106db578063715018a6146107115780637494f24914610726578063751039fc1461074057600080fd5b806366ca9b83116102a657806366ca9b83146106655780636a486a8e146106855780636aa643eb1461069b5780636ddd1713146106bb57600080fd5b80633bbac579146105ae57806349bd5a5e146105de5780634a62bb65146106125780634fbee1931461062c57600080fd5b80631f3fed8f1161034f5780632a8c077e1161031e5780632a8c077e146105475780632ea3d11c1461055c578063313ce56714610572578063395093511461058e57600080fd5b80631f3fed8f146104db578063203e727e146104f157806323b872dd1461051157806327c8f8351461053157600080fd5b806310a60f021161038b57806310a60f021461043a5780631694505e1461045a57806318160ddd146104a65780631a8145bb146104c557600080fd5b806302dbd8f8146103bd57806306fdde03146103df578063095ea7b31461040a57600080fd5b366103b857005b600080fd5b3480156103c957600080fd5b506103dd6103d8366004612900565b610afd565b005b3480156103eb57600080fd5b506103f4610b80565b6040516104019190612922565b60405180910390f35b34801561041657600080fd5b5061042a610425366004612985565b610c12565b6040519015158152602001610401565b34801561044657600080fd5b506103dd6104553660046129c1565b610c2c565b34801561046657600080fd5b5061048e7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610401565b3480156104b257600080fd5b506002545b604051908152602001610401565b3480156104d157600080fd5b506104b760175481565b3480156104e757600080fd5b506104b760165481565b3480156104fd57600080fd5b506103dd61050c366004612a45565b610cab565b34801561051d57600080fd5b5061042a61052c366004612a5e565b610d5f565b34801561053d57600080fd5b5061048e61dead81565b34801561055357600080fd5b506103dd610d83565b34801561056857600080fd5b506104b760195481565b34801561057e57600080fd5b5060405160128152602001610401565b34801561059a57600080fd5b5061042a6105a9366004612985565b610d9a565b3480156105ba57600080fd5b5061042a6105c9366004612a9f565b600c6020526000908152604090205460ff1681565b3480156105ea57600080fd5b5061048e7f0000000000000000000000001b20133e3e1c9a48f469007d68c621077321af9681565b34801561061e57600080fd5b50600b5461042a9060ff1681565b34801561063857600080fd5b5061042a610647366004612a9f565b6001600160a01b03166000908152601b602052604090205460ff1690565b34801561067157600080fd5b506103dd610680366004612900565b610dbc565b34801561069157600080fd5b506104b760135481565b3480156106a757600080fd5b506103dd6106b6366004612a45565b610e3a565b3480156106c757600080fd5b50600b5461042a9062010000900460ff1681565b3480156106e757600080fd5b506104b76106f6366004612a9f565b6001600160a01b031660009081526020819052604090205490565b34801561071d57600080fd5b506103dd610e47565b34801561073257600080fd5b5060185461042a9060ff1681565b34801561074c57600080fd5b5061042a610e5b565b34801561076157600080fd5b506103dd610770366004612abc565b610e75565b34801561078157600080fd5b5060065461048e906001600160a01b031681565b3480156107a157600080fd5b506104b760115481565b3480156107b757600080fd5b506104b7600d5481565b3480156107cd57600080fd5b506103dd610ea8565b3480156107e257600080fd5b506103dd6107f1366004612a45565b610ec1565b6103dd610f40565b34801561080a57600080fd5b506005546001600160a01b031661048e565b34801561082857600080fd5b506104b760145481565b34801561083e57600080fd5b506103dd61084d366004612af1565b610fb6565b34801561085e57600080fd5b5061042a61086d366004612a9f565b601a6020526000908152604090205460ff1681565b34801561088e57600080fd5b5060185461042a90610100900460ff1681565b3480156108ad57600080fd5b506103f4610fda565b3480156108c257600080fd5b506103dd6108d1366004612abc565b610fe9565b3480156108e257600080fd5b5061042a6108f1366004612985565b6110a8565b34801561090257600080fd5b506103dd611123565b34801561091757600080fd5b506103dd611137565b34801561092c57600080fd5b5061042a61093b366004612985565b61114c565b34801561094c57600080fd5b506103dd61095b366004612a9f565b61115a565b34801561096c57600080fd5b50600b5461042a90610100900460ff1681565b34801561098b57600080fd5b506104b7600a5481565b3480156109a157600080fd5b506103dd6109b0366004612abc565b6111cd565b3480156109c157600080fd5b506103dd6109d0366004612a45565b611234565b3480156109e157600080fd5b50600f5461042a9060ff1681565b3480156109fb57600080fd5b506104b760075481565b348015610a1157600080fd5b5061042a610a20366004612a45565b6112d8565b348015610a3157600080fd5b506104b760105481565b348015610a4757600080fd5b506104b7610a56366004612b0c565b611443565b348015610a6757600080fd5b506104b760085481565b348015610a7d57600080fd5b5061042a61146e565b348015610a9257600080fd5b506104b760125481565b348015610aa857600080fd5b506103dd610ab7366004612a9f565b611488565b348015610ac857600080fd5b506103dd611501565b348015610add57600080fd5b506104b760155481565b348015610af357600080fd5b506104b760095481565b610b0561154b565b61014d610b128284612b5b565b1115610b655760405162461bcd60e51b815260206004820152601960248201527f48455145543a204d61782053656c6c204665652033332e33250000000000000060448201526064015b60405180910390fd5b60148290556015819055610b798183612b5b565b6013555050565b606060038054610b8f90612b6e565b80601f0160208091040260200160405190810160405280929190818152602001828054610bbb90612b6e565b8015610c085780601f10610bdd57610100808354040283529160200191610c08565b820191906000526020600020905b815481529060010190602001808311610beb57829003601f168201915b5050505050905090565b600033610c208185856115a5565b60019150505b92915050565b610c3461154b565b60005b82811015610ca55781600c6000868685818110610c5657610c56612ba8565b9050602002016020810190610c6b9190612a9f565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610c9d81612bbe565b915050610c37565b50505050565b610cb361154b565b670de0b6b3a76400006103e8610cc860025490565b610cd3906001612bd7565b610cdd9190612bee565b610ce79190612bee565b811015610d555760405162461bcd60e51b815260206004820152603660248201527f48455145543a2043616e6e6f7420736574206d61785472616e73616374696f6e604482015275416d6f756e74206c6f776572207468616e20302e312560501b6064820152608401610b5c565b6007819055600955565b600033610d6d8582856116c9565b610d7885858561173d565b506001949350505050565b610d8b61154b565b6018805460ff19166001179055565b600033610c20818585610dad8383611443565b610db79190612b5b565b6115a5565b610dc461154b565b61014d610dd18284612b5b565b1115610e1f5760405162461bcd60e51b815260206004820152601860248201527f48455145543a204d617820427579204665652033332e332500000000000000006044820152606401610b5c565b60118290556012819055610e338183612b5b565b6010555050565b610e4261154b565b601955565b610e4f61154b565b610e5960006121ed565b565b6000610e6561154b565b50600b805460ff19169055600190565b610e7d61154b565b6001600160a01b03919091166000908152601c60205260409020805460ff1916911515919091179055565b610eb061154b565b6018805461ff001916610100179055565b610ec961154b565b600b54610100900460ff1615610f1a5760405162461bcd60e51b815260206004820152601660248201527512115451550e88185b1c9958591e48195b98589b195960521b6044820152606401610b5c565b600b805462ffff0019166201010017905542600a55610f3a816001612bd7565b600d5550565b60185460ff16610f925760405162461bcd60e51b815260206004820181905260248201527f48455145543a20736163726966696365206e6f7420656e61626c6564207965746044820152606401610b5c565b610f9a61223f565b336000908152601a60205260409020805460ff19166001179055565b610fbe61154b565b600b8054911515620100000262ff000019909216919091179055565b606060048054610b8f90612b6e565b610ff161154b565b7f0000000000000000000000001b20133e3e1c9a48f469007d68c621077321af966001600160a01b0316826001600160a01b03160361109a576040805162461bcd60e51b81526020600482015260248101919091527f48455145543a2054686520706169722063616e6e6f742062652072656d6f766560448201527f642066726f6d206175746f6d617465644d61726b65744d616b657250616972736064820152608401610b5c565b6110a4828261228e565b5050565b600033816110b68286611443565b9050838110156111165760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610b5c565b610d7882868684036115a5565b61112b61154b565b6018805460ff19169055565b61113f61154b565b6018805461ff0019169055565b600033610c2081858561173d565b61116261154b565b6001600160a01b0381166111ab5760405162461bcd60e51b815260206004820152601060248201526f048455145543a204164647265737320360841b6044820152606401610b5c565b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6111d561154b565b6001600160a01b0382166000818152601b6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b61123c61154b565b670de0b6b3a76400006103e861125160025490565b61125c906001612bd7565b6112669190612bee565b6112709190612bee565b8110156112d35760405162461bcd60e51b815260206004820152602b60248201527f48455145543a2043616e6e6f7420736574206d617857616c6c6574206c6f776560448201526a72207468616e20302e312560a81b6064820152608401610b5c565b600955565b60006112e261154b565b670de0b6b3a7640000620186a06112f860025490565b611303906001612bd7565b61130d9190612bee565b6113179190612bee565b82101561138c5760405162461bcd60e51b815260206004820152603c60248201527f48455145543a205377617020616d6f756e742063616e6e6f74206265206c6f7760448201527f6572207468616e20302e3030312520746f74616c20737570706c792e000000006064820152608401610b5c565b670de0b6b3a76400006103e86113a160025490565b6113ac906005612bd7565b6113b69190612bee565b6113c09190612bee565b8211156114355760405162461bcd60e51b815260206004820152603b60248201527f48455145543a205377617020616d6f756e742063616e6e6f742062652068696760448201527f686572207468616e20302e352520746f74616c20737570706c792e00000000006064820152608401610b5c565b50600881905560015b919050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600061147861154b565b50600f805460ff19169055600190565b61149061154b565b6001600160a01b0381166114f55760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b5c565b6114fe816121ed565b50565b61150961154b565b604051600090339047908381818185875af1925050503d8060008114610ca5576040519150601f19603f3d011682016040523d82523d6000602084013e610ca5565b6005546001600160a01b03163314610e595760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610b5c565b6001600160a01b0383166116075760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b5c565b6001600160a01b0382166116685760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b5c565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006116d58484611443565b90506000198114610ca557818110156117305760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610b5c565b610ca584848484036115a5565b6001600160a01b0383166117a15760405162461bcd60e51b815260206004820152602560248201527f48455145543a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b5c565b6001600160a01b0382166118035760405162461bcd60e51b815260206004820152602360248201527f48455145543a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b5c565b6001600160a01b0383166000908152600c602052604090205460ff161561183c5760405162461bcd60e51b8152600401610b5c90612c10565b336000908152600c602052604090205460ff161561186c5760405162461bcd60e51b8152600401610b5c90612c10565b326000908152600c602052604090205460ff161561189c5760405162461bcd60e51b8152600401610b5c90612c10565b806000036118b5576118b0838360006122e2565b505050565b600b5460ff1615611f16576005546001600160a01b038481169116148015906118ec57506005546001600160a01b03838116911614155b801561190057506001600160a01b03821615155b801561191757506001600160a01b03821661dead14155b801561192d5750600554600160a01b900460ff16155b15611f16576001600160a01b0383166000908152601a602052604090205460ff1615801561197457506001600160a01b0382166000908152601a602052604090205460ff16155b15611ae357600b54610100900460ff166119d05760405162461bcd60e51b815260206004820152601e60248201527f48455145543a2074726164696e67206e6f7420656e61626c65642079657400006044820152606401610b5c565b600d54600a546119e09190612b5b565b42108015611a2057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316836001600160a01b031614155b15611ae357826001600160a01b03167f0000000000000000000000001b20133e3e1c9a48f469007d68c621077321af966001600160a01b031603611a86576001600160a01b0382166000908152600c60205260409020805460ff19166001179055611ae3565b816001600160a01b03167f0000000000000000000000001b20133e3e1c9a48f469007d68c621077321af966001600160a01b031603611ae3576001600160a01b0383166000908152600c60205260409020805460ff191660011790555b601854610100900460ff16611b4c5760405162461bcd60e51b815260206004820152602960248201527f48455145543a20736163726966696365642074726164696e67206e6f7420656e60448201526818589b1959081e595d60ba1b6064820152608401610b5c565b600f5460ff1615611c8d576005546001600160a01b03838116911614801590611ba757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b8015611be557507f0000000000000000000000001b20133e3e1c9a48f469007d68c621077321af966001600160a01b0316826001600160a01b031614155b15611c8d57326000908152600e60205260409020544311611c7a5760405162461bcd60e51b815260206004820152604360248201527f48455145543a207472616e736665722064656c617920656e61626c65642c206f60448201527f6e6c79206f6e652070757263686173652070657220626c6f636b20616c6c6f7760648201526232b21760e91b608482015260a401610b5c565b326000908152600e602052604090204390555b6001600160a01b0383166000908152601d602052604090205460ff168015611cce57506001600160a01b0382166000908152601c602052604090205460ff16155b15611dc457600754811115611d4b5760405162461bcd60e51b815260206004820152603c60248201527f48455145543a20627579207472616e7366657220616d6f756e7420657863656560448201527f647320746865206d61785472616e73616374696f6e416d6f756e742e000000006064820152608401610b5c565b6009546001600160a01b038316600090815260208190526040902054611d719083612b5b565b1115611dbf5760405162461bcd60e51b815260206004820152601a60248201527f48455145543a206d61782077616c6c65742065786365656465640000000000006044820152606401610b5c565b611f16565b6001600160a01b0382166000908152601d602052604090205460ff168015611e0557506001600160a01b0383166000908152601c602052604090205460ff16155b15611e8257600754811115611dbf5760405162461bcd60e51b815260206004820152603d60248201527f48455145543a2073656c6c207472616e7366657220616d6f756e74206578636560448201527f65647320746865206d61785472616e73616374696f6e416d6f756e742e0000006064820152608401610b5c565b6001600160a01b0382166000908152601c602052604090205460ff16611f16576009546001600160a01b038316600090815260208190526040902054611ec89083612b5b565b1115611f165760405162461bcd60e51b815260206004820152601a60248201527f48455145543a206d61782077616c6c65742065786365656465640000000000006044820152606401610b5c565b3060009081526020819052604090205460085481108015908190611f425750600b5462010000900460ff165b8015611f585750600554600160a01b900460ff16155b8015611f7d57506001600160a01b0385166000908152601d602052604090205460ff16155b8015611fa257506001600160a01b0385166000908152601b602052604090205460ff16155b8015611fc757506001600160a01b0384166000908152601b602052604090205460ff16155b15611ff5576005805460ff60a01b1916600160a01b179055611fe7612486565b6005805460ff60a01b191690555b6005546001600160a01b0386166000908152601b602052604090205460ff600160a01b90920482161591168061204357506001600160a01b0385166000908152601b602052604090205460ff165b1561204c575060005b600081156121d9576001600160a01b0386166000908152601d602052604090205460ff16801561207e57506000601354115b1561210d576120a46103e861209e6013548861262f90919063ffffffff16565b90612642565b9050601354601554826120b79190612bd7565b6120c19190612bee565b601760008282546120d29190612b5b565b90915550506013546014546120e79083612bd7565b6120f19190612bee565b601660008282546121029190612b5b565b909155506121bb9050565b6001600160a01b0387166000908152601d602052604090205460ff16801561213757506000601054115b156121bb576121576103e861209e6010548861262f90919063ffffffff16565b90506010546012548261216a9190612bd7565b6121749190612bee565b601760008282546121859190612b5b565b909155505060105460115461219a9083612bd7565b6121a49190612bee565b601660008282546121b59190612b5b565b90915550505b80156121cc576121cc8730836122e2565b6121d68186612c3d565b94505b6121e48787876122e2565b50505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60195415610e5957601954341015610e595760405162461bcd60e51b815260206004820152601260248201527112115451550e88199959481b9bdd081b595d60721b6044820152606401610b5c565b6001600160a01b0382166000818152601d6020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166123465760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610b5c565b6001600160a01b0382166123a85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610b5c565b6001600160a01b038316600090815260208190526040902054818110156124205760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610b5c565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3610ca5565b30600090815260208190526040812054905060006016546017546124aa9190612b5b565b905060008215806124b9575081155b156124c357505050565b6008546124d1906014612bd7565b8311156124e9576008546124e6906014612bd7565b92505b6000600283601754866124fc9190612bd7565b6125069190612bee565b6125109190612bee565b9050600061251e858361264e565b90504761252a8261265a565b6000612536478361264e565b905060006125538761209e6016548561262f90919063ffffffff16565b905060006125618284612c3d565b600060178190556016559050851580159061257c5750600081115b156125cf5761258b868261281a565b601754604080518781526020810184905280820192909252517f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5619181900360600190a15b6006546040516001600160a01b03909116904790600081818185875af1925050503d806000811461261c576040519150601f19603f3d011682016040523d82523d6000602084013e612621565b606091505b505050505050505050505050565b600061263b8284612bd7565b9392505050565b600061263b8284612bee565b600061263b8284612c3d565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061268f5761268f612ba8565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561270d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127319190612c50565b8160018151811061274457612744612ba8565b60200260200101906001600160a01b031690816001600160a01b03168152505061278f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846115a5565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906127e4908590600090869030904290600401612c6d565b600060405180830381600087803b1580156127fe57600080fd5b505af1158015612812573d6000803e3d6000fd5b505050505050565b612845307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846115a5565b60065460405163f305d71960e01b81523060048201526024810184905260006044820181905260648201526001600160a01b0391821660848201524260a48201527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063f305d71990839060c40160606040518083038185885af11580156128d4573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906128f99190612cde565b5050505050565b6000806040838503121561291357600080fd5b50508035926020909101359150565b600060208083528351808285015260005b8181101561294f57858101830151858201604001528201612933565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146114fe57600080fd5b6000806040838503121561299857600080fd5b82356129a381612970565b946020939093013593505050565b8035801515811461143e57600080fd5b6000806000604084860312156129d657600080fd5b833567ffffffffffffffff808211156129ee57600080fd5b818601915086601f830112612a0257600080fd5b813581811115612a1157600080fd5b8760208260051b8501011115612a2657600080fd5b602092830195509350612a3c91860190506129b1565b90509250925092565b600060208284031215612a5757600080fd5b5035919050565b600080600060608486031215612a7357600080fd5b8335612a7e81612970565b92506020840135612a8e81612970565b929592945050506040919091013590565b600060208284031215612ab157600080fd5b813561263b81612970565b60008060408385031215612acf57600080fd5b8235612ada81612970565b9150612ae8602084016129b1565b90509250929050565b600060208284031215612b0357600080fd5b61263b826129b1565b60008060408385031215612b1f57600080fd5b8235612b2a81612970565b91506020830135612b3a81612970565b809150509250929050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610c2657610c26612b45565b600181811c90821680612b8257607f821691505b602082108103612ba257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b600060018201612bd057612bd0612b45565b5060010190565b8082028115828204841417610c2657610c26612b45565b600082612c0b57634e487b7160e01b600052601260045260246000fd5b500490565b60208082526013908201527212115451550e88189bdd0819195d1958dd1959606a1b604082015260600190565b81810381811115610c2657610c26612b45565b600060208284031215612c6257600080fd5b815161263b81612970565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612cbd5784516001600160a01b031683529383019391830191600101612c98565b50506001600160a01b03969096166060850152505050608001529392505050565b600080600060608486031215612cf357600080fd5b835192506020840151915060408401519050925092509256fea26469706673582212204dd0bfda33bb96d3a9c79e896477020f57c152d3fa101f060ab57d0ff75b244f64736f6c63430008130033

Deployed Bytecode Sourcemap

37770:18357:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46256:392;;;;;;;;;;-1:-1:-1;46256:392:0;;;;;:::i;:::-;;:::i;:::-;;9554:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12055:242;;;;;;;;;;-1:-1:-1;12055:242:0;;;;;:::i;:::-;;:::i;:::-;;;1441:14:1;;1434:22;1416:41;;1404:2;1389:18;12055:242:0;1276:187:1;47362:225:0;;;;;;;;;;-1:-1:-1;47362:225:0;;;;;:::i;:::-;;:::i;37958:51::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2518:32:1;;;2500:51;;2488:2;2473:18;37958:51:0;2327:230:1;10683:108:0;;;;;;;;;;-1:-1:-1;10771:12:0;;10683:108;;;2708:25:1;;;2696:2;2681:18;10683:108:0;2562:177:1;39066:33:0;;;;;;;;;;;;;;;;39026;;;;;;;;;;;;;;;;44246:300;;;;;;;;;;-1:-1:-1;44246:300:0;;;;;:::i;:::-;;:::i;12877:295::-;;;;;;;;;;-1:-1:-1;12877:295:0;;;;;:::i;:::-;;:::i;38061:53::-;;;;;;;;;;;;38107:6;38061:53;;43060:87;;;;;;;;;;;;;:::i;39270:39::-;;;;;;;;;;;;;;;;10525:93;;;;;;;;;;-1:-1:-1;10525:93:0;;10608:2;3740:36:1;;3728:2;3713:18;10525:93:0;3598:184:1;13581:270:0;;;;;;;;;;-1:-1:-1;13581:270:0;;;;;:::i;:::-;;:::i;38515:37::-;;;;;;;;;;-1:-1:-1;38515:37:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;38016:38;;;;;;;;;;;;;;;38341:33;;;;;;;;;;-1:-1:-1;38341:33:0;;;;;;;;48016:126;;;;;;;;;;-1:-1:-1;48016:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;48106:28:0;48082:4;48106:28;;;:19;:28;;;;;;;;;48016:126;45863:385;;;;;;;;;;-1:-1:-1;45863:385:0;;;;;:::i;:::-;;:::i;38913:28::-;;;;;;;;;;;;;;;;45463:196;;;;;;;;;;-1:-1:-1;45463:196:0;;;;;:::i;:::-;;:::i;38421:30::-;;;;;;;;;;-1:-1:-1;38421:30:0;;;;;;;;;;;10854:177;;;;;;;;;;-1:-1:-1;10854:177:0;;;;;:::i;:::-;-1:-1:-1;;;;;11005:18:0;10973:7;11005:18;;;;;;;;;;;;10854:177;2934:103;;;;;;;;;;;;;:::i;39179:34::-;;;;;;;;;;-1:-1:-1;39179:34:0;;;;;;;;43322:121;;;;;;;;;;;;;:::i;44814:167::-;;;;;;;;;;-1:-1:-1;44814:167:0;;;;;:::i;:::-;;:::i;38153:30::-;;;;;;;;;;-1:-1:-1;38153:30:0;;;;-1:-1:-1;;;;;38153:30:0;;;38837;;;;;;;;;;;;;;;;38559:39;;;;;;;;;;;;;;;;42776:103;;;;;;;;;;;;;:::i;42472:262::-;;;;;;;;;;-1:-1:-1;42472:262:0;;;;;:::i;:::-;;:::i;44989:186::-;;;:::i;2293:87::-;;;;;;;;;;-1:-1:-1;2366:6:0;;-1:-1:-1;;;;;2366:6:0;2293:87;;38948:31;;;;;;;;;;;;;;;;45755:100;;;;;;;;;;-1:-1:-1;45755:100:0;;;;;:::i;:::-;;:::i;39316:43::-;;;;;;;;;;-1:-1:-1;39316:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;39220;;;;;;;;;;-1:-1:-1;39220:43:0;;;;;;;;;;;9773:104;;;;;;;;;;;;;:::i;46846:311::-;;;;;;;;;;-1:-1:-1;46846:311:0;;;;;:::i;:::-;;:::i;14354:505::-;;;;;;;;;;-1:-1:-1;14354:505:0;;;;;:::i;:::-;;:::i;43181:89::-;;;;;;;;;;;;;:::i;42922:105::-;;;;;;;;;;;;;:::i;11237:234::-;;;;;;;;;;-1:-1:-1;11237:234:0;;;;;:::i;:::-;;:::i;47595:222::-;;;;;;;;;;-1:-1:-1;47595:222:0;;;;;:::i;:::-;;:::i;38381:33::-;;;;;;;;;;-1:-1:-1;38381:33:0;;;;;;;;;;;38307:25;;;;;;;;;;;;;;;;46656:182;;;;;;;;;;-1:-1:-1;46656:182:0;;;;;:::i;:::-;;:::i;44554:252::-;;;;;;;;;;-1:-1:-1;44554:252:0;;;;;:::i;:::-;;:::i;38755:39::-;;;;;;;;;;-1:-1:-1;38755:39:0;;;;;;;;38192:35;;;;;;;;;;;;;;;;43709:529;;;;;;;;;;-1:-1:-1;43709:529:0;;;;;:::i;:::-;;:::i;38803:27::-;;;;;;;;;;;;;;;;11534:201;;;;;;;;;;-1:-1:-1;11534:201:0;;;;;:::i;:::-;;:::i;38234:33::-;;;;;;;;;;;;;;;;43504:135;;;;;;;;;;;;;:::i;38874:30::-;;;;;;;;;;;;;;;;3192:238;;;;;;;;;;-1:-1:-1;3192:238:0;;;;;:::i;:::-;;:::i;47825:183::-;;;;;;;;;;;;;:::i;38986:31::-;;;;;;;;;;;;;;;;38274:24;;;;;;;;;;;;;;;;46256:392;2179:13;:11;:13::i;:::-;46436:3:::1;46402:29;46418:13:::0;46402;:29:::1;:::i;:::-;46401:38;;46379:113;;;::::0;-1:-1:-1;;;46379:113:0;;5401:2:1;46379:113:0::1;::::0;::::1;5383:21:1::0;5440:2;5420:18;;;5413:30;5479:27;5459:18;;;5452:55;5524:18;;46379:113:0::1;;;;;;;;;46503:16;:32:::0;;;46546:16:::1;:32:::0;;;46605:35:::1;46565:13:::0;46522;46605:35:::1;:::i;:::-;46589:13;:51:::0;-1:-1:-1;;46256:392:0:o;9554:100::-;9608:13;9641:5;9634:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9554:100;:::o;12055:242::-;12174:4;918:10;12235:32;918:10;12251:7;12260:6;12235:8;:32::i;:::-;12285:4;12278:11;;;12055:242;;;;;:::o;47362:225::-;2179:13;:11;:13::i;:::-;47486:9:::1;47481:99;47501:19:::0;;::::1;47481:99;;;47563:5;47542;:18;47548:8;;47557:1;47548:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;47542:18:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;47542:18:0;:26;;-1:-1:-1;;47542:26:0::1;::::0;::::1;;::::0;;;::::1;::::0;;47522:3;::::1;::::0;::::1;:::i;:::-;;;;47481:99;;;;47362:225:::0;;;:::o;44246:300::-;2179:13;:11;:13::i;:::-;44383:4:::1;44375;44354:13;10771:12:::0;;;10683:108;44354:13:::1;:17;::::0;44370:1:::1;44354:17;:::i;:::-;44353:26;;;;:::i;:::-;44352:35;;;;:::i;:::-;44342:6;:45;;44320:149;;;::::0;-1:-1:-1;;;44320:149:0;;6807:2:1;44320:149:0::1;::::0;::::1;6789:21:1::0;6846:2;6826:18;;;6819:30;6885:34;6865:18;;;6858:62;-1:-1:-1;;;6936:18:1;;;6929:52;6998:19;;44320:149:0::1;6605:418:1::0;44320:149:0::1;44480:20;:29:::0;;;44520:9:::1;:18:::0;44246:300::o;12877:295::-;13008:4;918:10;13066:38;13082:4;918:10;13097:6;13066:15;:38::i;:::-;13115:27;13125:4;13131:2;13135:6;13115:9;:27::i;:::-;-1:-1:-1;13160:4:0;;12877:295;-1:-1:-1;;;;12877:295:0:o;43060:87::-;2179:13;:11;:13::i;:::-;43117:15:::1;:22:::0;;-1:-1:-1;;43117:22:0::1;43135:4;43117:22;::::0;;43060:87::o;13581:270::-;13696:4;918:10;13757:64;918:10;13773:7;13810:10;13782:25;918:10;13773:7;13782:9;:25::i;:::-;:38;;;;:::i;:::-;13757:8;:64::i;45863:385::-;2179:13;:11;:13::i;:::-;46042:3:::1;46008:29;46024:13:::0;46008;:29:::1;:::i;:::-;46007:38;;45985:112;;;::::0;-1:-1:-1;;;45985:112:0;;7230:2:1;45985:112:0::1;::::0;::::1;7212:21:1::0;7269:2;7249:18;;;7242:30;7308:26;7288:18;;;7281:54;7352:18;;45985:112:0::1;7028:348:1::0;45985:112:0::1;46108:15;:31:::0;;;46150:15:::1;:31:::0;;;46207:33:::1;46168:13:::0;46126;46207:33:::1;:::i;:::-;46192:12;:48:::0;-1:-1:-1;;45863:385:0:o;45463:196::-;2179:13;:11;:13::i;:::-;45623:12:::1;:28:::0;45463:196::o;2934:103::-;2179:13;:11;:13::i;:::-;2999:30:::1;3026:1;2999:18;:30::i;:::-;2934:103::o:0;43322:121::-;43374:4;2179:13;:11;:13::i;:::-;-1:-1:-1;43391:14:0::1;:22:::0;;-1:-1:-1;;43391:22:0::1;::::0;;;43322:121;:::o;44814:167::-;2179:13;:11;:13::i;:::-;-1:-1:-1;;;;;44927:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;44927:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44814:167::o;42776:103::-;2179:13;:11;:13::i;:::-;42841:23:::1;:30:::0;;-1:-1:-1;;42841:30:0::1;;;::::0;;42776:103::o;42472:262::-;2179:13;:11;:13::i;:::-;42545::::1;::::0;::::1;::::0;::::1;;;42544:14;42536:49;;;::::0;-1:-1:-1;;;42536:49:0;;7991:2:1;42536:49:0::1;::::0;::::1;7973:21:1::0;8030:2;8010:18;;;8003:30;-1:-1:-1;;;8049:18:1;;;8042:52;8111:18;;42536:49:0::1;7789:346:1::0;42536:49:0::1;42596:13;:20:::0;;-1:-1:-1;;42627:18:0;;;;;42669:15:::1;42656:10;:28:::0;42711:13:::1;42723:1:::0;-1:-1:-1;42711:13:0::1;:::i;:::-;42695:11;:31:::0;-1:-1:-1;42472:262:0:o;44989:186::-;45044:15;;;;45036:60;;;;-1:-1:-1;;;45036:60:0;;8342:2:1;45036:60:0;;;8324:21:1;;;8361:18;;;8354:30;8420:34;8400:18;;;8393:62;8472:18;;45036:60:0;8140:356:1;45036:60:0;45107:21;:19;:21::i;:::-;45150:10;45250:19;;;;:11;:19;;;;;:26;;-1:-1:-1;;45250:26:0;45162:4;45250:26;;;2934:103::o;45755:100::-;2179:13;:11;:13::i;:::-;45826:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;45826:21:0;;::::1;::::0;;;::::1;::::0;;45755:100::o;9773:104::-;9829:13;9862:7;9855:14;;;;;:::i;46846:311::-;2179:13;:11;:13::i;:::-;46990::::1;-1:-1:-1::0;;;;;46982:21:0::1;:4;-1:-1:-1::0;;;;;46982:21:0::1;::::0;46960:135:::1;;;::::0;;-1:-1:-1;;;46960:135:0;;8703:2:1;46960:135:0::1;::::0;::::1;8685:21:1::0;8722:18;;;8715:30;;;;8781:34;8761:18;;;8754:62;8852:34;8832:18;;;8825:62;8904:19;;46960:135:0::1;8501:428:1::0;46960:135:0::1;47108:41;47137:4;47143:5;47108:28;:41::i;:::-;46846:311:::0;;:::o;14354:505::-;14474:4;918:10;14474:4;14562:25;918:10;14579:7;14562:9;:25::i;:::-;14535:52;;14640:15;14620:16;:35;;14598:122;;;;-1:-1:-1;;;14598:122:0;;9136:2:1;14598:122:0;;;9118:21:1;9175:2;9155:18;;;9148:30;9214:34;9194:18;;;9187:62;-1:-1:-1;;;9265:18:1;;;9258:35;9310:19;;14598:122:0;8934:401:1;14598:122:0;14756:60;14765:5;14772:7;14800:15;14781:16;:34;14756:8;:60::i;43181:89::-;2179:13;:11;:13::i;:::-;43239:15:::1;:23:::0;;-1:-1:-1;;43239:23:0::1;::::0;;43181:89::o;42922:105::-;2179:13;:11;:13::i;:::-;42988:23:::1;:31:::0;;-1:-1:-1;;42988:31:0::1;::::0;;42922:105::o;11237:234::-;11352:4;918:10;11413:28;918:10;11430:2;11434:6;11413:9;:28::i;47595:222::-;2179:13;:11;:13::i;:::-;-1:-1:-1;;;;;47713:30:0;::::1;47705:59;;;::::0;-1:-1:-1;;;47705:59:0;;9542:2:1;47705:59:0::1;::::0;::::1;9524:21:1::0;9581:2;9561:18;;;9554:30;-1:-1:-1;;;9600:18:1;;;9593:46;9656:18;;47705:59:0::1;9340:340:1::0;47705:59:0::1;47775:15;:34:::0;;-1:-1:-1;;;;;;47775:34:0::1;-1:-1:-1::0;;;;;47775:34:0;;;::::1;::::0;;;::::1;::::0;;47595:222::o;46656:182::-;2179:13;:11;:13::i;:::-;-1:-1:-1;;;;;46741:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;46741:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;46796:34;;1416:41:1;;;46796:34:0::1;::::0;1389:18:1;46796:34:0::1;;;;;;;46656:182:::0;;:::o;44554:252::-;2179:13;:11;:13::i;:::-;44694:4:::1;44686;44665:13;10771:12:::0;;;10683:108;44665:13:::1;:17;::::0;44681:1:::1;44665:17;:::i;:::-;44664:26;;;;:::i;:::-;44663:35;;;;:::i;:::-;44653:6;:45;;44631:138;;;::::0;-1:-1:-1;;;44631:138:0;;9887:2:1;44631:138:0::1;::::0;::::1;9869:21:1::0;9926:2;9906:18;;;9899:30;9965:34;9945:18;;;9938:62;-1:-1:-1;;;10016:18:1;;;10009:41;10067:19;;44631:138:0::1;9685:407:1::0;44631:138:0::1;44780:9;:18:::0;44554:252::o;43709:529::-;43817:4;2179:13;:11;:13::i;:::-;43907:4:::1;43897:6;43876:13;10771:12:::0;;;10683:108;43876:13:::1;:17;::::0;43892:1:::1;43876:17;:::i;:::-;43875:28;;;;:::i;:::-;43874:37;;;;:::i;:::-;43861:9;:50;;43839:160;;;::::0;-1:-1:-1;;;43839:160:0;;10299:2:1;43839:160:0::1;::::0;::::1;10281:21:1::0;10338:2;10318:18;;;10311:30;10377:34;10357:18;;;10350:62;10448:30;10428:18;;;10421:58;10496:19;;43839:160:0::1;10097:424:1::0;43839:160:0::1;44076:4;44068;44047:13;10771:12:::0;;;10683:108;44047:13:::1;:17;::::0;44063:1:::1;44047:17;:::i;:::-;44046:26;;;;:::i;:::-;44045:35;;;;:::i;:::-;44032:9;:48;;44010:157;;;::::0;-1:-1:-1;;;44010:157:0;;10728:2:1;44010:157:0::1;::::0;::::1;10710:21:1::0;10767:2;10747:18;;;10740:30;10806:34;10786:18;;;10779:62;10877:29;10857:18;;;10850:57;10924:19;;44010:157:0::1;10526:423:1::0;44010:157:0::1;-1:-1:-1::0;44178:18:0::1;:30:::0;;;44226:4:::1;2203:1;43709:529:::0;;;:::o;11534:201::-;-1:-1:-1;;;;;11700:18:0;;;11668:7;11700:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11534:201::o;43504:135::-;43564:4;2179:13;:11;:13::i;:::-;-1:-1:-1;43581:20:0::1;:28:::0;;-1:-1:-1;;43581:28:0::1;::::0;;;43504:135;:::o;3192:238::-;2179:13;:11;:13::i;:::-;-1:-1:-1;;;;;3295:22:0;::::1;3273:110;;;::::0;-1:-1:-1;;;3273:110:0;;11156:2:1;3273:110:0::1;::::0;::::1;11138:21:1::0;11195:2;11175:18;;;11168:30;11234:34;11214:18;;;11207:62;-1:-1:-1;;;11285:18:1;;;11278:36;11331:19;;3273:110:0::1;10954:402:1::0;3273:110:0::1;3394:28;3413:8;3394:18;:28::i;:::-;3192:238:::0;:::o;47825:183::-;2179:13;:11;:13::i;:::-;47918:82:::1;::::0;47881:12:::1;::::0;47926:10:::1;::::0;47950:21:::1;::::0;47881:12;47918:82;47881:12;47918:82;47950:21;47926:10;47918:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2458:132:::0;2366:6;;-1:-1:-1;;;;;2366:6:0;918:10;2522:23;2514:68;;;;-1:-1:-1;;;2514:68:0;;11773:2:1;2514:68:0;;;11755:21:1;;;11792:18;;;11785:30;11851:34;11831:18;;;11824:62;11903:18;;2514:68:0;11571:356:1;18487:380:0;-1:-1:-1;;;;;18623:19:0;;18615:68;;;;-1:-1:-1;;;18615:68:0;;12134:2:1;18615:68:0;;;12116:21:1;12173:2;12153:18;;;12146:30;12212:34;12192:18;;;12185:62;-1:-1:-1;;;12263:18:1;;;12256:34;12307:19;;18615:68:0;11932:400:1;18615:68:0;-1:-1:-1;;;;;18702:21:0;;18694:68;;;;-1:-1:-1;;;18694:68:0;;12539:2:1;18694:68:0;;;12521:21:1;12578:2;12558:18;;;12551:30;12617:34;12597:18;;;12590:62;-1:-1:-1;;;12668:18:1;;;12661:32;12710:19;;18694:68:0;12337:398:1;18694:68:0;-1:-1:-1;;;;;18775:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;18827:32;;2708:25:1;;;18827:32:0;;2681:18:1;18827:32:0;;;;;;;18487:380;;;:::o;19158:502::-;19293:24;19320:25;19330:5;19337:7;19320:9;:25::i;:::-;19293:52;;-1:-1:-1;;19360:16:0;:37;19356:297;;19460:6;19440:16;:26;;19414:117;;;;-1:-1:-1;;;19414:117:0;;12942:2:1;19414:117:0;;;12924:21:1;12981:2;12961:18;;;12954:30;13020:31;13000:18;;;12993:59;13069:18;;19414:117:0;12740:353:1;19414:117:0;19575:51;19584:5;19591:7;19619:6;19600:16;:25;19575:8;:51::i;48150:5315::-;-1:-1:-1;;;;;48282:18:0;;48274:68;;;;-1:-1:-1;;;48274:68:0;;13300:2:1;48274:68:0;;;13282:21:1;13339:2;13319:18;;;13312:30;13378:34;13358:18;;;13351:62;-1:-1:-1;;;13429:18:1;;;13422:35;13474:19;;48274:68:0;13098:401:1;48274:68:0;-1:-1:-1;;;;;48361:16:0;;48353:64;;;;-1:-1:-1;;;48353:64:0;;13706:2:1;48353:64:0;;;13688:21:1;13745:2;13725:18;;;13718:30;13784:34;13764:18;;;13757:62;-1:-1:-1;;;13835:18:1;;;13828:33;13878:19;;48353:64:0;13504:399:1;48353:64:0;-1:-1:-1;;;;;48439:11:0;;;;;;:5;:11;;;;;;;;48438:12;48430:44;;;;-1:-1:-1;;;48430:44:0;;;;;;;:::i;:::-;48500:10;48494:17;;;;:5;:17;;;;;;;;48493:18;48485:50;;;;-1:-1:-1;;;48485:50:0;;;;;;;:::i;:::-;48561:9;48555:16;;;;:5;:16;;;;;;;;48554:17;48546:49;;;;-1:-1:-1;;;48546:49:0;;;;;;;:::i;:::-;48612:6;48622:1;48612:11;48608:93;;48640:28;48656:4;48662:2;48666:1;48640:15;:28::i;:::-;48150:5315;;;:::o;48608:93::-;48717:14;;;;48713:3043;;;2366:6;;-1:-1:-1;;;;;48770:15:0;;;2366:6;;48770:15;;;;:49;;-1:-1:-1;2366:6:0;;-1:-1:-1;;;;;48806:13:0;;;2366:6;;48806:13;;48770:49;:86;;;;-1:-1:-1;;;;;;48840:16:0;;;;48770:86;:124;;;;-1:-1:-1;;;;;;48877:17:0;;38107:6;48877:17;;48770:124;:154;;;;-1:-1:-1;48916:8:0;;-1:-1:-1;;;48916:8:0;;;;48915:9;48770:154;48748:2997;;;-1:-1:-1;;;;;48964:17:0;;;;;;:11;:17;;;;;;;;48963:18;:38;;;;-1:-1:-1;;;;;;48986:15:0;;;;;;:11;:15;;;;;;;;48985:16;48963:38;48959:602;;;49034:13;;;;;;;49026:56;;;;-1:-1:-1;;;49026:56:0;;14458:2:1;49026:56:0;;;14440:21:1;14497:2;14477:18;;;14470:30;14536:32;14516:18;;;14509:60;14586:18;;49026:56:0;14256:354:1;49026:56:0;49168:11;;49155:10;;:24;;;;:::i;:::-;49137:15;:42;:103;;;;;49224:15;-1:-1:-1;;;;;49208:32:0;:4;-1:-1:-1;;;;;49208:32:0;;;49137:103;49107:435;;;49321:4;-1:-1:-1;;;;;49295:30:0;49303:13;-1:-1:-1;;;;;49295:30:0;;49291:228;;-1:-1:-1;;;;;49358:9:0;;;;;;:5;:9;;;;;:16;;-1:-1:-1;;49358:16:0;49370:4;49358:16;;;49291:228;;;49438:2;-1:-1:-1;;;;;49412:28:0;49420:13;-1:-1:-1;;;;;49412:28:0;;49408:111;;-1:-1:-1;;;;;49473:11:0;;;;;;:5;:11;;;;;:18;;-1:-1:-1;;49473:18:0;49487:4;49473:18;;;49408:111;49611:23;;;;;;;49581:138;;;;-1:-1:-1;;;49581:138:0;;14817:2:1;49581:138:0;;;14799:21:1;14856:2;14836:18;;;14829:30;14895:34;14875:18;;;14868:62;-1:-1:-1;;;14946:18:1;;;14939:39;14995:19;;49581:138:0;14615:405:1;49581:138:0;49876:20;;;;49872:635;;;2366:6;;-1:-1:-1;;;;;49951:13:0;;;2366:6;;49951:13;;;;:72;;;50007:15;-1:-1:-1;;;;;49993:30:0;:2;-1:-1:-1;;;;;49993:30:0;;;49951:72;:129;;;;;50066:13;-1:-1:-1;;;;;50052:28:0;:2;-1:-1:-1;;;;;50052:28:0;;;49951:129;49921:567;;;50198:9;50169:39;;;;:28;:39;;;;;;50244:12;-1:-1:-1;50131:252:0;;;;-1:-1:-1;;;50131:252:0;;15227:2:1;50131:252:0;;;15209:21:1;15266:2;15246:18;;;15239:30;15305:34;15285:18;;;15278:62;15376:34;15356:18;;;15349:62;-1:-1:-1;;;15427:19:1;;;15420:34;15471:19;;50131:252:0;15025:471:1;50131:252:0;50439:9;50410:39;;;;:28;:39;;;;;50452:12;50410:54;;49921:567;-1:-1:-1;;;;;50581:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;50638:35:0;;;;;;:31;:35;;;;;;;;50637:36;50581:92;50555:1175;;;50760:20;;50750:6;:30;;50716:176;;;;-1:-1:-1;;;50716:176:0;;15703:2:1;50716:176:0;;;15685:21:1;15742:2;15722:18;;;15715:30;15781:34;15761:18;;;15754:62;15852:30;15832:18;;;15825:58;15900:19;;50716:176:0;15501:424:1;50716:176:0;50975:9;;-1:-1:-1;;;;;11005:18:0;;10973:7;11005:18;;;;;;;;;;;50949:22;;:6;:22;:::i;:::-;:35;;50915:147;;;;-1:-1:-1;;;50915:147:0;;16132:2:1;50915:147:0;;;16114:21:1;16171:2;16151:18;;;16144:30;16210:28;16190:18;;;16183:56;16256:18;;50915:147:0;15930:350:1;50915:147:0;50555:1175;;;-1:-1:-1;;;;;51160:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;51215:37:0;;;;;;:31;:37;;;;;;;;51214:38;51160:92;51134:596;;;51339:20;;51329:6;:30;;51295:177;;;;-1:-1:-1;;;51295:177:0;;16487:2:1;51295:177:0;;;16469:21:1;16526:2;16506:18;;;16499:30;16565:34;16545:18;;;16538:62;16636:31;16616:18;;;16609:59;16685:19;;51295:177:0;16285:425:1;51134:596:0;-1:-1:-1;;;;;51503:35:0;;;;;;:31;:35;;;;;;;;51498:232;;51623:9;;-1:-1:-1;;;;;11005:18:0;;10973:7;11005:18;;;;;;;;;;;51597:22;;:6;:22;:::i;:::-;:35;;51563:147;;;;-1:-1:-1;;;51563:147:0;;16132:2:1;51563:147:0;;;16114:21:1;16171:2;16151:18;;;16144:30;16210:28;16190:18;;;16183:56;16256:18;;51563:147:0;15930:350:1;51563:147:0;51817:4;51768:28;11005:18;;;;;;;;;;;51875;;51851:42;;;;;;;51924:35;;-1:-1:-1;51948:11:0;;;;;;;51924:35;:61;;;;-1:-1:-1;51977:8:0;;-1:-1:-1;;;51977:8:0;;;;51976:9;51924:61;:110;;;;-1:-1:-1;;;;;;52003:31:0;;;;;;:25;:31;;;;;;;;52002:32;51924:110;:153;;;;-1:-1:-1;;;;;;52052:25:0;;;;;;:19;:25;;;;;;;;52051:26;51924:153;:194;;;;-1:-1:-1;;;;;;52095:23:0;;;;;;:19;:23;;;;;;;;52094:24;51924:194;51906:326;;;52145:8;:15;;-1:-1:-1;;;;52145:15:0;-1:-1:-1;;;52145:15:0;;;52177:10;:8;:10::i;:::-;52204:8;:16;;-1:-1:-1;;;;52204:16:0;;;51906:326;52260:8;;-1:-1:-1;;;;;52370:25:0;;52244:12;52370:25;;;:19;:25;;;;;;52260:8;-1:-1:-1;;;52260:8:0;;;;;52259:9;;52370:25;;:52;;-1:-1:-1;;;;;;52399:23:0;;;;;;:19;:23;;;;;;;;52370:52;52366:100;;;-1:-1:-1;52449:5:0;52366:100;52478:12;52583:7;52579:833;;;-1:-1:-1;;;;;52635:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;52684:1;52668:13;;:17;52635:50;52631:632;;;52713:35;52743:4;52713:25;52724:13;;52713:6;:10;;:25;;;;:::i;:::-;:29;;:35::i;:::-;52706:42;;52817:13;;52797:16;;52790:4;:23;;;;:::i;:::-;52789:41;;;;:::i;:::-;52767:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;52899:13:0;;52879:16;;52872:23;;:4;:23;:::i;:::-;52871:41;;;;:::i;:::-;52849:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;52631:632:0;;-1:-1:-1;52631:632:0;;-1:-1:-1;;;;;52974:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;53024:1;53009:12;;:16;52974:51;52970:293;;;53053:34;53082:4;53053:24;53064:12;;53053:6;:10;;:24;;;;:::i;:34::-;53046:41;;53155:12;;53136:15;;53129:4;:22;;;;:::i;:::-;53128:39;;;;:::i;:::-;53106:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;53235:12:0;;53216:15;;53209:22;;:4;:22;:::i;:::-;53208:39;;;;:::i;:::-;53186:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;52970:293:0;53283:8;;53279:91;;53312:42;53328:4;53342;53349;53312:15;:42::i;:::-;53386:14;53396:4;53386:14;;:::i;:::-;;;52579:833;53424:33;53440:4;53446:2;53450:6;53424:15;:33::i;:::-;48263:5202;;;;48150:5315;;;:::o;3590:191::-;3683:6;;;-1:-1:-1;;;;;3700:17:0;;;-1:-1:-1;;;;;;3700:17:0;;;;;;;3733:40;;3683:6;;;3700:17;3683:6;;3733:40;;3664:16;;3733:40;3653:128;3590:191;:::o;45292:163::-;45347:12;;:16;45343:105;;45401:12;;45388:9;:25;;45380:56;;;;-1:-1:-1;;;45380:56:0;;17050:2:1;45380:56:0;;;17032:21:1;17089:2;17069:18;;;17062:30;-1:-1:-1;;;17108:18:1;;;17101:48;17166:18;;45380:56:0;16848:342:1;47165:189:0;-1:-1:-1;;;;;47249:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;47249:39:0;;;;;;;;;;47306:40;;47249:39;;:31;47306:40;;;47165:189;;:::o;15329:877::-;-1:-1:-1;;;;;15460:18:0;;15452:68;;;;-1:-1:-1;;;15452:68:0;;17397:2:1;15452:68:0;;;17379:21:1;17436:2;17416:18;;;17409:30;17475:34;17455:18;;;17448:62;-1:-1:-1;;;17526:18:1;;;17519:35;17571:19;;15452:68:0;17195:401:1;15452:68:0;-1:-1:-1;;;;;15539:16:0;;15531:64;;;;-1:-1:-1;;;15531:64:0;;17803:2:1;15531:64:0;;;17785:21:1;17842:2;17822:18;;;17815:30;17881:34;17861:18;;;17854:62;-1:-1:-1;;;17932:18:1;;;17925:33;17975:19;;15531:64:0;17601:399:1;15531:64:0;-1:-1:-1;;;;;15681:15:0;;15659:19;15681:15;;;;;;;;;;;15729:21;;;;15707:109;;;;-1:-1:-1;;;15707:109:0;;18207:2:1;15707:109:0;;;18189:21:1;18246:2;18226:18;;;18219:30;18285:34;18265:18;;;18258:62;-1:-1:-1;;;18336:18:1;;;18329:36;18382:19;;15707:109:0;18005:402:1;15707:109:0;-1:-1:-1;;;;;15852:15:0;;;:9;:15;;;;;;;;;;;15870:20;;;15852:38;;16070:13;;;;;;;;;;:23;;;;;;16122:26;;2708:25:1;;;16070:13:0;;16122:26;;2681:18:1;16122:26:0;;;;;;;16161:37;48150:5315;54601:1523;54685:4;54641:23;11005:18;;;;;;;;;;;54641:50;;54702:25;54751:18;;54730;;:39;;;;:::i;:::-;54702:67;-1:-1:-1;54780:12:0;54809:20;;;:46;;-1:-1:-1;54833:22:0;;54809:46;54805:85;;;54872:7;;;54601:1523::o;54805:85::-;54924:18;;:23;;54945:2;54924:23;:::i;:::-;54906:15;:41;54902:115;;;54982:18;;:23;;55003:2;54982:23;:::i;:::-;54964:41;;54902:115;55078:23;55191:1;55158:17;55123:18;;55105:15;:36;;;;:::i;:::-;55104:71;;;;:::i;:::-;:88;;;;:::i;:::-;55078:114;-1:-1:-1;55203:26:0;55232:36;:15;55078:114;55232:19;:36::i;:::-;55203:65;-1:-1:-1;55309:21:0;55343:36;55203:65;55343:16;:36::i;:::-;55392:18;55413:44;:21;55439:17;55413:25;:44::i;:::-;55392:65;;55470:23;55496:81;55549:17;55496:34;55511:18;;55496:10;:14;;:34;;;;:::i;:81::-;55470:107;-1:-1:-1;55590:23:0;55616:28;55470:107;55616:10;:28;:::i;:::-;55678:1;55657:18;:22;;;55690:18;:22;55590:54;-1:-1:-1;55729:19:0;;;;;:42;;;55770:1;55752:15;:19;55729:42;55725:278;;;55788:46;55801:15;55818;55788:12;:46::i;:::-;55958:18;;55854:137;;;18614:25:1;;;18670:2;18655:18;;18648:34;;;18698:18;;;18691:34;;;;55854:137:0;;;;;;18602:2:1;55854:137:0;;;55725:278;56037:15;;56029:87;;-1:-1:-1;;;;;56037:15:0;;;;56080:21;;56029:87;;;;56080:21;56037:15;56029:87;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;54601:1523:0:o;24835:98::-;24893:7;24920:5;24924:1;24920;:5;:::i;:::-;24913:12;24835:98;-1:-1:-1;;;24835:98:0:o;25234:::-;25292:7;25319:5;25323:1;25319;:5;:::i;24478:98::-;24536:7;24563:5;24567:1;24563;:5;:::i;53473:590::-;53624:16;;;53638:1;53624:16;;;;;;;;53600:21;;53624:16;;;;;;;;;;-1:-1:-1;53624:16:0;53600:40;;53669:4;53651;53656:1;53651:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;53651:23:0;;;-1:-1:-1;;;;;53651:23:0;;;;;53695:15;-1:-1:-1;;;;;53695:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53685:4;53690:1;53685:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;53685:32:0;;;-1:-1:-1;;;;;53685:32:0;;;;;53730:62;53747:4;53762:15;53780:11;53730:8;:62::i;:::-;53831:224;;-1:-1:-1;;;53831:224:0;;-1:-1:-1;;;;;53831:15:0;:66;;;;:224;;53912:11;;53938:1;;53982:4;;54009;;54029:15;;53831:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53529:534;53473:590;:::o;54071:522::-;54220:62;54237:4;54252:15;54270:11;54220:8;:62::i;:::-;54529:15;;54325:260;;-1:-1:-1;;;54325:260:0;;54397:4;54325:260;;;20450:34:1;20500:18;;;20493:34;;;54443:1:0;20543:18:1;;;20536:34;;;20586:18;;;20579:34;-1:-1:-1;;;;;54529:15:0;;;20629:19:1;;;20622:44;54559:15:0;20682:19:1;;;20675:35;54325:15:0;:31;;;;;;54364:9;;20384:19:1;;54325:260:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;54071:522;;:::o;14:248:1:-;82:6;90;143:2;131:9;122:7;118:23;114:32;111:52;;;159:1;156;149:12;111:52;-1:-1:-1;;182:23:1;;;252:2;237:18;;;224:32;;-1:-1:-1;14:248:1:o;267:548::-;379:4;408:2;437;426:9;419:21;469:6;463:13;512:6;507:2;496:9;492:18;485:34;537:1;547:140;561:6;558:1;555:13;547:140;;;656:14;;;652:23;;646:30;622:17;;;641:2;618:26;611:66;576:10;;547:140;;;551:3;736:1;731:2;722:6;711:9;707:22;703:31;696:42;806:2;799;795:7;790:2;782:6;778:15;774:29;763:9;759:45;755:54;747:62;;;;267:548;;;;:::o;820:131::-;-1:-1:-1;;;;;895:31:1;;885:42;;875:70;;941:1;938;931:12;956:315;1024:6;1032;1085:2;1073:9;1064:7;1060:23;1056:32;1053:52;;;1101:1;1098;1091:12;1053:52;1140:9;1127:23;1159:31;1184:5;1159:31;:::i;:::-;1209:5;1261:2;1246:18;;;;1233:32;;-1:-1:-1;;;956:315:1:o;1468:160::-;1533:20;;1589:13;;1582:21;1572:32;;1562:60;;1618:1;1615;1608:12;1633:689;1725:6;1733;1741;1794:2;1782:9;1773:7;1769:23;1765:32;1762:52;;;1810:1;1807;1800:12;1762:52;1850:9;1837:23;1879:18;1920:2;1912:6;1909:14;1906:34;;;1936:1;1933;1926:12;1906:34;1974:6;1963:9;1959:22;1949:32;;2019:7;2012:4;2008:2;2004:13;2000:27;1990:55;;2041:1;2038;2031:12;1990:55;2081:2;2068:16;2107:2;2099:6;2096:14;2093:34;;;2123:1;2120;2113:12;2093:34;2178:7;2171:4;2161:6;2158:1;2154:14;2150:2;2146:23;2142:34;2139:47;2136:67;;;2199:1;2196;2189:12;2136:67;2230:4;2222:13;;;;-1:-1:-1;2254:6:1;-1:-1:-1;2279:37:1;;2295:20;;;-1:-1:-1;2279:37:1;:::i;:::-;2269:47;;1633:689;;;;;:::o;2744:180::-;2803:6;2856:2;2844:9;2835:7;2831:23;2827:32;2824:52;;;2872:1;2869;2862:12;2824:52;-1:-1:-1;2895:23:1;;2744:180;-1:-1:-1;2744:180:1:o;2929:456::-;3006:6;3014;3022;3075:2;3063:9;3054:7;3050:23;3046:32;3043:52;;;3091:1;3088;3081:12;3043:52;3130:9;3117:23;3149:31;3174:5;3149:31;:::i;:::-;3199:5;-1:-1:-1;3256:2:1;3241:18;;3228:32;3269:33;3228:32;3269:33;:::i;:::-;2929:456;;3321:7;;-1:-1:-1;;;3375:2:1;3360:18;;;;3347:32;;2929:456::o;3787:247::-;3846:6;3899:2;3887:9;3878:7;3874:23;3870:32;3867:52;;;3915:1;3912;3905:12;3867:52;3954:9;3941:23;3973:31;3998:5;3973:31;:::i;4039:315::-;4104:6;4112;4165:2;4153:9;4144:7;4140:23;4136:32;4133:52;;;4181:1;4178;4171:12;4133:52;4220:9;4207:23;4239:31;4264:5;4239:31;:::i;:::-;4289:5;-1:-1:-1;4313:35:1;4344:2;4329:18;;4313:35;:::i;:::-;4303:45;;4039:315;;;;;:::o;4359:180::-;4415:6;4468:2;4456:9;4447:7;4443:23;4439:32;4436:52;;;4484:1;4481;4474:12;4436:52;4507:26;4523:9;4507:26;:::i;4544:388::-;4612:6;4620;4673:2;4661:9;4652:7;4648:23;4644:32;4641:52;;;4689:1;4686;4679:12;4641:52;4728:9;4715:23;4747:31;4772:5;4747:31;:::i;:::-;4797:5;-1:-1:-1;4854:2:1;4839:18;;4826:32;4867:33;4826:32;4867:33;:::i;:::-;4919:7;4909:17;;;4544:388;;;;;:::o;4937:127::-;4998:10;4993:3;4989:20;4986:1;4979:31;5029:4;5026:1;5019:15;5053:4;5050:1;5043:15;5069:125;5134:9;;;5155:10;;;5152:36;;;5168:18;;:::i;5553:380::-;5632:1;5628:12;;;;5675;;;5696:61;;5750:4;5742:6;5738:17;5728:27;;5696:61;5803:2;5795:6;5792:14;5772:18;5769:38;5766:161;;5849:10;5844:3;5840:20;5837:1;5830:31;5884:4;5881:1;5874:15;5912:4;5909:1;5902:15;5766:161;;5553:380;;;:::o;5938:127::-;5999:10;5994:3;5990:20;5987:1;5980:31;6030:4;6027:1;6020:15;6054:4;6051:1;6044:15;6070:135;6109:3;6130:17;;;6127:43;;6150:18;;:::i;:::-;-1:-1:-1;6197:1:1;6186:13;;6070:135::o;6210:168::-;6283:9;;;6314;;6331:15;;;6325:22;;6311:37;6301:71;;6352:18;;:::i;6383:217::-;6423:1;6449;6439:132;;6493:10;6488:3;6484:20;6481:1;6474:31;6528:4;6525:1;6518:15;6556:4;6553:1;6546:15;6439:132;-1:-1:-1;6585:9:1;;6383:217::o;13908:343::-;14110:2;14092:21;;;14149:2;14129:18;;;14122:30;-1:-1:-1;;;14183:2:1;14168:18;;14161:49;14242:2;14227:18;;13908:343::o;16715:128::-;16782:9;;;16803:11;;;16800:37;;;16817:18;;:::i;18868:251::-;18938:6;18991:2;18979:9;18970:7;18966:23;18962:32;18959:52;;;19007:1;19004;18997:12;18959:52;19039:9;19033:16;19058:31;19083:5;19058:31;:::i;19124:980::-;19386:4;19434:3;19423:9;19419:19;19465:6;19454:9;19447:25;19491:2;19529:6;19524:2;19513:9;19509:18;19502:34;19572:3;19567:2;19556:9;19552:18;19545:31;19596:6;19631;19625:13;19662:6;19654;19647:22;19700:3;19689:9;19685:19;19678:26;;19739:2;19731:6;19727:15;19713:29;;19760:1;19770:195;19784:6;19781:1;19778:13;19770:195;;;19849:13;;-1:-1:-1;;;;;19845:39:1;19833:52;;19940:15;;;;19905:12;;;;19881:1;19799:9;19770:195;;;-1:-1:-1;;;;;;;20021:32:1;;;;20016:2;20001:18;;19994:60;-1:-1:-1;;;20085:3:1;20070:19;20063:35;19982:3;19124:980;-1:-1:-1;;;19124:980:1:o;20721:306::-;20809:6;20817;20825;20878:2;20866:9;20857:7;20853:23;20849:32;20846:52;;;20894:1;20891;20884:12;20846:52;20923:9;20917:16;20907:26;;20973:2;20962:9;20958:18;20952:25;20942:35;;21017:2;21006:9;21002:18;20996:25;20986:35;;20721:306;;;;;:::o

Swarm Source

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