ETH Price: $2,517.86 (+2.60%)
Gas: 0.57 Gwei

Token

Ownix (ONX)
 

Overview

Max Total Supply

999,999,150.792035136227691828 ONX

Holders

5,606 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
100.492828512656084351 ONX

Value
$0.00
0x8e5b84348e39d43b509cba7c30dde8003e68082d
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

A digital auction house for exclusive NFT's. A new dimension of moments in history and art at all forms.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
OwnixToken

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-20
*/

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

// 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/IERC20Metadata.sol



pragma solidity ^0.8.0;


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

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

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

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



pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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



pragma solidity ^0.8.0;




/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of 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 defaut 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");
        _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");
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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");
        _balances[sender] = senderBalance - amount;
        _balances[recipient] += amount;

        emit Transfer(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:
     *
     * - `to` 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);
    }

    /**
     * @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");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;

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

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

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

    /**
     * @dev 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 to 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 { }
}

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



pragma solidity ^0.8.0;



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        uint256 currentAllowance = allowance(account, _msgSender());
        require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance");
        _approve(account, _msgSender(), currentAllowance - amount);
        _burn(account, amount);
    }
}

// File: @openzeppelin/contracts/token/ERC20/extensions/draft-IERC20Permit.sol



pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
 * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
 *
 * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
 * presenting a message signed by the account. By not relying on {IERC20-approve}, the token holder account doesn't
 * need to send a transaction, and thus is not required to hold Ether at all.
 */
interface IERC20Permit {
    /**
     * @dev Sets `value` as the allowance of `spender` over ``owner``'s tokens,
     * given ``owner``'s signed approval.
     *
     * IMPORTANT: The same issues {IERC20-approve} has related to transaction
     * ordering also apply here.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `deadline` must be a timestamp in the future.
     * - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner`
     * over the EIP712-formatted function arguments.
     * - the signature must use ``owner``'s current nonce (see {nonces}).
     *
     * For more information on the signature format, see the
     * https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP
     * section].
     */
    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;

    /**
     * @dev Returns the current nonce for `owner`. This value must be
     * included whenever a signature is generated for {permit}.
     *
     * Every successful call to {permit} increases ``owner``'s nonce by one. This
     * prevents a signature from being used multiple times.
     */
    function nonces(address owner) external view returns (uint256);

    /**
     * @dev Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view returns (bytes32);
}

// File: @openzeppelin/contracts/utils/cryptography/ECDSA.sol



pragma solidity ^0.8.0;

/**
 * @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
 *
 * These functions can be used to verify that a message was signed by the holder
 * of the private keys of a given address.
 */
library ECDSA {
    /**
     * @dev Returns the address that signed a hashed message (`hash`) with
     * `signature`. This address can then be used for verification purposes.
     *
     * The `ecrecover` EVM opcode allows for malleable (non-unique) signatures:
     * this function rejects them by requiring the `s` value to be in the lower
     * half order, and the `v` value to be either 27 or 28.
     *
     * IMPORTANT: `hash` _must_ be the result of a hash operation for the
     * verification to be secure: it is possible to craft signatures that
     * recover to arbitrary addresses for non-hashed data. A safe way to ensure
     * this is by receiving a hash of the original message (which may otherwise
     * be too long), and then calling {toEthSignedMessageHash} on it.
     */
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        // Divide the signature in r, s and v variables
        bytes32 r;
        bytes32 s;
        uint8 v;

        // Check the signature length
        // - case 65: r,s,v signature (standard)
        // - case 64: r,vs signature (cf https://eips.ethereum.org/EIPS/eip-2098) _Available since v4.1._
        if (signature.length == 65) {
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            // solhint-disable-next-line no-inline-assembly
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
        } else if (signature.length == 64) {
            // ecrecover takes the signature parameters, and the only way to get them
            // currently is to use assembly.
            // solhint-disable-next-line no-inline-assembly
            assembly {
                let vs := mload(add(signature, 0x40))
                r := mload(add(signature, 0x20))
                s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
                v := add(shr(255, vs), 27)
            }
        } else {
            revert("ECDSA: invalid signature length");
        }

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

    /**
     * @dev Overload of {ECDSA-recover} that receives the `v`,
     * `r` and `s` signature fields separately.
     */
    function recover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal pure returns (address) {
        // EIP-2 still allows signature malleability for ecrecover(). Remove this possibility and make the signature
        // unique. Appendix F in the Ethereum Yellow paper (https://ethereum.github.io/yellowpaper/paper.pdf), defines
        // the valid range for s in (281): 0 < s < secp256k1n ÷ 2 + 1, and for v in (282): v ∈ {27, 28}. Most
        // signatures from current libraries generate a unique signature with an s-value in the lower half order.
        //
        // If your library generates malleable signatures, such as s-values in the upper range, calculate a new s-value
        // with 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 - s1 and flip v from 27 to 28 or
        // vice versa. If your library also generates signatures with 0/1 for v instead 27/28, add 27 to v to accept
        // these malleable signatures as well.
        require(uint256(s) <= 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0, "ECDSA: invalid signature 's' value");
        require(v == 27 || v == 28, "ECDSA: invalid signature 'v' value");

        // If the signature is valid (and not malleable), return the signer address
        address signer = ecrecover(hash, v, r, s);
        require(signer != address(0), "ECDSA: invalid signature");

        return signer;
    }

    /**
     * @dev Returns an Ethereum Signed Message, created from a `hash`. This
     * produces hash corresponding to the one signed with the
     * https://eth.wiki/json-rpc/API#eth_sign[`eth_sign`]
     * JSON-RPC method as part of EIP-191.
     *
     * See {recover}.
     */
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }

    /**
     * @dev Returns an Ethereum Signed Typed Data, created from a
     * `domainSeparator` and a `structHash`. This produces hash corresponding
     * to the one signed with the
     * https://eips.ethereum.org/EIPS/eip-712[`eth_signTypedData`]
     * JSON-RPC method as part of EIP-712.
     *
     * See {recover}.
     */
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}

// File: @openzeppelin/contracts/utils/cryptography/draft-EIP712.sol



pragma solidity ^0.8.0;


/**
 * @dev https://eips.ethereum.org/EIPS/eip-712[EIP 712] is a standard for hashing and signing of typed structured data.
 *
 * The encoding specified in the EIP is very generic, and such a generic implementation in Solidity is not feasible,
 * thus this contract does not implement the encoding itself. Protocols need to implement the type-specific encoding
 * they need in their contracts using a combination of `abi.encode` and `keccak256`.
 *
 * This contract implements the EIP 712 domain separator ({_domainSeparatorV4}) that is used as part of the encoding
 * scheme, and the final step of the encoding to obtain the message digest that is then signed via ECDSA
 * ({_hashTypedDataV4}).
 *
 * The implementation of the domain separator was designed to be as efficient as possible while still properly updating
 * the chain id to protect against replay attacks on an eventual fork of the chain.
 *
 * NOTE: This contract implements the version of the encoding known as "v4", as implemented by the JSON RPC method
 * https://docs.metamask.io/guide/signing-data.html[`eth_signTypedDataV4` in MetaMask].
 *
 * _Available since v3.4._
 */
abstract contract EIP712 {
    /* solhint-disable var-name-mixedcase */
    // Cache the domain separator as an immutable value, but also store the chain id that it corresponds to, in order to
    // invalidate the cached domain separator if the chain id changes.
    bytes32 private immutable _CACHED_DOMAIN_SEPARATOR;
    uint256 private immutable _CACHED_CHAIN_ID;

    bytes32 private immutable _HASHED_NAME;
    bytes32 private immutable _HASHED_VERSION;
    bytes32 private immutable _TYPE_HASH;
    /* solhint-enable var-name-mixedcase */

    /**
     * @dev Initializes the domain separator and parameter caches.
     *
     * The meaning of `name` and `version` is specified in
     * https://eips.ethereum.org/EIPS/eip-712#definition-of-domainseparator[EIP 712]:
     *
     * - `name`: the user readable name of the signing domain, i.e. the name of the DApp or the protocol.
     * - `version`: the current major version of the signing domain.
     *
     * NOTE: These parameters cannot be changed except through a xref:learn::upgrading-smart-contracts.adoc[smart
     * contract upgrade].
     */
    constructor(string memory name, string memory version) {
        bytes32 hashedName = keccak256(bytes(name));
        bytes32 hashedVersion = keccak256(bytes(version));
        bytes32 typeHash = keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)");
        _HASHED_NAME = hashedName;
        _HASHED_VERSION = hashedVersion;
        _CACHED_CHAIN_ID = block.chainid;
        _CACHED_DOMAIN_SEPARATOR = _buildDomainSeparator(typeHash, hashedName, hashedVersion);
        _TYPE_HASH = typeHash;
    }

    /**
     * @dev Returns the domain separator for the current chain.
     */
    function _domainSeparatorV4() internal view returns (bytes32) {
        if (block.chainid == _CACHED_CHAIN_ID) {
            return _CACHED_DOMAIN_SEPARATOR;
        } else {
            return _buildDomainSeparator(_TYPE_HASH, _HASHED_NAME, _HASHED_VERSION);
        }
    }

    function _buildDomainSeparator(bytes32 typeHash, bytes32 name, bytes32 version) private view returns (bytes32) {
        return keccak256(
            abi.encode(
                typeHash,
                name,
                version,
                block.chainid,
                address(this)
            )
        );
    }

    /**
     * @dev Given an already https://eips.ethereum.org/EIPS/eip-712#definition-of-hashstruct[hashed struct], this
     * function returns the hash of the fully encoded EIP712 message for this domain.
     *
     * This hash can be used together with {ECDSA-recover} to obtain the signer of a message. For example:
     *
     * ```solidity
     * bytes32 digest = _hashTypedDataV4(keccak256(abi.encode(
     *     keccak256("Mail(address to,string contents)"),
     *     mailTo,
     *     keccak256(bytes(mailContents))
     * )));
     * address signer = ECDSA.recover(digest, signature);
     * ```
     */
    function _hashTypedDataV4(bytes32 structHash) internal view virtual returns (bytes32) {
        return ECDSA.toTypedDataHash(_domainSeparatorV4(), structHash);
    }
}

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



pragma solidity ^0.8.0;

/**
 * @title Counters
 * @author Matt Condon (@shrugs)
 * @dev Provides counters that can only be incremented or decremented by one. This can be used e.g. to track the number
 * of elements in a mapping, issuing ERC721 ids, or counting request ids.
 *
 * Include with `using Counters for Counters.Counter;`
 */
library Counters {
    struct Counter {
        // This variable should never be directly accessed by users of the library: interactions must be restricted to
        // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add
        // this feature: see https://github.com/ethereum/solidity/issues/4637
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        //unchecked {
            counter._value += 1;
        //}
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        //unchecked {
            counter._value = value - 1;
        //}
    }
}

// File: @openzeppelin/contracts/token/ERC20/extensions/draft-ERC20Permit.sol



pragma solidity ^0.8.0;






/**
 * @dev Implementation of the ERC20 Permit extension allowing approvals to be made via signatures, as defined in
 * https://eips.ethereum.org/EIPS/eip-2612[EIP-2612].
 *
 * Adds the {permit} method, which can be used to change an account's ERC20 allowance (see {IERC20-allowance}) by
 * presenting a message signed by the account. By not relying on `{IERC20-approve}`, the token holder account doesn't
 * need to send a transaction, and thus is not required to hold Ether at all.
 *
 * _Available since v3.4._
 */
abstract contract ERC20Permit is ERC20, IERC20Permit, EIP712 {
    using Counters for Counters.Counter;

    mapping (address => Counters.Counter) private _nonces;

    // solhint-disable-next-line var-name-mixedcase
    bytes32 private immutable _PERMIT_TYPEHASH = keccak256("Permit(address owner,address spender,uint256 value,uint256 nonce,uint256 deadline)");

    /**
     * @dev Initializes the {EIP712} domain separator using the `name` parameter, and setting `version` to `"1"`.
     *
     * It's a good idea to use the same `name` that is defined as the ERC20 token name.
     */
    constructor(string memory name) EIP712(name, "1") {
    }

    /**
     * @dev See {IERC20Permit-permit}.
     */
    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) public virtual override {
        // solhint-disable-next-line not-rely-on-time
        require(block.timestamp <= deadline, "ERC20Permit: expired deadline");

        bytes32 structHash = keccak256(
            abi.encode(
                _PERMIT_TYPEHASH,
                owner,
                spender,
                value,
                _useNonce(owner),
                deadline
            )
        );

        bytes32 hash = _hashTypedDataV4(structHash);

        address signer = ECDSA.recover(hash, v, r, s);
        require(signer == owner, "ERC20Permit: invalid signature");

        _approve(owner, spender, value);
    }

    /**
     * @dev See {IERC20Permit-nonces}.
     */
    function nonces(address owner) public view virtual override returns (uint256) {
        return _nonces[owner].current();
    }

    /**
     * @dev See {IERC20Permit-DOMAIN_SEPARATOR}.
     */
    // solhint-disable-next-line func-name-mixedcase
    function DOMAIN_SEPARATOR() external view override returns (bytes32) {
        return _domainSeparatorV4();
    }

    /**
     * @dev "Consume a nonce": return the current value and increment.
     *
     * _Available since v4.1._
     */
    function _useNonce(address owner) internal virtual returns (uint256 current) {
        Counters.Counter storage nonce = _nonces[owner];
        current = nonce.current();
        nonce.increment();
    }
}

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



pragma solidity ^0.8.0;

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// File: @openzeppelin/contracts/utils/math/SafeMath.sol



pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        // unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        // }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        // unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        // }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        // unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        // }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        // unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        // }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        // unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        // }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // unchecked {
            require(b <= a, errorMessage);
            return a - b;
        // }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // unchecked {
            require(b > 0, errorMessage);
            return a / b;
        // }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // unchecked {
            require(b > 0, errorMessage);
            return a % b;
        // }
    }
}

// File: contracts/OwnixToken.sol

// contracts/ OwnixToken.sol


pragma solidity ^0.8.0;






contract OwnixToken is ERC20, Ownable, ERC20Burnable, ERC20Permit {
  using SafeMath for uint256;

  mapping(address => bool) private minters;

  modifier onlyMinters {
    require(minters[msg.sender] || msg.sender == owner(), "Only Minters");
    _;
  }

  constructor(address[] memory _addresses) ERC20("Ownix", "ONX") ERC20Permit("Ownix")  {
    require(_addresses.length > 0, " OwnixToken: no addresses");
    require(_addresses.length == 5, " OwnixToken: payees must be 5");

    uint256 totalTokens = 1000000000 * (10**uint256(decimals()));
    _mint(_addresses[0], totalTokens.mul(35).div(100));
    _mint(_addresses[1], totalTokens.mul(30).div(100));
    _mint(_addresses[2], totalTokens.mul(20).div(100));
    _mint(_addresses[3], totalTokens.mul(10).div(100));
    _mint(_addresses[4], totalTokens.mul(5).div(100));
  }

  /**
   * Minters APIs
   */
   
   /**
   * @dev onlyMinters function to mint new token.
   *
   * @param _account address to mint to
   * @param _amount amount to mint
   */
  function mint(address _account, uint256 _amount) external onlyMinters {
    _mint(_account, _amount);
  }

  /**
   * Owner APIs
   */

  /**
   * @dev admin function to set minter.
   *
   * @param _minter address the address to set minting privileges of
   * @param _privileged bool whether or not this address can mint
   */
  function setMinter(address _minter, bool _privileged) external onlyOwner {
    minters[_minter] = _privileged;
  }

  /**
   * @dev withdraw the tokens from the contrcat
   * @param _withdrawAddress - The withdraw address
   * @param _amount - The withdrawal amount
   */
  function withdraw(address _withdrawAddress, uint256 _amount)
    external
    onlyOwner
  {
    require(
      _withdrawAddress != address(0),
      "address can't be the zero address"
    );

    require(transfer(_withdrawAddress, _amount), "Withdraw failed");
  }

  /**
   * Read APIs
   */
  function isMinter(address _minter) external view returns (bool) {
    return minters[_minter];
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"}],"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":"DOMAIN_SEPARATOR","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"}],"name":"isMinter","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_account","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"permit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_minter","type":"address"},{"internalType":"bool","name":"_privileged","type":"bool"}],"name":"setMinter","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"},{"inputs":[{"internalType":"address","name":"_withdrawAddress","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6101406040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610120908152503480156200003a57600080fd5b50604051620040ef380380620040ef833981810160405281019062000060919062000960565b6040518060400160405280600581526020017f4f776e6978000000000000000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4f776e69780000000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4f4e580000000000000000000000000000000000000000000000000000000000815250816003908051906020019062000151929190620007f7565b5080600490805190602001906200016a929190620007f7565b50505060006200017f6200061060201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260c081815250508160e081815250504660a08181525050620002868184846200061860201b60201c565b608081815250508061010081815250505050505050506000815111620002e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002da9062000aaa565b60405180910390fd5b60058151146200032a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003219062000acc565b60405180910390fd5b60006200033c6200065460201b60201c565b60ff16600a6200034d919062000c86565b633b9aca006200035e919062000dc3565b9050620003e8826000815181106200039f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151620003dc6064620003c86023866200065d60201b620011f01790919060201c565b6200067560201b620012061790919060201c565b6200068d60201b60201c565b620004708260018151811062000427577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015162000464606462000450601e866200065d60201b620011f01790919060201c565b6200067560201b620012061790919060201c565b6200068d60201b60201c565b620004f882600281518110620004af577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151620004ec6064620004d86014866200065d60201b620011f01790919060201c565b6200067560201b620012061790919060201c565b6200068d60201b60201c565b620005808260038151811062000537577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015162000574606462000560600a866200065d60201b620011f01790919060201c565b6200067560201b620012061790919060201c565b6200068d60201b60201c565b6200060882600481518110620005bf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151620005fc6064620005e86005866200065d60201b620011f01790919060201c565b6200067560201b620012061790919060201c565b6200068d60201b60201c565b505062001047565b600033905090565b600083838346306040516020016200063595949392919062000a4d565b6040516020818303038152906040528051906020012090509392505050565b60006012905090565b600081836200066d919062000dc3565b905092915050565b6000818362000685919062000bf3565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000700576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f79062000aee565b60405180910390fd5b6200071460008383620007f260201b60201c565b806002600082825462000728919062000b96565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200077f919062000b96565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620007e6919062000b10565b60405180910390a35050565b505050565b828054620008059062000e6c565b90600052602060002090601f01602090048101928262000829576000855562000875565b82601f106200084457805160ff191683800117855562000875565b8280016001018555821562000875579182015b828111156200087457825182559160200191906001019062000857565b5b50905062000884919062000888565b5090565b5b80821115620008a357600081600090555060010162000889565b5090565b6000620008be620008b88462000b56565b62000b2d565b90508083825260208201905082856020860282011115620008de57600080fd5b60005b85811015620009125781620008f788826200091c565b845260208401935060208301925050600181019050620008e1565b5050509392505050565b6000815190506200092d816200102d565b92915050565b600082601f8301126200094557600080fd5b815162000957848260208601620008a7565b91505092915050565b6000602082840312156200097357600080fd5b600082015167ffffffffffffffff8111156200098e57600080fd5b6200099c8482850162000933565b91505092915050565b620009b08162000e24565b82525050565b620009c18162000e38565b82525050565b6000620009d660198362000b85565b9150620009e38262000fb2565b602082019050919050565b6000620009fd601d8362000b85565b915062000a0a8262000fdb565b602082019050919050565b600062000a24601f8362000b85565b915062000a318262001004565b602082019050919050565b62000a478162000e62565b82525050565b600060a08201905062000a646000830188620009b6565b62000a736020830187620009b6565b62000a826040830186620009b6565b62000a91606083018562000a3c565b62000aa06080830184620009a5565b9695505050505050565b6000602082019050818103600083015262000ac581620009c7565b9050919050565b6000602082019050818103600083015262000ae781620009ee565b9050919050565b6000602082019050818103600083015262000b098162000a15565b9050919050565b600060208201905062000b27600083018462000a3c565b92915050565b600062000b3962000b4c565b905062000b47828262000ea2565b919050565b6000604051905090565b600067ffffffffffffffff82111562000b745762000b7362000f65565b5b602082029050602081019050919050565b600082825260208201905092915050565b600062000ba38262000e62565b915062000bb08362000e62565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000be85762000be762000ed8565b5b828201905092915050565b600062000c008262000e62565b915062000c0d8362000e62565b92508262000c205762000c1f62000f07565b5b828204905092915050565b6000808291508390505b600185111562000c7d5780860481111562000c555762000c5462000ed8565b5b600185161562000c655780820291505b808102905062000c758562000fa5565b945062000c35565b94509492505050565b600062000c938262000e62565b915062000ca08362000e62565b925062000ccf7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000cd7565b905092915050565b60008262000ce9576001905062000dbc565b8162000cf9576000905062000dbc565b816001811462000d12576002811462000d1d5762000d53565b600191505062000dbc565b60ff84111562000d325762000d3162000ed8565b5b8360020a91508482111562000d4c5762000d4b62000ed8565b5b5062000dbc565b5060208310610133831016604e8410600b841016171562000d8d5782820a90508381111562000d875762000d8662000ed8565b5b62000dbc565b62000d9c848484600162000c2b565b9250905081840481111562000db65762000db562000ed8565b5b81810290505b9392505050565b600062000dd08262000e62565b915062000ddd8362000e62565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e195762000e1862000ed8565b5b828202905092915050565b600062000e318262000e42565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000600282049050600182168062000e8557607f821691505b6020821081141562000e9c5762000e9b62000f36565b5b50919050565b62000ead8262000f94565b810181811067ffffffffffffffff8211171562000ecf5762000ece62000f65565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f204f776e6978546f6b656e3a206e6f2061646472657373657300000000000000600082015250565b7f204f776e6978546f6b656e3a20706179656573206d7573742062652035000000600082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b620010388162000e24565b81146200104457600080fd5b50565b60805160a05160c05160e0516101005161012051613058620010976000396000610d89015260006116c501526000611707015260006116e6015260006116720152600061169a01526130586000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806379cc6790116100c3578063aa271e1a1161007c578063aa271e1a146103b4578063cf456ae7146103e4578063d505accf14610400578063dd62ed3e1461041c578063f2fde38b1461044c578063f3fef3a3146104685761014d565b806379cc6790146102cc5780637ecebe00146102e85780638da5cb5b1461031857806395d89b4114610336578063a457c2d714610354578063a9059cbb146103845761014d565b80633644e515116101155780633644e5151461020c578063395093511461022a57806340c10f191461025a57806342966c681461027657806370a0823114610292578063715018a6146102c25761014d565b806306fdde0314610152578063095ea7b31461017057806318160ddd146101a057806323b872dd146101be578063313ce567146101ee575b600080fd5b61015a610484565b6040516101679190612475565b60405180910390f35b61018a60048036038101906101859190611ef2565b610516565b6040516101979190612346565b60405180910390f35b6101a8610534565b6040516101b59190612737565b60405180910390f35b6101d860048036038101906101d39190611dc9565b61053e565b6040516101e59190612346565b60405180910390f35b6101f661063f565b6040516102039190612752565b60405180910390f35b610214610648565b6040516102219190612361565b60405180910390f35b610244600480360381019061023f9190611ef2565b610657565b6040516102519190612346565b60405180910390f35b610274600480360381019061026f9190611ef2565b610703565b005b610290600480360381019061028b9190611f2e565b6107da565b005b6102ac60048036038101906102a79190611d64565b6107ee565b6040516102b99190612737565b60405180910390f35b6102ca610836565b005b6102e660048036038101906102e19190611ef2565b610973565b005b61030260048036038101906102fd9190611d64565b6109f7565b60405161030f9190612737565b60405180910390f35b610320610a47565b60405161032d919061232b565b60405180910390f35b61033e610a71565b60405161034b9190612475565b60405180910390f35b61036e60048036038101906103699190611ef2565b610b03565b60405161037b9190612346565b60405180910390f35b61039e60048036038101906103999190611ef2565b610bf7565b6040516103ab9190612346565b60405180910390f35b6103ce60048036038101906103c99190611d64565b610c15565b6040516103db9190612346565b60405180910390f35b6103fe60048036038101906103f99190611eb6565b610c6b565b005b61041a60048036038101906104159190611e18565b610d42565b005b61043660048036038101906104319190611d8d565b610e84565b6040516104439190612737565b60405180910390f35b61046660048036038101906104619190611d64565b610f0b565b005b610482600480360381019061047d9190611ef2565b6110b7565b005b6060600380546104939061293b565b80601f01602080910402602001604051908101604052809291908181526020018280546104bf9061293b565b801561050c5780601f106104e15761010080835404028352916020019161050c565b820191906000526020600020905b8154815290600101906020018083116104ef57829003601f168201915b5050505050905090565b600061052a61052361121c565b8484611224565b6001905092915050565b6000600254905090565b600061054b8484846113ef565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061059661121c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060d90612637565b60405180910390fd5b6106338561062261121c565b858461062e9190612875565b611224565b60019150509392505050565b60006012905090565b600061065261166e565b905090565b60006106f961066461121c565b84846001600061067261121c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106f49190612794565b611224565b6001905092915050565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061078d575061075e610a47565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6107cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c390612557565b60405180910390fd5b6107d68282611731565b5050565b6107eb6107e561121c565b82611885565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61083e61121c565b73ffffffffffffffffffffffffffffffffffffffff1661085c610a47565b73ffffffffffffffffffffffffffffffffffffffff16146108b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a990612657565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006109868361098161121c565b610e84565b9050818110156109cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c290612677565b60405180910390fd5b6109e8836109d761121c565b84846109e39190612875565b611224565b6109f28383611885565b505050565b6000610a40600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611a59565b9050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610a809061293b565b80601f0160208091040260200160405190810160405280929190818152602001828054610aac9061293b565b8015610af95780601f10610ace57610100808354040283529160200191610af9565b820191906000526020600020905b815481529060010190602001808311610adc57829003601f168201915b5050505050905090565b60008060016000610b1261121c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc6906126f7565b60405180910390fd5b610bec610bda61121c565b858584610be79190612875565b611224565b600191505092915050565b6000610c0b610c0461121c565b84846113ef565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c7361121c565b73ffffffffffffffffffffffffffffffffffffffff16610c91610a47565b73ffffffffffffffffffffffffffffffffffffffff1614610ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cde90612657565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b83421115610d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7c90612597565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000888888610db48c611a67565b89604051602001610dca9695949392919061237c565b6040516020818303038152906040528051906020012090506000610ded82611ac5565b90506000610dfd82878787611adf565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6490612617565b60405180910390fd5b610e788a8a8a611224565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f1361121c565b73ffffffffffffffffffffffffffffffffffffffff16610f31610a47565b73ffffffffffffffffffffffffffffffffffffffff1614610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e90612657565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fee90612517565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6110bf61121c565b73ffffffffffffffffffffffffffffffffffffffff166110dd610a47565b73ffffffffffffffffffffffffffffffffffffffff1614611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a90612657565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a906124d7565b60405180910390fd5b6111ad8282610bf7565b6111ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e390612577565b60405180910390fd5b5050565b600081836111fe919061281b565b905092915050565b6000818361121491906127ea565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b906126d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb90612537565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113e29190612737565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561145f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611456906126b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c6906124b7565b60405180910390fd5b6114da838383611c6a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611560576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611557906125b7565b60405180910390fd5b818161156c9190612875565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115fc9190612794565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516116609190612737565b60405180910390a350505050565b60007f00000000000000000000000000000000000000000000000000000000000000004614156116c0577f0000000000000000000000000000000000000000000000000000000000000000905061172e565b61172b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611c6f565b90505b90565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179890612717565b60405180910390fd5b6117ad60008383611c6a565b80600260008282546117bf9190612794565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118149190612794565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118799190612737565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec90612697565b60405180910390fd5b61190182600083611c6a565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e906124f7565b60405180910390fd5b81816119939190612875565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546119e79190612875565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a4c9190612737565b60405180910390a3505050565b600081600001549050919050565b600080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611ab481611a59565b9150611abf81611ca9565b50919050565b6000611ad8611ad261166e565b83611cc8565b9050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e906125d7565b60405180910390fd5b601b8460ff161480611b5c5750601c8460ff16145b611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b92906125f7565b60405180910390fd5b600060018686868660405160008152602001604052604051611bc09493929190612430565b6020604051602081039080840390855afa158015611be2573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5590612497565b60405180910390fd5b80915050949350505050565b505050565b60008383834630604051602001611c8a9594939291906123dd565b6040516020818303038152906040528051906020012090509392505050565b6001816000016000828254611cbe9190612794565b9250508190555050565b60008282604051602001611cdd9291906122f4565b60405160208183030381529060405280519060200120905092915050565b600081359050611d0a81612faf565b92915050565b600081359050611d1f81612fc6565b92915050565b600081359050611d3481612fdd565b92915050565b600081359050611d4981612ff4565b92915050565b600081359050611d5e8161300b565b92915050565b600060208284031215611d7657600080fd5b6000611d8484828501611cfb565b91505092915050565b60008060408385031215611da057600080fd5b6000611dae85828601611cfb565b9250506020611dbf85828601611cfb565b9150509250929050565b600080600060608486031215611dde57600080fd5b6000611dec86828701611cfb565b9350506020611dfd86828701611cfb565b9250506040611e0e86828701611d3a565b9150509250925092565b600080600080600080600060e0888a031215611e3357600080fd5b6000611e418a828b01611cfb565b9750506020611e528a828b01611cfb565b9650506040611e638a828b01611d3a565b9550506060611e748a828b01611d3a565b9450506080611e858a828b01611d4f565b93505060a0611e968a828b01611d25565b92505060c0611ea78a828b01611d25565b91505092959891949750929550565b60008060408385031215611ec957600080fd5b6000611ed785828601611cfb565b9250506020611ee885828601611d10565b9150509250929050565b60008060408385031215611f0557600080fd5b6000611f1385828601611cfb565b9250506020611f2485828601611d3a565b9150509250929050565b600060208284031215611f4057600080fd5b6000611f4e84828501611d3a565b91505092915050565b611f60816128a9565b82525050565b611f6f816128bb565b82525050565b611f7e816128c7565b82525050565b611f95611f90826128c7565b61296d565b82525050565b6000611fa68261276d565b611fb08185612778565b9350611fc0818560208601612908565b611fc981612a04565b840191505092915050565b6000611fe1601883612778565b9150611fec82612a15565b602082019050919050565b6000612004602383612778565b915061200f82612a3e565b604082019050919050565b6000612027602183612778565b915061203282612a8d565b604082019050919050565b600061204a602283612778565b915061205582612adc565b604082019050919050565b600061206d602683612778565b915061207882612b2b565b604082019050919050565b6000612090602283612778565b915061209b82612b7a565b604082019050919050565b60006120b3600c83612778565b91506120be82612bc9565b602082019050919050565b60006120d6600f83612778565b91506120e182612bf2565b602082019050919050565b60006120f9600283612789565b915061210482612c1b565b600282019050919050565b600061211c601d83612778565b915061212782612c44565b602082019050919050565b600061213f602683612778565b915061214a82612c6d565b604082019050919050565b6000612162602283612778565b915061216d82612cbc565b604082019050919050565b6000612185602283612778565b915061219082612d0b565b604082019050919050565b60006121a8601e83612778565b91506121b382612d5a565b602082019050919050565b60006121cb602883612778565b91506121d682612d83565b604082019050919050565b60006121ee602083612778565b91506121f982612dd2565b602082019050919050565b6000612211602483612778565b915061221c82612dfb565b604082019050919050565b6000612234602183612778565b915061223f82612e4a565b604082019050919050565b6000612257602583612778565b915061226282612e99565b604082019050919050565b600061227a602483612778565b915061228582612ee8565b604082019050919050565b600061229d602583612778565b91506122a882612f37565b604082019050919050565b60006122c0601f83612778565b91506122cb82612f86565b602082019050919050565b6122df816128f1565b82525050565b6122ee816128fb565b82525050565b60006122ff826120ec565b915061230b8285611f84565b60208201915061231b8284611f84565b6020820191508190509392505050565b60006020820190506123406000830184611f57565b92915050565b600060208201905061235b6000830184611f66565b92915050565b60006020820190506123766000830184611f75565b92915050565b600060c0820190506123916000830189611f75565b61239e6020830188611f57565b6123ab6040830187611f57565b6123b860608301866122d6565b6123c560808301856122d6565b6123d260a08301846122d6565b979650505050505050565b600060a0820190506123f26000830188611f75565b6123ff6020830187611f75565b61240c6040830186611f75565b61241960608301856122d6565b6124266080830184611f57565b9695505050505050565b60006080820190506124456000830187611f75565b61245260208301866122e5565b61245f6040830185611f75565b61246c6060830184611f75565b95945050505050565b6000602082019050818103600083015261248f8184611f9b565b905092915050565b600060208201905081810360008301526124b081611fd4565b9050919050565b600060208201905081810360008301526124d081611ff7565b9050919050565b600060208201905081810360008301526124f08161201a565b9050919050565b600060208201905081810360008301526125108161203d565b9050919050565b6000602082019050818103600083015261253081612060565b9050919050565b6000602082019050818103600083015261255081612083565b9050919050565b60006020820190508181036000830152612570816120a6565b9050919050565b60006020820190508181036000830152612590816120c9565b9050919050565b600060208201905081810360008301526125b08161210f565b9050919050565b600060208201905081810360008301526125d081612132565b9050919050565b600060208201905081810360008301526125f081612155565b9050919050565b6000602082019050818103600083015261261081612178565b9050919050565b600060208201905081810360008301526126308161219b565b9050919050565b60006020820190508181036000830152612650816121be565b9050919050565b60006020820190508181036000830152612670816121e1565b9050919050565b6000602082019050818103600083015261269081612204565b9050919050565b600060208201905081810360008301526126b081612227565b9050919050565b600060208201905081810360008301526126d08161224a565b9050919050565b600060208201905081810360008301526126f08161226d565b9050919050565b6000602082019050818103600083015261271081612290565b9050919050565b60006020820190508181036000830152612730816122b3565b9050919050565b600060208201905061274c60008301846122d6565b92915050565b600060208201905061276760008301846122e5565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600061279f826128f1565b91506127aa836128f1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127df576127de612977565b5b828201905092915050565b60006127f5826128f1565b9150612800836128f1565b9250826128105761280f6129a6565b5b828204905092915050565b6000612826826128f1565b9150612831836128f1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561286a57612869612977565b5b828202905092915050565b6000612880826128f1565b915061288b836128f1565b92508282101561289e5761289d612977565b5b828203905092915050565b60006128b4826128d1565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561292657808201518184015260208101905061290b565b83811115612935576000848401525b50505050565b6000600282049050600182168061295357607f821691505b60208210811415612967576129666129d5565b5b50919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f616464726573732063616e277420626520746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79204d696e746572730000000000000000000000000000000000000000600082015250565b7f5769746864726177206661696c65640000000000000000000000000000000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332305065726d69743a206578706972656420646561646c696e65000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305065726d69743a20696e76616c6964207369676e61747572650000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612fb8816128a9565b8114612fc357600080fd5b50565b612fcf816128bb565b8114612fda57600080fd5b50565b612fe6816128c7565b8114612ff157600080fd5b50565b612ffd816128f1565b811461300857600080fd5b50565b613014816128fb565b811461301f57600080fd5b5056fea26469706673582212207b0dc67aa0b0aaf672a376c8781b34971545d409b5bbde8959a81d4bfca07c7964736f6c63430008040033000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000050000000000000000000000009836ac274de04327def0d35be4920717f6763142000000000000000000000000c9981381d14cc37b1353f9740327ff699094ac74000000000000000000000000baab6f176698d9be3862221744c078f96d3edba70000000000000000000000006c7f0e03a0ebd30f1ef50d2f9556a2730b73b6ea000000000000000000000000f59f563cc97b4c713dd37ae70f58eb10bc887b00

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061014d5760003560e01c806379cc6790116100c3578063aa271e1a1161007c578063aa271e1a146103b4578063cf456ae7146103e4578063d505accf14610400578063dd62ed3e1461041c578063f2fde38b1461044c578063f3fef3a3146104685761014d565b806379cc6790146102cc5780637ecebe00146102e85780638da5cb5b1461031857806395d89b4114610336578063a457c2d714610354578063a9059cbb146103845761014d565b80633644e515116101155780633644e5151461020c578063395093511461022a57806340c10f191461025a57806342966c681461027657806370a0823114610292578063715018a6146102c25761014d565b806306fdde0314610152578063095ea7b31461017057806318160ddd146101a057806323b872dd146101be578063313ce567146101ee575b600080fd5b61015a610484565b6040516101679190612475565b60405180910390f35b61018a60048036038101906101859190611ef2565b610516565b6040516101979190612346565b60405180910390f35b6101a8610534565b6040516101b59190612737565b60405180910390f35b6101d860048036038101906101d39190611dc9565b61053e565b6040516101e59190612346565b60405180910390f35b6101f661063f565b6040516102039190612752565b60405180910390f35b610214610648565b6040516102219190612361565b60405180910390f35b610244600480360381019061023f9190611ef2565b610657565b6040516102519190612346565b60405180910390f35b610274600480360381019061026f9190611ef2565b610703565b005b610290600480360381019061028b9190611f2e565b6107da565b005b6102ac60048036038101906102a79190611d64565b6107ee565b6040516102b99190612737565b60405180910390f35b6102ca610836565b005b6102e660048036038101906102e19190611ef2565b610973565b005b61030260048036038101906102fd9190611d64565b6109f7565b60405161030f9190612737565b60405180910390f35b610320610a47565b60405161032d919061232b565b60405180910390f35b61033e610a71565b60405161034b9190612475565b60405180910390f35b61036e60048036038101906103699190611ef2565b610b03565b60405161037b9190612346565b60405180910390f35b61039e60048036038101906103999190611ef2565b610bf7565b6040516103ab9190612346565b60405180910390f35b6103ce60048036038101906103c99190611d64565b610c15565b6040516103db9190612346565b60405180910390f35b6103fe60048036038101906103f99190611eb6565b610c6b565b005b61041a60048036038101906104159190611e18565b610d42565b005b61043660048036038101906104319190611d8d565b610e84565b6040516104439190612737565b60405180910390f35b61046660048036038101906104619190611d64565b610f0b565b005b610482600480360381019061047d9190611ef2565b6110b7565b005b6060600380546104939061293b565b80601f01602080910402602001604051908101604052809291908181526020018280546104bf9061293b565b801561050c5780601f106104e15761010080835404028352916020019161050c565b820191906000526020600020905b8154815290600101906020018083116104ef57829003601f168201915b5050505050905090565b600061052a61052361121c565b8484611224565b6001905092915050565b6000600254905090565b600061054b8484846113ef565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061059661121c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610616576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060d90612637565b60405180910390fd5b6106338561062261121c565b858461062e9190612875565b611224565b60019150509392505050565b60006012905090565b600061065261166e565b905090565b60006106f961066461121c565b84846001600061067261121c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546106f49190612794565b611224565b6001905092915050565b600760003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061078d575061075e610a47565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b6107cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107c390612557565b60405180910390fd5b6107d68282611731565b5050565b6107eb6107e561121c565b82611885565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61083e61121c565b73ffffffffffffffffffffffffffffffffffffffff1661085c610a47565b73ffffffffffffffffffffffffffffffffffffffff16146108b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a990612657565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006109868361098161121c565b610e84565b9050818110156109cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109c290612677565b60405180910390fd5b6109e8836109d761121c565b84846109e39190612875565b611224565b6109f28383611885565b505050565b6000610a40600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611a59565b9050919050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610a809061293b565b80601f0160208091040260200160405190810160405280929190818152602001828054610aac9061293b565b8015610af95780601f10610ace57610100808354040283529160200191610af9565b820191906000526020600020905b815481529060010190602001808311610adc57829003601f168201915b5050505050905090565b60008060016000610b1261121c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610bcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bc6906126f7565b60405180910390fd5b610bec610bda61121c565b858584610be79190612875565b611224565b600191505092915050565b6000610c0b610c0461121c565b84846113ef565b6001905092915050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b610c7361121c565b73ffffffffffffffffffffffffffffffffffffffff16610c91610a47565b73ffffffffffffffffffffffffffffffffffffffff1614610ce7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cde90612657565b60405180910390fd5b80600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b83421115610d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7c90612597565b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9888888610db48c611a67565b89604051602001610dca9695949392919061237c565b6040516020818303038152906040528051906020012090506000610ded82611ac5565b90506000610dfd82878787611adf565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6490612617565b60405180910390fd5b610e788a8a8a611224565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610f1361121c565b73ffffffffffffffffffffffffffffffffffffffff16610f31610a47565b73ffffffffffffffffffffffffffffffffffffffff1614610f87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7e90612657565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ff7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fee90612517565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6110bf61121c565b73ffffffffffffffffffffffffffffffffffffffff166110dd610a47565b73ffffffffffffffffffffffffffffffffffffffff1614611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a90612657565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a906124d7565b60405180910390fd5b6111ad8282610bf7565b6111ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e390612577565b60405180910390fd5b5050565b600081836111fe919061281b565b905092915050565b6000818361121491906127ea565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b906126d7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb90612537565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516113e29190612737565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561145f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611456906126b7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c6906124b7565b60405180910390fd5b6114da838383611c6a565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611560576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611557906125b7565b60405180910390fd5b818161156c9190612875565b6000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546115fc9190612794565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516116609190612737565b60405180910390a350505050565b60007f00000000000000000000000000000000000000000000000000000000000000014614156116c0577fe82044634ab085865bf92de3ae4dbc410e9655ff1ef973cc47e316127e437185905061172e565b61172b7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f7ffb41b47828403e8eb0c784acfc7b36dac851fae34ba5417287763e39c08ceda57fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6611c6f565b90505b90565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179890612717565b60405180910390fd5b6117ad60008383611c6a565b80600260008282546117bf9190612794565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118149190612794565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516118799190612737565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156118f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ec90612697565b60405180910390fd5b61190182600083611c6a565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611987576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197e906124f7565b60405180910390fd5b81816119939190612875565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600260008282546119e79190612875565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a4c9190612737565b60405180910390a3505050565b600081600001549050919050565b600080600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611ab481611a59565b9150611abf81611ca9565b50919050565b6000611ad8611ad261166e565b83611cc8565b9050919050565b60007f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08260001c1115611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e906125d7565b60405180910390fd5b601b8460ff161480611b5c5750601c8460ff16145b611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b92906125f7565b60405180910390fd5b600060018686868660405160008152602001604052604051611bc09493929190612430565b6020604051602081039080840390855afa158015611be2573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5590612497565b60405180910390fd5b80915050949350505050565b505050565b60008383834630604051602001611c8a9594939291906123dd565b6040516020818303038152906040528051906020012090509392505050565b6001816000016000828254611cbe9190612794565b9250508190555050565b60008282604051602001611cdd9291906122f4565b60405160208183030381529060405280519060200120905092915050565b600081359050611d0a81612faf565b92915050565b600081359050611d1f81612fc6565b92915050565b600081359050611d3481612fdd565b92915050565b600081359050611d4981612ff4565b92915050565b600081359050611d5e8161300b565b92915050565b600060208284031215611d7657600080fd5b6000611d8484828501611cfb565b91505092915050565b60008060408385031215611da057600080fd5b6000611dae85828601611cfb565b9250506020611dbf85828601611cfb565b9150509250929050565b600080600060608486031215611dde57600080fd5b6000611dec86828701611cfb565b9350506020611dfd86828701611cfb565b9250506040611e0e86828701611d3a565b9150509250925092565b600080600080600080600060e0888a031215611e3357600080fd5b6000611e418a828b01611cfb565b9750506020611e528a828b01611cfb565b9650506040611e638a828b01611d3a565b9550506060611e748a828b01611d3a565b9450506080611e858a828b01611d4f565b93505060a0611e968a828b01611d25565b92505060c0611ea78a828b01611d25565b91505092959891949750929550565b60008060408385031215611ec957600080fd5b6000611ed785828601611cfb565b9250506020611ee885828601611d10565b9150509250929050565b60008060408385031215611f0557600080fd5b6000611f1385828601611cfb565b9250506020611f2485828601611d3a565b9150509250929050565b600060208284031215611f4057600080fd5b6000611f4e84828501611d3a565b91505092915050565b611f60816128a9565b82525050565b611f6f816128bb565b82525050565b611f7e816128c7565b82525050565b611f95611f90826128c7565b61296d565b82525050565b6000611fa68261276d565b611fb08185612778565b9350611fc0818560208601612908565b611fc981612a04565b840191505092915050565b6000611fe1601883612778565b9150611fec82612a15565b602082019050919050565b6000612004602383612778565b915061200f82612a3e565b604082019050919050565b6000612027602183612778565b915061203282612a8d565b604082019050919050565b600061204a602283612778565b915061205582612adc565b604082019050919050565b600061206d602683612778565b915061207882612b2b565b604082019050919050565b6000612090602283612778565b915061209b82612b7a565b604082019050919050565b60006120b3600c83612778565b91506120be82612bc9565b602082019050919050565b60006120d6600f83612778565b91506120e182612bf2565b602082019050919050565b60006120f9600283612789565b915061210482612c1b565b600282019050919050565b600061211c601d83612778565b915061212782612c44565b602082019050919050565b600061213f602683612778565b915061214a82612c6d565b604082019050919050565b6000612162602283612778565b915061216d82612cbc565b604082019050919050565b6000612185602283612778565b915061219082612d0b565b604082019050919050565b60006121a8601e83612778565b91506121b382612d5a565b602082019050919050565b60006121cb602883612778565b91506121d682612d83565b604082019050919050565b60006121ee602083612778565b91506121f982612dd2565b602082019050919050565b6000612211602483612778565b915061221c82612dfb565b604082019050919050565b6000612234602183612778565b915061223f82612e4a565b604082019050919050565b6000612257602583612778565b915061226282612e99565b604082019050919050565b600061227a602483612778565b915061228582612ee8565b604082019050919050565b600061229d602583612778565b91506122a882612f37565b604082019050919050565b60006122c0601f83612778565b91506122cb82612f86565b602082019050919050565b6122df816128f1565b82525050565b6122ee816128fb565b82525050565b60006122ff826120ec565b915061230b8285611f84565b60208201915061231b8284611f84565b6020820191508190509392505050565b60006020820190506123406000830184611f57565b92915050565b600060208201905061235b6000830184611f66565b92915050565b60006020820190506123766000830184611f75565b92915050565b600060c0820190506123916000830189611f75565b61239e6020830188611f57565b6123ab6040830187611f57565b6123b860608301866122d6565b6123c560808301856122d6565b6123d260a08301846122d6565b979650505050505050565b600060a0820190506123f26000830188611f75565b6123ff6020830187611f75565b61240c6040830186611f75565b61241960608301856122d6565b6124266080830184611f57565b9695505050505050565b60006080820190506124456000830187611f75565b61245260208301866122e5565b61245f6040830185611f75565b61246c6060830184611f75565b95945050505050565b6000602082019050818103600083015261248f8184611f9b565b905092915050565b600060208201905081810360008301526124b081611fd4565b9050919050565b600060208201905081810360008301526124d081611ff7565b9050919050565b600060208201905081810360008301526124f08161201a565b9050919050565b600060208201905081810360008301526125108161203d565b9050919050565b6000602082019050818103600083015261253081612060565b9050919050565b6000602082019050818103600083015261255081612083565b9050919050565b60006020820190508181036000830152612570816120a6565b9050919050565b60006020820190508181036000830152612590816120c9565b9050919050565b600060208201905081810360008301526125b08161210f565b9050919050565b600060208201905081810360008301526125d081612132565b9050919050565b600060208201905081810360008301526125f081612155565b9050919050565b6000602082019050818103600083015261261081612178565b9050919050565b600060208201905081810360008301526126308161219b565b9050919050565b60006020820190508181036000830152612650816121be565b9050919050565b60006020820190508181036000830152612670816121e1565b9050919050565b6000602082019050818103600083015261269081612204565b9050919050565b600060208201905081810360008301526126b081612227565b9050919050565b600060208201905081810360008301526126d08161224a565b9050919050565b600060208201905081810360008301526126f08161226d565b9050919050565b6000602082019050818103600083015261271081612290565b9050919050565b60006020820190508181036000830152612730816122b3565b9050919050565b600060208201905061274c60008301846122d6565b92915050565b600060208201905061276760008301846122e5565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600061279f826128f1565b91506127aa836128f1565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156127df576127de612977565b5b828201905092915050565b60006127f5826128f1565b9150612800836128f1565b9250826128105761280f6129a6565b5b828204905092915050565b6000612826826128f1565b9150612831836128f1565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561286a57612869612977565b5b828202905092915050565b6000612880826128f1565b915061288b836128f1565b92508282101561289e5761289d612977565b5b828203905092915050565b60006128b4826128d1565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561292657808201518184015260208101905061290b565b83811115612935576000848401525b50505050565b6000600282049050600182168061295357607f821691505b60208210811415612967576129666129d5565b5b50919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f616464726573732063616e277420626520746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c79204d696e746572730000000000000000000000000000000000000000600082015250565b7f5769746864726177206661696c65640000000000000000000000000000000000600082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332305065726d69743a206578706972656420646561646c696e65000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305065726d69743a20696e76616c6964207369676e61747572650000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612fb8816128a9565b8114612fc357600080fd5b50565b612fcf816128bb565b8114612fda57600080fd5b50565b612fe6816128c7565b8114612ff157600080fd5b50565b612ffd816128f1565b811461300857600080fd5b50565b613014816128fb565b811461301f57600080fd5b5056fea26469706673582212207b0dc67aa0b0aaf672a376c8781b34971545d409b5bbde8959a81d4bfca07c7964736f6c63430008040033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000050000000000000000000000009836ac274de04327def0d35be4920717f6763142000000000000000000000000c9981381d14cc37b1353f9740327ff699094ac74000000000000000000000000baab6f176698d9be3862221744c078f96d3edba70000000000000000000000006c7f0e03a0ebd30f1ef50d2f9556a2730b73b6ea000000000000000000000000f59f563cc97b4c713dd37ae70f58eb10bc887b00

-----Decoded View---------------
Arg [0] : _addresses (address[]): 0x9836ac274DE04327DEF0D35BE4920717F6763142,0xc9981381D14cc37B1353f9740327Ff699094Ac74,0xBAAB6f176698d9BE3862221744c078F96D3EDba7,0x6C7F0E03A0eBd30F1eF50D2f9556a2730B73B6ea,0xf59f563Cc97b4c713dD37aE70f58EB10BC887b00

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000005
Arg [2] : 0000000000000000000000009836ac274de04327def0d35be4920717f6763142
Arg [3] : 000000000000000000000000c9981381d14cc37b1353f9740327ff699094ac74
Arg [4] : 000000000000000000000000baab6f176698d9be3862221744c078f96d3edba7
Arg [5] : 0000000000000000000000006c7f0e03a0ebd30f1ef50d2f9556a2730b73b6ea
Arg [6] : 000000000000000000000000f59f563cc97b4c713dd37ae70f58eb10bc887b00


Deployed Bytecode Sourcemap

42353:2083:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6528:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8695:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7648:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9346:422;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7490:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32349:115;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10177:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43395:107;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15790:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7819:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34561:148;;;:::i;:::-;;16200:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32091:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33910:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6747:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10895:377;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8159:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44333:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43739:116;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31254:771;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8397:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34864:244;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44022:275;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6528:100;6582:13;6615:5;6608:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6528:100;:::o;8695:169::-;8778:4;8795:39;8804:12;:10;:12::i;:::-;8818:7;8827:6;8795:8;:39::i;:::-;8852:4;8845:11;;8695:169;;;;:::o;7648:108::-;7709:7;7736:12;;7729:19;;7648:108;:::o;9346:422::-;9452:4;9469:36;9479:6;9487:9;9498:6;9469:9;:36::i;:::-;9518:24;9545:11;:19;9557:6;9545:19;;;;;;;;;;;;;;;:33;9565:12;:10;:12::i;:::-;9545:33;;;;;;;;;;;;;;;;9518:60;;9617:6;9597:16;:26;;9589:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9679:57;9688:6;9696:12;:10;:12::i;:::-;9729:6;9710:16;:25;;;;:::i;:::-;9679:8;:57::i;:::-;9756:4;9749:11;;;9346:422;;;;;:::o;7490:93::-;7548:5;7573:2;7566:9;;7490:93;:::o;32349:115::-;32409:7;32436:20;:18;:20::i;:::-;32429:27;;32349:115;:::o;10177:215::-;10265:4;10282:80;10291:12;:10;:12::i;:::-;10305:7;10351:10;10314:11;:25;10326:12;:10;:12::i;:::-;10314:25;;;;;;;;;;;;;;;:34;10340:7;10314:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10282:8;:80::i;:::-;10380:4;10373:11;;10177:215;;;;:::o;43395:107::-;42540:7;:19;42548:10;42540:19;;;;;;;;;;;;;;;;;;;;;;;;;:44;;;;42577:7;:5;:7::i;:::-;42563:21;;:10;:21;;;42540:44;42532:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;43472:24:::1;43478:8;43488:7;43472:5;:24::i;:::-;43395:107:::0;;:::o;15790:91::-;15846:27;15852:12;:10;:12::i;:::-;15866:6;15846:5;:27::i;:::-;15790:91;:::o;7819:127::-;7893:7;7920:9;:18;7930:7;7920:18;;;;;;;;;;;;;;;;7913:25;;7819:127;;;:::o;34561:148::-;34141:12;:10;:12::i;:::-;34130:23;;:7;:5;:7::i;:::-;:23;;;34122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34668:1:::1;34631:40;;34652:6;;;;;;;;;;;34631:40;;;;;;;;;;;;34699:1;34682:6;;:19;;;;;;;;;;;;;;;;;;34561:148::o:0;16200:332::-;16277:24;16304:32;16314:7;16323:12;:10;:12::i;:::-;16304:9;:32::i;:::-;16277:59;;16375:6;16355:16;:26;;16347:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;16433:58;16442:7;16451:12;:10;:12::i;:::-;16484:6;16465:16;:25;;;;:::i;:::-;16433:8;:58::i;:::-;16502:22;16508:7;16517:6;16502:5;:22::i;:::-;16200:332;;;:::o;32091:128::-;32160:7;32187:24;:7;:14;32195:5;32187:14;;;;;;;;;;;;;;;:22;:24::i;:::-;32180:31;;32091:128;;;:::o;33910:87::-;33956:7;33983:6;;;;;;;;;;;33976:13;;33910:87;:::o;6747:104::-;6803:13;6836:7;6829:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6747:104;:::o;10895:377::-;10988:4;11005:24;11032:11;:25;11044:12;:10;:12::i;:::-;11032:25;;;;;;;;;;;;;;;:34;11058:7;11032:34;;;;;;;;;;;;;;;;11005:61;;11105:15;11085:16;:35;;11077:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11173:67;11182:12;:10;:12::i;:::-;11196:7;11224:15;11205:16;:34;;;;:::i;:::-;11173:8;:67::i;:::-;11260:4;11253:11;;;10895:377;;;;:::o;8159:175::-;8245:4;8262:42;8272:12;:10;:12::i;:::-;8286:9;8297:6;8262:9;:42::i;:::-;8322:4;8315:11;;8159:175;;;;:::o;44333:100::-;44391:4;44411:7;:16;44419:7;44411:16;;;;;;;;;;;;;;;;;;;;;;;;;44404:23;;44333:100;;;:::o;43739:116::-;34141:12;:10;:12::i;:::-;34130:23;;:7;:5;:7::i;:::-;:23;;;34122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43838:11:::1;43819:7;:16;43827:7;43819:16;;;;;;;;;;;;;;;;:30;;;;;;;;;;;;;;;;;;43739:116:::0;;:::o;31254:771::-;31483:8;31464:15;:27;;31456:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;31538:18;31612:16;31647:5;31671:7;31697:5;31721:16;31731:5;31721:9;:16::i;:::-;31756:8;31583:196;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;31559:231;;;;;;31538:252;;31803:12;31818:28;31835:10;31818:16;:28::i;:::-;31803:43;;31859:14;31876:28;31890:4;31896:1;31899;31902;31876:13;:28::i;:::-;31859:45;;31933:5;31923:15;;:6;:15;;;31915:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31986:31;31995:5;32002:7;32011:5;31986:8;:31::i;:::-;31254:771;;;;;;;;;;:::o;8397:151::-;8486:7;8513:11;:18;8525:5;8513:18;;;;;;;;;;;;;;;:27;8532:7;8513:27;;;;;;;;;;;;;;;;8506:34;;8397:151;;;;:::o;34864:244::-;34141:12;:10;:12::i;:::-;34130:23;;:7;:5;:7::i;:::-;:23;;;34122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34973:1:::1;34953:22;;:8;:22;;;;34945:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35063:8;35034:38;;35055:6;;;;;;;;;;;35034:38;;;;;;;;;;;;35092:8;35083:6;;:17;;;;;;;;;;;;;;;;;;34864:244:::0;:::o;44022:275::-;34141:12;:10;:12::i;:::-;34130:23;;:7;:5;:7::i;:::-;:23;;;34122:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44166:1:::1;44138:30;;:16;:30;;;;44122:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;44236:35;44245:16;44263:7;44236:8;:35::i;:::-;44228:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;44022:275:::0;;:::o;38675:98::-;38733:7;38764:1;38760;:5;;;;:::i;:::-;38753:12;;38675:98;;;;:::o;39074:::-;39132:7;39163:1;39159;:5;;;;:::i;:::-;39152:12;;39074:98;;;;:::o;4115:::-;4168:7;4195:10;4188:17;;4115:98;:::o;14251:346::-;14370:1;14353:19;;:5;:19;;;;14345:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14451:1;14432:21;;:7;:21;;;;14424:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14535:6;14505:11;:18;14517:5;14505:18;;;;;;;;;;;;;;;:27;14524:7;14505:27;;;;;;;;;;;;;;;:36;;;;14573:7;14557:32;;14566:5;14557:32;;;14582:6;14557:32;;;;;;:::i;:::-;;;;;;;;14251:346;;;:::o;11762:604::-;11886:1;11868:20;;:6;:20;;;;11860:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11970:1;11949:23;;:9;:23;;;;11941:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12025:47;12046:6;12054:9;12065:6;12025:20;:47::i;:::-;12085:21;12109:9;:17;12119:6;12109:17;;;;;;;;;;;;;;;;12085:41;;12162:6;12145:13;:23;;12137:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12258:6;12242:13;:22;;;;:::i;:::-;12222:9;:17;12232:6;12222:17;;;;;;;;;;;;;;;:42;;;;12299:6;12275:9;:20;12285:9;12275:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12340:9;12323:35;;12332:6;12323:35;;;12351:6;12323:35;;;;;;:::i;:::-;;;;;;;;11762:604;;;;:::o;27108:281::-;27161:7;27202:16;27185:13;:33;27181:201;;;27242:24;27235:31;;;;27181:201;27306:64;27328:10;27340:12;27354:15;27306:21;:64::i;:::-;27299:71;;27108:281;;:::o;12648:338::-;12751:1;12732:21;;:7;:21;;;;12724:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;12802:49;12831:1;12835:7;12844:6;12802:20;:49::i;:::-;12880:6;12864:12;;:22;;;;;;;:::i;:::-;;;;;;;;12919:6;12897:9;:18;12907:7;12897:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;12962:7;12941:37;;12958:1;12941:37;;;12971:6;12941:37;;;;;;:::i;:::-;;;;;;;;12648:338;;:::o;13319:494::-;13422:1;13403:21;;:7;:21;;;;13395:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13475:49;13496:7;13513:1;13517:6;13475:20;:49::i;:::-;13537:22;13562:9;:18;13572:7;13562:18;;;;;;;;;;;;;;;;13537:43;;13617:6;13599:14;:24;;13591:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13711:6;13694:14;:23;;;;:::i;:::-;13673:9;:18;13683:7;13673:18;;;;;;;;;;;;;;;:44;;;;13744:6;13728:12;;:22;;;;;;;:::i;:::-;;;;;;;;13794:1;13768:37;;13777:7;13768:37;;;13798:6;13768:37;;;;;;:::i;:::-;;;;;;;;13319:494;;;:::o;29367:114::-;29432:7;29459;:14;;;29452:21;;29367:114;;;:::o;32602:207::-;32662:15;32690:30;32723:7;:14;32731:5;32723:14;;;;;;;;;;;;;;;32690:47;;32758:15;:5;:13;:15::i;:::-;32748:25;;32784:17;:5;:15;:17::i;:::-;32602:207;;;;:::o;28376:167::-;28453:7;28480:55;28502:20;:18;:20::i;:::-;28524:10;28480:21;:55::i;:::-;28473:62;;28376:167;;;:::o;21506:1432::-;21591:7;22516:66;22510:1;22502:10;;:80;;22494:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;22645:2;22640:1;:7;;;:18;;;;22656:2;22651:1;:7;;;22640:18;22632:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;22795:14;22812:24;22822:4;22828:1;22831;22834;22812:24;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22795:41;;22873:1;22855:20;;:6;:20;;;;22847:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22924:6;22917:13;;;21506:1432;;;;;;:::o;15200:92::-;;;;:::o;27397:337::-;27499:7;27579:8;27606:4;27629:7;27655:13;27695:4;27550:165;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27526:200;;;;;;27519:207;;27397:337;;;;;:::o;29489:131::-;29598:1;29580:7;:14;;;:19;;;;;;;:::i;:::-;;;;;;;;29489:131;:::o;23857:196::-;23950:7;24016:15;24033:10;23987:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;23977:68;;;;;;23970:75;;23857:196;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;195:5;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:139::-;337:5;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;343:87;;;;:::o;436:139::-;482:5;520:6;507:20;498:29;;536:33;563:5;536:33;:::i;:::-;488:87;;;;:::o;581:135::-;625:5;663:6;650:20;641:29;;679:31;704:5;679:31;:::i;:::-;631:85;;;;:::o;722:262::-;781:6;830:2;818:9;809:7;805:23;801:32;798:2;;;846:1;843;836:12;798:2;889:1;914:53;959:7;950:6;939:9;935:22;914:53;:::i;:::-;904:63;;860:117;788:196;;;;:::o;990:407::-;1058:6;1066;1115:2;1103:9;1094:7;1090:23;1086:32;1083:2;;;1131:1;1128;1121:12;1083:2;1174:1;1199:53;1244:7;1235:6;1224:9;1220:22;1199:53;:::i;:::-;1189:63;;1145:117;1301:2;1327:53;1372:7;1363:6;1352:9;1348:22;1327:53;:::i;:::-;1317:63;;1272:118;1073:324;;;;;:::o;1403:552::-;1480:6;1488;1496;1545:2;1533:9;1524:7;1520:23;1516:32;1513:2;;;1561:1;1558;1551:12;1513:2;1604:1;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1575:117;1731:2;1757:53;1802:7;1793:6;1782:9;1778:22;1757:53;:::i;:::-;1747:63;;1702:118;1859:2;1885:53;1930:7;1921:6;1910:9;1906:22;1885:53;:::i;:::-;1875:63;;1830:118;1503:452;;;;;:::o;1961:1132::-;2072:6;2080;2088;2096;2104;2112;2120;2169:3;2157:9;2148:7;2144:23;2140:33;2137:2;;;2186:1;2183;2176:12;2137:2;2229:1;2254:53;2299:7;2290:6;2279:9;2275:22;2254:53;:::i;:::-;2244:63;;2200:117;2356:2;2382:53;2427:7;2418:6;2407:9;2403:22;2382:53;:::i;:::-;2372:63;;2327:118;2484:2;2510:53;2555:7;2546:6;2535:9;2531:22;2510:53;:::i;:::-;2500:63;;2455:118;2612:2;2638:53;2683:7;2674:6;2663:9;2659:22;2638:53;:::i;:::-;2628:63;;2583:118;2740:3;2767:51;2810:7;2801:6;2790:9;2786:22;2767:51;:::i;:::-;2757:61;;2711:117;2867:3;2894:53;2939:7;2930:6;2919:9;2915:22;2894:53;:::i;:::-;2884:63;;2838:119;2996:3;3023:53;3068:7;3059:6;3048:9;3044:22;3023:53;:::i;:::-;3013:63;;2967:119;2127:966;;;;;;;;;;:::o;3099:401::-;3164:6;3172;3221:2;3209:9;3200:7;3196:23;3192:32;3189:2;;;3237:1;3234;3227:12;3189:2;3280:1;3305:53;3350:7;3341:6;3330:9;3326:22;3305:53;:::i;:::-;3295:63;;3251:117;3407:2;3433:50;3475:7;3466:6;3455:9;3451:22;3433:50;:::i;:::-;3423:60;;3378:115;3179:321;;;;;:::o;3506:407::-;3574:6;3582;3631:2;3619:9;3610:7;3606:23;3602:32;3599:2;;;3647:1;3644;3637:12;3599:2;3690:1;3715:53;3760:7;3751:6;3740:9;3736:22;3715:53;:::i;:::-;3705:63;;3661:117;3817:2;3843:53;3888:7;3879:6;3868:9;3864:22;3843:53;:::i;:::-;3833:63;;3788:118;3589:324;;;;;:::o;3919:262::-;3978:6;4027:2;4015:9;4006:7;4002:23;3998:32;3995:2;;;4043:1;4040;4033:12;3995:2;4086:1;4111:53;4156:7;4147:6;4136:9;4132:22;4111:53;:::i;:::-;4101:63;;4057:117;3985:196;;;;:::o;4187:118::-;4274:24;4292:5;4274:24;:::i;:::-;4269:3;4262:37;4252:53;;:::o;4311:109::-;4392:21;4407:5;4392:21;:::i;:::-;4387:3;4380:34;4370:50;;:::o;4426:118::-;4513:24;4531:5;4513:24;:::i;:::-;4508:3;4501:37;4491:53;;:::o;4550:157::-;4655:45;4675:24;4693:5;4675:24;:::i;:::-;4655:45;:::i;:::-;4650:3;4643:58;4633:74;;:::o;4713:364::-;4801:3;4829:39;4862:5;4829:39;:::i;:::-;4884:71;4948:6;4943:3;4884:71;:::i;:::-;4877:78;;4964:52;5009:6;5004:3;4997:4;4990:5;4986:16;4964:52;:::i;:::-;5041:29;5063:6;5041:29;:::i;:::-;5036:3;5032:39;5025:46;;4805:272;;;;;:::o;5083:366::-;5225:3;5246:67;5310:2;5305:3;5246:67;:::i;:::-;5239:74;;5322:93;5411:3;5322:93;:::i;:::-;5440:2;5435:3;5431:12;5424:19;;5229:220;;;:::o;5455:366::-;5597:3;5618:67;5682:2;5677:3;5618:67;:::i;:::-;5611:74;;5694:93;5783:3;5694:93;:::i;:::-;5812:2;5807:3;5803:12;5796:19;;5601:220;;;:::o;5827:366::-;5969:3;5990:67;6054:2;6049:3;5990:67;:::i;:::-;5983:74;;6066:93;6155:3;6066:93;:::i;:::-;6184:2;6179:3;6175:12;6168:19;;5973:220;;;:::o;6199:366::-;6341:3;6362:67;6426:2;6421:3;6362:67;:::i;:::-;6355:74;;6438:93;6527:3;6438:93;:::i;:::-;6556:2;6551:3;6547:12;6540:19;;6345:220;;;:::o;6571:366::-;6713:3;6734:67;6798:2;6793:3;6734:67;:::i;:::-;6727:74;;6810:93;6899:3;6810:93;:::i;:::-;6928:2;6923:3;6919:12;6912:19;;6717:220;;;:::o;6943:366::-;7085:3;7106:67;7170:2;7165:3;7106:67;:::i;:::-;7099:74;;7182:93;7271:3;7182:93;:::i;:::-;7300:2;7295:3;7291:12;7284:19;;7089:220;;;:::o;7315:366::-;7457:3;7478:67;7542:2;7537:3;7478:67;:::i;:::-;7471:74;;7554:93;7643:3;7554:93;:::i;:::-;7672:2;7667:3;7663:12;7656:19;;7461:220;;;:::o;7687:366::-;7829:3;7850:67;7914:2;7909:3;7850:67;:::i;:::-;7843:74;;7926:93;8015:3;7926:93;:::i;:::-;8044:2;8039:3;8035:12;8028:19;;7833:220;;;:::o;8059:400::-;8219:3;8240:84;8322:1;8317:3;8240:84;:::i;:::-;8233:91;;8333:93;8422:3;8333:93;:::i;:::-;8451:1;8446:3;8442:11;8435:18;;8223:236;;;:::o;8465:366::-;8607:3;8628:67;8692:2;8687:3;8628:67;:::i;:::-;8621:74;;8704:93;8793:3;8704:93;:::i;:::-;8822:2;8817:3;8813:12;8806:19;;8611:220;;;:::o;8837:366::-;8979:3;9000:67;9064:2;9059:3;9000:67;:::i;:::-;8993:74;;9076:93;9165:3;9076:93;:::i;:::-;9194:2;9189:3;9185:12;9178:19;;8983:220;;;:::o;9209:366::-;9351:3;9372:67;9436:2;9431:3;9372:67;:::i;:::-;9365:74;;9448:93;9537:3;9448:93;:::i;:::-;9566:2;9561:3;9557:12;9550:19;;9355:220;;;:::o;9581:366::-;9723:3;9744:67;9808:2;9803:3;9744:67;:::i;:::-;9737:74;;9820:93;9909:3;9820:93;:::i;:::-;9938:2;9933:3;9929:12;9922:19;;9727:220;;;:::o;9953:366::-;10095:3;10116:67;10180:2;10175:3;10116:67;:::i;:::-;10109:74;;10192:93;10281:3;10192:93;:::i;:::-;10310:2;10305:3;10301:12;10294:19;;10099:220;;;:::o;10325:366::-;10467:3;10488:67;10552:2;10547:3;10488:67;:::i;:::-;10481:74;;10564:93;10653:3;10564:93;:::i;:::-;10682:2;10677:3;10673:12;10666:19;;10471:220;;;:::o;10697:366::-;10839:3;10860:67;10924:2;10919:3;10860:67;:::i;:::-;10853:74;;10936:93;11025:3;10936:93;:::i;:::-;11054:2;11049:3;11045:12;11038:19;;10843:220;;;:::o;11069:366::-;11211:3;11232:67;11296:2;11291:3;11232:67;:::i;:::-;11225:74;;11308:93;11397:3;11308:93;:::i;:::-;11426:2;11421:3;11417:12;11410:19;;11215:220;;;:::o;11441:366::-;11583:3;11604:67;11668:2;11663:3;11604:67;:::i;:::-;11597:74;;11680:93;11769:3;11680:93;:::i;:::-;11798:2;11793:3;11789:12;11782:19;;11587:220;;;:::o;11813:366::-;11955:3;11976:67;12040:2;12035:3;11976:67;:::i;:::-;11969:74;;12052:93;12141:3;12052:93;:::i;:::-;12170:2;12165:3;12161:12;12154:19;;11959:220;;;:::o;12185:366::-;12327:3;12348:67;12412:2;12407:3;12348:67;:::i;:::-;12341:74;;12424:93;12513:3;12424:93;:::i;:::-;12542:2;12537:3;12533:12;12526:19;;12331:220;;;:::o;12557:366::-;12699:3;12720:67;12784:2;12779:3;12720:67;:::i;:::-;12713:74;;12796:93;12885:3;12796:93;:::i;:::-;12914:2;12909:3;12905:12;12898:19;;12703:220;;;:::o;12929:366::-;13071:3;13092:67;13156:2;13151:3;13092:67;:::i;:::-;13085:74;;13168:93;13257:3;13168:93;:::i;:::-;13286:2;13281:3;13277:12;13270:19;;13075:220;;;:::o;13301:118::-;13388:24;13406:5;13388:24;:::i;:::-;13383:3;13376:37;13366:53;;:::o;13425:112::-;13508:22;13524:5;13508:22;:::i;:::-;13503:3;13496:35;13486:51;;:::o;13543:663::-;13784:3;13806:148;13950:3;13806:148;:::i;:::-;13799:155;;13964:75;14035:3;14026:6;13964:75;:::i;:::-;14064:2;14059:3;14055:12;14048:19;;14077:75;14148:3;14139:6;14077:75;:::i;:::-;14177:2;14172:3;14168:12;14161:19;;14197:3;14190:10;;13788:418;;;;;:::o;14212:222::-;14305:4;14343:2;14332:9;14328:18;14320:26;;14356:71;14424:1;14413:9;14409:17;14400:6;14356:71;:::i;:::-;14310:124;;;;:::o;14440:210::-;14527:4;14565:2;14554:9;14550:18;14542:26;;14578:65;14640:1;14629:9;14625:17;14616:6;14578:65;:::i;:::-;14532:118;;;;:::o;14656:222::-;14749:4;14787:2;14776:9;14772:18;14764:26;;14800:71;14868:1;14857:9;14853:17;14844:6;14800:71;:::i;:::-;14754:124;;;;:::o;14884:775::-;15117:4;15155:3;15144:9;15140:19;15132:27;;15169:71;15237:1;15226:9;15222:17;15213:6;15169:71;:::i;:::-;15250:72;15318:2;15307:9;15303:18;15294:6;15250:72;:::i;:::-;15332;15400:2;15389:9;15385:18;15376:6;15332:72;:::i;:::-;15414;15482:2;15471:9;15467:18;15458:6;15414:72;:::i;:::-;15496:73;15564:3;15553:9;15549:19;15540:6;15496:73;:::i;:::-;15579;15647:3;15636:9;15632:19;15623:6;15579:73;:::i;:::-;15122:537;;;;;;;;;:::o;15665:664::-;15870:4;15908:3;15897:9;15893:19;15885:27;;15922:71;15990:1;15979:9;15975:17;15966:6;15922:71;:::i;:::-;16003:72;16071:2;16060:9;16056:18;16047:6;16003:72;:::i;:::-;16085;16153:2;16142:9;16138:18;16129:6;16085:72;:::i;:::-;16167;16235:2;16224:9;16220:18;16211:6;16167:72;:::i;:::-;16249:73;16317:3;16306:9;16302:19;16293:6;16249:73;:::i;:::-;15875:454;;;;;;;;:::o;16335:545::-;16508:4;16546:3;16535:9;16531:19;16523:27;;16560:71;16628:1;16617:9;16613:17;16604:6;16560:71;:::i;:::-;16641:68;16705:2;16694:9;16690:18;16681:6;16641:68;:::i;:::-;16719:72;16787:2;16776:9;16772:18;16763:6;16719:72;:::i;:::-;16801;16869:2;16858:9;16854:18;16845:6;16801:72;:::i;:::-;16513:367;;;;;;;:::o;16886:313::-;16999:4;17037:2;17026:9;17022:18;17014:26;;17086:9;17080:4;17076:20;17072:1;17061:9;17057:17;17050:47;17114:78;17187:4;17178:6;17114:78;:::i;:::-;17106:86;;17004:195;;;;:::o;17205:419::-;17371:4;17409:2;17398:9;17394:18;17386:26;;17458:9;17452:4;17448:20;17444:1;17433:9;17429:17;17422:47;17486:131;17612:4;17486:131;:::i;:::-;17478:139;;17376:248;;;:::o;17630:419::-;17796:4;17834:2;17823:9;17819:18;17811:26;;17883:9;17877:4;17873:20;17869:1;17858:9;17854:17;17847:47;17911:131;18037:4;17911:131;:::i;:::-;17903:139;;17801:248;;;:::o;18055:419::-;18221:4;18259:2;18248:9;18244:18;18236:26;;18308:9;18302:4;18298:20;18294:1;18283:9;18279:17;18272:47;18336:131;18462:4;18336:131;:::i;:::-;18328:139;;18226:248;;;:::o;18480:419::-;18646:4;18684:2;18673:9;18669:18;18661:26;;18733:9;18727:4;18723:20;18719:1;18708:9;18704:17;18697:47;18761:131;18887:4;18761:131;:::i;:::-;18753:139;;18651:248;;;:::o;18905:419::-;19071:4;19109:2;19098:9;19094:18;19086:26;;19158:9;19152:4;19148:20;19144:1;19133:9;19129:17;19122:47;19186:131;19312:4;19186:131;:::i;:::-;19178:139;;19076:248;;;:::o;19330:419::-;19496:4;19534:2;19523:9;19519:18;19511:26;;19583:9;19577:4;19573:20;19569:1;19558:9;19554:17;19547:47;19611:131;19737:4;19611:131;:::i;:::-;19603:139;;19501:248;;;:::o;19755:419::-;19921:4;19959:2;19948:9;19944:18;19936:26;;20008:9;20002:4;19998:20;19994:1;19983:9;19979:17;19972:47;20036:131;20162:4;20036:131;:::i;:::-;20028:139;;19926:248;;;:::o;20180:419::-;20346:4;20384:2;20373:9;20369:18;20361:26;;20433:9;20427:4;20423:20;20419:1;20408:9;20404:17;20397:47;20461:131;20587:4;20461:131;:::i;:::-;20453:139;;20351:248;;;:::o;20605:419::-;20771:4;20809:2;20798:9;20794:18;20786:26;;20858:9;20852:4;20848:20;20844:1;20833:9;20829:17;20822:47;20886:131;21012:4;20886:131;:::i;:::-;20878:139;;20776:248;;;:::o;21030:419::-;21196:4;21234:2;21223:9;21219:18;21211:26;;21283:9;21277:4;21273:20;21269:1;21258:9;21254:17;21247:47;21311:131;21437:4;21311:131;:::i;:::-;21303:139;;21201:248;;;:::o;21455:419::-;21621:4;21659:2;21648:9;21644:18;21636:26;;21708:9;21702:4;21698:20;21694:1;21683:9;21679:17;21672:47;21736:131;21862:4;21736:131;:::i;:::-;21728:139;;21626:248;;;:::o;21880:419::-;22046:4;22084:2;22073:9;22069:18;22061:26;;22133:9;22127:4;22123:20;22119:1;22108:9;22104:17;22097:47;22161:131;22287:4;22161:131;:::i;:::-;22153:139;;22051:248;;;:::o;22305:419::-;22471:4;22509:2;22498:9;22494:18;22486:26;;22558:9;22552:4;22548:20;22544:1;22533:9;22529:17;22522:47;22586:131;22712:4;22586:131;:::i;:::-;22578:139;;22476:248;;;:::o;22730:419::-;22896:4;22934:2;22923:9;22919:18;22911:26;;22983:9;22977:4;22973:20;22969:1;22958:9;22954:17;22947:47;23011:131;23137:4;23011:131;:::i;:::-;23003:139;;22901:248;;;:::o;23155:419::-;23321:4;23359:2;23348:9;23344:18;23336:26;;23408:9;23402:4;23398:20;23394:1;23383:9;23379:17;23372:47;23436:131;23562:4;23436:131;:::i;:::-;23428:139;;23326:248;;;:::o;23580:419::-;23746:4;23784:2;23773:9;23769:18;23761:26;;23833:9;23827:4;23823:20;23819:1;23808:9;23804:17;23797:47;23861:131;23987:4;23861:131;:::i;:::-;23853:139;;23751:248;;;:::o;24005:419::-;24171:4;24209:2;24198:9;24194:18;24186:26;;24258:9;24252:4;24248:20;24244:1;24233:9;24229:17;24222:47;24286:131;24412:4;24286:131;:::i;:::-;24278:139;;24176:248;;;:::o;24430:419::-;24596:4;24634:2;24623:9;24619:18;24611:26;;24683:9;24677:4;24673:20;24669:1;24658:9;24654:17;24647:47;24711:131;24837:4;24711:131;:::i;:::-;24703:139;;24601:248;;;:::o;24855:419::-;25021:4;25059:2;25048:9;25044:18;25036:26;;25108:9;25102:4;25098:20;25094:1;25083:9;25079:17;25072:47;25136:131;25262:4;25136:131;:::i;:::-;25128:139;;25026:248;;;:::o;25280:419::-;25446:4;25484:2;25473:9;25469:18;25461:26;;25533:9;25527:4;25523:20;25519:1;25508:9;25504:17;25497:47;25561:131;25687:4;25561:131;:::i;:::-;25553:139;;25451:248;;;:::o;25705:419::-;25871:4;25909:2;25898:9;25894:18;25886:26;;25958:9;25952:4;25948:20;25944:1;25933:9;25929:17;25922:47;25986:131;26112:4;25986:131;:::i;:::-;25978:139;;25876:248;;;:::o;26130:222::-;26223:4;26261:2;26250:9;26246:18;26238:26;;26274:71;26342:1;26331:9;26327:17;26318:6;26274:71;:::i;:::-;26228:124;;;;:::o;26358:214::-;26447:4;26485:2;26474:9;26470:18;26462:26;;26498:67;26562:1;26551:9;26547:17;26538:6;26498:67;:::i;:::-;26452:120;;;;:::o;26578:99::-;26630:6;26664:5;26658:12;26648:22;;26637:40;;;:::o;26683:169::-;26767:11;26801:6;26796:3;26789:19;26841:4;26836:3;26832:14;26817:29;;26779:73;;;;:::o;26858:148::-;26960:11;26997:3;26982:18;;26972:34;;;;:::o;27012:305::-;27052:3;27071:20;27089:1;27071:20;:::i;:::-;27066:25;;27105:20;27123:1;27105:20;:::i;:::-;27100:25;;27259:1;27191:66;27187:74;27184:1;27181:81;27178:2;;;27265:18;;:::i;:::-;27178:2;27309:1;27306;27302:9;27295:16;;27056:261;;;;:::o;27323:185::-;27363:1;27380:20;27398:1;27380:20;:::i;:::-;27375:25;;27414:20;27432:1;27414:20;:::i;:::-;27409:25;;27453:1;27443:2;;27458:18;;:::i;:::-;27443:2;27500:1;27497;27493:9;27488:14;;27365:143;;;;:::o;27514:348::-;27554:7;27577:20;27595:1;27577:20;:::i;:::-;27572:25;;27611:20;27629:1;27611:20;:::i;:::-;27606:25;;27799:1;27731:66;27727:74;27724:1;27721:81;27716:1;27709:9;27702:17;27698:105;27695:2;;;27806:18;;:::i;:::-;27695:2;27854:1;27851;27847:9;27836:20;;27562:300;;;;:::o;27868:191::-;27908:4;27928:20;27946:1;27928:20;:::i;:::-;27923:25;;27962:20;27980:1;27962:20;:::i;:::-;27957:25;;28001:1;27998;27995:8;27992:2;;;28006:18;;:::i;:::-;27992:2;28051:1;28048;28044:9;28036:17;;27913:146;;;;:::o;28065:96::-;28102:7;28131:24;28149:5;28131:24;:::i;:::-;28120:35;;28110:51;;;:::o;28167:90::-;28201:7;28244:5;28237:13;28230:21;28219:32;;28209:48;;;:::o;28263:77::-;28300:7;28329:5;28318:16;;28308:32;;;:::o;28346:126::-;28383:7;28423:42;28416:5;28412:54;28401:65;;28391:81;;;:::o;28478:77::-;28515:7;28544:5;28533:16;;28523:32;;;:::o;28561:86::-;28596:7;28636:4;28629:5;28625:16;28614:27;;28604:43;;;:::o;28653:307::-;28721:1;28731:113;28745:6;28742:1;28739:13;28731:113;;;28830:1;28825:3;28821:11;28815:18;28811:1;28806:3;28802:11;28795:39;28767:2;28764:1;28760:10;28755:15;;28731:113;;;28862:6;28859:1;28856:13;28853:2;;;28942:1;28933:6;28928:3;28924:16;28917:27;28853:2;28702:258;;;;:::o;28966:320::-;29010:6;29047:1;29041:4;29037:12;29027:22;;29094:1;29088:4;29084:12;29115:18;29105:2;;29171:4;29163:6;29159:17;29149:27;;29105:2;29233;29225:6;29222:14;29202:18;29199:38;29196:2;;;29252:18;;:::i;:::-;29196:2;29017:269;;;;:::o;29292:79::-;29331:7;29360:5;29349:16;;29339:32;;;:::o;29377:180::-;29425:77;29422:1;29415:88;29522:4;29519:1;29512:15;29546:4;29543:1;29536:15;29563:180;29611:77;29608:1;29601:88;29708:4;29705:1;29698:15;29732:4;29729:1;29722:15;29749:180;29797:77;29794:1;29787:88;29894:4;29891:1;29884:15;29918:4;29915:1;29908:15;29935:102;29976:6;30027:2;30023:7;30018:2;30011:5;30007:14;30003:28;29993:38;;29983:54;;;:::o;30043:174::-;30183:26;30179:1;30171:6;30167:14;30160:50;30149:68;:::o;30223:222::-;30363:34;30359:1;30351:6;30347:14;30340:58;30432:5;30427:2;30419:6;30415:15;30408:30;30329:116;:::o;30451:220::-;30591:34;30587:1;30579:6;30575:14;30568:58;30660:3;30655:2;30647:6;30643:15;30636:28;30557:114;:::o;30677:221::-;30817:34;30813:1;30805:6;30801:14;30794:58;30886:4;30881:2;30873:6;30869:15;30862:29;30783:115;:::o;30904:225::-;31044:34;31040:1;31032:6;31028:14;31021:58;31113:8;31108:2;31100:6;31096:15;31089:33;31010:119;:::o;31135:221::-;31275:34;31271:1;31263:6;31259:14;31252:58;31344:4;31339:2;31331:6;31327:15;31320:29;31241:115;:::o;31362:162::-;31502:14;31498:1;31490:6;31486:14;31479:38;31468:56;:::o;31530:165::-;31670:17;31666:1;31658:6;31654:14;31647:41;31636:59;:::o;31701:214::-;31841:66;31837:1;31829:6;31825:14;31818:90;31807:108;:::o;31921:179::-;32061:31;32057:1;32049:6;32045:14;32038:55;32027:73;:::o;32106:225::-;32246:34;32242:1;32234:6;32230:14;32223:58;32315:8;32310:2;32302:6;32298:15;32291:33;32212:119;:::o;32337:221::-;32477:34;32473:1;32465:6;32461:14;32454:58;32546:4;32541:2;32533:6;32529:15;32522:29;32443:115;:::o;32564:221::-;32704:34;32700:1;32692:6;32688:14;32681:58;32773:4;32768:2;32760:6;32756:15;32749:29;32670:115;:::o;32791:180::-;32931:32;32927:1;32919:6;32915:14;32908:56;32897:74;:::o;32977:227::-;33117:34;33113:1;33105:6;33101:14;33094:58;33186:10;33181:2;33173:6;33169:15;33162:35;33083:121;:::o;33210:182::-;33350:34;33346:1;33338:6;33334:14;33327:58;33316:76;:::o;33398:223::-;33538:34;33534:1;33526:6;33522:14;33515:58;33607:6;33602:2;33594:6;33590:15;33583:31;33504:117;:::o;33627:220::-;33767:34;33763:1;33755:6;33751:14;33744:58;33836:3;33831:2;33823:6;33819:15;33812:28;33733:114;:::o;33853:224::-;33993:34;33989:1;33981:6;33977:14;33970:58;34062:7;34057:2;34049:6;34045:15;34038:32;33959:118;:::o;34083:223::-;34223:34;34219:1;34211:6;34207:14;34200:58;34292:6;34287:2;34279:6;34275:15;34268:31;34189:117;:::o;34312:224::-;34452:34;34448:1;34440:6;34436:14;34429:58;34521:7;34516:2;34508:6;34504:15;34497:32;34418:118;:::o;34542:181::-;34682:33;34678:1;34670:6;34666:14;34659:57;34648:75;:::o;34729:122::-;34802:24;34820:5;34802:24;:::i;:::-;34795:5;34792:35;34782:2;;34841:1;34838;34831:12;34782:2;34772:79;:::o;34857:116::-;34927:21;34942:5;34927:21;:::i;:::-;34920:5;34917:32;34907:2;;34963:1;34960;34953:12;34907:2;34897:76;:::o;34979:122::-;35052:24;35070:5;35052:24;:::i;:::-;35045:5;35042:35;35032:2;;35091:1;35088;35081:12;35032:2;35022:79;:::o;35107:122::-;35180:24;35198:5;35180:24;:::i;:::-;35173:5;35170:35;35160:2;;35219:1;35216;35209:12;35160:2;35150:79;:::o;35235:118::-;35306:22;35322:5;35306:22;:::i;:::-;35299:5;35296:33;35286:2;;35343:1;35340;35333:12;35286:2;35276:77;:::o

Swarm Source

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