ETH Price: $3,931.56 (+1.12%)

Token

ERC-20: iF Protocol (iF)
 

Overview

Max Total Supply

935,314,837.876684090418614613 iF

Holders

180

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,246,351.524377549534328107 iF

Value
$0.00
0x34efd26bc24ab23b9a1c8c1326b95cefb328a243
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:
iF

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-10-18
*/

// 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 swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

    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 internal _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

    uint256 public buyTaxForLiquidity = 1;
    uint256 public buyTaxForMarketing = 3;
    uint256 public buyTaxForBurning = 1;
    uint256 public sellTaxForLiquidity = 1;
    uint256 public sellTaxForMarketing = 3;
    uint256 public sellTaxForBurning = 1;

    address public marketingWallet = 0xa593d811c49381b164f447ace27A5F17a77138F5;

    uint256 public maxTxAmount = 10000000 * 10**_decimals;
    uint256 public maxWalletAmount = 10000000 * 10**_decimals;
    uint256 private _numTokensSellToAddToLiquidity = 900000 * 10**_decimals;
    uint256 private _numTokensSellToAddToETH = 750000 * 10**_decimals;
    // TOKENOMICS END ============================================================>

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address _burnAddress = 0x000000000000000000000000000000000000dEaD;
    uint256 private _marketingReserves = 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;
    }

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

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

            uint256 transferAmount;
            if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) {
                transferAmount = amount;
            } else {
                require(
                    amount <= maxTxAmount,
                    "ERC20: transfer amount exceeds the max transaction amount"
                );

                uint256 marketingShare;
                uint256 liquidityShare;
                uint256 burningShare;

                if (from == uniswapV2Pair) {
                    require(
                        (amount + balanceOf(to)) <= maxWalletAmount,
                        "ERC20: balance amount exceeded max wallet amount limit"
                    );

                    marketingShare = ((amount * buyTaxForMarketing) / 100);
                    liquidityShare = ((amount * buyTaxForLiquidity) / 100);
                    burningShare = ((amount * buyTaxForBurning) / 100);
                } else {
                    marketingShare = ((amount * sellTaxForMarketing) / 100);
                    liquidityShare = ((amount * sellTaxForLiquidity) / 100);
                    burningShare = ((amount * sellTaxForBurning) / 100);
                }
                transferAmount =
                    amount -
                    (marketingShare + liquidityShare + burningShare);
                _marketingReserves += marketingShare;
                _totalSupply -= burningShare;

                if ((marketingShare + liquidityShare) > 0) {
                    super._transfer(
                        from,
                        address(this),
                        (marketingShare + liquidityShare)
                    );
                }
                if (burningShare > 0) {
                    super._transfer(from, _burnAddress, burningShare);
                }
            }
            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
        );
    }

    /**
     * @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 override returns (uint8) {
        return _decimals;
    }

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

    function changeBuyTaxForLiquidityMarketingBurning(
        uint256 _buyTaxForLiquidity,
        uint256 _buyTaxForMarketing,
        uint256 _buyTaxForBurning
    ) public onlyOwner returns (bool) {
        require(
            (_buyTaxForLiquidity + _buyTaxForMarketing + _buyTaxForBurning) <=
                100,
            "ERC20: total tax must not be greater than 100"
        );
        buyTaxForLiquidity = _buyTaxForLiquidity;
        buyTaxForMarketing = _buyTaxForMarketing;
        buyTaxForBurning = _buyTaxForBurning;

        return true;
    }

    function changeSellTaxForLiquidityMarketingBurning(
        uint256 _sellTaxForLiquidity,
        uint256 _sellTaxForMarketing,
        uint256 _sellTaxForBurning
    ) public onlyOwner returns (bool) {
        require(
            (_sellTaxForLiquidity +
                _sellTaxForMarketing +
                _sellTaxForBurning) <= 100,
            "ERC20: total tax must not be greater than 100"
        );
        sellTaxForLiquidity = _sellTaxForLiquidity;
        sellTaxForMarketing = _sellTaxForMarketing;
        sellTaxForBurning = _sellTaxForBurning;

        return true;
    }

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

        return true;
    }

    function changeMaxWalletAmount(uint256 _maxWalletAmount)
        public
        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":"buyTaxForBurning","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":"_buyTaxForBurning","type":"uint256"}],"name":"changeBuyTaxForLiquidityMarketingBurning","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":"_sellTaxForBurning","type":"uint256"}],"name":"changeSellTaxForLiquidityMarketingBurning","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":[{"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":"sellTaxForBurning","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"}]

60c06040526040518060400160405280600b81526020017f69462050726f746f636f6c000000000000000000000000000000000000000000815250600690816200004a919062000b92565b506040518060400160405280600281526020017f69460000000000000000000000000000000000000000000000000000000000008152506007908162000091919062000b92565b506012600860006101000a81548160ff021916908360ff160217905550633b9aca006009556001600a556003600b556001600c556001600d556003600e556001600f5573a593d811c49381b164f447ace27a5f17a77138f5601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860009054906101000a900460ff16600a62000147919062000e09565b6298968062000157919062000e5a565b601155600860009054906101000a900460ff16600a62000178919062000e09565b6298968062000188919062000e5a565b601255600860009054906101000a900460ff16600a620001a9919062000e09565b620dbba0620001b9919062000e5a565b601355600860009054906101000a900460ff16600a620001da919062000e09565b620b71b0620001ea919062000e5a565b60145561dead601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060006016553480156200024257600080fd5b5060068054620002529062000981565b80601f0160208091040260200160405190810160405280929190818152602001828054620002809062000981565b8015620002d15780601f10620002a557610100808354040283529160200191620002d1565b820191906000526020600020905b815481529060010190602001808311620002b357829003601f168201915b505050505060078054620002e59062000981565b80601f0160208091040260200160405190810160405280929190818152602001828054620003139062000981565b8015620003645780601f10620003385761010080835404028352916020019162000364565b820191906000526020600020905b8154815290600101906020018083116200034657829003601f168201915b505050505081600390816200037a919062000b92565b5080600490816200038c919062000b92565b505050620003af620003a36200070560201b60201c565b6200070d60201b60201c565b620003ed33600860009054906101000a900460ff16600a620003d2919062000e09565b600954620003e1919062000e5a565b620007d360201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000452573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000478919062000f0f565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000506919062000f0f565b6040518363ffffffff1660e01b81526004016200052592919062000f52565b6020604051808303816000875af115801562000545573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200056b919062000f0f565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060016017600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160176000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506200106b565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000845576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200083c9062000fe0565b60405180910390fd5b806002600082825462000859919062001002565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200090c91906200104e565b60405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200099a57607f821691505b602082108103620009b057620009af62000952565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a1a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009db565b62000a268683620009db565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a7362000a6d62000a678462000a3e565b62000a48565b62000a3e565b9050919050565b6000819050919050565b62000a8f8362000a52565b62000aa762000a9e8262000a7a565b848454620009e8565b825550505050565b600090565b62000abe62000aaf565b62000acb81848462000a84565b505050565b5b8181101562000af35762000ae760008262000ab4565b60018101905062000ad1565b5050565b601f82111562000b425762000b0c81620009b6565b62000b1784620009cb565b8101602085101562000b27578190505b62000b3f62000b3685620009cb565b83018262000ad0565b50505b505050565b600082821c905092915050565b600062000b676000198460080262000b47565b1980831691505092915050565b600062000b82838362000b54565b9150826002028217905092915050565b62000b9d8262000918565b67ffffffffffffffff81111562000bb95762000bb862000923565b5b62000bc5825462000981565b62000bd282828562000af7565b600060209050601f83116001811462000c0a576000841562000bf5578287015190505b62000c01858262000b74565b86555062000c71565b601f19841662000c1a86620009b6565b60005b8281101562000c445784890151825560018201915060208501945060208101905062000c1d565b8683101562000c64578489015162000c60601f89168262000b54565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000d075780860481111562000cdf5762000cde62000c79565b5b600185161562000cef5780820291505b808102905062000cff8562000ca8565b945062000cbf565b94509492505050565b60008262000d22576001905062000df5565b8162000d32576000905062000df5565b816001811462000d4b576002811462000d565762000d8c565b600191505062000df5565b60ff84111562000d6b5762000d6a62000c79565b5b8360020a91508482111562000d855762000d8462000c79565b5b5062000df5565b5060208310610133831016604e8410600b841016171562000dc65782820a90508381111562000dc05762000dbf62000c79565b5b62000df5565b62000dd5848484600162000cb5565b9250905081840481111562000def5762000dee62000c79565b5b81810290505b9392505050565b600060ff82169050919050565b600062000e168262000a3e565b915062000e238362000dfc565b925062000e527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d10565b905092915050565b600062000e678262000a3e565b915062000e748362000a3e565b925082820262000e848162000a3e565b9150828204841483151762000e9e5762000e9d62000c79565b5b5092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ed78262000eaa565b9050919050565b62000ee98162000eca565b811462000ef557600080fd5b50565b60008151905062000f098162000ede565b92915050565b60006020828403121562000f285762000f2762000ea5565b5b600062000f388482850162000ef8565b91505092915050565b62000f4c8162000eca565b82525050565b600060408201905062000f69600083018562000f41565b62000f78602083018462000f41565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fc8601f8362000f7f565b915062000fd58262000f90565b602082019050919050565b6000602082019050818103600083015262000ffb8162000fb9565b9050919050565b60006200100f8262000a3e565b91506200101c8362000a3e565b925082820190508082111562001037576200103662000c79565b5b92915050565b620010488162000a3e565b82525050565b60006020820190506200106560008301846200103d565b92915050565b60805160a051612e57620010d06000396000818161091701528181611157015281816111ac0152818161121a01526114660152600081816108660152818161195a01528181611a3b01528181611a6201528181611da10152611dc80152612e576000f3fe6080604052600436106101d15760003560e01c80637f9fda84116100f7578063a9059cbb11610095578063dd62ed3e11610064578063dd62ed3e146106db578063ed4b8dae14610718578063ee340f5014610755578063f2fde38b14610780576101d8565b8063a9059cbb1461060b578063aa4bde2814610648578063aac539ad14610673578063bb85c6d11461069e576101d8565b80638c0b5e22116100d15780638c0b5e221461054d5780638da5cb5b1461057857806395d89b41146105a3578063a457c2d7146105ce576101d8565b80637f9fda84146104a8578063814e8e16146104d357806381bfdcca14610510576101d8565b8063313ce5671161016f57806370a082311161013e57806370a08231146103fe578063715018a61461043b57806375f0a874146104525780637df573101461047d576101d8565b8063313ce5671461032e578063395093511461035957806349bd5a5e14610396578063677daa57146103c1576101d8565b80631694505e116101ab5780631694505e1461027057806318160ddd1461029b5780631e0b376e146102c657806323b872dd146102f1576101d8565b8063029e8399146101dd57806306fdde0314610208578063095ea7b314610233576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f26107a9565b6040516101ff9190611eb0565b60405180910390f35b34801561021457600080fd5b5061021d6107af565b60405161022a9190611f5b565b60405180910390f35b34801561023f57600080fd5b5061025a6004803603810190610255919061200c565b610841565b6040516102679190612067565b60405180910390f35b34801561027c57600080fd5b50610285610864565b60405161029291906120e1565b60405180910390f35b3480156102a757600080fd5b506102b0610888565b6040516102bd9190611eb0565b60405180910390f35b3480156102d257600080fd5b506102db610892565b6040516102e89190611eb0565b60405180910390f35b3480156102fd57600080fd5b50610318600480360381019061031391906120fc565b610898565b6040516103259190612067565b60405180910390f35b34801561033a57600080fd5b506103436108c7565b604051610350919061216b565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b919061200c565b6108de565b60405161038d9190612067565b60405180910390f35b3480156103a257600080fd5b506103ab610915565b6040516103b89190612195565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e391906121b0565b610939565b6040516103f59190612067565b60405180910390f35b34801561040a57600080fd5b50610425600480360381019061042091906121dd565b610953565b6040516104329190611eb0565b60405180910390f35b34801561044757600080fd5b5061045061099b565b005b34801561045e57600080fd5b506104676109af565b6040516104749190612195565b60405180910390f35b34801561048957600080fd5b506104926109d5565b60405161049f9190611eb0565b60405180910390f35b3480156104b457600080fd5b506104bd6109db565b6040516104ca9190611eb0565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f5919061220a565b6109e1565b6040516105079190612067565b60405180910390f35b34801561051c57600080fd5b50610537600480360381019061053291906121b0565b610a65565b6040516105449190612067565b60405180910390f35b34801561055957600080fd5b50610562610a7f565b60405161056f9190611eb0565b60405180910390f35b34801561058457600080fd5b5061058d610a85565b60405161059a9190612195565b60405180910390f35b3480156105af57600080fd5b506105b8610aaf565b6040516105c59190611f5b565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f0919061200c565b610b41565b6040516106029190612067565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d919061200c565b610bb8565b60405161063f9190612067565b60405180910390f35b34801561065457600080fd5b5061065d610bdb565b60405161066a9190611eb0565b60405180910390f35b34801561067f57600080fd5b50610688610be1565b6040516106959190611eb0565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c091906121dd565b610be7565b6040516106d29190612067565b60405180910390f35b3480156106e757600080fd5b5061070260048036038101906106fd919061225d565b610c3b565b60405161070f9190611eb0565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a919061220a565b610cc2565b60405161074c9190612067565b60405180910390f35b34801561076157600080fd5b5061076a610d46565b6040516107779190611eb0565b60405180910390f35b34801561078c57600080fd5b506107a760048036038101906107a291906121dd565b610d4c565b005b600e5481565b6060600380546107be906122cc565b80601f01602080910402602001604051908101604052809291908181526020018280546107ea906122cc565b80156108375780601f1061080c57610100808354040283529160200191610837565b820191906000526020600020905b81548152906001019060200180831161081a57829003601f168201915b5050505050905090565b60008061084c610dcf565b9050610859818585610dd7565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b600b5481565b6000806108a3610dcf565b90506108b0858285610fa0565b6108bb85858561102c565b60019150509392505050565b6000600860009054906101000a900460ff16905090565b6000806108e9610dcf565b905061090a8185856108fb8589610c3b565b610905919061232c565b610dd7565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061094361169b565b8160118190555060019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109a361169b565b6109ad6000611719565b565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b600f5481565b60006109eb61169b565b60648284866109fa919061232c565b610a04919061232c565b1115610a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3c906123d2565b60405180910390fd5b83600a8190555082600b8190555081600c81905550600190509392505050565b6000610a6f61169b565b8160128190555060019050919050565b60115481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610abe906122cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610aea906122cc565b8015610b375780601f10610b0c57610100808354040283529160200191610b37565b820191906000526020600020905b815481529060010190602001808311610b1a57829003601f168201915b5050505050905090565b600080610b4c610dcf565b90506000610b5a8286610c3b565b905083811015610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690612464565b60405180910390fd5b610bac8286868403610dd7565b60019250505092915050565b600080610bc3610dcf565b9050610bd081858561102c565b600191505092915050565b60125481565b600c5481565b6000610bf161169b565b81601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000610ccc61169b565b6064828486610cdb919061232c565b610ce5919061232c565b1115610d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1d906123d2565b60405180910390fd5b83600d8190555082600e8190555081600f81905550600190509392505050565b600a5481565b610d5461169b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba906124f6565b60405180910390fd5b610dcc81611719565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3d90612588565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eac9061261a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f939190611eb0565b60405180910390a3505050565b6000610fac8484610c3b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110265781811015611018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100f90612686565b60405180910390fd5b6110258484848403610dd7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290612718565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361110a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611101906127aa565b60405180910390fd5b8061111484610953565b1015611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c9061283c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806111fa57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156112135750601860009054906101000a900460ff16155b1561168a577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461136a57600060165461127930610953565b611283919061285c565b9050601354811061129a576112996013546117df565b5b60145460165410611368576112b06014546118a0565b601454601660008282546112c4919061285c565b925050819055506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050905080611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d906128dc565b60405180910390fd5b505b505b6000601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061140d5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561141a57819050611679565b60115482111561145f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114569061296e565b60405180910390fd5b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603611568576012546114c387610953565b866114ce919061232c565b111561150f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150690612a00565b60405180910390fd5b6064600b548661151f9190612a20565b6115299190612a91565b92506064600a548661153b9190612a20565b6115459190612a91565b91506064600c54866115579190612a20565b6115619190612a91565b90506115bd565b6064600e54866115789190612a20565b6115829190612a91565b92506064600d54866115949190612a20565b61159e9190612a91565b91506064600f54866115b09190612a20565b6115ba9190612a91565b90505b8082846115ca919061232c565b6115d4919061232c565b856115df919061285c565b935082601660008282546115f3919061232c565b92505081905550806002600082825461160c919061285c565b9250508190555060008284611621919061232c565b111561163e5761163d87308486611638919061232c565b611b20565b5b60008111156116755761167487601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611b20565b5b5050505b611684848483611b20565b50611696565b611695838383611b20565b5b505050565b6116a3610dcf565b73ffffffffffffffffffffffffffffffffffffffff166116c1610a85565b73ffffffffffffffffffffffffffffffffffffffff1614611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e90612b0e565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601860006101000a81548160ff02191690831515021790555060006002826118099190612a91565b905060008183611819919061285c565b90506000479050611829836118a0565b60008147611837919061285c565b90506118438382611d80565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161187693929190612b2e565b60405180910390a1505050506000601860006101000a81548160ff02191690831515021790555050565b6001601860006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156118d8576118d7612b65565b5b6040519080825280602002602001820160405280156119065781602001602082028036833780820191505090505b509050308160008151811061191e5761191d612b94565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e79190612bd8565b816001815181106119fb576119fa612b94565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611a60307f000000000000000000000000000000000000000000000000000000000000000084610dd7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947836000843061012c42611aaf919061232c565b6040518663ffffffff1660e01b8152600401611acf959493929190612cfe565b600060405180830381600087803b158015611ae957600080fd5b505af1158015611afd573d6000803e3d6000fd5b50505050506000601860006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690612718565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf5906127aa565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b9061283c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d729190611eb0565b60405180910390a350505050565b6001601860006101000a81548160ff021916908315150217905550611dc6307f000000000000000000000000000000000000000000000000000000000000000084610dd7565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611e10610a85565b426040518863ffffffff1660e01b8152600401611e3296959493929190612d58565b60606040518083038185885af1158015611e50573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e759190612dce565b5050506000601860006101000a81548160ff0219169083151502179055505050565b6000819050919050565b611eaa81611e97565b82525050565b6000602082019050611ec56000830184611ea1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f05578082015181840152602081019050611eea565b60008484015250505050565b6000601f19601f8301169050919050565b6000611f2d82611ecb565b611f378185611ed6565b9350611f47818560208601611ee7565b611f5081611f11565b840191505092915050565b60006020820190508181036000830152611f758184611f22565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611fad82611f82565b9050919050565b611fbd81611fa2565b8114611fc857600080fd5b50565b600081359050611fda81611fb4565b92915050565b611fe981611e97565b8114611ff457600080fd5b50565b60008135905061200681611fe0565b92915050565b6000806040838503121561202357612022611f7d565b5b600061203185828601611fcb565b925050602061204285828601611ff7565b9150509250929050565b60008115159050919050565b6120618161204c565b82525050565b600060208201905061207c6000830184612058565b92915050565b6000819050919050565b60006120a76120a261209d84611f82565b612082565b611f82565b9050919050565b60006120b98261208c565b9050919050565b60006120cb826120ae565b9050919050565b6120db816120c0565b82525050565b60006020820190506120f660008301846120d2565b92915050565b60008060006060848603121561211557612114611f7d565b5b600061212386828701611fcb565b935050602061213486828701611fcb565b925050604061214586828701611ff7565b9150509250925092565b600060ff82169050919050565b6121658161214f565b82525050565b6000602082019050612180600083018461215c565b92915050565b61218f81611fa2565b82525050565b60006020820190506121aa6000830184612186565b92915050565b6000602082840312156121c6576121c5611f7d565b5b60006121d484828501611ff7565b91505092915050565b6000602082840312156121f3576121f2611f7d565b5b600061220184828501611fcb565b91505092915050565b60008060006060848603121561222357612222611f7d565b5b600061223186828701611ff7565b935050602061224286828701611ff7565b925050604061225386828701611ff7565b9150509250925092565b6000806040838503121561227457612273611f7d565b5b600061228285828601611fcb565b925050602061229385828601611fcb565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806122e457607f821691505b6020821081036122f7576122f661229d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061233782611e97565b915061234283611e97565b925082820190508082111561235a576123596122fd565b5b92915050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031303000000000000000000000000000000000000000602082015250565b60006123bc602d83611ed6565b91506123c782612360565b604082019050919050565b600060208201905081810360008301526123eb816123af565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061244e602583611ed6565b9150612459826123f2565b604082019050919050565b6000602082019050818103600083015261247d81612441565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006124e0602683611ed6565b91506124eb82612484565b604082019050919050565b6000602082019050818103600083015261250f816124d3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612572602483611ed6565b915061257d82612516565b604082019050919050565b600060208201905081810360008301526125a181612565565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612604602283611ed6565b915061260f826125a8565b604082019050919050565b60006020820190508181036000830152612633816125f7565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612670601d83611ed6565b915061267b8261263a565b602082019050919050565b6000602082019050818103600083015261269f81612663565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612702602583611ed6565b915061270d826126a6565b604082019050919050565b60006020820190508181036000830152612731816126f5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612794602383611ed6565b915061279f82612738565b604082019050919050565b600060208201905081810360008301526127c381612787565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612826602683611ed6565b9150612831826127ca565b604082019050919050565b6000602082019050818103600083015261285581612819565b9050919050565b600061286782611e97565b915061287283611e97565b925082820390508181111561288a576128896122fd565b5b92915050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b60006128c6601283611ed6565b91506128d182612890565b602082019050919050565b600060208201905081810360008301526128f5816128b9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b6000612958603983611ed6565b9150612963826128fc565b604082019050919050565b600060208201905081810360008301526129878161294b565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b60006129ea603683611ed6565b91506129f58261298e565b604082019050919050565b60006020820190508181036000830152612a19816129dd565b9050919050565b6000612a2b82611e97565b9150612a3683611e97565b9250828202612a4481611e97565b91508282048414831517612a5b57612a5a6122fd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612a9c82611e97565b9150612aa783611e97565b925082612ab757612ab6612a62565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612af8602083611ed6565b9150612b0382612ac2565b602082019050919050565b60006020820190508181036000830152612b2781612aeb565b9050919050565b6000606082019050612b436000830186611ea1565b612b506020830185611ea1565b612b5d6040830184611ea1565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612bd281611fb4565b92915050565b600060208284031215612bee57612bed611f7d565b5b6000612bfc84828501612bc3565b91505092915050565b6000819050919050565b6000612c2a612c25612c2084612c05565b612082565b611e97565b9050919050565b612c3a81612c0f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612c7581611fa2565b82525050565b6000612c878383612c6c565b60208301905092915050565b6000602082019050919050565b6000612cab82612c40565b612cb58185612c4b565b9350612cc083612c5c565b8060005b83811015612cf1578151612cd88882612c7b565b9750612ce383612c93565b925050600181019050612cc4565b5085935050505092915050565b600060a082019050612d136000830188611ea1565b612d206020830187612c31565b8181036040830152612d328186612ca0565b9050612d416060830185612186565b612d4e6080830184611ea1565b9695505050505050565b600060c082019050612d6d6000830189612186565b612d7a6020830188611ea1565b612d876040830187612c31565b612d946060830186612c31565b612da16080830185612186565b612dae60a0830184611ea1565b979650505050505050565b600081519050612dc881611fe0565b92915050565b600080600060608486031215612de757612de6611f7d565b5b6000612df586828701612db9565b9350506020612e0686828701612db9565b9250506040612e1786828701612db9565b915050925092509256fea26469706673582212200c6639eeb671e67682e050f33df972872a4d957a0ad3778900d9f1e9f82b6e1464736f6c63430008110033

Deployed Bytecode

0x6080604052600436106101d15760003560e01c80637f9fda84116100f7578063a9059cbb11610095578063dd62ed3e11610064578063dd62ed3e146106db578063ed4b8dae14610718578063ee340f5014610755578063f2fde38b14610780576101d8565b8063a9059cbb1461060b578063aa4bde2814610648578063aac539ad14610673578063bb85c6d11461069e576101d8565b80638c0b5e22116100d15780638c0b5e221461054d5780638da5cb5b1461057857806395d89b41146105a3578063a457c2d7146105ce576101d8565b80637f9fda84146104a8578063814e8e16146104d357806381bfdcca14610510576101d8565b8063313ce5671161016f57806370a082311161013e57806370a08231146103fe578063715018a61461043b57806375f0a874146104525780637df573101461047d576101d8565b8063313ce5671461032e578063395093511461035957806349bd5a5e14610396578063677daa57146103c1576101d8565b80631694505e116101ab5780631694505e1461027057806318160ddd1461029b5780631e0b376e146102c657806323b872dd146102f1576101d8565b8063029e8399146101dd57806306fdde0314610208578063095ea7b314610233576101d8565b366101d857005b600080fd5b3480156101e957600080fd5b506101f26107a9565b6040516101ff9190611eb0565b60405180910390f35b34801561021457600080fd5b5061021d6107af565b60405161022a9190611f5b565b60405180910390f35b34801561023f57600080fd5b5061025a6004803603810190610255919061200c565b610841565b6040516102679190612067565b60405180910390f35b34801561027c57600080fd5b50610285610864565b60405161029291906120e1565b60405180910390f35b3480156102a757600080fd5b506102b0610888565b6040516102bd9190611eb0565b60405180910390f35b3480156102d257600080fd5b506102db610892565b6040516102e89190611eb0565b60405180910390f35b3480156102fd57600080fd5b50610318600480360381019061031391906120fc565b610898565b6040516103259190612067565b60405180910390f35b34801561033a57600080fd5b506103436108c7565b604051610350919061216b565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b919061200c565b6108de565b60405161038d9190612067565b60405180910390f35b3480156103a257600080fd5b506103ab610915565b6040516103b89190612195565b60405180910390f35b3480156103cd57600080fd5b506103e860048036038101906103e391906121b0565b610939565b6040516103f59190612067565b60405180910390f35b34801561040a57600080fd5b50610425600480360381019061042091906121dd565b610953565b6040516104329190611eb0565b60405180910390f35b34801561044757600080fd5b5061045061099b565b005b34801561045e57600080fd5b506104676109af565b6040516104749190612195565b60405180910390f35b34801561048957600080fd5b506104926109d5565b60405161049f9190611eb0565b60405180910390f35b3480156104b457600080fd5b506104bd6109db565b6040516104ca9190611eb0565b60405180910390f35b3480156104df57600080fd5b506104fa60048036038101906104f5919061220a565b6109e1565b6040516105079190612067565b60405180910390f35b34801561051c57600080fd5b50610537600480360381019061053291906121b0565b610a65565b6040516105449190612067565b60405180910390f35b34801561055957600080fd5b50610562610a7f565b60405161056f9190611eb0565b60405180910390f35b34801561058457600080fd5b5061058d610a85565b60405161059a9190612195565b60405180910390f35b3480156105af57600080fd5b506105b8610aaf565b6040516105c59190611f5b565b60405180910390f35b3480156105da57600080fd5b506105f560048036038101906105f0919061200c565b610b41565b6040516106029190612067565b60405180910390f35b34801561061757600080fd5b50610632600480360381019061062d919061200c565b610bb8565b60405161063f9190612067565b60405180910390f35b34801561065457600080fd5b5061065d610bdb565b60405161066a9190611eb0565b60405180910390f35b34801561067f57600080fd5b50610688610be1565b6040516106959190611eb0565b60405180910390f35b3480156106aa57600080fd5b506106c560048036038101906106c091906121dd565b610be7565b6040516106d29190612067565b60405180910390f35b3480156106e757600080fd5b5061070260048036038101906106fd919061225d565b610c3b565b60405161070f9190611eb0565b60405180910390f35b34801561072457600080fd5b5061073f600480360381019061073a919061220a565b610cc2565b60405161074c9190612067565b60405180910390f35b34801561076157600080fd5b5061076a610d46565b6040516107779190611eb0565b60405180910390f35b34801561078c57600080fd5b506107a760048036038101906107a291906121dd565b610d4c565b005b600e5481565b6060600380546107be906122cc565b80601f01602080910402602001604051908101604052809291908181526020018280546107ea906122cc565b80156108375780601f1061080c57610100808354040283529160200191610837565b820191906000526020600020905b81548152906001019060200180831161081a57829003601f168201915b5050505050905090565b60008061084c610dcf565b9050610859818585610dd7565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b600b5481565b6000806108a3610dcf565b90506108b0858285610fa0565b6108bb85858561102c565b60019150509392505050565b6000600860009054906101000a900460ff16905090565b6000806108e9610dcf565b905061090a8185856108fb8589610c3b565b610905919061232c565b610dd7565b600191505092915050565b7f0000000000000000000000007e46e31cf3f7a9b9f484865b00e7cd798748d21b81565b600061094361169b565b8160118190555060019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6109a361169b565b6109ad6000611719565b565b601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b600f5481565b60006109eb61169b565b60648284866109fa919061232c565b610a04919061232c565b1115610a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3c906123d2565b60405180910390fd5b83600a8190555082600b8190555081600c81905550600190509392505050565b6000610a6f61169b565b8160128190555060019050919050565b60115481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610abe906122cc565b80601f0160208091040260200160405190810160405280929190818152602001828054610aea906122cc565b8015610b375780601f10610b0c57610100808354040283529160200191610b37565b820191906000526020600020905b815481529060010190602001808311610b1a57829003601f168201915b5050505050905090565b600080610b4c610dcf565b90506000610b5a8286610c3b565b905083811015610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690612464565b60405180910390fd5b610bac8286868403610dd7565b60019250505092915050565b600080610bc3610dcf565b9050610bd081858561102c565b600191505092915050565b60125481565b600c5481565b6000610bf161169b565b81601060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000610ccc61169b565b6064828486610cdb919061232c565b610ce5919061232c565b1115610d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1d906123d2565b60405180910390fd5b83600d8190555082600e8190555081600f81905550600190509392505050565b600a5481565b610d5461169b565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dba906124f6565b60405180910390fd5b610dcc81611719565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610e46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3d90612588565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eac9061261a565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051610f939190611eb0565b60405180910390a3505050565b6000610fac8484610c3b565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146110265781811015611018576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100f90612686565b60405180910390fd5b6110258484848403610dd7565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361109b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109290612718565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361110a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611101906127aa565b60405180910390fd5b8061111484610953565b1015611155576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114c9061283c565b60405180910390fd5b7f0000000000000000000000007e46e31cf3f7a9b9f484865b00e7cd798748d21b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806111fa57507f0000000000000000000000007e46e31cf3f7a9b9f484865b00e7cd798748d21b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b80156112135750601860009054906101000a900460ff16155b1561168a577f0000000000000000000000007e46e31cf3f7a9b9f484865b00e7cd798748d21b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461136a57600060165461127930610953565b611283919061285c565b9050601354811061129a576112996013546117df565b5b60145460165410611368576112b06014546118a0565b601454601660008282546112c4919061285c565b925050819055506000601060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050905080611366576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135d906128dc565b60405180910390fd5b505b505b6000601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061140d5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561141a57819050611679565b60115482111561145f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114569061296e565b60405180910390fd5b60008060007f0000000000000000000000007e46e31cf3f7a9b9f484865b00e7cd798748d21b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603611568576012546114c387610953565b866114ce919061232c565b111561150f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150690612a00565b60405180910390fd5b6064600b548661151f9190612a20565b6115299190612a91565b92506064600a548661153b9190612a20565b6115459190612a91565b91506064600c54866115579190612a20565b6115619190612a91565b90506115bd565b6064600e54866115789190612a20565b6115829190612a91565b92506064600d54866115949190612a20565b61159e9190612a91565b91506064600f54866115b09190612a20565b6115ba9190612a91565b90505b8082846115ca919061232c565b6115d4919061232c565b856115df919061285c565b935082601660008282546115f3919061232c565b92505081905550806002600082825461160c919061285c565b9250508190555060008284611621919061232c565b111561163e5761163d87308486611638919061232c565b611b20565b5b60008111156116755761167487601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611b20565b5b5050505b611684848483611b20565b50611696565b611695838383611b20565b5b505050565b6116a3610dcf565b73ffffffffffffffffffffffffffffffffffffffff166116c1610a85565b73ffffffffffffffffffffffffffffffffffffffff1614611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e90612b0e565b60405180910390fd5b565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6001601860006101000a81548160ff02191690831515021790555060006002826118099190612a91565b905060008183611819919061285c565b90506000479050611829836118a0565b60008147611837919061285c565b90506118438382611d80565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405161187693929190612b2e565b60405180910390a1505050506000601860006101000a81548160ff02191690831515021790555050565b6001601860006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff8111156118d8576118d7612b65565b5b6040519080825280602002602001820160405280156119065781602001602082028036833780820191505090505b509050308160008151811061191e5761191d612b94565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e79190612bd8565b816001815181106119fb576119fa612b94565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611a60307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610dd7565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947836000843061012c42611aaf919061232c565b6040518663ffffffff1660e01b8152600401611acf959493929190612cfe565b600060405180830381600087803b158015611ae957600080fd5b505af1158015611afd573d6000803e3d6000fd5b50505050506000601860006101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690612718565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf5906127aa565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b9061283c565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611d729190611eb0565b60405180910390a350505050565b6001601860006101000a81548160ff021916908315150217905550611dc6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84610dd7565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080611e10610a85565b426040518863ffffffff1660e01b8152600401611e3296959493929190612d58565b60606040518083038185885af1158015611e50573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611e759190612dce565b5050506000601860006101000a81548160ff0219169083151502179055505050565b6000819050919050565b611eaa81611e97565b82525050565b6000602082019050611ec56000830184611ea1565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611f05578082015181840152602081019050611eea565b60008484015250505050565b6000601f19601f8301169050919050565b6000611f2d82611ecb565b611f378185611ed6565b9350611f47818560208601611ee7565b611f5081611f11565b840191505092915050565b60006020820190508181036000830152611f758184611f22565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611fad82611f82565b9050919050565b611fbd81611fa2565b8114611fc857600080fd5b50565b600081359050611fda81611fb4565b92915050565b611fe981611e97565b8114611ff457600080fd5b50565b60008135905061200681611fe0565b92915050565b6000806040838503121561202357612022611f7d565b5b600061203185828601611fcb565b925050602061204285828601611ff7565b9150509250929050565b60008115159050919050565b6120618161204c565b82525050565b600060208201905061207c6000830184612058565b92915050565b6000819050919050565b60006120a76120a261209d84611f82565b612082565b611f82565b9050919050565b60006120b98261208c565b9050919050565b60006120cb826120ae565b9050919050565b6120db816120c0565b82525050565b60006020820190506120f660008301846120d2565b92915050565b60008060006060848603121561211557612114611f7d565b5b600061212386828701611fcb565b935050602061213486828701611fcb565b925050604061214586828701611ff7565b9150509250925092565b600060ff82169050919050565b6121658161214f565b82525050565b6000602082019050612180600083018461215c565b92915050565b61218f81611fa2565b82525050565b60006020820190506121aa6000830184612186565b92915050565b6000602082840312156121c6576121c5611f7d565b5b60006121d484828501611ff7565b91505092915050565b6000602082840312156121f3576121f2611f7d565b5b600061220184828501611fcb565b91505092915050565b60008060006060848603121561222357612222611f7d565b5b600061223186828701611ff7565b935050602061224286828701611ff7565b925050604061225386828701611ff7565b9150509250925092565b6000806040838503121561227457612273611f7d565b5b600061228285828601611fcb565b925050602061229385828601611fcb565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806122e457607f821691505b6020821081036122f7576122f661229d565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061233782611e97565b915061234283611e97565b925082820190508082111561235a576123596122fd565b5b92915050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031303000000000000000000000000000000000000000602082015250565b60006123bc602d83611ed6565b91506123c782612360565b604082019050919050565b600060208201905081810360008301526123eb816123af565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061244e602583611ed6565b9150612459826123f2565b604082019050919050565b6000602082019050818103600083015261247d81612441565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006124e0602683611ed6565b91506124eb82612484565b604082019050919050565b6000602082019050818103600083015261250f816124d3565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612572602483611ed6565b915061257d82612516565b604082019050919050565b600060208201905081810360008301526125a181612565565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612604602283611ed6565b915061260f826125a8565b604082019050919050565b60006020820190508181036000830152612633816125f7565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000612670601d83611ed6565b915061267b8261263a565b602082019050919050565b6000602082019050818103600083015261269f81612663565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000612702602583611ed6565b915061270d826126a6565b604082019050919050565b60006020820190508181036000830152612731816126f5565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612794602383611ed6565b915061279f82612738565b604082019050919050565b600060208201905081810360008301526127c381612787565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000612826602683611ed6565b9150612831826127ca565b604082019050919050565b6000602082019050818103600083015261285581612819565b9050919050565b600061286782611e97565b915061287283611e97565b925082820390508181111561288a576128896122fd565b5b92915050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b60006128c6601283611ed6565b91506128d182612890565b602082019050919050565b600060208201905081810360008301526128f5816128b9565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b6000612958603983611ed6565b9150612963826128fc565b604082019050919050565b600060208201905081810360008301526129878161294b565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b60006129ea603683611ed6565b91506129f58261298e565b604082019050919050565b60006020820190508181036000830152612a19816129dd565b9050919050565b6000612a2b82611e97565b9150612a3683611e97565b9250828202612a4481611e97565b91508282048414831517612a5b57612a5a6122fd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000612a9c82611e97565b9150612aa783611e97565b925082612ab757612ab6612a62565b5b828204905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612af8602083611ed6565b9150612b0382612ac2565b602082019050919050565b60006020820190508181036000830152612b2781612aeb565b9050919050565b6000606082019050612b436000830186611ea1565b612b506020830185611ea1565b612b5d6040830184611ea1565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050612bd281611fb4565b92915050565b600060208284031215612bee57612bed611f7d565b5b6000612bfc84828501612bc3565b91505092915050565b6000819050919050565b6000612c2a612c25612c2084612c05565b612082565b611e97565b9050919050565b612c3a81612c0f565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b612c7581611fa2565b82525050565b6000612c878383612c6c565b60208301905092915050565b6000602082019050919050565b6000612cab82612c40565b612cb58185612c4b565b9350612cc083612c5c565b8060005b83811015612cf1578151612cd88882612c7b565b9750612ce383612c93565b925050600181019050612cc4565b5085935050505092915050565b600060a082019050612d136000830188611ea1565b612d206020830187612c31565b8181036040830152612d328186612ca0565b9050612d416060830185612186565b612d4e6080830184611ea1565b9695505050505050565b600060c082019050612d6d6000830189612186565b612d7a6020830188611ea1565b612d876040830187612c31565b612d946060830186612c31565b612da16080830185612186565b612dae60a0830184611ea1565b979650505050505050565b600081519050612dc881611fe0565b92915050565b600080600060608486031215612de757612de6611f7d565b5b6000612df586828701612db9565b9350506020612e0686828701612db9565b9250506040612e1786828701612db9565b915050925092509256fea26469706673582212200c6639eeb671e67682e050f33df972872a4d957a0ad3778900d9f1e9f82b6e1464736f6c63430008110033

Deployed Bytecode Sourcemap

28144:10210:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28600:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17637:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20137:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29135:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19001:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28469:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20961:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36440:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22677:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29193:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37926:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18027:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15120:103;;;;;;;;;;;;;:::i;:::-;;28690:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28555:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28645:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36730:575;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38116:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28774:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14472:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17858:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21761:507;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19581:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28834:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28513:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36540:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19174:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37313:605;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28425:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15378:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28600:38;;;;:::o;17637:102::-;17693:13;17726:5;17719:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17637:102;:::o;20137:244::-;20258:4;20280:13;20296:12;:10;:12::i;:::-;20280:28;;20319:32;20328:5;20335:7;20344:6;20319:8;:32::i;:::-;20369:4;20362:11;;;20137:244;;;;:::o;29135:51::-;;;:::o;19001:110::-;19064:7;19091:12;;19084:19;;19001:110;:::o;28469:37::-;;;;:::o;20961:297::-;21094:4;21111:15;21129:12;:10;:12::i;:::-;21111:30;;21152:38;21168:4;21174:7;21183:6;21152:15;:38::i;:::-;21201:27;21211:4;21217:2;21221:6;21201:9;:27::i;:::-;21246:4;21239:11;;;20961:297;;;;;:::o;36440:92::-;36490:5;36515:9;;;;;;;;;;;36508:16;;36440:92;:::o;22677:272::-;22794:4;22816:13;22832:12;:10;:12::i;:::-;22816:28;;22855:64;22864:5;22871:7;22908:10;22880:25;22890:5;22897:7;22880:9;:25::i;:::-;:38;;;;:::i;:::-;22855:8;:64::i;:::-;22937:4;22930:11;;;22677:272;;;;:::o;29193:38::-;;;:::o;37926:182::-;38028:4;14358:13;:11;:13::i;:::-;38064:12:::1;38050:11;:26;;;;38096:4;38089:11;;37926:182:::0;;;:::o;18027:177::-;18146:7;18178:9;:18;18188:7;18178:18;;;;;;;;;;;;;;;;18171:25;;18027:177;;;:::o;15120:103::-;14358:13;:11;:13::i;:::-;15185:30:::1;15212:1;15185:18;:30::i;:::-;15120:103::o:0;28690:75::-;;;;;;;;;;;;;:::o;28555:38::-;;;;:::o;28645:36::-;;;;:::o;36730:575::-;36925:4;14358:13;:11;:13::i;:::-;37048:3:::1;37009:17;36987:19;36965;:41;;;;:::i;:::-;:61;;;;:::i;:::-;36964:87;;36942:182;;;;;;;;;;;;:::i;:::-;;;;;;;;;37156:19;37135:18;:40;;;;37207:19;37186:18;:40;;;;37256:17;37237:16;:36;;;;37293:4;37286:11;;36730:575:::0;;;;;:::o;38116:198::-;38226:4;14358:13;:11;:13::i;:::-;38266:16:::1;38248:15;:34;;;;38302:4;38295:11;;38116:198:::0;;;:::o;28774:53::-;;;;:::o;14472:87::-;14518:7;14545:6;;;;;;;;;;;14538:13;;14472:87;:::o;17858:106::-;17916:13;17949:7;17942:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17858:106;:::o;21761:507::-;21883:4;21905:13;21921:12;:10;:12::i;:::-;21905:28;;21944:24;21971:25;21981:5;21988:7;21971:9;:25::i;:::-;21944:52;;22049:15;22029:16;:35;;22007:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;22165:60;22174:5;22181:7;22209:15;22190:16;:34;22165:8;:60::i;:::-;22256:4;22249:11;;;;21761:507;;;;:::o;19581:236::-;19698:4;19720:13;19736:12;:10;:12::i;:::-;19720:28;;19759;19769:5;19776:2;19780:6;19759:9;:28::i;:::-;19805:4;19798:11;;;19581:236;;;;:::o;28834:57::-;;;;:::o;28513:35::-;;;;:::o;36540:182::-;36643:4;14358:13;:11;:13::i;:::-;36683:9:::1;36665:15;;:27;;;;;;;;;;;;;;;;;;36710:4;36703:11;;36540:182:::0;;;:::o;19174:201::-;19308:7;19340:11;:18;19352:5;19340:18;;;;;;;;;;;;;;;:27;19359:7;19340:27;;;;;;;;;;;;;;;;19333:34;;19174:201;;;;:::o;37313:605::-;37512:4;14358:13;:11;:13::i;:::-;37655:3:::1;37632:18;37592:20;37552;:60;;;;:::i;:::-;:98;;;;:::i;:::-;37551:107;;37529:202;;;;;;;;;;;;:::i;:::-;;;;;;;;;37764:20;37742:19;:42;;;;37817:20;37795:19;:42;;;;37868:18;37848:17;:38;;;;37906:4;37899:11;;37313:605:::0;;;;;:::o;28425:37::-;;;;:::o;15378:238::-;14358:13;:11;:13::i;:::-;15501:1:::1;15481:22;;:8;:22;;::::0;15459:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;15580:28;15599:8;15580:18;:28::i;:::-;15378:238:::0;:::o;13265:98::-;13318:7;13345:10;13338:17;;13265:98;:::o;24984:380::-;25137:1;25120:19;;:5;:19;;;25112:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25218:1;25199:21;;:7;:21;;;25191:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25302:6;25272:11;:18;25284:5;25272:18;;;;;;;;;;;;;;;:27;25291:7;25272:27;;;;;;;;;;;;;;;:36;;;;25340:7;25324:32;;25333:5;25324:32;;;25349:6;25324:32;;;;;;:::i;:::-;;;;;;;;24984:380;;;:::o;25655:502::-;25790:24;25817:25;25827:5;25834:7;25817:9;:25::i;:::-;25790:52;;25877:17;25857:16;:37;25853:297;;25957:6;25937:16;:26;;25911:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;26072:51;26081:5;26088:7;26116:6;26097:16;:25;26072:8;:51::i;:::-;25853:297;25779:378;25655:502;;;:::o;31073:3336::-;31221:1;31205:18;;:4;:18;;;31197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31298:1;31284:16;;:2;:16;;;31276:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;31392:6;31373:15;31383:4;31373:9;:15::i;:::-;:25;;31351:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;31504:13;31496:21;;:4;:21;;;:44;;;;31527:13;31521:19;;:2;:19;;;31496:44;31495:67;;;;;31546:16;;;;;;;;;;;31545:17;31495:67;31477:2925;;;31601:13;31593:21;;:4;:21;;;31589:795;;31635:32;31718:18;;31670:24;31688:4;31670:9;:24::i;:::-;:66;;;;:::i;:::-;31635:101;;31809:30;;31781:24;:58;31755:194;;31882:47;31898:30;;31882:15;:47::i;:::-;31755:194;31995:24;;31972:18;;31971:48;31967:402;;32044:43;32062:24;;32044:17;:43::i;:::-;32132:24;;32110:18;;:46;;;;;;;:::i;:::-;;;;;;;;32179:9;32199:15;;;;;;;;;;;32191:29;;:100;32247:21;32191:100;;;;;;;;;;;;;;;;;;;;;;;32179:112;;32322:4;32314:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;32021:348;31967:402;31616:768;31589:795;32400:22;32441:18;:24;32460:4;32441:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;32469:18;:22;32488:2;32469:22;;;;;;;;;;;;;;;;;;;;;;;;;32441:50;32437:1832;;;32529:6;32512:23;;32437:1832;;;32616:11;;32606:6;:21;;32576:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;32749:22;32790;32831:20;32884:13;32876:21;;:4;:21;;;32872:738;;32984:15;;32966:13;32976:2;32966:9;:13::i;:::-;32957:6;:22;;;;:::i;:::-;32956:43;;32922:183;;;;;;;;;;;;:::i;:::-;;;;;;;;;33180:3;33158:18;;33149:6;:27;;;;:::i;:::-;33148:35;;;;:::i;:::-;33130:54;;33257:3;33235:18;;33226:6;:27;;;;:::i;:::-;33225:35;;;;:::i;:::-;33207:54;;33330:3;33310:16;;33301:6;:25;;;;:::i;:::-;33300:33;;;;:::i;:::-;33284:50;;32872:738;;;33434:3;33411:19;;33402:6;:28;;;;:::i;:::-;33401:36;;;;:::i;:::-;33383:55;;33512:3;33489:19;;33480:6;:28;;;;:::i;:::-;33479:36;;;;:::i;:::-;33461:55;;33586:3;33565:17;;33556:6;:26;;;;:::i;:::-;33555:34;;;;:::i;:::-;33539:51;;32872:738;33731:12;33714:14;33697;:31;;;;:::i;:::-;:46;;;;:::i;:::-;33666:6;:78;;;;:::i;:::-;33628:116;;33785:14;33763:18;;:36;;;;;;;:::i;:::-;;;;;;;;33834:12;33818;;:28;;;;;;;:::i;:::-;;;;;;;;33907:1;33889:14;33872;:31;;;;:::i;:::-;33871:37;33867:255;;;33933:169;33975:4;34014;34064:14;34047;:31;;;;:::i;:::-;33933:15;:169::i;:::-;33867:255;34159:1;34144:12;:16;34140:114;;;34185:49;34201:4;34207:12;;;;;;;;;;;34221;34185:15;:49::i;:::-;34140:114;32557:1712;;;32437:1832;34283:41;34299:4;34305:2;34309:14;34283:15;:41::i;:::-;31574:2762;31477:2925;;;34357:33;34373:4;34379:2;34383:6;34357:15;:33::i;:::-;31477:2925;31073:3336;;;:::o;14637:132::-;14712:12;:10;:12::i;:::-;14701:23;;:7;:5;:7::i;:::-;:23;;;14693:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14637:132::o;15776:191::-;15850:16;15869:6;;;;;;;;;;;15850:25;;15895:8;15886:6;;:17;;;;;;;;;;;;;;;;;;15950:8;15919:40;;15940:8;15919:40;;;;;;;;;;;;15839:128;15776:191;:::o;34417:474::-;29631:4;29612:16;;:23;;;;;;;;;;;;;;;;;;34503:12:::1;34542:1;34519:20;:24;;;;:::i;:::-;34503:41;;34555:17;34599:4;34576:20;:27;;;;:::i;:::-;34555:49;;34617:22;34642:21;34617:46;;34676:23;34694:4;34676:17;:23::i;:::-;34712:18;34758:14;34734:21;:38;;;;:::i;:::-;34712:61;;34786:36;34800:9;34811:10;34786:13;:36::i;:::-;34840:43;34855:4;34861:10;34873:9;34840:43;;;;;;;;:::i;:::-;;;;;;;;34492:399;;;;29677:5:::0;29658:16;;:24;;;;;;;;;;;;;;;;;;34417:474;:::o;34899:496::-;29631:4;29612:16;;:23;;;;;;;;;;;;;;;;;;34978:21:::1;35016:1;35002:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34978:40;;35047:4;35029;35034:1;35029:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;35073:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35063:4;35068:1;35063:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;35108:62;35125:4;35140:15;35158:11;35108:8;:62::i;:::-;35183:15;:66;;;35264:11;35290:1;35306:4;35333;35372:3;35354:15;:21;;;;:::i;:::-;35183:204;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34967:428;29677:5:::0;29658:16;;:24;;;;;;;;;;;;;;;;;;34899:496;:::o;26165:776::-;26312:1;26296:18;;:4;:18;;;26288:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26389:1;26375:16;;:2;:16;;;26367:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26444:19;26466:9;:15;26476:4;26466:15;;;;;;;;;;;;;;;;26444:37;;26529:6;26514:11;:21;;26492:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;26669:6;26655:11;:20;26637:9;:15;26647:4;26637:15;;;;;;;;;;;;;;;:38;;;;26872:6;26855:9;:13;26865:2;26855:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;26922:2;26907:26;;26916:4;26907:26;;;26926:6;26907:26;;;;;;:::i;:::-;;;;;;;;26277:664;26165:776;;;:::o;35403:398::-;29631:4;29612:16;;:23;;;;;;;;;;;;;;;;;;35520:62:::1;35537:4;35552:15;35570:11;35520:8;:62::i;:::-;35595:15;:31;;;35634:9;35667:4;35687:11;35713:1;35729::::0;35745:7:::1;:5;:7::i;:::-;35767:15;35595:198;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;29677:5:::0;29658:16;;:24;;;;;;;;;;;;;;;;;;35403: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:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:152::-;4220:9;4253:37;4284:5;4253:37;:::i;:::-;4240:50;;4144:152;;;:::o;4302:183::-;4415:63;4472:5;4415:63;:::i;:::-;4410:3;4403:76;4302:183;;:::o;4491:274::-;4610:4;4648:2;4637:9;4633:18;4625:26;;4661:97;4755:1;4744:9;4740:17;4731:6;4661:97;:::i;:::-;4491:274;;;;:::o;4771:619::-;4848:6;4856;4864;4913:2;4901:9;4892:7;4888:23;4884:32;4881:119;;;4919:79;;:::i;:::-;4881:119;5039:1;5064:53;5109:7;5100:6;5089:9;5085:22;5064:53;:::i;:::-;5054:63;;5010:117;5166:2;5192:53;5237:7;5228:6;5217:9;5213:22;5192:53;:::i;:::-;5182:63;;5137:118;5294:2;5320:53;5365:7;5356:6;5345:9;5341:22;5320:53;:::i;:::-;5310:63;;5265:118;4771:619;;;;;:::o;5396:86::-;5431:7;5471:4;5464:5;5460:16;5449:27;;5396:86;;;:::o;5488:112::-;5571:22;5587:5;5571:22;:::i;:::-;5566:3;5559:35;5488:112;;:::o;5606:214::-;5695:4;5733:2;5722:9;5718:18;5710:26;;5746:67;5810:1;5799:9;5795:17;5786:6;5746:67;:::i;:::-;5606:214;;;;:::o;5826:118::-;5913:24;5931:5;5913:24;:::i;:::-;5908:3;5901:37;5826:118;;:::o;5950:222::-;6043:4;6081:2;6070:9;6066:18;6058:26;;6094:71;6162:1;6151:9;6147:17;6138:6;6094:71;:::i;:::-;5950:222;;;;:::o;6178:329::-;6237:6;6286:2;6274:9;6265:7;6261:23;6257:32;6254:119;;;6292:79;;:::i;:::-;6254:119;6412:1;6437:53;6482:7;6473:6;6462:9;6458:22;6437:53;:::i;:::-;6427:63;;6383:117;6178:329;;;;:::o;6513:::-;6572:6;6621:2;6609:9;6600:7;6596:23;6592:32;6589:119;;;6627:79;;:::i;:::-;6589:119;6747:1;6772:53;6817:7;6808:6;6797:9;6793:22;6772:53;:::i;:::-;6762:63;;6718:117;6513:329;;;;:::o;6848:619::-;6925:6;6933;6941;6990:2;6978:9;6969:7;6965:23;6961:32;6958:119;;;6996:79;;:::i;:::-;6958:119;7116:1;7141:53;7186:7;7177:6;7166:9;7162:22;7141:53;:::i;:::-;7131:63;;7087:117;7243:2;7269:53;7314:7;7305:6;7294:9;7290:22;7269:53;:::i;:::-;7259:63;;7214:118;7371:2;7397:53;7442:7;7433:6;7422:9;7418:22;7397:53;:::i;:::-;7387:63;;7342:118;6848:619;;;;;:::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:179::-;14128:31;14124:1;14116:6;14112:14;14105:55;13988:179;:::o;14173:366::-;14315:3;14336:67;14400:2;14395:3;14336:67;:::i;:::-;14329:74;;14412:93;14501:3;14412:93;:::i;:::-;14530:2;14525:3;14521:12;14514:19;;14173:366;;;:::o;14545:419::-;14711:4;14749:2;14738:9;14734:18;14726:26;;14798:9;14792:4;14788:20;14784:1;14773:9;14769:17;14762:47;14826:131;14952:4;14826:131;:::i;:::-;14818:139;;14545:419;;;:::o;14970:224::-;15110:34;15106:1;15098:6;15094:14;15087:58;15179:7;15174:2;15166:6;15162:15;15155:32;14970:224;:::o;15200:366::-;15342:3;15363:67;15427:2;15422:3;15363:67;:::i;:::-;15356:74;;15439:93;15528:3;15439:93;:::i;:::-;15557:2;15552:3;15548:12;15541:19;;15200:366;;;:::o;15572:419::-;15738:4;15776:2;15765:9;15761:18;15753:26;;15825:9;15819:4;15815:20;15811:1;15800:9;15796:17;15789:47;15853:131;15979:4;15853:131;:::i;:::-;15845:139;;15572:419;;;:::o;15997:222::-;16137:34;16133:1;16125:6;16121:14;16114:58;16206:5;16201:2;16193:6;16189:15;16182:30;15997:222;:::o;16225:366::-;16367:3;16388:67;16452:2;16447:3;16388:67;:::i;:::-;16381:74;;16464:93;16553:3;16464:93;:::i;:::-;16582:2;16577:3;16573:12;16566:19;;16225:366;;;:::o;16597:419::-;16763:4;16801:2;16790:9;16786:18;16778:26;;16850:9;16844:4;16840:20;16836:1;16825:9;16821:17;16814:47;16878:131;17004:4;16878:131;:::i;:::-;16870:139;;16597:419;;;:::o;17022:225::-;17162:34;17158:1;17150:6;17146:14;17139:58;17231:8;17226:2;17218:6;17214:15;17207:33;17022:225;:::o;17253:366::-;17395:3;17416:67;17480:2;17475:3;17416:67;:::i;:::-;17409:74;;17492:93;17581:3;17492:93;:::i;:::-;17610:2;17605:3;17601:12;17594:19;;17253:366;;;:::o;17625:419::-;17791:4;17829:2;17818:9;17814:18;17806:26;;17878:9;17872:4;17868:20;17864:1;17853:9;17849:17;17842:47;17906:131;18032:4;17906:131;:::i;:::-;17898:139;;17625:419;;;:::o;18050:194::-;18090:4;18110:20;18128:1;18110:20;:::i;:::-;18105:25;;18144:20;18162:1;18144:20;:::i;:::-;18139:25;;18188:1;18185;18181:9;18173:17;;18212:1;18206:4;18203:11;18200:37;;;18217:18;;:::i;:::-;18200:37;18050:194;;;;:::o;18250:168::-;18390:20;18386:1;18378:6;18374:14;18367:44;18250:168;:::o;18424:366::-;18566:3;18587:67;18651:2;18646:3;18587:67;:::i;:::-;18580:74;;18663:93;18752:3;18663:93;:::i;:::-;18781:2;18776:3;18772:12;18765:19;;18424:366;;;:::o;18796:419::-;18962:4;19000:2;18989:9;18985:18;18977:26;;19049:9;19043:4;19039:20;19035:1;19024:9;19020:17;19013:47;19077:131;19203:4;19077:131;:::i;:::-;19069:139;;18796:419;;;:::o;19221:244::-;19361:34;19357:1;19349:6;19345:14;19338:58;19430:27;19425:2;19417:6;19413:15;19406:52;19221:244;:::o;19471:366::-;19613:3;19634:67;19698:2;19693:3;19634:67;:::i;:::-;19627:74;;19710:93;19799:3;19710:93;:::i;:::-;19828:2;19823:3;19819:12;19812:19;;19471:366;;;:::o;19843:419::-;20009:4;20047:2;20036:9;20032:18;20024:26;;20096:9;20090:4;20086:20;20082:1;20071:9;20067:17;20060:47;20124:131;20250:4;20124:131;:::i;:::-;20116:139;;19843:419;;;:::o;20268:241::-;20408:34;20404:1;20396:6;20392:14;20385:58;20477:24;20472:2;20464:6;20460:15;20453:49;20268:241;:::o;20515:366::-;20657:3;20678:67;20742:2;20737:3;20678:67;:::i;:::-;20671:74;;20754:93;20843:3;20754:93;:::i;:::-;20872:2;20867:3;20863:12;20856:19;;20515:366;;;:::o;20887:419::-;21053:4;21091:2;21080:9;21076:18;21068:26;;21140:9;21134:4;21130:20;21126:1;21115:9;21111:17;21104:47;21168:131;21294:4;21168:131;:::i;:::-;21160:139;;20887:419;;;:::o;21312:410::-;21352:7;21375:20;21393:1;21375:20;:::i;:::-;21370:25;;21409:20;21427:1;21409:20;:::i;:::-;21404:25;;21464:1;21461;21457:9;21486:30;21504:11;21486:30;:::i;:::-;21475:41;;21665:1;21656:7;21652:15;21649:1;21646:22;21626:1;21619:9;21599:83;21576:139;;21695:18;;:::i;:::-;21576:139;21360:362;21312:410;;;;:::o;21728:180::-;21776:77;21773:1;21766:88;21873:4;21870:1;21863:15;21897:4;21894:1;21887:15;21914:185;21954:1;21971:20;21989:1;21971:20;:::i;:::-;21966:25;;22005:20;22023:1;22005:20;:::i;:::-;22000:25;;22044:1;22034:35;;22049:18;;:::i;:::-;22034:35;22091:1;22088;22084:9;22079:14;;21914:185;;;;:::o;22105:182::-;22245:34;22241:1;22233:6;22229:14;22222:58;22105:182;:::o;22293:366::-;22435:3;22456:67;22520:2;22515:3;22456:67;:::i;:::-;22449:74;;22532:93;22621:3;22532:93;:::i;:::-;22650:2;22645:3;22641:12;22634:19;;22293:366;;;:::o;22665:419::-;22831:4;22869:2;22858:9;22854:18;22846:26;;22918:9;22912:4;22908:20;22904:1;22893:9;22889:17;22882:47;22946:131;23072:4;22946:131;:::i;:::-;22938:139;;22665:419;;;:::o;23090:442::-;23239:4;23277:2;23266:9;23262:18;23254:26;;23290:71;23358:1;23347:9;23343:17;23334:6;23290:71;:::i;:::-;23371:72;23439:2;23428:9;23424:18;23415:6;23371:72;:::i;:::-;23453;23521:2;23510:9;23506:18;23497:6;23453:72;:::i;:::-;23090:442;;;;;;:::o;23538:180::-;23586:77;23583:1;23576:88;23683:4;23680:1;23673:15;23707:4;23704:1;23697:15;23724:180;23772:77;23769:1;23762:88;23869:4;23866:1;23859:15;23893:4;23890:1;23883:15;23910:143;23967:5;23998:6;23992:13;23983:22;;24014:33;24041:5;24014:33;:::i;:::-;23910:143;;;;:::o;24059:351::-;24129:6;24178:2;24166:9;24157:7;24153:23;24149:32;24146:119;;;24184:79;;:::i;:::-;24146:119;24304:1;24329:64;24385:7;24376:6;24365:9;24361:22;24329:64;:::i;:::-;24319:74;;24275:128;24059:351;;;;:::o;24416:85::-;24461:7;24490:5;24479:16;;24416:85;;;:::o;24507:158::-;24565:9;24598:61;24616:42;24625:32;24651:5;24625:32;:::i;:::-;24616:42;:::i;:::-;24598:61;:::i;:::-;24585:74;;24507:158;;;:::o;24671:147::-;24766:45;24805:5;24766:45;:::i;:::-;24761:3;24754:58;24671:147;;:::o;24824:114::-;24891:6;24925:5;24919:12;24909:22;;24824:114;;;:::o;24944:184::-;25043:11;25077:6;25072:3;25065:19;25117:4;25112:3;25108:14;25093:29;;24944:184;;;;:::o;25134:132::-;25201:4;25224:3;25216:11;;25254:4;25249:3;25245:14;25237:22;;25134:132;;;:::o;25272:108::-;25349:24;25367:5;25349:24;:::i;:::-;25344:3;25337:37;25272:108;;:::o;25386:179::-;25455:10;25476:46;25518:3;25510:6;25476:46;:::i;:::-;25554:4;25549:3;25545:14;25531:28;;25386:179;;;;:::o;25571:113::-;25641:4;25673;25668:3;25664:14;25656:22;;25571:113;;;:::o;25720:732::-;25839:3;25868:54;25916:5;25868:54;:::i;:::-;25938:86;26017:6;26012:3;25938:86;:::i;:::-;25931:93;;26048:56;26098:5;26048:56;:::i;:::-;26127:7;26158:1;26143:284;26168:6;26165:1;26162:13;26143:284;;;26244:6;26238:13;26271:63;26330:3;26315:13;26271:63;:::i;:::-;26264:70;;26357:60;26410:6;26357:60;:::i;:::-;26347:70;;26203:224;26190:1;26187;26183:9;26178:14;;26143:284;;;26147:14;26443:3;26436:10;;25844:608;;;25720:732;;;;:::o;26458:831::-;26721:4;26759:3;26748:9;26744:19;26736:27;;26773:71;26841:1;26830:9;26826:17;26817:6;26773:71;:::i;:::-;26854:80;26930:2;26919:9;26915:18;26906:6;26854:80;:::i;:::-;26981:9;26975:4;26971:20;26966:2;26955:9;26951:18;26944:48;27009:108;27112:4;27103:6;27009:108;:::i;:::-;27001:116;;27127:72;27195:2;27184:9;27180:18;27171:6;27127:72;:::i;:::-;27209:73;27277:3;27266:9;27262:19;27253:6;27209:73;:::i;:::-;26458:831;;;;;;;;:::o;27295:807::-;27544:4;27582:3;27571:9;27567:19;27559:27;;27596:71;27664:1;27653:9;27649:17;27640:6;27596:71;:::i;:::-;27677:72;27745:2;27734:9;27730:18;27721:6;27677:72;:::i;:::-;27759:80;27835:2;27824:9;27820:18;27811:6;27759:80;:::i;:::-;27849;27925:2;27914:9;27910:18;27901:6;27849:80;:::i;:::-;27939:73;28007:3;27996:9;27992:19;27983:6;27939:73;:::i;:::-;28022;28090:3;28079:9;28075:19;28066:6;28022:73;:::i;:::-;27295:807;;;;;;;;;:::o;28108:143::-;28165:5;28196:6;28190:13;28181:22;;28212:33;28239:5;28212:33;:::i;:::-;28108:143;;;;:::o;28257:663::-;28345:6;28353;28361;28410:2;28398:9;28389:7;28385:23;28381:32;28378:119;;;28416:79;;:::i;:::-;28378:119;28536:1;28561:64;28617:7;28608:6;28597:9;28593:22;28561:64;:::i;:::-;28551:74;;28507:128;28674:2;28700:64;28756:7;28747:6;28736:9;28732:22;28700:64;:::i;:::-;28690:74;;28645:129;28813:2;28839:64;28895:7;28886:6;28875:9;28871:22;28839:64;:::i;:::-;28829:74;;28784:129;28257:663;;;;;:::o

Swarm Source

ipfs://0c6639eeb671e67682e050f33df972872a4d957a0ad3778900d9f1e9f82b6e14
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.