ETH Price: $2,897.60 (-4.96%)
Gas: 4 Gwei

Token

Cex Inu (CEXINU)
 

Overview

Max Total Supply

1,000,000,000 CEXINU

Holders

76

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,268,729.841902225985339973 CEXINU

Value
$0.00
0x8d9ad54dc0f2bae2f13bfb92af0ebd434f75542c
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:
CEXINU

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity 0.8.17;

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

/**
 * @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 CEXINU is ERC20, Ownable {
    // TOKENOMICS START ==========================================================>
    string private constant _name = "Cex Inu";
    string private constant _symbol = "CEXINU";
    uint8 private constant _decimals = 18;
    uint256 private constant _supply = 1000000000;

    uint256 public buyTaxForLiquidity = 1;
    uint256 public buyTaxForMarketing = 3;
    uint256 public buyTaxForGiveaway = 1;
    uint256 public sellTaxForLiquidity = 2;
    uint256 public sellTaxForMarketing = 16;
    uint256 public sellTaxForGiveaway = 2;

    uint256 public maxTxAmount = 10000000 * 10**_decimals;
    uint256 public maxWalletAmount = 10000000 * 10**_decimals;
    address public marketingWallet = 0x0139A13dF32d2B6eEc33078A8F01563A0209EA88;
    address public giveawayWallet = 0x36e5Cc7415c7b69056645ee91A0b48c5f1D82AA7;
    uint256 private _numTokensSellToAddToLiquidity = 800000 * 10**_decimals;
    uint256 private _numTokensSellToAddToETH = 400000 * 10**_decimals;
    // TOKENOMICS END ============================================================>

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    uint256 private _marketingReserves = 0;
    uint256 private _giveawayReserves = 0;
    uint256 private _taxForLiquidity = 0;
    uint256 private _taxForMarketing = 0;
    uint256 private _taxForGiveaway = 0;
    mapping(address => bool) private _isExcludedFromFee;
    bool inSwapAndLiquify;

    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;
        _isExcludedFromFee[giveawayWallet] = 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) {
                _setSellTax();
                uint256 contractLiquidityBalance = balanceOf(address(this)) -
                    _marketingReserves -
                    _giveawayReserves;
                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 to marketing wallet");
                }
                if ((_giveawayReserves) >= _numTokensSellToAddToETH) {
                    _swapTokensForEth(_numTokensSellToAddToETH);
                    _giveawayReserves -= _numTokensSellToAddToETH;
                    bool sent = payable(giveawayWallet).send(
                        address(this).balance
                    );
                    require(sent, "Failed to send ETH to giveaway wallet");
                }
            } else {
                _setBuyTax();
            }

            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)) <= maxWalletAmount,
                        "ERC20: balance amount exceeded max wallet amount limit"
                    );
                }

                uint256 marketingShare = ((amount * _taxForMarketing) / 100);
                uint256 giveawayShare = ((amount * _taxForGiveaway) / 100);
                uint256 liquidityShare = ((amount * _taxForLiquidity) / 100);
                transferAmount =
                    amount -
                    (marketingShare + giveawayShare + liquidityShare);
                _marketingReserves += marketingShare;
                _giveawayReserves += giveawayShare;

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

    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,
            owner(),
            block.timestamp
        );
    }

    function changeMarketingWallet(address newWallet)
        external
        onlyOwner
        returns (bool)
    {
        marketingWallet = newWallet;
        return true;
    }

    function changeGiveawayWallet(address newWallet)
        external
        onlyOwner
        returns (bool)
    {
        giveawayWallet = newWallet;
        return true;
    }

    function _setBuyTax() private {
        _taxForLiquidity = buyTaxForLiquidity;
        _taxForMarketing = buyTaxForMarketing;
        _taxForGiveaway = buyTaxForGiveaway;
    }

    function _setSellTax() private {
        _taxForLiquidity = sellTaxForLiquidity;
        _taxForMarketing = sellTaxForMarketing;
        _taxForGiveaway = sellTaxForGiveaway;
    }

    function changeBuyTaxForLMG(
        uint256 buyTaxForLiquidity_,
        uint256 buyTaxForMarketing_,
        uint256 buyTaxForGiveaway_
    ) external onlyOwner returns (bool) {
        require(
            (buyTaxForLiquidity_ + buyTaxForMarketing_ + buyTaxForGiveaway_) <=
                100,
            "ERC20: total tax must not be greater than 100"
        );
        buyTaxForLiquidity = buyTaxForLiquidity_;
        buyTaxForMarketing = buyTaxForMarketing_;
        buyTaxForGiveaway = buyTaxForGiveaway_;

        return true;
    }

    function changeSellTaxForLMG(
        uint256 sellTaxForLiquidity_,
        uint256 sellTaxForMarketing_,
        uint256 sellTaxForGiveaway_
    ) external onlyOwner returns (bool) {
        require(
            (sellTaxForLiquidity_ +
                sellTaxForMarketing_ +
                sellTaxForGiveaway_) <= 100,
            "ERC20: total tax must not be greater than 100"
        );
        sellTaxForLiquidity = sellTaxForLiquidity_;
        sellTaxForMarketing = sellTaxForMarketing_;
        sellTaxForGiveaway = sellTaxForGiveaway_;

        return true;
    }

    function changeMaxTxAmount(uint256 _maxTxAmount)
        external
        onlyOwner
        returns (bool)
    {
        maxTxAmount = _maxTxAmount;

        return true;
    }

    function changeMaxWalletAmount(uint256 _maxWalletAmount)
        external
        onlyOwner
        returns (bool)
    {
        maxWalletAmount = _maxWalletAmount;

        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":[],"name":"buyTaxForGiveaway","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTaxForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyTaxForLiquidity_","type":"uint256"},{"internalType":"uint256","name":"buyTaxForMarketing_","type":"uint256"},{"internalType":"uint256","name":"buyTaxForGiveaway_","type":"uint256"}],"name":"changeBuyTaxForLMG","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeGiveawayWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"changeMaxTxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"changeMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellTaxForLiquidity_","type":"uint256"},{"internalType":"uint256","name":"sellTaxForMarketing_","type":"uint256"},{"internalType":"uint256","name":"sellTaxForGiveaway_","type":"uint256"}],"name":"changeSellTaxForLMG","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"giveawayWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"maxWalletAmount","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":"sellTaxForGiveaway","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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"},{"stateMutability":"payable","type":"receive"}]

60c060405260016006556003600755600160085560026009556010600a556002600b556012600a620000329190620009a2565b62989680620000429190620009f3565b600c556012600a620000559190620009a2565b62989680620000659190620009f3565b600d55730139a13df32d2b6eec33078a8f01563a0209ea88600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507336e5cc7415c7b69056645ee91a0b48c5f1d82aa7600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506012600a620001229190620009a2565b620c3500620001329190620009f3565b6010556012600a620001459190620009a2565b62061a80620001559190620009f3565b601155600060125560006013556000601455600060155560006016553480156200017e57600080fd5b506040518060400160405280600781526020017f43657820496e75000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f434558494e5500000000000000000000000000000000000000000000000000008152508160039081620001fc919062000cae565b5080600490816200020e919062000cae565b5050506200023162000225620005f560201b60201c565b620005fd60201b60201c565b62000263336012600a620002469190620009a2565b633b9aca00620002579190620009f3565b620006c360201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002c8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ee919062000dff565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000356573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200037c919062000dff565b6040518363ffffffff1660e01b81526004016200039b92919062000e42565b6020604051808303816000875af1158015620003bb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003e1919062000dff565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060016017600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505062000f5b565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000735576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200072c9062000ed0565b60405180910390fd5b806002600082825462000749919062000ef2565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620007fc919062000f3e565b60405180910390a35050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000896578086048111156200086e576200086d62000808565b5b60018516156200087e5780820291505b80810290506200088e8562000837565b94506200084e565b94509492505050565b600082620008b1576001905062000984565b81620008c1576000905062000984565b8160018114620008da5760028114620008e5576200091b565b600191505062000984565b60ff841115620008fa57620008f962000808565b5b8360020a91508482111562000914576200091362000808565b5b5062000984565b5060208310610133831016604e8410600b8410161715620009555782820a9050838111156200094f576200094e62000808565b5b62000984565b62000964848484600162000844565b925090508184048111156200097e576200097d62000808565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b6000620009af826200098b565b9150620009bc8362000995565b9250620009eb7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200089f565b905092915050565b600062000a00826200098b565b915062000a0d836200098b565b925082820262000a1d816200098b565b9150828204841483151762000a375762000a3662000808565b5b5092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ac057607f821691505b60208210810362000ad65762000ad562000a78565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000b407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000b01565b62000b4c868362000b01565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000b8f62000b8962000b83846200098b565b62000b64565b6200098b565b9050919050565b6000819050919050565b62000bab8362000b6e565b62000bc362000bba8262000b96565b84845462000b0e565b825550505050565b600090565b62000bda62000bcb565b62000be781848462000ba0565b505050565b5b8181101562000c0f5762000c0360008262000bd0565b60018101905062000bed565b5050565b601f82111562000c5e5762000c288162000adc565b62000c338462000af1565b8101602085101562000c43578190505b62000c5b62000c528562000af1565b83018262000bec565b50505b505050565b600082821c905092915050565b600062000c836000198460080262000c63565b1980831691505092915050565b600062000c9e838362000c70565b9150826002028217905092915050565b62000cb98262000a3e565b67ffffffffffffffff81111562000cd55762000cd462000a49565b5b62000ce1825462000aa7565b62000cee82828562000c13565b600060209050601f83116001811462000d26576000841562000d11578287015190505b62000d1d858262000c90565b86555062000d8d565b601f19841662000d368662000adc565b60005b8281101562000d605784890151825560018201915060208501945060208101905062000d39565b8683101562000d80578489015162000d7c601f89168262000c70565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000dc78262000d9a565b9050919050565b62000dd98162000dba565b811462000de557600080fd5b50565b60008151905062000df98162000dce565b92915050565b60006020828403121562000e185762000e1762000d95565b5b600062000e288482850162000de8565b91505092915050565b62000e3c8162000dba565b82525050565b600060408201905062000e59600083018562000e31565b62000e68602083018462000e31565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000eb8601f8362000e6f565b915062000ec58262000e80565b602082019050919050565b6000602082019050818103600083015262000eeb8162000ea9565b9050919050565b600062000eff826200098b565b915062000f0c836200098b565b925082820190508082111562000f275762000f2662000808565b5b92915050565b62000f38816200098b565b82525050565b600060208201905062000f55600083018462000f2d565b92915050565b60805160a05161308a62000fc060003960008181610a8f015281816112bf015281816113140152818161138201526116b901526000818161096801528181611ab801528181611b9901528181611bc001528181611f1c0152611f43015261308a6000f3fe6080604052600436106101e75760003560e01c8063715018a611610102578063a457c2d711610095578063ccaf814011610064578063ccaf81401461076b578063dd62ed3e14610796578063ee340f50146107d3578063f2fde38b146107fe576101ee565b8063a457c2d714610689578063a9059cbb146106c6578063aa4bde2814610703578063bb85c6d11461072e576101ee565b806383c2a27d116100d157806383c2a27d146105cb5780638c0b5e22146106085780638da5cb5b1461063357806395d89b411461065e576101ee565b8063715018a61461052157806375f0a874146105385780637df573101461056357806381bfdcca1461058e576101ee565b80632b18b6dc1161017a5780635c9db064116101495780635c9db06414610451578063677daa571461047c57806367a12a6d146104b957806370a08231146104e4576101ee565b80632b18b6dc14610381578063313ce567146103be57806339509351146103e957806349bd5a5e14610426576101ee565b80631694505e116101b65780631694505e146102c357806318160ddd146102ee5780631e0b376e1461031957806323b872dd14610344576101ee565b8063029e8399146101f357806306fdde031461021e578063095ea7b3146102495780630f23e36f14610286576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b50610208610827565b604051610215919061202b565b60405180910390f35b34801561022a57600080fd5b5061023361082d565b60405161024091906120d6565b60405180910390f35b34801561025557600080fd5b50610270600480360381019061026b9190612187565b6108bf565b60405161027d91906121e2565b60405180910390f35b34801561029257600080fd5b506102ad60048036038101906102a891906121fd565b6108e2565b6040516102ba91906121e2565b60405180910390f35b3480156102cf57600080fd5b506102d8610966565b6040516102e591906122af565b60405180910390f35b3480156102fa57600080fd5b5061030361098a565b604051610310919061202b565b60405180910390f35b34801561032557600080fd5b5061032e610994565b60405161033b919061202b565b60405180910390f35b34801561035057600080fd5b5061036b600480360381019061036691906122ca565b61099a565b60405161037891906121e2565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a391906121fd565b6109c9565b6040516103b591906121e2565b60405180910390f35b3480156103ca57600080fd5b506103d3610a4d565b6040516103e09190612339565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190612187565b610a56565b60405161041d91906121e2565b60405180910390f35b34801561043257600080fd5b5061043b610a8d565b6040516104489190612363565b60405180910390f35b34801561045d57600080fd5b50610466610ab1565b6040516104739190612363565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e919061237e565b610ad7565b6040516104b091906121e2565b60405180910390f35b3480156104c557600080fd5b506104ce610af1565b6040516104db919061202b565b60405180910390f35b3480156104f057600080fd5b5061050b600480360381019061050691906123ab565b610af7565b604051610518919061202b565b60405180910390f35b34801561052d57600080fd5b50610536610b3f565b005b34801561054457600080fd5b5061054d610b53565b60405161055a9190612363565b60405180910390f35b34801561056f57600080fd5b50610578610b79565b604051610585919061202b565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b0919061237e565b610b7f565b6040516105c291906121e2565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed91906123ab565b610b99565b6040516105ff91906121e2565b60405180910390f35b34801561061457600080fd5b5061061d610bed565b60405161062a919061202b565b60405180910390f35b34801561063f57600080fd5b50610648610bf3565b6040516106559190612363565b60405180910390f35b34801561066a57600080fd5b50610673610c1d565b60405161068091906120d6565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190612187565b610caf565b6040516106bd91906121e2565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e89190612187565b610d26565b6040516106fa91906121e2565b60405180910390f35b34801561070f57600080fd5b50610718610d49565b604051610725919061202b565b60405180910390f35b34801561073a57600080fd5b50610755600480360381019061075091906123ab565b610d4f565b60405161076291906121e2565b60405180910390f35b34801561077757600080fd5b50610780610da3565b60405161078d919061202b565b60405180910390f35b3480156107a257600080fd5b506107bd60048036038101906107b891906123d8565b610da9565b6040516107ca919061202b565b60405180910390f35b3480156107df57600080fd5b506107e8610e30565b6040516107f5919061202b565b60405180910390f35b34801561080a57600080fd5b50610825600480360381019061082091906123ab565b610e36565b005b600a5481565b60606003805461083c90612447565b80601f016020809104026020016040519081016040528092919081815260200182805461086890612447565b80156108b55780601f1061088a576101008083540402835291602001916108b5565b820191906000526020600020905b81548152906001019060200180831161089857829003601f168201915b5050505050905090565b6000806108ca610eb9565b90506108d7818585610ec1565b600191505092915050565b60006108ec61108a565b60648284866108fb91906124a7565b61090591906124a7565b1115610946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093d9061254d565b60405180910390fd5b8360098190555082600a8190555081600b81905550600190509392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60075481565b6000806109a5610eb9565b90506109b2858285611108565b6109bd858585611194565b60019150509392505050565b60006109d361108a565b60648284866109e291906124a7565b6109ec91906124a7565b1115610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a249061254d565b60405180910390fd5b836006819055508260078190555081600881905550600190509392505050565b60006012905090565b600080610a61610eb9565b9050610a82818585610a738589610da9565b610a7d91906124a7565b610ec1565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610ae161108a565b81600c8190555060019050919050565b60085481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b4761108a565b610b51600061185a565b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6000610b8961108a565b81600d8190555060019050919050565b6000610ba361108a565b81600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610c2c90612447565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5890612447565b8015610ca55780601f10610c7a57610100808354040283529160200191610ca5565b820191906000526020600020905b815481529060010190602001808311610c8857829003601f168201915b5050505050905090565b600080610cba610eb9565b90506000610cc88286610da9565b905083811015610d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d04906125df565b60405180910390fd5b610d1a8286868403610ec1565b60019250505092915050565b600080610d31610eb9565b9050610d3e818585611194565b600191505092915050565b600d5481565b6000610d5961108a565b81600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600b5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b610e3e61108a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea490612671565b60405180910390fd5b610eb68161185a565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2790612703565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690612795565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161107d919061202b565b60405180910390a3505050565b611092610eb9565b73ffffffffffffffffffffffffffffffffffffffff166110b0610bf3565b73ffffffffffffffffffffffffffffffffffffffff1614611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd90612801565b60405180910390fd5b565b60006111148484610da9565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461118e5781811015611180576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111779061286d565b60405180910390fd5b61118d8484848403610ec1565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa906128ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126990612991565b60405180910390fd5b8061127c84610af7565b10156112bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b490612a23565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061136257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b801561137b5750601860009054906101000a900460ff16155b15611849577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146115b9576113db611920565b60006013546012546113ec30610af7565b6113f69190612a43565b6114009190612a43565b905060105481106114175761141660105461193d565b5b601154601254106114e55761142d6011546119fe565b601154601260008282546114419190612a43565b925050819055506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050509050806114e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114da90612ae9565b60405180910390fd5b505b601154601354106115b3576114fb6011546119fe565b6011546013600082825461150f9190612a43565b925050819055506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050509050806115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a890612b7b565b60405180910390fd5b505b506115c2565b6115c1611c7e565b5b6000601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806116655750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561167257819050611838565b600c548211156116b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ae90612c0d565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361176357600d5461171684610af7565b8361172191906124a7565b1115611762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175990612c9f565b60405180910390fd5b5b60006064601554846117759190612cbf565b61177f9190612d30565b905060006064601654856117939190612cbf565b61179d9190612d30565b905060006064601454866117b19190612cbf565b6117bb9190612d30565b90508082846117ca91906124a7565b6117d491906124a7565b856117df9190612a43565b935082601260008282546117f391906124a7565b92505081905550816013600082825461180c91906124a7565b92505081905550611834873083858761182591906124a7565b61182f91906124a7565b611c9b565b5050505b611843848483611c9b565b50611855565b611854838383611c9b565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600954601481905550600a54601581905550600b54601681905550565b6001601860006101000a81548160ff02191690831515021790555060006002826119679190612d30565b9050600081836119779190612a43565b90506000479050611987836119fe565b600081476119959190612a43565b90506119a18382611efb565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516119d493929190612d61565b60405180910390a1505050506000601860006101000a81548160ff02191690831515021790555050565b6001601860006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611a3657611a35612d98565b5b604051908082528060200260200182016040528015611a645781602001602082028036833780820191505090505b5090503081600081518110611a7c57611a7b612dc7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b459190612e0b565b81600181518110611b5957611b58612dc7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611bbe307f000000000000000000000000000000000000000000000000000000000000000084610ec1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947836000843061012c42611c0d91906124a7565b6040518663ffffffff1660e01b8152600401611c2d959493929190612f31565b600060405180830381600087803b158015611c4757600080fd5b505af1158015611c5b573d6000803e3d6000fd5b50505050506000601860006101000a81548160ff02191690831515021790555050565b600654601481905550600754601581905550600854601681905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d01906128ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7090612991565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df690612a23565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611eed919061202b565b60405180910390a350505050565b6001601860006101000a81548160ff021916908315150217905550611f41307f000000000000000000000000000000000000000000000000000000000000000084610ec1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611f8b610bf3565b426040518863ffffffff1660e01b8152600401611fad96959493929190612f8b565b60606040518083038185885af1158015611fcb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ff09190613001565b5050506000601860006101000a81548160ff0219169083151502179055505050565b6000819050919050565b61202581612012565b82525050565b6000602082019050612040600083018461201c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612080578082015181840152602081019050612065565b60008484015250505050565b6000601f19601f8301169050919050565b60006120a882612046565b6120b28185612051565b93506120c2818560208601612062565b6120cb8161208c565b840191505092915050565b600060208201905081810360008301526120f0818461209d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612128826120fd565b9050919050565b6121388161211d565b811461214357600080fd5b50565b6000813590506121558161212f565b92915050565b61216481612012565b811461216f57600080fd5b50565b6000813590506121818161215b565b92915050565b6000806040838503121561219e5761219d6120f8565b5b60006121ac85828601612146565b92505060206121bd85828601612172565b9150509250929050565b60008115159050919050565b6121dc816121c7565b82525050565b60006020820190506121f760008301846121d3565b92915050565b600080600060608486031215612216576122156120f8565b5b600061222486828701612172565b935050602061223586828701612172565b925050604061224686828701612172565b9150509250925092565b6000819050919050565b600061227561227061226b846120fd565b612250565b6120fd565b9050919050565b60006122878261225a565b9050919050565b60006122998261227c565b9050919050565b6122a98161228e565b82525050565b60006020820190506122c460008301846122a0565b92915050565b6000806000606084860312156122e3576122e26120f8565b5b60006122f186828701612146565b935050602061230286828701612146565b925050604061231386828701612172565b9150509250925092565b600060ff82169050919050565b6123338161231d565b82525050565b600060208201905061234e600083018461232a565b92915050565b61235d8161211d565b82525050565b60006020820190506123786000830184612354565b92915050565b600060208284031215612394576123936120f8565b5b60006123a284828501612172565b91505092915050565b6000602082840312156123c1576123c06120f8565b5b60006123cf84828501612146565b91505092915050565b600080604083850312156123ef576123ee6120f8565b5b60006123fd85828601612146565b925050602061240e85828601612146565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061245f57607f821691505b60208210810361247257612471612418565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006124b282612012565b91506124bd83612012565b92508282019050808211156124d5576124d4612478565b5b92915050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031303000000000000000000000000000000000000000602082015250565b6000612537602d83612051565b9150612542826124db565b604082019050919050565b600060208201905081810360008301526125668161252a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006125c9602583612051565b91506125d48261256d565b604082019050919050565b600060208201905081810360008301526125f8816125bc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061265b602683612051565b9150612666826125ff565b604082019050919050565b6000602082019050818103600083015261268a8161264e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006126ed602483612051565b91506126f882612691565b604082019050919050565b6000602082019050818103600083015261271c816126e0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061277f602283612051565b915061278a82612723565b604082019050919050565b600060208201905081810360008301526127ae81612772565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006127eb602083612051565b91506127f6826127b5565b602082019050919050565b6000602082019050818103600083015261281a816127de565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612857601d83612051565b915061286282612821565b602082019050919050565b600060208201905081810360008301526128868161284a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006128e9602583612051565b91506128f48261288d565b604082019050919050565b60006020820190508181036000830152612918816128dc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061297b602383612051565b91506129868261291f565b604082019050919050565b600060208201905081810360008301526129aa8161296e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612a0d602683612051565b9150612a18826129b1565b604082019050919050565b60006020820190508181036000830152612a3c81612a00565b9050919050565b6000612a4e82612012565b9150612a5983612012565b9250828203905081811115612a7157612a70612478565b5b92915050565b7f4661696c656420746f2073656e642045544820746f206d61726b6574696e672060008201527f77616c6c65740000000000000000000000000000000000000000000000000000602082015250565b6000612ad3602683612051565b9150612ade82612a77565b604082019050919050565b60006020820190508181036000830152612b0281612ac6565b9050919050565b7f4661696c656420746f2073656e642045544820746f206769766561776179207760008201527f616c6c6574000000000000000000000000000000000000000000000000000000602082015250565b6000612b65602583612051565b9150612b7082612b09565b604082019050919050565b60006020820190508181036000830152612b9481612b58565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b6000612bf7603983612051565b9150612c0282612b9b565b604082019050919050565b60006020820190508181036000830152612c2681612bea565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b6000612c89603683612051565b9150612c9482612c2d565b604082019050919050565b60006020820190508181036000830152612cb881612c7c565b9050919050565b6000612cca82612012565b9150612cd583612012565b9250828202612ce381612012565b91508282048414831517612cfa57612cf9612478565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612d3b82612012565b9150612d4683612012565b925082612d5657612d55612d01565b5b828204905092915050565b6000606082019050612d76600083018661201c565b612d83602083018561201c565b612d90604083018461201c565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612e058161212f565b92915050565b600060208284031215612e2157612e206120f8565b5b6000612e2f84828501612df6565b91505092915050565b6000819050919050565b6000612e5d612e58612e5384612e38565b612250565b612012565b9050919050565b612e6d81612e42565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612ea88161211d565b82525050565b6000612eba8383612e9f565b60208301905092915050565b6000602082019050919050565b6000612ede82612e73565b612ee88185612e7e565b9350612ef383612e8f565b8060005b83811015612f24578151612f0b8882612eae565b9750612f1683612ec6565b925050600181019050612ef7565b5085935050505092915050565b600060a082019050612f46600083018861201c565b612f536020830187612e64565b8181036040830152612f658186612ed3565b9050612f746060830185612354565b612f81608083018461201c565b9695505050505050565b600060c082019050612fa06000830189612354565b612fad602083018861201c565b612fba6040830187612e64565b612fc76060830186612e64565b612fd46080830185612354565b612fe160a083018461201c565b979650505050505050565b600081519050612ffb8161215b565b92915050565b60008060006060848603121561301a576130196120f8565b5b600061302886828701612fec565b935050602061303986828701612fec565b925050604061304a86828701612fec565b915050925092509256fea26469706673582212202061b0679f90d35218c9f4a29773e3e89b06eabdaaa60c64e6d5f4bdadb3a76864736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101e75760003560e01c8063715018a611610102578063a457c2d711610095578063ccaf814011610064578063ccaf81401461076b578063dd62ed3e14610796578063ee340f50146107d3578063f2fde38b146107fe576101ee565b8063a457c2d714610689578063a9059cbb146106c6578063aa4bde2814610703578063bb85c6d11461072e576101ee565b806383c2a27d116100d157806383c2a27d146105cb5780638c0b5e22146106085780638da5cb5b1461063357806395d89b411461065e576101ee565b8063715018a61461052157806375f0a874146105385780637df573101461056357806381bfdcca1461058e576101ee565b80632b18b6dc1161017a5780635c9db064116101495780635c9db06414610451578063677daa571461047c57806367a12a6d146104b957806370a08231146104e4576101ee565b80632b18b6dc14610381578063313ce567146103be57806339509351146103e957806349bd5a5e14610426576101ee565b80631694505e116101b65780631694505e146102c357806318160ddd146102ee5780631e0b376e1461031957806323b872dd14610344576101ee565b8063029e8399146101f357806306fdde031461021e578063095ea7b3146102495780630f23e36f14610286576101ee565b366101ee57005b600080fd5b3480156101ff57600080fd5b50610208610827565b604051610215919061202b565b60405180910390f35b34801561022a57600080fd5b5061023361082d565b60405161024091906120d6565b60405180910390f35b34801561025557600080fd5b50610270600480360381019061026b9190612187565b6108bf565b60405161027d91906121e2565b60405180910390f35b34801561029257600080fd5b506102ad60048036038101906102a891906121fd565b6108e2565b6040516102ba91906121e2565b60405180910390f35b3480156102cf57600080fd5b506102d8610966565b6040516102e591906122af565b60405180910390f35b3480156102fa57600080fd5b5061030361098a565b604051610310919061202b565b60405180910390f35b34801561032557600080fd5b5061032e610994565b60405161033b919061202b565b60405180910390f35b34801561035057600080fd5b5061036b600480360381019061036691906122ca565b61099a565b60405161037891906121e2565b60405180910390f35b34801561038d57600080fd5b506103a860048036038101906103a391906121fd565b6109c9565b6040516103b591906121e2565b60405180910390f35b3480156103ca57600080fd5b506103d3610a4d565b6040516103e09190612339565b60405180910390f35b3480156103f557600080fd5b50610410600480360381019061040b9190612187565b610a56565b60405161041d91906121e2565b60405180910390f35b34801561043257600080fd5b5061043b610a8d565b6040516104489190612363565b60405180910390f35b34801561045d57600080fd5b50610466610ab1565b6040516104739190612363565b60405180910390f35b34801561048857600080fd5b506104a3600480360381019061049e919061237e565b610ad7565b6040516104b091906121e2565b60405180910390f35b3480156104c557600080fd5b506104ce610af1565b6040516104db919061202b565b60405180910390f35b3480156104f057600080fd5b5061050b600480360381019061050691906123ab565b610af7565b604051610518919061202b565b60405180910390f35b34801561052d57600080fd5b50610536610b3f565b005b34801561054457600080fd5b5061054d610b53565b60405161055a9190612363565b60405180910390f35b34801561056f57600080fd5b50610578610b79565b604051610585919061202b565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b0919061237e565b610b7f565b6040516105c291906121e2565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed91906123ab565b610b99565b6040516105ff91906121e2565b60405180910390f35b34801561061457600080fd5b5061061d610bed565b60405161062a919061202b565b60405180910390f35b34801561063f57600080fd5b50610648610bf3565b6040516106559190612363565b60405180910390f35b34801561066a57600080fd5b50610673610c1d565b60405161068091906120d6565b60405180910390f35b34801561069557600080fd5b506106b060048036038101906106ab9190612187565b610caf565b6040516106bd91906121e2565b60405180910390f35b3480156106d257600080fd5b506106ed60048036038101906106e89190612187565b610d26565b6040516106fa91906121e2565b60405180910390f35b34801561070f57600080fd5b50610718610d49565b604051610725919061202b565b60405180910390f35b34801561073a57600080fd5b50610755600480360381019061075091906123ab565b610d4f565b60405161076291906121e2565b60405180910390f35b34801561077757600080fd5b50610780610da3565b60405161078d919061202b565b60405180910390f35b3480156107a257600080fd5b506107bd60048036038101906107b891906123d8565b610da9565b6040516107ca919061202b565b60405180910390f35b3480156107df57600080fd5b506107e8610e30565b6040516107f5919061202b565b60405180910390f35b34801561080a57600080fd5b50610825600480360381019061082091906123ab565b610e36565b005b600a5481565b60606003805461083c90612447565b80601f016020809104026020016040519081016040528092919081815260200182805461086890612447565b80156108b55780601f1061088a576101008083540402835291602001916108b5565b820191906000526020600020905b81548152906001019060200180831161089857829003601f168201915b5050505050905090565b6000806108ca610eb9565b90506108d7818585610ec1565b600191505092915050565b60006108ec61108a565b60648284866108fb91906124a7565b61090591906124a7565b1115610946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093d9061254d565b60405180910390fd5b8360098190555082600a8190555081600b81905550600190509392505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60075481565b6000806109a5610eb9565b90506109b2858285611108565b6109bd858585611194565b60019150509392505050565b60006109d361108a565b60648284866109e291906124a7565b6109ec91906124a7565b1115610a2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a249061254d565b60405180910390fd5b836006819055508260078190555081600881905550600190509392505050565b60006012905090565b600080610a61610eb9565b9050610a82818585610a738589610da9565b610a7d91906124a7565b610ec1565b600191505092915050565b7f0000000000000000000000009405c78e58ec25b0ffcd80209b2f8c9144ba443e81565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610ae161108a565b81600c8190555060019050919050565b60085481565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b4761108a565b610b51600061185a565b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60095481565b6000610b8961108a565b81600d8190555060019050919050565b6000610ba361108a565b81600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610c2c90612447565b80601f0160208091040260200160405190810160405280929190818152602001828054610c5890612447565b8015610ca55780601f10610c7a57610100808354040283529160200191610ca5565b820191906000526020600020905b815481529060010190602001808311610c8857829003601f168201915b5050505050905090565b600080610cba610eb9565b90506000610cc88286610da9565b905083811015610d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d04906125df565b60405180910390fd5b610d1a8286868403610ec1565b60019250505092915050565b600080610d31610eb9565b9050610d3e818585611194565b600191505092915050565b600d5481565b6000610d5961108a565b81600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600b5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60065481565b610e3e61108a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610ead576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea490612671565b60405180910390fd5b610eb68161185a565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2790612703565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610f9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9690612795565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161107d919061202b565b60405180910390a3505050565b611092610eb9565b73ffffffffffffffffffffffffffffffffffffffff166110b0610bf3565b73ffffffffffffffffffffffffffffffffffffffff1614611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd90612801565b60405180910390fd5b565b60006111148484610da9565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461118e5781811015611180576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111779061286d565b60405180910390fd5b61118d8484848403610ec1565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611203576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fa906128ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611272576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126990612991565b60405180910390fd5b8061127c84610af7565b10156112bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b490612a23565b60405180910390fd5b7f0000000000000000000000009405c78e58ec25b0ffcd80209b2f8c9144ba443e73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061136257507f0000000000000000000000009405c78e58ec25b0ffcd80209b2f8c9144ba443e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b801561137b5750601860009054906101000a900460ff16155b15611849577f0000000000000000000000009405c78e58ec25b0ffcd80209b2f8c9144ba443e73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146115b9576113db611920565b60006013546012546113ec30610af7565b6113f69190612a43565b6114009190612a43565b905060105481106114175761141660105461193d565b5b601154601254106114e55761142d6011546119fe565b601154601260008282546114419190612a43565b925050819055506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050509050806114e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114da90612ae9565b60405180910390fd5b505b601154601354106115b3576114fb6011546119fe565b6011546013600082825461150f9190612a43565b925050819055506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050509050806115b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a890612b7b565b60405180910390fd5b505b506115c2565b6115c1611c7e565b5b6000601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806116655750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561167257819050611838565b600c548211156116b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ae90612c0d565b60405180910390fd5b7f0000000000000000000000009405c78e58ec25b0ffcd80209b2f8c9144ba443e73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361176357600d5461171684610af7565b8361172191906124a7565b1115611762576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175990612c9f565b60405180910390fd5b5b60006064601554846117759190612cbf565b61177f9190612d30565b905060006064601654856117939190612cbf565b61179d9190612d30565b905060006064601454866117b19190612cbf565b6117bb9190612d30565b90508082846117ca91906124a7565b6117d491906124a7565b856117df9190612a43565b935082601260008282546117f391906124a7565b92505081905550816013600082825461180c91906124a7565b92505081905550611834873083858761182591906124a7565b61182f91906124a7565b611c9b565b5050505b611843848483611c9b565b50611855565b611854838383611c9b565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600954601481905550600a54601581905550600b54601681905550565b6001601860006101000a81548160ff02191690831515021790555060006002826119679190612d30565b9050600081836119779190612a43565b90506000479050611987836119fe565b600081476119959190612a43565b90506119a18382611efb565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516119d493929190612d61565b60405180910390a1505050506000601860006101000a81548160ff02191690831515021790555050565b6001601860006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611a3657611a35612d98565b5b604051908082528060200260200182016040528015611a645781602001602082028036833780820191505090505b5090503081600081518110611a7c57611a7b612dc7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b459190612e0b565b81600181518110611b5957611b58612dc7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611bbe307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610ec1565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947836000843061012c42611c0d91906124a7565b6040518663ffffffff1660e01b8152600401611c2d959493929190612f31565b600060405180830381600087803b158015611c4757600080fd5b505af1158015611c5b573d6000803e3d6000fd5b50505050506000601860006101000a81548160ff02191690831515021790555050565b600654601481905550600754601581905550600854601681905550565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d01906128ff565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7090612991565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611dff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df690612a23565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611eed919061202b565b60405180910390a350505050565b6001601860006101000a81548160ff021916908315150217905550611f41307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610ec1565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611f8b610bf3565b426040518863ffffffff1660e01b8152600401611fad96959493929190612f8b565b60606040518083038185885af1158015611fcb573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ff09190613001565b5050506000601860006101000a81548160ff0219169083151502179055505050565b6000819050919050565b61202581612012565b82525050565b6000602082019050612040600083018461201c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612080578082015181840152602081019050612065565b60008484015250505050565b6000601f19601f8301169050919050565b60006120a882612046565b6120b28185612051565b93506120c2818560208601612062565b6120cb8161208c565b840191505092915050565b600060208201905081810360008301526120f0818461209d565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612128826120fd565b9050919050565b6121388161211d565b811461214357600080fd5b50565b6000813590506121558161212f565b92915050565b61216481612012565b811461216f57600080fd5b50565b6000813590506121818161215b565b92915050565b6000806040838503121561219e5761219d6120f8565b5b60006121ac85828601612146565b92505060206121bd85828601612172565b9150509250929050565b60008115159050919050565b6121dc816121c7565b82525050565b60006020820190506121f760008301846121d3565b92915050565b600080600060608486031215612216576122156120f8565b5b600061222486828701612172565b935050602061223586828701612172565b925050604061224686828701612172565b9150509250925092565b6000819050919050565b600061227561227061226b846120fd565b612250565b6120fd565b9050919050565b60006122878261225a565b9050919050565b60006122998261227c565b9050919050565b6122a98161228e565b82525050565b60006020820190506122c460008301846122a0565b92915050565b6000806000606084860312156122e3576122e26120f8565b5b60006122f186828701612146565b935050602061230286828701612146565b925050604061231386828701612172565b9150509250925092565b600060ff82169050919050565b6123338161231d565b82525050565b600060208201905061234e600083018461232a565b92915050565b61235d8161211d565b82525050565b60006020820190506123786000830184612354565b92915050565b600060208284031215612394576123936120f8565b5b60006123a284828501612172565b91505092915050565b6000602082840312156123c1576123c06120f8565b5b60006123cf84828501612146565b91505092915050565b600080604083850312156123ef576123ee6120f8565b5b60006123fd85828601612146565b925050602061240e85828601612146565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061245f57607f821691505b60208210810361247257612471612418565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006124b282612012565b91506124bd83612012565b92508282019050808211156124d5576124d4612478565b5b92915050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031303000000000000000000000000000000000000000602082015250565b6000612537602d83612051565b9150612542826124db565b604082019050919050565b600060208201905081810360008301526125668161252a565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006125c9602583612051565b91506125d48261256d565b604082019050919050565b600060208201905081810360008301526125f8816125bc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061265b602683612051565b9150612666826125ff565b604082019050919050565b6000602082019050818103600083015261268a8161264e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006126ed602483612051565b91506126f882612691565b604082019050919050565b6000602082019050818103600083015261271c816126e0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061277f602283612051565b915061278a82612723565b604082019050919050565b600060208201905081810360008301526127ae81612772565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006127eb602083612051565b91506127f6826127b5565b602082019050919050565b6000602082019050818103600083015261281a816127de565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612857601d83612051565b915061286282612821565b602082019050919050565b600060208201905081810360008301526128868161284a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006128e9602583612051565b91506128f48261288d565b604082019050919050565b60006020820190508181036000830152612918816128dc565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061297b602383612051565b91506129868261291f565b604082019050919050565b600060208201905081810360008301526129aa8161296e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612a0d602683612051565b9150612a18826129b1565b604082019050919050565b60006020820190508181036000830152612a3c81612a00565b9050919050565b6000612a4e82612012565b9150612a5983612012565b9250828203905081811115612a7157612a70612478565b5b92915050565b7f4661696c656420746f2073656e642045544820746f206d61726b6574696e672060008201527f77616c6c65740000000000000000000000000000000000000000000000000000602082015250565b6000612ad3602683612051565b9150612ade82612a77565b604082019050919050565b60006020820190508181036000830152612b0281612ac6565b9050919050565b7f4661696c656420746f2073656e642045544820746f206769766561776179207760008201527f616c6c6574000000000000000000000000000000000000000000000000000000602082015250565b6000612b65602583612051565b9150612b7082612b09565b604082019050919050565b60006020820190508181036000830152612b9481612b58565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b6000612bf7603983612051565b9150612c0282612b9b565b604082019050919050565b60006020820190508181036000830152612c2681612bea565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b6000612c89603683612051565b9150612c9482612c2d565b604082019050919050565b60006020820190508181036000830152612cb881612c7c565b9050919050565b6000612cca82612012565b9150612cd583612012565b9250828202612ce381612012565b91508282048414831517612cfa57612cf9612478565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612d3b82612012565b9150612d4683612012565b925082612d5657612d55612d01565b5b828204905092915050565b6000606082019050612d76600083018661201c565b612d83602083018561201c565b612d90604083018461201c565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612e058161212f565b92915050565b600060208284031215612e2157612e206120f8565b5b6000612e2f84828501612df6565b91505092915050565b6000819050919050565b6000612e5d612e58612e5384612e38565b612250565b612012565b9050919050565b612e6d81612e42565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612ea88161211d565b82525050565b6000612eba8383612e9f565b60208301905092915050565b6000602082019050919050565b6000612ede82612e73565b612ee88185612e7e565b9350612ef383612e8f565b8060005b83811015612f24578151612f0b8882612eae565b9750612f1683612ec6565b925050600181019050612ef7565b5085935050505092915050565b600060a082019050612f46600083018861201c565b612f536020830187612e64565b8181036040830152612f658186612ed3565b9050612f746060830185612354565b612f81608083018461201c565b9695505050505050565b600060c082019050612fa06000830189612354565b612fad602083018861201c565b612fba6040830187612e64565b612fc76060830186612e64565b612fd46080830185612354565b612fe160a083018461201c565b979650505050505050565b600081519050612ffb8161215b565b92915050565b60008060006060848603121561301a576130196120f8565b5b600061302886828701612fec565b935050602061303986828701612fec565b925050604061304a86828701612fec565b915050925092509256fea26469706673582212202061b0679f90d35218c9f4a29773e3e89b06eabdaaa60c64e6d5f4bdadb3a76864736f6c63430008110033

Deployed Bytecode Sourcemap

28145:10296:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28642:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17863:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20138:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37412:589;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29258:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19002:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28510:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20962:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36845:559;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18844:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22678:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29316:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28940:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38009:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28554:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18028:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15122:103;;;;;;;;;;;;;:::i;:::-;;28858:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28597:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38201:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36275:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28734:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14474:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17687:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21762:507;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19582:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28794:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36083:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28688:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19175:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28466:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15380:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28642:39;;;;:::o;17863:102::-;17919:13;17952:5;17945:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17863:102;:::o;20138:244::-;20259:4;20281:13;20297:12;:10;:12::i;:::-;20281:28;;20320:32;20329:5;20336:7;20345:6;20320:8;:32::i;:::-;20370:4;20363:11;;;20138:244;;;;:::o;37412:589::-;37592:4;14360:13;:11;:13::i;:::-;37736:3:::1;37712:19;37672:20;37632;:60;;;;:::i;:::-;:99;;;;:::i;:::-;37631:108;;37609:203;;;;;;;;;;;;:::i;:::-;;;;;;;;;37845:20;37823:19;:42;;;;37898:20;37876:19;:42;;;;37950:19;37929:18;:40;;;;37989:4;37982:11;;37412:589:::0;;;;;:::o;29258:51::-;;;:::o;19002:110::-;19065:7;19092:12;;19085:19;;19002:110;:::o;28510:37::-;;;;:::o;20962:297::-;21095:4;21112:15;21130:12;:10;:12::i;:::-;21112:30;;21153:38;21169:4;21175:7;21184:6;21153:15;:38::i;:::-;21202:27;21212:4;21218:2;21222:6;21202:9;:27::i;:::-;21247:4;21240:11;;;20962:297;;;;;:::o;36845:559::-;37021:4;14360:13;:11;:13::i;:::-;37145:3:::1;37105:18;37083:19;37061;:41;;;;:::i;:::-;:62;;;;:::i;:::-;37060:88;;37038:183;;;;;;;;;;;;:::i;:::-;;;;;;;;;37253:19;37232:18;:40;;;;37304:19;37283:18;:40;;;;37354:18;37334:17;:38;;;;37392:4;37385:11;;36845:559:::0;;;;;:::o;18844:93::-;18902:5;18927:2;18920:9;;18844:93;:::o;22678:272::-;22795:4;22817:13;22833:12;:10;:12::i;:::-;22817:28;;22856:64;22865:5;22872:7;22909:10;22881:25;22891:5;22898:7;22881:9;:25::i;:::-;:38;;;;:::i;:::-;22856:8;:64::i;:::-;22938:4;22931:11;;;22678:272;;;;:::o;29316:38::-;;;:::o;28940:74::-;;;;;;;;;;;;;:::o;38009:184::-;38113:4;14360:13;:11;:13::i;:::-;38149:12:::1;38135:11;:26;;;;38181:4;38174:11;;38009:184:::0;;;:::o;28554:36::-;;;;:::o;18028:177::-;18147:7;18179:9;:18;18189:7;18179:18;;;;;;;;;;;;;;;;18172:25;;18028:177;;;:::o;15122:103::-;14360:13;:11;:13::i;:::-;15187:30:::1;15214:1;15187:18;:30::i;:::-;15122:103::o:0;28858:75::-;;;;;;;;;;;;;:::o;28597:38::-;;;;:::o;38201:200::-;38313:4;14360:13;:11;:13::i;:::-;38353:16:::1;38335:15;:34;;;;38389:4;38382:11;;38201:200:::0;;;:::o;36275:182::-;36379:4;14360:13;:11;:13::i;:::-;36418:9:::1;36401:14;;:26;;;;;;;;;;;;;;;;;;36445:4;36438:11;;36275:182:::0;;;:::o;28734:53::-;;;;:::o;14474:87::-;14520:7;14547:6;;;;;;;;;;;14540:13;;14474:87;:::o;17687:106::-;17745:13;17778:7;17771:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17687:106;:::o;21762:507::-;21884:4;21906:13;21922:12;:10;:12::i;:::-;21906:28;;21945:24;21972:25;21982:5;21989:7;21972:9;:25::i;:::-;21945:52;;22050:15;22030:16;:35;;22008:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;22166:60;22175:5;22182:7;22210:15;22191:16;:34;22166:8;:60::i;:::-;22257:4;22250:11;;;;21762:507;;;;:::o;19582:236::-;19699:4;19721:13;19737:12;:10;:12::i;:::-;19721:28;;19760;19770:5;19777:2;19781:6;19760:9;:28::i;:::-;19806:4;19799:11;;;19582:236;;;;:::o;28794:57::-;;;;:::o;36083:184::-;36188:4;14360:13;:11;:13::i;:::-;36228:9:::1;36210:15;;:27;;;;;;;;;;;;;;;;;;36255:4;36248:11;;36083:184:::0;;;:::o;28688:37::-;;;;:::o;19175:201::-;19309:7;19341:11;:18;19353:5;19341:18;;;;;;;;;;;;;;;:27;19360:7;19341:27;;;;;;;;;;;;;;;;19334:34;;19175:201;;;;:::o;28466:37::-;;;;:::o;15380:238::-;14360:13;:11;:13::i;:::-;15503:1:::1;15483:22;;:8;:22;;::::0;15461:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15582:28;15601:8;15582:18;:28::i;:::-;15380:238:::0;:::o;13267:98::-;13320:7;13347:10;13340:17;;13267:98;:::o;24985:380::-;25138:1;25121:19;;:5;:19;;;25113:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25219:1;25200:21;;:7;:21;;;25192:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25303:6;25273:11;:18;25285:5;25273:18;;;;;;;;;;;;;;;:27;25292:7;25273:27;;;;;;;;;;;;;;;:36;;;;25341:7;25325:32;;25334:5;25325:32;;;25350:6;25325:32;;;;;;:::i;:::-;;;;;;;;24985:380;;;:::o;14639:132::-;14714:12;:10;:12::i;:::-;14703:23;;:7;:5;:7::i;:::-;:23;;;14695:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14639:132::o;25656:502::-;25791:24;25818:25;25828:5;25835:7;25818:9;:25::i;:::-;25791:52;;25878:17;25858:16;:37;25854:297;;25958:6;25938:16;:26;;25912:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;26073:51;26082:5;26089:7;26117:6;26098:16;:25;26073:8;:51::i;:::-;25854:297;25780:378;25656:502;;;:::o;31348:3335::-;31496:1;31480:18;;:4;:18;;;31472:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31573:1;31559:16;;:2;:16;;;31551:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31667:6;31648:15;31658:4;31648:9;:15::i;:::-;:25;;31626:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;31779:13;31771:21;;:4;:21;;;:44;;;;31802:13;31796:19;;:2;:19;;;31771:44;31770:67;;;;;31821:16;;;;;;;;;;;31820:17;31770:67;31752:2924;;;31876:13;31868:21;;:4;:21;;;31864:1377;;31910:13;:11;:13::i;:::-;31942:32;32067:17;;32025:18;;31977:24;31995:4;31977:9;:24::i;:::-;:66;;;;:::i;:::-;:107;;;;:::i;:::-;31942:142;;32157:30;;32129:24;:58;32103:194;;32230:47;32246:30;;32230:15;:47::i;:::-;32103:194;32343:24;;32320:18;;32319:48;32315:422;;32392:43;32410:24;;32392:17;:43::i;:::-;32480:24;;32458:18;;:46;;;;;;;:::i;:::-;;;;;;;;32527:9;32547:15;;;;;;;;;;;32539:29;;:100;32595:21;32539:100;;;;;;;;;;;;;;;;;;;;;;;32527:112;;32670:4;32662:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32369:368;32315:422;32782:24;;32760:17;;32759:47;32755:418;;32831:43;32849:24;;32831:17;:43::i;:::-;32918:24;;32897:17;;:45;;;;;;;:::i;:::-;;;;;;;;32965:9;32985:14;;;;;;;;;;;32977:28;;:99;33032:21;32977:99;;;;;;;;;;;;;;;;;;;;;;;32965:111;;33107:4;33099:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;32808:365;32755:418;31891:1297;31864:1377;;;33213:12;:10;:12::i;:::-;31864:1377;33257:22;33298:18;:24;33317:4;33298:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;33326:18;:22;33345:2;33326:22;;;;;;;;;;;;;;;;;;;;;;;;;33298:50;33294:1249;;;33386:6;33369:23;;33294:1249;;;33473:11;;33463:6;:21;;33433:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;33616:13;33608:21;;:4;:21;;;33604:253;;33716:15;;33698:13;33708:2;33698:9;:13::i;:::-;33689:6;:22;;;;:::i;:::-;33688:43;;33654:183;;;;;;;;;;;;:::i;:::-;;;;;;;;;33604:253;33877:22;33933:3;33913:16;;33904:6;:25;;;;:::i;:::-;33903:33;;;;:::i;:::-;33877:60;;33956:21;34010:3;33991:15;;33982:6;:24;;;;:::i;:::-;33981:32;;;;:::i;:::-;33956:58;;34033:22;34089:3;34069:16;;34060:6;:25;;;;:::i;:::-;34059:33;;;;:::i;:::-;34033:60;;34214:14;34198:13;34181:14;:30;;;;:::i;:::-;:47;;;;:::i;:::-;34150:6;:79;;;;:::i;:::-;34112:117;;34270:14;34248:18;;:36;;;;;;;:::i;:::-;;;;;;;;34324:13;34303:17;;:34;;;;;;;:::i;:::-;;;;;;;;34358:169;34396:4;34431;34493:14;34477:13;34460:14;:30;;;;:::i;:::-;:47;;;;:::i;:::-;34358:15;:169::i;:::-;33414:1129;;;33294:1249;34557:41;34573:4;34579:2;34583:14;34557:15;:41::i;:::-;31849:2761;31752:2924;;;34631:33;34647:4;34653:2;34657:6;34631:15;:33::i;:::-;31752:2924;31348:3335;;;:::o;15778:191::-;15852:16;15871:6;;;;;;;;;;;15852:25;;15897:8;15888:6;;:17;;;;;;;;;;;;;;;;;;15952:8;15921:40;;15942:8;15921:40;;;;;;;;;;;;15841:128;15778:191;:::o;36653:184::-;36714:19;;36695:16;:38;;;;36763:19;;36744:16;:38;;;;36811:18;;36793:15;:36;;;;36653:184::o;34691:474::-;29854:4;29835:16;;:23;;;;;;;;;;;;;;;;;;34777:12:::1;34816:1;34793:20;:24;;;;:::i;:::-;34777:41;;34829:17;34873:4;34850:20;:27;;;;:::i;:::-;34829:49;;34891:22;34916:21;34891:46;;34950:23;34968:4;34950:17;:23::i;:::-;34986:18;35032:14;35008:21;:38;;;;:::i;:::-;34986:61;;35060:36;35074:9;35085:10;35060:13;:36::i;:::-;35114:43;35129:4;35135:10;35147:9;35114:43;;;;;;;;:::i;:::-;;;;;;;;34766:399;;;;29900:5:::0;29881:16;;:24;;;;;;;;;;;;;;;;;;34691:474;:::o;35173:496::-;29854:4;29835:16;;:23;;;;;;;;;;;;;;;;;;35252:21:::1;35290:1;35276:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35252:40;;35321:4;35303;35308:1;35303:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;35347:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35337:4;35342:1;35337:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;35382:62;35399:4;35414:15;35432:11;35382:8;:62::i;:::-;35457:15;:66;;;35538:11;35564:1;35580:4;35607;35646:3;35628:15;:21;;;;:::i;:::-;35457:204;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35241:428;29900:5:::0;29881:16;;:24;;;;;;;;;;;;;;;;;;35173:496;:::o;36465:180::-;36525:18;;36506:16;:37;;;;36573:18;;36554:16;:37;;;;36620:17;;36602:15;:35;;;;36465:180::o;26166:776::-;26313:1;26297:18;;:4;:18;;;26289:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26390:1;26376:16;;:2;:16;;;26368:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26445:19;26467:9;:15;26477:4;26467:15;;;;;;;;;;;;;;;;26445:37;;26530:6;26515:11;:21;;26493:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;26670:6;26656:11;:20;26638:9;:15;26648:4;26638:15;;;;;;;;;;;;;;;:38;;;;26873:6;26856:9;:13;26866:2;26856:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;26923:2;26908:26;;26917:4;26908:26;;;26927:6;26908:26;;;;;;:::i;:::-;;;;;;;;26278:664;26166:776;;;:::o;35677:398::-;29854:4;29835:16;;:23;;;;;;;;;;;;;;;;;;35794:62:::1;35811:4;35826:15;35844:11;35794:8;:62::i;:::-;35869:15;:31;;;35908:9;35941:4;35961:11;35987:1;36003::::0;36019:7:::1;:5;:7::i;:::-;36041:15;35869:198;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29900:5:::0;29881:16;;:24;;;;;;;;;;;;;;;;;;35677:398;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:246::-;803:1;813:113;827:6;824:1;821:13;813:113;;;912:1;907:3;903:11;897:18;893:1;888:3;884:11;877:39;849:2;846:1;842:10;837:15;;813:113;;;960:1;951:6;946:3;942:16;935:27;784:184;722:246;;;:::o;974:102::-;1015:6;1066:2;1062:7;1057:2;1050:5;1046:14;1042:28;1032:38;;974:102;;;:::o;1082:377::-;1170:3;1198:39;1231:5;1198:39;:::i;:::-;1253:71;1317:6;1312:3;1253:71;:::i;:::-;1246:78;;1333:65;1391:6;1386:3;1379:4;1372:5;1368:16;1333:65;:::i;:::-;1423:29;1445:6;1423:29;:::i;:::-;1418:3;1414:39;1407:46;;1174:285;1082:377;;;;:::o;1465:313::-;1578:4;1616:2;1605:9;1601:18;1593:26;;1665:9;1659:4;1655:20;1651:1;1640:9;1636:17;1629:47;1693:78;1766:4;1757:6;1693:78;:::i;:::-;1685:86;;1465:313;;;;:::o;1865:117::-;1974:1;1971;1964:12;2111:126;2148:7;2188:42;2181:5;2177:54;2166:65;;2111:126;;;:::o;2243:96::-;2280:7;2309:24;2327:5;2309:24;:::i;:::-;2298:35;;2243:96;;;:::o;2345:122::-;2418:24;2436:5;2418:24;:::i;:::-;2411:5;2408:35;2398:63;;2457:1;2454;2447:12;2398:63;2345:122;:::o;2473:139::-;2519:5;2557:6;2544:20;2535:29;;2573:33;2600:5;2573:33;:::i;:::-;2473:139;;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:619::-;3875:6;3883;3891;3940:2;3928:9;3919:7;3915:23;3911:32;3908:119;;;3946:79;;:::i;:::-;3908:119;4066:1;4091:53;4136:7;4127:6;4116:9;4112:22;4091:53;:::i;:::-;4081:63;;4037:117;4193:2;4219:53;4264:7;4255:6;4244:9;4240:22;4219:53;:::i;:::-;4209:63;;4164:118;4321:2;4347:53;4392:7;4383:6;4372:9;4368:22;4347:53;:::i;:::-;4337:63;;4292:118;3798:619;;;;;:::o;4423:60::-;4451:3;4472:5;4465:12;;4423:60;;;:::o;4489:142::-;4539:9;4572:53;4590:34;4599:24;4617:5;4599:24;:::i;:::-;4590:34;:::i;:::-;4572:53;:::i;:::-;4559:66;;4489:142;;;:::o;4637:126::-;4687:9;4720:37;4751:5;4720:37;:::i;:::-;4707:50;;4637:126;;;:::o;4769:152::-;4845:9;4878:37;4909:5;4878:37;:::i;:::-;4865:50;;4769:152;;;:::o;4927:183::-;5040:63;5097:5;5040:63;:::i;:::-;5035:3;5028:76;4927:183;;:::o;5116:274::-;5235:4;5273:2;5262:9;5258:18;5250:26;;5286:97;5380:1;5369:9;5365:17;5356:6;5286:97;:::i;:::-;5116:274;;;;:::o;5396:619::-;5473:6;5481;5489;5538:2;5526:9;5517:7;5513:23;5509:32;5506:119;;;5544:79;;:::i;:::-;5506:119;5664:1;5689:53;5734:7;5725:6;5714:9;5710:22;5689:53;:::i;:::-;5679:63;;5635:117;5791:2;5817:53;5862:7;5853:6;5842:9;5838:22;5817:53;:::i;:::-;5807:63;;5762:118;5919:2;5945:53;5990:7;5981:6;5970:9;5966:22;5945:53;:::i;:::-;5935:63;;5890:118;5396:619;;;;;:::o;6021:86::-;6056:7;6096:4;6089:5;6085:16;6074:27;;6021:86;;;:::o;6113:112::-;6196:22;6212:5;6196:22;:::i;:::-;6191:3;6184:35;6113:112;;:::o;6231:214::-;6320:4;6358:2;6347:9;6343:18;6335:26;;6371:67;6435:1;6424:9;6420:17;6411:6;6371:67;:::i;:::-;6231:214;;;;:::o;6451:118::-;6538:24;6556:5;6538:24;:::i;:::-;6533:3;6526:37;6451:118;;:::o;6575:222::-;6668:4;6706:2;6695:9;6691:18;6683:26;;6719:71;6787:1;6776:9;6772:17;6763:6;6719:71;:::i;:::-;6575:222;;;;:::o;6803:329::-;6862:6;6911:2;6899:9;6890:7;6886:23;6882:32;6879:119;;;6917:79;;:::i;:::-;6879:119;7037:1;7062:53;7107:7;7098:6;7087:9;7083:22;7062:53;:::i;:::-;7052:63;;7008:117;6803:329;;;;:::o;7138:::-;7197:6;7246:2;7234:9;7225:7;7221:23;7217:32;7214:119;;;7252:79;;:::i;:::-;7214:119;7372:1;7397:53;7442:7;7433:6;7422:9;7418:22;7397:53;:::i;:::-;7387:63;;7343:117;7138:329;;;;:::o;7473:474::-;7541:6;7549;7598:2;7586:9;7577:7;7573:23;7569:32;7566:119;;;7604:79;;:::i;:::-;7566:119;7724:1;7749:53;7794:7;7785:6;7774:9;7770:22;7749:53;:::i;:::-;7739:63;;7695:117;7851:2;7877:53;7922:7;7913:6;7902:9;7898:22;7877:53;:::i;:::-;7867:63;;7822:118;7473:474;;;;;:::o;7953:180::-;8001:77;7998:1;7991:88;8098:4;8095:1;8088:15;8122:4;8119:1;8112:15;8139:320;8183:6;8220:1;8214:4;8210:12;8200:22;;8267:1;8261:4;8257:12;8288:18;8278:81;;8344:4;8336:6;8332:17;8322:27;;8278:81;8406:2;8398:6;8395:14;8375:18;8372:38;8369:84;;8425:18;;:::i;:::-;8369:84;8190:269;8139:320;;;:::o;8465:180::-;8513:77;8510:1;8503:88;8610:4;8607:1;8600:15;8634:4;8631:1;8624:15;8651:191;8691:3;8710:20;8728:1;8710:20;:::i;:::-;8705:25;;8744:20;8762:1;8744:20;:::i;:::-;8739:25;;8787:1;8784;8780:9;8773:16;;8808:3;8805:1;8802:10;8799:36;;;8815:18;;:::i;:::-;8799:36;8651:191;;;;:::o;8848:232::-;8988:34;8984:1;8976:6;8972:14;8965:58;9057:15;9052:2;9044:6;9040:15;9033:40;8848:232;:::o;9086:366::-;9228:3;9249:67;9313:2;9308:3;9249:67;:::i;:::-;9242:74;;9325:93;9414:3;9325:93;:::i;:::-;9443:2;9438:3;9434:12;9427:19;;9086:366;;;:::o;9458:419::-;9624:4;9662:2;9651:9;9647:18;9639:26;;9711:9;9705:4;9701:20;9697:1;9686:9;9682:17;9675:47;9739:131;9865:4;9739:131;:::i;:::-;9731:139;;9458:419;;;:::o;9883:224::-;10023:34;10019:1;10011:6;10007:14;10000:58;10092:7;10087:2;10079:6;10075:15;10068:32;9883:224;:::o;10113:366::-;10255:3;10276:67;10340:2;10335:3;10276:67;:::i;:::-;10269:74;;10352:93;10441:3;10352:93;:::i;:::-;10470:2;10465:3;10461:12;10454:19;;10113:366;;;:::o;10485:419::-;10651:4;10689:2;10678:9;10674:18;10666:26;;10738:9;10732:4;10728:20;10724:1;10713:9;10709:17;10702:47;10766:131;10892:4;10766:131;:::i;:::-;10758:139;;10485:419;;;:::o;10910:225::-;11050:34;11046:1;11038:6;11034:14;11027:58;11119:8;11114:2;11106:6;11102:15;11095:33;10910:225;:::o;11141:366::-;11283:3;11304:67;11368:2;11363:3;11304:67;:::i;:::-;11297:74;;11380:93;11469:3;11380:93;:::i;:::-;11498:2;11493:3;11489:12;11482:19;;11141:366;;;:::o;11513:419::-;11679:4;11717:2;11706:9;11702:18;11694:26;;11766:9;11760:4;11756:20;11752:1;11741:9;11737:17;11730:47;11794:131;11920:4;11794:131;:::i;:::-;11786:139;;11513:419;;;:::o;11938:223::-;12078:34;12074:1;12066:6;12062:14;12055:58;12147:6;12142:2;12134:6;12130:15;12123:31;11938:223;:::o;12167:366::-;12309:3;12330:67;12394:2;12389:3;12330:67;:::i;:::-;12323:74;;12406:93;12495:3;12406:93;:::i;:::-;12524:2;12519:3;12515:12;12508:19;;12167:366;;;:::o;12539:419::-;12705:4;12743:2;12732:9;12728:18;12720:26;;12792:9;12786:4;12782:20;12778:1;12767:9;12763:17;12756:47;12820:131;12946:4;12820:131;:::i;:::-;12812:139;;12539:419;;;:::o;12964:221::-;13104:34;13100:1;13092:6;13088:14;13081:58;13173:4;13168:2;13160:6;13156:15;13149:29;12964:221;:::o;13191:366::-;13333:3;13354:67;13418:2;13413:3;13354:67;:::i;:::-;13347:74;;13430:93;13519:3;13430:93;:::i;:::-;13548:2;13543:3;13539:12;13532:19;;13191:366;;;:::o;13563:419::-;13729:4;13767:2;13756:9;13752:18;13744:26;;13816:9;13810:4;13806:20;13802:1;13791:9;13787:17;13780:47;13844:131;13970:4;13844:131;:::i;:::-;13836:139;;13563:419;;;:::o;13988:182::-;14128:34;14124:1;14116:6;14112:14;14105:58;13988:182;:::o;14176:366::-;14318:3;14339:67;14403:2;14398:3;14339:67;:::i;:::-;14332:74;;14415:93;14504:3;14415:93;:::i;:::-;14533:2;14528:3;14524:12;14517:19;;14176:366;;;:::o;14548:419::-;14714:4;14752:2;14741:9;14737:18;14729:26;;14801:9;14795:4;14791:20;14787:1;14776:9;14772:17;14765:47;14829:131;14955:4;14829:131;:::i;:::-;14821:139;;14548:419;;;:::o;14973:179::-;15113:31;15109:1;15101:6;15097:14;15090:55;14973:179;:::o;15158:366::-;15300:3;15321:67;15385:2;15380:3;15321:67;:::i;:::-;15314:74;;15397:93;15486:3;15397:93;:::i;:::-;15515:2;15510:3;15506:12;15499:19;;15158:366;;;:::o;15530:419::-;15696:4;15734:2;15723:9;15719:18;15711:26;;15783:9;15777:4;15773:20;15769:1;15758:9;15754:17;15747:47;15811:131;15937:4;15811:131;:::i;:::-;15803:139;;15530:419;;;:::o;15955:224::-;16095:34;16091:1;16083:6;16079:14;16072:58;16164:7;16159:2;16151:6;16147:15;16140:32;15955:224;:::o;16185:366::-;16327:3;16348:67;16412:2;16407:3;16348:67;:::i;:::-;16341:74;;16424:93;16513:3;16424:93;:::i;:::-;16542:2;16537:3;16533:12;16526:19;;16185:366;;;:::o;16557:419::-;16723:4;16761:2;16750:9;16746:18;16738:26;;16810:9;16804:4;16800:20;16796:1;16785:9;16781:17;16774:47;16838:131;16964:4;16838:131;:::i;:::-;16830:139;;16557:419;;;:::o;16982:222::-;17122:34;17118:1;17110:6;17106:14;17099:58;17191:5;17186:2;17178:6;17174:15;17167:30;16982:222;:::o;17210:366::-;17352:3;17373:67;17437:2;17432:3;17373:67;:::i;:::-;17366:74;;17449:93;17538:3;17449:93;:::i;:::-;17567:2;17562:3;17558:12;17551:19;;17210:366;;;:::o;17582:419::-;17748:4;17786:2;17775:9;17771:18;17763:26;;17835:9;17829:4;17825:20;17821:1;17810:9;17806:17;17799:47;17863:131;17989:4;17863:131;:::i;:::-;17855:139;;17582:419;;;:::o;18007:225::-;18147:34;18143:1;18135:6;18131:14;18124:58;18216:8;18211:2;18203:6;18199:15;18192:33;18007:225;:::o;18238:366::-;18380:3;18401:67;18465:2;18460:3;18401:67;:::i;:::-;18394:74;;18477:93;18566:3;18477:93;:::i;:::-;18595:2;18590:3;18586:12;18579:19;;18238:366;;;:::o;18610:419::-;18776:4;18814:2;18803:9;18799:18;18791:26;;18863:9;18857:4;18853:20;18849:1;18838:9;18834:17;18827:47;18891:131;19017:4;18891:131;:::i;:::-;18883:139;;18610:419;;;:::o;19035:194::-;19075:4;19095:20;19113:1;19095:20;:::i;:::-;19090:25;;19129:20;19147:1;19129:20;:::i;:::-;19124:25;;19173:1;19170;19166:9;19158:17;;19197:1;19191:4;19188:11;19185:37;;;19202:18;;:::i;:::-;19185:37;19035:194;;;;:::o;19235:225::-;19375:34;19371:1;19363:6;19359:14;19352:58;19444:8;19439:2;19431:6;19427:15;19420:33;19235:225;:::o;19466:366::-;19608:3;19629:67;19693:2;19688:3;19629:67;:::i;:::-;19622:74;;19705:93;19794:3;19705:93;:::i;:::-;19823:2;19818:3;19814:12;19807:19;;19466:366;;;:::o;19838:419::-;20004:4;20042:2;20031:9;20027:18;20019:26;;20091:9;20085:4;20081:20;20077:1;20066:9;20062:17;20055:47;20119:131;20245:4;20119:131;:::i;:::-;20111:139;;19838:419;;;:::o;20263:224::-;20403:34;20399:1;20391:6;20387:14;20380:58;20472:7;20467:2;20459:6;20455:15;20448:32;20263:224;:::o;20493:366::-;20635:3;20656:67;20720:2;20715:3;20656:67;:::i;:::-;20649:74;;20732:93;20821:3;20732:93;:::i;:::-;20850:2;20845:3;20841:12;20834:19;;20493:366;;;:::o;20865:419::-;21031:4;21069:2;21058:9;21054:18;21046:26;;21118:9;21112:4;21108:20;21104:1;21093:9;21089:17;21082:47;21146:131;21272:4;21146:131;:::i;:::-;21138:139;;20865:419;;;:::o;21290:244::-;21430:34;21426:1;21418:6;21414:14;21407:58;21499:27;21494:2;21486:6;21482:15;21475:52;21290:244;:::o;21540:366::-;21682:3;21703:67;21767:2;21762:3;21703:67;:::i;:::-;21696:74;;21779:93;21868:3;21779:93;:::i;:::-;21897:2;21892:3;21888:12;21881:19;;21540:366;;;:::o;21912:419::-;22078:4;22116:2;22105:9;22101:18;22093:26;;22165:9;22159:4;22155:20;22151:1;22140:9;22136:17;22129:47;22193:131;22319:4;22193:131;:::i;:::-;22185:139;;21912:419;;;:::o;22337:241::-;22477:34;22473:1;22465:6;22461:14;22454:58;22546:24;22541:2;22533:6;22529:15;22522:49;22337:241;:::o;22584:366::-;22726:3;22747:67;22811:2;22806:3;22747:67;:::i;:::-;22740:74;;22823:93;22912:3;22823:93;:::i;:::-;22941:2;22936:3;22932:12;22925:19;;22584:366;;;:::o;22956:419::-;23122:4;23160:2;23149:9;23145:18;23137:26;;23209:9;23203:4;23199:20;23195:1;23184:9;23180:17;23173:47;23237:131;23363:4;23237:131;:::i;:::-;23229:139;;22956:419;;;:::o;23381:410::-;23421:7;23444:20;23462:1;23444:20;:::i;:::-;23439:25;;23478:20;23496:1;23478:20;:::i;:::-;23473:25;;23533:1;23530;23526:9;23555:30;23573:11;23555:30;:::i;:::-;23544:41;;23734:1;23725:7;23721:15;23718:1;23715:22;23695:1;23688:9;23668:83;23645:139;;23764:18;;:::i;:::-;23645:139;23429:362;23381:410;;;;:::o;23797:180::-;23845:77;23842:1;23835:88;23942:4;23939:1;23932:15;23966:4;23963:1;23956:15;23983:185;24023:1;24040:20;24058:1;24040:20;:::i;:::-;24035:25;;24074:20;24092:1;24074:20;:::i;:::-;24069:25;;24113:1;24103:35;;24118:18;;:::i;:::-;24103:35;24160:1;24157;24153:9;24148:14;;23983:185;;;;:::o;24174:442::-;24323:4;24361:2;24350:9;24346:18;24338:26;;24374:71;24442:1;24431:9;24427:17;24418:6;24374:71;:::i;:::-;24455:72;24523:2;24512:9;24508:18;24499:6;24455:72;:::i;:::-;24537;24605:2;24594:9;24590:18;24581:6;24537:72;:::i;:::-;24174:442;;;;;;:::o;24622:180::-;24670:77;24667:1;24660:88;24767:4;24764:1;24757:15;24791:4;24788:1;24781:15;24808:180;24856:77;24853:1;24846:88;24953:4;24950:1;24943:15;24977:4;24974:1;24967:15;24994:143;25051:5;25082:6;25076:13;25067:22;;25098:33;25125:5;25098:33;:::i;:::-;24994:143;;;;:::o;25143:351::-;25213:6;25262:2;25250:9;25241:7;25237:23;25233:32;25230:119;;;25268:79;;:::i;:::-;25230:119;25388:1;25413:64;25469:7;25460:6;25449:9;25445:22;25413:64;:::i;:::-;25403:74;;25359:128;25143:351;;;;:::o;25500:85::-;25545:7;25574:5;25563:16;;25500:85;;;:::o;25591:158::-;25649:9;25682:61;25700:42;25709:32;25735:5;25709:32;:::i;:::-;25700:42;:::i;:::-;25682:61;:::i;:::-;25669:74;;25591:158;;;:::o;25755:147::-;25850:45;25889:5;25850:45;:::i;:::-;25845:3;25838:58;25755:147;;:::o;25908:114::-;25975:6;26009:5;26003:12;25993:22;;25908:114;;;:::o;26028:184::-;26127:11;26161:6;26156:3;26149:19;26201:4;26196:3;26192:14;26177:29;;26028:184;;;;:::o;26218:132::-;26285:4;26308:3;26300:11;;26338:4;26333:3;26329:14;26321:22;;26218:132;;;:::o;26356:108::-;26433:24;26451:5;26433:24;:::i;:::-;26428:3;26421:37;26356:108;;:::o;26470:179::-;26539:10;26560:46;26602:3;26594:6;26560:46;:::i;:::-;26638:4;26633:3;26629:14;26615:28;;26470:179;;;;:::o;26655:113::-;26725:4;26757;26752:3;26748:14;26740:22;;26655:113;;;:::o;26804:732::-;26923:3;26952:54;27000:5;26952:54;:::i;:::-;27022:86;27101:6;27096:3;27022:86;:::i;:::-;27015:93;;27132:56;27182:5;27132:56;:::i;:::-;27211:7;27242:1;27227:284;27252:6;27249:1;27246:13;27227:284;;;27328:6;27322:13;27355:63;27414:3;27399:13;27355:63;:::i;:::-;27348:70;;27441:60;27494:6;27441:60;:::i;:::-;27431:70;;27287:224;27274:1;27271;27267:9;27262:14;;27227:284;;;27231:14;27527:3;27520:10;;26928:608;;;26804:732;;;;:::o;27542:831::-;27805:4;27843:3;27832:9;27828:19;27820:27;;27857:71;27925:1;27914:9;27910:17;27901:6;27857:71;:::i;:::-;27938:80;28014:2;28003:9;27999:18;27990:6;27938:80;:::i;:::-;28065:9;28059:4;28055:20;28050:2;28039:9;28035:18;28028:48;28093:108;28196:4;28187:6;28093:108;:::i;:::-;28085:116;;28211:72;28279:2;28268:9;28264:18;28255:6;28211:72;:::i;:::-;28293:73;28361:3;28350:9;28346:19;28337:6;28293:73;:::i;:::-;27542:831;;;;;;;;:::o;28379:807::-;28628:4;28666:3;28655:9;28651:19;28643:27;;28680:71;28748:1;28737:9;28733:17;28724:6;28680:71;:::i;:::-;28761:72;28829:2;28818:9;28814:18;28805:6;28761:72;:::i;:::-;28843:80;28919:2;28908:9;28904:18;28895:6;28843:80;:::i;:::-;28933;29009:2;28998:9;28994:18;28985:6;28933:80;:::i;:::-;29023:73;29091:3;29080:9;29076:19;29067:6;29023:73;:::i;:::-;29106;29174:3;29163:9;29159:19;29150:6;29106:73;:::i;:::-;28379:807;;;;;;;;;:::o;29192:143::-;29249:5;29280:6;29274:13;29265:22;;29296:33;29323:5;29296:33;:::i;:::-;29192:143;;;;:::o;29341:663::-;29429:6;29437;29445;29494:2;29482:9;29473:7;29469:23;29465:32;29462:119;;;29500:79;;:::i;:::-;29462:119;29620:1;29645:64;29701:7;29692:6;29681:9;29677:22;29645:64;:::i;:::-;29635:74;;29591:128;29758:2;29784:64;29840:7;29831:6;29820:9;29816:22;29784:64;:::i;:::-;29774:74;;29729:129;29897:2;29923:64;29979:7;29970:6;29959:9;29955:22;29923:64;:::i;:::-;29913:74;;29868:129;29341:663;;;;;:::o

Swarm Source

ipfs://2061b0679f90d35218c9f4a29773e3e89b06eabdaaa60c64e6d5f4bdadb3a768
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.