ETH Price: $2,478.37 (-1.69%)

Token

The Cure DAO (CURE)
 

Overview

Max Total Supply

1,000,000,000 CURE

Holders

17

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,873,434.801016069429630181 CURE

Value
$0.00
0xf46d6e90723cf72b2a6c534531e700ada0bf4ce9
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
TheCureDAO

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-10-10
*/

// SPDX-License-Identifier: MIT

/*

Telegram: https://t.me/TheCureDAO
Website: https://thecuretoken.xyz

*/

pragma solidity 0.8.16;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function allPairsLength() external view returns (uint256);

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

    function allPairs(uint256) external view returns (address pair);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

/**
 * @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 decimals places of the token.
     */
    function decimals() external view returns (uint8);

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

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

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

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

    /**
     * @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() external view virtual override returns (uint256) {
        return _totalSupply;
    }

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

    /**
     * @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)
        external
        virtual
        override
        returns (bool)
    {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @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)
        external
        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
    ) external virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        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)
        external
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev 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)
        external
        virtual
        returns (bool)
    {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

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

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

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

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

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

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

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

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

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

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

        emit Transfer(from, to, amount);
    }
}

contract TheCureDAO is ERC20, Ownable {
    address public immutable uniswapV2Pair;
    IUniswapV2Router02 public immutable uniswapV2Router;

    bool inSwapAndLiquify;
    uint256 private _marketingReserves = 0;
    mapping(address => bool) private _isExcludedFromFee;

    // TOKENOMICS START
    string private _name = "The Cure DAO";
    string private _symbol = "CURE";
    uint8 private _decimals = 18;
    uint256 private _supply = 1_000_000_000;
    uint256 public taxForLiquidity = 2;
    uint256 public taxForMarketingAndTeam = 4;
    uint256 public maxTxAmount = 15_000_000 * 10**_decimals;
    uint256 public maxWalletTokens = 25_000_000 * 10**_decimals;
    uint256 private _numTokensSellToAddToLiquidity = 5_000_000 * 10**_decimals;
    uint256 private _numTokensSellToAddToETH = 5_000_000 * 10**_decimals;
    address public marketingWallet = 0xe5fA3E227e6b62C0070d116DFc1cd9D0720178bB;
    // TOKENOMICS END

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

    modifier lockTheSwap() {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }

    /**
     * @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() ERC20(_name, _symbol) {
        _mint(msg.sender, (_supply * 10**_decimals));

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

        uniswapV2Router = _uniswapV2Router;

        _isExcludedFromFee[address(uniswapV2Router)] = true;
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromFee[marketingWallet] = true;
    }

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

        if ((from == uniswapV2Pair || to == uniswapV2Pair) && !inSwapAndLiquify) {
            if (from != uniswapV2Pair) {
                uint256 contractLiquidityBalance = balanceOf(address(this)) - _marketingReserves;
                if (contractLiquidityBalance >= _numTokensSellToAddToLiquidity) {
                    _swapAndLiquify(_numTokensSellToAddToLiquidity);
                }
                if ((_marketingReserves) >= _numTokensSellToAddToETH) {
                    _swapTokensForEth(_numTokensSellToAddToETH);
                    _marketingReserves -= _numTokensSellToAddToETH;
                    bool sent = payable(marketingWallet).send(address(this).balance);
                    require(sent, "Failed to send ETH");
                }
            }

            uint256 transferAmount;
            if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
                transferAmount = amount;
            } 
            else {
                require(amount <= maxTxAmount, "ERC20: transfer amount exceeds the max transaction amount");
                if(from == uniswapV2Pair){
                    require((amount + balanceOf(to)) <= maxWalletTokens, "ERC20: balance amount exceeded max wallet amount limit");
                }

                uint256 marketingShare = ((amount * taxForMarketingAndTeam) / 100);
                uint256 liquidityShare = ((amount * taxForLiquidity) / 100);
                transferAmount = amount - (marketingShare + liquidityShare);
                _marketingReserves += marketingShare;

                super._transfer(from, address(this), (marketingShare + liquidityShare));
            }
            super._transfer(from, to, transferAmount);
        } 
        else {
            super._transfer(from, to, amount);
        }
    }

    function clearStuckETH() external {
        payable(marketingWallet).transfer(address(this).balance);
    }
    
    function clearStuckToken() external {
        require(balanceOf(address(this)) > 0, "Insufficient Balance");
        super._transfer(address(this), marketingWallet, balanceOf(address(this)));
    }

    function _swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap {
        uint256 half = (contractTokenBalance / 2);
        uint256 otherHalf = (contractTokenBalance - half);

        uint256 initialBalance = address(this).balance;

        _swapTokensForEth(half);

        uint256 newBalance = (address(this).balance - initialBalance);

        _addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

    function _swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            (block.timestamp + 300)
        );
    }

    function _addLiquidity(uint256 tokenAmount, uint256 ethAmount)
        private
        lockTheSwap
    {
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0,
            0,
            marketingWallet,
            block.timestamp
        );
    }

    function updateMarketingWallet(address _marketingWallet)
        public
        onlyOwner
        returns (bool)
    {
        marketingWallet = _marketingWallet;
        return true;
    }

    function changeTaxForLiquidityAndMarketing(uint256 _taxForLiquidity, uint256 _taxForMarketingAndTeam)
        public
        onlyOwner
        returns (bool)
    {
        require((_taxForLiquidity+_taxForMarketingAndTeam) <= 100, "ERC20: total tax must not be greater than 100");
        taxForLiquidity = _taxForLiquidity;
        taxForMarketingAndTeam = _taxForMarketingAndTeam;

        return true;
    }

    function updateMaxTxAmount(uint256 _maxTxAmount)
        public
        onlyOwner
        returns (bool)
    {
        maxTxAmount = _maxTxAmount * 10**_decimals;

        return true;
    }

    function updateMaxWalletAmount(uint256 _maxWalletTokens)
        public
        onlyOwner
        returns (bool)
    {
        maxWalletTokens = _maxWalletTokens * 10**_decimals;

        return true;
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"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":"_taxForLiquidity","type":"uint256"},{"internalType":"uint256","name":"_taxForMarketingAndTeam","type":"uint256"}],"name":"changeTaxForLiquidityAndMarketing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearStuckETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForMarketingAndTeam","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":"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":"_marketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"updateMaxTxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletTokens","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405260006006556040518060400160405280600c81526020017f54686520437572652044414f0000000000000000000000000000000000000000815250600890816200004f919062000b3c565b506040518060400160405280600481526020017f43555245000000000000000000000000000000000000000000000000000000008152506009908162000096919062000b3c565b506012600a60006101000a81548160ff021916908360ff160217905550633b9aca00600b556002600c556004600d55600a60009054906101000a900460ff16600a620000e3919062000db3565b62e4e1c0620000f3919062000e04565b600e55600a60009054906101000a900460ff16600a62000114919062000db3565b63017d784062000125919062000e04565b600f55600a60009054906101000a900460ff16600a62000146919062000db3565b624c4b4062000156919062000e04565b601055600a60009054906101000a900460ff16600a62000177919062000db3565b624c4b4062000187919062000e04565b60115573e5fa3e227e6b62c0070d116dfc1cd9d0720178bb601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620001ec57600080fd5b5060088054620001fc906200092b565b80601f01602080910402602001604051908101604052809291908181526020018280546200022a906200092b565b80156200027b5780601f106200024f576101008083540402835291602001916200027b565b820191906000526020600020905b8154815290600101906020018083116200025d57829003601f168201915b5050505050600980546200028f906200092b565b80601f0160208091040260200160405190810160405280929190818152602001828054620002bd906200092b565b80156200030e5780601f10620002e2576101008083540402835291602001916200030e565b820191906000526020600020905b815481529060010190602001808311620002f057829003601f168201915b5050505050816003908162000324919062000b3c565b50806004908162000336919062000b3c565b505050620003596200034d620006af60201b60201c565b620006b760201b60201c565b6200039733600a60009054906101000a900460ff16600a6200037c919062000db3565b600b546200038b919062000e04565b6200077d60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003fc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000422919062000ecf565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200048a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004b0919062000ecf565b6040518363ffffffff1660e01b8152600401620004cf92919062000f12565b6020604051808303816000875af1158015620004ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000515919062000ecf565b73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff168152505060016007600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160076000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506200102b565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007e69062000fa0565b60405180910390fd5b806002600082825462000803919062000fc2565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008b691906200100e565b60405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200094457607f821691505b6020821081036200095a5762000959620008fc565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009c47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000985565b620009d0868362000985565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a1d62000a1762000a1184620009e8565b620009f2565b620009e8565b9050919050565b6000819050919050565b62000a3983620009fc565b62000a5162000a488262000a24565b84845462000992565b825550505050565b600090565b62000a6862000a59565b62000a7581848462000a2e565b505050565b5b8181101562000a9d5762000a9160008262000a5e565b60018101905062000a7b565b5050565b601f82111562000aec5762000ab68162000960565b62000ac18462000975565b8101602085101562000ad1578190505b62000ae962000ae08562000975565b83018262000a7a565b50505b505050565b600082821c905092915050565b600062000b116000198460080262000af1565b1980831691505092915050565b600062000b2c838362000afe565b9150826002028217905092915050565b62000b4782620008c2565b67ffffffffffffffff81111562000b635762000b62620008cd565b5b62000b6f82546200092b565b62000b7c82828562000aa1565b600060209050601f83116001811462000bb4576000841562000b9f578287015190505b62000bab858262000b1e565b86555062000c1b565b601f19841662000bc48662000960565b60005b8281101562000bee5784890151825560018201915060208501945060208101905062000bc7565b8683101562000c0e578489015162000c0a601f89168262000afe565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000cb15780860481111562000c895762000c8862000c23565b5b600185161562000c995780820291505b808102905062000ca98562000c52565b945062000c69565b94509492505050565b60008262000ccc576001905062000d9f565b8162000cdc576000905062000d9f565b816001811462000cf5576002811462000d005762000d36565b600191505062000d9f565b60ff84111562000d155762000d1462000c23565b5b8360020a91508482111562000d2f5762000d2e62000c23565b5b5062000d9f565b5060208310610133831016604e8410600b841016171562000d705782820a90508381111562000d6a5762000d6962000c23565b5b62000d9f565b62000d7f848484600162000c5f565b9250905081840481111562000d995762000d9862000c23565b5b81810290505b9392505050565b600060ff82169050919050565b600062000dc082620009e8565b915062000dcd8362000da6565b925062000dfc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000cba565b905092915050565b600062000e1182620009e8565b915062000e1e83620009e8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e5a5762000e5962000c23565b5b828202905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000e978262000e6a565b9050919050565b62000ea98162000e8a565b811462000eb557600080fd5b50565b60008151905062000ec98162000e9e565b92915050565b60006020828403121562000ee85762000ee762000e65565b5b600062000ef88482850162000eb8565b91505092915050565b62000f0c8162000e8a565b82525050565b600060408201905062000f29600083018562000f01565b62000f38602083018462000f01565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f88601f8362000f3f565b915062000f958262000f50565b602082019050919050565b6000602082019050818103600083015262000fbb8162000f79565b9050919050565b600062000fcf82620009e8565b915062000fdc83620009e8565b925082820190508082111562000ff75762000ff662000c23565b5b92915050565b6200100881620009e8565b82525050565b600060208201905062001025600083018462000ffd565b92915050565b60805160a051612f0a620010906000396000818161077401528181611a6301528181611b4401528181611b6b01528181611c4a0152611c71015260008181610811015281816110e70152818161113c015281816111aa01526113f10152612f0a6000f3fe6080604052600436106101a05760003560e01c806375f0a874116100ec578063af8af6901161008a578063dd62ed3e11610064578063dd62ed3e14610615578063f2fde38b14610652578063f345bd851461067b578063f88de0c3146106a6576101a7565b8063af8af69014610584578063c18bc195146105c1578063d85a2828146105fe576101a7565b806395d89b41116100c657806395d89b41146104a2578063a457c2d7146104cd578063a9059cbb1461050a578063aacebbe314610547576101a7565b806375f0a874146104215780638c0b5e221461044c5780638da5cb5b14610477576101a7565b806339509351116101595780636256d181116101335780636256d1811461036557806363a803e1146103a257806370a08231146103cd578063715018a61461040a576101a7565b806339509351146102d257806349bd5a5e1461030f5780635dc3c8f31461033a576101a7565b806306fdde03146101ac578063095ea7b3146101d75780631694505e1461021457806318160ddd1461023f57806323b872dd1461026a578063313ce567146102a7576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c16106bd565b6040516101ce9190611deb565b60405180910390f35b3480156101e357600080fd5b506101fe60048036038101906101f99190611ea6565b61074f565b60405161020b9190611f01565b60405180910390f35b34801561022057600080fd5b50610229610772565b6040516102369190611f7b565b60405180910390f35b34801561024b57600080fd5b50610254610796565b6040516102619190611fa5565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c9190611fc0565b6107a0565b60405161029e9190611f01565b60405180910390f35b3480156102b357600080fd5b506102bc6107cf565b6040516102c9919061202f565b60405180910390f35b3480156102de57600080fd5b506102f960048036038101906102f49190611ea6565b6107d8565b6040516103069190611f01565b60405180910390f35b34801561031b57600080fd5b5061032461080f565b6040516103319190612059565b60405180910390f35b34801561034657600080fd5b5061034f610833565b60405161035c9190611fa5565b60405180910390f35b34801561037157600080fd5b5061038c60048036038101906103879190612074565b610839565b6040516103999190611f01565b60405180910390f35b3480156103ae57600080fd5b506103b7610879565b6040516103c49190611fa5565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef91906120a1565b61087f565b6040516104019190611fa5565b60405180910390f35b34801561041657600080fd5b5061041f6108c7565b005b34801561042d57600080fd5b506104366108db565b6040516104439190612059565b60405180910390f35b34801561045857600080fd5b50610461610901565b60405161046e9190611fa5565b60405180910390f35b34801561048357600080fd5b5061048c610907565b6040516104999190612059565b60405180910390f35b3480156104ae57600080fd5b506104b7610931565b6040516104c49190611deb565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190611ea6565b6109c3565b6040516105019190611f01565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c9190611ea6565b610a3a565b60405161053e9190611f01565b60405180910390f35b34801561055357600080fd5b5061056e600480360381019061056991906120a1565b610a5d565b60405161057b9190611f01565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a691906120ce565b610ab1565b6040516105b89190611f01565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e39190612074565b610b22565b6040516105f59190611f01565b60405180910390f35b34801561060a57600080fd5b50610613610b62565b005b34801561062157600080fd5b5061063c6004803603810190610637919061210e565b610be4565b6040516106499190611fa5565b60405180910390f35b34801561065e57600080fd5b50610679600480360381019061067491906120a1565b610c6b565b005b34801561068757600080fd5b50610690610cee565b60405161069d9190611fa5565b60405180910390f35b3480156106b257600080fd5b506106bb610cf4565b005b6060600380546106cc9061217d565b80601f01602080910402602001604051908101604052809291908181526020018280546106f89061217d565b80156107455780601f1061071a57610100808354040283529160200191610745565b820191906000526020600020905b81548152906001019060200180831161072857829003601f168201915b5050505050905090565b60008061075a610d5f565b9050610767818585610d67565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6000806107ab610d5f565b90506107b8858285610f30565b6107c3858585610fbc565b60019150509392505050565b60006012905090565b6000806107e3610d5f565b90506108048185856107f58589610be4565b6107ff91906121dd565b610d67565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600d5481565b6000610843611544565b600a60009054906101000a900460ff16600a61085f9190612344565b8261086a919061238f565b600e8190555060019050919050565b600f5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108cf611544565b6108d960006115c2565b565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546109409061217d565b80601f016020809104026020016040519081016040528092919081815260200182805461096c9061217d565b80156109b95780601f1061098e576101008083540402835291602001916109b9565b820191906000526020600020905b81548152906001019060200180831161099c57829003601f168201915b5050505050905090565b6000806109ce610d5f565b905060006109dc8286610be4565b905083811015610a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a189061245b565b60405180910390fd5b610a2e8286868403610d67565b60019250505092915050565b600080610a45610d5f565b9050610a52818585610fbc565b600191505092915050565b6000610a67611544565b81601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000610abb611544565b60648284610ac991906121dd565b1115610b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b01906124ed565b60405180910390fd5b82600c8190555081600d819055506001905092915050565b6000610b2c611544565b600a60009054906101000a900460ff16600a610b489190612344565b82610b53919061238f565b600f8190555060019050919050565b6000610b6d3061087f565b11610bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba490612559565b60405180910390fd5b610be230601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610bdd3061087f565b611688565b565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610c73611544565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd9906125eb565b60405180910390fd5b610ceb816115c2565b50565b600c5481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610d5c573d6000803e3d6000fd5b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcd9061267d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3c9061270f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f239190611fa5565b60405180910390a3505050565b6000610f3c8484610be4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610fb65781811015610fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9f9061277b565b60405180910390fd5b610fb58484848403610d67565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361102b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110229061280d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361109a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110919061289f565b60405180910390fd5b806110a48461087f565b10156110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc90612931565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061118a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156111a35750600560149054906101000a900460ff16155b15611533577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146112fa5760006006546112093061087f565b6112139190612951565b9050601054811061122a576112296010546118e8565b5b601154600654106112f8576112406011546119a9565b601154600660008282546112549190612951565b925050819055506000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050509050806112f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ed906129d1565b60405180910390fd5b505b505b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061139d5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156113aa57819050611522565b600e548211156113ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e690612a63565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361149b57600f5461144e8461087f565b8361145991906121dd565b111561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149190612af5565b60405180910390fd5b5b60006064600d54846114ad919061238f565b6114b79190612b44565b905060006064600c54856114cb919061238f565b6114d59190612b44565b905080826114e391906121dd565b846114ee9190612951565b9250816006600082825461150291906121dd565b9250508190555061151f8630838561151a91906121dd565b611688565b50505b61152d848483611688565b5061153f565b61153e838383611688565b5b505050565b61154c610d5f565b73ffffffffffffffffffffffffffffffffffffffff1661156a610907565b73ffffffffffffffffffffffffffffffffffffffff16146115c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b790612bc1565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ee9061280d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d9061289f565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156117ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e390612931565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118da9190611fa5565b60405180910390a350505050565b6001600560146101000a81548160ff02191690831515021790555060006002826119129190612b44565b9050600081836119229190612951565b90506000479050611932836119a9565b600081476119409190612951565b905061194c8382611c29565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161197f93929190612be1565b60405180910390a1505050506000600560146101000a81548160ff02191690831515021790555050565b6001600560146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156119e1576119e0612c18565b5b604051908082528060200260200182016040528015611a0f5781602001602082028036833780820191505090505b5090503081600081518110611a2757611a26612c47565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af09190612c8b565b81600181518110611b0457611b03612c47565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611b69307f000000000000000000000000000000000000000000000000000000000000000084610d67565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947836000843061012c42611bb891906121dd565b6040518663ffffffff1660e01b8152600401611bd8959493929190612db1565b600060405180830381600087803b158015611bf257600080fd5b505af1158015611c06573d6000803e3d6000fd5b50505050506000600560146101000a81548160ff02191690831515021790555050565b6001600560146101000a81548160ff021916908315150217905550611c6f307f000000000000000000000000000000000000000000000000000000000000000084610d67565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611cf696959493929190612e0b565b60606040518083038185885af1158015611d14573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d399190612e81565b5050506000600560146101000a81548160ff0219169083151502179055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611d95578082015181840152602081019050611d7a565b60008484015250505050565b6000601f19601f8301169050919050565b6000611dbd82611d5b565b611dc78185611d66565b9350611dd7818560208601611d77565b611de081611da1565b840191505092915050565b60006020820190508181036000830152611e058184611db2565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611e3d82611e12565b9050919050565b611e4d81611e32565b8114611e5857600080fd5b50565b600081359050611e6a81611e44565b92915050565b6000819050919050565b611e8381611e70565b8114611e8e57600080fd5b50565b600081359050611ea081611e7a565b92915050565b60008060408385031215611ebd57611ebc611e0d565b5b6000611ecb85828601611e5b565b9250506020611edc85828601611e91565b9150509250929050565b60008115159050919050565b611efb81611ee6565b82525050565b6000602082019050611f166000830184611ef2565b92915050565b6000819050919050565b6000611f41611f3c611f3784611e12565b611f1c565b611e12565b9050919050565b6000611f5382611f26565b9050919050565b6000611f6582611f48565b9050919050565b611f7581611f5a565b82525050565b6000602082019050611f906000830184611f6c565b92915050565b611f9f81611e70565b82525050565b6000602082019050611fba6000830184611f96565b92915050565b600080600060608486031215611fd957611fd8611e0d565b5b6000611fe786828701611e5b565b9350506020611ff886828701611e5b565b925050604061200986828701611e91565b9150509250925092565b600060ff82169050919050565b61202981612013565b82525050565b60006020820190506120446000830184612020565b92915050565b61205381611e32565b82525050565b600060208201905061206e600083018461204a565b92915050565b60006020828403121561208a57612089611e0d565b5b600061209884828501611e91565b91505092915050565b6000602082840312156120b7576120b6611e0d565b5b60006120c584828501611e5b565b91505092915050565b600080604083850312156120e5576120e4611e0d565b5b60006120f385828601611e91565b925050602061210485828601611e91565b9150509250929050565b6000806040838503121561212557612124611e0d565b5b600061213385828601611e5b565b925050602061214485828601611e5b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061219557607f821691505b6020821081036121a8576121a761214e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006121e882611e70565b91506121f383611e70565b925082820190508082111561220b5761220a6121ae565b5b92915050565b60008160011c9050919050565b6000808291508390505b600185111561226857808604811115612244576122436121ae565b5b60018516156122535780820291505b808102905061226185612211565b9450612228565b94509492505050565b600082612281576001905061233d565b8161228f576000905061233d565b81600181146122a557600281146122af576122de565b600191505061233d565b60ff8411156122c1576122c06121ae565b5b8360020a9150848211156122d8576122d76121ae565b5b5061233d565b5060208310610133831016604e8410600b84101617156123135782820a90508381111561230e5761230d6121ae565b5b61233d565b612320848484600161221e565b92509050818404811115612337576123366121ae565b5b81810290505b9392505050565b600061234f82611e70565b915061235a83612013565b92506123877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612271565b905092915050565b600061239a82611e70565b91506123a583611e70565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156123de576123dd6121ae565b5b828202905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612445602583611d66565b9150612450826123e9565b604082019050919050565b6000602082019050818103600083015261247481612438565b9050919050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031303000000000000000000000000000000000000000602082015250565b60006124d7602d83611d66565b91506124e28261247b565b604082019050919050565b60006020820190508181036000830152612506816124ca565b9050919050565b7f496e73756666696369656e742042616c616e6365000000000000000000000000600082015250565b6000612543601483611d66565b915061254e8261250d565b602082019050919050565b6000602082019050818103600083015261257281612536565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006125d5602683611d66565b91506125e082612579565b604082019050919050565b60006020820190508181036000830152612604816125c8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612667602483611d66565b91506126728261260b565b604082019050919050565b600060208201905081810360008301526126968161265a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006126f9602283611d66565b91506127048261269d565b604082019050919050565b60006020820190508181036000830152612728816126ec565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612765601d83611d66565b91506127708261272f565b602082019050919050565b6000602082019050818103600083015261279481612758565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006127f7602583611d66565b91506128028261279b565b604082019050919050565b60006020820190508181036000830152612826816127ea565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612889602383611d66565b91506128948261282d565b604082019050919050565b600060208201905081810360008301526128b88161287c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061291b602683611d66565b9150612926826128bf565b604082019050919050565b6000602082019050818103600083015261294a8161290e565b9050919050565b600061295c82611e70565b915061296783611e70565b925082820390508181111561297f5761297e6121ae565b5b92915050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b60006129bb601283611d66565b91506129c682612985565b602082019050919050565b600060208201905081810360008301526129ea816129ae565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b6000612a4d603983611d66565b9150612a58826129f1565b604082019050919050565b60006020820190508181036000830152612a7c81612a40565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b6000612adf603683611d66565b9150612aea82612a83565b604082019050919050565b60006020820190508181036000830152612b0e81612ad2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612b4f82611e70565b9150612b5a83611e70565b925082612b6a57612b69612b15565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612bab602083611d66565b9150612bb682612b75565b602082019050919050565b60006020820190508181036000830152612bda81612b9e565b9050919050565b6000606082019050612bf66000830186611f96565b612c036020830185611f96565b612c106040830184611f96565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612c8581611e44565b92915050565b600060208284031215612ca157612ca0611e0d565b5b6000612caf84828501612c76565b91505092915050565b6000819050919050565b6000612cdd612cd8612cd384612cb8565b611f1c565b611e70565b9050919050565b612ced81612cc2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612d2881611e32565b82525050565b6000612d3a8383612d1f565b60208301905092915050565b6000602082019050919050565b6000612d5e82612cf3565b612d688185612cfe565b9350612d7383612d0f565b8060005b83811015612da4578151612d8b8882612d2e565b9750612d9683612d46565b925050600181019050612d77565b5085935050505092915050565b600060a082019050612dc66000830188611f96565b612dd36020830187612ce4565b8181036040830152612de58186612d53565b9050612df4606083018561204a565b612e016080830184611f96565b9695505050505050565b600060c082019050612e20600083018961204a565b612e2d6020830188611f96565b612e3a6040830187612ce4565b612e476060830186612ce4565b612e54608083018561204a565b612e6160a0830184611f96565b979650505050505050565b600081519050612e7b81611e7a565b92915050565b600080600060608486031215612e9a57612e99611e0d565b5b6000612ea886828701612e6c565b9350506020612eb986828701612e6c565b9250506040612eca86828701612e6c565b915050925092509256fea26469706673582212209229bc90f75c9e7b1d6337a8fcfb628aa18e12e86adede8baa8d024b29e5309a64736f6c63430008100033

Deployed Bytecode

0x6080604052600436106101a05760003560e01c806375f0a874116100ec578063af8af6901161008a578063dd62ed3e11610064578063dd62ed3e14610615578063f2fde38b14610652578063f345bd851461067b578063f88de0c3146106a6576101a7565b8063af8af69014610584578063c18bc195146105c1578063d85a2828146105fe576101a7565b806395d89b41116100c657806395d89b41146104a2578063a457c2d7146104cd578063a9059cbb1461050a578063aacebbe314610547576101a7565b806375f0a874146104215780638c0b5e221461044c5780638da5cb5b14610477576101a7565b806339509351116101595780636256d181116101335780636256d1811461036557806363a803e1146103a257806370a08231146103cd578063715018a61461040a576101a7565b806339509351146102d257806349bd5a5e1461030f5780635dc3c8f31461033a576101a7565b806306fdde03146101ac578063095ea7b3146101d75780631694505e1461021457806318160ddd1461023f57806323b872dd1461026a578063313ce567146102a7576101a7565b366101a757005b600080fd5b3480156101b857600080fd5b506101c16106bd565b6040516101ce9190611deb565b60405180910390f35b3480156101e357600080fd5b506101fe60048036038101906101f99190611ea6565b61074f565b60405161020b9190611f01565b60405180910390f35b34801561022057600080fd5b50610229610772565b6040516102369190611f7b565b60405180910390f35b34801561024b57600080fd5b50610254610796565b6040516102619190611fa5565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c9190611fc0565b6107a0565b60405161029e9190611f01565b60405180910390f35b3480156102b357600080fd5b506102bc6107cf565b6040516102c9919061202f565b60405180910390f35b3480156102de57600080fd5b506102f960048036038101906102f49190611ea6565b6107d8565b6040516103069190611f01565b60405180910390f35b34801561031b57600080fd5b5061032461080f565b6040516103319190612059565b60405180910390f35b34801561034657600080fd5b5061034f610833565b60405161035c9190611fa5565b60405180910390f35b34801561037157600080fd5b5061038c60048036038101906103879190612074565b610839565b6040516103999190611f01565b60405180910390f35b3480156103ae57600080fd5b506103b7610879565b6040516103c49190611fa5565b60405180910390f35b3480156103d957600080fd5b506103f460048036038101906103ef91906120a1565b61087f565b6040516104019190611fa5565b60405180910390f35b34801561041657600080fd5b5061041f6108c7565b005b34801561042d57600080fd5b506104366108db565b6040516104439190612059565b60405180910390f35b34801561045857600080fd5b50610461610901565b60405161046e9190611fa5565b60405180910390f35b34801561048357600080fd5b5061048c610907565b6040516104999190612059565b60405180910390f35b3480156104ae57600080fd5b506104b7610931565b6040516104c49190611deb565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190611ea6565b6109c3565b6040516105019190611f01565b60405180910390f35b34801561051657600080fd5b50610531600480360381019061052c9190611ea6565b610a3a565b60405161053e9190611f01565b60405180910390f35b34801561055357600080fd5b5061056e600480360381019061056991906120a1565b610a5d565b60405161057b9190611f01565b60405180910390f35b34801561059057600080fd5b506105ab60048036038101906105a691906120ce565b610ab1565b6040516105b89190611f01565b60405180910390f35b3480156105cd57600080fd5b506105e860048036038101906105e39190612074565b610b22565b6040516105f59190611f01565b60405180910390f35b34801561060a57600080fd5b50610613610b62565b005b34801561062157600080fd5b5061063c6004803603810190610637919061210e565b610be4565b6040516106499190611fa5565b60405180910390f35b34801561065e57600080fd5b50610679600480360381019061067491906120a1565b610c6b565b005b34801561068757600080fd5b50610690610cee565b60405161069d9190611fa5565b60405180910390f35b3480156106b257600080fd5b506106bb610cf4565b005b6060600380546106cc9061217d565b80601f01602080910402602001604051908101604052809291908181526020018280546106f89061217d565b80156107455780601f1061071a57610100808354040283529160200191610745565b820191906000526020600020905b81548152906001019060200180831161072857829003601f168201915b5050505050905090565b60008061075a610d5f565b9050610767818585610d67565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6000806107ab610d5f565b90506107b8858285610f30565b6107c3858585610fbc565b60019150509392505050565b60006012905090565b6000806107e3610d5f565b90506108048185856107f58589610be4565b6107ff91906121dd565b610d67565b600191505092915050565b7f0000000000000000000000009b3cc64addc9fb3a0a244d1454b38b176136915b81565b600d5481565b6000610843611544565b600a60009054906101000a900460ff16600a61085f9190612344565b8261086a919061238f565b600e8190555060019050919050565b600f5481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6108cf611544565b6108d960006115c2565b565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600480546109409061217d565b80601f016020809104026020016040519081016040528092919081815260200182805461096c9061217d565b80156109b95780601f1061098e576101008083540402835291602001916109b9565b820191906000526020600020905b81548152906001019060200180831161099c57829003601f168201915b5050505050905090565b6000806109ce610d5f565b905060006109dc8286610be4565b905083811015610a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a189061245b565b60405180910390fd5b610a2e8286868403610d67565b60019250505092915050565b600080610a45610d5f565b9050610a52818585610fbc565b600191505092915050565b6000610a67611544565b81601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000610abb611544565b60648284610ac991906121dd565b1115610b0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b01906124ed565b60405180910390fd5b82600c8190555081600d819055506001905092915050565b6000610b2c611544565b600a60009054906101000a900460ff16600a610b489190612344565b82610b53919061238f565b600f8190555060019050919050565b6000610b6d3061087f565b11610bad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba490612559565b60405180910390fd5b610be230601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610bdd3061087f565b611688565b565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610c73611544565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ce2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd9906125eb565b60405180910390fd5b610ceb816115c2565b50565b600c5481565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610d5c573d6000803e3d6000fd5b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610dd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcd9061267d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610e45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3c9061270f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f239190611fa5565b60405180910390a3505050565b6000610f3c8484610be4565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610fb65781811015610fa8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9f9061277b565b60405180910390fd5b610fb58484848403610d67565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361102b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110229061280d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361109a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110919061289f565b60405180910390fd5b806110a48461087f565b10156110e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110dc90612931565b60405180910390fd5b7f0000000000000000000000009b3cc64addc9fb3a0a244d1454b38b176136915b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061118a57507f0000000000000000000000009b3cc64addc9fb3a0a244d1454b38b176136915b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156111a35750600560149054906101000a900460ff16155b15611533577f0000000000000000000000009b3cc64addc9fb3a0a244d1454b38b176136915b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146112fa5760006006546112093061087f565b6112139190612951565b9050601054811061122a576112296010546118e8565b5b601154600654106112f8576112406011546119a9565b601154600660008282546112549190612951565b925050819055506000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050509050806112f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ed906129d1565b60405180910390fd5b505b505b6000600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061139d5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156113aa57819050611522565b600e548211156113ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e690612a63565b60405180910390fd5b7f0000000000000000000000009b3cc64addc9fb3a0a244d1454b38b176136915b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361149b57600f5461144e8461087f565b8361145991906121dd565b111561149a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149190612af5565b60405180910390fd5b5b60006064600d54846114ad919061238f565b6114b79190612b44565b905060006064600c54856114cb919061238f565b6114d59190612b44565b905080826114e391906121dd565b846114ee9190612951565b9250816006600082825461150291906121dd565b9250508190555061151f8630838561151a91906121dd565b611688565b50505b61152d848483611688565b5061153f565b61153e838383611688565b5b505050565b61154c610d5f565b73ffffffffffffffffffffffffffffffffffffffff1661156a610907565b73ffffffffffffffffffffffffffffffffffffffff16146115c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b790612bc1565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ee9061280d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d9061289f565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156117ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117e390612931565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516118da9190611fa5565b60405180910390a350505050565b6001600560146101000a81548160ff02191690831515021790555060006002826119129190612b44565b9050600081836119229190612951565b90506000479050611932836119a9565b600081476119409190612951565b905061194c8382611c29565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161197f93929190612be1565b60405180910390a1505050506000600560146101000a81548160ff02191690831515021790555050565b6001600560146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156119e1576119e0612c18565b5b604051908082528060200260200182016040528015611a0f5781602001602082028036833780820191505090505b5090503081600081518110611a2757611a26612c47565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af09190612c8b565b81600181518110611b0457611b03612c47565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611b69307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610d67565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947836000843061012c42611bb891906121dd565b6040518663ffffffff1660e01b8152600401611bd8959493929190612db1565b600060405180830381600087803b158015611bf257600080fd5b505af1158015611c06573d6000803e3d6000fd5b50505050506000600560146101000a81548160ff02191690831515021790555050565b6001600560146101000a81548160ff021916908315150217905550611c6f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610d67565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401611cf696959493929190612e0b565b60606040518083038185885af1158015611d14573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611d399190612e81565b5050506000600560146101000a81548160ff0219169083151502179055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611d95578082015181840152602081019050611d7a565b60008484015250505050565b6000601f19601f8301169050919050565b6000611dbd82611d5b565b611dc78185611d66565b9350611dd7818560208601611d77565b611de081611da1565b840191505092915050565b60006020820190508181036000830152611e058184611db2565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611e3d82611e12565b9050919050565b611e4d81611e32565b8114611e5857600080fd5b50565b600081359050611e6a81611e44565b92915050565b6000819050919050565b611e8381611e70565b8114611e8e57600080fd5b50565b600081359050611ea081611e7a565b92915050565b60008060408385031215611ebd57611ebc611e0d565b5b6000611ecb85828601611e5b565b9250506020611edc85828601611e91565b9150509250929050565b60008115159050919050565b611efb81611ee6565b82525050565b6000602082019050611f166000830184611ef2565b92915050565b6000819050919050565b6000611f41611f3c611f3784611e12565b611f1c565b611e12565b9050919050565b6000611f5382611f26565b9050919050565b6000611f6582611f48565b9050919050565b611f7581611f5a565b82525050565b6000602082019050611f906000830184611f6c565b92915050565b611f9f81611e70565b82525050565b6000602082019050611fba6000830184611f96565b92915050565b600080600060608486031215611fd957611fd8611e0d565b5b6000611fe786828701611e5b565b9350506020611ff886828701611e5b565b925050604061200986828701611e91565b9150509250925092565b600060ff82169050919050565b61202981612013565b82525050565b60006020820190506120446000830184612020565b92915050565b61205381611e32565b82525050565b600060208201905061206e600083018461204a565b92915050565b60006020828403121561208a57612089611e0d565b5b600061209884828501611e91565b91505092915050565b6000602082840312156120b7576120b6611e0d565b5b60006120c584828501611e5b565b91505092915050565b600080604083850312156120e5576120e4611e0d565b5b60006120f385828601611e91565b925050602061210485828601611e91565b9150509250929050565b6000806040838503121561212557612124611e0d565b5b600061213385828601611e5b565b925050602061214485828601611e5b565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061219557607f821691505b6020821081036121a8576121a761214e565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006121e882611e70565b91506121f383611e70565b925082820190508082111561220b5761220a6121ae565b5b92915050565b60008160011c9050919050565b6000808291508390505b600185111561226857808604811115612244576122436121ae565b5b60018516156122535780820291505b808102905061226185612211565b9450612228565b94509492505050565b600082612281576001905061233d565b8161228f576000905061233d565b81600181146122a557600281146122af576122de565b600191505061233d565b60ff8411156122c1576122c06121ae565b5b8360020a9150848211156122d8576122d76121ae565b5b5061233d565b5060208310610133831016604e8410600b84101617156123135782820a90508381111561230e5761230d6121ae565b5b61233d565b612320848484600161221e565b92509050818404811115612337576123366121ae565b5b81810290505b9392505050565b600061234f82611e70565b915061235a83612013565b92506123877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612271565b905092915050565b600061239a82611e70565b91506123a583611e70565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156123de576123dd6121ae565b5b828202905092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612445602583611d66565b9150612450826123e9565b604082019050919050565b6000602082019050818103600083015261247481612438565b9050919050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031303000000000000000000000000000000000000000602082015250565b60006124d7602d83611d66565b91506124e28261247b565b604082019050919050565b60006020820190508181036000830152612506816124ca565b9050919050565b7f496e73756666696369656e742042616c616e6365000000000000000000000000600082015250565b6000612543601483611d66565b915061254e8261250d565b602082019050919050565b6000602082019050818103600083015261257281612536565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006125d5602683611d66565b91506125e082612579565b604082019050919050565b60006020820190508181036000830152612604816125c8565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612667602483611d66565b91506126728261260b565b604082019050919050565b600060208201905081810360008301526126968161265a565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006126f9602283611d66565b91506127048261269d565b604082019050919050565b60006020820190508181036000830152612728816126ec565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612765601d83611d66565b91506127708261272f565b602082019050919050565b6000602082019050818103600083015261279481612758565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006127f7602583611d66565b91506128028261279b565b604082019050919050565b60006020820190508181036000830152612826816127ea565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612889602383611d66565b91506128948261282d565b604082019050919050565b600060208201905081810360008301526128b88161287c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061291b602683611d66565b9150612926826128bf565b604082019050919050565b6000602082019050818103600083015261294a8161290e565b9050919050565b600061295c82611e70565b915061296783611e70565b925082820390508181111561297f5761297e6121ae565b5b92915050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b60006129bb601283611d66565b91506129c682612985565b602082019050919050565b600060208201905081810360008301526129ea816129ae565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b6000612a4d603983611d66565b9150612a58826129f1565b604082019050919050565b60006020820190508181036000830152612a7c81612a40565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b6000612adf603683611d66565b9150612aea82612a83565b604082019050919050565b60006020820190508181036000830152612b0e81612ad2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612b4f82611e70565b9150612b5a83611e70565b925082612b6a57612b69612b15565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612bab602083611d66565b9150612bb682612b75565b602082019050919050565b60006020820190508181036000830152612bda81612b9e565b9050919050565b6000606082019050612bf66000830186611f96565b612c036020830185611f96565b612c106040830184611f96565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612c8581611e44565b92915050565b600060208284031215612ca157612ca0611e0d565b5b6000612caf84828501612c76565b91505092915050565b6000819050919050565b6000612cdd612cd8612cd384612cb8565b611f1c565b611e70565b9050919050565b612ced81612cc2565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612d2881611e32565b82525050565b6000612d3a8383612d1f565b60208301905092915050565b6000602082019050919050565b6000612d5e82612cf3565b612d688185612cfe565b9350612d7383612d0f565b8060005b83811015612da4578151612d8b8882612d2e565b9750612d9683612d46565b925050600181019050612d77565b5085935050505092915050565b600060a082019050612dc66000830188611f96565b612dd36020830187612ce4565b8181036040830152612de58186612d53565b9050612df4606083018561204a565b612e016080830184611f96565b9695505050505050565b600060c082019050612e20600083018961204a565b612e2d6020830188611f96565b612e3a6040830187612ce4565b612e476060830186612ce4565b612e54608083018561204a565b612e6160a0830184611f96565b979650505050505050565b600081519050612e7b81611e7a565b92915050565b600080600060608486031215612e9a57612e99611e0d565b5b6000612ea886828701612e6c565b9350506020612eb986828701612e6c565b9250506040612eca86828701612e6c565b915050925092509256fea26469706673582212209229bc90f75c9e7b1d6337a8fcfb628aa18e12e86adede8baa8d024b29e5309a64736f6c63430008100033

Deployed Bytecode Sourcemap

27033:7528:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17947:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20222:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27123:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19086:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21046:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18928:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22762:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27078:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27545:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34101:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27655:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18112:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15206:103;;;;;;;;;;;;;:::i;:::-;;27877:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27593:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14558:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17771:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21846:507;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19666:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33469:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33673:420;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34307:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31861:200;;;;;;;;;;;;;:::i;:::-;;19259:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15464:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27504:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31740:109;;;;;;;;;;;;;:::i;:::-;;17947:102;18003:13;18036:5;18029:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17947:102;:::o;20222:244::-;20343:4;20365:13;20381:12;:10;:12::i;:::-;20365:28;;20404:32;20413:5;20420:7;20429:6;20404:8;:32::i;:::-;20454:4;20447:11;;;20222:244;;;;:::o;27123:51::-;;;:::o;19086:110::-;19149:7;19176:12;;19169:19;;19086:110;:::o;21046:297::-;21179:4;21196:15;21214:12;:10;:12::i;:::-;21196:30;;21237:38;21253:4;21259:7;21268:6;21237:15;:38::i;:::-;21286:27;21296:4;21302:2;21306:6;21286:9;:27::i;:::-;21331:4;21324:11;;;21046:297;;;;;:::o;18928:93::-;18986:5;19011:2;19004:9;;18928:93;:::o;22762:272::-;22879:4;22901:13;22917:12;:10;:12::i;:::-;22901:28;;22940:64;22949:5;22956:7;22993:10;22965:25;22975:5;22982:7;22965:9;:25::i;:::-;:38;;;;:::i;:::-;22940:8;:64::i;:::-;23022:4;23015:11;;;22762:272;;;;:::o;27078:38::-;;;:::o;27545:41::-;;;;:::o;34101:198::-;34203:4;14444:13;:11;:13::i;:::-;34258:9:::1;;;;;;;;;;;34254:2;:13;;;;:::i;:::-;34239:12;:28;;;;:::i;:::-;34225:11;:42;;;;34287:4;34280:11;;34101:198:::0;;;:::o;27655:59::-;;;;:::o;18112:177::-;18231:7;18263:9;:18;18273:7;18263:18;;;;;;;;;;;;;;;;18256:25;;18112:177;;;:::o;15206:103::-;14444:13;:11;:13::i;:::-;15271:30:::1;15298:1;15271:18;:30::i;:::-;15206:103::o:0;27877:75::-;;;;;;;;;;;;;:::o;27593:55::-;;;;:::o;14558:87::-;14604:7;14631:6;;;;;;;;;;;14624:13;;14558:87;:::o;17771:106::-;17829:13;17862:7;17855:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17771:106;:::o;21846:507::-;21968:4;21990:13;22006:12;:10;:12::i;:::-;21990:28;;22029:24;22056:25;22066:5;22073:7;22056:9;:25::i;:::-;22029:52;;22134:15;22114:16;:35;;22092:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;22250:60;22259:5;22266:7;22294:15;22275:16;:34;22250:8;:60::i;:::-;22341:4;22334:11;;;;21846:507;;;;:::o;19666:236::-;19783:4;19805:13;19821:12;:10;:12::i;:::-;19805:28;;19844;19854:5;19861:2;19865:6;19844:9;:28::i;:::-;19890:4;19883:11;;;19666:236;;;;:::o;33469:196::-;33579:4;14444:13;:11;:13::i;:::-;33619:16:::1;33601:15;;:34;;;;;;;;;;;;;;;;;;33653:4;33646:11;;33469:196:::0;;;:::o;33673:420::-;33828:4;14444:13;:11;:13::i;:::-;33904:3:::1;33876:23;33859:16;:40;;;;:::i;:::-;33858:49;;33850:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;33986:16;33968:15;:34;;;;34038:23;34013:22;:48;;;;34081:4;34074:11;;33673:420:::0;;;;:::o;34307:214::-;34417:4;14444:13;:11;:13::i;:::-;34480:9:::1;;;;;;;;;;;34476:2;:13;;;;:::i;:::-;34457:16;:32;;;;:::i;:::-;34439:15;:50;;;;34509:4;34502:11;;34307:214:::0;;;:::o;31861:200::-;31943:1;31916:24;31934:4;31916:9;:24::i;:::-;:28;31908:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31980:73;32004:4;32011:15;;;;;;;;;;;32028:24;32046:4;32028:9;:24::i;:::-;31980:15;:73::i;:::-;31861:200::o;19259:201::-;19393:7;19425:11;:18;19437:5;19425:18;;;;;;;;;;;;;;;:27;19444:7;19425:27;;;;;;;;;;;;;;;;19418:34;;19259:201;;;;:::o;15464:238::-;14444:13;:11;:13::i;:::-;15587:1:::1;15567:22;;:8;:22;;::::0;15545:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15666:28;15685:8;15666:18;:28::i;:::-;15464:238:::0;:::o;27504:34::-;;;;:::o;31740:109::-;31793:15;;;;;;;;;;;31785:33;;:56;31819:21;31785:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31740:109::o;13351:98::-;13404:7;13431:10;13424:17;;13351:98;:::o;25069:380::-;25222:1;25205:19;;:5;:19;;;25197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25303:1;25284:21;;:7;:21;;;25276:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25387:6;25357:11;:18;25369:5;25357:18;;;;;;;;;;;;;;;:27;25376:7;25357:27;;;;;;;;;;;;;;;:36;;;;25425:7;25409:32;;25418:5;25409:32;;;25434:6;25409:32;;;;;;:::i;:::-;;;;;;;;25069:380;;;:::o;25740:502::-;25875:24;25902:25;25912:5;25919:7;25902:9;:25::i;:::-;25875:52;;25962:17;25942:16;:37;25938:297;;26042:6;26022:16;:26;;25996:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;26157:51;26166:5;26173:7;26201:6;26182:16;:25;26157:8;:51::i;:::-;25938:297;25864:378;25740:502;;;:::o;29576:2156::-;29690:1;29674:18;;:4;:18;;;29666:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29767:1;29753:16;;:2;:16;;;29745:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29847:6;29828:15;29838:4;29828:9;:15::i;:::-;:25;;29820:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29922:13;29914:21;;:4;:21;;;:44;;;;29945:13;29939:19;;:2;:19;;;29914:44;29913:67;;;;;29964:16;;;;;;;;;;;29963:17;29913:67;29909:1816;;;30009:13;30001:21;;:4;:21;;;29997:686;;30043:32;30105:18;;30078:24;30096:4;30078:9;:24::i;:::-;:45;;;;:::i;:::-;30043:80;;30174:30;;30146:24;:58;30142:154;;30229:47;30245:30;;30229:15;:47::i;:::-;30142:154;30342:24;;30319:18;;30318:48;30314:354;;30391:43;30409:24;;30391:17;:43::i;:::-;30479:24;;30457:18;;:46;;;;;;;:::i;:::-;;;;;;;;30526:9;30546:15;;;;;;;;;;;30538:29;;:52;30568:21;30538:52;;;;;;;;;;;;;;;;;;;;;;;30526:64;;30621:4;30613:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;30368:300;30314:354;30024:659;29997:686;30699:22;30740:18;:24;30759:4;30740:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;30768:18;:22;30787:2;30768:22;;;;;;;;;;;;;;;;;;;;;;;;;30740:50;30736:846;;;30828:6;30811:23;;30736:846;;;30907:11;;30897:6;:21;;30889:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;31010:13;31002:21;;:4;:21;;;30999:178;;31083:15;;31065:13;31075:2;31065:9;:13::i;:::-;31056:6;:22;;;;:::i;:::-;31055:43;;31047:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;30999:178;31197:22;31259:3;31233:22;;31224:6;:31;;;;:::i;:::-;31223:39;;;;:::i;:::-;31197:66;;31282:22;31337:3;31318:15;;31309:6;:24;;;;:::i;:::-;31308:32;;;;:::i;:::-;31282:59;;31404:14;31387;:31;;;;:::i;:::-;31377:6;:42;;;;:::i;:::-;31360:59;;31460:14;31438:18;;:36;;;;;;;:::i;:::-;;;;;;;;31495:71;31511:4;31525;31550:14;31533;:31;;;;:::i;:::-;31495:15;:71::i;:::-;30870:712;;30736:846;31596:41;31612:4;31618:2;31622:14;31596:15;:41::i;:::-;29982:1667;29909:1816;;;31680:33;31696:4;31702:2;31706:6;31680:15;:33::i;:::-;29909:1816;29576:2156;;;:::o;14723:132::-;14798:12;:10;:12::i;:::-;14787:23;;:7;:5;:7::i;:::-;:23;;;14779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14723:132::o;15862:191::-;15936:16;15955:6;;;;;;;;;;;15936:25;;15981:8;15972:6;;:17;;;;;;;;;;;;;;;;;;16036:8;16005:40;;16026:8;16005:40;;;;;;;;;;;;15925:128;15862:191;:::o;26250:776::-;26397:1;26381:18;;:4;:18;;;26373:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26474:1;26460:16;;:2;:16;;;26452:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26529:19;26551:9;:15;26561:4;26551:15;;;;;;;;;;;;;;;;26529:37;;26614:6;26599:11;:21;;26577:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;26754:6;26740:11;:20;26722:9;:15;26732:4;26722:15;;;;;;;;;;;;;;;:38;;;;26957:6;26940:9;:13;26950:2;26940:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;27007:2;26992:26;;27001:4;26992:26;;;27011:6;26992:26;;;;;;:::i;:::-;;;;;;;;26362:664;26250:776;;;:::o;32069:474::-;28172:4;28153:16;;:23;;;;;;;;;;;;;;;;;;32155:12:::1;32194:1;32171:20;:24;;;;:::i;:::-;32155:41;;32207:17;32251:4;32228:20;:27;;;;:::i;:::-;32207:49;;32269:22;32294:21;32269:46;;32328:23;32346:4;32328:17;:23::i;:::-;32364:18;32410:14;32386:21;:38;;;;:::i;:::-;32364:61;;32438:36;32452:9;32463:10;32438:13;:36::i;:::-;32492:43;32507:4;32513:10;32525:9;32492:43;;;;;;;;:::i;:::-;;;;;;;;32144:399;;;;28218:5:::0;28199:16;;:24;;;;;;;;;;;;;;;;;;32069:474;:::o;32551:496::-;28172:4;28153:16;;:23;;;;;;;;;;;;;;;;;;32630:21:::1;32668:1;32654:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32630:40;;32699:4;32681;32686:1;32681:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;32725:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;32715:4;32720:1;32715:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;32760:62;32777:4;32792:15;32810:11;32760:8;:62::i;:::-;32835:15;:66;;;32916:11;32942:1;32958:4;32985;33024:3;33006:15;:21;;;;:::i;:::-;32835:204;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32619:428;28218:5:::0;28199:16;;:24;;;;;;;;;;;;;;;;;;32551:496;:::o;33055:406::-;28172:4;28153:16;;:23;;;;;;;;;;;;;;;;;;33172:62:::1;33189:4;33204:15;33222:11;33172:8;:62::i;:::-;33247:15;:31;;;33286:9;33319:4;33339:11;33365:1;33381::::0;33397:15:::1;;;;;;;;;;;33427;33247:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28218:5:::0;28199:16;;:24;;;;;;;;;;;;;;;;;;33055:406;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:60::-;3474:3;3495:5;3488:12;;3446:60;;;:::o;3512:142::-;3562:9;3595:53;3613:34;3622:24;3640:5;3622:24;:::i;:::-;3613:34;:::i;:::-;3595:53;:::i;:::-;3582:66;;3512:142;;;:::o;3660:126::-;3710:9;3743:37;3774:5;3743:37;:::i;:::-;3730:50;;3660:126;;;:::o;3792:152::-;3868:9;3901:37;3932:5;3901:37;:::i;:::-;3888:50;;3792:152;;;:::o;3950:183::-;4063:63;4120:5;4063:63;:::i;:::-;4058:3;4051:76;3950:183;;:::o;4139:274::-;4258:4;4296:2;4285:9;4281:18;4273:26;;4309:97;4403:1;4392:9;4388:17;4379:6;4309:97;:::i;:::-;4139:274;;;;:::o;4419:118::-;4506:24;4524:5;4506:24;:::i;:::-;4501:3;4494:37;4419:118;;:::o;4543:222::-;4636:4;4674:2;4663:9;4659:18;4651:26;;4687:71;4755:1;4744:9;4740:17;4731:6;4687:71;:::i;:::-;4543:222;;;;:::o;4771:619::-;4848:6;4856;4864;4913:2;4901:9;4892:7;4888:23;4884:32;4881:119;;;4919:79;;:::i;:::-;4881:119;5039:1;5064:53;5109:7;5100:6;5089:9;5085:22;5064:53;:::i;:::-;5054:63;;5010:117;5166:2;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5137:118;5294:2;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5265:118;4771:619;;;;;:::o;5396:86::-;5431:7;5471:4;5464:5;5460:16;5449:27;;5396:86;;;:::o;5488:112::-;5571:22;5587:5;5571:22;:::i;:::-;5566:3;5559:35;5488:112;;:::o;5606:214::-;5695:4;5733:2;5722:9;5718:18;5710:26;;5746:67;5810:1;5799:9;5795:17;5786:6;5746:67;:::i;:::-;5606:214;;;;:::o;5826:118::-;5913:24;5931:5;5913:24;:::i;:::-;5908:3;5901:37;5826:118;;:::o;5950:222::-;6043:4;6081:2;6070:9;6066:18;6058:26;;6094:71;6162:1;6151:9;6147:17;6138:6;6094:71;:::i;:::-;5950:222;;;;:::o;6178:329::-;6237:6;6286:2;6274:9;6265:7;6261:23;6257:32;6254:119;;;6292:79;;:::i;:::-;6254:119;6412:1;6437:53;6482:7;6473:6;6462:9;6458:22;6437:53;:::i;:::-;6427:63;;6383:117;6178:329;;;;:::o;6513:::-;6572:6;6621:2;6609:9;6600:7;6596:23;6592:32;6589:119;;;6627:79;;:::i;:::-;6589:119;6747:1;6772:53;6817:7;6808:6;6797:9;6793:22;6772:53;:::i;:::-;6762:63;;6718:117;6513:329;;;;:::o;6848:474::-;6916:6;6924;6973:2;6961:9;6952:7;6948:23;6944:32;6941:119;;;6979:79;;:::i;:::-;6941:119;7099:1;7124:53;7169:7;7160:6;7149:9;7145:22;7124:53;:::i;:::-;7114:63;;7070:117;7226:2;7252:53;7297:7;7288:6;7277:9;7273:22;7252:53;:::i;:::-;7242:63;;7197:118;6848:474;;;;;:::o;7328:::-;7396:6;7404;7453:2;7441:9;7432:7;7428:23;7424:32;7421:119;;;7459:79;;:::i;:::-;7421:119;7579:1;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7550:117;7706:2;7732:53;7777:7;7768:6;7757:9;7753:22;7732:53;:::i;:::-;7722:63;;7677:118;7328:474;;;;;:::o;7808:180::-;7856:77;7853:1;7846:88;7953:4;7950:1;7943:15;7977:4;7974:1;7967:15;7994:320;8038:6;8075:1;8069:4;8065:12;8055:22;;8122:1;8116:4;8112:12;8143:18;8133:81;;8199:4;8191:6;8187:17;8177:27;;8133:81;8261:2;8253:6;8250:14;8230:18;8227:38;8224:84;;8280:18;;:::i;:::-;8224:84;8045:269;7994:320;;;:::o;8320:180::-;8368:77;8365:1;8358:88;8465:4;8462:1;8455:15;8489:4;8486:1;8479:15;8506:191;8546:3;8565:20;8583:1;8565:20;:::i;:::-;8560:25;;8599:20;8617:1;8599:20;:::i;:::-;8594:25;;8642:1;8639;8635:9;8628:16;;8663:3;8660:1;8657:10;8654:36;;;8670:18;;:::i;:::-;8654:36;8506:191;;;;:::o;8703:102::-;8745:8;8792:5;8789:1;8785:13;8764:34;;8703:102;;;:::o;8811:848::-;8872:5;8879:4;8903:6;8894:15;;8927:5;8918:14;;8941:712;8962:1;8952:8;8949:15;8941:712;;;9057:4;9052:3;9048:14;9042:4;9039:24;9036:50;;;9066:18;;:::i;:::-;9036:50;9116:1;9106:8;9102:16;9099:451;;;9531:4;9524:5;9520:16;9511:25;;9099:451;9581:4;9575;9571:15;9563:23;;9611:32;9634:8;9611:32;:::i;:::-;9599:44;;8941:712;;;8811:848;;;;;;;:::o;9665:1073::-;9719:5;9910:8;9900:40;;9931:1;9922:10;;9933:5;;9900:40;9959:4;9949:36;;9976:1;9967:10;;9978:5;;9949:36;10045:4;10093:1;10088:27;;;;10129:1;10124:191;;;;10038:277;;10088:27;10106:1;10097:10;;10108:5;;;10124:191;10169:3;10159:8;10156:17;10153:43;;;10176:18;;:::i;:::-;10153:43;10225:8;10222:1;10218:16;10209:25;;10260:3;10253:5;10250:14;10247:40;;;10267:18;;:::i;:::-;10247:40;10300:5;;;10038:277;;10424:2;10414:8;10411:16;10405:3;10399:4;10396:13;10392:36;10374:2;10364:8;10361:16;10356:2;10350:4;10347:12;10343:35;10327:111;10324:246;;;10480:8;10474:4;10470:19;10461:28;;10515:3;10508:5;10505:14;10502:40;;;10522:18;;:::i;:::-;10502:40;10555:5;;10324:246;10595:42;10633:3;10623:8;10617:4;10614:1;10595:42;:::i;:::-;10580:57;;;;10669:4;10664:3;10660:14;10653:5;10650:25;10647:51;;;10678:18;;:::i;:::-;10647:51;10727:4;10720:5;10716:16;10707:25;;9665:1073;;;;;;:::o;10744:281::-;10802:5;10826:23;10844:4;10826:23;:::i;:::-;10818:31;;10870:25;10886:8;10870:25;:::i;:::-;10858:37;;10914:104;10951:66;10941:8;10935:4;10914:104;:::i;:::-;10905:113;;10744:281;;;;:::o;11031:348::-;11071:7;11094:20;11112:1;11094:20;:::i;:::-;11089:25;;11128:20;11146:1;11128:20;:::i;:::-;11123:25;;11316:1;11248:66;11244:74;11241:1;11238:81;11233:1;11226:9;11219:17;11215:105;11212:131;;;11323:18;;:::i;:::-;11212:131;11371:1;11368;11364:9;11353:20;;11031:348;;;;:::o;11385:224::-;11525:34;11521:1;11513:6;11509:14;11502:58;11594:7;11589:2;11581:6;11577:15;11570:32;11385:224;:::o;11615:366::-;11757:3;11778:67;11842:2;11837:3;11778:67;:::i;:::-;11771:74;;11854:93;11943:3;11854:93;:::i;:::-;11972:2;11967:3;11963:12;11956:19;;11615:366;;;:::o;11987:419::-;12153:4;12191:2;12180:9;12176:18;12168:26;;12240:9;12234:4;12230:20;12226:1;12215:9;12211:17;12204:47;12268:131;12394:4;12268:131;:::i;:::-;12260:139;;11987:419;;;:::o;12412:232::-;12552:34;12548:1;12540:6;12536:14;12529:58;12621:15;12616:2;12608:6;12604:15;12597:40;12412:232;:::o;12650:366::-;12792:3;12813:67;12877:2;12872:3;12813:67;:::i;:::-;12806:74;;12889:93;12978:3;12889:93;:::i;:::-;13007:2;13002:3;12998:12;12991:19;;12650:366;;;:::o;13022:419::-;13188:4;13226:2;13215:9;13211:18;13203:26;;13275:9;13269:4;13265:20;13261:1;13250:9;13246:17;13239:47;13303:131;13429:4;13303:131;:::i;:::-;13295:139;;13022:419;;;:::o;13447:170::-;13587:22;13583:1;13575:6;13571:14;13564:46;13447:170;:::o;13623:366::-;13765:3;13786:67;13850:2;13845:3;13786:67;:::i;:::-;13779:74;;13862:93;13951:3;13862:93;:::i;:::-;13980:2;13975:3;13971:12;13964:19;;13623:366;;;:::o;13995:419::-;14161:4;14199:2;14188:9;14184:18;14176:26;;14248:9;14242:4;14238:20;14234:1;14223:9;14219:17;14212:47;14276:131;14402:4;14276:131;:::i;:::-;14268:139;;13995:419;;;:::o;14420:225::-;14560:34;14556:1;14548:6;14544:14;14537:58;14629:8;14624:2;14616:6;14612:15;14605:33;14420:225;:::o;14651:366::-;14793:3;14814:67;14878:2;14873:3;14814:67;:::i;:::-;14807:74;;14890:93;14979:3;14890:93;:::i;:::-;15008:2;15003:3;14999:12;14992:19;;14651:366;;;:::o;15023:419::-;15189:4;15227:2;15216:9;15212:18;15204:26;;15276:9;15270:4;15266:20;15262:1;15251:9;15247:17;15240:47;15304:131;15430:4;15304:131;:::i;:::-;15296:139;;15023:419;;;:::o;15448:223::-;15588:34;15584:1;15576:6;15572:14;15565:58;15657:6;15652:2;15644:6;15640:15;15633:31;15448:223;:::o;15677:366::-;15819:3;15840:67;15904:2;15899:3;15840:67;:::i;:::-;15833:74;;15916:93;16005:3;15916:93;:::i;:::-;16034:2;16029:3;16025:12;16018:19;;15677:366;;;:::o;16049:419::-;16215:4;16253:2;16242:9;16238:18;16230:26;;16302:9;16296:4;16292:20;16288:1;16277:9;16273:17;16266:47;16330:131;16456:4;16330:131;:::i;:::-;16322:139;;16049:419;;;:::o;16474:221::-;16614:34;16610:1;16602:6;16598:14;16591:58;16683:4;16678:2;16670:6;16666:15;16659:29;16474:221;:::o;16701:366::-;16843:3;16864:67;16928:2;16923:3;16864:67;:::i;:::-;16857:74;;16940:93;17029:3;16940:93;:::i;:::-;17058:2;17053:3;17049:12;17042:19;;16701:366;;;:::o;17073:419::-;17239:4;17277:2;17266:9;17262:18;17254:26;;17326:9;17320:4;17316:20;17312:1;17301:9;17297:17;17290:47;17354:131;17480:4;17354:131;:::i;:::-;17346:139;;17073:419;;;:::o;17498:179::-;17638:31;17634:1;17626:6;17622:14;17615:55;17498:179;:::o;17683:366::-;17825:3;17846:67;17910:2;17905:3;17846:67;:::i;:::-;17839:74;;17922:93;18011:3;17922:93;:::i;:::-;18040:2;18035:3;18031:12;18024:19;;17683:366;;;:::o;18055:419::-;18221:4;18259:2;18248:9;18244:18;18236:26;;18308:9;18302:4;18298:20;18294:1;18283:9;18279:17;18272:47;18336:131;18462:4;18336:131;:::i;:::-;18328:139;;18055:419;;;:::o;18480:224::-;18620:34;18616:1;18608:6;18604:14;18597:58;18689:7;18684:2;18676:6;18672:15;18665:32;18480:224;:::o;18710:366::-;18852:3;18873:67;18937:2;18932:3;18873:67;:::i;:::-;18866:74;;18949:93;19038:3;18949:93;:::i;:::-;19067:2;19062:3;19058:12;19051:19;;18710:366;;;:::o;19082:419::-;19248:4;19286:2;19275:9;19271:18;19263:26;;19335:9;19329:4;19325:20;19321:1;19310:9;19306:17;19299:47;19363:131;19489:4;19363:131;:::i;:::-;19355:139;;19082:419;;;:::o;19507:222::-;19647:34;19643:1;19635:6;19631:14;19624:58;19716:5;19711:2;19703:6;19699:15;19692:30;19507:222;:::o;19735:366::-;19877:3;19898:67;19962:2;19957:3;19898:67;:::i;:::-;19891:74;;19974:93;20063:3;19974:93;:::i;:::-;20092:2;20087:3;20083:12;20076:19;;19735:366;;;:::o;20107:419::-;20273:4;20311:2;20300:9;20296:18;20288:26;;20360:9;20354:4;20350:20;20346:1;20335:9;20331:17;20324:47;20388:131;20514:4;20388:131;:::i;:::-;20380:139;;20107:419;;;:::o;20532:225::-;20672:34;20668:1;20660:6;20656:14;20649:58;20741:8;20736:2;20728:6;20724:15;20717:33;20532:225;:::o;20763:366::-;20905:3;20926:67;20990:2;20985:3;20926:67;:::i;:::-;20919:74;;21002:93;21091:3;21002:93;:::i;:::-;21120:2;21115:3;21111:12;21104:19;;20763:366;;;:::o;21135:419::-;21301:4;21339:2;21328:9;21324:18;21316:26;;21388:9;21382:4;21378:20;21374:1;21363:9;21359:17;21352:47;21416:131;21542:4;21416:131;:::i;:::-;21408:139;;21135:419;;;:::o;21560:194::-;21600:4;21620:20;21638:1;21620:20;:::i;:::-;21615:25;;21654:20;21672:1;21654:20;:::i;:::-;21649:25;;21698:1;21695;21691:9;21683:17;;21722:1;21716:4;21713:11;21710:37;;;21727:18;;:::i;:::-;21710:37;21560:194;;;;:::o;21760:168::-;21900:20;21896:1;21888:6;21884:14;21877:44;21760:168;:::o;21934:366::-;22076:3;22097:67;22161:2;22156:3;22097:67;:::i;:::-;22090:74;;22173:93;22262:3;22173:93;:::i;:::-;22291:2;22286:3;22282:12;22275:19;;21934:366;;;:::o;22306:419::-;22472:4;22510:2;22499:9;22495:18;22487:26;;22559:9;22553:4;22549:20;22545:1;22534:9;22530:17;22523:47;22587:131;22713:4;22587:131;:::i;:::-;22579:139;;22306:419;;;:::o;22731:244::-;22871:34;22867:1;22859:6;22855:14;22848:58;22940:27;22935:2;22927:6;22923:15;22916:52;22731:244;:::o;22981:366::-;23123:3;23144:67;23208:2;23203:3;23144:67;:::i;:::-;23137:74;;23220:93;23309:3;23220:93;:::i;:::-;23338:2;23333:3;23329:12;23322:19;;22981:366;;;:::o;23353:419::-;23519:4;23557:2;23546:9;23542:18;23534:26;;23606:9;23600:4;23596:20;23592:1;23581:9;23577:17;23570:47;23634:131;23760:4;23634:131;:::i;:::-;23626:139;;23353:419;;;:::o;23778:241::-;23918:34;23914:1;23906:6;23902:14;23895:58;23987:24;23982:2;23974:6;23970:15;23963:49;23778:241;:::o;24025:366::-;24167:3;24188:67;24252:2;24247:3;24188:67;:::i;:::-;24181:74;;24264:93;24353:3;24264:93;:::i;:::-;24382:2;24377:3;24373:12;24366:19;;24025:366;;;:::o;24397:419::-;24563:4;24601:2;24590:9;24586:18;24578:26;;24650:9;24644:4;24640:20;24636:1;24625:9;24621:17;24614:47;24678:131;24804:4;24678:131;:::i;:::-;24670:139;;24397:419;;;:::o;24822:180::-;24870:77;24867:1;24860:88;24967:4;24964:1;24957:15;24991:4;24988:1;24981:15;25008:185;25048:1;25065:20;25083:1;25065:20;:::i;:::-;25060:25;;25099:20;25117:1;25099:20;:::i;:::-;25094:25;;25138:1;25128:35;;25143:18;;:::i;:::-;25128:35;25185:1;25182;25178:9;25173:14;;25008:185;;;;:::o;25199:182::-;25339:34;25335:1;25327:6;25323:14;25316:58;25199:182;:::o;25387:366::-;25529:3;25550:67;25614:2;25609:3;25550:67;:::i;:::-;25543:74;;25626:93;25715:3;25626:93;:::i;:::-;25744:2;25739:3;25735:12;25728:19;;25387:366;;;:::o;25759:419::-;25925:4;25963:2;25952:9;25948:18;25940:26;;26012:9;26006:4;26002:20;25998:1;25987:9;25983:17;25976:47;26040:131;26166:4;26040:131;:::i;:::-;26032:139;;25759:419;;;:::o;26184:442::-;26333:4;26371:2;26360:9;26356:18;26348:26;;26384:71;26452:1;26441:9;26437:17;26428:6;26384:71;:::i;:::-;26465:72;26533:2;26522:9;26518:18;26509:6;26465:72;:::i;:::-;26547;26615:2;26604:9;26600:18;26591:6;26547:72;:::i;:::-;26184:442;;;;;;:::o;26632:180::-;26680:77;26677:1;26670:88;26777:4;26774:1;26767:15;26801:4;26798:1;26791:15;26818:180;26866:77;26863:1;26856:88;26963:4;26960:1;26953:15;26987:4;26984:1;26977:15;27004:143;27061:5;27092:6;27086:13;27077:22;;27108:33;27135:5;27108:33;:::i;:::-;27004:143;;;;:::o;27153:351::-;27223:6;27272:2;27260:9;27251:7;27247:23;27243:32;27240:119;;;27278:79;;:::i;:::-;27240:119;27398:1;27423:64;27479:7;27470:6;27459:9;27455:22;27423:64;:::i;:::-;27413:74;;27369:128;27153:351;;;;:::o;27510:85::-;27555:7;27584:5;27573:16;;27510:85;;;:::o;27601:158::-;27659:9;27692:61;27710:42;27719:32;27745:5;27719:32;:::i;:::-;27710:42;:::i;:::-;27692:61;:::i;:::-;27679:74;;27601:158;;;:::o;27765:147::-;27860:45;27899:5;27860:45;:::i;:::-;27855:3;27848:58;27765:147;;:::o;27918:114::-;27985:6;28019:5;28013:12;28003:22;;27918:114;;;:::o;28038:184::-;28137:11;28171:6;28166:3;28159:19;28211:4;28206:3;28202:14;28187:29;;28038:184;;;;:::o;28228:132::-;28295:4;28318:3;28310:11;;28348:4;28343:3;28339:14;28331:22;;28228:132;;;:::o;28366:108::-;28443:24;28461:5;28443:24;:::i;:::-;28438:3;28431:37;28366:108;;:::o;28480:179::-;28549:10;28570:46;28612:3;28604:6;28570:46;:::i;:::-;28648:4;28643:3;28639:14;28625:28;;28480:179;;;;:::o;28665:113::-;28735:4;28767;28762:3;28758:14;28750:22;;28665:113;;;:::o;28814:732::-;28933:3;28962:54;29010:5;28962:54;:::i;:::-;29032:86;29111:6;29106:3;29032:86;:::i;:::-;29025:93;;29142:56;29192:5;29142:56;:::i;:::-;29221:7;29252:1;29237:284;29262:6;29259:1;29256:13;29237:284;;;29338:6;29332:13;29365:63;29424:3;29409:13;29365:63;:::i;:::-;29358:70;;29451:60;29504:6;29451:60;:::i;:::-;29441:70;;29297:224;29284:1;29281;29277:9;29272:14;;29237:284;;;29241:14;29537:3;29530:10;;28938:608;;;28814:732;;;;:::o;29552:831::-;29815:4;29853:3;29842:9;29838:19;29830:27;;29867:71;29935:1;29924:9;29920:17;29911:6;29867:71;:::i;:::-;29948:80;30024:2;30013:9;30009:18;30000:6;29948:80;:::i;:::-;30075:9;30069:4;30065:20;30060:2;30049:9;30045:18;30038:48;30103:108;30206:4;30197:6;30103:108;:::i;:::-;30095:116;;30221:72;30289:2;30278:9;30274:18;30265:6;30221:72;:::i;:::-;30303:73;30371:3;30360:9;30356:19;30347:6;30303:73;:::i;:::-;29552:831;;;;;;;;:::o;30389:807::-;30638:4;30676:3;30665:9;30661:19;30653:27;;30690:71;30758:1;30747:9;30743:17;30734:6;30690:71;:::i;:::-;30771:72;30839:2;30828:9;30824:18;30815:6;30771:72;:::i;:::-;30853:80;30929:2;30918:9;30914:18;30905:6;30853:80;:::i;:::-;30943;31019:2;31008:9;31004:18;30995:6;30943:80;:::i;:::-;31033:73;31101:3;31090:9;31086:19;31077:6;31033:73;:::i;:::-;31116;31184:3;31173:9;31169:19;31160:6;31116:73;:::i;:::-;30389:807;;;;;;;;;:::o;31202:143::-;31259:5;31290:6;31284:13;31275:22;;31306:33;31333:5;31306:33;:::i;:::-;31202:143;;;;:::o;31351:663::-;31439:6;31447;31455;31504:2;31492:9;31483:7;31479:23;31475:32;31472:119;;;31510:79;;:::i;:::-;31472:119;31630:1;31655:64;31711:7;31702:6;31691:9;31687:22;31655:64;:::i;:::-;31645:74;;31601:128;31768:2;31794:64;31850:7;31841:6;31830:9;31826:22;31794:64;:::i;:::-;31784:74;;31739:129;31907:2;31933:64;31989:7;31980:6;31969:9;31965:22;31933:64;:::i;:::-;31923:74;;31878:129;31351:663;;;;;:::o

Swarm Source

ipfs://9229bc90f75c9e7b1d6337a8fcfb628aa18e12e86adede8baa8d024b29e5309a
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.