ETH Price: $3,339.61 (-0.11%)

Token

Betted (BETS)
 

Overview

Max Total Supply

967,670,452.699300953469295715 BETS

Holders

397 (0.00%)

Total Transfers

-

Market

Price

$0.00 @ 0.000000 ETH

Onchain Market Cap

$11,544.31

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Betted Casino is a fiat and multi-blockchain poker, casino and sports betting company with a mission to become the largest crypto & fiat full-stack casino platform and be the benchmark for crypto casinos globally.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Betted

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: Unlicensed

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

pragma solidity >=0.5.0;

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

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

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

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

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

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

pragma solidity >=0.6.2;

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

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

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

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

pragma solidity >=0.6.2;


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

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

// File: @openzeppelin/contracts/utils/Context.sol


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

pragma solidity ^0.8.0;

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

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

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


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

    /**
     * @dev 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 {
        _transferOwnership(address(0));
    }

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

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

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


// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

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

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

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

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

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        _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 Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

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

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

// File: BETS.sol



pragma solidity ^0.8.9;

error InvalidTransfer(address from, address to);
error InvalidConfiguration();

contract Betted is ERC20, Ownable {

    mapping (address => bool) public _isExcludedFromFees;
    mapping (address => bool) public _isBlacklisted;
    mapping (address => bool) public _isExcludedFromBlacklist;
    mapping (address => uint256) public _holderLastTxBlock;
    mapping (address => bool) public _isAMM;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    address public marketingWallet;
    address public treasuryWallet;

    bool public swapping;
    bool public swapEnabled = true;
    bool public feesEnabled = true;

    uint256 public burnBuyFee = 100;
    uint256 public treasuryBuyFee = 100;
    uint256 public marketingBuyFee = 300;
    uint256 public totalBuyFees = 500;

    uint256 public burnSellFee = 100;
    uint256 public treasurySellFee = 100;
    uint256 public marketingSellFee = 300;
    uint256 public totalSellFees = 500;

    uint256 public treasuryTokens;
    uint256 public marketingTokens;

    uint256 public swapTokensAtAmount = 500_000 * 10**18; //0.05% of total supply

    event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
    event SwapEnabledUpdated(bool enabled);
    event FeesEnabledUpdated(bool enabled);

    constructor(address _marketingWallet, address _treasuryWallet) ERC20("Betted", "BETS") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        _isAMM[uniswapV2Pair] = true;

        marketingWallet = payable(_marketingWallet);
        treasuryWallet = payable(_treasuryWallet);

        _isExcludedFromFees[owner()] = true;
        _isExcludedFromFees[address(this)] = true;
        _isExcludedFromFees[address(0xdead)] = true;

        _isExcludedFromBlacklist[owner()] = true;
        _isExcludedFromBlacklist[uniswapV2Pair] = true;
        _isExcludedFromBlacklist[marketingWallet] = true;
        _isExcludedFromBlacklist[treasuryWallet] = true;
        _isExcludedFromBlacklist[address(0)] = true;
        _isExcludedFromBlacklist[address(this)] = true;

        _mint(owner(), 10**9 * 10**18);
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (_isAMM[from] && _isBlacklisted[tx.origin]) {
            revert InvalidTransfer(from, to); // Blacklisted addresses are prevented from buying; can always sell.
        }

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

        if (!swapping) {

            if (_isAMM[from] || _isAMM[to]) {
                if (!_isExcludedFromBlacklist[tx.origin] && _holderLastTxBlock[tx.origin] == block.number) {
                    _isBlacklisted[tx.origin] = true;
                }
                _holderLastTxBlock[tx.origin] = block.number;
            }

            if (!_isExcludedFromFees[from] &&
                !_isExcludedFromFees[to]
            ) {

                bool canSwap = balanceOf(address(this)) >= swapTokensAtAmount;

                if (
                    canSwap &&
                    swapEnabled &&
                    !_isAMM[from]
                    
                ) {
                    swapping = true;
                    _swapAndSend(swapTokensAtAmount);
                    swapping = false;
                }

                if (feesEnabled) {
                    uint256 fees;
                    uint256 burnTokens;
                    if (_isAMM[to] && totalSellFees != 0) { //sell
                        fees = amount * totalSellFees / 10000;
                        burnTokens += fees * burnSellFee / totalSellFees;
                        treasuryTokens += fees * treasurySellFee / totalSellFees;
                        marketingTokens += fees * marketingSellFee / totalSellFees;
                    } else if (_isAMM[from] && totalBuyFees != 0) { //buy
                        fees = amount * totalBuyFees / 10000;
                        burnTokens += fees * burnBuyFee / totalBuyFees;
                        treasuryTokens += fees * treasuryBuyFee / totalBuyFees;
                        marketingTokens += fees * marketingBuyFee / totalBuyFees;
                    }
                    if (fees > 0) {
                        amount -= fees;
                        super._transfer(from, address(this), fees);
                        super._burn(address(this), burnTokens);
                    }

                }

            }

        }

        super._transfer(from, to, amount);

    }

    function _swapAndSend(uint256 amountToSwap) internal {
        uint256 total = treasuryTokens + marketingTokens;
        uint256 treasuryToSwap = amountToSwap * treasuryTokens / total;
        uint256 marToSwap = amountToSwap * marketingTokens / total;

        uint256 tokenAmount = treasuryToSwap + marToSwap;

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

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

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

        uint256 ethBalance = address(this).balance;
        uint256 marketing = ethBalance * marToSwap / tokenAmount;
        uint256 treasury = ethBalance - marketing;

        bool success;
        (success, ) = address(marketingWallet).call{value: marketing}("");
        (success, ) = address(treasuryWallet).call{value: treasury}("");

        marketingTokens -= marToSwap;
        treasuryTokens -= treasuryToSwap;
    }

    function removeFromBlacklist(address account) external onlyOwner {
        _isBlacklisted[account] = false;
    }

    function setExcludedFromFees(address account, bool value) public onlyOwner {
        _isExcludedFromFees[account] = value;
    }

    function setExcludedFromBlacklist(address account) public onlyOwner {
        _isExcludedFromBlacklist[account] = true;
    }

    function excludeManyFromFees(address[] memory accounts) public onlyOwner {
        uint256 len = accounts.length;
        for (uint256 i = 0; i < len; i++) {
            _isExcludedFromFees[accounts[i]] = true;
        }
    }

    function setSellFees(uint256 burn, uint256 treasury, uint256 marketing) external onlyOwner {
        if (burn > burnSellFee || treasury > treasurySellFee || marketing > marketingSellFee) {
            revert InvalidConfiguration();
        }
        burnSellFee = burn;
        treasurySellFee = treasury;
        marketingSellFee = marketing;
        totalSellFees = burn + treasury + marketing;
    }

    function setBuyFees(uint256 burn, uint256 treasury, uint256 marketing) external onlyOwner {
        if (burn > burnBuyFee || treasury > treasuryBuyFee || marketing > marketingBuyFee) {
            revert InvalidConfiguration();
        }
        burnBuyFee = burn;
        treasuryBuyFee = treasury;
        marketingBuyFee = marketing;
        totalBuyFees = burn + treasury + marketing;
    }

    function airdrop(address[] memory _user, uint256[] memory _amount) external onlyOwner {
        uint256 len = _user.length;
        if (len != _amount.length) {
            revert InvalidConfiguration();
        }
        for (uint256 i = 0; i < len; i++) {
            super._transfer(_msgSender(), _user[i], _amount[i]);
        }
    }

    function setSwapAtAmount(uint256 amount) external onlyOwner {
        swapTokensAtAmount = amount;
        emit MinTokensBeforeSwapUpdated(amount);
    }

    function setSwapEnabled(bool _enabled) public onlyOwner {
        swapEnabled = _enabled;
        emit SwapEnabledUpdated(_enabled);
    }

    function setFeesEnabled(bool _enabled) public onlyOwner {
        feesEnabled = _enabled;
        emit FeesEnabledUpdated(_enabled);
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        marketingWallet = newWallet;
    }

    function updateTreasuryWallet(address newWallet) external onlyOwner {
        treasuryWallet = newWallet;
    }

    function manualSwap() external onlyOwner {
        uint256 amountToSwap = balanceOf(address(this)) >= swapTokensAtAmount ? swapTokensAtAmount : balanceOf(address(this));
        swapping = true;
        _swapAndSend(amountToSwap);
        swapping = false;
    }

    function burn(uint256 amount) external {
        super._burn(msg.sender, amount);
    }

    function transferOwnership(address newOwner) public override onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _isExcludedFromBlacklist[owner()] = false;
        _isExcludedFromFees[owner()] = false;
        _isExcludedFromBlacklist[newOwner] = true;
        _isExcludedFromFees[newOwner] = true;
        _transferOwnership(newOwner);
    }

    function setAMM(address pair, bool value) public onlyOwner {
        if (pair == uniswapV2Pair) {
            revert InvalidConfiguration();
        }
        _isAMM[pair] = value;
    }

    receive() external payable {}

}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_marketingWallet","type":"address"},{"internalType":"address","name":"_treasuryWallet","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"InvalidConfiguration","type":"error"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"InvalidTransfer","type":"error"},{"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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"FeesEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","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":"","type":"address"}],"name":"_holderLastTxBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isAMM","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBlacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_user","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"airdrop","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":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"excludeManyFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","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":[{"internalType":"address","name":"account","type":"address"}],"name":"removeFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAMM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"treasury","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setExcludedFromBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setExcludedFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"burn","type":"uint256"},{"internalType":"uint256","name":"treasury","type":"uint256"},{"internalType":"uint256","name":"marketing","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasurySellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600c805461ffff60a81b191661010160a81b1790556064600d819055600e81905561012c600f8190556101f4601081905560118390556012929092556013556014556969e10de76676d080000060175534801562000060575f80fd5b5060405162002b8b38038062002b8b8339810160408190526200008391620004f6565b6040518060400160405280600681526020016510995d1d195960d21b815250604051806040016040528060048152602001634245545360e01b8152508160039081620000d09190620005c9565b506004620000df8282620005c9565b505050620000fc620000f66200039b60201b60201c565b6200039f565b737a250d5630b4cf539739df2c5dacb4c659f2488d60808190526040805163c45a015560e01b81529051829163c45a01559160048083019260209291908290030181865afa15801562000151573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000177919062000695565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001c3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620001e9919062000695565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801562000234573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906200025a919062000695565b6001600160a01b0390811660a08190525f818152600a602090815260408083208054600160ff199182168117909255600b80546001600160a01b03199081168c8a16178255600c80549091168b8a16178155600580548a1688526006875285882080548516861790553080895286892080548616871790557f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e22805486168717905581548b1689526008909752858820805485168617905597875284872080548416851790559054881686528386208054831684179055548716855282852080548216831790557f5eff886ea0ce6ca488a3d6e336d6c0f75f46d19b42c06ce5ee98e42c96d256c78054821683179055928452922080549091169091179055546200039291166b033b2e3c9fd0803ce8000000620003f0565b505050620006de565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b6001600160a01b0382166200044b5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640160405180910390fd5b8060025f8282546200045e9190620006b8565b90915550506001600160a01b0382165f90815260208190526040812080548392906200048c908490620006b8565b90915550506040518181526001600160a01b038316905f907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b80516001600160a01b0381168114620004f1575f80fd5b919050565b5f806040838503121562000508575f80fd5b6200051383620004da565b91506200052360208401620004da565b90509250929050565b634e487b7160e01b5f52604160045260245ffd5b600181811c908216806200055557607f821691505b6020821081036200057457634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115620004d557805f5260205f20601f840160051c81016020851015620005a15750805b601f840160051c820191505b81811015620005c2575f8155600101620005ad565b5050505050565b81516001600160401b03811115620005e557620005e56200052c565b620005fd81620005f6845462000540565b846200057a565b602080601f83116001811462000633575f84156200061b5750858301515b5f19600386901b1c1916600185901b1785556200068d565b5f85815260208120601f198616915b82811015620006635788860151825594840194600190910190840162000642565b50858210156200068157878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b5f60208284031215620006a6575f80fd5b620006b182620004da565b9392505050565b80820180821115620006d857634e487b7160e01b5f52601160045260245ffd5b92915050565b60805160a05161246f6200071c5f395f818161052d01526110b401525f81816103ab01528181611a6901528181611ae30152611b99015261246f5ff3fe6080604052600436106102f6575f3560e01c8063715018a611610189578063a9059cbb116100d8578063dd62ed3e11610092578063e2f456051161006d578063e2f456051461093b578063e7f444b314610950578063ed0d213714610965578063f2fde38b1461097a575f80fd5b8063dd62ed3e146108aa578063e01af92c146108ee578063e0bf7fd11461090d575f80fd5b8063a9059cbb146107f8578063a9d3cd8a14610817578063aacebbe314610836578063b9e9370014610855578063bd967b761461086a578063d0a3981414610895575f80fd5b80638b27306d1161014357806395d89b411161011e57806395d89b4114610786578063a457c2d71461079a578063a64e4f8a146107b9578063a901dd92146107d9575f80fd5b80638b27306d146107355780638da5cb5b1461074a57806392f3693914610767575f80fd5b8063715018a61461068b57806375f0a8741461069f578063792df503146106be5780637ae3ff47146106ec5780637e76137714610701578063809d458d14610716575f80fd5b806342966c6811610245578063590ffdce116101ff57806367243482116101da578063672434821461060357806368078952146106225780636ddd17131461063757806370a0823114610657575f80fd5b8063590ffdce146105b05780635eebef6b146105cf5780636402511e146105e4575f80fd5b806342966c68146104de5780634626402b146104fd57806349bd5a5e1461051c57806351bc3c851461054f578063537df3b614610563578063576f9a5414610582575f80fd5b806318160ddd116102b05780632c10508c1161028b5780632c10508c14610470578063313ce56714610485578063373bf3b1146104a057806339509351146104bf575f80fd5b806318160ddd146104055780631cdd3be31461042357806323b872dd14610451575f80fd5b806306fdde0314610301578063095ea7b31461032b5780630d075d9c1461035a5780630f683e901461037b5780631694505e1461039a5780631732cded146103e5575f80fd5b366102fd57005b5f80fd5b34801561030c575f80fd5b50610315610999565b6040516103229190611f2f565b60405180910390f35b348015610336575f80fd5b5061034a610345366004611f8f565b610a29565b6040519015158152602001610322565b348015610365575f80fd5b50610379610374366004611fb9565b610a42565b005b348015610386575f80fd5b50610379610395366004611fb9565b610adc565b3480156103a5575f80fd5b506103cd7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610322565b3480156103f0575f80fd5b50600c5461034a90600160a01b900460ff1681565b348015610410575f80fd5b506002545b604051908152602001610322565b34801561042e575f80fd5b5061034a61043d366004611fe2565b60076020525f908152604090205460ff1681565b34801561045c575f80fd5b5061034a61046b366004612004565b610b6d565b34801561047b575f80fd5b50610415600e5481565b348015610490575f80fd5b5060405160128152602001610322565b3480156104ab575f80fd5b506103796104ba36600461211f565b610b90565b3480156104ca575f80fd5b5061034a6104d9366004611f8f565b610c1b565b3480156104e9575f80fd5b506103796104f8366004612159565b610c59565b348015610508575f80fd5b50600c546103cd906001600160a01b031681565b348015610527575f80fd5b506103cd7f000000000000000000000000000000000000000000000000000000000000000081565b34801561055a575f80fd5b50610379610c66565b34801561056e575f80fd5b5061037961057d366004611fe2565b610cf0565b34801561058d575f80fd5b5061034a61059c366004611fe2565b600a6020525f908152604090205460ff1681565b3480156105bb575f80fd5b506103796105ca366004612184565b610d3a565b3480156105da575f80fd5b5061041560155481565b3480156105ef575f80fd5b506103796105fe366004612159565b610d8e565b34801561060e575f80fd5b5061037961061d3660046121b7565b610df4565b34801561062d575f80fd5b50610415600f5481565b348015610642575f80fd5b50600c5461034a90600160a81b900460ff1681565b348015610662575f80fd5b50610415610671366004611fe2565b6001600160a01b03165f9081526020819052604090205490565b348015610696575f80fd5b50610379610e96565b3480156106aa575f80fd5b50600b546103cd906001600160a01b031681565b3480156106c9575f80fd5b5061034a6106d8366004611fe2565b60086020525f908152604090205460ff1681565b3480156106f7575f80fd5b50610415600d5481565b34801561070c575f80fd5b5061041560115481565b348015610721575f80fd5b50610379610730366004611fe2565b610ecb565b348015610740575f80fd5b5061041560165481565b348015610755575f80fd5b506005546001600160a01b03166103cd565b348015610772575f80fd5b50610379610781366004611fe2565b610f17565b348015610791575f80fd5b50610315610f64565b3480156107a5575f80fd5b5061034a6107b4366004611f8f565b610f73565b3480156107c4575f80fd5b50600c5461034a90600160b01b900460ff1681565b3480156107e4575f80fd5b506103796107f336600461226c565b611004565b348015610803575f80fd5b5061034a610812366004611f8f565b61107b565b348015610822575f80fd5b50610379610831366004612184565b611088565b348015610841575f80fd5b50610379610850366004611fe2565b61112e565b348015610860575f80fd5b5061041560105481565b348015610875575f80fd5b50610415610884366004611fe2565b60096020525f908152604090205481565b3480156108a0575f80fd5b5061041560145481565b3480156108b5575f80fd5b506104156108c4366004612285565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156108f9575f80fd5b5061037961090836600461226c565b61117a565b348015610918575f80fd5b5061034a610927366004611fe2565b60066020525f908152604090205460ff1681565b348015610946575f80fd5b5061041560175481565b34801561095b575f80fd5b5061041560135481565b348015610970575f80fd5b5061041560125481565b348015610985575f80fd5b50610379610994366004611fe2565b6111f1565b6060600380546109a8906122bc565b80601f01602080910402602001604051908101604052809291908181526020018280546109d4906122bc565b8015610a1f5780601f106109f657610100808354040283529160200191610a1f565b820191905f5260205f20905b815481529060010190602001808311610a0257829003601f168201915b5050505050905090565b5f33610a36818585611333565b60019150505b92915050565b6005546001600160a01b03163314610a755760405162461bcd60e51b8152600401610a6c906122f4565b60405180910390fd5b600d54831180610a865750600e5482115b80610a925750600f5481115b15610ab05760405163c52a9bd360e01b815260040160405180910390fd5b600d839055600e829055600f81905580610aca838561233d565b610ad4919061233d565b601055505050565b6005546001600160a01b03163314610b065760405162461bcd60e51b8152600401610a6c906122f4565b601154831180610b17575060125482115b80610b23575060135481115b15610b415760405163c52a9bd360e01b815260040160405180910390fd5b60118390556012829055601381905580610b5b838561233d565b610b65919061233d565b601455505050565b5f33610b7a858285611456565b610b858585856114e0565b506001949350505050565b6005546001600160a01b03163314610bba5760405162461bcd60e51b8152600401610a6c906122f4565b80515f5b81811015610c1657600160065f858481518110610bdd57610bdd612350565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610bbe565b505050565b335f8181526001602090815260408083206001600160a01b0387168452909152812054909190610a369082908690610c5490879061233d565b611333565b610c6333826118c0565b50565b6005546001600160a01b03163314610c905760405162461bcd60e51b8152600401610a6c906122f4565b601754305f9081526020819052604081205490911115610cbe57305f90815260208190526040902054610cc2565b6017545b600c805460ff60a01b1916600160a01b1790559050610ce081611a0b565b50600c805460ff60a01b19169055565b6005546001600160a01b03163314610d1a5760405162461bcd60e51b8152600401610a6c906122f4565b6001600160a01b03165f908152600760205260409020805460ff19169055565b6005546001600160a01b03163314610d645760405162461bcd60e51b8152600401610a6c906122f4565b6001600160a01b03919091165f908152600660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610db85760405162461bcd60e51b8152600401610a6c906122f4565b60178190556040518181527f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c00906020015b60405180910390a150565b6005546001600160a01b03163314610e1e5760405162461bcd60e51b8152600401610a6c906122f4565b815181518114610e415760405163c52a9bd360e01b815260040160405180910390fd5b5f5b81811015610e9057610e8833858381518110610e6157610e61612350565b6020026020010151858481518110610e7b57610e7b612350565b6020026020010151611d12565b600101610e43565b50505050565b6005546001600160a01b03163314610ec05760405162461bcd60e51b8152600401610a6c906122f4565b610ec95f611ede565b565b6005546001600160a01b03163314610ef55760405162461bcd60e51b8152600401610a6c906122f4565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f415760405162461bcd60e51b8152600401610a6c906122f4565b6001600160a01b03165f908152600860205260409020805460ff19166001179055565b6060600480546109a8906122bc565b335f8181526001602090815260408083206001600160a01b038716845290915281205490919083811015610ff75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a6c565b610b858286868403611333565b6005546001600160a01b0316331461102e5760405162461bcd60e51b8152600401610a6c906122f4565b600c8054821515600160b01b0260ff60b01b199091161790556040517fba500994dffbabeeb9e430f03a978d7b975359a20c5bde3a6ccb5a0c454680c890610de990831515815260200190565b5f33610a368185856114e0565b6005546001600160a01b031633146110b25760405162461bcd60e51b8152600401610a6c906122f4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036111045760405163c52a9bd360e01b815260040160405180910390fd5b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111585760405162461bcd60e51b8152600401610a6c906122f4565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111a45760405162461bcd60e51b8152600401610a6c906122f4565b600c8054821515600160a81b0260ff60a81b199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1290610de990831515815260200190565b6005546001600160a01b0316331461121b5760405162461bcd60e51b8152600401610a6c906122f4565b6001600160a01b0381166112805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a6c565b5f60085f6112966005546001600160a01b031690565b6001600160a01b0316815260208101919091526040015f908120805492151560ff19909316929092179091556006816112d76005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff199687161790559085168152600883528181208054851660019081179091556006909352208054909216179055610c6381611ede565b6001600160a01b0383166113955760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a6c565b6001600160a01b0382166113f65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a6c565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114610e9057818110156114d35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a6c565b610e908484848403611333565b6001600160a01b0383165f908152600a602052604090205460ff1680156115155750325f9081526007602052604090205460ff165b156115465760405163709ac01760e01b81526001600160a01b03808516600483015283166024820152604401610a6c565b805f0361155857610c1683835f611d12565b600c54600160a01b900460ff166118b5576001600160a01b0383165f908152600a602052604090205460ff16806115a657506001600160a01b0382165f908152600a602052604090205460ff165b1561160857325f9081526008602052604090205460ff161580156115d75750325f9081526009602052604090205443145b156115f657325f908152600760205260409020805460ff191660011790555b325f9081526009602052604090204390555b6001600160a01b0383165f9081526006602052604090205460ff1615801561164857506001600160a01b0382165f9081526006602052604090205460ff16155b156118b557601754305f908152602081905260409020541080159081906116785750600c54600160a81b900460ff165b801561169c57506001600160a01b0384165f908152600a602052604090205460ff16155b156116ce57600c805460ff60a01b1916600160a01b1790556017546116c090611a0b565b600c805460ff60a01b191690555b600c54600160b01b900460ff16156118b3576001600160a01b0383165f908152600a6020526040812054819060ff16801561170a575060145415155b156117b857612710601454856117209190612364565b61172a919061237b565b91506014546011548361173d9190612364565b611747919061237b565b611751908261233d565b9050601454601254836117649190612364565b61176e919061237b565b60155f82825461177e919061233d565b90915550506014546013546117939084612364565b61179d919061237b565b60165f8282546117ad919061233d565b909155506118899050565b6001600160a01b0386165f908152600a602052604090205460ff1680156117e0575060105415155b1561188957612710601054856117f69190612364565b611800919061237b565b9150601054600d54836118139190612364565b61181d919061237b565b611827908261233d565b9050601054600e548361183a9190612364565b611844919061237b565b60155f828254611854919061233d565b9091555050601054600f546118699084612364565b611873919061237b565b60165f828254611883919061233d565b90915550505b81156118b057611899828561239a565b93506118a6863084611d12565b6118b030826118c0565b50505b505b610c16838383611d12565b6001600160a01b0382166119205760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a6c565b6001600160a01b0382165f90815260208190526040902054818110156119935760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a6c565b6001600160a01b0383165f9081526020819052604081208383039055600280548492906119c190849061239a565b90915550506040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b5f601654601554611a1c919061233d565b90505f8160155484611a2e9190612364565b611a38919061237b565b90505f8260165485611a4a9190612364565b611a54919061237b565b90505f611a61828461233d565b9050611a8e307f000000000000000000000000000000000000000000000000000000000000000083611333565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611ac157611ac1612350565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b6191906123ad565b81600181518110611b7457611b74612350565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f00000000000000000000000000000000000000000000000000000000000000009091169063791ac94790611bd89085905f908690309042906004016123c8565b5f604051808303815f87803b158015611bef575f80fd5b505af1158015611c01573d5f803e3d5ffd5b504792505f9150849050611c158684612364565b611c1f919061237b565b90505f611c2c828461239a565b600b546040519192505f916001600160a01b039091169084908381818185875af1925050503d805f8114611c7b576040519150601f19603f3d011682016040523d82523d5f602084013e611c80565b606091505b5050600c546040519192506001600160a01b03169083905f81818185875af1925050503d805f8114611ccd576040519150601f19603f3d011682016040523d82523d5f602084013e611cd2565b606091505b5050809150508660165f828254611ce9919061239a565b925050819055508760155f828254611d01919061239a565b909155505050505050505050505050565b6001600160a01b038316611d765760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a6c565b6001600160a01b038216611dd85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a6c565b6001600160a01b0383165f9081526020819052604090205481811015611e4f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a6c565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290611e8590849061233d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ed191815260200190565b60405180910390a3610e90565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f602080835283518060208501525f5b81811015611f5b57858101830151858201604001528201611f3f565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c63575f80fd5b5f8060408385031215611fa0575f80fd5b8235611fab81611f7b565b946020939093013593505050565b5f805f60608486031215611fcb575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215611ff2575f80fd5b8135611ffd81611f7b565b9392505050565b5f805f60608486031215612016575f80fd5b833561202181611f7b565b9250602084013561203181611f7b565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561207f5761207f612042565b604052919050565b5f67ffffffffffffffff8211156120a0576120a0612042565b5060051b60200190565b5f82601f8301126120b9575f80fd5b813560206120ce6120c983612087565b612056565b8083825260208201915060208460051b8701019350868411156120ef575f80fd5b602086015b8481101561211457803561210781611f7b565b83529183019183016120f4565b509695505050505050565b5f6020828403121561212f575f80fd5b813567ffffffffffffffff811115612145575f80fd5b612151848285016120aa565b949350505050565b5f60208284031215612169575f80fd5b5035919050565b8035801515811461217f575f80fd5b919050565b5f8060408385031215612195575f80fd5b82356121a081611f7b565b91506121ae60208401612170565b90509250929050565b5f80604083850312156121c8575f80fd5b823567ffffffffffffffff808211156121df575f80fd5b6121eb868387016120aa565b9350602091508185013581811115612201575f80fd5b85019050601f81018613612213575f80fd5b80356122216120c982612087565b81815260059190911b8201830190838101908883111561223f575f80fd5b928401925b8284101561225d57833582529284019290840190612244565b80955050505050509250929050565b5f6020828403121561227c575f80fd5b611ffd82612170565b5f8060408385031215612296575f80fd5b82356122a181611f7b565b915060208301356122b181611f7b565b809150509250929050565b600181811c908216806122d057607f821691505b6020821081036122ee57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610a3c57610a3c612329565b634e487b7160e01b5f52603260045260245ffd5b8082028115828204841417610a3c57610a3c612329565b5f8261239557634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610a3c57610a3c612329565b5f602082840312156123bd575f80fd5b8151611ffd81611f7b565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156124185784516001600160a01b0316835293830193918301916001016123f3565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220343dcb4dbe0305d59bec6b3a91ad8b29c4f92804f5cbb8f996cda1e93fcafd7364736f6c6343000816003300000000000000000000000061e87d52d5a358ee83043a6d918a2e867e44bd2f000000000000000000000000ff354c92ea06a7ae091ac801d54d11148c992d75

Deployed Bytecode

0x6080604052600436106102f6575f3560e01c8063715018a611610189578063a9059cbb116100d8578063dd62ed3e11610092578063e2f456051161006d578063e2f456051461093b578063e7f444b314610950578063ed0d213714610965578063f2fde38b1461097a575f80fd5b8063dd62ed3e146108aa578063e01af92c146108ee578063e0bf7fd11461090d575f80fd5b8063a9059cbb146107f8578063a9d3cd8a14610817578063aacebbe314610836578063b9e9370014610855578063bd967b761461086a578063d0a3981414610895575f80fd5b80638b27306d1161014357806395d89b411161011e57806395d89b4114610786578063a457c2d71461079a578063a64e4f8a146107b9578063a901dd92146107d9575f80fd5b80638b27306d146107355780638da5cb5b1461074a57806392f3693914610767575f80fd5b8063715018a61461068b57806375f0a8741461069f578063792df503146106be5780637ae3ff47146106ec5780637e76137714610701578063809d458d14610716575f80fd5b806342966c6811610245578063590ffdce116101ff57806367243482116101da578063672434821461060357806368078952146106225780636ddd17131461063757806370a0823114610657575f80fd5b8063590ffdce146105b05780635eebef6b146105cf5780636402511e146105e4575f80fd5b806342966c68146104de5780634626402b146104fd57806349bd5a5e1461051c57806351bc3c851461054f578063537df3b614610563578063576f9a5414610582575f80fd5b806318160ddd116102b05780632c10508c1161028b5780632c10508c14610470578063313ce56714610485578063373bf3b1146104a057806339509351146104bf575f80fd5b806318160ddd146104055780631cdd3be31461042357806323b872dd14610451575f80fd5b806306fdde0314610301578063095ea7b31461032b5780630d075d9c1461035a5780630f683e901461037b5780631694505e1461039a5780631732cded146103e5575f80fd5b366102fd57005b5f80fd5b34801561030c575f80fd5b50610315610999565b6040516103229190611f2f565b60405180910390f35b348015610336575f80fd5b5061034a610345366004611f8f565b610a29565b6040519015158152602001610322565b348015610365575f80fd5b50610379610374366004611fb9565b610a42565b005b348015610386575f80fd5b50610379610395366004611fb9565b610adc565b3480156103a5575f80fd5b506103cd7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b039091168152602001610322565b3480156103f0575f80fd5b50600c5461034a90600160a01b900460ff1681565b348015610410575f80fd5b506002545b604051908152602001610322565b34801561042e575f80fd5b5061034a61043d366004611fe2565b60076020525f908152604090205460ff1681565b34801561045c575f80fd5b5061034a61046b366004612004565b610b6d565b34801561047b575f80fd5b50610415600e5481565b348015610490575f80fd5b5060405160128152602001610322565b3480156104ab575f80fd5b506103796104ba36600461211f565b610b90565b3480156104ca575f80fd5b5061034a6104d9366004611f8f565b610c1b565b3480156104e9575f80fd5b506103796104f8366004612159565b610c59565b348015610508575f80fd5b50600c546103cd906001600160a01b031681565b348015610527575f80fd5b506103cd7f000000000000000000000000c08049c9c18f3ed80b446b1004001db9d0c16d0281565b34801561055a575f80fd5b50610379610c66565b34801561056e575f80fd5b5061037961057d366004611fe2565b610cf0565b34801561058d575f80fd5b5061034a61059c366004611fe2565b600a6020525f908152604090205460ff1681565b3480156105bb575f80fd5b506103796105ca366004612184565b610d3a565b3480156105da575f80fd5b5061041560155481565b3480156105ef575f80fd5b506103796105fe366004612159565b610d8e565b34801561060e575f80fd5b5061037961061d3660046121b7565b610df4565b34801561062d575f80fd5b50610415600f5481565b348015610642575f80fd5b50600c5461034a90600160a81b900460ff1681565b348015610662575f80fd5b50610415610671366004611fe2565b6001600160a01b03165f9081526020819052604090205490565b348015610696575f80fd5b50610379610e96565b3480156106aa575f80fd5b50600b546103cd906001600160a01b031681565b3480156106c9575f80fd5b5061034a6106d8366004611fe2565b60086020525f908152604090205460ff1681565b3480156106f7575f80fd5b50610415600d5481565b34801561070c575f80fd5b5061041560115481565b348015610721575f80fd5b50610379610730366004611fe2565b610ecb565b348015610740575f80fd5b5061041560165481565b348015610755575f80fd5b506005546001600160a01b03166103cd565b348015610772575f80fd5b50610379610781366004611fe2565b610f17565b348015610791575f80fd5b50610315610f64565b3480156107a5575f80fd5b5061034a6107b4366004611f8f565b610f73565b3480156107c4575f80fd5b50600c5461034a90600160b01b900460ff1681565b3480156107e4575f80fd5b506103796107f336600461226c565b611004565b348015610803575f80fd5b5061034a610812366004611f8f565b61107b565b348015610822575f80fd5b50610379610831366004612184565b611088565b348015610841575f80fd5b50610379610850366004611fe2565b61112e565b348015610860575f80fd5b5061041560105481565b348015610875575f80fd5b50610415610884366004611fe2565b60096020525f908152604090205481565b3480156108a0575f80fd5b5061041560145481565b3480156108b5575f80fd5b506104156108c4366004612285565b6001600160a01b039182165f90815260016020908152604080832093909416825291909152205490565b3480156108f9575f80fd5b5061037961090836600461226c565b61117a565b348015610918575f80fd5b5061034a610927366004611fe2565b60066020525f908152604090205460ff1681565b348015610946575f80fd5b5061041560175481565b34801561095b575f80fd5b5061041560135481565b348015610970575f80fd5b5061041560125481565b348015610985575f80fd5b50610379610994366004611fe2565b6111f1565b6060600380546109a8906122bc565b80601f01602080910402602001604051908101604052809291908181526020018280546109d4906122bc565b8015610a1f5780601f106109f657610100808354040283529160200191610a1f565b820191905f5260205f20905b815481529060010190602001808311610a0257829003601f168201915b5050505050905090565b5f33610a36818585611333565b60019150505b92915050565b6005546001600160a01b03163314610a755760405162461bcd60e51b8152600401610a6c906122f4565b60405180910390fd5b600d54831180610a865750600e5482115b80610a925750600f5481115b15610ab05760405163c52a9bd360e01b815260040160405180910390fd5b600d839055600e829055600f81905580610aca838561233d565b610ad4919061233d565b601055505050565b6005546001600160a01b03163314610b065760405162461bcd60e51b8152600401610a6c906122f4565b601154831180610b17575060125482115b80610b23575060135481115b15610b415760405163c52a9bd360e01b815260040160405180910390fd5b60118390556012829055601381905580610b5b838561233d565b610b65919061233d565b601455505050565b5f33610b7a858285611456565b610b858585856114e0565b506001949350505050565b6005546001600160a01b03163314610bba5760405162461bcd60e51b8152600401610a6c906122f4565b80515f5b81811015610c1657600160065f858481518110610bdd57610bdd612350565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610bbe565b505050565b335f8181526001602090815260408083206001600160a01b0387168452909152812054909190610a369082908690610c5490879061233d565b611333565b610c6333826118c0565b50565b6005546001600160a01b03163314610c905760405162461bcd60e51b8152600401610a6c906122f4565b601754305f9081526020819052604081205490911115610cbe57305f90815260208190526040902054610cc2565b6017545b600c805460ff60a01b1916600160a01b1790559050610ce081611a0b565b50600c805460ff60a01b19169055565b6005546001600160a01b03163314610d1a5760405162461bcd60e51b8152600401610a6c906122f4565b6001600160a01b03165f908152600760205260409020805460ff19169055565b6005546001600160a01b03163314610d645760405162461bcd60e51b8152600401610a6c906122f4565b6001600160a01b03919091165f908152600660205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610db85760405162461bcd60e51b8152600401610a6c906122f4565b60178190556040518181527f5948780118f41f7c4577ae4619d5cbd064057bd8562d9f7b7e60324053375c00906020015b60405180910390a150565b6005546001600160a01b03163314610e1e5760405162461bcd60e51b8152600401610a6c906122f4565b815181518114610e415760405163c52a9bd360e01b815260040160405180910390fd5b5f5b81811015610e9057610e8833858381518110610e6157610e61612350565b6020026020010151858481518110610e7b57610e7b612350565b6020026020010151611d12565b600101610e43565b50505050565b6005546001600160a01b03163314610ec05760405162461bcd60e51b8152600401610a6c906122f4565b610ec95f611ede565b565b6005546001600160a01b03163314610ef55760405162461bcd60e51b8152600401610a6c906122f4565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b03163314610f415760405162461bcd60e51b8152600401610a6c906122f4565b6001600160a01b03165f908152600860205260409020805460ff19166001179055565b6060600480546109a8906122bc565b335f8181526001602090815260408083206001600160a01b038716845290915281205490919083811015610ff75760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610a6c565b610b858286868403611333565b6005546001600160a01b0316331461102e5760405162461bcd60e51b8152600401610a6c906122f4565b600c8054821515600160b01b0260ff60b01b199091161790556040517fba500994dffbabeeb9e430f03a978d7b975359a20c5bde3a6ccb5a0c454680c890610de990831515815260200190565b5f33610a368185856114e0565b6005546001600160a01b031633146110b25760405162461bcd60e51b8152600401610a6c906122f4565b7f000000000000000000000000c08049c9c18f3ed80b446b1004001db9d0c16d026001600160a01b0316826001600160a01b0316036111045760405163c52a9bd360e01b815260040160405180910390fd5b6001600160a01b03919091165f908152600a60205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146111585760405162461bcd60e51b8152600401610a6c906122f4565b600b80546001600160a01b0319166001600160a01b0392909216919091179055565b6005546001600160a01b031633146111a45760405162461bcd60e51b8152600401610a6c906122f4565b600c8054821515600160a81b0260ff60a81b199091161790556040517f436b6cf978c7b6998fcce43dfe4d37e3a0dc2bb780144a2eb55d7138201e8a1290610de990831515815260200190565b6005546001600160a01b0316331461121b5760405162461bcd60e51b8152600401610a6c906122f4565b6001600160a01b0381166112805760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a6c565b5f60085f6112966005546001600160a01b031690565b6001600160a01b0316815260208101919091526040015f908120805492151560ff19909316929092179091556006816112d76005546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182015f908120805495151560ff199687161790559085168152600883528181208054851660019081179091556006909352208054909216179055610c6381611ede565b6001600160a01b0383166113955760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610a6c565b6001600160a01b0382166113f65760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610a6c565b6001600160a01b038381165f8181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038381165f908152600160209081526040808320938616835292905220545f198114610e9057818110156114d35760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152606401610a6c565b610e908484848403611333565b6001600160a01b0383165f908152600a602052604090205460ff1680156115155750325f9081526007602052604090205460ff165b156115465760405163709ac01760e01b81526001600160a01b03808516600483015283166024820152604401610a6c565b805f0361155857610c1683835f611d12565b600c54600160a01b900460ff166118b5576001600160a01b0383165f908152600a602052604090205460ff16806115a657506001600160a01b0382165f908152600a602052604090205460ff165b1561160857325f9081526008602052604090205460ff161580156115d75750325f9081526009602052604090205443145b156115f657325f908152600760205260409020805460ff191660011790555b325f9081526009602052604090204390555b6001600160a01b0383165f9081526006602052604090205460ff1615801561164857506001600160a01b0382165f9081526006602052604090205460ff16155b156118b557601754305f908152602081905260409020541080159081906116785750600c54600160a81b900460ff165b801561169c57506001600160a01b0384165f908152600a602052604090205460ff16155b156116ce57600c805460ff60a01b1916600160a01b1790556017546116c090611a0b565b600c805460ff60a01b191690555b600c54600160b01b900460ff16156118b3576001600160a01b0383165f908152600a6020526040812054819060ff16801561170a575060145415155b156117b857612710601454856117209190612364565b61172a919061237b565b91506014546011548361173d9190612364565b611747919061237b565b611751908261233d565b9050601454601254836117649190612364565b61176e919061237b565b60155f82825461177e919061233d565b90915550506014546013546117939084612364565b61179d919061237b565b60165f8282546117ad919061233d565b909155506118899050565b6001600160a01b0386165f908152600a602052604090205460ff1680156117e0575060105415155b1561188957612710601054856117f69190612364565b611800919061237b565b9150601054600d54836118139190612364565b61181d919061237b565b611827908261233d565b9050601054600e548361183a9190612364565b611844919061237b565b60155f828254611854919061233d565b9091555050601054600f546118699084612364565b611873919061237b565b60165f828254611883919061233d565b90915550505b81156118b057611899828561239a565b93506118a6863084611d12565b6118b030826118c0565b50505b505b610c16838383611d12565b6001600160a01b0382166119205760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610a6c565b6001600160a01b0382165f90815260208190526040902054818110156119935760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610a6c565b6001600160a01b0383165f9081526020819052604081208383039055600280548492906119c190849061239a565b90915550506040518281525f906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050565b5f601654601554611a1c919061233d565b90505f8160155484611a2e9190612364565b611a38919061237b565b90505f8260165485611a4a9190612364565b611a54919061237b565b90505f611a61828461233d565b9050611a8e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d83611333565b6040805160028082526060820183525f9260208301908036833701905050905030815f81518110611ac157611ac1612350565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b3d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b6191906123ad565b81600181518110611b7457611b74612350565b6001600160a01b03928316602091820292909201015260405163791ac94760e01b81527f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d9091169063791ac94790611bd89085905f908690309042906004016123c8565b5f604051808303815f87803b158015611bef575f80fd5b505af1158015611c01573d5f803e3d5ffd5b504792505f9150849050611c158684612364565b611c1f919061237b565b90505f611c2c828461239a565b600b546040519192505f916001600160a01b039091169084908381818185875af1925050503d805f8114611c7b576040519150601f19603f3d011682016040523d82523d5f602084013e611c80565b606091505b5050600c546040519192506001600160a01b03169083905f81818185875af1925050503d805f8114611ccd576040519150601f19603f3d011682016040523d82523d5f602084013e611cd2565b606091505b5050809150508660165f828254611ce9919061239a565b925050819055508760155f828254611d01919061239a565b909155505050505050505050505050565b6001600160a01b038316611d765760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610a6c565b6001600160a01b038216611dd85760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610a6c565b6001600160a01b0383165f9081526020819052604090205481811015611e4f5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610a6c565b6001600160a01b038085165f90815260208190526040808220858503905591851681529081208054849290611e8590849061233d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ed191815260200190565b60405180910390a3610e90565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a35050565b5f602080835283518060208501525f5b81811015611f5b57858101830151858201604001528201611f3f565b505f604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610c63575f80fd5b5f8060408385031215611fa0575f80fd5b8235611fab81611f7b565b946020939093013593505050565b5f805f60608486031215611fcb575f80fd5b505081359360208301359350604090920135919050565b5f60208284031215611ff2575f80fd5b8135611ffd81611f7b565b9392505050565b5f805f60608486031215612016575f80fd5b833561202181611f7b565b9250602084013561203181611f7b565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561207f5761207f612042565b604052919050565b5f67ffffffffffffffff8211156120a0576120a0612042565b5060051b60200190565b5f82601f8301126120b9575f80fd5b813560206120ce6120c983612087565b612056565b8083825260208201915060208460051b8701019350868411156120ef575f80fd5b602086015b8481101561211457803561210781611f7b565b83529183019183016120f4565b509695505050505050565b5f6020828403121561212f575f80fd5b813567ffffffffffffffff811115612145575f80fd5b612151848285016120aa565b949350505050565b5f60208284031215612169575f80fd5b5035919050565b8035801515811461217f575f80fd5b919050565b5f8060408385031215612195575f80fd5b82356121a081611f7b565b91506121ae60208401612170565b90509250929050565b5f80604083850312156121c8575f80fd5b823567ffffffffffffffff808211156121df575f80fd5b6121eb868387016120aa565b9350602091508185013581811115612201575f80fd5b85019050601f81018613612213575f80fd5b80356122216120c982612087565b81815260059190911b8201830190838101908883111561223f575f80fd5b928401925b8284101561225d57833582529284019290840190612244565b80955050505050509250929050565b5f6020828403121561227c575f80fd5b611ffd82612170565b5f8060408385031215612296575f80fd5b82356122a181611f7b565b915060208301356122b181611f7b565b809150509250929050565b600181811c908216806122d057607f821691505b6020821081036122ee57634e487b7160e01b5f52602260045260245ffd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610a3c57610a3c612329565b634e487b7160e01b5f52603260045260245ffd5b8082028115828204841417610a3c57610a3c612329565b5f8261239557634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610a3c57610a3c612329565b5f602082840312156123bd575f80fd5b8151611ffd81611f7b565b5f60a08201878352602087602085015260a0604085015281875180845260c0860191506020890193505f5b818110156124185784516001600160a01b0316835293830193918301916001016123f3565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220343dcb4dbe0305d59bec6b3a91ad8b29c4f92804f5cbb8f996cda1e93fcafd7364736f6c63430008160033

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

00000000000000000000000061e87d52d5a358ee83043a6d918a2e867e44bd2f000000000000000000000000ff354c92ea06a7ae091ac801d54d11148c992d75

-----Decoded View---------------
Arg [0] : _marketingWallet (address): 0x61E87D52d5a358eE83043a6d918A2E867e44bD2f
Arg [1] : _treasuryWallet (address): 0xff354c92Ea06a7ae091ac801D54D11148C992d75

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 00000000000000000000000061e87d52d5a358ee83043a6d918a2e867e44bd2f
Arg [1] : 000000000000000000000000ff354c92ea06a7ae091ac801d54d11148c992d75


Deployed Bytecode Sourcemap

25999:9607:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15069:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17420:201;;;;;;;;;;-1:-1:-1;17420:201:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;17420:201:0;1023:187:1;33123:402:0;;;;;;;;;;-1:-1:-1;33123:402:0;;;;;:::i;:::-;;:::i;:::-;;32705:410;;;;;;;;;;-1:-1:-1;32705:410:0;;;;;:::i;:::-;;:::i;26328:51::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1726:32:1;;;1708:51;;1696:2;1681:18;26328:51:0;1536:229:1;26508:20:0;;;;;;;;;;-1:-1:-1;26508:20:0;;;;-1:-1:-1;;;26508:20:0;;;;;;16189:108;;;;;;;;;;-1:-1:-1;16277:12:0;;16189:108;;;1916:25:1;;;1904:2;1889:18;16189:108:0;1770:177:1;26101:47:0;;;;;;;;;;-1:-1:-1;26101:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;18201:295;;;;;;;;;;-1:-1:-1;18201:295:0;;;;;:::i;:::-;;:::i;26649:35::-;;;;;;;;;;;;;;;;16031:93;;;;;;;;;;-1:-1:-1;16031:93:0;;16114:2;2807:36:1;;2795:2;2780:18;16031:93:0;2665:184:1;32466:231:0;;;;;;;;;;-1:-1:-1;32466:231:0;;;;;:::i;:::-;;:::i;18905:240::-;;;;;;;;;;-1:-1:-1;18905:240:0;;;;;:::i;:::-;;:::i;34868:89::-;;;;;;;;;;-1:-1:-1;34868:89:0;;;;;:::i;:::-;;:::i;26470:29::-;;;;;;;;;;-1:-1:-1;26470:29:0;;;;-1:-1:-1;;;;;26470:29:0;;;26386:38;;;;;;;;;;;;;;;34593:267;;;;;;;;;;;;;:::i;32070:115::-;;;;;;;;;;-1:-1:-1;32070:115:0;;;;;:::i;:::-;;:::i;26280:39::-;;;;;;;;;;-1:-1:-1;26280:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;32193:130;;;;;;;;;;-1:-1:-1;32193:130:0;;;;;:::i;:::-;;:::i;26945:29::-;;;;;;;;;;;;;;;;33887:156;;;;;;;;;;-1:-1:-1;33887:156:0;;;;;:::i;:::-;;:::i;33533:346::-;;;;;;;;;;-1:-1:-1;33533:346:0;;;;;:::i;:::-;;:::i;26691:36::-;;;;;;;;;;;;;;;;26535:30;;;;;;;;;;-1:-1:-1;26535:30:0;;;;-1:-1:-1;;;26535:30:0;;;;;;16360:127;;;;;;;;;;-1:-1:-1;16360:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;16461:18:0;16434:7;16461:18;;;;;;;;;;;;16360:127;8475:103;;;;;;;;;;;;;:::i;26433:30::-;;;;;;;;;;-1:-1:-1;26433:30:0;;;;-1:-1:-1;;;;;26433:30:0;;;26155:57;;;;;;;;;;-1:-1:-1;26155:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;26611:31;;;;;;;;;;;;;;;;26776:32;;;;;;;;;;;;;;;;34472:113;;;;;;;;;;-1:-1:-1;34472:113:0;;;;;:::i;:::-;;:::i;26981:30::-;;;;;;;;;;;;;;;;7824:87;;;;;;;;;;-1:-1:-1;7897:6:0;;-1:-1:-1;;;;;7897:6:0;7824:87;;32331:127;;;;;;;;;;-1:-1:-1;32331:127:0;;;;;:::i;:::-;;:::i;15288:104::-;;;;;;;;;;;;;:::i;19648:438::-;;;;;;;;;;-1:-1:-1;19648:438:0;;;;;:::i;:::-;;:::i;26572:30::-;;;;;;;;;;-1:-1:-1;26572:30:0;;;;-1:-1:-1;;;26572:30:0;;;;;;34200:141;;;;;;;;;;-1:-1:-1;34200:141:0;;;;;:::i;:::-;;:::i;16693:193::-;;;;;;;;;;-1:-1:-1;16693:193:0;;;;;:::i;:::-;;:::i;35373:191::-;;;;;;;;;;-1:-1:-1;35373:191:0;;;;;:::i;:::-;;:::i;34349:115::-;;;;;;;;;;-1:-1:-1;34349:115:0;;;;;:::i;:::-;;:::i;26734:33::-;;;;;;;;;;;;;;;;26219:54;;;;;;;;;;-1:-1:-1;26219:54:0;;;;;:::i;:::-;;;;;;;;;;;;;;26902:34;;;;;;;;;;;;;;;;16949:151;;;;;;;;;;-1:-1:-1;16949:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;17065:18:0;;;17038:7;17065:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16949:151;34051:141;;;;;;;;;;-1:-1:-1;34051:141:0;;;;;:::i;:::-;;:::i;26042:52::-;;;;;;;;;;-1:-1:-1;26042:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27020;;;;;;;;;;;;;;;;26858:37;;;;;;;;;;;;;;;;26815:36;;;;;;;;;;;;;;;;34965:400;;;;;;;;;;-1:-1:-1;34965:400:0;;;;;:::i;:::-;;:::i;15069:100::-;15123:13;15156:5;15149:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15069:100;:::o;17420:201::-;17503:4;6628:10;17559:32;6628:10;17575:7;17584:6;17559:8;:32::i;:::-;17609:4;17602:11;;;17420:201;;;;;:::o;33123:402::-;7897:6;;-1:-1:-1;;;;;7897:6:0;6628:10;8044:23;8036:68;;;;-1:-1:-1;;;8036:68:0;;;;;;;:::i;:::-;;;;;;;;;33235:10:::1;;33228:4;:17;:46;;;;33260:14;;33249:8;:25;33228:46;:77;;;;33290:15;;33278:9;:27;33228:77;33224:139;;;33329:22;;-1:-1:-1::0;;;33329:22:0::1;;;;;;;;;;;33224:139;33373:10;:17:::0;;;33401:14:::1;:25:::0;;;33437:15:::1;:27:::0;;;33455:9;33490:15:::1;33418:8:::0;33386:4;33490:15:::1;:::i;:::-;:27;;;;:::i;:::-;33475:12;:42:::0;-1:-1:-1;;;33123:402:0:o;32705:410::-;7897:6;;-1:-1:-1;;;;;7897:6:0;6628:10;8044:23;8036:68;;;;-1:-1:-1;;;8036:68:0;;;;;;;:::i;:::-;32818:11:::1;;32811:4;:18;:48;;;;32844:15;;32833:8;:26;32811:48;:80;;;;32875:16;;32863:9;:28;32811:80;32807:142;;;32915:22;;-1:-1:-1::0;;;32915:22:0::1;;;;;;;;;;;32807:142;32959:11;:18:::0;;;32988:15:::1;:26:::0;;;33025:16:::1;:28:::0;;;33044:9;33080:15:::1;33006:8:::0;32973:4;33080:15:::1;:::i;:::-;:27;;;;:::i;:::-;33064:13;:43:::0;-1:-1:-1;;;32705:410:0:o;18201:295::-;18332:4;6628:10;18390:38;18406:4;6628:10;18421:6;18390:15;:38::i;:::-;18439:27;18449:4;18455:2;18459:6;18439:9;:27::i;:::-;-1:-1:-1;18484:4:0;;18201:295;-1:-1:-1;;;;18201:295:0:o;32466:231::-;7897:6;;-1:-1:-1;;;;;7897:6:0;6628:10;8044:23;8036:68;;;;-1:-1:-1;;;8036:68:0;;;;;;;:::i;:::-;32564:15;;32550:11:::1;32590:100;32614:3;32610:1;:7;32590:100;;;32674:4;32639:19;:32;32659:8;32668:1;32659:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;32639:32:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;32639:32:0;:39;;-1:-1:-1;;32639:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;32619:3:0::1;32590:100;;;;32539:158;32466:231:::0;:::o;18905:240::-;6628:10;18993:4;19074:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;19074:27:0;;;;;;;;;;18993:4;;6628:10;19049:66;;6628:10;;19074:27;;:40;;19104:10;;19074:40;:::i;:::-;19049:8;:66::i;34868:89::-;34918:31;34930:10;34942:6;34918:11;:31::i;:::-;34868:89;:::o;34593:267::-;7897:6;;-1:-1:-1;;;;;7897:6:0;6628:10;8044:23;8036:68;;;;-1:-1:-1;;;8036:68:0;;;;;;;:::i;:::-;34696:18:::1;::::0;34686:4:::1;34645:20;16461:18:::0;;;;;;;;;;;34645:20;;-1:-1:-1;34668:46:0::1;:94;;34756:4;16434:7:::0;16461:18;;;;;;;;;;;34668:94:::1;;;34717:18;;34668:94;34773:8;:15:::0;;-1:-1:-1;;;;34773:15:0::1;-1:-1:-1::0;;;34773:15:0::1;::::0;;34645:117;-1:-1:-1;34799:26:0::1;34645:117:::0;34799:12:::1;:26::i;:::-;-1:-1:-1::0;34836:8:0::1;:16:::0;;-1:-1:-1;;;;34836:16:0::1;::::0;;34593:267::o;32070:115::-;7897:6;;-1:-1:-1;;;;;7897:6:0;6628:10;8044:23;8036:68;;;;-1:-1:-1;;;8036:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32146:23:0::1;32172:5;32146:23:::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;32146:31:0::1;::::0;;32070:115::o;32193:130::-;7897:6;;-1:-1:-1;;;;;7897:6:0;6628:10;8044:23;8036:68;;;;-1:-1:-1;;;8036:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32279:28:0;;;::::1;;::::0;;;:19:::1;:28;::::0;;;;:36;;-1:-1:-1;;32279:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;32193:130::o;33887:156::-;7897:6;;-1:-1:-1;;;;;7897:6:0;6628:10;8044:23;8036:68;;;;-1:-1:-1;;;8036:68:0;;;;;;;:::i;:::-;33958:18:::1;:27:::0;;;34001:34:::1;::::0;1916:25:1;;;34001:34:0::1;::::0;1904:2:1;1889:18;34001:34:0::1;;;;;;;;33887:156:::0;:::o;33533:346::-;7897:6;;-1:-1:-1;;;;;7897:6:0;6628:10;8044:23;8036:68;;;;-1:-1:-1;;;8036:68:0;;;;;;;:::i;:::-;33644:12;;33678:14;;33671:21;::::1;33667:83;;33716:22;;-1:-1:-1::0;;;33716:22:0::1;;;;;;;;;;;33667:83;33765:9;33760:112;33784:3;33780:1;:7;33760:112;;;33809:51;6628:10:::0;33839:5:::1;33845:1;33839:8;;;;;;;;:::i;:::-;;;;;;;33849:7;33857:1;33849:10;;;;;;;;:::i;:::-;;;;;;;33809:15;:51::i;:::-;33789:3;;33760:112;;;;33619:260;33533:346:::0;;:::o;8475:103::-;7897:6;;-1:-1:-1;;;;;7897:6:0;6628:10;8044:23;8036:68;;;;-1:-1:-1;;;8036:68:0;;;;;;;:::i;:::-;8540:30:::1;8567:1;8540:18;:30::i;:::-;8475:103::o:0;34472:113::-;7897:6;;-1:-1:-1;;;;;7897:6:0;6628:10;8044:23;8036:68;;;;-1:-1:-1;;;8036:68:0;;;;;;;:::i;:::-;34551:14:::1;:26:::0;;-1:-1:-1;;;;;;34551:26:0::1;-1:-1:-1::0;;;;;34551:26:0;;;::::1;::::0;;;::::1;::::0;;34472:113::o;32331:127::-;7897:6;;-1:-1:-1;;;;;7897:6:0;6628:10;8044:23;8036:68;;;;-1:-1:-1;;;8036:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;32410:33:0::1;;::::0;;;:24:::1;:33;::::0;;;;:40;;-1:-1:-1;;32410:40:0::1;32446:4;32410:40;::::0;;32331:127::o;15288:104::-;15344:13;15377:7;15370:14;;;;;:::i;19648:438::-;6628:10;19741:4;19824:18;;;:11;:18;;;;;;;;-1:-1:-1;;;;;19824:27:0;;;;;;;;;;19741:4;;6628:10;19870:35;;;;19862:85;;;;-1:-1:-1;;;19862:85:0;;8496:2:1;19862:85:0;;;8478:21:1;8535:2;8515:18;;;8508:30;8574:34;8554:18;;;8547:62;-1:-1:-1;;;8625:18:1;;;8618:35;8670:19;;19862:85:0;8294:401:1;19862:85:0;19983:60;19992:5;19999:7;20027:15;20008:16;:34;19983:8;:60::i;34200:141::-;7897:6;;-1:-1:-1;;;;;7897:6:0;6628:10;8044:23;8036:68;;;;-1:-1:-1;;;8036:68:0;;;;;;;:::i;:::-;34267:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;34267:22:0::1;-1:-1:-1::0;;;;34267:22:0;;::::1;;::::0;;34305:28:::1;::::0;::::1;::::0;::::1;::::0;34281:8;1188:14:1;1181:22;1163:41;;1151:2;1136:18;;1023:187;16693:193:0;16772:4;6628:10;16828:28;6628:10;16845:2;16849:6;16828:9;:28::i;35373:191::-;7897:6;;-1:-1:-1;;;;;7897:6:0;6628:10;8044:23;8036:68;;;;-1:-1:-1;;;8036:68:0;;;;;;;:::i;:::-;35455:13:::1;-1:-1:-1::0;;;;;35447:21:0::1;:4;-1:-1:-1::0;;;;;35447:21:0::1;::::0;35443:83:::1;;35492:22;;-1:-1:-1::0;;;35492:22:0::1;;;;;;;;;;;35443:83;-1:-1:-1::0;;;;;35536:12:0;;;::::1;;::::0;;;:6:::1;:12;::::0;;;;:20;;-1:-1:-1;;35536:20:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35373:191::o;34349:115::-;7897:6;;-1:-1:-1;;;;;7897:6:0;6628:10;8044:23;8036:68;;;;-1:-1:-1;;;8036:68:0;;;;;;;:::i;:::-;34429:15:::1;:27:::0;;-1:-1:-1;;;;;;34429:27:0::1;-1:-1:-1::0;;;;;34429:27:0;;;::::1;::::0;;;::::1;::::0;;34349:115::o;34051:141::-;7897:6;;-1:-1:-1;;;;;7897:6:0;6628:10;8044:23;8036:68;;;;-1:-1:-1;;;8036:68:0;;;;;;;:::i;:::-;34118:11:::1;:22:::0;;;::::1;;-1:-1:-1::0;;;34118:22:0::1;-1:-1:-1::0;;;;34118:22:0;;::::1;;::::0;;34156:28:::1;::::0;::::1;::::0;::::1;::::0;34132:8;1188:14:1;1181:22;1163:41;;1151:2;1136:18;;1023:187;34965:400:0;7897:6;;-1:-1:-1;;;;;7897:6:0;6628:10;8044:23;8036:68;;;;-1:-1:-1;;;8036:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35055:22:0;::::1;35047:73;;;::::0;-1:-1:-1;;;35047:73:0;;8902:2:1;35047:73:0::1;::::0;::::1;8884:21:1::0;8941:2;8921:18;;;8914:30;8980:34;8960:18;;;8953:62;-1:-1:-1;;;9031:18:1;;;9024:36;9077:19;;35047:73:0::1;8700:402:1::0;35047:73:0::1;35167:5;35131:24;:33;35156:7;7897:6:::0;;-1:-1:-1;;;;;7897:6:0;;7824:87;35156:7:::1;-1:-1:-1::0;;;;;35131:33:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35131:33:0;;;:41;;;::::1;;-1:-1:-1::0;;35131:41:0;;::::1;::::0;;;::::1;::::0;;;35183:19:::1;-1:-1:-1::0;35203:7:0::1;7897:6:::0;;-1:-1:-1;;;;;7897:6:0;;7824:87;35203:7:::1;-1:-1:-1::0;;;;;35183:28:0;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;;;;-1:-1:-1;35183:28:0;;;:36;;;::::1;;-1:-1:-1::0;;35183:36:0;;::::1;;::::0;;35230:34;;::::1;::::0;;:24:::1;:34:::0;;;;;:41;;;::::1;35183:36:::0;35230:41;;::::1;::::0;;;35282:19:::1;:29:::0;;;;:36;;;;::::1;;::::0;;35329:28:::1;35255:8:::0;35329:18:::1;:28::i;23284:380::-:0;-1:-1:-1;;;;;23420:19:0;;23412:68;;;;-1:-1:-1;;;23412:68:0;;9309:2:1;23412:68:0;;;9291:21:1;9348:2;9328:18;;;9321:30;9387:34;9367:18;;;9360:62;-1:-1:-1;;;9438:18:1;;;9431:34;9482:19;;23412:68:0;9107:400:1;23412:68:0;-1:-1:-1;;;;;23499:21:0;;23491:68;;;;-1:-1:-1;;;23491:68:0;;9714:2:1;23491:68:0;;;9696:21:1;9753:2;9733:18;;;9726:30;9792:34;9772:18;;;9765:62;-1:-1:-1;;;9843:18:1;;;9836:32;9885:19;;23491:68:0;9512:398:1;23491:68:0;-1:-1:-1;;;;;23572:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23624:32;;1916:25:1;;;23624:32:0;;1889:18:1;23624:32:0;;;;;;;23284:380;;;:::o;23951:453::-;-1:-1:-1;;;;;17065:18:0;;;24086:24;17065:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;-1:-1:-1;;24153:37:0;;24149:248;;24235:6;24215:16;:26;;24207:68;;;;-1:-1:-1;;;24207:68:0;;10117:2:1;24207:68:0;;;10099:21:1;10156:2;10136:18;;;10129:30;10195:31;10175:18;;;10168:59;10244:18;;24207:68:0;9915:353:1;24207:68:0;24319:51;24328:5;24335:7;24363:6;24344:16;:25;24319:8;:51::i;28349:2481::-;-1:-1:-1;;;;;28477:12:0;;;;;;:6;:12;;;;;;;;:41;;;;-1:-1:-1;28508:9:0;28493:25;;;;:14;:25;;;;;;;;28477:41;28473:175;;;28542:25;;-1:-1:-1;;;28542:25:0;;-1:-1:-1;;;;;10503:15:1;;;28542:25:0;;;10485:34:1;10555:15;;10535:18;;;10528:43;10420:18;;28542:25:0;10273:304:1;28473:175:0;28663:6;28673:1;28663:11;28660:92;;28691:28;28707:4;28713:2;28717:1;28691:15;:28::i;28660:92::-;28769:8;;-1:-1:-1;;;28769:8:0;;;;28764:2011;;-1:-1:-1;;;;;28800:12:0;;;;;;:6;:12;;;;;;;;;:26;;-1:-1:-1;;;;;;28816:10:0;;;;;;:6;:10;;;;;;;;28800:26;28796:295;;;28877:9;28852:35;;;;:24;:35;;;;;;;;28851:36;:85;;;;-1:-1:-1;28910:9:0;28891:29;;;;:18;:29;;;;;;28924:12;28891:45;28851:85;28847:166;;;28976:9;28961:25;;;;:14;:25;;;;;:32;;-1:-1:-1;;28961:32:0;28989:4;28961:32;;;28847:166;29050:9;29031:29;;;;:18;:29;;;;;29063:12;29031:44;;28796:295;-1:-1:-1;;;;;29112:25:0;;;;;;:19;:25;;;;;;;;29111:26;:71;;;;-1:-1:-1;;;;;;29159:23:0;;;;;;:19;:23;;;;;;;;29158:24;29111:71;29107:1655;;;29262:18;;29252:4;29219:12;16461:18;;;;;;;;;;;-1:-1:-1;29234:46:0;;;;;29327:43;;-1:-1:-1;29359:11:0;;-1:-1:-1;;;29359:11:0;;;;29327:43;:81;;;;-1:-1:-1;;;;;;29396:12:0;;;;;;:6;:12;;;;;;;;29395:13;29327:81;29301:301;;;29473:8;:15;;-1:-1:-1;;;;29473:15:0;-1:-1:-1;;;29473:15:0;;;29524:18;;29511:32;;:12;:32::i;:::-;29566:8;:16;;-1:-1:-1;;;;29566:16:0;;;29301:301;29626:11;;-1:-1:-1;;;29626:11:0;;;;29622:1123;;;-1:-1:-1;;;;;29742:10:0;;29662:12;29742:10;;;:6;:10;;;;;;29662:12;;29742:10;;:32;;;;-1:-1:-1;29756:13:0;;:18;;29742:32;29738:751;;;29842:5;29826:13;;29817:6;:22;;;;:::i;:::-;:30;;;;:::i;:::-;29810:37;;29909:13;;29895:11;;29888:4;:18;;;;:::i;:::-;:34;;;;:::i;:::-;29874:48;;;;:::i;:::-;;;29992:13;;29974:15;;29967:4;:22;;;;:::i;:::-;:38;;;;:::i;:::-;29949:14;;:56;;;;;;;:::i;:::-;;;;-1:-1:-1;;30077:13:0;;30058:16;;30051:23;;:4;:23;:::i;:::-;:39;;;;:::i;:::-;30032:15;;:58;;;;;;;:::i;:::-;;;;-1:-1:-1;29738:751:0;;-1:-1:-1;29738:751:0;;-1:-1:-1;;;;;30124:12:0;;;;;;:6;:12;;;;;;;;:33;;;;-1:-1:-1;30140:12:0;;:17;;30124:33;30120:369;;;30223:5;30208:12;;30199:6;:21;;;;:::i;:::-;:29;;;;:::i;:::-;30192:36;;30289:12;;30276:10;;30269:4;:17;;;;:::i;:::-;:32;;;;:::i;:::-;30255:46;;;;:::i;:::-;;;30370:12;;30353:14;;30346:4;:21;;;;:::i;:::-;:36;;;;:::i;:::-;30328:14;;:54;;;;;;;:::i;:::-;;;;-1:-1:-1;;30453:12:0;;30435:15;;30428:22;;:4;:22;:::i;:::-;:37;;;;:::i;:::-;30409:15;;:56;;;;;;;:::i;:::-;;;;-1:-1:-1;;30120:369:0;30515:8;;30511:213;;30552:14;30562:4;30552:14;;:::i;:::-;;;30593:42;30609:4;30623;30630;30593:15;:42::i;:::-;30662:38;30682:4;30689:10;30662:11;:38::i;:::-;29639:1106;;29622:1123;29198:1564;29107:1655;30787:33;30803:4;30809:2;30813:6;30787:15;:33::i;22255:591::-;-1:-1:-1;;;;;22339:21:0;;22331:67;;;;-1:-1:-1;;;22331:67:0;;11312:2:1;22331:67:0;;;11294:21:1;11351:2;11331:18;;;11324:30;11390:34;11370:18;;;11363:62;-1:-1:-1;;;11441:18:1;;;11434:31;11482:19;;22331:67:0;11110:397:1;22331:67:0;-1:-1:-1;;;;;22498:18:0;;22473:22;22498:18;;;;;;;;;;;22535:24;;;;22527:71;;;;-1:-1:-1;;;22527:71:0;;11714:2:1;22527:71:0;;;11696:21:1;11753:2;11733:18;;;11726:30;11792:34;11772:18;;;11765:62;-1:-1:-1;;;11843:18:1;;;11836:32;11885:19;;22527:71:0;11512:398:1;22527:71:0;-1:-1:-1;;;;;22634:18:0;;:9;:18;;;;;;;;;;22655:23;;;22634:44;;22700:12;:22;;22672:6;;22634:9;22700:22;;22672:6;;22700:22;:::i;:::-;;;;-1:-1:-1;;22740:37:0;;1916:25:1;;;22766:1:0;;-1:-1:-1;;;;;22740:37:0;;;;;1904:2:1;1889:18;22740:37:0;;;;;;;32590:100:::1;32539:158;32466:231:::0;:::o;30838:1224::-;30902:13;30935:15;;30918:14;;:32;;;;:::i;:::-;30902:48;;30961:22;31018:5;31001:14;;30986:12;:29;;;;:::i;:::-;:37;;;;:::i;:::-;30961:62;;31034:17;31087:5;31069:15;;31054:12;:30;;;;:::i;:::-;:38;;;;:::i;:::-;31034:58;-1:-1:-1;31105:19:0;31127:26;31034:58;31127:14;:26;:::i;:::-;31105:48;;31166:62;31183:4;31198:15;31216:11;31166:8;:62::i;:::-;31265:16;;;31279:1;31265:16;;;;;;;;31241:21;;31265:16;;;;;;;;;;-1:-1:-1;31265:16:0;31241:40;;31310:4;31292;31297:1;31292:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31292:23:0;;;-1:-1:-1;;;;;31292:23:0;;;;;31336:15;-1:-1:-1;;;;;31336:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31326:4;31331:1;31326:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31326:32:0;;;:7;;;;;;;;;:32;31397:224;;-1:-1:-1;;;31397:224:0;;:15;:66;;;;;;:224;;31478:11;;31504:1;;31548:4;;31575;;31595:15;;31397:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;31655:21:0;;-1:-1:-1;31634:18:0;;-1:-1:-1;31732:11:0;;-1:-1:-1;31707:22:0;31720:9;31655:21;31707:22;:::i;:::-;:36;;;;:::i;:::-;31687:56;-1:-1:-1;31754:16:0;31773:22;31687:56;31773:10;:22;:::i;:::-;31853:15;;31845:51;;31754:41;;-1:-1:-1;31808:12:0;;-1:-1:-1;;;;;31853:15:0;;;;31882:9;;31808:12;31845:51;31808:12;31845:51;31882:9;31853:15;31845:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31929:14:0;;31921:49;;31831:65;;-1:-1:-1;;;;;;31929:14:0;;31957:8;;31921:49;;;;31957:8;31929:14;31921:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31907:63;;;;;32002:9;31983:15;;:28;;;;;;;:::i;:::-;;;;;;;;32040:14;32022;;:32;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;;;;;;30838:1224:0:o;20565:671::-;-1:-1:-1;;;;;20696:18:0;;20688:68;;;;-1:-1:-1;;;20688:68:0;;13568:2:1;20688:68:0;;;13550:21:1;13607:2;13587:18;;;13580:30;13646:34;13626:18;;;13619:62;-1:-1:-1;;;13697:18:1;;;13690:35;13742:19;;20688:68:0;13366:401:1;20688:68:0;-1:-1:-1;;;;;20775:16:0;;20767:64;;;;-1:-1:-1;;;20767:64:0;;13974:2:1;20767:64:0;;;13956:21:1;14013:2;13993:18;;;13986:30;14052:34;14032:18;;;14025:62;-1:-1:-1;;;14103:18:1;;;14096:33;14146:19;;20767:64:0;13772:399:1;20767:64:0;-1:-1:-1;;;;;20917:15:0;;20895:19;20917:15;;;;;;;;;;;20951:21;;;;20943:72;;;;-1:-1:-1;;;20943:72:0;;14378:2:1;20943:72:0;;;14360:21:1;14417:2;14397:18;;;14390:30;14456:34;14436:18;;;14429:62;-1:-1:-1;;;14507:18:1;;;14500:36;14553:19;;20943:72:0;14176:402:1;20943:72:0;-1:-1:-1;;;;;21051:15:0;;;:9;:15;;;;;;;;;;;21069:20;;;21051:38;;21111:13;;;;;;;;:23;;21083:6;;21051:9;21111:23;;21083:6;;21111:23;:::i;:::-;;;;;;;;21167:2;-1:-1:-1;;;;;21152:26:0;21161:4;-1:-1:-1;;;;;21152:26:0;;21171:6;21152:26;;;;1916:25:1;;1904:2;1889:18;;1770:177;21152:26:0;;;;;;;;21191:37;32466:231;9094:191;9187:6;;;-1:-1:-1;;;;;9204:17:0;;;-1:-1:-1;;;;;;9204:17:0;;;;;;;9237:40;;9187:6;;;9204:17;9187:6;;9237:40;;9168:16;;9237:40;9157:128;9094:191;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1215:316::-;1292:6;1300;1308;1361:2;1349:9;1340:7;1336:23;1332:32;1329:52;;;1377:1;1374;1367:12;1329:52;-1:-1:-1;;1400:23:1;;;1470:2;1455:18;;1442:32;;-1:-1:-1;1521:2:1;1506:18;;;1493:32;;1215:316;-1:-1:-1;1215:316:1:o;1952:247::-;2011:6;2064:2;2052:9;2043:7;2039:23;2035:32;2032:52;;;2080:1;2077;2070:12;2032:52;2119:9;2106:23;2138:31;2163:5;2138:31;:::i;:::-;2188:5;1952:247;-1:-1:-1;;;1952:247:1:o;2204:456::-;2281:6;2289;2297;2350:2;2338:9;2329:7;2325:23;2321:32;2318:52;;;2366:1;2363;2356:12;2318:52;2405:9;2392:23;2424:31;2449:5;2424:31;:::i;:::-;2474:5;-1:-1:-1;2531:2:1;2516:18;;2503:32;2544:33;2503:32;2544:33;:::i;:::-;2204:456;;2596:7;;-1:-1:-1;;;2650:2:1;2635:18;;;;2622:32;;2204:456::o;2854:127::-;2915:10;2910:3;2906:20;2903:1;2896:31;2946:4;2943:1;2936:15;2970:4;2967:1;2960:15;2986:275;3057:2;3051:9;3122:2;3103:13;;-1:-1:-1;;3099:27:1;3087:40;;3157:18;3142:34;;3178:22;;;3139:62;3136:88;;;3204:18;;:::i;:::-;3240:2;3233:22;2986:275;;-1:-1:-1;2986:275:1:o;3266:183::-;3326:4;3359:18;3351:6;3348:30;3345:56;;;3381:18;;:::i;:::-;-1:-1:-1;3426:1:1;3422:14;3438:4;3418:25;;3266:183::o;3454:743::-;3508:5;3561:3;3554:4;3546:6;3542:17;3538:27;3528:55;;3579:1;3576;3569:12;3528:55;3615:6;3602:20;3641:4;3665:60;3681:43;3721:2;3681:43;:::i;:::-;3665:60;:::i;:::-;3747:3;3771:2;3766:3;3759:15;3799:4;3794:3;3790:14;3783:21;;3856:4;3850:2;3847:1;3843:10;3835:6;3831:23;3827:34;3813:48;;3884:3;3876:6;3873:15;3870:35;;;3901:1;3898;3891:12;3870:35;3937:4;3929:6;3925:17;3951:217;3967:6;3962:3;3959:15;3951:217;;;4047:3;4034:17;4064:31;4089:5;4064:31;:::i;:::-;4108:18;;4146:12;;;;3984;;3951:217;;;-1:-1:-1;4186:5:1;3454:743;-1:-1:-1;;;;;;3454:743:1:o;4202:348::-;4286:6;4339:2;4327:9;4318:7;4314:23;4310:32;4307:52;;;4355:1;4352;4345:12;4307:52;4395:9;4382:23;4428:18;4420:6;4417:30;4414:50;;;4460:1;4457;4450:12;4414:50;4483:61;4536:7;4527:6;4516:9;4512:22;4483:61;:::i;:::-;4473:71;4202:348;-1:-1:-1;;;;4202:348:1:o;4555:180::-;4614:6;4667:2;4655:9;4646:7;4642:23;4638:32;4635:52;;;4683:1;4680;4673:12;4635:52;-1:-1:-1;4706:23:1;;4555:180;-1:-1:-1;4555:180:1:o;4948:160::-;5013:20;;5069:13;;5062:21;5052:32;;5042:60;;5098:1;5095;5088:12;5042:60;4948:160;;;:::o;5113:315::-;5178:6;5186;5239:2;5227:9;5218:7;5214:23;5210:32;5207:52;;;5255:1;5252;5245:12;5207:52;5294:9;5281:23;5313:31;5338:5;5313:31;:::i;:::-;5363:5;-1:-1:-1;5387:35:1;5418:2;5403:18;;5387:35;:::i;:::-;5377:45;;5113:315;;;;;:::o;5433:1138::-;5551:6;5559;5612:2;5600:9;5591:7;5587:23;5583:32;5580:52;;;5628:1;5625;5618:12;5580:52;5668:9;5655:23;5697:18;5738:2;5730:6;5727:14;5724:34;;;5754:1;5751;5744:12;5724:34;5777:61;5830:7;5821:6;5810:9;5806:22;5777:61;:::i;:::-;5767:71;;5857:2;5847:12;;5912:2;5901:9;5897:18;5884:32;5941:2;5931:8;5928:16;5925:36;;;5957:1;5954;5947:12;5925:36;5980:24;;;-1:-1:-1;6035:4:1;6027:13;;6023:27;-1:-1:-1;6013:55:1;;6064:1;6061;6054:12;6013:55;6100:2;6087:16;6123:60;6139:43;6179:2;6139:43;:::i;6123:60::-;6217:15;;;6299:1;6295:10;;;;6287:19;;6283:28;;;6248:12;;;;6323:19;;;6320:39;;;6355:1;6352;6345:12;6320:39;6379:11;;;;6399:142;6415:6;6410:3;6407:15;6399:142;;;6481:17;;6469:30;;6432:12;;;;6519;;;;6399:142;;;6560:5;6550:15;;;;;;;5433:1138;;;;;:::o;6576:180::-;6632:6;6685:2;6673:9;6664:7;6660:23;6656:32;6653:52;;;6701:1;6698;6691:12;6653:52;6724:26;6740:9;6724:26;:::i;6761:388::-;6829:6;6837;6890:2;6878:9;6869:7;6865:23;6861:32;6858:52;;;6906:1;6903;6896:12;6858:52;6945:9;6932:23;6964:31;6989:5;6964:31;:::i;:::-;7014:5;-1:-1:-1;7071:2:1;7056:18;;7043:32;7084:33;7043:32;7084:33;:::i;:::-;7136:7;7126:17;;;6761:388;;;;;:::o;7154:380::-;7233:1;7229:12;;;;7276;;;7297:61;;7351:4;7343:6;7339:17;7329:27;;7297:61;7404:2;7396:6;7393:14;7373:18;7370:38;7367:161;;7450:10;7445:3;7441:20;7438:1;7431:31;7485:4;7482:1;7475:15;7513:4;7510:1;7503:15;7367:161;;7154:380;;;:::o;7539:356::-;7741:2;7723:21;;;7760:18;;;7753:30;7819:34;7814:2;7799:18;;7792:62;7886:2;7871:18;;7539:356::o;7900:127::-;7961:10;7956:3;7952:20;7949:1;7942:31;7992:4;7989:1;7982:15;8016:4;8013:1;8006:15;8032:125;8097:9;;;8118:10;;;8115:36;;;8131:18;;:::i;8162:127::-;8223:10;8218:3;8214:20;8211:1;8204:31;8254:4;8251:1;8244:15;8278:4;8275:1;8268:15;10582:168;10655:9;;;10686;;10703:15;;;10697:22;;10683:37;10673:71;;10724:18;;:::i;10755:217::-;10795:1;10821;10811:132;;10865:10;10860:3;10856:20;10853:1;10846:31;10900:4;10897:1;10890:15;10928:4;10925:1;10918:15;10811:132;-1:-1:-1;10957:9:1;;10755:217::o;10977:128::-;11044:9;;;11065:11;;;11062:37;;;11079:18;;:::i;11915:251::-;11985:6;12038:2;12026:9;12017:7;12013:23;12009:32;12006:52;;;12054:1;12051;12044:12;12006:52;12086:9;12080:16;12105:31;12130:5;12105:31;:::i;12171:980::-;12433:4;12481:3;12470:9;12466:19;12512:6;12501:9;12494:25;12538:2;12576:6;12571:2;12560:9;12556:18;12549:34;12619:3;12614:2;12603:9;12599:18;12592:31;12643:6;12678;12672:13;12709:6;12701;12694:22;12747:3;12736:9;12732:19;12725:26;;12786:2;12778:6;12774:15;12760:29;;12807:1;12817:195;12831:6;12828:1;12825:13;12817:195;;;12896:13;;-1:-1:-1;;;;;12892:39:1;12880:52;;12987:15;;;;12952:12;;;;12928:1;12846:9;12817:195;;;-1:-1:-1;;;;;;;13068:32:1;;;;13063:2;13048:18;;13041:60;-1:-1:-1;;;13132:3:1;13117:19;13110:35;13029:3;12171:980;-1:-1:-1;;;12171:980:1:o

Swarm Source

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