ETH Price: $3,394.88 (-1.20%)
Gas: 2 Gwei

Token

ChadGPT (CHGPT)
 

Overview

Max Total Supply

100,000,000 CHGPT

Holders

151

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
744,287.894488249 CHGPT

Value
$0.00
0x12970e6868f88f6557b76120662c1b3e50a646bf
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:
ChadGPT

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**
 *                 ChadGPT
    ⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠛⠛⠛⠋⠉⠈⠉⠉⠉⠉⠛⠻⢿⣿⣿⣿⣿⣿⣿⣿
    ⣿⣿⣿⣿⣿⡿⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠛⢿⣿⣿⣿⣿
    ⣿⣿⣿⣿⡏⣀⠀⠀⠀⠀⠀⠀⠀⣀⣤⣤⣤⣄⡀⠀⠀⠀⠀⠀⠀⠀⠙⢿⣿⣿
    ⣿⣿⣿⢏⣴⣿⣷⠀⠀⠀⠀⠀⢾⣿⣿⣿⣿⣿⣿⡆⠀⠀⠀⠀⠀⠀⠀⠈⣿⣿
    ⣿⣿⣟⣾⣿⡟⠁⠀⠀⠀⠀⠀⢀⣾⣿⣿⣿⣿⣿⣷⢢⠀⠀⠀⠀⠀⠀⠀⢸⣿
    ⣿⣿⣿⣿⣟⠀⡴⠄⠀⠀⠀⠀⠀⠀⠙⠻⣿⣿⣿⣿⣷⣄⠀⠀⠀⠀⠀⠀⠀⣿
    ⣿⣿⣿⠟⠻⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠶⢴⣿⣿⣿⣿⣿⣧⠀⠀⠀⠀⠀⠀⣿
    ⣿⣁⡀⠀⠀⢰⢠⣦⠀⠀⠀⠀⠀⠀⠀⠀⢀⣼⣿⣿⣿⣿⣿⡄⠀⣴⣶⣿⡄⣿
    ⣿⡋⠀⠀⠀⠎⢸⣿⡆⠀⠀⠀⠀⠀⠀⣴⣿⣿⣿⣿⣿⣿⣿⠗⢘⣿⣟⠛⠿⣼
    ⣿⣿⠋⢀⡌⢰⣿⡿⢿⡀⠀⠀⠀⠀⠀⠙⠿⣿⣿⣿⣿⣿⡇⠀⢸⣿⣿⣧⢀⣼
    ⣿⣿⣷⢻⠄⠘⠛⠋⠛⠃⠀⠀⠀⠀⠀⢿⣧⠈⠉⠙⠛⠋⠀⠀⠀⣿⣿⣿⣿⣿
    ⣿⣿⣧⠀⠈⢸⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠟⠀⠀⠀⠀⢀⢃⠀⠀⢸⣿⣿⣿⣿
    ⣿⣿⡿⠀⠴⢗⣠⣤⣴⡶⠶⠖⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣀⡸⠀⣿⣿⣿⣿
    ⣿⣿⣿⡀⢠⣾⣿⠏⠀⠠⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠛⠉⠀⣿⣿⣿⣿
    ⣿⣿⣿⣧⠈⢹⡇⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⣰⣿⣿⣿⣿
    ⣿⣿⣿⣿⡄⠈⠃⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣴⣾⣿⣿⣿⣿⣿
    ⣿⣿⣿⣿⣧⡀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿
    ⣿⣿⣿⣿⣷⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
    ⣿⣿⣿⣿⣿⣦⣄⣀⣀⣀⣀⠀⠀⠀⠀⠘⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
    ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣷⡄⠀⠀⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
    ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣧⠀⠀⠀⠙⣿⣿⡟⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿
    ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⠇⠀⠁⠀⠀⠹⣿⠃⠀⣿⣿⣿⣿⣿⣿⣿⣿⣿
    ⣿⣿⣿⣿⣿⣿⣿⣿⡿⠛⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⢐⣿⣿⣿⣿⣿⣿⣿⣿⣿
    ⣿⣿⣿⣿⠿⠛⠉⠉⠁⠀⢻⣿⡇⠀⠀⠀⠀⠀⠀⢀⠈⣿⣿⡿⠉⠛⠛⠛⠉⠉
    ⣿⡿⠋⠁⠀⠀⢀⣀⣠⡴⣸⣿⣇⡄⠀⠀⠀⠀⢀⡿⠄⠙⠛⠀⣀⣠⣤⣤⠄⠀

    * Total Supply: 100 Million 
 * Set slippage to 3-4% : 3% to LP, 2% tax for API costs.
*/

// SPDX-License-Identifier: MIT

pragma solidity 0.8.16;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

    function allPairsLength() external view returns (uint256);

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

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

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

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

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

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

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

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

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

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

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

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

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.openzeppelin.com/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
 contract ChadGPT is ERC20, Ownable {
    string private _name = "ChadGPT";
    string private _symbol = "CHGPT";
    uint8 private _decimals = 8;
    uint256 private _supply = 1000000000;
    uint256 public taxForLiquidity = 47; //sniper protection, to be lowered to 3% after launch
    uint256 public taxForMarketing = 47; //sniper protection, to be lowered to 2% after launch
    uint256 public maxTxAmount = 10000001 * 10**_decimals;
    uint256 public maxWalletAmount = 10000001 * 10**_decimals;
    address public marketingWallet = 0xeB80BB9456b2D9257DaaFEc322fE7B4583890548;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;
    uint256 public _marketingReserves = 0;
    mapping(address => bool) public _isExcludedFromFee;
    uint256 public numTokensSellToAddToLiquidity = 200000 * 10**_decimals;
    uint256 public numTokensSellToAddToETH = 100000 * 10**_decimals;

    function postLaunch() external onlyOwner {
        taxForLiquidity = 3;
        taxForMarketing = 2;
        maxTxAmount = 10000001 * 10**_decimals;
        maxWalletAmount = 10000001 * 10**_decimals;
    }

    // Loading up

    event LoadUp(uint256 amount);
    event ExcludedFromFeeUpdated(address _address, bool _status);
    event PairUpdated(address _address);

    function loadUp(uint256 amount) external {
        require(msg.sender.balance >= amount, "Not enough tokens!");
        _transfer(msg.sender, DEAD, amount);
        emit LoadUp(amount);
    }

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;
    
    bool inSwapAndLiquify;

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

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

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

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

        uniswapV2Router = _uniswapV2Router;

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

    function updatePair(address _pair) external onlyOwner {
        require(_pair != DEAD, "LP Pair cannot be the Dead wallet, or 0!");
        require(_pair != address(0), "LP Pair cannot be the Dead wallet, or 0!");
        // uniswapV2Pair = _pair;
        emit PairUpdated(_pair);
    }

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

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

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

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

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

    function excludeFromFee(address _address, bool _status) external onlyOwner {
        _isExcludedFromFee[_address] = _status;
        emit ExcludedFromFeeUpdated(_address, _status);
    }

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

        uint256 initialBalance = address(this).balance;

        _swapTokensForEth(half);

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

        _addLiquidity(otherHalf, newBalance);

        emit SwapAndLiquify(half, newBalance, otherHalf);
    }

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

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

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

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

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

    function changeMarketingWallet(address newWallet)
        public
        onlyOwner
        returns (bool)
    {
        require(newWallet != DEAD, "LP Pair cannot be the Dead wallet, or 0!");
        require(newWallet != address(0), "LP Pair cannot be the Dead wallet, or 0!");
        marketingWallet = newWallet;
        return true;
    }

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

        return true;
    }

    function changeSwapThresholds(uint256 _numTokensSellToAddToLiquidity, uint256 _numTokensSellToAddToETH)
        public
        onlyOwner
        returns (bool)
    {
        require(_numTokensSellToAddToLiquidity < _supply / 98, "Cannot liquidate more than 2% of the supply at once!");
        require(_numTokensSellToAddToETH < _supply / 98, "Cannot liquidate more than 2% of the supply at once!");
        numTokensSellToAddToLiquidity = _numTokensSellToAddToLiquidity * 10**_decimals;
        numTokensSellToAddToETH = _numTokensSellToAddToETH * 10**_decimals;

        return true;
    }

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

        return true;
    }

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

        return true;
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"_status","type":"bool"}],"name":"ExcludedFromFeeUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LoadUp","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":"address","name":"_address","type":"address"}],"name":"PairUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingReserves","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":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"changeMarketingWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"changeMaxTxAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxWalletAmount","type":"uint256"}],"name":"changeMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensSellToAddToLiquidity","type":"uint256"},{"internalType":"uint256","name":"_numTokensSellToAddToETH","type":"uint256"}],"name":"changeSwapThresholds","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_taxForLiquidity","type":"uint256"},{"internalType":"uint256","name":"_taxForMarketing","type":"uint256"}],"name":"changeTaxForLiquidityAndMarketing","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_status","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"loadUp","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"postLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"updatePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600781526020017f4368616447505400000000000000000000000000000000000000000000000000815250600690816200004a919062000b8a565b506040518060400160405280600581526020017f43484750540000000000000000000000000000000000000000000000000000008152506007908162000091919062000b8a565b5060088060006101000a81548160ff021916908360ff160217905550633b9aca00600955602f600a55602f600b55600860009054906101000a900460ff16600a620000dd919062000e01565b62989681620000ed919062000e52565b600c55600860009054906101000a900460ff16600a6200010e919062000e01565b629896816200011e919062000e52565b600d5573eb80bb9456b2d9257daafec322fe7b4583890548600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601055600860009054906101000a900460ff16600a620001dc919062000e01565b62030d40620001ec919062000e52565b601255600860009054906101000a900460ff16600a6200020d919062000e01565b620186a06200021d919062000e52565b6013553480156200022d57600080fd5b50600680546200023d9062000979565b80601f01602080910402602001604051908101604052809291908181526020018280546200026b9062000979565b8015620002bc5780601f106200029057610100808354040283529160200191620002bc565b820191906000526020600020905b8154815290600101906020018083116200029e57829003601f168201915b505050505060078054620002d09062000979565b80601f0160208091040260200160405190810160405280929190818152602001828054620002fe9062000979565b80156200034f5780601f1062000323576101008083540402835291602001916200034f565b820191906000526020600020905b8154815290600101906020018083116200033157829003601f168201915b5050505050816003908162000365919062000b8a565b50806004908162000377919062000b8a565b5050506200039a6200038e620006fd60201b60201c565b6200070560201b60201c565b620003d833600860009054906101000a900460ff16600a620003bd919062000e01565b600954620003cc919062000e52565b620007cb60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200043d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000463919062000f1d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004cb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004f1919062000f1d565b6040518363ffffffff1660e01b81526004016200051092919062000f60565b6020604051808303816000875af115801562000530573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000556919062000f1d565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060016011600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160116000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505062001079565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200083d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008349062000fee565b60405180910390fd5b806002600082825462000851919062001010565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200090491906200105c565b60405180910390a35050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200099257607f821691505b602082108103620009a857620009a76200094a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000a127fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620009d3565b62000a1e8683620009d3565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a6b62000a6562000a5f8462000a36565b62000a40565b62000a36565b9050919050565b6000819050919050565b62000a878362000a4a565b62000a9f62000a968262000a72565b848454620009e0565b825550505050565b600090565b62000ab662000aa7565b62000ac381848462000a7c565b505050565b5b8181101562000aeb5762000adf60008262000aac565b60018101905062000ac9565b5050565b601f82111562000b3a5762000b0481620009ae565b62000b0f84620009c3565b8101602085101562000b1f578190505b62000b3762000b2e85620009c3565b83018262000ac8565b50505b505050565b600082821c905092915050565b600062000b5f6000198460080262000b3f565b1980831691505092915050565b600062000b7a838362000b4c565b9150826002028217905092915050565b62000b958262000910565b67ffffffffffffffff81111562000bb15762000bb06200091b565b5b62000bbd825462000979565b62000bca82828562000aef565b600060209050601f83116001811462000c02576000841562000bed578287015190505b62000bf9858262000b6c565b86555062000c69565b601f19841662000c1286620009ae565b60005b8281101562000c3c5784890151825560018201915060208501945060208101905062000c15565b8683101562000c5c578489015162000c58601f89168262000b4c565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b600185111562000cff5780860481111562000cd75762000cd662000c71565b5b600185161562000ce75780820291505b808102905062000cf78562000ca0565b945062000cb7565b94509492505050565b60008262000d1a576001905062000ded565b8162000d2a576000905062000ded565b816001811462000d43576002811462000d4e5762000d84565b600191505062000ded565b60ff84111562000d635762000d6262000c71565b5b8360020a91508482111562000d7d5762000d7c62000c71565b5b5062000ded565b5060208310610133831016604e8410600b841016171562000dbe5782820a90508381111562000db85762000db762000c71565b5b62000ded565b62000dcd848484600162000cad565b9250905081840481111562000de75762000de662000c71565b5b81810290505b9392505050565b600060ff82169050919050565b600062000e0e8262000a36565b915062000e1b8362000df4565b925062000e4a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d08565b905092915050565b600062000e5f8262000a36565b915062000e6c8362000a36565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000ea85762000ea762000c71565b5b828202905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000ee58262000eb8565b9050919050565b62000ef78162000ed8565b811462000f0357600080fd5b50565b60008151905062000f178162000eec565b92915050565b60006020828403121562000f365762000f3562000eb3565b5b600062000f468482850162000f06565b91505092915050565b62000f5a8162000ed8565b82525050565b600060408201905062000f77600083018562000f4f565b62000f86602083018462000f4f565b9392505050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000fd6601f8362000f8d565b915062000fe38262000f9e565b602082019050919050565b60006020820190508181036000830152620010098162000fc7565b9050919050565b60006200101d8262000a36565b91506200102a8362000a36565b925082820190508082111562001045576200104462000c71565b5b92915050565b620010568162000a36565b82525050565b60006020820190506200107360008301846200104b565b92915050565b6080516136ee620010b86000396000818161098c01528181611e3e01528181611f1f01528181611f4601528181612276015261229d01526136ee6000f3fe6080604052600436106102085760003560e01c8063768dc71011610118578063ad16a0cf116100a0578063d12a76881161006f578063d12a7688146107ca578063dd62ed3e146107f5578063df8408fe14610832578063f2fde38b1461085b578063f345bd85146108845761020f565b8063ad16a0cf146106fa578063af8af69014610725578063bb85c6d114610762578063c0fdea571461079f5761020f565b806395d89b41116100e757806395d89b4114610613578063a3996f7b1461063e578063a457c2d714610655578063a9059cbb14610692578063aa4bde28146106cf5761020f565b8063768dc7101461054357806381bfdcca146105805780638c0b5e22146105bd5780638da5cb5b146105e85761020f565b8063313ce5671161019b578063527ffabd1161016a578063527ffabd1461045c578063677daa571461048757806370a08231146104c4578063715018a61461050157806375f0a874146105185761020f565b8063313ce567146103a057806333873e89146103cb57806339509351146103f457806349bd5a5e146104315761020f565b806318160ddd116101d757806318160ddd146102d25780631b56bbf9146102fd57806323b872dd1461032657806330b63d80146103635761020f565b806303fd2a451461021457806306fdde031461023f578063095ea7b31461026a5780631694505e146102a75761020f565b3661020f57005b600080fd5b34801561022057600080fd5b506102296108af565b60405161023691906123c7565b60405180910390f35b34801561024b57600080fd5b506102546108d5565b6040516102619190612472565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c91906124fb565b610967565b60405161029e9190612556565b60405180910390f35b3480156102b357600080fd5b506102bc61098a565b6040516102c991906125d0565b60405180910390f35b3480156102de57600080fd5b506102e76109ae565b6040516102f491906125fa565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f9190612615565b6109b8565b005b34801561033257600080fd5b5061034d60048036038101906103489190612642565b610af9565b60405161035a9190612556565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190612695565b610b28565b6040516103979190612556565b60405180910390f35b3480156103ac57600080fd5b506103b5610c36565b6040516103c291906126f1565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed919061270c565b610c3f565b005b34801561040057600080fd5b5061041b600480360381019061041691906124fb565b610d00565b6040516104289190612556565b60405180910390f35b34801561043d57600080fd5b50610446610d37565b60405161045391906123c7565b60405180910390f35b34801561046857600080fd5b50610471610d5d565b60405161047e91906125fa565b60405180910390f35b34801561049357600080fd5b506104ae60048036038101906104a9919061270c565b610d63565b6040516104bb9190612556565b60405180910390f35b3480156104d057600080fd5b506104eb60048036038101906104e69190612615565b610d7d565b6040516104f891906125fa565b60405180910390f35b34801561050d57600080fd5b50610516610dc5565b005b34801561052457600080fd5b5061052d610dd9565b60405161053a91906123c7565b60405180910390f35b34801561054f57600080fd5b5061056a60048036038101906105659190612615565b610dff565b6040516105779190612556565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a2919061270c565b610e1f565b6040516105b49190612556565b60405180910390f35b3480156105c957600080fd5b506105d2610e39565b6040516105df91906125fa565b60405180910390f35b3480156105f457600080fd5b506105fd610e3f565b60405161060a91906123c7565b60405180910390f35b34801561061f57600080fd5b50610628610e69565b6040516106359190612472565b60405180910390f35b34801561064a57600080fd5b50610653610efb565b005b34801561066157600080fd5b5061067c600480360381019061067791906124fb565b610f75565b6040516106899190612556565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b491906124fb565b610fec565b6040516106c69190612556565b60405180910390f35b3480156106db57600080fd5b506106e461100f565b6040516106f191906125fa565b60405180910390f35b34801561070657600080fd5b5061070f611015565b60405161071c91906125fa565b60405180910390f35b34801561073157600080fd5b5061074c60048036038101906107479190612695565b61101b565b6040516107599190612556565b60405180910390f35b34801561076e57600080fd5b5061078960048036038101906107849190612615565b61108c565b6040516107969190612556565b60405180910390f35b3480156107ab57600080fd5b506107b46111df565b6040516107c191906125fa565b60405180910390f35b3480156107d657600080fd5b506107df6111e5565b6040516107ec91906125fa565b60405180910390f35b34801561080157600080fd5b5061081c60048036038101906108179190612739565b6111eb565b60405161082991906125fa565b60405180910390f35b34801561083e57600080fd5b50610859600480360381019061085491906127a5565b611272565b005b34801561086757600080fd5b50610882600480360381019061087d9190612615565b61130e565b005b34801561089057600080fd5b50610899611391565b6040516108a691906125fa565b60405180910390f35b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600380546108e490612814565b80601f016020809104026020016040519081016040528092919081815260200182805461091090612814565b801561095d5780601f106109325761010080835404028352916020019161095d565b820191906000526020600020905b81548152906001019060200180831161094057829003601f168201915b5050505050905090565b600080610972611397565b905061097f81858561139f565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6109c0611568565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a47906128b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab6906128b7565b60405180910390fd5b7f1d288f7aba265e8b154b112bbb631ceca5df5fe93a750b2fe042fd1cc826647f81604051610aee91906123c7565b60405180910390a150565b600080610b04611397565b9050610b118582856115e6565b610b1c858585611672565b60019150509392505050565b6000610b32611568565b6062600954610b419190612935565b8310610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b79906129d8565b60405180910390fd5b6062600954610b919190612935565b8210610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc9906129d8565b60405180910390fd5b600860009054906101000a900460ff16600a610bee9190612b2b565b83610bf99190612b76565b601281905550600860009054906101000a900460ff16600a610c1b9190612b2b565b82610c269190612b76565b6013819055506001905092915050565b60006009905090565b803373ffffffffffffffffffffffffffffffffffffffff16311015610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9090612c1c565b60405180910390fd5b610cc633600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611672565b7ffdc437e62eb9f51531ba613b2a57e7f1f291a38db5f1263f0f78c3625991e5e781604051610cf591906125fa565b60405180910390a150565b600080610d0b611397565b9050610d2c818585610d1d85896111eb565b610d279190612c3c565b61139f565b600191505092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6000610d6d611568565b81600c8190555060019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dcd611568565b610dd76000611c00565b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60116020528060005260406000206000915054906101000a900460ff1681565b6000610e29611568565b81600d8190555060019050919050565b600c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e7890612814565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea490612814565b8015610ef15780601f10610ec657610100808354040283529160200191610ef1565b820191906000526020600020905b815481529060010190602001808311610ed457829003601f168201915b5050505050905090565b610f03611568565b6003600a819055506002600b81905550600860009054906101000a900460ff16600a610f2f9190612b2b565b62989681610f3d9190612b76565b600c81905550600860009054906101000a900460ff16600a610f5f9190612b2b565b62989681610f6d9190612b76565b600d81905550565b600080610f80611397565b90506000610f8e82866111eb565b905083811015610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca90612ce2565b60405180910390fd5b610fe0828686840361139f565b60019250505092915050565b600080610ff7611397565b9050611004818585611672565b600191505092915050565b600d5481565b60135481565b6000611025611568565b600a82846110339190612c3c565b1115611074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106b90612d74565b60405180910390fd5b82600a8190555081600b819055506001905092915050565b6000611096611568565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d906128b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118c906128b7565b60405180910390fd5b81600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60105481565b60125481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61127a611568565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f318c131114339c004fff0a22fcdbbc0566bb2a7cd3aa1660e636ec5a66784ff28282604051611302929190612d94565b60405180910390a15050565b611316611568565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137c90612e2f565b60405180910390fd5b61138e81611c00565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361140e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140590612ec1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361147d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147490612f53565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161155b91906125fa565b60405180910390a3505050565b611570611397565b73ffffffffffffffffffffffffffffffffffffffff1661158e610e3f565b73ffffffffffffffffffffffffffffffffffffffff16146115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db90612fbf565b60405180910390fd5b565b60006115f284846111eb565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461166c578181101561165e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116559061302b565b60405180910390fd5b61166b848484840361139f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d8906130bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611750576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117479061314f565b60405180910390fd5b8061175a84610d7d565b101561179b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611792906131e1565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806118445750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b801561185b575060148054906101000a900460ff16155b15611bef57601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146119b45760006010546118c330610d7d565b6118cd9190613201565b905060125481106118e4576118e3601254611cc6565b5b601354601054106119b2576118fa601354611d85565b6013546010600082825461190e9190613201565b925050819055506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050509050806119b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a790613281565b60405180910390fd5b505b505b6000601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611a575750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611a6457819050611bde565b600c54821115611aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa090613313565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611b5757600d54611b0a84610d7d565b83611b159190612c3c565b1115611b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4d906133a5565b60405180910390fd5b5b60006064600b5484611b699190612b76565b611b739190612935565b905060006064600a5485611b879190612b76565b611b919190612935565b90508082611b9f9190612c3c565b84611baa9190613201565b92508160106000828254611bbe9190612c3c565b92505081905550611bdb86308385611bd69190612c3c565b611ff6565b50505b611be9848483611ff6565b50611bfb565b611bfa838383611ff6565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60016014806101000a81548160ff0219169083151502179055506000600282611cef9190612935565b905060008183611cff9190613201565b90506000479050611d0f83611d85565b60008147611d1d9190613201565b9050611d298382612256565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051611d5c939291906133c5565b60405180910390a15050505060006014806101000a81548160ff02191690831515021790555050565b60016014806101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611dbc57611dbb6133fc565b5b604051908082528060200260200182016040528015611dea5781602001602082028036833780820191505090505b5090503081600081518110611e0257611e0161342b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecb919061346f565b81600181518110611edf57611ede61342b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611f44307f00000000000000000000000000000000000000000000000000000000000000008461139f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611fa6959493929190613595565b600060405180830381600087803b158015611fc057600080fd5b505af1158015611fd4573d6000803e3d6000fd5b505050505060006014806101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205c906130bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb9061314f565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561215a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612151906131e1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161224891906125fa565b60405180910390a350505050565b60016014806101000a81548160ff02191690831515021790555061229b307f00000000000000000000000000000000000000000000000000000000000000008461139f565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612322969594939291906135ef565b60606040518083038185885af1158015612340573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123659190613665565b50505060006014806101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006123b182612386565b9050919050565b6123c1816123a6565b82525050565b60006020820190506123dc60008301846123b8565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561241c578082015181840152602081019050612401565b60008484015250505050565b6000601f19601f8301169050919050565b6000612444826123e2565b61244e81856123ed565b935061245e8185602086016123fe565b61246781612428565b840191505092915050565b6000602082019050818103600083015261248c8184612439565b905092915050565b600080fd5b6124a2816123a6565b81146124ad57600080fd5b50565b6000813590506124bf81612499565b92915050565b6000819050919050565b6124d8816124c5565b81146124e357600080fd5b50565b6000813590506124f5816124cf565b92915050565b6000806040838503121561251257612511612494565b5b6000612520858286016124b0565b9250506020612531858286016124e6565b9150509250929050565b60008115159050919050565b6125508161253b565b82525050565b600060208201905061256b6000830184612547565b92915050565b6000819050919050565b600061259661259161258c84612386565b612571565b612386565b9050919050565b60006125a88261257b565b9050919050565b60006125ba8261259d565b9050919050565b6125ca816125af565b82525050565b60006020820190506125e560008301846125c1565b92915050565b6125f4816124c5565b82525050565b600060208201905061260f60008301846125eb565b92915050565b60006020828403121561262b5761262a612494565b5b6000612639848285016124b0565b91505092915050565b60008060006060848603121561265b5761265a612494565b5b6000612669868287016124b0565b935050602061267a868287016124b0565b925050604061268b868287016124e6565b9150509250925092565b600080604083850312156126ac576126ab612494565b5b60006126ba858286016124e6565b92505060206126cb858286016124e6565b9150509250929050565b600060ff82169050919050565b6126eb816126d5565b82525050565b600060208201905061270660008301846126e2565b92915050565b60006020828403121561272257612721612494565b5b6000612730848285016124e6565b91505092915050565b600080604083850312156127505761274f612494565b5b600061275e858286016124b0565b925050602061276f858286016124b0565b9150509250929050565b6127828161253b565b811461278d57600080fd5b50565b60008135905061279f81612779565b92915050565b600080604083850312156127bc576127bb612494565b5b60006127ca858286016124b0565b92505060206127db85828601612790565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061282c57607f821691505b60208210810361283f5761283e6127e5565b5b50919050565b7f4c5020506169722063616e6e6f742062652074686520446561642077616c6c6560008201527f742c206f72203021000000000000000000000000000000000000000000000000602082015250565b60006128a16028836123ed565b91506128ac82612845565b604082019050919050565b600060208201905081810360008301526128d081612894565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612940826124c5565b915061294b836124c5565b92508261295b5761295a6128d7565b5b828204905092915050565b7f43616e6e6f74206c6971756964617465206d6f7265207468616e203225206f6660008201527f2074686520737570706c79206174206f6e636521000000000000000000000000602082015250565b60006129c26034836123ed565b91506129cd82612966565b604082019050919050565b600060208201905081810360008301526129f1816129b5565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115612a4f57808604811115612a2b57612a2a612906565b5b6001851615612a3a5780820291505b8081029050612a48856129f8565b9450612a0f565b94509492505050565b600082612a685760019050612b24565b81612a765760009050612b24565b8160018114612a8c5760028114612a9657612ac5565b6001915050612b24565b60ff841115612aa857612aa7612906565b5b8360020a915084821115612abf57612abe612906565b5b50612b24565b5060208310610133831016604e8410600b8410161715612afa5782820a905083811115612af557612af4612906565b5b612b24565b612b078484846001612a05565b92509050818404811115612b1e57612b1d612906565b5b81810290505b9392505050565b6000612b36826124c5565b9150612b41836126d5565b9250612b6e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612a58565b905092915050565b6000612b81826124c5565b9150612b8c836124c5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612bc557612bc4612906565b5b828202905092915050565b7f4e6f7420656e6f75676820746f6b656e73210000000000000000000000000000600082015250565b6000612c066012836123ed565b9150612c1182612bd0565b602082019050919050565b60006020820190508181036000830152612c3581612bf9565b9050919050565b6000612c47826124c5565b9150612c52836124c5565b9250828201905080821115612c6a57612c69612906565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612ccc6025836123ed565b9150612cd782612c70565b604082019050919050565b60006020820190508181036000830152612cfb81612cbf565b9050919050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031302500000000000000000000000000000000000000602082015250565b6000612d5e602d836123ed565b9150612d6982612d02565b604082019050919050565b60006020820190508181036000830152612d8d81612d51565b9050919050565b6000604082019050612da960008301856123b8565b612db66020830184612547565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612e196026836123ed565b9150612e2482612dbd565b604082019050919050565b60006020820190508181036000830152612e4881612e0c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612eab6024836123ed565b9150612eb682612e4f565b604082019050919050565b60006020820190508181036000830152612eda81612e9e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f3d6022836123ed565b9150612f4882612ee1565b604082019050919050565b60006020820190508181036000830152612f6c81612f30565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612fa96020836123ed565b9150612fb482612f73565b602082019050919050565b60006020820190508181036000830152612fd881612f9c565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613015601d836123ed565b915061302082612fdf565b602082019050919050565b6000602082019050818103600083015261304481613008565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006130a76025836123ed565b91506130b28261304b565b604082019050919050565b600060208201905081810360008301526130d68161309a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006131396023836123ed565b9150613144826130dd565b604082019050919050565b600060208201905081810360008301526131688161312c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006131cb6026836123ed565b91506131d68261316f565b604082019050919050565b600060208201905081810360008301526131fa816131be565b9050919050565b600061320c826124c5565b9150613217836124c5565b925082820390508181111561322f5761322e612906565b5b92915050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b600061326b6012836123ed565b915061327682613235565b602082019050919050565b6000602082019050818103600083015261329a8161325e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b60006132fd6039836123ed565b9150613308826132a1565b604082019050919050565b6000602082019050818103600083015261332c816132f0565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b600061338f6036836123ed565b915061339a82613333565b604082019050919050565b600060208201905081810360008301526133be81613382565b9050919050565b60006060820190506133da60008301866125eb565b6133e760208301856125eb565b6133f460408301846125eb565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061346981612499565b92915050565b60006020828403121561348557613484612494565b5b60006134938482850161345a565b91505092915050565b6000819050919050565b60006134c16134bc6134b78461349c565b612571565b6124c5565b9050919050565b6134d1816134a6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61350c816123a6565b82525050565b600061351e8383613503565b60208301905092915050565b6000602082019050919050565b6000613542826134d7565b61354c81856134e2565b9350613557836134f3565b8060005b8381101561358857815161356f8882613512565b975061357a8361352a565b92505060018101905061355b565b5085935050505092915050565b600060a0820190506135aa60008301886125eb565b6135b760208301876134c8565b81810360408301526135c98186613537565b90506135d860608301856123b8565b6135e560808301846125eb565b9695505050505050565b600060c08201905061360460008301896123b8565b61361160208301886125eb565b61361e60408301876134c8565b61362b60608301866134c8565b61363860808301856123b8565b61364560a08301846125eb565b979650505050505050565b60008151905061365f816124cf565b92915050565b60008060006060848603121561367e5761367d612494565b5b600061368c86828701613650565b935050602061369d86828701613650565b92505060406136ae86828701613650565b915050925092509256fea26469706673582212200098f0dd2b6fa92ed5d08d92c626470d0715902408f6186aac9a9f8f514b52ab64736f6c63430008100033

Deployed Bytecode

0x6080604052600436106102085760003560e01c8063768dc71011610118578063ad16a0cf116100a0578063d12a76881161006f578063d12a7688146107ca578063dd62ed3e146107f5578063df8408fe14610832578063f2fde38b1461085b578063f345bd85146108845761020f565b8063ad16a0cf146106fa578063af8af69014610725578063bb85c6d114610762578063c0fdea571461079f5761020f565b806395d89b41116100e757806395d89b4114610613578063a3996f7b1461063e578063a457c2d714610655578063a9059cbb14610692578063aa4bde28146106cf5761020f565b8063768dc7101461054357806381bfdcca146105805780638c0b5e22146105bd5780638da5cb5b146105e85761020f565b8063313ce5671161019b578063527ffabd1161016a578063527ffabd1461045c578063677daa571461048757806370a08231146104c4578063715018a61461050157806375f0a874146105185761020f565b8063313ce567146103a057806333873e89146103cb57806339509351146103f457806349bd5a5e146104315761020f565b806318160ddd116101d757806318160ddd146102d25780631b56bbf9146102fd57806323b872dd1461032657806330b63d80146103635761020f565b806303fd2a451461021457806306fdde031461023f578063095ea7b31461026a5780631694505e146102a75761020f565b3661020f57005b600080fd5b34801561022057600080fd5b506102296108af565b60405161023691906123c7565b60405180910390f35b34801561024b57600080fd5b506102546108d5565b6040516102619190612472565b60405180910390f35b34801561027657600080fd5b50610291600480360381019061028c91906124fb565b610967565b60405161029e9190612556565b60405180910390f35b3480156102b357600080fd5b506102bc61098a565b6040516102c991906125d0565b60405180910390f35b3480156102de57600080fd5b506102e76109ae565b6040516102f491906125fa565b60405180910390f35b34801561030957600080fd5b50610324600480360381019061031f9190612615565b6109b8565b005b34801561033257600080fd5b5061034d60048036038101906103489190612642565b610af9565b60405161035a9190612556565b60405180910390f35b34801561036f57600080fd5b5061038a60048036038101906103859190612695565b610b28565b6040516103979190612556565b60405180910390f35b3480156103ac57600080fd5b506103b5610c36565b6040516103c291906126f1565b60405180910390f35b3480156103d757600080fd5b506103f260048036038101906103ed919061270c565b610c3f565b005b34801561040057600080fd5b5061041b600480360381019061041691906124fb565b610d00565b6040516104289190612556565b60405180910390f35b34801561043d57600080fd5b50610446610d37565b60405161045391906123c7565b60405180910390f35b34801561046857600080fd5b50610471610d5d565b60405161047e91906125fa565b60405180910390f35b34801561049357600080fd5b506104ae60048036038101906104a9919061270c565b610d63565b6040516104bb9190612556565b60405180910390f35b3480156104d057600080fd5b506104eb60048036038101906104e69190612615565b610d7d565b6040516104f891906125fa565b60405180910390f35b34801561050d57600080fd5b50610516610dc5565b005b34801561052457600080fd5b5061052d610dd9565b60405161053a91906123c7565b60405180910390f35b34801561054f57600080fd5b5061056a60048036038101906105659190612615565b610dff565b6040516105779190612556565b60405180910390f35b34801561058c57600080fd5b506105a760048036038101906105a2919061270c565b610e1f565b6040516105b49190612556565b60405180910390f35b3480156105c957600080fd5b506105d2610e39565b6040516105df91906125fa565b60405180910390f35b3480156105f457600080fd5b506105fd610e3f565b60405161060a91906123c7565b60405180910390f35b34801561061f57600080fd5b50610628610e69565b6040516106359190612472565b60405180910390f35b34801561064a57600080fd5b50610653610efb565b005b34801561066157600080fd5b5061067c600480360381019061067791906124fb565b610f75565b6040516106899190612556565b60405180910390f35b34801561069e57600080fd5b506106b960048036038101906106b491906124fb565b610fec565b6040516106c69190612556565b60405180910390f35b3480156106db57600080fd5b506106e461100f565b6040516106f191906125fa565b60405180910390f35b34801561070657600080fd5b5061070f611015565b60405161071c91906125fa565b60405180910390f35b34801561073157600080fd5b5061074c60048036038101906107479190612695565b61101b565b6040516107599190612556565b60405180910390f35b34801561076e57600080fd5b5061078960048036038101906107849190612615565b61108c565b6040516107969190612556565b60405180910390f35b3480156107ab57600080fd5b506107b46111df565b6040516107c191906125fa565b60405180910390f35b3480156107d657600080fd5b506107df6111e5565b6040516107ec91906125fa565b60405180910390f35b34801561080157600080fd5b5061081c60048036038101906108179190612739565b6111eb565b60405161082991906125fa565b60405180910390f35b34801561083e57600080fd5b50610859600480360381019061085491906127a5565b611272565b005b34801561086757600080fd5b50610882600480360381019061087d9190612615565b61130e565b005b34801561089057600080fd5b50610899611391565b6040516108a691906125fa565b60405180910390f35b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600380546108e490612814565b80601f016020809104026020016040519081016040528092919081815260200182805461091090612814565b801561095d5780601f106109325761010080835404028352916020019161095d565b820191906000526020600020905b81548152906001019060200180831161094057829003601f168201915b5050505050905090565b600080610972611397565b905061097f81858561139f565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6109c0611568565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a47906128b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610abf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab6906128b7565b60405180910390fd5b7f1d288f7aba265e8b154b112bbb631ceca5df5fe93a750b2fe042fd1cc826647f81604051610aee91906123c7565b60405180910390a150565b600080610b04611397565b9050610b118582856115e6565b610b1c858585611672565b60019150509392505050565b6000610b32611568565b6062600954610b419190612935565b8310610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b79906129d8565b60405180910390fd5b6062600954610b919190612935565b8210610bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc9906129d8565b60405180910390fd5b600860009054906101000a900460ff16600a610bee9190612b2b565b83610bf99190612b76565b601281905550600860009054906101000a900460ff16600a610c1b9190612b2b565b82610c269190612b76565b6013819055506001905092915050565b60006009905090565b803373ffffffffffffffffffffffffffffffffffffffff16311015610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9090612c1c565b60405180910390fd5b610cc633600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683611672565b7ffdc437e62eb9f51531ba613b2a57e7f1f291a38db5f1263f0f78c3625991e5e781604051610cf591906125fa565b60405180910390a150565b600080610d0b611397565b9050610d2c818585610d1d85896111eb565b610d279190612c3c565b61139f565b600191505092915050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5481565b6000610d6d611568565b81600c8190555060019050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610dcd611568565b610dd76000611c00565b565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60116020528060005260406000206000915054906101000a900460ff1681565b6000610e29611568565b81600d8190555060019050919050565b600c5481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610e7890612814565b80601f0160208091040260200160405190810160405280929190818152602001828054610ea490612814565b8015610ef15780601f10610ec657610100808354040283529160200191610ef1565b820191906000526020600020905b815481529060010190602001808311610ed457829003601f168201915b5050505050905090565b610f03611568565b6003600a819055506002600b81905550600860009054906101000a900460ff16600a610f2f9190612b2b565b62989681610f3d9190612b76565b600c81905550600860009054906101000a900460ff16600a610f5f9190612b2b565b62989681610f6d9190612b76565b600d81905550565b600080610f80611397565b90506000610f8e82866111eb565b905083811015610fd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fca90612ce2565b60405180910390fd5b610fe0828686840361139f565b60019250505092915050565b600080610ff7611397565b9050611004818585611672565b600191505092915050565b600d5481565b60135481565b6000611025611568565b600a82846110339190612c3c565b1115611074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106b90612d74565b60405180910390fd5b82600a8190555081600b819055506001905092915050565b6000611096611568565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d906128b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611195576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118c906128b7565b60405180910390fd5b81600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b60105481565b60125481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61127a611568565b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f318c131114339c004fff0a22fcdbbc0566bb2a7cd3aa1660e636ec5a66784ff28282604051611302929190612d94565b60405180910390a15050565b611316611568565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611385576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137c90612e2f565b60405180910390fd5b61138e81611c00565b50565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361140e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140590612ec1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361147d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147490612f53565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161155b91906125fa565b60405180910390a3505050565b611570611397565b73ffffffffffffffffffffffffffffffffffffffff1661158e610e3f565b73ffffffffffffffffffffffffffffffffffffffff16146115e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115db90612fbf565b60405180910390fd5b565b60006115f284846111eb565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461166c578181101561165e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116559061302b565b60405180910390fd5b61166b848484840361139f565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036116e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d8906130bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611750576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117479061314f565b60405180910390fd5b8061175a84610d7d565b101561179b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611792906131e1565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806118445750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b801561185b575060148054906101000a900460ff16155b15611bef57601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146119b45760006010546118c330610d7d565b6118cd9190613201565b905060125481106118e4576118e3601254611cc6565b5b601354601054106119b2576118fa601354611d85565b6013546010600082825461190e9190613201565b925050819055506000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050509050806119b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a790613281565b60405180910390fd5b505b505b6000601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680611a575750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15611a6457819050611bde565b600c54821115611aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa090613313565b60405180910390fd5b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611b5757600d54611b0a84610d7d565b83611b159190612c3c565b1115611b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4d906133a5565b60405180910390fd5b5b60006064600b5484611b699190612b76565b611b739190612935565b905060006064600a5485611b879190612b76565b611b919190612935565b90508082611b9f9190612c3c565b84611baa9190613201565b92508160106000828254611bbe9190612c3c565b92505081905550611bdb86308385611bd69190612c3c565b611ff6565b50505b611be9848483611ff6565b50611bfb565b611bfa838383611ff6565b5b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60016014806101000a81548160ff0219169083151502179055506000600282611cef9190612935565b905060008183611cff9190613201565b90506000479050611d0f83611d85565b60008147611d1d9190613201565b9050611d298382612256565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051611d5c939291906133c5565b60405180910390a15050505060006014806101000a81548160ff02191690831515021790555050565b60016014806101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115611dbc57611dbb6133fc565b5b604051908082528060200260200182016040528015611dea5781602001602082028036833780820191505090505b5090503081600081518110611e0257611e0161342b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ecb919061346f565b81600181518110611edf57611ede61342b565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050611f44307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461139f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401611fa6959493929190613595565b600060405180830381600087803b158015611fc057600080fd5b505af1158015611fd4573d6000803e3d6000fd5b505050505060006014806101000a81548160ff02191690831515021790555050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612065576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161205c906130bd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cb9061314f565b60405180910390fd5b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561215a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612151906131e1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161224891906125fa565b60405180910390a350505050565b60016014806101000a81548160ff02191690831515021790555061229b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461139f565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401612322969594939291906135ef565b60606040518083038185885af1158015612340573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906123659190613665565b50505060006014806101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006123b182612386565b9050919050565b6123c1816123a6565b82525050565b60006020820190506123dc60008301846123b8565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561241c578082015181840152602081019050612401565b60008484015250505050565b6000601f19601f8301169050919050565b6000612444826123e2565b61244e81856123ed565b935061245e8185602086016123fe565b61246781612428565b840191505092915050565b6000602082019050818103600083015261248c8184612439565b905092915050565b600080fd5b6124a2816123a6565b81146124ad57600080fd5b50565b6000813590506124bf81612499565b92915050565b6000819050919050565b6124d8816124c5565b81146124e357600080fd5b50565b6000813590506124f5816124cf565b92915050565b6000806040838503121561251257612511612494565b5b6000612520858286016124b0565b9250506020612531858286016124e6565b9150509250929050565b60008115159050919050565b6125508161253b565b82525050565b600060208201905061256b6000830184612547565b92915050565b6000819050919050565b600061259661259161258c84612386565b612571565b612386565b9050919050565b60006125a88261257b565b9050919050565b60006125ba8261259d565b9050919050565b6125ca816125af565b82525050565b60006020820190506125e560008301846125c1565b92915050565b6125f4816124c5565b82525050565b600060208201905061260f60008301846125eb565b92915050565b60006020828403121561262b5761262a612494565b5b6000612639848285016124b0565b91505092915050565b60008060006060848603121561265b5761265a612494565b5b6000612669868287016124b0565b935050602061267a868287016124b0565b925050604061268b868287016124e6565b9150509250925092565b600080604083850312156126ac576126ab612494565b5b60006126ba858286016124e6565b92505060206126cb858286016124e6565b9150509250929050565b600060ff82169050919050565b6126eb816126d5565b82525050565b600060208201905061270660008301846126e2565b92915050565b60006020828403121561272257612721612494565b5b6000612730848285016124e6565b91505092915050565b600080604083850312156127505761274f612494565b5b600061275e858286016124b0565b925050602061276f858286016124b0565b9150509250929050565b6127828161253b565b811461278d57600080fd5b50565b60008135905061279f81612779565b92915050565b600080604083850312156127bc576127bb612494565b5b60006127ca858286016124b0565b92505060206127db85828601612790565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061282c57607f821691505b60208210810361283f5761283e6127e5565b5b50919050565b7f4c5020506169722063616e6e6f742062652074686520446561642077616c6c6560008201527f742c206f72203021000000000000000000000000000000000000000000000000602082015250565b60006128a16028836123ed565b91506128ac82612845565b604082019050919050565b600060208201905081810360008301526128d081612894565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612940826124c5565b915061294b836124c5565b92508261295b5761295a6128d7565b5b828204905092915050565b7f43616e6e6f74206c6971756964617465206d6f7265207468616e203225206f6660008201527f2074686520737570706c79206174206f6e636521000000000000000000000000602082015250565b60006129c26034836123ed565b91506129cd82612966565b604082019050919050565b600060208201905081810360008301526129f1816129b5565b9050919050565b60008160011c9050919050565b6000808291508390505b6001851115612a4f57808604811115612a2b57612a2a612906565b5b6001851615612a3a5780820291505b8081029050612a48856129f8565b9450612a0f565b94509492505050565b600082612a685760019050612b24565b81612a765760009050612b24565b8160018114612a8c5760028114612a9657612ac5565b6001915050612b24565b60ff841115612aa857612aa7612906565b5b8360020a915084821115612abf57612abe612906565b5b50612b24565b5060208310610133831016604e8410600b8410161715612afa5782820a905083811115612af557612af4612906565b5b612b24565b612b078484846001612a05565b92509050818404811115612b1e57612b1d612906565b5b81810290505b9392505050565b6000612b36826124c5565b9150612b41836126d5565b9250612b6e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484612a58565b905092915050565b6000612b81826124c5565b9150612b8c836124c5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615612bc557612bc4612906565b5b828202905092915050565b7f4e6f7420656e6f75676820746f6b656e73210000000000000000000000000000600082015250565b6000612c066012836123ed565b9150612c1182612bd0565b602082019050919050565b60006020820190508181036000830152612c3581612bf9565b9050919050565b6000612c47826124c5565b9150612c52836124c5565b9250828201905080821115612c6a57612c69612906565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000612ccc6025836123ed565b9150612cd782612c70565b604082019050919050565b60006020820190508181036000830152612cfb81612cbf565b9050919050565b7f45524332303a20746f74616c20746178206d757374206e6f742062652067726560008201527f61746572207468616e2031302500000000000000000000000000000000000000602082015250565b6000612d5e602d836123ed565b9150612d6982612d02565b604082019050919050565b60006020820190508181036000830152612d8d81612d51565b9050919050565b6000604082019050612da960008301856123b8565b612db66020830184612547565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612e196026836123ed565b9150612e2482612dbd565b604082019050919050565b60006020820190508181036000830152612e4881612e0c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000612eab6024836123ed565b9150612eb682612e4f565b604082019050919050565b60006020820190508181036000830152612eda81612e9e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f3d6022836123ed565b9150612f4882612ee1565b604082019050919050565b60006020820190508181036000830152612f6c81612f30565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000612fa96020836123ed565b9150612fb482612f73565b602082019050919050565b60006020820190508181036000830152612fd881612f9c565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613015601d836123ed565b915061302082612fdf565b602082019050919050565b6000602082019050818103600083015261304481613008565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006130a76025836123ed565b91506130b28261304b565b604082019050919050565b600060208201905081810360008301526130d68161309a565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006131396023836123ed565b9150613144826130dd565b604082019050919050565b600060208201905081810360008301526131688161312c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006131cb6026836123ed565b91506131d68261316f565b604082019050919050565b600060208201905081810360008301526131fa816131be565b9050919050565b600061320c826124c5565b9150613217836124c5565b925082820390508181111561322f5761322e612906565b5b92915050565b7f4661696c656420746f2073656e64204554480000000000000000000000000000600082015250565b600061326b6012836123ed565b915061327682613235565b602082019050919050565b6000602082019050818103600083015261329a8161325e565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b60006132fd6039836123ed565b9150613308826132a1565b604082019050919050565b6000602082019050818103600083015261332c816132f0565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b600061338f6036836123ed565b915061339a82613333565b604082019050919050565b600060208201905081810360008301526133be81613382565b9050919050565b60006060820190506133da60008301866125eb565b6133e760208301856125eb565b6133f460408301846125eb565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061346981612499565b92915050565b60006020828403121561348557613484612494565b5b60006134938482850161345a565b91505092915050565b6000819050919050565b60006134c16134bc6134b78461349c565b612571565b6124c5565b9050919050565b6134d1816134a6565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61350c816123a6565b82525050565b600061351e8383613503565b60208301905092915050565b6000602082019050919050565b6000613542826134d7565b61354c81856134e2565b9350613557836134f3565b8060005b8381101561358857815161356f8882613512565b975061357a8361352a565b92505060018101905061355b565b5085935050505092915050565b600060a0820190506135aa60008301886125eb565b6135b760208301876134c8565b81810360408301526135c98186613537565b90506135d860608301856123b8565b6135e560808301846125eb565b9695505050505050565b600060c08201905061360460008301896123b8565b61361160208301886125eb565b61361e60408301876134c8565b61362b60608301866134c8565b61363860808301856123b8565b61364560a08301846125eb565b979650505050505050565b60008151905061365f816124cf565b92915050565b60008060006060848603121561367e5761367d612494565b5b600061368c86828701613650565b935050602061369d86828701613650565b92505060406136ae86828701613650565b915050925092509256fea26469706673582212200098f0dd2b6fa92ed5d08d92c626470d0715902408f6186aac9a9f8f514b52ab64736f6c63430008100033

Deployed Bytecode Sourcemap

30679:9081:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31274:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20397:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22671:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32183:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21535:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33455:291;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23495:297;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38722:602;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21378:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31980:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25211:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32241:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30972:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39332:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20562:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17656:103;;;;;;;;;;;;;:::i;:::-;;31192:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31389:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39522:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31068:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17008:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20221:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31594:211;;;;;;;;;;;;;:::i;:::-;;24295:507;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22115:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31128:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31522:63;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38323:391;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37965:350;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31345:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31446:69;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21708:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36376:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17914:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30876:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31274:64;;;;;;;;;;;;;:::o;20397:102::-;20453:13;20486:5;20479:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20397:102;:::o;22671:244::-;22792:4;22814:13;22830:12;:10;:12::i;:::-;22814:28;;22853:32;22862:5;22869:7;22878:6;22853:8;:32::i;:::-;22903:4;22896:11;;;22671:244;;;;:::o;32183:51::-;;;:::o;21535:110::-;21598:7;21625:12;;21618:19;;21535:110;:::o;33455:291::-;16894:13;:11;:13::i;:::-;33537:4:::1;;;;;;;;;;;33528:13;;:5;:13;;::::0;33520:66:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33622:1;33605:19;;:5;:19;;::::0;33597:72:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;33720:18;33732:5;33720:18;;;;;;:::i;:::-;;;;;;;;33455:291:::0;:::o;23495:297::-;23628:4;23645:15;23663:12;:10;:12::i;:::-;23645:30;;23686:38;23702:4;23708:7;23717:6;23686:15;:38::i;:::-;23735:27;23745:4;23751:2;23755:6;23735:9;:27::i;:::-;23780:4;23773:11;;;23495:297;;;;;:::o;38722:602::-;38879:4;16894:13;:11;:13::i;:::-;38952:2:::1;38942:7;;:12;;;;:::i;:::-;38909:30;:45;38901:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;39067:2;39057:7;;:12;;;;:::i;:::-;39030:24;:39;39022:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;39206:9;;;;;;;;;;;39202:2;:13;;;;:::i;:::-;39169:30;:46;;;;:::i;:::-;39137:29;:78;;;;39283:9;;;;;;;;;;;39279:2;:13;;;;:::i;:::-;39252:24;:40;;;;:::i;:::-;39226:23;:66;;;;39312:4;39305:11;;38722:602:::0;;;;:::o;21378:92::-;21436:5;21461:1;21454:8;;21378:92;:::o;31980:195::-;32062:6;32040:10;:18;;;:28;;32032:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;32102:35;32112:10;32124:4;;;;;;;;;;;32130:6;32102:9;:35::i;:::-;32153:14;32160:6;32153:14;;;;;;:::i;:::-;;;;;;;;31980:195;:::o;25211:272::-;25328:4;25350:13;25366:12;:10;:12::i;:::-;25350:28;;25389:64;25398:5;25405:7;25442:10;25414:25;25424:5;25431:7;25414:9;:25::i;:::-;:38;;;;:::i;:::-;25389:8;:64::i;:::-;25471:4;25464:11;;;25211:272;;;;:::o;32241:28::-;;;;;;;;;;;;;:::o;30972:35::-;;;;:::o;39332:182::-;39434:4;16894:13;:11;:13::i;:::-;39470:12:::1;39456:11;:26;;;;39502:4;39495:11;;39332:182:::0;;;:::o;20562:177::-;20681:7;20713:9;:18;20723:7;20713:18;;;;;;;;;;;;;;;;20706:25;;20562:177;;;:::o;17656:103::-;16894:13;:11;:13::i;:::-;17721:30:::1;17748:1;17721:18;:30::i;:::-;17656:103::o:0;31192:75::-;;;;;;;;;;;;;:::o;31389:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;39522:198::-;39632:4;16894:13;:11;:13::i;:::-;39672:16:::1;39654:15;:34;;;;39708:4;39701:11;;39522:198:::0;;;:::o;31068:53::-;;;;:::o;17008:87::-;17054:7;17081:6;;;;;;;;;;;17074:13;;17008:87;:::o;20221:106::-;20279:13;20312:7;20305:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20221:106;:::o;31594:211::-;16894:13;:11;:13::i;:::-;31664:1:::1;31646:15;:19;;;;31694:1;31676:15;:19;;;;31735:9;;;;;;;;;;;31731:2;:13;;;;:::i;:::-;31720:8;:24;;;;:::i;:::-;31706:11;:38;;;;31788:9;;;;;;;;;;;31784:2;:13;;;;:::i;:::-;31773:8;:24;;;;:::i;:::-;31755:15;:42;;;;31594:211::o:0;24295:507::-;24417:4;24439:13;24455:12;:10;:12::i;:::-;24439:28;;24478:24;24505:25;24515:5;24522:7;24505:9;:25::i;:::-;24478:52;;24583:15;24563:16;:35;;24541:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;24699:60;24708:5;24715:7;24743:15;24724:16;:34;24699:8;:60::i;:::-;24790:4;24783:11;;;;24295:507;;;;:::o;22115:236::-;22232:4;22254:13;22270:12;:10;:12::i;:::-;22254:28;;22293;22303:5;22310:2;22314:6;22293:9;:28::i;:::-;22339:4;22332:11;;;22115:236;;;;:::o;31128:57::-;;;;:::o;31522:63::-;;;;:::o;38323:391::-;38471:4;16894:13;:11;:13::i;:::-;38540:2:::1;38519:16;38502;:33;;;;:::i;:::-;38501:41;;38493:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;38621:16;38603:15;:34;;;;38666:16;38648:15;:34;;;;38702:4;38695:11;;38323:391:::0;;;;:::o;37965:350::-;38068:4;16894:13;:11;:13::i;:::-;38111:4:::1;;;;;;;;;;;38098:17;;:9;:17;;::::0;38090:70:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38200:1;38179:23;;:9;:23;;::::0;38171:76:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38276:9;38258:15;;:27;;;;;;;;;;;;;;;;;;38303:4;38296:11;;37965:350:::0;;;:::o;31345:37::-;;;;:::o;31446:69::-;;;;:::o;21708:201::-;21842:7;21874:11;:18;21886:5;21874:18;;;;;;;;;;;;;;;:27;21893:7;21874:27;;;;;;;;;;;;;;;;21867:34;;21708:201;;;;:::o;36376:189::-;16894:13;:11;:13::i;:::-;36493:7:::1;36462:18;:28;36481:8;36462:28;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;36516:41;36539:8;36549:7;36516:41;;;;;;;:::i;:::-;;;;;;;;36376:189:::0;;:::o;17914:238::-;16894:13;:11;:13::i;:::-;18037:1:::1;18017:22;;:8;:22;;::::0;17995:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18116:28;18135:8;18116:18;:28::i;:::-;17914:238:::0;:::o;30876:35::-;;;;:::o;15801:98::-;15854:7;15881:10;15874:17;;15801:98;:::o;27518:380::-;27671:1;27654:19;;:5;:19;;;27646:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27752:1;27733:21;;:7;:21;;;27725:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27836:6;27806:11;:18;27818:5;27806:18;;;;;;;;;;;;;;;:27;27825:7;27806:27;;;;;;;;;;;;;;;:36;;;;27874:7;27858:32;;27867:5;27858:32;;;27883:6;27858:32;;;;;;:::i;:::-;;;;;;;;27518:380;;;:::o;17173:132::-;17248:12;:10;:12::i;:::-;17237:23;;:7;:5;:7::i;:::-;:23;;;17229:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17173:132::o;28189:502::-;28324:24;28351:25;28361:5;28368:7;28351:9;:25::i;:::-;28324:52;;28411:17;28391:16;:37;28387:297;;28491:6;28471:16;:26;;28445:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;28606:51;28615:5;28622:7;28650:6;28631:16;:25;28606:8;:51::i;:::-;28387:297;28313:378;28189:502;;;:::o;34224:2144::-;34338:1;34322:18;;:4;:18;;;34314:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34415:1;34401:16;;:2;:16;;;34393:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34495:6;34476:15;34486:4;34476:9;:15::i;:::-;:25;;34468:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;34570:13;;;;;;;;;;;34562:21;;:4;:21;;;:44;;;;34593:13;;;;;;;;;;;34587:19;;:2;:19;;;34562:44;34561:67;;;;;34612:16;;;;;;;;;;34611:17;34561:67;34557:1804;;;34657:13;;;;;;;;;;;34649:21;;:4;:21;;;34645:681;;34691:32;34753:18;;34726:24;34744:4;34726:9;:24::i;:::-;:45;;;;:::i;:::-;34691:80;;34822:29;;34794:24;:57;34790:152;;34876:46;34892:29;;34876:15;:46::i;:::-;34790:152;34988:23;;34965:18;;34964:47;34960:351;;35036:42;35054:23;;35036:17;:42::i;:::-;35123:23;;35101:18;;:45;;;;;;;:::i;:::-;;;;;;;;35169:9;35189:15;;;;;;;;;;;35181:29;;:52;35211:21;35181:52;;;;;;;;;;;;;;;;;;;;;;;35169:64;;35264:4;35256:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;35013:298;34960:351;34672:654;34645:681;35342:22;35383:18;:24;35402:4;35383:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;35411:18;:22;35430:2;35411:22;;;;;;;;;;;;;;;;;;;;;;;;;35383:50;35379:839;;;35471:6;35454:23;;35379:839;;;35550:11;;35540:6;:21;;35532:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;35653:13;;;;;;;;;;;35645:21;;:4;:21;;;35642:178;;35726:15;;35708:13;35718:2;35708:9;:13::i;:::-;35699:6;:22;;;;:::i;:::-;35698:43;;35690:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;35642:178;35840:22;35895:3;35876:15;;35867:6;:24;;;;:::i;:::-;35866:32;;;;:::i;:::-;35840:59;;35918:22;35973:3;35954:15;;35945:6;:24;;;;:::i;:::-;35944:32;;;;:::i;:::-;35918:59;;36040:14;36023;:31;;;;:::i;:::-;36013:6;:42;;;;:::i;:::-;35996:59;;36096:14;36074:18;;:36;;;;;;;:::i;:::-;;;;;;;;36131:71;36147:4;36161;36186:14;36169;:31;;;;:::i;:::-;36131:15;:71::i;:::-;35513:705;;35379:839;36232:41;36248:4;36254:2;36258:14;36232:15;:41::i;:::-;34630:1655;34557:1804;;;36316:33;36332:4;36338:2;36342:6;36316:15;:33::i;:::-;34557:1804;34224:2144;;;:::o;18312:191::-;18386:16;18405:6;;;;;;;;;;;18386:25;;18431:8;18422:6;;:17;;;;;;;;;;;;;;;;;;18486:8;18455:40;;18476:8;18455:40;;;;;;;;;;;;18375:128;18312:191;:::o;36573:474::-;32500:4;32481:16;;:23;;;;;;;;;;;;;;;;;;36659:12:::1;36698:1;36675:20;:24;;;;:::i;:::-;36659:41;;36711:17;36755:4;36732:20;:27;;;;:::i;:::-;36711:49;;36773:22;36798:21;36773:46;;36832:23;36850:4;36832:17;:23::i;:::-;36868:18;36914:14;36890:21;:38;;;;:::i;:::-;36868:61;;36942:36;36956:9;36967:10;36942:13;:36::i;:::-;36996:43;37011:4;37017:10;37029:9;36996:43;;;;;;;;:::i;:::-;;;;;;;;36648:399;;;;32546:5:::0;32527:16;;:24;;;;;;;;;;;;;;;;;;36573:474;:::o;37055:488::-;32500:4;32481:16;;:23;;;;;;;;;;;;;;;;;;37134:21:::1;37172:1;37158:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37134:40;;37203:4;37185;37190:1;37185:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;37229:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37219:4;37224:1;37219:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;37264:62;37281:4;37296:15;37314:11;37264:8;:62::i;:::-;37339:15;:66;;;37420:11;37446:1;37462:4;37489;37509:15;37339:196;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;37123:420;32546:5:::0;32527:16;;:24;;;;;;;;;;;;;;;;;;37055:488;:::o;28699:776::-;28846:1;28830:18;;:4;:18;;;28822:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28923:1;28909:16;;:2;:16;;;28901:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;28978:19;29000:9;:15;29010:4;29000:15;;;;;;;;;;;;;;;;28978:37;;29063:6;29048:11;:21;;29026:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;29203:6;29189:11;:20;29171:9;:15;29181:4;29171:15;;;;;;;;;;;;;;;:38;;;;29406:6;29389:9;:13;29399:2;29389:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;29456:2;29441:26;;29450:4;29441:26;;;29460:6;29441:26;;;;;;:::i;:::-;;;;;;;;28811:664;28699:776;;;:::o;37551:406::-;32500:4;32481:16;;:23;;;;;;;;;;;;;;;;;;37668:62:::1;37685:4;37700:15;37718:11;37668:8;:62::i;:::-;37743:15;:31;;;37782:9;37815:4;37835:11;37861:1;37877::::0;37893:15:::1;;;;;;;;;;;37923;37743:206;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32546:5:::0;32527:16;;:24;;;;;;;;;;;;;;;;;;37551:406;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:246::-;954:1;964:113;978:6;975:1;972:13;964:113;;;1063:1;1058:3;1054:11;1048:18;1044:1;1039:3;1035:11;1028:39;1000:2;997:1;993:10;988:15;;964:113;;;1111:1;1102:6;1097:3;1093:16;1086:27;935:184;873:246;;;:::o;1125:102::-;1166:6;1217:2;1213:7;1208:2;1201:5;1197:14;1193:28;1183:38;;1125:102;;;:::o;1233:377::-;1321:3;1349:39;1382:5;1349:39;:::i;:::-;1404:71;1468:6;1463:3;1404:71;:::i;:::-;1397:78;;1484:65;1542:6;1537:3;1530:4;1523:5;1519:16;1484:65;:::i;:::-;1574:29;1596:6;1574:29;:::i;:::-;1569:3;1565:39;1558:46;;1325:285;1233:377;;;;:::o;1616:313::-;1729:4;1767:2;1756:9;1752:18;1744:26;;1816:9;1810:4;1806:20;1802:1;1791:9;1787:17;1780:47;1844:78;1917:4;1908:6;1844:78;:::i;:::-;1836:86;;1616:313;;;;:::o;2016:117::-;2125:1;2122;2115:12;2262:122;2335:24;2353:5;2335:24;:::i;:::-;2328:5;2325:35;2315:63;;2374:1;2371;2364:12;2315:63;2262:122;:::o;2390:139::-;2436:5;2474:6;2461:20;2452:29;;2490:33;2517:5;2490:33;:::i;:::-;2390:139;;;;:::o;2535:77::-;2572:7;2601:5;2590:16;;2535:77;;;:::o;2618:122::-;2691:24;2709:5;2691:24;:::i;:::-;2684:5;2681:35;2671:63;;2730:1;2727;2720:12;2671:63;2618:122;:::o;2746:139::-;2792:5;2830:6;2817:20;2808:29;;2846:33;2873:5;2846:33;:::i;:::-;2746:139;;;;:::o;2891:474::-;2959:6;2967;3016:2;3004:9;2995:7;2991:23;2987:32;2984:119;;;3022:79;;:::i;:::-;2984:119;3142:1;3167:53;3212:7;3203:6;3192:9;3188:22;3167:53;:::i;:::-;3157:63;;3113:117;3269:2;3295:53;3340:7;3331:6;3320:9;3316:22;3295:53;:::i;:::-;3285:63;;3240:118;2891:474;;;;;:::o;3371:90::-;3405:7;3448:5;3441:13;3434:21;3423:32;;3371:90;;;:::o;3467:109::-;3548:21;3563:5;3548:21;:::i;:::-;3543:3;3536:34;3467:109;;:::o;3582:210::-;3669:4;3707:2;3696:9;3692:18;3684:26;;3720:65;3782:1;3771:9;3767:17;3758:6;3720:65;:::i;:::-;3582:210;;;;:::o;3798:60::-;3826:3;3847:5;3840:12;;3798:60;;;:::o;3864:142::-;3914:9;3947:53;3965:34;3974:24;3992:5;3974:24;:::i;:::-;3965:34;:::i;:::-;3947:53;:::i;:::-;3934:66;;3864:142;;;:::o;4012:126::-;4062:9;4095:37;4126:5;4095:37;:::i;:::-;4082:50;;4012:126;;;:::o;4144:152::-;4220:9;4253:37;4284:5;4253:37;:::i;:::-;4240:50;;4144:152;;;:::o;4302:183::-;4415:63;4472:5;4415:63;:::i;:::-;4410:3;4403:76;4302:183;;:::o;4491:274::-;4610:4;4648:2;4637:9;4633:18;4625:26;;4661:97;4755:1;4744:9;4740:17;4731:6;4661:97;:::i;:::-;4491:274;;;;:::o;4771:118::-;4858:24;4876:5;4858:24;:::i;:::-;4853:3;4846:37;4771:118;;:::o;4895:222::-;4988:4;5026:2;5015:9;5011:18;5003:26;;5039:71;5107:1;5096:9;5092:17;5083:6;5039:71;:::i;:::-;4895:222;;;;:::o;5123:329::-;5182:6;5231:2;5219:9;5210:7;5206:23;5202:32;5199:119;;;5237:79;;:::i;:::-;5199:119;5357:1;5382:53;5427:7;5418:6;5407:9;5403:22;5382:53;:::i;:::-;5372:63;;5328:117;5123:329;;;;:::o;5458:619::-;5535:6;5543;5551;5600:2;5588:9;5579:7;5575:23;5571:32;5568:119;;;5606:79;;:::i;:::-;5568:119;5726:1;5751:53;5796:7;5787:6;5776:9;5772:22;5751:53;:::i;:::-;5741:63;;5697:117;5853:2;5879:53;5924:7;5915:6;5904:9;5900:22;5879:53;:::i;:::-;5869:63;;5824:118;5981:2;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5952:118;5458:619;;;;;:::o;6083:474::-;6151:6;6159;6208:2;6196:9;6187:7;6183:23;6179:32;6176:119;;;6214:79;;:::i;:::-;6176:119;6334:1;6359:53;6404:7;6395:6;6384:9;6380:22;6359:53;:::i;:::-;6349:63;;6305:117;6461:2;6487:53;6532:7;6523:6;6512:9;6508:22;6487:53;:::i;:::-;6477:63;;6432:118;6083:474;;;;;:::o;6563:86::-;6598:7;6638:4;6631:5;6627:16;6616:27;;6563:86;;;:::o;6655:112::-;6738:22;6754:5;6738:22;:::i;:::-;6733:3;6726:35;6655:112;;:::o;6773:214::-;6862:4;6900:2;6889:9;6885:18;6877:26;;6913:67;6977:1;6966:9;6962:17;6953:6;6913:67;:::i;:::-;6773:214;;;;:::o;6993:329::-;7052:6;7101:2;7089:9;7080:7;7076:23;7072:32;7069:119;;;7107:79;;:::i;:::-;7069:119;7227:1;7252:53;7297:7;7288:6;7277:9;7273:22;7252:53;:::i;:::-;7242:63;;7198:117;6993:329;;;;:::o;7328:474::-;7396:6;7404;7453:2;7441:9;7432:7;7428:23;7424:32;7421:119;;;7459:79;;:::i;:::-;7421:119;7579:1;7604:53;7649:7;7640:6;7629:9;7625:22;7604:53;:::i;:::-;7594:63;;7550:117;7706:2;7732:53;7777:7;7768:6;7757:9;7753:22;7732:53;:::i;:::-;7722:63;;7677:118;7328:474;;;;;:::o;7808:116::-;7878:21;7893:5;7878:21;:::i;:::-;7871:5;7868:32;7858:60;;7914:1;7911;7904:12;7858:60;7808:116;:::o;7930:133::-;7973:5;8011:6;7998:20;7989:29;;8027:30;8051:5;8027:30;:::i;:::-;7930:133;;;;:::o;8069:468::-;8134:6;8142;8191:2;8179:9;8170:7;8166:23;8162:32;8159:119;;;8197:79;;:::i;:::-;8159:119;8317:1;8342:53;8387:7;8378:6;8367:9;8363:22;8342:53;:::i;:::-;8332:63;;8288:117;8444:2;8470:50;8512:7;8503:6;8492:9;8488:22;8470:50;:::i;:::-;8460:60;;8415:115;8069:468;;;;;:::o;8543:180::-;8591:77;8588:1;8581:88;8688:4;8685:1;8678:15;8712:4;8709:1;8702:15;8729:320;8773:6;8810:1;8804:4;8800:12;8790:22;;8857:1;8851:4;8847:12;8878:18;8868:81;;8934:4;8926:6;8922:17;8912:27;;8868:81;8996:2;8988:6;8985:14;8965:18;8962:38;8959:84;;9015:18;;:::i;:::-;8959:84;8780:269;8729:320;;;:::o;9055:227::-;9195:34;9191:1;9183:6;9179:14;9172:58;9264:10;9259:2;9251:6;9247:15;9240:35;9055:227;:::o;9288:366::-;9430:3;9451:67;9515:2;9510:3;9451:67;:::i;:::-;9444:74;;9527:93;9616:3;9527:93;:::i;:::-;9645:2;9640:3;9636:12;9629:19;;9288:366;;;:::o;9660:419::-;9826:4;9864:2;9853:9;9849:18;9841:26;;9913:9;9907:4;9903:20;9899:1;9888:9;9884:17;9877:47;9941:131;10067:4;9941:131;:::i;:::-;9933:139;;9660:419;;;:::o;10085:180::-;10133:77;10130:1;10123:88;10230:4;10227:1;10220:15;10254:4;10251:1;10244:15;10271:180;10319:77;10316:1;10309:88;10416:4;10413:1;10406:15;10440:4;10437:1;10430:15;10457:185;10497:1;10514:20;10532:1;10514:20;:::i;:::-;10509:25;;10548:20;10566:1;10548:20;:::i;:::-;10543:25;;10587:1;10577:35;;10592:18;;:::i;:::-;10577:35;10634:1;10631;10627:9;10622:14;;10457:185;;;;:::o;10648:239::-;10788:34;10784:1;10776:6;10772:14;10765:58;10857:22;10852:2;10844:6;10840:15;10833:47;10648:239;:::o;10893:366::-;11035:3;11056:67;11120:2;11115:3;11056:67;:::i;:::-;11049:74;;11132:93;11221:3;11132:93;:::i;:::-;11250:2;11245:3;11241:12;11234:19;;10893:366;;;:::o;11265:419::-;11431:4;11469:2;11458:9;11454:18;11446:26;;11518:9;11512:4;11508:20;11504:1;11493:9;11489:17;11482:47;11546:131;11672:4;11546:131;:::i;:::-;11538:139;;11265:419;;;:::o;11690:102::-;11732:8;11779:5;11776:1;11772:13;11751:34;;11690:102;;;:::o;11798:848::-;11859:5;11866:4;11890:6;11881:15;;11914:5;11905:14;;11928:712;11949:1;11939:8;11936:15;11928:712;;;12044:4;12039:3;12035:14;12029:4;12026:24;12023:50;;;12053:18;;:::i;:::-;12023:50;12103:1;12093:8;12089:16;12086:451;;;12518:4;12511:5;12507:16;12498:25;;12086:451;12568:4;12562;12558:15;12550:23;;12598:32;12621:8;12598:32;:::i;:::-;12586:44;;11928:712;;;11798:848;;;;;;;:::o;12652:1073::-;12706:5;12897:8;12887:40;;12918:1;12909:10;;12920:5;;12887:40;12946:4;12936:36;;12963:1;12954:10;;12965:5;;12936:36;13032:4;13080:1;13075:27;;;;13116:1;13111:191;;;;13025:277;;13075:27;13093:1;13084:10;;13095:5;;;13111:191;13156:3;13146:8;13143:17;13140:43;;;13163:18;;:::i;:::-;13140:43;13212:8;13209:1;13205:16;13196:25;;13247:3;13240:5;13237:14;13234:40;;;13254:18;;:::i;:::-;13234:40;13287:5;;;13025:277;;13411:2;13401:8;13398:16;13392:3;13386:4;13383:13;13379:36;13361:2;13351:8;13348:16;13343:2;13337:4;13334:12;13330:35;13314:111;13311:246;;;13467:8;13461:4;13457:19;13448:28;;13502:3;13495:5;13492:14;13489:40;;;13509:18;;:::i;:::-;13489:40;13542:5;;13311:246;13582:42;13620:3;13610:8;13604:4;13601:1;13582:42;:::i;:::-;13567:57;;;;13656:4;13651:3;13647:14;13640:5;13637:25;13634:51;;;13665:18;;:::i;:::-;13634:51;13714:4;13707:5;13703:16;13694:25;;12652:1073;;;;;;:::o;13731:281::-;13789:5;13813:23;13831:4;13813:23;:::i;:::-;13805:31;;13857:25;13873:8;13857:25;:::i;:::-;13845:37;;13901:104;13938:66;13928:8;13922:4;13901:104;:::i;:::-;13892:113;;13731:281;;;;:::o;14018:348::-;14058:7;14081:20;14099:1;14081:20;:::i;:::-;14076:25;;14115:20;14133:1;14115:20;:::i;:::-;14110:25;;14303:1;14235:66;14231:74;14228:1;14225:81;14220:1;14213:9;14206:17;14202:105;14199:131;;;14310:18;;:::i;:::-;14199:131;14358:1;14355;14351:9;14340:20;;14018:348;;;;:::o;14372:168::-;14512:20;14508:1;14500:6;14496:14;14489:44;14372:168;:::o;14546:366::-;14688:3;14709:67;14773:2;14768:3;14709:67;:::i;:::-;14702:74;;14785:93;14874:3;14785:93;:::i;:::-;14903:2;14898:3;14894:12;14887:19;;14546:366;;;:::o;14918:419::-;15084:4;15122:2;15111:9;15107:18;15099:26;;15171:9;15165:4;15161:20;15157:1;15146:9;15142:17;15135:47;15199:131;15325:4;15199:131;:::i;:::-;15191:139;;14918:419;;;:::o;15343:191::-;15383:3;15402:20;15420:1;15402:20;:::i;:::-;15397:25;;15436:20;15454:1;15436:20;:::i;:::-;15431:25;;15479:1;15476;15472:9;15465:16;;15500:3;15497:1;15494:10;15491:36;;;15507:18;;:::i;:::-;15491:36;15343:191;;;;:::o;15540:224::-;15680:34;15676:1;15668:6;15664:14;15657:58;15749:7;15744:2;15736:6;15732:15;15725:32;15540:224;:::o;15770:366::-;15912:3;15933:67;15997:2;15992:3;15933:67;:::i;:::-;15926:74;;16009:93;16098:3;16009:93;:::i;:::-;16127:2;16122:3;16118:12;16111:19;;15770:366;;;:::o;16142:419::-;16308:4;16346:2;16335:9;16331:18;16323:26;;16395:9;16389:4;16385:20;16381:1;16370:9;16366:17;16359:47;16423:131;16549:4;16423:131;:::i;:::-;16415:139;;16142:419;;;:::o;16567:232::-;16707:34;16703:1;16695:6;16691:14;16684:58;16776:15;16771:2;16763:6;16759:15;16752:40;16567:232;:::o;16805:366::-;16947:3;16968:67;17032:2;17027:3;16968:67;:::i;:::-;16961:74;;17044:93;17133:3;17044:93;:::i;:::-;17162:2;17157:3;17153:12;17146:19;;16805:366;;;:::o;17177:419::-;17343:4;17381:2;17370:9;17366:18;17358:26;;17430:9;17424:4;17420:20;17416:1;17405:9;17401:17;17394:47;17458:131;17584:4;17458:131;:::i;:::-;17450:139;;17177:419;;;:::o;17602:320::-;17717:4;17755:2;17744:9;17740:18;17732:26;;17768:71;17836:1;17825:9;17821:17;17812:6;17768:71;:::i;:::-;17849:66;17911:2;17900:9;17896:18;17887:6;17849:66;:::i;:::-;17602:320;;;;;:::o;17928:225::-;18068:34;18064:1;18056:6;18052:14;18045:58;18137:8;18132:2;18124:6;18120:15;18113:33;17928:225;:::o;18159:366::-;18301:3;18322:67;18386:2;18381:3;18322:67;:::i;:::-;18315:74;;18398:93;18487:3;18398:93;:::i;:::-;18516:2;18511:3;18507:12;18500:19;;18159:366;;;:::o;18531:419::-;18697:4;18735:2;18724:9;18720:18;18712:26;;18784:9;18778:4;18774:20;18770:1;18759:9;18755:17;18748:47;18812:131;18938:4;18812:131;:::i;:::-;18804:139;;18531:419;;;:::o;18956:223::-;19096:34;19092:1;19084:6;19080:14;19073:58;19165:6;19160:2;19152:6;19148:15;19141:31;18956:223;:::o;19185:366::-;19327:3;19348:67;19412:2;19407:3;19348:67;:::i;:::-;19341:74;;19424:93;19513:3;19424:93;:::i;:::-;19542:2;19537:3;19533:12;19526:19;;19185:366;;;:::o;19557:419::-;19723:4;19761:2;19750:9;19746:18;19738:26;;19810:9;19804:4;19800:20;19796:1;19785:9;19781:17;19774:47;19838:131;19964:4;19838:131;:::i;:::-;19830:139;;19557:419;;;:::o;19982:221::-;20122:34;20118:1;20110:6;20106:14;20099:58;20191:4;20186:2;20178:6;20174:15;20167:29;19982:221;:::o;20209:366::-;20351:3;20372:67;20436:2;20431:3;20372:67;:::i;:::-;20365:74;;20448:93;20537:3;20448:93;:::i;:::-;20566:2;20561:3;20557:12;20550:19;;20209:366;;;:::o;20581:419::-;20747:4;20785:2;20774:9;20770:18;20762:26;;20834:9;20828:4;20824:20;20820:1;20809:9;20805:17;20798:47;20862:131;20988:4;20862:131;:::i;:::-;20854:139;;20581:419;;;:::o;21006:182::-;21146:34;21142:1;21134:6;21130:14;21123:58;21006:182;:::o;21194:366::-;21336:3;21357:67;21421:2;21416:3;21357:67;:::i;:::-;21350:74;;21433:93;21522:3;21433:93;:::i;:::-;21551:2;21546:3;21542:12;21535:19;;21194:366;;;:::o;21566:419::-;21732:4;21770:2;21759:9;21755:18;21747:26;;21819:9;21813:4;21809:20;21805:1;21794:9;21790:17;21783:47;21847:131;21973:4;21847:131;:::i;:::-;21839:139;;21566:419;;;:::o;21991:179::-;22131:31;22127:1;22119:6;22115:14;22108:55;21991:179;:::o;22176:366::-;22318:3;22339:67;22403:2;22398:3;22339:67;:::i;:::-;22332:74;;22415:93;22504:3;22415:93;:::i;:::-;22533:2;22528:3;22524:12;22517:19;;22176:366;;;:::o;22548:419::-;22714:4;22752:2;22741:9;22737:18;22729:26;;22801:9;22795:4;22791:20;22787:1;22776:9;22772:17;22765:47;22829:131;22955:4;22829:131;:::i;:::-;22821:139;;22548:419;;;:::o;22973:224::-;23113:34;23109:1;23101:6;23097:14;23090:58;23182:7;23177:2;23169:6;23165:15;23158:32;22973:224;:::o;23203:366::-;23345:3;23366:67;23430:2;23425:3;23366:67;:::i;:::-;23359:74;;23442:93;23531:3;23442:93;:::i;:::-;23560:2;23555:3;23551:12;23544:19;;23203:366;;;:::o;23575:419::-;23741:4;23779:2;23768:9;23764:18;23756:26;;23828:9;23822:4;23818:20;23814:1;23803:9;23799:17;23792:47;23856:131;23982:4;23856:131;:::i;:::-;23848:139;;23575:419;;;:::o;24000:222::-;24140:34;24136:1;24128:6;24124:14;24117:58;24209:5;24204:2;24196:6;24192:15;24185:30;24000:222;:::o;24228:366::-;24370:3;24391:67;24455:2;24450:3;24391:67;:::i;:::-;24384:74;;24467:93;24556:3;24467:93;:::i;:::-;24585:2;24580:3;24576:12;24569:19;;24228:366;;;:::o;24600:419::-;24766:4;24804:2;24793:9;24789:18;24781:26;;24853:9;24847:4;24843:20;24839:1;24828:9;24824:17;24817:47;24881:131;25007:4;24881:131;:::i;:::-;24873:139;;24600:419;;;:::o;25025:225::-;25165:34;25161:1;25153:6;25149:14;25142:58;25234:8;25229:2;25221:6;25217:15;25210:33;25025:225;:::o;25256:366::-;25398:3;25419:67;25483:2;25478:3;25419:67;:::i;:::-;25412:74;;25495:93;25584:3;25495:93;:::i;:::-;25613:2;25608:3;25604:12;25597:19;;25256:366;;;:::o;25628:419::-;25794:4;25832:2;25821:9;25817:18;25809:26;;25881:9;25875:4;25871:20;25867:1;25856:9;25852:17;25845:47;25909:131;26035:4;25909:131;:::i;:::-;25901:139;;25628:419;;;:::o;26053:194::-;26093:4;26113:20;26131:1;26113:20;:::i;:::-;26108:25;;26147:20;26165:1;26147:20;:::i;:::-;26142:25;;26191:1;26188;26184:9;26176:17;;26215:1;26209:4;26206:11;26203:37;;;26220:18;;:::i;:::-;26203:37;26053:194;;;;:::o;26253:168::-;26393:20;26389:1;26381:6;26377:14;26370:44;26253:168;:::o;26427:366::-;26569:3;26590:67;26654:2;26649:3;26590:67;:::i;:::-;26583:74;;26666:93;26755:3;26666:93;:::i;:::-;26784:2;26779:3;26775:12;26768:19;;26427:366;;;:::o;26799:419::-;26965:4;27003:2;26992:9;26988:18;26980:26;;27052:9;27046:4;27042:20;27038:1;27027:9;27023:17;27016:47;27080:131;27206:4;27080:131;:::i;:::-;27072:139;;26799:419;;;:::o;27224:244::-;27364:34;27360:1;27352:6;27348:14;27341:58;27433:27;27428:2;27420:6;27416:15;27409:52;27224:244;:::o;27474:366::-;27616:3;27637:67;27701:2;27696:3;27637:67;:::i;:::-;27630:74;;27713:93;27802:3;27713:93;:::i;:::-;27831:2;27826:3;27822:12;27815:19;;27474:366;;;:::o;27846:419::-;28012:4;28050:2;28039:9;28035:18;28027:26;;28099:9;28093:4;28089:20;28085:1;28074:9;28070:17;28063:47;28127:131;28253:4;28127:131;:::i;:::-;28119:139;;27846:419;;;:::o;28271:241::-;28411:34;28407:1;28399:6;28395:14;28388:58;28480:24;28475:2;28467:6;28463:15;28456:49;28271:241;:::o;28518:366::-;28660:3;28681:67;28745:2;28740:3;28681:67;:::i;:::-;28674:74;;28757:93;28846:3;28757:93;:::i;:::-;28875:2;28870:3;28866:12;28859:19;;28518:366;;;:::o;28890:419::-;29056:4;29094:2;29083:9;29079:18;29071:26;;29143:9;29137:4;29133:20;29129:1;29118:9;29114:17;29107:47;29171:131;29297:4;29171:131;:::i;:::-;29163:139;;28890:419;;;:::o;29315:442::-;29464:4;29502:2;29491:9;29487:18;29479:26;;29515:71;29583:1;29572:9;29568:17;29559:6;29515:71;:::i;:::-;29596:72;29664:2;29653:9;29649:18;29640:6;29596:72;:::i;:::-;29678;29746:2;29735:9;29731:18;29722:6;29678:72;:::i;:::-;29315:442;;;;;;:::o;29763:180::-;29811:77;29808:1;29801:88;29908:4;29905:1;29898:15;29932:4;29929:1;29922:15;29949:180;29997:77;29994:1;29987:88;30094:4;30091:1;30084:15;30118:4;30115:1;30108:15;30135:143;30192:5;30223:6;30217:13;30208:22;;30239:33;30266:5;30239:33;:::i;:::-;30135:143;;;;:::o;30284:351::-;30354:6;30403:2;30391:9;30382:7;30378:23;30374:32;30371:119;;;30409:79;;:::i;:::-;30371:119;30529:1;30554:64;30610:7;30601:6;30590:9;30586:22;30554:64;:::i;:::-;30544:74;;30500:128;30284:351;;;;:::o;30641:85::-;30686:7;30715:5;30704:16;;30641:85;;;:::o;30732:158::-;30790:9;30823:61;30841:42;30850:32;30876:5;30850:32;:::i;:::-;30841:42;:::i;:::-;30823:61;:::i;:::-;30810:74;;30732:158;;;:::o;30896:147::-;30991:45;31030:5;30991:45;:::i;:::-;30986:3;30979:58;30896:147;;:::o;31049:114::-;31116:6;31150:5;31144:12;31134:22;;31049:114;;;:::o;31169:184::-;31268:11;31302:6;31297:3;31290:19;31342:4;31337:3;31333:14;31318:29;;31169:184;;;;:::o;31359:132::-;31426:4;31449:3;31441:11;;31479:4;31474:3;31470:14;31462:22;;31359:132;;;:::o;31497:108::-;31574:24;31592:5;31574:24;:::i;:::-;31569:3;31562:37;31497:108;;:::o;31611:179::-;31680:10;31701:46;31743:3;31735:6;31701:46;:::i;:::-;31779:4;31774:3;31770:14;31756:28;;31611:179;;;;:::o;31796:113::-;31866:4;31898;31893:3;31889:14;31881:22;;31796:113;;;:::o;31945:732::-;32064:3;32093:54;32141:5;32093:54;:::i;:::-;32163:86;32242:6;32237:3;32163:86;:::i;:::-;32156:93;;32273:56;32323:5;32273:56;:::i;:::-;32352:7;32383:1;32368:284;32393:6;32390:1;32387:13;32368:284;;;32469:6;32463:13;32496:63;32555:3;32540:13;32496:63;:::i;:::-;32489:70;;32582:60;32635:6;32582:60;:::i;:::-;32572:70;;32428:224;32415:1;32412;32408:9;32403:14;;32368:284;;;32372:14;32668:3;32661:10;;32069:608;;;31945:732;;;;:::o;32683:831::-;32946:4;32984:3;32973:9;32969:19;32961:27;;32998:71;33066:1;33055:9;33051:17;33042:6;32998:71;:::i;:::-;33079:80;33155:2;33144:9;33140:18;33131:6;33079:80;:::i;:::-;33206:9;33200:4;33196:20;33191:2;33180:9;33176:18;33169:48;33234:108;33337:4;33328:6;33234:108;:::i;:::-;33226:116;;33352:72;33420:2;33409:9;33405:18;33396:6;33352:72;:::i;:::-;33434:73;33502:3;33491:9;33487:19;33478:6;33434:73;:::i;:::-;32683:831;;;;;;;;:::o;33520:807::-;33769:4;33807:3;33796:9;33792:19;33784:27;;33821:71;33889:1;33878:9;33874:17;33865:6;33821:71;:::i;:::-;33902:72;33970:2;33959:9;33955:18;33946:6;33902:72;:::i;:::-;33984:80;34060:2;34049:9;34045:18;34036:6;33984:80;:::i;:::-;34074;34150:2;34139:9;34135:18;34126:6;34074:80;:::i;:::-;34164:73;34232:3;34221:9;34217:19;34208:6;34164:73;:::i;:::-;34247;34315:3;34304:9;34300:19;34291:6;34247:73;:::i;:::-;33520:807;;;;;;;;;:::o;34333:143::-;34390:5;34421:6;34415:13;34406:22;;34437:33;34464:5;34437:33;:::i;:::-;34333:143;;;;:::o;34482:663::-;34570:6;34578;34586;34635:2;34623:9;34614:7;34610:23;34606:32;34603:119;;;34641:79;;:::i;:::-;34603:119;34761:1;34786:64;34842:7;34833:6;34822:9;34818:22;34786:64;:::i;:::-;34776:74;;34732:128;34899:2;34925:64;34981:7;34972:6;34961:9;34957:22;34925:64;:::i;:::-;34915:74;;34870:129;35038:2;35064:64;35120:7;35111:6;35100:9;35096:22;35064:64;:::i;:::-;35054:74;;35009:129;34482:663;;;;;:::o

Swarm Source

ipfs://0098f0dd2b6fa92ed5d08d92c626470d0715902408f6186aac9a9f8f514b52ab
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.