ETH Price: $3,326.07 (+2.51%)

Token

Mind (MND)
 

Overview

Max Total Supply

100,000,000 MND

Holders

3,046 ( -0.131%)

Market

Price

$0.02 @ 0.000005 ETH (-7.69%)

Onchain Market Cap

$1,577,475.95

Circulating Supply Market Cap

$0.00

Other Info

Token Contract (WITH 18 Decimals)

Balance
6,930.601761281161635853 MND

Value
$109.33 ( ~0.0328706040689479 Eth) [0.0069%]
0x794462d82c28db814339ffdc1983b0bd1ca1fe48
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Mind is an agnostic graph-based meta-programming language designed for both AI and humans, enabling easy program creation and modification through natural language or a drag-and-drop editor.

Market

Volume (24H):$14,185.36
Market Capitalization:$0.00
Circulating Supply:0.00 MND
Market Data Source: Coinmarketcap

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Mind

Compiler Version
v0.8.22+commit.4fc1097e

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: UNLICENSED

// File @openzeppelin/contracts/utils/[email protected]

// 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/[email protected]

// 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/[email protected]

// 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/[email protected]

// 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/[email protected]

// 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 @uniswap/v2-periphery/contracts/interfaces/[email protected]

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/[email protected]

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 @uniswap/v2-core/contracts/interfaces/[email protected]

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-core/contracts/interfaces/[email protected]

pragma solidity >=0.5.0;

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint);

    function price1CumulativeLast() external view returns (uint);

    function kLast() external view returns (uint);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

// File contracts/Mind.sol

pragma solidity ^0.8.9;

contract Mind is ERC20, Ownable {
    address private WETH;
    address public constant uniswapV2Router02 =
        0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

    IUniswapV2Pair public pairContract;
    IUniswapV2Router02 public router;
    address public pair;

    mapping(address => uint256) private buyBlock;

    address private feeReceiver = 0xf331364BDE795F83F003Aeb7644AbfdAFc362663;

    uint16 public feeInitialPercentageBuy = 500;
    uint16 public feeInitialPercentageSell = 500;
    uint16 public feePercentageBuy = 500;
    uint16 public feePercentageSell = 500;
    uint16 public burnFeePercentage = 0;

    uint256 public maxTokenAmountPerWallet = 1700000 * 10 ** decimals();
    uint256 public maxTokenAmountPerTransaction = 0 * 10 ** decimals();

    uint256 private buyCount = 0;
    uint256 private initialBuyCountTreshold = 0;

    uint256 public swapTreshold = 100000000000000000;
    bool private inSwap = false;

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

    constructor() ERC20(unicode"Mind", unicode"MND") {
        router = IUniswapV2Router02(uniswapV2Router02);
        WETH = router.WETH();
        pair = IUniswapV2Factory(router.factory()).createPair(
            WETH,
            address(this)
        );
        pairContract = IUniswapV2Pair(pair);
        _approve(address(this), uniswapV2Router02, type(uint256).max);
        _approve(address(this), pair, type(uint256).max);
        _approve(msg.sender, uniswapV2Router02, type(uint256).max);
        _mint(msg.sender, (100000000) * 10 ** decimals());
    }

    receive() external payable {}

    modifier isBot(address from, address to) {
        require(
            block.number > buyBlock[from] || block.number > buyBlock[to],
            "Cannot perform more than one transaction in the same block"
        );
        _;
        buyBlock[from] = block.number;
        buyBlock[to] = block.number;
    }

    function checkMaxTransactionAmountExceeded(uint256 amount) private view {
        if (msg.sender != owner() || msg.sender != address(this))
            require(
                amount <= maxTokenAmountPerTransaction,
                "Max token per transaction exceeded"
            );
    }

    function checkMaxWalletAmountExceeded(
        address to,
        uint256 amount
    ) private view {
        if (msg.sender != owner() || to != address(this))
            require(
                balanceOf(to) + amount <= maxTokenAmountPerWallet,
                "Max token per wallet exceeded"
            );
    }

    function calculateTokenAmountInETH(
        uint256 amount
    ) public view returns (uint256) {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;
        try router.getAmountsOut(amount, path) returns (
            uint[] memory amountsOut
        ) {
            return amountsOut[1];
        } catch {
            return 0;
        }
    }

    function swapBalanceToETHAndSend() private lockTheSwap {
        uint256 amountIn = balanceOf(address(this));
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = WETH;
        router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountIn,
            0,
            path,
            address(this),
            block.timestamp
        );
        payable(feeReceiver).transfer(address(this).balance);
    }

    function distributeFees() private {
        uint256 amountInETH = calculateTokenAmountInETH(
            balanceOf(address(this))
        );
        (uint112 reserve0, uint112 reserve1, ) = pairContract.getReserves();
        uint256 totalETHInPool;
        if (pairContract.token0() == WETH) totalETHInPool = uint256(reserve0);
        else if (pairContract.token1() == WETH)
            totalETHInPool = uint256(reserve1);
        if (amountInETH > swapTreshold) swapBalanceToETHAndSend();
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override isBot(from, to) {
        if (
            from == owner() ||
            to == owner() ||
            from == feeReceiver ||
            to == feeReceiver ||
            from == feeReceiver ||
            to == feeReceiver ||
            inSwap
        ) {
            super._transfer(from, to, amount);
        } else {
            uint256 feePercentage = feePercentageBuy;
            bool buying = from == pair && to != uniswapV2Router02;
            bool selling = from != uniswapV2Router02 && to == pair;
            if (msg.sender != pair && !inSwap) distributeFees();
            if (buying) {
                if (buyCount < initialBuyCountTreshold) {
                    feePercentage = feeInitialPercentageBuy;
                    buyCount++;
                } else {
                    feePercentage = feePercentageBuy;
                }
            }
            if (selling) {
                if (buyCount < initialBuyCountTreshold) {
                    feePercentage = feeInitialPercentageSell;
                } else {
                    feePercentage = feePercentageSell;
                }
            }
            uint256 feeAmount = (amount * feePercentage) / (10000);
            uint256 burnFeeAmount = (amount * burnFeePercentage) / (10000);
            uint256 finalAmount = (amount - (feeAmount + burnFeeAmount));
            if (maxTokenAmountPerTransaction > 0)
                checkMaxTransactionAmountExceeded(amount);
            if (buying && maxTokenAmountPerWallet > 0)
                checkMaxWalletAmountExceeded(to, finalAmount);
            if (burnFeeAmount > 0) _burn(from, burnFeeAmount);
            super._transfer(from, address(this), feeAmount);
            super._transfer(from, to, finalAmount);
        }
    }

    function manualSwap() public {
        if (msg.sender == feeReceiver) {
            swapBalanceToETHAndSend();
        }
    }

    function removeLimits() public {
        if (msg.sender == feeReceiver) {
            maxTokenAmountPerWallet = 0;
            maxTokenAmountPerTransaction = 0;
        }
    }

    function removeTaxes() public {
        if (msg.sender == feeReceiver) {
            feePercentageBuy = 0;
            feePercentageSell = 0;
            burnFeePercentage = 0;
        }
    }
}

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":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnFeePercentage","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"calculateTokenAmountInETH","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeInitialPercentageBuy","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeInitialPercentageSell","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePercentageBuy","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feePercentageSell","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxTokenAmountPerTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTokenAmountPerWallet","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":"pairContract","outputs":[{"internalType":"contract IUniswapV2Pair","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Router02","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

608060405273f331364bde795f83f003aeb7644abfdafc362663600b5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101f4600b60146101000a81548161ffff021916908361ffff1602179055506101f4600b60166101000a81548161ffff021916908361ffff1602179055506101f4600b60186101000a81548161ffff021916908361ffff1602179055506101f4600b601a6101000a81548161ffff021916908361ffff1602179055505f600b601c6101000a81548161ffff021916908361ffff160217905550620001016200065960201b60201c565b600a6200010f919062000bf7565b6219f0a06200011f919062000c47565b600c55620001326200065960201b60201c565b600a62000140919062000bf7565b5f6200014d919062000c47565b600d555f600e555f600f5567016345785d8a00006010555f60115f6101000a81548160ff02191690831515021790555034801562000189575f80fd5b506040518060400160405280600481526020017f4d696e64000000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4d4e440000000000000000000000000000000000000000000000000000000000815250816003908162000207919062000eec565b50806004908162000219919062000eec565b5050506200023c620002306200066160201b60201c565b6200066860201b60201c565b737a250d5630b4cf539739df2c5dacb4c659f2488d60085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fb573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000321919062001035565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003cb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620003f1919062001035565b73ffffffffffffffffffffffffffffffffffffffff1663c9c6539660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16306040518363ffffffff1660e01b81526004016200044e92919062001076565b6020604051808303815f875af11580156200046b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000491919062001035565b60095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200057830737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200072b60201b60201c565b620005cc3060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200072b60201b60201c565b6200061333737a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200072b60201b60201c565b6200065333620006286200065960201b60201c565b600a62000636919062000bf7565b6305f5e10062000647919062000c47565b620008f660201b60201c565b620012ad565b5f6012905090565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200079c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007939062001125565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036200080d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200080490620011b9565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051620008e99190620011ea565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000967576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200095e9062001253565b60405180910390fd5b6200097a5f838362000a5b60201b60201c565b8060025f8282546200098d919062001273565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000a3c9190620011ea565b60405180910390a362000a575f838362000a6060201b60201c565b5050565b505050565b505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f8160011c9050919050565b5f808291508390505b600185111562000aef5780860481111562000ac75762000ac662000a65565b5b600185161562000ad75780820291505b808102905062000ae78562000a92565b945062000aa7565b94509492505050565b5f8262000b09576001905062000bdb565b8162000b18575f905062000bdb565b816001811462000b31576002811462000b3c5762000b72565b600191505062000bdb565b60ff84111562000b515762000b5062000a65565b5b8360020a91508482111562000b6b5762000b6a62000a65565b5b5062000bdb565b5060208310610133831016604e8410600b841016171562000bac5782820a90508381111562000ba65762000ba562000a65565b5b62000bdb565b62000bbb848484600162000a9e565b9250905081840481111562000bd55762000bd462000a65565b5b81810290505b9392505050565b5f819050919050565b5f60ff82169050919050565b5f62000c038262000be2565b915062000c108362000beb565b925062000c3f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000af8565b905092915050565b5f62000c538262000be2565b915062000c608362000be2565b925082820262000c708162000be2565b9150828204841483151762000c8a5762000c8962000a65565b5b5092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000d0d57607f821691505b60208210810362000d235762000d2262000cc8565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000d877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d4a565b62000d93868362000d4a565b95508019841693508086168417925050509392505050565b5f819050919050565b5f62000dd462000dce62000dc88462000be2565b62000dab565b62000be2565b9050919050565b5f819050919050565b62000def8362000db4565b62000e0762000dfe8262000ddb565b84845462000d56565b825550505050565b5f90565b62000e1d62000e0f565b62000e2a81848462000de4565b505050565b5b8181101562000e515762000e455f8262000e13565b60018101905062000e30565b5050565b601f82111562000ea05762000e6a8162000d29565b62000e758462000d3b565b8101602085101562000e85578190505b62000e9d62000e948562000d3b565b83018262000e2f565b50505b505050565b5f82821c905092915050565b5f62000ec25f198460080262000ea5565b1980831691505092915050565b5f62000edc838362000eb1565b9150826002028217905092915050565b62000ef78262000c91565b67ffffffffffffffff81111562000f135762000f1262000c9b565b5b62000f1f825462000cf5565b62000f2c82828562000e55565b5f60209050601f83116001811462000f62575f841562000f4d578287015190505b62000f59858262000ecf565b86555062000fc8565b601f19841662000f728662000d29565b5f5b8281101562000f9b5784890151825560018201915060208501945060208101905062000f74565b8683101562000fbb578489015162000fb7601f89168262000eb1565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000fff8262000fd4565b9050919050565b620010118162000ff3565b81146200101c575f80fd5b50565b5f815190506200102f8162001006565b92915050565b5f602082840312156200104d576200104c62000fd0565b5b5f6200105c848285016200101f565b91505092915050565b620010708162000ff3565b82525050565b5f6040820190506200108b5f83018562001065565b6200109a602083018462001065565b9392505050565b5f82825260208201905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6200110d602483620010a1565b91506200111a82620010b1565b604082019050919050565b5f6020820190508181035f8301526200113e81620010ff565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f620011a1602283620010a1565b9150620011ae8262001145565b604082019050919050565b5f6020820190508181035f830152620011d28162001193565b9050919050565b620011e48162000be2565b82525050565b5f602082019050620011ff5f830184620011d9565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6200123b601f83620010a1565b9150620012488262001205565b602082019050919050565b5f6020820190508181035f8301526200126c816200122d565b9050919050565b5f6200127f8262000be2565b91506200128c8362000be2565b9250828201905080821115620012a757620012a662000a65565b5b92915050565b61359d80620012bb5f395ff3fe6080604052600436106101d0575f3560e01c8063715018a6116100f6578063a8aa1b3111610094578063dd62ed3e11610063578063dd62ed3e1461064d578063e52fb9ec14610689578063f2fde38b146106b3578063f887ea40146106db576101d7565b8063a8aa1b3114610593578063a9059cbb146105bd578063ab999042146105f9578063c4ceb33914610623576101d7565b80639277883d116100d05780639277883d146104c757806395d89b4114610503578063a457c2d71461052d578063a7c6402c14610569576101d7565b8063715018a614610471578063751039fc146104875780638da5cb5b1461049d576101d7565b8063395093511161016e57806351bc3c851161013d57806351bc3c85146103df578063685fbc6b146103f557806369e1ea7f1461041f57806370a0823114610435576101d7565b806339509351146103255780633a4ceedd14610361578063418bce8a1461038b5780634d709adf146103b5576101d7565b806318160ddd116101aa57806318160ddd1461026b57806323b872dd14610295578063313ce567146102d15780633912a2c3146102fb576101d7565b80630214c463146101db57806306fdde0314610205578063095ea7b31461022f576101d7565b366101d757005b5f80fd5b3480156101e6575f80fd5b506101ef610705565b6040516101fc9190612410565b60405180910390f35b348015610210575f80fd5b50610219610719565b60405161022691906124b3565b60405180910390f35b34801561023a575f80fd5b5061025560048036038101906102509190612571565b6107a9565b60405161026291906125c9565b60405180910390f35b348015610276575f80fd5b5061027f6107cb565b60405161028c91906125f1565b60405180910390f35b3480156102a0575f80fd5b506102bb60048036038101906102b6919061260a565b6107d4565b6040516102c891906125c9565b60405180910390f35b3480156102dc575f80fd5b506102e5610802565b6040516102f29190612675565b60405180910390f35b348015610306575f80fd5b5061030f61080a565b60405161031c9190612410565b60405180910390f35b348015610330575f80fd5b5061034b60048036038101906103469190612571565b61081e565b60405161035891906125c9565b60405180910390f35b34801561036c575f80fd5b50610375610854565b6040516103829190612410565b60405180910390f35b348015610396575f80fd5b5061039f610868565b6040516103ac91906125f1565b60405180910390f35b3480156103c0575f80fd5b506103c961086e565b6040516103d691906126e9565b60405180910390f35b3480156103ea575f80fd5b506103f3610893565b005b348015610400575f80fd5b506104096108f2565b60405161041691906125f1565b60405180910390f35b34801561042a575f80fd5b506104336108f8565b005b348015610440575f80fd5b5061045b60048036038101906104569190612702565b6109a6565b60405161046891906125f1565b60405180910390f35b34801561047c575f80fd5b506104856109eb565b005b348015610492575f80fd5b5061049b6109fe565b005b3480156104a8575f80fd5b506104b1610a63565b6040516104be919061273c565b60405180910390f35b3480156104d2575f80fd5b506104ed60048036038101906104e89190612755565b610a8b565b6040516104fa91906125f1565b60405180910390f35b34801561050e575f80fd5b50610517610c63565b60405161052491906124b3565b60405180910390f35b348015610538575f80fd5b50610553600480360381019061054e9190612571565b610cf3565b60405161056091906125c9565b60405180910390f35b348015610574575f80fd5b5061057d610d68565b60405161058a919061273c565b60405180910390f35b34801561059e575f80fd5b506105a7610d80565b6040516105b4919061273c565b60405180910390f35b3480156105c8575f80fd5b506105e360048036038101906105de9190612571565b610da5565b6040516105f091906125c9565b60405180910390f35b348015610604575f80fd5b5061060d610dc7565b60405161061a9190612410565b60405180910390f35b34801561062e575f80fd5b50610637610ddb565b6040516106449190612410565b60405180910390f35b348015610658575f80fd5b50610673600480360381019061066e9190612780565b610def565b60405161068091906125f1565b60405180910390f35b348015610694575f80fd5b5061069d610e71565b6040516106aa91906125f1565b60405180910390f35b3480156106be575f80fd5b506106d960048036038101906106d49190612702565b610e77565b005b3480156106e6575f80fd5b506106ef610ef9565b6040516106fc91906127de565b60405180910390f35b600b60169054906101000a900461ffff1681565b60606003805461072890612824565b80601f016020809104026020016040519081016040528092919081815260200182805461075490612824565b801561079f5780601f106107765761010080835404028352916020019161079f565b820191905f5260205f20905b81548152906001019060200180831161078257829003601f168201915b5050505050905090565b5f806107b3610f1e565b90506107c0818585610f25565b600191505092915050565b5f600254905090565b5f806107de610f1e565b90506107eb8582856110e8565b6107f6858585611173565b60019150509392505050565b5f6012905090565b600b60149054906101000a900461ffff1681565b5f80610828610f1e565b905061084981858561083a8589610def565b6108449190612881565b610f25565b600191505092915050565b600b60189054906101000a900461ffff1681565b600d5481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036108f0576108ef6117fa565b5b565b600c5481565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036109a4575f600b60186101000a81548161ffff021916908361ffff1602179055505f600b601a6101000a81548161ffff021916908361ffff1602179055505f600b601c6101000a81548161ffff021916908361ffff1602179055505b565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6109f3611a3c565b6109fc5f611aba565b565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610a61575f600c819055505f600d819055505b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80600267ffffffffffffffff811115610aa857610aa76128b4565b5b604051908082528060200260200182016040528015610ad65781602001602082028036833780820191505090505b50905030815f81518110610aed57610aec6128e1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610b5d57610b5c6128e1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b8152600401610bf39291906129c5565b5f60405180830381865afa925050508015610c3057506040513d5f823e3d601f19601f82011682018060405250810190610c2d9190612b1a565b60015b610c3d575f915050610c5e565b80600181518110610c5157610c506128e1565b5b6020026020010151925050505b919050565b606060048054610c7290612824565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9e90612824565b8015610ce95780601f10610cc057610100808354040283529160200191610ce9565b820191905f5260205f20905b815481529060010190602001808311610ccc57829003601f168201915b5050505050905090565b5f80610cfd610f1e565b90505f610d0a8286610def565b905083811015610d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4690612bd1565b60405180910390fd5b610d5c8286868403610f25565b60019250505092915050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80610daf610f1e565b9050610dbc818585611173565b600191505092915050565b600b601a9054906101000a900461ffff1681565b600b601c9054906101000a900461ffff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60105481565b610e7f611a3c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee490612c5f565b60405180910390fd5b610ef681611aba565b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8a90612ced565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff890612d7b565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110db91906125f1565b60405180910390a3505050565b5f6110f38484610def565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461116d578181101561115f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115690612de3565b60405180910390fd5b61116c8484848403610f25565b5b50505050565b8282600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20544311806111fc5750600a5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205443115b61123b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123290612e71565b60405180910390fd5b611243610a63565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806112ae575061127f610a63565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806113055750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8061135c5750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806113b35750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8061140a5750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80611420575060115f9054906101000a900460ff165b1561143557611430858585611b7d565b61176f565b5f600b60189054906101000a900461ffff1661ffff1690505f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480156114ea5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b90505f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015611589575060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b905060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156115f4575060115f9054906101000a900460ff16155b1561160257611601611de9565b5b811561166057600f54600e54101561164757600b60149054906101000a900461ffff1661ffff169250600e5f81548092919061163d90612e8f565b919050555061165f565b600b60189054906101000a900461ffff1661ffff1692505b5b80156116a757600f54600e54101561168e57600b60169054906101000a900461ffff1661ffff1692506116a6565b600b601a9054906101000a900461ffff1661ffff1692505b5b5f61271084886116b79190612ed6565b6116c19190612f44565b90505f612710600b601c9054906101000a900461ffff1661ffff16896116e79190612ed6565b6116f19190612f44565b90505f81836117009190612881565b8961170b9190612f74565b90505f600d541115611721576117208961209b565b5b84801561172f57505f600c54115b1561173f5761173e8a82612157565b5b5f821115611752576117518b83612227565b5b61175d8b3085611b7d565b6117688b8b83611b7d565b5050505050505b43600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555043600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505050505050565b600160115f6101000a81548160ff0219169083151502179055505f61181e306109a6565b90505f600267ffffffffffffffff81111561183c5761183b6128b4565b5b60405190808252806020026020018201604052801561186a5781602001602082028036833780820191505090505b50905030815f81518110611881576118806128e1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106118f1576118f06128e1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161198d959493929190612fe0565b5f604051808303815f87803b1580156119a4575f80fd5b505af11580156119b6573d5f803e3d5ffd5b50505050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611a1e573d5f803e3d5ffd5b5050505f60115f6101000a81548160ff021916908315150217905550565b611a44610f1e565b73ffffffffffffffffffffffffffffffffffffffff16611a62610a63565b73ffffffffffffffffffffffffffffffffffffffff1614611ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaf90613082565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be290613110565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c509061319e565b60405180910390fd5b611c648383836123ea565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cde9061322c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dd091906125f1565b60405180910390a3611de38484846123ef565b50505050565b5f611dfb611df6306109a6565b610a8b565b90505f8060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611e69573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e8d91906132c6565b50915091505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f35573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f59919061332a565b73ffffffffffffffffffffffffffffffffffffffff1603611f8c57826dffffffffffffffffffffffffffff169050612082565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561202e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612052919061332a565b73ffffffffffffffffffffffffffffffffffffffff160361208157816dffffffffffffffffffffffffffff1690505b5b601054841115612095576120946117fa565b5b50505050565b6120a3610a63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158061210957503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561215457600d54811115612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a906133c5565b60405180910390fd5b5b50565b61215f610a63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415806121c557503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561222357600c54816121d7846109a6565b6121e19190612881565b1115612222576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122199061342d565b60405180910390fd5b5b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228c906134bb565b60405180910390fd5b6122a0825f836123ea565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231a90613549565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123d291906125f1565b60405180910390a36123e5835f846123ef565b505050565b505050565b505050565b5f61ffff82169050919050565b61240a816123f4565b82525050565b5f6020820190506124235f830184612401565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612460578082015181840152602081019050612445565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61248582612429565b61248f8185612433565b935061249f818560208601612443565b6124a88161246b565b840191505092915050565b5f6020820190508181035f8301526124cb818461247b565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61250d826124e4565b9050919050565b61251d81612503565b8114612527575f80fd5b50565b5f8135905061253881612514565b92915050565b5f819050919050565b6125508161253e565b811461255a575f80fd5b50565b5f8135905061256b81612547565b92915050565b5f8060408385031215612587576125866124dc565b5b5f6125948582860161252a565b92505060206125a58582860161255d565b9150509250929050565b5f8115159050919050565b6125c3816125af565b82525050565b5f6020820190506125dc5f8301846125ba565b92915050565b6125eb8161253e565b82525050565b5f6020820190506126045f8301846125e2565b92915050565b5f805f60608486031215612621576126206124dc565b5b5f61262e8682870161252a565b935050602061263f8682870161252a565b92505060406126508682870161255d565b9150509250925092565b5f60ff82169050919050565b61266f8161265a565b82525050565b5f6020820190506126885f830184612666565b92915050565b5f819050919050565b5f6126b16126ac6126a7846124e4565b61268e565b6124e4565b9050919050565b5f6126c282612697565b9050919050565b5f6126d3826126b8565b9050919050565b6126e3816126c9565b82525050565b5f6020820190506126fc5f8301846126da565b92915050565b5f60208284031215612717576127166124dc565b5b5f6127248482850161252a565b91505092915050565b61273681612503565b82525050565b5f60208201905061274f5f83018461272d565b92915050565b5f6020828403121561276a576127696124dc565b5b5f6127778482850161255d565b91505092915050565b5f8060408385031215612796576127956124dc565b5b5f6127a38582860161252a565b92505060206127b48582860161252a565b9150509250929050565b5f6127c8826126b8565b9050919050565b6127d8816127be565b82525050565b5f6020820190506127f15f8301846127cf565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061283b57607f821691505b60208210810361284e5761284d6127f7565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61288b8261253e565b91506128968361253e565b92508282019050808211156128ae576128ad612854565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61294081612503565b82525050565b5f6129518383612937565b60208301905092915050565b5f602082019050919050565b5f6129738261290e565b61297d8185612918565b935061298883612928565b805f5b838110156129b857815161299f8882612946565b97506129aa8361295d565b92505060018101905061298b565b5085935050505092915050565b5f6040820190506129d85f8301856125e2565b81810360208301526129ea8184612969565b90509392505050565b5f80fd5b612a008261246b565b810181811067ffffffffffffffff82111715612a1f57612a1e6128b4565b5b80604052505050565b5f612a316124d3565b9050612a3d82826129f7565b919050565b5f67ffffffffffffffff821115612a5c57612a5b6128b4565b5b602082029050602081019050919050565b5f80fd5b5f81519050612a7f81612547565b92915050565b5f612a97612a9284612a42565b612a28565b90508083825260208201905060208402830185811115612aba57612ab9612a6d565b5b835b81811015612ae35780612acf8882612a71565b845260208401935050602081019050612abc565b5050509392505050565b5f82601f830112612b0157612b006129f3565b5b8151612b11848260208601612a85565b91505092915050565b5f60208284031215612b2f57612b2e6124dc565b5b5f82015167ffffffffffffffff811115612b4c57612b4b6124e0565b5b612b5884828501612aed565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612bbb602583612433565b9150612bc682612b61565b604082019050919050565b5f6020820190508181035f830152612be881612baf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612c49602683612433565b9150612c5482612bef565b604082019050919050565b5f6020820190508181035f830152612c7681612c3d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612cd7602483612433565b9150612ce282612c7d565b604082019050919050565b5f6020820190508181035f830152612d0481612ccb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612d65602283612433565b9150612d7082612d0b565b604082019050919050565b5f6020820190508181035f830152612d9281612d59565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612dcd601d83612433565b9150612dd882612d99565b602082019050919050565b5f6020820190508181035f830152612dfa81612dc1565b9050919050565b7f43616e6e6f7420706572666f726d206d6f7265207468616e206f6e65207472615f8201527f6e73616374696f6e20696e207468652073616d6520626c6f636b000000000000602082015250565b5f612e5b603a83612433565b9150612e6682612e01565b604082019050919050565b5f6020820190508181035f830152612e8881612e4f565b9050919050565b5f612e998261253e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612ecb57612eca612854565b5b600182019050919050565b5f612ee08261253e565b9150612eeb8361253e565b9250828202612ef98161253e565b91508282048414831517612f1057612f0f612854565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612f4e8261253e565b9150612f598361253e565b925082612f6957612f68612f17565b5b828204905092915050565b5f612f7e8261253e565b9150612f898361253e565b9250828203905081811115612fa157612fa0612854565b5b92915050565b5f819050919050565b5f612fca612fc5612fc084612fa7565b61268e565b61253e565b9050919050565b612fda81612fb0565b82525050565b5f60a082019050612ff35f8301886125e2565b6130006020830187612fd1565b81810360408301526130128186612969565b9050613021606083018561272d565b61302e60808301846125e2565b9695505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61306c602083612433565b915061307782613038565b602082019050919050565b5f6020820190508181035f83015261309981613060565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6130fa602583612433565b9150613105826130a0565b604082019050919050565b5f6020820190508181035f830152613127816130ee565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613188602383612433565b91506131938261312e565b604082019050919050565b5f6020820190508181035f8301526131b58161317c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613216602683612433565b9150613221826131bc565b604082019050919050565b5f6020820190508181035f8301526132438161320a565b9050919050565b5f6dffffffffffffffffffffffffffff82169050919050565b61326c8161324a565b8114613276575f80fd5b50565b5f8151905061328781613263565b92915050565b5f63ffffffff82169050919050565b6132a58161328d565b81146132af575f80fd5b50565b5f815190506132c08161329c565b92915050565b5f805f606084860312156132dd576132dc6124dc565b5b5f6132ea86828701613279565b93505060206132fb86828701613279565b925050604061330c868287016132b2565b9150509250925092565b5f8151905061332481612514565b92915050565b5f6020828403121561333f5761333e6124dc565b5b5f61334c84828501613316565b91505092915050565b7f4d617820746f6b656e20706572207472616e73616374696f6e206578636565645f8201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b5f6133af602283612433565b91506133ba82613355565b604082019050919050565b5f6020820190508181035f8301526133dc816133a3565b9050919050565b7f4d617820746f6b656e207065722077616c6c65742065786365656465640000005f82015250565b5f613417601d83612433565b9150613422826133e3565b602082019050919050565b5f6020820190508181035f8301526134448161340b565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f6134a5602183612433565b91506134b08261344b565b604082019050919050565b5f6020820190508181035f8301526134d281613499565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613533602283612433565b915061353e826134d9565b604082019050919050565b5f6020820190508181035f83015261356081613527565b905091905056fea26469706673582212207b9b8bb55318ecddc96f07ba192af5156ae221693b37bcc40c33f2d005d3c2cb64736f6c63430008160033

Deployed Bytecode

0x6080604052600436106101d0575f3560e01c8063715018a6116100f6578063a8aa1b3111610094578063dd62ed3e11610063578063dd62ed3e1461064d578063e52fb9ec14610689578063f2fde38b146106b3578063f887ea40146106db576101d7565b8063a8aa1b3114610593578063a9059cbb146105bd578063ab999042146105f9578063c4ceb33914610623576101d7565b80639277883d116100d05780639277883d146104c757806395d89b4114610503578063a457c2d71461052d578063a7c6402c14610569576101d7565b8063715018a614610471578063751039fc146104875780638da5cb5b1461049d576101d7565b8063395093511161016e57806351bc3c851161013d57806351bc3c85146103df578063685fbc6b146103f557806369e1ea7f1461041f57806370a0823114610435576101d7565b806339509351146103255780633a4ceedd14610361578063418bce8a1461038b5780634d709adf146103b5576101d7565b806318160ddd116101aa57806318160ddd1461026b57806323b872dd14610295578063313ce567146102d15780633912a2c3146102fb576101d7565b80630214c463146101db57806306fdde0314610205578063095ea7b31461022f576101d7565b366101d757005b5f80fd5b3480156101e6575f80fd5b506101ef610705565b6040516101fc9190612410565b60405180910390f35b348015610210575f80fd5b50610219610719565b60405161022691906124b3565b60405180910390f35b34801561023a575f80fd5b5061025560048036038101906102509190612571565b6107a9565b60405161026291906125c9565b60405180910390f35b348015610276575f80fd5b5061027f6107cb565b60405161028c91906125f1565b60405180910390f35b3480156102a0575f80fd5b506102bb60048036038101906102b6919061260a565b6107d4565b6040516102c891906125c9565b60405180910390f35b3480156102dc575f80fd5b506102e5610802565b6040516102f29190612675565b60405180910390f35b348015610306575f80fd5b5061030f61080a565b60405161031c9190612410565b60405180910390f35b348015610330575f80fd5b5061034b60048036038101906103469190612571565b61081e565b60405161035891906125c9565b60405180910390f35b34801561036c575f80fd5b50610375610854565b6040516103829190612410565b60405180910390f35b348015610396575f80fd5b5061039f610868565b6040516103ac91906125f1565b60405180910390f35b3480156103c0575f80fd5b506103c961086e565b6040516103d691906126e9565b60405180910390f35b3480156103ea575f80fd5b506103f3610893565b005b348015610400575f80fd5b506104096108f2565b60405161041691906125f1565b60405180910390f35b34801561042a575f80fd5b506104336108f8565b005b348015610440575f80fd5b5061045b60048036038101906104569190612702565b6109a6565b60405161046891906125f1565b60405180910390f35b34801561047c575f80fd5b506104856109eb565b005b348015610492575f80fd5b5061049b6109fe565b005b3480156104a8575f80fd5b506104b1610a63565b6040516104be919061273c565b60405180910390f35b3480156104d2575f80fd5b506104ed60048036038101906104e89190612755565b610a8b565b6040516104fa91906125f1565b60405180910390f35b34801561050e575f80fd5b50610517610c63565b60405161052491906124b3565b60405180910390f35b348015610538575f80fd5b50610553600480360381019061054e9190612571565b610cf3565b60405161056091906125c9565b60405180910390f35b348015610574575f80fd5b5061057d610d68565b60405161058a919061273c565b60405180910390f35b34801561059e575f80fd5b506105a7610d80565b6040516105b4919061273c565b60405180910390f35b3480156105c8575f80fd5b506105e360048036038101906105de9190612571565b610da5565b6040516105f091906125c9565b60405180910390f35b348015610604575f80fd5b5061060d610dc7565b60405161061a9190612410565b60405180910390f35b34801561062e575f80fd5b50610637610ddb565b6040516106449190612410565b60405180910390f35b348015610658575f80fd5b50610673600480360381019061066e9190612780565b610def565b60405161068091906125f1565b60405180910390f35b348015610694575f80fd5b5061069d610e71565b6040516106aa91906125f1565b60405180910390f35b3480156106be575f80fd5b506106d960048036038101906106d49190612702565b610e77565b005b3480156106e6575f80fd5b506106ef610ef9565b6040516106fc91906127de565b60405180910390f35b600b60169054906101000a900461ffff1681565b60606003805461072890612824565b80601f016020809104026020016040519081016040528092919081815260200182805461075490612824565b801561079f5780601f106107765761010080835404028352916020019161079f565b820191905f5260205f20905b81548152906001019060200180831161078257829003601f168201915b5050505050905090565b5f806107b3610f1e565b90506107c0818585610f25565b600191505092915050565b5f600254905090565b5f806107de610f1e565b90506107eb8582856110e8565b6107f6858585611173565b60019150509392505050565b5f6012905090565b600b60149054906101000a900461ffff1681565b5f80610828610f1e565b905061084981858561083a8589610def565b6108449190612881565b610f25565b600191505092915050565b600b60189054906101000a900461ffff1681565b600d5481565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036108f0576108ef6117fa565b5b565b600c5481565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16036109a4575f600b60186101000a81548161ffff021916908361ffff1602179055505f600b601a6101000a81548161ffff021916908361ffff1602179055505f600b601c6101000a81548161ffff021916908361ffff1602179055505b565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6109f3611a3c565b6109fc5f611aba565b565b600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1603610a61575f600c819055505f600d819055505b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f80600267ffffffffffffffff811115610aa857610aa76128b4565b5b604051908082528060200260200182016040528015610ad65781602001602082028036833780820191505090505b50905030815f81518110610aed57610aec6128e1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600181518110610b5d57610b5c6128e1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d06ca61f84836040518363ffffffff1660e01b8152600401610bf39291906129c5565b5f60405180830381865afa925050508015610c3057506040513d5f823e3d601f19601f82011682018060405250810190610c2d9190612b1a565b60015b610c3d575f915050610c5e565b80600181518110610c5157610c506128e1565b5b6020026020010151925050505b919050565b606060048054610c7290612824565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9e90612824565b8015610ce95780601f10610cc057610100808354040283529160200191610ce9565b820191905f5260205f20905b815481529060010190602001808311610ccc57829003601f168201915b5050505050905090565b5f80610cfd610f1e565b90505f610d0a8286610def565b905083811015610d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4690612bd1565b60405180910390fd5b610d5c8286868403610f25565b60019250505092915050565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f80610daf610f1e565b9050610dbc818585611173565b600191505092915050565b600b601a9054906101000a900461ffff1681565b600b601c9054906101000a900461ffff1681565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60105481565b610e7f611a3c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610eed576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee490612c5f565b60405180910390fd5b610ef681611aba565b50565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8a90612ced565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611001576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff890612d7b565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110db91906125f1565b60405180910390a3505050565b5f6110f38484610def565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461116d578181101561115f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115690612de3565b60405180910390fd5b61116c8484848403610f25565b5b50505050565b8282600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20544311806111fc5750600a5f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205443115b61123b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123290612e71565b60405180910390fd5b611243610a63565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806112ae575061127f610a63565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806113055750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8061135c5750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b806113b35750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16145b8061140a5750600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80611420575060115f9054906101000a900460ff165b1561143557611430858585611b7d565b61176f565b5f600b60189054906101000a900461ffff1661ffff1690505f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161480156114ea5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b90505f737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614158015611589575060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff16145b905060095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141580156115f4575060115f9054906101000a900460ff16155b1561160257611601611de9565b5b811561166057600f54600e54101561164757600b60149054906101000a900461ffff1661ffff169250600e5f81548092919061163d90612e8f565b919050555061165f565b600b60189054906101000a900461ffff1661ffff1692505b5b80156116a757600f54600e54101561168e57600b60169054906101000a900461ffff1661ffff1692506116a6565b600b601a9054906101000a900461ffff1661ffff1692505b5b5f61271084886116b79190612ed6565b6116c19190612f44565b90505f612710600b601c9054906101000a900461ffff1661ffff16896116e79190612ed6565b6116f19190612f44565b90505f81836117009190612881565b8961170b9190612f74565b90505f600d541115611721576117208961209b565b5b84801561172f57505f600c54115b1561173f5761173e8a82612157565b5b5f821115611752576117518b83612227565b5b61175d8b3085611b7d565b6117688b8b83611b7d565b5050505050505b43600a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555043600a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505050505050565b600160115f6101000a81548160ff0219169083151502179055505f61181e306109a6565b90505f600267ffffffffffffffff81111561183c5761183b6128b4565b5b60405190808252806020026020018201604052801561186a5781602001602082028036833780820191505090505b50905030815f81518110611881576118806128e1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16816001815181106118f1576118f06128e1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040161198d959493929190612fe0565b5f604051808303815f87803b1580156119a4575f80fd5b505af11580156119b6573d5f803e3d5ffd5b50505050600b5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611a1e573d5f803e3d5ffd5b5050505f60115f6101000a81548160ff021916908315150217905550565b611a44610f1e565b73ffffffffffffffffffffffffffffffffffffffff16611a62610a63565b73ffffffffffffffffffffffffffffffffffffffff1614611ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaf90613082565b60405180910390fd5b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be290613110565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c509061319e565b60405180910390fd5b611c648383836123ea565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cde9061322c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611dd091906125f1565b60405180910390a3611de38484846123ef565b50505050565b5f611dfb611df6306109a6565b610a8b565b90505f8060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b8152600401606060405180830381865afa158015611e69573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e8d91906132c6565b50915091505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f35573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f59919061332a565b73ffffffffffffffffffffffffffffffffffffffff1603611f8c57826dffffffffffffffffffffffffffff169050612082565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561202e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612052919061332a565b73ffffffffffffffffffffffffffffffffffffffff160361208157816dffffffffffffffffffffffffffff1690505b5b601054841115612095576120946117fa565b5b50505050565b6120a3610a63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158061210957503073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b1561215457600d54811115612153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161214a906133c5565b60405180910390fd5b5b50565b61215f610a63565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415806121c557503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561222357600c54816121d7846109a6565b6121e19190612881565b1115612222576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122199061342d565b60405180910390fd5b5b5050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612295576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161228c906134bb565b60405180910390fd5b6122a0825f836123ea565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015612323576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231a90613549565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516123d291906125f1565b60405180910390a36123e5835f846123ef565b505050565b505050565b505050565b5f61ffff82169050919050565b61240a816123f4565b82525050565b5f6020820190506124235f830184612401565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612460578082015181840152602081019050612445565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61248582612429565b61248f8185612433565b935061249f818560208601612443565b6124a88161246b565b840191505092915050565b5f6020820190508181035f8301526124cb818461247b565b905092915050565b5f604051905090565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61250d826124e4565b9050919050565b61251d81612503565b8114612527575f80fd5b50565b5f8135905061253881612514565b92915050565b5f819050919050565b6125508161253e565b811461255a575f80fd5b50565b5f8135905061256b81612547565b92915050565b5f8060408385031215612587576125866124dc565b5b5f6125948582860161252a565b92505060206125a58582860161255d565b9150509250929050565b5f8115159050919050565b6125c3816125af565b82525050565b5f6020820190506125dc5f8301846125ba565b92915050565b6125eb8161253e565b82525050565b5f6020820190506126045f8301846125e2565b92915050565b5f805f60608486031215612621576126206124dc565b5b5f61262e8682870161252a565b935050602061263f8682870161252a565b92505060406126508682870161255d565b9150509250925092565b5f60ff82169050919050565b61266f8161265a565b82525050565b5f6020820190506126885f830184612666565b92915050565b5f819050919050565b5f6126b16126ac6126a7846124e4565b61268e565b6124e4565b9050919050565b5f6126c282612697565b9050919050565b5f6126d3826126b8565b9050919050565b6126e3816126c9565b82525050565b5f6020820190506126fc5f8301846126da565b92915050565b5f60208284031215612717576127166124dc565b5b5f6127248482850161252a565b91505092915050565b61273681612503565b82525050565b5f60208201905061274f5f83018461272d565b92915050565b5f6020828403121561276a576127696124dc565b5b5f6127778482850161255d565b91505092915050565b5f8060408385031215612796576127956124dc565b5b5f6127a38582860161252a565b92505060206127b48582860161252a565b9150509250929050565b5f6127c8826126b8565b9050919050565b6127d8816127be565b82525050565b5f6020820190506127f15f8301846127cf565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061283b57607f821691505b60208210810361284e5761284d6127f7565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61288b8261253e565b91506128968361253e565b92508282019050808211156128ae576128ad612854565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61294081612503565b82525050565b5f6129518383612937565b60208301905092915050565b5f602082019050919050565b5f6129738261290e565b61297d8185612918565b935061298883612928565b805f5b838110156129b857815161299f8882612946565b97506129aa8361295d565b92505060018101905061298b565b5085935050505092915050565b5f6040820190506129d85f8301856125e2565b81810360208301526129ea8184612969565b90509392505050565b5f80fd5b612a008261246b565b810181811067ffffffffffffffff82111715612a1f57612a1e6128b4565b5b80604052505050565b5f612a316124d3565b9050612a3d82826129f7565b919050565b5f67ffffffffffffffff821115612a5c57612a5b6128b4565b5b602082029050602081019050919050565b5f80fd5b5f81519050612a7f81612547565b92915050565b5f612a97612a9284612a42565b612a28565b90508083825260208201905060208402830185811115612aba57612ab9612a6d565b5b835b81811015612ae35780612acf8882612a71565b845260208401935050602081019050612abc565b5050509392505050565b5f82601f830112612b0157612b006129f3565b5b8151612b11848260208601612a85565b91505092915050565b5f60208284031215612b2f57612b2e6124dc565b5b5f82015167ffffffffffffffff811115612b4c57612b4b6124e0565b5b612b5884828501612aed565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612bbb602583612433565b9150612bc682612b61565b604082019050919050565b5f6020820190508181035f830152612be881612baf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612c49602683612433565b9150612c5482612bef565b604082019050919050565b5f6020820190508181035f830152612c7681612c3d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612cd7602483612433565b9150612ce282612c7d565b604082019050919050565b5f6020820190508181035f830152612d0481612ccb565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612d65602283612433565b9150612d7082612d0b565b604082019050919050565b5f6020820190508181035f830152612d9281612d59565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612dcd601d83612433565b9150612dd882612d99565b602082019050919050565b5f6020820190508181035f830152612dfa81612dc1565b9050919050565b7f43616e6e6f7420706572666f726d206d6f7265207468616e206f6e65207472615f8201527f6e73616374696f6e20696e207468652073616d6520626c6f636b000000000000602082015250565b5f612e5b603a83612433565b9150612e6682612e01565b604082019050919050565b5f6020820190508181035f830152612e8881612e4f565b9050919050565b5f612e998261253e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612ecb57612eca612854565b5b600182019050919050565b5f612ee08261253e565b9150612eeb8361253e565b9250828202612ef98161253e565b91508282048414831517612f1057612f0f612854565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f612f4e8261253e565b9150612f598361253e565b925082612f6957612f68612f17565b5b828204905092915050565b5f612f7e8261253e565b9150612f898361253e565b9250828203905081811115612fa157612fa0612854565b5b92915050565b5f819050919050565b5f612fca612fc5612fc084612fa7565b61268e565b61253e565b9050919050565b612fda81612fb0565b82525050565b5f60a082019050612ff35f8301886125e2565b6130006020830187612fd1565b81810360408301526130128186612969565b9050613021606083018561272d565b61302e60808301846125e2565b9695505050505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61306c602083612433565b915061307782613038565b602082019050919050565b5f6020820190508181035f83015261309981613060565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6130fa602583612433565b9150613105826130a0565b604082019050919050565b5f6020820190508181035f830152613127816130ee565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f613188602383612433565b91506131938261312e565b604082019050919050565b5f6020820190508181035f8301526131b58161317c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f613216602683612433565b9150613221826131bc565b604082019050919050565b5f6020820190508181035f8301526132438161320a565b9050919050565b5f6dffffffffffffffffffffffffffff82169050919050565b61326c8161324a565b8114613276575f80fd5b50565b5f8151905061328781613263565b92915050565b5f63ffffffff82169050919050565b6132a58161328d565b81146132af575f80fd5b50565b5f815190506132c08161329c565b92915050565b5f805f606084860312156132dd576132dc6124dc565b5b5f6132ea86828701613279565b93505060206132fb86828701613279565b925050604061330c868287016132b2565b9150509250925092565b5f8151905061332481612514565b92915050565b5f6020828403121561333f5761333e6124dc565b5b5f61334c84828501613316565b91505092915050565b7f4d617820746f6b656e20706572207472616e73616374696f6e206578636565645f8201527f6564000000000000000000000000000000000000000000000000000000000000602082015250565b5f6133af602283612433565b91506133ba82613355565b604082019050919050565b5f6020820190508181035f8301526133dc816133a3565b9050919050565b7f4d617820746f6b656e207065722077616c6c65742065786365656465640000005f82015250565b5f613417601d83612433565b9150613422826133e3565b602082019050919050565b5f6020820190508181035f8301526134448161340b565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f6134a5602183612433565b91506134b08261344b565b604082019050919050565b5f6020820190508181035f8301526134d281613499565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f613533602283612433565b915061353e826134d9565b604082019050919050565b5f6020820190508181035f83015261356081613527565b905091905056fea26469706673582212207b9b8bb55318ecddc96f07ba192af5156ae221693b37bcc40c33f2d005d3c2cb64736f6c63430008160033

Deployed Bytecode Sourcemap

30230:6531:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30692:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9521:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11947:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10650:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12753:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10492:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30642:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13457:263;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30743:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30948:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30400:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36233:130;;;;;;;;;;;;;:::i;:::-;;30874:67;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36560:198;;;;;;;;;;;;;:::i;:::-;;10821:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2842:103;;;;;;;;;;;;;:::i;:::-;;36371:181;;;;;;;;;;;;;:::i;:::-;;2201:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32883:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9740:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14223:498;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30296:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30480:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11170:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30786:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30830:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11451:176;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31110:48;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3100:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30441:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30692:44;;;;;;;;;;;;;:::o;9521:100::-;9575:13;9608:5;9601:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9521:100;:::o;11947:226::-;12055:4;12072:13;12088:12;:10;:12::i;:::-;12072:28;;12111:32;12120:5;12127:7;12136:6;12111:8;:32::i;:::-;12161:4;12154:11;;;11947:226;;;;:::o;10650:108::-;10711:7;10738:12;;10731:19;;10650:108;:::o;12753:295::-;12884:4;12901:15;12919:12;:10;:12::i;:::-;12901:30;;12942:38;12958:4;12964:7;12973:6;12942:15;:38::i;:::-;12991:27;13001:4;13007:2;13011:6;12991:9;:27::i;:::-;13036:4;13029:11;;;12753:295;;;;;:::o;10492:93::-;10550:5;10575:2;10568:9;;10492:93;:::o;30642:43::-;;;;;;;;;;;;;:::o;13457:263::-;13570:4;13587:13;13603:12;:10;:12::i;:::-;13587:28;;13626:64;13635:5;13642:7;13679:10;13651:25;13661:5;13668:7;13651:9;:25::i;:::-;:38;;;;:::i;:::-;13626:8;:64::i;:::-;13708:4;13701:11;;;13457:263;;;;:::o;30743:36::-;;;;;;;;;;;;;:::o;30948:66::-;;;;:::o;30400:34::-;;;;;;;;;;;;;:::o;36233:130::-;36291:11;;;;;;;;;;;36277:25;;:10;:25;;;36273:83;;36319:25;:23;:25::i;:::-;36273:83;36233:130::o;30874:67::-;;;;:::o;36560:198::-;36619:11;;;;;;;;;;;36605:25;;:10;:25;;;36601:150;;36666:1;36647:16;;:20;;;;;;;;;;;;;;;;;;36702:1;36682:17;;:21;;;;;;;;;;;;;;;;;;36738:1;36718:17;;:21;;;;;;;;;;;;;;;;;;36601:150;36560:198::o;10821:143::-;10911:7;10938:9;:18;10948:7;10938:18;;;;;;;;;;;;;;;;10931:25;;10821:143;;;:::o;2842:103::-;2087:13;:11;:13::i;:::-;2907:30:::1;2934:1;2907:18;:30::i;:::-;2842:103::o:0;36371:181::-;36431:11;;;;;;;;;;;36417:25;;:10;:25;;;36413:132;;36485:1;36459:23;:27;;;;36532:1;36501:28;:32;;;;36413:132;36371:181::o;2201:87::-;2247:7;2274:6;;;;;;;;;;;2267:13;;2201:87;:::o;32883:412::-;32971:7;32991:21;33029:1;33015:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32991:40;;33060:4;33042;33047:1;33042:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33086:4;;;;;;;;;;;33076;33081:1;33076:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;;;33105:6;;;;;;;;;;;:20;;;33126:6;33134:4;33105:34;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33101:187;;33275:1;33268:8;;;;;33101:187;33221:10;33232:1;33221:13;;;;;;;;:::i;:::-;;;;;;;;33214:20;;;;32883:412;;;;:::o;9740:104::-;9796:13;9829:7;9822:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9740:104;:::o;14223:498::-;14341:4;14358:13;14374:12;:10;:12::i;:::-;14358:28;;14397:24;14424:25;14434:5;14441:7;14424:9;:25::i;:::-;14397:52;;14502:15;14482:16;:35;;14460:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;14618:60;14627:5;14634:7;14662:15;14643:16;:34;14618:8;:60::i;:::-;14709:4;14702:11;;;;14223:498;;;;:::o;30296:95::-;30349:42;30296:95;:::o;30480:19::-;;;;;;;;;;;;;:::o;11170:218::-;11274:4;11291:13;11307:12;:10;:12::i;:::-;11291:28;;11330;11340:5;11347:2;11351:6;11330:9;:28::i;:::-;11376:4;11369:11;;;11170:218;;;;:::o;30786:37::-;;;;;;;;;;;;;:::o;30830:35::-;;;;;;;;;;;;;:::o;11451:176::-;11565:7;11592:11;:18;11604:5;11592:18;;;;;;;;;;;;;;;:27;11611:7;11592:27;;;;;;;;;;;;;;;;11585:34;;11451:176;;;;:::o;31110:48::-;;;;:::o;3100:238::-;2087:13;:11;:13::i;:::-;3223:1:::1;3203:22;;:8;:22;;::::0;3181:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3302:28;3321:8;3302:18;:28::i;:::-;3100:238:::0;:::o;30441:32::-;;;;;;;;;;;;;:::o;725:98::-;778:7;805:10;798:17;;725:98;:::o;18349:380::-;18502:1;18485:19;;:5;:19;;;18477:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18583:1;18564:21;;:7;:21;;;18556:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18667:6;18637:11;:18;18649:5;18637:18;;;;;;;;;;;;;;;:27;18656:7;18637:27;;;;;;;;;;;;;;;:36;;;;18705:7;18689:32;;18698:5;18689:32;;;18714:6;18689:32;;;;;;:::i;:::-;;;;;;;;18349:380;;;:::o;19020:502::-;19155:24;19182:25;19192:5;19199:7;19182:9;:25::i;:::-;19155:52;;19242:17;19222:16;:37;19218:297;;19322:6;19302:16;:26;;19276:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;19437:51;19446:5;19453:7;19481:6;19462:16;:25;19437:8;:51::i;:::-;19218:297;19144:378;19020:502;;;:::o;34311:1914::-;34430:4;34436:2;32008:8;:14;32017:4;32008:14;;;;;;;;;;;;;;;;31993:12;:29;:60;;;;32041:8;:12;32050:2;32041:12;;;;;;;;;;;;;;;;32026;:27;31993:60;31971:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;34477:7:::1;:5;:7::i;:::-;34469:15;;:4;:15;;;:45;;;;34507:7;:5;:7::i;:::-;34501:13;;:2;:13;;;34469:45;:81;;;;34539:11;;;;;;;;;;;34531:19;;:4;:19;;;34469:81;:115;;;;34573:11;;;;;;;;;;;34567:17;;:2;:17;;;34469:115;:151;;;;34609:11;;;;;;;;;;;34601:19;;:4;:19;;;34469:151;:185;;;;34643:11;;;;;;;;;;;34637:17;;:2;:17;;;34469:185;:208;;;;34671:6;;;;;;;;;;;34469:208;34451:1767;;;34704:33;34720:4;34726:2;34730:6;34704:15;:33::i;:::-;34451:1767;;;34770:21;34794:16;;;;;;;;;;;34770:40;;;;34825:11;34847:4;;;;;;;;;;;34839:12;;:4;:12;;;:39;;;;;30349:42;34855:23;;:2;:23;;;;34839:39;34825:53;;34893:12;30349:42;34908:25;;:4;:25;;;;:39;;;;;34943:4;;;;;;;;;;;34937:10;;:2;:10;;;34908:39;34893:54;;34980:4;;;;;;;;;;;34966:18;;:10;:18;;;;:29;;;;;34989:6;;;;;;;;;;;34988:7;34966:29;34962:51;;;34997:16;:14;:16::i;:::-;34962:51;35032:6;35028:282;;;35074:23;;35063:8;;:34;35059:236;;;35138:23;;;;;;;;;;;35122:39;;;;35184:8;;:10;;;;;;;;;:::i;:::-;;;;;;35059:236;;;35259:16;;;;;;;;;;;35243:32;;;;35059:236;35028:282;35328:7;35324:252;;;35371:23;;35360:8;;:34;35356:205;;;35435:24;;;;;;;;;;;35419:40;;;;35356:205;;;35524:17;;;;;;;;;;;35508:33;;;;35356:205;35324:252;35590:17;35638:5;35620:13;35611:6;:22;;;;:::i;:::-;35610:34;;;;:::i;:::-;35590:54;;35659:21;35715:5;35693:17;;;;;;;;;;;35684:26;;:6;:26;;;;:::i;:::-;35683:38;;;;:::i;:::-;35659:62;;35736:19;35781:13;35769:9;:25;;;;:::i;:::-;35759:6;:36;;;;:::i;:::-;35736:60;;35846:1;35815:28;;:32;35811:96;;;35866:41;35900:6;35866:33;:41::i;:::-;35811:96;35926:6;:37;;;;;35962:1;35936:23;;:27;35926:37;35922:105;;;35982:45;36011:2;36015:11;35982:28;:45::i;:::-;35922:105;36062:1;36046:13;:17;36042:49;;;36065:26;36071:4;36077:13;36065:5;:26::i;:::-;36042:49;36106:47;36122:4;36136;36143:9;36106:15;:47::i;:::-;36168:38;36184:4;36190:2;36194:11;36168:15;:38::i;:::-;34755:1463;;;;;;34451:1767;32179:12:::0;32162:8;:14;32171:4;32162:14;;;;;;;;;;;;;;;:29;;;;32217:12;32202:8;:12;32211:2;32202:12;;;;;;;;;;;;;;;:27;;;;34311:1914;;;;;:::o;33303:485::-;31244:4;31235:6;;:13;;;;;;;;;;;;;;;;;;33369:16:::1;33388:24;33406:4;33388:9;:24::i;:::-;33369:43;;33423:21;33461:1;33447:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33423:40;;33492:4;33474;33479:1;33474:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;33518:4;;;;;;;;;;;33508;33513:1;33508:7;;;;;;;;:::i;:::-;;;;;;;:14;;;;;;;;;::::0;::::1;33533:6;;;;;;;;;;;:57;;;33605:8;33628:1;33644:4;33671;33691:15;33533:184;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;33736:11;;;;;;;;;;;33728:29;;:52;33758:21;33728:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;33358:430;;31280:5:::0;31271:6;;:14;;;;;;;;;;;;;;;;;;33303:485::o;2366:132::-;2441:12;:10;:12::i;:::-;2430:23;;:7;:5;:7::i;:::-;:23;;;2422:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2366:132::o;3498:191::-;3572:16;3591:6;;;;;;;;;;;3572:25;;3617:8;3608:6;;:17;;;;;;;;;;;;;;;;;;3672:8;3641:40;;3662:8;3641:40;;;;;;;;;;;;3561:128;3498:191;:::o;15191:877::-;15338:1;15322:18;;:4;:18;;;15314:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15415:1;15401:16;;:2;:16;;;15393:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15470:38;15491:4;15497:2;15501:6;15470:20;:38::i;:::-;15521:19;15543:9;:15;15553:4;15543:15;;;;;;;;;;;;;;;;15521:37;;15606:6;15591:11;:21;;15569:109;;;;;;;;;;;;:::i;:::-;;;;;;;;;15746:6;15732:11;:20;15714:9;:15;15724:4;15714:15;;;;;;;;;;;;;;;:38;;;;15949:6;15932:9;:13;15942:2;15932:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15999:2;15984:26;;15993:4;15984:26;;;16003:6;15984:26;;;;;;:::i;:::-;;;;;;;;16023:37;16043:4;16049:2;16053:6;16023:19;:37::i;:::-;15303:765;15191:877;;;:::o;33796:507::-;33841:19;33863:75;33903:24;33921:4;33903:9;:24::i;:::-;33863:25;:75::i;:::-;33841:97;;33950:16;33968;33990:12;;;;;;;;;;;:24;;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33949:67;;;;;34027:22;34089:4;;;;;;;;;;;34064:29;;:12;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:29;;;34060:167;;34120:8;34112:17;;34095:34;;34060:167;;;34174:4;;;;;;;;;;;34149:29;;:12;;;;;;;;;;;:19;;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:29;;;34145:82;;34218:8;34210:17;;34193:34;;34145:82;34060:167;34256:12;;34242:11;:26;34238:57;;;34270:25;:23;:25::i;:::-;34238:57;33830:473;;;;33796:507::o;32245:296::-;32346:7;:5;:7::i;:::-;32332:21;;:10;:21;;;;:52;;;;32379:4;32357:27;;:10;:27;;;;32332:52;32328:205;;;32435:28;;32425:6;:38;;32399:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;32328:205;32245:296;:::o;32549:326::-;32682:7;:5;:7::i;:::-;32668:21;;:10;:21;;;;:44;;;;32707:4;32693:19;;:2;:19;;;;32668:44;32664:203;;;32779:23;;32769:6;32753:13;32763:2;32753:9;:13::i;:::-;:22;;;;:::i;:::-;:49;;32727:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;32664:203;32549:326;;:::o;17236:675::-;17339:1;17320:21;;:7;:21;;;17312:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;17392:49;17413:7;17430:1;17434:6;17392:20;:49::i;:::-;17454:22;17479:9;:18;17489:7;17479:18;;;;;;;;;;;;;;;;17454:43;;17534:6;17516:14;:24;;17508:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;17653:6;17636:14;:23;17615:9;:18;17625:7;17615:18;;;;;;;;;;;;;;;:44;;;;17770:6;17754:12;;:22;;;;;;;;;;;17831:1;17805:37;;17814:7;17805:37;;;17835:6;17805:37;;;;;;:::i;:::-;;;;;;;;17855:48;17875:7;17892:1;17896:6;17855:19;:48::i;:::-;17301:610;17236:675;;:::o;20122:125::-;;;;:::o;20851:124::-;;;;:::o;7:89:1:-;43:7;83:6;76:5;72:18;61:29;;7:89;;;:::o;102:115::-;187:23;204:5;187:23;:::i;:::-;182:3;175:36;102:115;;:::o;223:218::-;314:4;352:2;341:9;337:18;329:26;;365:69;431:1;420:9;416:17;407:6;365:69;:::i;:::-;223:218;;;;:::o;447:99::-;499:6;533:5;527:12;517:22;;447:99;;;:::o;552:169::-;636:11;670:6;665:3;658:19;710:4;705:3;701:14;686:29;;552:169;;;;:::o;727:246::-;808:1;818:113;832:6;829:1;826:13;818:113;;;917:1;912:3;908:11;902:18;898:1;893:3;889:11;882:39;854:2;851:1;847:10;842:15;;818:113;;;965:1;956:6;951:3;947:16;940:27;789:184;727:246;;;:::o;979:102::-;1020:6;1071:2;1067:7;1062:2;1055:5;1051:14;1047:28;1037:38;;979:102;;;:::o;1087:377::-;1175:3;1203:39;1236:5;1203:39;:::i;:::-;1258:71;1322:6;1317:3;1258:71;:::i;:::-;1251:78;;1338:65;1396:6;1391:3;1384:4;1377:5;1373:16;1338:65;:::i;:::-;1428:29;1450:6;1428:29;:::i;:::-;1423:3;1419:39;1412:46;;1179:285;1087:377;;;;:::o;1470:313::-;1583:4;1621:2;1610:9;1606:18;1598:26;;1670:9;1664:4;1660:20;1656:1;1645:9;1641:17;1634:47;1698:78;1771:4;1762:6;1698:78;:::i;:::-;1690:86;;1470:313;;;;:::o;1789:75::-;1822:6;1855:2;1849:9;1839:19;;1789:75;:::o;1870:117::-;1979:1;1976;1969:12;1993:117;2102:1;2099;2092:12;2116:126;2153:7;2193:42;2186:5;2182:54;2171:65;;2116:126;;;:::o;2248:96::-;2285:7;2314:24;2332:5;2314:24;:::i;:::-;2303:35;;2248:96;;;:::o;2350:122::-;2423:24;2441:5;2423:24;:::i;:::-;2416:5;2413:35;2403:63;;2462:1;2459;2452:12;2403:63;2350:122;:::o;2478:139::-;2524:5;2562:6;2549:20;2540:29;;2578:33;2605:5;2578:33;:::i;:::-;2478:139;;;;:::o;2623:77::-;2660:7;2689:5;2678:16;;2623:77;;;:::o;2706:122::-;2779:24;2797:5;2779:24;:::i;:::-;2772:5;2769:35;2759:63;;2818:1;2815;2808:12;2759:63;2706:122;:::o;2834:139::-;2880:5;2918:6;2905:20;2896:29;;2934:33;2961:5;2934:33;:::i;:::-;2834:139;;;;:::o;2979:474::-;3047:6;3055;3104:2;3092:9;3083:7;3079:23;3075:32;3072:119;;;3110:79;;:::i;:::-;3072:119;3230:1;3255:53;3300:7;3291:6;3280:9;3276:22;3255:53;:::i;:::-;3245:63;;3201:117;3357:2;3383:53;3428:7;3419:6;3408:9;3404:22;3383:53;:::i;:::-;3373:63;;3328:118;2979:474;;;;;:::o;3459:90::-;3493:7;3536:5;3529:13;3522:21;3511:32;;3459:90;;;:::o;3555:109::-;3636:21;3651:5;3636:21;:::i;:::-;3631:3;3624:34;3555:109;;:::o;3670:210::-;3757:4;3795:2;3784:9;3780:18;3772:26;;3808:65;3870:1;3859:9;3855:17;3846:6;3808:65;:::i;:::-;3670:210;;;;:::o;3886:118::-;3973:24;3991:5;3973:24;:::i;:::-;3968:3;3961:37;3886:118;;:::o;4010:222::-;4103:4;4141:2;4130:9;4126:18;4118:26;;4154:71;4222:1;4211:9;4207:17;4198:6;4154:71;:::i;:::-;4010:222;;;;:::o;4238:619::-;4315:6;4323;4331;4380:2;4368:9;4359:7;4355:23;4351:32;4348:119;;;4386:79;;:::i;:::-;4348:119;4506:1;4531:53;4576:7;4567:6;4556:9;4552:22;4531:53;:::i;:::-;4521:63;;4477:117;4633:2;4659:53;4704:7;4695:6;4684:9;4680:22;4659:53;:::i;:::-;4649:63;;4604:118;4761:2;4787:53;4832:7;4823:6;4812:9;4808:22;4787:53;:::i;:::-;4777:63;;4732:118;4238:619;;;;;:::o;4863:86::-;4898:7;4938:4;4931:5;4927:16;4916:27;;4863:86;;;:::o;4955:112::-;5038:22;5054:5;5038:22;:::i;:::-;5033:3;5026:35;4955:112;;:::o;5073:214::-;5162:4;5200:2;5189:9;5185:18;5177:26;;5213:67;5277:1;5266:9;5262:17;5253:6;5213:67;:::i;:::-;5073:214;;;;:::o;5293:60::-;5321:3;5342:5;5335:12;;5293:60;;;:::o;5359:142::-;5409:9;5442:53;5460:34;5469:24;5487:5;5469:24;:::i;:::-;5460:34;:::i;:::-;5442:53;:::i;:::-;5429:66;;5359:142;;;:::o;5507:126::-;5557:9;5590:37;5621:5;5590:37;:::i;:::-;5577:50;;5507:126;;;:::o;5639:149::-;5712:9;5745:37;5776:5;5745:37;:::i;:::-;5732:50;;5639:149;;;:::o;5794:177::-;5904:60;5958:5;5904:60;:::i;:::-;5899:3;5892:73;5794:177;;:::o;5977:268::-;6093:4;6131:2;6120:9;6116:18;6108:26;;6144:94;6235:1;6224:9;6220:17;6211:6;6144:94;:::i;:::-;5977:268;;;;:::o;6251:329::-;6310:6;6359:2;6347:9;6338:7;6334:23;6330:32;6327:119;;;6365:79;;:::i;:::-;6327:119;6485:1;6510:53;6555:7;6546:6;6535:9;6531:22;6510:53;:::i;:::-;6500:63;;6456:117;6251:329;;;;:::o;6586:118::-;6673:24;6691:5;6673:24;:::i;:::-;6668:3;6661:37;6586:118;;:::o;6710:222::-;6803:4;6841:2;6830:9;6826:18;6818:26;;6854:71;6922:1;6911:9;6907:17;6898:6;6854:71;:::i;:::-;6710:222;;;;:::o;6938:329::-;6997:6;7046:2;7034:9;7025:7;7021:23;7017:32;7014:119;;;7052:79;;:::i;:::-;7014:119;7172:1;7197:53;7242:7;7233:6;7222:9;7218:22;7197:53;:::i;:::-;7187:63;;7143:117;6938:329;;;;:::o;7273:474::-;7341:6;7349;7398:2;7386:9;7377:7;7373:23;7369:32;7366:119;;;7404:79;;:::i;:::-;7366:119;7524:1;7549:53;7594:7;7585:6;7574:9;7570:22;7549:53;:::i;:::-;7539:63;;7495:117;7651:2;7677:53;7722:7;7713:6;7702:9;7698:22;7677:53;:::i;:::-;7667:63;;7622:118;7273:474;;;;;:::o;7753:153::-;7830:9;7863:37;7894:5;7863:37;:::i;:::-;7850:50;;7753:153;;;:::o;7912:185::-;8026:64;8084:5;8026:64;:::i;:::-;8021:3;8014:77;7912:185;;:::o;8103:276::-;8223:4;8261:2;8250:9;8246:18;8238:26;;8274:98;8369:1;8358:9;8354:17;8345:6;8274:98;:::i;:::-;8103:276;;;;:::o;8385:180::-;8433:77;8430:1;8423:88;8530:4;8527:1;8520:15;8554:4;8551:1;8544:15;8571:320;8615:6;8652:1;8646:4;8642:12;8632:22;;8699:1;8693:4;8689:12;8720:18;8710:81;;8776:4;8768:6;8764:17;8754:27;;8710:81;8838:2;8830:6;8827:14;8807:18;8804:38;8801:84;;8857:18;;:::i;:::-;8801:84;8622:269;8571:320;;;:::o;8897:180::-;8945:77;8942:1;8935:88;9042:4;9039:1;9032:15;9066:4;9063:1;9056:15;9083:191;9123:3;9142:20;9160:1;9142:20;:::i;:::-;9137:25;;9176:20;9194:1;9176:20;:::i;:::-;9171:25;;9219:1;9216;9212:9;9205:16;;9240:3;9237:1;9234:10;9231:36;;;9247:18;;:::i;:::-;9231:36;9083:191;;;;:::o;9280:180::-;9328:77;9325:1;9318:88;9425:4;9422:1;9415:15;9449:4;9446:1;9439:15;9466:180;9514:77;9511:1;9504:88;9611:4;9608:1;9601:15;9635:4;9632:1;9625:15;9652:114;9719:6;9753:5;9747:12;9737:22;;9652:114;;;:::o;9772:184::-;9871:11;9905:6;9900:3;9893:19;9945:4;9940:3;9936:14;9921:29;;9772:184;;;;:::o;9962:132::-;10029:4;10052:3;10044:11;;10082:4;10077:3;10073:14;10065:22;;9962:132;;;:::o;10100:108::-;10177:24;10195:5;10177:24;:::i;:::-;10172:3;10165:37;10100:108;;:::o;10214:179::-;10283:10;10304:46;10346:3;10338:6;10304:46;:::i;:::-;10382:4;10377:3;10373:14;10359:28;;10214:179;;;;:::o;10399:113::-;10469:4;10501;10496:3;10492:14;10484:22;;10399:113;;;:::o;10548:732::-;10667:3;10696:54;10744:5;10696:54;:::i;:::-;10766:86;10845:6;10840:3;10766:86;:::i;:::-;10759:93;;10876:56;10926:5;10876:56;:::i;:::-;10955:7;10986:1;10971:284;10996:6;10993:1;10990:13;10971:284;;;11072:6;11066:13;11099:63;11158:3;11143:13;11099:63;:::i;:::-;11092:70;;11185:60;11238:6;11185:60;:::i;:::-;11175:70;;11031:224;11018:1;11015;11011:9;11006:14;;10971:284;;;10975:14;11271:3;11264:10;;10672:608;;;10548:732;;;;:::o;11286:483::-;11457:4;11495:2;11484:9;11480:18;11472:26;;11508:71;11576:1;11565:9;11561:17;11552:6;11508:71;:::i;:::-;11626:9;11620:4;11616:20;11611:2;11600:9;11596:18;11589:48;11654:108;11757:4;11748:6;11654:108;:::i;:::-;11646:116;;11286:483;;;;;:::o;11775:117::-;11884:1;11881;11874:12;11898:281;11981:27;12003:4;11981:27;:::i;:::-;11973:6;11969:40;12111:6;12099:10;12096:22;12075:18;12063:10;12060:34;12057:62;12054:88;;;12122:18;;:::i;:::-;12054:88;12162:10;12158:2;12151:22;11941:238;11898:281;;:::o;12185:129::-;12219:6;12246:20;;:::i;:::-;12236:30;;12275:33;12303:4;12295:6;12275:33;:::i;:::-;12185:129;;;:::o;12320:311::-;12397:4;12487:18;12479:6;12476:30;12473:56;;;12509:18;;:::i;:::-;12473:56;12559:4;12551:6;12547:17;12539:25;;12619:4;12613;12609:15;12601:23;;12320:311;;;:::o;12637:117::-;12746:1;12743;12736:12;12760:143;12817:5;12848:6;12842:13;12833:22;;12864:33;12891:5;12864:33;:::i;:::-;12760:143;;;;:::o;12926:732::-;13033:5;13058:81;13074:64;13131:6;13074:64;:::i;:::-;13058:81;:::i;:::-;13049:90;;13159:5;13188:6;13181:5;13174:21;13222:4;13215:5;13211:16;13204:23;;13275:4;13267:6;13263:17;13255:6;13251:30;13304:3;13296:6;13293:15;13290:122;;;13323:79;;:::i;:::-;13290:122;13438:6;13421:231;13455:6;13450:3;13447:15;13421:231;;;13530:3;13559:48;13603:3;13591:10;13559:48;:::i;:::-;13554:3;13547:61;13637:4;13632:3;13628:14;13621:21;;13497:155;13481:4;13476:3;13472:14;13465:21;;13421:231;;;13425:21;13039:619;;12926:732;;;;;:::o;13681:385::-;13763:5;13812:3;13805:4;13797:6;13793:17;13789:27;13779:122;;13820:79;;:::i;:::-;13779:122;13930:6;13924:13;13955:105;14056:3;14048:6;14041:4;14033:6;14029:17;13955:105;:::i;:::-;13946:114;;13769:297;13681:385;;;;:::o;14072:554::-;14167:6;14216:2;14204:9;14195:7;14191:23;14187:32;14184:119;;;14222:79;;:::i;:::-;14184:119;14363:1;14352:9;14348:17;14342:24;14393:18;14385:6;14382:30;14379:117;;;14415:79;;:::i;:::-;14379:117;14520:89;14601:7;14592:6;14581:9;14577:22;14520:89;:::i;:::-;14510:99;;14313:306;14072:554;;;;:::o;14632:224::-;14772:34;14768:1;14760:6;14756:14;14749:58;14841:7;14836:2;14828:6;14824:15;14817:32;14632:224;:::o;14862:366::-;15004:3;15025:67;15089:2;15084:3;15025:67;:::i;:::-;15018:74;;15101:93;15190:3;15101:93;:::i;:::-;15219:2;15214:3;15210:12;15203:19;;14862:366;;;:::o;15234:419::-;15400:4;15438:2;15427:9;15423:18;15415:26;;15487:9;15481:4;15477:20;15473:1;15462:9;15458:17;15451:47;15515:131;15641:4;15515:131;:::i;:::-;15507:139;;15234:419;;;:::o;15659:225::-;15799:34;15795:1;15787:6;15783:14;15776:58;15868:8;15863:2;15855:6;15851:15;15844:33;15659:225;:::o;15890:366::-;16032:3;16053:67;16117:2;16112:3;16053:67;:::i;:::-;16046:74;;16129:93;16218:3;16129:93;:::i;:::-;16247:2;16242:3;16238:12;16231:19;;15890:366;;;:::o;16262:419::-;16428:4;16466:2;16455:9;16451:18;16443:26;;16515:9;16509:4;16505:20;16501:1;16490:9;16486:17;16479:47;16543:131;16669:4;16543:131;:::i;:::-;16535:139;;16262:419;;;:::o;16687:223::-;16827:34;16823:1;16815:6;16811:14;16804:58;16896:6;16891:2;16883:6;16879:15;16872:31;16687:223;:::o;16916:366::-;17058:3;17079:67;17143:2;17138:3;17079:67;:::i;:::-;17072:74;;17155:93;17244:3;17155:93;:::i;:::-;17273:2;17268:3;17264:12;17257:19;;16916:366;;;:::o;17288:419::-;17454:4;17492:2;17481:9;17477:18;17469:26;;17541:9;17535:4;17531:20;17527:1;17516:9;17512:17;17505:47;17569:131;17695:4;17569:131;:::i;:::-;17561:139;;17288:419;;;:::o;17713:221::-;17853:34;17849:1;17841:6;17837:14;17830:58;17922:4;17917:2;17909:6;17905:15;17898:29;17713:221;:::o;17940:366::-;18082:3;18103:67;18167:2;18162:3;18103:67;:::i;:::-;18096:74;;18179:93;18268:3;18179:93;:::i;:::-;18297:2;18292:3;18288:12;18281:19;;17940:366;;;:::o;18312:419::-;18478:4;18516:2;18505:9;18501:18;18493:26;;18565:9;18559:4;18555:20;18551:1;18540:9;18536:17;18529:47;18593:131;18719:4;18593:131;:::i;:::-;18585:139;;18312:419;;;:::o;18737:179::-;18877:31;18873:1;18865:6;18861:14;18854:55;18737:179;:::o;18922:366::-;19064:3;19085:67;19149:2;19144:3;19085:67;:::i;:::-;19078:74;;19161:93;19250:3;19161:93;:::i;:::-;19279:2;19274:3;19270:12;19263:19;;18922:366;;;:::o;19294:419::-;19460:4;19498:2;19487:9;19483:18;19475:26;;19547:9;19541:4;19537:20;19533:1;19522:9;19518:17;19511:47;19575:131;19701:4;19575:131;:::i;:::-;19567:139;;19294:419;;;:::o;19719:245::-;19859:34;19855:1;19847:6;19843:14;19836:58;19928:28;19923:2;19915:6;19911:15;19904:53;19719:245;:::o;19970:366::-;20112:3;20133:67;20197:2;20192:3;20133:67;:::i;:::-;20126:74;;20209:93;20298:3;20209:93;:::i;:::-;20327:2;20322:3;20318:12;20311:19;;19970:366;;;:::o;20342:419::-;20508:4;20546:2;20535:9;20531:18;20523:26;;20595:9;20589:4;20585:20;20581:1;20570:9;20566:17;20559:47;20623:131;20749:4;20623:131;:::i;:::-;20615:139;;20342:419;;;:::o;20767:233::-;20806:3;20829:24;20847:5;20829:24;:::i;:::-;20820:33;;20875:66;20868:5;20865:77;20862:103;;20945:18;;:::i;:::-;20862:103;20992:1;20985:5;20981:13;20974:20;;20767:233;;;:::o;21006:410::-;21046:7;21069:20;21087:1;21069:20;:::i;:::-;21064:25;;21103:20;21121:1;21103:20;:::i;:::-;21098:25;;21158:1;21155;21151:9;21180:30;21198:11;21180:30;:::i;:::-;21169:41;;21359:1;21350:7;21346:15;21343:1;21340:22;21320:1;21313:9;21293:83;21270:139;;21389:18;;:::i;:::-;21270:139;21054:362;21006:410;;;;:::o;21422:180::-;21470:77;21467:1;21460:88;21567:4;21564:1;21557:15;21591:4;21588:1;21581:15;21608:185;21648:1;21665:20;21683:1;21665:20;:::i;:::-;21660:25;;21699:20;21717:1;21699:20;:::i;:::-;21694:25;;21738:1;21728:35;;21743:18;;:::i;:::-;21728:35;21785:1;21782;21778:9;21773:14;;21608:185;;;;:::o;21799:194::-;21839:4;21859:20;21877:1;21859:20;:::i;:::-;21854:25;;21893:20;21911:1;21893:20;:::i;:::-;21888:25;;21937:1;21934;21930:9;21922:17;;21961:1;21955:4;21952:11;21949:37;;;21966:18;;:::i;:::-;21949:37;21799:194;;;;:::o;21999:85::-;22044:7;22073:5;22062:16;;21999:85;;;:::o;22090:158::-;22148:9;22181:61;22199:42;22208:32;22234:5;22208:32;:::i;:::-;22199:42;:::i;:::-;22181:61;:::i;:::-;22168:74;;22090:158;;;:::o;22254:147::-;22349:45;22388:5;22349:45;:::i;:::-;22344:3;22337:58;22254:147;;:::o;22407:831::-;22670:4;22708:3;22697:9;22693:19;22685:27;;22722:71;22790:1;22779:9;22775:17;22766:6;22722:71;:::i;:::-;22803:80;22879:2;22868:9;22864:18;22855:6;22803:80;:::i;:::-;22930:9;22924:4;22920:20;22915:2;22904:9;22900:18;22893:48;22958:108;23061:4;23052:6;22958:108;:::i;:::-;22950:116;;23076:72;23144:2;23133:9;23129:18;23120:6;23076:72;:::i;:::-;23158:73;23226:3;23215:9;23211:19;23202:6;23158:73;:::i;:::-;22407:831;;;;;;;;:::o;23244:182::-;23384:34;23380:1;23372:6;23368:14;23361:58;23244:182;:::o;23432:366::-;23574:3;23595:67;23659:2;23654:3;23595:67;:::i;:::-;23588:74;;23671:93;23760:3;23671:93;:::i;:::-;23789:2;23784:3;23780:12;23773:19;;23432:366;;;:::o;23804:419::-;23970:4;24008:2;23997:9;23993:18;23985:26;;24057:9;24051:4;24047:20;24043:1;24032:9;24028:17;24021:47;24085:131;24211:4;24085:131;:::i;:::-;24077:139;;23804:419;;;:::o;24229:224::-;24369:34;24365:1;24357:6;24353:14;24346:58;24438:7;24433:2;24425:6;24421:15;24414:32;24229:224;:::o;24459:366::-;24601:3;24622:67;24686:2;24681:3;24622:67;:::i;:::-;24615:74;;24698:93;24787:3;24698:93;:::i;:::-;24816:2;24811:3;24807:12;24800:19;;24459:366;;;:::o;24831:419::-;24997:4;25035:2;25024:9;25020:18;25012:26;;25084:9;25078:4;25074:20;25070:1;25059:9;25055:17;25048:47;25112:131;25238:4;25112:131;:::i;:::-;25104:139;;24831:419;;;:::o;25256:222::-;25396:34;25392:1;25384:6;25380:14;25373:58;25465:5;25460:2;25452:6;25448:15;25441:30;25256:222;:::o;25484:366::-;25626:3;25647:67;25711:2;25706:3;25647:67;:::i;:::-;25640:74;;25723:93;25812:3;25723:93;:::i;:::-;25841:2;25836:3;25832:12;25825:19;;25484:366;;;:::o;25856:419::-;26022:4;26060:2;26049:9;26045:18;26037:26;;26109:9;26103:4;26099:20;26095:1;26084:9;26080:17;26073:47;26137:131;26263:4;26137:131;:::i;:::-;26129:139;;25856:419;;;:::o;26281:225::-;26421:34;26417:1;26409:6;26405:14;26398:58;26490:8;26485:2;26477:6;26473:15;26466:33;26281:225;:::o;26512:366::-;26654:3;26675:67;26739:2;26734:3;26675:67;:::i;:::-;26668:74;;26751:93;26840:3;26751:93;:::i;:::-;26869:2;26864:3;26860:12;26853:19;;26512:366;;;:::o;26884:419::-;27050:4;27088:2;27077:9;27073:18;27065:26;;27137:9;27131:4;27127:20;27123:1;27112:9;27108:17;27101:47;27165:131;27291:4;27165:131;:::i;:::-;27157:139;;26884:419;;;:::o;27309:114::-;27346:7;27386:30;27379:5;27375:42;27364:53;;27309:114;;;:::o;27429:122::-;27502:24;27520:5;27502:24;:::i;:::-;27495:5;27492:35;27482:63;;27541:1;27538;27531:12;27482:63;27429:122;:::o;27557:143::-;27614:5;27645:6;27639:13;27630:22;;27661:33;27688:5;27661:33;:::i;:::-;27557:143;;;;:::o;27706:93::-;27742:7;27782:10;27775:5;27771:22;27760:33;;27706:93;;;:::o;27805:120::-;27877:23;27894:5;27877:23;:::i;:::-;27870:5;27867:34;27857:62;;27915:1;27912;27905:12;27857:62;27805:120;:::o;27931:141::-;27987:5;28018:6;28012:13;28003:22;;28034:32;28060:5;28034:32;:::i;:::-;27931:141;;;;:::o;28078:661::-;28165:6;28173;28181;28230:2;28218:9;28209:7;28205:23;28201:32;28198:119;;;28236:79;;:::i;:::-;28198:119;28356:1;28381:64;28437:7;28428:6;28417:9;28413:22;28381:64;:::i;:::-;28371:74;;28327:128;28494:2;28520:64;28576:7;28567:6;28556:9;28552:22;28520:64;:::i;:::-;28510:74;;28465:129;28633:2;28659:63;28714:7;28705:6;28694:9;28690:22;28659:63;:::i;:::-;28649:73;;28604:128;28078:661;;;;;:::o;28745:143::-;28802:5;28833:6;28827:13;28818:22;;28849:33;28876:5;28849:33;:::i;:::-;28745:143;;;;:::o;28894:351::-;28964:6;29013:2;29001:9;28992:7;28988:23;28984:32;28981:119;;;29019:79;;:::i;:::-;28981:119;29139:1;29164:64;29220:7;29211:6;29200:9;29196:22;29164:64;:::i;:::-;29154:74;;29110:128;28894:351;;;;:::o;29251:221::-;29391:34;29387:1;29379:6;29375:14;29368:58;29460:4;29455:2;29447:6;29443:15;29436:29;29251:221;:::o;29478:366::-;29620:3;29641:67;29705:2;29700:3;29641:67;:::i;:::-;29634:74;;29717:93;29806:3;29717:93;:::i;:::-;29835:2;29830:3;29826:12;29819:19;;29478:366;;;:::o;29850:419::-;30016:4;30054:2;30043:9;30039:18;30031:26;;30103:9;30097:4;30093:20;30089:1;30078:9;30074:17;30067:47;30131:131;30257:4;30131:131;:::i;:::-;30123:139;;29850:419;;;:::o;30275:179::-;30415:31;30411:1;30403:6;30399:14;30392:55;30275:179;:::o;30460:366::-;30602:3;30623:67;30687:2;30682:3;30623:67;:::i;:::-;30616:74;;30699:93;30788:3;30699:93;:::i;:::-;30817:2;30812:3;30808:12;30801:19;;30460:366;;;:::o;30832:419::-;30998:4;31036:2;31025:9;31021:18;31013:26;;31085:9;31079:4;31075:20;31071:1;31060:9;31056:17;31049:47;31113:131;31239:4;31113:131;:::i;:::-;31105:139;;30832:419;;;:::o;31257:220::-;31397:34;31393:1;31385:6;31381:14;31374:58;31466:3;31461:2;31453:6;31449:15;31442:28;31257:220;:::o;31483:366::-;31625:3;31646:67;31710:2;31705:3;31646:67;:::i;:::-;31639:74;;31722:93;31811:3;31722:93;:::i;:::-;31840:2;31835:3;31831:12;31824:19;;31483:366;;;:::o;31855:419::-;32021:4;32059:2;32048:9;32044:18;32036:26;;32108:9;32102:4;32098:20;32094:1;32083:9;32079:17;32072:47;32136:131;32262:4;32136:131;:::i;:::-;32128:139;;31855:419;;;:::o;32280:221::-;32420:34;32416:1;32408:6;32404:14;32397:58;32489:4;32484:2;32476:6;32472:15;32465:29;32280:221;:::o;32507:366::-;32649:3;32670:67;32734:2;32729:3;32670:67;:::i;:::-;32663:74;;32746:93;32835:3;32746:93;:::i;:::-;32864:2;32859:3;32855:12;32848:19;;32507:366;;;:::o;32879:419::-;33045:4;33083:2;33072:9;33068:18;33060:26;;33132:9;33126:4;33122:20;33118:1;33107:9;33103:17;33096:47;33160:131;33286:4;33160:131;:::i;:::-;33152:139;;32879:419;;;:::o

Swarm Source

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