ETH Price: $3,049.64 (+2.92%)
Gas: 1 Gwei

Token

STIMMY (STIMMY)
 

Overview

Max Total Supply

1,000,000,000,000 STIMMY

Holders

1,419

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
tofer.eth
Balance
20,000,000 STIMMY

Value
$0.00
0xb3587b643ab1f84075cffb6c4b62fc1a8d25ec87
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
STIMMY

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-16
*/

//            __      ______   ________  ______  __       __  __       __  __      __ 
//          _/  |_   /      \ /        |/      |/  \     /  |/  \     /  |/  \    /  |
//         / $$   \ /$$$$$$  |$$$$$$$$/ $$$$$$/ $$  \   /$$ |$$  \   /$$ |$$  \  /$$/ 
//        /$$$$$$  |$$ \__$$/    $$ |     $$ |  $$$  \ /$$$ |$$$  \ /$$$ | $$  \/$$/  
//        $$ \__$$/ $$      \    $$ |     $$ |  $$$$  /$$$$ |$$$$  /$$$$ |  $$  $$/   
//        $$      \  $$$$$$  |   $$ |     $$ |  $$ $$ $$/$$ |$$ $$ $$/$$ |   $$$$/    
//         $$$$$$  |/  \__$$ |   $$ |    _$$ |_ $$ |$$$/ $$ |$$ |$$$/ $$ |    $$ |    
//        /  \__$$ |$$    $$/    $$ |   / $$   |$$ | $/  $$ |$$ | $/  $$ |    $$ |    
//        $$    $$/  $$$$$$/     $$/    $$$$$$/ $$/      $$/ $$/      $$/     $$/     
//         $$$$$$/                                                                    
//           $$/                    


// File @openzeppelin/contracts/token/ERC20/[email protected]

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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 `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, 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 `sender` to `recipient` 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 sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

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


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]


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


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


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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, 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}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), 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}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - 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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * 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:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

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

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


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


pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}


// File @openzeppelin/contracts/token/ERC721/[email protected]


pragma solidity ^0.8.0;

/**
 * @dev Required interface of an ERC721 compliant contract.
 */
interface IERC721 is IERC165 {
    /**
     * @dev Emitted when `tokenId` token is transferred from `from` to `to`.
     */
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
     */
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);

    /**
     * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
     */
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    /**
     * @dev Returns the number of tokens in ``owner``'s account.
     */
    function balanceOf(address owner) external view returns (uint256 balance);

    /**
     * @dev Returns the owner of the `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function ownerOf(uint256 tokenId) external view returns (address owner);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    /**
     * @dev Gives permission to `to` to transfer `tokenId` token to another account.
     * The approval is cleared when the token is transferred.
     *
     * Only a single account can be approved at a time, so approving the zero address clears previous approvals.
     *
     * Requirements:
     *
     * - The caller must own the token or be an approved operator.
     * - `tokenId` must exist.
     *
     * Emits an {Approval} event.
     */
    function approve(address to, uint256 tokenId) external;

    /**
     * @dev Returns the account approved for `tokenId` token.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function getApproved(uint256 tokenId) external view returns (address operator);

    /**
     * @dev Approve or remove `operator` as an operator for the caller.
     * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
     *
     * Requirements:
     *
     * - The `operator` cannot be the caller.
     *
     * Emits an {ApprovalForAll} event.
     */
    function setApprovalForAll(address operator, bool _approved) external;

    /**
     * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
     *
     * See {setApprovalForAll}
     */
    function isApprovedForAll(address owner, address operator) external view returns (bool);

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}


// File @openzeppelin/contracts/token/ERC721/extensions/[email protected]


pragma solidity ^0.8.0;

/**
 * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Enumerable is IERC721 {
    /**
     * @dev Returns the total amount of tokens stored by the contract.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns a token ID owned by `owner` at a given `index` of its token list.
     * Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);

    /**
     * @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
     * Use along with {totalSupply} to enumerate all tokens.
     */
    function tokenByIndex(uint256 index) external view returns (uint256);
}


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


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() {
        _setOwner(_msgSender());
    }

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(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");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

                                                  


pragma solidity ^0.8.0;
contract STIMMY is ERC20, Ownable {
    // token
    string token_name   = "STIMMY";
    string token_symbol = "STIMMY";
    
    // supply
    uint supply_initial  = (100 * 10**12) * 10**decimals();
    uint supply_burn     = ( 99 * 10**12) * 10**decimals();
    uint supply_official = (  1 * 10**12) * 10**decimals();
    
    uint supply_lp       = (400 * 10**9)  * 10**decimals();
    
    uint supply_punks    = (100 * 10**9)  * 10**decimals();
    uint supply_apes     = (100 * 10**9)  * 10**decimals();
    uint supply_coolCats = (100 * 10**9)  * 10**decimals();
    uint supply_doodles  = (100 * 10**9)  * 10**decimals();
    uint supply_beasts   = (100 * 10**9)  * 10**decimals();
    
    uint supply_green    = (100 * 10**9)  * 10**decimals();
    
    // transactions
    uint256 txn_max      = ( 15 * 10**9)  * 10**decimals();
    
    // rewards
    uint reward_punks    = supply_punks    / 10000;
    uint reward_apes     = supply_apes     / 10000;
    uint reward_coolCats = supply_coolCats / 10000;
    uint reward_doodles  = supply_doodles  / 10000;
    uint reward_beasts   = supply_beasts   / 10000;
    
    uint reward_green    = supply_green    / 10000;
    
    // claimed
    uint claimed_official = 0;
    
    uint claimed_lp       = 0;
    
    uint claimed_punks    = 0;
    uint claimed_apes     = 0;
    uint claimed_coolCats = 0;
    uint claimed_doodles  = 0;
    uint claimed_beasts   = 0;
    
    uint claimed_green    = 0;
    
    mapping(uint256 => bool) public claimedByTokenId_punks;
    mapping(uint256 => bool) public claimedByTokenId_apes;
    mapping(uint256 => bool) public claimedByTokenId_coolCats;
    mapping(uint256 => bool) public claimedByTokenId_doodles;
    mapping(uint256 => bool) public claimedByTokenId_beasts;
    
    mapping(uint256 => bool) public claimedBySlotId_green;
    
    // contracts
    address contract_punks    = address(0xb47e3cd837dDF8e4c57F05d70Ab865de6e193BBB);
    address contract_apes     = address(0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D);
    address contract_coolCats = address(0x1A92f7381B9F03921564a437210bB9396471050C);
    address contract_doodles  = address(0x8a90CAb2b38dba80c64b7734e58Ee1dB38B8992e);
    address contract_beasts   = address(0xA74E199990FF572A320508547Ab7f44EA51e6F28);
    
    address address_uniswap   = address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    
    using ECDSA for bytes32;
    
    constructor() ERC20(token_name, token_symbol) {
        _mint(address(this), supply_initial);
        _burn(address(this), supply_burn);
        _safeTransfer_lp(supply_lp);
    }
    
    function claim_punks(uint[] memory nfts) public {
        address user = msg.sender;
        
        CryptoPunks _contract = CryptoPunks(contract_punks);
        
        uint owned = nfts.length;
        uint rewards = 0;
        for (uint256 i = 0; i < owned; ++i) {
            uint256 nft = nfts[i];
            
            if(_contract.punkIndexToAddress(nft) == user && !claimedByTokenId_punks[nft]){
                rewards++;
                claimedByTokenId_punks[nft] = true;
            }
            
        }
        _safeTransfer_punks(reward_punks * rewards);
    }
    
    function claim_apes() public {
        address user = msg.sender;
        
        IERC721Enumerable _contract = IERC721Enumerable(contract_apes);
        
        uint owned = _contract.balanceOf(user);
        uint rewards = 0;
        
        for (uint256 i = 0; i < owned; ++i) {
            uint nft = _contract.tokenOfOwnerByIndex(user, i);
            if(!claimedByTokenId_apes[nft]){
                rewards++;
                claimedByTokenId_apes[nft] = true;
            }
        }
        _safeTransfer_apes(reward_apes * rewards);
    }
    
    function claim_coolCats() public {
        address user = msg.sender;
        
        IERC721Enumerable _contract = IERC721Enumerable(contract_coolCats);
        
        uint owned = _contract.balanceOf(user);
        uint rewards = 0;
        
        for (uint256 i = 0; i < owned; ++i) {
            uint nft = _contract.tokenOfOwnerByIndex(user, i);
            if (!claimedByTokenId_coolCats[nft]){
                rewards++;
                claimedByTokenId_coolCats[nft] = true;
            }
            claimedByTokenId_coolCats[nft] = true;
        }
        _safeTransfer_coolCats(reward_coolCats * rewards);
    }
    
    function claim_doodles() public {
        address user = msg.sender;
        
        IERC721Enumerable _contract = IERC721Enumerable(contract_doodles);
        
        uint owned = _contract.balanceOf(user);
        uint rewards = 0;
        
        for (uint256 i = 0; i < owned; ++i) {
            uint nft = _contract.tokenOfOwnerByIndex(user, i);
            if (!claimedByTokenId_doodles[nft]){
                rewards++;
                claimedByTokenId_doodles[nft] = true;
            }
            
        }
        _safeTransfer_doodles(reward_doodles * rewards);
    }
    
    function claim_beasts() public {
        address user = msg.sender;
        
        IERC721Enumerable _contract = IERC721Enumerable(contract_beasts);
        
        uint owned = _contract.balanceOf(user);
        uint rewards = 0;
        
        for (uint256 i = 0; i < owned; ++i) {
            uint nft = _contract.tokenOfOwnerByIndex(user, i);
            if (!claimedByTokenId_beasts[nft]){
                rewards++;
                claimedByTokenId_beasts[nft] = true;   
            }
        }
        _safeTransfer_beasts(reward_beasts * rewards);
    }
    
    function claim_green(uint slotId, bytes memory sig) public {
        require(_verifySignature(slotId, sig), "Invalid signature.");
        require(slotId >= 0 && slotId <= 9999, "Invalid slot number.");
        require(!claimedBySlotId_green[slotId], "Slot already claimed.");
        claimedBySlotId_green[slotId] = true;
        
        _safeTransfer_green(reward_green);
    }
    
    function _expire_green() public onlyOwner {
        uint remaining_green = supply_green - claimed_green;
        _safeTransfer_green(remaining_green);
    }
    
    function _verifySignature(uint256 slotId, bytes memory sig) internal view returns (bool) {
        bytes32 message = keccak256(abi.encodePacked(slotId, msg.sender)).toHash();
        address signer = message.recover(sig);
        return signer == owner();
    }
    
    function claim_1() public{
        claim_apes();
        claim_coolCats();
        claim_doodles();
        claim_beasts();
    }
    
    function claim_2(uint[] memory punks) public{
        claim_punks(punks);
        claim_apes();
        claim_coolCats();
        claim_doodles();
        claim_beasts();
    }
    
    function claim_3(uint256 slotId, bytes memory sig) public{
        claim_apes();
        claim_coolCats();
        claim_doodles();
        claim_beasts();
        claim_green(slotId, sig);
    }
    
    function claim_4(uint[] memory punks, uint256 slotId, bytes memory sig) public{
        claim_punks(punks);
        claim_apes();
        claim_coolCats();
        claim_doodles();
        claim_beasts();
        claim_green(slotId, sig);
    }
    
    function _safeTransfer_punks(uint amount) internal {
        claimed_punks += amount;
        require(supply_punks >= claimed_punks, "CryptoPunks fund fully claimed.");
        
        _safeTransfer(amount);
    }
    
    function _safeTransfer_apes(uint amount) internal {
        claimed_apes += amount;
        require(supply_apes >= claimed_apes, "Apes fund fully claimed.");
        
        _safeTransfer(amount);
    }
    
    function _safeTransfer_coolCats(uint amount) internal {
        claimed_coolCats += amount;
        require(supply_coolCats >= claimed_coolCats, "Cool Cats fund fully claimed.");
        
        _safeTransfer(amount);
    }
    
    function _safeTransfer_doodles(uint amount) internal {
        claimed_doodles += amount;
        require(supply_doodles >= claimed_doodles, "Doodles fund fully claimed.");
        
        _safeTransfer(amount);
    }
    
    function _safeTransfer_beasts(uint amount) internal {
        claimed_beasts += amount;
        require(supply_beasts >= claimed_beasts, "CryptoBeasts fund fully claimed.");
        
        _safeTransfer(amount);
    }
    
    function _safeTransfer_green(uint amount) internal {
        claimed_green += amount;
        require(supply_green >= claimed_green, "Green fund fully claimed.");
        
        _safeTransfer(amount);
    }
    
    function _safeTransfer_lp(uint amount) internal {
        claimed_lp += amount;
        require(supply_lp >= claimed_lp, "LP fund fully claimed.");
        
        _safeTransfer(amount);
    }
    
    function _safeTransfer(uint amount) internal {
        claimed_official += amount;
        require(supply_official >= claimed_official, "Official fund fully claimed.");
        
        _transfer(address(this), msg.sender, amount);
    }
    
    function _beforeTokenTransfer(address from, address to, uint256 amount) internal override virtual {
        if(from != owner() && to != owner() && from != address(this) && to != address(this) && from != address_uniswap && to != address_uniswap)
            require(amount <= txn_max, "Transfer amount exceeds the maximum transaction amount.");
    }
    
    function _setTxnMax(uint _txn_max) public onlyOwner {
        txn_max = _txn_max;
    }

}

library ECDSA {
    function recover(bytes32 hash, bytes memory sig) internal pure returns (address) {
        uint8 v;
        bytes32 r;
        bytes32 s;

        assembly {
            r := mload(add(sig, 32))
            s := mload(add(sig, 64))
            v := byte(0, mload(add(sig, 96)))
        }

        return ecrecover(hash, v, r, s);
    }

    function toHash(bytes32 hash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }
}

interface CryptoPunks {
    function punkIndexToAddress(uint index) external view returns(address);
}

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":[],"name":"_expire_green","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txn_max","type":"uint256"}],"name":"_setTxnMax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim_1","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"punks","type":"uint256[]"}],"name":"claim_2","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"slotId","type":"uint256"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"claim_3","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"punks","type":"uint256[]"},{"internalType":"uint256","name":"slotId","type":"uint256"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"claim_4","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim_apes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim_beasts","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim_coolCats","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claim_doodles","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"slotId","type":"uint256"},{"internalType":"bytes","name":"sig","type":"bytes"}],"name":"claim_green","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"nfts","type":"uint256[]"}],"name":"claim_punks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimedBySlotId_green","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimedByTokenId_apes","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimedByTokenId_beasts","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimedByTokenId_coolCats","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimedByTokenId_doodles","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimedByTokenId_punks","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600681526020017f5354494d4d590000000000000000000000000000000000000000000000000000815250600690805190602001906200005192919062001145565b506040518060400160405280600681526020017f5354494d4d590000000000000000000000000000000000000000000000000000815250600790805190602001906200009f92919062001145565b50620000b06200074060201b60201c565b600a620000be9190620015b5565b655af3107a4000620000d19190620016f2565b600855620000e46200074060201b60201c565b600a620000f29190620015b5565b655a0a3bd53000620001059190620016f2565b600955620001186200074060201b60201c565b600a620001269190620015b5565b64e8d4a51000620001389190620016f2565b600a556200014b6200074060201b60201c565b600a620001599190620015b5565b645d21dba0006200016b9190620016f2565b600b556200017e6200074060201b60201c565b600a6200018c9190620015b5565b64174876e8006200019e9190620016f2565b600c55620001b16200074060201b60201c565b600a620001bf9190620015b5565b64174876e800620001d19190620016f2565b600d55620001e46200074060201b60201c565b600a620001f29190620015b5565b64174876e800620002049190620016f2565b600e55620002176200074060201b60201c565b600a620002259190620015b5565b64174876e800620002379190620016f2565b600f556200024a6200074060201b60201c565b600a620002589190620015b5565b64174876e8006200026a9190620016f2565b6010556200027d6200074060201b60201c565b600a6200028b9190620015b5565b64174876e8006200029d9190620016f2565b601155620002b06200074060201b60201c565b600a620002be9190620015b5565b64037e11d600620002d09190620016f2565b601255612710600c54620002e5919062001522565b601355612710600d54620002fa919062001522565b601455612710600e546200030f919062001522565b601555612710600f5462000324919062001522565b60165561271060105462000339919062001522565b6017556127106011546200034e919062001522565b60185560006019556000601a556000601b556000601c556000601d556000601e556000601f55600060205573b47e3cd837ddf8e4c57f05d70ab865de6e193bbb602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073bc4ca0eda7647a8ab7c2061c2e118a18a936f13d602860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550731a92f7381b9f03921564a437210bb9396471050c602960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550738a90cab2b38dba80c64b7734e58ee1db38b8992e602a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a74e199990ff572a320508547ab7f44ea51e6f28602b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d602c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200058457600080fd5b50600680546200059490620017a5565b80601f0160208091040260200160405190810160405280929190818152602001828054620005c290620017a5565b8015620006135780601f10620005e75761010080835404028352916020019162000613565b820191906000526020600020905b815481529060010190602001808311620005f557829003601f168201915b5050505050600780546200062790620017a5565b80601f01602080910402602001604051908101604052809291908181526020018280546200065590620017a5565b8015620006a65780601f106200067a57610100808354040283529160200191620006a6565b820191906000526020600020905b8154815290600101906020018083116200068857829003601f168201915b50505050508160039080519060200190620006c392919062001145565b508060049080519060200190620006dc92919062001145565b505050620006ff620006f36200074960201b60201c565b6200075160201b60201c565b62000713306008546200081760201b60201c565b62000727306009546200099060201b60201c565b6200073a600b5462000b8160201b60201c565b62001aca565b60006012905090565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200088a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008819062001475565b60405180910390fd5b6200089e6000838362000bfa60201b60201c565b8060026000828254620008b29190620014c5565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620009099190620014c5565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000970919062001497565b60405180910390a36200098c6000838362000dfd60201b60201c565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009fa9062001431565b60405180910390fd5b62000a178260008362000bfa60201b60201c565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101562000aa0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a979062001387565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825462000af9919062001753565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405162000b60919062001497565b60405180910390a362000b7c8360008462000dfd60201b60201c565b505050565b80601a600082825462000b959190620014c5565b92505081905550601a54600b54101562000be6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000bdd90620013a9565b60405180910390fd5b62000bf78162000e0260201b60201c565b50565b62000c0a62000e7d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801562000c81575062000c5162000e7d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801562000cba57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801562000cf357503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801562000d4e5750602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801562000da95750602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1562000df85760125481111562000df7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000dee90620013ed565b60405180910390fd5b5b505050565b505050565b806019600082825462000e169190620014c5565b92505081905550601954600a54101562000e67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e5e906200140f565b60405180910390fd5b62000e7a30338362000ea760201b60201c565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000f1a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f119062001453565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000f8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f849062001365565b60405180910390fd5b62000fa083838362000bfa60201b60201c565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101562001029576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200102090620013cb565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620010be9190620014c5565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405162001124919062001497565b60405180910390a36200113f84848462000dfd60201b60201c565b50505050565b8280546200115390620017a5565b90600052602060002090601f016020900481019282620011775760008555620011c3565b82601f106200119257805160ff1916838001178555620011c3565b82800160010185558215620011c3579182015b82811115620011c2578251825591602001919060010190620011a5565b5b509050620011d29190620011d6565b5090565b5b80821115620011f1576000816000905550600101620011d7565b5090565b600062001204602383620014b4565b9150620012118262001875565b604082019050919050565b60006200122b602283620014b4565b91506200123882620018c4565b604082019050919050565b600062001252601683620014b4565b91506200125f8262001913565b602082019050919050565b600062001279602683620014b4565b915062001286826200193c565b604082019050919050565b6000620012a0603783620014b4565b9150620012ad826200198b565b604082019050919050565b6000620012c7601c83620014b4565b9150620012d482620019da565b602082019050919050565b6000620012ee602183620014b4565b9150620012fb8262001a03565b604082019050919050565b600062001315602583620014b4565b9150620013228262001a52565b604082019050919050565b60006200133c601f83620014b4565b9150620013498262001aa1565b602082019050919050565b6200135f816200178e565b82525050565b600060208201905081810360008301526200138081620011f5565b9050919050565b60006020820190508181036000830152620013a2816200121c565b9050919050565b60006020820190508181036000830152620013c48162001243565b9050919050565b60006020820190508181036000830152620013e6816200126a565b9050919050565b60006020820190508181036000830152620014088162001291565b9050919050565b600060208201905081810360008301526200142a81620012b8565b9050919050565b600060208201905081810360008301526200144c81620012df565b9050919050565b600060208201905081810360008301526200146e8162001306565b9050919050565b6000602082019050818103600083015262001490816200132d565b9050919050565b6000602082019050620014ae600083018462001354565b92915050565b600082825260208201905092915050565b6000620014d2826200178e565b9150620014df836200178e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620015175762001516620017db565b5b828201905092915050565b60006200152f826200178e565b91506200153c836200178e565b9250826200154f576200154e6200180a565b5b828204905092915050565b6000808291508390505b6001851115620015ac57808604811115620015845762001583620017db565b5b6001851615620015945780820291505b8081029050620015a48562001868565b945062001564565b94509492505050565b6000620015c2826200178e565b9150620015cf8362001798565b9250620015fe7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462001606565b905092915050565b600082620016185760019050620016eb565b81620016285760009050620016eb565b81600181146200164157600281146200164c5762001682565b6001915050620016eb565b60ff841115620016615762001660620017db565b5b8360020a9150848211156200167b576200167a620017db565b5b50620016eb565b5060208310610133831016604e8410600b8410161715620016bc5782820a905083811115620016b657620016b5620017db565b5b620016eb565b620016cb84848460016200155a565b92509050818404811115620016e557620016e4620017db565b5b81810290505b9392505050565b6000620016ff826200178e565b91506200170c836200178e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620017485762001747620017db565b5b828202905092915050565b600062001760826200178e565b91506200176d836200178e565b925082821015620017835762001782620017db565b5b828203905092915050565b6000819050919050565b600060ff82169050919050565b60006002820490506001821680620017be57607f821691505b60208210811415620017d557620017d462001839565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4c502066756e642066756c6c7920636c61696d65642e00000000000000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61786960008201527f6d756d207472616e73616374696f6e20616d6f756e742e000000000000000000602082015250565b7f4f6666696369616c2066756e642066756c6c7920636c61696d65642e00000000600082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6139918062001ada6000396000f3fe608060405234801561001057600080fd5b50600436106101ef5760003560e01c80635b62ce431161010f57806395d89b41116100a2578063dd62ed3e11610071578063dd62ed3e1461056c578063dec2c54a1461059c578063dfed871b146105b8578063f2fde38b146105e8576101ef565b806395d89b41146104d2578063a457c2d7146104f0578063a9059cbb14610520578063db14a9be14610550576101ef565b806372c0ee37116100de57806372c0ee371461047057806377f65c1d1461047a5780638c1f6b21146104aa5780638da5cb5b146104b4576101ef565b80635b62ce43146103fc5780635b96f3411461042c57806370a0823114610436578063715018a614610466576101ef565b80632da64a5c1161018757806347f917441161015657806347f91744146103c25780634cfb47c0146103cc578063509974f0146103d657806355cf1853146103f2576101ef565b80632da64a5c14610314578063313ce5671461034457806334937679146103625780633950935114610392576101ef565b8063104eedad116101c3578063104eedad1461028e57806318160ddd146102aa57806319ece12a146102c857806323b872dd146102e4576101ef565b80629a4d73146101f4578063062aa6951461021057806306fdde0314610240578063095ea7b31461025e575b600080fd5b61020e60048036038101906102099190612849565b610604565b005b61022a60048036038101906102259190612849565b61068a565b6040516102379190612d3d565b60405180910390f35b6102486106aa565b6040516102559190612d9d565b60405180910390f35b61027860048036038101906102739190612735565b61073c565b6040516102859190612d3d565b60405180910390f35b6102a860048036038101906102a391906127be565b61075a565b005b6102b2610792565b6040516102bf919061303f565b60405180910390f35b6102e260048036038101906102dd9190612775565b61079c565b005b6102fe60048036038101906102f991906126e2565b61094a565b60405161030b9190612d3d565b60405180910390f35b61032e60048036038101906103299190612849565b610a42565b60405161033b9190612d3d565b60405180910390f35b61034c610a62565b604051610359919061305a565b60405180910390f35b61037c60048036038101906103779190612849565b610a6b565b6040516103899190612d3d565b60405180910390f35b6103ac60048036038101906103a79190612735565b610a8b565b6040516103b99190612d3d565b60405180910390f35b6103ca610b37565b005b6103d4610d1a565b005b6103f060048036038101906103eb91906128a3565b610f29565b005b6103fa611060565b005b61041660048036038101906104119190612849565b611243565b6040516104239190612d3d565b60405180910390f35b610434611263565b005b610450600480360381019061044b9190612648565b611446565b60405161045d919061303f565b60405180910390f35b61046e61148e565b005b610478611516565b005b610494600480360381019061048f9190612849565b611538565b6040516104a19190612d3d565b60405180910390f35b6104b2611558565b005b6104bc6115f4565b6040516104c99190612cf9565b60405180910390f35b6104da61161e565b6040516104e79190612d9d565b60405180910390f35b61050a60048036038101906105059190612735565b6116b0565b6040516105179190612d3d565b60405180910390f35b61053a60048036038101906105359190612735565b61179b565b6040516105479190612d3d565b60405180910390f35b61056a60048036038101906105659190612775565b6117b9565b005b610586600480360381019061058191906126a2565b6117e5565b604051610593919061303f565b60405180910390f35b6105b660048036038101906105b191906128a3565b61186c565b005b6105d260048036038101906105cd9190612849565b61189a565b6040516105df9190612d3d565b60405180910390f35b61060260048036038101906105fd9190612648565b6118ba565b005b61060c6119b2565b73ffffffffffffffffffffffffffffffffffffffff1661062a6115f4565b73ffffffffffffffffffffffffffffffffffffffff1614610680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790612f9f565b60405180910390fd5b8060128190555050565b60266020528060005260406000206000915054906101000a900460ff1681565b6060600380546106b9906132a3565b80601f01602080910402602001604051908101604052809291908181526020018280546106e5906132a3565b80156107325780601f1061070757610100808354040283529160200191610732565b820191906000526020600020905b81548152906001019060200180831161071557829003601f168201915b5050505050905090565b60006107506107496119b2565b84846119ba565b6001905092915050565b6107638361079c565b61076b611263565b610773610d1a565b61077b610b37565b610783611060565b61078d8282610f29565b505050565b6000600254905090565b60003390506000602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000835190506000805b8281101561092c5760008682815181106107ef576107ee6133e5565b5b602002602001015190508573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff166358178168836040518263ffffffff1660e01b8152600401610849919061303f565b60206040518083038186803b15801561086157600080fd5b505afa158015610875573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108999190612675565b73ffffffffffffffffffffffffffffffffffffffff161480156108da57506021600082815260200190815260200160002060009054906101000a900460ff16155b1561091a5782806108ea90613306565b93505060016021600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b508061092590613306565b90506107d2565b506109438160135461093e9190613174565b611b85565b5050505050565b6000610957848484611bf1565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109a26119b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1990612f7f565b60405180910390fd5b610a3685610a2e6119b2565b8584036119ba565b60019150509392505050565b60246020528060005260406000206000915054906101000a900460ff1681565b60006012905090565b60226020528060005260406000206000915054906101000a900460ff1681565b6000610b2d610a986119b2565b848460016000610aa66119b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b28919061311e565b6119ba565b6001905092915050565b60003390506000602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401610b9e9190612cf9565b60206040518083038186803b158015610bb657600080fd5b505afa158015610bca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bee9190612876565b90506000805b82811015610cfd5760008473ffffffffffffffffffffffffffffffffffffffff16632f745c5987846040518363ffffffff1660e01b8152600401610c39929190612d14565b60206040518083038186803b158015610c5157600080fd5b505afa158015610c65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c899190612876565b90506024600082815260200190815260200160002060009054906101000a900460ff16610ceb578280610cbb90613306565b93505060016024600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080610cf690613306565b9050610bf4565b50610d1481601654610d0f9190613174565b611e72565b50505050565b60003390506000602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401610d819190612cf9565b60206040518083038186803b158015610d9957600080fd5b505afa158015610dad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd19190612876565b90506000805b82811015610f0c5760008473ffffffffffffffffffffffffffffffffffffffff16632f745c5987846040518363ffffffff1660e01b8152600401610e1c929190612d14565b60206040518083038186803b158015610e3457600080fd5b505afa158015610e48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6c9190612876565b90506023600082815260200190815260200160002060009054906101000a900460ff16610ece578280610e9e90613306565b93505060016023600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60016023600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505080610f0590613306565b9050610dd7565b50610f2381601554610f1e9190613174565b611ede565b50505050565b610f338282611f4a565b610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6990612fff565b60405180910390fd5b60008210158015610f85575061270f8211155b610fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbb90612f1f565b60405180910390fd5b6026600083815260200190815260200160002060009054906101000a900460ff1615611025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101c90612e9f565b60405180910390fd5b60016026600084815260200190815260200160002060006101000a81548160ff02191690831515021790555061105c601854611fd7565b5050565b60003390506000602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016110c79190612cf9565b60206040518083038186803b1580156110df57600080fd5b505afa1580156110f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111179190612876565b90506000805b828110156112265760008473ffffffffffffffffffffffffffffffffffffffff16632f745c5987846040518363ffffffff1660e01b8152600401611162929190612d14565b60206040518083038186803b15801561117a57600080fd5b505afa15801561118e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b29190612876565b90506025600082815260200190815260200160002060009054906101000a900460ff166112145782806111e490613306565b93505060016025600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b508061121f90613306565b905061111d565b5061123d816017546112389190613174565b612043565b50505050565b60256020528060005260406000206000915054906101000a900460ff1681565b60003390506000602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016112ca9190612cf9565b60206040518083038186803b1580156112e257600080fd5b505afa1580156112f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131a9190612876565b90506000805b828110156114295760008473ffffffffffffffffffffffffffffffffffffffff16632f745c5987846040518363ffffffff1660e01b8152600401611365929190612d14565b60206040518083038186803b15801561137d57600080fd5b505afa158015611391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b59190612876565b90506022600082815260200190815260200160002060009054906101000a900460ff166114175782806113e790613306565b93505060016022600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b508061142290613306565b9050611320565b506114408160145461143b9190613174565b6120af565b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114966119b2565b73ffffffffffffffffffffffffffffffffffffffff166114b46115f4565b73ffffffffffffffffffffffffffffffffffffffff161461150a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150190612f9f565b60405180910390fd5b611514600061211b565b565b61151e611263565b611526610d1a565b61152e610b37565b611536611060565b565b60216020528060005260406000206000915054906101000a900460ff1681565b6115606119b2565b73ffffffffffffffffffffffffffffffffffffffff1661157e6115f4565b73ffffffffffffffffffffffffffffffffffffffff16146115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb90612f9f565b60405180910390fd5b60006020546011546115e691906131ce565b90506115f181611fd7565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461162d906132a3565b80601f0160208091040260200160405190810160405280929190818152602001828054611659906132a3565b80156116a65780601f1061167b576101008083540402835291602001916116a6565b820191906000526020600020905b81548152906001019060200180831161168957829003601f168201915b5050505050905090565b600080600160006116bf6119b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561177c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117739061301f565b60405180910390fd5b6117906117876119b2565b858584036119ba565b600191505092915050565b60006117af6117a86119b2565b8484611bf1565b6001905092915050565b6117c28161079c565b6117ca611263565b6117d2610d1a565b6117da610b37565b6117e2611060565b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611874611263565b61187c610d1a565b611884610b37565b61188c611060565b6118968282610f29565b5050565b60236020528060005260406000206000915054906101000a900460ff1681565b6118c26119b2565b73ffffffffffffffffffffffffffffffffffffffff166118e06115f4565b73ffffffffffffffffffffffffffffffffffffffff1614611936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192d90612f9f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199d90612e1f565b60405180910390fd5b6119af8161211b565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2190612fdf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9190612e3f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b78919061303f565b60405180910390a3505050565b80601b6000828254611b97919061311e565b92505081905550601b54600c541015611be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdc90612f3f565b60405180910390fd5b611bee816121e1565b50565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5890612fbf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc890612ddf565b60405180910390fd5b611cdc83838361224f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5990612e5f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611df5919061311e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e59919061303f565b60405180910390a3611e6c848484612439565b50505050565b80601e6000828254611e84919061311e565b92505081905550601e54600f541015611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec990612edf565b60405180910390fd5b611edb816121e1565b50565b80601d6000828254611ef0919061311e565b92505081905550601d54600e541015611f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3590612e7f565b60405180910390fd5b611f47816121e1565b50565b600080611f7e8433604051602001611f63929190612ccd565b6040516020818303038152906040528051906020012061243e565b90506000611f95848361246e90919063ffffffff16565b9050611f9f6115f4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16149250505092915050565b8060206000828254611fe9919061311e565b925050819055506020546011541015612037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202e90612ebf565b60405180910390fd5b612040816121e1565b50565b80601f6000828254612055919061311e565b92505081905550601f5460105410156120a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209a90612dbf565b60405180910390fd5b6120ac816121e1565b50565b80601c60008282546120c1919061311e565b92505081905550601c54600d54101561210f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210690612dff565b60405180910390fd5b612118816121e1565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008282546121f3919061311e565b92505081905550601954600a541015612241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223890612f5f565b60405180910390fd5b61224c303383611bf1565b50565b6122576115f4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156122c557506122956115f4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122fd57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561233557503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561238f5750602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156123e95750602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561243457601254811115612433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242a90612eff565b60405180910390fd5b5b505050565b505050565b6000816040516020016124519190612ca7565b604051602081830303815290604052805190602001209050919050565b6000806000806020850151915060408501519050606085015160001a9250600186848484604051600081526020016040526040516124af9493929190612d58565b6020604051602081039080840390855afa1580156124d1573d6000803e3d6000fd5b50505060206040510351935050505092915050565b60006124f96124f48461309a565b613075565b9050808382526020820190508285602086028201111561251c5761251b613448565b5b60005b8581101561254c5781612532888261261e565b84526020840193506020830192505060018101905061251f565b5050509392505050565b6000612569612564846130c6565b613075565b9050828152602081018484840111156125855761258461344d565b5b612590848285613261565b509392505050565b6000813590506125a78161392d565b92915050565b6000815190506125bc8161392d565b92915050565b600082601f8301126125d7576125d6613443565b5b81356125e78482602086016124e6565b91505092915050565b600082601f83011261260557612604613443565b5b8135612615848260208601612556565b91505092915050565b60008135905061262d81613944565b92915050565b60008151905061264281613944565b92915050565b60006020828403121561265e5761265d613457565b5b600061266c84828501612598565b91505092915050565b60006020828403121561268b5761268a613457565b5b6000612699848285016125ad565b91505092915050565b600080604083850312156126b9576126b8613457565b5b60006126c785828601612598565b92505060206126d885828601612598565b9150509250929050565b6000806000606084860312156126fb576126fa613457565b5b600061270986828701612598565b935050602061271a86828701612598565b925050604061272b8682870161261e565b9150509250925092565b6000806040838503121561274c5761274b613457565b5b600061275a85828601612598565b925050602061276b8582860161261e565b9150509250929050565b60006020828403121561278b5761278a613457565b5b600082013567ffffffffffffffff8111156127a9576127a8613452565b5b6127b5848285016125c2565b91505092915050565b6000806000606084860312156127d7576127d6613457565b5b600084013567ffffffffffffffff8111156127f5576127f4613452565b5b612801868287016125c2565b93505060206128128682870161261e565b925050604084013567ffffffffffffffff81111561283357612832613452565b5b61283f868287016125f0565b9150509250925092565b60006020828403121561285f5761285e613457565b5b600061286d8482850161261e565b91505092915050565b60006020828403121561288c5761288b613457565b5b600061289a84828501612633565b91505092915050565b600080604083850312156128ba576128b9613457565b5b60006128c88582860161261e565b925050602083013567ffffffffffffffff8111156128e9576128e8613452565b5b6128f5858286016125f0565b9150509250929050565b61290881613202565b82525050565b61291f61291a82613202565b61334f565b82525050565b61292e81613214565b82525050565b61293d81613220565b82525050565b61295461294f82613220565b613361565b82525050565b6000612965826130f7565b61296f8185613102565b935061297f818560208601613270565b6129888161345c565b840191505092915050565b60006129a0602083613102565b91506129ab8261347a565b602082019050919050565b60006129c3602383613102565b91506129ce826134a3565b604082019050919050565b60006129e6601883613102565b91506129f1826134f2565b602082019050919050565b6000612a09601c83613113565b9150612a148261351b565b601c82019050919050565b6000612a2c602683613102565b9150612a3782613544565b604082019050919050565b6000612a4f602283613102565b9150612a5a82613593565b604082019050919050565b6000612a72602683613102565b9150612a7d826135e2565b604082019050919050565b6000612a95601d83613102565b9150612aa082613631565b602082019050919050565b6000612ab8601583613102565b9150612ac38261365a565b602082019050919050565b6000612adb601983613102565b9150612ae682613683565b602082019050919050565b6000612afe601b83613102565b9150612b09826136ac565b602082019050919050565b6000612b21603783613102565b9150612b2c826136d5565b604082019050919050565b6000612b44601483613102565b9150612b4f82613724565b602082019050919050565b6000612b67601f83613102565b9150612b728261374d565b602082019050919050565b6000612b8a601c83613102565b9150612b9582613776565b602082019050919050565b6000612bad602883613102565b9150612bb88261379f565b604082019050919050565b6000612bd0602083613102565b9150612bdb826137ee565b602082019050919050565b6000612bf3602583613102565b9150612bfe82613817565b604082019050919050565b6000612c16602483613102565b9150612c2182613866565b604082019050919050565b6000612c39601283613102565b9150612c44826138b5565b602082019050919050565b6000612c5c602583613102565b9150612c67826138de565b604082019050919050565b612c7b8161324a565b82525050565b612c92612c8d8261324a565b61337d565b82525050565b612ca181613254565b82525050565b6000612cb2826129fc565b9150612cbe8284612943565b60208201915081905092915050565b6000612cd98285612c81565b602082019150612ce9828461290e565b6014820191508190509392505050565b6000602082019050612d0e60008301846128ff565b92915050565b6000604082019050612d2960008301856128ff565b612d366020830184612c72565b9392505050565b6000602082019050612d526000830184612925565b92915050565b6000608082019050612d6d6000830187612934565b612d7a6020830186612c98565b612d876040830185612934565b612d946060830184612934565b95945050505050565b60006020820190508181036000830152612db7818461295a565b905092915050565b60006020820190508181036000830152612dd881612993565b9050919050565b60006020820190508181036000830152612df8816129b6565b9050919050565b60006020820190508181036000830152612e18816129d9565b9050919050565b60006020820190508181036000830152612e3881612a1f565b9050919050565b60006020820190508181036000830152612e5881612a42565b9050919050565b60006020820190508181036000830152612e7881612a65565b9050919050565b60006020820190508181036000830152612e9881612a88565b9050919050565b60006020820190508181036000830152612eb881612aab565b9050919050565b60006020820190508181036000830152612ed881612ace565b9050919050565b60006020820190508181036000830152612ef881612af1565b9050919050565b60006020820190508181036000830152612f1881612b14565b9050919050565b60006020820190508181036000830152612f3881612b37565b9050919050565b60006020820190508181036000830152612f5881612b5a565b9050919050565b60006020820190508181036000830152612f7881612b7d565b9050919050565b60006020820190508181036000830152612f9881612ba0565b9050919050565b60006020820190508181036000830152612fb881612bc3565b9050919050565b60006020820190508181036000830152612fd881612be6565b9050919050565b60006020820190508181036000830152612ff881612c09565b9050919050565b6000602082019050818103600083015261301881612c2c565b9050919050565b6000602082019050818103600083015261303881612c4f565b9050919050565b60006020820190506130546000830184612c72565b92915050565b600060208201905061306f6000830184612c98565b92915050565b600061307f613090565b905061308b82826132d5565b919050565b6000604051905090565b600067ffffffffffffffff8211156130b5576130b4613414565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156130e1576130e0613414565b5b6130ea8261345c565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b60006131298261324a565b91506131348361324a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561316957613168613387565b5b828201905092915050565b600061317f8261324a565b915061318a8361324a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131c3576131c2613387565b5b828202905092915050565b60006131d98261324a565b91506131e48361324a565b9250828210156131f7576131f6613387565b5b828203905092915050565b600061320d8261322a565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561328e578082015181840152602081019050613273565b8381111561329d576000848401525b50505050565b600060028204905060018216806132bb57607f821691505b602082108114156132cf576132ce6133b6565b5b50919050565b6132de8261345c565b810181811067ffffffffffffffff821117156132fd576132fc613414565b5b80604052505050565b60006133118261324a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561334457613343613387565b5b600182019050919050565b600061335a8261336b565b9050919050565b6000819050919050565b60006133768261346d565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f43727970746f4265617374732066756e642066756c6c7920636c61696d65642e600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f417065732066756e642066756c6c7920636c61696d65642e0000000000000000600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f436f6f6c20436174732066756e642066756c6c7920636c61696d65642e000000600082015250565b7f536c6f7420616c726561647920636c61696d65642e0000000000000000000000600082015250565b7f477265656e2066756e642066756c6c7920636c61696d65642e00000000000000600082015250565b7f446f6f646c65732066756e642066756c6c7920636c61696d65642e0000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61786960008201527f6d756d207472616e73616374696f6e20616d6f756e742e000000000000000000602082015250565b7f496e76616c696420736c6f74206e756d6265722e000000000000000000000000600082015250565b7f43727970746f50756e6b732066756e642066756c6c7920636c61696d65642e00600082015250565b7f4f6666696369616c2066756e642066756c6c7920636c61696d65642e00000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964207369676e61747572652e0000000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b61393681613202565b811461394157600080fd5b50565b61394d8161324a565b811461395857600080fd5b5056fea2646970667358221220685b799451582a5aa693b6ce71147a45fa18dd3d1120a7c621ecd634c1f15d1c64736f6c63430008070033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101ef5760003560e01c80635b62ce431161010f57806395d89b41116100a2578063dd62ed3e11610071578063dd62ed3e1461056c578063dec2c54a1461059c578063dfed871b146105b8578063f2fde38b146105e8576101ef565b806395d89b41146104d2578063a457c2d7146104f0578063a9059cbb14610520578063db14a9be14610550576101ef565b806372c0ee37116100de57806372c0ee371461047057806377f65c1d1461047a5780638c1f6b21146104aa5780638da5cb5b146104b4576101ef565b80635b62ce43146103fc5780635b96f3411461042c57806370a0823114610436578063715018a614610466576101ef565b80632da64a5c1161018757806347f917441161015657806347f91744146103c25780634cfb47c0146103cc578063509974f0146103d657806355cf1853146103f2576101ef565b80632da64a5c14610314578063313ce5671461034457806334937679146103625780633950935114610392576101ef565b8063104eedad116101c3578063104eedad1461028e57806318160ddd146102aa57806319ece12a146102c857806323b872dd146102e4576101ef565b80629a4d73146101f4578063062aa6951461021057806306fdde0314610240578063095ea7b31461025e575b600080fd5b61020e60048036038101906102099190612849565b610604565b005b61022a60048036038101906102259190612849565b61068a565b6040516102379190612d3d565b60405180910390f35b6102486106aa565b6040516102559190612d9d565b60405180910390f35b61027860048036038101906102739190612735565b61073c565b6040516102859190612d3d565b60405180910390f35b6102a860048036038101906102a391906127be565b61075a565b005b6102b2610792565b6040516102bf919061303f565b60405180910390f35b6102e260048036038101906102dd9190612775565b61079c565b005b6102fe60048036038101906102f991906126e2565b61094a565b60405161030b9190612d3d565b60405180910390f35b61032e60048036038101906103299190612849565b610a42565b60405161033b9190612d3d565b60405180910390f35b61034c610a62565b604051610359919061305a565b60405180910390f35b61037c60048036038101906103779190612849565b610a6b565b6040516103899190612d3d565b60405180910390f35b6103ac60048036038101906103a79190612735565b610a8b565b6040516103b99190612d3d565b60405180910390f35b6103ca610b37565b005b6103d4610d1a565b005b6103f060048036038101906103eb91906128a3565b610f29565b005b6103fa611060565b005b61041660048036038101906104119190612849565b611243565b6040516104239190612d3d565b60405180910390f35b610434611263565b005b610450600480360381019061044b9190612648565b611446565b60405161045d919061303f565b60405180910390f35b61046e61148e565b005b610478611516565b005b610494600480360381019061048f9190612849565b611538565b6040516104a19190612d3d565b60405180910390f35b6104b2611558565b005b6104bc6115f4565b6040516104c99190612cf9565b60405180910390f35b6104da61161e565b6040516104e79190612d9d565b60405180910390f35b61050a60048036038101906105059190612735565b6116b0565b6040516105179190612d3d565b60405180910390f35b61053a60048036038101906105359190612735565b61179b565b6040516105479190612d3d565b60405180910390f35b61056a60048036038101906105659190612775565b6117b9565b005b610586600480360381019061058191906126a2565b6117e5565b604051610593919061303f565b60405180910390f35b6105b660048036038101906105b191906128a3565b61186c565b005b6105d260048036038101906105cd9190612849565b61189a565b6040516105df9190612d3d565b60405180910390f35b61060260048036038101906105fd9190612648565b6118ba565b005b61060c6119b2565b73ffffffffffffffffffffffffffffffffffffffff1661062a6115f4565b73ffffffffffffffffffffffffffffffffffffffff1614610680576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067790612f9f565b60405180910390fd5b8060128190555050565b60266020528060005260406000206000915054906101000a900460ff1681565b6060600380546106b9906132a3565b80601f01602080910402602001604051908101604052809291908181526020018280546106e5906132a3565b80156107325780601f1061070757610100808354040283529160200191610732565b820191906000526020600020905b81548152906001019060200180831161071557829003601f168201915b5050505050905090565b60006107506107496119b2565b84846119ba565b6001905092915050565b6107638361079c565b61076b611263565b610773610d1a565b61077b610b37565b610783611060565b61078d8282610f29565b505050565b6000600254905090565b60003390506000602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000835190506000805b8281101561092c5760008682815181106107ef576107ee6133e5565b5b602002602001015190508573ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff166358178168836040518263ffffffff1660e01b8152600401610849919061303f565b60206040518083038186803b15801561086157600080fd5b505afa158015610875573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108999190612675565b73ffffffffffffffffffffffffffffffffffffffff161480156108da57506021600082815260200190815260200160002060009054906101000a900460ff16155b1561091a5782806108ea90613306565b93505060016021600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b508061092590613306565b90506107d2565b506109438160135461093e9190613174565b611b85565b5050505050565b6000610957848484611bf1565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006109a26119b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1990612f7f565b60405180910390fd5b610a3685610a2e6119b2565b8584036119ba565b60019150509392505050565b60246020528060005260406000206000915054906101000a900460ff1681565b60006012905090565b60226020528060005260406000206000915054906101000a900460ff1681565b6000610b2d610a986119b2565b848460016000610aa66119b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610b28919061311e565b6119ba565b6001905092915050565b60003390506000602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401610b9e9190612cf9565b60206040518083038186803b158015610bb657600080fd5b505afa158015610bca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bee9190612876565b90506000805b82811015610cfd5760008473ffffffffffffffffffffffffffffffffffffffff16632f745c5987846040518363ffffffff1660e01b8152600401610c39929190612d14565b60206040518083038186803b158015610c5157600080fd5b505afa158015610c65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c899190612876565b90506024600082815260200190815260200160002060009054906101000a900460ff16610ceb578280610cbb90613306565b93505060016024600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b5080610cf690613306565b9050610bf4565b50610d1481601654610d0f9190613174565b611e72565b50505050565b60003390506000602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b8152600401610d819190612cf9565b60206040518083038186803b158015610d9957600080fd5b505afa158015610dad573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd19190612876565b90506000805b82811015610f0c5760008473ffffffffffffffffffffffffffffffffffffffff16632f745c5987846040518363ffffffff1660e01b8152600401610e1c929190612d14565b60206040518083038186803b158015610e3457600080fd5b505afa158015610e48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e6c9190612876565b90506023600082815260200190815260200160002060009054906101000a900460ff16610ece578280610e9e90613306565b93505060016023600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b60016023600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505080610f0590613306565b9050610dd7565b50610f2381601554610f1e9190613174565b611ede565b50505050565b610f338282611f4a565b610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6990612fff565b60405180910390fd5b60008210158015610f85575061270f8211155b610fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fbb90612f1f565b60405180910390fd5b6026600083815260200190815260200160002060009054906101000a900460ff1615611025576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101c90612e9f565b60405180910390fd5b60016026600084815260200190815260200160002060006101000a81548160ff02191690831515021790555061105c601854611fd7565b5050565b60003390506000602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016110c79190612cf9565b60206040518083038186803b1580156110df57600080fd5b505afa1580156110f3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111179190612876565b90506000805b828110156112265760008473ffffffffffffffffffffffffffffffffffffffff16632f745c5987846040518363ffffffff1660e01b8152600401611162929190612d14565b60206040518083038186803b15801561117a57600080fd5b505afa15801561118e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111b29190612876565b90506025600082815260200190815260200160002060009054906101000a900460ff166112145782806111e490613306565b93505060016025600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b508061121f90613306565b905061111d565b5061123d816017546112389190613174565b612043565b50505050565b60256020528060005260406000206000915054906101000a900460ff1681565b60003390506000602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016112ca9190612cf9565b60206040518083038186803b1580156112e257600080fd5b505afa1580156112f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131a9190612876565b90506000805b828110156114295760008473ffffffffffffffffffffffffffffffffffffffff16632f745c5987846040518363ffffffff1660e01b8152600401611365929190612d14565b60206040518083038186803b15801561137d57600080fd5b505afa158015611391573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113b59190612876565b90506022600082815260200190815260200160002060009054906101000a900460ff166114175782806113e790613306565b93505060016022600083815260200190815260200160002060006101000a81548160ff0219169083151502179055505b508061142290613306565b9050611320565b506114408160145461143b9190613174565b6120af565b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6114966119b2565b73ffffffffffffffffffffffffffffffffffffffff166114b46115f4565b73ffffffffffffffffffffffffffffffffffffffff161461150a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150190612f9f565b60405180910390fd5b611514600061211b565b565b61151e611263565b611526610d1a565b61152e610b37565b611536611060565b565b60216020528060005260406000206000915054906101000a900460ff1681565b6115606119b2565b73ffffffffffffffffffffffffffffffffffffffff1661157e6115f4565b73ffffffffffffffffffffffffffffffffffffffff16146115d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cb90612f9f565b60405180910390fd5b60006020546011546115e691906131ce565b90506115f181611fd7565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606004805461162d906132a3565b80601f0160208091040260200160405190810160405280929190818152602001828054611659906132a3565b80156116a65780601f1061167b576101008083540402835291602001916116a6565b820191906000526020600020905b81548152906001019060200180831161168957829003601f168201915b5050505050905090565b600080600160006116bf6119b2565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561177c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117739061301f565b60405180910390fd5b6117906117876119b2565b858584036119ba565b600191505092915050565b60006117af6117a86119b2565b8484611bf1565b6001905092915050565b6117c28161079c565b6117ca611263565b6117d2610d1a565b6117da610b37565b6117e2611060565b50565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611874611263565b61187c610d1a565b611884610b37565b61188c611060565b6118968282610f29565b5050565b60236020528060005260406000206000915054906101000a900460ff1681565b6118c26119b2565b73ffffffffffffffffffffffffffffffffffffffff166118e06115f4565b73ffffffffffffffffffffffffffffffffffffffff1614611936576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192d90612f9f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156119a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199d90612e1f565b60405180910390fd5b6119af8161211b565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2190612fdf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611a9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9190612e3f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611b78919061303f565b60405180910390a3505050565b80601b6000828254611b97919061311e565b92505081905550601b54600c541015611be5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bdc90612f3f565b60405180910390fd5b611bee816121e1565b50565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5890612fbf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc890612ddf565b60405180910390fd5b611cdc83838361224f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611d62576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5990612e5f565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611df5919061311e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611e59919061303f565b60405180910390a3611e6c848484612439565b50505050565b80601e6000828254611e84919061311e565b92505081905550601e54600f541015611ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ec990612edf565b60405180910390fd5b611edb816121e1565b50565b80601d6000828254611ef0919061311e565b92505081905550601d54600e541015611f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3590612e7f565b60405180910390fd5b611f47816121e1565b50565b600080611f7e8433604051602001611f63929190612ccd565b6040516020818303038152906040528051906020012061243e565b90506000611f95848361246e90919063ffffffff16565b9050611f9f6115f4565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16149250505092915050565b8060206000828254611fe9919061311e565b925050819055506020546011541015612037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202e90612ebf565b60405180910390fd5b612040816121e1565b50565b80601f6000828254612055919061311e565b92505081905550601f5460105410156120a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209a90612dbf565b60405180910390fd5b6120ac816121e1565b50565b80601c60008282546120c1919061311e565b92505081905550601c54600d54101561210f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210690612dff565b60405180910390fd5b612118816121e1565b50565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601960008282546121f3919061311e565b92505081905550601954600a541015612241576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223890612f5f565b60405180910390fd5b61224c303383611bf1565b50565b6122576115f4565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156122c557506122956115f4565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156122fd57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b801561233557503073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561238f5750602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156123e95750602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561243457601254811115612433576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242a90612eff565b60405180910390fd5b5b505050565b505050565b6000816040516020016124519190612ca7565b604051602081830303815290604052805190602001209050919050565b6000806000806020850151915060408501519050606085015160001a9250600186848484604051600081526020016040526040516124af9493929190612d58565b6020604051602081039080840390855afa1580156124d1573d6000803e3d6000fd5b50505060206040510351935050505092915050565b60006124f96124f48461309a565b613075565b9050808382526020820190508285602086028201111561251c5761251b613448565b5b60005b8581101561254c5781612532888261261e565b84526020840193506020830192505060018101905061251f565b5050509392505050565b6000612569612564846130c6565b613075565b9050828152602081018484840111156125855761258461344d565b5b612590848285613261565b509392505050565b6000813590506125a78161392d565b92915050565b6000815190506125bc8161392d565b92915050565b600082601f8301126125d7576125d6613443565b5b81356125e78482602086016124e6565b91505092915050565b600082601f83011261260557612604613443565b5b8135612615848260208601612556565b91505092915050565b60008135905061262d81613944565b92915050565b60008151905061264281613944565b92915050565b60006020828403121561265e5761265d613457565b5b600061266c84828501612598565b91505092915050565b60006020828403121561268b5761268a613457565b5b6000612699848285016125ad565b91505092915050565b600080604083850312156126b9576126b8613457565b5b60006126c785828601612598565b92505060206126d885828601612598565b9150509250929050565b6000806000606084860312156126fb576126fa613457565b5b600061270986828701612598565b935050602061271a86828701612598565b925050604061272b8682870161261e565b9150509250925092565b6000806040838503121561274c5761274b613457565b5b600061275a85828601612598565b925050602061276b8582860161261e565b9150509250929050565b60006020828403121561278b5761278a613457565b5b600082013567ffffffffffffffff8111156127a9576127a8613452565b5b6127b5848285016125c2565b91505092915050565b6000806000606084860312156127d7576127d6613457565b5b600084013567ffffffffffffffff8111156127f5576127f4613452565b5b612801868287016125c2565b93505060206128128682870161261e565b925050604084013567ffffffffffffffff81111561283357612832613452565b5b61283f868287016125f0565b9150509250925092565b60006020828403121561285f5761285e613457565b5b600061286d8482850161261e565b91505092915050565b60006020828403121561288c5761288b613457565b5b600061289a84828501612633565b91505092915050565b600080604083850312156128ba576128b9613457565b5b60006128c88582860161261e565b925050602083013567ffffffffffffffff8111156128e9576128e8613452565b5b6128f5858286016125f0565b9150509250929050565b61290881613202565b82525050565b61291f61291a82613202565b61334f565b82525050565b61292e81613214565b82525050565b61293d81613220565b82525050565b61295461294f82613220565b613361565b82525050565b6000612965826130f7565b61296f8185613102565b935061297f818560208601613270565b6129888161345c565b840191505092915050565b60006129a0602083613102565b91506129ab8261347a565b602082019050919050565b60006129c3602383613102565b91506129ce826134a3565b604082019050919050565b60006129e6601883613102565b91506129f1826134f2565b602082019050919050565b6000612a09601c83613113565b9150612a148261351b565b601c82019050919050565b6000612a2c602683613102565b9150612a3782613544565b604082019050919050565b6000612a4f602283613102565b9150612a5a82613593565b604082019050919050565b6000612a72602683613102565b9150612a7d826135e2565b604082019050919050565b6000612a95601d83613102565b9150612aa082613631565b602082019050919050565b6000612ab8601583613102565b9150612ac38261365a565b602082019050919050565b6000612adb601983613102565b9150612ae682613683565b602082019050919050565b6000612afe601b83613102565b9150612b09826136ac565b602082019050919050565b6000612b21603783613102565b9150612b2c826136d5565b604082019050919050565b6000612b44601483613102565b9150612b4f82613724565b602082019050919050565b6000612b67601f83613102565b9150612b728261374d565b602082019050919050565b6000612b8a601c83613102565b9150612b9582613776565b602082019050919050565b6000612bad602883613102565b9150612bb88261379f565b604082019050919050565b6000612bd0602083613102565b9150612bdb826137ee565b602082019050919050565b6000612bf3602583613102565b9150612bfe82613817565b604082019050919050565b6000612c16602483613102565b9150612c2182613866565b604082019050919050565b6000612c39601283613102565b9150612c44826138b5565b602082019050919050565b6000612c5c602583613102565b9150612c67826138de565b604082019050919050565b612c7b8161324a565b82525050565b612c92612c8d8261324a565b61337d565b82525050565b612ca181613254565b82525050565b6000612cb2826129fc565b9150612cbe8284612943565b60208201915081905092915050565b6000612cd98285612c81565b602082019150612ce9828461290e565b6014820191508190509392505050565b6000602082019050612d0e60008301846128ff565b92915050565b6000604082019050612d2960008301856128ff565b612d366020830184612c72565b9392505050565b6000602082019050612d526000830184612925565b92915050565b6000608082019050612d6d6000830187612934565b612d7a6020830186612c98565b612d876040830185612934565b612d946060830184612934565b95945050505050565b60006020820190508181036000830152612db7818461295a565b905092915050565b60006020820190508181036000830152612dd881612993565b9050919050565b60006020820190508181036000830152612df8816129b6565b9050919050565b60006020820190508181036000830152612e18816129d9565b9050919050565b60006020820190508181036000830152612e3881612a1f565b9050919050565b60006020820190508181036000830152612e5881612a42565b9050919050565b60006020820190508181036000830152612e7881612a65565b9050919050565b60006020820190508181036000830152612e9881612a88565b9050919050565b60006020820190508181036000830152612eb881612aab565b9050919050565b60006020820190508181036000830152612ed881612ace565b9050919050565b60006020820190508181036000830152612ef881612af1565b9050919050565b60006020820190508181036000830152612f1881612b14565b9050919050565b60006020820190508181036000830152612f3881612b37565b9050919050565b60006020820190508181036000830152612f5881612b5a565b9050919050565b60006020820190508181036000830152612f7881612b7d565b9050919050565b60006020820190508181036000830152612f9881612ba0565b9050919050565b60006020820190508181036000830152612fb881612bc3565b9050919050565b60006020820190508181036000830152612fd881612be6565b9050919050565b60006020820190508181036000830152612ff881612c09565b9050919050565b6000602082019050818103600083015261301881612c2c565b9050919050565b6000602082019050818103600083015261303881612c4f565b9050919050565b60006020820190506130546000830184612c72565b92915050565b600060208201905061306f6000830184612c98565b92915050565b600061307f613090565b905061308b82826132d5565b919050565b6000604051905090565b600067ffffffffffffffff8211156130b5576130b4613414565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156130e1576130e0613414565b5b6130ea8261345c565b9050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b60006131298261324a565b91506131348361324a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561316957613168613387565b5b828201905092915050565b600061317f8261324a565b915061318a8361324a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156131c3576131c2613387565b5b828202905092915050565b60006131d98261324a565b91506131e48361324a565b9250828210156131f7576131f6613387565b5b828203905092915050565b600061320d8261322a565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b82818337600083830152505050565b60005b8381101561328e578082015181840152602081019050613273565b8381111561329d576000848401525b50505050565b600060028204905060018216806132bb57607f821691505b602082108114156132cf576132ce6133b6565b5b50919050565b6132de8261345c565b810181811067ffffffffffffffff821117156132fd576132fc613414565b5b80604052505050565b60006133118261324a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561334457613343613387565b5b600182019050919050565b600061335a8261336b565b9050919050565b6000819050919050565b60006133768261346d565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f43727970746f4265617374732066756e642066756c6c7920636c61696d65642e600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f417065732066756e642066756c6c7920636c61696d65642e0000000000000000600082015250565b7f19457468657265756d205369676e6564204d6573736167653a0a333200000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f436f6f6c20436174732066756e642066756c6c7920636c61696d65642e000000600082015250565b7f536c6f7420616c726561647920636c61696d65642e0000000000000000000000600082015250565b7f477265656e2066756e642066756c6c7920636c61696d65642e00000000000000600082015250565b7f446f6f646c65732066756e642066756c6c7920636c61696d65642e0000000000600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61786960008201527f6d756d207472616e73616374696f6e20616d6f756e742e000000000000000000602082015250565b7f496e76616c696420736c6f74206e756d6265722e000000000000000000000000600082015250565b7f43727970746f50756e6b732066756e642066756c6c7920636c61696d65642e00600082015250565b7f4f6666696369616c2066756e642066756c6c7920636c61696d65642e00000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f496e76616c6964207369676e61747572652e0000000000000000000000000000600082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b61393681613202565b811461394157600080fd5b50565b61394d8161324a565b811461395857600080fd5b5056fea2646970667358221220685b799451582a5aa693b6ce71147a45fa18dd3d1120a7c621ecd634c1f15d1c64736f6c63430008070033

Deployed Bytecode Sourcemap

26358:9700:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35964:89;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28188:53;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7379:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9546:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33485:251;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8499:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29031:600;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10197:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28057:56;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8341:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27933:53;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11098:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30878:600;;;:::i;:::-;;30222:644;;;:::i;:::-;;32085:387;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31490:583;;;:::i;:::-;;28120:55;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29643:567;;;:::i;:::-;;8670:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25648:94;;;:::i;:::-;;32932:134;;;:::i;:::-;;27872:54;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32484:159;;;:::i;:::-;;24997:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7598:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11816:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9010:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33078:182;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9248:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33272:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27993:57;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25897:192;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35964:89;25228:12;:10;:12::i;:::-;25217:23;;:7;:5;:7::i;:::-;:23;;;25209:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36037:8:::1;36027:7;:18;;;;35964:89:::0;:::o;28188:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;7379:100::-;7433:13;7466:5;7459:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7379:100;:::o;9546:169::-;9629:4;9646:39;9655:12;:10;:12::i;:::-;9669:7;9678:6;9646:8;:39::i;:::-;9703:4;9696:11;;9546:169;;;;:::o;33485:251::-;33574:18;33586:5;33574:11;:18::i;:::-;33603:12;:10;:12::i;:::-;33626:16;:14;:16::i;:::-;33653:15;:13;:15::i;:::-;33679:14;:12;:14::i;:::-;33704:24;33716:6;33724:3;33704:11;:24::i;:::-;33485:251;;;:::o;8499:108::-;8560:7;8587:12;;8580:19;;8499:108;:::o;29031:600::-;29090:12;29105:10;29090:25;;29136:21;29172:14;;;;;;;;;;;29136:51;;29208:10;29221:4;:11;29208:24;;29243:12;29275:9;29270:300;29294:5;29290:1;:9;29270:300;;;29321:11;29335:4;29340:1;29335:7;;;;;;;;:::i;:::-;;;;;;;;29321:21;;29411:4;29374:41;;:9;:28;;;29403:3;29374:33;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:41;;;:73;;;;;29420:22;:27;29443:3;29420:27;;;;;;;;;;;;;;;;;;;;;29419:28;29374:73;29371:174;;;29467:9;;;;;:::i;:::-;;;;29525:4;29495:22;:27;29518:3;29495:27;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;29371:174;29306:264;29301:3;;;;:::i;:::-;;;29270:300;;;;29580:43;29615:7;29600:12;;:22;;;;:::i;:::-;29580:19;:43::i;:::-;29079:552;;;;29031:600;:::o;10197:492::-;10337:4;10354:36;10364:6;10372:9;10383:6;10354:9;:36::i;:::-;10403:24;10430:11;:19;10442:6;10430:19;;;;;;;;;;;;;;;:33;10450:12;:10;:12::i;:::-;10430:33;;;;;;;;;;;;;;;;10403:60;;10502:6;10482:16;:26;;10474:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;10589:57;10598:6;10606:12;:10;:12::i;:::-;10639:6;10620:16;:25;10589:8;:57::i;:::-;10677:4;10670:11;;;10197:492;;;;;:::o;28057:56::-;;;;;;;;;;;;;;;;;;;;;;:::o;8341:93::-;8399:5;8424:2;8417:9;;8341:93;:::o;27933:53::-;;;;;;;;;;;;;;;;;;;;;;:::o;11098:215::-;11186:4;11203:80;11212:12;:10;:12::i;:::-;11226:7;11272:10;11235:11;:25;11247:12;:10;:12::i;:::-;11235:25;;;;;;;;;;;;;;;:34;11261:7;11235:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;11203:8;:80::i;:::-;11301:4;11294:11;;11098:215;;;;:::o;30878:600::-;30921:12;30936:10;30921:25;;30967:27;31015:16;;;;;;;;;;;30967:65;;31053:10;31066:9;:19;;;31086:4;31066:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31053:38;;31102:12;31144:9;31139:274;31163:5;31159:1;:9;31139:274;;;31190:8;31201:9;:29;;;31231:4;31237:1;31201:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31190:49;;31259:24;:29;31284:3;31259:29;;;;;;;;;;;;;;;;;;;;;31254:134;;31308:9;;;;;:::i;:::-;;;;31368:4;31336:24;:29;31361:3;31336:29;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;31254:134;31175:238;31170:3;;;;:::i;:::-;;;31139:274;;;;31423:47;31462:7;31445:14;;:24;;;;:::i;:::-;31423:21;:47::i;:::-;30910:568;;;;30878:600::o;30222:644::-;30266:12;30281:10;30266:25;;30312:27;30360:17;;;;;;;;;;;30312:66;;30399:10;30412:9;:19;;;30432:4;30412:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30399:38;;30448:12;30490:9;30485:314;30509:5;30505:1;:9;30485:314;;;30536:8;30547:9;:29;;;30577:4;30583:1;30547:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30536:49;;30605:25;:30;30631:3;30605:30;;;;;;;;;;;;;;;;;;;;;30600:136;;30655:9;;;;;:::i;:::-;;;;30716:4;30683:25;:30;30709:3;30683:30;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;30600:136;30783:4;30750:25;:30;30776:3;30750:30;;;;;;;;;;;;:37;;;;;;;;;;;;;;;;;;30521:278;30516:3;;;;:::i;:::-;;;30485:314;;;;30809:49;30850:7;30832:15;;:25;;;;:::i;:::-;30809:22;:49::i;:::-;30255:611;;;;30222:644::o;32085:387::-;32163:29;32180:6;32188:3;32163:16;:29::i;:::-;32155:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;32244:1;32234:6;:11;;:29;;;;;32259:4;32249:6;:14;;32234:29;32226:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32308:21;:29;32330:6;32308:29;;;;;;;;;;;;;;;;;;;;;32307:30;32299:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32406:4;32374:21;:29;32396:6;32374:29;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;32431:33;32451:12;;32431:19;:33::i;:::-;32085:387;;:::o;31490:583::-;31532:12;31547:10;31532:25;;31578:27;31626:15;;;;;;;;;;;31578:64;;31663:10;31676:9;:19;;;31696:4;31676:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31663:38;;31712:12;31754:9;31749:261;31773:5;31769:1;:9;31749:261;;;31800:8;31811:9;:29;;;31841:4;31847:1;31811:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31800:49;;31869:23;:28;31893:3;31869:28;;;;;;;;;;;;;;;;;;;;;31864:135;;31917:9;;;;;:::i;:::-;;;;31976:4;31945:23;:28;31969:3;31945:28;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;31864:135;31785:225;31780:3;;;;:::i;:::-;;;31749:261;;;;32020:45;32057:7;32041:13;;:23;;;;:::i;:::-;32020:20;:45::i;:::-;31521:552;;;;31490:583::o;28120:55::-;;;;;;;;;;;;;;;;;;;;;;:::o;29643:567::-;29683:12;29698:10;29683:25;;29729:27;29777:13;;;;;;;;;;;29729:62;;29812:10;29825:9;:19;;;29845:4;29825:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29812:38;;29861:12;29903:9;29898:253;29922:5;29918:1;:9;29898:253;;;29949:8;29960:9;:29;;;29990:4;29996:1;29960:38;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29949:49;;30017:21;:26;30039:3;30017:26;;;;;;;;;;;;;;;;;;;;;30013:127;;30063:9;;;;;:::i;:::-;;;;30120:4;30091:21;:26;30113:3;30091:26;;;;;;;;;;;;:33;;;;;;;;;;;;;;;;;;30013:127;29934:217;29929:3;;;;:::i;:::-;;;29898:253;;;;30161:41;30194:7;30180:11;;:21;;;;:::i;:::-;30161:18;:41::i;:::-;29672:538;;;;29643:567::o;8670:127::-;8744:7;8771:9;:18;8781:7;8771:18;;;;;;;;;;;;;;;;8764:25;;8670:127;;;:::o;25648:94::-;25228:12;:10;:12::i;:::-;25217:23;;:7;:5;:7::i;:::-;:23;;;25209:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25713:21:::1;25731:1;25713:9;:21::i;:::-;25648:94::o:0;32932:134::-;32968:12;:10;:12::i;:::-;32991:16;:14;:16::i;:::-;33018:15;:13;:15::i;:::-;33044:14;:12;:14::i;:::-;32932:134::o;27872:54::-;;;;;;;;;;;;;;;;;;;;;;:::o;32484:159::-;25228:12;:10;:12::i;:::-;25217:23;;:7;:5;:7::i;:::-;:23;;;25209:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32537:20:::1;32575:13;;32560:12;;:28;;;;:::i;:::-;32537:51;;32599:36;32619:15;32599:19;:36::i;:::-;32526:117;32484:159::o:0;24997:87::-;25043:7;25070:6;;;;;;;;;;;25063:13;;24997:87;:::o;7598:104::-;7654:13;7687:7;7680:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7598:104;:::o;11816:413::-;11909:4;11926:24;11953:11;:25;11965:12;:10;:12::i;:::-;11953:25;;;;;;;;;;;;;;;:34;11979:7;11953:34;;;;;;;;;;;;;;;;11926:61;;12026:15;12006:16;:35;;11998:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;12119:67;12128:12;:10;:12::i;:::-;12142:7;12170:15;12151:16;:34;12119:8;:67::i;:::-;12217:4;12210:11;;;11816:413;;;;:::o;9010:175::-;9096:4;9113:42;9123:12;:10;:12::i;:::-;9137:9;9148:6;9113:9;:42::i;:::-;9173:4;9166:11;;9010:175;;;;:::o;33078:182::-;33133:18;33145:5;33133:11;:18::i;:::-;33162:12;:10;:12::i;:::-;33185:16;:14;:16::i;:::-;33212:15;:13;:15::i;:::-;33238:14;:12;:14::i;:::-;33078:182;:::o;9248:151::-;9337:7;9364:11;:18;9376:5;9364:18;;;;;;;;;;;;;;;:27;9383:7;9364:27;;;;;;;;;;;;;;;;9357:34;;9248:151;;;;:::o;33272:201::-;33340:12;:10;:12::i;:::-;33363:16;:14;:16::i;:::-;33390:15;:13;:15::i;:::-;33416:14;:12;:14::i;:::-;33441:24;33453:6;33461:3;33441:11;:24::i;:::-;33272:201;;:::o;27993:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;25897:192::-;25228:12;:10;:12::i;:::-;25217:23;;:7;:5;:7::i;:::-;:23;;;25209:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26006:1:::1;25986:22;;:8;:22;;;;25978:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26062:19;26072:8;26062:9;:19::i;:::-;25897:192:::0;:::o;5088:98::-;5141:7;5168:10;5161:17;;5088:98;:::o;15500:380::-;15653:1;15636:19;;:5;:19;;;;15628:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15734:1;15715:21;;:7;:21;;;;15707:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15818:6;15788:11;:18;15800:5;15788:18;;;;;;;;;;;;;;;:27;15807:7;15788:27;;;;;;;;;;;;;;;:36;;;;15856:7;15840:32;;15849:5;15840:32;;;15865:6;15840:32;;;;;;:::i;:::-;;;;;;;;15500:380;;;:::o;33748:219::-;33827:6;33810:13;;:23;;;;;;;:::i;:::-;;;;;;;;33868:13;;33852:12;;:29;;33844:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33938:21;33952:6;33938:13;:21::i;:::-;33748:219;:::o;12719:733::-;12877:1;12859:20;;:6;:20;;;;12851:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12961:1;12940:23;;:9;:23;;;;12932:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13016:47;13037:6;13045:9;13056:6;13016:20;:47::i;:::-;13076:21;13100:9;:17;13110:6;13100:17;;;;;;;;;;;;;;;;13076:41;;13153:6;13136:13;:23;;13128:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;13274:6;13258:13;:22;13238:9;:17;13248:6;13238:17;;;;;;;;;;;;;;;:42;;;;13326:6;13302:9;:20;13312:9;13302:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;13367:9;13350:35;;13359:6;13350:35;;;13378:6;13350:35;;;;;;:::i;:::-;;;;;;;;13398:46;13418:6;13426:9;13437:6;13398:19;:46::i;:::-;12840:612;12719:733;;;:::o;34440:223::-;34523:6;34504:15;;:25;;;;;;;:::i;:::-;;;;;;;;34566:15;;34548:14;;:33;;34540:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34634:21;34648:6;34634:13;:21::i;:::-;34440:223;:::o;34199:229::-;34284:6;34264:16;;:26;;;;;;;:::i;:::-;;;;;;;;34328:16;;34309:15;;:35;;34301:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;34399:21;34413:6;34399:13;:21::i;:::-;34199:229;:::o;32655:265::-;32738:4;32755:15;32773:56;32800:6;32808:10;32783:36;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32773:47;;;;;;:54;:56::i;:::-;32755:74;;32840:14;32857:20;32873:3;32857:7;:15;;:20;;;;:::i;:::-;32840:37;;32905:7;:5;:7::i;:::-;32895:17;;:6;:17;;;32888:24;;;;32655:265;;;;:::o;34911:213::-;34990:6;34973:13;;:23;;;;;;;:::i;:::-;;;;;;;;35031:13;;35015:12;;:29;;35007:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35095:21;35109:6;35095:13;:21::i;:::-;34911:213;:::o;34675:224::-;34756:6;34738:14;;:24;;;;;;;:::i;:::-;;;;;;;;34798:14;;34781:13;;:31;;34773:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;34870:21;34884:6;34870:13;:21::i;:::-;34675:224;:::o;33979:208::-;34056:6;34040:12;;:22;;;;;;;:::i;:::-;;;;;;;;34096:12;;34081:11;;:27;;34073:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;34158:21;34172:6;34158:13;:21::i;:::-;33979:208;:::o;26097:173::-;26153:16;26172:6;;;;;;;;;;;26153:25;;26198:8;26189:6;;:17;;;;;;;;;;;;;;;;;;26253:8;26222:40;;26243:8;26222:40;;;;;;;;;;;;26142:128;26097:173;:::o;35346:242::-;35422:6;35402:16;;:26;;;;;;;:::i;:::-;;;;;;;;35466:16;;35447:15;;:35;;35439:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;35536:44;35554:4;35561:10;35573:6;35536:9;:44::i;:::-;35346:242;:::o;35600:352::-;35720:7;:5;:7::i;:::-;35712:15;;:4;:15;;;;:32;;;;;35737:7;:5;:7::i;:::-;35731:13;;:2;:13;;;;35712:32;:57;;;;;35764:4;35748:21;;:4;:21;;;;35712:57;:80;;;;;35787:4;35773:19;;:2;:19;;;;35712:80;:107;;;;;35804:15;;;;;;;;;;;35796:23;;:4;:23;;;;35712:107;:132;;;;;35829:15;;;;;;;;;;;35823:21;;:2;:21;;;;35712:132;35709:235;;;35877:7;;35867:6;:17;;35859:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;35709:235;35600:352;;;:::o;17209:124::-;;;;:::o;36438:157::-;36491:7;36581:4;36528:58;;;;;;;;:::i;:::-;;;;;;;;;;;;;36518:69;;;;;;36511:76;;36438:157;;;:::o;36083:347::-;36155:7;36175;36193:9;36213;36279:2;36274:3;36270:12;36264:19;36259:24;;36317:2;36312:3;36308:12;36302:19;36297:24;;36363:2;36358:3;36354:12;36348:19;36345:1;36340:28;36335:33;;36398:24;36408:4;36414:1;36417;36420;36398:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36391:31;;;;;36083:347;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:139::-;1214:5;1252:6;1239:20;1230:29;;1268:33;1295:5;1268:33;:::i;:::-;1168:139;;;;:::o;1313:143::-;1370:5;1401:6;1395:13;1386:22;;1417:33;1444:5;1417:33;:::i;:::-;1313:143;;;;:::o;1479:370::-;1550:5;1599:3;1592:4;1584:6;1580:17;1576:27;1566:122;;1607:79;;:::i;:::-;1566:122;1724:6;1711:20;1749:94;1839:3;1831:6;1824:4;1816:6;1812:17;1749:94;:::i;:::-;1740:103;;1556:293;1479:370;;;;:::o;1868:338::-;1923:5;1972:3;1965:4;1957:6;1953:17;1949:27;1939:122;;1980:79;;:::i;:::-;1939:122;2097:6;2084:20;2122:78;2196:3;2188:6;2181:4;2173:6;2169:17;2122:78;:::i;:::-;2113:87;;1929:277;1868:338;;;;:::o;2212:139::-;2258:5;2296:6;2283:20;2274:29;;2312:33;2339:5;2312:33;:::i;:::-;2212:139;;;;:::o;2357:143::-;2414:5;2445:6;2439:13;2430:22;;2461:33;2488:5;2461:33;:::i;:::-;2357:143;;;;:::o;2506:329::-;2565:6;2614:2;2602:9;2593:7;2589:23;2585:32;2582:119;;;2620:79;;:::i;:::-;2582:119;2740:1;2765:53;2810:7;2801:6;2790:9;2786:22;2765:53;:::i;:::-;2755:63;;2711:117;2506:329;;;;:::o;2841:351::-;2911:6;2960:2;2948:9;2939:7;2935:23;2931:32;2928:119;;;2966:79;;:::i;:::-;2928:119;3086:1;3111:64;3167:7;3158:6;3147:9;3143:22;3111:64;:::i;:::-;3101:74;;3057:128;2841:351;;;;:::o;3198:474::-;3266:6;3274;3323:2;3311:9;3302:7;3298:23;3294:32;3291:119;;;3329:79;;:::i;:::-;3291:119;3449:1;3474:53;3519:7;3510:6;3499:9;3495:22;3474:53;:::i;:::-;3464:63;;3420:117;3576:2;3602:53;3647:7;3638:6;3627:9;3623:22;3602:53;:::i;:::-;3592:63;;3547:118;3198:474;;;;;:::o;3678:619::-;3755:6;3763;3771;3820:2;3808:9;3799:7;3795:23;3791:32;3788:119;;;3826:79;;:::i;:::-;3788:119;3946:1;3971:53;4016:7;4007:6;3996:9;3992:22;3971:53;:::i;:::-;3961:63;;3917:117;4073:2;4099:53;4144:7;4135:6;4124:9;4120:22;4099:53;:::i;:::-;4089:63;;4044:118;4201:2;4227:53;4272:7;4263:6;4252:9;4248:22;4227:53;:::i;:::-;4217:63;;4172:118;3678:619;;;;;:::o;4303:474::-;4371:6;4379;4428:2;4416:9;4407:7;4403:23;4399:32;4396:119;;;4434:79;;:::i;:::-;4396:119;4554:1;4579:53;4624:7;4615:6;4604:9;4600:22;4579:53;:::i;:::-;4569:63;;4525:117;4681:2;4707:53;4752:7;4743:6;4732:9;4728:22;4707:53;:::i;:::-;4697:63;;4652:118;4303:474;;;;;:::o;4783:539::-;4867:6;4916:2;4904:9;4895:7;4891:23;4887:32;4884:119;;;4922:79;;:::i;:::-;4884:119;5070:1;5059:9;5055:17;5042:31;5100:18;5092:6;5089:30;5086:117;;;5122:79;;:::i;:::-;5086:117;5227:78;5297:7;5288:6;5277:9;5273:22;5227:78;:::i;:::-;5217:88;;5013:302;4783:539;;;;:::o;5328:1007::-;5439:6;5447;5455;5504:2;5492:9;5483:7;5479:23;5475:32;5472:119;;;5510:79;;:::i;:::-;5472:119;5658:1;5647:9;5643:17;5630:31;5688:18;5680:6;5677:30;5674:117;;;5710:79;;:::i;:::-;5674:117;5815:78;5885:7;5876:6;5865:9;5861:22;5815:78;:::i;:::-;5805:88;;5601:302;5942:2;5968:53;6013:7;6004:6;5993:9;5989:22;5968:53;:::i;:::-;5958:63;;5913:118;6098:2;6087:9;6083:18;6070:32;6129:18;6121:6;6118:30;6115:117;;;6151:79;;:::i;:::-;6115:117;6256:62;6310:7;6301:6;6290:9;6286:22;6256:62;:::i;:::-;6246:72;;6041:287;5328:1007;;;;;:::o;6341:329::-;6400:6;6449:2;6437:9;6428:7;6424:23;6420:32;6417:119;;;6455:79;;:::i;:::-;6417:119;6575:1;6600:53;6645:7;6636:6;6625:9;6621:22;6600:53;:::i;:::-;6590:63;;6546:117;6341:329;;;;:::o;6676:351::-;6746:6;6795:2;6783:9;6774:7;6770:23;6766:32;6763:119;;;6801:79;;:::i;:::-;6763:119;6921:1;6946:64;7002:7;6993:6;6982:9;6978:22;6946:64;:::i;:::-;6936:74;;6892:128;6676:351;;;;:::o;7033:652::-;7110:6;7118;7167:2;7155:9;7146:7;7142:23;7138:32;7135:119;;;7173:79;;:::i;:::-;7135:119;7293:1;7318:53;7363:7;7354:6;7343:9;7339:22;7318:53;:::i;:::-;7308:63;;7264:117;7448:2;7437:9;7433:18;7420:32;7479:18;7471:6;7468:30;7465:117;;;7501:79;;:::i;:::-;7465:117;7606:62;7660:7;7651:6;7640:9;7636:22;7606:62;:::i;:::-;7596:72;;7391:287;7033:652;;;;;:::o;7691:118::-;7778:24;7796:5;7778:24;:::i;:::-;7773:3;7766:37;7691:118;;:::o;7815:157::-;7920:45;7940:24;7958:5;7940:24;:::i;:::-;7920:45;:::i;:::-;7915:3;7908:58;7815:157;;:::o;7978:109::-;8059:21;8074:5;8059:21;:::i;:::-;8054:3;8047:34;7978:109;;:::o;8093:118::-;8180:24;8198:5;8180:24;:::i;:::-;8175:3;8168:37;8093:118;;:::o;8217:157::-;8322:45;8342:24;8360:5;8342:24;:::i;:::-;8322:45;:::i;:::-;8317:3;8310:58;8217:157;;:::o;8380:364::-;8468:3;8496:39;8529:5;8496:39;:::i;:::-;8551:71;8615:6;8610:3;8551:71;:::i;:::-;8544:78;;8631:52;8676:6;8671:3;8664:4;8657:5;8653:16;8631:52;:::i;:::-;8708:29;8730:6;8708:29;:::i;:::-;8703:3;8699:39;8692:46;;8472:272;8380:364;;;;:::o;8750:366::-;8892:3;8913:67;8977:2;8972:3;8913:67;:::i;:::-;8906:74;;8989:93;9078:3;8989:93;:::i;:::-;9107:2;9102:3;9098:12;9091:19;;8750:366;;;:::o;9122:::-;9264:3;9285:67;9349:2;9344:3;9285:67;:::i;:::-;9278:74;;9361:93;9450:3;9361:93;:::i;:::-;9479:2;9474:3;9470:12;9463:19;;9122:366;;;:::o;9494:::-;9636:3;9657:67;9721:2;9716:3;9657:67;:::i;:::-;9650:74;;9733:93;9822:3;9733:93;:::i;:::-;9851:2;9846:3;9842:12;9835:19;;9494:366;;;:::o;9866:402::-;10026:3;10047:85;10129:2;10124:3;10047:85;:::i;:::-;10040:92;;10141:93;10230:3;10141:93;:::i;:::-;10259:2;10254:3;10250:12;10243:19;;9866:402;;;:::o;10274:366::-;10416:3;10437:67;10501:2;10496:3;10437:67;:::i;:::-;10430:74;;10513:93;10602:3;10513:93;:::i;:::-;10631:2;10626:3;10622:12;10615:19;;10274:366;;;:::o;10646:::-;10788:3;10809:67;10873:2;10868:3;10809:67;:::i;:::-;10802:74;;10885:93;10974:3;10885:93;:::i;:::-;11003:2;10998:3;10994:12;10987:19;;10646:366;;;:::o;11018:::-;11160:3;11181:67;11245:2;11240:3;11181:67;:::i;:::-;11174:74;;11257:93;11346:3;11257:93;:::i;:::-;11375:2;11370:3;11366:12;11359:19;;11018:366;;;:::o;11390:::-;11532:3;11553:67;11617:2;11612:3;11553:67;:::i;:::-;11546:74;;11629:93;11718:3;11629:93;:::i;:::-;11747:2;11742:3;11738:12;11731:19;;11390:366;;;:::o;11762:::-;11904:3;11925:67;11989:2;11984:3;11925:67;:::i;:::-;11918:74;;12001:93;12090:3;12001:93;:::i;:::-;12119:2;12114:3;12110:12;12103:19;;11762:366;;;:::o;12134:::-;12276:3;12297:67;12361:2;12356:3;12297:67;:::i;:::-;12290:74;;12373:93;12462:3;12373:93;:::i;:::-;12491:2;12486:3;12482:12;12475:19;;12134:366;;;:::o;12506:::-;12648:3;12669:67;12733:2;12728:3;12669:67;:::i;:::-;12662:74;;12745:93;12834:3;12745:93;:::i;:::-;12863:2;12858:3;12854:12;12847:19;;12506:366;;;:::o;12878:::-;13020:3;13041:67;13105:2;13100:3;13041:67;:::i;:::-;13034:74;;13117:93;13206:3;13117:93;:::i;:::-;13235:2;13230:3;13226:12;13219:19;;12878:366;;;:::o;13250:::-;13392:3;13413:67;13477:2;13472:3;13413:67;:::i;:::-;13406:74;;13489:93;13578:3;13489:93;:::i;:::-;13607:2;13602:3;13598:12;13591:19;;13250:366;;;:::o;13622:::-;13764:3;13785:67;13849:2;13844:3;13785:67;:::i;:::-;13778:74;;13861:93;13950:3;13861:93;:::i;:::-;13979:2;13974:3;13970:12;13963:19;;13622:366;;;:::o;13994:::-;14136:3;14157:67;14221:2;14216:3;14157:67;:::i;:::-;14150:74;;14233:93;14322:3;14233:93;:::i;:::-;14351:2;14346:3;14342:12;14335:19;;13994:366;;;:::o;14366:::-;14508:3;14529:67;14593:2;14588:3;14529:67;:::i;:::-;14522:74;;14605:93;14694:3;14605:93;:::i;:::-;14723:2;14718:3;14714:12;14707:19;;14366:366;;;:::o;14738:::-;14880:3;14901:67;14965:2;14960:3;14901:67;:::i;:::-;14894:74;;14977:93;15066:3;14977:93;:::i;:::-;15095:2;15090:3;15086:12;15079:19;;14738:366;;;:::o;15110:::-;15252:3;15273:67;15337:2;15332:3;15273:67;:::i;:::-;15266:74;;15349:93;15438:3;15349:93;:::i;:::-;15467:2;15462:3;15458:12;15451:19;;15110:366;;;:::o;15482:::-;15624:3;15645:67;15709:2;15704:3;15645:67;:::i;:::-;15638:74;;15721:93;15810:3;15721:93;:::i;:::-;15839:2;15834:3;15830:12;15823:19;;15482:366;;;:::o;15854:::-;15996:3;16017:67;16081:2;16076:3;16017:67;:::i;:::-;16010:74;;16093:93;16182:3;16093:93;:::i;:::-;16211:2;16206:3;16202:12;16195:19;;15854:366;;;:::o;16226:::-;16368:3;16389:67;16453:2;16448:3;16389:67;:::i;:::-;16382:74;;16465:93;16554:3;16465:93;:::i;:::-;16583:2;16578:3;16574:12;16567:19;;16226:366;;;:::o;16598:118::-;16685:24;16703:5;16685:24;:::i;:::-;16680:3;16673:37;16598:118;;:::o;16722:157::-;16827:45;16847:24;16865:5;16847:24;:::i;:::-;16827:45;:::i;:::-;16822:3;16815:58;16722:157;;:::o;16885:112::-;16968:22;16984:5;16968:22;:::i;:::-;16963:3;16956:35;16885:112;;:::o;17003:522::-;17216:3;17238:148;17382:3;17238:148;:::i;:::-;17231:155;;17396:75;17467:3;17458:6;17396:75;:::i;:::-;17496:2;17491:3;17487:12;17480:19;;17516:3;17509:10;;17003:522;;;;:::o;17531:397::-;17671:3;17686:75;17757:3;17748:6;17686:75;:::i;:::-;17786:2;17781:3;17777:12;17770:19;;17799:75;17870:3;17861:6;17799:75;:::i;:::-;17899:2;17894:3;17890:12;17883:19;;17919:3;17912:10;;17531:397;;;;;:::o;17934:222::-;18027:4;18065:2;18054:9;18050:18;18042:26;;18078:71;18146:1;18135:9;18131:17;18122:6;18078:71;:::i;:::-;17934:222;;;;:::o;18162:332::-;18283:4;18321:2;18310:9;18306:18;18298:26;;18334:71;18402:1;18391:9;18387:17;18378:6;18334:71;:::i;:::-;18415:72;18483:2;18472:9;18468:18;18459:6;18415:72;:::i;:::-;18162:332;;;;;:::o;18500:210::-;18587:4;18625:2;18614:9;18610:18;18602:26;;18638:65;18700:1;18689:9;18685:17;18676:6;18638:65;:::i;:::-;18500:210;;;;:::o;18716:545::-;18889:4;18927:3;18916:9;18912:19;18904:27;;18941:71;19009:1;18998:9;18994:17;18985:6;18941:71;:::i;:::-;19022:68;19086:2;19075:9;19071:18;19062:6;19022:68;:::i;:::-;19100:72;19168:2;19157:9;19153:18;19144:6;19100:72;:::i;:::-;19182;19250:2;19239:9;19235:18;19226:6;19182:72;:::i;:::-;18716:545;;;;;;;:::o;19267:313::-;19380:4;19418:2;19407:9;19403:18;19395:26;;19467:9;19461:4;19457:20;19453:1;19442:9;19438:17;19431:47;19495:78;19568:4;19559:6;19495:78;:::i;:::-;19487:86;;19267:313;;;;:::o;19586:419::-;19752:4;19790:2;19779:9;19775:18;19767:26;;19839:9;19833:4;19829:20;19825:1;19814:9;19810:17;19803:47;19867:131;19993:4;19867:131;:::i;:::-;19859:139;;19586:419;;;:::o;20011:::-;20177:4;20215:2;20204:9;20200:18;20192:26;;20264:9;20258:4;20254:20;20250:1;20239:9;20235:17;20228:47;20292:131;20418:4;20292:131;:::i;:::-;20284:139;;20011:419;;;:::o;20436:::-;20602:4;20640:2;20629:9;20625:18;20617:26;;20689:9;20683:4;20679:20;20675:1;20664:9;20660:17;20653:47;20717:131;20843:4;20717:131;:::i;:::-;20709:139;;20436:419;;;:::o;20861:::-;21027:4;21065:2;21054:9;21050:18;21042:26;;21114:9;21108:4;21104:20;21100:1;21089:9;21085:17;21078:47;21142:131;21268:4;21142:131;:::i;:::-;21134:139;;20861:419;;;:::o;21286:::-;21452:4;21490:2;21479:9;21475:18;21467:26;;21539:9;21533:4;21529:20;21525:1;21514:9;21510:17;21503:47;21567:131;21693:4;21567:131;:::i;:::-;21559:139;;21286:419;;;:::o;21711:::-;21877:4;21915:2;21904:9;21900:18;21892:26;;21964:9;21958:4;21954:20;21950:1;21939:9;21935:17;21928:47;21992:131;22118:4;21992:131;:::i;:::-;21984:139;;21711:419;;;:::o;22136:::-;22302:4;22340:2;22329:9;22325:18;22317:26;;22389:9;22383:4;22379:20;22375:1;22364:9;22360:17;22353:47;22417:131;22543:4;22417:131;:::i;:::-;22409:139;;22136:419;;;:::o;22561:::-;22727:4;22765:2;22754:9;22750:18;22742:26;;22814:9;22808:4;22804:20;22800:1;22789:9;22785:17;22778:47;22842:131;22968:4;22842:131;:::i;:::-;22834:139;;22561:419;;;:::o;22986:::-;23152:4;23190:2;23179:9;23175:18;23167:26;;23239:9;23233:4;23229:20;23225:1;23214:9;23210:17;23203:47;23267:131;23393:4;23267:131;:::i;:::-;23259:139;;22986:419;;;:::o;23411:::-;23577:4;23615:2;23604:9;23600:18;23592:26;;23664:9;23658:4;23654:20;23650:1;23639:9;23635:17;23628:47;23692:131;23818:4;23692:131;:::i;:::-;23684:139;;23411:419;;;:::o;23836:::-;24002:4;24040:2;24029:9;24025:18;24017:26;;24089:9;24083:4;24079:20;24075:1;24064:9;24060:17;24053:47;24117:131;24243:4;24117:131;:::i;:::-;24109:139;;23836:419;;;:::o;24261:::-;24427:4;24465:2;24454:9;24450:18;24442:26;;24514:9;24508:4;24504:20;24500:1;24489:9;24485:17;24478:47;24542:131;24668:4;24542:131;:::i;:::-;24534:139;;24261:419;;;:::o;24686:::-;24852:4;24890:2;24879:9;24875:18;24867:26;;24939:9;24933:4;24929:20;24925:1;24914:9;24910:17;24903:47;24967:131;25093:4;24967:131;:::i;:::-;24959:139;;24686:419;;;:::o;25111:::-;25277:4;25315:2;25304:9;25300:18;25292:26;;25364:9;25358:4;25354:20;25350:1;25339:9;25335:17;25328:47;25392:131;25518:4;25392:131;:::i;:::-;25384:139;;25111:419;;;:::o;25536:::-;25702:4;25740:2;25729:9;25725:18;25717:26;;25789:9;25783:4;25779:20;25775:1;25764:9;25760:17;25753:47;25817:131;25943:4;25817:131;:::i;:::-;25809:139;;25536:419;;;:::o;25961:::-;26127:4;26165:2;26154:9;26150:18;26142:26;;26214:9;26208:4;26204:20;26200:1;26189:9;26185:17;26178:47;26242:131;26368:4;26242:131;:::i;:::-;26234:139;;25961:419;;;:::o;26386:::-;26552:4;26590:2;26579:9;26575:18;26567:26;;26639:9;26633:4;26629:20;26625:1;26614:9;26610:17;26603:47;26667:131;26793:4;26667:131;:::i;:::-;26659:139;;26386:419;;;:::o;26811:::-;26977:4;27015:2;27004:9;27000:18;26992:26;;27064:9;27058:4;27054:20;27050:1;27039:9;27035:17;27028:47;27092:131;27218:4;27092:131;:::i;:::-;27084:139;;26811:419;;;:::o;27236:::-;27402:4;27440:2;27429:9;27425:18;27417:26;;27489:9;27483:4;27479:20;27475:1;27464:9;27460:17;27453:47;27517:131;27643:4;27517:131;:::i;:::-;27509:139;;27236:419;;;:::o;27661:::-;27827:4;27865:2;27854:9;27850:18;27842:26;;27914:9;27908:4;27904:20;27900:1;27889:9;27885:17;27878:47;27942:131;28068:4;27942:131;:::i;:::-;27934:139;;27661:419;;;:::o;28086:222::-;28179:4;28217:2;28206:9;28202:18;28194:26;;28230:71;28298:1;28287:9;28283:17;28274:6;28230:71;:::i;:::-;28086:222;;;;:::o;28314:214::-;28403:4;28441:2;28430:9;28426:18;28418:26;;28454:67;28518:1;28507:9;28503:17;28494:6;28454:67;:::i;:::-;28314:214;;;;:::o;28534:129::-;28568:6;28595:20;;:::i;:::-;28585:30;;28624:33;28652:4;28644:6;28624:33;:::i;:::-;28534:129;;;:::o;28669:75::-;28702:6;28735:2;28729:9;28719:19;;28669:75;:::o;28750:311::-;28827:4;28917:18;28909:6;28906:30;28903:56;;;28939:18;;:::i;:::-;28903:56;28989:4;28981:6;28977:17;28969:25;;29049:4;29043;29039:15;29031:23;;28750:311;;;:::o;29067:307::-;29128:4;29218:18;29210:6;29207:30;29204:56;;;29240:18;;:::i;:::-;29204:56;29278:29;29300:6;29278:29;:::i;:::-;29270:37;;29362:4;29356;29352:15;29344:23;;29067:307;;;:::o;29380:99::-;29432:6;29466:5;29460:12;29450:22;;29380:99;;;:::o;29485:169::-;29569:11;29603:6;29598:3;29591:19;29643:4;29638:3;29634:14;29619:29;;29485:169;;;;:::o;29660:148::-;29762:11;29799:3;29784:18;;29660:148;;;;:::o;29814:305::-;29854:3;29873:20;29891:1;29873:20;:::i;:::-;29868:25;;29907:20;29925:1;29907:20;:::i;:::-;29902:25;;30061:1;29993:66;29989:74;29986:1;29983:81;29980:107;;;30067:18;;:::i;:::-;29980:107;30111:1;30108;30104:9;30097:16;;29814:305;;;;:::o;30125:348::-;30165:7;30188:20;30206:1;30188:20;:::i;:::-;30183:25;;30222:20;30240:1;30222:20;:::i;:::-;30217:25;;30410:1;30342:66;30338:74;30335:1;30332:81;30327:1;30320:9;30313:17;30309:105;30306:131;;;30417:18;;:::i;:::-;30306:131;30465:1;30462;30458:9;30447:20;;30125:348;;;;:::o;30479:191::-;30519:4;30539:20;30557:1;30539:20;:::i;:::-;30534:25;;30573:20;30591:1;30573:20;:::i;:::-;30568:25;;30612:1;30609;30606:8;30603:34;;;30617:18;;:::i;:::-;30603:34;30662:1;30659;30655:9;30647:17;;30479:191;;;;:::o;30676:96::-;30713:7;30742:24;30760:5;30742:24;:::i;:::-;30731:35;;30676:96;;;:::o;30778:90::-;30812:7;30855:5;30848:13;30841:21;30830:32;;30778:90;;;:::o;30874:77::-;30911:7;30940:5;30929:16;;30874:77;;;:::o;30957:126::-;30994:7;31034:42;31027:5;31023:54;31012:65;;30957:126;;;:::o;31089:77::-;31126:7;31155:5;31144:16;;31089:77;;;:::o;31172:86::-;31207:7;31247:4;31240:5;31236:16;31225:27;;31172:86;;;:::o;31264:154::-;31348:6;31343:3;31338;31325:30;31410:1;31401:6;31396:3;31392:16;31385:27;31264:154;;;:::o;31424:307::-;31492:1;31502:113;31516:6;31513:1;31510:13;31502:113;;;31601:1;31596:3;31592:11;31586:18;31582:1;31577:3;31573:11;31566:39;31538:2;31535:1;31531:10;31526:15;;31502:113;;;31633:6;31630:1;31627:13;31624:101;;;31713:1;31704:6;31699:3;31695:16;31688:27;31624:101;31473:258;31424:307;;;:::o;31737:320::-;31781:6;31818:1;31812:4;31808:12;31798:22;;31865:1;31859:4;31855:12;31886:18;31876:81;;31942:4;31934:6;31930:17;31920:27;;31876:81;32004:2;31996:6;31993:14;31973:18;31970:38;31967:84;;;32023:18;;:::i;:::-;31967:84;31788:269;31737:320;;;:::o;32063:281::-;32146:27;32168:4;32146:27;:::i;:::-;32138:6;32134:40;32276:6;32264:10;32261:22;32240:18;32228:10;32225:34;32222:62;32219:88;;;32287:18;;:::i;:::-;32219:88;32327:10;32323:2;32316:22;32106:238;32063:281;;:::o;32350:233::-;32389:3;32412:24;32430:5;32412:24;:::i;:::-;32403:33;;32458:66;32451:5;32448:77;32445:103;;;32528:18;;:::i;:::-;32445:103;32575:1;32568:5;32564:13;32557:20;;32350:233;;;:::o;32589:100::-;32628:7;32657:26;32677:5;32657:26;:::i;:::-;32646:37;;32589:100;;;:::o;32695:79::-;32734:7;32763:5;32752:16;;32695:79;;;:::o;32780:94::-;32819:7;32848:20;32862:5;32848:20;:::i;:::-;32837:31;;32780:94;;;:::o;32880:79::-;32919:7;32948:5;32937:16;;32880:79;;;:::o;32965:180::-;33013:77;33010:1;33003:88;33110:4;33107:1;33100:15;33134:4;33131:1;33124:15;33151:180;33199:77;33196:1;33189:88;33296:4;33293:1;33286:15;33320:4;33317:1;33310:15;33337:180;33385:77;33382:1;33375:88;33482:4;33479:1;33472:15;33506:4;33503:1;33496:15;33523:180;33571:77;33568:1;33561:88;33668:4;33665:1;33658:15;33692:4;33689:1;33682:15;33709:117;33818:1;33815;33808:12;33832:117;33941:1;33938;33931:12;33955:117;34064:1;34061;34054:12;34078:117;34187:1;34184;34177:12;34201:117;34310:1;34307;34300:12;34324:102;34365:6;34416:2;34412:7;34407:2;34400:5;34396:14;34392:28;34382:38;;34324:102;;;:::o;34432:94::-;34465:8;34513:5;34509:2;34505:14;34484:35;;34432:94;;;:::o;34532:182::-;34672:34;34668:1;34660:6;34656:14;34649:58;34532:182;:::o;34720:222::-;34860:34;34856:1;34848:6;34844:14;34837:58;34929:5;34924:2;34916:6;34912:15;34905:30;34720:222;:::o;34948:174::-;35088:26;35084:1;35076:6;35072:14;35065:50;34948:174;:::o;35128:214::-;35268:66;35264:1;35256:6;35252:14;35245:90;35128:214;:::o;35348:225::-;35488:34;35484:1;35476:6;35472:14;35465:58;35557:8;35552:2;35544:6;35540:15;35533:33;35348:225;:::o;35579:221::-;35719:34;35715:1;35707:6;35703:14;35696:58;35788:4;35783:2;35775:6;35771:15;35764:29;35579:221;:::o;35806:225::-;35946:34;35942:1;35934:6;35930:14;35923:58;36015:8;36010:2;36002:6;35998:15;35991:33;35806:225;:::o;36037:179::-;36177:31;36173:1;36165:6;36161:14;36154:55;36037:179;:::o;36222:171::-;36362:23;36358:1;36350:6;36346:14;36339:47;36222:171;:::o;36399:175::-;36539:27;36535:1;36527:6;36523:14;36516:51;36399:175;:::o;36580:177::-;36720:29;36716:1;36708:6;36704:14;36697:53;36580:177;:::o;36763:242::-;36903:34;36899:1;36891:6;36887:14;36880:58;36972:25;36967:2;36959:6;36955:15;36948:50;36763:242;:::o;37011:170::-;37151:22;37147:1;37139:6;37135:14;37128:46;37011:170;:::o;37187:181::-;37327:33;37323:1;37315:6;37311:14;37304:57;37187:181;:::o;37374:178::-;37514:30;37510:1;37502:6;37498:14;37491:54;37374:178;:::o;37558:227::-;37698:34;37694:1;37686:6;37682:14;37675:58;37767:10;37762:2;37754:6;37750:15;37743:35;37558:227;:::o;37791:182::-;37931:34;37927:1;37919:6;37915:14;37908:58;37791:182;:::o;37979:224::-;38119:34;38115:1;38107:6;38103:14;38096:58;38188:7;38183:2;38175:6;38171:15;38164:32;37979:224;:::o;38209:223::-;38349:34;38345:1;38337:6;38333:14;38326:58;38418:6;38413:2;38405:6;38401:15;38394:31;38209:223;:::o;38438:168::-;38578:20;38574:1;38566:6;38562:14;38555:44;38438:168;:::o;38612:224::-;38752:34;38748:1;38740:6;38736:14;38729:58;38821:7;38816:2;38808:6;38804:15;38797:32;38612:224;:::o;38842:122::-;38915:24;38933:5;38915:24;:::i;:::-;38908:5;38905:35;38895:63;;38954:1;38951;38944:12;38895:63;38842:122;:::o;38970:::-;39043:24;39061:5;39043:24;:::i;:::-;39036:5;39033:35;39023:63;;39082:1;39079;39072:12;39023:63;38970:122;:::o

Swarm Source

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