ETH Price: $3,449.10 (+1.70%)
Gas: 4 Gwei

Token

Guess Draw Game (GUESS)
 

Overview

Max Total Supply

10,000,000 GUESS

Holders

140

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
cvd.eth
Balance
191,328.192045796317238182 GUESS

Value
$0.00
0xdaa7c1b5feaca5d1bc1bea7e7c07d91d3e6dfe51
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:
GUESS

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-12
*/

/* 
$GUESS, Drawing and guessing pictionary game that infuses creativity with competition ✏️

Twitter: https://twitter.com/Guesscoinerc
Website: https://www.guesscoin.xyz/
Telegram: https://t.me/guessdrawportal

*/ 


// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

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

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

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

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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

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

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


// OpenZeppelin Contracts (last updated v4.9.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     *
     * Furthermore, `isContract` will also return true if the target contract within
     * the same transaction is already scheduled for destruction by `SELFDESTRUCT`,
     * which only has an effect at the end of a transaction.
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://consensys.net/diligence/blog/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.8.0/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResultFromTarget(target, success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling
     * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract.
     *
     * _Available since v4.8._
     */
    function verifyCallResultFromTarget(
        address target,
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        if (success) {
            if (returndata.length == 0) {
                // only check isContract if the call was successful and the return data is empty
                // otherwise we already know that it was a contract
                require(isContract(target), "Address: call to non-contract");
            }
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    /**
     * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason or using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            _revert(returndata, errorMessage);
        }
    }

    function _revert(bytes memory returndata, string memory errorMessage) private pure {
        // Look for revert reason and bubble it up if present
        if (returndata.length > 0) {
            // The easiest way to bubble the revert reason is using memory via assembly
            /// @solidity memory-safe-assembly
            assembly {
                let returndata_size := mload(returndata)
                revert(add(32, returndata), returndata_size)
            }
        } else {
            revert(errorMessage);
        }
    }
}

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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


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

pragma solidity ^0.8.0;


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

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

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

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


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

pragma solidity ^0.8.0;




/**
 * @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].
 *
 * The default value of {decimals} is 18. To change this, you should override
 * this function so it returns a different value.
 *
 * 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;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File: guess.sol

//SPDX-License-Identifier: UNLICENSED


pragma solidity ^0.8.20;

contract GUESS is ERC20("Guess Draw Game", "GUESS"), Ownable {
    using Address for address payable;

    IUniswapV2Router02 public router;
    address public pair;

    bool private _liquidityMutex = false;
    bool private providingLiquidity = false;
    bool public tradingEnabled = false;

    uint256 private tokenLiquidityThreshold = 1_000_00 * 10 ** 18;
    uint256 public maxWalletLimit = 200_000 * 10 ** 18;

    uint256 private genesis_block;
    uint256 private deadline = 5;
    uint256 private launchtax = 25;

    address private marketingWallet;
    address private devWallet;

    struct Taxes {
        uint256 marketing;
        uint256 liquidity;
        uint256 dev;
    }

    Taxes public taxes = Taxes(15, 1, 2);
    Taxes public sellTaxes = Taxes(20, 1, 2);

    mapping(address => bool) public exemptFee;
    mapping(address => bool) private isearlybuyer;

    modifier mutexLock() {
        if (!_liquidityMutex) {
            _liquidityMutex = true;
            _;
            _liquidityMutex = false;
        }
    }

function setPair(address pairAddress) external onlyOwner {
        pair = pairAddress;
}

    function initialAirdrop(
        address[] calldata recipients,
        uint256[] calldata values
    ) external onlyOwner {
        require(recipients.length == values.length);
        for (uint256 i; i < recipients.length; ) {
            _transfer(msg.sender, recipients[i], values[i]);

            unchecked {
                i++;
            }
        }
    }

    constructor() {


        marketingWallet = msg.sender;
        devWallet = msg.sender;
        _mint(msg.sender, 100_000_00 * 10 ** 18);

        IUniswapV2Router02 _router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );  

        router = _router;
        exemptFee[address(this)] = true;
        exemptFee[msg.sender] = true;
        exemptFee[marketingWallet] = true;
        exemptFee[devWallet] = true;

        _approve(address(this), address(router), type(uint256).max);
    }

    function approve(
        address spender,
        uint256 amount
    ) public override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = allowance(sender, _msgSender());
        require(
            currentAllowance >= amount,
            "ERC20: transfer amount exceeds allowance"
        );
        _approve(sender, _msgSender(), currentAllowance - amount);

        return true;
    }

    function increaseAllowance(
        address spender,
        uint256 addedValue
    ) public override returns (bool) {
        uint256 currentAllowance = allowance(_msgSender(), spender);
        _approve(_msgSender(), spender, currentAllowance + addedValue);
        return true;
    }

    function decreaseAllowance(
        address spender,
        uint256 subtractedValue
    ) public override returns (bool) {
        uint256 currentAllowance = allowance(_msgSender(), spender);

        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    function transfer(
        address recipient,
        uint256 amount
    ) public override returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal override {
        require(amount > 0, "Transfer amount must be greater than zero");
        require(
            !isearlybuyer[sender] && !isearlybuyer[recipient],
            "You can't transfer tokens"
        );

        if (!exemptFee[sender] && !exemptFee[recipient]) {
            require(tradingEnabled, "Trading not enabled");
        }

        if (sender == pair && !exemptFee[recipient] && !_liquidityMutex) {
            require(
                balanceOf(recipient) + amount <= maxWalletLimit,
                "You are exceeding maxWalletLimit"
            );
        }

        if (
            sender != pair &&
            !exemptFee[recipient] &&
            !exemptFee[sender] &&
            !_liquidityMutex
        ) {
            if (recipient != pair) {
                require(
                    balanceOf(recipient) + amount <= maxWalletLimit,
                    "You are exceeding maxWalletLimit"
                );
            }
        }

        uint256 feeswap;
        uint256 feesum;
        uint256 fee;
        Taxes memory currentTaxes;

        bool useLaunchFee = !exemptFee[sender] &&
            !exemptFee[recipient] &&
            block.number < genesis_block + deadline;

        //set fee to zero if fees in contract are handled or exempted
        if (_liquidityMutex || exemptFee[sender] || exemptFee[recipient])
            fee = 0;

            //calculate fee
        else if (recipient == pair && !useLaunchFee) {
            feeswap = sellTaxes.liquidity + sellTaxes.marketing + sellTaxes.dev;
            feesum = feeswap;
            currentTaxes = sellTaxes;
        } else if (!useLaunchFee) {
            feeswap = taxes.liquidity + taxes.marketing + taxes.dev;
            feesum = feeswap;
            currentTaxes = taxes;
        } else if (useLaunchFee) {
            feeswap = launchtax;
            feesum = launchtax;
        }

        fee = (amount * feesum) / 100;

        //send fees if threshold has been reached
        //don't do this on buys, breaks swap
        if (providingLiquidity && sender != pair)
            handle_fees(feeswap, currentTaxes);

        //rest to recipient
        super._transfer(sender, recipient, amount - fee);
        if (fee > 0) {
            //send the fee to the contract
            if (feeswap > 0) {
                uint256 feeAmount = (amount * feeswap) / 100;
                super._transfer(sender, address(this), feeAmount);
            }
        }
    }

    function handle_fees(
        uint256 feeswap,
        Taxes memory swapTaxes
    ) private mutexLock {
        if (feeswap == 0) {
            return;
        }

        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance >= tokenLiquidityThreshold) {
            if (tokenLiquidityThreshold > 1) {
                contractBalance = tokenLiquidityThreshold;
            }

            // Split the contract balance into halves
            uint256 denominator = feeswap * 2;
            uint256 tokensToAddLiquidityWith = (contractBalance *
                swapTaxes.liquidity) / denominator;
            uint256 toSwap = contractBalance - tokensToAddLiquidityWith;

            uint256 initialBalance = address(this).balance;

            swapTokensForETH(toSwap);

            uint256 deltaBalance = address(this).balance - initialBalance;
            uint256 unitBalance = deltaBalance /
                (denominator - swapTaxes.liquidity);
            uint256 ethToAddLiquidityWith = unitBalance * swapTaxes.liquidity;

            if (ethToAddLiquidityWith > 0) {
                // Add liquidity
                addLiquidity(tokensToAddLiquidityWith, ethToAddLiquidityWith);
            }

            uint256 marketingAmt = unitBalance * 2 * swapTaxes.marketing;
            if (marketingAmt > 0) {
                payable(marketingWallet).sendValue(marketingAmt);
            }

            uint256 devAmt = unitBalance * 2 * swapTaxes.dev;
            if (devAmt > 0) {
                payable(devWallet).sendValue(devAmt);
            }
        }
    }

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

        // make the swap
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // add the liquidity
        router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            devWallet,
            block.timestamp
        );
    }

    function updateLiquidityProvide(bool state) external onlyOwner {
        //update liquidity providing state
        providingLiquidity = state;
    }

    function updateLiquidityTreshhold(uint256 new_amount) external onlyOwner {
        //update the treshhold
        tokenLiquidityThreshold = new_amount * 10 ** decimals();
    }

    function UpdateBuyTaxes(
        uint256 _marketing,
        uint256 _liquidity,
        uint256 _dev
    ) external onlyOwner {
        taxes = Taxes(_marketing, _liquidity, _dev);
    }

    function SetSellTaxes(
        uint256 _marketing,
        uint256 _liquidity,
        uint256 _dev
    ) external onlyOwner {
        sellTaxes = Taxes(_marketing, _liquidity, _dev);
    }

    function enableTrading() external onlyOwner {
        require(!tradingEnabled, "Trading is already enabled");
        tradingEnabled = true;
        providingLiquidity = true;
        genesis_block = block.number;
    }

    function updatedeadline(uint256 _deadline) external onlyOwner {
        require(!tradingEnabled, "Can't change when trading has started");
        require(_deadline < 3, "Block should be less than 3");
        deadline = _deadline;
    }

    function updateMarketingWallet(address newWallet) external onlyOwner {
        marketingWallet = newWallet;
    }

    function updateDevWallet(address newWallet) external onlyOwner {
        devWallet = newWallet;
    }

    function updateIsEarlyBuyer(
        address account,
        bool state
    ) external onlyOwner {
        isearlybuyer[account] = state;
    }

    function bulkIsEarlyBuyer(
        address[] memory accounts,
        bool state
    ) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            isearlybuyer[accounts[i]] = state;
        }
    }

    function updateExemptFee(address _address, bool state) external onlyOwner {
        exemptFee[_address] = state;
    }

    function bulkExemptFee(
        address[] memory accounts,
        bool state
    ) external onlyOwner {
        for (uint256 i = 0; i < accounts.length; i++) {
            exemptFee[accounts[i]] = state;
        }
    }

    function updateMaxWalletLimit(uint256 maxWallet) external onlyOwner {
        maxWalletLimit = maxWallet * 10 ** decimals();
    }

    function rescueETHEmergency(uint256 weiAmount) external {
        payable(devWallet).transfer(weiAmount);
    }

    function rescueERC20Token(address tokenAdd, uint256 amount) external {
        IERC20(tokenAdd).transfer(devWallet, amount);
    }

    // fallbacks
    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"}],"name":"SetSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketing","type":"uint256"},{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"}],"name":"UpdateBuyTaxes","outputs":[],"stateMutability":"nonpayable","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":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkIsEarlyBuyer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"exemptFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"initialAirdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxWalletLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAdd","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"rescueERC20Token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETHEmergency","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pairAddress","type":"address"}],"name":"setPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"marketing","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","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":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateExemptFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"updateIsEarlyBuyer","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"updateLiquidityProvide","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"new_amount","type":"uint256"}],"name":"updateLiquidityTreshhold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallet","type":"uint256"}],"name":"updateMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_deadline","type":"uint256"}],"name":"updatedeadline","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040525f600760146101000a81548160ff0219169083151502179055505f600760156101000a81548160ff0219169083151502179055505f600760166101000a81548160ff02191690831515021790555069152d02c7e14af6800000600855692a5a058fc295ed0000006009556005600b556019600c556040518060600160405280600f8152602001600181526020016002815250600f5f820151815f01556020820151816001015560408201518160020155505060405180606001604052806014815260200160018152602001600281525060125f820151815f01556020820151816001015560408201518160020155505034801562000100575f80fd5b506040518060400160405280600f81526020017f477565737320447261772047616d6500000000000000000000000000000000008152506040518060400160405280600581526020017f475545535300000000000000000000000000000000000000000000000000000081525081600390816200017e919062000b01565b50806004908162000190919062000b01565b505050620001b3620001a76200049960201b60201c565b620004a060201b60201c565b33600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000250336a084595161401484a0000006200056360201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90508060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160155f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160155f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160155f600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160155f600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620004923060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff620006c860201b60201c565b5062000e1e565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620005d4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005cb9062000c43565b60405180910390fd5b620005e75f83836200089360201b60201c565b8060025f828254620005fa919062000c90565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620006a9919062000cdb565b60405180910390a3620006c45f83836200089860201b60201c565b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000739576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007309062000d6a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620007aa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007a19062000dfe565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000886919062000cdb565b60405180910390a3505050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200091957607f821691505b6020821081036200092f576200092e620008d4565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620009937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000956565b6200099f868362000956565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620009e9620009e3620009dd84620009b7565b620009c0565b620009b7565b9050919050565b5f819050919050565b62000a0483620009c9565b62000a1c62000a1382620009f0565b84845462000962565b825550505050565b5f90565b62000a3262000a24565b62000a3f818484620009f9565b505050565b5b8181101562000a665762000a5a5f8262000a28565b60018101905062000a45565b5050565b601f82111562000ab55762000a7f8162000935565b62000a8a8462000947565b8101602085101562000a9a578190505b62000ab262000aa98562000947565b83018262000a44565b50505b505050565b5f82821c905092915050565b5f62000ad75f198460080262000aba565b1980831691505092915050565b5f62000af1838362000ac6565b9150826002028217905092915050565b62000b0c826200089d565b67ffffffffffffffff81111562000b285762000b27620008a7565b5b62000b34825462000901565b62000b4182828562000a6a565b5f60209050601f83116001811462000b77575f841562000b62578287015190505b62000b6e858262000ae4565b86555062000bdd565b601f19841662000b878662000935565b5f5b8281101562000bb05784890151825560018201915060208501945060208101905062000b89565b8683101562000bd0578489015162000bcc601f89168262000ac6565b8355505b6001600288020188555050505b505050505050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62000c2b601f8362000be5565b915062000c388262000bf5565b602082019050919050565b5f6020820190508181035f83015262000c5c8162000c1d565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000c9c82620009b7565b915062000ca983620009b7565b925082820190508082111562000cc45762000cc362000c63565b5b92915050565b62000cd581620009b7565b82525050565b5f60208201905062000cf05f83018462000cca565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f62000d5260248362000be5565b915062000d5f8262000cf6565b604082019050919050565b5f6020820190508181035f83015262000d838162000d44565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f62000de660228362000be5565b915062000df38262000d8a565b604082019050919050565b5f6020820190508181035f83015262000e178162000dd8565b9050919050565b613f4f8062000e2c5f395ff3fe608060405260043610610227575f3560e01c8063715018a611610122578063a8aa1b31116100aa578063edaa11681161006e578063edaa1168146107ea578063f2fde38b14610812578063f66895a31461083a578063f7e5ec6814610866578063f887ea401461088e5761022e565b8063a8aa1b31146106e4578063a9059cbb1461070e578063aacebbe31461074a578063c5d32bb214610772578063dd62ed3e146107ae5761022e565b80638a8c523c116100f15780638a8c523c146106165780638da5cb5b1461062c57806395d89b41146106565780639d282cd614610680578063a457c2d7146106a85761022e565b8063715018a614610584578063728f8eea1461059a5780638187f516146105c65780638514022d146105ee5761022e565b806323b872dd116101b05780634324deae116101745780634324deae146104a45780634ada218b146104cc5780634e736f22146104f657806366a88d961461051e57806370a08231146105485761022e565b806323b872dd146103b2578063313ce567146103ee578063355496ca14610418578063395093511461044057806342b6fa111461047c5761022e565b80631340538f116101f75780631340538f146102e857806318160ddd146103105780631816467f1461033a578063193c17d014610362578063215d92a61461038a5761022e565b806206a2101461023257806306fdde031461025a578063095ea7b3146102845780630e375a5c146102c05761022e565b3661022e57005b5f80fd5b34801561023d575f80fd5b506102586004803603810190610253919061290f565b6108b8565b005b348015610265575f80fd5b5061026e61093d565b60405161027b9190612a17565b60405180910390f35b34801561028f575f80fd5b506102aa60048036038101906102a59190612ac4565b6109cd565b6040516102b79190612b1c565b60405180910390f35b3480156102cb575f80fd5b506102e660048036038101906102e19190612c97565b6109ea565b005b3480156102f3575f80fd5b5061030e60048036038101906103099190612cf1565b610a83565b005b34801561031b575f80fd5b50610324610aa8565b6040516103319190612d2b565b60405180910390f35b348015610345575f80fd5b50610360600480360381019061035b9190612d44565b610ab1565b005b34801561036d575f80fd5b5061038860048036038101906103839190612ac4565b610afc565b005b348015610395575f80fd5b506103b060048036038101906103ab9190612c97565b610b9d565b005b3480156103bd575f80fd5b506103d860048036038101906103d39190612d6f565b610c36565b6040516103e59190612b1c565b60405180910390f35b3480156103f9575f80fd5b50610402610cc2565b60405161040f9190612dda565b60405180910390f35b348015610423575f80fd5b5061043e60048036038101906104399190612df3565b610cca565b005b34801561044b575f80fd5b5061046660048036038101906104619190612ac4565b610d2a565b6040516104739190612b1c565b60405180910390f35b348015610487575f80fd5b506104a2600480360381019061049d9190612e31565b610d67565b005b3480156104af575f80fd5b506104ca60048036038101906104c59190612e31565b610d97565b005b3480156104d7575f80fd5b506104e0610dc7565b6040516104ed9190612b1c565b60405180910390f35b348015610501575f80fd5b5061051c60048036038101906105179190612e5c565b610dda565b005b348015610529575f80fd5b50610532610e23565b60405161053f9190612d2b565b60405180910390f35b348015610553575f80fd5b5061056e60048036038101906105699190612d44565b610e29565b60405161057b9190612d2b565b60405180910390f35b34801561058f575f80fd5b50610598610e6e565b005b3480156105a5575f80fd5b506105ae610e81565b6040516105bd93929190612eac565b60405180910390f35b3480156105d1575f80fd5b506105ec60048036038101906105e79190612d44565b610e98565b005b3480156105f9575f80fd5b50610614600480360381019061060f9190612df3565b610ee3565b005b348015610621575f80fd5b5061062a610f43565b005b348015610637575f80fd5b50610640610fda565b60405161064d9190612ef0565b60405180910390f35b348015610661575f80fd5b5061066a611002565b6040516106779190612a17565b60405180910390f35b34801561068b575f80fd5b506106a660048036038101906106a19190612e5c565b611092565b005b3480156106b3575f80fd5b506106ce60048036038101906106c99190612ac4565b6110db565b6040516106db9190612b1c565b60405180910390f35b3480156106ef575f80fd5b506106f861115b565b6040516107059190612ef0565b60405180910390f35b348015610719575f80fd5b50610734600480360381019061072f9190612ac4565b611180565b6040516107419190612b1c565b60405180910390f35b348015610755575f80fd5b50610770600480360381019061076b9190612d44565b611196565b005b34801561077d575f80fd5b5061079860048036038101906107939190612d44565b6111e1565b6040516107a59190612b1c565b60405180910390f35b3480156107b9575f80fd5b506107d460048036038101906107cf9190612f09565b6111fe565b6040516107e19190612d2b565b60405180910390f35b3480156107f5575f80fd5b50610810600480360381019061080b9190612e31565b611280565b005b34801561081d575f80fd5b5061083860048036038101906108339190612d44565b611325565b005b348015610845575f80fd5b5061084e6113a7565b60405161085d93929190612eac565b60405180910390f35b348015610871575f80fd5b5061088c60048036038101906108879190612e31565b6113be565b005b348015610899575f80fd5b506108a2611426565b6040516108af9190612fa2565b60405180910390f35b6108c061144b565b8181905084849050146108d1575f80fd5b5f5b8484905081101561093657610929338686848181106108f5576108f4612fbb565b5b905060200201602081019061090a9190612d44565b85858581811061091d5761091c612fbb565b5b905060200201356114c9565b80806001019150506108d3565b5050505050565b60606003805461094c90613015565b80601f016020809104026020016040519081016040528092919081815260200182805461097890613015565b80156109c35780601f1061099a576101008083540402835291602001916109c3565b820191905f5260205f20905b8154815290600101906020018083116109a657829003601f168201915b5050505050905090565b5f6109e06109d9611d57565b8484611d5e565b6001905092915050565b6109f261144b565b5f5b8251811015610a7e578160155f858481518110610a1457610a13612fbb565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080610a7690613072565b9150506109f4565b505050565b610a8b61144b565b80600760156101000a81548160ff02191690831515021790555050565b5f600254905090565b610ab961144b565b80600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610b589291906130b9565b6020604051808303815f875af1158015610b74573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9891906130f4565b505050565b610ba561144b565b5f5b8251811015610c31578160165f858481518110610bc757610bc6612fbb565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080610c2990613072565b915050610ba7565b505050565b5f610c428484846114c9565b5f610c5485610c4f611d57565b6111fe565b905082811015610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c909061318f565b60405180910390fd5b610cb685610ca5611d57565b8584610cb191906131ad565b611d5e565b60019150509392505050565b5f6012905090565b610cd261144b565b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f80610d3d610d37611d57565b856111fe565b9050610d5c610d4a611d57565b858584610d5791906131e0565b611d5e565b600191505092915050565b610d6f61144b565b610d77610cc2565b600a610d839190613342565b81610d8e919061338c565b60088190555050565b610d9f61144b565b610da7610cc2565b600a610db39190613342565b81610dbe919061338c565b60098190555050565b600760169054906101000a900460ff1681565b610de261144b565b60405180606001604052808481526020018381526020018281525060125f820151815f01556020820151816001015560408201518160020155905050505050565b60095481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e7661144b565b610e7f5f611f21565b565b600f805f0154908060010154908060020154905083565b610ea061144b565b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610eeb61144b565b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b610f4b61144b565b600760169054906101000a900460ff1615610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9290613417565b60405180910390fd5b6001600760166101000a81548160ff0219169083151502179055506001600760156101000a81548160ff02191690831515021790555043600a81905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461101190613015565b80601f016020809104026020016040519081016040528092919081815260200182805461103d90613015565b80156110885780601f1061105f57610100808354040283529160200191611088565b820191905f5260205f20905b81548152906001019060200180831161106b57829003601f168201915b5050505050905090565b61109a61144b565b604051806060016040528084815260200183815260200182815250600f5f820151815f01556020820151816001015560408201518160020155905050505050565b5f806110ee6110e8611d57565b856111fe565b905082811015611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a906134a5565b60405180910390fd5b61115061113e611d57565b85858461114b91906131ad565b611d5e565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61118c3384846114c9565b6001905092915050565b61119e61144b565b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6015602052805f5260405f205f915054906101000a900460ff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61128861144b565b600760169054906101000a900460ff16156112d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cf90613533565b60405180910390fd5b6003811061131b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113129061359b565b60405180910390fd5b80600b8190555050565b61132d61144b565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361139b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139290613629565b60405180910390fd5b6113a481611f21565b50565b6012805f0154908060010154908060020154905083565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611422573d5f803e3d5ffd5b5050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611453611d57565b73ffffffffffffffffffffffffffffffffffffffff16611471610fda565b73ffffffffffffffffffffffffffffffffffffffff16146114c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114be90613691565b60405180910390fd5b565b5f811161150b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115029061371f565b60405180910390fd5b60165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156115a9575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b6115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df90613787565b60405180910390fd5b60155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611686575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156116db57600760169054906101000a900460ff166116da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d1906137ef565b60405180910390fd5b5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561177e575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156117975750600760149054906101000a900460ff16155b156117f557600954816117a984610e29565b6117b391906131e0565b11156117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb90613857565b60405180910390fd5b5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611899575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156118ec575060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156119055750600760149054906101000a900460ff16155b156119b85760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146119b7576009548161196b84610e29565b61197591906131e0565b11156119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad90613857565b60405180910390fd5b5b5b5f805f6119c361282a565b5f60155f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611a62575060155f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611a7c5750600b54600a54611a7991906131e0565b43105b9050600760149054906101000a900460ff1680611adf575060155f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80611b30575060155f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611b3d575f9250611c6b565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148015611b97575080155b15611bf75760126002015460125f0154601260010154611bb791906131e0565b611bc191906131e0565b945084935060126040518060600160405290815f8201548152602001600182015481526020016002820154815250509150611c6a565b80611c5757600f60020154600f5f0154600f60010154611c1791906131e0565b611c2191906131e0565b9450849350600f6040518060600160405290815f8201548152602001600182015481526020016002820154815250509150611c69565b8015611c6857600c549450600c5493505b5b5b5b60648487611c79919061338c565b611c8391906138a2565b9250600760159054906101000a900460ff168015611cee575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b15611cfe57611cfd8583611fe4565b5b611d1488888589611d0f91906131ad565b6121ec565b5f831115611d4d575f851115611d4c575f60648688611d33919061338c565b611d3d91906138a2565b9050611d4a8930836121ec565b505b5b5050505050505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc390613942565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e31906139d0565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f149190612d2b565b60405180910390a3505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600760149054906101000a900460ff166121e8576001600760146101000a81548160ff0219169083151502179055505f8203156121cd575f61202530610e29565b905060085481106121cb57600160085411156120415760085490505b5f60028461204f919061338c565b90505f81846020015184612063919061338c565b61206d91906138a2565b90505f818461207c91906131ad565b90505f47905061208b82612458565b5f814761209891906131ad565b90505f8760200151866120ab91906131ad565b826120b691906138a2565b90505f8860200151826120c9919061338c565b90505f8111156120de576120dd8682612662565b5b5f895f01516002846120f0919061338c565b6120fa919061338c565b90505f81111561214f5761214e81600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661273090919063ffffffff16565b5b5f8a60400151600285612162919061338c565b61216c919061338c565b90505f8111156121c1576121c081600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661273090919063ffffffff16565b5b5050505050505050505b505b5f600760146101000a81548160ff0219169083151502179055505b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361225a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225190613a5e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bf90613aec565b60405180910390fd5b6122d3838383612820565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234d90613b7a565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161243f9190612d2b565b60405180910390a3612452848484612825565b50505050565b5f600267ffffffffffffffff81111561247457612473612b35565b5b6040519080825280602002602001820160405280156124a25781602001602082028036833780820191505090505b50905030815f815181106124b9576124b8612fbb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561255d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125819190613bac565b8160018151811061259557612594612fbb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612631959493929190613cc7565b5f604051808303815f87803b158015612648575f80fd5b505af115801561265a573d5f803e3d5ffd5b505050505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016126e896959493929190613d1f565b60606040518083038185885af1158015612704573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906127299190613d92565b5050505050565b80471015612773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276a90613e2c565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff168260405161279890613e77565b5f6040518083038185875af1925050503d805f81146127d2576040519150601f19603f3d011682016040523d82523d5f602084013e6127d7565b606091505b505090508061281b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281290613efb565b60405180910390fd5b505050565b505050565b505050565b60405180606001604052805f81526020015f81526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261287a57612879612859565b5b8235905067ffffffffffffffff8111156128975761289661285d565b5b6020830191508360208202830111156128b3576128b2612861565b5b9250929050565b5f8083601f8401126128cf576128ce612859565b5b8235905067ffffffffffffffff8111156128ec576128eb61285d565b5b60208301915083602082028301111561290857612907612861565b5b9250929050565b5f805f806040858703121561292757612926612851565b5b5f85013567ffffffffffffffff81111561294457612943612855565b5b61295087828801612865565b9450945050602085013567ffffffffffffffff81111561297357612972612855565b5b61297f878288016128ba565b925092505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156129c45780820151818401526020810190506129a9565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6129e98261298d565b6129f38185612997565b9350612a038185602086016129a7565b612a0c816129cf565b840191505092915050565b5f6020820190508181035f830152612a2f81846129df565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612a6082612a37565b9050919050565b612a7081612a56565b8114612a7a575f80fd5b50565b5f81359050612a8b81612a67565b92915050565b5f819050919050565b612aa381612a91565b8114612aad575f80fd5b50565b5f81359050612abe81612a9a565b92915050565b5f8060408385031215612ada57612ad9612851565b5b5f612ae785828601612a7d565b9250506020612af885828601612ab0565b9150509250929050565b5f8115159050919050565b612b1681612b02565b82525050565b5f602082019050612b2f5f830184612b0d565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612b6b826129cf565b810181811067ffffffffffffffff82111715612b8a57612b89612b35565b5b80604052505050565b5f612b9c612848565b9050612ba88282612b62565b919050565b5f67ffffffffffffffff821115612bc757612bc6612b35565b5b602082029050602081019050919050565b5f612bea612be584612bad565b612b93565b90508083825260208201905060208402830185811115612c0d57612c0c612861565b5b835b81811015612c365780612c228882612a7d565b845260208401935050602081019050612c0f565b5050509392505050565b5f82601f830112612c5457612c53612859565b5b8135612c64848260208601612bd8565b91505092915050565b612c7681612b02565b8114612c80575f80fd5b50565b5f81359050612c9181612c6d565b92915050565b5f8060408385031215612cad57612cac612851565b5b5f83013567ffffffffffffffff811115612cca57612cc9612855565b5b612cd685828601612c40565b9250506020612ce785828601612c83565b9150509250929050565b5f60208284031215612d0657612d05612851565b5b5f612d1384828501612c83565b91505092915050565b612d2581612a91565b82525050565b5f602082019050612d3e5f830184612d1c565b92915050565b5f60208284031215612d5957612d58612851565b5b5f612d6684828501612a7d565b91505092915050565b5f805f60608486031215612d8657612d85612851565b5b5f612d9386828701612a7d565b9350506020612da486828701612a7d565b9250506040612db586828701612ab0565b9150509250925092565b5f60ff82169050919050565b612dd481612dbf565b82525050565b5f602082019050612ded5f830184612dcb565b92915050565b5f8060408385031215612e0957612e08612851565b5b5f612e1685828601612a7d565b9250506020612e2785828601612c83565b9150509250929050565b5f60208284031215612e4657612e45612851565b5b5f612e5384828501612ab0565b91505092915050565b5f805f60608486031215612e7357612e72612851565b5b5f612e8086828701612ab0565b9350506020612e9186828701612ab0565b9250506040612ea286828701612ab0565b9150509250925092565b5f606082019050612ebf5f830186612d1c565b612ecc6020830185612d1c565b612ed96040830184612d1c565b949350505050565b612eea81612a56565b82525050565b5f602082019050612f035f830184612ee1565b92915050565b5f8060408385031215612f1f57612f1e612851565b5b5f612f2c85828601612a7d565b9250506020612f3d85828601612a7d565b9150509250929050565b5f819050919050565b5f612f6a612f65612f6084612a37565b612f47565b612a37565b9050919050565b5f612f7b82612f50565b9050919050565b5f612f8c82612f71565b9050919050565b612f9c81612f82565b82525050565b5f602082019050612fb55f830184612f93565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061302c57607f821691505b60208210810361303f5761303e612fe8565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61307c82612a91565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036130ae576130ad613045565b5b600182019050919050565b5f6040820190506130cc5f830185612ee1565b6130d96020830184612d1c565b9392505050565b5f815190506130ee81612c6d565b92915050565b5f6020828403121561310957613108612851565b5b5f613116848285016130e0565b91505092915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613179602883612997565b91506131848261311f565b604082019050919050565b5f6020820190508181035f8301526131a68161316d565b9050919050565b5f6131b782612a91565b91506131c283612a91565b92508282039050818111156131da576131d9613045565b5b92915050565b5f6131ea82612a91565b91506131f583612a91565b925082820190508082111561320d5761320c613045565b5b92915050565b5f8160011c9050919050565b5f808291508390505b60018511156132685780860481111561324457613243613045565b5b60018516156132535780820291505b808102905061326185613213565b9450613228565b94509492505050565b5f82613280576001905061333b565b8161328d575f905061333b565b81600181146132a357600281146132ad576132dc565b600191505061333b565b60ff8411156132bf576132be613045565b5b8360020a9150848211156132d6576132d5613045565b5b5061333b565b5060208310610133831016604e8410600b84101617156133115782820a90508381111561330c5761330b613045565b5b61333b565b61331e848484600161321f565b9250905081840481111561333557613334613045565b5b81810290505b9392505050565b5f61334c82612a91565b915061335783612dbf565b92506133847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613271565b905092915050565b5f61339682612a91565b91506133a183612a91565b92508282026133af81612a91565b915082820484148315176133c6576133c5613045565b5b5092915050565b7f54726164696e6720697320616c726561647920656e61626c65640000000000005f82015250565b5f613401601a83612997565b915061340c826133cd565b602082019050919050565b5f6020820190508181035f83015261342e816133f5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61348f602583612997565b915061349a82613435565b604082019050919050565b5f6020820190508181035f8301526134bc81613483565b9050919050565b7f43616e2774206368616e6765207768656e2074726164696e67206861732073745f8201527f6172746564000000000000000000000000000000000000000000000000000000602082015250565b5f61351d602583612997565b9150613528826134c3565b604082019050919050565b5f6020820190508181035f83015261354a81613511565b9050919050565b7f426c6f636b2073686f756c64206265206c657373207468616e203300000000005f82015250565b5f613585601b83612997565b915061359082613551565b602082019050919050565b5f6020820190508181035f8301526135b281613579565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613613602683612997565b915061361e826135b9565b604082019050919050565b5f6020820190508181035f83015261364081613607565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61367b602083612997565b915061368682613647565b602082019050919050565b5f6020820190508181035f8301526136a88161366f565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613709602983612997565b9150613714826136af565b604082019050919050565b5f6020820190508181035f830152613736816136fd565b9050919050565b7f596f752063616e2774207472616e7366657220746f6b656e73000000000000005f82015250565b5f613771601983612997565b915061377c8261373d565b602082019050919050565b5f6020820190508181035f83015261379e81613765565b9050919050565b7f54726164696e67206e6f7420656e61626c6564000000000000000000000000005f82015250565b5f6137d9601383612997565b91506137e4826137a5565b602082019050919050565b5f6020820190508181035f830152613806816137cd565b9050919050565b7f596f752061726520657863656564696e67206d617857616c6c65744c696d69745f82015250565b5f613841602083612997565b915061384c8261380d565b602082019050919050565b5f6020820190508181035f83015261386e81613835565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6138ac82612a91565b91506138b783612a91565b9250826138c7576138c6613875565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61392c602483612997565b9150613937826138d2565b604082019050919050565b5f6020820190508181035f83015261395981613920565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6139ba602283612997565b91506139c582613960565b604082019050919050565b5f6020820190508181035f8301526139e7816139ae565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613a48602583612997565b9150613a53826139ee565b604082019050919050565b5f6020820190508181035f830152613a7581613a3c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613ad6602383612997565b9150613ae182613a7c565b604082019050919050565b5f6020820190508181035f830152613b0381613aca565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613b64602683612997565b9150613b6f82613b0a565b604082019050919050565b5f6020820190508181035f830152613b9181613b58565b9050919050565b5f81519050613ba681612a67565b92915050565b5f60208284031215613bc157613bc0612851565b5b5f613bce84828501613b98565b91505092915050565b5f819050919050565b5f613bfa613bf5613bf084613bd7565b612f47565b612a91565b9050919050565b613c0a81613be0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613c4281612a56565b82525050565b5f613c538383613c39565b60208301905092915050565b5f602082019050919050565b5f613c7582613c10565b613c7f8185613c1a565b9350613c8a83613c2a565b805f5b83811015613cba578151613ca18882613c48565b9750613cac83613c5f565b925050600181019050613c8d565b5085935050505092915050565b5f60a082019050613cda5f830188612d1c565b613ce76020830187613c01565b8181036040830152613cf98186613c6b565b9050613d086060830185612ee1565b613d156080830184612d1c565b9695505050505050565b5f60c082019050613d325f830189612ee1565b613d3f6020830188612d1c565b613d4c6040830187613c01565b613d596060830186613c01565b613d666080830185612ee1565b613d7360a0830184612d1c565b979650505050505050565b5f81519050613d8c81612a9a565b92915050565b5f805f60608486031215613da957613da8612851565b5b5f613db686828701613d7e565b9350506020613dc786828701613d7e565b9250506040613dd886828701613d7e565b9150509250925092565b7f416464726573733a20696e73756666696369656e742062616c616e63650000005f82015250565b5f613e16601d83612997565b9150613e2182613de2565b602082019050919050565b5f6020820190508181035f830152613e4381613e0a565b9050919050565b5f81905092915050565b50565b5f613e625f83613e4a565b9150613e6d82613e54565b5f82019050919050565b5f613e8182613e57565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c20725f8201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b5f613ee5603a83612997565b9150613ef082613e8b565b604082019050919050565b5f6020820190508181035f830152613f1281613ed9565b905091905056fea2646970667358221220b218e28a22c09f47a0ccdbe432aa0b4bca8bebf668e12f280ea2110da1c55f3164736f6c63430008140033

Deployed Bytecode

0x608060405260043610610227575f3560e01c8063715018a611610122578063a8aa1b31116100aa578063edaa11681161006e578063edaa1168146107ea578063f2fde38b14610812578063f66895a31461083a578063f7e5ec6814610866578063f887ea401461088e5761022e565b8063a8aa1b31146106e4578063a9059cbb1461070e578063aacebbe31461074a578063c5d32bb214610772578063dd62ed3e146107ae5761022e565b80638a8c523c116100f15780638a8c523c146106165780638da5cb5b1461062c57806395d89b41146106565780639d282cd614610680578063a457c2d7146106a85761022e565b8063715018a614610584578063728f8eea1461059a5780638187f516146105c65780638514022d146105ee5761022e565b806323b872dd116101b05780634324deae116101745780634324deae146104a45780634ada218b146104cc5780634e736f22146104f657806366a88d961461051e57806370a08231146105485761022e565b806323b872dd146103b2578063313ce567146103ee578063355496ca14610418578063395093511461044057806342b6fa111461047c5761022e565b80631340538f116101f75780631340538f146102e857806318160ddd146103105780631816467f1461033a578063193c17d014610362578063215d92a61461038a5761022e565b806206a2101461023257806306fdde031461025a578063095ea7b3146102845780630e375a5c146102c05761022e565b3661022e57005b5f80fd5b34801561023d575f80fd5b506102586004803603810190610253919061290f565b6108b8565b005b348015610265575f80fd5b5061026e61093d565b60405161027b9190612a17565b60405180910390f35b34801561028f575f80fd5b506102aa60048036038101906102a59190612ac4565b6109cd565b6040516102b79190612b1c565b60405180910390f35b3480156102cb575f80fd5b506102e660048036038101906102e19190612c97565b6109ea565b005b3480156102f3575f80fd5b5061030e60048036038101906103099190612cf1565b610a83565b005b34801561031b575f80fd5b50610324610aa8565b6040516103319190612d2b565b60405180910390f35b348015610345575f80fd5b50610360600480360381019061035b9190612d44565b610ab1565b005b34801561036d575f80fd5b5061038860048036038101906103839190612ac4565b610afc565b005b348015610395575f80fd5b506103b060048036038101906103ab9190612c97565b610b9d565b005b3480156103bd575f80fd5b506103d860048036038101906103d39190612d6f565b610c36565b6040516103e59190612b1c565b60405180910390f35b3480156103f9575f80fd5b50610402610cc2565b60405161040f9190612dda565b60405180910390f35b348015610423575f80fd5b5061043e60048036038101906104399190612df3565b610cca565b005b34801561044b575f80fd5b5061046660048036038101906104619190612ac4565b610d2a565b6040516104739190612b1c565b60405180910390f35b348015610487575f80fd5b506104a2600480360381019061049d9190612e31565b610d67565b005b3480156104af575f80fd5b506104ca60048036038101906104c59190612e31565b610d97565b005b3480156104d7575f80fd5b506104e0610dc7565b6040516104ed9190612b1c565b60405180910390f35b348015610501575f80fd5b5061051c60048036038101906105179190612e5c565b610dda565b005b348015610529575f80fd5b50610532610e23565b60405161053f9190612d2b565b60405180910390f35b348015610553575f80fd5b5061056e60048036038101906105699190612d44565b610e29565b60405161057b9190612d2b565b60405180910390f35b34801561058f575f80fd5b50610598610e6e565b005b3480156105a5575f80fd5b506105ae610e81565b6040516105bd93929190612eac565b60405180910390f35b3480156105d1575f80fd5b506105ec60048036038101906105e79190612d44565b610e98565b005b3480156105f9575f80fd5b50610614600480360381019061060f9190612df3565b610ee3565b005b348015610621575f80fd5b5061062a610f43565b005b348015610637575f80fd5b50610640610fda565b60405161064d9190612ef0565b60405180910390f35b348015610661575f80fd5b5061066a611002565b6040516106779190612a17565b60405180910390f35b34801561068b575f80fd5b506106a660048036038101906106a19190612e5c565b611092565b005b3480156106b3575f80fd5b506106ce60048036038101906106c99190612ac4565b6110db565b6040516106db9190612b1c565b60405180910390f35b3480156106ef575f80fd5b506106f861115b565b6040516107059190612ef0565b60405180910390f35b348015610719575f80fd5b50610734600480360381019061072f9190612ac4565b611180565b6040516107419190612b1c565b60405180910390f35b348015610755575f80fd5b50610770600480360381019061076b9190612d44565b611196565b005b34801561077d575f80fd5b5061079860048036038101906107939190612d44565b6111e1565b6040516107a59190612b1c565b60405180910390f35b3480156107b9575f80fd5b506107d460048036038101906107cf9190612f09565b6111fe565b6040516107e19190612d2b565b60405180910390f35b3480156107f5575f80fd5b50610810600480360381019061080b9190612e31565b611280565b005b34801561081d575f80fd5b5061083860048036038101906108339190612d44565b611325565b005b348015610845575f80fd5b5061084e6113a7565b60405161085d93929190612eac565b60405180910390f35b348015610871575f80fd5b5061088c60048036038101906108879190612e31565b6113be565b005b348015610899575f80fd5b506108a2611426565b6040516108af9190612fa2565b60405180910390f35b6108c061144b565b8181905084849050146108d1575f80fd5b5f5b8484905081101561093657610929338686848181106108f5576108f4612fbb565b5b905060200201602081019061090a9190612d44565b85858581811061091d5761091c612fbb565b5b905060200201356114c9565b80806001019150506108d3565b5050505050565b60606003805461094c90613015565b80601f016020809104026020016040519081016040528092919081815260200182805461097890613015565b80156109c35780601f1061099a576101008083540402835291602001916109c3565b820191905f5260205f20905b8154815290600101906020018083116109a657829003601f168201915b5050505050905090565b5f6109e06109d9611d57565b8484611d5e565b6001905092915050565b6109f261144b565b5f5b8251811015610a7e578160155f858481518110610a1457610a13612fbb565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080610a7690613072565b9150506109f4565b505050565b610a8b61144b565b80600760156101000a81548160ff02191690831515021790555050565b5f600254905090565b610ab961144b565b80600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16836040518363ffffffff1660e01b8152600401610b589291906130b9565b6020604051808303815f875af1158015610b74573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b9891906130f4565b505050565b610ba561144b565b5f5b8251811015610c31578160165f858481518110610bc757610bc6612fbb565b5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508080610c2990613072565b915050610ba7565b505050565b5f610c428484846114c9565b5f610c5485610c4f611d57565b6111fe565b905082811015610c99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c909061318f565b60405180910390fd5b610cb685610ca5611d57565b8584610cb191906131ad565b611d5e565b60019150509392505050565b5f6012905090565b610cd261144b565b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f80610d3d610d37611d57565b856111fe565b9050610d5c610d4a611d57565b858584610d5791906131e0565b611d5e565b600191505092915050565b610d6f61144b565b610d77610cc2565b600a610d839190613342565b81610d8e919061338c565b60088190555050565b610d9f61144b565b610da7610cc2565b600a610db39190613342565b81610dbe919061338c565b60098190555050565b600760169054906101000a900460ff1681565b610de261144b565b60405180606001604052808481526020018381526020018281525060125f820151815f01556020820151816001015560408201518160020155905050505050565b60095481565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610e7661144b565b610e7f5f611f21565b565b600f805f0154908060010154908060020154905083565b610ea061144b565b8060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b610eeb61144b565b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b610f4b61144b565b600760169054906101000a900460ff1615610f9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9290613417565b60405180910390fd5b6001600760166101000a81548160ff0219169083151502179055506001600760156101000a81548160ff02191690831515021790555043600a81905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461101190613015565b80601f016020809104026020016040519081016040528092919081815260200182805461103d90613015565b80156110885780601f1061105f57610100808354040283529160200191611088565b820191905f5260205f20905b81548152906001019060200180831161106b57829003601f168201915b5050505050905090565b61109a61144b565b604051806060016040528084815260200183815260200182815250600f5f820151815f01556020820151816001015560408201518160020155905050505050565b5f806110ee6110e8611d57565b856111fe565b905082811015611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a906134a5565b60405180910390fd5b61115061113e611d57565b85858461114b91906131ad565b611d5e565b600191505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f61118c3384846114c9565b6001905092915050565b61119e61144b565b80600d5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6015602052805f5260405f205f915054906101000a900460ff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b61128861144b565b600760169054906101000a900460ff16156112d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cf90613533565b60405180910390fd5b6003811061131b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113129061359b565b60405180910390fd5b80600b8190555050565b61132d61144b565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361139b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139290613629565b60405180910390fd5b6113a481611f21565b50565b6012805f0154908060010154908060020154905083565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015611422573d5f803e3d5ffd5b5050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611453611d57565b73ffffffffffffffffffffffffffffffffffffffff16611471610fda565b73ffffffffffffffffffffffffffffffffffffffff16146114c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114be90613691565b60405180910390fd5b565b5f811161150b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115029061371f565b60405180910390fd5b60165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156115a9575060165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b6115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df90613787565b60405180910390fd5b60155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611686575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156116db57600760169054906101000a900460ff166116da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d1906137ef565b60405180910390fd5b5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614801561177e575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156117975750600760149054906101000a900460ff16155b156117f557600954816117a984610e29565b6117b391906131e0565b11156117f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117eb90613857565b60405180910390fd5b5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015611899575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156118ec575060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156119055750600760149054906101000a900460ff16155b156119b85760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16146119b7576009548161196b84610e29565b61197591906131e0565b11156119b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ad90613857565b60405180910390fd5b5b5b5f805f6119c361282a565b5f60155f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015611a62575060155f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015611a7c5750600b54600a54611a7991906131e0565b43105b9050600760149054906101000a900460ff1680611adf575060155f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b80611b30575060155f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15611b3d575f9250611c6b565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16148015611b97575080155b15611bf75760126002015460125f0154601260010154611bb791906131e0565b611bc191906131e0565b945084935060126040518060600160405290815f8201548152602001600182015481526020016002820154815250509150611c6a565b80611c5757600f60020154600f5f0154600f60010154611c1791906131e0565b611c2191906131e0565b9450849350600f6040518060600160405290815f8201548152602001600182015481526020016002820154815250509150611c69565b8015611c6857600c549450600c5493505b5b5b5b60648487611c79919061338c565b611c8391906138a2565b9250600760159054906101000a900460ff168015611cee575060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614155b15611cfe57611cfd8583611fe4565b5b611d1488888589611d0f91906131ad565b6121ec565b5f831115611d4d575f851115611d4c575f60648688611d33919061338c565b611d3d91906138a2565b9050611d4a8930836121ec565b505b5b5050505050505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc390613942565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e31906139d0565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611f149190612d2b565b60405180910390a3505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600760149054906101000a900460ff166121e8576001600760146101000a81548160ff0219169083151502179055505f8203156121cd575f61202530610e29565b905060085481106121cb57600160085411156120415760085490505b5f60028461204f919061338c565b90505f81846020015184612063919061338c565b61206d91906138a2565b90505f818461207c91906131ad565b90505f47905061208b82612458565b5f814761209891906131ad565b90505f8760200151866120ab91906131ad565b826120b691906138a2565b90505f8860200151826120c9919061338c565b90505f8111156120de576120dd8682612662565b5b5f895f01516002846120f0919061338c565b6120fa919061338c565b90505f81111561214f5761214e81600d5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661273090919063ffffffff16565b5b5f8a60400151600285612162919061338c565b61216c919061338c565b90505f8111156121c1576121c081600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661273090919063ffffffff16565b5b5050505050505050505b505b5f600760146101000a81548160ff0219169083151502179055505b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361225a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161225190613a5e565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036122c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122bf90613aec565b60405180910390fd5b6122d3838383612820565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612356576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234d90613b7a565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161243f9190612d2b565b60405180910390a3612452848484612825565b50505050565b5f600267ffffffffffffffff81111561247457612473612b35565b5b6040519080825280602002602001820160405280156124a25781602001602082028036833780820191505090505b50905030815f815181106124b9576124b8612fbb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561255d573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125819190613bac565b8160018151811061259557612594612fbb565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401612631959493929190613cc7565b5f604051808303815f87803b158015612648575f80fd5b505af115801561265a573d5f803e3d5ffd5b505050505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b81526004016126e896959493929190613d1f565b60606040518083038185885af1158015612704573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906127299190613d92565b5050505050565b80471015612773576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276a90613e2c565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff168260405161279890613e77565b5f6040518083038185875af1925050503d805f81146127d2576040519150601f19603f3d011682016040523d82523d5f602084013e6127d7565b606091505b505090508061281b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281290613efb565b60405180910390fd5b505050565b505050565b505050565b60405180606001604052805f81526020015f81526020015f81525090565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261287a57612879612859565b5b8235905067ffffffffffffffff8111156128975761289661285d565b5b6020830191508360208202830111156128b3576128b2612861565b5b9250929050565b5f8083601f8401126128cf576128ce612859565b5b8235905067ffffffffffffffff8111156128ec576128eb61285d565b5b60208301915083602082028301111561290857612907612861565b5b9250929050565b5f805f806040858703121561292757612926612851565b5b5f85013567ffffffffffffffff81111561294457612943612855565b5b61295087828801612865565b9450945050602085013567ffffffffffffffff81111561297357612972612855565b5b61297f878288016128ba565b925092505092959194509250565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156129c45780820151818401526020810190506129a9565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6129e98261298d565b6129f38185612997565b9350612a038185602086016129a7565b612a0c816129cf565b840191505092915050565b5f6020820190508181035f830152612a2f81846129df565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612a6082612a37565b9050919050565b612a7081612a56565b8114612a7a575f80fd5b50565b5f81359050612a8b81612a67565b92915050565b5f819050919050565b612aa381612a91565b8114612aad575f80fd5b50565b5f81359050612abe81612a9a565b92915050565b5f8060408385031215612ada57612ad9612851565b5b5f612ae785828601612a7d565b9250506020612af885828601612ab0565b9150509250929050565b5f8115159050919050565b612b1681612b02565b82525050565b5f602082019050612b2f5f830184612b0d565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612b6b826129cf565b810181811067ffffffffffffffff82111715612b8a57612b89612b35565b5b80604052505050565b5f612b9c612848565b9050612ba88282612b62565b919050565b5f67ffffffffffffffff821115612bc757612bc6612b35565b5b602082029050602081019050919050565b5f612bea612be584612bad565b612b93565b90508083825260208201905060208402830185811115612c0d57612c0c612861565b5b835b81811015612c365780612c228882612a7d565b845260208401935050602081019050612c0f565b5050509392505050565b5f82601f830112612c5457612c53612859565b5b8135612c64848260208601612bd8565b91505092915050565b612c7681612b02565b8114612c80575f80fd5b50565b5f81359050612c9181612c6d565b92915050565b5f8060408385031215612cad57612cac612851565b5b5f83013567ffffffffffffffff811115612cca57612cc9612855565b5b612cd685828601612c40565b9250506020612ce785828601612c83565b9150509250929050565b5f60208284031215612d0657612d05612851565b5b5f612d1384828501612c83565b91505092915050565b612d2581612a91565b82525050565b5f602082019050612d3e5f830184612d1c565b92915050565b5f60208284031215612d5957612d58612851565b5b5f612d6684828501612a7d565b91505092915050565b5f805f60608486031215612d8657612d85612851565b5b5f612d9386828701612a7d565b9350506020612da486828701612a7d565b9250506040612db586828701612ab0565b9150509250925092565b5f60ff82169050919050565b612dd481612dbf565b82525050565b5f602082019050612ded5f830184612dcb565b92915050565b5f8060408385031215612e0957612e08612851565b5b5f612e1685828601612a7d565b9250506020612e2785828601612c83565b9150509250929050565b5f60208284031215612e4657612e45612851565b5b5f612e5384828501612ab0565b91505092915050565b5f805f60608486031215612e7357612e72612851565b5b5f612e8086828701612ab0565b9350506020612e9186828701612ab0565b9250506040612ea286828701612ab0565b9150509250925092565b5f606082019050612ebf5f830186612d1c565b612ecc6020830185612d1c565b612ed96040830184612d1c565b949350505050565b612eea81612a56565b82525050565b5f602082019050612f035f830184612ee1565b92915050565b5f8060408385031215612f1f57612f1e612851565b5b5f612f2c85828601612a7d565b9250506020612f3d85828601612a7d565b9150509250929050565b5f819050919050565b5f612f6a612f65612f6084612a37565b612f47565b612a37565b9050919050565b5f612f7b82612f50565b9050919050565b5f612f8c82612f71565b9050919050565b612f9c81612f82565b82525050565b5f602082019050612fb55f830184612f93565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061302c57607f821691505b60208210810361303f5761303e612fe8565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61307c82612a91565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036130ae576130ad613045565b5b600182019050919050565b5f6040820190506130cc5f830185612ee1565b6130d96020830184612d1c565b9392505050565b5f815190506130ee81612c6d565b92915050565b5f6020828403121561310957613108612851565b5b5f613116848285016130e0565b91505092915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f613179602883612997565b91506131848261311f565b604082019050919050565b5f6020820190508181035f8301526131a68161316d565b9050919050565b5f6131b782612a91565b91506131c283612a91565b92508282039050818111156131da576131d9613045565b5b92915050565b5f6131ea82612a91565b91506131f583612a91565b925082820190508082111561320d5761320c613045565b5b92915050565b5f8160011c9050919050565b5f808291508390505b60018511156132685780860481111561324457613243613045565b5b60018516156132535780820291505b808102905061326185613213565b9450613228565b94509492505050565b5f82613280576001905061333b565b8161328d575f905061333b565b81600181146132a357600281146132ad576132dc565b600191505061333b565b60ff8411156132bf576132be613045565b5b8360020a9150848211156132d6576132d5613045565b5b5061333b565b5060208310610133831016604e8410600b84101617156133115782820a90508381111561330c5761330b613045565b5b61333b565b61331e848484600161321f565b9250905081840481111561333557613334613045565b5b81810290505b9392505050565b5f61334c82612a91565b915061335783612dbf565b92506133847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484613271565b905092915050565b5f61339682612a91565b91506133a183612a91565b92508282026133af81612a91565b915082820484148315176133c6576133c5613045565b5b5092915050565b7f54726164696e6720697320616c726561647920656e61626c65640000000000005f82015250565b5f613401601a83612997565b915061340c826133cd565b602082019050919050565b5f6020820190508181035f83015261342e816133f5565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61348f602583612997565b915061349a82613435565b604082019050919050565b5f6020820190508181035f8301526134bc81613483565b9050919050565b7f43616e2774206368616e6765207768656e2074726164696e67206861732073745f8201527f6172746564000000000000000000000000000000000000000000000000000000602082015250565b5f61351d602583612997565b9150613528826134c3565b604082019050919050565b5f6020820190508181035f83015261354a81613511565b9050919050565b7f426c6f636b2073686f756c64206265206c657373207468616e203300000000005f82015250565b5f613585601b83612997565b915061359082613551565b602082019050919050565b5f6020820190508181035f8301526135b281613579565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f613613602683612997565b915061361e826135b9565b604082019050919050565b5f6020820190508181035f83015261364081613607565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61367b602083612997565b915061368682613647565b602082019050919050565b5f6020820190508181035f8301526136a88161366f565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b5f613709602983612997565b9150613714826136af565b604082019050919050565b5f6020820190508181035f830152613736816136fd565b9050919050565b7f596f752063616e2774207472616e7366657220746f6b656e73000000000000005f82015250565b5f613771601983612997565b915061377c8261373d565b602082019050919050565b5f6020820190508181035f83015261379e81613765565b9050919050565b7f54726164696e67206e6f7420656e61626c6564000000000000000000000000005f82015250565b5f6137d9601383612997565b91506137e4826137a5565b602082019050919050565b5f6020820190508181035f830152613806816137cd565b9050919050565b7f596f752061726520657863656564696e67206d617857616c6c65744c696d69745f82015250565b5f613841602083612997565b915061384c8261380d565b602082019050919050565b5f6020820190508181035f83015261386e81613835565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6138ac82612a91565b91506138b783612a91565b9250826138c7576138c6613875565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61392c602483612997565b9150613937826138d2565b604082019050919050565b5f6020820190508181035f83015261395981613920565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6139ba602283612997565b91506139c582613960565b604082019050919050565b5f6020820190508181035f8301526139e7816139ae565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f613a48602583612997565b9150613a53826139ee565b604082019050919050565b5f6020820190508181035f830152613a7581613a3c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613ad6602383612997565b9150613ae182613a7c565b604082019050919050565b5f6020820190508181035f830152613b0381613aca565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613b64602683612997565b9150613b6f82613b0a565b604082019050919050565b5f6020820190508181035f830152613b9181613b58565b9050919050565b5f81519050613ba681612a67565b92915050565b5f60208284031215613bc157613bc0612851565b5b5f613bce84828501613b98565b91505092915050565b5f819050919050565b5f613bfa613bf5613bf084613bd7565b612f47565b612a91565b9050919050565b613c0a81613be0565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613c4281612a56565b82525050565b5f613c538383613c39565b60208301905092915050565b5f602082019050919050565b5f613c7582613c10565b613c7f8185613c1a565b9350613c8a83613c2a565b805f5b83811015613cba578151613ca18882613c48565b9750613cac83613c5f565b925050600181019050613c8d565b5085935050505092915050565b5f60a082019050613cda5f830188612d1c565b613ce76020830187613c01565b8181036040830152613cf98186613c6b565b9050613d086060830185612ee1565b613d156080830184612d1c565b9695505050505050565b5f60c082019050613d325f830189612ee1565b613d3f6020830188612d1c565b613d4c6040830187613c01565b613d596060830186613c01565b613d666080830185612ee1565b613d7360a0830184612d1c565b979650505050505050565b5f81519050613d8c81612a9a565b92915050565b5f805f60608486031215613da957613da8612851565b5b5f613db686828701613d7e565b9350506020613dc786828701613d7e565b9250506040613dd886828701613d7e565b9150509250925092565b7f416464726573733a20696e73756666696369656e742062616c616e63650000005f82015250565b5f613e16601d83612997565b9150613e2182613de2565b602082019050919050565b5f6020820190508181035f830152613e4381613e0a565b9050919050565b5f81905092915050565b50565b5f613e625f83613e4a565b9150613e6d82613e54565b5f82019050919050565b5f613e8182613e57565b9150819050919050565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c20725f8201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b5f613ee5603a83612997565b9150613ef082613e8b565b604082019050919050565b5f6020820190508181035f830152613f1281613ed9565b905091905056fea2646970667358221220b218e28a22c09f47a0ccdbe432aa0b4bca8bebf668e12f280ea2110da1c55f3164736f6c63430008140033

Deployed Bytecode Sourcemap

36092:11579:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37277:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25006:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38213:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46985:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44993:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26135:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46348:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47481:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46616:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38407:483;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25977:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46857:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38898:293;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45153:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47220:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36358:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45541:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36469:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26306:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18461:103;;;;;;;;;;;;;:::i;:::-;;36817:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;37179:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46459:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45744:224;;;;;;;;;;;;;:::i;:::-;;17820:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25225:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45340:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39199:440;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36241:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39647:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46225:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36909:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26895:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45976:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18719:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36860:40;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;47360:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36202:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37277:377;17706:13;:11;:13::i;:::-;37443:6:::1;;:13;;37422:10;;:17;;:34;37414:43;;;::::0;::::1;;37473:9;37468:179;37488:10;;:17;;37484:1;:21;37468:179;;;37524:47;37534:10;37546;;37557:1;37546:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;37561:6;;37568:1;37561:9;;;;;;;:::i;:::-;;;;;;;;37524;:47::i;:::-;37617:3;;;;;;;37468:179;;;;37277:377:::0;;;;:::o;25006:100::-;25060:13;25093:5;25086:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25006:100;:::o;38213:186::-;38313:4;38330:39;38339:12;:10;:12::i;:::-;38353:7;38362:6;38330:8;:39::i;:::-;38387:4;38380:11;;38213:186;;;;:::o;46985:227::-;17706:13;:11;:13::i;:::-;47107:9:::1;47102:103;47126:8;:15;47122:1;:19;47102:103;;;47188:5;47163:9;:22;47173:8;47182:1;47173:11;;;;;;;;:::i;:::-;;;;;;;;47163:22;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;47143:3;;;;;:::i;:::-;;;;47102:103;;;;46985:227:::0;;:::o;44993:152::-;17706:13;:11;:13::i;:::-;45132:5:::1;45111:18;;:26;;;;;;;;;;;;;;;;;;44993:152:::0;:::o;26135:108::-;26196:7;26223:12;;26216:19;;26135:108;:::o;46348:103::-;17706:13;:11;:13::i;:::-;46434:9:::1;46422;;:21;;;;;;;;;;;;;;;;;;46348:103:::0;:::o;47481:132::-;47568:8;47561:25;;;47587:9;;;;;;;;;;;47598:6;47561:44;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;47481:132;;:::o;46616:233::-;17706:13;:11;:13::i;:::-;46741:9:::1;46736:106;46760:8;:15;46756:1;:19;46736:106;;;46825:5;46797:12;:25;46810:8;46819:1;46810:11;;;;;;;;:::i;:::-;;;;;;;;46797:25;;;;;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;46777:3;;;;;:::i;:::-;;;;46736:106;;;;46616:233:::0;;:::o;38407:483::-;38539:4;38556:36;38566:6;38574:9;38585:6;38556:9;:36::i;:::-;38605:24;38632:31;38642:6;38650:12;:10;:12::i;:::-;38632:9;:31::i;:::-;38605:58;;38716:6;38696:16;:26;;38674:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;38801:57;38810:6;38818:12;:10;:12::i;:::-;38851:6;38832:16;:25;;;;:::i;:::-;38801:8;:57::i;:::-;38878:4;38871:11;;;38407:483;;;;;:::o;25977:93::-;26035:5;26060:2;26053:9;;25977:93;:::o;46857:120::-;17706:13;:11;:13::i;:::-;46964:5:::1;46942:9;:19;46952:8;46942:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;46857:120:::0;;:::o;38898:293::-;39012:4;39029:24;39056:32;39066:12;:10;:12::i;:::-;39080:7;39056:9;:32::i;:::-;39029:59;;39099:62;39108:12;:10;:12::i;:::-;39122:7;39150:10;39131:16;:29;;;;:::i;:::-;39099:8;:62::i;:::-;39179:4;39172:11;;;38898:293;;;;:::o;45153:179::-;17706:13;:11;:13::i;:::-;45314:10:::1;:8;:10::i;:::-;45308:2;:16;;;;:::i;:::-;45295:10;:29;;;;:::i;:::-;45269:23;:55;;;;45153:179:::0;:::o;47220:132::-;17706:13;:11;:13::i;:::-;47334:10:::1;:8;:10::i;:::-;47328:2;:16;;;;:::i;:::-;47316:9;:28;;;;:::i;:::-;47299:14;:45;;;;47220:132:::0;:::o;36358:34::-;;;;;;;;;;;;;:::o;45541:195::-;17706:13;:11;:13::i;:::-;45693:35:::1;;;;;;;;45699:10;45693:35;;;;45711:10;45693:35;;;;45723:4;45693:35;;::::0;45681:9:::1;:47;;;;;;;;;;;;;;;;;;;;;;;;;;;45541:195:::0;;;:::o;36469:50::-;;;;:::o;26306:127::-;26380:7;26407:9;:18;26417:7;26407:18;;;;;;;;;;;;;;;;26400:25;;26306:127;;;:::o;18461:103::-;17706:13;:11;:13::i;:::-;18526:30:::1;18553:1;18526:18;:30::i;:::-;18461:103::o:0;36817:36::-;;;;;;;;;;;;;;;;;;;:::o;37179:90::-;17706:13;:11;:13::i;:::-;37254:11:::1;37247:4;;:18;;;;;;;;;;;;;;;;;;37179:90:::0;:::o;46459:149::-;17706:13;:11;:13::i;:::-;46595:5:::1;46571:12;:21;46584:7;46571:21;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;46459:149:::0;;:::o;45744:224::-;17706:13;:11;:13::i;:::-;45808:14:::1;;;;;;;;;;;45807:15;45799:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;45881:4;45864:14;;:21;;;;;;;;;;;;;;;;;;45917:4;45896:18;;:25;;;;;;;;;;;;;;;;;;45948:12;45932:13;:28;;;;45744:224::o:0;17820:87::-;17866:7;17893:6;;;;;;;;;;;17886:13;;17820:87;:::o;25225:104::-;25281:13;25314:7;25307:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25225:104;:::o;45340:193::-;17706:13;:11;:13::i;:::-;45490:35:::1;;;;;;;;45496:10;45490:35;;;;45508:10;45490:35;;;;45520:4;45490:35;;::::0;45482:5:::1;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;45340:193:::0;;;:::o;39199:440::-;39318:4;39335:24;39362:32;39372:12;:10;:12::i;:::-;39386:7;39362:9;:32::i;:::-;39335:59;;39449:15;39429:16;:35;;39407:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;39540:67;39549:12;:10;:12::i;:::-;39563:7;39591:15;39572:16;:34;;;;:::i;:::-;39540:8;:67::i;:::-;39627:4;39620:11;;;39199:440;;;;:::o;36241:19::-;;;;;;;;;;;;;:::o;39647:190::-;39750:4;39767:40;39777:10;39789:9;39800:6;39767:9;:40::i;:::-;39825:4;39818:11;;39647:190;;;;:::o;46225:115::-;17706:13;:11;:13::i;:::-;46323:9:::1;46305:15;;:27;;;;;;;;;;;;;;;;;;46225:115:::0;:::o;36909:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;26895:151::-;26984:7;27011:11;:18;27023:5;27011:18;;;;;;;;;;;;;;;:27;27030:7;27011:27;;;;;;;;;;;;;;;;27004:34;;26895:151;;;;:::o;45976:241::-;17706:13;:11;:13::i;:::-;46058:14:::1;;;;;;;;;;;46057:15;46049:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;46145:1;46133:9;:13;46125:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;46200:9;46189:8;:20;;;;45976:241:::0;:::o;18719:201::-;17706:13;:11;:13::i;:::-;18828:1:::1;18808:22;;:8;:22;;::::0;18800:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;18884:28;18903:8;18884:18;:28::i;:::-;18719:201:::0;:::o;36860:40::-;;;;;;;;;;;;;;;;;;;:::o;47360:113::-;47435:9;;;;;;;;;;;47427:27;;:38;47455:9;47427:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47360:113;:::o;36202:32::-;;;;;;;;;;;;;:::o;17985:132::-;18060:12;:10;:12::i;:::-;18049:23;;:7;:5;:7::i;:::-;:23;;;18041:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17985:132::o;39845:2658::-;39995:1;39986:6;:10;39978:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40076:12;:20;40089:6;40076:20;;;;;;;;;;;;;;;;;;;;;;;;;40075:21;:49;;;;;40101:12;:23;40114:9;40101:23;;;;;;;;;;;;;;;;;;;;;;;;;40100:24;40075:49;40053:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;40195:9;:17;40205:6;40195:17;;;;;;;;;;;;;;;;;;;;;;;;;40194:18;:43;;;;;40217:9;:20;40227:9;40217:20;;;;;;;;;;;;;;;;;;;;;;;;;40216:21;40194:43;40190:122;;;40262:14;;;;;;;;;;;40254:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;40190:122;40338:4;;;;;;;;;;;40328:14;;:6;:14;;;:39;;;;;40347:9;:20;40357:9;40347:20;;;;;;;;;;;;;;;;;;;;;;;;;40346:21;40328:39;:59;;;;;40372:15;;;;;;;;;;;40371:16;40328:59;40324:233;;;40463:14;;40453:6;40430:20;40440:9;40430;:20::i;:::-;:29;;;;:::i;:::-;:47;;40404:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;40324:233;40597:4;;;;;;;;;;;40587:14;;:6;:14;;;;:52;;;;;40619:9;:20;40629:9;40619:20;;;;;;;;;;;;;;;;;;;;;;;;;40618:21;40587:52;:87;;;;;40657:9;:17;40667:6;40657:17;;;;;;;;;;;;;;;;;;;;;;;;;40656:18;40587:87;:120;;;;;40692:15;;;;;;;;;;;40691:16;40587:120;40569:387;;;40751:4;;;;;;;;;;;40738:17;;:9;:17;;;40734:211;;40839:14;;40829:6;40806:20;40816:9;40806;:20::i;:::-;:29;;;;:::i;:::-;:47;;40776:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;40734:211;40569:387;40968:15;40994:14;41019:11;41041:25;;:::i;:::-;41079:17;41100:9;:17;41110:6;41100:17;;;;;;;;;;;;;;;;;;;;;;;;;41099:18;:56;;;;;41135:9;:20;41145:9;41135:20;;;;;;;;;;;;;;;;;;;;;;;;;41134:21;41099:56;:112;;;;;41203:8;;41187:13;;:24;;;;:::i;:::-;41172:12;:39;41099:112;41079:132;;41299:15;;;;;;;;;;;:36;;;;41318:9;:17;41328:6;41318:17;;;;;;;;;;;;;;;;;;;;;;;;;41299:36;:60;;;;41339:9;:20;41349:9;41339:20;;;;;;;;;;;;;;;;;;;;;;;;;41299:60;41295:613;;;41380:1;41374:7;;41295:613;;;41445:4;;;;;;;;;;;41432:17;;:9;:17;;;:34;;;;;41454:12;41453:13;41432:34;41428:480;;;41537:9;:13;;;41515:9;:19;;;41493:9;:19;;;:41;;;;:::i;:::-;:57;;;;:::i;:::-;41483:67;;41574:7;41565:16;;41611:9;41596:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41428:480;;;41643:12;41638:270;;41718:5;:9;;;41700:5;:15;;;41682:5;:15;;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;41672:55;;41751:7;41742:16;;41788:5;41773:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41638:270;;;41815:12;41811:97;;;41854:9;;41844:19;;41887:9;;41878:18;;41811:97;41638:270;41428:480;41295:613;41946:3;41936:6;41927;:15;;;;:::i;:::-;41926:23;;;;:::i;:::-;41920:29;;42063:18;;;;;;;;;;;:36;;;;;42095:4;;;;;;;;;;;42085:14;;:6;:14;;;;42063:36;42059:89;;;42114:34;42126:7;42135:12;42114:11;:34::i;:::-;42059:89;42190:48;42206:6;42214:9;42234:3;42225:6;:12;;;;:::i;:::-;42190:15;:48::i;:::-;42259:1;42253:3;:7;42249:247;;;42335:1;42325:7;:11;42321:164;;;42357:17;42398:3;42387:7;42378:6;:16;;;;:::i;:::-;42377:24;;;;:::i;:::-;42357:44;;42420:49;42436:6;42452:4;42459:9;42420:15;:49::i;:::-;42338:147;42321:164;42249:247;39967:2536;;;;;39845:2658;;;:::o;16371:98::-;16424:7;16451:10;16444:17;;16371:98;:::o;33551:346::-;33670:1;33653:19;;:5;:19;;;33645:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33751:1;33732:21;;:7;:21;;;33724:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33835:6;33805:11;:18;33817:5;33805:18;;;;;;;;;;;;;;;:27;33824:7;33805:27;;;;;;;;;;;;;;;:36;;;;33873:7;33857:32;;33866:5;33857:32;;;33882:6;33857:32;;;;;;:::i;:::-;;;;;;;;33551:346;;;:::o;19080:191::-;19154:16;19173:6;;;;;;;;;;;19154:25;;19199:8;19190:6;;:17;;;;;;;;;;;;;;;;;;19254:8;19223:40;;19244:8;19223:40;;;;;;;;;;;;19143:128;19080:191;:::o;42511:1634::-;37048:15;;;;;;;;;;;37043:125;;37098:4;37080:15;;:22;;;;;;;;;;;;;;;;;;42642:1:::1;42631:7;:12:::0;42627:51;42660:7:::1;42627:51;42690:23;42716:24;42734:4;42716:9;:24::i;:::-;42690:50;;42774:23;;42755:15;:42;42751:1387;;42844:1;42818:23;;:27;42814:109;;;42884:23;;42866:41;;42814:109;42994:19;43026:1;43016:7;:11;;;;:::i;:::-;42994:33;;43042:32;43136:11;43113:9;:19;;;43078:15;:54;;;;:::i;:::-;43077:70;;;;:::i;:::-;43042:105;;43162:14;43197:24;43179:15;:42;;;;:::i;:::-;43162:59;;43238:22;43263:21;43238:46;;43301:24;43318:6;43301:16;:24::i;:::-;43342:20;43389:14;43365:21;:38;;;;:::i;:::-;43342:61;;43418:19;43487:9;:19;;;43473:11;:33;;;;:::i;:::-;43440:12;:67;;;;:::i;:::-;43418:89;;43522:29;43568:9;:19;;;43554:11;:33;;;;:::i;:::-;43522:65;;43632:1;43608:21;:25;43604:161;;;43688:61;43701:24;43727:21;43688:12;:61::i;:::-;43604:161;43781:20;43822:9;:19;;;43818:1;43804:11;:15;;;;:::i;:::-;:37;;;;:::i;:::-;43781:60;;43875:1;43860:12;:16;43856:105;;;43897:48;43932:12;43905:15;;;;;;;;;;;43897:34;;;;:48;;;;:::i;:::-;43856:105;43977:14;44012:9;:13;;;44008:1;43994:11;:15;;;;:::i;:::-;:31;;;;:::i;:::-;43977:48;;44053:1;44044:6;:10;44040:87;;;44075:36;44104:6;44083:9;;;;;;;;;;;44075:28;;;;:36;;;;:::i;:::-;44040:87;42799:1339;;;;;;;;;42751:1387;42616:1529;37117:1;37151:5:::0;37133:15;;:23;;;;;;;;;;;;;;;;;;37043:125;42511:1634;;:::o;30464:806::-;30577:1;30561:18;;:4;:18;;;30553:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30654:1;30640:16;;:2;:16;;;30632:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;30709:38;30730:4;30736:2;30740:6;30709:20;:38::i;:::-;30760:19;30782:9;:15;30792:4;30782:15;;;;;;;;;;;;;;;;30760:37;;30831:6;30816:11;:21;;30808:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;30948:6;30934:11;:20;30916:9;:15;30926:4;30916:15;;;;;;;;;;;;;;;:38;;;;31151:6;31134:9;:13;31144:2;31134:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;31201:2;31186:26;;31195:4;31186:26;;;31205:6;31186:26;;;;;;:::i;:::-;;;;;;;;31225:37;31245:4;31251:2;31255:6;31225:19;:37::i;:::-;30542:728;30464:806;;;:::o;44153:460::-;44271:21;44309:1;44295:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44271:40;;44340:4;44322;44327:1;44322:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44366:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44356:4;44361:1;44356:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44418:6;;;;;;;;;;;:57;;;44490:11;44516:1;44532:4;44559;44579:15;44418:187;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44208:405;44153:460;:::o;44621:364::-;44732:6;;;;;;;;;;;:22;;;44762:9;44795:4;44815:11;44841:1;44884;44927:9;;;;;;;;;;;44951:15;44732:245;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44621:364;;:::o;8792:317::-;8907:6;8882:21;:31;;8874:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8961:12;8979:9;:14;;9001:6;8979:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8960:52;;;9031:7;9023:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;8863:246;8792:317;;:::o;35207:91::-;;;;:::o;35902:90::-;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:117;443:1;440;433:12;457:117;566:1;563;556:12;580:117;689:1;686;679:12;720:568;793:8;803:6;853:3;846:4;838:6;834:17;830:27;820:122;;861:79;;:::i;:::-;820:122;974:6;961:20;951:30;;1004:18;996:6;993:30;990:117;;;1026:79;;:::i;:::-;990:117;1140:4;1132:6;1128:17;1116:29;;1194:3;1186:4;1178:6;1174:17;1164:8;1160:32;1157:41;1154:128;;;1201:79;;:::i;:::-;1154:128;720:568;;;;;:::o;1311:::-;1384:8;1394:6;1444:3;1437:4;1429:6;1425:17;1421:27;1411:122;;1452:79;;:::i;:::-;1411:122;1565:6;1552:20;1542:30;;1595:18;1587:6;1584:30;1581:117;;;1617:79;;:::i;:::-;1581:117;1731:4;1723:6;1719:17;1707:29;;1785:3;1777:4;1769:6;1765:17;1755:8;1751:32;1748:41;1745:128;;;1792:79;;:::i;:::-;1745:128;1311:568;;;;;:::o;1885:934::-;2007:6;2015;2023;2031;2080:2;2068:9;2059:7;2055:23;2051:32;2048:119;;;2086:79;;:::i;:::-;2048:119;2234:1;2223:9;2219:17;2206:31;2264:18;2256:6;2253:30;2250:117;;;2286:79;;:::i;:::-;2250:117;2399:80;2471:7;2462:6;2451:9;2447:22;2399:80;:::i;:::-;2381:98;;;;2177:312;2556:2;2545:9;2541:18;2528:32;2587:18;2579:6;2576:30;2573:117;;;2609:79;;:::i;:::-;2573:117;2722:80;2794:7;2785:6;2774:9;2770:22;2722:80;:::i;:::-;2704:98;;;;2499:313;1885:934;;;;;;;:::o;2825:99::-;2877:6;2911:5;2905:12;2895:22;;2825:99;;;:::o;2930:169::-;3014:11;3048:6;3043:3;3036:19;3088:4;3083:3;3079:14;3064:29;;2930:169;;;;:::o;3105:246::-;3186:1;3196:113;3210:6;3207:1;3204:13;3196:113;;;3295:1;3290:3;3286:11;3280:18;3276:1;3271:3;3267:11;3260:39;3232:2;3229:1;3225:10;3220:15;;3196:113;;;3343:1;3334:6;3329:3;3325:16;3318:27;3167:184;3105:246;;;:::o;3357:102::-;3398:6;3449:2;3445:7;3440:2;3433:5;3429:14;3425:28;3415:38;;3357:102;;;:::o;3465:377::-;3553:3;3581:39;3614:5;3581:39;:::i;:::-;3636:71;3700:6;3695:3;3636:71;:::i;:::-;3629:78;;3716:65;3774:6;3769:3;3762:4;3755:5;3751:16;3716:65;:::i;:::-;3806:29;3828:6;3806:29;:::i;:::-;3801:3;3797:39;3790:46;;3557:285;3465:377;;;;:::o;3848:313::-;3961:4;3999:2;3988:9;3984:18;3976:26;;4048:9;4042:4;4038:20;4034:1;4023:9;4019:17;4012:47;4076:78;4149:4;4140:6;4076:78;:::i;:::-;4068:86;;3848:313;;;;:::o;4167:126::-;4204:7;4244:42;4237:5;4233:54;4222:65;;4167:126;;;:::o;4299:96::-;4336:7;4365:24;4383:5;4365:24;:::i;:::-;4354:35;;4299:96;;;:::o;4401:122::-;4474:24;4492:5;4474:24;:::i;:::-;4467:5;4464:35;4454:63;;4513:1;4510;4503:12;4454:63;4401:122;:::o;4529:139::-;4575:5;4613:6;4600:20;4591:29;;4629:33;4656:5;4629:33;:::i;:::-;4529:139;;;;:::o;4674:77::-;4711:7;4740:5;4729:16;;4674:77;;;:::o;4757:122::-;4830:24;4848:5;4830:24;:::i;:::-;4823:5;4820:35;4810:63;;4869:1;4866;4859:12;4810:63;4757:122;:::o;4885:139::-;4931:5;4969:6;4956:20;4947:29;;4985:33;5012:5;4985:33;:::i;:::-;4885:139;;;;:::o;5030:474::-;5098:6;5106;5155:2;5143:9;5134:7;5130:23;5126:32;5123:119;;;5161:79;;:::i;:::-;5123:119;5281:1;5306:53;5351:7;5342:6;5331:9;5327:22;5306:53;:::i;:::-;5296:63;;5252:117;5408:2;5434:53;5479:7;5470:6;5459:9;5455:22;5434:53;:::i;:::-;5424:63;;5379:118;5030:474;;;;;:::o;5510:90::-;5544:7;5587:5;5580:13;5573:21;5562:32;;5510:90;;;:::o;5606:109::-;5687:21;5702:5;5687:21;:::i;:::-;5682:3;5675:34;5606:109;;:::o;5721:210::-;5808:4;5846:2;5835:9;5831:18;5823:26;;5859:65;5921:1;5910:9;5906:17;5897:6;5859:65;:::i;:::-;5721:210;;;;:::o;5937:180::-;5985:77;5982:1;5975:88;6082:4;6079:1;6072:15;6106:4;6103:1;6096:15;6123:281;6206:27;6228:4;6206:27;:::i;:::-;6198:6;6194:40;6336:6;6324:10;6321:22;6300:18;6288:10;6285:34;6282:62;6279:88;;;6347:18;;:::i;:::-;6279:88;6387:10;6383:2;6376:22;6166:238;6123:281;;:::o;6410:129::-;6444:6;6471:20;;:::i;:::-;6461:30;;6500:33;6528:4;6520:6;6500:33;:::i;:::-;6410:129;;;:::o;6545:311::-;6622:4;6712:18;6704:6;6701:30;6698:56;;;6734:18;;:::i;:::-;6698:56;6784:4;6776:6;6772:17;6764:25;;6844:4;6838;6834:15;6826:23;;6545:311;;;:::o;6879:710::-;6975:5;7000:81;7016:64;7073:6;7016:64;:::i;:::-;7000:81;:::i;:::-;6991:90;;7101:5;7130:6;7123:5;7116:21;7164:4;7157:5;7153:16;7146:23;;7217:4;7209:6;7205:17;7197:6;7193:30;7246:3;7238:6;7235:15;7232:122;;;7265:79;;:::i;:::-;7232:122;7380:6;7363:220;7397:6;7392:3;7389:15;7363:220;;;7472:3;7501:37;7534:3;7522:10;7501:37;:::i;:::-;7496:3;7489:50;7568:4;7563:3;7559:14;7552:21;;7439:144;7423:4;7418:3;7414:14;7407:21;;7363:220;;;7367:21;6981:608;;6879:710;;;;;:::o;7612:370::-;7683:5;7732:3;7725:4;7717:6;7713:17;7709:27;7699:122;;7740:79;;:::i;:::-;7699:122;7857:6;7844:20;7882:94;7972:3;7964:6;7957:4;7949:6;7945:17;7882:94;:::i;:::-;7873:103;;7689:293;7612:370;;;;:::o;7988:116::-;8058:21;8073:5;8058:21;:::i;:::-;8051:5;8048:32;8038:60;;8094:1;8091;8084:12;8038:60;7988:116;:::o;8110:133::-;8153:5;8191:6;8178:20;8169:29;;8207:30;8231:5;8207:30;:::i;:::-;8110:133;;;;:::o;8249:678::-;8339:6;8347;8396:2;8384:9;8375:7;8371:23;8367:32;8364:119;;;8402:79;;:::i;:::-;8364:119;8550:1;8539:9;8535:17;8522:31;8580:18;8572:6;8569:30;8566:117;;;8602:79;;:::i;:::-;8566:117;8707:78;8777:7;8768:6;8757:9;8753:22;8707:78;:::i;:::-;8697:88;;8493:302;8834:2;8860:50;8902:7;8893:6;8882:9;8878:22;8860:50;:::i;:::-;8850:60;;8805:115;8249:678;;;;;:::o;8933:323::-;8989:6;9038:2;9026:9;9017:7;9013:23;9009:32;9006:119;;;9044:79;;:::i;:::-;9006:119;9164:1;9189:50;9231:7;9222:6;9211:9;9207:22;9189:50;:::i;:::-;9179:60;;9135:114;8933:323;;;;:::o;9262:118::-;9349:24;9367:5;9349:24;:::i;:::-;9344:3;9337:37;9262:118;;:::o;9386:222::-;9479:4;9517:2;9506:9;9502:18;9494:26;;9530:71;9598:1;9587:9;9583:17;9574:6;9530:71;:::i;:::-;9386:222;;;;:::o;9614:329::-;9673:6;9722:2;9710:9;9701:7;9697:23;9693:32;9690:119;;;9728:79;;:::i;:::-;9690:119;9848:1;9873:53;9918:7;9909:6;9898:9;9894:22;9873:53;:::i;:::-;9863:63;;9819:117;9614:329;;;;:::o;9949:619::-;10026:6;10034;10042;10091:2;10079:9;10070:7;10066:23;10062:32;10059:119;;;10097:79;;:::i;:::-;10059:119;10217:1;10242:53;10287:7;10278:6;10267:9;10263:22;10242:53;:::i;:::-;10232:63;;10188:117;10344:2;10370:53;10415:7;10406:6;10395:9;10391:22;10370:53;:::i;:::-;10360:63;;10315:118;10472:2;10498:53;10543:7;10534:6;10523:9;10519:22;10498:53;:::i;:::-;10488:63;;10443:118;9949:619;;;;;:::o;10574:86::-;10609:7;10649:4;10642:5;10638:16;10627:27;;10574:86;;;:::o;10666:112::-;10749:22;10765:5;10749:22;:::i;:::-;10744:3;10737:35;10666:112;;:::o;10784:214::-;10873:4;10911:2;10900:9;10896:18;10888:26;;10924:67;10988:1;10977:9;10973:17;10964:6;10924:67;:::i;:::-;10784:214;;;;:::o;11004:468::-;11069:6;11077;11126:2;11114:9;11105:7;11101:23;11097:32;11094:119;;;11132:79;;:::i;:::-;11094:119;11252:1;11277:53;11322:7;11313:6;11302:9;11298:22;11277:53;:::i;:::-;11267:63;;11223:117;11379:2;11405:50;11447:7;11438:6;11427:9;11423:22;11405:50;:::i;:::-;11395:60;;11350:115;11004:468;;;;;:::o;11478:329::-;11537:6;11586:2;11574:9;11565:7;11561:23;11557:32;11554:119;;;11592:79;;:::i;:::-;11554:119;11712:1;11737:53;11782:7;11773:6;11762:9;11758:22;11737:53;:::i;:::-;11727:63;;11683:117;11478:329;;;;:::o;11813:619::-;11890:6;11898;11906;11955:2;11943:9;11934:7;11930:23;11926:32;11923:119;;;11961:79;;:::i;:::-;11923:119;12081:1;12106:53;12151:7;12142:6;12131:9;12127:22;12106:53;:::i;:::-;12096:63;;12052:117;12208:2;12234:53;12279:7;12270:6;12259:9;12255:22;12234:53;:::i;:::-;12224:63;;12179:118;12336:2;12362:53;12407:7;12398:6;12387:9;12383:22;12362:53;:::i;:::-;12352:63;;12307:118;11813:619;;;;;:::o;12438:442::-;12587:4;12625:2;12614:9;12610:18;12602:26;;12638:71;12706:1;12695:9;12691:17;12682:6;12638:71;:::i;:::-;12719:72;12787:2;12776:9;12772:18;12763:6;12719:72;:::i;:::-;12801;12869:2;12858:9;12854:18;12845:6;12801:72;:::i;:::-;12438:442;;;;;;:::o;12886:118::-;12973:24;12991:5;12973:24;:::i;:::-;12968:3;12961:37;12886:118;;:::o;13010:222::-;13103:4;13141:2;13130:9;13126:18;13118:26;;13154:71;13222:1;13211:9;13207:17;13198:6;13154:71;:::i;:::-;13010:222;;;;:::o;13238:474::-;13306:6;13314;13363:2;13351:9;13342:7;13338:23;13334:32;13331:119;;;13369:79;;:::i;:::-;13331:119;13489:1;13514:53;13559:7;13550:6;13539:9;13535:22;13514:53;:::i;:::-;13504:63;;13460:117;13616:2;13642:53;13687:7;13678:6;13667:9;13663:22;13642:53;:::i;:::-;13632:63;;13587:118;13238:474;;;;;:::o;13718:60::-;13746:3;13767:5;13760:12;;13718:60;;;:::o;13784:142::-;13834:9;13867:53;13885:34;13894:24;13912:5;13894:24;:::i;:::-;13885:34;:::i;:::-;13867:53;:::i;:::-;13854:66;;13784:142;;;:::o;13932:126::-;13982:9;14015:37;14046:5;14015:37;:::i;:::-;14002:50;;13932:126;;;:::o;14064:152::-;14140:9;14173:37;14204:5;14173:37;:::i;:::-;14160:50;;14064:152;;;:::o;14222:183::-;14335:63;14392:5;14335:63;:::i;:::-;14330:3;14323:76;14222:183;;:::o;14411:274::-;14530:4;14568:2;14557:9;14553:18;14545:26;;14581:97;14675:1;14664:9;14660:17;14651:6;14581:97;:::i;:::-;14411:274;;;;:::o;14691:180::-;14739:77;14736:1;14729:88;14836:4;14833:1;14826:15;14860:4;14857:1;14850:15;14877:180;14925:77;14922:1;14915:88;15022:4;15019:1;15012:15;15046:4;15043:1;15036:15;15063:320;15107:6;15144:1;15138:4;15134:12;15124:22;;15191:1;15185:4;15181:12;15212:18;15202:81;;15268:4;15260:6;15256:17;15246:27;;15202:81;15330:2;15322:6;15319:14;15299:18;15296:38;15293:84;;15349:18;;:::i;:::-;15293:84;15114:269;15063:320;;;:::o;15389:180::-;15437:77;15434:1;15427:88;15534:4;15531:1;15524:15;15558:4;15555:1;15548:15;15575:233;15614:3;15637:24;15655:5;15637:24;:::i;:::-;15628:33;;15683:66;15676:5;15673:77;15670:103;;15753:18;;:::i;:::-;15670:103;15800:1;15793:5;15789:13;15782:20;;15575:233;;;:::o;15814:332::-;15935:4;15973:2;15962:9;15958:18;15950:26;;15986:71;16054:1;16043:9;16039:17;16030:6;15986:71;:::i;:::-;16067:72;16135:2;16124:9;16120:18;16111:6;16067:72;:::i;:::-;15814:332;;;;;:::o;16152:137::-;16206:5;16237:6;16231:13;16222:22;;16253:30;16277:5;16253:30;:::i;:::-;16152:137;;;;:::o;16295:345::-;16362:6;16411:2;16399:9;16390:7;16386:23;16382:32;16379:119;;;16417:79;;:::i;:::-;16379:119;16537:1;16562:61;16615:7;16606:6;16595:9;16591:22;16562:61;:::i;:::-;16552:71;;16508:125;16295:345;;;;:::o;16646:227::-;16786:34;16782:1;16774:6;16770:14;16763:58;16855:10;16850:2;16842:6;16838:15;16831:35;16646:227;:::o;16879:366::-;17021:3;17042:67;17106:2;17101:3;17042:67;:::i;:::-;17035:74;;17118:93;17207:3;17118:93;:::i;:::-;17236:2;17231:3;17227:12;17220:19;;16879:366;;;:::o;17251:419::-;17417:4;17455:2;17444:9;17440:18;17432:26;;17504:9;17498:4;17494:20;17490:1;17479:9;17475:17;17468:47;17532:131;17658:4;17532:131;:::i;:::-;17524:139;;17251:419;;;:::o;17676:194::-;17716:4;17736:20;17754:1;17736:20;:::i;:::-;17731:25;;17770:20;17788:1;17770:20;:::i;:::-;17765:25;;17814:1;17811;17807:9;17799:17;;17838:1;17832:4;17829:11;17826:37;;;17843:18;;:::i;:::-;17826:37;17676:194;;;;:::o;17876:191::-;17916:3;17935:20;17953:1;17935:20;:::i;:::-;17930:25;;17969:20;17987:1;17969:20;:::i;:::-;17964:25;;18012:1;18009;18005:9;17998:16;;18033:3;18030:1;18027:10;18024:36;;;18040:18;;:::i;:::-;18024:36;17876:191;;;;:::o;18073:102::-;18115:8;18162:5;18159:1;18155:13;18134:34;;18073:102;;;:::o;18181:848::-;18242:5;18249:4;18273:6;18264:15;;18297:5;18288:14;;18311:712;18332:1;18322:8;18319:15;18311:712;;;18427:4;18422:3;18418:14;18412:4;18409:24;18406:50;;;18436:18;;:::i;:::-;18406:50;18486:1;18476:8;18472:16;18469:451;;;18901:4;18894:5;18890:16;18881:25;;18469:451;18951:4;18945;18941:15;18933:23;;18981:32;19004:8;18981:32;:::i;:::-;18969:44;;18311:712;;;18181:848;;;;;;;:::o;19035:1073::-;19089:5;19280:8;19270:40;;19301:1;19292:10;;19303:5;;19270:40;19329:4;19319:36;;19346:1;19337:10;;19348:5;;19319:36;19415:4;19463:1;19458:27;;;;19499:1;19494:191;;;;19408:277;;19458:27;19476:1;19467:10;;19478:5;;;19494:191;19539:3;19529:8;19526:17;19523:43;;;19546:18;;:::i;:::-;19523:43;19595:8;19592:1;19588:16;19579:25;;19630:3;19623:5;19620:14;19617:40;;;19637:18;;:::i;:::-;19617:40;19670:5;;;19408:277;;19794:2;19784:8;19781:16;19775:3;19769:4;19766:13;19762:36;19744:2;19734:8;19731:16;19726:2;19720:4;19717:12;19713:35;19697:111;19694:246;;;19850:8;19844:4;19840:19;19831:28;;19885:3;19878:5;19875:14;19872:40;;;19892:18;;:::i;:::-;19872:40;19925:5;;19694:246;19965:42;20003:3;19993:8;19987:4;19984:1;19965:42;:::i;:::-;19950:57;;;;20039:4;20034:3;20030:14;20023:5;20020:25;20017:51;;;20048:18;;:::i;:::-;20017:51;20097:4;20090:5;20086:16;20077:25;;19035:1073;;;;;;:::o;20114:281::-;20172:5;20196:23;20214:4;20196:23;:::i;:::-;20188:31;;20240:25;20256:8;20240:25;:::i;:::-;20228:37;;20284:104;20321:66;20311:8;20305:4;20284:104;:::i;:::-;20275:113;;20114:281;;;;:::o;20401:410::-;20441:7;20464:20;20482:1;20464:20;:::i;:::-;20459:25;;20498:20;20516:1;20498:20;:::i;:::-;20493:25;;20553:1;20550;20546:9;20575:30;20593:11;20575:30;:::i;:::-;20564:41;;20754:1;20745:7;20741:15;20738:1;20735:22;20715:1;20708:9;20688:83;20665:139;;20784:18;;:::i;:::-;20665:139;20449:362;20401:410;;;;:::o;20817:176::-;20957:28;20953:1;20945:6;20941:14;20934:52;20817:176;:::o;20999:366::-;21141:3;21162:67;21226:2;21221:3;21162:67;:::i;:::-;21155:74;;21238:93;21327:3;21238:93;:::i;:::-;21356:2;21351:3;21347:12;21340:19;;20999:366;;;:::o;21371:419::-;21537:4;21575:2;21564:9;21560:18;21552:26;;21624:9;21618:4;21614:20;21610:1;21599:9;21595:17;21588:47;21652:131;21778:4;21652:131;:::i;:::-;21644:139;;21371:419;;;:::o;21796:224::-;21936:34;21932:1;21924:6;21920:14;21913:58;22005:7;22000:2;21992:6;21988:15;21981:32;21796:224;:::o;22026:366::-;22168:3;22189:67;22253:2;22248:3;22189:67;:::i;:::-;22182:74;;22265:93;22354:3;22265:93;:::i;:::-;22383:2;22378:3;22374:12;22367:19;;22026:366;;;:::o;22398:419::-;22564:4;22602:2;22591:9;22587:18;22579:26;;22651:9;22645:4;22641:20;22637:1;22626:9;22622:17;22615:47;22679:131;22805:4;22679:131;:::i;:::-;22671:139;;22398:419;;;:::o;22823:224::-;22963:34;22959:1;22951:6;22947:14;22940:58;23032:7;23027:2;23019:6;23015:15;23008:32;22823:224;:::o;23053:366::-;23195:3;23216:67;23280:2;23275:3;23216:67;:::i;:::-;23209:74;;23292:93;23381:3;23292:93;:::i;:::-;23410:2;23405:3;23401:12;23394:19;;23053:366;;;:::o;23425:419::-;23591:4;23629:2;23618:9;23614:18;23606:26;;23678:9;23672:4;23668:20;23664:1;23653:9;23649:17;23642:47;23706:131;23832:4;23706:131;:::i;:::-;23698:139;;23425:419;;;:::o;23850:177::-;23990:29;23986:1;23978:6;23974:14;23967:53;23850:177;:::o;24033:366::-;24175:3;24196:67;24260:2;24255:3;24196:67;:::i;:::-;24189:74;;24272:93;24361:3;24272:93;:::i;:::-;24390:2;24385:3;24381:12;24374:19;;24033:366;;;:::o;24405:419::-;24571:4;24609:2;24598:9;24594:18;24586:26;;24658:9;24652:4;24648:20;24644:1;24633:9;24629:17;24622:47;24686:131;24812:4;24686:131;:::i;:::-;24678:139;;24405:419;;;:::o;24830:225::-;24970:34;24966:1;24958:6;24954:14;24947:58;25039:8;25034:2;25026:6;25022:15;25015:33;24830:225;:::o;25061:366::-;25203:3;25224:67;25288:2;25283:3;25224:67;:::i;:::-;25217:74;;25300:93;25389:3;25300:93;:::i;:::-;25418:2;25413:3;25409:12;25402:19;;25061:366;;;:::o;25433:419::-;25599:4;25637:2;25626:9;25622:18;25614:26;;25686:9;25680:4;25676:20;25672:1;25661:9;25657:17;25650:47;25714:131;25840:4;25714:131;:::i;:::-;25706:139;;25433:419;;;:::o;25858:182::-;25998:34;25994:1;25986:6;25982:14;25975:58;25858:182;:::o;26046:366::-;26188:3;26209:67;26273:2;26268:3;26209:67;:::i;:::-;26202:74;;26285:93;26374:3;26285:93;:::i;:::-;26403:2;26398:3;26394:12;26387:19;;26046:366;;;:::o;26418:419::-;26584:4;26622:2;26611:9;26607:18;26599:26;;26671:9;26665:4;26661:20;26657:1;26646:9;26642:17;26635:47;26699:131;26825:4;26699:131;:::i;:::-;26691:139;;26418:419;;;:::o;26843:228::-;26983:34;26979:1;26971:6;26967:14;26960:58;27052:11;27047:2;27039:6;27035:15;27028:36;26843:228;:::o;27077:366::-;27219:3;27240:67;27304:2;27299:3;27240:67;:::i;:::-;27233:74;;27316:93;27405:3;27316:93;:::i;:::-;27434:2;27429:3;27425:12;27418:19;;27077:366;;;:::o;27449:419::-;27615:4;27653:2;27642:9;27638:18;27630:26;;27702:9;27696:4;27692:20;27688:1;27677:9;27673:17;27666:47;27730:131;27856:4;27730:131;:::i;:::-;27722:139;;27449:419;;;:::o;27874:175::-;28014:27;28010:1;28002:6;27998:14;27991:51;27874:175;:::o;28055:366::-;28197:3;28218:67;28282:2;28277:3;28218:67;:::i;:::-;28211:74;;28294:93;28383:3;28294:93;:::i;:::-;28412:2;28407:3;28403:12;28396:19;;28055:366;;;:::o;28427:419::-;28593:4;28631:2;28620:9;28616:18;28608:26;;28680:9;28674:4;28670:20;28666:1;28655:9;28651:17;28644:47;28708:131;28834:4;28708:131;:::i;:::-;28700:139;;28427:419;;;:::o;28852:169::-;28992:21;28988:1;28980:6;28976:14;28969:45;28852:169;:::o;29027:366::-;29169:3;29190:67;29254:2;29249:3;29190:67;:::i;:::-;29183:74;;29266:93;29355:3;29266:93;:::i;:::-;29384:2;29379:3;29375:12;29368:19;;29027:366;;;:::o;29399:419::-;29565:4;29603:2;29592:9;29588:18;29580:26;;29652:9;29646:4;29642:20;29638:1;29627:9;29623:17;29616:47;29680:131;29806:4;29680:131;:::i;:::-;29672:139;;29399:419;;;:::o;29824:182::-;29964:34;29960:1;29952:6;29948:14;29941:58;29824:182;:::o;30012:366::-;30154:3;30175:67;30239:2;30234:3;30175:67;:::i;:::-;30168:74;;30251:93;30340:3;30251:93;:::i;:::-;30369:2;30364:3;30360:12;30353:19;;30012:366;;;:::o;30384:419::-;30550:4;30588:2;30577:9;30573:18;30565:26;;30637:9;30631:4;30627:20;30623:1;30612:9;30608:17;30601:47;30665:131;30791:4;30665:131;:::i;:::-;30657:139;;30384:419;;;:::o;30809:180::-;30857:77;30854:1;30847:88;30954:4;30951:1;30944:15;30978:4;30975:1;30968:15;30995:185;31035:1;31052:20;31070:1;31052:20;:::i;:::-;31047:25;;31086:20;31104:1;31086:20;:::i;:::-;31081:25;;31125:1;31115:35;;31130:18;;:::i;:::-;31115:35;31172:1;31169;31165:9;31160:14;;30995:185;;;;:::o;31186:223::-;31326:34;31322:1;31314:6;31310:14;31303:58;31395:6;31390:2;31382:6;31378:15;31371:31;31186:223;:::o;31415:366::-;31557:3;31578:67;31642:2;31637:3;31578:67;:::i;:::-;31571:74;;31654:93;31743:3;31654:93;:::i;:::-;31772:2;31767:3;31763:12;31756:19;;31415:366;;;:::o;31787:419::-;31953:4;31991:2;31980:9;31976:18;31968:26;;32040:9;32034:4;32030:20;32026:1;32015:9;32011:17;32004:47;32068:131;32194:4;32068:131;:::i;:::-;32060:139;;31787:419;;;:::o;32212:221::-;32352:34;32348:1;32340:6;32336:14;32329:58;32421:4;32416:2;32408:6;32404:15;32397:29;32212:221;:::o;32439:366::-;32581:3;32602:67;32666:2;32661:3;32602:67;:::i;:::-;32595:74;;32678:93;32767:3;32678:93;:::i;:::-;32796:2;32791:3;32787:12;32780:19;;32439:366;;;:::o;32811:419::-;32977:4;33015:2;33004:9;33000:18;32992:26;;33064:9;33058:4;33054:20;33050:1;33039:9;33035:17;33028:47;33092:131;33218:4;33092:131;:::i;:::-;33084:139;;32811:419;;;:::o;33236:224::-;33376:34;33372:1;33364:6;33360:14;33353:58;33445:7;33440:2;33432:6;33428:15;33421:32;33236:224;:::o;33466:366::-;33608:3;33629:67;33693:2;33688:3;33629:67;:::i;:::-;33622:74;;33705:93;33794:3;33705:93;:::i;:::-;33823:2;33818:3;33814:12;33807:19;;33466:366;;;:::o;33838:419::-;34004:4;34042:2;34031:9;34027:18;34019:26;;34091:9;34085:4;34081:20;34077:1;34066:9;34062:17;34055:47;34119:131;34245:4;34119:131;:::i;:::-;34111:139;;33838:419;;;:::o;34263:222::-;34403:34;34399:1;34391:6;34387:14;34380:58;34472:5;34467:2;34459:6;34455:15;34448:30;34263:222;:::o;34491:366::-;34633:3;34654:67;34718:2;34713:3;34654:67;:::i;:::-;34647:74;;34730:93;34819:3;34730:93;:::i;:::-;34848:2;34843:3;34839:12;34832:19;;34491:366;;;:::o;34863:419::-;35029:4;35067:2;35056:9;35052:18;35044:26;;35116:9;35110:4;35106:20;35102:1;35091:9;35087:17;35080:47;35144:131;35270:4;35144:131;:::i;:::-;35136:139;;34863:419;;;:::o;35288:225::-;35428:34;35424:1;35416:6;35412:14;35405:58;35497:8;35492:2;35484:6;35480:15;35473:33;35288:225;:::o;35519:366::-;35661:3;35682:67;35746:2;35741:3;35682:67;:::i;:::-;35675:74;;35758:93;35847:3;35758:93;:::i;:::-;35876:2;35871:3;35867:12;35860:19;;35519:366;;;:::o;35891:419::-;36057:4;36095:2;36084:9;36080:18;36072:26;;36144:9;36138:4;36134:20;36130:1;36119:9;36115:17;36108:47;36172:131;36298:4;36172:131;:::i;:::-;36164:139;;35891:419;;;:::o;36316:143::-;36373:5;36404:6;36398:13;36389:22;;36420:33;36447:5;36420:33;:::i;:::-;36316:143;;;;:::o;36465:351::-;36535:6;36584:2;36572:9;36563:7;36559:23;36555:32;36552:119;;;36590:79;;:::i;:::-;36552:119;36710:1;36735:64;36791:7;36782:6;36771:9;36767:22;36735:64;:::i;:::-;36725:74;;36681:128;36465:351;;;;:::o;36822:85::-;36867:7;36896:5;36885:16;;36822:85;;;:::o;36913:158::-;36971:9;37004:61;37022:42;37031:32;37057:5;37031:32;:::i;:::-;37022:42;:::i;:::-;37004:61;:::i;:::-;36991:74;;36913:158;;;:::o;37077:147::-;37172:45;37211:5;37172:45;:::i;:::-;37167:3;37160:58;37077:147;;:::o;37230:114::-;37297:6;37331:5;37325:12;37315:22;;37230:114;;;:::o;37350:184::-;37449:11;37483:6;37478:3;37471:19;37523:4;37518:3;37514:14;37499:29;;37350:184;;;;:::o;37540:132::-;37607:4;37630:3;37622:11;;37660:4;37655:3;37651:14;37643:22;;37540:132;;;:::o;37678:108::-;37755:24;37773:5;37755:24;:::i;:::-;37750:3;37743:37;37678:108;;:::o;37792:179::-;37861:10;37882:46;37924:3;37916:6;37882:46;:::i;:::-;37960:4;37955:3;37951:14;37937:28;;37792:179;;;;:::o;37977:113::-;38047:4;38079;38074:3;38070:14;38062:22;;37977:113;;;:::o;38126:732::-;38245:3;38274:54;38322:5;38274:54;:::i;:::-;38344:86;38423:6;38418:3;38344:86;:::i;:::-;38337:93;;38454:56;38504:5;38454:56;:::i;:::-;38533:7;38564:1;38549:284;38574:6;38571:1;38568:13;38549:284;;;38650:6;38644:13;38677:63;38736:3;38721:13;38677:63;:::i;:::-;38670:70;;38763:60;38816:6;38763:60;:::i;:::-;38753:70;;38609:224;38596:1;38593;38589:9;38584:14;;38549:284;;;38553:14;38849:3;38842:10;;38250:608;;;38126:732;;;;:::o;38864:831::-;39127:4;39165:3;39154:9;39150:19;39142:27;;39179:71;39247:1;39236:9;39232:17;39223:6;39179:71;:::i;:::-;39260:80;39336:2;39325:9;39321:18;39312:6;39260:80;:::i;:::-;39387:9;39381:4;39377:20;39372:2;39361:9;39357:18;39350:48;39415:108;39518:4;39509:6;39415:108;:::i;:::-;39407:116;;39533:72;39601:2;39590:9;39586:18;39577:6;39533:72;:::i;:::-;39615:73;39683:3;39672:9;39668:19;39659:6;39615:73;:::i;:::-;38864:831;;;;;;;;:::o;39701:807::-;39950:4;39988:3;39977:9;39973:19;39965:27;;40002:71;40070:1;40059:9;40055:17;40046:6;40002:71;:::i;:::-;40083:72;40151:2;40140:9;40136:18;40127:6;40083:72;:::i;:::-;40165:80;40241:2;40230:9;40226:18;40217:6;40165:80;:::i;:::-;40255;40331:2;40320:9;40316:18;40307:6;40255:80;:::i;:::-;40345:73;40413:3;40402:9;40398:19;40389:6;40345:73;:::i;:::-;40428;40496:3;40485:9;40481:19;40472:6;40428:73;:::i;:::-;39701:807;;;;;;;;;:::o;40514:143::-;40571:5;40602:6;40596:13;40587:22;;40618:33;40645:5;40618:33;:::i;:::-;40514:143;;;;:::o;40663:663::-;40751:6;40759;40767;40816:2;40804:9;40795:7;40791:23;40787:32;40784:119;;;40822:79;;:::i;:::-;40784:119;40942:1;40967:64;41023:7;41014:6;41003:9;40999:22;40967:64;:::i;:::-;40957:74;;40913:128;41080:2;41106:64;41162:7;41153:6;41142:9;41138:22;41106:64;:::i;:::-;41096:74;;41051:129;41219:2;41245:64;41301:7;41292:6;41281:9;41277:22;41245:64;:::i;:::-;41235:74;;41190:129;40663:663;;;;;:::o;41332:179::-;41472:31;41468:1;41460:6;41456:14;41449:55;41332:179;:::o;41517:366::-;41659:3;41680:67;41744:2;41739:3;41680:67;:::i;:::-;41673:74;;41756:93;41845:3;41756:93;:::i;:::-;41874:2;41869:3;41865:12;41858:19;;41517:366;;;:::o;41889:419::-;42055:4;42093:2;42082:9;42078:18;42070:26;;42142:9;42136:4;42132:20;42128:1;42117:9;42113:17;42106:47;42170:131;42296:4;42170:131;:::i;:::-;42162:139;;41889:419;;;:::o;42314:147::-;42415:11;42452:3;42437:18;;42314:147;;;;:::o;42467:114::-;;:::o;42587:398::-;42746:3;42767:83;42848:1;42843:3;42767:83;:::i;:::-;42760:90;;42859:93;42948:3;42859:93;:::i;:::-;42977:1;42972:3;42968:11;42961:18;;42587:398;;;:::o;42991:379::-;43175:3;43197:147;43340:3;43197:147;:::i;:::-;43190:154;;43361:3;43354:10;;42991:379;;;:::o;43376:245::-;43516:34;43512:1;43504:6;43500:14;43493:58;43585:28;43580:2;43572:6;43568:15;43561:53;43376:245;:::o;43627:366::-;43769:3;43790:67;43854:2;43849:3;43790:67;:::i;:::-;43783:74;;43866:93;43955:3;43866:93;:::i;:::-;43984:2;43979:3;43975:12;43968:19;;43627:366;;;:::o;43999:419::-;44165:4;44203:2;44192:9;44188:18;44180:26;;44252:9;44246:4;44242:20;44238:1;44227:9;44223:17;44216:47;44280:131;44406:4;44280:131;:::i;:::-;44272:139;;43999:419;;;:::o

Swarm Source

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