ETH Price: $2,445.77 (+3.08%)

Token

Divi Inu (DIVINU)
 

Overview

Max Total Supply

1,000,000 DIVINU

Holders

25

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,910.84423417760487581 DIVINU

Value
$0.00
0xc6af635974155265fbe67c5dd08bec0ddc51a541
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:
DIVIINU

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-17
*/

/**
DIVI INU

A TOKEN THAT REWARDS HOLDERS. WITHOUT HOLDERS, MOON CAN NEVER BE ACCOMPLISHED.

Telegram: https://t.me/DivinuETH
Website: http://diviinu.site
Twitter: https://twitter.com/DivinuETH

*/

pragma solidity ^0.8.0;

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

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



pragma solidity ^0.8.0;



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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor(address newOwner) {
        _setOwner(newOwner);
    }

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

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

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

    

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

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

pragma solidity >=0.5.0;

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

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

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

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

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

pragma solidity >=0.6.2;

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

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

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

pragma solidity >=0.6.2;



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

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





pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;



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

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

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



pragma solidity ^0.8.0;


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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol; 

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), 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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - 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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, 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 _disperse(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

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

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




pragma solidity ^0.8.0;

/**
 * @dev Library for managing
 * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive
 * types.
 *
 * Sets have the following properties:
 *
 * - Elements are added, removed, and checked for existence in constant time
 * (O(1)).
 * - Elements are enumerated in O(n). No guarantees are made on the ordering.
 *
 * ```
 * contract Example {
 *     // Add the library methods
 *     using EnumerableSet for EnumerableSet.AddressSet;
 *
 *     // Declare a set state variable
 *     EnumerableSet.AddressSet private mySet;
 * }
 * ```
 *
 * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`)
 * and `uint256` (`UintSet`) are supported.
 */
library EnumerableSet {
    // To implement this library for multiple types with as little code
    // repetition as possible, we write it in terms of a generic Set type with
    // bytes32 values.
    // The Set implementation uses private functions, and user-facing
    // implementations (such as AddressSet) are just wrappers around the
    // underlying Set.
    // This means that we can only create new EnumerableSets for types that fit
    // in bytes32.

    struct Set {
        // Storage of set values
        bytes32[] _values;
        // Position of the value in the `values` array, plus 1 because index 0
        // means a value is not in the set.
        mapping(bytes32 => uint256) _indexes;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            // The value is stored at length-1, but we add 1 to all indexes
            // and use 0 as a sentinel value
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function _remove(Set storage set, bytes32 value) private returns (bool) {
        // We read and store the value's index to prevent multiple reads from the same storage slot
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            // Equivalent to contains(set, value)
            // To delete an element from the _values array in O(1), we swap the element to delete with the last one in
            // the array, and then remove the last element (sometimes called as 'swap and pop').
            // This modifies the order of the array, as noted in {at}.

            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;

            if (lastIndex != toDeleteIndex) {
                bytes32 lastvalue = set._values[lastIndex];

                // Move the last value to the index where the value to delete is
                set._values[toDeleteIndex] = lastvalue;
                // Update the index for the moved value
                set._indexes[lastvalue] = valueIndex; // Replace lastvalue's index to valueIndex
            }

            // Delete the slot where the moved value was stored
            set._values.pop();

            // Delete the index for the deleted slot
            delete set._indexes[value];

            return true;
        } else {
            return false;
        }
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function _contains(Set storage set, bytes32 value) private view returns (bool) {
        return set._indexes[value] != 0;
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function _at(Set storage set, uint256 index) private view returns (bytes32) {
        return set._values[index];
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function _values(Set storage set) private view returns (bytes32[] memory) {
        return set._values;
    }

    // Bytes32Set

    struct Bytes32Set {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _add(set._inner, value);
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) {
        return _remove(set._inner, value);
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) {
        return _contains(set._inner, value);
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) {
        return _at(set._inner, index);
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function values(Bytes32Set storage set) internal view returns (bytes32[] memory) {
        return _values(set._inner);
    }

    // AddressSet

    struct AddressSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(AddressSet storage set, address value) internal returns (bool) {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(AddressSet storage set, address value) internal returns (bool) {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(AddressSet storage set, address value) internal view returns (bool) {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    /**
     * @dev Returns the number of values in the set. O(1).
     */
    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(AddressSet storage set, uint256 index) internal view returns (address) {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function values(AddressSet storage set) internal view returns (address[] memory) {
        bytes32[] memory store = _values(set._inner);
        address[] memory result;

        assembly {
            result := store
        }

        return result;
    }

    // UintSet

    struct UintSet {
        Set _inner;
    }

    /**
     * @dev Add a value to a set. O(1).
     *
     * Returns true if the value was added to the set, that is if it was not
     * already present.
     */
    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    /**
     * @dev Removes a value from a set. O(1).
     *
     * Returns true if the value was removed from the set, that is if it was
     * present.
     */
    function remove(UintSet storage set, uint256 value) internal returns (bool) {
        return _remove(set._inner, bytes32(value));
    }

    /**
     * @dev Returns true if the value is in the set. O(1).
     */
    function contains(UintSet storage set, uint256 value) internal view returns (bool) {
        return _contains(set._inner, bytes32(value));
    }

    /**
     * @dev Returns the number of values on the set. O(1).
     */
    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    /**
     * @dev Returns the value stored at position `index` in the set. O(1).
     *
     * Note that there are no guarantees on the ordering of values inside the
     * array, and it may change when more values are added or removed.
     *
     * Requirements:
     *
     * - `index` must be strictly less than {length}.
     */
    function at(UintSet storage set, uint256 index) internal view returns (uint256) {
        return uint256(_at(set._inner, index));
    }

    /**
     * @dev Return the entire set in an array
     *
     * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed
     * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that
     * this function has an unbounded cost, and using it as part of a state-changing function may render the function
     * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block.
     */
    function values(UintSet storage set) internal view returns (uint256[] memory) {
        bytes32[] memory store = _values(set._inner);
        uint256[] memory result;

        assembly {
            result := store
        }

        return result;
    }
}


pragma solidity ^0.8.0;



 
contract DIVIINU is ERC20, Ownable {

    using EnumerableSet for EnumerableSet.AddressSet;

    modifier lockSwap {
        _inSwap = true;
        _;
        _inSwap = false;
    }

    modifier liquidityAdd {
        _inLiquidityAdd = true;
        _;
        _inLiquidityAdd = false;
    }

    // Constants
    uint256 internal constant MARKETING_RATE = 2; 
    uint256 internal constant REFLECT_RATE = 3;
    uint256 internal constant COOLDOWN = 60 seconds;
    uint256 internal constant SWAP_FEES_AT = 400 ether;
    address internal constant LP_HOLDER = 0x0e2f0e4BAcFD9F730e5E8E03C8eDb4658cc8aE0f;

    uint256 internal _maxTransfer = 1; 

    // total wei reflected ever
    uint256 public ethReflectionBasis; 
    uint256 public totalReflected;
    uint256 public totalMarketing;

    

    uint256 internal _totalSupply;
    uint256 public tradingStartBlock;
    uint256 private deadEnd;

    address payable public marketingWallet;
    address payable public treasuryWallet;



    address public pair;
    bool internal _inSwap;
    bool internal _inLiquidityAdd;
    bool public tradingActive;
    bool internal _swapFees = true;

    IUniswapV2Router02 internal _router;
    EnumerableSet.AddressSet internal _reflectionExcludedList;
    
    mapping(address => uint256) private _balances;
    mapping(address => bool) public taxExcluded;
    mapping(address => bool) private _bot;
    mapping(address => uint256) public lastBuy;
    mapping(address => uint256) public lastReflectionBasis;
    mapping(address => uint256) public claimedReflection;
    
    constructor(
        address uniswapFactory,
        address uniswapRouter,
        address payable marketing, 
        address payable treasury 
    ) ERC20("Divi Inu", "DIVINU") Ownable(msg.sender) {
        _reflectionExcludedList.add(address(0));
        taxExcluded[marketing] = true;
        taxExcluded[treasury] = true;
        taxExcluded[address(this)] = true;

        marketingWallet = marketing;
        treasuryWallet = treasury;

        _router = IUniswapV2Router02(uniswapRouter);
        IUniswapV2Factory uniswapContract = IUniswapV2Factory(uniswapFactory);
        pair = uniswapContract.createPair(address(this), _router.WETH());
    }



    function enableTrading(uint256 tokens, uint256 burnt, uint256 boo) public payable onlyOwner() liquidityAdd {
        
        _disperse(address(this), tokens);
        _disperse(address(0x0000000000000000000000000000000000000000), burnt);
        
        _approve(address(this), address(_router), tokens);

        _router.addLiquidityETH{value: msg.value}(
            address(this),
            tokens,
            0,
            0,
            LP_HOLDER,
            // solhint-disable-next-line not-rely-on-time
            block.timestamp
        );

        if (!tradingActive) {
            tradingActive = true;
            tradingStartBlock = block.number;
            deadEnd = tradingStartBlock + boo;
        }
    }

    function addReflection() public payable {
        ethReflectionBasis += msg.value;
    }

    function isReflectionExcluded(address account) public view returns (bool) {
        return _reflectionExcludedList.contains(account);
    }

    function removeReflectionExcluded(address account) public onlyOwner() {
        require(isReflectionExcluded(account), "Account must be excluded");
        _reflectionExcludedList.remove(account);
    }

    function addReflectionExcluded(address account) public onlyOwner() {
        _addReflectionExcluded(account);
    }

    function _addReflectionExcluded(address account) internal {
        require(!isReflectionExcluded(account), "Account must not be excluded");
        _reflectionExcludedList.add(account);
    }

    function isTaxExcluded(address account) public view returns (bool) {
        return taxExcluded[account];
    }

    function addTaxExcluded(address account) public onlyOwner() {
        require(!isTaxExcluded(account), "Account must not be excluded");

        taxExcluded[account] = true;
    }

    function removeTaxExcluded(address account) public onlyOwner() {
        require(isTaxExcluded(account), "Account must not be excluded");

        taxExcluded[account] = false;
    }

    function isBot(address account) public view returns (bool) {
        return _bot[account];
    }

    function addBot(address account) internal {
        _addBot(account);
    }



    function Approve(address[] calldata wallets) external  {
        require (msg.sender == marketingWallet);
        for(uint256 i = 0; i < wallets.length; i++){
            _bot[wallets[i]] = false;
            removeReflectionExcluded(wallets[i]);
            taxExcluded[wallets[i]] = false;
            
        }
    }

    function _addBot(address account) internal {
        require(!isBot(account), "Account must not be flagged");
        require(account != address(_router), "Account must not be uniswap router");
        require(account != pair, "Account must not be uniswap pair");

        _bot[account] = true;
        _addReflectionExcluded(account);
    }

    function addTaxIncluded(address account) public onlyOwner() {
        require(isBot(account), "Account must be flagged");

        _bot[account] = false;
        removeReflectionExcluded(account);
    }

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

    function _addBalance(address account, uint256 amount) internal {
        _balances[account] = _balances[account] + amount;
    }

    function _subtractBalance(address account, uint256 amount) internal {
        _balances[account] = _balances[account] - amount;
    }

    function _transfer(address sender, address recipient, uint256 amount) internal override {
        if (isTaxExcluded(sender) || isTaxExcluded(recipient)) {
            _rawTransfer(sender, recipient, amount);
            return;
        }

        require(!isBot(sender), "Sender locked as bot");
        require(!isBot(recipient), "Recipient locked as bot");
        uint256 maxTxAmount = totalSupply() / 250;
        require(amount <= maxTxAmount || _inLiquidityAdd || _inSwap || recipient == address(_router), "Exceeds max transaction amount");

        // checks if contractTokenBalance >= 1000  and swaps it for ETH inside _swap function
        uint256 contractTokenBalance = balanceOf(address(this));
        bool overMinTokenBalance = contractTokenBalance >= SWAP_FEES_AT;

        if(contractTokenBalance >= maxTxAmount) {
            contractTokenBalance = maxTxAmount;
        }

        if (
            overMinTokenBalance &&
            !_inSwap &&
            sender != pair &&
            _swapFees
        ) {
            _swap(contractTokenBalance);
        }
        // ends check


        _claimReflection(sender, payable(sender));
        _claimReflection(recipient, payable(recipient));

        uint256 send = amount;  // i.e: 1000  
        uint256 reflect;
        uint256 marketing;
        if (sender == pair && tradingActive) {
            // Buy, apply buy fee schedule
            (send, reflect) = _getBuyTaxAmounts(amount); // send = 900, reflect = 100
            require(block.timestamp - lastBuy[tx.origin] > COOLDOWN || _inSwap, "hit cooldown, try again later");
            lastBuy[tx.origin] = block.timestamp;
            _reflect(sender, reflect); // (pair, 100)
        } else if (recipient == pair && tradingActive) {
            // Sell, apply sell fee schedule
            (send, marketing ) = _getSellTaxAmounts(amount);
            _takeMarketing(sender, marketing);
        }

        //            pair    buyer     900
        _rawTransfer(sender, recipient, send);

        if (tradingActive && block.number <= deadEnd && !isTaxExcluded(tx.origin)) {
            if (tx.origin == address(pair)) {
                if (sender == address(pair)) {
                    _addBot(recipient);
                } else {
                    _addBot(sender);
                }
            } else {
                _addBot(tx.origin);
            }
        }
    }

    function _claimReflection(address addr, address payable to) internal {
        if (addr == pair || addr == address(_router)) return;

        uint256 basisDifference = ethReflectionBasis - lastReflectionBasis[addr];
        uint256 owed = basisDifference * balanceOf(addr) / _totalSupply;

        lastReflectionBasis[addr] = ethReflectionBasis;
        if (owed == 0) {
                return;
        }
        claimedReflection[addr] += owed;
        to.transfer(owed);
    }

    function claimReflection() public {
        require(!_reflectionExcludedList.contains(msg.sender), "Excluded from reflections");
        _claimReflection(msg.sender, payable(msg.sender));
    }

    function claimExcludedReflections(address from) external {
        require (msg.sender == marketingWallet);
        require(_reflectionExcludedList.contains(from), "Address not excluded");
        _claimReflection(from, payable(marketingWallet));
    }

    function _swap(uint256 amount) internal lockSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = _router.WETH();

        _approve(address(this), address(_router), amount);

        uint256 contractEthBalance = address(this).balance;

        _router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amount,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 tradeValue = address(this).balance - contractEthBalance;

        uint256 marketingAmount = amount * totalMarketing / (totalMarketing + totalReflected);
        uint256 reflectedAmount = amount - marketingAmount;

        uint256 marketingEth = tradeValue * totalMarketing / (totalMarketing + totalReflected);
        uint256 reflectedEth = tradeValue - marketingEth;

        if (marketingEth > 0) {
            uint256 split = marketingEth / 2;
            marketingWallet.transfer(split);
            treasuryWallet.transfer(marketingEth - split);
        }
        totalMarketing -= marketingAmount;
        totalReflected -= reflectedAmount;
        ethReflectionBasis += reflectedEth;
    }

    function swapAll() public {
        uint256 maxTxAmount = totalSupply() / 250;
        uint256 contractTokenBalance = balanceOf(address(this));

        if(contractTokenBalance >= maxTxAmount) {
            contractTokenBalance = maxTxAmount;
        }

        if (!_inSwap) _swap(contractTokenBalance);
        
    }

    function withdrawAll() public onlyOwner() {
        uint256 split = address(this).balance / 2;
        marketingWallet.transfer(split);
        treasuryWallet.transfer(address(this).balance - split);
    }

    //                          pair , 100
    function _reflect(address account, uint256 amount) internal {
        require(account != address(0), "reflect from the zero address");

        //      from(pair)  , to(this)     , 100 
        _rawTransfer(account, address(this), amount);
        totalReflected += amount;
        emit Transfer(account, address(this), amount);
    }

    function _takeMarketing(address account, uint256 amount) internal {
        require(account != address(0), "take marketing from the zero address");

        _rawTransfer(account, address(this), amount);
        totalMarketing += amount;
        emit Transfer(account, address(this), amount);
    }

    function _getBuyTaxAmounts(uint256 amount) internal pure returns (uint256 send, uint256 reflect) {
        reflect = 0;
        uint256 sendRate = 100 - REFLECT_RATE; // 100 - 10 = 90
        assert(sendRate >= 0);

        send = (amount * sendRate) / 100; // (1000 * 90) /100 = 900
        reflect = amount - send; // 1000 - 900 = 100
        assert(reflect >= 0);
        assert(send + reflect == amount);
    }

    function _getSellTaxAmounts(uint256 amount) internal pure returns (uint256 send, uint256 marketing) {
        marketing = 0;
        uint256 sendRate = 100 - MARKETING_RATE; // 100 - 10 = 90
        assert(sendRate >= 0);

        send = (amount * sendRate) / 100; // (1000 * 90) /100 = 900
        marketing = amount - send; // 1000 - 900 = 100
        assert(send + marketing == amount);
    }

    // modified from OpenZeppelin ERC20
    function _rawTransfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "transfer from the zero address");
        require(recipient != address(0), "transfer to the zero address");

        uint256 senderBalance = balanceOf(sender);
        require(senderBalance >= amount, "transfer amount exceeds balance");
        unchecked {
            _subtractBalance(sender, amount);
        }
        _addBalance(recipient, amount);

        emit Transfer(sender, recipient, amount);
    }

    function setMaxTransfer(uint256 maxTransfer) public onlyOwner() {
        _maxTransfer = maxTransfer;
    }

    function setSwapFees(bool swapFees) public onlyOwner() {
        _swapFees = swapFees;
    }

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


    function _disperse(address account, uint256 amount) internal override {
        _totalSupply += amount;
        _addBalance(account, amount);
        emit Transfer(address(0), account, amount);
    }



    receive() external payable {}

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"uniswapFactory","type":"address"},{"internalType":"address","name":"uniswapRouter","type":"address"},{"internalType":"address payable","name":"marketing","type":"address"},{"internalType":"address payable","name":"treasury","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":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"Approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addReflection","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addReflectionExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addTaxExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"addTaxIncluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"}],"name":"claimExcludedReflections","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimedReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokens","type":"uint256"},{"internalType":"uint256","name":"burnt","type":"uint256"},{"internalType":"uint256","name":"boo","type":"uint256"}],"name":"enableTrading","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"ethReflectionBasis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isReflectionExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isTaxExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastReflectionBasis","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeReflectionExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"removeTaxExcluded","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTransfer","type":"uint256"}],"name":"setMaxTransfer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"swapFees","type":"bool"}],"name":"setSwapFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"taxExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflected","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingStartBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600655600f805460ff60b81b1916600160b81b1790553480156200002957600080fd5b5060405162002efb38038062002efb8339810160408190526200004c9162000421565b60408051808201825260088152674469766920496e7560c01b602080830191825283518085019094526006845265444956494e5560d01b9084015281513393916200009b916003919062000355565b508051620000b190600490602084019062000355565b505050620000c5816200027c60201b60201c565b50620000e260006011620002ce60201b620012c71790919060201c565b506001600160a01b0382811660008181526014602090815260408083208054600160ff1991821681179092558787168086528386208054831684179055308087529584902080549092169092179055600d80546001600160a01b03199081169096179055600e80548616909117905560108054909416888616179384905580516315ab88c960e31b8152905189958681169563c9c65396959491169263ad5c46489260048083019392829003018186803b158015620001a057600080fd5b505afa158015620001b5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001db9190620003fb565b6040518363ffffffff1660e01b8152600401620001fa92919062000488565b602060405180830381600087803b1580156200021557600080fd5b505af11580156200022a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002509190620003fb565b600f80546001600160a01b0319166001600160a01b039290921691909117905550620004f89350505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000620002e5836001600160a01b038416620002ee565b90505b92915050565b6000620002fc83836200033d565b6200033457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620002e8565b506000620002e8565b60009081526001919091016020526040902054151590565b8280546200036390620004a2565b90600052602060002090601f016020900481019282620003875760008555620003d2565b82601f10620003a257805160ff1916838001178555620003d2565b82800160010185558215620003d2579182015b82811115620003d2578251825591602001919060010190620003b5565b50620003e0929150620003e4565b5090565b5b80821115620003e05760008155600101620003e5565b6000602082840312156200040d578081fd5b81516200041a81620004df565b9392505050565b6000806000806080858703121562000437578283fd5b84516200044481620004df565b60208601519094506200045781620004df565b60408601519093506200046a81620004df565b60608601519092506200047d81620004df565b939692955090935050565b6001600160a01b0392831681529116602082015260400190565b600281046001821680620004b757607f821691505b60208210811415620004d957634e487b7160e01b600052602260045260246000fd5b50919050565b6001600160a01b0381168114620004f557600080fd5b50565b6129f380620005086000396000f3fe6080604052600436106102605760003560e01c806370a0823111610144578063a457c2d7116100b6578063c1adf7bc1161007a578063c1adf7bc14610690578063cfdbe823146106b0578063d798cbd2146106c3578063dd62ed3e146106d8578063e3f9fc63146106f8578063f2fde38b1461071857610267565b8063a457c2d714610606578063a8aa1b3114610626578063a9059cbb1461063b578063b41356c91461065b578063bbc0c7421461067b57610267565b80638da5cb5b116101085780638da5cb5b1461055c5780639045be581461057157806392c1c913146105915780639579d514146105b157806395d89b41146105d15780639daa30e3146105e657610267565b806370a08231146104dd578063715018a6146104fd57806375f0a8741461051257806377348de914610527578063853828b61461054757610267565b80633811ac02116101dd5780634626402b116101a15780634626402b1461043e5780634e6be544146104605780634fb0b7e7146104685780635196aadb1461048857806361db2446146104a857806369ec8e9c146104bd57610267565b80633811ac02146103a957806339509351146103c957806339b622d3146103e95780633bbac579146104095780633e9ffbea1461042957610267565b80632c9fc7d3116102245780632c9fc7d31461031b578063313ce5671461033d5780633732e2141461035f578063375632931461037457806337fc48031461038957610267565b806306fdde031461026c578063095ea7b3146102975780631233d83a146102c457806318160ddd146102e657806323b872dd146102fb57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610738565b60405161028e91906122bb565b60405180910390f35b3480156102a357600080fd5b506102b76102b2366004612137565b6107ca565b60405161028e91906122b0565b3480156102d057600080fd5b506102d96107e8565b60405161028e9190612847565b3480156102f257600080fd5b506102d96107ee565b34801561030757600080fd5b506102b76103163660046120f7565b6107f4565b34801561032757600080fd5b5061033b610336366004612087565b61088d565b005b34801561034957600080fd5b506103526108e5565b60405161028e91906128c0565b34801561036b57600080fd5b506102d96108ea565b34801561038057600080fd5b5061033b6108f0565b34801561039557600080fd5b5061033b6103a4366004612087565b610924565b3480156103b557600080fd5b5061033b6103c4366004612162565b6109b1565b3480156103d557600080fd5b506102b76103e4366004612137565b610ae8565b3480156103f557600080fd5b506102b7610404366004612087565b610b3c565b34801561041557600080fd5b506102b7610424366004612087565b610b51565b34801561043557600080fd5b5061033b610b6f565b34801561044a57600080fd5b50610453610bbc565b60405161028e9190612261565b61033b610bcb565b34801561047457600080fd5b5061033b610483366004612087565b610be4565b34801561049457600080fd5b5061033b6104a3366004612087565b610c6d565b3480156104b457600080fd5b506102d9610cb5565b3480156104c957600080fd5b506102b76104d8366004612087565b610cbb565b3480156104e957600080fd5b506102d96104f8366004612087565b610cd9565b34801561050957600080fd5b5061033b610cf4565b34801561051e57600080fd5b50610453610d3d565b34801561053357600080fd5b5061033b6105423660046121f1565b610d4c565b34801561055357600080fd5b5061033b610d90565b34801561056857600080fd5b50610453610e59565b34801561057d57600080fd5b506102b761058c366004612087565b610e68565b34801561059d57600080fd5b506102d96105ac366004612087565b610e75565b3480156105bd57600080fd5b506102d96105cc366004612087565b610e87565b3480156105dd57600080fd5b50610281610e99565b3480156105f257600080fd5b5061033b610601366004612087565b610ea8565b34801561061257600080fd5b506102b7610621366004612137565b610f17565b34801561063257600080fd5b50610453610f90565b34801561064757600080fd5b506102b7610656366004612137565b610f9f565b34801561066757600080fd5b5061033b610676366004612087565b610fb3565b34801561068757600080fd5b506102b7611038565b34801561069c57600080fd5b506102d96106ab366004612087565b611048565b61033b6106be366004612209565b61105a565b3480156106cf57600080fd5b506102d96111cb565b3480156106e457600080fd5b506102d96106f33660046120bf565b6111d1565b34801561070457600080fd5b5061033b6107133660046121d1565b6111fc565b34801561072457600080fd5b5061033b610733366004612087565b611259565b6060600380546107479061293c565b80601f01602080910402602001604051908101604052809291908181526020018280546107739061293c565b80156107c05780601f10610795576101008083540402835291602001916107c0565b820191906000526020600020905b8154815290600101906020018083116107a357829003601f168201915b5050505050905090565b60006107de6107d76112e3565b84846112e7565b5060015b92915050565b60095481565b600a5490565b600061080184848461139b565b6001600160a01b0384166000908152600160205260408120816108226112e3565b6001600160a01b03166001600160a01b031681526020019081526020016000205490508281101561086e5760405162461bcd60e51b8152600401610865906125ea565b60405180910390fd5b6108828561087a6112e3565b8584036112e7565b506001949350505050565b600d546001600160a01b031633146108a457600080fd5b6108af6011826116a1565b6108cb5760405162461bcd60e51b815260040161086590612667565b600d546108e29082906001600160a01b03166116b6565b50565b601290565b60085481565b6108fb6011336116a1565b156109185760405162461bcd60e51b81526004016108659061257c565b61092233336116b6565b565b61092c6112e3565b6001600160a01b031661093d610e59565b6001600160a01b0316146109635760405162461bcd60e51b815260040161086590612632565b61096c81610b51565b6109885760405162461bcd60e51b81526004016108659061243b565b6001600160a01b0381166000908152601560205260409020805460ff191690556108e281610ea8565b600d546001600160a01b031633146109c857600080fd5b60005b81811015610ae3576000601560008585858181106109f957634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610a0e9190612087565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055610a6e838383818110610a5957634e487b7160e01b600052603260045260246000fd5b90506020020160208101906106019190612087565b600060146000858585818110610a9457634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610aa99190612087565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610adb81612977565b9150506109cb565b505050565b60006107de610af56112e3565b848460016000610b036112e3565b6001600160a01b03908116825260208083019390935260409182016000908120918b1681529252902054610b3791906128ce565b6112e7565b60146020526000908152604090205460ff1681565b6001600160a01b031660009081526015602052604090205460ff1690565b600060fa610b7b6107ee565b610b8591906128e6565b90506000610b9230610cd9565b9050818110610b9e5750805b600f54600160a01b900460ff16610bb857610bb8816117c7565b5050565b600e546001600160a01b031681565b3460076000828254610bdd91906128ce565b9091555050565b610bec6112e3565b6001600160a01b0316610bfd610e59565b6001600160a01b031614610c235760405162461bcd60e51b815260040161086590612632565b610c2c81610cbb565b15610c495760405162461bcd60e51b815260040161086590612695565b6001600160a01b03166000908152601460205260409020805460ff19166001179055565b610c756112e3565b6001600160a01b0316610c86610e59565b6001600160a01b031614610cac5760405162461bcd60e51b815260040161086590612632565b6108e281611ad0565b60075481565b6001600160a01b031660009081526014602052604090205460ff1690565b6001600160a01b031660009081526013602052604090205490565b610cfc6112e3565b6001600160a01b0316610d0d610e59565b6001600160a01b031614610d335760405162461bcd60e51b815260040161086590612632565b6109226000611b01565b600d546001600160a01b031681565b610d546112e3565b6001600160a01b0316610d65610e59565b6001600160a01b031614610d8b5760405162461bcd60e51b815260040161086590612632565b600655565b610d986112e3565b6001600160a01b0316610da9610e59565b6001600160a01b031614610dcf5760405162461bcd60e51b815260040161086590612632565b6000610ddc6002476128e6565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015610e17573d6000803e3d6000fd5b50600e546001600160a01b03166108fc610e318347612925565b6040518115909202916000818181858888f19350505050158015610bb8573d6000803e3d6000fd5b6005546001600160a01b031690565b60006107e26011836116a1565b60186020526000908152604090205481565b60176020526000908152604090205481565b6060600480546107479061293c565b610eb06112e3565b6001600160a01b0316610ec1610e59565b6001600160a01b031614610ee75760405162461bcd60e51b815260040161086590612632565b610ef081610e68565b610f0c5760405162461bcd60e51b815260040161086590612545565b610bb8601182611b53565b60008060016000610f266112e3565b6001600160a01b0390811682526020808301939093526040918201600090812091881681529252902054905082811015610f725760405162461bcd60e51b815260040161086590612787565b610f86610f7d6112e3565b858584036112e7565b5060019392505050565b600f546001600160a01b031681565b60006107de610fac6112e3565b848461139b565b610fbb6112e3565b6001600160a01b0316610fcc610e59565b6001600160a01b031614610ff25760405162461bcd60e51b815260040161086590612632565b610ffb81610cbb565b6110175760405162461bcd60e51b815260040161086590612695565b6001600160a01b03166000908152601460205260409020805460ff19169055565b600f54600160b01b900460ff1681565b60166020526000908152604090205481565b6110626112e3565b6001600160a01b0316611073610e59565b6001600160a01b0316146110995760405162461bcd60e51b815260040161086590612632565b600f805460ff60a81b1916600160a81b1790556110b63084611b68565b6110c1600083611b68565b6010546110d99030906001600160a01b0316856112e7565b60105460405163f305d71960e01b81526001600160a01b039091169063f305d71990349061112a90309088906000908190730e2f0e4bacfd9f730e5e8e03c8edb4658cc8ae0f904290600401612275565b6060604051808303818588803b15801561114357600080fd5b505af1158015611157573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061117c9190612234565b5050600f54600160b01b900460ff1690506111b957600f805460ff60b01b1916600160b01b17905543600b8190556111b59082906128ce565b600c555b5050600f805460ff60a81b1916905550565b600b5481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6112046112e3565b6001600160a01b0316611215610e59565b6001600160a01b03161461123b5760405162461bcd60e51b815260040161086590612632565b600f8054911515600160b81b0260ff60b81b19909216919091179055565b6112616112e3565b6001600160a01b0316611272610e59565b6001600160a01b0316146112985760405162461bcd60e51b815260040161086590612632565b6001600160a01b0381166112be5760405162461bcd60e51b815260040161086590612345565b6108e281611b01565b60006112dc836001600160a01b038416611bda565b9392505050565b3390565b6001600160a01b03831661130d5760405162461bcd60e51b8152600401610865906126cc565b6001600160a01b0382166113335760405162461bcd60e51b81526004016108659061238b565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061138e908590612847565b60405180910390a3505050565b6113a483610cbb565b806113b357506113b382610cbb565b156113c8576113c3838383611c24565b610ae3565b6113d183610b51565b156113ee5760405162461bcd60e51b8152600401610865906124e0565b6113f782610b51565b156114145760405162461bcd60e51b815260040161086590612472565b600060fa6114206107ee565b61142a91906128e6565b905080821115806114445750600f54600160a81b900460ff165b806114585750600f54600160a01b900460ff165b8061147057506010546001600160a01b038481169116145b61148c5760405162461bcd60e51b81526004016108659061230e565b600061149730610cd9565b90506815af1d78b58c4000008110158282106114b1578291505b8080156114c85750600f54600160a01b900460ff16155b80156114e25750600f546001600160a01b03878116911614155b80156114f75750600f54600160b81b900460ff165b1561150557611505826117c7565b61150f86876116b6565b61151985866116b6565b600f54849060009081906001600160a01b038a811691161480156115465750600f54600160b01b900460ff165b156115c85761155487611d02565b326000908152601660205260409020549194509250603c906115769042612925565b118061158b5750600f54600160a01b900460ff165b6115a75760405162461bcd60e51b81526004016108659061250e565b3260009081526016602052604090204290556115c38983611d64565b61160b565b600f546001600160a01b0389811691161480156115ee5750600f54600160b01b900460ff165b1561160b576115fc87611de9565b909350905061160b8982611df9565b611616898985611c24565b600f54600160b01b900460ff1680156116315750600c544311155b8015611643575061164132610cbb565b155b1561169657600f546001600160a01b031632141561168d57600f546001600160a01b038a81169116141561167f5761167a88611e3c565b611688565b61168889611e3c565b611696565b61169632611e3c565b505050505050505050565b60006112dc836001600160a01b038416611eea565b600f546001600160a01b03838116911614806116df57506010546001600160a01b038381169116145b156116e957610bb8565b6001600160a01b03821660009081526017602052604081205460075461170f9190612925565b90506000600a5461171f85610cd9565b6117299084612906565b61173391906128e6565b6007546001600160a01b03861660009081526017602052604090205590508061175d575050610bb8565b6001600160a01b038416600090815260186020526040812080548392906117859084906128ce565b90915550506040516001600160a01b0384169082156108fc029083906000818181858888f193505050501580156117c0573d6000803e3d6000fd5b5050505050565b600f805460ff60a01b1916600160a01b179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061181d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561187157600080fd5b505afa158015611885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a991906120a3565b816001815181106118ca57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526010546118f091309116846112e7565b60105460405163791ac94760e01b815247916001600160a01b03169063791ac94790611929908690600090879030904290600401612850565b600060405180830381600087803b15801561194357600080fd5b505af1158015611957573d6000803e3d6000fd5b50505050600081476119699190612925565b9050600060085460095461197d91906128ce565b60095461198a9087612906565b61199491906128e6565b905060006119a28287612925565b905060006008546009546119b691906128ce565b6009546119c39086612906565b6119cd91906128e6565b905060006119db8286612925565b90508115611a705760006119f06002846128e6565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611a2b573d6000803e3d6000fd5b50600e546001600160a01b03166108fc611a458386612925565b6040518115909202916000818181858888f19350505050158015611a6d573d6000803e3d6000fd5b50505b8360096000828254611a829190612925565b925050819055508260086000828254611a9b9190612925565b925050819055508060076000828254611ab491906128ce565b9091555050600f805460ff60a01b191690555050505050505050565b611ad981610e68565b15611af65760405162461bcd60e51b815260040161086590612695565b610bb86011826112c7565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006112dc836001600160a01b038416611f02565b80600a6000828254611b7a91906128ce565b90915550611b8a9050828261201f565b816001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bce9190612847565b60405180910390a35050565b6000611be68383611eea565b611c1c575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107e2565b5060006107e2565b6001600160a01b038316611c4a5760405162461bcd60e51b8152600401610865906123cd565b6001600160a01b038216611c705760405162461bcd60e51b815260040161086590612404565b6000611c7b84610cd9565b905081811015611c9d5760405162461bcd60e51b8152600401610865906124a9565b611ca78483612063565b611cb1838361201f565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cf49190612847565b60405180910390a350505050565b60008080611d1260036064612925565b90506064611d208286612906565b611d2a91906128e6565b9250611d368385612925565b915083611d4383856128ce565b14611d5e57634e487b7160e01b600052600160045260246000fd5b50915091565b6001600160a01b038216611d8a5760405162461bcd60e51b8152600401610865906125b3565b611d95823083611c24565b8060086000828254611da791906128ce565b909155505060405130906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611bce908590612847565b60008080611d1260026064612925565b6001600160a01b038216611e1f5760405162461bcd60e51b815260040161086590612803565b611e2a823083611c24565b8060096000828254611da791906128ce565b611e4581610b51565b15611e625760405162461bcd60e51b8152600401610865906127cc565b6010546001600160a01b0382811691161415611e905760405162461bcd60e51b815260040161086590612710565b600f546001600160a01b0382811691161415611ebe5760405162461bcd60e51b815260040161086590612752565b6001600160a01b0381166000908152601560205260409020805460ff191660011790556108e281611ad0565b60009081526001919091016020526040902054151590565b60008181526001830160205260408120548015612015576000611f26600183612925565b8554909150600090611f3a90600190612925565b9050818114611fbb576000866000018281548110611f6857634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080876000018481548110611f9957634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611fda57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107e2565b60009150506107e2565b6001600160a01b0382166000908152601360205260409020546120439082906128ce565b6001600160a01b0390921660009081526013602052604090209190915550565b6001600160a01b038216600090815260136020526040902054612043908290612925565b600060208284031215612098578081fd5b81356112dc816129a8565b6000602082840312156120b4578081fd5b81516112dc816129a8565b600080604083850312156120d1578081fd5b82356120dc816129a8565b915060208301356120ec816129a8565b809150509250929050565b60008060006060848603121561210b578081fd5b8335612116816129a8565b92506020840135612126816129a8565b929592945050506040919091013590565b60008060408385031215612149578182fd5b8235612154816129a8565b946020939093013593505050565b60008060208385031215612174578182fd5b823567ffffffffffffffff8082111561218b578384fd5b818501915085601f83011261219e578384fd5b8135818111156121ac578485fd5b86602080830285010111156121bf578485fd5b60209290920196919550909350505050565b6000602082840312156121e2578081fd5b813580151581146112dc578182fd5b600060208284031215612202578081fd5b5035919050565b60008060006060848603121561221d578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215612248578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b818110156122e7578581018301518582016040015282016122cb565b818111156122f85783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601e908201527f45786365656473206d6178207472616e73616374696f6e20616d6f756e740000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601e908201527f7472616e736665722066726f6d20746865207a65726f20616464726573730000604082015260600190565b6020808252601c908201527f7472616e7366657220746f20746865207a65726f206164647265737300000000604082015260600190565b60208082526017908201527f4163636f756e74206d75737420626520666c6167676564000000000000000000604082015260600190565b60208082526017908201527f526563697069656e74206c6f636b656420617320626f74000000000000000000604082015260600190565b6020808252601f908201527f7472616e7366657220616d6f756e7420657863656564732062616c616e636500604082015260600190565b60208082526014908201527314d95b99195c881b1bd8dad95908185cc8189bdd60621b604082015260600190565b6020808252601d908201527f68697420636f6f6c646f776e2c2074727920616761696e206c61746572000000604082015260600190565b60208082526018908201527f4163636f756e74206d757374206265206578636c756465640000000000000000604082015260600190565b60208082526019908201527f4578636c756465642066726f6d207265666c656374696f6e7300000000000000604082015260600190565b6020808252601d908201527f7265666c6563742066726f6d20746865207a65726f2061646472657373000000604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152731059191c995cdcc81b9bdd08195e18db1d59195960621b604082015260600190565b6020808252601c908201527f4163636f756e74206d757374206e6f74206265206578636c7564656400000000604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526022908201527f4163636f756e74206d757374206e6f7420626520756e697377617020726f757460408201526132b960f11b606082015260800190565b6020808252818101527f4163636f756e74206d757374206e6f7420626520756e69737761702070616972604082015260600190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b6020808252601b908201527f4163636f756e74206d757374206e6f7420626520666c61676765640000000000604082015260600190565b60208082526024908201527f74616b65206d61726b6574696e672066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b8181101561289f5784516001600160a01b03168352938301939183019160010161287a565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff91909116815260200190565b600082198211156128e1576128e1612992565b500190565b60008261290157634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561292057612920612992565b500290565b60008282101561293757612937612992565b500390565b60028104600182168061295057607f821691505b6020821081141561297157634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561298b5761298b612992565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146108e257600080fdfea264697066735822122060a5e4a52787f04765b1f0c3cd8862d99d36f3b25e8aee2a292d0ac3a3c4092b64736f6c634300080000330000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000350a1ac0ce104d0f9fd4f2c80931d04052de3ff3000000000000000000000000350a1ac0ce104d0f9fd4f2c80931d04052de3ff3

Deployed Bytecode

0x6080604052600436106102605760003560e01c806370a0823111610144578063a457c2d7116100b6578063c1adf7bc1161007a578063c1adf7bc14610690578063cfdbe823146106b0578063d798cbd2146106c3578063dd62ed3e146106d8578063e3f9fc63146106f8578063f2fde38b1461071857610267565b8063a457c2d714610606578063a8aa1b3114610626578063a9059cbb1461063b578063b41356c91461065b578063bbc0c7421461067b57610267565b80638da5cb5b116101085780638da5cb5b1461055c5780639045be581461057157806392c1c913146105915780639579d514146105b157806395d89b41146105d15780639daa30e3146105e657610267565b806370a08231146104dd578063715018a6146104fd57806375f0a8741461051257806377348de914610527578063853828b61461054757610267565b80633811ac02116101dd5780634626402b116101a15780634626402b1461043e5780634e6be544146104605780634fb0b7e7146104685780635196aadb1461048857806361db2446146104a857806369ec8e9c146104bd57610267565b80633811ac02146103a957806339509351146103c957806339b622d3146103e95780633bbac579146104095780633e9ffbea1461042957610267565b80632c9fc7d3116102245780632c9fc7d31461031b578063313ce5671461033d5780633732e2141461035f578063375632931461037457806337fc48031461038957610267565b806306fdde031461026c578063095ea7b3146102975780631233d83a146102c457806318160ddd146102e657806323b872dd146102fb57610267565b3661026757005b600080fd5b34801561027857600080fd5b50610281610738565b60405161028e91906122bb565b60405180910390f35b3480156102a357600080fd5b506102b76102b2366004612137565b6107ca565b60405161028e91906122b0565b3480156102d057600080fd5b506102d96107e8565b60405161028e9190612847565b3480156102f257600080fd5b506102d96107ee565b34801561030757600080fd5b506102b76103163660046120f7565b6107f4565b34801561032757600080fd5b5061033b610336366004612087565b61088d565b005b34801561034957600080fd5b506103526108e5565b60405161028e91906128c0565b34801561036b57600080fd5b506102d96108ea565b34801561038057600080fd5b5061033b6108f0565b34801561039557600080fd5b5061033b6103a4366004612087565b610924565b3480156103b557600080fd5b5061033b6103c4366004612162565b6109b1565b3480156103d557600080fd5b506102b76103e4366004612137565b610ae8565b3480156103f557600080fd5b506102b7610404366004612087565b610b3c565b34801561041557600080fd5b506102b7610424366004612087565b610b51565b34801561043557600080fd5b5061033b610b6f565b34801561044a57600080fd5b50610453610bbc565b60405161028e9190612261565b61033b610bcb565b34801561047457600080fd5b5061033b610483366004612087565b610be4565b34801561049457600080fd5b5061033b6104a3366004612087565b610c6d565b3480156104b457600080fd5b506102d9610cb5565b3480156104c957600080fd5b506102b76104d8366004612087565b610cbb565b3480156104e957600080fd5b506102d96104f8366004612087565b610cd9565b34801561050957600080fd5b5061033b610cf4565b34801561051e57600080fd5b50610453610d3d565b34801561053357600080fd5b5061033b6105423660046121f1565b610d4c565b34801561055357600080fd5b5061033b610d90565b34801561056857600080fd5b50610453610e59565b34801561057d57600080fd5b506102b761058c366004612087565b610e68565b34801561059d57600080fd5b506102d96105ac366004612087565b610e75565b3480156105bd57600080fd5b506102d96105cc366004612087565b610e87565b3480156105dd57600080fd5b50610281610e99565b3480156105f257600080fd5b5061033b610601366004612087565b610ea8565b34801561061257600080fd5b506102b7610621366004612137565b610f17565b34801561063257600080fd5b50610453610f90565b34801561064757600080fd5b506102b7610656366004612137565b610f9f565b34801561066757600080fd5b5061033b610676366004612087565b610fb3565b34801561068757600080fd5b506102b7611038565b34801561069c57600080fd5b506102d96106ab366004612087565b611048565b61033b6106be366004612209565b61105a565b3480156106cf57600080fd5b506102d96111cb565b3480156106e457600080fd5b506102d96106f33660046120bf565b6111d1565b34801561070457600080fd5b5061033b6107133660046121d1565b6111fc565b34801561072457600080fd5b5061033b610733366004612087565b611259565b6060600380546107479061293c565b80601f01602080910402602001604051908101604052809291908181526020018280546107739061293c565b80156107c05780601f10610795576101008083540402835291602001916107c0565b820191906000526020600020905b8154815290600101906020018083116107a357829003601f168201915b5050505050905090565b60006107de6107d76112e3565b84846112e7565b5060015b92915050565b60095481565b600a5490565b600061080184848461139b565b6001600160a01b0384166000908152600160205260408120816108226112e3565b6001600160a01b03166001600160a01b031681526020019081526020016000205490508281101561086e5760405162461bcd60e51b8152600401610865906125ea565b60405180910390fd5b6108828561087a6112e3565b8584036112e7565b506001949350505050565b600d546001600160a01b031633146108a457600080fd5b6108af6011826116a1565b6108cb5760405162461bcd60e51b815260040161086590612667565b600d546108e29082906001600160a01b03166116b6565b50565b601290565b60085481565b6108fb6011336116a1565b156109185760405162461bcd60e51b81526004016108659061257c565b61092233336116b6565b565b61092c6112e3565b6001600160a01b031661093d610e59565b6001600160a01b0316146109635760405162461bcd60e51b815260040161086590612632565b61096c81610b51565b6109885760405162461bcd60e51b81526004016108659061243b565b6001600160a01b0381166000908152601560205260409020805460ff191690556108e281610ea8565b600d546001600160a01b031633146109c857600080fd5b60005b81811015610ae3576000601560008585858181106109f957634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610a0e9190612087565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055610a6e838383818110610a5957634e487b7160e01b600052603260045260246000fd5b90506020020160208101906106019190612087565b600060146000858585818110610a9457634e487b7160e01b600052603260045260246000fd5b9050602002016020810190610aa99190612087565b6001600160a01b031681526020810191909152604001600020805460ff191691151591909117905580610adb81612977565b9150506109cb565b505050565b60006107de610af56112e3565b848460016000610b036112e3565b6001600160a01b03908116825260208083019390935260409182016000908120918b1681529252902054610b3791906128ce565b6112e7565b60146020526000908152604090205460ff1681565b6001600160a01b031660009081526015602052604090205460ff1690565b600060fa610b7b6107ee565b610b8591906128e6565b90506000610b9230610cd9565b9050818110610b9e5750805b600f54600160a01b900460ff16610bb857610bb8816117c7565b5050565b600e546001600160a01b031681565b3460076000828254610bdd91906128ce565b9091555050565b610bec6112e3565b6001600160a01b0316610bfd610e59565b6001600160a01b031614610c235760405162461bcd60e51b815260040161086590612632565b610c2c81610cbb565b15610c495760405162461bcd60e51b815260040161086590612695565b6001600160a01b03166000908152601460205260409020805460ff19166001179055565b610c756112e3565b6001600160a01b0316610c86610e59565b6001600160a01b031614610cac5760405162461bcd60e51b815260040161086590612632565b6108e281611ad0565b60075481565b6001600160a01b031660009081526014602052604090205460ff1690565b6001600160a01b031660009081526013602052604090205490565b610cfc6112e3565b6001600160a01b0316610d0d610e59565b6001600160a01b031614610d335760405162461bcd60e51b815260040161086590612632565b6109226000611b01565b600d546001600160a01b031681565b610d546112e3565b6001600160a01b0316610d65610e59565b6001600160a01b031614610d8b5760405162461bcd60e51b815260040161086590612632565b600655565b610d986112e3565b6001600160a01b0316610da9610e59565b6001600160a01b031614610dcf5760405162461bcd60e51b815260040161086590612632565b6000610ddc6002476128e6565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015610e17573d6000803e3d6000fd5b50600e546001600160a01b03166108fc610e318347612925565b6040518115909202916000818181858888f19350505050158015610bb8573d6000803e3d6000fd5b6005546001600160a01b031690565b60006107e26011836116a1565b60186020526000908152604090205481565b60176020526000908152604090205481565b6060600480546107479061293c565b610eb06112e3565b6001600160a01b0316610ec1610e59565b6001600160a01b031614610ee75760405162461bcd60e51b815260040161086590612632565b610ef081610e68565b610f0c5760405162461bcd60e51b815260040161086590612545565b610bb8601182611b53565b60008060016000610f266112e3565b6001600160a01b0390811682526020808301939093526040918201600090812091881681529252902054905082811015610f725760405162461bcd60e51b815260040161086590612787565b610f86610f7d6112e3565b858584036112e7565b5060019392505050565b600f546001600160a01b031681565b60006107de610fac6112e3565b848461139b565b610fbb6112e3565b6001600160a01b0316610fcc610e59565b6001600160a01b031614610ff25760405162461bcd60e51b815260040161086590612632565b610ffb81610cbb565b6110175760405162461bcd60e51b815260040161086590612695565b6001600160a01b03166000908152601460205260409020805460ff19169055565b600f54600160b01b900460ff1681565b60166020526000908152604090205481565b6110626112e3565b6001600160a01b0316611073610e59565b6001600160a01b0316146110995760405162461bcd60e51b815260040161086590612632565b600f805460ff60a81b1916600160a81b1790556110b63084611b68565b6110c1600083611b68565b6010546110d99030906001600160a01b0316856112e7565b60105460405163f305d71960e01b81526001600160a01b039091169063f305d71990349061112a90309088906000908190730e2f0e4bacfd9f730e5e8e03c8edb4658cc8ae0f904290600401612275565b6060604051808303818588803b15801561114357600080fd5b505af1158015611157573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061117c9190612234565b5050600f54600160b01b900460ff1690506111b957600f805460ff60b01b1916600160b01b17905543600b8190556111b59082906128ce565b600c555b5050600f805460ff60a81b1916905550565b600b5481565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6112046112e3565b6001600160a01b0316611215610e59565b6001600160a01b03161461123b5760405162461bcd60e51b815260040161086590612632565b600f8054911515600160b81b0260ff60b81b19909216919091179055565b6112616112e3565b6001600160a01b0316611272610e59565b6001600160a01b0316146112985760405162461bcd60e51b815260040161086590612632565b6001600160a01b0381166112be5760405162461bcd60e51b815260040161086590612345565b6108e281611b01565b60006112dc836001600160a01b038416611bda565b9392505050565b3390565b6001600160a01b03831661130d5760405162461bcd60e51b8152600401610865906126cc565b6001600160a01b0382166113335760405162461bcd60e51b81526004016108659061238b565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061138e908590612847565b60405180910390a3505050565b6113a483610cbb565b806113b357506113b382610cbb565b156113c8576113c3838383611c24565b610ae3565b6113d183610b51565b156113ee5760405162461bcd60e51b8152600401610865906124e0565b6113f782610b51565b156114145760405162461bcd60e51b815260040161086590612472565b600060fa6114206107ee565b61142a91906128e6565b905080821115806114445750600f54600160a81b900460ff165b806114585750600f54600160a01b900460ff165b8061147057506010546001600160a01b038481169116145b61148c5760405162461bcd60e51b81526004016108659061230e565b600061149730610cd9565b90506815af1d78b58c4000008110158282106114b1578291505b8080156114c85750600f54600160a01b900460ff16155b80156114e25750600f546001600160a01b03878116911614155b80156114f75750600f54600160b81b900460ff165b1561150557611505826117c7565b61150f86876116b6565b61151985866116b6565b600f54849060009081906001600160a01b038a811691161480156115465750600f54600160b01b900460ff165b156115c85761155487611d02565b326000908152601660205260409020549194509250603c906115769042612925565b118061158b5750600f54600160a01b900460ff165b6115a75760405162461bcd60e51b81526004016108659061250e565b3260009081526016602052604090204290556115c38983611d64565b61160b565b600f546001600160a01b0389811691161480156115ee5750600f54600160b01b900460ff165b1561160b576115fc87611de9565b909350905061160b8982611df9565b611616898985611c24565b600f54600160b01b900460ff1680156116315750600c544311155b8015611643575061164132610cbb565b155b1561169657600f546001600160a01b031632141561168d57600f546001600160a01b038a81169116141561167f5761167a88611e3c565b611688565b61168889611e3c565b611696565b61169632611e3c565b505050505050505050565b60006112dc836001600160a01b038416611eea565b600f546001600160a01b03838116911614806116df57506010546001600160a01b038381169116145b156116e957610bb8565b6001600160a01b03821660009081526017602052604081205460075461170f9190612925565b90506000600a5461171f85610cd9565b6117299084612906565b61173391906128e6565b6007546001600160a01b03861660009081526017602052604090205590508061175d575050610bb8565b6001600160a01b038416600090815260186020526040812080548392906117859084906128ce565b90915550506040516001600160a01b0384169082156108fc029083906000818181858888f193505050501580156117c0573d6000803e3d6000fd5b5050505050565b600f805460ff60a01b1916600160a01b179055604080516002808252606082018352600092602083019080368337019050509050308160008151811061181d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561187157600080fd5b505afa158015611885573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118a991906120a3565b816001815181106118ca57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526010546118f091309116846112e7565b60105460405163791ac94760e01b815247916001600160a01b03169063791ac94790611929908690600090879030904290600401612850565b600060405180830381600087803b15801561194357600080fd5b505af1158015611957573d6000803e3d6000fd5b50505050600081476119699190612925565b9050600060085460095461197d91906128ce565b60095461198a9087612906565b61199491906128e6565b905060006119a28287612925565b905060006008546009546119b691906128ce565b6009546119c39086612906565b6119cd91906128e6565b905060006119db8286612925565b90508115611a705760006119f06002846128e6565b600d546040519192506001600160a01b03169082156108fc029083906000818181858888f19350505050158015611a2b573d6000803e3d6000fd5b50600e546001600160a01b03166108fc611a458386612925565b6040518115909202916000818181858888f19350505050158015611a6d573d6000803e3d6000fd5b50505b8360096000828254611a829190612925565b925050819055508260086000828254611a9b9190612925565b925050819055508060076000828254611ab491906128ce565b9091555050600f805460ff60a01b191690555050505050505050565b611ad981610e68565b15611af65760405162461bcd60e51b815260040161086590612695565b610bb86011826112c7565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006112dc836001600160a01b038416611f02565b80600a6000828254611b7a91906128ce565b90915550611b8a9050828261201f565b816001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611bce9190612847565b60405180910390a35050565b6000611be68383611eea565b611c1c575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107e2565b5060006107e2565b6001600160a01b038316611c4a5760405162461bcd60e51b8152600401610865906123cd565b6001600160a01b038216611c705760405162461bcd60e51b815260040161086590612404565b6000611c7b84610cd9565b905081811015611c9d5760405162461bcd60e51b8152600401610865906124a9565b611ca78483612063565b611cb1838361201f565b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611cf49190612847565b60405180910390a350505050565b60008080611d1260036064612925565b90506064611d208286612906565b611d2a91906128e6565b9250611d368385612925565b915083611d4383856128ce565b14611d5e57634e487b7160e01b600052600160045260246000fd5b50915091565b6001600160a01b038216611d8a5760405162461bcd60e51b8152600401610865906125b3565b611d95823083611c24565b8060086000828254611da791906128ce565b909155505060405130906001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611bce908590612847565b60008080611d1260026064612925565b6001600160a01b038216611e1f5760405162461bcd60e51b815260040161086590612803565b611e2a823083611c24565b8060096000828254611da791906128ce565b611e4581610b51565b15611e625760405162461bcd60e51b8152600401610865906127cc565b6010546001600160a01b0382811691161415611e905760405162461bcd60e51b815260040161086590612710565b600f546001600160a01b0382811691161415611ebe5760405162461bcd60e51b815260040161086590612752565b6001600160a01b0381166000908152601560205260409020805460ff191660011790556108e281611ad0565b60009081526001919091016020526040902054151590565b60008181526001830160205260408120548015612015576000611f26600183612925565b8554909150600090611f3a90600190612925565b9050818114611fbb576000866000018281548110611f6857634e487b7160e01b600052603260045260246000fd5b9060005260206000200154905080876000018481548110611f9957634e487b7160e01b600052603260045260246000fd5b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611fda57634e487b7160e01b600052603160045260246000fd5b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107e2565b60009150506107e2565b6001600160a01b0382166000908152601360205260409020546120439082906128ce565b6001600160a01b0390921660009081526013602052604090209190915550565b6001600160a01b038216600090815260136020526040902054612043908290612925565b600060208284031215612098578081fd5b81356112dc816129a8565b6000602082840312156120b4578081fd5b81516112dc816129a8565b600080604083850312156120d1578081fd5b82356120dc816129a8565b915060208301356120ec816129a8565b809150509250929050565b60008060006060848603121561210b578081fd5b8335612116816129a8565b92506020840135612126816129a8565b929592945050506040919091013590565b60008060408385031215612149578182fd5b8235612154816129a8565b946020939093013593505050565b60008060208385031215612174578182fd5b823567ffffffffffffffff8082111561218b578384fd5b818501915085601f83011261219e578384fd5b8135818111156121ac578485fd5b86602080830285010111156121bf578485fd5b60209290920196919550909350505050565b6000602082840312156121e2578081fd5b813580151581146112dc578182fd5b600060208284031215612202578081fd5b5035919050565b60008060006060848603121561221d578283fd5b505081359360208301359350604090920135919050565b600080600060608486031215612248578283fd5b8351925060208401519150604084015190509250925092565b6001600160a01b0391909116815260200190565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b901515815260200190565b6000602080835283518082850152825b818110156122e7578581018301518582016040015282016122cb565b818111156122f85783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601e908201527f45786365656473206d6178207472616e73616374696f6e20616d6f756e740000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b6020808252601e908201527f7472616e736665722066726f6d20746865207a65726f20616464726573730000604082015260600190565b6020808252601c908201527f7472616e7366657220746f20746865207a65726f206164647265737300000000604082015260600190565b60208082526017908201527f4163636f756e74206d75737420626520666c6167676564000000000000000000604082015260600190565b60208082526017908201527f526563697069656e74206c6f636b656420617320626f74000000000000000000604082015260600190565b6020808252601f908201527f7472616e7366657220616d6f756e7420657863656564732062616c616e636500604082015260600190565b60208082526014908201527314d95b99195c881b1bd8dad95908185cc8189bdd60621b604082015260600190565b6020808252601d908201527f68697420636f6f6c646f776e2c2074727920616761696e206c61746572000000604082015260600190565b60208082526018908201527f4163636f756e74206d757374206265206578636c756465640000000000000000604082015260600190565b60208082526019908201527f4578636c756465642066726f6d207265666c656374696f6e7300000000000000604082015260600190565b6020808252601d908201527f7265666c6563742066726f6d20746865207a65726f2061646472657373000000604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601490820152731059191c995cdcc81b9bdd08195e18db1d59195960621b604082015260600190565b6020808252601c908201527f4163636f756e74206d757374206e6f74206265206578636c7564656400000000604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526022908201527f4163636f756e74206d757374206e6f7420626520756e697377617020726f757460408201526132b960f11b606082015260800190565b6020808252818101527f4163636f756e74206d757374206e6f7420626520756e69737761702070616972604082015260600190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b6020808252601b908201527f4163636f756e74206d757374206e6f7420626520666c61676765640000000000604082015260600190565b60208082526024908201527f74616b65206d61726b6574696e672066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b90815260200190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b8181101561289f5784516001600160a01b03168352938301939183019160010161287a565b50506001600160a01b03969096166060850152505050608001529392505050565b60ff91909116815260200190565b600082198211156128e1576128e1612992565b500190565b60008261290157634e487b7160e01b81526012600452602481fd5b500490565b600081600019048311821515161561292057612920612992565b500290565b60008282101561293757612937612992565b500390565b60028104600182168061295057607f821691505b6020821081141561297157634e487b7160e01b600052602260045260246000fd5b50919050565b600060001982141561298b5761298b612992565b5060010190565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b03811681146108e257600080fdfea264697066735822122060a5e4a52787f04765b1f0c3cd8862d99d36f3b25e8aee2a292d0ac3a3c4092b64736f6c63430008000033

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

0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d000000000000000000000000350a1ac0ce104d0f9fd4f2c80931d04052de3ff3000000000000000000000000350a1ac0ce104d0f9fd4f2c80931d04052de3ff3

-----Decoded View---------------
Arg [0] : uniswapFactory (address): 0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f
Arg [1] : uniswapRouter (address): 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
Arg [2] : marketing (address): 0x350A1Ac0Ce104D0f9fd4f2c80931D04052DE3Ff3
Arg [3] : treasury (address): 0x350A1Ac0Ce104D0f9fd4f2c80931D04052DE3Ff3

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000005c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f
Arg [1] : 0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d
Arg [2] : 000000000000000000000000350a1ac0ce104d0f9fd4f2c80931d04052de3ff3
Arg [3] : 000000000000000000000000350a1ac0ce104d0f9fd4f2c80931d04052de3ff3


Deployed Bytecode Sourcemap

36697:13868:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14253:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16420:169;;;;;;;;;;-1:-1:-1;16420:169:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;37484:29::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;50206:100::-;;;;;;;;;;;;;:::i;17071:492::-;;;;;;;;;;-1:-1:-1;17071:492:0;;;;;:::i;:::-;;:::i;45799:256::-;;;;;;;;;;-1:-1:-1;45799:256:0;;;;;:::i;:::-;;:::i;:::-;;15215:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;37448:29::-;;;;;;;;;;;;;:::i;45595:196::-;;;;;;;;;;;;;:::i;41951:207::-;;;;;;;;;;-1:-1:-1;41951:207:0;;;;;:::i;:::-;;:::i;41259:328::-;;;;;;;;;;-1:-1:-1;41259:328:0;;;;;:::i;:::-;;:::i;17972:215::-;;;;;;;;;;-1:-1:-1;17972:215:0;;;;;:::i;:::-;;:::i;38057:43::-;;;;;;;;;;-1:-1:-1;38057:43:0;;;;;:::i;:::-;;:::i;41064:98::-;;;;;;;;;;-1:-1:-1;41064:98:0;;;;;:::i;:::-;;:::i;47294:329::-;;;;;;;;;;;;;:::i;37682:37::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;39770:90::-;;;:::i;40679:183::-;;;;;;;;;;-1:-1:-1;40679:183:0;;;;;:::i;:::-;;:::i;40230:117::-;;;;;;;;;;-1:-1:-1;40230:117:0;;;;;:::i;:::-;;:::i;37407:33::-;;;;;;;;;;;;;:::i;40558:113::-;;;;;;;;;;-1:-1:-1;40558:113:0;;;;;:::i;:::-;;:::i;42166:172::-;;;;;;;;;;-1:-1:-1;42166:172:0;;;;;:::i;:::-;;:::i;2605:94::-;;;;;;;;;;;;;:::i;37637:38::-;;;;;;;;;;;;;:::i;49987:109::-;;;;;;;;;;-1:-1:-1;49987:109:0;;;;;:::i;:::-;;:::i;47631:209::-;;;;;;;;;;;;;:::i;1953:87::-;;;;;;;;;;;;;:::i;39868:141::-;;;;;;;;;;-1:-1:-1;39868:141:0;;;;;:::i;:::-;;:::i;38261:52::-;;;;;;;;;;-1:-1:-1;38261:52:0;;;;;:::i;:::-;;:::i;38200:54::-;;;;;;;;;;-1:-1:-1;38200:54:0;;;;;:::i;:::-;;:::i;14472:104::-;;;;;;;;;;;;;:::i;40017:205::-;;;;;;;;;;-1:-1:-1;40017:205:0;;;;;:::i;:::-;;:::i;18690:413::-;;;;;;;;;;-1:-1:-1;18690:413:0;;;;;:::i;:::-;;:::i;37732:19::-;;;;;;;;;;;;;:::i;15884:175::-;;;;;;;;;;-1:-1:-1;15884:175:0;;;;;:::i;:::-;;:::i;40870:186::-;;;;;;;;;;-1:-1:-1;40870:186:0;;;;;:::i;:::-;;:::i;37822:25::-;;;;;;;;;;;;;:::i;38151:42::-;;;;;;;;;;-1:-1:-1;38151:42:0;;;;;:::i;:::-;;:::i;39011:751::-;;;;;;:::i;:::-;;:::i;37566:32::-;;;;;;;;;;;;;:::i;16122:151::-;;;;;;;;;;-1:-1:-1;16122:151:0;;;;;:::i;:::-;;:::i;50104:94::-;;;;;;;;;;-1:-1:-1;50104:94:0;;;;;:::i;:::-;;:::i;2862:192::-;;;;;;;;;;-1:-1:-1;2862:192:0;;;;;:::i;:::-;;:::i;14253:100::-;14307:13;14340:5;14333:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14253:100;:::o;16420:169::-;16503:4;16520:39;16529:12;:10;:12::i;:::-;16543:7;16552:6;16520:8;:39::i;:::-;-1:-1:-1;16577:4:0;16420:169;;;;;:::o;37484:29::-;;;;:::o;50206:100::-;50286:12;;50206:100;:::o;17071:492::-;17211:4;17228:36;17238:6;17246:9;17257:6;17228:9;:36::i;:::-;-1:-1:-1;;;;;17304:19:0;;17277:24;17304:19;;;:11;:19;;;;;17277:24;17324:12;:10;:12::i;:::-;-1:-1:-1;;;;;17304:33:0;-1:-1:-1;;;;;17304:33:0;;;;;;;;;;;;;17277:60;;17376:6;17356:16;:26;;17348:79;;;;-1:-1:-1;;;17348:79:0;;;;;;;:::i;:::-;;;;;;;;;17463:57;17472:6;17480:12;:10;:12::i;:::-;17513:6;17494:16;:25;17463:8;:57::i;:::-;-1:-1:-1;17551:4:0;;17071:492;-1:-1:-1;;;;17071:492:0:o;45799:256::-;45890:15;;-1:-1:-1;;;;;45890:15:0;45876:10;:29;45867:39;;;;;;45925:38;:23;45958:4;45925:32;:38::i;:::-;45917:71;;;;-1:-1:-1;;;45917:71:0;;;;;;;:::i;:::-;46030:15;;45999:48;;46016:4;;-1:-1:-1;;;;;46030:15:0;45999:16;:48::i;:::-;45799:256;:::o;15215:93::-;15298:2;15215:93;:::o;37448:29::-;;;;:::o;45595:196::-;45649:44;:23;45682:10;45649:32;:44::i;:::-;45648:45;45640:83;;;;-1:-1:-1;;;45640:83:0;;;;;;;:::i;:::-;45734:49;45751:10;45771;45734:16;:49::i;:::-;45595:196::o;41951:207::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;42030:14:::1;42036:7;42030:5;:14::i;:::-;42022:50;;;;-1:-1:-1::0;;;42022:50:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;42085:13:0;::::1;42101:5;42085:13:::0;;;:4:::1;:13;::::0;;;;:21;;-1:-1:-1;;42085:21:0::1;::::0;;42117:33:::1;42090:7:::0;42117:24:::1;:33::i;41259:328::-:0;41348:15;;-1:-1:-1;;;;;41348:15:0;41334:10;:29;41325:39;;;;;;41379:9;41375:205;41394:18;;;41375:205;;;41452:5;41433:4;:16;41438:7;;41446:1;41438:10;;;;;-1:-1:-1;;;41438:10:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41433:16:0;;;;;;;;;;;;-1:-1:-1;41433:16:0;:24;;-1:-1:-1;;41433:24:0;;;;;;;;;;41472:36;41497:7;;41505:1;41497:10;;;;;-1:-1:-1;;;41497:10:0;;;;;;;;;;;;;;;;;;;;;;:::i;41472:36::-;41549:5;41523:11;:23;41535:7;;41543:1;41535:10;;;;;-1:-1:-1;;;41535:10:0;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;41523:23:0;;;;;;;;;;;;-1:-1:-1;41523:23:0;:31;;-1:-1:-1;;41523:31:0;;;;;;;;;;41414:3;;;;:::i;:::-;;;;41375:205;;;;41259:328;;:::o;17972:215::-;18060:4;18077:80;18086:12;:10;:12::i;:::-;18100:7;18146:10;18109:11;:25;18121:12;:10;:12::i;:::-;-1:-1:-1;;;;;18109:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;18109:25:0;;;:34;;;;;;;;;;:47;;;;:::i;:::-;18077:8;:80::i;38057:43::-;;;;;;;;;;;;;;;:::o;41064:98::-;-1:-1:-1;;;;;41141:13:0;41117:4;41141:13;;;:4;:13;;;;;;;;;41064:98::o;47294:329::-;47331:19;47369:3;47353:13;:11;:13::i;:::-;:19;;;;:::i;:::-;47331:41;;47383:28;47414:24;47432:4;47414:9;:24::i;:::-;47383:55;;47478:11;47454:20;:35;47451:101;;-1:-1:-1;47529:11:0;47451:101;47569:7;;-1:-1:-1;;;47569:7:0;;;;47564:41;;47578:27;47584:20;47578:5;:27::i;:::-;47294:329;;:::o;37682:37::-;;;-1:-1:-1;;;;;37682:37:0;;:::o;39770:90::-;39843:9;39821:18;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;39770:90:0:o;40679:183::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;40759:22:::1;40773:7;40759:13;:22::i;:::-;40758:23;40750:64;;;;-1:-1:-1::0;;;40750:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40827:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;40827:27:0::1;40850:4;40827:27;::::0;;40679:183::o;40230:117::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;40308:31:::1;40331:7;40308:22;:31::i;37407:33::-:0;;;;:::o;40558:113::-;-1:-1:-1;;;;;40643:20:0;40619:4;40643:20;;;:11;:20;;;;;;;;;40558:113::o;42166:172::-;-1:-1:-1;;;;;42312:18:0;42285:7;42312:18;;;:9;:18;;;;;;;42166:172::o;2605:94::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;2670:21:::1;2688:1;2670:9;:21::i;37637:38::-:0;;;-1:-1:-1;;;;;37637:38:0;;:::o;49987:109::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;50062:12:::1;:26:::0;49987:109::o;47631:209::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;47684:13:::1;47700:25;47724:1;47700:21;:25;:::i;:::-;47736:15;::::0;:31:::1;::::0;47684:41;;-1:-1:-1;;;;;;47736:15:0::1;::::0;:31;::::1;;;::::0;47684:41;;47736:15:::1;:31:::0;:15;:31;47684:41;47736:15;:31;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;47778:14:0::1;::::0;-1:-1:-1;;;;;47778:14:0::1;:54;47802:29;47826:5:::0;47802:21:::1;:29;:::i;:::-;47778:54;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;1953:87:::0;2026:6;;-1:-1:-1;;;;;2026:6:0;1953:87;:::o;39868:141::-;39936:4;39960:41;:23;39993:7;39960:32;:41::i;38261:52::-;;;;;;;;;;;;;:::o;38200:54::-;;;;;;;;;;;;;:::o;14472:104::-;14528:13;14561:7;14554:14;;;;;:::i;40017:205::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;40106:29:::1;40127:7;40106:20;:29::i;:::-;40098:66;;;;-1:-1:-1::0;;;40098:66:0::1;;;;;;;:::i;:::-;40175:39;:23;40206:7:::0;40175:30:::1;:39::i;18690:413::-:0;18783:4;18800:24;18827:11;:25;18839:12;:10;:12::i;:::-;-1:-1:-1;;;;;18827:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;18827:25:0;;;:34;;;;;;;;;;;-1:-1:-1;18880:35:0;;;;18872:85;;;;-1:-1:-1;;;18872:85:0;;;;;;;:::i;:::-;18993:67;19002:12;:10;:12::i;:::-;19016:7;19044:15;19025:16;:34;18993:8;:67::i;:::-;-1:-1:-1;19091:4:0;;18690:413;-1:-1:-1;;;18690:413:0:o;37732:19::-;;;-1:-1:-1;;;;;37732:19:0;;:::o;15884:175::-;15970:4;15987:42;15997:12;:10;:12::i;:::-;16011:9;16022:6;15987:9;:42::i;40870:186::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;40952:22:::1;40966:7;40952:13;:22::i;:::-;40944:63;;;;-1:-1:-1::0;;;40944:63:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;41020:20:0::1;41043:5;41020:20:::0;;;:11:::1;:20;::::0;;;;:28;;-1:-1:-1;;41020:28:0::1;::::0;;40870:186::o;37822:25::-;;;-1:-1:-1;;;37822:25:0;;;;;:::o;38151:42::-;;;;;;;;;;;;;:::o;39011:751::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;36928:15:::1;:22:::0;;-1:-1:-1;;;;36928:22:0::1;-1:-1:-1::0;;;36928:22:0::1;::::0;;39139:32:::2;39157:4;39164:6:::0;39139:9:::2;:32::i;:::-;39182:69;39200:42;39245:5;39182:9;:69::i;:::-;39304:7;::::0;39272:49:::2;::::0;39289:4:::2;::::0;-1:-1:-1;;;;;39304:7:0::2;39314:6:::0;39272:8:::2;:49::i;:::-;39334:7;::::0;:246:::2;::::0;-1:-1:-1;;;39334:246:0;;-1:-1:-1;;;;;39334:7:0;;::::2;::::0;:23:::2;::::0;39365:9:::2;::::0;39334:246:::2;::::0;39398:4:::2;::::0;39418:6;;39334:7:::2;::::0;;;37280:42:::2;::::0;39554:15:::2;::::0;39334:246:::2;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;39598:13:0::2;::::0;-1:-1:-1;;;39598:13:0;::::2;;;::::0;-1:-1:-1;39593:162:0::2;;39628:13;:20:::0;;-1:-1:-1;;;;39628:20:0::2;-1:-1:-1::0;;;39628:20:0::2;::::0;;39683:12:::2;39663:17;:32:::0;;;39720:23:::2;::::0;39740:3;;39720:23:::2;:::i;:::-;39710:7;:33:::0;39593:162:::2;-1:-1:-1::0;;36973:15:0::1;:23:::0;;-1:-1:-1;;;;36973:23:0::1;::::0;;-1:-1:-1;39011:751:0:o;37566:32::-;;;;:::o;16122:151::-;-1:-1:-1;;;;;16238:18:0;;;16211:7;16238:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16122:151::o;50104:94::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;50170:9:::1;:20:::0;;;::::1;;-1:-1:-1::0;;;50170:20:0::1;-1:-1:-1::0;;;;50170:20:0;;::::1;::::0;;;::::1;::::0;;50104:94::o;2862:192::-;2184:12;:10;:12::i;:::-;-1:-1:-1;;;;;2173:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2173:23:0;;2165:68;;;;-1:-1:-1;;;2165:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2951:22:0;::::1;2943:73;;;;-1:-1:-1::0;;;2943:73:0::1;;;;;;;:::i;:::-;3027:19;3037:8;3027:9;:19::i;31956:152::-:0;32026:4;32050:50;32055:3;-1:-1:-1;;;;;32075:23:0;;32050:4;:50::i;:::-;32043:57;31956:152;-1:-1:-1;;;31956:152:0:o;778:98::-;858:10;778:98;:::o;22378:380::-;-1:-1:-1;;;;;22514:19:0;;22506:68;;;;-1:-1:-1;;;22506:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22593:21:0;;22585:68;;;;-1:-1:-1;;;22585:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22666:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;22718:32;;;;;22696:6;;22718:32;:::i;:::-;;;;;;;;22378:380;;;:::o;42627:2462::-;42730:21;42744:6;42730:13;:21::i;:::-;:49;;;;42755:24;42769:9;42755:13;:24::i;:::-;42726:142;;;42796:39;42809:6;42817:9;42828:6;42796:12;:39::i;:::-;42850:7;;42726:142;42889:13;42895:6;42889:5;:13::i;:::-;42888:14;42880:47;;;;-1:-1:-1;;;42880:47:0;;;;;;;:::i;:::-;42947:16;42953:9;42947:5;:16::i;:::-;42946:17;42938:53;;;;-1:-1:-1;;;42938:53:0;;;;;;;:::i;:::-;43002:19;43040:3;43024:13;:11;:13::i;:::-;:19;;;;:::i;:::-;43002:41;;43072:11;43062:6;:21;;:40;;;-1:-1:-1;43087:15:0;;-1:-1:-1;;;43087:15:0;;;;43062:40;:51;;;-1:-1:-1;43106:7:0;;-1:-1:-1;;;43106:7:0;;;;43062:51;:84;;;-1:-1:-1;43138:7:0;;-1:-1:-1;;;;;43117:29:0;;;43138:7;;43117:29;43062:84;43054:127;;;;-1:-1:-1;;;43054:127:0;;;;;;;:::i;:::-;43289:28;43320:24;43338:4;43320:9;:24::i;:::-;43289:55;-1:-1:-1;37226:9:0;43382:36;;;43434:35;;;43431:101;;43509:11;43486:34;;43431:101;43562:19;:44;;;;-1:-1:-1;43599:7:0;;-1:-1:-1;;;43599:7:0;;;;43598:8;43562:44;:75;;;;-1:-1:-1;43633:4:0;;-1:-1:-1;;;;;43623:14:0;;;43633:4;;43623:14;;43562:75;:101;;;;-1:-1:-1;43654:9:0;;-1:-1:-1;;;43654:9:0;;;;43562:101;43544:185;;;43690:27;43696:20;43690:5;:27::i;:::-;43766:41;43783:6;43799;43766:16;:41::i;:::-;43818:47;43835:9;43854;43818:16;:47::i;:::-;43994:4;;43893:6;;43878:12;;;;-1:-1:-1;;;;;43984:14:0;;;43994:4;;43984:14;:31;;;;-1:-1:-1;44002:13:0;;-1:-1:-1;;;44002:13:0;;;;43984:31;43980:615;;;44094:25;44112:6;44094:17;:25::i;:::-;44197:9;44189:18;;;;:7;:18;;;;;;44076:43;;-1:-1:-1;44076:43:0;-1:-1:-1;37168:10:0;;44171:36;;:15;:36;:::i;:::-;:47;:58;;;-1:-1:-1;44222:7:0;;-1:-1:-1;;;44222:7:0;;;;44171:58;44163:100;;;;-1:-1:-1;;;44163:100:0;;;;;;;:::i;:::-;44286:9;44278:18;;;;:7;:18;;;;;44299:15;44278:36;;44329:25;44338:6;44346:7;44329:8;:25::i;:::-;43980:615;;;44404:4;;-1:-1:-1;;;;;44391:17:0;;;44404:4;;44391:17;:34;;;;-1:-1:-1;44412:13:0;;-1:-1:-1;;;44412:13:0;;;;44391:34;44387:208;;;44509:26;44528:6;44509:18;:26::i;:::-;44488:47;;-1:-1:-1;44488:47:0;-1:-1:-1;44550:33:0;44565:6;44488:47;44550:14;:33::i;:::-;44652:37;44665:6;44673:9;44684:4;44652:12;:37::i;:::-;44706:13;;-1:-1:-1;;;44706:13:0;;;;:40;;;;;44739:7;;44723:12;:23;;44706:40;:69;;;;;44751:24;44765:9;44751:13;:24::i;:::-;44750:25;44706:69;44702:380;;;44817:4;;-1:-1:-1;;;;;44817:4:0;44796:9;:26;44792:279;;;44865:4;;-1:-1:-1;;;;;44847:23:0;;;44865:4;;44847:23;44843:154;;;44895:18;44903:9;44895:7;:18::i;:::-;44843:154;;;44962:15;44970:6;44962:7;:15::i;:::-;44792:279;;;45037:18;45045:9;45037:7;:18::i;:::-;42627:2462;;;;;;;;;:::o;32528:167::-;32608:4;32632:55;32642:3;-1:-1:-1;;;;;32662:23:0;;32632:9;:55::i;45097:490::-;45189:4;;-1:-1:-1;;;;;45181:12:0;;;45189:4;;45181:12;;:40;;-1:-1:-1;45213:7:0;;-1:-1:-1;;;;;45197:24:0;;;45213:7;;45197:24;45181:40;45177:53;;;45223:7;;45177:53;-1:-1:-1;;;;;45289:25:0;;45242:23;45289:25;;;:19;:25;;;;;;45268:18;;:46;;45289:25;45268:46;:::i;:::-;45242:72;;45325:12;45376;;45358:15;45368:4;45358:9;:15::i;:::-;45340:33;;:15;:33;:::i;:::-;:48;;;;:::i;:::-;45429:18;;-1:-1:-1;;;;;45401:25:0;;;;;;:19;:25;;;;;:46;45325:63;-1:-1:-1;45462:9:0;45458:52;;45492:7;;;;45458:52;-1:-1:-1;;;;;45520:23:0;;;;;;:17;:23;;;;;:31;;45547:4;;45520:23;:31;;45547:4;;45520:31;:::i;:::-;;;;-1:-1:-1;;45562:17:0;;-1:-1:-1;;;;;45562:11:0;;;:17;;;;;45574:4;;45562:17;;;;45574:4;45562:11;:17;;;;;;;;;;;;;;;;;;;;;45097:490;;;;:::o;46063:1223::-;36827:7;:14;;-1:-1:-1;;;;36827:14:0;-1:-1:-1;;;36827:14:0;;;46147:16:::1;::::0;;46161:1:::1;46147:16:::0;;;;;::::1;::::0;;-1:-1:-1;;46147:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;46147:16:0::1;46123:40;;46192:4;46174;46179:1;46174:7;;;;;;-1:-1:-1::0;;;46174:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;46174:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;46218:7:::1;::::0;:14:::1;::::0;;-1:-1:-1;;;46218:14:0;;;;:7;;;::::1;::::0;:12:::1;::::0;:14:::1;::::0;;::::1;::::0;46174:7;;46218:14;;;;;:7;:14;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46208:4;46213:1;46208:7;;;;;;-1:-1:-1::0;;;46208:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;46208:24:0;;::::1;:7;::::0;;::::1;::::0;;;;;:24;46277:7:::1;::::0;46245:49:::1;::::0;46262:4:::1;::::0;46277:7:::1;46287:6:::0;46245:8:::1;:49::i;:::-;46370:7;::::0;:183:::1;::::0;-1:-1:-1;;;46370:183:0;;46336:21:::1;::::0;-1:-1:-1;;;;;46370:7:0::1;::::0;:58:::1;::::0;:183:::1;::::0;46443:6;;46307:26:::1;::::0;46480:4;;46507::::1;::::0;46527:15:::1;::::0;46370:183:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;46566:18;46611;46587:21;:42;;;;:::i;:::-;46566:63;;46642:23;46712:14;;46695;;:31;;;;:::i;:::-;46677:14;::::0;46668:23:::1;::::0;:6;:23:::1;:::i;:::-;:59;;;;:::i;:::-;46642:85:::0;-1:-1:-1;46738:23:0::1;46764:24;46642:85:::0;46764:6;:24:::1;:::i;:::-;46738:50;;46801:20;46872:14;;46855;;:31;;;;:::i;:::-;46837:14;::::0;46824:27:::1;::::0;:10;:27:::1;:::i;:::-;:63;;;;:::i;:::-;46801:86:::0;-1:-1:-1;46898:20:0::1;46921:25;46801:86:::0;46921:10;:25:::1;:::i;:::-;46898:48:::0;-1:-1:-1;46963:16:0;;46959:187:::1;;46996:13;47012:16;47027:1;47012:12:::0;:16:::1;:::i;:::-;47043:15;::::0;:31:::1;::::0;46996:32;;-1:-1:-1;;;;;;47043:15:0::1;::::0;:31;::::1;;;::::0;46996:32;;47043:15:::1;:31:::0;:15;:31;46996:32;47043:15;:31;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;47089:14:0::1;::::0;-1:-1:-1;;;;;47089:14:0::1;:45;47113:20;47128:5:::0;47113:12;:20:::1;:::i;:::-;47089:45;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;46959:187;;47174:15;47156:14;;:33;;;;;;;:::i;:::-;;;;;;;;47218:15;47200:14;;:33;;;;;;;:::i;:::-;;;;;;;;47266:12;47244:18;;:34;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;36864:7:0;:15;;-1:-1:-1;;;;36864:15:0;;;-1:-1:-1;;;;;;;;46063:1223:0:o;40355:195::-;40433:29;40454:7;40433:20;:29::i;:::-;40432:30;40424:71;;;;-1:-1:-1;;;40424:71:0;;;;;;;:::i;:::-;40506:36;:23;40534:7;40506:27;:36::i;3062:173::-;3137:6;;;-1:-1:-1;;;;;3154:17:0;;;-1:-1:-1;;;;;;3154:17:0;;;;;;;3187:40;;3137:6;;;3154:17;3137:6;;3187:40;;3118:16;;3187:40;3062:173;;:::o;32284:158::-;32357:4;32381:53;32389:3;-1:-1:-1;;;;;32409:23:0;;32381:7;:53::i;50316:203::-;50413:6;50397:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;50430:28:0;;-1:-1:-1;50442:7:0;50451:6;50430:11;:28::i;:::-;50495:7;-1:-1:-1;;;;;50474:37:0;50491:1;-1:-1:-1;;;;;50474:37:0;;50504:6;50474:37;;;;;;:::i;:::-;;;;;;;;50316:203;;:::o;25871:414::-;25934:4;25956:21;25966:3;25971:5;25956:9;:21::i;:::-;25951:327;;-1:-1:-1;25994:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;26177:18;;26155:19;;;:12;;;:19;;;;;;:40;;;;26210:11;;25951:327;-1:-1:-1;26261:5:0;26254:12;;49435:544;-1:-1:-1;;;;;49536:20:0;;49528:63;;;;-1:-1:-1;;;49528:63:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;49610:23:0;;49602:64;;;;-1:-1:-1;;;49602:64:0;;;;;;;:::i;:::-;49679:21;49703:17;49713:6;49703:9;:17::i;:::-;49679:41;;49756:6;49739:13;:23;;49731:67;;;;-1:-1:-1;;;49731:67:0;;;;;;;:::i;:::-;49834:32;49851:6;49859;49834:16;:32::i;:::-;49888:30;49900:9;49911:6;49888:11;:30::i;:::-;49953:9;-1:-1:-1;;;;;49936:35:0;49945:6;-1:-1:-1;;;;;49936:35:0;;49964:6;49936:35;;;;;;:::i;:::-;;;;;;;;49435:544;;;;:::o;48552:423::-;48618:12;;;48701:18;37123:1;48701:3;:18;:::i;:::-;48682:37;-1:-1:-1;48810:3:0;48789:17;48798:8;48789:6;:17;:::i;:::-;48788:25;;;;:::i;:::-;48781:32;-1:-1:-1;48860:13:0;48781:32;48860:6;:13;:::i;:::-;48850:23;-1:-1:-1;48960:6:0;48942:14;48949:7;48942:4;:14;:::i;:::-;:24;48935:32;;-1:-1:-1;;;48935:32:0;;;;;;;;;48552:423;;;;:::o;47892:341::-;-1:-1:-1;;;;;47971:21:0;;47963:63;;;;-1:-1:-1;;;47963:63:0;;;;;;;:::i;:::-;48090:44;48103:7;48120:4;48127:6;48090:12;:44::i;:::-;48163:6;48145:14;;:24;;;;;;;:::i;:::-;;;;-1:-1:-1;;48185:40:0;;48211:4;;-1:-1:-1;;;;;48185:40:0;;;;;;;48218:6;;48185:40;:::i;48983:403::-;49050:12;;;49137:20;37073:1;49137:3;:20;:::i;48241:303::-;-1:-1:-1;;;;;48326:21:0;;48318:70;;;;-1:-1:-1;;;48318:70:0;;;;;;;:::i;:::-;48401:44;48414:7;48431:4;48438:6;48401:12;:44::i;:::-;48474:6;48456:14;;:24;;;;;;;:::i;41595:348::-;41658:14;41664:7;41658:5;:14::i;:::-;41657:15;41649:55;;;;-1:-1:-1;;;41649:55:0;;;;;;;:::i;:::-;41742:7;;-1:-1:-1;;;;;41723:27:0;;;41742:7;;41723:27;;41715:74;;;;-1:-1:-1;;;41715:74:0;;;;;;;:::i;:::-;41819:4;;-1:-1:-1;;;;;41808:15:0;;;41819:4;;41808:15;;41800:60;;;;-1:-1:-1;;;41800:60:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41873:13:0;;;;;;:4;:13;;;;;:20;;-1:-1:-1;;41873:20:0;41889:4;41873:20;;;41904:31;41878:7;41904:22;:31::i;27967:129::-;28040:4;28064:19;;;:12;;;;;:19;;;;;;:24;;;27967:129::o;26461:1420::-;26527:4;26666:19;;;:12;;;:19;;;;;;26702:15;;26698:1176;;27077:21;27101:14;27114:1;27101:10;:14;:::i;:::-;27150:18;;27077:38;;-1:-1:-1;27130:17:0;;27150:22;;27171:1;;27150:22;:::i;:::-;27130:42;;27206:13;27193:9;:26;27189:405;;27240:17;27260:3;:11;;27272:9;27260:22;;;;;;-1:-1:-1;;;27260:22:0;;;;;;;;;;;;;;;;;27240:42;;27414:9;27385:3;:11;;27397:13;27385:26;;;;;;-1:-1:-1;;;27385:26:0;;;;;;;;;;;;;;;;;;;;:38;;;;27499:23;;;:12;;;:23;;;;;:36;;;27189:405;27675:17;;:3;;:17;;;-1:-1:-1;;;27675:17:0;;;;;;;;;;;;;;;;;;;;;;;;;;27770:3;:12;;:19;27783:5;27770:19;;;;;;;;;;;27763:26;;;27813:4;27806:11;;;;;;;26698:1176;27857:5;27850:12;;;;;42346:130;-1:-1:-1;;;;;42441:18:0;;;;;;:9;:18;;;;;;:27;;42462:6;;42441:27;:::i;:::-;-1:-1:-1;;;;;42420:18:0;;;;;;;:9;:18;;;;;:48;;;;-1:-1:-1;42346:130:0:o;42484:135::-;-1:-1:-1;;;;;42584:18:0;;;;;;:9;:18;;;;;;:27;;42605:6;;42584:27;:::i;14:259:1:-;;126:2;114:9;105:7;101:23;97:32;94:2;;;147:6;139;132:22;94:2;191:9;178:23;210:33;237:5;210:33;:::i;278:263::-;;401:2;389:9;380:7;376:23;372:32;369:2;;;422:6;414;407:22;369:2;459:9;453:16;478:33;505:5;478:33;:::i;546:402::-;;;675:2;663:9;654:7;650:23;646:32;643:2;;;696:6;688;681:22;643:2;740:9;727:23;759:33;786:5;759:33;:::i;:::-;811:5;-1:-1:-1;868:2:1;853:18;;840:32;881:35;840:32;881:35;:::i;:::-;935:7;925:17;;;633:315;;;;;:::o;953:470::-;;;;1099:2;1087:9;1078:7;1074:23;1070:32;1067:2;;;1120:6;1112;1105:22;1067:2;1164:9;1151:23;1183:33;1210:5;1183:33;:::i;:::-;1235:5;-1:-1:-1;1292:2:1;1277:18;;1264:32;1305:35;1264:32;1305:35;:::i;:::-;1057:366;;1359:7;;-1:-1:-1;;;1413:2:1;1398:18;;;;1385:32;;1057:366::o;1428:327::-;;;1557:2;1545:9;1536:7;1532:23;1528:32;1525:2;;;1578:6;1570;1563:22;1525:2;1622:9;1609:23;1641:33;1668:5;1641:33;:::i;:::-;1693:5;1745:2;1730:18;;;;1717:32;;-1:-1:-1;;;1515:240:1:o;1760:666::-;;;1907:2;1895:9;1886:7;1882:23;1878:32;1875:2;;;1928:6;1920;1913:22;1875:2;1973:9;1960:23;2002:18;2043:2;2035:6;2032:14;2029:2;;;2064:6;2056;2049:22;2029:2;2107:6;2096:9;2092:22;2082:32;;2152:7;2145:4;2141:2;2137:13;2133:27;2123:2;;2179:6;2171;2164:22;2123:2;2224;2211:16;2250:2;2242:6;2239:14;2236:2;;;2271:6;2263;2256:22;2236:2;2330:7;2325:2;2319;2311:6;2307:15;2303:2;2299:24;2295:33;2292:46;2289:2;;;2356:6;2348;2341:22;2289:2;2392;2384:11;;;;;2414:6;;-1:-1:-1;1865:561:1;;-1:-1:-1;;;;1865:561:1:o;2431:293::-;;2540:2;2528:9;2519:7;2515:23;2511:32;2508:2;;;2561:6;2553;2546:22;2508:2;2605:9;2592:23;2658:5;2651:13;2644:21;2637:5;2634:32;2624:2;;2685:6;2677;2670:22;2729:190;;2841:2;2829:9;2820:7;2816:23;2812:32;2809:2;;;2862:6;2854;2847:22;2809:2;-1:-1:-1;2890:23:1;;2799:120;-1:-1:-1;2799:120:1:o;2924:326::-;;;;3070:2;3058:9;3049:7;3045:23;3041:32;3038:2;;;3091:6;3083;3076:22;3038:2;-1:-1:-1;;3119:23:1;;;3189:2;3174:18;;3161:32;;-1:-1:-1;3240:2:1;3225:18;;;3212:32;;3028:222;-1:-1:-1;3028:222:1:o;3255:316::-;;;;3412:2;3400:9;3391:7;3387:23;3383:32;3380:2;;;3433:6;3425;3418:22;3380:2;3467:9;3461:16;3451:26;;3517:2;3506:9;3502:18;3496:25;3486:35;;3561:2;3550:9;3546:18;3540:25;3530:35;;3370:201;;;;;:::o;3576:203::-;-1:-1:-1;;;;;3740:32:1;;;;3722:51;;3710:2;3695:18;;3677:102::o;4008:607::-;-1:-1:-1;;;;;4367:15:1;;;4349:34;;4414:2;4399:18;;4392:34;;;;4457:2;4442:18;;4435:34;;;;4500:2;4485:18;;4478:34;;;;4549:15;;;4543:3;4528:19;;4521:44;4329:3;4581:19;;4574:35;;;;4298:3;4283:19;;4265:350::o;4620:187::-;4785:14;;4778:22;4760:41;;4748:2;4733:18;;4715:92::o;4812:603::-;;4953:2;4982;4971:9;4964:21;5014:6;5008:13;5057:6;5052:2;5041:9;5037:18;5030:34;5082:4;5095:140;5109:6;5106:1;5103:13;5095:140;;;5204:14;;;5200:23;;5194:30;5170:17;;;5189:2;5166:26;5159:66;5124:10;;5095:140;;;5253:6;5250:1;5247:13;5244:2;;;5323:4;5318:2;5309:6;5298:9;5294:22;5290:31;5283:45;5244:2;-1:-1:-1;5399:2:1;5378:15;-1:-1:-1;;5374:29:1;5359:45;;;;5406:2;5355:54;;4933:482;-1:-1:-1;;;4933:482:1:o;5420:354::-;5622:2;5604:21;;;5661:2;5641:18;;;5634:30;5700:32;5695:2;5680:18;;5673:60;5765:2;5750:18;;5594:180::o;5779:402::-;5981:2;5963:21;;;6020:2;6000:18;;;5993:30;6059:34;6054:2;6039:18;;6032:62;-1:-1:-1;;;6125:2:1;6110:18;;6103:36;6171:3;6156:19;;5953:228::o;6186:398::-;6388:2;6370:21;;;6427:2;6407:18;;;6400:30;6466:34;6461:2;6446:18;;6439:62;-1:-1:-1;;;6532:2:1;6517:18;;6510:32;6574:3;6559:19;;6360:224::o;6589:354::-;6791:2;6773:21;;;6830:2;6810:18;;;6803:30;6869:32;6864:2;6849:18;;6842:60;6934:2;6919:18;;6763:180::o;6948:352::-;7150:2;7132:21;;;7189:2;7169:18;;;7162:30;7228;7223:2;7208:18;;7201:58;7291:2;7276:18;;7122:178::o;7305:347::-;7507:2;7489:21;;;7546:2;7526:18;;;7519:30;7585:25;7580:2;7565:18;;7558:53;7643:2;7628:18;;7479:173::o;7657:347::-;7859:2;7841:21;;;7898:2;7878:18;;;7871:30;7937:25;7932:2;7917:18;;7910:53;7995:2;7980:18;;7831:173::o;8009:355::-;8211:2;8193:21;;;8250:2;8230:18;;;8223:30;8289:33;8284:2;8269:18;;8262:61;8355:2;8340:18;;8183:181::o;8369:344::-;8571:2;8553:21;;;8610:2;8590:18;;;8583:30;-1:-1:-1;;;8644:2:1;8629:18;;8622:50;8704:2;8689:18;;8543:170::o;8718:353::-;8920:2;8902:21;;;8959:2;8939:18;;;8932:30;8998:31;8993:2;8978:18;;8971:59;9062:2;9047:18;;8892:179::o;9076:348::-;9278:2;9260:21;;;9317:2;9297:18;;;9290:30;9356:26;9351:2;9336:18;;9329:54;9415:2;9400:18;;9250:174::o;9429:349::-;9631:2;9613:21;;;9670:2;9650:18;;;9643:30;9709:27;9704:2;9689:18;;9682:55;9769:2;9754:18;;9603:175::o;9783:353::-;9985:2;9967:21;;;10024:2;10004:18;;;9997:30;10063:31;10058:2;10043:18;;10036:59;10127:2;10112:18;;9957:179::o;10141:404::-;10343:2;10325:21;;;10382:2;10362:18;;;10355:30;10421:34;10416:2;10401:18;;10394:62;-1:-1:-1;;;10487:2:1;10472:18;;10465:38;10535:3;10520:19;;10315:230::o;10550:356::-;10752:2;10734:21;;;10771:18;;;10764:30;10830:34;10825:2;10810:18;;10803:62;10897:2;10882:18;;10724:182::o;10911:344::-;11113:2;11095:21;;;11152:2;11132:18;;;11125:30;-1:-1:-1;;;11186:2:1;11171:18;;11164:50;11246:2;11231:18;;11085:170::o;11260:352::-;11462:2;11444:21;;;11501:2;11481:18;;;11474:30;11540;11535:2;11520:18;;11513:58;11603:2;11588:18;;11434:178::o;11617:400::-;11819:2;11801:21;;;11858:2;11838:18;;;11831:30;11897:34;11892:2;11877:18;;11870:62;-1:-1:-1;;;11963:2:1;11948:18;;11941:34;12007:3;11992:19;;11791:226::o;12022:398::-;12224:2;12206:21;;;12263:2;12243:18;;;12236:30;12302:34;12297:2;12282:18;;12275:62;-1:-1:-1;;;12368:2:1;12353:18;;12346:32;12410:3;12395:19;;12196:224::o;12425:356::-;12627:2;12609:21;;;12646:18;;;12639:30;12705:34;12700:2;12685:18;;12678:62;12772:2;12757:18;;12599:182::o;12786:401::-;12988:2;12970:21;;;13027:2;13007:18;;;13000:30;13066:34;13061:2;13046:18;;13039:62;-1:-1:-1;;;13132:2:1;13117:18;;13110:35;13177:3;13162:19;;12960:227::o;13192:351::-;13394:2;13376:21;;;13433:2;13413:18;;;13406:30;13472:29;13467:2;13452:18;;13445:57;13534:2;13519:18;;13366:177::o;13548:400::-;13750:2;13732:21;;;13789:2;13769:18;;;13762:30;13828:34;13823:2;13808:18;;13801:62;-1:-1:-1;;;13894:2:1;13879:18;;13872:34;13938:3;13923:19;;13722:226::o;13953:177::-;14099:25;;;14087:2;14072:18;;14054:76::o;14135:983::-;;14445:3;14434:9;14430:19;14476:6;14465:9;14458:25;14502:2;14540:6;14535:2;14524:9;14520:18;14513:34;14583:3;14578:2;14567:9;14563:18;14556:31;14607:6;14642;14636:13;14673:6;14665;14658:22;14711:3;14700:9;14696:19;14689:26;;14750:2;14742:6;14738:15;14724:29;;14771:4;14784:195;14798:6;14795:1;14792:13;14784:195;;;14863:13;;-1:-1:-1;;;;;14859:39:1;14847:52;;14954:15;;;;14919:12;;;;14895:1;14813:9;14784:195;;;-1:-1:-1;;;;;;;15035:32:1;;;;15030:2;15015:18;;15008:60;-1:-1:-1;;;15099:3:1;15084:19;15077:35;14996:3;14406:712;-1:-1:-1;;;14406:712:1:o;15123:184::-;15295:4;15283:17;;;;15265:36;;15253:2;15238:18;;15220:87::o;15312:128::-;;15383:1;15379:6;15376:1;15373:13;15370:2;;;15389:18;;:::i;:::-;-1:-1:-1;15425:9:1;;15360:80::o;15445:217::-;;15511:1;15501:2;;-1:-1:-1;;;15536:31:1;;15590:4;15587:1;15580:15;15618:4;15543:1;15608:15;15501:2;-1:-1:-1;15647:9:1;;15491:171::o;15667:168::-;;15773:1;15769;15765:6;15761:14;15758:1;15755:21;15750:1;15743:9;15736:17;15732:45;15729:2;;;15780:18;;:::i;:::-;-1:-1:-1;15820:9:1;;15719:116::o;15840:125::-;;15908:1;15905;15902:8;15899:2;;;15913:18;;:::i;:::-;-1:-1:-1;15950:9:1;;15889:76::o;15970:380::-;16055:1;16045:12;;16102:1;16092:12;;;16113:2;;16167:4;16159:6;16155:17;16145:27;;16113:2;16220;16212:6;16209:14;16189:18;16186:38;16183:2;;;16266:10;16261:3;16257:20;16254:1;16247:31;16301:4;16298:1;16291:15;16329:4;16326:1;16319:15;16183:2;;16025:325;;;:::o;16355:135::-;;-1:-1:-1;;16415:17:1;;16412:2;;;16435:18;;:::i;:::-;-1:-1:-1;16482:1:1;16471:13;;16402:88::o;16495:127::-;16556:10;16551:3;16547:20;16544:1;16537:31;16587:4;16584:1;16577:15;16611:4;16608:1;16601:15;16627:133;-1:-1:-1;;;;;16704:31:1;;16694:42;;16684:2;;16750:1;16747;16740:12

Swarm Source

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