ETH Price: $2,390.98 (-1.95%)

Token

FemVerse (Fem)
 

Overview

Max Total Supply

557 Fem

Holders

377

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 Fem
0x8bf98a67dcdd3efa0aa4379bdd8cfee754a9bb74
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:
Femverse

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, GNU GPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-01-03
*/

// SPDX-License-Identifier: GPL-3.0
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
pragma solidity ^0.8.0;
interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
pragma solidity ^0.8.0;
interface IERC721 is IERC165 {
    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
    function balanceOf(address owner) external view returns (uint256 balance);
    function ownerOf(uint256 tokenId) external view returns (address owner);
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;
    function approve(address to, uint256 tokenId) external;
    function getApproved(uint256 tokenId) external view returns (address operator);
    function setApprovalForAll(address operator, bool _approved) external;
    function isApprovedForAll(address owner, address operator) external view returns (bool);
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol
pragma solidity ^0.8.0;
interface IERC721Metadata is IERC721 {
    function name() external view returns (string memory);

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

    function tokenURI(uint256 tokenId) external view returns (string memory);
}

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

pragma solidity ^0.8.0;

abstract contract ERC165 is IERC165 {
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}
// File: @openzeppelin/contracts/utils/Context.sol
pragma solidity ^0.8.0;
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
// File: @openzeppelin/contracts/token/ERC721/ERC721.sol
pragma solidity ^0.8.0;
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;
    string private _name;
    string private _symbol;
    mapping(uint256 => address) private _owners;
    mapping(address => uint256) private _balances;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC721).interfaceId ||
            interfaceId == type(IERC721Metadata).interfaceId ||
            super.supportsInterface(interfaceId);
    }
    function balanceOf(address owner) public view virtual override returns (uint256) {
        require(owner != address(0), "ERC721: balance query for the zero address");
        return _balances[owner];
    }
    function ownerOf(uint256 tokenId) public view virtual override returns (address) {
        address owner = _owners[tokenId];
        require(owner != address(0), "ERC721: owner query for nonexistent token");
        return owner;
    }
    function name() public view virtual override returns (string memory) {
        return _name;
    }
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");

        string memory baseURI = _baseURI();
        return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : "";
    }
    function _baseURI() internal view virtual returns (string memory) {
        return "";
    }
    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 owner nor approved for all"
        );

        _approve(to, tokenId);
    }
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        require(_exists(tokenId), "ERC721: approved query for nonexistent token");

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

    function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[owner][operator];
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        //solhint-disable-next-line max-line-length
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");

        _transfer(from, to, tokenId);
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved");
        _safeTransfer(from, to, tokenId, _data);
    }
    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");
    }
    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _owners[tokenId] != address(0);
    }
    function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) {
        require(_exists(tokenId), "ERC721: operator query for nonexistent token");
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
    }
    function _safeMint(address to, uint256 tokenId) internal virtual {
        _safeMint(to, tokenId, "");
    }
    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"
        );
    }
    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");

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

        _balances[to] += 1;
        _owners[tokenId] = to;

        emit Transfer(address(0), to, tokenId);
    }
    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);

        _beforeTokenTransfer(owner, address(0), tokenId);

        _approve(address(0), tokenId);

        _balances[owner] -= 1;
        delete _owners[tokenId];

        emit Transfer(owner, address(0), tokenId);
    }
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");
        _beforeTokenTransfer(from, to, tokenId);
        _approve(address(0), tokenId);
        _balances[from] -= 1;
        _balances[to] += 1;
        _owners[tokenId] = to;
        emit Transfer(from, to, tokenId);
    }
    function _approve(address to, uint256 tokenId) internal virtual {
        _tokenApprovals[tokenId] = to;
        emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
    }
    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 {
                    assembly {
                        revert(add(32, reason), mload(reason))
                    }
                }
            }
        } else {
            return true;
        }
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}
// File: @openzeppelin/contracts/utils/cryptography/ECDSA.sol
pragma solidity ^0.8.0;
library ECDSA {
    enum RecoverError {
        NoError,
        InvalidSignature,
        InvalidSignatureLength,
        InvalidSignatureS,
        InvalidSignatureV
    }
    function _throwError(RecoverError error) private pure {
        if (error == RecoverError.NoError) {
            return; // no error: do nothing
        } else if (error == RecoverError.InvalidSignature) {
            revert("ECDSA: invalid signature");
        } else if (error == RecoverError.InvalidSignatureLength) {
            revert("ECDSA: invalid signature length");
        } else if (error == RecoverError.InvalidSignatureS) {
            revert("ECDSA: invalid signature 's' value");
        } else if (error == RecoverError.InvalidSignatureV) {
            revert("ECDSA: invalid signature 'v' value");
        }
    }
    function tryRecover(bytes32 hash, bytes memory signature) internal pure returns (address, RecoverError) {
        if (signature.length == 65) {
            bytes32 r;
            bytes32 s;
            uint8 v;
            assembly {
                r := mload(add(signature, 0x20))
                s := mload(add(signature, 0x40))
                v := byte(0, mload(add(signature, 0x60)))
            }
            return tryRecover(hash, v, r, s);
        } else if (signature.length == 64) {
            bytes32 r;
            bytes32 vs;
            assembly {
                r := mload(add(signature, 0x20))
                vs := mload(add(signature, 0x40))
            }
            return tryRecover(hash, r, vs);
        } else {
            return (address(0), RecoverError.InvalidSignatureLength);
        }
    }
    function recover(bytes32 hash, bytes memory signature) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, signature);
        _throwError(error);
        return recovered;
    }
    function tryRecover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address, RecoverError) {
        bytes32 s;
        uint8 v;
        assembly {
            s := and(vs, 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff)
            v := add(shr(255, vs), 27)
        }
        return tryRecover(hash, v, r, s);
    }
    function recover(
        bytes32 hash,
        bytes32 r,
        bytes32 vs
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, r, vs);
        _throwError(error);
        return recovered;
    }
    function tryRecover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address, RecoverError) {
        if (uint256(s) > 0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D576E7357A4501DDFE92F46681B20A0) {
            return (address(0), RecoverError.InvalidSignatureS);
        }
        if (v != 27 && v != 28) {
            return (address(0), RecoverError.InvalidSignatureV);
        }
        address signer = ecrecover(hash, v, r, s);
        if (signer == address(0)) {
            return (address(0), RecoverError.InvalidSignature);
        }

        return (signer, RecoverError.NoError);
    }
    function recover(
        bytes32 hash,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) internal pure returns (address) {
        (address recovered, RecoverError error) = tryRecover(hash, v, r, s);
        _throwError(error);
        return recovered;
    }
    function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) {
        // 32 is the length in bytes of hash,
        // enforced by the type signature above
        return keccak256(abi.encodePacked("\x19Ethereum Signed Message:\n32", hash));
    }
    function toTypedDataHash(bytes32 domainSeparator, bytes32 structHash) internal pure returns (bytes32) {
        return keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash));
    }
}
// File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol
pragma solidity ^0.8.0;
interface IERC721Enumerable is IERC721 {
    function totalSupply() external view returns (uint256);
    function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId);
    function tokenByIndex(uint256 index) external view returns (uint256);
}
// File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol
pragma solidity ^0.8.0;
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
    mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
    mapping(uint256 => uint256) private _ownedTokensIndex;
    uint256[] private _allTokens;
    mapping(uint256 => uint256) private _allTokensIndex;
    function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
        return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId);
    }
    function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds");
        return _ownedTokens[owner][index];
    }
    function totalSupply() public view virtual override returns (uint256) {
        return _allTokens.length;
    }
    function tokenByIndex(uint256 index) public view virtual override returns (uint256) {
        require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds");
        return _allTokens[index];
    }
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual override {
        super._beforeTokenTransfer(from, to, tokenId);

        if (from == address(0)) {
            _addTokenToAllTokensEnumeration(tokenId);
        } else if (from != to) {
            _removeTokenFromOwnerEnumeration(from, tokenId);
        }
        if (to == address(0)) {
            _removeTokenFromAllTokensEnumeration(tokenId);
        } else if (to != from) {
            _addTokenToOwnerEnumeration(to, tokenId);
        }
    }
    function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
        uint256 length = ERC721.balanceOf(to);
        _ownedTokens[to][length] = tokenId;
        _ownedTokensIndex[tokenId] = length;
    }
    function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
        _allTokensIndex[tokenId] = _allTokens.length;
        _allTokens.push(tokenId);
    }
    function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private {
        uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
        uint256 tokenIndex = _ownedTokensIndex[tokenId];

        if (tokenIndex != lastTokenIndex) {
            uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];

            _ownedTokens[from][tokenIndex] = lastTokenId;
            _ownedTokensIndex[lastTokenId] = tokenIndex;
        }

        delete _ownedTokensIndex[tokenId];
        delete _ownedTokens[from][lastTokenIndex];
    }
    function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
        uint256 lastTokenIndex = _allTokens.length - 1;
        uint256 tokenIndex = _allTokensIndex[tokenId];
        uint256 lastTokenId = _allTokens[lastTokenIndex];

        _allTokens[tokenIndex] = lastTokenId;
        _allTokensIndex[lastTokenId] = tokenIndex;

        delete _allTokensIndex[tokenId];
        _allTokens.pop();
    }
}
// File: @openzeppelin/contracts/utils/Strings.sol
pragma solidity ^0.8.0;
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    function toString(uint256 value) internal pure returns (string memory) {
        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);
    }
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}
// File: @openzeppelin/contracts/utils/Address.sol
pragma solidity ^0.8.0;
library Address {
    function isContract(address account) internal view returns (bool) {
        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol
pragma solidity ^0.8.0;
interface IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/access/Ownable.sol
pragma solidity ^0.8.0;
abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
    constructor() {
        _setOwner(_msgSender());
    }
    function owner() public view virtual returns (address) {
        return _owner;
    }
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

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

// File: contracts/Femverse.sol
// Written by: @zestrells
pragma solidity ^0.8.4;

contract Femverse is ERC721Enumerable, Ownable {
    using Strings for uint256;
    using ECDSA for bytes32;
    uint256 public FEMVERSE_GIFT = 555; // first 555 NFTs free
    // uint256 public FEMVERSE_PRESALE = 0;
    uint256 public FEMVERSE_PUBLIC = 5000;
    // uint256 public FEMVERSE_MAX = FEMVERSE_GIFT + FEMVERSE_PRESALE + FEMVERSE_PUBLIC;
    uint256 public FEMVERSE_MAX = FEMVERSE_GIFT + FEMVERSE_PUBLIC;
    uint256 public FEMVERSE_PRICE = .0555 ether;
    uint256 public FEMVERSE_FREE_PRICE = 0 ether;
    // uint256 public FEMVERSE_PRESALE_PRICE = .03 ether;
    uint256 public FEMVERSE_PER_MINT = 5;
    uint256 public constant FEMVERSE_PER_FREE_MINT = 1;
    // mapping(address => bool) public presalerList;
    // mapping(address => uint256) public presalerListPurchases;
    string private _tokenBaseURI = "https://mint.femverse.org/api/";
    uint256 public giftedAmount;
    uint256 public publicAmountMinted;
    // uint256 public privateAmountMinted;
    // uint256 public presalePurchaseLimit = 13;
    // bool public presaleLive;
    bool public saleLive;
    constructor() ERC721("FemVerse", "Fem") payable { }
    // function addToPresaleList(address[] calldata entries) external onlyOwner {
    //     for(uint256 i = 0; i < entries.length; i++) {
    //         address entry = entries[i];
    //         require(entry != address(0), "NULL_ADDRESS");
    //         require(!presalerList[entry], "DUPLICATE_ENTRY");
    //         presalerList[entry] = true;
    //     }
    // }
    // function removeFromPresaleList(address[] calldata entries) external onlyOwner {
    //     for(uint256 i = 0; i < entries.length; i++) {
    //         address entry = entries[i];
    //         require(entry != address(0), "NULL_ADDRESS");
    //         presalerList[entry] = false;
    //     }
    // }
    // function togglePresaleStatus() external onlyOwner {
    //     presaleLive = !presaleLive;
    // }
    function toggleSaleStatus() external onlyOwner {
        saleLive = !saleLive;
    }
    function buy(uint256 tokenQuantity) external payable {
        require(saleLive, "SALE_CLOSED");
        // require(!presaleLive, "ONLY_PRESALE");
        require((totalSupply() + 1) < FEMVERSE_MAX, "Out of stock.");
        require(publicAmountMinted + tokenQuantity <= FEMVERSE_PUBLIC, "EXCEED_PUBLIC");
        require(tokenQuantity <= FEMVERSE_PER_MINT, "EXCEED_FEMVERSE_PER_MINT");
        for(uint i = 0; i < tokenQuantity; i++) {
            uint _mintId = totalSupply() + 1; // iterate from 1
            // if (_mintId > 100 && _mintId < 301) {
            if (_mintId < 555) {
                require(tokenQuantity <= FEMVERSE_PER_FREE_MINT, "EXCEED_FEMVERSE_PER_FREE_MINT");
                _safeMint(msg.sender, _mintId);
                publicAmountMinted++;
            } else {
                require(FEMVERSE_PRICE * tokenQuantity <= msg.value, "Insufficient ETH.");
                _safeMint(msg.sender, _mintId);
                publicAmountMinted++;
            }
        }
    }
    // function presaleBuy(uint256 tokenQuantity) external payable {
    //     // require(!saleLive && presaleLive, "The presale has finished.");
    //     require(presalerList[msg.sender], "You are not qualified for the presale.");
    //     require((totalSupply() + 1) < FEMVERSE_MAX, "Out of stock.");
    //     require(privateAmountMinted + tokenQuantity <= FEMVERSE_PRESALE, "EXCEED_PRIVATE");
    //     require(presalerListPurchases[msg.sender] + tokenQuantity <= presalePurchaseLimit, "You have reached your maximum purchase amount.");
    //     require(FEMVERSE_PRESALE_PRICE * tokenQuantity <= msg.value, "Insufficient ETH.");
    //     for (uint256 i = 0; i < tokenQuantity; i++) {
    //         uint _mintId = totalSupply() + 1; // iterate from 1
    //         presalerListPurchases[msg.sender]++;
    //         _safeMint(msg.sender, _mintId);
    //         privateAmountMinted++;
    //     }
    // }
    function gift(address[] calldata receivers) external onlyOwner {
        require((totalSupply() + 1) + receivers.length <= FEMVERSE_MAX, "MAX_MINT");
        require(giftedAmount + receivers.length <= FEMVERSE_GIFT, "GIFTS_EMPTY");
        for (uint256 i = 0; i < receivers.length; i++) {
            uint _mintId = totalSupply() + 1; // iterate from 1
            _safeMint(receivers[i], _mintId);
            giftedAmount++;
        }
    }
    function withdrawTeam() external onlyOwner {
        uint balance = address(this).balance;
        payable(msg.sender).transfer(balance);
    }
    // function isPresaler(address addr) external view returns (bool) {
    //     return presalerList[addr];
    // }
    // function presalePurchasedCount(address addr) external view returns (uint256) {
    //     return presalerListPurchases[addr];
    // }
    function setBaseURI(string calldata URI) external onlyOwner {
        _tokenBaseURI = URI;
    }
    // function setPresaleAmount(uint256 number) external onlyOwner {
    //     FEMVERSE_PRESALE = number;
    //     FEMVERSE_MAX = FEMVERSE_GIFT + FEMVERSE_PRESALE + FEMVERSE_PUBLIC;
    // }
    function setPublicAmount(uint256 number) external onlyOwner {
        FEMVERSE_PUBLIC = number;
        // FEMVERSE_MAX = FEMVERSE_GIFT + FEMVERSE_PRESALE + FEMVERSE_PUBLIC;
        FEMVERSE_MAX = FEMVERSE_GIFT + FEMVERSE_PUBLIC;
    }
    function setGiftAmount(uint256 number) external onlyOwner {
        FEMVERSE_GIFT = number;
        // FEMVERSE_MAX = FEMVERSE_GIFT + FEMVERSE_PRESALE + FEMVERSE_PUBLIC;
        FEMVERSE_MAX = FEMVERSE_GIFT + FEMVERSE_PUBLIC;
    }
    function setFemVersePerMint(uint256 number) external onlyOwner {
        FEMVERSE_PER_MINT = number;
    }
    function setPrice(uint256 number) external onlyOwner {
        FEMVERSE_PRICE = number;
    }
    // function setPresalePrice(uint256 number) external onlyOwner {
    //     FEMVERSE_PRESALE_PRICE = number;
    // }
    function tokenURI(uint256 tokenId) public view override(ERC721) returns (string memory) {
        require(_exists(tokenId), "Cannot query non-existent token");
        return string(abi.encodePacked(_tokenBaseURI, tokenId.toString()));
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"FEMVERSE_FREE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEMVERSE_GIFT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEMVERSE_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEMVERSE_PER_FREE_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEMVERSE_PER_MINT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEMVERSE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"FEMVERSE_PUBLIC","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"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":[{"internalType":"uint256","name":"tokenQuantity","type":"uint256"}],"name":"buy","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"receivers","type":"address[]"}],"name":"gift","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"giftedAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"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":[],"name":"publicAmountMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","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":"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":[],"name":"saleLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"setFemVersePerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"setGiftAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"number","type":"uint256"}],"name":"setPublicAmount","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":[],"name":"toggleSaleStatus","outputs":[],"stateMutability":"nonpayable","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":"","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawTeam","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405261022b600b55611388600c55600c54600b54620000229190620002cc565b600d5566c52cf4b908c000600e556000600f5560056010556040518060400160405280601e81526020017f68747470733a2f2f6d696e742e66656d76657273652e6f72672f6170692f000081525060119080519060200190620000879291906200021c565b506040518060400160405280600881526020017f46656d56657273650000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f46656d000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200010c9291906200021c565b508060019080519060200190620001259291906200021c565b505050620001486200013c6200014e60201b60201c565b6200015660201b60201c565b620003c7565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022a9062000333565b90600052602060002090601f0160209004810192826200024e57600085556200029a565b82601f106200026957805160ff19168380011785556200029a565b828001600101855582156200029a579182015b82811115620002995782518255916020019190600101906200027c565b5b509050620002a99190620002ad565b5090565b5b80821115620002c8576000816000905550600101620002ae565b5090565b6000620002d98262000329565b9150620002e68362000329565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200031e576200031d62000369565b5b828201905092915050565b6000819050919050565b600060028204905060018216806200034c57607f821691505b6020821081141562000363576200036262000398565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6145e980620003d76000396000f3fe6080604052600436106102255760003560e01c806370a0823111610123578063bb51f32d116100ab578063d96a094a1161006f578063d96a094a146107e1578063e081b781146107fd578063e985e9c514610828578063ecc9339d14610865578063f2fde38b1461089057610225565b8063bb51f32d1461070e578063c029efa914610725578063c87b56dd14610750578063cb9eb5331461078d578063d94df301146107b657610225565b8063940f1ada116100f2578063940f1ada1461063d57806395d89b4114610668578063a22cb46514610693578063a5dd8000146106bc578063b88d4fde146106e557610225565b806370a0823114610595578063715018a6146105d25780638da5cb5b146105e957806391b7f5ed1461061457610225565b806323b872dd116101b157806355f804b31161017557806355f804b3146104ae5780635945cc1c146104d75780635b97a972146105025780636352211e1461052d57806368fc75001461056a57610225565b806323b872dd146103b95780632f745c59146103e257806342842e0e1461041f5780634f6ccce714610448578063544867581461048557610225565b8063095ea7b3116101f8578063095ea7b3146102e65780630badc92b1461030f578063163e1e611461033a57806318160ddd146103635780631b57190e1461038e57610225565b806301ffc9a71461022a578063049c5c491461026757806306fdde031461027e578063081812fc146102a9575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906130cc565b6108b9565b60405161025e9190613708565b60405180910390f35b34801561027357600080fd5b5061027c610933565b005b34801561028a57600080fd5b506102936109db565b6040516102a09190613723565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb9190613173565b610a6d565b6040516102dd91906136a1565b60405180910390f35b3480156102f257600080fd5b5061030d6004803603810190610308919061303f565b610af2565b005b34801561031b57600080fd5b50610324610c0a565b6040516103319190613a85565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c919061307f565b610c10565b005b34801561036f57600080fd5b50610378610dcf565b6040516103859190613a85565b60405180910390f35b34801561039a57600080fd5b506103a3610ddc565b6040516103b09190613a85565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190612f29565b610de2565b005b3480156103ee57600080fd5b506104096004803603810190610404919061303f565b610e42565b6040516104169190613a85565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612f29565b610ee7565b005b34801561045457600080fd5b5061046f600480360381019061046a9190613173565b610f07565b60405161047c9190613a85565b60405180910390f35b34801561049157600080fd5b506104ac60048036038101906104a79190613173565b610f78565b005b3480156104ba57600080fd5b506104d560048036038101906104d09190613126565b610ffe565b005b3480156104e357600080fd5b506104ec611090565b6040516104f99190613a85565b60405180910390f35b34801561050e57600080fd5b50610517611096565b6040516105249190613a85565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f9190613173565b61109b565b60405161056191906136a1565b60405180910390f35b34801561057657600080fd5b5061057f61114d565b60405161058c9190613a85565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b79190612ebc565b611153565b6040516105c99190613a85565b60405180910390f35b3480156105de57600080fd5b506105e761120b565b005b3480156105f557600080fd5b506105fe611293565b60405161060b91906136a1565b60405180910390f35b34801561062057600080fd5b5061063b60048036038101906106369190613173565b6112bd565b005b34801561064957600080fd5b50610652611343565b60405161065f9190613a85565b60405180910390f35b34801561067457600080fd5b5061067d611349565b60405161068a9190613723565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b59190612fff565b6113db565b005b3480156106c857600080fd5b506106e360048036038101906106de9190613173565b61155c565b005b3480156106f157600080fd5b5061070c60048036038101906107079190612f7c565b6115f8565b005b34801561071a57600080fd5b5061072361165a565b005b34801561073157600080fd5b5061073a611725565b6040516107479190613a85565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190613173565b61172b565b6040516107849190613723565b60405180910390f35b34801561079957600080fd5b506107b460048036038101906107af9190613173565b6117a7565b005b3480156107c257600080fd5b506107cb611843565b6040516107d89190613a85565b60405180910390f35b6107fb60048036038101906107f69190613173565b611849565b005b34801561080957600080fd5b50610812611aa9565b60405161081f9190613708565b60405180910390f35b34801561083457600080fd5b5061084f600480360381019061084a9190612ee9565b611abc565b60405161085c9190613708565b60405180910390f35b34801561087157600080fd5b5061087a611b50565b6040516108879190613a85565b60405180910390f35b34801561089c57600080fd5b506108b760048036038101906108b29190612ebc565b611b56565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092c575061092b82611c4e565b5b9050919050565b61093b611d30565b73ffffffffffffffffffffffffffffffffffffffff16610959611293565b73ffffffffffffffffffffffffffffffffffffffff16146109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a690613965565b60405180910390fd5b601460009054906101000a900460ff1615601460006101000a81548160ff021916908315150217905550565b6060600080546109ea90613d19565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1690613d19565b8015610a635780601f10610a3857610100808354040283529160200191610a63565b820191906000526020600020905b815481529060010190602001808311610a4657829003601f168201915b5050505050905090565b6000610a7882611d38565b610ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aae90613945565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610afd8261109b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6590613a05565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b8d611d30565b73ffffffffffffffffffffffffffffffffffffffff161480610bbc5750610bbb81610bb6611d30565b611abc565b5b610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf290613885565b60405180910390fd5b610c058383611da4565b505050565b600e5481565b610c18611d30565b73ffffffffffffffffffffffffffffffffffffffff16610c36611293565b73ffffffffffffffffffffffffffffffffffffffff1614610c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8390613965565b60405180910390fd5b600d54828290506001610c9d610dcf565b610ca79190613b4e565b610cb19190613b4e565b1115610cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce990613905565b60405180910390fd5b600b5482829050601254610d069190613b4e565b1115610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e906139a5565b60405180910390fd5b60005b82829050811015610dca5760006001610d61610dcf565b610d6b9190613b4e565b9050610d9e848484818110610d8357610d82613eb2565b5b9050602002016020810190610d989190612ebc565b82611e5d565b60126000815480929190610db190613d7c565b9190505550508080610dc290613d7c565b915050610d4a565b505050565b6000600880549050905090565b60125481565b610df3610ded611d30565b82611e7b565b610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2990613a45565b60405180910390fd5b610e3d838383611f59565b505050565b6000610e4d83611153565b8210610e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8590613745565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f02838383604051806020016040528060008152506115f8565b505050565b6000610f11610dcf565b8210610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4990613a65565b60405180910390fd5b60088281548110610f6657610f65613eb2565b5b90600052602060002001549050919050565b610f80611d30565b73ffffffffffffffffffffffffffffffffffffffff16610f9e611293565b73ffffffffffffffffffffffffffffffffffffffff1614610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90613965565b60405180910390fd5b8060108190555050565b611006611d30565b73ffffffffffffffffffffffffffffffffffffffff16611024611293565b73ffffffffffffffffffffffffffffffffffffffff161461107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190613965565b60405180910390fd5b81816011919061108b929190612c94565b505050565b60105481565b600181565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b906138c5565b60405180910390fd5b80915050919050565b600d5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bb906138a5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611213611d30565b73ffffffffffffffffffffffffffffffffffffffff16611231611293565b73ffffffffffffffffffffffffffffffffffffffff1614611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e90613965565b60405180910390fd5b61129160006121b5565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112c5611d30565b73ffffffffffffffffffffffffffffffffffffffff166112e3611293565b73ffffffffffffffffffffffffffffffffffffffff1614611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090613965565b60405180910390fd5b80600e8190555050565b60135481565b60606001805461135890613d19565b80601f016020809104026020016040519081016040528092919081815260200182805461138490613d19565b80156113d15780601f106113a6576101008083540402835291602001916113d1565b820191906000526020600020905b8154815290600101906020018083116113b457829003601f168201915b5050505050905090565b6113e3611d30565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144890613805565b60405180910390fd5b806005600061145e611d30565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661150b611d30565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115509190613708565b60405180910390a35050565b611564611d30565b73ffffffffffffffffffffffffffffffffffffffff16611582611293565b73ffffffffffffffffffffffffffffffffffffffff16146115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90613965565b60405180910390fd5b80600b81905550600c54600b546115ef9190613b4e565b600d8190555050565b611609611603611d30565b83611e7b565b611648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163f90613a45565b60405180910390fd5b6116548484848461227b565b50505050565b611662611d30565b73ffffffffffffffffffffffffffffffffffffffff16611680611293565b73ffffffffffffffffffffffffffffffffffffffff16146116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cd90613965565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611721573d6000803e3d6000fd5b5050565b600f5481565b606061173682611d38565b611775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176c906139e5565b60405180910390fd5b6011611780836122d7565b60405160200161179192919061367d565b6040516020818303038152906040529050919050565b6117af611d30565b73ffffffffffffffffffffffffffffffffffffffff166117cd611293565b73ffffffffffffffffffffffffffffffffffffffff1614611823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181a90613965565b60405180910390fd5b80600c81905550600c54600b5461183a9190613b4e565b600d8190555050565b600c5481565b601460009054906101000a900460ff16611898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188f90613825565b60405180910390fd5b600d5460016118a5610dcf565b6118af9190613b4e565b106118ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e6906137c5565b60405180910390fd5b600c54816013546119009190613b4e565b1115611941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193890613a25565b60405180910390fd5b601054811115611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d906138e5565b60405180910390fd5b60005b81811015611aa5576000600161199d610dcf565b6119a79190613b4e565b905061022b811015611a1e5760018311156119f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ee90613865565b60405180910390fd5b611a013382611e5d565b60136000815480929190611a1490613d7c565b9190505550611a91565b3483600e54611a2d9190613bd5565b1115611a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6590613985565b60405180910390fd5b611a783382611e5d565b60136000815480929190611a8b90613d7c565b91905055505b508080611a9d90613d7c565b915050611989565b5050565b601460009054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b5481565b611b5e611d30565b73ffffffffffffffffffffffffffffffffffffffff16611b7c611293565b73ffffffffffffffffffffffffffffffffffffffff1614611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc990613965565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3990613785565b60405180910390fd5b611c4b816121b5565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d1957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d295750611d2882612438565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e178361109b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611e778282604051806020016040528060008152506124a2565b5050565b6000611e8682611d38565b611ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebc90613845565b60405180910390fd5b6000611ed08361109b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f3f57508373ffffffffffffffffffffffffffffffffffffffff16611f2784610a6d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f505750611f4f8185611abc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f798261109b565b73ffffffffffffffffffffffffffffffffffffffff1614611fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc6906139c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561203f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612036906137e5565b60405180910390fd5b61204a8383836124fd565b612055600082611da4565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120a59190613c2f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120fc9190613b4e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612286848484611f59565b61229284848484612611565b6122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c890613765565b60405180910390fd5b50505050565b6060600082141561231f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612433565b600082905060005b6000821461235157808061233a90613d7c565b915050600a8261234a9190613ba4565b9150612327565b60008167ffffffffffffffff81111561236d5761236c613ee1565b5b6040519080825280601f01601f19166020018201604052801561239f5781602001600182028036833780820191505090505b5090505b6000851461242c576001826123b89190613c2f565b9150600a856123c79190613dc5565b60306123d39190613b4e565b60f81b8183815181106123e9576123e8613eb2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124259190613ba4565b94506123a3565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6124ac83836127a8565b6124b96000848484612611565b6124f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ef90613765565b60405180910390fd5b505050565b612508838383612976565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561254b576125468161297b565b61258a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146125895761258883826129c4565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125cd576125c881612b31565b61260c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461260b5761260a8282612c02565b5b5b505050565b60006126328473ffffffffffffffffffffffffffffffffffffffff16612c81565b1561279b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261265b611d30565b8786866040518563ffffffff1660e01b815260040161267d94939291906136bc565b602060405180830381600087803b15801561269757600080fd5b505af19250505080156126c857506040513d601f19601f820116820180604052508101906126c591906130f9565b60015b61274b573d80600081146126f8576040519150601f19603f3d011682016040523d82523d6000602084013e6126fd565b606091505b50600081511415612743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273a90613765565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506127a0565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280f90613925565b60405180910390fd5b61282181611d38565b15612861576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612858906137a5565b60405180910390fd5b61286d600083836124fd565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128bd9190613b4e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129d184611153565b6129db9190613c2f565b9050600060076000848152602001908152602001600020549050818114612ac0576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b459190613c2f565b9050600060096000848152602001908152602001600020549050600060088381548110612b7557612b74613eb2565b5b906000526020600020015490508060088381548110612b9757612b96613eb2565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612be657612be5613e83565b5b6001900381819060005260206000200160009055905550505050565b6000612c0d83611153565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612ca090613d19565b90600052602060002090601f016020900481019282612cc25760008555612d09565b82601f10612cdb57803560ff1916838001178555612d09565b82800160010185558215612d09579182015b82811115612d08578235825591602001919060010190612ced565b5b509050612d169190612d1a565b5090565b5b80821115612d33576000816000905550600101612d1b565b5090565b6000612d4a612d4584613ac5565b613aa0565b905082815260208101848484011115612d6657612d65613f1f565b5b612d71848285613cd7565b509392505050565b600081359050612d8881614557565b92915050565b60008083601f840112612da457612da3613f15565b5b8235905067ffffffffffffffff811115612dc157612dc0613f10565b5b602083019150836020820283011115612ddd57612ddc613f1a565b5b9250929050565b600081359050612df38161456e565b92915050565b600081359050612e0881614585565b92915050565b600081519050612e1d81614585565b92915050565b600082601f830112612e3857612e37613f15565b5b8135612e48848260208601612d37565b91505092915050565b60008083601f840112612e6757612e66613f15565b5b8235905067ffffffffffffffff811115612e8457612e83613f10565b5b602083019150836001820283011115612ea057612e9f613f1a565b5b9250929050565b600081359050612eb68161459c565b92915050565b600060208284031215612ed257612ed1613f29565b5b6000612ee084828501612d79565b91505092915050565b60008060408385031215612f0057612eff613f29565b5b6000612f0e85828601612d79565b9250506020612f1f85828601612d79565b9150509250929050565b600080600060608486031215612f4257612f41613f29565b5b6000612f5086828701612d79565b9350506020612f6186828701612d79565b9250506040612f7286828701612ea7565b9150509250925092565b60008060008060808587031215612f9657612f95613f29565b5b6000612fa487828801612d79565b9450506020612fb587828801612d79565b9350506040612fc687828801612ea7565b925050606085013567ffffffffffffffff811115612fe757612fe6613f24565b5b612ff387828801612e23565b91505092959194509250565b6000806040838503121561301657613015613f29565b5b600061302485828601612d79565b925050602061303585828601612de4565b9150509250929050565b6000806040838503121561305657613055613f29565b5b600061306485828601612d79565b925050602061307585828601612ea7565b9150509250929050565b6000806020838503121561309657613095613f29565b5b600083013567ffffffffffffffff8111156130b4576130b3613f24565b5b6130c085828601612d8e565b92509250509250929050565b6000602082840312156130e2576130e1613f29565b5b60006130f084828501612df9565b91505092915050565b60006020828403121561310f5761310e613f29565b5b600061311d84828501612e0e565b91505092915050565b6000806020838503121561313d5761313c613f29565b5b600083013567ffffffffffffffff81111561315b5761315a613f24565b5b61316785828601612e51565b92509250509250929050565b60006020828403121561318957613188613f29565b5b600061319784828501612ea7565b91505092915050565b6131a981613c63565b82525050565b6131b881613c75565b82525050565b60006131c982613b0b565b6131d38185613b21565b93506131e3818560208601613ce6565b6131ec81613f2e565b840191505092915050565b600061320282613b16565b61320c8185613b32565b935061321c818560208601613ce6565b61322581613f2e565b840191505092915050565b600061323b82613b16565b6132458185613b43565b9350613255818560208601613ce6565b80840191505092915050565b6000815461326e81613d19565b6132788186613b43565b9450600182166000811461329357600181146132a4576132d7565b60ff198316865281860193506132d7565b6132ad85613af6565b60005b838110156132cf578154818901526001820191506020810190506132b0565b838801955050505b50505092915050565b60006132ed602b83613b32565b91506132f882613f3f565b604082019050919050565b6000613310603283613b32565b915061331b82613f8e565b604082019050919050565b6000613333602683613b32565b915061333e82613fdd565b604082019050919050565b6000613356601c83613b32565b91506133618261402c565b602082019050919050565b6000613379600d83613b32565b915061338482614055565b602082019050919050565b600061339c602483613b32565b91506133a78261407e565b604082019050919050565b60006133bf601983613b32565b91506133ca826140cd565b602082019050919050565b60006133e2600b83613b32565b91506133ed826140f6565b602082019050919050565b6000613405602c83613b32565b91506134108261411f565b604082019050919050565b6000613428601d83613b32565b91506134338261416e565b602082019050919050565b600061344b603883613b32565b915061345682614197565b604082019050919050565b600061346e602a83613b32565b9150613479826141e6565b604082019050919050565b6000613491602983613b32565b915061349c82614235565b604082019050919050565b60006134b4601883613b32565b91506134bf82614284565b602082019050919050565b60006134d7600883613b32565b91506134e2826142ad565b602082019050919050565b60006134fa602083613b32565b9150613505826142d6565b602082019050919050565b600061351d602c83613b32565b9150613528826142ff565b604082019050919050565b6000613540602083613b32565b915061354b8261434e565b602082019050919050565b6000613563601183613b32565b915061356e82614377565b602082019050919050565b6000613586600b83613b32565b9150613591826143a0565b602082019050919050565b60006135a9602983613b32565b91506135b4826143c9565b604082019050919050565b60006135cc601f83613b32565b91506135d782614418565b602082019050919050565b60006135ef602183613b32565b91506135fa82614441565b604082019050919050565b6000613612600d83613b32565b915061361d82614490565b602082019050919050565b6000613635603183613b32565b9150613640826144b9565b604082019050919050565b6000613658602c83613b32565b915061366382614508565b604082019050919050565b61367781613ccd565b82525050565b60006136898285613261565b91506136958284613230565b91508190509392505050565b60006020820190506136b660008301846131a0565b92915050565b60006080820190506136d160008301876131a0565b6136de60208301866131a0565b6136eb604083018561366e565b81810360608301526136fd81846131be565b905095945050505050565b600060208201905061371d60008301846131af565b92915050565b6000602082019050818103600083015261373d81846131f7565b905092915050565b6000602082019050818103600083015261375e816132e0565b9050919050565b6000602082019050818103600083015261377e81613303565b9050919050565b6000602082019050818103600083015261379e81613326565b9050919050565b600060208201905081810360008301526137be81613349565b9050919050565b600060208201905081810360008301526137de8161336c565b9050919050565b600060208201905081810360008301526137fe8161338f565b9050919050565b6000602082019050818103600083015261381e816133b2565b9050919050565b6000602082019050818103600083015261383e816133d5565b9050919050565b6000602082019050818103600083015261385e816133f8565b9050919050565b6000602082019050818103600083015261387e8161341b565b9050919050565b6000602082019050818103600083015261389e8161343e565b9050919050565b600060208201905081810360008301526138be81613461565b9050919050565b600060208201905081810360008301526138de81613484565b9050919050565b600060208201905081810360008301526138fe816134a7565b9050919050565b6000602082019050818103600083015261391e816134ca565b9050919050565b6000602082019050818103600083015261393e816134ed565b9050919050565b6000602082019050818103600083015261395e81613510565b9050919050565b6000602082019050818103600083015261397e81613533565b9050919050565b6000602082019050818103600083015261399e81613556565b9050919050565b600060208201905081810360008301526139be81613579565b9050919050565b600060208201905081810360008301526139de8161359c565b9050919050565b600060208201905081810360008301526139fe816135bf565b9050919050565b60006020820190508181036000830152613a1e816135e2565b9050919050565b60006020820190508181036000830152613a3e81613605565b9050919050565b60006020820190508181036000830152613a5e81613628565b9050919050565b60006020820190508181036000830152613a7e8161364b565b9050919050565b6000602082019050613a9a600083018461366e565b92915050565b6000613aaa613abb565b9050613ab68282613d4b565b919050565b6000604051905090565b600067ffffffffffffffff821115613ae057613adf613ee1565b5b613ae982613f2e565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b5982613ccd565b9150613b6483613ccd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b9957613b98613df6565b5b828201905092915050565b6000613baf82613ccd565b9150613bba83613ccd565b925082613bca57613bc9613e25565b5b828204905092915050565b6000613be082613ccd565b9150613beb83613ccd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c2457613c23613df6565b5b828202905092915050565b6000613c3a82613ccd565b9150613c4583613ccd565b925082821015613c5857613c57613df6565b5b828203905092915050565b6000613c6e82613cad565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d04578082015181840152602081019050613ce9565b83811115613d13576000848401525b50505050565b60006002820490506001821680613d3157607f821691505b60208210811415613d4557613d44613e54565b5b50919050565b613d5482613f2e565b810181811067ffffffffffffffff82111715613d7357613d72613ee1565b5b80604052505050565b6000613d8782613ccd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dba57613db9613df6565b5b600182019050919050565b6000613dd082613ccd565b9150613ddb83613ccd565b925082613deb57613dea613e25565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4f7574206f662073746f636b2e00000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53414c455f434c4f534544000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4558434545445f46454d56455253455f5045525f465245455f4d494e54000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4558434545445f46454d56455253455f5045525f4d494e540000000000000000600082015250565b7f4d41585f4d494e54000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496e73756666696369656e74204554482e000000000000000000000000000000600082015250565b7f47494654535f454d505459000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74207175657279206e6f6e2d6578697374656e7420746f6b656e00600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4558434545445f5055424c494300000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61456081613c63565b811461456b57600080fd5b50565b61457781613c75565b811461458257600080fd5b50565b61458e81613c81565b811461459957600080fd5b50565b6145a581613ccd565b81146145b057600080fd5b5056fea264697066735822122028c569c095673c9f6f3baa0dae3d9cec63f9bf169454f99e6fffe29e44b6e2ae64736f6c63430008070033

Deployed Bytecode

0x6080604052600436106102255760003560e01c806370a0823111610123578063bb51f32d116100ab578063d96a094a1161006f578063d96a094a146107e1578063e081b781146107fd578063e985e9c514610828578063ecc9339d14610865578063f2fde38b1461089057610225565b8063bb51f32d1461070e578063c029efa914610725578063c87b56dd14610750578063cb9eb5331461078d578063d94df301146107b657610225565b8063940f1ada116100f2578063940f1ada1461063d57806395d89b4114610668578063a22cb46514610693578063a5dd8000146106bc578063b88d4fde146106e557610225565b806370a0823114610595578063715018a6146105d25780638da5cb5b146105e957806391b7f5ed1461061457610225565b806323b872dd116101b157806355f804b31161017557806355f804b3146104ae5780635945cc1c146104d75780635b97a972146105025780636352211e1461052d57806368fc75001461056a57610225565b806323b872dd146103b95780632f745c59146103e257806342842e0e1461041f5780634f6ccce714610448578063544867581461048557610225565b8063095ea7b3116101f8578063095ea7b3146102e65780630badc92b1461030f578063163e1e611461033a57806318160ddd146103635780631b57190e1461038e57610225565b806301ffc9a71461022a578063049c5c491461026757806306fdde031461027e578063081812fc146102a9575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c91906130cc565b6108b9565b60405161025e9190613708565b60405180910390f35b34801561027357600080fd5b5061027c610933565b005b34801561028a57600080fd5b506102936109db565b6040516102a09190613723565b60405180910390f35b3480156102b557600080fd5b506102d060048036038101906102cb9190613173565b610a6d565b6040516102dd91906136a1565b60405180910390f35b3480156102f257600080fd5b5061030d6004803603810190610308919061303f565b610af2565b005b34801561031b57600080fd5b50610324610c0a565b6040516103319190613a85565b60405180910390f35b34801561034657600080fd5b50610361600480360381019061035c919061307f565b610c10565b005b34801561036f57600080fd5b50610378610dcf565b6040516103859190613a85565b60405180910390f35b34801561039a57600080fd5b506103a3610ddc565b6040516103b09190613a85565b60405180910390f35b3480156103c557600080fd5b506103e060048036038101906103db9190612f29565b610de2565b005b3480156103ee57600080fd5b506104096004803603810190610404919061303f565b610e42565b6040516104169190613a85565b60405180910390f35b34801561042b57600080fd5b5061044660048036038101906104419190612f29565b610ee7565b005b34801561045457600080fd5b5061046f600480360381019061046a9190613173565b610f07565b60405161047c9190613a85565b60405180910390f35b34801561049157600080fd5b506104ac60048036038101906104a79190613173565b610f78565b005b3480156104ba57600080fd5b506104d560048036038101906104d09190613126565b610ffe565b005b3480156104e357600080fd5b506104ec611090565b6040516104f99190613a85565b60405180910390f35b34801561050e57600080fd5b50610517611096565b6040516105249190613a85565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f9190613173565b61109b565b60405161056191906136a1565b60405180910390f35b34801561057657600080fd5b5061057f61114d565b60405161058c9190613a85565b60405180910390f35b3480156105a157600080fd5b506105bc60048036038101906105b79190612ebc565b611153565b6040516105c99190613a85565b60405180910390f35b3480156105de57600080fd5b506105e761120b565b005b3480156105f557600080fd5b506105fe611293565b60405161060b91906136a1565b60405180910390f35b34801561062057600080fd5b5061063b60048036038101906106369190613173565b6112bd565b005b34801561064957600080fd5b50610652611343565b60405161065f9190613a85565b60405180910390f35b34801561067457600080fd5b5061067d611349565b60405161068a9190613723565b60405180910390f35b34801561069f57600080fd5b506106ba60048036038101906106b59190612fff565b6113db565b005b3480156106c857600080fd5b506106e360048036038101906106de9190613173565b61155c565b005b3480156106f157600080fd5b5061070c60048036038101906107079190612f7c565b6115f8565b005b34801561071a57600080fd5b5061072361165a565b005b34801561073157600080fd5b5061073a611725565b6040516107479190613a85565b60405180910390f35b34801561075c57600080fd5b5061077760048036038101906107729190613173565b61172b565b6040516107849190613723565b60405180910390f35b34801561079957600080fd5b506107b460048036038101906107af9190613173565b6117a7565b005b3480156107c257600080fd5b506107cb611843565b6040516107d89190613a85565b60405180910390f35b6107fb60048036038101906107f69190613173565b611849565b005b34801561080957600080fd5b50610812611aa9565b60405161081f9190613708565b60405180910390f35b34801561083457600080fd5b5061084f600480360381019061084a9190612ee9565b611abc565b60405161085c9190613708565b60405180910390f35b34801561087157600080fd5b5061087a611b50565b6040516108879190613a85565b60405180910390f35b34801561089c57600080fd5b506108b760048036038101906108b29190612ebc565b611b56565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061092c575061092b82611c4e565b5b9050919050565b61093b611d30565b73ffffffffffffffffffffffffffffffffffffffff16610959611293565b73ffffffffffffffffffffffffffffffffffffffff16146109af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a690613965565b60405180910390fd5b601460009054906101000a900460ff1615601460006101000a81548160ff021916908315150217905550565b6060600080546109ea90613d19565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1690613d19565b8015610a635780601f10610a3857610100808354040283529160200191610a63565b820191906000526020600020905b815481529060010190602001808311610a4657829003601f168201915b5050505050905090565b6000610a7882611d38565b610ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aae90613945565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610afd8261109b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6590613a05565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b8d611d30565b73ffffffffffffffffffffffffffffffffffffffff161480610bbc5750610bbb81610bb6611d30565b611abc565b5b610bfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf290613885565b60405180910390fd5b610c058383611da4565b505050565b600e5481565b610c18611d30565b73ffffffffffffffffffffffffffffffffffffffff16610c36611293565b73ffffffffffffffffffffffffffffffffffffffff1614610c8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8390613965565b60405180910390fd5b600d54828290506001610c9d610dcf565b610ca79190613b4e565b610cb19190613b4e565b1115610cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce990613905565b60405180910390fd5b600b5482829050601254610d069190613b4e565b1115610d47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3e906139a5565b60405180910390fd5b60005b82829050811015610dca5760006001610d61610dcf565b610d6b9190613b4e565b9050610d9e848484818110610d8357610d82613eb2565b5b9050602002016020810190610d989190612ebc565b82611e5d565b60126000815480929190610db190613d7c565b9190505550508080610dc290613d7c565b915050610d4a565b505050565b6000600880549050905090565b60125481565b610df3610ded611d30565b82611e7b565b610e32576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2990613a45565b60405180910390fd5b610e3d838383611f59565b505050565b6000610e4d83611153565b8210610e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8590613745565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f02838383604051806020016040528060008152506115f8565b505050565b6000610f11610dcf565b8210610f52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4990613a65565b60405180910390fd5b60088281548110610f6657610f65613eb2565b5b90600052602060002001549050919050565b610f80611d30565b73ffffffffffffffffffffffffffffffffffffffff16610f9e611293565b73ffffffffffffffffffffffffffffffffffffffff1614610ff4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610feb90613965565b60405180910390fd5b8060108190555050565b611006611d30565b73ffffffffffffffffffffffffffffffffffffffff16611024611293565b73ffffffffffffffffffffffffffffffffffffffff161461107a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107190613965565b60405180910390fd5b81816011919061108b929190612c94565b505050565b60105481565b600181565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611144576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113b906138c5565b60405180910390fd5b80915050919050565b600d5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156111c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bb906138a5565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611213611d30565b73ffffffffffffffffffffffffffffffffffffffff16611231611293565b73ffffffffffffffffffffffffffffffffffffffff1614611287576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127e90613965565b60405180910390fd5b61129160006121b5565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112c5611d30565b73ffffffffffffffffffffffffffffffffffffffff166112e3611293565b73ffffffffffffffffffffffffffffffffffffffff1614611339576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133090613965565b60405180910390fd5b80600e8190555050565b60135481565b60606001805461135890613d19565b80601f016020809104026020016040519081016040528092919081815260200182805461138490613d19565b80156113d15780601f106113a6576101008083540402835291602001916113d1565b820191906000526020600020905b8154815290600101906020018083116113b457829003601f168201915b5050505050905090565b6113e3611d30565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144890613805565b60405180910390fd5b806005600061145e611d30565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661150b611d30565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115509190613708565b60405180910390a35050565b611564611d30565b73ffffffffffffffffffffffffffffffffffffffff16611582611293565b73ffffffffffffffffffffffffffffffffffffffff16146115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90613965565b60405180910390fd5b80600b81905550600c54600b546115ef9190613b4e565b600d8190555050565b611609611603611d30565b83611e7b565b611648576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163f90613a45565b60405180910390fd5b6116548484848461227b565b50505050565b611662611d30565b73ffffffffffffffffffffffffffffffffffffffff16611680611293565b73ffffffffffffffffffffffffffffffffffffffff16146116d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116cd90613965565b60405180910390fd5b60004790503373ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611721573d6000803e3d6000fd5b5050565b600f5481565b606061173682611d38565b611775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176c906139e5565b60405180910390fd5b6011611780836122d7565b60405160200161179192919061367d565b6040516020818303038152906040529050919050565b6117af611d30565b73ffffffffffffffffffffffffffffffffffffffff166117cd611293565b73ffffffffffffffffffffffffffffffffffffffff1614611823576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181a90613965565b60405180910390fd5b80600c81905550600c54600b5461183a9190613b4e565b600d8190555050565b600c5481565b601460009054906101000a900460ff16611898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188f90613825565b60405180910390fd5b600d5460016118a5610dcf565b6118af9190613b4e565b106118ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118e6906137c5565b60405180910390fd5b600c54816013546119009190613b4e565b1115611941576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193890613a25565b60405180910390fd5b601054811115611986576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197d906138e5565b60405180910390fd5b60005b81811015611aa5576000600161199d610dcf565b6119a79190613b4e565b905061022b811015611a1e5760018311156119f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ee90613865565b60405180910390fd5b611a013382611e5d565b60136000815480929190611a1490613d7c565b9190505550611a91565b3483600e54611a2d9190613bd5565b1115611a6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6590613985565b60405180910390fd5b611a783382611e5d565b60136000815480929190611a8b90613d7c565b91905055505b508080611a9d90613d7c565b915050611989565b5050565b601460009054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600b5481565b611b5e611d30565b73ffffffffffffffffffffffffffffffffffffffff16611b7c611293565b73ffffffffffffffffffffffffffffffffffffffff1614611bd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc990613965565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611c42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3990613785565b60405180910390fd5b611c4b816121b5565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611d1957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611d295750611d2882612438565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611e178361109b565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611e778282604051806020016040528060008152506124a2565b5050565b6000611e8682611d38565b611ec5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebc90613845565b60405180910390fd5b6000611ed08361109b565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611f3f57508373ffffffffffffffffffffffffffffffffffffffff16611f2784610a6d565b73ffffffffffffffffffffffffffffffffffffffff16145b80611f505750611f4f8185611abc565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611f798261109b565b73ffffffffffffffffffffffffffffffffffffffff1614611fcf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc6906139c5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561203f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612036906137e5565b60405180910390fd5b61204a8383836124fd565b612055600082611da4565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120a59190613c2f565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120fc9190613b4e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612286848484611f59565b61229284848484612611565b6122d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c890613765565b60405180910390fd5b50505050565b6060600082141561231f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612433565b600082905060005b6000821461235157808061233a90613d7c565b915050600a8261234a9190613ba4565b9150612327565b60008167ffffffffffffffff81111561236d5761236c613ee1565b5b6040519080825280601f01601f19166020018201604052801561239f5781602001600182028036833780820191505090505b5090505b6000851461242c576001826123b89190613c2f565b9150600a856123c79190613dc5565b60306123d39190613b4e565b60f81b8183815181106123e9576123e8613eb2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856124259190613ba4565b94506123a3565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6124ac83836127a8565b6124b96000848484612611565b6124f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ef90613765565b60405180910390fd5b505050565b612508838383612976565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561254b576125468161297b565b61258a565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146125895761258883826129c4565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156125cd576125c881612b31565b61260c565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461260b5761260a8282612c02565b5b5b505050565b60006126328473ffffffffffffffffffffffffffffffffffffffff16612c81565b1561279b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261265b611d30565b8786866040518563ffffffff1660e01b815260040161267d94939291906136bc565b602060405180830381600087803b15801561269757600080fd5b505af19250505080156126c857506040513d601f19601f820116820180604052508101906126c591906130f9565b60015b61274b573d80600081146126f8576040519150601f19603f3d011682016040523d82523d6000602084013e6126fd565b606091505b50600081511415612743576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273a90613765565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506127a0565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280f90613925565b60405180910390fd5b61282181611d38565b15612861576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612858906137a5565b60405180910390fd5b61286d600083836124fd565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128bd9190613b4e565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016129d184611153565b6129db9190613c2f565b9050600060076000848152602001908152602001600020549050818114612ac0576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612b459190613c2f565b9050600060096000848152602001908152602001600020549050600060088381548110612b7557612b74613eb2565b5b906000526020600020015490508060088381548110612b9757612b96613eb2565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612be657612be5613e83565b5b6001900381819060005260206000200160009055905550505050565b6000612c0d83611153565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600080823b905060008111915050919050565b828054612ca090613d19565b90600052602060002090601f016020900481019282612cc25760008555612d09565b82601f10612cdb57803560ff1916838001178555612d09565b82800160010185558215612d09579182015b82811115612d08578235825591602001919060010190612ced565b5b509050612d169190612d1a565b5090565b5b80821115612d33576000816000905550600101612d1b565b5090565b6000612d4a612d4584613ac5565b613aa0565b905082815260208101848484011115612d6657612d65613f1f565b5b612d71848285613cd7565b509392505050565b600081359050612d8881614557565b92915050565b60008083601f840112612da457612da3613f15565b5b8235905067ffffffffffffffff811115612dc157612dc0613f10565b5b602083019150836020820283011115612ddd57612ddc613f1a565b5b9250929050565b600081359050612df38161456e565b92915050565b600081359050612e0881614585565b92915050565b600081519050612e1d81614585565b92915050565b600082601f830112612e3857612e37613f15565b5b8135612e48848260208601612d37565b91505092915050565b60008083601f840112612e6757612e66613f15565b5b8235905067ffffffffffffffff811115612e8457612e83613f10565b5b602083019150836001820283011115612ea057612e9f613f1a565b5b9250929050565b600081359050612eb68161459c565b92915050565b600060208284031215612ed257612ed1613f29565b5b6000612ee084828501612d79565b91505092915050565b60008060408385031215612f0057612eff613f29565b5b6000612f0e85828601612d79565b9250506020612f1f85828601612d79565b9150509250929050565b600080600060608486031215612f4257612f41613f29565b5b6000612f5086828701612d79565b9350506020612f6186828701612d79565b9250506040612f7286828701612ea7565b9150509250925092565b60008060008060808587031215612f9657612f95613f29565b5b6000612fa487828801612d79565b9450506020612fb587828801612d79565b9350506040612fc687828801612ea7565b925050606085013567ffffffffffffffff811115612fe757612fe6613f24565b5b612ff387828801612e23565b91505092959194509250565b6000806040838503121561301657613015613f29565b5b600061302485828601612d79565b925050602061303585828601612de4565b9150509250929050565b6000806040838503121561305657613055613f29565b5b600061306485828601612d79565b925050602061307585828601612ea7565b9150509250929050565b6000806020838503121561309657613095613f29565b5b600083013567ffffffffffffffff8111156130b4576130b3613f24565b5b6130c085828601612d8e565b92509250509250929050565b6000602082840312156130e2576130e1613f29565b5b60006130f084828501612df9565b91505092915050565b60006020828403121561310f5761310e613f29565b5b600061311d84828501612e0e565b91505092915050565b6000806020838503121561313d5761313c613f29565b5b600083013567ffffffffffffffff81111561315b5761315a613f24565b5b61316785828601612e51565b92509250509250929050565b60006020828403121561318957613188613f29565b5b600061319784828501612ea7565b91505092915050565b6131a981613c63565b82525050565b6131b881613c75565b82525050565b60006131c982613b0b565b6131d38185613b21565b93506131e3818560208601613ce6565b6131ec81613f2e565b840191505092915050565b600061320282613b16565b61320c8185613b32565b935061321c818560208601613ce6565b61322581613f2e565b840191505092915050565b600061323b82613b16565b6132458185613b43565b9350613255818560208601613ce6565b80840191505092915050565b6000815461326e81613d19565b6132788186613b43565b9450600182166000811461329357600181146132a4576132d7565b60ff198316865281860193506132d7565b6132ad85613af6565b60005b838110156132cf578154818901526001820191506020810190506132b0565b838801955050505b50505092915050565b60006132ed602b83613b32565b91506132f882613f3f565b604082019050919050565b6000613310603283613b32565b915061331b82613f8e565b604082019050919050565b6000613333602683613b32565b915061333e82613fdd565b604082019050919050565b6000613356601c83613b32565b91506133618261402c565b602082019050919050565b6000613379600d83613b32565b915061338482614055565b602082019050919050565b600061339c602483613b32565b91506133a78261407e565b604082019050919050565b60006133bf601983613b32565b91506133ca826140cd565b602082019050919050565b60006133e2600b83613b32565b91506133ed826140f6565b602082019050919050565b6000613405602c83613b32565b91506134108261411f565b604082019050919050565b6000613428601d83613b32565b91506134338261416e565b602082019050919050565b600061344b603883613b32565b915061345682614197565b604082019050919050565b600061346e602a83613b32565b9150613479826141e6565b604082019050919050565b6000613491602983613b32565b915061349c82614235565b604082019050919050565b60006134b4601883613b32565b91506134bf82614284565b602082019050919050565b60006134d7600883613b32565b91506134e2826142ad565b602082019050919050565b60006134fa602083613b32565b9150613505826142d6565b602082019050919050565b600061351d602c83613b32565b9150613528826142ff565b604082019050919050565b6000613540602083613b32565b915061354b8261434e565b602082019050919050565b6000613563601183613b32565b915061356e82614377565b602082019050919050565b6000613586600b83613b32565b9150613591826143a0565b602082019050919050565b60006135a9602983613b32565b91506135b4826143c9565b604082019050919050565b60006135cc601f83613b32565b91506135d782614418565b602082019050919050565b60006135ef602183613b32565b91506135fa82614441565b604082019050919050565b6000613612600d83613b32565b915061361d82614490565b602082019050919050565b6000613635603183613b32565b9150613640826144b9565b604082019050919050565b6000613658602c83613b32565b915061366382614508565b604082019050919050565b61367781613ccd565b82525050565b60006136898285613261565b91506136958284613230565b91508190509392505050565b60006020820190506136b660008301846131a0565b92915050565b60006080820190506136d160008301876131a0565b6136de60208301866131a0565b6136eb604083018561366e565b81810360608301526136fd81846131be565b905095945050505050565b600060208201905061371d60008301846131af565b92915050565b6000602082019050818103600083015261373d81846131f7565b905092915050565b6000602082019050818103600083015261375e816132e0565b9050919050565b6000602082019050818103600083015261377e81613303565b9050919050565b6000602082019050818103600083015261379e81613326565b9050919050565b600060208201905081810360008301526137be81613349565b9050919050565b600060208201905081810360008301526137de8161336c565b9050919050565b600060208201905081810360008301526137fe8161338f565b9050919050565b6000602082019050818103600083015261381e816133b2565b9050919050565b6000602082019050818103600083015261383e816133d5565b9050919050565b6000602082019050818103600083015261385e816133f8565b9050919050565b6000602082019050818103600083015261387e8161341b565b9050919050565b6000602082019050818103600083015261389e8161343e565b9050919050565b600060208201905081810360008301526138be81613461565b9050919050565b600060208201905081810360008301526138de81613484565b9050919050565b600060208201905081810360008301526138fe816134a7565b9050919050565b6000602082019050818103600083015261391e816134ca565b9050919050565b6000602082019050818103600083015261393e816134ed565b9050919050565b6000602082019050818103600083015261395e81613510565b9050919050565b6000602082019050818103600083015261397e81613533565b9050919050565b6000602082019050818103600083015261399e81613556565b9050919050565b600060208201905081810360008301526139be81613579565b9050919050565b600060208201905081810360008301526139de8161359c565b9050919050565b600060208201905081810360008301526139fe816135bf565b9050919050565b60006020820190508181036000830152613a1e816135e2565b9050919050565b60006020820190508181036000830152613a3e81613605565b9050919050565b60006020820190508181036000830152613a5e81613628565b9050919050565b60006020820190508181036000830152613a7e8161364b565b9050919050565b6000602082019050613a9a600083018461366e565b92915050565b6000613aaa613abb565b9050613ab68282613d4b565b919050565b6000604051905090565b600067ffffffffffffffff821115613ae057613adf613ee1565b5b613ae982613f2e565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b5982613ccd565b9150613b6483613ccd565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b9957613b98613df6565b5b828201905092915050565b6000613baf82613ccd565b9150613bba83613ccd565b925082613bca57613bc9613e25565b5b828204905092915050565b6000613be082613ccd565b9150613beb83613ccd565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613c2457613c23613df6565b5b828202905092915050565b6000613c3a82613ccd565b9150613c4583613ccd565b925082821015613c5857613c57613df6565b5b828203905092915050565b6000613c6e82613cad565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613d04578082015181840152602081019050613ce9565b83811115613d13576000848401525b50505050565b60006002820490506001821680613d3157607f821691505b60208210811415613d4557613d44613e54565b5b50919050565b613d5482613f2e565b810181811067ffffffffffffffff82111715613d7357613d72613ee1565b5b80604052505050565b6000613d8782613ccd565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613dba57613db9613df6565b5b600182019050919050565b6000613dd082613ccd565b9150613ddb83613ccd565b925082613deb57613dea613e25565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4f7574206f662073746f636b2e00000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f53414c455f434c4f534544000000000000000000000000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4558434545445f46454d56455253455f5045525f465245455f4d494e54000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4558434545445f46454d56455253455f5045525f4d494e540000000000000000600082015250565b7f4d41585f4d494e54000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f496e73756666696369656e74204554482e000000000000000000000000000000600082015250565b7f47494654535f454d505459000000000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f43616e6e6f74207175657279206e6f6e2d6578697374656e7420746f6b656e00600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4558434545445f5055424c494300000000000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b61456081613c63565b811461456b57600080fd5b50565b61457781613c75565b811461458257600080fd5b50565b61458e81613c81565b811461459957600080fd5b50565b6145a581613ccd565b81146145b057600080fd5b5056fea264697066735822122028c569c095673c9f6f3baa0dae3d9cec63f9bf169454f99e6fffe29e44b6e2ae64736f6c63430008070033

Deployed Bytecode Sourcemap

24336:6280:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15020:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26310:86;;;;;;;;;;;;;:::i;:::-;;3856:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4929:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4512:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24763:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28365:450;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15512:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25213:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5633:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15250:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5980:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15631:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30029:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29240:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24923:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24966:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3611:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24695:61;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3397:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23769:94;;;;;;;;;;;;;:::i;:::-;;23550:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30143:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25247:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3962:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5158:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29788:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6171:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28821:146;;;;;;;;;;;;;:::i;:::-;;24813:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30369:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29543:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24561:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26402:1018;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25414:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5461:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24452:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23869:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15020:224;15122:4;15161:35;15146:50;;;:11;:50;;;;:90;;;;15200:36;15224:11;15200:23;:36::i;:::-;15146:90;15139:97;;15020:224;;;:::o;26310:86::-;23694:12;:10;:12::i;:::-;23683:23;;:7;:5;:7::i;:::-;:23;;;23675:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26380:8:::1;;;;;;;;;;;26379:9;26368:8;;:20;;;;;;;;;;;;;;;;;;26310:86::o:0;3856:100::-;3910:13;3943:5;3936:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3856:100;:::o;4929:221::-;5005:7;5033:16;5041:7;5033;:16::i;:::-;5025:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5118:15;:24;5134:7;5118:24;;;;;;;;;;;;;;;;;;;;;5111:31;;4929:221;;;:::o;4512:411::-;4593:13;4609:23;4624:7;4609:14;:23::i;:::-;4593:39;;4657:5;4651:11;;:2;:11;;;;4643:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;4751:5;4735:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;4760:37;4777:5;4784:12;:10;:12::i;:::-;4760:16;:37::i;:::-;4735:62;4713:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;4894:21;4903:2;4907:7;4894:8;:21::i;:::-;4582:341;4512:411;;:::o;24763:43::-;;;;:::o;28365:450::-;23694:12;:10;:12::i;:::-;23683:23;;:7;:5;:7::i;:::-;:23;;;23675:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28489:12:::1;;28469:9;;:16;;28464:1;28448:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28447:38;;;;:::i;:::-;:54;;28439:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;28568:13;;28548:9;;:16;;28533:12;;:31;;;;:::i;:::-;:48;;28525:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;28613:9;28608:200;28632:9;;:16;;28628:1;:20;28608:200;;;28670:12;28701:1;28685:13;:11;:13::i;:::-;:17;;;;:::i;:::-;28670:32;;28735;28745:9;;28755:1;28745:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;28759:7;28735:9;:32::i;:::-;28782:12;;:14;;;;;;;;;:::i;:::-;;;;;;28655:153;28650:3;;;;;:::i;:::-;;;;28608:200;;;;28365:450:::0;;:::o;15512:113::-;15573:7;15600:10;:17;;;;15593:24;;15512:113;:::o;25213:27::-;;;;:::o;5633:339::-;5828:41;5847:12;:10;:12::i;:::-;5861:7;5828:18;:41::i;:::-;5820:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5936:28;5946:4;5952:2;5956:7;5936:9;:28::i;:::-;5633:339;;;:::o;15250:256::-;15347:7;15383:23;15400:5;15383:16;:23::i;:::-;15375:5;:31;15367:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;15472:12;:19;15485:5;15472:19;;;;;;;;;;;;;;;:26;15492:5;15472:26;;;;;;;;;;;;15465:33;;15250:256;;;;:::o;5980:185::-;6118:39;6135:4;6141:2;6145:7;6118:39;;;;;;;;;;;;:16;:39::i;:::-;5980:185;;;:::o;15631:233::-;15706:7;15742:30;:28;:30::i;:::-;15734:5;:38;15726:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;15839:10;15850:5;15839:17;;;;;;;;:::i;:::-;;;;;;;;;;15832:24;;15631:233;;;:::o;30029:108::-;23694:12;:10;:12::i;:::-;23683:23;;:7;:5;:7::i;:::-;:23;;;23675:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30123:6:::1;30103:17;:26;;;;30029:108:::0;:::o;29240:98::-;23694:12;:10;:12::i;:::-;23683:23;;:7;:5;:7::i;:::-;:23;;;23675:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29327:3:::1;;29311:13;:19;;;;;;;:::i;:::-;;29240:98:::0;;:::o;24923:36::-;;;;:::o;24966:50::-;25015:1;24966:50;:::o;3611:239::-;3683:7;3703:13;3719:7;:16;3727:7;3719:16;;;;;;;;;;;;;;;;;;;;;3703:32;;3771:1;3754:19;;:5;:19;;;;3746:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3837:5;3830:12;;;3611:239;;;:::o;24695:61::-;;;;:::o;3397:208::-;3469:7;3514:1;3497:19;;:5;:19;;;;3489:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;3581:9;:16;3591:5;3581:16;;;;;;;;;;;;;;;;3574:23;;3397:208;;;:::o;23769:94::-;23694:12;:10;:12::i;:::-;23683:23;;:7;:5;:7::i;:::-;:23;;;23675:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23834:21:::1;23852:1;23834:9;:21::i;:::-;23769:94::o:0;23550:87::-;23596:7;23623:6;;;;;;;;;;;23616:13;;23550:87;:::o;30143:95::-;23694:12;:10;:12::i;:::-;23683:23;;:7;:5;:7::i;:::-;:23;;;23675:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30224:6:::1;30207:14;:23;;;;30143:95:::0;:::o;25247:33::-;;;;:::o;3962:104::-;4018:13;4051:7;4044:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3962:104;:::o;5158:295::-;5273:12;:10;:12::i;:::-;5261:24;;:8;:24;;;;5253:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;5373:8;5328:18;:32;5347:12;:10;:12::i;:::-;5328:32;;;;;;;;;;;;;;;:42;5361:8;5328:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;5426:8;5397:48;;5412:12;:10;:12::i;:::-;5397:48;;;5436:8;5397:48;;;;;;:::i;:::-;;;;;;;;5158:295;;:::o;29788:235::-;23694:12;:10;:12::i;:::-;23683:23;;:7;:5;:7::i;:::-;:23;;;23675:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29873:6:::1;29857:13;:22;;;;30000:15;;29984:13;;:31;;;;:::i;:::-;29969:12;:46;;;;29788:235:::0;:::o;6171:328::-;6346:41;6365:12;:10;:12::i;:::-;6379:7;6346:18;:41::i;:::-;6338:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;6452:39;6466:4;6472:2;6476:7;6485:5;6452:13;:39::i;:::-;6171:328;;;;:::o;28821:146::-;23694:12;:10;:12::i;:::-;23683:23;;:7;:5;:7::i;:::-;:23;;;23675:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;28875:12:::1;28890:21;28875:36;;28930:10;28922:28;;:37;28951:7;28922:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;28864:103;28821:146::o:0;24813:44::-;;;;:::o;30369:244::-;30442:13;30476:16;30484:7;30476;:16::i;:::-;30468:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;30570:13;30585:18;:7;:16;:18::i;:::-;30553:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30539:66;;30369:244;;;:::o;29543:239::-;23694:12;:10;:12::i;:::-;23683:23;;:7;:5;:7::i;:::-;:23;;;23675:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29632:6:::1;29614:15;:24;;;;29759:15;;29743:13;;:31;;;;:::i;:::-;29728:12;:46;;;;29543:239:::0;:::o;24561:37::-;;;;:::o;26402:1018::-;26474:8;;;;;;;;;;;26466:32;;;;;;;;;;;;:::i;:::-;;;;;;;;;26590:12;;26585:1;26569:13;:11;:13::i;:::-;:17;;;;:::i;:::-;26568:34;26560:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;26677:15;;26660:13;26639:18;;:34;;;;:::i;:::-;:53;;26631:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;26746:17;;26729:13;:34;;26721:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26807:6;26803:610;26823:13;26819:1;:17;26803:610;;;26858:12;26889:1;26873:13;:11;:13::i;:::-;:17;;;;:::i;:::-;26858:32;;26991:3;26981:7;:13;26977:425;;;25015:1;27023:13;:39;;27015:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;27115:30;27125:10;27137:7;27115:9;:30::i;:::-;27164:18;;:20;;;;;;;;;:::i;:::-;;;;;;26977:425;;;27267:9;27250:13;27233:14;;:30;;;;:::i;:::-;:43;;27225:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27317:30;27327:10;27339:7;27317:9;:30::i;:::-;27366:18;;:20;;;;;;;;;:::i;:::-;;;;;;26977:425;26843:570;26838:3;;;;;:::i;:::-;;;;26803:610;;;;26402:1018;:::o;25414:20::-;;;;;;;;;;;;;:::o;5461:164::-;5558:4;5582:18;:25;5601:5;5582:25;;;;;;;;;;;;;;;:35;5608:8;5582:35;;;;;;;;;;;;;;;;;;;;;;;;;5575:42;;5461:164;;;;:::o;24452:34::-;;;;:::o;23869:192::-;23694:12;:10;:12::i;:::-;23683:23;;:7;:5;:7::i;:::-;:23;;;23675:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23978:1:::1;23958:22;;:8;:22;;;;23950:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24034:19;24044:8;24034:9;:19::i;:::-;23869:192:::0;:::o;3086:305::-;3188:4;3240:25;3225:40;;;:11;:40;;;;:105;;;;3297:33;3282:48;;;:11;:48;;;;3225:105;:158;;;;3347:36;3371:11;3347:23;:36::i;:::-;3225:158;3205:178;;3086:305;;;:::o;2243:98::-;2296:7;2323:10;2316:17;;2243:98;:::o;6826:127::-;6891:4;6943:1;6915:30;;:7;:16;6923:7;6915:16;;;;;;;;;;;;;;;;;;;;;:30;;;;6908:37;;6826:127;;;:::o;9006:174::-;9108:2;9081:15;:24;9097:7;9081:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;9164:7;9160:2;9126:46;;9135:23;9150:7;9135:14;:23::i;:::-;9126:46;;;;;;;;;;;;9006:174;;:::o;7313:110::-;7389:26;7399:2;7403:7;7389:26;;;;;;;;;;;;:9;:26::i;:::-;7313:110;;:::o;6959:348::-;7052:4;7077:16;7085:7;7077;:16::i;:::-;7069:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7153:13;7169:23;7184:7;7169:14;:23::i;:::-;7153:39;;7222:5;7211:16;;:7;:16;;;:51;;;;7255:7;7231:31;;:20;7243:7;7231:11;:20::i;:::-;:31;;;7211:51;:87;;;;7266:32;7283:5;7290:7;7266:16;:32::i;:::-;7211:87;7203:96;;;6959:348;;;;:::o;8482:518::-;8641:4;8614:31;;:23;8629:7;8614:14;:23::i;:::-;:31;;;8606:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;8724:1;8710:16;;:2;:16;;;;8702:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;8778:39;8799:4;8805:2;8809:7;8778:20;:39::i;:::-;8828:29;8845:1;8849:7;8828:8;:29::i;:::-;8887:1;8868:9;:15;8878:4;8868:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;8916:1;8899:9;:13;8909:2;8899:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;8947:2;8928:7;:16;8936:7;8928:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;8984:7;8980:2;8965:27;;8974:4;8965:27;;;;;;;;;;;;8482:518;;;:::o;24069:173::-;24125:16;24144:6;;;;;;;;;;;24125:25;;24170:8;24161:6;;:17;;;;;;;;;;;;;;;;;;24225:8;24194:40;;24215:8;24194:40;;;;;;;;;;;;24114:128;24069:173;:::o;6505:315::-;6662:28;6672:4;6678:2;6682:7;6662:9;:28::i;:::-;6709:48;6732:4;6738:2;6742:7;6751:5;6709:22;:48::i;:::-;6701:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;6505:315;;;;:::o;18016:532::-;18072:13;18111:1;18102:5;:10;18098:53;;;18129:10;;;;;;;;;;;;;;;;;;;;;18098:53;18161:12;18176:5;18161:20;;18192:14;18217:78;18232:1;18224:4;:9;18217:78;;18250:8;;;;;:::i;:::-;;;;18281:2;18273:10;;;;;:::i;:::-;;;18217:78;;;18305:19;18337:6;18327:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18305:39;;18355:154;18371:1;18362:5;:10;18355:154;;18399:1;18389:11;;;;;:::i;:::-;;;18466:2;18458:5;:10;;;;:::i;:::-;18445:2;:24;;;;:::i;:::-;18432:39;;18415:6;18422;18415:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;18495:2;18486:11;;;;;:::i;:::-;;;18355:154;;;18533:6;18519:21;;;;;18016:532;;;;:::o;1971:157::-;2056:4;2095:25;2080:40;;;:11;:40;;;;2073:47;;1971:157;;;:::o;7429:321::-;7559:18;7565:2;7569:7;7559:5;:18::i;:::-;7610:54;7641:1;7645:2;7649:7;7658:5;7610:22;:54::i;:::-;7588:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;7429:321;;;:::o;15870:589::-;16014:45;16041:4;16047:2;16051:7;16014:26;:45::i;:::-;16092:1;16076:18;;:4;:18;;;16072:187;;;16111:40;16143:7;16111:31;:40::i;:::-;16072:187;;;16181:2;16173:10;;:4;:10;;;16169:90;;16200:47;16233:4;16239:7;16200:32;:47::i;:::-;16169:90;16072:187;16287:1;16273:16;;:2;:16;;;16269:183;;;16306:45;16343:7;16306:36;:45::i;:::-;16269:183;;;16379:4;16373:10;;:2;:10;;;16369:83;;16400:40;16428:2;16432:7;16400:27;:40::i;:::-;16369:83;16269:183;15870:589;;;:::o;9186:799::-;9341:4;9362:15;:2;:13;;;:15::i;:::-;9358:620;;;9414:2;9398:36;;;9435:12;:10;:12::i;:::-;9449:4;9455:7;9464:5;9398:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;9394:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9657:1;9640:6;:13;:18;9636:272;;;9683:60;;;;;;;;;;:::i;:::-;;;;;;;;9636:272;9858:6;9852:13;9843:6;9839:2;9835:15;9828:38;9394:529;9531:41;;;9521:51;;;:6;:51;;;;9514:58;;;;;9358:620;9962:4;9955:11;;9186:799;;;;;;;:::o;7756:382::-;7850:1;7836:16;;:2;:16;;;;7828:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;7909:16;7917:7;7909;:16::i;:::-;7908:17;7900:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;7971:45;8000:1;8004:2;8008:7;7971:20;:45::i;:::-;8046:1;8029:9;:13;8039:2;8029:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;8077:2;8058:7;:16;8066:7;8058:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;8122:7;8118:2;8097:33;;8114:1;8097:33;;;;;;;;;;;;7756:382;;:::o;9991:126::-;;;;:::o;16692:164::-;16796:10;:17;;;;16769:15;:24;16785:7;16769:24;;;;;;;;;;;:44;;;;16824:10;16840:7;16824:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16692:164;:::o;16862:555::-;16954:22;17004:1;16979:22;16996:4;16979:16;:22::i;:::-;:26;;;;:::i;:::-;16954:51;;17016:18;17037:17;:26;17055:7;17037:26;;;;;;;;;;;;17016:47;;17094:14;17080:10;:28;17076:236;;17125:19;17147:12;:18;17160:4;17147:18;;;;;;;;;;;;;;;:34;17166:14;17147:34;;;;;;;;;;;;17125:56;;17231:11;17198:12;:18;17211:4;17198:18;;;;;;;;;;;;;;;:30;17217:10;17198:30;;;;;;;;;;;:44;;;;17290:10;17257:17;:30;17275:11;17257:30;;;;;;;;;;;:43;;;;17110:202;17076:236;17331:17;:26;17349:7;17331:26;;;;;;;;;;;17324:33;;;17375:12;:18;17388:4;17375:18;;;;;;;;;;;;;;;:34;17394:14;17375:34;;;;;;;;;;;17368:41;;;16943:474;;16862:555;;:::o;17423:423::-;17505:22;17550:1;17530:10;:17;;;;:21;;;;:::i;:::-;17505:46;;17562:18;17583:15;:24;17599:7;17583:24;;;;;;;;;;;;17562:45;;17618:19;17640:10;17651:14;17640:26;;;;;;;;:::i;:::-;;;;;;;;;;17618:48;;17704:11;17679:10;17690;17679:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;17757:10;17726:15;:28;17742:11;17726:28;;;;;;;;;;;:41;;;;17787:15;:24;17803:7;17787:24;;;;;;;;;;;17780:31;;;17822:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;17494:352;;;17423:423;:::o;16465:221::-;16550:14;16567:20;16584:2;16567:16;:20::i;:::-;16550:37;;16625:7;16598:12;:16;16611:2;16598:16;;;;;;;;;;;;;;;:24;16615:6;16598:24;;;;;;;;;;;:34;;;;16672:6;16643:17;:26;16661:7;16643:26;;;;;;;;;;;:35;;;;16539:147;16465:221;;:::o;19456:196::-;19516:4;19533:12;19600:7;19588:20;19580:28;;19643:1;19636:4;:8;19629:15;;;19456:196;;;:::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:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;585:568::-;658:8;668:6;718:3;711:4;703:6;699:17;695:27;685:122;;726:79;;:::i;:::-;685:122;839:6;826:20;816:30;;869:18;861:6;858:30;855:117;;;891:79;;:::i;:::-;855:117;1005:4;997:6;993:17;981:29;;1059:3;1051:4;1043:6;1039:17;1029:8;1025:32;1022:41;1019:128;;;1066:79;;:::i;:::-;1019:128;585:568;;;;;:::o;1159:133::-;1202:5;1240:6;1227:20;1218:29;;1256:30;1280:5;1256:30;:::i;:::-;1159:133;;;;:::o;1298:137::-;1343:5;1381:6;1368:20;1359:29;;1397:32;1423:5;1397:32;:::i;:::-;1298:137;;;;:::o;1441:141::-;1497:5;1528:6;1522:13;1513:22;;1544:32;1570:5;1544:32;:::i;:::-;1441:141;;;;:::o;1601:338::-;1656:5;1705:3;1698:4;1690:6;1686:17;1682:27;1672:122;;1713:79;;:::i;:::-;1672:122;1830:6;1817:20;1855:78;1929:3;1921:6;1914:4;1906:6;1902:17;1855:78;:::i;:::-;1846:87;;1662:277;1601:338;;;;:::o;1959:553::-;2017:8;2027:6;2077:3;2070:4;2062:6;2058:17;2054:27;2044:122;;2085:79;;:::i;:::-;2044:122;2198:6;2185:20;2175:30;;2228:18;2220:6;2217:30;2214:117;;;2250:79;;:::i;:::-;2214:117;2364:4;2356:6;2352:17;2340:29;;2418:3;2410:4;2402:6;2398:17;2388:8;2384:32;2381:41;2378:128;;;2425:79;;:::i;:::-;2378:128;1959:553;;;;;:::o;2518:139::-;2564:5;2602:6;2589:20;2580:29;;2618:33;2645:5;2618:33;:::i;:::-;2518:139;;;;:::o;2663:329::-;2722:6;2771:2;2759:9;2750:7;2746:23;2742:32;2739:119;;;2777:79;;:::i;:::-;2739:119;2897:1;2922:53;2967:7;2958:6;2947:9;2943:22;2922:53;:::i;:::-;2912:63;;2868:117;2663:329;;;;:::o;2998:474::-;3066:6;3074;3123:2;3111:9;3102:7;3098:23;3094:32;3091:119;;;3129:79;;:::i;:::-;3091:119;3249:1;3274:53;3319:7;3310:6;3299:9;3295:22;3274:53;:::i;:::-;3264:63;;3220:117;3376:2;3402:53;3447:7;3438:6;3427:9;3423:22;3402:53;:::i;:::-;3392:63;;3347:118;2998:474;;;;;:::o;3478:619::-;3555:6;3563;3571;3620:2;3608:9;3599:7;3595:23;3591:32;3588:119;;;3626:79;;:::i;:::-;3588:119;3746:1;3771:53;3816:7;3807:6;3796:9;3792:22;3771:53;:::i;:::-;3761:63;;3717:117;3873:2;3899:53;3944:7;3935:6;3924:9;3920:22;3899:53;:::i;:::-;3889:63;;3844:118;4001:2;4027:53;4072:7;4063:6;4052:9;4048:22;4027:53;:::i;:::-;4017:63;;3972:118;3478:619;;;;;:::o;4103:943::-;4198:6;4206;4214;4222;4271:3;4259:9;4250:7;4246:23;4242:33;4239:120;;;4278:79;;:::i;:::-;4239:120;4398:1;4423:53;4468:7;4459:6;4448:9;4444:22;4423:53;:::i;:::-;4413:63;;4369:117;4525:2;4551:53;4596:7;4587:6;4576:9;4572:22;4551:53;:::i;:::-;4541:63;;4496:118;4653:2;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4624:118;4809:2;4798:9;4794:18;4781:32;4840:18;4832:6;4829:30;4826:117;;;4862:79;;:::i;:::-;4826:117;4967:62;5021:7;5012:6;5001:9;4997:22;4967:62;:::i;:::-;4957:72;;4752:287;4103:943;;;;;;;:::o;5052:468::-;5117:6;5125;5174:2;5162:9;5153:7;5149:23;5145:32;5142:119;;;5180:79;;:::i;:::-;5142:119;5300:1;5325:53;5370:7;5361:6;5350:9;5346:22;5325:53;:::i;:::-;5315:63;;5271:117;5427:2;5453:50;5495:7;5486:6;5475:9;5471:22;5453:50;:::i;:::-;5443:60;;5398:115;5052:468;;;;;:::o;5526:474::-;5594:6;5602;5651:2;5639:9;5630:7;5626:23;5622:32;5619:119;;;5657:79;;:::i;:::-;5619:119;5777:1;5802:53;5847:7;5838:6;5827:9;5823:22;5802:53;:::i;:::-;5792:63;;5748:117;5904:2;5930:53;5975:7;5966:6;5955:9;5951:22;5930:53;:::i;:::-;5920:63;;5875:118;5526:474;;;;;:::o;6006:559::-;6092:6;6100;6149:2;6137:9;6128:7;6124:23;6120:32;6117:119;;;6155:79;;:::i;:::-;6117:119;6303:1;6292:9;6288:17;6275:31;6333:18;6325:6;6322:30;6319:117;;;6355:79;;:::i;:::-;6319:117;6468:80;6540:7;6531:6;6520:9;6516:22;6468:80;:::i;:::-;6450:98;;;;6246:312;6006:559;;;;;:::o;6571:327::-;6629:6;6678:2;6666:9;6657:7;6653:23;6649:32;6646:119;;;6684:79;;:::i;:::-;6646:119;6804:1;6829:52;6873:7;6864:6;6853:9;6849:22;6829:52;:::i;:::-;6819:62;;6775:116;6571:327;;;;:::o;6904:349::-;6973:6;7022:2;7010:9;7001:7;6997:23;6993:32;6990:119;;;7028:79;;:::i;:::-;6990:119;7148:1;7173:63;7228:7;7219:6;7208:9;7204:22;7173:63;:::i;:::-;7163:73;;7119:127;6904:349;;;;:::o;7259:529::-;7330:6;7338;7387:2;7375:9;7366:7;7362:23;7358:32;7355:119;;;7393:79;;:::i;:::-;7355:119;7541:1;7530:9;7526:17;7513:31;7571:18;7563:6;7560:30;7557:117;;;7593:79;;:::i;:::-;7557:117;7706:65;7763:7;7754:6;7743:9;7739:22;7706:65;:::i;:::-;7688:83;;;;7484:297;7259:529;;;;;:::o;7794:329::-;7853:6;7902:2;7890:9;7881:7;7877:23;7873:32;7870:119;;;7908:79;;:::i;:::-;7870:119;8028:1;8053:53;8098:7;8089:6;8078:9;8074:22;8053:53;:::i;:::-;8043:63;;7999:117;7794:329;;;;:::o;8129:118::-;8216:24;8234:5;8216:24;:::i;:::-;8211:3;8204:37;8129:118;;:::o;8253:109::-;8334:21;8349:5;8334:21;:::i;:::-;8329:3;8322:34;8253:109;;:::o;8368:360::-;8454:3;8482:38;8514:5;8482:38;:::i;:::-;8536:70;8599:6;8594:3;8536:70;:::i;:::-;8529:77;;8615:52;8660:6;8655:3;8648:4;8641:5;8637:16;8615:52;:::i;:::-;8692:29;8714:6;8692:29;:::i;:::-;8687:3;8683:39;8676:46;;8458:270;8368:360;;;;:::o;8734:364::-;8822:3;8850:39;8883:5;8850:39;:::i;:::-;8905:71;8969:6;8964:3;8905:71;:::i;:::-;8898:78;;8985:52;9030:6;9025:3;9018:4;9011:5;9007:16;8985:52;:::i;:::-;9062:29;9084:6;9062:29;:::i;:::-;9057:3;9053:39;9046:46;;8826:272;8734:364;;;;:::o;9104:377::-;9210:3;9238:39;9271:5;9238:39;:::i;:::-;9293:89;9375:6;9370:3;9293:89;:::i;:::-;9286:96;;9391:52;9436:6;9431:3;9424:4;9417:5;9413:16;9391:52;:::i;:::-;9468:6;9463:3;9459:16;9452:23;;9214:267;9104:377;;;;:::o;9511:845::-;9614:3;9651:5;9645:12;9680:36;9706:9;9680:36;:::i;:::-;9732:89;9814:6;9809:3;9732:89;:::i;:::-;9725:96;;9852:1;9841:9;9837:17;9868:1;9863:137;;;;10014:1;10009:341;;;;9830:520;;9863:137;9947:4;9943:9;9932;9928:25;9923:3;9916:38;9983:6;9978:3;9974:16;9967:23;;9863:137;;10009:341;10076:38;10108:5;10076:38;:::i;:::-;10136:1;10150:154;10164:6;10161:1;10158:13;10150:154;;;10238:7;10232:14;10228:1;10223:3;10219:11;10212:35;10288:1;10279:7;10275:15;10264:26;;10186:4;10183:1;10179:12;10174:17;;10150:154;;;10333:6;10328:3;10324:16;10317:23;;10016:334;;9830:520;;9618:738;;9511:845;;;;:::o;10362:366::-;10504:3;10525:67;10589:2;10584:3;10525:67;:::i;:::-;10518:74;;10601:93;10690:3;10601:93;:::i;:::-;10719:2;10714:3;10710:12;10703:19;;10362:366;;;:::o;10734:::-;10876:3;10897:67;10961:2;10956:3;10897:67;:::i;:::-;10890:74;;10973:93;11062:3;10973:93;:::i;:::-;11091:2;11086:3;11082:12;11075:19;;10734:366;;;:::o;11106:::-;11248:3;11269:67;11333:2;11328:3;11269:67;:::i;:::-;11262:74;;11345:93;11434:3;11345:93;:::i;:::-;11463:2;11458:3;11454:12;11447:19;;11106:366;;;:::o;11478:::-;11620:3;11641:67;11705:2;11700:3;11641:67;:::i;:::-;11634:74;;11717:93;11806:3;11717:93;:::i;:::-;11835:2;11830:3;11826:12;11819:19;;11478:366;;;:::o;11850:::-;11992:3;12013:67;12077:2;12072:3;12013:67;:::i;:::-;12006:74;;12089:93;12178:3;12089:93;:::i;:::-;12207:2;12202:3;12198:12;12191:19;;11850:366;;;:::o;12222:::-;12364:3;12385:67;12449:2;12444:3;12385:67;:::i;:::-;12378:74;;12461:93;12550:3;12461:93;:::i;:::-;12579:2;12574:3;12570:12;12563:19;;12222:366;;;:::o;12594:::-;12736:3;12757:67;12821:2;12816:3;12757:67;:::i;:::-;12750:74;;12833:93;12922:3;12833:93;:::i;:::-;12951:2;12946:3;12942:12;12935:19;;12594:366;;;:::o;12966:::-;13108:3;13129:67;13193:2;13188:3;13129:67;:::i;:::-;13122:74;;13205:93;13294:3;13205:93;:::i;:::-;13323:2;13318:3;13314:12;13307:19;;12966:366;;;:::o;13338:::-;13480:3;13501:67;13565:2;13560:3;13501:67;:::i;:::-;13494:74;;13577:93;13666:3;13577:93;:::i;:::-;13695:2;13690:3;13686:12;13679:19;;13338:366;;;:::o;13710:::-;13852:3;13873:67;13937:2;13932:3;13873:67;:::i;:::-;13866:74;;13949:93;14038:3;13949:93;:::i;:::-;14067:2;14062:3;14058:12;14051:19;;13710:366;;;:::o;14082:::-;14224:3;14245:67;14309:2;14304:3;14245:67;:::i;:::-;14238:74;;14321:93;14410:3;14321:93;:::i;:::-;14439:2;14434:3;14430:12;14423:19;;14082:366;;;:::o;14454:::-;14596:3;14617:67;14681:2;14676:3;14617:67;:::i;:::-;14610:74;;14693:93;14782:3;14693:93;:::i;:::-;14811:2;14806:3;14802:12;14795:19;;14454:366;;;:::o;14826:::-;14968:3;14989:67;15053:2;15048:3;14989:67;:::i;:::-;14982:74;;15065:93;15154:3;15065:93;:::i;:::-;15183:2;15178:3;15174:12;15167:19;;14826:366;;;:::o;15198:::-;15340:3;15361:67;15425:2;15420:3;15361:67;:::i;:::-;15354:74;;15437:93;15526:3;15437:93;:::i;:::-;15555:2;15550:3;15546:12;15539:19;;15198:366;;;:::o;15570:365::-;15712:3;15733:66;15797:1;15792:3;15733:66;:::i;:::-;15726:73;;15808:93;15897:3;15808:93;:::i;:::-;15926:2;15921:3;15917:12;15910:19;;15570:365;;;:::o;15941:366::-;16083:3;16104:67;16168:2;16163:3;16104:67;:::i;:::-;16097:74;;16180:93;16269:3;16180:93;:::i;:::-;16298:2;16293:3;16289:12;16282:19;;15941:366;;;:::o;16313:::-;16455:3;16476:67;16540:2;16535:3;16476:67;:::i;:::-;16469:74;;16552:93;16641:3;16552:93;:::i;:::-;16670:2;16665:3;16661:12;16654:19;;16313:366;;;:::o;16685:::-;16827:3;16848:67;16912:2;16907:3;16848:67;:::i;:::-;16841:74;;16924:93;17013:3;16924:93;:::i;:::-;17042:2;17037:3;17033:12;17026:19;;16685:366;;;:::o;17057:::-;17199:3;17220:67;17284:2;17279:3;17220:67;:::i;:::-;17213:74;;17296:93;17385:3;17296:93;:::i;:::-;17414:2;17409:3;17405:12;17398:19;;17057:366;;;:::o;17429:::-;17571:3;17592:67;17656:2;17651:3;17592:67;:::i;:::-;17585:74;;17668:93;17757:3;17668:93;:::i;:::-;17786:2;17781:3;17777:12;17770:19;;17429:366;;;:::o;17801:::-;17943:3;17964:67;18028:2;18023:3;17964:67;:::i;:::-;17957:74;;18040:93;18129:3;18040:93;:::i;:::-;18158:2;18153:3;18149:12;18142:19;;17801:366;;;:::o;18173:::-;18315:3;18336:67;18400:2;18395:3;18336:67;:::i;:::-;18329:74;;18412:93;18501:3;18412:93;:::i;:::-;18530:2;18525:3;18521:12;18514:19;;18173:366;;;:::o;18545:::-;18687:3;18708:67;18772:2;18767:3;18708:67;:::i;:::-;18701:74;;18784:93;18873:3;18784:93;:::i;:::-;18902:2;18897:3;18893:12;18886:19;;18545:366;;;:::o;18917:::-;19059:3;19080:67;19144:2;19139:3;19080:67;:::i;:::-;19073:74;;19156:93;19245:3;19156:93;:::i;:::-;19274:2;19269:3;19265:12;19258:19;;18917:366;;;:::o;19289:::-;19431:3;19452:67;19516:2;19511:3;19452:67;:::i;:::-;19445:74;;19528:93;19617:3;19528:93;:::i;:::-;19646:2;19641:3;19637:12;19630:19;;19289:366;;;:::o;19661:::-;19803:3;19824:67;19888:2;19883:3;19824:67;:::i;:::-;19817:74;;19900:93;19989:3;19900:93;:::i;:::-;20018:2;20013:3;20009:12;20002:19;;19661:366;;;:::o;20033:118::-;20120:24;20138:5;20120:24;:::i;:::-;20115:3;20108:37;20033:118;;:::o;20157:429::-;20334:3;20356:92;20444:3;20435:6;20356:92;:::i;:::-;20349:99;;20465:95;20556:3;20547:6;20465:95;:::i;:::-;20458:102;;20577:3;20570:10;;20157:429;;;;;:::o;20592:222::-;20685:4;20723:2;20712:9;20708:18;20700:26;;20736:71;20804:1;20793:9;20789:17;20780:6;20736:71;:::i;:::-;20592:222;;;;:::o;20820:640::-;21015:4;21053:3;21042:9;21038:19;21030:27;;21067:71;21135:1;21124:9;21120:17;21111:6;21067:71;:::i;:::-;21148:72;21216:2;21205:9;21201:18;21192:6;21148:72;:::i;:::-;21230;21298:2;21287:9;21283:18;21274:6;21230:72;:::i;:::-;21349:9;21343:4;21339:20;21334:2;21323:9;21319:18;21312:48;21377:76;21448:4;21439:6;21377:76;:::i;:::-;21369:84;;20820:640;;;;;;;:::o;21466:210::-;21553:4;21591:2;21580:9;21576:18;21568:26;;21604:65;21666:1;21655:9;21651:17;21642:6;21604:65;:::i;:::-;21466:210;;;;:::o;21682:313::-;21795:4;21833:2;21822:9;21818:18;21810:26;;21882:9;21876:4;21872:20;21868:1;21857:9;21853:17;21846:47;21910:78;21983:4;21974:6;21910:78;:::i;:::-;21902:86;;21682:313;;;;:::o;22001:419::-;22167:4;22205:2;22194:9;22190:18;22182:26;;22254:9;22248:4;22244:20;22240:1;22229:9;22225:17;22218:47;22282:131;22408:4;22282:131;:::i;:::-;22274:139;;22001:419;;;:::o;22426:::-;22592:4;22630:2;22619:9;22615:18;22607:26;;22679:9;22673:4;22669:20;22665:1;22654:9;22650:17;22643:47;22707:131;22833:4;22707:131;:::i;:::-;22699:139;;22426:419;;;:::o;22851:::-;23017:4;23055:2;23044:9;23040:18;23032:26;;23104:9;23098:4;23094:20;23090:1;23079:9;23075:17;23068:47;23132:131;23258:4;23132:131;:::i;:::-;23124:139;;22851:419;;;:::o;23276:::-;23442:4;23480:2;23469:9;23465:18;23457:26;;23529:9;23523:4;23519:20;23515:1;23504:9;23500:17;23493:47;23557:131;23683:4;23557:131;:::i;:::-;23549:139;;23276:419;;;:::o;23701:::-;23867:4;23905:2;23894:9;23890:18;23882:26;;23954:9;23948:4;23944:20;23940:1;23929:9;23925:17;23918:47;23982:131;24108:4;23982:131;:::i;:::-;23974:139;;23701:419;;;:::o;24126:::-;24292:4;24330:2;24319:9;24315:18;24307:26;;24379:9;24373:4;24369:20;24365:1;24354:9;24350:17;24343:47;24407:131;24533:4;24407:131;:::i;:::-;24399:139;;24126:419;;;:::o;24551:::-;24717:4;24755:2;24744:9;24740:18;24732:26;;24804:9;24798:4;24794:20;24790:1;24779:9;24775:17;24768:47;24832:131;24958:4;24832:131;:::i;:::-;24824:139;;24551:419;;;:::o;24976:::-;25142:4;25180:2;25169:9;25165:18;25157:26;;25229:9;25223:4;25219:20;25215:1;25204:9;25200:17;25193:47;25257:131;25383:4;25257:131;:::i;:::-;25249:139;;24976:419;;;:::o;25401:::-;25567:4;25605:2;25594:9;25590:18;25582:26;;25654:9;25648:4;25644:20;25640:1;25629:9;25625:17;25618:47;25682:131;25808:4;25682:131;:::i;:::-;25674:139;;25401:419;;;:::o;25826:::-;25992:4;26030:2;26019:9;26015:18;26007:26;;26079:9;26073:4;26069:20;26065:1;26054:9;26050:17;26043:47;26107:131;26233:4;26107:131;:::i;:::-;26099:139;;25826:419;;;:::o;26251:::-;26417:4;26455:2;26444:9;26440:18;26432:26;;26504:9;26498:4;26494:20;26490:1;26479:9;26475:17;26468:47;26532:131;26658:4;26532:131;:::i;:::-;26524:139;;26251:419;;;:::o;26676:::-;26842:4;26880:2;26869:9;26865:18;26857:26;;26929:9;26923:4;26919:20;26915:1;26904:9;26900:17;26893:47;26957:131;27083:4;26957:131;:::i;:::-;26949:139;;26676:419;;;:::o;27101:::-;27267:4;27305:2;27294:9;27290:18;27282:26;;27354:9;27348:4;27344:20;27340:1;27329:9;27325:17;27318:47;27382:131;27508:4;27382:131;:::i;:::-;27374:139;;27101:419;;;:::o;27526:::-;27692:4;27730:2;27719:9;27715:18;27707:26;;27779:9;27773:4;27769:20;27765:1;27754:9;27750:17;27743:47;27807:131;27933:4;27807:131;:::i;:::-;27799:139;;27526:419;;;:::o;27951:::-;28117:4;28155:2;28144:9;28140:18;28132:26;;28204:9;28198:4;28194:20;28190:1;28179:9;28175:17;28168:47;28232:131;28358:4;28232:131;:::i;:::-;28224:139;;27951:419;;;:::o;28376:::-;28542:4;28580:2;28569:9;28565:18;28557:26;;28629:9;28623:4;28619:20;28615:1;28604:9;28600:17;28593:47;28657:131;28783:4;28657:131;:::i;:::-;28649:139;;28376:419;;;:::o;28801:::-;28967:4;29005:2;28994:9;28990:18;28982:26;;29054:9;29048:4;29044:20;29040:1;29029:9;29025:17;29018:47;29082:131;29208:4;29082:131;:::i;:::-;29074:139;;28801:419;;;:::o;29226:::-;29392:4;29430:2;29419:9;29415:18;29407:26;;29479:9;29473:4;29469:20;29465:1;29454:9;29450:17;29443:47;29507:131;29633:4;29507:131;:::i;:::-;29499:139;;29226:419;;;:::o;29651:::-;29817:4;29855:2;29844:9;29840:18;29832:26;;29904:9;29898:4;29894:20;29890:1;29879:9;29875:17;29868:47;29932:131;30058:4;29932:131;:::i;:::-;29924:139;;29651:419;;;:::o;30076:::-;30242:4;30280:2;30269:9;30265:18;30257:26;;30329:9;30323:4;30319:20;30315:1;30304:9;30300:17;30293:47;30357:131;30483:4;30357:131;:::i;:::-;30349:139;;30076:419;;;:::o;30501:::-;30667:4;30705:2;30694:9;30690:18;30682:26;;30754:9;30748:4;30744:20;30740:1;30729:9;30725:17;30718:47;30782:131;30908:4;30782:131;:::i;:::-;30774:139;;30501:419;;;:::o;30926:::-;31092:4;31130:2;31119:9;31115:18;31107:26;;31179:9;31173:4;31169:20;31165:1;31154:9;31150:17;31143:47;31207:131;31333:4;31207:131;:::i;:::-;31199:139;;30926:419;;;:::o;31351:::-;31517:4;31555:2;31544:9;31540:18;31532:26;;31604:9;31598:4;31594:20;31590:1;31579:9;31575:17;31568:47;31632:131;31758:4;31632:131;:::i;:::-;31624:139;;31351:419;;;:::o;31776:::-;31942:4;31980:2;31969:9;31965:18;31957:26;;32029:9;32023:4;32019:20;32015:1;32004:9;32000:17;31993:47;32057:131;32183:4;32057:131;:::i;:::-;32049:139;;31776:419;;;:::o;32201:::-;32367:4;32405:2;32394:9;32390:18;32382:26;;32454:9;32448:4;32444:20;32440:1;32429:9;32425:17;32418:47;32482:131;32608:4;32482:131;:::i;:::-;32474:139;;32201:419;;;:::o;32626:::-;32792:4;32830:2;32819:9;32815:18;32807:26;;32879:9;32873:4;32869:20;32865:1;32854:9;32850:17;32843:47;32907:131;33033:4;32907:131;:::i;:::-;32899:139;;32626:419;;;:::o;33051:222::-;33144:4;33182:2;33171:9;33167:18;33159:26;;33195:71;33263:1;33252:9;33248:17;33239:6;33195:71;:::i;:::-;33051:222;;;;:::o;33279:129::-;33313:6;33340:20;;:::i;:::-;33330:30;;33369:33;33397:4;33389:6;33369:33;:::i;:::-;33279:129;;;:::o;33414:75::-;33447:6;33480:2;33474:9;33464:19;;33414:75;:::o;33495:307::-;33556:4;33646:18;33638:6;33635:30;33632:56;;;33668:18;;:::i;:::-;33632:56;33706:29;33728:6;33706:29;:::i;:::-;33698:37;;33790:4;33784;33780:15;33772:23;;33495:307;;;:::o;33808:141::-;33857:4;33880:3;33872:11;;33903:3;33900:1;33893:14;33937:4;33934:1;33924:18;33916:26;;33808:141;;;:::o;33955:98::-;34006:6;34040:5;34034:12;34024:22;;33955:98;;;:::o;34059:99::-;34111:6;34145:5;34139:12;34129:22;;34059:99;;;:::o;34164:168::-;34247:11;34281:6;34276:3;34269:19;34321:4;34316:3;34312:14;34297:29;;34164:168;;;;:::o;34338:169::-;34422:11;34456:6;34451:3;34444:19;34496:4;34491:3;34487:14;34472:29;;34338:169;;;;:::o;34513:148::-;34615:11;34652:3;34637:18;;34513:148;;;;:::o;34667:305::-;34707:3;34726:20;34744:1;34726:20;:::i;:::-;34721:25;;34760:20;34778:1;34760:20;:::i;:::-;34755:25;;34914:1;34846:66;34842:74;34839:1;34836:81;34833:107;;;34920:18;;:::i;:::-;34833:107;34964:1;34961;34957:9;34950:16;;34667:305;;;;:::o;34978:185::-;35018:1;35035:20;35053:1;35035:20;:::i;:::-;35030:25;;35069:20;35087:1;35069:20;:::i;:::-;35064:25;;35108:1;35098:35;;35113:18;;:::i;:::-;35098:35;35155:1;35152;35148:9;35143:14;;34978:185;;;;:::o;35169:348::-;35209:7;35232:20;35250:1;35232:20;:::i;:::-;35227:25;;35266:20;35284:1;35266:20;:::i;:::-;35261:25;;35454:1;35386:66;35382:74;35379:1;35376:81;35371:1;35364:9;35357:17;35353:105;35350:131;;;35461:18;;:::i;:::-;35350:131;35509:1;35506;35502:9;35491:20;;35169:348;;;;:::o;35523:191::-;35563:4;35583:20;35601:1;35583:20;:::i;:::-;35578:25;;35617:20;35635:1;35617:20;:::i;:::-;35612:25;;35656:1;35653;35650:8;35647:34;;;35661:18;;:::i;:::-;35647:34;35706:1;35703;35699:9;35691:17;;35523:191;;;;:::o;35720:96::-;35757:7;35786:24;35804:5;35786:24;:::i;:::-;35775:35;;35720:96;;;:::o;35822:90::-;35856:7;35899:5;35892:13;35885:21;35874:32;;35822:90;;;:::o;35918:149::-;35954:7;35994:66;35987:5;35983:78;35972:89;;35918:149;;;:::o;36073:126::-;36110:7;36150:42;36143:5;36139:54;36128:65;;36073:126;;;:::o;36205:77::-;36242:7;36271:5;36260:16;;36205:77;;;:::o;36288:154::-;36372:6;36367:3;36362;36349:30;36434:1;36425:6;36420:3;36416:16;36409:27;36288:154;;;:::o;36448:307::-;36516:1;36526:113;36540:6;36537:1;36534:13;36526:113;;;36625:1;36620:3;36616:11;36610:18;36606:1;36601:3;36597:11;36590:39;36562:2;36559:1;36555:10;36550:15;;36526:113;;;36657:6;36654:1;36651:13;36648:101;;;36737:1;36728:6;36723:3;36719:16;36712:27;36648:101;36497:258;36448:307;;;:::o;36761:320::-;36805:6;36842:1;36836:4;36832:12;36822:22;;36889:1;36883:4;36879:12;36910:18;36900:81;;36966:4;36958:6;36954:17;36944:27;;36900:81;37028:2;37020:6;37017:14;36997:18;36994:38;36991:84;;;37047:18;;:::i;:::-;36991:84;36812:269;36761:320;;;:::o;37087:281::-;37170:27;37192:4;37170:27;:::i;:::-;37162:6;37158:40;37300:6;37288:10;37285:22;37264:18;37252:10;37249:34;37246:62;37243:88;;;37311:18;;:::i;:::-;37243:88;37351:10;37347:2;37340:22;37130:238;37087:281;;:::o;37374:233::-;37413:3;37436:24;37454:5;37436:24;:::i;:::-;37427:33;;37482:66;37475:5;37472:77;37469:103;;;37552:18;;:::i;:::-;37469:103;37599:1;37592:5;37588:13;37581:20;;37374:233;;;:::o;37613:176::-;37645:1;37662:20;37680:1;37662:20;:::i;:::-;37657:25;;37696:20;37714:1;37696:20;:::i;:::-;37691:25;;37735:1;37725:35;;37740:18;;:::i;:::-;37725:35;37781:1;37778;37774:9;37769:14;;37613:176;;;;:::o;37795:180::-;37843:77;37840:1;37833:88;37940:4;37937:1;37930:15;37964:4;37961:1;37954:15;37981:180;38029:77;38026:1;38019:88;38126:4;38123:1;38116:15;38150:4;38147:1;38140:15;38167:180;38215:77;38212:1;38205:88;38312:4;38309:1;38302:15;38336:4;38333:1;38326:15;38353:180;38401:77;38398:1;38391:88;38498:4;38495:1;38488:15;38522:4;38519:1;38512:15;38539:180;38587:77;38584:1;38577:88;38684:4;38681:1;38674:15;38708:4;38705:1;38698:15;38725:180;38773:77;38770:1;38763:88;38870:4;38867:1;38860:15;38894:4;38891:1;38884:15;38911:117;39020:1;39017;39010:12;39034:117;39143:1;39140;39133:12;39157:117;39266:1;39263;39256:12;39280:117;39389:1;39386;39379:12;39403:117;39512:1;39509;39502:12;39526:117;39635:1;39632;39625:12;39649:102;39690:6;39741:2;39737:7;39732:2;39725:5;39721:14;39717:28;39707:38;;39649:102;;;:::o;39757:230::-;39897:34;39893:1;39885:6;39881:14;39874:58;39966:13;39961:2;39953:6;39949:15;39942:38;39757:230;:::o;39993:237::-;40133:34;40129:1;40121:6;40117:14;40110:58;40202:20;40197:2;40189:6;40185:15;40178:45;39993:237;:::o;40236:225::-;40376:34;40372:1;40364:6;40360:14;40353:58;40445:8;40440:2;40432:6;40428:15;40421:33;40236:225;:::o;40467:178::-;40607:30;40603:1;40595:6;40591:14;40584:54;40467:178;:::o;40651:163::-;40791:15;40787:1;40779:6;40775:14;40768:39;40651:163;:::o;40820:223::-;40960:34;40956:1;40948:6;40944:14;40937:58;41029:6;41024:2;41016:6;41012:15;41005:31;40820:223;:::o;41049:175::-;41189:27;41185:1;41177:6;41173:14;41166:51;41049:175;:::o;41230:161::-;41370:13;41366:1;41358:6;41354:14;41347:37;41230:161;:::o;41397:231::-;41537:34;41533:1;41525:6;41521:14;41514:58;41606:14;41601:2;41593:6;41589:15;41582:39;41397:231;:::o;41634:179::-;41774:31;41770:1;41762:6;41758:14;41751:55;41634:179;:::o;41819:243::-;41959:34;41955:1;41947:6;41943:14;41936:58;42028:26;42023:2;42015:6;42011:15;42004:51;41819:243;:::o;42068:229::-;42208:34;42204:1;42196:6;42192:14;42185:58;42277:12;42272:2;42264:6;42260:15;42253:37;42068:229;:::o;42303:228::-;42443:34;42439:1;42431:6;42427:14;42420:58;42512:11;42507:2;42499:6;42495:15;42488:36;42303:228;:::o;42537:174::-;42677:26;42673:1;42665:6;42661:14;42654:50;42537:174;:::o;42717:158::-;42857:10;42853:1;42845:6;42841:14;42834:34;42717:158;:::o;42881:182::-;43021:34;43017:1;43009:6;43005:14;42998:58;42881:182;:::o;43069:231::-;43209:34;43205:1;43197:6;43193:14;43186:58;43278:14;43273:2;43265:6;43261:15;43254:39;43069:231;:::o;43306:182::-;43446:34;43442:1;43434:6;43430:14;43423:58;43306:182;:::o;43494:167::-;43634:19;43630:1;43622:6;43618:14;43611:43;43494:167;:::o;43667:161::-;43807:13;43803:1;43795:6;43791:14;43784:37;43667:161;:::o;43834:228::-;43974:34;43970:1;43962:6;43958:14;43951:58;44043:11;44038:2;44030:6;44026:15;44019:36;43834:228;:::o;44068:181::-;44208:33;44204:1;44196:6;44192:14;44185:57;44068:181;:::o;44255:220::-;44395:34;44391:1;44383:6;44379:14;44372:58;44464:3;44459:2;44451:6;44447:15;44440:28;44255:220;:::o;44481:163::-;44621:15;44617:1;44609:6;44605:14;44598:39;44481:163;:::o;44650:236::-;44790:34;44786:1;44778:6;44774:14;44767:58;44859:19;44854:2;44846:6;44842:15;44835:44;44650:236;:::o;44892:231::-;45032:34;45028:1;45020:6;45016:14;45009:58;45101:14;45096:2;45088:6;45084:15;45077:39;44892:231;:::o;45129:122::-;45202:24;45220:5;45202:24;:::i;:::-;45195:5;45192:35;45182:63;;45241:1;45238;45231:12;45182:63;45129:122;:::o;45257:116::-;45327:21;45342:5;45327:21;:::i;:::-;45320:5;45317:32;45307:60;;45363:1;45360;45353:12;45307:60;45257:116;:::o;45379:120::-;45451:23;45468:5;45451:23;:::i;:::-;45444:5;45441:34;45431:62;;45489:1;45486;45479:12;45431:62;45379:120;:::o;45505:122::-;45578:24;45596:5;45578:24;:::i;:::-;45571:5;45568:35;45558:63;;45617:1;45614;45607:12;45558:63;45505:122;:::o

Swarm Source

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