ETH Price: $3,247.64 (+2.29%)
Gas: 3 Gwei

Token

hauntedzone (HauntedZone)
 

Overview

Max Total Supply

1,500 HauntedZone

Holders

1,445

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Filtered by Token Holder
dunjiao.eth
Balance
1 HauntedZone
0x208e38711fd6b18feae971130d4c5fa1341a7d6c
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:
HauntedZone

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-06-10
*/

/**
 *Submitted for verification at Etherscan.io on 2022-06-04
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.0;

/**
 * @dev These functions deal with verification of Merkle Trees proofs.
 *
 * The proofs can be generated using the JavaScript library
 * https://github.com/miguelmota/merkletreejs[merkletreejs].
 * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
 *
 * See `test/utils/cryptography/MerkleProof.test.js` for some examples.
 *
 * WARNING: You should avoid using leaf values that are 64 bytes long prior to
 * hashing, or use a hash function other than keccak256 for hashing leaves.
 * This is because the concatenation of a sorted pair of internal nodes in
 * the merkle tree could be reinterpreted as a leaf value.
 */
library MerkleProof {
    /**
     * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
     * defined by `root`. For this, a `proof` must be provided, containing
     * sibling hashes on the branch from the leaf to the root of the tree. Each
     * pair of leaves and each pair of pre-images are assumed to be sorted.
     */
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    /**
     * @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
     * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
     * hash matches the root of the tree. When processing the proof, the pairs
     * of leafs & pre-images are assumed to be sorted.
     *
     * _Available since v4.4._
     */
    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                // Hash(current computed hash + current element of the proof)
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                // Hash(current element of the proof + current computed hash)
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

    function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
        assembly {
            mstore(0x00, a)
            mstore(0x20, b)
            value := keccak256(0x00, 0x40)
        }
    }
}

pragma solidity ^0.8.0; 

abstract contract ReentrancyGuard { 
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }
    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
   _status = _ENTERED;

        _;
        _status = _NOT_ENTERED;
    }
}

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);
    }
}
 
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
 
abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
 
    constructor() {
        _transferOwnership(_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 {
        _transferOwnership(address(0));
    }
 
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }
 
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
 
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);
            }
        }
    }
}
 
interface IERC721Receiver { 
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}
 
interface IERC165 { 
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
 
abstract contract ERC165 is IERC165 { 
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
} 
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;
} 
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);
}  
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);
}

error ApprovalCallerNotOwnerNorApproved();
error ApprovalQueryForNonexistentToken();
error ApproveToCaller();
error ApprovalToCurrentOwner();
error BalanceQueryForZeroAddress();
error MintToZeroAddress();
error MintZeroQuantity();
error OwnerQueryForNonexistentToken();
error TransferCallerNotOwnerNorApproved();
error TransferFromIncorrectOwner();
error TransferToNonERC721ReceiverImplementer();
error TransferToZeroAddress();
error URIQueryForNonexistentToken();

contract ERC721A is Context, ERC165, IERC721, IERC721Metadata {
    using Address for address;
    using Strings for uint256;

    // Compiler will pack this into a single 256bit word.
    struct TokenOwnership {
        // The address of the owner.
        address addr;
        // Keeps track of the start time of ownership with minimal overhead for tokenomics.
        uint64 startTimestamp;
        // Whether the token has been burned.
        bool burned;
    }

    // Compiler will pack this into a single 256bit word.
    struct AddressData {
        // Realistically, 2**64-1 is more than enough.
        uint64 balance;
        // Keeps track of mint count with minimal overhead for tokenomics.
        uint64 numberMinted;
        // Keeps track of burn count with minimal overhead for tokenomics.
        uint64 numberBurned;
        // For miscellaneous variable(s) pertaining to the address
        // (e.g. number of whitelist mint slots used).
        // If there are multiple variables, please pack them into a uint64.
        uint64 aux;
    }

    // The tokenId of the next token to be minted.
    uint256 internal _currentIndex;

    // The number of tokens burned.
    uint256 internal _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Mapping from token ID to ownership details
    // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details.
    mapping(uint256 => TokenOwnership) internal _ownerships;

    // Mapping owner address to address data
    mapping(address => AddressData) private _addressData;

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

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

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _currentIndex = _startTokenId();
    }

    /**
     * To change the starting tokenId, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 1;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view returns (uint256) {
        // Counter underflow is impossible as _burnCounter cannot be incremented
        // more than _currentIndex - _startTokenId() times
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    /**
     * Returns the total amount of tokens minted in the contract.
     */
    function _totalMinted() internal view returns (uint256) {
        // Counter underflow is impossible as _currentIndex does not decrement,
        // and it is initialized to _startTokenId()
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

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

    /**
     * @dev See {IERC721-balanceOf}.
     */
    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return uint256(_addressData[owner].balance);
    }

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberMinted);
    }

    /**
     * Returns the number of tokens burned by or on behalf of `owner`.
     */
    function _numberBurned(address owner) internal view returns (uint256) {
        return uint256(_addressData[owner].numberBurned);
    }

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return _addressData[owner].aux;
    }

    /**
     * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     * If there are multiple variables, please pack them into a uint64.
     */
    function _setAux(address owner, uint64 aux) internal {
        _addressData[owner].aux = aux;
    }

    /**
     * Gas spent here starts off proportional to the maximum mint batch size.
     * It gradually moves to O(1) as tokens get transferred around in the collection over time.
     */
    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr && curr < _currentIndex) {
                TokenOwnership memory ownership = _ownerships[curr];
                if (!ownership.burned) {
                    if (ownership.addr != address(0)) {
                        return ownership;
                    }
                    // Invariant:
                    // There will always be an ownership that has an address and is not burned
                    // before an ownership that does not have an address and is not burned.
                    // Hence, curr will not underflow.
                    while (true) {
                        curr--;
                        ownership = _ownerships[curr];
                        if (ownership.addr != address(0)) {
                            return ownership;
                        }
                    }
                }
            }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * @dev See {IERC721-ownerOf}.
     */
    function ownerOf(uint256 tokenId) public view override returns (address) {
        return _ownershipOf(tokenId).addr;
    }

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

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

    /**
     * @dev See {IERC721Metadata-tokenURI}.
     */
    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();

        string memory baseURI = _baseURI();
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : '';
    }

    /**
     * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
     * token will be the concatenation of the `baseURI` and the `tokenId`. Empty
     * by default, can be overriden in child contracts.
     */
    function _baseURI() internal view virtual returns (string memory) {
        return '';
    }

    /**
     * @dev See {IERC721-approve}.
     */
    function approve(address to, uint256 tokenId) public override {
        address owner = ERC721A.ownerOf(tokenId);
        if (to == owner) revert ApprovalToCurrentOwner();

        if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) {
            revert ApprovalCallerNotOwnerNorApproved();
        }

        _approve(to, tokenId, owner);
    }

    /**
     * @dev See {IERC721-getApproved}.
     */
    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId];
    }

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

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

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

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

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

    /**
     * @dev See {IERC721-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        _transfer(from, to, tokenId);
        if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) {
            revert TransferToNonERC721ReceiverImplementer();
        }
    }

    /**
     * @dev Returns whether `tokenId` exists.
     *
     * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
     *
     * Tokens start existing when they are minted (`_mint`),
     */
    function _exists(uint256 tokenId) internal view returns (bool) {
        return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned;
    }

    function _safeMint(address to, uint256 quantity) internal {
        _safeMint(to, quantity, '');
    }

    /**
     * @dev Safely mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity, _data, true);
    }

    /**
     * @dev Mints `quantity` tokens and transfers them to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `quantity` must be greater than 0.
     *
     * Emits a {Transfer} event.
     */
    function _mint(
        address to,
        uint256 quantity,
        bytes memory _data,
        bool safe
    ) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();

        _beforeTokenTransfers(address(0), to, startTokenId, quantity);

        // Overflows are incredibly unrealistic.
        // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1
        // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1
        unchecked {
            _addressData[to].balance += uint64(quantity);
            _addressData[to].numberMinted += uint64(quantity);

            _ownerships[startTokenId].addr = to;
            _ownerships[startTokenId].startTimestamp = uint64(block.timestamp);

            uint256 updatedIndex = startTokenId;
            uint256 end = updatedIndex + quantity;

            if (safe && to.isContract()) {
                do {
                    emit Transfer(address(0), to, updatedIndex);
                    if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (updatedIndex != end);
                // Reentrancy protection
                if (_currentIndex != startTokenId) revert();
            } else {
                do {
                    emit Transfer(address(0), to, updatedIndex++);
                } while (updatedIndex != end);
            }
            _currentIndex = updatedIndex;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    /**
     * @dev Transfers `tokenId` from `from` to `to`.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `tokenId` token must be owned by `from`.
     *
     * Emits a {Transfer} event.
     */
    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) private {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        if (prevOwnership.addr != from) revert TransferFromIncorrectOwner();

        bool isApprovedOrOwner = (_msgSender() == from ||
            isApprovedForAll(from, _msgSender()) ||
            getApproved(tokenId) == _msgSender());

        if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();

        _beforeTokenTransfers(from, to, tokenId, 1);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId, from);

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            _addressData[from].balance -= 1;
            _addressData[to].balance += 1;

            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = to;
            currSlot.startTimestamp = uint64(block.timestamp);

            // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    /**
     * @dev This is equivalent to _burn(tokenId, false)
     */
    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    /**
     * @dev Destroys `tokenId`.
     * The approval is cleared when the token is burned.
     *
     * Requirements:
     *
     * - `tokenId` must exist.
     *
     * Emits a {Transfer} event.
     */
    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        TokenOwnership memory prevOwnership = _ownershipOf(tokenId);

        address from = prevOwnership.addr;

        if (approvalCheck) {
            bool isApprovedOrOwner = (_msgSender() == from ||
                isApprovedForAll(from, _msgSender()) ||
                getApproved(tokenId) == _msgSender());

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

        _beforeTokenTransfers(from, address(0), tokenId, 1);

        // Clear approvals from the previous owner
        _approve(address(0), tokenId, from);

        // Underflow of the sender's balance is impossible because we check for
        // ownership above and the recipient's balance can't realistically overflow.
        // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256.
        unchecked {
            AddressData storage addressData = _addressData[from];
            addressData.balance -= 1;
            addressData.numberBurned += 1;

            // Keep track of who burned the token, and the timestamp of burning.
            TokenOwnership storage currSlot = _ownerships[tokenId];
            currSlot.addr = from;
            currSlot.startTimestamp = uint64(block.timestamp);
            currSlot.burned = true;

            // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it.
            // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls.
            uint256 nextTokenId = tokenId + 1;
            TokenOwnership storage nextSlot = _ownerships[nextTokenId];
            if (nextSlot.addr == address(0)) {
                // This will suffice for checking _exists(nextTokenId),
                // as a burned slot cannot contain the zero address.
                if (nextTokenId != _currentIndex) {
                    nextSlot.addr = from;
                    nextSlot.startTimestamp = prevOwnership.startTimestamp;
                }
            }
        }

        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);

        // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times.
        unchecked {
            _burnCounter++;
        }
    }

    /**
     * @dev Approve `to` to operate on `tokenId`
     *
     * Emits a {Approval} event.
     */
    function _approve(
        address to,
        uint256 tokenId,
        address owner
    ) private {
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

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

    /**
     * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting.
     * And also called before burning one token.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be
     * transferred to `to`.
     * - When `from` is zero, `tokenId` will be minted for `to`.
     * - When `to` is zero, `tokenId` will be burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    /**
     * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes
     * minting.
     * And also called after one token has been burned.
     *
     * startTokenId - the first token id to be transferred
     * quantity - the amount to be transferred
     *
     * Calling conditions:
     *
     * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been
     * transferred to `to`.
     * - When `from` is zero, `tokenId` has been minted for `to`.
     * - When `to` is zero, `tokenId` has been burned by `from`.
     * - `from` and `to` are never both zero.
     */
    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}
}

contract HauntedZone is Ownable, ERC721A, ReentrancyGuard {
    using Strings for uint256;


    uint256 public MAX_PER_Transaction = 1;
    uint256 public MAX_PER_WALLET = 1; 

    mapping(address => uint256) public publicClaimedBy;

    uint256 public  PRICE = 0 ether; 

    uint256 public maxSupply = 1500; 


    string private _baseTokenURI;



    bool public status = false; 

    constructor() ERC721A("hauntedzone","HauntedZone") {

    }

    modifier noContract() {
        require(tx.origin == msg.sender, "The caller is another contract");
        _;
    }
    
    function mint(uint256 quantity) external payable noContract {
        require(status == true , "Sale is not Active");
        require(totalSupply() + quantity <= maxSupply, "reached max supply");
        require(quantity <= MAX_PER_Transaction,"exceeds the max mint quantity");
        require(msg.value >= PRICE * quantity, "value less than.");
        publicClaimedBy[msg.sender] += quantity;
        require(publicClaimedBy[msg.sender] <= MAX_PER_WALLET, "Purchase exceeds max allowed");
        _safeMint(msg.sender, quantity);
    }

    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(), ".json")) : "";
    }

    function setBaseURI(string memory baseURI) external onlyOwner {
        _baseTokenURI = baseURI;
    }
    function _baseURI() internal view virtual override returns (string memory) {
        return _baseTokenURI;
    }

    function numberMinted(address owner) public view returns (uint256) {
        return _numberMinted(owner);
    }
    function getOwnershipData(uint256 tokenId)
        external
        view
        returns (TokenOwnership memory)
    {
        return _ownershipOf(tokenId);
    }

    function withdraw() external onlyOwner nonReentrant {
        (bool success, ) = msg.sender.call{value: address(this).balance}("");
        require(success, "Transfer failed.");
    }

    function getMintPrice(uint256 _newPrice) external onlyOwner
    {
        PRICE = _newPrice;
    }

    function getMAX_PER_WALLET(uint256 q) external onlyOwner
    {
        MAX_PER_WALLET = q;
    }

    function getMAX_PER_Transaction(uint256 q) external onlyOwner
    {
        MAX_PER_Transaction = q;
    }

    function setStatus(bool _status)external onlyOwner{
        status = _status;
    }

    function getStatus()public view returns(bool){
        return status;
    }


        
    function getPrice(uint256 _quantity) public view returns (uint256) {
        
            return _quantity*PRICE;
        
    }
    


    function divMint(address sendTo, uint quantity)public onlyOwner{
        require(totalSupply() + quantity <= maxSupply, "reached max supply");
        _safeMint(sendTo, quantity);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"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":"MAX_PER_Transaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_WALLET","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","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":"address","name":"sendTo","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"divMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"getMAX_PER_Transaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"q","type":"uint256"}],"name":"getMAX_PER_WALLET","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"getMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getOwnershipData","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"}],"internalType":"struct ERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_quantity","type":"uint256"}],"name":"getPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"publicClaimedBy","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":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"setStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"status","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526001600a556001600b556000600d556105dc600e556000601060006101000a81548160ff0219169083151502179055503480156200004157600080fd5b506040518060400160405280600b81526020017f6861756e7465647a6f6e650000000000000000000000000000000000000000008152506040518060400160405280600b81526020017f4861756e7465645a6f6e65000000000000000000000000000000000000000000815250620000ce620000c26200012660201b60201c565b6200012e60201b60201c565b8160039080519060200190620000e6929190620001fb565b508060049080519060200190620000ff929190620001fb565b5062000110620001f260201b60201c565b6001819055505050600160098190555062000310565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006001905090565b8280546200020990620002da565b90600052602060002090601f0160209004810192826200022d576000855562000279565b82601f106200024857805160ff191683800117855562000279565b8280016001018555821562000279579182015b82811115620002785782518255916020019190600101906200025b565b5b5090506200028891906200028c565b5090565b5b80821115620002a75760008160009055506001016200028d565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002f357607f821691505b602082108114156200030a5762000309620002ab565b5b50919050565b613dbe80620003206000396000f3fe6080604052600436106102045760003560e01c8063715018a611610118578063ad29dbd8116100a0578063d786b7cd1161006f578063d786b7cd14610746578063dc33e6811461076f578063e7572230146107ac578063e985e9c5146107e9578063f2fde38b1461082657610204565b8063ad29dbd81461068c578063b88d4fde146106b5578063c87b56dd146106de578063d5abeb011461071b57610204565b80638da5cb5b116100e75780638da5cb5b146105b45780639231ab2a146105df57806395d89b411461061c578063a0712d6814610647578063a22cb4651461066357610204565b8063715018a61461050c57806375236143146105235780637adaa2d7146105605780638d859f3e1461058957610204565b80633ccfd60b1161019b578063559e775b1161016a578063559e775b1461041757806355f804b3146104405780635c40f6f4146104695780636352211e1461049257806370a08231146104cf57610204565b80633ccfd60b1461038157806342842e0e146103985780634e69d560146103c157806351d7ff93146103ec57610204565b80630f2cdd6c116101d75780630f2cdd6c146102d757806318160ddd14610302578063200d2ed21461032d57806323b872dd1461035857610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190612cd8565b61084f565b60405161023d9190612d20565b60405180910390f35b34801561025257600080fd5b5061025b610931565b6040516102689190612dd4565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190612e2c565b6109c3565b6040516102a59190612e9a565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190612ee1565b610a3f565b005b3480156102e357600080fd5b506102ec610b4a565b6040516102f99190612f30565b60405180910390f35b34801561030e57600080fd5b50610317610b50565b6040516103249190612f30565b60405180910390f35b34801561033957600080fd5b50610342610b67565b60405161034f9190612d20565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190612f4b565b610b7a565b005b34801561038d57600080fd5b50610396610b8a565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190612f4b565b610d0b565b005b3480156103cd57600080fd5b506103d6610d2b565b6040516103e39190612d20565b60405180910390f35b3480156103f857600080fd5b50610401610d42565b60405161040e9190612f30565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190612e2c565b610d48565b005b34801561044c57600080fd5b50610467600480360381019061046291906130d3565b610dce565b005b34801561047557600080fd5b50610490600480360381019061048b9190613148565b610e64565b005b34801561049e57600080fd5b506104b960048036038101906104b49190612e2c565b610efd565b6040516104c69190612e9a565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f19190613175565b610f13565b6040516105039190612f30565b60405180910390f35b34801561051857600080fd5b50610521610fe3565b005b34801561052f57600080fd5b5061054a60048036038101906105459190613175565b61106b565b6040516105579190612f30565b60405180910390f35b34801561056c57600080fd5b5061058760048036038101906105829190612e2c565b611083565b005b34801561059557600080fd5b5061059e611109565b6040516105ab9190612f30565b60405180910390f35b3480156105c057600080fd5b506105c961110f565b6040516105d69190612e9a565b60405180910390f35b3480156105eb57600080fd5b5061060660048036038101906106019190612e2c565b611138565b6040516106139190613225565b60405180910390f35b34801561062857600080fd5b50610631611150565b60405161063e9190612dd4565b60405180910390f35b610661600480360381019061065c9190612e2c565b6111e2565b005b34801561066f57600080fd5b5061068a60048036038101906106859190613240565b611479565b005b34801561069857600080fd5b506106b360048036038101906106ae9190612ee1565b6115f1565b005b3480156106c157600080fd5b506106dc60048036038101906106d79190613321565b6116d2565b005b3480156106ea57600080fd5b5061070560048036038101906107009190612e2c565b61174e565b6040516107129190612dd4565b60405180910390f35b34801561072757600080fd5b506107306117f5565b60405161073d9190612f30565b60405180910390f35b34801561075257600080fd5b5061076d60048036038101906107689190612e2c565b6117fb565b005b34801561077b57600080fd5b5061079660048036038101906107919190613175565b611881565b6040516107a39190612f30565b60405180910390f35b3480156107b857600080fd5b506107d360048036038101906107ce9190612e2c565b611893565b6040516107e09190612f30565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b91906133a4565b6118aa565b60405161081d9190612d20565b60405180910390f35b34801561083257600080fd5b5061084d60048036038101906108489190613175565b61193e565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061092a575061092982611a36565b5b9050919050565b60606003805461094090613413565b80601f016020809104026020016040519081016040528092919081815260200182805461096c90613413565b80156109b95780601f1061098e576101008083540402835291602001916109b9565b820191906000526020600020905b81548152906001019060200180831161099c57829003601f168201915b5050505050905090565b60006109ce82611aa0565b610a04576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a4a82610efd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ab2576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ad1611aee565b73ffffffffffffffffffffffffffffffffffffffff1614158015610b035750610b0181610afc611aee565b6118aa565b155b15610b3a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b45838383611af6565b505050565b600b5481565b6000610b5a611ba8565b6002546001540303905090565b601060009054906101000a900460ff1681565b610b85838383611bb1565b505050565b610b92611aee565b73ffffffffffffffffffffffffffffffffffffffff16610bb061110f565b73ffffffffffffffffffffffffffffffffffffffff1614610c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfd90613491565b60405180910390fd5b60026009541415610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c43906134fd565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610c7a9061354e565b60006040518083038185875af1925050503d8060008114610cb7576040519150601f19603f3d011682016040523d82523d6000602084013e610cbc565b606091505b5050905080610d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf7906135af565b60405180910390fd5b506001600981905550565b610d26838383604051806020016040528060008152506116d2565b505050565b6000601060009054906101000a900460ff16905090565b600a5481565b610d50611aee565b73ffffffffffffffffffffffffffffffffffffffff16610d6e61110f565b73ffffffffffffffffffffffffffffffffffffffff1614610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb90613491565b60405180910390fd5b80600d8190555050565b610dd6611aee565b73ffffffffffffffffffffffffffffffffffffffff16610df461110f565b73ffffffffffffffffffffffffffffffffffffffff1614610e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4190613491565b60405180910390fd5b80600f9080519060200190610e60929190612b86565b5050565b610e6c611aee565b73ffffffffffffffffffffffffffffffffffffffff16610e8a61110f565b73ffffffffffffffffffffffffffffffffffffffff1614610ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed790613491565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000610f0882612067565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f7b576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610feb611aee565b73ffffffffffffffffffffffffffffffffffffffff1661100961110f565b73ffffffffffffffffffffffffffffffffffffffff161461105f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105690613491565b60405180910390fd5b61106960006122f6565b565b600c6020528060005260406000206000915090505481565b61108b611aee565b73ffffffffffffffffffffffffffffffffffffffff166110a961110f565b73ffffffffffffffffffffffffffffffffffffffff16146110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f690613491565b60405180910390fd5b80600a8190555050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611140612c0c565b61114982612067565b9050919050565b60606004805461115f90613413565b80601f016020809104026020016040519081016040528092919081815260200182805461118b90613413565b80156111d85780601f106111ad576101008083540402835291602001916111d8565b820191906000526020600020905b8154815290600101906020018083116111bb57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611250576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112479061361b565b60405180910390fd5b60011515601060009054906101000a900460ff161515146112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129d90613687565b60405180910390fd5b600e54816112b2610b50565b6112bc91906136d6565b11156112fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f490613778565b60405180910390fd5b600a54811115611342576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611339906137e4565b60405180910390fd5b80600d546113509190613804565b341015611392576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611389906138aa565b60405180910390fd5b80600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113e191906136d6565b92505081905550600b54600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561146c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146390613916565b60405180910390fd5b61147633826123ba565b50565b611481611aee565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e6576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600860006114f3611aee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115a0611aee565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115e59190612d20565b60405180910390a35050565b6115f9611aee565b73ffffffffffffffffffffffffffffffffffffffff1661161761110f565b73ffffffffffffffffffffffffffffffffffffffff161461166d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166490613491565b60405180910390fd5b600e5481611679610b50565b61168391906136d6565b11156116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bb90613778565b60405180910390fd5b6116ce82826123ba565b5050565b6116dd848484611bb1565b6116fc8373ffffffffffffffffffffffffffffffffffffffff166123d8565b8015611711575061170f848484846123eb565b155b15611748576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606061175982611aa0565b611798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178f906139a8565b60405180910390fd5b60006117a261253c565b905060008151116117c257604051806020016040528060008152506117ed565b806117cc846125ce565b6040516020016117dd929190613a9c565b6040516020818303038152906040525b915050919050565b600e5481565b611803611aee565b73ffffffffffffffffffffffffffffffffffffffff1661182161110f565b73ffffffffffffffffffffffffffffffffffffffff1614611877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186e90613491565b60405180910390fd5b80600b8190555050565b600061188c8261272f565b9050919050565b6000600d54826118a39190613804565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611946611aee565b73ffffffffffffffffffffffffffffffffffffffff1661196461110f565b73ffffffffffffffffffffffffffffffffffffffff16146119ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b190613491565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2190613b48565b60405180910390fd5b611a33816122f6565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611aab611ba8565b11158015611aba575060015482105b8015611ae7575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6000611bbc82612067565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611c27576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611c48611aee565b73ffffffffffffffffffffffffffffffffffffffff161480611c775750611c7685611c71611aee565b6118aa565b5b80611cbc5750611c85611aee565b73ffffffffffffffffffffffffffffffffffffffff16611ca4846109c3565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611cf5576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611d5c576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d698585856001612799565b611d7560008487611af6565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611ff5576001548214611ff457878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612060858585600161279f565b5050505050565b61206f612c0c565b60008290508061207d611ba8565b1115801561208c575060015481105b156122bf576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516122bd57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146121a15780925050506122f1565b5b6001156122bc57818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146122b75780925050506122f1565b6121a2565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6123d48282604051806020016040528060008152506127a5565b5050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612411611aee565b8786866040518563ffffffff1660e01b81526004016124339493929190613bbd565b6020604051808303816000875af192505050801561246f57506040513d601f19601f8201168201806040525081019061246c9190613c1e565b60015b6124e9573d806000811461249f576040519150601f19603f3d011682016040523d82523d6000602084013e6124a4565b606091505b506000815114156124e1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600f805461254b90613413565b80601f016020809104026020016040519081016040528092919081815260200182805461257790613413565b80156125c45780601f10612599576101008083540402835291602001916125c4565b820191906000526020600020905b8154815290600101906020018083116125a757829003601f168201915b5050505050905090565b60606000821415612616576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061272a565b600082905060005b6000821461264857808061263190613c4b565b915050600a826126419190613cc3565b915061261e565b60008167ffffffffffffffff81111561266457612663612fa8565b5b6040519080825280601f01601f1916602001820160405280156126965781602001600182028036833780820191505090505b5090505b60008514612723576001826126af9190613cf4565b9150600a856126be9190613d28565b60306126ca91906136d6565b60f81b8183815181106126e0576126df613d59565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561271c9190613cc3565b945061269a565b8093505050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b6127b283838360016127b7565b505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612825576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612860576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61286d6000868387612799565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612a375750612a368773ffffffffffffffffffffffffffffffffffffffff166123d8565b5b15612afd575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612aac60008884806001019550886123eb565b612ae2576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612a3d578260015414612af857600080fd5b612b69565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612afe575b816001819055505050612b7f600086838761279f565b5050505050565b828054612b9290613413565b90600052602060002090601f016020900481019282612bb45760008555612bfb565b82601f10612bcd57805160ff1916838001178555612bfb565b82800160010185558215612bfb579182015b82811115612bfa578251825591602001919060010190612bdf565b5b509050612c089190612c4f565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612c68576000816000905550600101612c50565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cb581612c80565b8114612cc057600080fd5b50565b600081359050612cd281612cac565b92915050565b600060208284031215612cee57612ced612c76565b5b6000612cfc84828501612cc3565b91505092915050565b60008115159050919050565b612d1a81612d05565b82525050565b6000602082019050612d356000830184612d11565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d75578082015181840152602081019050612d5a565b83811115612d84576000848401525b50505050565b6000601f19601f8301169050919050565b6000612da682612d3b565b612db08185612d46565b9350612dc0818560208601612d57565b612dc981612d8a565b840191505092915050565b60006020820190508181036000830152612dee8184612d9b565b905092915050565b6000819050919050565b612e0981612df6565b8114612e1457600080fd5b50565b600081359050612e2681612e00565b92915050565b600060208284031215612e4257612e41612c76565b5b6000612e5084828501612e17565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e8482612e59565b9050919050565b612e9481612e79565b82525050565b6000602082019050612eaf6000830184612e8b565b92915050565b612ebe81612e79565b8114612ec957600080fd5b50565b600081359050612edb81612eb5565b92915050565b60008060408385031215612ef857612ef7612c76565b5b6000612f0685828601612ecc565b9250506020612f1785828601612e17565b9150509250929050565b612f2a81612df6565b82525050565b6000602082019050612f456000830184612f21565b92915050565b600080600060608486031215612f6457612f63612c76565b5b6000612f7286828701612ecc565b9350506020612f8386828701612ecc565b9250506040612f9486828701612e17565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612fe082612d8a565b810181811067ffffffffffffffff82111715612fff57612ffe612fa8565b5b80604052505050565b6000613012612c6c565b905061301e8282612fd7565b919050565b600067ffffffffffffffff82111561303e5761303d612fa8565b5b61304782612d8a565b9050602081019050919050565b82818337600083830152505050565b600061307661307184613023565b613008565b90508281526020810184848401111561309257613091612fa3565b5b61309d848285613054565b509392505050565b600082601f8301126130ba576130b9612f9e565b5b81356130ca848260208601613063565b91505092915050565b6000602082840312156130e9576130e8612c76565b5b600082013567ffffffffffffffff81111561310757613106612c7b565b5b613113848285016130a5565b91505092915050565b61312581612d05565b811461313057600080fd5b50565b6000813590506131428161311c565b92915050565b60006020828403121561315e5761315d612c76565b5b600061316c84828501613133565b91505092915050565b60006020828403121561318b5761318a612c76565b5b600061319984828501612ecc565b91505092915050565b6131ab81612e79565b82525050565b600067ffffffffffffffff82169050919050565b6131ce816131b1565b82525050565b6131dd81612d05565b82525050565b6060820160008201516131f960008501826131a2565b50602082015161320c60208501826131c5565b50604082015161321f60408501826131d4565b50505050565b600060608201905061323a60008301846131e3565b92915050565b6000806040838503121561325757613256612c76565b5b600061326585828601612ecc565b925050602061327685828601613133565b9150509250929050565b600067ffffffffffffffff82111561329b5761329a612fa8565b5b6132a482612d8a565b9050602081019050919050565b60006132c46132bf84613280565b613008565b9050828152602081018484840111156132e0576132df612fa3565b5b6132eb848285613054565b509392505050565b600082601f83011261330857613307612f9e565b5b81356133188482602086016132b1565b91505092915050565b6000806000806080858703121561333b5761333a612c76565b5b600061334987828801612ecc565b945050602061335a87828801612ecc565b935050604061336b87828801612e17565b925050606085013567ffffffffffffffff81111561338c5761338b612c7b565b5b613398878288016132f3565b91505092959194509250565b600080604083850312156133bb576133ba612c76565b5b60006133c985828601612ecc565b92505060206133da85828601612ecc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061342b57607f821691505b6020821081141561343f5761343e6133e4565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061347b602083612d46565b915061348682613445565b602082019050919050565b600060208201905081810360008301526134aa8161346e565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006134e7601f83612d46565b91506134f2826134b1565b602082019050919050565b60006020820190508181036000830152613516816134da565b9050919050565b600081905092915050565b50565b600061353860008361351d565b915061354382613528565b600082019050919050565b60006135598261352b565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000613599601083612d46565b91506135a482613563565b602082019050919050565b600060208201905081810360008301526135c88161358c565b9050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000613605601e83612d46565b9150613610826135cf565b602082019050919050565b60006020820190508181036000830152613634816135f8565b9050919050565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b6000613671601283612d46565b915061367c8261363b565b602082019050919050565b600060208201905081810360008301526136a081613664565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136e182612df6565b91506136ec83612df6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613721576137206136a7565b5b828201905092915050565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b6000613762601283612d46565b915061376d8261372c565b602082019050919050565b6000602082019050818103600083015261379181613755565b9050919050565b7f6578636565647320746865206d6178206d696e74207175616e74697479000000600082015250565b60006137ce601d83612d46565b91506137d982613798565b602082019050919050565b600060208201905081810360008301526137fd816137c1565b9050919050565b600061380f82612df6565b915061381a83612df6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613853576138526136a7565b5b828202905092915050565b7f76616c7565206c657373207468616e2e00000000000000000000000000000000600082015250565b6000613894601083612d46565b915061389f8261385e565b602082019050919050565b600060208201905081810360008301526138c381613887565b9050919050565b7f50757263686173652065786365656473206d617820616c6c6f77656400000000600082015250565b6000613900601c83612d46565b915061390b826138ca565b602082019050919050565b6000602082019050818103600083015261392f816138f3565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613992602f83612d46565b915061399d82613936565b604082019050919050565b600060208201905081810360008301526139c181613985565b9050919050565b600081905092915050565b60006139de82612d3b565b6139e881856139c8565b93506139f8818560208601612d57565b80840191505092915050565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b6000613a3a6001836139c8565b9150613a4582613a04565b600182019050919050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613a866005836139c8565b9150613a9182613a50565b600582019050919050565b6000613aa882856139d3565b9150613ab382613a2d565b9150613abf82846139d3565b9150613aca82613a79565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b32602683612d46565b9150613b3d82613ad6565b604082019050919050565b60006020820190508181036000830152613b6181613b25565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613b8f82613b68565b613b998185613b73565b9350613ba9818560208601612d57565b613bb281612d8a565b840191505092915050565b6000608082019050613bd26000830187612e8b565b613bdf6020830186612e8b565b613bec6040830185612f21565b8181036060830152613bfe8184613b84565b905095945050505050565b600081519050613c1881612cac565b92915050565b600060208284031215613c3457613c33612c76565b5b6000613c4284828501613c09565b91505092915050565b6000613c5682612df6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c8957613c886136a7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613cce82612df6565b9150613cd983612df6565b925082613ce957613ce8613c94565b5b828204905092915050565b6000613cff82612df6565b9150613d0a83612df6565b925082821015613d1d57613d1c6136a7565b5b828203905092915050565b6000613d3382612df6565b9150613d3e83612df6565b925082613d4e57613d4d613c94565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220310d6def8208c416732f6f90c294fc8129532e7850f2292ca783012edd86314b64736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106102045760003560e01c8063715018a611610118578063ad29dbd8116100a0578063d786b7cd1161006f578063d786b7cd14610746578063dc33e6811461076f578063e7572230146107ac578063e985e9c5146107e9578063f2fde38b1461082657610204565b8063ad29dbd81461068c578063b88d4fde146106b5578063c87b56dd146106de578063d5abeb011461071b57610204565b80638da5cb5b116100e75780638da5cb5b146105b45780639231ab2a146105df57806395d89b411461061c578063a0712d6814610647578063a22cb4651461066357610204565b8063715018a61461050c57806375236143146105235780637adaa2d7146105605780638d859f3e1461058957610204565b80633ccfd60b1161019b578063559e775b1161016a578063559e775b1461041757806355f804b3146104405780635c40f6f4146104695780636352211e1461049257806370a08231146104cf57610204565b80633ccfd60b1461038157806342842e0e146103985780634e69d560146103c157806351d7ff93146103ec57610204565b80630f2cdd6c116101d75780630f2cdd6c146102d757806318160ddd14610302578063200d2ed21461032d57806323b872dd1461035857610204565b806301ffc9a71461020957806306fdde0314610246578063081812fc14610271578063095ea7b3146102ae575b600080fd5b34801561021557600080fd5b50610230600480360381019061022b9190612cd8565b61084f565b60405161023d9190612d20565b60405180910390f35b34801561025257600080fd5b5061025b610931565b6040516102689190612dd4565b60405180910390f35b34801561027d57600080fd5b5061029860048036038101906102939190612e2c565b6109c3565b6040516102a59190612e9a565b60405180910390f35b3480156102ba57600080fd5b506102d560048036038101906102d09190612ee1565b610a3f565b005b3480156102e357600080fd5b506102ec610b4a565b6040516102f99190612f30565b60405180910390f35b34801561030e57600080fd5b50610317610b50565b6040516103249190612f30565b60405180910390f35b34801561033957600080fd5b50610342610b67565b60405161034f9190612d20565b60405180910390f35b34801561036457600080fd5b5061037f600480360381019061037a9190612f4b565b610b7a565b005b34801561038d57600080fd5b50610396610b8a565b005b3480156103a457600080fd5b506103bf60048036038101906103ba9190612f4b565b610d0b565b005b3480156103cd57600080fd5b506103d6610d2b565b6040516103e39190612d20565b60405180910390f35b3480156103f857600080fd5b50610401610d42565b60405161040e9190612f30565b60405180910390f35b34801561042357600080fd5b5061043e60048036038101906104399190612e2c565b610d48565b005b34801561044c57600080fd5b50610467600480360381019061046291906130d3565b610dce565b005b34801561047557600080fd5b50610490600480360381019061048b9190613148565b610e64565b005b34801561049e57600080fd5b506104b960048036038101906104b49190612e2c565b610efd565b6040516104c69190612e9a565b60405180910390f35b3480156104db57600080fd5b506104f660048036038101906104f19190613175565b610f13565b6040516105039190612f30565b60405180910390f35b34801561051857600080fd5b50610521610fe3565b005b34801561052f57600080fd5b5061054a60048036038101906105459190613175565b61106b565b6040516105579190612f30565b60405180910390f35b34801561056c57600080fd5b5061058760048036038101906105829190612e2c565b611083565b005b34801561059557600080fd5b5061059e611109565b6040516105ab9190612f30565b60405180910390f35b3480156105c057600080fd5b506105c961110f565b6040516105d69190612e9a565b60405180910390f35b3480156105eb57600080fd5b5061060660048036038101906106019190612e2c565b611138565b6040516106139190613225565b60405180910390f35b34801561062857600080fd5b50610631611150565b60405161063e9190612dd4565b60405180910390f35b610661600480360381019061065c9190612e2c565b6111e2565b005b34801561066f57600080fd5b5061068a60048036038101906106859190613240565b611479565b005b34801561069857600080fd5b506106b360048036038101906106ae9190612ee1565b6115f1565b005b3480156106c157600080fd5b506106dc60048036038101906106d79190613321565b6116d2565b005b3480156106ea57600080fd5b5061070560048036038101906107009190612e2c565b61174e565b6040516107129190612dd4565b60405180910390f35b34801561072757600080fd5b506107306117f5565b60405161073d9190612f30565b60405180910390f35b34801561075257600080fd5b5061076d60048036038101906107689190612e2c565b6117fb565b005b34801561077b57600080fd5b5061079660048036038101906107919190613175565b611881565b6040516107a39190612f30565b60405180910390f35b3480156107b857600080fd5b506107d360048036038101906107ce9190612e2c565b611893565b6040516107e09190612f30565b60405180910390f35b3480156107f557600080fd5b50610810600480360381019061080b91906133a4565b6118aa565b60405161081d9190612d20565b60405180910390f35b34801561083257600080fd5b5061084d60048036038101906108489190613175565b61193e565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091a57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061092a575061092982611a36565b5b9050919050565b60606003805461094090613413565b80601f016020809104026020016040519081016040528092919081815260200182805461096c90613413565b80156109b95780601f1061098e576101008083540402835291602001916109b9565b820191906000526020600020905b81548152906001019060200180831161099c57829003601f168201915b5050505050905090565b60006109ce82611aa0565b610a04576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610a4a82610efd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ab2576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610ad1611aee565b73ffffffffffffffffffffffffffffffffffffffff1614158015610b035750610b0181610afc611aee565b6118aa565b155b15610b3a576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b45838383611af6565b505050565b600b5481565b6000610b5a611ba8565b6002546001540303905090565b601060009054906101000a900460ff1681565b610b85838383611bb1565b505050565b610b92611aee565b73ffffffffffffffffffffffffffffffffffffffff16610bb061110f565b73ffffffffffffffffffffffffffffffffffffffff1614610c06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bfd90613491565b60405180910390fd5b60026009541415610c4c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c43906134fd565b60405180910390fd5b600260098190555060003373ffffffffffffffffffffffffffffffffffffffff1647604051610c7a9061354e565b60006040518083038185875af1925050503d8060008114610cb7576040519150601f19603f3d011682016040523d82523d6000602084013e610cbc565b606091505b5050905080610d00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf7906135af565b60405180910390fd5b506001600981905550565b610d26838383604051806020016040528060008152506116d2565b505050565b6000601060009054906101000a900460ff16905090565b600a5481565b610d50611aee565b73ffffffffffffffffffffffffffffffffffffffff16610d6e61110f565b73ffffffffffffffffffffffffffffffffffffffff1614610dc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbb90613491565b60405180910390fd5b80600d8190555050565b610dd6611aee565b73ffffffffffffffffffffffffffffffffffffffff16610df461110f565b73ffffffffffffffffffffffffffffffffffffffff1614610e4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4190613491565b60405180910390fd5b80600f9080519060200190610e60929190612b86565b5050565b610e6c611aee565b73ffffffffffffffffffffffffffffffffffffffff16610e8a61110f565b73ffffffffffffffffffffffffffffffffffffffff1614610ee0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed790613491565b60405180910390fd5b80601060006101000a81548160ff02191690831515021790555050565b6000610f0882612067565b600001519050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f7b576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b610feb611aee565b73ffffffffffffffffffffffffffffffffffffffff1661100961110f565b73ffffffffffffffffffffffffffffffffffffffff161461105f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105690613491565b60405180910390fd5b61106960006122f6565b565b600c6020528060005260406000206000915090505481565b61108b611aee565b73ffffffffffffffffffffffffffffffffffffffff166110a961110f565b73ffffffffffffffffffffffffffffffffffffffff16146110ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f690613491565b60405180910390fd5b80600a8190555050565b600d5481565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611140612c0c565b61114982612067565b9050919050565b60606004805461115f90613413565b80601f016020809104026020016040519081016040528092919081815260200182805461118b90613413565b80156111d85780601f106111ad576101008083540402835291602001916111d8565b820191906000526020600020905b8154815290600101906020018083116111bb57829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611250576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112479061361b565b60405180910390fd5b60011515601060009054906101000a900460ff161515146112a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161129d90613687565b60405180910390fd5b600e54816112b2610b50565b6112bc91906136d6565b11156112fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f490613778565b60405180910390fd5b600a54811115611342576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611339906137e4565b60405180910390fd5b80600d546113509190613804565b341015611392576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611389906138aa565b60405180910390fd5b80600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546113e191906136d6565b92505081905550600b54600c60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561146c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146390613916565b60405180910390fd5b61147633826123ba565b50565b611481611aee565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114e6576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600860006114f3611aee565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166115a0611aee565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115e59190612d20565b60405180910390a35050565b6115f9611aee565b73ffffffffffffffffffffffffffffffffffffffff1661161761110f565b73ffffffffffffffffffffffffffffffffffffffff161461166d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166490613491565b60405180910390fd5b600e5481611679610b50565b61168391906136d6565b11156116c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bb90613778565b60405180910390fd5b6116ce82826123ba565b5050565b6116dd848484611bb1565b6116fc8373ffffffffffffffffffffffffffffffffffffffff166123d8565b8015611711575061170f848484846123eb565b155b15611748576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b606061175982611aa0565b611798576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178f906139a8565b60405180910390fd5b60006117a261253c565b905060008151116117c257604051806020016040528060008152506117ed565b806117cc846125ce565b6040516020016117dd929190613a9c565b6040516020818303038152906040525b915050919050565b600e5481565b611803611aee565b73ffffffffffffffffffffffffffffffffffffffff1661182161110f565b73ffffffffffffffffffffffffffffffffffffffff1614611877576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186e90613491565b60405180910390fd5b80600b8190555050565b600061188c8261272f565b9050919050565b6000600d54826118a39190613804565b9050919050565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611946611aee565b73ffffffffffffffffffffffffffffffffffffffff1661196461110f565b73ffffffffffffffffffffffffffffffffffffffff16146119ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b190613491565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2190613b48565b60405180910390fd5b611a33816122f6565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611aab611ba8565b11158015611aba575060015482105b8015611ae7575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006001905090565b6000611bbc82612067565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611c27576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611c48611aee565b73ffffffffffffffffffffffffffffffffffffffff161480611c775750611c7685611c71611aee565b6118aa565b5b80611cbc5750611c85611aee565b73ffffffffffffffffffffffffffffffffffffffff16611ca4846109c3565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611cf5576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611d5c576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611d698585856001612799565b611d7560008487611af6565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611ff5576001548214611ff457878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612060858585600161279f565b5050505050565b61206f612c0c565b60008290508061207d611ba8565b1115801561208c575060015481105b156122bf576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516122bd57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146121a15780925050506122f1565b5b6001156122bc57818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146122b75780925050506122f1565b6121a2565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6123d48282604051806020016040528060008152506127a5565b5050565b600080823b905060008111915050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612411611aee565b8786866040518563ffffffff1660e01b81526004016124339493929190613bbd565b6020604051808303816000875af192505050801561246f57506040513d601f19601f8201168201806040525081019061246c9190613c1e565b60015b6124e9573d806000811461249f576040519150601f19603f3d011682016040523d82523d6000602084013e6124a4565b606091505b506000815114156124e1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600f805461254b90613413565b80601f016020809104026020016040519081016040528092919081815260200182805461257790613413565b80156125c45780601f10612599576101008083540402835291602001916125c4565b820191906000526020600020905b8154815290600101906020018083116125a757829003601f168201915b5050505050905090565b60606000821415612616576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061272a565b600082905060005b6000821461264857808061263190613c4b565b915050600a826126419190613cc3565b915061261e565b60008167ffffffffffffffff81111561266457612663612fa8565b5b6040519080825280601f01601f1916602001820160405280156126965781602001600182028036833780820191505090505b5090505b60008514612723576001826126af9190613cf4565b9150600a856126be9190613d28565b60306126ca91906136d6565b60f81b8183815181106126e0576126df613d59565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561271c9190613cc3565b945061269a565b8093505050505b919050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b50505050565b50505050565b6127b283838360016127b7565b505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415612825576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000841415612860576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61286d6000868387612799565b83600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612a375750612a368773ffffffffffffffffffffffffffffffffffffffff166123d8565b5b15612afd575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612aac60008884806001019550886123eb565b612ae2576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612a3d578260015414612af857600080fd5b612b69565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612afe575b816001819055505050612b7f600086838761279f565b5050505050565b828054612b9290613413565b90600052602060002090601f016020900481019282612bb45760008555612bfb565b82601f10612bcd57805160ff1916838001178555612bfb565b82800160010185558215612bfb579182015b82811115612bfa578251825591602001919060010190612bdf565b5b509050612c089190612c4f565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612c68576000816000905550600101612c50565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612cb581612c80565b8114612cc057600080fd5b50565b600081359050612cd281612cac565b92915050565b600060208284031215612cee57612ced612c76565b5b6000612cfc84828501612cc3565b91505092915050565b60008115159050919050565b612d1a81612d05565b82525050565b6000602082019050612d356000830184612d11565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612d75578082015181840152602081019050612d5a565b83811115612d84576000848401525b50505050565b6000601f19601f8301169050919050565b6000612da682612d3b565b612db08185612d46565b9350612dc0818560208601612d57565b612dc981612d8a565b840191505092915050565b60006020820190508181036000830152612dee8184612d9b565b905092915050565b6000819050919050565b612e0981612df6565b8114612e1457600080fd5b50565b600081359050612e2681612e00565b92915050565b600060208284031215612e4257612e41612c76565b5b6000612e5084828501612e17565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612e8482612e59565b9050919050565b612e9481612e79565b82525050565b6000602082019050612eaf6000830184612e8b565b92915050565b612ebe81612e79565b8114612ec957600080fd5b50565b600081359050612edb81612eb5565b92915050565b60008060408385031215612ef857612ef7612c76565b5b6000612f0685828601612ecc565b9250506020612f1785828601612e17565b9150509250929050565b612f2a81612df6565b82525050565b6000602082019050612f456000830184612f21565b92915050565b600080600060608486031215612f6457612f63612c76565b5b6000612f7286828701612ecc565b9350506020612f8386828701612ecc565b9250506040612f9486828701612e17565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612fe082612d8a565b810181811067ffffffffffffffff82111715612fff57612ffe612fa8565b5b80604052505050565b6000613012612c6c565b905061301e8282612fd7565b919050565b600067ffffffffffffffff82111561303e5761303d612fa8565b5b61304782612d8a565b9050602081019050919050565b82818337600083830152505050565b600061307661307184613023565b613008565b90508281526020810184848401111561309257613091612fa3565b5b61309d848285613054565b509392505050565b600082601f8301126130ba576130b9612f9e565b5b81356130ca848260208601613063565b91505092915050565b6000602082840312156130e9576130e8612c76565b5b600082013567ffffffffffffffff81111561310757613106612c7b565b5b613113848285016130a5565b91505092915050565b61312581612d05565b811461313057600080fd5b50565b6000813590506131428161311c565b92915050565b60006020828403121561315e5761315d612c76565b5b600061316c84828501613133565b91505092915050565b60006020828403121561318b5761318a612c76565b5b600061319984828501612ecc565b91505092915050565b6131ab81612e79565b82525050565b600067ffffffffffffffff82169050919050565b6131ce816131b1565b82525050565b6131dd81612d05565b82525050565b6060820160008201516131f960008501826131a2565b50602082015161320c60208501826131c5565b50604082015161321f60408501826131d4565b50505050565b600060608201905061323a60008301846131e3565b92915050565b6000806040838503121561325757613256612c76565b5b600061326585828601612ecc565b925050602061327685828601613133565b9150509250929050565b600067ffffffffffffffff82111561329b5761329a612fa8565b5b6132a482612d8a565b9050602081019050919050565b60006132c46132bf84613280565b613008565b9050828152602081018484840111156132e0576132df612fa3565b5b6132eb848285613054565b509392505050565b600082601f83011261330857613307612f9e565b5b81356133188482602086016132b1565b91505092915050565b6000806000806080858703121561333b5761333a612c76565b5b600061334987828801612ecc565b945050602061335a87828801612ecc565b935050604061336b87828801612e17565b925050606085013567ffffffffffffffff81111561338c5761338b612c7b565b5b613398878288016132f3565b91505092959194509250565b600080604083850312156133bb576133ba612c76565b5b60006133c985828601612ecc565b92505060206133da85828601612ecc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061342b57607f821691505b6020821081141561343f5761343e6133e4565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061347b602083612d46565b915061348682613445565b602082019050919050565b600060208201905081810360008301526134aa8161346e565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006134e7601f83612d46565b91506134f2826134b1565b602082019050919050565b60006020820190508181036000830152613516816134da565b9050919050565b600081905092915050565b50565b600061353860008361351d565b915061354382613528565b600082019050919050565b60006135598261352b565b9150819050919050565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b6000613599601083612d46565b91506135a482613563565b602082019050919050565b600060208201905081810360008301526135c88161358c565b9050919050565b7f5468652063616c6c657220697320616e6f7468657220636f6e74726163740000600082015250565b6000613605601e83612d46565b9150613610826135cf565b602082019050919050565b60006020820190508181036000830152613634816135f8565b9050919050565b7f53616c65206973206e6f74204163746976650000000000000000000000000000600082015250565b6000613671601283612d46565b915061367c8261363b565b602082019050919050565b600060208201905081810360008301526136a081613664565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006136e182612df6565b91506136ec83612df6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613721576137206136a7565b5b828201905092915050565b7f72656163686564206d617820737570706c790000000000000000000000000000600082015250565b6000613762601283612d46565b915061376d8261372c565b602082019050919050565b6000602082019050818103600083015261379181613755565b9050919050565b7f6578636565647320746865206d6178206d696e74207175616e74697479000000600082015250565b60006137ce601d83612d46565b91506137d982613798565b602082019050919050565b600060208201905081810360008301526137fd816137c1565b9050919050565b600061380f82612df6565b915061381a83612df6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613853576138526136a7565b5b828202905092915050565b7f76616c7565206c657373207468616e2e00000000000000000000000000000000600082015250565b6000613894601083612d46565b915061389f8261385e565b602082019050919050565b600060208201905081810360008301526138c381613887565b9050919050565b7f50757263686173652065786365656473206d617820616c6c6f77656400000000600082015250565b6000613900601c83612d46565b915061390b826138ca565b602082019050919050565b6000602082019050818103600083015261392f816138f3565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613992602f83612d46565b915061399d82613936565b604082019050919050565b600060208201905081810360008301526139c181613985565b9050919050565b600081905092915050565b60006139de82612d3b565b6139e881856139c8565b93506139f8818560208601612d57565b80840191505092915050565b7f2f00000000000000000000000000000000000000000000000000000000000000600082015250565b6000613a3a6001836139c8565b9150613a4582613a04565b600182019050919050565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b6000613a866005836139c8565b9150613a9182613a50565b600582019050919050565b6000613aa882856139d3565b9150613ab382613a2d565b9150613abf82846139d3565b9150613aca82613a79565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b32602683612d46565b9150613b3d82613ad6565b604082019050919050565b60006020820190508181036000830152613b6181613b25565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613b8f82613b68565b613b998185613b73565b9350613ba9818560208601612d57565b613bb281612d8a565b840191505092915050565b6000608082019050613bd26000830187612e8b565b613bdf6020830186612e8b565b613bec6040830185612f21565b8181036060830152613bfe8184613b84565b905095945050505050565b600081519050613c1881612cac565b92915050565b600060208284031215613c3457613c33612c76565b5b6000613c4284828501613c09565b91505092915050565b6000613c5682612df6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c8957613c886136a7565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613cce82612df6565b9150613cd983612df6565b925082613ce957613ce8613c94565b5b828204905092915050565b6000613cff82612df6565b9150613d0a83612df6565b925082821015613d1d57613d1c6136a7565b5b828203905092915050565b6000613d3382612df6565b9150613d3e83612df6565b925082613d4e57613d4d613c94565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea2646970667358221220310d6def8208c416732f6f90c294fc8129532e7850f2292ca783012edd86314b64736f6c634300080a0033

Deployed Bytecode Sourcemap

32939:3120:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15194:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18307:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19810:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19373:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33085:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14443:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33312:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20675:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35003:186;;;;;;;;;;;;;:::i;:::-;;20916:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35623:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33040:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35197:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34476:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35530:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18115:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15563:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5225:103;;;;;;;;;;;;;:::i;:::-;;33128:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35413:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33187:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5002:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34827:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18476:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33548:545;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20086:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35868:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21172:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34101:367;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33228:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35306:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34708:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35720:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20444:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5337:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15194:305;15296:4;15348:25;15333:40;;;:11;:40;;;;:105;;;;15405:33;15390:48;;;:11;:48;;;;15333:105;:158;;;;15455:36;15479:11;15455:23;:36::i;:::-;15333:158;15313:178;;15194:305;;;:::o;18307:100::-;18361:13;18394:5;18387:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18307:100;:::o;19810:204::-;19878:7;19903:16;19911:7;19903;:16::i;:::-;19898:64;;19928:34;;;;;;;;;;;;;;19898:64;19982:15;:24;19998:7;19982:24;;;;;;;;;;;;;;;;;;;;;19975:31;;19810:204;;;:::o;19373:371::-;19446:13;19462:24;19478:7;19462:15;:24::i;:::-;19446:40;;19507:5;19501:11;;:2;:11;;;19497:48;;;19521:24;;;;;;;;;;;;;;19497:48;19578:5;19562:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;19588:37;19605:5;19612:12;:10;:12::i;:::-;19588:16;:37::i;:::-;19587:38;19562:63;19558:138;;;19649:35;;;;;;;;;;;;;;19558:138;19708:28;19717:2;19721:7;19730:5;19708:8;:28::i;:::-;19435:309;19373:371;;:::o;33085:33::-;;;;:::o;14443:303::-;14487:7;14712:15;:13;:15::i;:::-;14697:12;;14681:13;;:28;:46;14674:53;;14443:303;:::o;33312:26::-;;;;;;;;;;;;;:::o;20675:170::-;20809:28;20819:4;20825:2;20829:7;20809:9;:28::i;:::-;20675:170;;;:::o;35003:186::-;5147:12;:10;:12::i;:::-;5136:23;;:7;:5;:7::i;:::-;:23;;;5128:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2784:1:::1;2930:7;;:19;;2922:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;2784:1;2991:7;:18;;;;35067:12:::2;35085:10;:15;;35108:21;35085:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35066:68;;;35153:7;35145:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;35055:134;2740:1:::1;3034:7;:22;;;;35003:186::o:0;20916:185::-;21054:39;21071:4;21077:2;21081:7;21054:39;;;;;;;;;;;;:16;:39::i;:::-;20916:185;;;:::o;35623:77::-;35663:4;35686:6;;;;;;;;;;;35679:13;;35623:77;:::o;33040:38::-;;;;:::o;35197:101::-;5147:12;:10;:12::i;:::-;5136:23;;:7;:5;:7::i;:::-;:23;;;5128:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35281:9:::1;35273:5;:17;;;;35197:101:::0;:::o;34476:104::-;5147:12;:10;:12::i;:::-;5136:23;;:7;:5;:7::i;:::-;:23;;;5128:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34565:7:::1;34549:13;:23;;;;;;;;;;;;:::i;:::-;;34476:104:::0;:::o;35530:85::-;5147:12;:10;:12::i;:::-;5136:23;;:7;:5;:7::i;:::-;:23;;;5128:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35600:7:::1;35591:6;;:16;;;;;;;;;;;;;;;;;;35530:85:::0;:::o;18115:125::-;18179:7;18206:21;18219:7;18206:12;:21::i;:::-;:26;;;18199:33;;18115:125;;;:::o;15563:206::-;15627:7;15668:1;15651:19;;:5;:19;;;15647:60;;;15679:28;;;;;;;;;;;;;;15647:60;15733:12;:19;15746:5;15733:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;15725:36;;15718:43;;15563:206;;;:::o;5225:103::-;5147:12;:10;:12::i;:::-;5136:23;;:7;:5;:7::i;:::-;:23;;;5128:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5290:30:::1;5317:1;5290:18;:30::i;:::-;5225:103::o:0;33128:50::-;;;;;;;;;;;;;;;;;:::o;35413:109::-;5147:12;:10;:12::i;:::-;5136:23;;:7;:5;:7::i;:::-;:23;;;5128:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35513:1:::1;35491:19;:23;;;;35413:109:::0;:::o;33187:31::-;;;;:::o;5002:87::-;5048:7;5075:6;;;;;;;;;;;5068:13;;5002:87;:::o;34827:168::-;34920:21;;:::i;:::-;34966;34979:7;34966:12;:21::i;:::-;34959:28;;34827:168;;;:::o;18476:104::-;18532:13;18565:7;18558:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18476:104;:::o;33548:545::-;33471:10;33458:23;;:9;:23;;;33450:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33637:4:::1;33627:14;;:6;;;;;;;;;;;:14;;;33619:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;33712:9;;33700:8;33684:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:37;;33676:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33775:19;;33763:8;:31;;33755:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;33867:8;33859:5;;:16;;;;:::i;:::-;33846:9;:29;;33838:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33938:8;33907:15;:27;33923:10;33907:27;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;33996:14;;33965:15;:27;33981:10;33965:27;;;;;;;;;;;;;;;;:45;;33957:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;34054:31;34064:10;34076:8;34054:9;:31::i;:::-;33548:545:::0;:::o;20086:287::-;20197:12;:10;:12::i;:::-;20185:24;;:8;:24;;;20181:54;;;20218:17;;;;;;;;;;;;;;20181:54;20293:8;20248:18;:32;20267:12;:10;:12::i;:::-;20248:32;;;;;;;;;;;;;;;:42;20281:8;20248:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;20346:8;20317:48;;20332:12;:10;:12::i;:::-;20317:48;;;20356:8;20317:48;;;;;;:::i;:::-;;;;;;;;20086:287;;:::o;35868:188::-;5147:12;:10;:12::i;:::-;5136:23;;:7;:5;:7::i;:::-;:23;;;5128:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35978:9:::1;;35966:8;35950:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:37;;35942:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36021:27;36031:6;36039:8;36021:9;:27::i;:::-;35868:188:::0;;:::o;21172:369::-;21339:28;21349:4;21355:2;21359:7;21339:9;:28::i;:::-;21382:15;:2;:13;;;:15::i;:::-;:76;;;;;21402:56;21433:4;21439:2;21443:7;21452:5;21402:30;:56::i;:::-;21401:57;21382:76;21378:156;;;21482:40;;;;;;;;;;;;;;21378:156;21172:369;;;;:::o;34101:367::-;34174:13;34208:16;34216:7;34208;:16::i;:::-;34200:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;34286:21;34310:10;:8;:10::i;:::-;34286:34;;34371:1;34353:7;34347:21;:25;:113;;;;;;;;;;;;;;;;;34412:7;34426:18;:7;:16;:18::i;:::-;34395:59;;;;;;;;;:::i;:::-;;;;;;;;;;;;;34347:113;34331:129;;;34101:367;;;:::o;33228:31::-;;;;:::o;35306:99::-;5147:12;:10;:12::i;:::-;5136:23;;:7;:5;:7::i;:::-;:23;;;5128:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35396:1:::1;35379:14;:18;;;;35306:99:::0;:::o;34708:113::-;34766:7;34793:20;34807:5;34793:13;:20::i;:::-;34786:27;;34708:113;;;:::o;35720:132::-;35778:7;35829:5;;35819:9;:15;;;;:::i;:::-;35812:22;;35720:132;;;:::o;20444:164::-;20541:4;20565:18;:25;20584:5;20565:25;;;;;;;;;;;;;;;:35;20591:8;20565:35;;;;;;;;;;;;;;;;;;;;;;;;;20558:42;;20444:164;;;;:::o;5337:201::-;5147:12;:10;:12::i;:::-;5136:23;;:7;:5;:7::i;:::-;:23;;;5128:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;5446:1:::1;5426:22;;:8;:22;;;;5418:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;5502:28;5521:8;5502:18;:28::i;:::-;5337:201:::0;:::o;9655:157::-;9740:4;9779:25;9764:40;;;:11;:40;;;;9757:47;;9655:157;;;:::o;21796:174::-;21853:4;21896:7;21877:15;:13;:15::i;:::-;:26;;:53;;;;;21917:13;;21907:7;:23;21877:53;:85;;;;;21935:11;:20;21947:7;21935:20;;;;;;;;;;;:27;;;;;;;;;;;;21934:28;21877:85;21870:92;;21796:174;;;:::o;4545:98::-;4598:7;4625:10;4618:17;;4545:98;:::o;29953:196::-;30095:2;30068:15;:24;30084:7;30068:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30133:7;30129:2;30113:28;;30122:5;30113:28;;;;;;;;;;;;29953:196;;;:::o;14217:92::-;14273:7;14300:1;14293:8;;14217:92;:::o;24896:2130::-;25011:35;25049:21;25062:7;25049:12;:21::i;:::-;25011:59;;25109:4;25087:26;;:13;:18;;;:26;;;25083:67;;25122:28;;;;;;;;;;;;;;25083:67;25163:22;25205:4;25189:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;25226:36;25243:4;25249:12;:10;:12::i;:::-;25226:16;:36::i;:::-;25189:73;:126;;;;25303:12;:10;:12::i;:::-;25279:36;;:20;25291:7;25279:11;:20::i;:::-;:36;;;25189:126;25163:153;;25334:17;25329:66;;25360:35;;;;;;;;;;;;;;25329:66;25424:1;25410:16;;:2;:16;;;25406:52;;;25435:23;;;;;;;;;;;;;;25406:52;25471:43;25493:4;25499:2;25503:7;25512:1;25471:21;:43::i;:::-;25579:35;25596:1;25600:7;25609:4;25579:8;:35::i;:::-;25940:1;25910:12;:18;25923:4;25910:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25984:1;25956:12;:16;25969:2;25956:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26002:31;26036:11;:20;26048:7;26036:20;;;;;;;;;;;26002:54;;26087:2;26071:8;:13;;;:18;;;;;;;;;;;;;;;;;;26137:15;26104:8;:23;;;:49;;;;;;;;;;;;;;;;;;26405:19;26437:1;26427:7;:11;26405:33;;26453:31;26487:11;:24;26499:11;26487:24;;;;;;;;;;;26453:58;;26555:1;26530:27;;:8;:13;;;;;;;;;;;;:27;;;26526:384;;;26740:13;;26725:11;:28;26721:174;;26794:4;26778:8;:13;;;:20;;;;;;;;;;;;;;;;;;26847:13;:28;;;26821:8;:23;;;:54;;;;;;;;;;;;;;;;;;26721:174;26526:384;25885:1036;;;26957:7;26953:2;26938:27;;26947:4;26938:27;;;;;;;;;;;;26976:42;26997:4;27003:2;27007:7;27016:1;26976:20;:42::i;:::-;25000:2026;;24896:2130;;;:::o;16944:1109::-;17006:21;;:::i;:::-;17040:12;17055:7;17040:22;;17123:4;17104:15;:13;:15::i;:::-;:23;;:47;;;;;17138:13;;17131:4;:20;17104:47;17100:886;;;17172:31;17206:11;:17;17218:4;17206:17;;;;;;;;;;;17172:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17247:9;:16;;;17242:729;;17318:1;17292:28;;:9;:14;;;:28;;;17288:101;;17356:9;17349:16;;;;;;17288:101;17691:261;17698:4;17691:261;;;17731:6;;;;;;;;17776:11;:17;17788:4;17776:17;;;;;;;;;;;17764:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17850:1;17824:28;;:9;:14;;;:28;;;17820:109;;17892:9;17885:16;;;;;;17820:109;17691:261;;;17242:729;17153:833;17100:886;18014:31;;;;;;;;;;;;;;16944:1109;;;;:::o;5547:191::-;5621:16;5640:6;;;;;;;;;;;5621:25;;5666:8;5657:6;;:17;;;;;;;;;;;;;;;;;;5721:8;5690:40;;5711:8;5690:40;;;;;;;;;;;;5610:128;5547:191;:::o;21978:104::-;22047:27;22057:2;22061:8;22047:27;;;;;;;;;;;;:9;:27::i;:::-;21978:104;;:::o;5770:197::-;5830:4;5848:12;5915:7;5903:20;5895:28;;5958:1;5951:4;:8;5944:15;;;5770:197;;;:::o;30641:667::-;30804:4;30841:2;30825:36;;;30862:12;:10;:12::i;:::-;30876:4;30882:7;30891:5;30825:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;30821:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31076:1;31059:6;:13;:18;31055:235;;;31105:40;;;;;;;;;;;;;;31055:235;31248:6;31242:13;31233:6;31229:2;31225:15;31218:38;30821:480;30954:45;;;30944:55;;;:6;:55;;;;30937:62;;;30641:667;;;;;;:::o;34586:114::-;34646:13;34679;34672:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34586:114;:::o;3162:533::-;3218:13;3258:1;3249:5;:10;3245:53;;;3276:10;;;;;;;;;;;;;;;;;;;;;3245:53;3308:12;3323:5;3308:20;;3339:14;3364:78;3379:1;3371:4;:9;3364:78;;3397:8;;;;;:::i;:::-;;;;3428:2;3420:10;;;;;:::i;:::-;;;3364:78;;;3452:19;3484:6;3474:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3452:39;;3502:154;3518:1;3509:5;:10;3502:154;;3546:1;3536:11;;;;;:::i;:::-;;;3613:2;3605:5;:10;;;;:::i;:::-;3592:2;:24;;;;:::i;:::-;3579:39;;3562:6;3569;3562:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3642:2;3633:11;;;;;:::i;:::-;;;3502:154;;;3680:6;3666:21;;;;;3162:533;;;;:::o;15851:137::-;15912:7;15947:12;:19;15960:5;15947:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;15939:41;;15932:48;;15851:137;;;:::o;31956:159::-;;;;;:::o;32774:158::-;;;;;:::o;22445:163::-;22568:32;22574:2;22578:8;22588:5;22595:4;22568:5;:32::i;:::-;22445:163;;;:::o;22867:1775::-;23006:20;23029:13;;23006:36;;23071:1;23057:16;;:2;:16;;;23053:48;;;23082:19;;;;;;;;;;;;;;23053:48;23128:1;23116:8;:13;23112:44;;;23138:18;;;;;;;;;;;;;;23112:44;23169:61;23199:1;23203:2;23207:12;23221:8;23169:21;:61::i;:::-;23542:8;23507:12;:16;23520:2;23507:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23606:8;23566:12;:16;23579:2;23566:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23665:2;23632:11;:25;23644:12;23632:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;23732:15;23682:11;:25;23694:12;23682:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;23765:20;23788:12;23765:35;;23815:11;23844:8;23829:12;:23;23815:37;;23873:4;:23;;;;;23881:15;:2;:13;;;:15::i;:::-;23873:23;23869:641;;;23917:314;23973:12;23969:2;23948:38;;23965:1;23948:38;;;;;;;;;;;;24014:69;24053:1;24057:2;24061:14;;;;;;24077:5;24014:30;:69::i;:::-;24009:174;;24119:40;;;;;;;;;;;;;;24009:174;24226:3;24210:12;:19;;23917:314;;24312:12;24295:13;;:29;24291:43;;24326:8;;;24291:43;23869:641;;;24375:120;24431:14;;;;;;24427:2;24406:40;;24423:1;24406:40;;;;;;;;;;;;24490:3;24474:12;:19;;24375:120;;23869:641;24540:12;24524:13;:28;;;;23482:1082;;24574:60;24603:1;24607:2;24611:12;24625:8;24574:20;:60::i;:::-;22995:1647;22867:1775;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:180;6209:77;6206:1;6199:88;6306:4;6303:1;6296:15;6330:4;6327:1;6320:15;6347:281;6430:27;6452:4;6430:27;:::i;:::-;6422:6;6418:40;6560:6;6548:10;6545:22;6524:18;6512:10;6509:34;6506:62;6503:88;;;6571:18;;:::i;:::-;6503:88;6611:10;6607:2;6600:22;6390:238;6347:281;;:::o;6634:129::-;6668:6;6695:20;;:::i;:::-;6685:30;;6724:33;6752:4;6744:6;6724:33;:::i;:::-;6634:129;;;:::o;6769:308::-;6831:4;6921:18;6913:6;6910:30;6907:56;;;6943:18;;:::i;:::-;6907:56;6981:29;7003:6;6981:29;:::i;:::-;6973:37;;7065:4;7059;7055:15;7047:23;;6769:308;;;:::o;7083:154::-;7167:6;7162:3;7157;7144:30;7229:1;7220:6;7215:3;7211:16;7204:27;7083:154;;;:::o;7243:412::-;7321:5;7346:66;7362:49;7404:6;7362:49;:::i;:::-;7346:66;:::i;:::-;7337:75;;7435:6;7428:5;7421:21;7473:4;7466:5;7462:16;7511:3;7502:6;7497:3;7493:16;7490:25;7487:112;;;7518:79;;:::i;:::-;7487:112;7608:41;7642:6;7637:3;7632;7608:41;:::i;:::-;7327:328;7243:412;;;;;:::o;7675:340::-;7731:5;7780:3;7773:4;7765:6;7761:17;7757:27;7747:122;;7788:79;;:::i;:::-;7747:122;7905:6;7892:20;7930:79;8005:3;7997:6;7990:4;7982:6;7978:17;7930:79;:::i;:::-;7921:88;;7737:278;7675:340;;;;:::o;8021:509::-;8090:6;8139:2;8127:9;8118:7;8114:23;8110:32;8107:119;;;8145:79;;:::i;:::-;8107:119;8293:1;8282:9;8278:17;8265:31;8323:18;8315:6;8312:30;8309:117;;;8345:79;;:::i;:::-;8309:117;8450:63;8505:7;8496:6;8485:9;8481:22;8450:63;:::i;:::-;8440:73;;8236:287;8021:509;;;;:::o;8536:116::-;8606:21;8621:5;8606:21;:::i;:::-;8599:5;8596:32;8586:60;;8642:1;8639;8632:12;8586:60;8536:116;:::o;8658:133::-;8701:5;8739:6;8726:20;8717:29;;8755:30;8779:5;8755:30;:::i;:::-;8658:133;;;;:::o;8797:323::-;8853:6;8902:2;8890:9;8881:7;8877:23;8873:32;8870:119;;;8908:79;;:::i;:::-;8870:119;9028:1;9053:50;9095:7;9086:6;9075:9;9071:22;9053:50;:::i;:::-;9043:60;;8999:114;8797:323;;;;:::o;9126:329::-;9185:6;9234:2;9222:9;9213:7;9209:23;9205:32;9202:119;;;9240:79;;:::i;:::-;9202:119;9360:1;9385:53;9430:7;9421:6;9410:9;9406:22;9385:53;:::i;:::-;9375:63;;9331:117;9126:329;;;;:::o;9461:108::-;9538:24;9556:5;9538:24;:::i;:::-;9533:3;9526:37;9461:108;;:::o;9575:101::-;9611:7;9651:18;9644:5;9640:30;9629:41;;9575:101;;;:::o;9682:105::-;9757:23;9774:5;9757:23;:::i;:::-;9752:3;9745:36;9682:105;;:::o;9793:99::-;9864:21;9879:5;9864:21;:::i;:::-;9859:3;9852:34;9793:99;;:::o;9968:697::-;10127:4;10122:3;10118:14;10214:4;10207:5;10203:16;10197:23;10233:63;10290:4;10285:3;10281:14;10267:12;10233:63;:::i;:::-;10142:164;10398:4;10391:5;10387:16;10381:23;10417:61;10472:4;10467:3;10463:14;10449:12;10417:61;:::i;:::-;10316:172;10572:4;10565:5;10561:16;10555:23;10591:57;10642:4;10637:3;10633:14;10619:12;10591:57;:::i;:::-;10498:160;10096:569;9968:697;;:::o;10671:346::-;10826:4;10864:2;10853:9;10849:18;10841:26;;10877:133;11007:1;10996:9;10992:17;10983:6;10877:133;:::i;:::-;10671:346;;;;:::o;11023:468::-;11088:6;11096;11145:2;11133:9;11124:7;11120:23;11116:32;11113:119;;;11151:79;;:::i;:::-;11113:119;11271:1;11296:53;11341:7;11332:6;11321:9;11317:22;11296:53;:::i;:::-;11286:63;;11242:117;11398:2;11424:50;11466:7;11457:6;11446:9;11442:22;11424:50;:::i;:::-;11414:60;;11369:115;11023:468;;;;;:::o;11497:307::-;11558:4;11648:18;11640:6;11637:30;11634:56;;;11670:18;;:::i;:::-;11634:56;11708:29;11730:6;11708:29;:::i;:::-;11700:37;;11792:4;11786;11782:15;11774:23;;11497:307;;;:::o;11810:410::-;11887:5;11912:65;11928:48;11969:6;11928:48;:::i;:::-;11912:65;:::i;:::-;11903:74;;12000:6;11993:5;11986:21;12038:4;12031:5;12027:16;12076:3;12067:6;12062:3;12058:16;12055:25;12052:112;;;12083:79;;:::i;:::-;12052:112;12173:41;12207:6;12202:3;12197;12173:41;:::i;:::-;11893:327;11810:410;;;;;:::o;12239:338::-;12294:5;12343:3;12336:4;12328:6;12324:17;12320:27;12310:122;;12351:79;;:::i;:::-;12310:122;12468:6;12455:20;12493:78;12567:3;12559:6;12552:4;12544:6;12540:17;12493:78;:::i;:::-;12484:87;;12300:277;12239:338;;;;:::o;12583:943::-;12678:6;12686;12694;12702;12751:3;12739:9;12730:7;12726:23;12722:33;12719:120;;;12758:79;;:::i;:::-;12719:120;12878:1;12903:53;12948:7;12939:6;12928:9;12924:22;12903:53;:::i;:::-;12893:63;;12849:117;13005:2;13031:53;13076:7;13067:6;13056:9;13052:22;13031:53;:::i;:::-;13021:63;;12976:118;13133:2;13159:53;13204:7;13195:6;13184:9;13180:22;13159:53;:::i;:::-;13149:63;;13104:118;13289:2;13278:9;13274:18;13261:32;13320:18;13312:6;13309:30;13306:117;;;13342:79;;:::i;:::-;13306:117;13447:62;13501:7;13492:6;13481:9;13477:22;13447:62;:::i;:::-;13437:72;;13232:287;12583:943;;;;;;;:::o;13532:474::-;13600:6;13608;13657:2;13645:9;13636:7;13632:23;13628:32;13625:119;;;13663:79;;:::i;:::-;13625:119;13783:1;13808:53;13853:7;13844:6;13833:9;13829:22;13808:53;:::i;:::-;13798:63;;13754:117;13910:2;13936:53;13981:7;13972:6;13961:9;13957:22;13936:53;:::i;:::-;13926:63;;13881:118;13532:474;;;;;:::o;14012:180::-;14060:77;14057:1;14050:88;14157:4;14154:1;14147:15;14181:4;14178:1;14171:15;14198:320;14242:6;14279:1;14273:4;14269:12;14259:22;;14326:1;14320:4;14316:12;14347:18;14337:81;;14403:4;14395:6;14391:17;14381:27;;14337:81;14465:2;14457:6;14454:14;14434:18;14431:38;14428:84;;;14484:18;;:::i;:::-;14428:84;14249:269;14198:320;;;:::o;14524:182::-;14664:34;14660:1;14652:6;14648:14;14641:58;14524:182;:::o;14712:366::-;14854:3;14875:67;14939:2;14934:3;14875:67;:::i;:::-;14868:74;;14951:93;15040:3;14951:93;:::i;:::-;15069:2;15064:3;15060:12;15053:19;;14712:366;;;:::o;15084:419::-;15250:4;15288:2;15277:9;15273:18;15265:26;;15337:9;15331:4;15327:20;15323:1;15312:9;15308:17;15301:47;15365:131;15491:4;15365:131;:::i;:::-;15357:139;;15084:419;;;:::o;15509:181::-;15649:33;15645:1;15637:6;15633:14;15626:57;15509:181;:::o;15696:366::-;15838:3;15859:67;15923:2;15918:3;15859:67;:::i;:::-;15852:74;;15935:93;16024:3;15935:93;:::i;:::-;16053:2;16048:3;16044:12;16037:19;;15696:366;;;:::o;16068:419::-;16234:4;16272:2;16261:9;16257:18;16249:26;;16321:9;16315:4;16311:20;16307:1;16296:9;16292:17;16285:47;16349:131;16475:4;16349:131;:::i;:::-;16341:139;;16068:419;;;:::o;16493:147::-;16594:11;16631:3;16616:18;;16493:147;;;;:::o;16646:114::-;;:::o;16766:398::-;16925:3;16946:83;17027:1;17022:3;16946:83;:::i;:::-;16939:90;;17038:93;17127:3;17038:93;:::i;:::-;17156:1;17151:3;17147:11;17140:18;;16766:398;;;:::o;17170:379::-;17354:3;17376:147;17519:3;17376:147;:::i;:::-;17369:154;;17540:3;17533:10;;17170:379;;;:::o;17555:166::-;17695:18;17691:1;17683:6;17679:14;17672:42;17555:166;:::o;17727:366::-;17869:3;17890:67;17954:2;17949:3;17890:67;:::i;:::-;17883:74;;17966:93;18055:3;17966:93;:::i;:::-;18084:2;18079:3;18075:12;18068:19;;17727:366;;;:::o;18099:419::-;18265:4;18303:2;18292:9;18288:18;18280:26;;18352:9;18346:4;18342:20;18338:1;18327:9;18323:17;18316:47;18380:131;18506:4;18380:131;:::i;:::-;18372:139;;18099:419;;;:::o;18524:180::-;18664:32;18660:1;18652:6;18648:14;18641:56;18524:180;:::o;18710:366::-;18852:3;18873:67;18937:2;18932:3;18873:67;:::i;:::-;18866:74;;18949:93;19038:3;18949:93;:::i;:::-;19067:2;19062:3;19058:12;19051:19;;18710:366;;;:::o;19082:419::-;19248:4;19286:2;19275:9;19271:18;19263:26;;19335:9;19329:4;19325:20;19321:1;19310:9;19306:17;19299:47;19363:131;19489:4;19363:131;:::i;:::-;19355:139;;19082:419;;;:::o;19507:168::-;19647:20;19643:1;19635:6;19631:14;19624:44;19507:168;:::o;19681:366::-;19823:3;19844:67;19908:2;19903:3;19844:67;:::i;:::-;19837:74;;19920:93;20009:3;19920:93;:::i;:::-;20038:2;20033:3;20029:12;20022:19;;19681:366;;;:::o;20053:419::-;20219:4;20257:2;20246:9;20242:18;20234:26;;20306:9;20300:4;20296:20;20292:1;20281:9;20277:17;20270:47;20334:131;20460:4;20334:131;:::i;:::-;20326:139;;20053:419;;;:::o;20478:180::-;20526:77;20523:1;20516:88;20623:4;20620:1;20613:15;20647:4;20644:1;20637:15;20664:305;20704:3;20723:20;20741:1;20723:20;:::i;:::-;20718:25;;20757:20;20775:1;20757:20;:::i;:::-;20752:25;;20911:1;20843:66;20839:74;20836:1;20833:81;20830:107;;;20917:18;;:::i;:::-;20830:107;20961:1;20958;20954:9;20947:16;;20664:305;;;;:::o;20975:168::-;21115:20;21111:1;21103:6;21099:14;21092:44;20975:168;:::o;21149:366::-;21291:3;21312:67;21376:2;21371:3;21312:67;:::i;:::-;21305:74;;21388:93;21477:3;21388:93;:::i;:::-;21506:2;21501:3;21497:12;21490:19;;21149:366;;;:::o;21521:419::-;21687:4;21725:2;21714:9;21710:18;21702:26;;21774:9;21768:4;21764:20;21760:1;21749:9;21745:17;21738:47;21802:131;21928:4;21802:131;:::i;:::-;21794:139;;21521:419;;;:::o;21946:179::-;22086:31;22082:1;22074:6;22070:14;22063:55;21946:179;:::o;22131:366::-;22273:3;22294:67;22358:2;22353:3;22294:67;:::i;:::-;22287:74;;22370:93;22459:3;22370:93;:::i;:::-;22488:2;22483:3;22479:12;22472:19;;22131:366;;;:::o;22503:419::-;22669:4;22707:2;22696:9;22692:18;22684:26;;22756:9;22750:4;22746:20;22742:1;22731:9;22727:17;22720:47;22784:131;22910:4;22784:131;:::i;:::-;22776:139;;22503:419;;;:::o;22928:348::-;22968:7;22991:20;23009:1;22991:20;:::i;:::-;22986:25;;23025:20;23043:1;23025:20;:::i;:::-;23020:25;;23213:1;23145:66;23141:74;23138:1;23135:81;23130:1;23123:9;23116:17;23112:105;23109:131;;;23220:18;;:::i;:::-;23109:131;23268:1;23265;23261:9;23250:20;;22928:348;;;;:::o;23282:166::-;23422:18;23418:1;23410:6;23406:14;23399:42;23282:166;:::o;23454:366::-;23596:3;23617:67;23681:2;23676:3;23617:67;:::i;:::-;23610:74;;23693:93;23782:3;23693:93;:::i;:::-;23811:2;23806:3;23802:12;23795:19;;23454:366;;;:::o;23826:419::-;23992:4;24030:2;24019:9;24015:18;24007:26;;24079:9;24073:4;24069:20;24065:1;24054:9;24050:17;24043:47;24107:131;24233:4;24107:131;:::i;:::-;24099:139;;23826:419;;;:::o;24251:178::-;24391:30;24387:1;24379:6;24375:14;24368:54;24251:178;:::o;24435:366::-;24577:3;24598:67;24662:2;24657:3;24598:67;:::i;:::-;24591:74;;24674:93;24763:3;24674:93;:::i;:::-;24792:2;24787:3;24783:12;24776:19;;24435:366;;;:::o;24807:419::-;24973:4;25011:2;25000:9;24996:18;24988:26;;25060:9;25054:4;25050:20;25046:1;25035:9;25031:17;25024:47;25088:131;25214:4;25088:131;:::i;:::-;25080:139;;24807:419;;;:::o;25232:234::-;25372:34;25368:1;25360:6;25356:14;25349:58;25441:17;25436:2;25428:6;25424:15;25417:42;25232:234;:::o;25472:366::-;25614:3;25635:67;25699:2;25694:3;25635:67;:::i;:::-;25628:74;;25711:93;25800:3;25711:93;:::i;:::-;25829:2;25824:3;25820:12;25813:19;;25472:366;;;:::o;25844:419::-;26010:4;26048:2;26037:9;26033:18;26025:26;;26097:9;26091:4;26087:20;26083:1;26072:9;26068:17;26061:47;26125:131;26251:4;26125:131;:::i;:::-;26117:139;;25844:419;;;:::o;26269:148::-;26371:11;26408:3;26393:18;;26269:148;;;;:::o;26423:377::-;26529:3;26557:39;26590:5;26557:39;:::i;:::-;26612:89;26694:6;26689:3;26612:89;:::i;:::-;26605:96;;26710:52;26755:6;26750:3;26743:4;26736:5;26732:16;26710:52;:::i;:::-;26787:6;26782:3;26778:16;26771:23;;26533:267;26423:377;;;;:::o;26806:151::-;26946:3;26942:1;26934:6;26930:14;26923:27;26806:151;:::o;26963:400::-;27123:3;27144:84;27226:1;27221:3;27144:84;:::i;:::-;27137:91;;27237:93;27326:3;27237:93;:::i;:::-;27355:1;27350:3;27346:11;27339:18;;26963:400;;;:::o;27369:155::-;27509:7;27505:1;27497:6;27493:14;27486:31;27369:155;:::o;27530:400::-;27690:3;27711:84;27793:1;27788:3;27711:84;:::i;:::-;27704:91;;27804:93;27893:3;27804:93;:::i;:::-;27922:1;27917:3;27913:11;27906:18;;27530:400;;;:::o;27936:967::-;28318:3;28340:95;28431:3;28422:6;28340:95;:::i;:::-;28333:102;;28452:148;28596:3;28452:148;:::i;:::-;28445:155;;28617:95;28708:3;28699:6;28617:95;:::i;:::-;28610:102;;28729:148;28873:3;28729:148;:::i;:::-;28722:155;;28894:3;28887:10;;27936:967;;;;;:::o;28909:225::-;29049:34;29045:1;29037:6;29033:14;29026:58;29118:8;29113:2;29105:6;29101:15;29094:33;28909:225;:::o;29140:366::-;29282:3;29303:67;29367:2;29362:3;29303:67;:::i;:::-;29296:74;;29379:93;29468:3;29379:93;:::i;:::-;29497:2;29492:3;29488:12;29481:19;;29140:366;;;:::o;29512:419::-;29678:4;29716:2;29705:9;29701:18;29693:26;;29765:9;29759:4;29755:20;29751:1;29740:9;29736:17;29729:47;29793:131;29919:4;29793:131;:::i;:::-;29785:139;;29512:419;;;:::o;29937:98::-;29988:6;30022:5;30016:12;30006:22;;29937:98;;;:::o;30041:168::-;30124:11;30158:6;30153:3;30146:19;30198:4;30193:3;30189:14;30174:29;;30041:168;;;;:::o;30215:360::-;30301:3;30329:38;30361:5;30329:38;:::i;:::-;30383:70;30446:6;30441:3;30383:70;:::i;:::-;30376:77;;30462:52;30507:6;30502:3;30495:4;30488:5;30484:16;30462:52;:::i;:::-;30539:29;30561:6;30539:29;:::i;:::-;30534:3;30530:39;30523:46;;30305:270;30215:360;;;;:::o;30581:640::-;30776:4;30814:3;30803:9;30799:19;30791:27;;30828:71;30896:1;30885:9;30881:17;30872:6;30828:71;:::i;:::-;30909:72;30977:2;30966:9;30962:18;30953:6;30909:72;:::i;:::-;30991;31059:2;31048:9;31044:18;31035:6;30991:72;:::i;:::-;31110:9;31104:4;31100:20;31095:2;31084:9;31080:18;31073:48;31138:76;31209:4;31200:6;31138:76;:::i;:::-;31130:84;;30581:640;;;;;;;:::o;31227:141::-;31283:5;31314:6;31308:13;31299:22;;31330:32;31356:5;31330:32;:::i;:::-;31227:141;;;;:::o;31374:349::-;31443:6;31492:2;31480:9;31471:7;31467:23;31463:32;31460:119;;;31498:79;;:::i;:::-;31460:119;31618:1;31643:63;31698:7;31689:6;31678:9;31674:22;31643:63;:::i;:::-;31633:73;;31589:127;31374:349;;;;:::o;31729:233::-;31768:3;31791:24;31809:5;31791:24;:::i;:::-;31782:33;;31837:66;31830:5;31827:77;31824:103;;;31907:18;;:::i;:::-;31824:103;31954:1;31947:5;31943:13;31936:20;;31729:233;;;:::o;31968:180::-;32016:77;32013:1;32006:88;32113:4;32110:1;32103:15;32137:4;32134:1;32127:15;32154:185;32194:1;32211:20;32229:1;32211:20;:::i;:::-;32206:25;;32245:20;32263:1;32245:20;:::i;:::-;32240:25;;32284:1;32274:35;;32289:18;;:::i;:::-;32274:35;32331:1;32328;32324:9;32319:14;;32154:185;;;;:::o;32345:191::-;32385:4;32405:20;32423:1;32405:20;:::i;:::-;32400:25;;32439:20;32457:1;32439:20;:::i;:::-;32434:25;;32478:1;32475;32472:8;32469:34;;;32483:18;;:::i;:::-;32469:34;32528:1;32525;32521:9;32513:17;;32345:191;;;;:::o;32542:176::-;32574:1;32591:20;32609:1;32591:20;:::i;:::-;32586:25;;32625:20;32643:1;32625:20;:::i;:::-;32620:25;;32664:1;32654:35;;32669:18;;:::i;:::-;32654:35;32710:1;32707;32703:9;32698:14;;32542:176;;;;:::o;32724:180::-;32772:77;32769:1;32762:88;32869:4;32866:1;32859:15;32893:4;32890:1;32883:15

Swarm Source

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