ETH Price: $2,525.00 (-1.80%)

Token

Meme Fund (MF)
 

Overview

Max Total Supply

100,000,000,000 MF

Holders

63

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Filtered by Token Holder
omnitec.eth
Balance
11,233,840.916577099 MF

Value
$0.00
0xaf7874e77799f3d8af83cbfc69664d7a4d078c8e
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:
Token

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-11-02
*/

//SPDX-License-Identifier: Unlicensed
pragma solidity >=0.7.0 <0.9.0;
abstract contract Context {
    function _msgSender() internal view returns (address payable) {
        return payable(msg.sender);
    }

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

TG: https://t.me/MemeFundMF

X: https://x.com/MemeFundMF

Web: https://MemeFundCoin.com/

*/

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

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

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

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

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

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

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

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function decimals() external view returns (uint8);
    function symbol() external view returns (string memory);
    function name() external view returns (string memory);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address _owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

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

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

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

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

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

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

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

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

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

    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;

    function initialize(address, address) external;
}

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

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

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

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

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

contract Token is ERC20 {
    using Address for address;

    mapping(address => uint256) transferDelay;
    mapping(address => bool) transferDelayExempt;
    mapping(address => bool) feeExempt;
    mapping(address => bool) maxWalletExempt;
    mapping(address => bool) lpHolder;
    mapping(address => bool) lpPairs;

    address public owner;
    address public liquidityWallet;
    address public marketingWallet;
    address public pair;

    uint256 _totalSupply = 100_000_000_000 * (10**9); // total supply amount
    uint256 tokensForLiquidiy;
    uint256 tokensToSwap;
    uint256 lastSwap;
    uint256 maxTxAmount;
    uint256 maxWalletAmount;
    uint256 totalFee;
    uint256 feeAmount;
    uint8 swapDelay;
    uint8 transferDelayTime;
    uint feeDenominator = 1000;

    bool swapEnabled;
    bool inSwap;
    bool feesEnabled;
    bool autoLiquifyEnabled;
    bool tradingOpen;
    bool txLimits;
    bool transferDelayEnabled;

    struct IFees {
        uint16 liquidityFee;
        uint16 treasuryFee;
        uint16 totalFee;
    }   

    IFees public BuyFees;
    IFees public MaxFees;
    IFees public SellFees;
    IFees public TransferFees;
    IUniswapV2Router02 public router;
    modifier onlyOwner() {
        require(isOwner(msg.sender), "You are not the owner");
        _;
    }

    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    constructor(string memory name, string memory symbol, address _liquidityWallet, address _marketingWallet) ERC20(name, symbol) {
        owner = _msgSender();
        setLiquidityWallet(_liquidityWallet);
        setMarketingWallet(_marketingWallet);
        router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pair = IUniswapV2Factory(router.factory()).createPair(router.WETH(), address(this));
        lpHolder[_msgSender()] = true;
        lpPairs[pair] = true;

        _approve(address(this), address(router), type(uint256).max);
        _approve(_msgSender(), address(router), type(uint256).max);

        maxWalletExempt[_msgSender()] = true;
        maxWalletExempt[address(this)] = true;
        maxWalletExempt[pair] = true;

        feeExempt[address(this)] = true;
        feeExempt[_msgSender()] = true;

        transferDelayExempt[_msgSender()] = true;
        transferDelayExempt[pair] = true;
        transferDelayExempt[address(this)] = true;
        transferDelayExempt[address(router)] = true;

        transferDelayEnabled = true;
        transferDelayTime = 30;

        txLimits = true;

        maxTxAmount = (_totalSupply * 1) / (100);
        maxWalletAmount = (_totalSupply * 2) / 100;

        BuyFees = IFees({
            liquidityFee: 30,
            treasuryFee: 120,
            totalFee: 150 // 15%
        });
        SellFees = IFees({
            liquidityFee: 30,
            treasuryFee: 120,
            totalFee: 150 // 15%
        });    
        MaxFees.totalFee = 150; // 20% roundtrip

        swapEnabled = true;
        autoLiquifyEnabled = true;
        swapDelay = 5;
        tokensToSwap = (_totalSupply * (10)) / (10000);
        feesEnabled = true;

        _mint(_msgSender(), _totalSupply);
    }
    
    receive() external payable {}
 
    function renounceOwnership(bool keepLimits) public onlyOwner {
        emit OwnershipRenounced();
        setExemptions(owner, false, false, false, false);
        limitsInEffect(keepLimits);
        owner = address(0);
    }

    function transferOwnership(address newOwner) public onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address, use renounceOwnership Function");
        emit OwnershipTransferred(owner, newOwner);

        if(balanceOf(owner) > 0) _basicTransfer(owner, newOwner, balanceOf(owner));
        setExemptions(owner, false, false, false, false);
        setExemptions(newOwner, true, true, true, false);

        owner = newOwner;
    }

    function clearStuckBalance(uint256 amountPercentage) external onlyOwner {
        require(amountPercentage <= 100);
        uint256 amountEth = address(this).balance;
        payable(marketingWallet).transfer(
            (amountEth * amountPercentage) / 100
        );
    }

    function clearStuckTokens(address _token, address _to) external onlyOwner returns (bool _sent) {
        require(_token != address(0) && _token != address(this));
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        _sent = IERC20(_token).transfer(_to, _contractBalance);
    }

    function setTransactionLimits(uint256 percent, uint256 divisor, bool txOrWallet) external onlyOwner() {
        if(txOrWallet){
            require(percent >= 1 && divisor <= 1000, "Max Transaction must be set above .1%");
            maxTxAmount = (_totalSupply * percent) / (divisor);
        } else {
            require(percent >= 1 && divisor <= 100, "Max Wallet must be set above 1%");
            maxWalletAmount = (_totalSupply * percent) / divisor;
        }
    }

    function setExemptions(address holder, bool lpHolders, bool _feeExempt, bool _maxWalletExempt, bool _transferDelayExempt) public onlyOwner(){
        maxWalletExempt[holder] = _maxWalletExempt;
        transferDelayExempt[holder] = _transferDelayExempt;
        feeExempt[holder] = _feeExempt;
        lpHolder[holder] = lpHolders;
    }

    function limitsInEffect(bool limit) public onlyOwner() {
        txLimits = limit;
    }

    function setPair(address pairing, bool lpPair) external onlyOwner {
        lpPairs[pairing] = lpPair;
    }

    function setTransferDelay(bool transferDelayOn, uint8 _transferDelay) external onlyOwner() {
        require(_transferDelay <= 60, "transfer delay time must be below 60 seconds");
        transferDelayTime = _transferDelay;
        transferDelayEnabled = transferDelayOn;
    }

    function setBuyFees(uint16 _liquidityFee, uint16 _treasuryFee) external onlyOwner {
        require(_liquidityFee + _treasuryFee <= MaxFees.totalFee);
        BuyFees = IFees({
            liquidityFee: _liquidityFee,
            treasuryFee: _treasuryFee,
            totalFee: _liquidityFee + _treasuryFee
        });
    }
    
    function setTransferFees(uint16 _liquidityFee, uint16 _treasuryFee) external onlyOwner {
        require(_liquidityFee + _treasuryFee <= MaxFees.totalFee);
        TransferFees = IFees({
            liquidityFee: _liquidityFee,
            treasuryFee: _treasuryFee,
            totalFee: _liquidityFee + _treasuryFee
        });
    }

    function setSellFees(uint16 _liquidityFee, uint16 _treasuryFee) external onlyOwner {
        require(_liquidityFee + _treasuryFee <= MaxFees.totalFee);
        SellFees = IFees({
            liquidityFee: _liquidityFee,
            treasuryFee: _treasuryFee,
            totalFee: _liquidityFee + _treasuryFee
        });
    } 

    function setMaxFees(uint16 _totalFee) external onlyOwner {
        require(_totalFee <= MaxFees.totalFee);
        MaxFees.totalFee = _totalFee;
    }

    function setFeesEnabled(bool enabled) public onlyOwner {
        feesEnabled = enabled;
    }

    function setLiquidityWallet(address _liquidityWallet) public onlyOwner {
        liquidityWallet = _liquidityWallet;
    }

    function setMarketingWallet(address _marketingWallet) public onlyOwner {
        marketingWallet = _marketingWallet;
    }

    function setSwapBackSettings(bool _enabled, bool enabled, uint8 interval, uint256 _amount) public onlyOwner{
        swapEnabled = _enabled;
        swapDelay = interval;
        autoLiquifyEnabled = enabled;
        tokensToSwap = (_totalSupply * (_amount)) / (10000);
    }

    function limits(address from, address to) private view returns (bool) {
        return !isOwner(from)
            && !isOwner(to)
            && tx.origin != owner
            && !lpHolder[from]
            && !lpHolder[to]
            && to != address(0xdead)
            && from != address(this);
    }

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

    function massAirDropTokens(address[] memory addresses, uint256[] memory amounts) external {
        require(addresses.length == amounts.length, "Lengths do not match.");
        for (uint8 i = 0; i < addresses.length; i++) {
            require(balanceOf(_msgSender()) >= amounts[i]);
            _basicTransfer(_msgSender(), addresses[i], amounts[i]*10**9);
        }
    }
    
    function _transfer(address from, address to, uint256 amount ) internal override {
        if(!tradingOpen) {
            require(isOwner(from));                
            if(to == pair) {
                tradingOpen = true;
                emit Launched();
            }
        }
        if(limits(from, to) && tradingOpen && txLimits){
            if(!maxWalletExempt[to]){
                require(amount <= maxTxAmount && balanceOf(to) + amount <= maxWalletAmount);
            } else if(lpPairs[to]){
                require(amount <= maxTxAmount);
            }
            if (lpPairs[from] && !transferDelayExempt[to] && transferDelayEnabled) {
                require(transferDelay[to] < block.timestamp);
                transferDelay[to] = block.timestamp + (transferDelayTime);
            } else if (!transferDelayExempt[from] && transferDelayEnabled){
                require(transferDelay[from] <= block.timestamp);
                transferDelay[from] = block.timestamp + (transferDelayTime);
            } 
        }
        if (!lpPairs[_msgSender()] && !inSwap && swapEnabled && block.timestamp >= lastSwap + swapDelay && _balances[address(this)] >= tokensToSwap) {
            lastSwap = block.timestamp;
            if (tokensForLiquidiy >= tokensToSwap && autoLiquifyEnabled) {
                tokensForLiquidiy -= tokensToSwap;
                uint256 amountToLiquify = tokensToSwap / 2;

                address[] memory path = new address[](2);
                path[0] = address(this);
                path[1] = router.WETH();

                uint256 balanceBefore = address(this).balance;

                router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                    amountToLiquify,
                    0,
                    path,
                    address(this),
                    block.timestamp
                );

                uint256 amountEth = address(this).balance - (balanceBefore);

                router.addLiquidityETH{value: amountEth}(
                    address(this),
                    amountToLiquify,
                    0,
                    0,
                    liquidityWallet,
                    block.timestamp
                );
            } else {
                address[] memory path = new address[](2);
                path[0] = address(this);
                path[1] = router.WETH();

                router.swapExactTokensForETHSupportingFeeOnTransferTokens(
                    tokensToSwap,
                    0,
                    path,
                    address(this),
                    block.timestamp
                );
                uint256 balance = address(this).balance;
                payable(marketingWallet).transfer(balance);
            }
        }

        uint256 amountReceived = feesEnabled && !feeExempt[from] ? takeFee(from, to, amount) : amount;
        _basicTransfer(from, to, amountReceived);
    }

    function _basicTransfer(address from, address to, uint256 amount) internal {
        super._transfer(from, to, amount);
    }

    function takeFee(address sender, address receiver, uint256 amount) internal returns (uint256) {
        if (feeExempt[receiver]) {
            return amount;
        }
        if(lpPairs[receiver]) {            
            totalFee = SellFees.totalFee;         
        } else if(lpPairs[sender]){
            totalFee = BuyFees.totalFee;
        } else {
            totalFee = TransferFees.totalFee;
        }

        feeAmount = (amount * totalFee) / feeDenominator;
        if (autoLiquifyEnabled) {
            tokensForLiquidiy += (feeAmount * (BuyFees.liquidityFee + SellFees.liquidityFee)) / ((BuyFees.totalFee + SellFees.totalFee) + (BuyFees.liquidityFee + SellFees.liquidityFee));
        }
        _basicTransfer(sender, address(this), feeAmount); 
        return amount - feeAmount;
    }

    function decimals() public view virtual override returns (uint8) {
        return 9;
    }

    function getTransactionLimits() external view returns(uint maxTransaction, uint maxWallet, bool transactionLimits){
        if(txLimits){
            maxTransaction = maxTxAmount / 10**9;
            maxWallet = maxWalletAmount / 10**9;
            transactionLimits = txLimits;
        } else {
            maxTransaction = totalSupply();
            maxWallet = totalSupply();
            transactionLimits = false;
        }
    }

    function isOwner(address account) public view returns (bool) {
        return account == owner;
    }

    event Launched();
    event OwnershipRenounced();
    event OwnershipTransferred(address oldOwner, address newOwner);
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"symbol","type":"string"},{"internalType":"address","name":"_liquidityWallet","type":"address"},{"internalType":"address","name":"_marketingWallet","type":"address"}],"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":[],"name":"Launched","type":"event"},{"anonymous":false,"inputs":[],"name":"OwnershipRenounced","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"BuyFees","outputs":[{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"totalFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MaxFees","outputs":[{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"totalFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SellFees","outputs":[{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"totalFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TransferFees","outputs":[{"internalType":"uint16","name":"liquidityFee","type":"uint16"},{"internalType":"uint16","name":"treasuryFee","type":"uint16"},{"internalType":"uint16","name":"totalFee","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountPercentage","type":"uint256"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"clearStuckTokens","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","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":"getTransactionLimits","outputs":[{"internalType":"uint256","name":"maxTransaction","type":"uint256"},{"internalType":"uint256","name":"maxWallet","type":"uint256"},{"internalType":"bool","name":"transactionLimits","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"limit","type":"bool"}],"name":"limitsInEffect","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"liquidityWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"massAirDropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"keepLimits","type":"bool"}],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_liquidityFee","type":"uint16"},{"internalType":"uint16","name":"_treasuryFee","type":"uint16"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"lpHolders","type":"bool"},{"internalType":"bool","name":"_feeExempt","type":"bool"},{"internalType":"bool","name":"_maxWalletExempt","type":"bool"},{"internalType":"bool","name":"_transferDelayExempt","type":"bool"}],"name":"setExemptions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_liquidityWallet","type":"address"}],"name":"setLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_totalFee","type":"uint16"}],"name":"setMaxFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pairing","type":"address"},{"internalType":"bool","name":"lpPair","type":"bool"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_liquidityFee","type":"uint16"},{"internalType":"uint16","name":"_treasuryFee","type":"uint16"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"bool","name":"enabled","type":"bool"},{"internalType":"uint8","name":"interval","type":"uint8"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"},{"internalType":"uint256","name":"divisor","type":"uint256"},{"internalType":"bool","name":"txOrWallet","type":"bool"}],"name":"setTransactionLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"transferDelayOn","type":"bool"},{"internalType":"uint8","name":"_transferDelay","type":"uint8"}],"name":"setTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_liquidityFee","type":"uint16"},{"internalType":"uint16","name":"_treasuryFee","type":"uint16"}],"name":"setTransferFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"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"},{"stateMutability":"payable","type":"receive"}]

608060405268056bc75e2d63100000600f556103e86018553480156200002457600080fd5b506040516200376c3803806200376c83398101604081905262000047916200099c565b83518490849062000060906003906020850190620007fd565b50805162000076906004906020840190620007fd565b50620000829150503390565b600b80546001600160a01b0319166001600160a01b0392909216919091179055620000ad8262000512565b620000b88162000594565b601e80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d9081179091556040805163c45a015560e01b8152905163c45a015591600480820192602092909190829003018186803b1580156200011857600080fd5b505afa1580156200012d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000153919062000977565b6001600160a01b031663c9c65396601e60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620001b057600080fd5b505afa158015620001c5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001eb919062000977565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604401602060405180830381600087803b1580156200023357600080fd5b505af115801562000248573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200026e919062000977565b600e80546001600160a01b0319166001600160a01b03929092169190911790556001600960006200029c3390565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff19968716179055600e5482168152600a90935291208054909216600117909155601e54620002f79130911660001962000612565b6200031133601e546001600160a01b031660001962000612565b3360008181526008602090815260408083208054600160ff199182168117909255308086528386208054831684179055600e80546001600160a01b039081168852858820805485168617905582885260078752858820805485168617905597875284872080548416851790556006909552838620805483168417905593548616855282852080548216831790559284528184208054841682179055601e549094168352909120805490911682179055601980546017805461ff001916611e0017905561ffff60281b19166601010000000000179055600f54606491620003f8919062000a69565b62000404919062000a46565b601355600f546064906200041a90600262000a69565b62000426919062000a46565b6014556040805160608082018352601e808352607860208085018290526096948601859052601a805464960078001e65ffffffffffff19918216811790925587519586018852938552908401919091529190930191909152601c8054909216179055601b805461ffff60201b191664960000000017905560198054630100000163ff0000ff199091161790556017805460ff19166005179055600f5461271090620004d390600a62000a69565b620004df919062000a46565b6011556019805462ff000019166201000017905562000508620004ff3390565b600f546200073a565b5050505062000af4565b600b546001600160a01b03163314620005725760405162461bcd60e51b815260206004820152601560248201527f596f7520617265206e6f7420746865206f776e6572000000000000000000000060448201526064015b60405180910390fd5b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b03163314620005f05760405162461bcd60e51b815260206004820152601560248201527f596f7520617265206e6f7420746865206f776e65720000000000000000000000604482015260640162000569565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b038316620006765760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000569565b6001600160a01b038216620006d95760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000569565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038216620007925760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000569565b8060026000828254620007a6919062000a2b565b90915550506001600160a01b038216600081815260208181526040808320805486019055518481527fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b8280546200080b9062000a8b565b90600052602060002090601f0160209004810192826200082f57600085556200087a565b82601f106200084a57805160ff19168380011785556200087a565b828001600101855582156200087a579182015b828111156200087a5782518255916020019190600101906200085d565b50620008889291506200088c565b5090565b5b808211156200088857600081556001016200088d565b80516001600160a01b0381168114620008bb57600080fd5b919050565b600082601f830112620008d257600080fd5b81516001600160401b0380821115620008ef57620008ef62000ade565b604051601f8301601f19908116603f011681019082821181831017156200091a576200091a62000ade565b816040528381526020925086838588010111156200093757600080fd5b600091505b838210156200095b57858201830151818301840152908201906200093c565b838211156200096d5760008385830101525b9695505050505050565b6000602082840312156200098a57600080fd5b6200099582620008a3565b9392505050565b60008060008060808587031215620009b357600080fd5b84516001600160401b0380821115620009cb57600080fd5b620009d988838901620008c0565b95506020870151915080821115620009f057600080fd5b50620009ff87828801620008c0565b93505062000a1060408601620008a3565b915062000a2060608601620008a3565b905092959194509250565b6000821982111562000a415762000a4162000ac8565b500190565b60008262000a6457634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161562000a865762000a8662000ac8565b500290565b600181811c9082168062000aa057607f821691505b6020821081141562000ac257634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b612c688062000b046000396000f3fe6080604052600436106102545760003560e01c806375f0a87411610139578063a9059cbb116100b6578063dc7703671161007a578063dc7703671461078a578063dd62ed3e146107ba578063f2421d2c146107da578063f2fde38b1461080a578063f887ea401461082a578063ff787dc61461084a57600080fd5b8063a9059cbb146106ea578063ab6677161461070a578063b7b69ec51461072a578063c40fedc61461074a578063d46980161461076a57600080fd5b806395d89b41116100fd57806395d89b41146106555780639ab005f91461066a578063a457c2d71461068a578063a8aa1b31146106aa578063a901dd92146106ca57600080fd5b806375f0a8741461059d5780637e926b4b146105d557806386a22eff146105f55780638c9dcf9e146106155780638da5cb5b1461063557600080fd5b8063313ce567116101d257806342966c681161019657806342966c68146104aa57806355fb28e4146104ca5780635d098b38146104ea5780636ebcf6071461050a57806370a08231146105375780637303df9a1461056d57600080fd5b8063313ce567146103fc57806333d25d1314610418578063395093511461044a5780633c310f5e1461046a578063403e82631461048a57600080fd5b80631da1db5e116102195780631da1db5e1461034d57806323b872dd1461036d578063296f0a0c1461038d5780632ecd7e8f146103ad5780632f54bf6e146103cd57600080fd5b8062167e931461026057806306fdde03146102ba578063095ea7b3146102dc57806318160ddd1461030c5780631d1e81e71461032b57600080fd5b3661025b57005b600080fd5b34801561026c57600080fd5b50601d546102909061ffff80821691620100008104821691600160201b9091041683565b6040805161ffff948516815292841660208401529216918101919091526060015b60405180910390f35b3480156102c657600080fd5b506102cf61086a565b6040516102b19190612992565b3480156102e857600080fd5b506102fc6102f7366004612701565b6108fc565b60405190151581526020016102b1565b34801561031857600080fd5b506002545b6040519081526020016102b1565b34801561033757600080fd5b5061034b61034636600461287f565b610914565b005b34801561035957600080fd5b5061034b6103683660046128f9565b6109eb565b34801561037957600080fd5b506102fc610388366004612621565b610a77565b34801561039957600080fd5b5061034b6103a83660046125ae565b610a9d565b3480156103b957600080fd5b5061034b6103c83660046128cf565b610ae9565b3480156103d957600080fd5b506102fc6103e83660046125ae565b600b546001600160a01b0391821691161490565b34801561040857600080fd5b50604051600981526020016102b1565b34801561042457600080fd5b5061042d610bb0565b6040805193845260208401929092521515908201526060016102b1565b34801561045657600080fd5b506102fc610465366004612701565b610c17565b34801561047657600080fd5b5061034b6104853660046128cf565b610c39565b34801561049657600080fd5b5061034b6104a536600461292b565b610d00565b3480156104b657600080fd5b5061034b6104c53660046128f9565b610e3d565b3480156104d657600080fd5b5061034b6104e5366004612690565b610e4a565b3480156104f657600080fd5b5061034b6105053660046125ae565b610ee0565b34801561051657600080fd5b5061031d6105253660046125ae565b60006020819052908152604090205481565b34801561054357600080fd5b5061031d6105523660046125ae565b6001600160a01b031660009081526020819052604090205490565b34801561057957600080fd5b50601b546102909061ffff80821691620100008104821691600160201b9091041683565b3480156105a957600080fd5b50600d546105bd906001600160a01b031681565b6040516001600160a01b0390911681526020016102b1565b3480156105e157600080fd5b5061034b6105f03660046127f6565b610f2c565b34801561060157600080fd5b5061034b610610366004612662565b610fb5565b34801561062157600080fd5b5061034b6106303660046127f6565b61100a565b34801561064157600080fd5b50600b546105bd906001600160a01b031681565b34801561066157600080fd5b506102cf611056565b34801561067657600080fd5b5061034b610685366004612830565b611065565b34801561069657600080fd5b506102fc6106a5366004612701565b6110e5565b3480156106b657600080fd5b50600e546105bd906001600160a01b031681565b3480156106d657600080fd5b5061034b6106e53660046127f6565b61116b565b3480156106f657600080fd5b506102fc610705366004612701565b6111b1565b34801561071657600080fd5b5061034b61072536600461272d565b6111bf565b34801561073657600080fd5b5061034b6107453660046128cf565b6112ad565b34801561075657600080fd5b506102fc6107653660046125e8565b611374565b34801561077657600080fd5b50600c546105bd906001600160a01b031681565b34801561079657600080fd5b50601a546102909061ffff80821691620100008104821691600160201b9091041683565b3480156107c657600080fd5b5061031d6107d53660046125e8565b6114d3565b3480156107e657600080fd5b50601c546102909061ffff80821691620100008104821691600160201b9091041683565b34801561081657600080fd5b5061034b6108253660046125ae565b6114fe565b34801561083657600080fd5b50601e546105bd906001600160a01b031681565b34801561085657600080fd5b5061034b6108653660046128b4565b61168d565b60606003805461087990612b72565b80601f01602080910402602001604051908101604052809291908181526020018280546108a590612b72565b80156108f25780601f106108c7576101008083540402835291602001916108f2565b820191906000526020600020905b8154815290600101906020018083116108d557829003601f168201915b5050505050905090565b60003361090a8185856116f8565b5060019392505050565b600b546001600160a01b031633146109475760405162461bcd60e51b815260040161093e906129e7565b60405180910390fd5b603c8160ff1611156109b05760405162461bcd60e51b815260206004820152602c60248201527f7472616e736665722064656c61792074696d65206d7573742062652062656c6f60448201526b77203630207365636f6e647360a01b606482015260840161093e565b6017805460ff9092166101000261ff001990921691909117905560198054911515600160301b0266ff00000000000019909216919091179055565b600b546001600160a01b03163314610a155760405162461bcd60e51b815260040161093e906129e7565b6064811115610a2357600080fd5b600d5447906001600160a01b03166108fc6064610a408585612b3c565b610a4a9190612b1a565b6040518115909202916000818181858888f19350505050158015610a72573d6000803e3d6000fd5b505050565b600033610a8585828561181c565b610a90858585611896565b60019150505b9392505050565b600b546001600160a01b03163314610ac75760405162461bcd60e51b815260040161093e906129e7565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b03163314610b135760405162461bcd60e51b815260040161093e906129e7565b601b54600160201b900461ffff16610b2b8284612adc565b61ffff161115610b3a57600080fd5b6040805160608101825261ffff808516825283166020820152908101610b608385612adc565b61ffff9081169091528151601a8054602085015160409095015192841663ffffffff199091161762010000948416949094029390931765ffff000000001916600160201b91909216021790555050565b6000806000601960059054906101000a900460ff1615610c0957633b9aca00601354610bdc9190612b1a565b9250633b9aca00601454610bf09190612b1a565b6019549394909365010000000000900460ff1692509050565b505060025491829150600090565b60003361090a818585610c2a83836114d3565b610c349190612b02565b6116f8565b600b546001600160a01b03163314610c635760405162461bcd60e51b815260040161093e906129e7565b601b54600160201b900461ffff16610c7b8284612adc565b61ffff161115610c8a57600080fd5b6040805160608101825261ffff808516825283166020820152908101610cb08385612adc565b61ffff9081169091528151601c8054602085015160409095015192841663ffffffff199091161762010000948416949094029390931765ffff000000001916600160201b91909216021790555050565b600b546001600160a01b03163314610d2a5760405162461bcd60e51b815260040161093e906129e7565b8015610dbe5760018310158015610d4357506103e88211155b610d9d5760405162461bcd60e51b815260206004820152602560248201527f4d6178205472616e73616374696f6e206d757374206265207365742061626f7660448201526465202e312560d81b606482015260840161093e565b8183600f54610dac9190612b3c565b610db69190612b1a565b601355505050565b60018310158015610dd0575060648211155b610e1c5760405162461bcd60e51b815260206004820152601f60248201527f4d61782057616c6c6574206d757374206265207365742061626f766520312500604482015260640161093e565b8183600f54610e2b9190612b3c565b610e359190612b1a565b601455505050565b610e473382611fea565b50565b600b546001600160a01b03163314610e745760405162461bcd60e51b815260040161093e906129e7565b6001600160a01b039094166000908152600860209081526040808320805494151560ff1995861617905560068252808320805497151597851697909717909655600781528582208054941515948416949094179093556009909252929020805491151591909216179055565b600b546001600160a01b03163314610f0a5760405162461bcd60e51b815260040161093e906129e7565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b03163314610f565760405162461bcd60e51b815260040161093e906129e7565b6040517fd1f66c3d2bc1993a86be5e3d33709d98f0442381befcedd29f578b9b2506b1ce90600090a1600b54610f99906001600160a01b03166000808080610e4a565b610fa28161100a565b50600b80546001600160a01b0319169055565b600b546001600160a01b03163314610fdf5760405162461bcd60e51b815260040161093e906129e7565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b600b546001600160a01b031633146110345760405162461bcd60e51b815260040161093e906129e7565b60198054911515650100000000000265ff000000000019909216919091179055565b60606004805461087990612b72565b600b546001600160a01b0316331461108f5760405162461bcd60e51b815260040161093e906129e7565b601980546017805460ff191660ff861617905563ff0000ff191685151563ff000000191617630100000085151502179055600f54612710906110d2908390612b3c565b6110dc9190612b1a565b60115550505050565b600033816110f382866114d3565b9050838110156111535760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161093e565b61116082868684036116f8565b506001949350505050565b600b546001600160a01b031633146111955760405162461bcd60e51b815260040161093e906129e7565b60198054911515620100000262ff000019909216919091179055565b60003361090a818585611896565b80518251146112085760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b604482015260640161093e565b60005b82518160ff161015610a7257818160ff168151811061122c5761122c612be3565b602002602001015161123e6105523390565b101561124957600080fd5b61129b33848360ff168151811061126257611262612be3565b6020026020010151848460ff168151811061127f5761127f612be3565b6020026020010151633b9aca006112969190612b3c565b61211c565b806112a581612bad565b91505061120b565b600b546001600160a01b031633146112d75760405162461bcd60e51b815260040161093e906129e7565b601b54600160201b900461ffff166112ef8284612adc565b61ffff1611156112fe57600080fd5b6040805160608101825261ffff8085168252831660208201529081016113248385612adc565b61ffff9081169091528151601d8054602085015160409095015192841663ffffffff199091161762010000948416949094029390931765ffff000000001916600160201b91909216021790555050565b600b546000906001600160a01b031633146113a15760405162461bcd60e51b815260040161093e906129e7565b6001600160a01b038316158015906113c257506001600160a01b0383163014155b6113cb57600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b15801561140d57600080fd5b505afa158015611421573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114459190612912565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b15801561149357600080fd5b505af11580156114a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114cb9190612813565b949350505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600b546001600160a01b031633146115285760405162461bcd60e51b815260040161093e906129e7565b6001600160a01b0381166115b35760405162461bcd60e51b815260206004820152604660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573732c207573652072656e6f756e63654f776e6572736869702046756064820152653731ba34b7b760d11b608482015260a40161093e565b600b54604080516001600160a01b03928316815291831660208301527f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0910160405180910390a1600b546001600160a01b03166000908152602081905260409020541561164157600b546001600160a01b03166000818152602081905260409020546116419190839061211c565b600b5461165b906001600160a01b03166000808080610e4a565b61166b8160018060016000610e4a565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b031633146116b75760405162461bcd60e51b815260040161093e906129e7565b601b5461ffff600160201b909104811690821611156116d557600080fd5b601b805461ffff909216600160201b0265ffff0000000019909216919091179055565b6001600160a01b03831661175a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161093e565b6001600160a01b0382166117bb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161093e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061182884846114d3565b9050600019811461189057818110156118835760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161093e565b61189084848484036116f8565b50505050565b601954600160201b900460ff1661191557600b546001600160a01b038481169116146118c157600080fd5b600e546001600160a01b0383811691161415611915576019805464ff000000001916600160201b1790556040517fba61a96074b3d636edeee92caddc86293c917d5b6818b7d3698bb52e02ec86c890600090a15b61191f8383612127565b80156119345750601954600160201b900460ff165b801561194b575060195465010000000000900460ff165b15611b28576001600160a01b03821660009081526008602052604090205460ff166119bb5760135481111580156119ad5750601454816119a0846001600160a01b031660009081526020819052604090205490565b6119aa9190612b02565b11155b6119b657600080fd5b6119eb565b6001600160a01b0382166000908152600a602052604090205460ff16156119eb576013548111156119eb57600080fd5b6001600160a01b0383166000908152600a602052604090205460ff168015611a2c57506001600160a01b03821660009081526006602052604090205460ff16155b8015611a415750601954600160301b900460ff165b15611a9d576001600160a01b0382166000908152600560205260409020544211611a6a57600080fd5b601754611a7f90610100900460ff1642612b02565b6001600160a01b038316600090815260056020526040902055611b28565b6001600160a01b03831660009081526006602052604090205460ff16158015611acf5750601954600160301b900460ff165b15611b28576001600160a01b038316600090815260056020526040902054421015611af957600080fd5b601754611b0e90610100900460ff1642612b02565b6001600160a01b0384166000908152600560205260409020555b336000908152600a602052604090205460ff16158015611b505750601954610100900460ff16155b8015611b5e575060195460ff165b8015611b7c5750601754601254611b789160ff1690612b02565b4210155b8015611b9957506011543060009081526020819052604090205410155b15611f94574260125560115460105410801590611bbf57506019546301000000900460ff165b15611e045760115460106000828254611bd89190612b5b565b9091555050601154600090611bef90600290612b1a565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611c2957611c29612be3565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611c7d57600080fd5b505afa158015611c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb591906125cb565b81600181518110611cc857611cc8612be3565b6001600160a01b039283166020918202929092010152601e5460405163791ac94760e01b81524792919091169063791ac94790611d12908690600090879030904290600401612a16565b600060405180830381600087803b158015611d2c57600080fd5b505af1158015611d40573d6000803e3d6000fd5b5050505060008147611d529190612b5b565b601e54600c5460405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a4820152929350169063f305d71990839060c4016060604051808303818588803b158015611dbf57600080fd5b505af1158015611dd3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611df89190612964565b50505050505050611f94565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e3957611e39612be3565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611e8d57600080fd5b505afa158015611ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec591906125cb565b81600181518110611ed857611ed8612be3565b6001600160a01b039283166020918202929092010152601e5460115460405163791ac94760e01b8152919092169163791ac94791611f229190600090869030904290600401612a16565b600060405180830381600087803b158015611f3c57600080fd5b505af1158015611f50573d6000803e3d6000fd5b5050600d546040514793506001600160a01b03909116915082156108fc029083906000818181858888f19350505050158015611f90573d6000803e3d6000fd5b5050505b60195460009062010000900460ff168015611fc857506001600160a01b03841660009081526007602052604090205460ff16155b611fd25781611fdd565b611fdd8484846121ef565b905061189084848361211c565b6001600160a01b03821661204a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161093e565b6001600160a01b038216600090815260208190526040902054818110156120be5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161093e565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b610a72838383612370565b600061214183600b546001600160a01b0391821691161490565b15801561215c5750600b546001600160a01b03838116911614155b80156121735750600b546001600160a01b03163214155b801561219857506001600160a01b03831660009081526009602052604090205460ff16155b80156121bd57506001600160a01b03821660009081526009602052604090205460ff16155b80156121d457506001600160a01b03821661dead14155b8015610a9657506001600160a01b0383163014159392505050565b6001600160a01b03821660009081526007602052604081205460ff1615612217575080610a96565b6001600160a01b0383166000908152600a602052604090205460ff161561224e57601c54600160201b900461ffff16601555612297565b6001600160a01b0384166000908152600a602052604090205460ff161561228557601a54600160201b900461ffff16601555612297565b601d54600160201b900461ffff166015555b6018546015546122a79084612b3c565b6122b19190612b1a565b6016556019546301000000900460ff161561235657601c54601a546122dd9161ffff9081169116612adc565b601c54601a546123009161ffff600160201b918290048116929190910416612adc565b61230a9190612adc565b601c54601a5461ffff928316926123249281169116612adc565b61ffff166016546123359190612b3c565b61233f9190612b1a565b601060008282546123509190612b02565b90915550505b612363843060165461211c565b6016546114cb9083612b5b565b6001600160a01b0383166123d45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161093e565b6001600160a01b0382166124365760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161093e565b6001600160a01b038316600090815260208190526040902054818110156124ae5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161093e565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611890565b600082601f83011261252557600080fd5b8135602061253a61253583612ab8565b612a87565b80838252828201915082860187848660051b890101111561255a57600080fd5b60005b858110156125795781358452928401929084019060010161255d565b5090979650505050505050565b803561ffff8116811461259857600080fd5b919050565b803560ff8116811461259857600080fd5b6000602082840312156125c057600080fd5b8135610a9681612c0f565b6000602082840312156125dd57600080fd5b8151610a9681612c0f565b600080604083850312156125fb57600080fd5b823561260681612c0f565b9150602083013561261681612c0f565b809150509250929050565b60008060006060848603121561263657600080fd5b833561264181612c0f565b9250602084013561265181612c0f565b929592945050506040919091013590565b6000806040838503121561267557600080fd5b823561268081612c0f565b9150602083013561261681612c24565b600080600080600060a086880312156126a857600080fd5b85356126b381612c0f565b945060208601356126c381612c24565b935060408601356126d381612c24565b925060608601356126e381612c24565b915060808601356126f381612c24565b809150509295509295909350565b6000806040838503121561271457600080fd5b823561271f81612c0f565b946020939093013593505050565b6000806040838503121561274057600080fd5b823567ffffffffffffffff8082111561275857600080fd5b818501915085601f83011261276c57600080fd5b8135602061277c61253583612ab8565b8083825282820191508286018a848660051b890101111561279c57600080fd5b600096505b848710156127c85780356127b481612c0f565b8352600196909601959183019183016127a1565b50965050860135925050808211156127df57600080fd5b506127ec85828601612514565b9150509250929050565b60006020828403121561280857600080fd5b8135610a9681612c24565b60006020828403121561282557600080fd5b8151610a9681612c24565b6000806000806080858703121561284657600080fd5b843561285181612c24565b9350602085013561286181612c24565b925061286f6040860161259d565b9396929550929360600135925050565b6000806040838503121561289257600080fd5b823561289d81612c24565b91506128ab6020840161259d565b90509250929050565b6000602082840312156128c657600080fd5b610a9682612586565b600080604083850312156128e257600080fd5b6128eb83612586565b91506128ab60208401612586565b60006020828403121561290b57600080fd5b5035919050565b60006020828403121561292457600080fd5b5051919050565b60008060006060848603121561294057600080fd5b8335925060208401359150604084013561295981612c24565b809150509250925092565b60008060006060848603121561297957600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b818110156129bf578581018301518582016040015282016129a3565b818111156129d1576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252601590820152742cb7ba9030b932903737ba103a34329037bbb732b960591b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a665784516001600160a01b031683529383019391830191600101612a41565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715612ab057612ab0612bf9565b604052919050565b600067ffffffffffffffff821115612ad257612ad2612bf9565b5060051b60200190565b600061ffff808316818516808303821115612af957612af9612bcd565b01949350505050565b60008219821115612b1557612b15612bcd565b500190565b600082612b3757634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612b5657612b56612bcd565b500290565b600082821015612b6d57612b6d612bcd565b500390565b600181811c90821680612b8657607f821691505b60208210811415612ba757634e487b7160e01b600052602260045260246000fd5b50919050565b600060ff821660ff811415612bc457612bc4612bcd565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e4757600080fd5b8015158114610e4757600080fdfea26469706673582212206a434105cbd528449b5c3e97b338521c129484239f9c07dbe9fa73e42082eb0a64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000067fbdbee303ad580716ab528e9e67301de412bc000000000000000000000000067fbdbee303ad580716ab528e9e67301de412bc000000000000000000000000000000000000000000000000000000000000000094d656d652046756e64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024d46000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102545760003560e01c806375f0a87411610139578063a9059cbb116100b6578063dc7703671161007a578063dc7703671461078a578063dd62ed3e146107ba578063f2421d2c146107da578063f2fde38b1461080a578063f887ea401461082a578063ff787dc61461084a57600080fd5b8063a9059cbb146106ea578063ab6677161461070a578063b7b69ec51461072a578063c40fedc61461074a578063d46980161461076a57600080fd5b806395d89b41116100fd57806395d89b41146106555780639ab005f91461066a578063a457c2d71461068a578063a8aa1b31146106aa578063a901dd92146106ca57600080fd5b806375f0a8741461059d5780637e926b4b146105d557806386a22eff146105f55780638c9dcf9e146106155780638da5cb5b1461063557600080fd5b8063313ce567116101d257806342966c681161019657806342966c68146104aa57806355fb28e4146104ca5780635d098b38146104ea5780636ebcf6071461050a57806370a08231146105375780637303df9a1461056d57600080fd5b8063313ce567146103fc57806333d25d1314610418578063395093511461044a5780633c310f5e1461046a578063403e82631461048a57600080fd5b80631da1db5e116102195780631da1db5e1461034d57806323b872dd1461036d578063296f0a0c1461038d5780632ecd7e8f146103ad5780632f54bf6e146103cd57600080fd5b8062167e931461026057806306fdde03146102ba578063095ea7b3146102dc57806318160ddd1461030c5780631d1e81e71461032b57600080fd5b3661025b57005b600080fd5b34801561026c57600080fd5b50601d546102909061ffff80821691620100008104821691600160201b9091041683565b6040805161ffff948516815292841660208401529216918101919091526060015b60405180910390f35b3480156102c657600080fd5b506102cf61086a565b6040516102b19190612992565b3480156102e857600080fd5b506102fc6102f7366004612701565b6108fc565b60405190151581526020016102b1565b34801561031857600080fd5b506002545b6040519081526020016102b1565b34801561033757600080fd5b5061034b61034636600461287f565b610914565b005b34801561035957600080fd5b5061034b6103683660046128f9565b6109eb565b34801561037957600080fd5b506102fc610388366004612621565b610a77565b34801561039957600080fd5b5061034b6103a83660046125ae565b610a9d565b3480156103b957600080fd5b5061034b6103c83660046128cf565b610ae9565b3480156103d957600080fd5b506102fc6103e83660046125ae565b600b546001600160a01b0391821691161490565b34801561040857600080fd5b50604051600981526020016102b1565b34801561042457600080fd5b5061042d610bb0565b6040805193845260208401929092521515908201526060016102b1565b34801561045657600080fd5b506102fc610465366004612701565b610c17565b34801561047657600080fd5b5061034b6104853660046128cf565b610c39565b34801561049657600080fd5b5061034b6104a536600461292b565b610d00565b3480156104b657600080fd5b5061034b6104c53660046128f9565b610e3d565b3480156104d657600080fd5b5061034b6104e5366004612690565b610e4a565b3480156104f657600080fd5b5061034b6105053660046125ae565b610ee0565b34801561051657600080fd5b5061031d6105253660046125ae565b60006020819052908152604090205481565b34801561054357600080fd5b5061031d6105523660046125ae565b6001600160a01b031660009081526020819052604090205490565b34801561057957600080fd5b50601b546102909061ffff80821691620100008104821691600160201b9091041683565b3480156105a957600080fd5b50600d546105bd906001600160a01b031681565b6040516001600160a01b0390911681526020016102b1565b3480156105e157600080fd5b5061034b6105f03660046127f6565b610f2c565b34801561060157600080fd5b5061034b610610366004612662565b610fb5565b34801561062157600080fd5b5061034b6106303660046127f6565b61100a565b34801561064157600080fd5b50600b546105bd906001600160a01b031681565b34801561066157600080fd5b506102cf611056565b34801561067657600080fd5b5061034b610685366004612830565b611065565b34801561069657600080fd5b506102fc6106a5366004612701565b6110e5565b3480156106b657600080fd5b50600e546105bd906001600160a01b031681565b3480156106d657600080fd5b5061034b6106e53660046127f6565b61116b565b3480156106f657600080fd5b506102fc610705366004612701565b6111b1565b34801561071657600080fd5b5061034b61072536600461272d565b6111bf565b34801561073657600080fd5b5061034b6107453660046128cf565b6112ad565b34801561075657600080fd5b506102fc6107653660046125e8565b611374565b34801561077657600080fd5b50600c546105bd906001600160a01b031681565b34801561079657600080fd5b50601a546102909061ffff80821691620100008104821691600160201b9091041683565b3480156107c657600080fd5b5061031d6107d53660046125e8565b6114d3565b3480156107e657600080fd5b50601c546102909061ffff80821691620100008104821691600160201b9091041683565b34801561081657600080fd5b5061034b6108253660046125ae565b6114fe565b34801561083657600080fd5b50601e546105bd906001600160a01b031681565b34801561085657600080fd5b5061034b6108653660046128b4565b61168d565b60606003805461087990612b72565b80601f01602080910402602001604051908101604052809291908181526020018280546108a590612b72565b80156108f25780601f106108c7576101008083540402835291602001916108f2565b820191906000526020600020905b8154815290600101906020018083116108d557829003601f168201915b5050505050905090565b60003361090a8185856116f8565b5060019392505050565b600b546001600160a01b031633146109475760405162461bcd60e51b815260040161093e906129e7565b60405180910390fd5b603c8160ff1611156109b05760405162461bcd60e51b815260206004820152602c60248201527f7472616e736665722064656c61792074696d65206d7573742062652062656c6f60448201526b77203630207365636f6e647360a01b606482015260840161093e565b6017805460ff9092166101000261ff001990921691909117905560198054911515600160301b0266ff00000000000019909216919091179055565b600b546001600160a01b03163314610a155760405162461bcd60e51b815260040161093e906129e7565b6064811115610a2357600080fd5b600d5447906001600160a01b03166108fc6064610a408585612b3c565b610a4a9190612b1a565b6040518115909202916000818181858888f19350505050158015610a72573d6000803e3d6000fd5b505050565b600033610a8585828561181c565b610a90858585611896565b60019150505b9392505050565b600b546001600160a01b03163314610ac75760405162461bcd60e51b815260040161093e906129e7565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b03163314610b135760405162461bcd60e51b815260040161093e906129e7565b601b54600160201b900461ffff16610b2b8284612adc565b61ffff161115610b3a57600080fd5b6040805160608101825261ffff808516825283166020820152908101610b608385612adc565b61ffff9081169091528151601a8054602085015160409095015192841663ffffffff199091161762010000948416949094029390931765ffff000000001916600160201b91909216021790555050565b6000806000601960059054906101000a900460ff1615610c0957633b9aca00601354610bdc9190612b1a565b9250633b9aca00601454610bf09190612b1a565b6019549394909365010000000000900460ff1692509050565b505060025491829150600090565b60003361090a818585610c2a83836114d3565b610c349190612b02565b6116f8565b600b546001600160a01b03163314610c635760405162461bcd60e51b815260040161093e906129e7565b601b54600160201b900461ffff16610c7b8284612adc565b61ffff161115610c8a57600080fd5b6040805160608101825261ffff808516825283166020820152908101610cb08385612adc565b61ffff9081169091528151601c8054602085015160409095015192841663ffffffff199091161762010000948416949094029390931765ffff000000001916600160201b91909216021790555050565b600b546001600160a01b03163314610d2a5760405162461bcd60e51b815260040161093e906129e7565b8015610dbe5760018310158015610d4357506103e88211155b610d9d5760405162461bcd60e51b815260206004820152602560248201527f4d6178205472616e73616374696f6e206d757374206265207365742061626f7660448201526465202e312560d81b606482015260840161093e565b8183600f54610dac9190612b3c565b610db69190612b1a565b601355505050565b60018310158015610dd0575060648211155b610e1c5760405162461bcd60e51b815260206004820152601f60248201527f4d61782057616c6c6574206d757374206265207365742061626f766520312500604482015260640161093e565b8183600f54610e2b9190612b3c565b610e359190612b1a565b601455505050565b610e473382611fea565b50565b600b546001600160a01b03163314610e745760405162461bcd60e51b815260040161093e906129e7565b6001600160a01b039094166000908152600860209081526040808320805494151560ff1995861617905560068252808320805497151597851697909717909655600781528582208054941515948416949094179093556009909252929020805491151591909216179055565b600b546001600160a01b03163314610f0a5760405162461bcd60e51b815260040161093e906129e7565b600d80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b03163314610f565760405162461bcd60e51b815260040161093e906129e7565b6040517fd1f66c3d2bc1993a86be5e3d33709d98f0442381befcedd29f578b9b2506b1ce90600090a1600b54610f99906001600160a01b03166000808080610e4a565b610fa28161100a565b50600b80546001600160a01b0319169055565b600b546001600160a01b03163314610fdf5760405162461bcd60e51b815260040161093e906129e7565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b600b546001600160a01b031633146110345760405162461bcd60e51b815260040161093e906129e7565b60198054911515650100000000000265ff000000000019909216919091179055565b60606004805461087990612b72565b600b546001600160a01b0316331461108f5760405162461bcd60e51b815260040161093e906129e7565b601980546017805460ff191660ff861617905563ff0000ff191685151563ff000000191617630100000085151502179055600f54612710906110d2908390612b3c565b6110dc9190612b1a565b60115550505050565b600033816110f382866114d3565b9050838110156111535760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161093e565b61116082868684036116f8565b506001949350505050565b600b546001600160a01b031633146111955760405162461bcd60e51b815260040161093e906129e7565b60198054911515620100000262ff000019909216919091179055565b60003361090a818585611896565b80518251146112085760405162461bcd60e51b81526020600482015260156024820152742632b733ba3439903237903737ba1036b0ba31b41760591b604482015260640161093e565b60005b82518160ff161015610a7257818160ff168151811061122c5761122c612be3565b602002602001015161123e6105523390565b101561124957600080fd5b61129b33848360ff168151811061126257611262612be3565b6020026020010151848460ff168151811061127f5761127f612be3565b6020026020010151633b9aca006112969190612b3c565b61211c565b806112a581612bad565b91505061120b565b600b546001600160a01b031633146112d75760405162461bcd60e51b815260040161093e906129e7565b601b54600160201b900461ffff166112ef8284612adc565b61ffff1611156112fe57600080fd5b6040805160608101825261ffff8085168252831660208201529081016113248385612adc565b61ffff9081169091528151601d8054602085015160409095015192841663ffffffff199091161762010000948416949094029390931765ffff000000001916600160201b91909216021790555050565b600b546000906001600160a01b031633146113a15760405162461bcd60e51b815260040161093e906129e7565b6001600160a01b038316158015906113c257506001600160a01b0383163014155b6113cb57600080fd5b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a082319060240160206040518083038186803b15801561140d57600080fd5b505afa158015611421573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114459190612912565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb90604401602060405180830381600087803b15801561149357600080fd5b505af11580156114a7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114cb9190612813565b949350505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600b546001600160a01b031633146115285760405162461bcd60e51b815260040161093e906129e7565b6001600160a01b0381166115b35760405162461bcd60e51b815260206004820152604660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573732c207573652072656e6f756e63654f776e6572736869702046756064820152653731ba34b7b760d11b608482015260a40161093e565b600b54604080516001600160a01b03928316815291831660208301527f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0910160405180910390a1600b546001600160a01b03166000908152602081905260409020541561164157600b546001600160a01b03166000818152602081905260409020546116419190839061211c565b600b5461165b906001600160a01b03166000808080610e4a565b61166b8160018060016000610e4a565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b031633146116b75760405162461bcd60e51b815260040161093e906129e7565b601b5461ffff600160201b909104811690821611156116d557600080fd5b601b805461ffff909216600160201b0265ffff0000000019909216919091179055565b6001600160a01b03831661175a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161093e565b6001600160a01b0382166117bb5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161093e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b600061182884846114d3565b9050600019811461189057818110156118835760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604482015260640161093e565b61189084848484036116f8565b50505050565b601954600160201b900460ff1661191557600b546001600160a01b038481169116146118c157600080fd5b600e546001600160a01b0383811691161415611915576019805464ff000000001916600160201b1790556040517fba61a96074b3d636edeee92caddc86293c917d5b6818b7d3698bb52e02ec86c890600090a15b61191f8383612127565b80156119345750601954600160201b900460ff165b801561194b575060195465010000000000900460ff165b15611b28576001600160a01b03821660009081526008602052604090205460ff166119bb5760135481111580156119ad5750601454816119a0846001600160a01b031660009081526020819052604090205490565b6119aa9190612b02565b11155b6119b657600080fd5b6119eb565b6001600160a01b0382166000908152600a602052604090205460ff16156119eb576013548111156119eb57600080fd5b6001600160a01b0383166000908152600a602052604090205460ff168015611a2c57506001600160a01b03821660009081526006602052604090205460ff16155b8015611a415750601954600160301b900460ff165b15611a9d576001600160a01b0382166000908152600560205260409020544211611a6a57600080fd5b601754611a7f90610100900460ff1642612b02565b6001600160a01b038316600090815260056020526040902055611b28565b6001600160a01b03831660009081526006602052604090205460ff16158015611acf5750601954600160301b900460ff165b15611b28576001600160a01b038316600090815260056020526040902054421015611af957600080fd5b601754611b0e90610100900460ff1642612b02565b6001600160a01b0384166000908152600560205260409020555b336000908152600a602052604090205460ff16158015611b505750601954610100900460ff16155b8015611b5e575060195460ff165b8015611b7c5750601754601254611b789160ff1690612b02565b4210155b8015611b9957506011543060009081526020819052604090205410155b15611f94574260125560115460105410801590611bbf57506019546301000000900460ff165b15611e045760115460106000828254611bd89190612b5b565b9091555050601154600090611bef90600290612b1a565b60408051600280825260608201835292935060009290916020830190803683370190505090503081600081518110611c2957611c29612be3565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611c7d57600080fd5b505afa158015611c91573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cb591906125cb565b81600181518110611cc857611cc8612be3565b6001600160a01b039283166020918202929092010152601e5460405163791ac94760e01b81524792919091169063791ac94790611d12908690600090879030904290600401612a16565b600060405180830381600087803b158015611d2c57600080fd5b505af1158015611d40573d6000803e3d6000fd5b5050505060008147611d529190612b5b565b601e54600c5460405163f305d71960e01b81523060048201526024810188905260006044820181905260648201526001600160a01b0391821660848201524260a4820152929350169063f305d71990839060c4016060604051808303818588803b158015611dbf57600080fd5b505af1158015611dd3573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611df89190612964565b50505050505050611f94565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611e3957611e39612be3565b6001600160a01b03928316602091820292909201810191909152601e54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b158015611e8d57600080fd5b505afa158015611ea1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ec591906125cb565b81600181518110611ed857611ed8612be3565b6001600160a01b039283166020918202929092010152601e5460115460405163791ac94760e01b8152919092169163791ac94791611f229190600090869030904290600401612a16565b600060405180830381600087803b158015611f3c57600080fd5b505af1158015611f50573d6000803e3d6000fd5b5050600d546040514793506001600160a01b03909116915082156108fc029083906000818181858888f19350505050158015611f90573d6000803e3d6000fd5b5050505b60195460009062010000900460ff168015611fc857506001600160a01b03841660009081526007602052604090205460ff16155b611fd25781611fdd565b611fdd8484846121ef565b905061189084848361211c565b6001600160a01b03821661204a5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b606482015260840161093e565b6001600160a01b038216600090815260208190526040902054818110156120be5760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b606482015260840161093e565b6001600160a01b0383166000818152602081815260408083208686039055600280548790039055518581529192917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3505050565b610a72838383612370565b600061214183600b546001600160a01b0391821691161490565b15801561215c5750600b546001600160a01b03838116911614155b80156121735750600b546001600160a01b03163214155b801561219857506001600160a01b03831660009081526009602052604090205460ff16155b80156121bd57506001600160a01b03821660009081526009602052604090205460ff16155b80156121d457506001600160a01b03821661dead14155b8015610a9657506001600160a01b0383163014159392505050565b6001600160a01b03821660009081526007602052604081205460ff1615612217575080610a96565b6001600160a01b0383166000908152600a602052604090205460ff161561224e57601c54600160201b900461ffff16601555612297565b6001600160a01b0384166000908152600a602052604090205460ff161561228557601a54600160201b900461ffff16601555612297565b601d54600160201b900461ffff166015555b6018546015546122a79084612b3c565b6122b19190612b1a565b6016556019546301000000900460ff161561235657601c54601a546122dd9161ffff9081169116612adc565b601c54601a546123009161ffff600160201b918290048116929190910416612adc565b61230a9190612adc565b601c54601a5461ffff928316926123249281169116612adc565b61ffff166016546123359190612b3c565b61233f9190612b1a565b601060008282546123509190612b02565b90915550505b612363843060165461211c565b6016546114cb9083612b5b565b6001600160a01b0383166123d45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161093e565b6001600160a01b0382166124365760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161093e565b6001600160a01b038316600090815260208190526040902054818110156124ae5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161093e565b6001600160a01b03848116600081815260208181526040808320878703905593871680835291849020805487019055925185815290927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a3611890565b600082601f83011261252557600080fd5b8135602061253a61253583612ab8565b612a87565b80838252828201915082860187848660051b890101111561255a57600080fd5b60005b858110156125795781358452928401929084019060010161255d565b5090979650505050505050565b803561ffff8116811461259857600080fd5b919050565b803560ff8116811461259857600080fd5b6000602082840312156125c057600080fd5b8135610a9681612c0f565b6000602082840312156125dd57600080fd5b8151610a9681612c0f565b600080604083850312156125fb57600080fd5b823561260681612c0f565b9150602083013561261681612c0f565b809150509250929050565b60008060006060848603121561263657600080fd5b833561264181612c0f565b9250602084013561265181612c0f565b929592945050506040919091013590565b6000806040838503121561267557600080fd5b823561268081612c0f565b9150602083013561261681612c24565b600080600080600060a086880312156126a857600080fd5b85356126b381612c0f565b945060208601356126c381612c24565b935060408601356126d381612c24565b925060608601356126e381612c24565b915060808601356126f381612c24565b809150509295509295909350565b6000806040838503121561271457600080fd5b823561271f81612c0f565b946020939093013593505050565b6000806040838503121561274057600080fd5b823567ffffffffffffffff8082111561275857600080fd5b818501915085601f83011261276c57600080fd5b8135602061277c61253583612ab8565b8083825282820191508286018a848660051b890101111561279c57600080fd5b600096505b848710156127c85780356127b481612c0f565b8352600196909601959183019183016127a1565b50965050860135925050808211156127df57600080fd5b506127ec85828601612514565b9150509250929050565b60006020828403121561280857600080fd5b8135610a9681612c24565b60006020828403121561282557600080fd5b8151610a9681612c24565b6000806000806080858703121561284657600080fd5b843561285181612c24565b9350602085013561286181612c24565b925061286f6040860161259d565b9396929550929360600135925050565b6000806040838503121561289257600080fd5b823561289d81612c24565b91506128ab6020840161259d565b90509250929050565b6000602082840312156128c657600080fd5b610a9682612586565b600080604083850312156128e257600080fd5b6128eb83612586565b91506128ab60208401612586565b60006020828403121561290b57600080fd5b5035919050565b60006020828403121561292457600080fd5b5051919050565b60008060006060848603121561294057600080fd5b8335925060208401359150604084013561295981612c24565b809150509250925092565b60008060006060848603121561297957600080fd5b8351925060208401519150604084015190509250925092565b600060208083528351808285015260005b818110156129bf578581018301518582016040015282016129a3565b818111156129d1576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252601590820152742cb7ba9030b932903737ba103a34329037bbb732b960591b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a665784516001600160a01b031683529383019391830191600101612a41565b50506001600160a01b03969096166060850152505050608001529392505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715612ab057612ab0612bf9565b604052919050565b600067ffffffffffffffff821115612ad257612ad2612bf9565b5060051b60200190565b600061ffff808316818516808303821115612af957612af9612bcd565b01949350505050565b60008219821115612b1557612b15612bcd565b500190565b600082612b3757634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612b5657612b56612bcd565b500290565b600082821015612b6d57612b6d612bcd565b500390565b600181811c90821680612b8657607f821691505b60208210811415612ba757634e487b7160e01b600052602260045260246000fd5b50919050565b600060ff821660ff811415612bc457612bc4612bcd565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610e4757600080fd5b8015158114610e4757600080fdfea26469706673582212206a434105cbd528449b5c3e97b338521c129484239f9c07dbe9fa73e42082eb0a64736f6c63430008070033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000067fbdbee303ad580716ab528e9e67301de412bc000000000000000000000000067fbdbee303ad580716ab528e9e67301de412bc000000000000000000000000000000000000000000000000000000000000000094d656d652046756e64000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024d46000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : name (string): Meme Fund
Arg [1] : symbol (string): MF
Arg [2] : _liquidityWallet (address): 0x67fbDbEe303ad580716AB528e9e67301de412bc0
Arg [3] : _marketingWallet (address): 0x67fbDbEe303ad580716AB528e9e67301de412bc0

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 00000000000000000000000067fbdbee303ad580716ab528e9e67301de412bc0
Arg [3] : 00000000000000000000000067fbdbee303ad580716ab528e9e67301de412bc0
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000009
Arg [5] : 4d656d652046756e640000000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 4d46000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

38539:13423:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39721:25;;;;;;;;;;-1:-1:-1;39721:25:0;;;;;;;;;;;;;;;-1:-1:-1;;;39721:25:0;;;;;;;;;;16555:6:1;16588:15;;;16570:34;;16640:15;;;16635:2;16620:18;;16613:43;16692:15;;16672:18;;;16665:43;;;;16533:2;16518:18;39721:25:0;;;;;;;;19523:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;21874:201::-;;;;;;;;;;-1:-1:-1;21874:201:0;;;;;:::i;:::-;;:::i;:::-;;;9533:14:1;;9526:22;9508:41;;9496:2;9481:18;21874:201:0;9368:187:1;20643:108:0;;;;;;;;;;-1:-1:-1;20731:12:0;;20643:108;;;16865:25:1;;;16853:2;16838:18;20643:108:0;16719:177:1;44264:281:0;;;;;;;;;;-1:-1:-1;44264:281:0;;;;;:::i;:::-;;:::i;:::-;;42600;;;;;;;;;;-1:-1:-1;42600:281:0;;;;;:::i;:::-;;:::i;22655:295::-;;;;;;;;;;-1:-1:-1;22655:295:0;;;;;:::i;:::-;;:::i;45854:124::-;;;;;;;;;;-1:-1:-1;45854:124:0;;;;;:::i;:::-;;:::i;44553:332::-;;;;;;;;;;-1:-1:-1;44553:332:0;;;;;:::i;:::-;;:::i;51729:103::-;;;;;;;;;;-1:-1:-1;51729:103:0;;;;;:::i;:::-;51819:5;;-1:-1:-1;;;;;51808:16:0;;;51819:5;;51808:16;;51729:103;51178:92;;;;;;;;;;-1:-1:-1;51178:92:0;;51261:1;18362:36:1;;18350:2;18335:18;51178:92:0;18220:184:1;51278:443:0;;;;;;;;;;;;;:::i;:::-;;;;18082:25:1;;;18138:2;18123:18;;18116:34;;;;18193:14;18186:22;18166:18;;;18159:50;18070:2;18055:18;51278:443:0;17886:329:1;23359:238:0;;;;;;;;;;-1:-1:-1;23359:238:0;;;;;:::i;:::-;;:::i;45247:334::-;;;;;;;;;;-1:-1:-1;45247:334:0;;;;;:::i;:::-;;:::i;43209:481::-;;;;;;;;;;-1:-1:-1;43209:481:0;;;;;:::i;:::-;;:::i;46726:85::-;;;;;;;;;;-1:-1:-1;46726:85:0;;;;;:::i;:::-;;:::i;43698:342::-;;;;;;;;;;-1:-1:-1;43698:342:0;;;;;:::i;:::-;;:::i;45986:124::-;;;;;;;;;;-1:-1:-1;45986:124:0;;;;;:::i;:::-;;:::i;18801:44::-;;;;;;;;;;-1:-1:-1;18801:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;;20814:127;;;;;;;;;;-1:-1:-1;20814:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;20915:18:0;20888:7;20915:18;;;;;;;;;;;;20814:127;39666:20;;;;;;;;;;-1:-1:-1;39666:20:0;;;;;;;;;;;;;;;-1:-1:-1;;;39666:20:0;;;;;;38936:30;;;;;;;;;;-1:-1:-1;38936:30:0;;;;-1:-1:-1;;;;;38936:30:0;;;;;;-1:-1:-1;;;;;8124:32:1;;;8106:51;;8094:2;8079:18;38936:30:0;7960:203:1;41881:230:0;;;;;;;;;;-1:-1:-1;41881:230:0;;;;;:::i;:::-;;:::i;44146:110::-;;;;;;;;;;-1:-1:-1;44146:110:0;;;;;:::i;:::-;;:::i;44048:90::-;;;;;;;;;;-1:-1:-1;44048:90:0;;;;;:::i;:::-;;:::i;38872:20::-;;;;;;;;;;-1:-1:-1;38872:20:0;;;;-1:-1:-1;;;;;38872:20:0;;;19742:104;;;;;;;;;;;;;:::i;46118:280::-;;;;;;;;;;-1:-1:-1;46118:280:0;;;;;:::i;:::-;;:::i;24100:436::-;;;;;;;;;;-1:-1:-1;24100:436:0;;;;;:::i;:::-;;:::i;38973:19::-;;;;;;;;;;-1:-1:-1;38973:19:0;;;;-1:-1:-1;;;;;38973:19:0;;;45751:95;;;;;;;;;;-1:-1:-1;45751:95:0;;;;;:::i;:::-;;:::i;21147:193::-;;;;;;;;;;-1:-1:-1;21147:193:0;;;;;:::i;:::-;;:::i;46819:380::-;;;;;;;;;;-1:-1:-1;46819:380:0;;;;;:::i;:::-;;:::i;44897:342::-;;;;;;;;;;-1:-1:-1;44897:342:0;;;;;:::i;:::-;;:::i;42889:312::-;;;;;;;;;;-1:-1:-1;42889:312:0;;;;;:::i;:::-;;:::i;38899:30::-;;;;;;;;;;-1:-1:-1;38899:30:0;;;;-1:-1:-1;;;;;38899:30:0;;;39639:20;;;;;;;;;;-1:-1:-1;39639:20:0;;;;;;;;;;;;;;;-1:-1:-1;;;39639:20:0;;;;;;21403:151;;;;;;;;;;-1:-1:-1;21403:151:0;;;;;:::i;:::-;;:::i;39693:21::-;;;;;;;;;;-1:-1:-1;39693:21:0;;;;;;;;;;;;;;;-1:-1:-1;;;39693:21:0;;;;;;42119:473;;;;;;;;;;-1:-1:-1;42119:473:0;;;;;:::i;:::-;;:::i;39753:32::-;;;;;;;;;;-1:-1:-1;39753:32:0;;;;-1:-1:-1;;;;;39753:32:0;;;45590:153;;;;;;;;;;-1:-1:-1;45590:153:0;;;;;:::i;:::-;;:::i;19523:100::-;19577:13;19610:5;19603:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19523:100;:::o;21874:201::-;21957:4;193:10;22013:32;193:10;22029:7;22038:6;22013:8;:32::i;:::-;-1:-1:-1;22063:4:0;;21874:201;-1:-1:-1;;;21874:201:0:o;44264:281::-;51819:5;;-1:-1:-1;;;;;51819:5:0;39840:10;51808:16;39824:53;;;;-1:-1:-1;;;39824:53:0;;;;;;;:::i;:::-;;;;;;;;;44392:2:::1;44374:14;:20;;;;44366:77;;;::::0;-1:-1:-1;;;44366:77:0;;14169:2:1;44366:77:0::1;::::0;::::1;14151:21:1::0;14208:2;14188:18;;;14181:30;14247:34;14227:18;;;14220:62;-1:-1:-1;;;14298:18:1;;;14291:42;14350:19;;44366:77:0::1;13967:408:1::0;44366:77:0::1;44454:17;:34:::0;;::::1;::::0;;::::1;;;-1:-1:-1::0;;44454:34:0;;::::1;::::0;;;::::1;::::0;;44499:20:::1;:38:::0;;;::::1;;-1:-1:-1::0;;;44499:38:0::1;-1:-1:-1::0;;44499:38:0;;::::1;::::0;;;::::1;::::0;;44264:281::o;42600:::-;51819:5;;-1:-1:-1;;;;;51819:5:0;39840:10;51808:16;39824:53;;;;-1:-1:-1;;;39824:53:0;;;;;;;:::i;:::-;42711:3:::1;42691:16;:23;;42683:32;;;::::0;::::1;;42786:15;::::0;42746:21:::1;::::0;-1:-1:-1;;;;;42786:15:0::1;42778:95;42859:3;42827:28;42839:16:::0;42746:21;42827:28:::1;:::i;:::-;42826:36;;;;:::i;:::-;42778:95;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;42672:209;42600:281:::0;:::o;22655:295::-;22786:4;193:10;22844:38;22860:4;193:10;22875:6;22844:15;:38::i;:::-;22893:27;22903:4;22909:2;22913:6;22893:9;:27::i;:::-;22938:4;22931:11;;;22655:295;;;;;;:::o;45854:124::-;51819:5;;-1:-1:-1;;;;;51819:5:0;39840:10;51808:16;39824:53;;;;-1:-1:-1;;;39824:53:0;;;;;;;:::i;:::-;45936:15:::1;:34:::0;;-1:-1:-1;;;;;;45936:34:0::1;-1:-1:-1::0;;;;;45936:34:0;;;::::1;::::0;;;::::1;::::0;;45854:124::o;44553:332::-;51819:5;;-1:-1:-1;;;;;51819:5:0;39840:10;51808:16;39824:53;;;;-1:-1:-1;;;39824:53:0;;;;;;;:::i;:::-;44686:7:::1;:16:::0;-1:-1:-1;;;44686:16:0;::::1;;;44654:28;44670:12:::0;44654:13;:28:::1;:::i;:::-;:48;;;;44646:57;;;::::0;::::1;;44724:153;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;::::1;::::0;;;;44837:28:::1;44800:12:::0;44759:13;44837:28:::1;:::i;:::-;44724:153;::::0;;::::1;::::0;;;44714:163;;:7:::1;:163:::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;44714:163:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;44714:163:0::1;-1:-1:-1::0;;;44714:163:0;;;::::1;;;::::0;;-1:-1:-1;;44553:332:0:o;51278:443::-;51332:19;51353:14;51369:22;51406:8;;;;;;;;;;;51403:311;;;51461:5;51447:11;;:19;;;;:::i;:::-;51430:36;;51511:5;51493:15;;:23;;;;:::i;:::-;51551:8;;51278:443;;51481:35;;51551:8;;;;;;-1:-1:-1;51278:443:0;-1:-1:-1;51278:443:0:o;51403:311::-;-1:-1:-1;;20731:12:0;;;;;-1:-1:-1;51697:5:0;;51278:443::o;23359:238::-;23447:4;193:10;23503:64;193:10;23519:7;23556:10;23528:25;193:10;23519:7;23528:9;:25::i;:::-;:38;;;;:::i;:::-;23503:8;:64::i;45247:334::-;51819:5;;-1:-1:-1;;;;;51819:5:0;39840:10;51808:16;39824:53;;;;-1:-1:-1;;;39824:53:0;;;;;;;:::i;:::-;45381:7:::1;:16:::0;-1:-1:-1;;;45381:16:0;::::1;;;45349:28;45365:12:::0;45349:13;:28:::1;:::i;:::-;:48;;;;45341:57;;;::::0;::::1;;45420:153;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;::::1;::::0;;;;45533:28:::1;45496:12:::0;45455:13;45533:28:::1;:::i;:::-;45420:153;::::0;;::::1;::::0;;;45409:164;;:8:::1;:164:::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;45409:164:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;45409:164:0::1;-1:-1:-1::0;;;45409:164:0;;;::::1;;;::::0;;-1:-1:-1;;45247:334:0:o;43209:481::-;51819:5;;-1:-1:-1;;;;;51819:5:0;39840:10;51808:16;39824:53;;;;-1:-1:-1;;;39824:53:0;;;;;;;:::i;:::-;43325:10:::1;43322:361;;;43370:1;43359:7;:12;;:31;;;;;43386:4;43375:7;:15;;43359:31;43351:81;;;::::0;-1:-1:-1;;;43351:81:0;;13403:2:1;43351:81:0::1;::::0;::::1;13385:21:1::0;13442:2;13422:18;;;13415:30;13481:34;13461:18;;;13454:62;-1:-1:-1;;;13532:18:1;;;13525:35;13577:19;;43351:81:0::1;13201:401:1::0;43351:81:0::1;43489:7;43477;43462:12;;:22;;;;:::i;:::-;43461:36;;;;:::i;:::-;43447:11;:50:::0;42778:95:::1;42672:209;42600:281:::0;:::o;43322:361::-:1;43549:1;43538:7;:12;;:30;;;;;43565:3;43554:7;:14;;43538:30;43530:74;;;::::0;-1:-1:-1;;;43530:74:0;;13809:2:1;43530:74:0::1;::::0;::::1;13791:21:1::0;13848:2;13828:18;;;13821:30;13887:33;13867:18;;;13860:61;13938:18;;43530:74:0::1;13607:355:1::0;43530:74:0::1;43664:7;43653;43638:12;;:22;;;;:::i;:::-;43637:34;;;;:::i;:::-;43619:15;:52:::0;43209:481;;;:::o;46726:85::-;46776:27;193:10;46796:6;46776:5;:27::i;:::-;46726:85;:::o;43698:342::-;51819:5;;-1:-1:-1;;;;;51819:5:0;39840:10;51808:16;39824:53;;;;-1:-1:-1;;;39824:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43849:23:0;;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;:42;;;::::1;;-1:-1:-1::0;;43849:42:0;;::::1;;::::0;;43902:19:::1;:27:::0;;;;;:50;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;43963:9:::1;:17:::0;;;;;:30;;;::::1;;::::0;;::::1;::::0;;;::::1;::::0;;;44004:8:::1;:16:::0;;;;;;:28;;;::::1;;::::0;;;::::1;;::::0;;43698:342::o;45986:124::-;51819:5;;-1:-1:-1;;;;;51819:5:0;39840:10;51808:16;39824:53;;;;-1:-1:-1;;;39824:53:0;;;;;;;:::i;:::-;46068:15:::1;:34:::0;;-1:-1:-1;;;;;;46068:34:0::1;-1:-1:-1::0;;;;;46068:34:0;;;::::1;::::0;;;::::1;::::0;;45986:124::o;41881:230::-;51819:5;;-1:-1:-1;;;;;51819:5:0;39840:10;51808:16;39824:53;;;;-1:-1:-1;;;39824:53:0;;;;;;;:::i;:::-;41958:20:::1;::::0;::::1;::::0;;;::::1;42003:5;::::0;41989:48:::1;::::0;-1:-1:-1;;;;;42003:5:0::1;;::::0;;;41989:13:::1;:48::i;:::-;42048:26;42063:10;42048:14;:26::i;:::-;-1:-1:-1::0;42085:5:0::1;:18:::0;;-1:-1:-1;;;;;;42085:18:0::1;::::0;;41881:230::o;44146:110::-;51819:5;;-1:-1:-1;;;;;51819:5:0;39840:10;51808:16;39824:53;;;;-1:-1:-1;;;39824:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;44223:16:0;;;::::1;;::::0;;;:7:::1;:16;::::0;;;;:25;;-1:-1:-1;;44223:25:0::1;::::0;::::1;;::::0;;;::::1;::::0;;44146:110::o;44048:90::-;51819:5;;-1:-1:-1;;;;;51819:5:0;39840:10;51808:16;39824:53;;;;-1:-1:-1;;;39824:53:0;;;;;;;:::i;:::-;44114:8:::1;:16:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;44114:16:0;;::::1;::::0;;;::::1;::::0;;44048:90::o;19742:104::-;19798:13;19831:7;19824:14;;;;;:::i;46118:280::-;51819:5;;-1:-1:-1;;;;;51819:5:0;39840:10;51808:16;39824:53;;;;-1:-1:-1;;;39824:53:0;;;;;;;:::i;:::-;46236:11:::1;:22:::0;;46269:9:::1;:20:::0;;-1:-1:-1;;46269:20:0::1;46236:22;46269:20:::0;::::1;;::::0;;-1:-1:-1;;46300:28:0;46236:22;::::1;;-1:-1:-1::0;;46300:28:0;;;;::::1;;;;::::0;;46355:12:::1;::::0;46384:5:::1;::::0;46355:24:::1;::::0;46371:7;;46355:24:::1;:::i;:::-;46354:36;;;;:::i;:::-;46339:12;:51:::0;-1:-1:-1;;;;46118:280:0:o;24100:436::-;24193:4;193:10;24193:4;24276:25;193:10;24293:7;24276:9;:25::i;:::-;24249:52;;24340:15;24320:16;:35;;24312:85;;;;-1:-1:-1;;;24312:85:0;;16145:2:1;24312:85:0;;;16127:21:1;16184:2;16164:18;;;16157:30;16223:34;16203:18;;;16196:62;-1:-1:-1;;;16274:18:1;;;16267:35;16319:19;;24312:85:0;15943:401:1;24312:85:0;24433:60;24442:5;24449:7;24477:15;24458:16;:34;24433:8;:60::i;:::-;-1:-1:-1;24524:4:0;;24100:436;-1:-1:-1;;;;24100:436:0:o;45751:95::-;51819:5;;-1:-1:-1;;;;;51819:5:0;39840:10;51808:16;39824:53;;;;-1:-1:-1;;;39824:53:0;;;;;;;:::i;:::-;45817:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;45817:21:0;;::::1;::::0;;;::::1;::::0;;45751:95::o;21147:193::-;21226:4;193:10;21282:28;193:10;21299:2;21303:6;21282:9;:28::i;46819:380::-;46948:7;:14;46928:9;:16;:34;46920:68;;;;-1:-1:-1;;;46920:68:0;;14582:2:1;46920:68:0;;;14564:21:1;14621:2;14601:18;;;14594:30;-1:-1:-1;;;14640:18:1;;;14633:51;14701:18;;46920:68:0;14380:345:1;46920:68:0;47004:7;46999:193;47021:9;:16;47017:1;:20;;;46999:193;;;47094:7;47102:1;47094:10;;;;;;;;;;:::i;:::-;;;;;;;47067:23;47077:12;193:10;;105:107;47067:23;:37;;47059:46;;;;;;47120:60;193:10;47149:9;47159:1;47149:12;;;;;;;;;;:::i;:::-;;;;;;;47163:7;47171:1;47163:10;;;;;;;;;;:::i;:::-;;;;;;;47174:5;47163:16;;;;:::i;:::-;47120:14;:60::i;:::-;47039:3;;;;:::i;:::-;;;;46999:193;;44897:342;51819:5;;-1:-1:-1;;;;;51819:5:0;39840:10;51808:16;39824:53;;;;-1:-1:-1;;;39824:53:0;;;;;;;:::i;:::-;45035:7:::1;:16:::0;-1:-1:-1;;;45035:16:0;::::1;;;45003:28;45019:12:::0;45003:13;:28:::1;:::i;:::-;:48;;;;44995:57;;;::::0;::::1;;45078:153;::::0;;::::1;::::0;::::1;::::0;;::::1;::::0;;::::1;::::0;;;::::1;;::::0;::::1;::::0;;;;45191:28:::1;45154:12:::0;45113:13;45191:28:::1;:::i;:::-;45078:153;::::0;;::::1;::::0;;;45063:168;;:12:::1;:168:::0;;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;45063:168:0;;;;;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;45063:168:0::1;-1:-1:-1::0;;;45063:168:0;;;::::1;;;::::0;;-1:-1:-1;;44897:342:0:o;42889:312::-;51819:5;;42972:10;;-1:-1:-1;;;;;51819:5:0;39840:10;51808:16;39824:53;;;;-1:-1:-1;;;39824:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43003:20:0;::::1;::::0;;::::1;::::0;:47:::1;;-1:-1:-1::0;;;;;;43027:23:0;::::1;43045:4;43027:23;;43003:47;42995:56;;;::::0;::::1;;43089:39;::::0;-1:-1:-1;;;43089:39:0;;43122:4:::1;43089:39;::::0;::::1;8106:51:1::0;43062:24:0::1;::::0;-1:-1:-1;;;;;43089:24:0;::::1;::::0;::::1;::::0;8079:18:1;;43089:39:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43147:46;::::0;-1:-1:-1;;;43147:46:0;;-1:-1:-1;;;;;8669:32:1;;;43147:46:0::1;::::0;::::1;8651:51:1::0;8718:18;;;8711:34;;;43062:66:0;;-1:-1:-1;43147:23:0;;::::1;::::0;::::1;::::0;8624:18:1;;43147:46:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43139:54:::0;42889:312;-1:-1:-1;;;;42889:312:0:o;21403:151::-;-1:-1:-1;;;;;21519:18:0;;;21492:7;21519:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21403:151::o;42119:473::-;51819:5;;-1:-1:-1;;;;;51819:5:0;39840:10;51808:16;39824:53;;;;-1:-1:-1;;;39824:53:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42200:22:0;::::1;42192:105;;;::::0;-1:-1:-1;;;42192:105:0;;11003:2:1;42192:105:0::1;::::0;::::1;10985:21:1::0;11042:2;11022:18;;;11015:30;11081:34;11061:18;;;11054:62;11152:34;11132:18;;;11125:62;-1:-1:-1;;;11203:19:1;;;11196:37;11250:19;;42192:105:0::1;10801:474:1::0;42192:105:0::1;42334:5;::::0;42313:37:::1;::::0;;-1:-1:-1;;;;;42334:5:0;;::::1;8380:34:1::0;;8450:15;;;8445:2;8430:18;;8423:43;42313:37:0::1;::::0;8315:18:1;42313:37:0::1;;;;;;;42376:5;::::0;-1:-1:-1;;;;;42376:5:0::1;42385:1;20915:18:::0;;;;;;;;;;;42366:20;42363:74:::1;;42403:5;::::0;-1:-1:-1;;;;;42403:5:0::1;20888:7:::0;20915:18;;;;;;;;;;;42388:49:::1;::::0;42403:5;42410:8;;47120:14;:60::i;42388:49::-:1;42462:5;::::0;42448:48:::1;::::0;-1:-1:-1;;;;;42462:5:0::1;;::::0;;;42448:13:::1;:48::i;:::-;42507;42521:8;42531:4;42537::::0;42543::::1;42549:5;42507:13;:48::i;:::-;42568:5;:16:::0;;-1:-1:-1;;;;;;42568:16:0::1;-1:-1:-1::0;;;;;42568:16:0;;;::::1;::::0;;;::::1;::::0;;42119:473::o;45590:153::-;51819:5;;-1:-1:-1;;;;;51819:5:0;39840:10;51808:16;39824:53;;;;-1:-1:-1;;;39824:53:0;;;;;;;:::i;:::-;45679:7:::1;:16:::0;::::1;-1:-1:-1::0;;;45679:16:0;;::::1;::::0;::::1;45666:29:::0;;::::1;;;45658:38;;;::::0;::::1;;45707:7;:28:::0;;::::1;::::0;;::::1;-1:-1:-1::0;;;45707:28:0::1;-1:-1:-1::0;;45707:28:0;;::::1;::::0;;;::::1;::::0;;45590:153::o;28127:380::-;-1:-1:-1;;;;;28263:19:0;;28255:68;;;;-1:-1:-1;;;28255:68:0;;15740:2:1;28255:68:0;;;15722:21:1;15779:2;15759:18;;;15752:30;15818:34;15798:18;;;15791:62;-1:-1:-1;;;15869:18:1;;;15862:34;15913:19;;28255:68:0;15538:400:1;28255:68:0;-1:-1:-1;;;;;28342:21:0;;28334:68;;;;-1:-1:-1;;;28334:68:0;;11885:2:1;28334:68:0;;;11867:21:1;11924:2;11904:18;;;11897:30;11963:34;11943:18;;;11936:62;-1:-1:-1;;;12014:18:1;;;12007:32;12056:19;;28334:68:0;11683:398:1;28334:68:0;-1:-1:-1;;;;;28415:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;28467:32;;16865:25:1;;;28467:32:0;;16838:18:1;28467:32:0;;;;;;;28127:380;;;:::o;28798:453::-;28933:24;28960:25;28970:5;28977:7;28960:9;:25::i;:::-;28933:52;;-1:-1:-1;;29000:16:0;:37;28996:248;;29082:6;29062:16;:26;;29054:68;;;;-1:-1:-1;;;29054:68:0;;12288:2:1;29054:68:0;;;12270:21:1;12327:2;12307:18;;;12300:30;12366:31;12346:18;;;12339:59;12415:18;;29054:68:0;12086:353:1;29054:68:0;29166:51;29175:5;29182:7;29210:6;29191:16;:25;29166:8;:51::i;:::-;28922:329;28798:453;;;:::o;47211:2996::-;47306:11;;-1:-1:-1;;;47306:11:0;;;;47302:198;;51819:5;;-1:-1:-1;;;;;51808:16:0;;;51819:5;;51808:16;47334:22;;;;;;47396:4;;-1:-1:-1;;;;;47390:10:0;;;47396:4;;47390:10;47387:102;;;47421:11;:18;;-1:-1:-1;;47421:18:0;-1:-1:-1;;;47421:18:0;;;47463:10;;;;47421:18;;47463:10;47387:102;47513:16;47520:4;47526:2;47513:6;:16::i;:::-;:31;;;;-1:-1:-1;47533:11:0;;-1:-1:-1;;;47533:11:0;;;;47513:31;:43;;;;-1:-1:-1;47548:8:0;;;;;;;47513:43;47510:755;;;-1:-1:-1;;;;;47576:19:0;;;;;;:15;:19;;;;;;;;47572:220;;47633:11;;47623:6;:21;;:66;;;;;47674:15;;47664:6;47648:13;47658:2;-1:-1:-1;;;;;20915:18:0;20888:7;20915:18;;;;;;;;;;;;20814:127;47648:13;:22;;;;:::i;:::-;:41;;47623:66;47615:75;;;;;;47572:220;;;-1:-1:-1;;;;;47715:11:0;;;;;;:7;:11;;;;;;;;47712:80;;;47764:11;;47754:6;:21;;47746:30;;;;;;-1:-1:-1;;;;;47810:13:0;;;;;;:7;:13;;;;;;;;:41;;;;-1:-1:-1;;;;;;47828:23:0;;;;;;:19;:23;;;;;;;;47827:24;47810:41;:65;;;;-1:-1:-1;47855:20:0;;-1:-1:-1;;;47855:20:0;;;;47810:65;47806:447;;;-1:-1:-1;;;;;47904:17:0;;;;;;:13;:17;;;;;;47924:15;-1:-1:-1;47896:44:0;;;;;;47998:17;;47979:37;;47998:17;;;;;47979:15;:37;:::i;:::-;-1:-1:-1;;;;;47959:17:0;;;;;;:13;:17;;;;;:57;47806:447;;;-1:-1:-1;;;;;48043:25:0;;;;;;:19;:25;;;;;;;;48042:26;:50;;;;-1:-1:-1;48072:20:0;;-1:-1:-1;;;48072:20:0;;;;48042:50;48038:215;;;-1:-1:-1;;;;;48120:19:0;;;;;;:13;:19;;;;;;48143:15;-1:-1:-1;48120:38:0;48112:47;;;;;;48219:17;;48200:37;;48219:17;;;;;48200:15;:37;:::i;:::-;-1:-1:-1;;;;;48178:19:0;;;;;;:13;:19;;;;;:59;48038:215;193:10;48280:21;;;;:7;:21;;;;;;;;48279:22;:33;;;;-1:-1:-1;48306:6:0;;;;;;;48305:7;48279:33;:48;;;;-1:-1:-1;48316:11:0;;;;48279:48;:91;;;;-1:-1:-1;48361:9:0;;48350:8;;:20;;48361:9;;;48350:20;:::i;:::-;48331:15;:39;;48279:91;:135;;;;-1:-1:-1;48402:12:0;;48392:4;48374:9;:24;;;;;;;;;;;:40;;48279:135;48275:1768;;;48442:15;48431:8;:26;48497:12;;48476:17;;:33;;;;:55;;-1:-1:-1;48513:18:0;;;;;;;48476:55;48472:1560;;;48573:12;;48552:17;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;48630:12:0;;48604:23;;48630:16;;48645:1;;48630:16;:::i;:::-;48691;;;48705:1;48691:16;;;;;;;;48604:42;;-1:-1:-1;48667:21:0;;48691:16;;;;;;;;;;;;-1:-1:-1;48691:16:0;48667:40;;48744:4;48726;48731:1;48726:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48726:23:0;;;:7;;;;;;;;;;:23;;;;48778:6;;:13;;;-1:-1:-1;;;48778:13:0;;;;:6;;;;;:11;;:13;;;;;48726:7;;48778:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48768:4;48773:1;48768:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;48768:23:0;;;:7;;;;;;;;;:23;48878:6;;:239;;-1:-1:-1;;;48878:239:0;;48836:21;;48878:6;;;;;:57;;:239;;48958:15;;48812:21;;49020:4;;49055;;49083:15;;48878:239;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49138:17;49183:13;49158:21;:39;;;;:::i;:::-;49218:6;;49403:15;;49218:257;;-1:-1:-1;;;49218:257:0;;49289:4;49218:257;;;9097:34:1;9147:18;;;9140:34;;;49218:6:0;9190:18:1;;;9183:34;;;9233:18;;;9226:34;-1:-1:-1;;;;;49403:15:0;;;9276:19:1;;;9269:44;49441:15:0;9329:19:1;;;9322:35;49138:59:0;;-1:-1:-1;49218:6:0;;:22;;49138:59;;9031:19:1;;49218:257:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;48533:958;;;;48472:1560;;;49540:16;;;49554:1;49540:16;;;;;;;;49516:21;;49540:16;;;;;;;;;;-1:-1:-1;49540:16:0;49516:40;;49593:4;49575;49580:1;49575:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;49575:23:0;;;:7;;;;;;;;;;:23;;;;49627:6;;:13;;;-1:-1:-1;;;49627:13:0;;;;:6;;;;;:11;;:13;;;;;49575:7;;49627:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;49617:4;49622:1;49617:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;49617:23:0;;;:7;;;;;;;;;:23;49661:6;;49741:12;;49661:236;;-1:-1:-1;;;49661:236:0;;:6;;;;;:57;;:236;;49741:12;49661:6;;49800:4;;49835;;49863:15;;49661:236;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;49982:15:0;;49974:42;;49934:21;;-1:-1:-1;;;;;;49982:15:0;;;;-1:-1:-1;49974:42:0;;;;;49934:21;;49916:15;49974:42;49916:15;49974:42;49934:21;49982:15;49974:42;;;;;;;;;;;;;;;;;;;;;49497:535;;48472:1560;50080:11;;50055:22;;50080:11;;;;;:31;;;;-1:-1:-1;;;;;;50096:15:0;;;;;;:9;:15;;;;;;;;50095:16;50080:31;:68;;50142:6;50080:68;;;50114:25;50122:4;50128:2;50132:6;50114:7;:25::i;:::-;50055:93;;50159:40;50174:4;50180:2;50184:14;50159;:40::i;27014:675::-;-1:-1:-1;;;;;27098:21:0;;27090:67;;;;-1:-1:-1;;;27090:67:0;;14932:2:1;27090:67:0;;;14914:21:1;14971:2;14951:18;;;14944:30;15010:34;14990:18;;;14983:62;-1:-1:-1;;;15061:18:1;;;15054:31;15102:19;;27090:67:0;14730:397:1;27090:67:0;-1:-1:-1;;;;;27257:18:0;;27232:22;27257:18;;;;;;;;;;;27294:24;;;;27286:71;;;;-1:-1:-1;;;27286:71:0;;11482:2:1;27286:71:0;;;11464:21:1;11521:2;11501:18;;;11494:30;11560:34;11540:18;;;11533:62;-1:-1:-1;;;11611:18:1;;;11604:32;11653:19;;27286:71:0;11280:398:1;27286:71:0;-1:-1:-1;;;;;27393:18:0;;:9;:18;;;;;;;;;;;27414:23;;;27393:44;;27532:12;:22;;;;;;;27583:37;16865:25:1;;;27393:9:0;;:18;27583:37;;16838:18:1;27583:37:0;;;;;;;42778:95:::1;42672:209;42600:281:::0;:::o;50215:127::-;50301:33;50317:4;50323:2;50327:6;50301:15;:33::i;46406:312::-;46470:4;46495:13;46503:4;51819:5;;-1:-1:-1;;;;;51808:16:0;;;51819:5;;51808:16;;51729:103;46495:13;46494:14;:43;;;;-1:-1:-1;51819:5:0;;-1:-1:-1;;;;;51808:16:0;;;51819:5;;51808:16;46525:12;46494:43;:78;;;;-1:-1:-1;46567:5:0;;-1:-1:-1;;;;;46567:5:0;46554:9;:18;;46494:78;:110;;;;-1:-1:-1;;;;;;46590:14:0;;;;;;:8;:14;;;;;;;;46589:15;46494:110;:140;;;;-1:-1:-1;;;;;;46622:12:0;;;;;;:8;:12;;;;;;;;46621:13;46494:140;:178;;;;-1:-1:-1;;;;;;46651:21:0;;46665:6;46651:21;;46494:178;:216;;;;-1:-1:-1;;;;;;46689:21:0;;46705:4;46689:21;;46487:223;46406:312;-1:-1:-1;;;46406:312:0:o;50350:820::-;-1:-1:-1;;;;;50459:19:0;;50435:7;50459:19;;;:9;:19;;;;;;;;50455:65;;;-1:-1:-1;50502:6:0;50495:13;;50455:65;-1:-1:-1;;;;;50533:17:0;;;;;;:7;:17;;;;;;;;50530:242;;;50590:8;:17;-1:-1:-1;;;50590:17:0;;;;50579:8;:28;50530:242;;;-1:-1:-1;;;;;50637:15:0;;;;;;:7;:15;;;;;;;;50634:138;;;50679:7;:16;-1:-1:-1;;;50679:16:0;;;;50668:8;:27;50634:138;;;50739:12;:21;-1:-1:-1;;;50739:21:0;;;;50728:8;:32;50634:138;50818:14;;50806:8;;50797:17;;:6;:17;:::i;:::-;50796:36;;;;:::i;:::-;50784:9;:48;50847:18;;;;;;;50843:224;;;51032:8;:21;51009:7;:20;:44;;51032:21;;;;;51009:20;:44;:::i;:::-;50987:8;:17;50968:7;:16;:36;;50987:17;-1:-1:-1;;;50987:17:0;;;;;;;50968:16;;;;;:36;:::i;:::-;50967:87;;;;:::i;:::-;50940:8;:21;50917:7;:20;50903:152;;;;;50917:44;;50940:21;;;50917:20;:44;:::i;:::-;50904:58;;:9;;:58;;;;:::i;:::-;50903:152;;;;:::i;:::-;50882:17;;:173;;;;;;;:::i;:::-;;;;-1:-1:-1;;50843:224:0;51077:48;51092:6;51108:4;51115:9;;51077:14;:48::i;:::-;51153:9;;51144:18;;:6;:18;:::i;25006:840::-;-1:-1:-1;;;;;25137:18:0;;25129:68;;;;-1:-1:-1;;;25129:68:0;;15334:2:1;25129:68:0;;;15316:21:1;15373:2;15353:18;;;15346:30;15412:34;15392:18;;;15385:62;-1:-1:-1;;;15463:18:1;;;15456:35;15508:19;;25129:68:0;15132:401:1;25129:68:0;-1:-1:-1;;;;;25216:16:0;;25208:64;;;;-1:-1:-1;;;25208:64:0;;10599:2:1;25208:64:0;;;10581:21:1;10638:2;10618:18;;;10611:30;10677:34;10657:18;;;10650:62;-1:-1:-1;;;10728:18:1;;;10721:33;10771:19;;25208:64:0;10397:399:1;25208:64:0;-1:-1:-1;;;;;25358:15:0;;25336:19;25358:15;;;;;;;;;;;25392:21;;;;25384:72;;;;-1:-1:-1;;;25384:72:0;;12646:2:1;25384:72:0;;;12628:21:1;12685:2;12665:18;;;12658:30;12724:34;12704:18;;;12697:62;-1:-1:-1;;;12775:18:1;;;12768:36;12821:19;;25384:72:0;12444:402:1;25384:72:0;-1:-1:-1;;;;;25492:15:0;;;:9;:15;;;;;;;;;;;25510:20;;;25492:38;;25710:13;;;;;;;;;;:23;;;;;;25762:26;;16865:25:1;;;25710:13:0;;25762:26;;16838:18:1;25762:26:0;;;;;;;25801:37;42600:281;14:673:1;68:5;121:3;114:4;106:6;102:17;98:27;88:55;;139:1;136;129:12;88:55;175:6;162:20;201:4;225:60;241:43;281:2;241:43;:::i;:::-;225:60;:::i;:::-;307:3;331:2;326:3;319:15;359:2;354:3;350:12;343:19;;394:2;386:6;382:15;446:3;441:2;435;432:1;428:10;420:6;416:23;412:32;409:41;406:61;;;463:1;460;453:12;406:61;485:1;495:163;509:2;506:1;503:9;495:163;;;566:17;;554:30;;604:12;;;;636;;;;527:1;520:9;495:163;;;-1:-1:-1;676:5:1;;14:673;-1:-1:-1;;;;;;;14:673:1:o;692:159::-;759:20;;819:6;808:18;;798:29;;788:57;;841:1;838;831:12;788:57;692:159;;;:::o;856:156::-;922:20;;982:4;971:16;;961:27;;951:55;;1002:1;999;992:12;1017:247;1076:6;1129:2;1117:9;1108:7;1104:23;1100:32;1097:52;;;1145:1;1142;1135:12;1097:52;1184:9;1171:23;1203:31;1228:5;1203:31;:::i;1269:251::-;1339:6;1392:2;1380:9;1371:7;1367:23;1363:32;1360:52;;;1408:1;1405;1398:12;1360:52;1440:9;1434:16;1459:31;1484:5;1459:31;:::i;1525:388::-;1593:6;1601;1654:2;1642:9;1633:7;1629:23;1625:32;1622:52;;;1670:1;1667;1660:12;1622:52;1709:9;1696:23;1728:31;1753:5;1728:31;:::i;:::-;1778:5;-1:-1:-1;1835:2:1;1820:18;;1807:32;1848:33;1807:32;1848:33;:::i;:::-;1900:7;1890:17;;;1525:388;;;;;:::o;1918:456::-;1995:6;2003;2011;2064:2;2052:9;2043:7;2039:23;2035:32;2032:52;;;2080:1;2077;2070:12;2032:52;2119:9;2106:23;2138:31;2163:5;2138:31;:::i;:::-;2188:5;-1:-1:-1;2245:2:1;2230:18;;2217:32;2258:33;2217:32;2258:33;:::i;:::-;1918:456;;2310:7;;-1:-1:-1;;;2364:2:1;2349:18;;;;2336:32;;1918:456::o;2379:382::-;2444:6;2452;2505:2;2493:9;2484:7;2480:23;2476:32;2473:52;;;2521:1;2518;2511:12;2473:52;2560:9;2547:23;2579:31;2604:5;2579:31;:::i;:::-;2629:5;-1:-1:-1;2686:2:1;2671:18;;2658:32;2699:30;2658:32;2699:30;:::i;2766:789::-;2849:6;2857;2865;2873;2881;2934:3;2922:9;2913:7;2909:23;2905:33;2902:53;;;2951:1;2948;2941:12;2902:53;2990:9;2977:23;3009:31;3034:5;3009:31;:::i;:::-;3059:5;-1:-1:-1;3116:2:1;3101:18;;3088:32;3129:30;3088:32;3129:30;:::i;:::-;3178:7;-1:-1:-1;3237:2:1;3222:18;;3209:32;3250:30;3209:32;3250:30;:::i;:::-;3299:7;-1:-1:-1;3358:2:1;3343:18;;3330:32;3371:30;3330:32;3371:30;:::i;:::-;3420:7;-1:-1:-1;3479:3:1;3464:19;;3451:33;3493:30;3451:33;3493:30;:::i;:::-;3542:7;3532:17;;;2766:789;;;;;;;;:::o;3560:315::-;3628:6;3636;3689:2;3677:9;3668:7;3664:23;3660:32;3657:52;;;3705:1;3702;3695:12;3657:52;3744:9;3731:23;3763:31;3788:5;3763:31;:::i;:::-;3813:5;3865:2;3850:18;;;;3837:32;;-1:-1:-1;;;3560:315:1:o;3880:1226::-;3998:6;4006;4059:2;4047:9;4038:7;4034:23;4030:32;4027:52;;;4075:1;4072;4065:12;4027:52;4115:9;4102:23;4144:18;4185:2;4177:6;4174:14;4171:34;;;4201:1;4198;4191:12;4171:34;4239:6;4228:9;4224:22;4214:32;;4284:7;4277:4;4273:2;4269:13;4265:27;4255:55;;4306:1;4303;4296:12;4255:55;4342:2;4329:16;4364:4;4388:60;4404:43;4444:2;4404:43;:::i;4388:60::-;4470:3;4494:2;4489:3;4482:15;4522:2;4517:3;4513:12;4506:19;;4553:2;4549;4545:11;4601:7;4596:2;4590;4587:1;4583:10;4579:2;4575:19;4571:28;4568:41;4565:61;;;4622:1;4619;4612:12;4565:61;4644:1;4635:10;;4654:238;4668:2;4665:1;4662:9;4654:238;;;4739:3;4726:17;4756:31;4781:5;4756:31;:::i;:::-;4800:18;;4686:1;4679:9;;;;;4838:12;;;;4870;;4654:238;;;-1:-1:-1;4911:5:1;-1:-1:-1;;4954:18:1;;4941:32;;-1:-1:-1;;4985:16:1;;;4982:36;;;5014:1;5011;5004:12;4982:36;;5037:63;5092:7;5081:8;5070:9;5066:24;5037:63;:::i;:::-;5027:73;;;3880:1226;;;;;:::o;5111:241::-;5167:6;5220:2;5208:9;5199:7;5195:23;5191:32;5188:52;;;5236:1;5233;5226:12;5188:52;5275:9;5262:23;5294:28;5316:5;5294:28;:::i;5357:245::-;5424:6;5477:2;5465:9;5456:7;5452:23;5448:32;5445:52;;;5493:1;5490;5483:12;5445:52;5525:9;5519:16;5544:28;5566:5;5544:28;:::i;5607:515::-;5685:6;5693;5701;5709;5762:3;5750:9;5741:7;5737:23;5733:33;5730:53;;;5779:1;5776;5769:12;5730:53;5818:9;5805:23;5837:28;5859:5;5837:28;:::i;:::-;5884:5;-1:-1:-1;5941:2:1;5926:18;;5913:32;5954:30;5913:32;5954:30;:::i;:::-;6003:7;-1:-1:-1;6029:36:1;6061:2;6046:18;;6029:36;:::i;:::-;5607:515;;;;-1:-1:-1;6019:46:1;;6112:2;6097:18;6084:32;;-1:-1:-1;;5607:515:1:o;6127:311::-;6190:6;6198;6251:2;6239:9;6230:7;6226:23;6222:32;6219:52;;;6267:1;6264;6257:12;6219:52;6306:9;6293:23;6325:28;6347:5;6325:28;:::i;:::-;6372:5;-1:-1:-1;6396:36:1;6428:2;6413:18;;6396:36;:::i;:::-;6386:46;;6127:311;;;;;:::o;6443:184::-;6501:6;6554:2;6542:9;6533:7;6529:23;6525:32;6522:52;;;6570:1;6567;6560:12;6522:52;6593:28;6611:9;6593:28;:::i;6632:256::-;6698:6;6706;6759:2;6747:9;6738:7;6734:23;6730:32;6727:52;;;6775:1;6772;6765:12;6727:52;6798:28;6816:9;6798:28;:::i;:::-;6788:38;;6845:37;6878:2;6867:9;6863:18;6845:37;:::i;6893:180::-;6952:6;7005:2;6993:9;6984:7;6980:23;6976:32;6973:52;;;7021:1;7018;7011:12;6973:52;-1:-1:-1;7044:23:1;;6893:180;-1:-1:-1;6893:180:1:o;7078:184::-;7148:6;7201:2;7189:9;7180:7;7176:23;7172:32;7169:52;;;7217:1;7214;7207:12;7169:52;-1:-1:-1;7240:16:1;;7078:184;-1:-1:-1;7078:184:1:o;7267:377::-;7341:6;7349;7357;7410:2;7398:9;7389:7;7385:23;7381:32;7378:52;;;7426:1;7423;7416:12;7378:52;7462:9;7449:23;7439:33;;7519:2;7508:9;7504:18;7491:32;7481:42;;7573:2;7562:9;7558:18;7545:32;7586:28;7608:5;7586:28;:::i;:::-;7633:5;7623:15;;;7267:377;;;;;:::o;7649:306::-;7737:6;7745;7753;7806:2;7794:9;7785:7;7781:23;7777:32;7774:52;;;7822:1;7819;7812:12;7774:52;7851:9;7845:16;7835:26;;7901:2;7890:9;7886:18;7880:25;7870:35;;7945:2;7934:9;7930:18;7924:25;7914:35;;7649:306;;;;;:::o;9795:597::-;9907:4;9936:2;9965;9954:9;9947:21;9997:6;9991:13;10040:6;10035:2;10024:9;10020:18;10013:34;10065:1;10075:140;10089:6;10086:1;10083:13;10075:140;;;10184:14;;;10180:23;;10174:30;10150:17;;;10169:2;10146:26;10139:66;10104:10;;10075:140;;;10233:6;10230:1;10227:13;10224:91;;;10303:1;10298:2;10289:6;10278:9;10274:22;10270:31;10263:42;10224:91;-1:-1:-1;10376:2:1;10355:15;-1:-1:-1;;10351:29:1;10336:45;;;;10383:2;10332:54;;9795:597;-1:-1:-1;;;9795:597:1:o;12851:345::-;13053:2;13035:21;;;13092:2;13072:18;;;13065:30;-1:-1:-1;;;13126:2:1;13111:18;;13104:51;13187:2;13172:18;;12851:345::o;16901:980::-;17163:4;17211:3;17200:9;17196:19;17242:6;17231:9;17224:25;17268:2;17306:6;17301:2;17290:9;17286:18;17279:34;17349:3;17344:2;17333:9;17329:18;17322:31;17373:6;17408;17402:13;17439:6;17431;17424:22;17477:3;17466:9;17462:19;17455:26;;17516:2;17508:6;17504:15;17490:29;;17537:1;17547:195;17561:6;17558:1;17555:13;17547:195;;;17626:13;;-1:-1:-1;;;;;17622:39:1;17610:52;;17717:15;;;;17682:12;;;;17658:1;17576:9;17547:195;;;-1:-1:-1;;;;;;;17798:32:1;;;;17793:2;17778:18;;17771:60;-1:-1:-1;;;17862:3:1;17847:19;17840:35;17759:3;16901:980;-1:-1:-1;;;16901:980:1:o;18409:275::-;18480:2;18474:9;18545:2;18526:13;;-1:-1:-1;;18522:27:1;18510:40;;18580:18;18565:34;;18601:22;;;18562:62;18559:88;;;18627:18;;:::i;:::-;18663:2;18656:22;18409:275;;-1:-1:-1;18409:275:1:o;18689:183::-;18749:4;18782:18;18774:6;18771:30;18768:56;;;18804:18;;:::i;:::-;-1:-1:-1;18849:1:1;18845:14;18861:4;18841:25;;18689:183::o;18877:224::-;18916:3;18944:6;18977:2;18974:1;18970:10;19007:2;19004:1;19000:10;19038:3;19034:2;19030:12;19025:3;19022:21;19019:47;;;19046:18;;:::i;:::-;19082:13;;18877:224;-1:-1:-1;;;;18877:224:1:o;19106:128::-;19146:3;19177:1;19173:6;19170:1;19167:13;19164:39;;;19183:18;;:::i;:::-;-1:-1:-1;19219:9:1;;19106:128::o;19239:217::-;19279:1;19305;19295:132;;19349:10;19344:3;19340:20;19337:1;19330:31;19384:4;19381:1;19374:15;19412:4;19409:1;19402:15;19295:132;-1:-1:-1;19441:9:1;;19239:217::o;19461:168::-;19501:7;19567:1;19563;19559:6;19555:14;19552:1;19549:21;19544:1;19537:9;19530:17;19526:45;19523:71;;;19574:18;;:::i;:::-;-1:-1:-1;19614:9:1;;19461:168::o;19634:125::-;19674:4;19702:1;19699;19696:8;19693:34;;;19707:18;;:::i;:::-;-1:-1:-1;19744:9:1;;19634:125::o;19764:380::-;19843:1;19839:12;;;;19886;;;19907:61;;19961:4;19953:6;19949:17;19939:27;;19907:61;20014:2;20006:6;20003:14;19983:18;19980:38;19977:161;;;20060:10;20055:3;20051:20;20048:1;20041:31;20095:4;20092:1;20085:15;20123:4;20120:1;20113:15;19977:161;;19764:380;;;:::o;20149:175::-;20186:3;20230:4;20223:5;20219:16;20259:4;20250:7;20247:17;20244:43;;;20267:18;;:::i;:::-;20316:1;20303:15;;20149:175;-1:-1:-1;;20149:175:1:o;20329:127::-;20390:10;20385:3;20381:20;20378:1;20371:31;20421:4;20418:1;20411:15;20445:4;20442:1;20435:15;20461:127;20522:10;20517:3;20513:20;20510:1;20503:31;20553:4;20550:1;20543:15;20577:4;20574:1;20567:15;20593:127;20654:10;20649:3;20645:20;20642:1;20635:31;20685:4;20682:1;20675:15;20709:4;20706:1;20699:15;20725:131;-1:-1:-1;;;;;20800:31:1;;20790:42;;20780:70;;20846:1;20843;20836:12;20861:118;20947:5;20940:13;20933:21;20926:5;20923:32;20913:60;;20969:1;20966;20959:12

Swarm Source

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