ETH Price: $2,841.71 (-10.08%)
Gas: 12 Gwei

Token

Dot Ape (DOTAPE)
 

Overview

Max Total Supply

688 DOTAPE

Holders

236

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
0 DOTAPE
0x9a83877d43f3c0a4f29eea29a3403965090addac
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
dotApeErc721

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// File: dotApe/implementations/addressesImplementation.sol


pragma solidity ^0.8.7;

interface IApeAddreses {
    function owner() external view returns (address);
    function getDotApeAddress(string memory _label) external view returns (address);
}

pragma solidity ^0.8.7;

abstract contract apeAddressesImpl {
    address dotApeAddresses;

    constructor(address addresses_) {
        dotApeAddresses = addresses_;
    }

    function setAddressesImpl(address addresses_) public onlyOwner {
        dotApeAddresses = addresses_;
    }

    function owner() public view returns (address) {
        return IApeAddreses(dotApeAddresses).owner();
    }

    function getDotApeAddress(string memory _label) public view returns (address) {
        return IApeAddreses(dotApeAddresses).getDotApeAddress(_label);
    }

    modifier onlyOwner() {
        require(owner() == msg.sender, "Ownable: caller is not the owner");
        _;
    }

    modifier onlyRegistrar() {
        require(msg.sender == getDotApeAddress("registrar"), "Ownable: caller is not the registrar");
        _;
    }

    modifier onlyErc721() {
        require(msg.sender == getDotApeAddress("erc721"), "Ownable: caller is not erc721");
        _;
    }

    modifier onlyTeam() {
        require(msg.sender == getDotApeAddress("team"), "Ownable: caller is not team");
        _;
    }

}
// File: dotApe/implementations/registryImplementation.sol



pragma solidity ^0.8.7;


pragma solidity ^0.8.7;

interface IApeRegistry {
    function setRecord(bytes32 _hash, uint256 _tokenId, string memory _name, uint256 expiry_) external;
    function getTokenId(bytes32 _hash) external view returns (uint256);
    function getName(uint256 _tokenId) external view returns (string memory);
    function currentSupply() external view returns (uint256);
    function nextTokenId() external view returns (uint256);
    function addOwner(address address_) external;
    function changeOwner(address address_, uint256 tokenId_) external;
    function getOwner(uint256 tokenId) external view returns (address);
    function getExpiration(uint256 tokenId) external view returns (uint256);
    function changeExpiration(uint256 tokenId, uint256 expiration_) external;
    function setPrimaryName(address address_, uint256 tokenId) external;
}

pragma solidity ^0.8.7;

abstract contract apeRegistryImpl is apeAddressesImpl {
    
    function setRecord(bytes32 _hash, uint256 _tokenId, string memory _name, uint256 expiry_) internal {
        IApeRegistry(getDotApeAddress("registry")).setRecord(_hash, _tokenId, _name, expiry_);
    }

    function getTokenId(bytes32 _hash) internal view returns (uint256) {
        return IApeRegistry(getDotApeAddress("registry")).getTokenId(_hash);
    }

    function getName(uint256 _tokenId) internal view returns (string memory) {
        return IApeRegistry(getDotApeAddress("registry")).getName(_tokenId);     
    }

    function nextTokenId() internal view returns (uint256) {
        return IApeRegistry(getDotApeAddress("registry")).nextTokenId();
    }

    function currentSupply() internal view returns (uint256) {
        return IApeRegistry(getDotApeAddress("registry")).currentSupply();
    }

    function addOwner(address address_) internal {
        IApeRegistry(getDotApeAddress("registry")).addOwner(address_);
    }

    function changeOwner(address address_, uint256 tokenId_) internal {
        IApeRegistry(getDotApeAddress("registry")).changeOwner(address_, tokenId_);
    }

    function getOwner(uint256 tokenId) internal view returns (address) {
        return IApeRegistry(getDotApeAddress("registry")).getOwner(tokenId);
    }

    function getExpiration(uint256 tokenId) internal view returns (uint256) {
        return IApeRegistry(getDotApeAddress("registry")).getExpiration(tokenId);
    }

    function changeExpiration(uint256 tokenId, uint256 expiration_) internal {
        return IApeRegistry(getDotApeAddress("registry")).changeExpiration(tokenId, expiration_);
    }

    function setPrimaryName(address address_, uint256 tokenId) internal {
        return IApeRegistry(getDotApeAddress("registry")).setPrimaryName(address_, tokenId);
    }
}
// File: dotApe/erc721.sol



// File: dotApe/implementations/addressesImplementation.sol


pragma solidity ^0.8.7;


pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

        if (value == 0) {
            return "0";
        }
        uint256 temp = value;
        uint256 digits;
        while (temp != 0) {
            digits++;
            temp /= 10;
        }
        bytes memory buffer = new bytes(digits);
        while (value != 0) {
            digits -= 1;
            buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
            value /= 10;
        }
        return string(buffer);
    }

}

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


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

pragma solidity ^0.8.0;

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

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

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


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

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

/**
 * @title ERC721 token receiver interface
 * @dev Interface for any contract that wants to support safeTransfers
 * from ERC721 asset contracts.
 */
interface IERC721Receiver {
    /**
     * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
     * by `operator` from `from`, this function is called.
     *
     * It must return its Solidity selector to confirm the token transfer.
     * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
     *
     * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
     */
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721.sol


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

pragma solidity ^0.8.0;


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

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

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

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

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

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

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

    /**
     * @dev Transfers `tokenId` token from `from` to `to`.
     *
     * WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
     * or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
     * understand this adds an external call which potentially creates a reentrancy vulnerability.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
     *
     * Emits a {Transfer} event.
     */
    function transferFrom(address from, address to, uint256 tokenId) external;

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

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

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol)

pragma solidity ^0.8.0;


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

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

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

// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;


/**
 * @title ERC-721 Non-Fungible Token Standard, optional metadata extension
 * @dev See https://eips.ethereum.org/EIPS/eip-721
 */
interface IERC721Metadata is IERC721 {
    /**
     * @dev Returns the token collection name.
     */
    function name() external view returns (string memory);

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

    /**
     * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
     */
    function tokenURI(uint256 tokenId) external view returns (string memory);
}

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

pragma solidity ^0.8.0;

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension, but not including the Enumerable extension, which is available separately as
 * {ERC721Enumerable}.
 */
abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, apeRegistryImpl {
    using Address for address;
    using Strings for uint256;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    bool isContractActive = true;

    function flipContractActive() public onlyOwner {
        isContractActive = !isContractActive;
    }
    /**
     * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
     */
    constructor(string memory name_, string memory symbol_, address addresses_) apeAddressesImpl(addresses_) {
        _name = name_;
        _symbol = symbol_;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");

        uint count;
        for( uint i; i <= currentSupply(); ++i ){
          if( owner == getOwner(i) )
            ++count;
        }
        return count;
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        require(isContractActive, "Contract is not active");
        address owner = getOwner(tokenId);
        require(owner != address(0), "ERC721: invalid token ID");
        return owner;
    }

    /**
     * @dev See {IERC721Metadata-name}.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    /**
     * @dev See {IERC721Metadata-symbol}.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner || isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not token owner or approved for all"
        );

        _approve(to, tokenId);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
       require(_exists(tokenId), "ERC721: invalid token ID");

        return _tokenApprovals[tokenId];
    }

    /**
     * @dev See {IERC721-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC721-isApprovedForAll}.
     */
    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    /**
     * @dev See {IERC721-transferFrom}.
     */
    function transferFrom(address from, address to, uint256 tokenId) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner or approved");

        _transfer(from, to, tokenId);
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: caller is not token owner or approved");
        _safeTransfer(from, to, tokenId, data);
    }

    /**
     * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
     * are aware of the ERC721 protocol to prevent tokens from being forever locked.
     *
     * `data` is additional data, it has no specified format and it is sent in call to `to`.
     *
     * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
     * implement alternative mechanisms to perform token transfer, such as signature-based.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `tokenId` token must exist and be owned by `from`.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeTransfer(address from, address to, uint256 tokenId, bytes memory data) internal virtual {
        _transfer(from, to, tokenId);
        require(_checkOnERC721Received(from, to, tokenId, data), "ERC721: transfer to non ERC721Receiver implementer");
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     * and stop existing when they are burned (`_burn`).
     */
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return tokenId < currentSupply() && getOwner(tokenId) != address(0);
    }

    /**
     * @dev Returns whether `spender` is allowed to manage `tokenId`.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     */
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || isApprovedForAll(owner, spender) || getApproved(tokenId) == spender) || spender == getDotApeAddress("transferHelper");
    }

    /**
     * @dev Safely mints `tokenId` and transfers it to `to`.
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }

    /**
     * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
     * forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
     */
    function _safeMint(address to, uint256 tokenId, bytes memory data) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    /**
     * @dev Mints `tokenId` and transfers it to `to`.
     *
     * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
     *
     * Requirements:
     *
     * - `tokenId` must not exist.
     * - `to` cannot be the zero address.
     *
     * Emits a {Transfer} event.
     */
    function _mint(address to, uint256 tokenId) internal virtual {
        require(isContractActive, "Contract is not active");
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

        _beforeTokenTransfer(address(0), to, tokenId, 1);

        // Check that tokenId was not minted by `_beforeTokenTransfer` hook
        require(!_exists(tokenId), "ERC721: token already minted");

        addOwner(to);

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId, 1);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *  As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(address from, address to, uint256 tokenId) internal virtual {
        require(isContractActive, "Contract is not active");
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");
        require(to != address(0), "ERC721: transfer to the zero address");
        require(getOwner(tokenId) != getDotApeAddress("expiredVault"), "Unable to transfer while expired.");

        _beforeTokenTransfer(from, to, tokenId, 1);

        // Check that tokenId was not transferred by `_beforeTokenTransfer` hook
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner");

        // Clear approvals from the previous owner
        delete _tokenApprovals[tokenId];

        changeOwner(to, tokenId);

        emit Transfer(from, to, tokenId);

        _afterTokenTransfer(from, to, tokenId, 1);
    }

    function _safeTransferExpired(address to, uint256 tokenId) internal virtual {
        _transferExpired(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, ""),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _transferExpired(address to, uint256 tokenId) internal virtual {
        require(isContractActive, "Contract is not active");
        require(ERC721.ownerOf(tokenId) == getDotApeAddress("expiredVault"), "Not expired");
        require(to != address(0), "ERC721: transfer to the zero address");

        _beforeTokenTransfer(address(0), to, tokenId, 1);

        // Check that tokenId was not transferred by `_beforeTokenTransfer` hook
        require(ERC721.ownerOf(tokenId) == getDotApeAddress("expiredVault"), "Not expired");

        // Clear approvals from the previous owner
        delete _tokenApprovals[tokenId];

        changeOwner(to, tokenId);

        emit Transfer(address(0), to, tokenId);

        _afterTokenTransfer(address(0), to, tokenId, 1);
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits an {Approval} event.
     */
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(address owner, address operator, bool approved) internal virtual {
        require(owner != operator, "ERC721: approve to caller");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
     * The call is not executed if the target address is not a contract.
     *
     * @param from address representing the previous owner of the given token ID
     * @param to target address that will receive the tokens
     * @param tokenId uint256 ID of the token to be transferred
     * @param data bytes optional data to send along with the call
     * @return bool whether the call correctly returned the expected magic value
     */
    function _checkOnERC721Received(
        address from,
        address to,
        uint256 tokenId,
        bytes memory data
    ) private returns (bool) {
        if (to.isContract()) {
            try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
                return retval == IERC721Receiver.onERC721Received.selector;
            } catch (bytes memory reason) {
                if (reason.length == 0) {
                    revert("ERC721: transfer to non ERC721Receiver implementer");
                } else {
                    /// @solidity memory-safe-assembly
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting and burning. If {ERC721Consecutive} is
     * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s tokens will be transferred to `to`.
     * - When `from` is zero, the tokens will be minted for `to`.
     * - When `to` is zero, ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     * - `batchSize` is non-zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(address from, address to, uint256 firstTokenId, uint256 batchSize) internal virtual {}

    /**
     * @dev Hook that is called after any token transfer. This includes minting and burning. If {ERC721Consecutive} is
     * used, the hook may be called as part of a consecutive (batch) mint, as indicated by `batchSize` greater than 1.
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, ``from``'s tokens were transferred to `to`.
     * - When `from` is zero, the tokens were minted for `to`.
     * - When `to` is zero, ``from``'s tokens were burned.
     * - `from` and `to` are never both zero.
     * - `batchSize` is non-zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(address from, address to, uint256 firstTokenId, uint256 batchSize) internal virtual {}

    
}

// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol


// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/extensions/ERC721Enumerable.sol)


pragma solidity ^0.8.0;

/**
 * @dev This implements an optional extension of {ERC721} defined in the EIP that adds
 * enumerability of all the token ids in the contract as well as all token ids owned by each
 * account.
 */
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {

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

    /**
     * @dev See {IERC721Enumerable-tokenByIndex}.
     */
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < currentSupply(), "ERC721Enumerable: global index out of bounds");
        return index + 1;
    }

    /**
     * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
     */
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256 tokenId) {
        require(index < balanceOf(owner), "ERC721Enumerable: owner index out of bounds");

        uint count;
        for(uint i = 1; i <= currentSupply(); i++){
            if(owner == ownerOf(i)){
                if(count == index) return i;
                else count++;
            }
        }

        revert("ERC721Enumerable: owner index out of bounds");
    }
}

// File: dotApe/erc721.sol
pragma solidity 0.8.7;

abstract contract URI is ERC721, ERC721Enumerable {

    string public baseURI;

    constructor(string memory _baseURI) {
        baseURI = _baseURI;
    }

    function setBaseURI(string memory _baseURI) public onlyOwner  {
        baseURI = _baseURI;
    }

    function tokenURI(uint256 _tokenId) public view override returns (string memory) {
        return string(abi.encodePacked(baseURI, Strings.toString(_tokenId)));
    }
}

pragma solidity ^0.8.7;

contract dotApeErc721 is URI {

    constructor(address addresses_) ERC721("Dot Ape", "DOTAPE", addresses_) URI("")  {}

    function mint(address to) public onlyRegistrar {
        uint256 tokenId = nextTokenId();
        _safeMint(to, tokenId);
    }

    function transferExpired(address to, uint256 tokenId) public onlyRegistrar {
        _safeTransferExpired(to, tokenId);
    }

}

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":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipContractActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"string","name":"_label","type":"string"}],"name":"getDotApeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addresses_","type":"address"}],"name":"setAddressesImpl","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferExpired","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600560006101000a81548160ff0219169083151502179055503480156200002c57600080fd5b5060405162003efd38038062003efd83398181016040528101906200005291906200022e565b604051806020016040528060008152506040518060400160405280600781526020017f446f7420417065000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f444f5441504500000000000000000000000000000000000000000000000000008152508380806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505082600190805190602001906200012992919062000167565b5081600290805190602001906200014292919062000167565b5050505080600690805190602001906200015e92919062000167565b50505062000318565b828054620001759062000294565b90600052602060002090601f016020900481019282620001995760008555620001e5565b82601f10620001b457805160ff1916838001178555620001e5565b82800160010185558215620001e5579182015b82811115620001e4578251825591602001919060010190620001c7565b5b509050620001f49190620001f8565b5090565b5b8082111562000213576000816000905550600101620001f9565b5090565b6000815190506200022881620002fe565b92915050565b600060208284031215620002475762000246620002f9565b5b6000620002578482850162000217565b91505092915050565b60006200026d8262000274565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006002820490506001821680620002ad57607f821691505b60208210811415620002c457620002c3620002ca565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b620003098162000260565b81146200031557600080fd5b50565b613bd580620003286000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80636352211e116100c35780638fd4345b1161007c5780638fd4345b146103d757806395d89b41146103f3578063a22cb46514610411578063b88d4fde1461042d578063c87b56dd14610449578063e985e9c51461047957610158565b80636352211e146102ef5780636a6278421461031f5780636c0360eb1461033b57806370a082311461035957806383311868146103895780638da5cb5b146103b957610158565b806323b872dd1161011557806323b872dd1461021f5780632f745c591461023b57806342842e0e1461026b57806348803ba0146102875780634f6ccce7146102a357806355f804b3146102d357610158565b806301ffc9a71461015d57806306fdde031461018d578063081812fc146101ab578063095ea7b3146101db5780630b833e59146101f757806318160ddd14610201575b600080fd5b61017760048036038101906101729190612a74565b6104a9565b6040516101849190612fea565b60405180910390f35b61019561058b565b6040516101a29190613005565b60405180910390f35b6101c560048036038101906101c09190612b17565b61061d565b6040516101d29190612f5a565b60405180910390f35b6101f560048036038101906101f09190612a34565b6106a2565b005b6101ff6107ba565b005b61020961085b565b6040516102169190613267565b60405180910390f35b6102396004803603810190610234919061291e565b61086a565b005b61025560048036038101906102509190612a34565b6108ca565b6040516102629190613267565b60405180910390f35b6102856004803603810190610280919061291e565b6109de565b005b6102a1600480360381019061029c9190612a34565b6109fe565b005b6102bd60048036038101906102b89190612b17565b610ab7565b6040516102ca9190613267565b60405180910390f35b6102ed60048036038101906102e89190612ace565b610b16565b005b61030960048036038101906103049190612b17565b610ba5565b6040516103169190612f5a565b60405180910390f35b61033960048036038101906103349190612884565b610c7c565b005b610343610d41565b6040516103509190613005565b60405180910390f35b610373600480360381019061036e9190612884565b610dcf565b6040516103809190613267565b60405180910390f35b6103a3600480360381019061039e9190612ace565b610eb6565b6040516103b09190612f5a565b60405180910390f35b6103c1610f69565b6040516103ce9190612f5a565b60405180910390f35b6103f160048036038101906103ec9190612884565b61100f565b005b6103fb6110c7565b6040516104089190613005565b60405180910390f35b61042b600480360381019061042691906129f4565b611159565b005b61044760048036038101906104429190612971565b61116f565b005b610463600480360381019061045e9190612b17565b6111d1565b6040516104709190613005565b60405180910390f35b610493600480360381019061048e91906128de565b611205565b6040516104a09190612fea565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061057457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610584575061058382611299565b5b9050919050565b60606001805461059a906134d2565b80601f01602080910402602001604051908101604052809291908181526020018280546105c6906134d2565b80156106135780601f106105e857610100808354040283529160200191610613565b820191906000526020600020905b8154815290600101906020018083116105f657829003601f168201915b5050505050905090565b600061062882611303565b610667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065e906131c7565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106ad82610ba5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561071e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610715906131e7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661073d611357565b73ffffffffffffffffffffffffffffffffffffffff16148061076c575061076b81610766611357565b611205565b5b6107ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a290613207565b60405180910390fd5b6107b5838361135f565b505050565b3373ffffffffffffffffffffffffffffffffffffffff166107d9610f69565b73ffffffffffffffffffffffffffffffffffffffff161461082f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610826906131a7565b60405180910390fd5b600560009054906101000a900460ff1615600560006101000a81548160ff021916908315150217905550565b6000610865611418565b905090565b61087b610875611357565b826114da565b6108ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b190613027565b60405180910390fd5b6108c58383836115e2565b505050565b60006108d583610dcf565b8210610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90613047565b60405180910390fd5b600080600190505b610926611418565b811161099c5761093581610ba5565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610989578382141561097a5780925050506109d8565b818061098590613535565b9250505b808061099490613535565b91505061091e565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cf90613047565b60405180910390fd5b92915050565b6109f98383836040518060200160405280600081525061116f565b505050565b610a3c6040518060400160405280600981526020017f7265676973747261720000000000000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa090613247565b60405180910390fd5b610ab382826118fb565b5050565b6000610ac1611418565b8210610b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af990613227565b60405180910390fd5b600182610b0f9190613361565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff16610b35610f69565b73ffffffffffffffffffffffffffffffffffffffff1614610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b82906131a7565b60405180910390fd5b8060069080519060200190610ba192919061266e565b5050565b6000600560009054906101000a900460ff16610bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bed90613187565b60405180910390fd5b6000610c0183611964565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6a906131c7565b60405180910390fd5b80915050919050565b610cba6040518060400160405280600981526020017f7265676973747261720000000000000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e90613247565b60405180910390fd5b6000610d31611a33565b9050610d3d8282611af5565b5050565b60068054610d4e906134d2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7a906134d2565b8015610dc75780601f10610d9c57610100808354040283529160200191610dc7565b820191906000526020600020905b815481529060010190602001808311610daa57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3790613107565b60405180910390fd5b6000805b610e4c611418565b8111610eac57610e5b81611964565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610e9b5781610e9890613535565b91505b80610ea590613535565b9050610e44565b5080915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166383311868836040518263ffffffff1660e01b8152600401610f129190613005565b60206040518083038186803b158015610f2a57600080fd5b505afa158015610f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6291906128b1565b9050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fd257600080fd5b505afa158015610fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100a91906128b1565b905090565b3373ffffffffffffffffffffffffffffffffffffffff1661102e610f69565b73ffffffffffffffffffffffffffffffffffffffff1614611084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107b906131a7565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600280546110d6906134d2565b80601f0160208091040260200160405190810160405280929190818152602001828054611102906134d2565b801561114f5780601f106111245761010080835404028352916020019161114f565b820191906000526020600020905b81548152906001019060200180831161113257829003601f168201915b5050505050905090565b61116b611164611357565b8383611b13565b5050565b61118061117a611357565b836114da565b6111bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b690613027565b60405180910390fd5b6111cb84848484611c80565b50505050565b606060066111de83611cdc565b6040516020016111ef929190612f36565b6040516020818303038152906040529050919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600061130d611418565b821080156113505750600073ffffffffffffffffffffffffffffffffffffffff1661133783611964565b73ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b600033905090565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166113d283610ba5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006114586040518060400160405280600881526020017f7265676973747279000000000000000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff1663771282f66040518163ffffffff1660e01b815260040160206040518083038186803b15801561149d57600080fd5b505afa1580156114b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d59190612b44565b905090565b6000806114e683610ba5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061152857506115278185611205565b5b8061156657508373ffffffffffffffffffffffffffffffffffffffff1661154e8461061d565b73ffffffffffffffffffffffffffffffffffffffff16145b806115d957506115aa6040518060400160405280600e81526020017f7472616e7366657248656c706572000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b600560009054906101000a900460ff16611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890613187565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1661165182610ba5565b73ffffffffffffffffffffffffffffffffffffffff16146116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e90613087565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e906130c7565b60405180910390fd5b6117556040518060400160405280600c81526020017f657870697265645661756c740000000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff1661177482611964565b73ffffffffffffffffffffffffffffffffffffffff1614156117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c290613127565b60405180910390fd5b6117d88383836001611e3d565b8273ffffffffffffffffffffffffffffffffffffffff166117f882610ba5565b73ffffffffffffffffffffffffffffffffffffffff161461184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184590613087565b60405180910390fd5b6003600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561188e8282611e43565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46118f68383836001611ef1565b505050565b6119058282611ef7565b61192160008383604051806020016040528060008152506121d8565b611960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195790613067565b60405180910390fd5b5050565b60006119a46040518060400160405280600881526020017f7265676973747279000000000000000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff1663c41a360a836040518263ffffffff1660e01b81526004016119dc9190613267565b60206040518083038186803b1580156119f457600080fd5b505afa158015611a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2c91906128b1565b9050919050565b6000611a736040518060400160405280600881526020017f7265676973747279000000000000000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff166375794a3c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ab857600080fd5b505afa158015611acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af09190612b44565b905090565b611b0f82826040518060200160405280600081525061236f565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b79906130e7565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c739190612fea565b60405180910390a3505050565b611c8b8484846115e2565b611c97848484846121d8565b611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd90613067565b60405180910390fd5b50505050565b60606000821415611d24576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611e38565b600082905060005b60008214611d56578080611d3f90613535565b915050600a82611d4f91906133b7565b9150611d2c565b60008167ffffffffffffffff811115611d7257611d7161366b565b5b6040519080825280601f01601f191660200182016040528015611da45781602001600182028036833780820191505090505b5090505b60008514611e3157600182611dbd91906133e8565b9150600a85611dcc919061357e565b6030611dd89190613361565b60f81b818381518110611dee57611ded61363c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611e2a91906133b7565b9450611da8565b8093505050505b919050565b50505050565b611e816040518060400160405280600881526020017f7265676973747279000000000000000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff166356df3db183836040518363ffffffff1660e01b8152600401611ebb929190612fc1565b600060405180830381600087803b158015611ed557600080fd5b505af1158015611ee9573d6000803e3d6000fd5b505050505050565b50505050565b600560009054906101000a900460ff16611f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3d90613187565b60405180910390fd5b611f846040518060400160405280600c81526020017f657870697265645661756c740000000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff16611fa382610ba5565b73ffffffffffffffffffffffffffffffffffffffff1614611ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff090613147565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612069576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612060906130c7565b60405180910390fd5b612077600083836001611e3d565b6120b56040518060400160405280600c81526020017f657870697265645661756c740000000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff166120d482610ba5565b73ffffffffffffffffffffffffffffffffffffffff161461212a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212190613147565b60405180910390fd5b6003600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561216a8282611e43565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121d4600083836001611ef1565b5050565b60006121f98473ffffffffffffffffffffffffffffffffffffffff166123ca565b15612362578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612222611357565b8786866040518563ffffffff1660e01b81526004016122449493929190612f75565b602060405180830381600087803b15801561225e57600080fd5b505af192505050801561228f57506040513d601f19601f8201168201806040525081019061228c9190612aa1565b60015b612312573d80600081146122bf576040519150601f19603f3d011682016040523d82523d6000602084013e6122c4565b606091505b5060008151141561230a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230190613067565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612367565b600190505b949350505050565b61237983836123ed565b61238660008484846121d8565b6123c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bc90613067565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600560009054906101000a900460ff1661243c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243390613187565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a390613167565b60405180910390fd5b6124b581611303565b156124f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ec906130a7565b60405180910390fd5b612503600083836001611e3d565b61250c81611303565b1561254c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612543906130a7565b60405180910390fd5b612555826125c3565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125bf600083836001611ef1565b5050565b6126016040518060400160405280600881526020017f7265676973747279000000000000000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff16637065cb48826040518263ffffffff1660e01b81526004016126399190612f5a565b600060405180830381600087803b15801561265357600080fd5b505af1158015612667573d6000803e3d6000fd5b5050505050565b82805461267a906134d2565b90600052602060002090601f01602090048101928261269c57600085556126e3565b82601f106126b557805160ff19168380011785556126e3565b828001600101855582156126e3579182015b828111156126e25782518255916020019190600101906126c7565b5b5090506126f091906126f4565b5090565b5b8082111561270d5760008160009055506001016126f5565b5090565b600061272461271f846132a7565b613282565b9050828152602081018484840111156127405761273f61369f565b5b61274b848285613490565b509392505050565b6000612766612761846132d8565b613282565b9050828152602081018484840111156127825761278161369f565b5b61278d848285613490565b509392505050565b6000813590506127a481613b43565b92915050565b6000815190506127b981613b43565b92915050565b6000813590506127ce81613b5a565b92915050565b6000813590506127e381613b71565b92915050565b6000815190506127f881613b71565b92915050565b600082601f8301126128135761281261369a565b5b8135612823848260208601612711565b91505092915050565b600082601f8301126128415761284061369a565b5b8135612851848260208601612753565b91505092915050565b60008135905061286981613b88565b92915050565b60008151905061287e81613b88565b92915050565b60006020828403121561289a576128996136a9565b5b60006128a884828501612795565b91505092915050565b6000602082840312156128c7576128c66136a9565b5b60006128d5848285016127aa565b91505092915050565b600080604083850312156128f5576128f46136a9565b5b600061290385828601612795565b925050602061291485828601612795565b9150509250929050565b600080600060608486031215612937576129366136a9565b5b600061294586828701612795565b935050602061295686828701612795565b92505060406129678682870161285a565b9150509250925092565b6000806000806080858703121561298b5761298a6136a9565b5b600061299987828801612795565b94505060206129aa87828801612795565b93505060406129bb8782880161285a565b925050606085013567ffffffffffffffff8111156129dc576129db6136a4565b5b6129e8878288016127fe565b91505092959194509250565b60008060408385031215612a0b57612a0a6136a9565b5b6000612a1985828601612795565b9250506020612a2a858286016127bf565b9150509250929050565b60008060408385031215612a4b57612a4a6136a9565b5b6000612a5985828601612795565b9250506020612a6a8582860161285a565b9150509250929050565b600060208284031215612a8a57612a896136a9565b5b6000612a98848285016127d4565b91505092915050565b600060208284031215612ab757612ab66136a9565b5b6000612ac5848285016127e9565b91505092915050565b600060208284031215612ae457612ae36136a9565b5b600082013567ffffffffffffffff811115612b0257612b016136a4565b5b612b0e8482850161282c565b91505092915050565b600060208284031215612b2d57612b2c6136a9565b5b6000612b3b8482850161285a565b91505092915050565b600060208284031215612b5a57612b596136a9565b5b6000612b688482850161286f565b91505092915050565b612b7a8161341c565b82525050565b612b898161342e565b82525050565b6000612b9a8261331e565b612ba48185613334565b9350612bb481856020860161349f565b612bbd816136ae565b840191505092915050565b6000612bd382613329565b612bdd8185613345565b9350612bed81856020860161349f565b612bf6816136ae565b840191505092915050565b6000612c0c82613329565b612c168185613356565b9350612c2681856020860161349f565b80840191505092915050565b60008154612c3f816134d2565b612c498186613356565b94506001821660008114612c645760018114612c7557612ca8565b60ff19831686528186019350612ca8565b612c7e85613309565b60005b83811015612ca057815481890152600182019150602081019050612c81565b838801955050505b50505092915050565b6000612cbe602d83613345565b9150612cc9826136bf565b604082019050919050565b6000612ce1602b83613345565b9150612cec8261370e565b604082019050919050565b6000612d04603283613345565b9150612d0f8261375d565b604082019050919050565b6000612d27602583613345565b9150612d32826137ac565b604082019050919050565b6000612d4a601c83613345565b9150612d55826137fb565b602082019050919050565b6000612d6d602483613345565b9150612d7882613824565b604082019050919050565b6000612d90601983613345565b9150612d9b82613873565b602082019050919050565b6000612db3602a83613345565b9150612dbe8261389c565b604082019050919050565b6000612dd6602183613345565b9150612de1826138eb565b604082019050919050565b6000612df9600b83613345565b9150612e048261393a565b602082019050919050565b6000612e1c602083613345565b9150612e2782613963565b602082019050919050565b6000612e3f601683613345565b9150612e4a8261398c565b602082019050919050565b6000612e62602083613345565b9150612e6d826139b5565b602082019050919050565b6000612e85601883613345565b9150612e90826139de565b602082019050919050565b6000612ea8602183613345565b9150612eb382613a07565b604082019050919050565b6000612ecb603d83613345565b9150612ed682613a56565b604082019050919050565b6000612eee602c83613345565b9150612ef982613aa5565b604082019050919050565b6000612f11602483613345565b9150612f1c82613af4565b604082019050919050565b612f3081613486565b82525050565b6000612f428285612c32565b9150612f4e8284612c01565b91508190509392505050565b6000602082019050612f6f6000830184612b71565b92915050565b6000608082019050612f8a6000830187612b71565b612f976020830186612b71565b612fa46040830185612f27565b8181036060830152612fb68184612b8f565b905095945050505050565b6000604082019050612fd66000830185612b71565b612fe36020830184612f27565b9392505050565b6000602082019050612fff6000830184612b80565b92915050565b6000602082019050818103600083015261301f8184612bc8565b905092915050565b6000602082019050818103600083015261304081612cb1565b9050919050565b6000602082019050818103600083015261306081612cd4565b9050919050565b6000602082019050818103600083015261308081612cf7565b9050919050565b600060208201905081810360008301526130a081612d1a565b9050919050565b600060208201905081810360008301526130c081612d3d565b9050919050565b600060208201905081810360008301526130e081612d60565b9050919050565b6000602082019050818103600083015261310081612d83565b9050919050565b6000602082019050818103600083015261312081612da6565b9050919050565b6000602082019050818103600083015261314081612dc9565b9050919050565b6000602082019050818103600083015261316081612dec565b9050919050565b6000602082019050818103600083015261318081612e0f565b9050919050565b600060208201905081810360008301526131a081612e32565b9050919050565b600060208201905081810360008301526131c081612e55565b9050919050565b600060208201905081810360008301526131e081612e78565b9050919050565b6000602082019050818103600083015261320081612e9b565b9050919050565b6000602082019050818103600083015261322081612ebe565b9050919050565b6000602082019050818103600083015261324081612ee1565b9050919050565b6000602082019050818103600083015261326081612f04565b9050919050565b600060208201905061327c6000830184612f27565b92915050565b600061328c61329d565b90506132988282613504565b919050565b6000604051905090565b600067ffffffffffffffff8211156132c2576132c161366b565b5b6132cb826136ae565b9050602081019050919050565b600067ffffffffffffffff8211156132f3576132f261366b565b5b6132fc826136ae565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061336c82613486565b915061337783613486565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133ac576133ab6135af565b5b828201905092915050565b60006133c282613486565b91506133cd83613486565b9250826133dd576133dc6135de565b5b828204905092915050565b60006133f382613486565b91506133fe83613486565b925082821015613411576134106135af565b5b828203905092915050565b600061342782613466565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156134bd5780820151818401526020810190506134a2565b838111156134cc576000848401525b50505050565b600060028204905060018216806134ea57607f821691505b602082108114156134fe576134fd61360d565b5b50919050565b61350d826136ae565b810181811067ffffffffffffffff8211171561352c5761352b61366b565b5b80604052505050565b600061354082613486565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613573576135726135af565b5b600182019050919050565b600061358982613486565b915061359483613486565b9250826135a4576135a36135de565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f556e61626c6520746f207472616e73666572207768696c65206578706972656460008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f742065787069726564000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f436f6e7472616374206973206e6f742061637469766500000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f742074686520726567697360008201527f7472617200000000000000000000000000000000000000000000000000000000602082015250565b613b4c8161341c565b8114613b5757600080fd5b50565b613b638161342e565b8114613b6e57600080fd5b50565b613b7a8161343a565b8114613b8557600080fd5b50565b613b9181613486565b8114613b9c57600080fd5b5056fea2646970667358221220fc96dec4faaf4a4ed49c721eb9abf82aeeda1411b8e671a0395918f0ab41867a64736f6c634300080700330000000000000000000000002da159f7841717a9b8bc96a9e652d1be3d6eeec4

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101585760003560e01c80636352211e116100c35780638fd4345b1161007c5780638fd4345b146103d757806395d89b41146103f3578063a22cb46514610411578063b88d4fde1461042d578063c87b56dd14610449578063e985e9c51461047957610158565b80636352211e146102ef5780636a6278421461031f5780636c0360eb1461033b57806370a082311461035957806383311868146103895780638da5cb5b146103b957610158565b806323b872dd1161011557806323b872dd1461021f5780632f745c591461023b57806342842e0e1461026b57806348803ba0146102875780634f6ccce7146102a357806355f804b3146102d357610158565b806301ffc9a71461015d57806306fdde031461018d578063081812fc146101ab578063095ea7b3146101db5780630b833e59146101f757806318160ddd14610201575b600080fd5b61017760048036038101906101729190612a74565b6104a9565b6040516101849190612fea565b60405180910390f35b61019561058b565b6040516101a29190613005565b60405180910390f35b6101c560048036038101906101c09190612b17565b61061d565b6040516101d29190612f5a565b60405180910390f35b6101f560048036038101906101f09190612a34565b6106a2565b005b6101ff6107ba565b005b61020961085b565b6040516102169190613267565b60405180910390f35b6102396004803603810190610234919061291e565b61086a565b005b61025560048036038101906102509190612a34565b6108ca565b6040516102629190613267565b60405180910390f35b6102856004803603810190610280919061291e565b6109de565b005b6102a1600480360381019061029c9190612a34565b6109fe565b005b6102bd60048036038101906102b89190612b17565b610ab7565b6040516102ca9190613267565b60405180910390f35b6102ed60048036038101906102e89190612ace565b610b16565b005b61030960048036038101906103049190612b17565b610ba5565b6040516103169190612f5a565b60405180910390f35b61033960048036038101906103349190612884565b610c7c565b005b610343610d41565b6040516103509190613005565b60405180910390f35b610373600480360381019061036e9190612884565b610dcf565b6040516103809190613267565b60405180910390f35b6103a3600480360381019061039e9190612ace565b610eb6565b6040516103b09190612f5a565b60405180910390f35b6103c1610f69565b6040516103ce9190612f5a565b60405180910390f35b6103f160048036038101906103ec9190612884565b61100f565b005b6103fb6110c7565b6040516104089190613005565b60405180910390f35b61042b600480360381019061042691906129f4565b611159565b005b61044760048036038101906104429190612971565b61116f565b005b610463600480360381019061045e9190612b17565b6111d1565b6040516104709190613005565b60405180910390f35b610493600480360381019061048e91906128de565b611205565b6040516104a09190612fea565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061057457507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610584575061058382611299565b5b9050919050565b60606001805461059a906134d2565b80601f01602080910402602001604051908101604052809291908181526020018280546105c6906134d2565b80156106135780601f106105e857610100808354040283529160200191610613565b820191906000526020600020905b8154815290600101906020018083116105f657829003601f168201915b5050505050905090565b600061062882611303565b610667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065e906131c7565b60405180910390fd5b6003600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006106ad82610ba5565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561071e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610715906131e7565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661073d611357565b73ffffffffffffffffffffffffffffffffffffffff16148061076c575061076b81610766611357565b611205565b5b6107ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107a290613207565b60405180910390fd5b6107b5838361135f565b505050565b3373ffffffffffffffffffffffffffffffffffffffff166107d9610f69565b73ffffffffffffffffffffffffffffffffffffffff161461082f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610826906131a7565b60405180910390fd5b600560009054906101000a900460ff1615600560006101000a81548160ff021916908315150217905550565b6000610865611418565b905090565b61087b610875611357565b826114da565b6108ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108b190613027565b60405180910390fd5b6108c58383836115e2565b505050565b60006108d583610dcf565b8210610916576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090d90613047565b60405180910390fd5b600080600190505b610926611418565b811161099c5761093581610ba5565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610989578382141561097a5780925050506109d8565b818061098590613535565b9250505b808061099490613535565b91505061091e565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109cf90613047565b60405180910390fd5b92915050565b6109f98383836040518060200160405280600081525061116f565b505050565b610a3c6040518060400160405280600981526020017f7265676973747261720000000000000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610aa9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa090613247565b60405180910390fd5b610ab382826118fb565b5050565b6000610ac1611418565b8210610b02576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af990613227565b60405180910390fd5b600182610b0f9190613361565b9050919050565b3373ffffffffffffffffffffffffffffffffffffffff16610b35610f69565b73ffffffffffffffffffffffffffffffffffffffff1614610b8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b82906131a7565b60405180910390fd5b8060069080519060200190610ba192919061266e565b5050565b6000600560009054906101000a900460ff16610bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bed90613187565b60405180910390fd5b6000610c0183611964565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610c73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6a906131c7565b60405180910390fd5b80915050919050565b610cba6040518060400160405280600981526020017f7265676973747261720000000000000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1e90613247565b60405180910390fd5b6000610d31611a33565b9050610d3d8282611af5565b5050565b60068054610d4e906134d2565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7a906134d2565b8015610dc75780601f10610d9c57610100808354040283529160200191610dc7565b820191906000526020600020905b815481529060010190602001808311610daa57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3790613107565b60405180910390fd5b6000805b610e4c611418565b8111610eac57610e5b81611964565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610e9b5781610e9890613535565b91505b80610ea590613535565b9050610e44565b5080915050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166383311868836040518263ffffffff1660e01b8152600401610f129190613005565b60206040518083038186803b158015610f2a57600080fd5b505afa158015610f3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6291906128b1565b9050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16638da5cb5b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610fd257600080fd5b505afa158015610fe6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061100a91906128b1565b905090565b3373ffffffffffffffffffffffffffffffffffffffff1661102e610f69565b73ffffffffffffffffffffffffffffffffffffffff1614611084576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107b906131a7565b60405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6060600280546110d6906134d2565b80601f0160208091040260200160405190810160405280929190818152602001828054611102906134d2565b801561114f5780601f106111245761010080835404028352916020019161114f565b820191906000526020600020905b81548152906001019060200180831161113257829003601f168201915b5050505050905090565b61116b611164611357565b8383611b13565b5050565b61118061117a611357565b836114da565b6111bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b690613027565b60405180910390fd5b6111cb84848484611c80565b50505050565b606060066111de83611cdc565b6040516020016111ef929190612f36565b6040516020818303038152906040529050919050565b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600061130d611418565b821080156113505750600073ffffffffffffffffffffffffffffffffffffffff1661133783611964565b73ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b600033905090565b816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166113d283610ba5565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006114586040518060400160405280600881526020017f7265676973747279000000000000000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff1663771282f66040518163ffffffff1660e01b815260040160206040518083038186803b15801561149d57600080fd5b505afa1580156114b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114d59190612b44565b905090565b6000806114e683610ba5565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061152857506115278185611205565b5b8061156657508373ffffffffffffffffffffffffffffffffffffffff1661154e8461061d565b73ffffffffffffffffffffffffffffffffffffffff16145b806115d957506115aa6040518060400160405280600e81526020017f7472616e7366657248656c706572000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b600560009054906101000a900460ff16611631576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162890613187565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1661165182610ba5565b73ffffffffffffffffffffffffffffffffffffffff16146116a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161169e90613087565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e906130c7565b60405180910390fd5b6117556040518060400160405280600c81526020017f657870697265645661756c740000000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff1661177482611964565b73ffffffffffffffffffffffffffffffffffffffff1614156117cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c290613127565b60405180910390fd5b6117d88383836001611e3d565b8273ffffffffffffffffffffffffffffffffffffffff166117f882610ba5565b73ffffffffffffffffffffffffffffffffffffffff161461184e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184590613087565b60405180910390fd5b6003600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561188e8282611e43565b808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46118f68383836001611ef1565b505050565b6119058282611ef7565b61192160008383604051806020016040528060008152506121d8565b611960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195790613067565b60405180910390fd5b5050565b60006119a46040518060400160405280600881526020017f7265676973747279000000000000000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff1663c41a360a836040518263ffffffff1660e01b81526004016119dc9190613267565b60206040518083038186803b1580156119f457600080fd5b505afa158015611a08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a2c91906128b1565b9050919050565b6000611a736040518060400160405280600881526020017f7265676973747279000000000000000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff166375794a3c6040518163ffffffff1660e01b815260040160206040518083038186803b158015611ab857600080fd5b505afa158015611acc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611af09190612b44565b905090565b611b0f82826040518060200160405280600081525061236f565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b79906130e7565b60405180910390fd5b80600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611c739190612fea565b60405180910390a3505050565b611c8b8484846115e2565b611c97848484846121d8565b611cd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccd90613067565b60405180910390fd5b50505050565b60606000821415611d24576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611e38565b600082905060005b60008214611d56578080611d3f90613535565b915050600a82611d4f91906133b7565b9150611d2c565b60008167ffffffffffffffff811115611d7257611d7161366b565b5b6040519080825280601f01601f191660200182016040528015611da45781602001600182028036833780820191505090505b5090505b60008514611e3157600182611dbd91906133e8565b9150600a85611dcc919061357e565b6030611dd89190613361565b60f81b818381518110611dee57611ded61363c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611e2a91906133b7565b9450611da8565b8093505050505b919050565b50505050565b611e816040518060400160405280600881526020017f7265676973747279000000000000000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff166356df3db183836040518363ffffffff1660e01b8152600401611ebb929190612fc1565b600060405180830381600087803b158015611ed557600080fd5b505af1158015611ee9573d6000803e3d6000fd5b505050505050565b50505050565b600560009054906101000a900460ff16611f46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f3d90613187565b60405180910390fd5b611f846040518060400160405280600c81526020017f657870697265645661756c740000000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff16611fa382610ba5565b73ffffffffffffffffffffffffffffffffffffffff1614611ff9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ff090613147565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612069576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612060906130c7565b60405180910390fd5b612077600083836001611e3d565b6120b56040518060400160405280600c81526020017f657870697265645661756c740000000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff166120d482610ba5565b73ffffffffffffffffffffffffffffffffffffffff161461212a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212190613147565b60405180910390fd5b6003600082815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905561216a8282611e43565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121d4600083836001611ef1565b5050565b60006121f98473ffffffffffffffffffffffffffffffffffffffff166123ca565b15612362578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612222611357565b8786866040518563ffffffff1660e01b81526004016122449493929190612f75565b602060405180830381600087803b15801561225e57600080fd5b505af192505050801561228f57506040513d601f19601f8201168201806040525081019061228c9190612aa1565b60015b612312573d80600081146122bf576040519150601f19603f3d011682016040523d82523d6000602084013e6122c4565b606091505b5060008151141561230a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230190613067565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612367565b600190505b949350505050565b61237983836123ed565b61238660008484846121d8565b6123c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123bc90613067565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600560009054906101000a900460ff1661243c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161243390613187565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124a390613167565b60405180910390fd5b6124b581611303565b156124f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ec906130a7565b60405180910390fd5b612503600083836001611e3d565b61250c81611303565b1561254c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612543906130a7565b60405180910390fd5b612555826125c3565b808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46125bf600083836001611ef1565b5050565b6126016040518060400160405280600881526020017f7265676973747279000000000000000000000000000000000000000000000000815250610eb6565b73ffffffffffffffffffffffffffffffffffffffff16637065cb48826040518263ffffffff1660e01b81526004016126399190612f5a565b600060405180830381600087803b15801561265357600080fd5b505af1158015612667573d6000803e3d6000fd5b5050505050565b82805461267a906134d2565b90600052602060002090601f01602090048101928261269c57600085556126e3565b82601f106126b557805160ff19168380011785556126e3565b828001600101855582156126e3579182015b828111156126e25782518255916020019190600101906126c7565b5b5090506126f091906126f4565b5090565b5b8082111561270d5760008160009055506001016126f5565b5090565b600061272461271f846132a7565b613282565b9050828152602081018484840111156127405761273f61369f565b5b61274b848285613490565b509392505050565b6000612766612761846132d8565b613282565b9050828152602081018484840111156127825761278161369f565b5b61278d848285613490565b509392505050565b6000813590506127a481613b43565b92915050565b6000815190506127b981613b43565b92915050565b6000813590506127ce81613b5a565b92915050565b6000813590506127e381613b71565b92915050565b6000815190506127f881613b71565b92915050565b600082601f8301126128135761281261369a565b5b8135612823848260208601612711565b91505092915050565b600082601f8301126128415761284061369a565b5b8135612851848260208601612753565b91505092915050565b60008135905061286981613b88565b92915050565b60008151905061287e81613b88565b92915050565b60006020828403121561289a576128996136a9565b5b60006128a884828501612795565b91505092915050565b6000602082840312156128c7576128c66136a9565b5b60006128d5848285016127aa565b91505092915050565b600080604083850312156128f5576128f46136a9565b5b600061290385828601612795565b925050602061291485828601612795565b9150509250929050565b600080600060608486031215612937576129366136a9565b5b600061294586828701612795565b935050602061295686828701612795565b92505060406129678682870161285a565b9150509250925092565b6000806000806080858703121561298b5761298a6136a9565b5b600061299987828801612795565b94505060206129aa87828801612795565b93505060406129bb8782880161285a565b925050606085013567ffffffffffffffff8111156129dc576129db6136a4565b5b6129e8878288016127fe565b91505092959194509250565b60008060408385031215612a0b57612a0a6136a9565b5b6000612a1985828601612795565b9250506020612a2a858286016127bf565b9150509250929050565b60008060408385031215612a4b57612a4a6136a9565b5b6000612a5985828601612795565b9250506020612a6a8582860161285a565b9150509250929050565b600060208284031215612a8a57612a896136a9565b5b6000612a98848285016127d4565b91505092915050565b600060208284031215612ab757612ab66136a9565b5b6000612ac5848285016127e9565b91505092915050565b600060208284031215612ae457612ae36136a9565b5b600082013567ffffffffffffffff811115612b0257612b016136a4565b5b612b0e8482850161282c565b91505092915050565b600060208284031215612b2d57612b2c6136a9565b5b6000612b3b8482850161285a565b91505092915050565b600060208284031215612b5a57612b596136a9565b5b6000612b688482850161286f565b91505092915050565b612b7a8161341c565b82525050565b612b898161342e565b82525050565b6000612b9a8261331e565b612ba48185613334565b9350612bb481856020860161349f565b612bbd816136ae565b840191505092915050565b6000612bd382613329565b612bdd8185613345565b9350612bed81856020860161349f565b612bf6816136ae565b840191505092915050565b6000612c0c82613329565b612c168185613356565b9350612c2681856020860161349f565b80840191505092915050565b60008154612c3f816134d2565b612c498186613356565b94506001821660008114612c645760018114612c7557612ca8565b60ff19831686528186019350612ca8565b612c7e85613309565b60005b83811015612ca057815481890152600182019150602081019050612c81565b838801955050505b50505092915050565b6000612cbe602d83613345565b9150612cc9826136bf565b604082019050919050565b6000612ce1602b83613345565b9150612cec8261370e565b604082019050919050565b6000612d04603283613345565b9150612d0f8261375d565b604082019050919050565b6000612d27602583613345565b9150612d32826137ac565b604082019050919050565b6000612d4a601c83613345565b9150612d55826137fb565b602082019050919050565b6000612d6d602483613345565b9150612d7882613824565b604082019050919050565b6000612d90601983613345565b9150612d9b82613873565b602082019050919050565b6000612db3602a83613345565b9150612dbe8261389c565b604082019050919050565b6000612dd6602183613345565b9150612de1826138eb565b604082019050919050565b6000612df9600b83613345565b9150612e048261393a565b602082019050919050565b6000612e1c602083613345565b9150612e2782613963565b602082019050919050565b6000612e3f601683613345565b9150612e4a8261398c565b602082019050919050565b6000612e62602083613345565b9150612e6d826139b5565b602082019050919050565b6000612e85601883613345565b9150612e90826139de565b602082019050919050565b6000612ea8602183613345565b9150612eb382613a07565b604082019050919050565b6000612ecb603d83613345565b9150612ed682613a56565b604082019050919050565b6000612eee602c83613345565b9150612ef982613aa5565b604082019050919050565b6000612f11602483613345565b9150612f1c82613af4565b604082019050919050565b612f3081613486565b82525050565b6000612f428285612c32565b9150612f4e8284612c01565b91508190509392505050565b6000602082019050612f6f6000830184612b71565b92915050565b6000608082019050612f8a6000830187612b71565b612f976020830186612b71565b612fa46040830185612f27565b8181036060830152612fb68184612b8f565b905095945050505050565b6000604082019050612fd66000830185612b71565b612fe36020830184612f27565b9392505050565b6000602082019050612fff6000830184612b80565b92915050565b6000602082019050818103600083015261301f8184612bc8565b905092915050565b6000602082019050818103600083015261304081612cb1565b9050919050565b6000602082019050818103600083015261306081612cd4565b9050919050565b6000602082019050818103600083015261308081612cf7565b9050919050565b600060208201905081810360008301526130a081612d1a565b9050919050565b600060208201905081810360008301526130c081612d3d565b9050919050565b600060208201905081810360008301526130e081612d60565b9050919050565b6000602082019050818103600083015261310081612d83565b9050919050565b6000602082019050818103600083015261312081612da6565b9050919050565b6000602082019050818103600083015261314081612dc9565b9050919050565b6000602082019050818103600083015261316081612dec565b9050919050565b6000602082019050818103600083015261318081612e0f565b9050919050565b600060208201905081810360008301526131a081612e32565b9050919050565b600060208201905081810360008301526131c081612e55565b9050919050565b600060208201905081810360008301526131e081612e78565b9050919050565b6000602082019050818103600083015261320081612e9b565b9050919050565b6000602082019050818103600083015261322081612ebe565b9050919050565b6000602082019050818103600083015261324081612ee1565b9050919050565b6000602082019050818103600083015261326081612f04565b9050919050565b600060208201905061327c6000830184612f27565b92915050565b600061328c61329d565b90506132988282613504565b919050565b6000604051905090565b600067ffffffffffffffff8211156132c2576132c161366b565b5b6132cb826136ae565b9050602081019050919050565b600067ffffffffffffffff8211156132f3576132f261366b565b5b6132fc826136ae565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061336c82613486565b915061337783613486565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156133ac576133ab6135af565b5b828201905092915050565b60006133c282613486565b91506133cd83613486565b9250826133dd576133dc6135de565b5b828204905092915050565b60006133f382613486565b91506133fe83613486565b925082821015613411576134106135af565b5b828203905092915050565b600061342782613466565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156134bd5780820151818401526020810190506134a2565b838111156134cc576000848401525b50505050565b600060028204905060018216806134ea57607f821691505b602082108114156134fe576134fd61360d565b5b50919050565b61350d826136ae565b810181811067ffffffffffffffff8211171561352c5761352b61366b565b5b80604052505050565b600061354082613486565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613573576135726135af565b5b600182019050919050565b600061358982613486565b915061359483613486565b9250826135a4576135a36135de565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560008201527f72206f7220617070726f76656400000000000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f556e61626c6520746f207472616e73666572207768696c65206578706972656460008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4e6f742065787069726564000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f436f6e7472616374206973206e6f742061637469766500000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20696e76616c696420746f6b656e2049440000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60008201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f742074686520726567697360008201527f7472617200000000000000000000000000000000000000000000000000000000602082015250565b613b4c8161341c565b8114613b5757600080fd5b50565b613b638161342e565b8114613b6e57600080fd5b50565b613b7a8161343a565b8114613b8557600080fd5b50565b613b9181613486565b8114613b9c57600080fd5b5056fea2646970667358221220fc96dec4faaf4a4ed49c721eb9abf82aeeda1411b8e671a0395918f0ab41867a64736f6c63430008070033

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

0000000000000000000000002da159f7841717a9b8bc96a9e652d1be3d6eeec4

-----Decoded View---------------
Arg [0] : addresses_ (address): 0x2Da159F7841717a9B8bc96A9E652d1be3D6eEEc4

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002da159f7841717a9b8bc96a9e652d1be3d6eeec4


Deployed Bytecode Sourcemap

33861:399:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18067:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19192:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20009:200;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19527:416;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17606:102;;;:::i;:::-;;32343:111;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20738:301;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32825:496;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21110:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34128:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32531:210;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33552:99;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18840:285;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33990:130;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33441:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18436:342;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;688:158;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;570:110;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;452;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19361:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20281:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21332:279;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33659:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20507:164;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18067:305;18169:4;18221:25;18206:40;;;:11;:40;;;;:105;;;;18278:33;18263:48;;;:11;:48;;;;18206:105;:158;;;;18328:36;18352:11;18328:23;:36::i;:::-;18206:158;18186:178;;18067:305;;;:::o;19192:100::-;19246:13;19279:5;19272:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19192:100;:::o;20009:200::-;20085:7;20112:16;20120:7;20112;:16::i;:::-;20104:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;20177:15;:24;20193:7;20177:24;;;;;;;;;;;;;;;;;;;;;20170:31;;20009:200;;;:::o;19527:416::-;19608:13;19624:23;19639:7;19624:14;:23::i;:::-;19608:39;;19672:5;19666:11;;:2;:11;;;;19658:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;19766:5;19750:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;19775:37;19792:5;19799:12;:10;:12::i;:::-;19775:16;:37::i;:::-;19750:62;19728:173;;;;;;;;;;;;:::i;:::-;;;;;;;;;19914:21;19923:2;19927:7;19914:8;:21::i;:::-;19597:346;19527:416;;:::o;17606:102::-;905:10;894:21;;:7;:5;:7::i;:::-;:21;;;886:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;17684:16:::1;;;;;;;;;;;17683:17;17664:16;;:36;;;;;;;;;;;;;;;;;;17606:102::o:0;32343:111::-;32404:7;32431:15;:13;:15::i;:::-;32424:22;;32343:111;:::o;20738:301::-;20899:41;20918:12;:10;:12::i;:::-;20932:7;20899:18;:41::i;:::-;20891:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;21003:28;21013:4;21019:2;21023:7;21003:9;:28::i;:::-;20738:301;;;:::o;32825:496::-;32922:15;32966:16;32976:5;32966:9;:16::i;:::-;32958:5;:24;32950:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;33043:10;33068:6;33077:1;33068:10;;33064:184;33085:15;:13;:15::i;:::-;33080:1;:20;33064:184;;33133:10;33141:1;33133:7;:10::i;:::-;33124:19;;:5;:19;;;33121:116;;;33175:5;33166;:14;33163:58;;;33189:1;33182:8;;;;;;33163:58;33214:7;;;;;:::i;:::-;;;;33121:116;33102:3;;;;;:::i;:::-;;;;33064:184;;;;33260:53;;;;;;;;;;:::i;:::-;;;;;;;;32825:496;;;;;:::o;21110:151::-;21214:39;21231:4;21237:2;21241:7;21214:39;;;;;;;;;;;;:16;:39::i;:::-;21110:151;;;:::o;34128:127::-;1038:29;;;;;;;;;;;;;;;;;;:16;:29::i;:::-;1024:43;;:10;:43;;;1016:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;34214:33:::1;34235:2;34239:7;34214:20;:33::i;:::-;34128:127:::0;;:::o;32531:210::-;32606:7;32642:15;:13;:15::i;:::-;32634:5;:23;32626:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;32732:1;32724:5;:9;;;;:::i;:::-;32717:16;;32531:210;;;:::o;33552:99::-;905:10;894:21;;:7;:5;:7::i;:::-;:21;;;886:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33635:8:::1;33625:7;:18;;;;;;;;;;;;:::i;:::-;;33552:99:::0;:::o;18840:285::-;18912:7;18940:16;;;;;;;;;;;18932:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;18994:13;19010:17;19019:7;19010:8;:17::i;:::-;18994:33;;19063:1;19046:19;;:5;:19;;;;19038:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;19112:5;19105:12;;;18840:285;;;:::o;33990:130::-;1038:29;;;;;;;;;;;;;;;;;;:16;:29::i;:::-;1024:43;;:10;:43;;;1016:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;34048:15:::1;34066:13;:11;:13::i;:::-;34048:31;;34090:22;34100:2;34104:7;34090:9;:22::i;:::-;34037:83;33990:130:::0;:::o;33441:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;18436:342::-;18508:7;18553:1;18536:19;;:5;:19;;;;18528:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;18615:10;18641:6;18636:112;18654:15;:13;:15::i;:::-;18649:1;:20;18636:112;;18702:11;18711:1;18702:8;:11::i;:::-;18693:20;;:5;:20;;;18689:47;;;18729:7;;;;:::i;:::-;;;18689:47;18671:3;;;;:::i;:::-;;;18636:112;;;;18765:5;18758:12;;;18436:342;;;:::o;688:158::-;757:7;797:15;;;;;;;;;;;784:46;;;831:6;784:54;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;777:61;;688:158;;;:::o;570:110::-;608:7;648:15;;;;;;;;;;;635:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;628:44;;570:110;:::o;452:::-;905:10;894:21;;:7;:5;:7::i;:::-;:21;;;886:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;544:10:::1;526:15;::::0;:28:::1;;;;;;;;;;;;;;;;;;452:110:::0;:::o;19361:104::-;19417:13;19450:7;19443:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19361:104;:::o;20281:155::-;20376:52;20395:12;:10;:12::i;:::-;20409:8;20419;20376:18;:52::i;:::-;20281:155;;:::o;21332:279::-;21463:41;21482:12;:10;:12::i;:::-;21496:7;21463:18;:41::i;:::-;21455:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;21565:38;21579:4;21585:2;21589:7;21598:4;21565:13;:38::i;:::-;21332:279;;;;:::o;33659:168::-;33725:13;33782:7;33791:26;33808:8;33791:16;:26::i;:::-;33765:53;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33751:68;;33659:168;;;:::o;20507:164::-;20604:4;20628:18;:25;20647:5;20628:25;;;;;;;;;;;;;;;:35;20654:8;20628:35;;;;;;;;;;;;;;;;;;;;;;;;;20621:42;;20507:164;;;;:::o;9665:157::-;9750:4;9789:25;9774:40;;;:11;:40;;;;9767:47;;9665:157;;;:::o;23075:::-;23140:4;23174:15;:13;:15::i;:::-;23164:7;:25;:60;;;;;23222:1;23193:31;;:17;23202:7;23193:8;:17::i;:::-;:31;;;;23164:60;23157:67;;23075:157;;;:::o;6028:98::-;6081:7;6108:10;6101:17;;6028:98;:::o;28072:174::-;28174:2;28147:15;:24;28163:7;28147:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;28230:7;28226:2;28192:46;;28201:23;28216:7;28201:14;:23::i;:::-;28192:46;;;;;;;;;;;;28072:174;;:::o;3159:141::-;3207:7;3247:28;;;;;;;;;;;;;;;;;;:16;:28::i;:::-;3234:56;;;:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3227:65;;3159:141;:::o;23399:313::-;23492:4;23509:13;23525:23;23540:7;23525:14;:23::i;:::-;23509:39;;23578:5;23567:16;;:7;:16;;;:52;;;;23587:32;23604:5;23611:7;23587:16;:32::i;:::-;23567:52;:87;;;;23647:7;23623:31;;:20;23635:7;23623:11;:20::i;:::-;:31;;;23567:87;23566:138;;;;23670:34;;;;;;;;;;;;;;;;;;:16;:34::i;:::-;23659:45;;:7;:45;;;23566:138;23559:145;;;23399:313;;;;:::o;25966:890::-;26064:16;;;;;;;;;;;26056:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;26153:4;26126:31;;:23;26141:7;26126:14;:23::i;:::-;:31;;;26118:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;26232:1;26218:16;;:2;:16;;;;26210:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;26315:32;;;;;;;;;;;;;;;;;;:16;:32::i;:::-;26294:53;;:17;26303:7;26294:8;:17::i;:::-;:53;;;;26286:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;26398:42;26419:4;26425:2;26429:7;26438:1;26398:20;:42::i;:::-;26570:4;26543:31;;:23;26558:7;26543:14;:23::i;:::-;:31;;;26535:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;26688:15;:24;26704:7;26688:24;;;;;;;;;;;;26681:31;;;;;;;;;;;26725:24;26737:2;26741:7;26725:11;:24::i;:::-;26786:7;26782:2;26767:27;;26776:4;26767:27;;;;;;;;;;;;26807:41;26827:4;26833:2;26837:7;26846:1;26807:19;:41::i;:::-;25966:890;;;:::o;26864:286::-;26951:29;26968:2;26972:7;26951:16;:29::i;:::-;27013:51;27044:1;27048:2;27052:7;27013:51;;;;;;;;;;;;:22;:51::i;:::-;26991:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;26864:286;;:::o;3608:153::-;3666:7;3706:28;;;;;;;;;;;;;;;;;;:16;:28::i;:::-;3693:51;;;3745:7;3693:60;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3686:67;;3608:153;;;:::o;3014:137::-;3060:7;3100:28;;;;;;;;;;;;;;;;;;:16;:28::i;:::-;3087:54;;;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3080:63;;3014:137;:::o;24054:110::-;24130:26;24140:2;24144:7;24130:26;;;;;;;;;;;;:9;:26::i;:::-;24054:110;;:::o;28389:281::-;28510:8;28501:17;;:5;:17;;;;28493:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;28597:8;28559:18;:25;28578:5;28559:25;;;;;;;;;;;;;;;:35;28585:8;28559:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;28643:8;28621:41;;28636:5;28621:41;;;28653:8;28621:41;;;;;;:::i;:::-;;;;;;;;28389:281;;;:::o;22492:270::-;22605:28;22615:4;22621:2;22625:7;22605:9;:28::i;:::-;22652:47;22675:4;22681:2;22685:7;22694:4;22652:22;:47::i;:::-;22644:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;22492:270;;;;:::o;4617:723::-;4673:13;4903:1;4894:5;:10;4890:53;;;4921:10;;;;;;;;;;;;;;;;;;;;;4890:53;4953:12;4968:5;4953:20;;4984:14;5009:78;5024:1;5016:4;:9;5009:78;;5042:8;;;;;:::i;:::-;;;;5073:2;5065:10;;;;;:::i;:::-;;;5009:78;;;5097:19;5129:6;5119:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5097:39;;5147:154;5163:1;5154:5;:10;5147:154;;5191:1;5181:11;;;;;:::i;:::-;;;5258:2;5250:5;:10;;;;:::i;:::-;5237:2;:24;;;;:::i;:::-;5224:39;;5207:6;5214;5207:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5287:2;5278:11;;;;;:::i;:::-;;;5147:154;;;5325:6;5311:21;;;;;4617:723;;;;:::o;30819:116::-;;;;;:::o;3441:159::-;3531:28;;;;;;;;;;;;;;;;;;:16;:28::i;:::-;3518:54;;;3573:8;3583;3518:74;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3441:159;;:::o;31657:115::-;;;;;:::o;27158:795::-;27249:16;;;;;;;;;;;27241:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;27338:32;;;;;;;;;;;;;;;;;;:16;:32::i;:::-;27311:59;;:23;27326:7;27311:14;:23::i;:::-;:59;;;27303:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;27419:1;27405:16;;:2;:16;;;;27397:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;27475:48;27504:1;27508:2;27512:7;27521:1;27475:20;:48::i;:::-;27653:32;;;;;;;;;;;;;;;;;;:16;:32::i;:::-;27626:59;;:23;27641:7;27626:14;:23::i;:::-;:59;;;27618:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;27773:15;:24;27789:7;27773:24;;;;;;;;;;;;27766:31;;;;;;;;;;;27810:24;27822:2;27826:7;27810:11;:24::i;:::-;27877:7;27873:2;27852:33;;27869:1;27852:33;;;;;;;;;;;;27898:47;27926:1;27930:2;27934:7;27943:1;27898:19;:47::i;:::-;27158:795;;:::o;29234:853::-;29388:4;29409:15;:2;:13;;;:15::i;:::-;29405:675;;;29461:2;29445:36;;;29482:12;:10;:12::i;:::-;29496:4;29502:7;29511:4;29445:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;29441:584;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29703:1;29686:6;:13;:18;29682:328;;;29729:60;;;;;;;;;;:::i;:::-;;;;;;;;29682:328;29960:6;29954:13;29945:6;29941:2;29937:15;29930:38;29441:584;29577:41;;;29567:51;;;:6;:51;;;;29560:58;;;;;29405:675;30064:4;30057:11;;29234:853;;;;;;;:::o;24391:285::-;24486:18;24492:2;24496:7;24486:5;:18::i;:::-;24537:53;24568:1;24572:2;24576:7;24585:4;24537:22;:53::i;:::-;24515:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;24391:285;;;:::o;6496:326::-;6556:4;6813:1;6791:7;:19;;;:23;6784:30;;6496:326;;;:::o;25012:617::-;25092:16;;;;;;;;;;;25084:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;25168:1;25154:16;;:2;:16;;;;25146:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;25227:16;25235:7;25227;:16::i;:::-;25226:17;25218:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;25289:48;25318:1;25322:2;25326:7;25335:1;25289:20;:48::i;:::-;25436:16;25444:7;25436;:16::i;:::-;25435:17;25427:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;25498:12;25507:2;25498:8;:12::i;:::-;25553:7;25549:2;25528:33;;25545:1;25528:33;;;;;;;;;;;;25574:47;25602:1;25606:2;25610:7;25619:1;25574:19;:47::i;:::-;25012:617;;:::o;3308:125::-;3377:28;;;;;;;;;;;;;;;;;;:16;:28::i;:::-;3364:51;;;3416:8;3364:61;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3308:125;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:143::-;1043:5;1074:6;1068:13;1059:22;;1090:33;1117:5;1090:33;:::i;:::-;986:143;;;;:::o;1135:133::-;1178:5;1216:6;1203:20;1194:29;;1232:30;1256:5;1232:30;:::i;:::-;1135:133;;;;:::o;1274:137::-;1319:5;1357:6;1344:20;1335:29;;1373:32;1399:5;1373:32;:::i;:::-;1274:137;;;;:::o;1417:141::-;1473:5;1504:6;1498:13;1489:22;;1520:32;1546:5;1520:32;:::i;:::-;1417:141;;;;:::o;1577:338::-;1632:5;1681:3;1674:4;1666:6;1662:17;1658:27;1648:122;;1689:79;;:::i;:::-;1648:122;1806:6;1793:20;1831:78;1905:3;1897:6;1890:4;1882:6;1878:17;1831:78;:::i;:::-;1822:87;;1638:277;1577:338;;;;:::o;1935:340::-;1991:5;2040:3;2033:4;2025:6;2021:17;2017:27;2007:122;;2048:79;;:::i;:::-;2007:122;2165:6;2152:20;2190:79;2265:3;2257:6;2250:4;2242:6;2238:17;2190:79;:::i;:::-;2181:88;;1997:278;1935:340;;;;:::o;2281:139::-;2327:5;2365:6;2352:20;2343:29;;2381:33;2408:5;2381:33;:::i;:::-;2281:139;;;;:::o;2426:143::-;2483:5;2514:6;2508:13;2499:22;;2530:33;2557:5;2530:33;:::i;:::-;2426:143;;;;:::o;2575:329::-;2634:6;2683:2;2671:9;2662:7;2658:23;2654:32;2651:119;;;2689:79;;:::i;:::-;2651:119;2809:1;2834:53;2879:7;2870:6;2859:9;2855:22;2834:53;:::i;:::-;2824:63;;2780:117;2575:329;;;;:::o;2910:351::-;2980:6;3029:2;3017:9;3008:7;3004:23;3000:32;2997:119;;;3035:79;;:::i;:::-;2997:119;3155:1;3180:64;3236:7;3227:6;3216:9;3212:22;3180:64;:::i;:::-;3170:74;;3126:128;2910:351;;;;:::o;3267:474::-;3335:6;3343;3392:2;3380:9;3371:7;3367:23;3363:32;3360:119;;;3398:79;;:::i;:::-;3360:119;3518:1;3543:53;3588:7;3579:6;3568:9;3564:22;3543:53;:::i;:::-;3533:63;;3489:117;3645:2;3671:53;3716:7;3707:6;3696:9;3692:22;3671:53;:::i;:::-;3661:63;;3616:118;3267:474;;;;;:::o;3747:619::-;3824:6;3832;3840;3889:2;3877:9;3868:7;3864:23;3860:32;3857:119;;;3895:79;;:::i;:::-;3857:119;4015:1;4040:53;4085:7;4076:6;4065:9;4061:22;4040:53;:::i;:::-;4030:63;;3986:117;4142:2;4168:53;4213:7;4204:6;4193:9;4189:22;4168:53;:::i;:::-;4158:63;;4113:118;4270:2;4296:53;4341:7;4332:6;4321:9;4317:22;4296:53;:::i;:::-;4286:63;;4241:118;3747:619;;;;;:::o;4372:943::-;4467:6;4475;4483;4491;4540:3;4528:9;4519:7;4515:23;4511:33;4508:120;;;4547:79;;:::i;:::-;4508:120;4667:1;4692:53;4737:7;4728:6;4717:9;4713:22;4692:53;:::i;:::-;4682:63;;4638:117;4794:2;4820:53;4865:7;4856:6;4845:9;4841:22;4820:53;:::i;:::-;4810:63;;4765:118;4922:2;4948:53;4993:7;4984:6;4973:9;4969:22;4948:53;:::i;:::-;4938:63;;4893:118;5078:2;5067:9;5063:18;5050:32;5109:18;5101:6;5098:30;5095:117;;;5131:79;;:::i;:::-;5095:117;5236:62;5290:7;5281:6;5270:9;5266:22;5236:62;:::i;:::-;5226:72;;5021:287;4372:943;;;;;;;:::o;5321:468::-;5386:6;5394;5443:2;5431:9;5422:7;5418:23;5414:32;5411:119;;;5449:79;;:::i;:::-;5411:119;5569:1;5594:53;5639:7;5630:6;5619:9;5615:22;5594:53;:::i;:::-;5584:63;;5540:117;5696:2;5722:50;5764:7;5755:6;5744:9;5740:22;5722:50;:::i;:::-;5712:60;;5667:115;5321:468;;;;;:::o;5795:474::-;5863:6;5871;5920:2;5908:9;5899:7;5895:23;5891:32;5888:119;;;5926:79;;:::i;:::-;5888:119;6046:1;6071:53;6116:7;6107:6;6096:9;6092:22;6071:53;:::i;:::-;6061:63;;6017:117;6173:2;6199:53;6244:7;6235:6;6224:9;6220:22;6199:53;:::i;:::-;6189:63;;6144:118;5795:474;;;;;:::o;6275:327::-;6333:6;6382:2;6370:9;6361:7;6357:23;6353:32;6350:119;;;6388:79;;:::i;:::-;6350:119;6508:1;6533:52;6577:7;6568:6;6557:9;6553:22;6533:52;:::i;:::-;6523:62;;6479:116;6275:327;;;;:::o;6608:349::-;6677:6;6726:2;6714:9;6705:7;6701:23;6697:32;6694:119;;;6732:79;;:::i;:::-;6694:119;6852:1;6877:63;6932:7;6923:6;6912:9;6908:22;6877:63;:::i;:::-;6867:73;;6823:127;6608:349;;;;:::o;6963:509::-;7032:6;7081:2;7069:9;7060:7;7056:23;7052:32;7049:119;;;7087:79;;:::i;:::-;7049:119;7235:1;7224:9;7220:17;7207:31;7265:18;7257:6;7254:30;7251:117;;;7287:79;;:::i;:::-;7251:117;7392:63;7447:7;7438:6;7427:9;7423:22;7392:63;:::i;:::-;7382:73;;7178:287;6963:509;;;;:::o;7478:329::-;7537:6;7586:2;7574:9;7565:7;7561:23;7557:32;7554:119;;;7592:79;;:::i;:::-;7554:119;7712:1;7737:53;7782:7;7773:6;7762:9;7758:22;7737:53;:::i;:::-;7727:63;;7683:117;7478:329;;;;:::o;7813:351::-;7883:6;7932:2;7920:9;7911:7;7907:23;7903:32;7900:119;;;7938:79;;:::i;:::-;7900:119;8058:1;8083:64;8139:7;8130:6;8119:9;8115:22;8083:64;:::i;:::-;8073:74;;8029:128;7813:351;;;;:::o;8170:118::-;8257:24;8275:5;8257:24;:::i;:::-;8252:3;8245:37;8170:118;;:::o;8294:109::-;8375:21;8390:5;8375:21;:::i;:::-;8370:3;8363:34;8294:109;;:::o;8409:360::-;8495:3;8523:38;8555:5;8523:38;:::i;:::-;8577:70;8640:6;8635:3;8577:70;:::i;:::-;8570:77;;8656:52;8701:6;8696:3;8689:4;8682:5;8678:16;8656:52;:::i;:::-;8733:29;8755:6;8733:29;:::i;:::-;8728:3;8724:39;8717:46;;8499:270;8409:360;;;;:::o;8775:364::-;8863:3;8891:39;8924:5;8891:39;:::i;:::-;8946:71;9010:6;9005:3;8946:71;:::i;:::-;8939:78;;9026:52;9071:6;9066:3;9059:4;9052:5;9048:16;9026:52;:::i;:::-;9103:29;9125:6;9103:29;:::i;:::-;9098:3;9094:39;9087:46;;8867:272;8775:364;;;;:::o;9145:377::-;9251:3;9279:39;9312:5;9279:39;:::i;:::-;9334:89;9416:6;9411:3;9334:89;:::i;:::-;9327:96;;9432:52;9477:6;9472:3;9465:4;9458:5;9454:16;9432:52;:::i;:::-;9509:6;9504:3;9500:16;9493:23;;9255:267;9145:377;;;;:::o;9552:845::-;9655:3;9692:5;9686:12;9721:36;9747:9;9721:36;:::i;:::-;9773:89;9855:6;9850:3;9773:89;:::i;:::-;9766:96;;9893:1;9882:9;9878:17;9909:1;9904:137;;;;10055:1;10050:341;;;;9871:520;;9904:137;9988:4;9984:9;9973;9969:25;9964:3;9957:38;10024:6;10019:3;10015:16;10008:23;;9904:137;;10050:341;10117:38;10149:5;10117:38;:::i;:::-;10177:1;10191:154;10205:6;10202:1;10199:13;10191:154;;;10279:7;10273:14;10269:1;10264:3;10260:11;10253:35;10329:1;10320:7;10316:15;10305:26;;10227:4;10224:1;10220:12;10215:17;;10191:154;;;10374:6;10369:3;10365:16;10358:23;;10057:334;;9871:520;;9659:738;;9552:845;;;;:::o;10403:366::-;10545:3;10566:67;10630:2;10625:3;10566:67;:::i;:::-;10559:74;;10642:93;10731:3;10642:93;:::i;:::-;10760:2;10755:3;10751:12;10744:19;;10403:366;;;:::o;10775:::-;10917:3;10938:67;11002:2;10997:3;10938:67;:::i;:::-;10931:74;;11014:93;11103:3;11014:93;:::i;:::-;11132:2;11127:3;11123:12;11116:19;;10775:366;;;:::o;11147:::-;11289:3;11310:67;11374:2;11369:3;11310:67;:::i;:::-;11303:74;;11386:93;11475:3;11386:93;:::i;:::-;11504:2;11499:3;11495:12;11488:19;;11147:366;;;:::o;11519:::-;11661:3;11682:67;11746:2;11741:3;11682:67;:::i;:::-;11675:74;;11758:93;11847:3;11758:93;:::i;:::-;11876:2;11871:3;11867:12;11860:19;;11519:366;;;:::o;11891:::-;12033:3;12054:67;12118:2;12113:3;12054:67;:::i;:::-;12047:74;;12130:93;12219:3;12130:93;:::i;:::-;12248:2;12243:3;12239:12;12232:19;;11891:366;;;:::o;12263:::-;12405:3;12426:67;12490:2;12485:3;12426:67;:::i;:::-;12419:74;;12502:93;12591:3;12502:93;:::i;:::-;12620:2;12615:3;12611:12;12604:19;;12263:366;;;:::o;12635:::-;12777:3;12798:67;12862:2;12857:3;12798:67;:::i;:::-;12791:74;;12874:93;12963:3;12874:93;:::i;:::-;12992:2;12987:3;12983:12;12976:19;;12635:366;;;:::o;13007:::-;13149:3;13170:67;13234:2;13229:3;13170:67;:::i;:::-;13163:74;;13246:93;13335:3;13246:93;:::i;:::-;13364:2;13359:3;13355:12;13348:19;;13007:366;;;:::o;13379:::-;13521:3;13542:67;13606:2;13601:3;13542:67;:::i;:::-;13535:74;;13618:93;13707:3;13618:93;:::i;:::-;13736:2;13731:3;13727:12;13720:19;;13379:366;;;:::o;13751:::-;13893:3;13914:67;13978:2;13973:3;13914:67;:::i;:::-;13907:74;;13990:93;14079:3;13990:93;:::i;:::-;14108:2;14103:3;14099:12;14092:19;;13751:366;;;:::o;14123:::-;14265:3;14286:67;14350:2;14345:3;14286:67;:::i;:::-;14279:74;;14362:93;14451:3;14362:93;:::i;:::-;14480:2;14475:3;14471:12;14464:19;;14123:366;;;:::o;14495:::-;14637:3;14658:67;14722:2;14717:3;14658:67;:::i;:::-;14651:74;;14734:93;14823:3;14734:93;:::i;:::-;14852:2;14847:3;14843:12;14836:19;;14495:366;;;:::o;14867:::-;15009:3;15030:67;15094:2;15089:3;15030:67;:::i;:::-;15023:74;;15106:93;15195:3;15106:93;:::i;:::-;15224:2;15219:3;15215:12;15208:19;;14867:366;;;:::o;15239:::-;15381:3;15402:67;15466:2;15461:3;15402:67;:::i;:::-;15395:74;;15478:93;15567:3;15478:93;:::i;:::-;15596:2;15591:3;15587:12;15580:19;;15239:366;;;:::o;15611:::-;15753:3;15774:67;15838:2;15833:3;15774:67;:::i;:::-;15767:74;;15850:93;15939:3;15850:93;:::i;:::-;15968:2;15963:3;15959:12;15952:19;;15611:366;;;:::o;15983:::-;16125:3;16146:67;16210:2;16205:3;16146:67;:::i;:::-;16139:74;;16222:93;16311:3;16222:93;:::i;:::-;16340:2;16335:3;16331:12;16324:19;;15983:366;;;:::o;16355:::-;16497:3;16518:67;16582:2;16577:3;16518:67;:::i;:::-;16511:74;;16594:93;16683:3;16594:93;:::i;:::-;16712:2;16707:3;16703:12;16696:19;;16355:366;;;:::o;16727:::-;16869:3;16890:67;16954:2;16949:3;16890:67;:::i;:::-;16883:74;;16966:93;17055:3;16966:93;:::i;:::-;17084:2;17079:3;17075:12;17068:19;;16727:366;;;:::o;17099:118::-;17186:24;17204:5;17186:24;:::i;:::-;17181:3;17174:37;17099:118;;:::o;17223:429::-;17400:3;17422:92;17510:3;17501:6;17422:92;:::i;:::-;17415:99;;17531:95;17622:3;17613:6;17531:95;:::i;:::-;17524:102;;17643:3;17636:10;;17223:429;;;;;:::o;17658:222::-;17751:4;17789:2;17778:9;17774:18;17766:26;;17802:71;17870:1;17859:9;17855:17;17846:6;17802:71;:::i;:::-;17658:222;;;;:::o;17886:640::-;18081:4;18119:3;18108:9;18104:19;18096:27;;18133:71;18201:1;18190:9;18186:17;18177:6;18133:71;:::i;:::-;18214:72;18282:2;18271:9;18267:18;18258:6;18214:72;:::i;:::-;18296;18364:2;18353:9;18349:18;18340:6;18296:72;:::i;:::-;18415:9;18409:4;18405:20;18400:2;18389:9;18385:18;18378:48;18443:76;18514:4;18505:6;18443:76;:::i;:::-;18435:84;;17886:640;;;;;;;:::o;18532:332::-;18653:4;18691:2;18680:9;18676:18;18668:26;;18704:71;18772:1;18761:9;18757:17;18748:6;18704:71;:::i;:::-;18785:72;18853:2;18842:9;18838:18;18829:6;18785:72;:::i;:::-;18532:332;;;;;:::o;18870:210::-;18957:4;18995:2;18984:9;18980:18;18972:26;;19008:65;19070:1;19059:9;19055:17;19046:6;19008:65;:::i;:::-;18870:210;;;;:::o;19086:313::-;19199:4;19237:2;19226:9;19222:18;19214:26;;19286:9;19280:4;19276:20;19272:1;19261:9;19257:17;19250:47;19314:78;19387:4;19378:6;19314:78;:::i;:::-;19306:86;;19086:313;;;;:::o;19405:419::-;19571:4;19609:2;19598:9;19594:18;19586:26;;19658:9;19652:4;19648:20;19644:1;19633:9;19629:17;19622:47;19686:131;19812:4;19686:131;:::i;:::-;19678:139;;19405:419;;;:::o;19830:::-;19996:4;20034:2;20023:9;20019:18;20011:26;;20083:9;20077:4;20073:20;20069:1;20058:9;20054:17;20047:47;20111:131;20237:4;20111:131;:::i;:::-;20103:139;;19830:419;;;:::o;20255:::-;20421:4;20459:2;20448:9;20444:18;20436:26;;20508:9;20502:4;20498:20;20494:1;20483:9;20479:17;20472:47;20536:131;20662:4;20536:131;:::i;:::-;20528:139;;20255:419;;;:::o;20680:::-;20846:4;20884:2;20873:9;20869:18;20861:26;;20933:9;20927:4;20923:20;20919:1;20908:9;20904:17;20897:47;20961:131;21087:4;20961:131;:::i;:::-;20953:139;;20680:419;;;:::o;21105:::-;21271:4;21309:2;21298:9;21294:18;21286:26;;21358:9;21352:4;21348:20;21344:1;21333:9;21329:17;21322:47;21386:131;21512:4;21386:131;:::i;:::-;21378:139;;21105:419;;;:::o;21530:::-;21696:4;21734:2;21723:9;21719:18;21711:26;;21783:9;21777:4;21773:20;21769:1;21758:9;21754:17;21747:47;21811:131;21937:4;21811:131;:::i;:::-;21803:139;;21530:419;;;:::o;21955:::-;22121:4;22159:2;22148:9;22144:18;22136:26;;22208:9;22202:4;22198:20;22194:1;22183:9;22179:17;22172:47;22236:131;22362:4;22236:131;:::i;:::-;22228:139;;21955:419;;;:::o;22380:::-;22546:4;22584:2;22573:9;22569:18;22561:26;;22633:9;22627:4;22623:20;22619:1;22608:9;22604:17;22597:47;22661:131;22787:4;22661:131;:::i;:::-;22653:139;;22380:419;;;:::o;22805:::-;22971:4;23009:2;22998:9;22994:18;22986:26;;23058:9;23052:4;23048:20;23044:1;23033:9;23029:17;23022:47;23086:131;23212:4;23086:131;:::i;:::-;23078:139;;22805:419;;;:::o;23230:::-;23396:4;23434:2;23423:9;23419:18;23411:26;;23483:9;23477:4;23473:20;23469:1;23458:9;23454:17;23447:47;23511:131;23637:4;23511:131;:::i;:::-;23503:139;;23230:419;;;:::o;23655:::-;23821:4;23859:2;23848:9;23844:18;23836:26;;23908:9;23902:4;23898:20;23894:1;23883:9;23879:17;23872:47;23936:131;24062:4;23936:131;:::i;:::-;23928:139;;23655:419;;;:::o;24080:::-;24246:4;24284:2;24273:9;24269:18;24261:26;;24333:9;24327:4;24323:20;24319:1;24308:9;24304:17;24297:47;24361:131;24487:4;24361:131;:::i;:::-;24353:139;;24080:419;;;:::o;24505:::-;24671:4;24709:2;24698:9;24694:18;24686:26;;24758:9;24752:4;24748:20;24744:1;24733:9;24729:17;24722:47;24786:131;24912:4;24786:131;:::i;:::-;24778:139;;24505:419;;;:::o;24930:::-;25096:4;25134:2;25123:9;25119:18;25111:26;;25183:9;25177:4;25173:20;25169:1;25158:9;25154:17;25147:47;25211:131;25337:4;25211:131;:::i;:::-;25203:139;;24930:419;;;:::o;25355:::-;25521:4;25559:2;25548:9;25544:18;25536:26;;25608:9;25602:4;25598:20;25594:1;25583:9;25579:17;25572:47;25636:131;25762:4;25636:131;:::i;:::-;25628:139;;25355:419;;;:::o;25780:::-;25946:4;25984:2;25973:9;25969:18;25961:26;;26033:9;26027:4;26023:20;26019:1;26008:9;26004:17;25997:47;26061:131;26187:4;26061:131;:::i;:::-;26053:139;;25780:419;;;:::o;26205:::-;26371:4;26409:2;26398:9;26394:18;26386:26;;26458:9;26452:4;26448:20;26444:1;26433:9;26429:17;26422:47;26486:131;26612:4;26486:131;:::i;:::-;26478:139;;26205:419;;;:::o;26630:::-;26796:4;26834:2;26823:9;26819:18;26811:26;;26883:9;26877:4;26873:20;26869:1;26858:9;26854:17;26847:47;26911:131;27037:4;26911:131;:::i;:::-;26903:139;;26630:419;;;:::o;27055:222::-;27148:4;27186:2;27175:9;27171:18;27163:26;;27199:71;27267:1;27256:9;27252:17;27243:6;27199:71;:::i;:::-;27055:222;;;;:::o;27283:129::-;27317:6;27344:20;;:::i;:::-;27334:30;;27373:33;27401:4;27393:6;27373:33;:::i;:::-;27283:129;;;:::o;27418:75::-;27451:6;27484:2;27478:9;27468:19;;27418:75;:::o;27499:307::-;27560:4;27650:18;27642:6;27639:30;27636:56;;;27672:18;;:::i;:::-;27636:56;27710:29;27732:6;27710:29;:::i;:::-;27702:37;;27794:4;27788;27784:15;27776:23;;27499:307;;;:::o;27812:308::-;27874:4;27964:18;27956:6;27953:30;27950:56;;;27986:18;;:::i;:::-;27950:56;28024:29;28046:6;28024:29;:::i;:::-;28016:37;;28108:4;28102;28098:15;28090:23;;27812:308;;;:::o;28126:141::-;28175:4;28198:3;28190:11;;28221:3;28218:1;28211:14;28255:4;28252:1;28242:18;28234:26;;28126:141;;;:::o;28273:98::-;28324:6;28358:5;28352:12;28342:22;;28273:98;;;:::o;28377:99::-;28429:6;28463:5;28457:12;28447:22;;28377:99;;;:::o;28482:168::-;28565:11;28599:6;28594:3;28587:19;28639:4;28634:3;28630:14;28615:29;;28482:168;;;;:::o;28656:169::-;28740:11;28774:6;28769:3;28762:19;28814:4;28809:3;28805:14;28790:29;;28656:169;;;;:::o;28831:148::-;28933:11;28970:3;28955:18;;28831:148;;;;:::o;28985:305::-;29025:3;29044:20;29062:1;29044:20;:::i;:::-;29039:25;;29078:20;29096:1;29078:20;:::i;:::-;29073:25;;29232:1;29164:66;29160:74;29157:1;29154:81;29151:107;;;29238:18;;:::i;:::-;29151:107;29282:1;29279;29275:9;29268:16;;28985:305;;;;:::o;29296:185::-;29336:1;29353:20;29371:1;29353:20;:::i;:::-;29348:25;;29387:20;29405:1;29387:20;:::i;:::-;29382:25;;29426:1;29416:35;;29431:18;;:::i;:::-;29416:35;29473:1;29470;29466:9;29461:14;;29296:185;;;;:::o;29487:191::-;29527:4;29547:20;29565:1;29547:20;:::i;:::-;29542:25;;29581:20;29599:1;29581:20;:::i;:::-;29576:25;;29620:1;29617;29614:8;29611:34;;;29625:18;;:::i;:::-;29611:34;29670:1;29667;29663:9;29655:17;;29487:191;;;;:::o;29684:96::-;29721:7;29750:24;29768:5;29750:24;:::i;:::-;29739:35;;29684:96;;;:::o;29786:90::-;29820:7;29863:5;29856:13;29849:21;29838:32;;29786:90;;;:::o;29882:149::-;29918:7;29958:66;29951:5;29947:78;29936:89;;29882:149;;;:::o;30037:126::-;30074:7;30114:42;30107:5;30103:54;30092:65;;30037:126;;;:::o;30169:77::-;30206:7;30235:5;30224:16;;30169:77;;;:::o;30252:154::-;30336:6;30331:3;30326;30313:30;30398:1;30389:6;30384:3;30380:16;30373:27;30252:154;;;:::o;30412:307::-;30480:1;30490:113;30504:6;30501:1;30498:13;30490:113;;;30589:1;30584:3;30580:11;30574:18;30570:1;30565:3;30561:11;30554:39;30526:2;30523:1;30519:10;30514:15;;30490:113;;;30621:6;30618:1;30615:13;30612:101;;;30701:1;30692:6;30687:3;30683:16;30676:27;30612:101;30461:258;30412:307;;;:::o;30725:320::-;30769:6;30806:1;30800:4;30796:12;30786:22;;30853:1;30847:4;30843:12;30874:18;30864:81;;30930:4;30922:6;30918:17;30908:27;;30864:81;30992:2;30984:6;30981:14;30961:18;30958:38;30955:84;;;31011:18;;:::i;:::-;30955:84;30776:269;30725:320;;;:::o;31051:281::-;31134:27;31156:4;31134:27;:::i;:::-;31126:6;31122:40;31264:6;31252:10;31249:22;31228:18;31216:10;31213:34;31210:62;31207:88;;;31275:18;;:::i;:::-;31207:88;31315:10;31311:2;31304:22;31094:238;31051:281;;:::o;31338:233::-;31377:3;31400:24;31418:5;31400:24;:::i;:::-;31391:33;;31446:66;31439:5;31436:77;31433:103;;;31516:18;;:::i;:::-;31433:103;31563:1;31556:5;31552:13;31545:20;;31338:233;;;:::o;31577:176::-;31609:1;31626:20;31644:1;31626:20;:::i;:::-;31621:25;;31660:20;31678:1;31660:20;:::i;:::-;31655:25;;31699:1;31689:35;;31704:18;;:::i;:::-;31689:35;31745:1;31742;31738:9;31733:14;;31577:176;;;;:::o;31759:180::-;31807:77;31804:1;31797:88;31904:4;31901:1;31894:15;31928:4;31925:1;31918:15;31945:180;31993:77;31990:1;31983:88;32090:4;32087:1;32080:15;32114:4;32111:1;32104:15;32131:180;32179:77;32176:1;32169:88;32276:4;32273:1;32266:15;32300:4;32297:1;32290:15;32317:180;32365:77;32362:1;32355:88;32462:4;32459:1;32452:15;32486:4;32483:1;32476:15;32503:180;32551:77;32548:1;32541:88;32648:4;32645:1;32638:15;32672:4;32669:1;32662:15;32689:117;32798:1;32795;32788:12;32812:117;32921:1;32918;32911:12;32935:117;33044:1;33041;33034:12;33058:117;33167:1;33164;33157:12;33181:102;33222:6;33273:2;33269:7;33264:2;33257:5;33253:14;33249:28;33239:38;;33181:102;;;:::o;33289:232::-;33429:34;33425:1;33417:6;33413:14;33406:58;33498:15;33493:2;33485:6;33481:15;33474:40;33289:232;:::o;33527:230::-;33667:34;33663:1;33655:6;33651:14;33644:58;33736:13;33731:2;33723:6;33719:15;33712:38;33527:230;:::o;33763:237::-;33903:34;33899:1;33891:6;33887:14;33880:58;33972:20;33967:2;33959:6;33955:15;33948:45;33763:237;:::o;34006:224::-;34146:34;34142:1;34134:6;34130:14;34123:58;34215:7;34210:2;34202:6;34198:15;34191:32;34006:224;:::o;34236:178::-;34376:30;34372:1;34364:6;34360:14;34353:54;34236:178;:::o;34420:223::-;34560:34;34556:1;34548:6;34544:14;34537:58;34629:6;34624:2;34616:6;34612:15;34605:31;34420:223;:::o;34649:175::-;34789:27;34785:1;34777:6;34773:14;34766:51;34649:175;:::o;34830:229::-;34970:34;34966:1;34958:6;34954:14;34947:58;35039:12;35034:2;35026:6;35022:15;35015:37;34830:229;:::o;35065:220::-;35205:34;35201:1;35193:6;35189:14;35182:58;35274:3;35269:2;35261:6;35257:15;35250:28;35065:220;:::o;35291:161::-;35431:13;35427:1;35419:6;35415:14;35408:37;35291:161;:::o;35458:182::-;35598:34;35594:1;35586:6;35582:14;35575:58;35458:182;:::o;35646:172::-;35786:24;35782:1;35774:6;35770:14;35763:48;35646:172;:::o;35824:182::-;35964:34;35960:1;35952:6;35948:14;35941:58;35824:182;:::o;36012:174::-;36152:26;36148:1;36140:6;36136:14;36129:50;36012:174;:::o;36192:220::-;36332:34;36328:1;36320:6;36316:14;36309:58;36401:3;36396:2;36388:6;36384:15;36377:28;36192:220;:::o;36418:248::-;36558:34;36554:1;36546:6;36542:14;36535:58;36627:31;36622:2;36614:6;36610:15;36603:56;36418:248;:::o;36672:231::-;36812:34;36808:1;36800:6;36796:14;36789:58;36881:14;36876:2;36868:6;36864:15;36857:39;36672:231;:::o;36909:223::-;37049:34;37045:1;37037:6;37033:14;37026:58;37118:6;37113:2;37105:6;37101:15;37094:31;36909:223;:::o;37138:122::-;37211:24;37229:5;37211:24;:::i;:::-;37204:5;37201:35;37191:63;;37250:1;37247;37240:12;37191:63;37138:122;:::o;37266:116::-;37336:21;37351:5;37336:21;:::i;:::-;37329:5;37326:32;37316:60;;37372:1;37369;37362:12;37316:60;37266:116;:::o;37388:120::-;37460:23;37477:5;37460:23;:::i;:::-;37453:5;37450:34;37440:62;;37498:1;37495;37488:12;37440:62;37388:120;:::o;37514:122::-;37587:24;37605:5;37587:24;:::i;:::-;37580:5;37577:35;37567:63;;37626:1;37623;37616:12;37567:63;37514:122;:::o

Swarm Source

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