ETH Price: $3,514.83 (+0.44%)
Gas: 6 Gwei

Token

Invisibears (IBS)
 

Overview

Max Total Supply

5,000 IBS

Holders

1,055

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
iwatchhentai.eth
Balance
5 IBS
0x6AF71b3aD135d102e08139B15D507303CBFe6EcF
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:
Invisibears

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license
File 1 of 12 : InvisBears.sol
// SPDX-License-Identifier: GPL-3.0

  pragma solidity ^0.8.7;

  import "@openzeppelin/contracts/access/Ownable.sol";
  import "erc721a/contracts/ERC721A.sol";                 


  contract Invisibears is Ownable, ERC721A {
      using Strings for uint256;

      string public baseExtension = ".json";
      uint256 public FREE_MINT_SUPPLY = 500;
      uint256 public MAX_MINT_PER_TRANSACTION = 30; 
      uint256 public MAX_FREEMINT_PER_USER = 5; 
      uint256 public totalMaxSupply = 5000; 
      uint256 public mintPrice = 0.009 ether;
      uint64 public startTimestamp;
      bool public mintActive = true;
      string private _baseTokenURI;

    constructor() ERC721A("Invisibears", "IBS") {}

    function mint(uint256 quantity) external payable {
        require(startTimestamp !=0 &&  block.timestamp >= startTimestamp,"Mint is not active yet");
        require(mintActive == true,"Mint have been Paused");
        require(quantity > 0, "Mint quantity should be over 0");
        require(quantity <= MAX_MINT_PER_TRANSACTION, "Max mint per transaction exceeded");
        require(totalSupply() + quantity <= totalMaxSupply, "Reached max supply");
        require(msg.value >= mintPrice * quantity, "Insufficient Funds");
      // _safeMint's second argument now takes in a quantity, not a tokenId.
      _safeMint(msg.sender, quantity);
    }

    function freeMint(uint256 quantity) external payable {
        require(startTimestamp !=0 &&  block.timestamp >= startTimestamp,"Mint is not active yet");
        require(mintActive == true,"Mint have been Paused");
        require(_numberMinted(msg.sender) < MAX_FREEMINT_PER_USER,"you are unable to freemint anymore");
        require(quantity > 0, "Mint quantity should be over 0");
        require(quantity <= MAX_FREEMINT_PER_USER, "Max mint per transaction exceeded");
        require(totalSupply() + quantity <= FREE_MINT_SUPPLY, "reached max free mint supply");
      // _safeMint's second argument now takes in a quantity, not a tokenId.
      _safeMint(msg.sender, quantity);
    }


    function setMaxSupply(uint256 _updatedQty) public onlyOwner{
      require(_updatedQty >= totalSupply());
      totalMaxSupply = _updatedQty;
    }
    function setMaxFreeSupply(uint256 _updateQty) public onlyOwner{
        FREE_MINT_SUPPLY = _updateQty;
    }

    function _baseURI() internal view virtual override returns (string memory) {
      return _baseTokenURI;
    }

    function tokenURI(uint256 tokenId)
      public
      view
      virtual
      override
      returns (string memory)
    {
      require(_exists(tokenId),"ERC721Metadata: URI query for nonexistent token");
      string memory currentBaseURI = _baseURI();
      return bytes(currentBaseURI).length > 0
          ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
          : "";
    }
    
    function setBaseURI(string calldata baseURI) public onlyOwner {
      _baseTokenURI = baseURI;
    }

    function withdraw() public onlyOwner {
      payable(msg.sender).transfer(payable(address(this)).balance);   
    }

    function pauseMint() public onlyOwner {
      mintActive = false; 
    }

    function resumeMint() public onlyOwner {
      mintActive = true; 
    }

    function setPublicMintStartTime(uint32 _time) external onlyOwner {
      startTimestamp = _time;
    }

    function devMint( address devAddress, uint256 quantity) payable public onlyOwner {
          _safeMint(devAddress, quantity);
    }

    function numberMinted () external view returns (uint256){
      return _numberMinted(msg.sender);
    }

  }

File 2 of 12 : ERC721A.sol
// SPDX-License-Identifier: MIT
// ERC721A Contracts v3.3.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;

import './IERC721A.sol';
import '@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol';
import '@openzeppelin/contracts/utils/Address.sol';
import '@openzeppelin/contracts/utils/Context.sol';
import '@openzeppelin/contracts/utils/Strings.sol';
import '@openzeppelin/contracts/utils/introspection/ERC165.sol';

/**
 * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
 * the Metadata extension. Built to optimize for lower gas during batch mints.
 *
 * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..).
 *
 * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply.
 *
 * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256).
 */
contract ERC721A is Context, ERC165, IERC721A {
    using Address for address;
    using Strings for uint256;

    // 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 0;
    }

    /**
     * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens.
     */
    function totalSupply() public view override 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) if (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) if(!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()) if(!_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;
    }

    /**
     * @dev Equivalent to `_safeMint(to, quantity, '')`.
     */
    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 {
        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 (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 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) 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;

            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 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 {}
}

File 3 of 12 : Ownable.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;

import "../utils/Context.sol";

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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

File 4 of 12 : ERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;

import "./IERC165.sol";

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

File 5 of 12 : Strings.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Strings.sol)

pragma solidity ^0.8.0;

/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

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

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    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);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

File 6 of 12 : Context.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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

File 7 of 12 : Address.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    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");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    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");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    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);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    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);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

File 8 of 12 : IERC721Receiver.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)

pragma solidity ^0.8.0;

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

File 9 of 12 : IERC721A.sol
// SPDX-License-Identifier: MIT
// ERC721A Contracts v3.3.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;

import '@openzeppelin/contracts/token/ERC721/IERC721.sol';
import '@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol';

/**
 * @dev Interface of an ERC721A compliant contract.
 */
interface IERC721A is IERC721, IERC721Metadata {
    /**
     * The caller must own the token or be an approved operator.
     */
    error ApprovalCallerNotOwnerNorApproved();

    /**
     * The token does not exist.
     */
    error ApprovalQueryForNonexistentToken();

    /**
     * The caller cannot approve to their own address.
     */
    error ApproveToCaller();

    /**
     * The caller cannot approve to the current owner.
     */
    error ApprovalToCurrentOwner();

    /**
     * Cannot query the balance for the zero address.
     */
    error BalanceQueryForZeroAddress();

    /**
     * Cannot mint to the zero address.
     */
    error MintToZeroAddress();

    /**
     * The quantity of tokens minted must be more than zero.
     */
    error MintZeroQuantity();

    /**
     * The token does not exist.
     */
    error OwnerQueryForNonexistentToken();

    /**
     * The caller must own the token or be an approved operator.
     */
    error TransferCallerNotOwnerNorApproved();

    /**
     * The token must be owned by `from`.
     */
    error TransferFromIncorrectOwner();

    /**
     * Cannot safely transfer to a contract that does not implement the ERC721Receiver interface.
     */
    error TransferToNonERC721ReceiverImplementer();

    /**
     * Cannot transfer to the zero address.
     */
    error TransferToZeroAddress();

    /**
     * The token does not exist.
     */
    error URIQueryForNonexistentToken();

    // 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;
    }

    /**
     * @dev Returns the total amount of tokens stored by the contract.
     * 
     * Burned tokens are calculated here, use `_totalMinted()` if you want to count just minted tokens.
     */
    function totalSupply() external view returns (uint256);
}

File 10 of 12 : IERC721Metadata.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol)

pragma solidity ^0.8.0;

import "../IERC721.sol";

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

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

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

File 11 of 12 : IERC721.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol)

pragma solidity ^0.8.0;

import "../../utils/introspection/IERC165.sol";

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

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

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

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

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

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

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

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

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

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

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

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

File 12 of 12 : IERC165.sol
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

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

Settings
{
  "optimizer": {
    "enabled": false,
    "runs": 200
  },
  "outputSelection": {
    "*": {
      "*": [
        "evm.bytecode",
        "evm.deployedBytecode",
        "abi"
      ]
    }
  }
}

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"},{"inputs":[],"name":"URIQueryForNonexistentToken","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":"FREE_MINT_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_FREEMINT_PER_USER","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_PER_TRANSACTION","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":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"devAddress","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"freeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":[],"name":"pauseMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"resumeMint","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":"uint256","name":"_updateQty","type":"uint256"}],"name":"setMaxFreeSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_updatedQty","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint32","name":"_time","type":"uint32"}],"name":"setPublicMintStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startTimestamp","outputs":[{"internalType":"uint64","name":"","type":"uint64"}],"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":"totalMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600990805190602001906200005192919062000249565b506101f4600a55601e600b556005600c55611388600d55661ff973cafa8000600e556001600f60086101000a81548160ff0219169083151502179055503480156200009b57600080fd5b506040518060400160405280600b81526020017f496e7669736962656172730000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4942530000000000000000000000000000000000000000000000000000000000815250620001286200011c6200017860201b60201c565b6200018060201b60201c565b81600390805190602001906200014092919062000249565b5080600490805190602001906200015992919062000249565b506200016a6200024460201b60201c565b60018190555050506200035e565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600090565b8280546200025790620002f9565b90600052602060002090601f0160209004810192826200027b5760008555620002c7565b82601f106200029657805160ff1916838001178555620002c7565b82800160010185558215620002c7579182015b82811115620002c6578251825591602001919060010190620002a9565b5b509050620002d69190620002da565b5090565b5b80821115620002f5576000816000905550600101620002db565b5090565b600060028204905060018216806200031257607f821691505b602082108114156200032957620003286200032f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b613ec0806200036e6000396000f3fe60806040526004361061020f5760003560e01c806363eb8bb611610118578063a0712d68116100a0578063c87b56dd1161006f578063c87b56dd14610716578063cd85cdb514610753578063e6fd48bc1461076a578063e985e9c514610795578063f2fde38b146107d25761020f565b8063a0712d681461067d578063a22cb46514610699578063b88d4fde146106c2578063c6682862146106eb5761020f565b8063715018a6116100e7578063715018a6146105c95780637c928fe9146105e05780638da5cb5b146105fc57806395d89b4114610627578063a0617ad0146106525761020f565b806363eb8bb61461050d5780636817c76c146105385780636f8b44b01461056357806370a082311461058c5761020f565b806325fd90f31161019b57806349a772b51161016a57806349a772b51461043757806355f804b3146104625780635b28fd911461048b578063627804af146104b45780636352211e146104d05761020f565b806325fd90f3146103a357806328a4d1a7146103ce5780633ccfd60b146103f757806342842e0e1461040e5761020f565b8063139c9476116101e2578063139c9476146102e257806318160ddd1461030d5780631fe7b6241461033857806323b872dd1461034f57806324ef901e146103785761020f565b806301ffc9a71461021457806306fdde0314610251578063081812fc1461027c578063095ea7b3146102b9575b600080fd5b34801561022057600080fd5b5061023b600480360381019061023691906130dd565b6107fb565b6040516102489190613555565b60405180910390f35b34801561025d57600080fd5b506102666108dd565b6040516102739190613570565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190613184565b61096f565b6040516102b091906134ee565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db919061309d565b6109eb565b005b3480156102ee57600080fd5b506102f7610af0565b60405161030491906136f2565b60405180910390f35b34801561031957600080fd5b50610322610af6565b60405161032f91906136f2565b60405180910390f35b34801561034457600080fd5b5061034d610b0d565b005b34801561035b57600080fd5b5061037660048036038101906103719190612f87565b610ba6565b005b34801561038457600080fd5b5061038d610bb6565b60405161039a91906136f2565b60405180910390f35b3480156103af57600080fd5b506103b8610bbc565b6040516103c59190613555565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f091906131b1565b610bcf565b005b34801561040357600080fd5b5061040c610c7d565b005b34801561041a57600080fd5b5061043560048036038101906104309190612f87565b610d59565b005b34801561044357600080fd5b5061044c610d79565b60405161045991906136f2565b60405180910390f35b34801561046e57600080fd5b5061048960048036038101906104849190613137565b610d89565b005b34801561049757600080fd5b506104b260048036038101906104ad9190613184565b610e1b565b005b6104ce60048036038101906104c9919061309d565b610ea1565b005b3480156104dc57600080fd5b506104f760048036038101906104f29190613184565b610f2b565b60405161050491906134ee565b60405180910390f35b34801561051957600080fd5b50610522610f41565b60405161052f91906136f2565b60405180910390f35b34801561054457600080fd5b5061054d610f47565b60405161055a91906136f2565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190613184565b610f4d565b005b34801561059857600080fd5b506105b360048036038101906105ae9190612f1a565b610fe7565b6040516105c091906136f2565b60405180910390f35b3480156105d557600080fd5b506105de6110b7565b005b6105fa60048036038101906105f59190613184565b61113f565b005b34801561060857600080fd5b5061061161135d565b60405161061e91906134ee565b60405180910390f35b34801561063357600080fd5b5061063c611386565b6040516106499190613570565b60405180910390f35b34801561065e57600080fd5b50610667611418565b60405161067491906136f2565b60405180910390f35b61069760048036038101906106929190613184565b61141e565b005b3480156106a557600080fd5b506106c060048036038101906106bb919061305d565b611640565b005b3480156106ce57600080fd5b506106e960048036038101906106e49190612fda565b6117b8565b005b3480156106f757600080fd5b50610700611830565b60405161070d9190613570565b60405180910390f35b34801561072257600080fd5b5061073d60048036038101906107389190613184565b6118be565b60405161074a9190613570565b60405180910390f35b34801561075f57600080fd5b50610768611968565b005b34801561077657600080fd5b5061077f611a01565b60405161078c919061370d565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b79190612f47565b611a1b565b6040516107c99190613555565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f49190612f1a565b611aaf565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108c657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108d657506108d582611ba7565b5b9050919050565b6060600380546108ec906139c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610918906139c5565b80156109655780601f1061093a57610100808354040283529160200191610965565b820191906000526020600020905b81548152906001019060200180831161094857829003601f168201915b5050505050905090565b600061097a82611c11565b6109b0576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109f682610f2b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a5e576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a7d611c5f565b73ffffffffffffffffffffffffffffffffffffffff1614610ae057610aa981610aa4611c5f565b611a1b565b610adf576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610aeb838383611c67565b505050565b600c5481565b6000610b00611d19565b6002546001540303905090565b610b15611c5f565b73ffffffffffffffffffffffffffffffffffffffff16610b3361135d565b73ffffffffffffffffffffffffffffffffffffffff1614610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8090613692565b60405180910390fd5b6001600f60086101000a81548160ff021916908315150217905550565b610bb1838383611d1e565b505050565b600b5481565b600f60089054906101000a900460ff1681565b610bd7611c5f565b73ffffffffffffffffffffffffffffffffffffffff16610bf561135d565b73ffffffffffffffffffffffffffffffffffffffff1614610c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4290613692565b60405180910390fd5b8063ffffffff16600f60006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b610c85611c5f565b73ffffffffffffffffffffffffffffffffffffffff16610ca361135d565b73ffffffffffffffffffffffffffffffffffffffff1614610cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf090613692565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015610d56573d6000803e3d6000fd5b50565b610d74838383604051806020016040528060008152506117b8565b505050565b6000610d84336121d4565b905090565b610d91611c5f565b73ffffffffffffffffffffffffffffffffffffffff16610daf61135d565b73ffffffffffffffffffffffffffffffffffffffff1614610e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfc90613692565b60405180910390fd5b818160109190610e16929190612cf0565b505050565b610e23611c5f565b73ffffffffffffffffffffffffffffffffffffffff16610e4161135d565b73ffffffffffffffffffffffffffffffffffffffff1614610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e90613692565b60405180910390fd5b80600a8190555050565b610ea9611c5f565b73ffffffffffffffffffffffffffffffffffffffff16610ec761135d565b73ffffffffffffffffffffffffffffffffffffffff1614610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1490613692565b60405180910390fd5b610f27828261223e565b5050565b6000610f368261225c565b600001519050919050565b600a5481565b600e5481565b610f55611c5f565b73ffffffffffffffffffffffffffffffffffffffff16610f7361135d565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc090613692565b60405180910390fd5b610fd1610af6565b811015610fdd57600080fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561104f576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6110bf611c5f565b73ffffffffffffffffffffffffffffffffffffffff166110dd61135d565b73ffffffffffffffffffffffffffffffffffffffff1614611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a90613692565b60405180910390fd5b61113d60006124e7565b565b6000600f60009054906101000a900467ffffffffffffffff1667ffffffffffffffff16141580156111905750600f60009054906101000a900467ffffffffffffffff1667ffffffffffffffff164210155b6111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c6906136d2565b60405180910390fd5b60011515600f60089054906101000a900460ff16151514611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c90613672565b60405180910390fd5b600c54611231336121d4565b10611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126890613592565b60405180910390fd5b600081116112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90613612565b60405180910390fd5b600c548111156112f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f0906135b2565b60405180910390fd5b600a5481611305610af6565b61130f91906137d6565b1115611350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134790613652565b60405180910390fd5b61135a338261223e565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611395906139c5565b80601f01602080910402602001604051908101604052809291908181526020018280546113c1906139c5565b801561140e5780601f106113e35761010080835404028352916020019161140e565b820191906000526020600020905b8154815290600101906020018083116113f157829003601f168201915b5050505050905090565b600d5481565b6000600f60009054906101000a900467ffffffffffffffff1667ffffffffffffffff161415801561146f5750600f60009054906101000a900467ffffffffffffffff1667ffffffffffffffff164210155b6114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a5906136d2565b60405180910390fd5b60011515600f60089054906101000a900460ff16151514611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb90613672565b60405180910390fd5b60008111611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153e90613612565b60405180910390fd5b600b5481111561158c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611583906135b2565b60405180910390fd5b600d5481611598610af6565b6115a291906137d6565b11156115e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115da90613632565b60405180910390fd5b80600e546115f1919061385d565b341015611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162a906135f2565b60405180910390fd5b61163d338261223e565b50565b611648611c5f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116ad576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600860006116ba611c5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611767611c5f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117ac9190613555565b60405180910390a35050565b6117c3848484611d1e565b6117e28373ffffffffffffffffffffffffffffffffffffffff166125ab565b1561182a576117f3848484846125ce565b611829576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6009805461183d906139c5565b80601f0160208091040260200160405190810160405280929190818152602001828054611869906139c5565b80156118b65780601f1061188b576101008083540402835291602001916118b6565b820191906000526020600020905b81548152906001019060200180831161189957829003601f168201915b505050505081565b60606118c982611c11565b611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff906136b2565b60405180910390fd5b600061191261272e565b905060008151116119325760405180602001604052806000815250611960565b8061193c846127c0565b6009604051602001611950939291906134bd565b6040516020818303038152906040525b915050919050565b611970611c5f565b73ffffffffffffffffffffffffffffffffffffffff1661198e61135d565b73ffffffffffffffffffffffffffffffffffffffff16146119e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119db90613692565b60405180910390fd5b6000600f60086101000a81548160ff021916908315150217905550565b600f60009054906101000a900467ffffffffffffffff1681565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ab7611c5f565b73ffffffffffffffffffffffffffffffffffffffff16611ad561135d565b73ffffffffffffffffffffffffffffffffffffffff1614611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2290613692565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b92906135d2565b60405180910390fd5b611ba4816124e7565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611c1c611d19565b11158015611c2b575060015482105b8015611c58575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611d298261225c565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611d94576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611db5611c5f565b73ffffffffffffffffffffffffffffffffffffffff161480611de45750611de385611dde611c5f565b611a1b565b5b80611e295750611df2611c5f565b73ffffffffffffffffffffffffffffffffffffffff16611e118461096f565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611e62576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ec9576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ed68585856001612921565b611ee260008487611c67565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561216257600154821461216157878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121cd8585856001612927565b5050505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61225882826040518060200160405280600081525061292d565b5050565b612264612d76565b600082905080612272611d19565b116124b0576001548110156124af576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516124ad57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146123915780925050506124e2565b5b6001156124ac57818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146124a75780925050506124e2565b612392565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125f4611c5f565b8786866040518563ffffffff1660e01b81526004016126169493929190613509565b602060405180830381600087803b15801561263057600080fd5b505af192505050801561266157506040513d601f19601f8201168201806040525081019061265e919061310a565b60015b6126db573d8060008114612691576040519150601f19603f3d011682016040523d82523d6000602084013e612696565b606091505b506000815114156126d3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606010805461273d906139c5565b80601f0160208091040260200160405190810160405280929190818152602001828054612769906139c5565b80156127b65780601f1061278b576101008083540402835291602001916127b6565b820191906000526020600020905b81548152906001019060200180831161279957829003601f168201915b5050505050905090565b60606000821415612808576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061291c565b600082905060005b6000821461283a57808061282390613a28565b915050600a82612833919061382c565b9150612810565b60008167ffffffffffffffff81111561285657612855613b5e565b5b6040519080825280601f01601f1916602001820160405280156128885781602001600182028036833780820191505090505b5090505b60008514612915576001826128a191906138b7565b9150600a856128b09190613a71565b60306128bc91906137d6565b60f81b8183815181106128d2576128d1613b2f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561290e919061382c565b945061288c565b8093505050505b919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561299b576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314156129d6576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129e36000858386612921565b82600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008482019050612ba48673ffffffffffffffffffffffffffffffffffffffff166125ab565b15612c69575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c1960008784806001019550876125ce565b612c4f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210612baa578260015414612c6457600080fd5b612cd4565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612c6a575b816001819055505050612cea6000858386612927565b50505050565b828054612cfc906139c5565b90600052602060002090601f016020900481019282612d1e5760008555612d65565b82601f10612d3757803560ff1916838001178555612d65565b82800160010185558215612d65579182015b82811115612d64578235825591602001919060010190612d49565b5b509050612d729190612db9565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612dd2576000816000905550600101612dba565b5090565b6000612de9612de48461374d565b613728565b905082815260208101848484011115612e0557612e04613b9c565b5b612e10848285613983565b509392505050565b600081359050612e2781613e17565b92915050565b600081359050612e3c81613e2e565b92915050565b600081359050612e5181613e45565b92915050565b600081519050612e6681613e45565b92915050565b600082601f830112612e8157612e80613b92565b5b8135612e91848260208601612dd6565b91505092915050565b60008083601f840112612eb057612eaf613b92565b5b8235905067ffffffffffffffff811115612ecd57612ecc613b8d565b5b602083019150836001820283011115612ee957612ee8613b97565b5b9250929050565b600081359050612eff81613e5c565b92915050565b600081359050612f1481613e73565b92915050565b600060208284031215612f3057612f2f613ba6565b5b6000612f3e84828501612e18565b91505092915050565b60008060408385031215612f5e57612f5d613ba6565b5b6000612f6c85828601612e18565b9250506020612f7d85828601612e18565b9150509250929050565b600080600060608486031215612fa057612f9f613ba6565b5b6000612fae86828701612e18565b9350506020612fbf86828701612e18565b9250506040612fd086828701612ef0565b9150509250925092565b60008060008060808587031215612ff457612ff3613ba6565b5b600061300287828801612e18565b945050602061301387828801612e18565b935050604061302487828801612ef0565b925050606085013567ffffffffffffffff81111561304557613044613ba1565b5b61305187828801612e6c565b91505092959194509250565b6000806040838503121561307457613073613ba6565b5b600061308285828601612e18565b925050602061309385828601612e2d565b9150509250929050565b600080604083850312156130b4576130b3613ba6565b5b60006130c285828601612e18565b92505060206130d385828601612ef0565b9150509250929050565b6000602082840312156130f3576130f2613ba6565b5b600061310184828501612e42565b91505092915050565b6000602082840312156131205761311f613ba6565b5b600061312e84828501612e57565b91505092915050565b6000806020838503121561314e5761314d613ba6565b5b600083013567ffffffffffffffff81111561316c5761316b613ba1565b5b61317885828601612e9a565b92509250509250929050565b60006020828403121561319a57613199613ba6565b5b60006131a884828501612ef0565b91505092915050565b6000602082840312156131c7576131c6613ba6565b5b60006131d584828501612f05565b91505092915050565b6131e7816138eb565b82525050565b6131f6816138fd565b82525050565b600061320782613793565b61321181856137a9565b9350613221818560208601613992565b61322a81613bab565b840191505092915050565b60006132408261379e565b61324a81856137ba565b935061325a818560208601613992565b61326381613bab565b840191505092915050565b60006132798261379e565b61328381856137cb565b9350613293818560208601613992565b80840191505092915050565b600081546132ac816139c5565b6132b681866137cb565b945060018216600081146132d157600181146132e257613315565b60ff19831686528186019350613315565b6132eb8561377e565b60005b8381101561330d578154818901526001820191506020810190506132ee565b838801955050505b50505092915050565b600061332b6022836137ba565b915061333682613bbc565b604082019050919050565b600061334e6021836137ba565b915061335982613c0b565b604082019050919050565b60006133716026836137ba565b915061337c82613c5a565b604082019050919050565b60006133946012836137ba565b915061339f82613ca9565b602082019050919050565b60006133b7601e836137ba565b91506133c282613cd2565b602082019050919050565b60006133da6012836137ba565b91506133e582613cfb565b602082019050919050565b60006133fd601c836137ba565b915061340882613d24565b602082019050919050565b60006134206015836137ba565b915061342b82613d4d565b602082019050919050565b60006134436020836137ba565b915061344e82613d76565b602082019050919050565b6000613466602f836137ba565b915061347182613d9f565b604082019050919050565b60006134896016836137ba565b915061349482613dee565b602082019050919050565b6134a881613955565b82525050565b6134b78161396f565b82525050565b60006134c9828661326e565b91506134d5828561326e565b91506134e1828461329f565b9150819050949350505050565b600060208201905061350360008301846131de565b92915050565b600060808201905061351e60008301876131de565b61352b60208301866131de565b613538604083018561349f565b818103606083015261354a81846131fc565b905095945050505050565b600060208201905061356a60008301846131ed565b92915050565b6000602082019050818103600083015261358a8184613235565b905092915050565b600060208201905081810360008301526135ab8161331e565b9050919050565b600060208201905081810360008301526135cb81613341565b9050919050565b600060208201905081810360008301526135eb81613364565b9050919050565b6000602082019050818103600083015261360b81613387565b9050919050565b6000602082019050818103600083015261362b816133aa565b9050919050565b6000602082019050818103600083015261364b816133cd565b9050919050565b6000602082019050818103600083015261366b816133f0565b9050919050565b6000602082019050818103600083015261368b81613413565b9050919050565b600060208201905081810360008301526136ab81613436565b9050919050565b600060208201905081810360008301526136cb81613459565b9050919050565b600060208201905081810360008301526136eb8161347c565b9050919050565b6000602082019050613707600083018461349f565b92915050565b600060208201905061372260008301846134ae565b92915050565b6000613732613743565b905061373e82826139f7565b919050565b6000604051905090565b600067ffffffffffffffff82111561376857613767613b5e565b5b61377182613bab565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006137e182613955565b91506137ec83613955565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561382157613820613aa2565b5b828201905092915050565b600061383782613955565b915061384283613955565b92508261385257613851613ad1565b5b828204905092915050565b600061386882613955565b915061387383613955565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138ac576138ab613aa2565b5b828202905092915050565b60006138c282613955565b91506138cd83613955565b9250828210156138e0576138df613aa2565b5b828203905092915050565b60006138f682613935565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156139b0578082015181840152602081019050613995565b838111156139bf576000848401525b50505050565b600060028204905060018216806139dd57607f821691505b602082108114156139f1576139f0613b00565b5b50919050565b613a0082613bab565b810181811067ffffffffffffffff82111715613a1f57613a1e613b5e565b5b80604052505050565b6000613a3382613955565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a6657613a65613aa2565b5b600182019050919050565b6000613a7c82613955565b9150613a8783613955565b925082613a9757613a96613ad1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f796f752061726520756e61626c6520746f20667265656d696e7420616e796d6f60008201527f7265000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d6178206d696e7420706572207472616e73616374696f6e206578636565646560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742046756e64730000000000000000000000000000600082015250565b7f4d696e74207175616e746974792073686f756c64206265206f76657220300000600082015250565b7f52656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f72656163686564206d61782066726565206d696e7420737570706c7900000000600082015250565b7f4d696e742068617665206265656e205061757365640000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d696e74206973206e6f74206163746976652079657400000000000000000000600082015250565b613e20816138eb565b8114613e2b57600080fd5b50565b613e37816138fd565b8114613e4257600080fd5b50565b613e4e81613909565b8114613e5957600080fd5b50565b613e6581613955565b8114613e7057600080fd5b50565b613e7c8161395f565b8114613e8757600080fd5b5056fea2646970667358221220d9c81be475c4212f19644d51b2246c89f53adf2aa33fbddccd3a6ecc6c32695d64736f6c63430008070033

Deployed Bytecode

0x60806040526004361061020f5760003560e01c806363eb8bb611610118578063a0712d68116100a0578063c87b56dd1161006f578063c87b56dd14610716578063cd85cdb514610753578063e6fd48bc1461076a578063e985e9c514610795578063f2fde38b146107d25761020f565b8063a0712d681461067d578063a22cb46514610699578063b88d4fde146106c2578063c6682862146106eb5761020f565b8063715018a6116100e7578063715018a6146105c95780637c928fe9146105e05780638da5cb5b146105fc57806395d89b4114610627578063a0617ad0146106525761020f565b806363eb8bb61461050d5780636817c76c146105385780636f8b44b01461056357806370a082311461058c5761020f565b806325fd90f31161019b57806349a772b51161016a57806349a772b51461043757806355f804b3146104625780635b28fd911461048b578063627804af146104b45780636352211e146104d05761020f565b806325fd90f3146103a357806328a4d1a7146103ce5780633ccfd60b146103f757806342842e0e1461040e5761020f565b8063139c9476116101e2578063139c9476146102e257806318160ddd1461030d5780631fe7b6241461033857806323b872dd1461034f57806324ef901e146103785761020f565b806301ffc9a71461021457806306fdde0314610251578063081812fc1461027c578063095ea7b3146102b9575b600080fd5b34801561022057600080fd5b5061023b600480360381019061023691906130dd565b6107fb565b6040516102489190613555565b60405180910390f35b34801561025d57600080fd5b506102666108dd565b6040516102739190613570565b60405180910390f35b34801561028857600080fd5b506102a3600480360381019061029e9190613184565b61096f565b6040516102b091906134ee565b60405180910390f35b3480156102c557600080fd5b506102e060048036038101906102db919061309d565b6109eb565b005b3480156102ee57600080fd5b506102f7610af0565b60405161030491906136f2565b60405180910390f35b34801561031957600080fd5b50610322610af6565b60405161032f91906136f2565b60405180910390f35b34801561034457600080fd5b5061034d610b0d565b005b34801561035b57600080fd5b5061037660048036038101906103719190612f87565b610ba6565b005b34801561038457600080fd5b5061038d610bb6565b60405161039a91906136f2565b60405180910390f35b3480156103af57600080fd5b506103b8610bbc565b6040516103c59190613555565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f091906131b1565b610bcf565b005b34801561040357600080fd5b5061040c610c7d565b005b34801561041a57600080fd5b5061043560048036038101906104309190612f87565b610d59565b005b34801561044357600080fd5b5061044c610d79565b60405161045991906136f2565b60405180910390f35b34801561046e57600080fd5b5061048960048036038101906104849190613137565b610d89565b005b34801561049757600080fd5b506104b260048036038101906104ad9190613184565b610e1b565b005b6104ce60048036038101906104c9919061309d565b610ea1565b005b3480156104dc57600080fd5b506104f760048036038101906104f29190613184565b610f2b565b60405161050491906134ee565b60405180910390f35b34801561051957600080fd5b50610522610f41565b60405161052f91906136f2565b60405180910390f35b34801561054457600080fd5b5061054d610f47565b60405161055a91906136f2565b60405180910390f35b34801561056f57600080fd5b5061058a60048036038101906105859190613184565b610f4d565b005b34801561059857600080fd5b506105b360048036038101906105ae9190612f1a565b610fe7565b6040516105c091906136f2565b60405180910390f35b3480156105d557600080fd5b506105de6110b7565b005b6105fa60048036038101906105f59190613184565b61113f565b005b34801561060857600080fd5b5061061161135d565b60405161061e91906134ee565b60405180910390f35b34801561063357600080fd5b5061063c611386565b6040516106499190613570565b60405180910390f35b34801561065e57600080fd5b50610667611418565b60405161067491906136f2565b60405180910390f35b61069760048036038101906106929190613184565b61141e565b005b3480156106a557600080fd5b506106c060048036038101906106bb919061305d565b611640565b005b3480156106ce57600080fd5b506106e960048036038101906106e49190612fda565b6117b8565b005b3480156106f757600080fd5b50610700611830565b60405161070d9190613570565b60405180910390f35b34801561072257600080fd5b5061073d60048036038101906107389190613184565b6118be565b60405161074a9190613570565b60405180910390f35b34801561075f57600080fd5b50610768611968565b005b34801561077657600080fd5b5061077f611a01565b60405161078c919061370d565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b79190612f47565b611a1b565b6040516107c99190613555565b60405180910390f35b3480156107de57600080fd5b506107f960048036038101906107f49190612f1a565b611aaf565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108c657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108d657506108d582611ba7565b5b9050919050565b6060600380546108ec906139c5565b80601f0160208091040260200160405190810160405280929190818152602001828054610918906139c5565b80156109655780601f1061093a57610100808354040283529160200191610965565b820191906000526020600020905b81548152906001019060200180831161094857829003601f168201915b5050505050905090565b600061097a82611c11565b6109b0576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6007600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006109f682610f2b565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a5e576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a7d611c5f565b73ffffffffffffffffffffffffffffffffffffffff1614610ae057610aa981610aa4611c5f565b611a1b565b610adf576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b610aeb838383611c67565b505050565b600c5481565b6000610b00611d19565b6002546001540303905090565b610b15611c5f565b73ffffffffffffffffffffffffffffffffffffffff16610b3361135d565b73ffffffffffffffffffffffffffffffffffffffff1614610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8090613692565b60405180910390fd5b6001600f60086101000a81548160ff021916908315150217905550565b610bb1838383611d1e565b505050565b600b5481565b600f60089054906101000a900460ff1681565b610bd7611c5f565b73ffffffffffffffffffffffffffffffffffffffff16610bf561135d565b73ffffffffffffffffffffffffffffffffffffffff1614610c4b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4290613692565b60405180910390fd5b8063ffffffff16600f60006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555050565b610c85611c5f565b73ffffffffffffffffffffffffffffffffffffffff16610ca361135d565b73ffffffffffffffffffffffffffffffffffffffff1614610cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cf090613692565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc3073ffffffffffffffffffffffffffffffffffffffff16319081150290604051600060405180830381858888f19350505050158015610d56573d6000803e3d6000fd5b50565b610d74838383604051806020016040528060008152506117b8565b505050565b6000610d84336121d4565b905090565b610d91611c5f565b73ffffffffffffffffffffffffffffffffffffffff16610daf61135d565b73ffffffffffffffffffffffffffffffffffffffff1614610e05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfc90613692565b60405180910390fd5b818160109190610e16929190612cf0565b505050565b610e23611c5f565b73ffffffffffffffffffffffffffffffffffffffff16610e4161135d565b73ffffffffffffffffffffffffffffffffffffffff1614610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e90613692565b60405180910390fd5b80600a8190555050565b610ea9611c5f565b73ffffffffffffffffffffffffffffffffffffffff16610ec761135d565b73ffffffffffffffffffffffffffffffffffffffff1614610f1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1490613692565b60405180910390fd5b610f27828261223e565b5050565b6000610f368261225c565b600001519050919050565b600a5481565b600e5481565b610f55611c5f565b73ffffffffffffffffffffffffffffffffffffffff16610f7361135d565b73ffffffffffffffffffffffffffffffffffffffff1614610fc9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fc090613692565b60405180910390fd5b610fd1610af6565b811015610fdd57600080fd5b80600d8190555050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561104f576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b6110bf611c5f565b73ffffffffffffffffffffffffffffffffffffffff166110dd61135d565b73ffffffffffffffffffffffffffffffffffffffff1614611133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112a90613692565b60405180910390fd5b61113d60006124e7565b565b6000600f60009054906101000a900467ffffffffffffffff1667ffffffffffffffff16141580156111905750600f60009054906101000a900467ffffffffffffffff1667ffffffffffffffff164210155b6111cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c6906136d2565b60405180910390fd5b60011515600f60089054906101000a900460ff16151514611225576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121c90613672565b60405180910390fd5b600c54611231336121d4565b10611271576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126890613592565b60405180910390fd5b600081116112b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ab90613612565b60405180910390fd5b600c548111156112f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f0906135b2565b60405180910390fd5b600a5481611305610af6565b61130f91906137d6565b1115611350576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161134790613652565b60405180910390fd5b61135a338261223e565b50565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611395906139c5565b80601f01602080910402602001604051908101604052809291908181526020018280546113c1906139c5565b801561140e5780601f106113e35761010080835404028352916020019161140e565b820191906000526020600020905b8154815290600101906020018083116113f157829003601f168201915b5050505050905090565b600d5481565b6000600f60009054906101000a900467ffffffffffffffff1667ffffffffffffffff161415801561146f5750600f60009054906101000a900467ffffffffffffffff1667ffffffffffffffff164210155b6114ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a5906136d2565b60405180910390fd5b60011515600f60089054906101000a900460ff16151514611504576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114fb90613672565b60405180910390fd5b60008111611547576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153e90613612565b60405180910390fd5b600b5481111561158c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611583906135b2565b60405180910390fd5b600d5481611598610af6565b6115a291906137d6565b11156115e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115da90613632565b60405180910390fd5b80600e546115f1919061385d565b341015611633576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162a906135f2565b60405180910390fd5b61163d338261223e565b50565b611648611c5f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116ad576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600860006116ba611c5f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611767611c5f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117ac9190613555565b60405180910390a35050565b6117c3848484611d1e565b6117e28373ffffffffffffffffffffffffffffffffffffffff166125ab565b1561182a576117f3848484846125ce565b611829576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b6009805461183d906139c5565b80601f0160208091040260200160405190810160405280929190818152602001828054611869906139c5565b80156118b65780601f1061188b576101008083540402835291602001916118b6565b820191906000526020600020905b81548152906001019060200180831161189957829003601f168201915b505050505081565b60606118c982611c11565b611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff906136b2565b60405180910390fd5b600061191261272e565b905060008151116119325760405180602001604052806000815250611960565b8061193c846127c0565b6009604051602001611950939291906134bd565b6040516020818303038152906040525b915050919050565b611970611c5f565b73ffffffffffffffffffffffffffffffffffffffff1661198e61135d565b73ffffffffffffffffffffffffffffffffffffffff16146119e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119db90613692565b60405180910390fd5b6000600f60086101000a81548160ff021916908315150217905550565b600f60009054906101000a900467ffffffffffffffff1681565b6000600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611ab7611c5f565b73ffffffffffffffffffffffffffffffffffffffff16611ad561135d565b73ffffffffffffffffffffffffffffffffffffffff1614611b2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b2290613692565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b92906135d2565b60405180910390fd5b611ba4816124e7565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611c1c611d19565b11158015611c2b575060015482105b8015611c58575060056000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826007600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600090565b6000611d298261225c565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611d94576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611db5611c5f565b73ffffffffffffffffffffffffffffffffffffffff161480611de45750611de385611dde611c5f565b611a1b565b5b80611e295750611df2611c5f565b73ffffffffffffffffffffffffffffffffffffffff16611e118461096f565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611e62576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611ec9576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611ed68585856001612921565b611ee260008487611c67565b6001600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600560008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600560008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561216257600154821461216157878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46121cd8585856001612927565b5050505050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160089054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61225882826040518060200160405280600081525061292d565b5050565b612264612d76565b600082905080612272611d19565b116124b0576001548110156124af576000600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff161515151581525050905080604001516124ad57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146123915780925050506124e2565b5b6001156124ac57818060019003925050600560008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146124a75780925050506124e2565b612392565b5b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125f4611c5f565b8786866040518563ffffffff1660e01b81526004016126169493929190613509565b602060405180830381600087803b15801561263057600080fd5b505af192505050801561266157506040513d601f19601f8201168201806040525081019061265e919061310a565b60015b6126db573d8060008114612691576040519150601f19603f3d011682016040523d82523d6000602084013e612696565b606091505b506000815114156126d3576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60606010805461273d906139c5565b80601f0160208091040260200160405190810160405280929190818152602001828054612769906139c5565b80156127b65780601f1061278b576101008083540402835291602001916127b6565b820191906000526020600020905b81548152906001019060200180831161279957829003601f168201915b5050505050905090565b60606000821415612808576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061291c565b600082905060005b6000821461283a57808061282390613a28565b915050600a82612833919061382c565b9150612810565b60008167ffffffffffffffff81111561285657612855613b5e565b5b6040519080825280601f01601f1916602001820160405280156128885781602001600182028036833780820191505090505b5090505b60008514612915576001826128a191906138b7565b9150600a856128b09190613a71565b60306128bc91906137d6565b60f81b8183815181106128d2576128d1613b2f565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561290e919061382c565b945061288c565b8093505050505b919050565b50505050565b50505050565b60006001549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561299b576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008314156129d6576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6129e36000858386612921565b82600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555082600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550836005600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426005600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008482019050612ba48673ffffffffffffffffffffffffffffffffffffffff166125ab565b15612c69575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612c1960008784806001019550876125ce565b612c4f576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b808210612baa578260015414612c6457600080fd5b612cd4565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4808210612c6a575b816001819055505050612cea6000858386612927565b50505050565b828054612cfc906139c5565b90600052602060002090601f016020900481019282612d1e5760008555612d65565b82601f10612d3757803560ff1916838001178555612d65565b82800160010185558215612d65579182015b82811115612d64578235825591602001919060010190612d49565b5b509050612d729190612db9565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612dd2576000816000905550600101612dba565b5090565b6000612de9612de48461374d565b613728565b905082815260208101848484011115612e0557612e04613b9c565b5b612e10848285613983565b509392505050565b600081359050612e2781613e17565b92915050565b600081359050612e3c81613e2e565b92915050565b600081359050612e5181613e45565b92915050565b600081519050612e6681613e45565b92915050565b600082601f830112612e8157612e80613b92565b5b8135612e91848260208601612dd6565b91505092915050565b60008083601f840112612eb057612eaf613b92565b5b8235905067ffffffffffffffff811115612ecd57612ecc613b8d565b5b602083019150836001820283011115612ee957612ee8613b97565b5b9250929050565b600081359050612eff81613e5c565b92915050565b600081359050612f1481613e73565b92915050565b600060208284031215612f3057612f2f613ba6565b5b6000612f3e84828501612e18565b91505092915050565b60008060408385031215612f5e57612f5d613ba6565b5b6000612f6c85828601612e18565b9250506020612f7d85828601612e18565b9150509250929050565b600080600060608486031215612fa057612f9f613ba6565b5b6000612fae86828701612e18565b9350506020612fbf86828701612e18565b9250506040612fd086828701612ef0565b9150509250925092565b60008060008060808587031215612ff457612ff3613ba6565b5b600061300287828801612e18565b945050602061301387828801612e18565b935050604061302487828801612ef0565b925050606085013567ffffffffffffffff81111561304557613044613ba1565b5b61305187828801612e6c565b91505092959194509250565b6000806040838503121561307457613073613ba6565b5b600061308285828601612e18565b925050602061309385828601612e2d565b9150509250929050565b600080604083850312156130b4576130b3613ba6565b5b60006130c285828601612e18565b92505060206130d385828601612ef0565b9150509250929050565b6000602082840312156130f3576130f2613ba6565b5b600061310184828501612e42565b91505092915050565b6000602082840312156131205761311f613ba6565b5b600061312e84828501612e57565b91505092915050565b6000806020838503121561314e5761314d613ba6565b5b600083013567ffffffffffffffff81111561316c5761316b613ba1565b5b61317885828601612e9a565b92509250509250929050565b60006020828403121561319a57613199613ba6565b5b60006131a884828501612ef0565b91505092915050565b6000602082840312156131c7576131c6613ba6565b5b60006131d584828501612f05565b91505092915050565b6131e7816138eb565b82525050565b6131f6816138fd565b82525050565b600061320782613793565b61321181856137a9565b9350613221818560208601613992565b61322a81613bab565b840191505092915050565b60006132408261379e565b61324a81856137ba565b935061325a818560208601613992565b61326381613bab565b840191505092915050565b60006132798261379e565b61328381856137cb565b9350613293818560208601613992565b80840191505092915050565b600081546132ac816139c5565b6132b681866137cb565b945060018216600081146132d157600181146132e257613315565b60ff19831686528186019350613315565b6132eb8561377e565b60005b8381101561330d578154818901526001820191506020810190506132ee565b838801955050505b50505092915050565b600061332b6022836137ba565b915061333682613bbc565b604082019050919050565b600061334e6021836137ba565b915061335982613c0b565b604082019050919050565b60006133716026836137ba565b915061337c82613c5a565b604082019050919050565b60006133946012836137ba565b915061339f82613ca9565b602082019050919050565b60006133b7601e836137ba565b91506133c282613cd2565b602082019050919050565b60006133da6012836137ba565b91506133e582613cfb565b602082019050919050565b60006133fd601c836137ba565b915061340882613d24565b602082019050919050565b60006134206015836137ba565b915061342b82613d4d565b602082019050919050565b60006134436020836137ba565b915061344e82613d76565b602082019050919050565b6000613466602f836137ba565b915061347182613d9f565b604082019050919050565b60006134896016836137ba565b915061349482613dee565b602082019050919050565b6134a881613955565b82525050565b6134b78161396f565b82525050565b60006134c9828661326e565b91506134d5828561326e565b91506134e1828461329f565b9150819050949350505050565b600060208201905061350360008301846131de565b92915050565b600060808201905061351e60008301876131de565b61352b60208301866131de565b613538604083018561349f565b818103606083015261354a81846131fc565b905095945050505050565b600060208201905061356a60008301846131ed565b92915050565b6000602082019050818103600083015261358a8184613235565b905092915050565b600060208201905081810360008301526135ab8161331e565b9050919050565b600060208201905081810360008301526135cb81613341565b9050919050565b600060208201905081810360008301526135eb81613364565b9050919050565b6000602082019050818103600083015261360b81613387565b9050919050565b6000602082019050818103600083015261362b816133aa565b9050919050565b6000602082019050818103600083015261364b816133cd565b9050919050565b6000602082019050818103600083015261366b816133f0565b9050919050565b6000602082019050818103600083015261368b81613413565b9050919050565b600060208201905081810360008301526136ab81613436565b9050919050565b600060208201905081810360008301526136cb81613459565b9050919050565b600060208201905081810360008301526136eb8161347c565b9050919050565b6000602082019050613707600083018461349f565b92915050565b600060208201905061372260008301846134ae565b92915050565b6000613732613743565b905061373e82826139f7565b919050565b6000604051905090565b600067ffffffffffffffff82111561376857613767613b5e565b5b61377182613bab565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006137e182613955565b91506137ec83613955565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561382157613820613aa2565b5b828201905092915050565b600061383782613955565b915061384283613955565b92508261385257613851613ad1565b5b828204905092915050565b600061386882613955565b915061387383613955565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156138ac576138ab613aa2565b5b828202905092915050565b60006138c282613955565b91506138cd83613955565b9250828210156138e0576138df613aa2565b5b828203905092915050565b60006138f682613935565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600067ffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156139b0578082015181840152602081019050613995565b838111156139bf576000848401525b50505050565b600060028204905060018216806139dd57607f821691505b602082108114156139f1576139f0613b00565b5b50919050565b613a0082613bab565b810181811067ffffffffffffffff82111715613a1f57613a1e613b5e565b5b80604052505050565b6000613a3382613955565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613a6657613a65613aa2565b5b600182019050919050565b6000613a7c82613955565b9150613a8783613955565b925082613a9757613a96613ad1565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f796f752061726520756e61626c6520746f20667265656d696e7420616e796d6f60008201527f7265000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d6178206d696e7420706572207472616e73616374696f6e206578636565646560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742046756e64730000000000000000000000000000600082015250565b7f4d696e74207175616e746974792073686f756c64206265206f76657220300000600082015250565b7f52656163686564206d617820737570706c790000000000000000000000000000600082015250565b7f72656163686564206d61782066726565206d696e7420737570706c7900000000600082015250565b7f4d696e742068617665206265656e205061757365640000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4d696e74206973206e6f74206163746976652079657400000000000000000000600082015250565b613e20816138eb565b8114613e2b57600080fd5b50565b613e37816138fd565b8114613e4257600080fd5b50565b613e4e81613909565b8114613e5957600080fd5b50565b613e6581613955565b8114613e7057600080fd5b50565b613e7c8161395f565b8114613e8757600080fd5b5056fea2646970667358221220d9c81be475c4212f19644d51b2246c89f53adf2aa33fbddccd3a6ecc6c32695d64736f6c63430008070033

Deployed Bytecode Sourcemap

190:3508:9:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3057:300:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6087:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7544:200;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7120:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;422:40:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2319:306:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3251:74:9;;;;;;;;;;;;;:::i;:::-;;8383:164:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;368:44:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;602:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3333:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3044:117;;;;;;;;;;;;;:::i;:::-;;8613:179:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3586:105:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2934:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2261:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3445:133;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5902:123:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;322:37:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;518:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2105:150;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3416:203:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1668:101:0;;;;;;;;;;;;;:::i;:::-;;1395:700:9;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1036:85:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6249:102:10;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;472:36:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;731:656;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7811:282:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8858:360;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;276:37:9;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2499:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3169:74;;;;;;;;;;;;;:::i;:::-;;565:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8159:162:10;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1918:198:0;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3057:300:10;3159:4;3209:25;3194:40;;;:11;:40;;;;:104;;;;3265:33;3250:48;;;:11;:48;;;;3194:104;:156;;;;3314:36;3338:11;3314:23;:36::i;:::-;3194:156;3175:175;;3057:300;;;:::o;6087:98::-;6141:13;6173:5;6166:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6087:98;:::o;7544:200::-;7612:7;7636:16;7644:7;7636;:16::i;:::-;7631:64;;7661:34;;;;;;;;;;;;;;7631:64;7713:15;:24;7729:7;7713:24;;;;;;;;;;;;;;;;;;;;;7706:31;;7544:200;;;:::o;7120:363::-;7192:13;7208:24;7224:7;7208:15;:24::i;:::-;7192:40;;7252:5;7246:11;;:2;:11;;;7242:48;;;7266:24;;;;;;;;;;;;;;7242:48;7321:5;7305:21;;:12;:10;:12::i;:::-;:21;;;7301:137;;7332:37;7349:5;7356:12;:10;:12::i;:::-;7332:16;:37::i;:::-;7328:110;;7392:35;;;;;;;;;;;;;;7328:110;7301:137;7448:28;7457:2;7461:7;7470:5;7448:8;:28::i;:::-;7182:301;7120:363;;:::o;422:40:9:-;;;;:::o;2319:306:10:-;2372:7;2593:15;:13;:15::i;:::-;2578:12;;2562:13;;:28;:46;2555:53;;2319:306;:::o;3251:74:9:-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3312:4:9::1;3299:10;;:17;;;;;;;;;;;;;;;;;;3251:74::o:0;8383:164:10:-;8512:28;8522:4;8528:2;8532:7;8512:9;:28::i;:::-;8383:164;;;:::o;368:44:9:-;;;;:::o;602:29::-;;;;;;;;;;;;;:::o;3333:104::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3424:5:9::1;3407:22;;:14;;:22;;;;;;;;;;;;;;;;;;3333:104:::0;:::o;3044:117::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3098:10:9::1;3090:28;;:60;3135:4;3119:30;;;3090:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;3044:117::o:0;8613:179:10:-;8746:39;8763:4;8769:2;8773:7;8746:39;;;;;;;;;;;;:16;:39::i;:::-;8613:179;;;:::o;3586:105:9:-;3634:7;3658:25;3672:10;3658:13;:25::i;:::-;3651:32;;3586:105;:::o;2934:102::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3021:7:9::1;;3005:13;:23;;;;;;;:::i;:::-;;2934:102:::0;;:::o;2261:110::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2353:10:9::1;2334:16;:29;;;;2261:110:::0;:::o;3445:133::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3539:31:9::1;3549:10;3561:8;3539:9;:31::i;:::-;3445:133:::0;;:::o;5902:123:10:-;5966:7;5992:21;6005:7;5992:12;:21::i;:::-;:26;;;5985:33;;5902:123;;;:::o;322:37:9:-;;;;:::o;518:38::-;;;;:::o;2105:150::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2196:13:9::1;:11;:13::i;:::-;2181:11;:28;;2173:37;;;::::0;::::1;;2236:11;2219:14;:28;;;;2105:150:::0;:::o;3416:203:10:-;3480:7;3520:1;3503:19;;:5;:19;;;3499:60;;;3531:28;;;;;;;;;;;;;;3499:60;3584:12;:19;3597:5;3584:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;3576:36;;3569:43;;3416:203;;;:::o;1668:101:0:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1732:30:::1;1759:1;1732:18;:30::i;:::-;1668:101::o:0;1395:700:9:-;1484:1;1467:14;;;;;;;;;;;:18;;;;:56;;;;;1509:14;;;;;;;;;;;1490:33;;:15;:33;;1467:56;1459:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;1582:4;1568:18;;:10;;;;;;;;;;;:18;;;1560:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;1658:21;;1630:25;1644:10;1630:13;:25::i;:::-;:49;1622:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;1747:1;1736:8;:12;1728:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;1814:21;;1802:8;:33;;1794:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;1920:16;;1908:8;1892:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:44;;1884:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;2056:31;2066:10;2078:8;2056:9;:31::i;:::-;1395:700;:::o;1036:85:0:-;1082:7;1108:6;;;;;;;;;;;1101:13;;1036:85;:::o;6249:102:10:-;6305:13;6337:7;6330:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6249:102;:::o;472:36:9:-;;;;:::o;731:656::-;816:1;799:14;;;;;;;;;;;:18;;;;:56;;;;;841:14;;;;;;;;;;;822:33;;:15;:33;;799:56;791:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;914:4;900:18;;:10;;;;;;;;;;;:18;;;892:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;973:1;962:8;:12;954:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;1040:24;;1028:8;:36;;1020:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;1149:14;;1137:8;1121:13;:11;:13::i;:::-;:24;;;;:::i;:::-;:42;;1113:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1230:8;1218:9;;:20;;;;:::i;:::-;1205:9;:33;;1197:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;1348:31;1358:10;1370:8;1348:9;:31::i;:::-;731:656;:::o;7811:282:10:-;7921:12;:10;:12::i;:::-;7909:24;;:8;:24;;;7905:54;;;7942:17;;;;;;;;;;;;;;7905:54;8015:8;7970:18;:32;7989:12;:10;:12::i;:::-;7970:32;;;;;;;;;;;;;;;:42;8003:8;7970:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;8067:8;8038:48;;8053:12;:10;:12::i;:::-;8038:48;;;8077:8;8038:48;;;;;;:::i;:::-;;;;;;;;7811:282;;:::o;8858:360::-;9019:28;9029:4;9035:2;9039:7;9019:9;:28::i;:::-;9061:15;:2;:13;;;:15::i;:::-;9057:155;;;9082:56;9113:4;9119:2;9123:7;9132:5;9082:30;:56::i;:::-;9078:134;;9161:40;;;;;;;;;;;;;;9078:134;9057:155;8858:360;;;;:::o;276:37:9:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;2499:423::-;2607:13;2644:16;2652:7;2644;:16::i;:::-;2636:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;2720:28;2751:10;:8;:10::i;:::-;2720:41;;2808:1;2783:14;2777:28;:32;:137;;;;;;;;;;;;;;;;;2847:14;2863:18;:7;:16;:18::i;:::-;2883:13;2830:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2777:137;2770:144;;;2499:423;;;:::o;3169:74::-;1259:12:0;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3229:5:9::1;3216:10;;:18;;;;;;;;;;;;;;;;;;3169:74::o:0;565:28::-;;;;;;;;;;;;;:::o;8159:162:10:-;8256:4;8279:18;:25;8298:5;8279:25;;;;;;;;;;;;;;;:35;8305:8;8279:35;;;;;;;;;;;;;;;;;;;;;;;;;8272:42;;8159:162;;;;:::o;1918:198:0:-;1259:12;:10;:12::i;:::-;1248:23;;:7;:5;:7::i;:::-;:23;;;1240:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2026:1:::1;2006:22;;:8;:22;;;;1998:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:28;2100:8;2081:18;:28::i;:::-;1918:198:::0;:::o;829:155:7:-;914:4;952:25;937:40;;;:11;:40;;;;930:47;;829:155;;;:::o;9464:172:10:-;9521:4;9563:7;9544:15;:13;:15::i;:::-;:26;;:53;;;;;9584:13;;9574:7;:23;9544:53;:85;;;;;9602:11;:20;9614:7;9602:20;;;;;;;;;;;:27;;;;;;;;;;;;9601:28;9544:85;9537:92;;9464:172;;;:::o;640:96:5:-;693:7;719:10;712:17;;640:96;:::o;18445:189:10:-;18582:2;18555:15;:24;18571:7;18555:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;18619:7;18615:2;18599:28;;18608:5;18599:28;;;;;;;;;;;;18445:189;;;:::o;2100:90::-;2156:7;2100:90;:::o;13520:2082::-;13630:35;13668:21;13681:7;13668:12;:21::i;:::-;13630:59;;13726:4;13704:26;;:13;:18;;;:26;;;13700:67;;13739:28;;;;;;;;;;;;;;13700:67;13778:22;13820:4;13804:20;;:12;:10;:12::i;:::-;:20;;;:72;;;;13840:36;13857:4;13863:12;:10;:12::i;:::-;13840:16;:36::i;:::-;13804:72;:124;;;;13916:12;:10;:12::i;:::-;13892:36;;:20;13904:7;13892:11;:20::i;:::-;:36;;;13804:124;13778:151;;13945:17;13940:66;;13971:35;;;;;;;;;;;;;;13940:66;14034:1;14020:16;;:2;:16;;;14016:52;;;14045:23;;;;;;;;;;;;;;14016:52;14079:43;14101:4;14107:2;14111:7;14120:1;14079:21;:43::i;:::-;14184:35;14201:1;14205:7;14214:4;14184:8;:35::i;:::-;14539:1;14509:12;:18;14522:4;14509:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14582:1;14554:12;:16;14567:2;14554:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14598:31;14632:11;:20;14644:7;14632:20;;;;;;;;;;;14598:54;;14682:2;14666:8;:13;;;:18;;;;;;;;;;;;;;;;;;14731:15;14698:8;:23;;;:49;;;;;;;;;;;;;;;;;;14995:19;15027:1;15017:7;:11;14995:33;;15042:31;15076:11;:24;15088:11;15076:24;;;;;;;;;;;15042:58;;15143:1;15118:27;;:8;:13;;;;;;;;;;;;:27;;;15114:377;;;15325:13;;15310:11;:28;15306:171;;15378:4;15362:8;:13;;;:20;;;;;;;;;;;;;;;;;;15430:13;:28;;;15404:8;:23;;;:54;;;;;;;;;;;;;;;;;;15306:171;15114:377;14485:1016;;;15535:7;15531:2;15516:27;;15525:4;15516:27;;;;;;;;;;;;15553:42;15574:4;15580:2;15584:7;15593:1;15553:20;:42::i;:::-;13620:1982;;13520:2082;;;:::o;3696:135::-;3757:7;3791:12;:19;3804:5;3791:19;;;;;;;;;;;;;;;:32;;;;;;;;;;;;3783:41;;3776:48;;3696:135;;;:::o;9715:102::-;9783:27;9793:2;9797:8;9783:27;;;;;;;;;;;;:9;:27::i;:::-;9715:102;;:::o;4759:1086::-;4821:21;;:::i;:::-;4854:12;4869:7;4854:22;;4934:4;4915:15;:13;:15::i;:::-;:23;4911:870;;4951:13;;4944:4;:20;4940:841;;;4984:31;5018:11;:17;5030:4;5018:17;;;;;;;;;;;4984:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5058:9;:16;;;5053:714;;5128:1;5102:28;;:9;:14;;;:28;;;5098:99;;5165:9;5158:16;;;;;;5098:99;5494:255;5501:4;5494:255;;;5533:6;;;;;;;;5577:11;:17;5589:4;5577:17;;;;;;;;;;;5565:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5650:1;5624:28;;:9;:14;;;:28;;;5620:107;;5691:9;5684:16;;;;;;5620:107;5494:255;;;5053:714;4966:815;4940:841;4911:870;5807:31;;;;;;;;;;;;;;4759:1086;;;;:::o;2270:187:0:-;2343:16;2362:6;;;;;;;;;;;2343:25;;2387:8;2378:6;;:17;;;;;;;;;;;;;;;;;;2441:8;2410:40;;2431:8;2410:40;;;;;;;;;;;;2333:124;2270:187;:::o;1175:320:4:-;1235:4;1487:1;1465:7;:19;;;:23;1458:30;;1175:320;;;:::o;19115:650:10:-;19273:4;19309:2;19293:36;;;19330:12;:10;:12::i;:::-;19344:4;19350:7;19359:5;19293:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;19289:470;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19541:1;19524:6;:13;:18;19520:229;;;19569:40;;;;;;;;;;;;;;19520:229;19709:6;19703:13;19694:6;19690:2;19686:15;19679:38;19289:470;19421:45;;;19411:55;;;:6;:55;;;;19404:62;;;19115:650;;;;;;:::o;2379:112:9:-;2439:13;2470;2463:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2379:112;:::o;328:703:6:-;384:13;610:1;601:5;:10;597:51;;;627:10;;;;;;;;;;;;;;;;;;;;;597:51;657:12;672:5;657:20;;687:14;711:75;726:1;718:4;:9;711:75;;743:8;;;;;:::i;:::-;;;;773:2;765:10;;;;;:::i;:::-;;;711:75;;;795:19;827:6;817:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;795:39;;844:150;860:1;851:5;:10;844:150;;887:1;877:11;;;;;:::i;:::-;;;953:2;945:5;:10;;;;:::i;:::-;932:2;:24;;;;:::i;:::-;919:39;;902:6;909;902:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;981:2;972:11;;;;;:::i;:::-;;;844:150;;;1017:6;1003:21;;;;;328:703;;;;:::o;20396:154:10:-;;;;;:::o;21191:153::-;;;;;:::o;10177:1708::-;10295:20;10318:13;;10295:36;;10359:1;10345:16;;:2;:16;;;10341:48;;;10370:19;;;;;;;;;;;;;;10341:48;10415:1;10403:8;:13;10399:44;;;10425:18;;;;;;;;;;;;;;10399:44;10454:61;10484:1;10488:2;10492:12;10506:8;10454:21;:61::i;:::-;10821:8;10786:12;:16;10799:2;10786:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10884:8;10844:12;:16;10857:2;10844:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10941:2;10908:11;:25;10920:12;10908:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;11007:15;10957:11;:25;10969:12;10957:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;11038:20;11061:12;11038:35;;11087:11;11116:8;11101:12;:23;11087:37;;11143:15;:2;:13;;;:15::i;:::-;11139:618;;;11178:308;11233:12;11229:2;11208:38;;11225:1;11208:38;;;;;;;;;;;;11273:69;11312:1;11316:2;11320:14;;;;;;11336:5;11273:30;:69::i;:::-;11268:172;;11377:40;;;;;;;;;;;;;;11268:172;11481:3;11466:12;:18;11178:308;;11565:12;11548:13;;:29;11544:43;;11579:8;;;11544:43;11139:618;;;11626:117;11681:14;;;;;;11677:2;11656:40;;11673:1;11656:40;;;;;;;;;;;;11738:3;11723:12;:18;11626:117;;11139:618;11786:12;11770:13;:28;;;;10762:1047;;11818:60;11847:1;11851:2;11855:12;11869:8;11818:20;:60::i;:::-;10285:1600;10177:1708;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:12:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:139::-;469:5;507:6;494:20;485:29;;523:33;550:5;523:33;:::i;:::-;423:139;;;;:::o;568:133::-;611:5;649:6;636:20;627:29;;665:30;689:5;665:30;:::i;:::-;568:133;;;;:::o;707:137::-;752:5;790:6;777:20;768:29;;806:32;832:5;806:32;:::i;:::-;707:137;;;;:::o;850:141::-;906:5;937:6;931:13;922:22;;953:32;979:5;953:32;:::i;:::-;850:141;;;;:::o;1010:338::-;1065:5;1114:3;1107:4;1099:6;1095:17;1091:27;1081:122;;1122:79;;:::i;:::-;1081:122;1239:6;1226:20;1264:78;1338:3;1330:6;1323:4;1315:6;1311:17;1264:78;:::i;:::-;1255:87;;1071:277;1010:338;;;;:::o;1368:553::-;1426:8;1436:6;1486:3;1479:4;1471:6;1467:17;1463:27;1453:122;;1494:79;;:::i;:::-;1453:122;1607:6;1594:20;1584:30;;1637:18;1629:6;1626:30;1623:117;;;1659:79;;:::i;:::-;1623:117;1773:4;1765:6;1761:17;1749:29;;1827:3;1819:4;1811:6;1807:17;1797:8;1793:32;1790:41;1787:128;;;1834:79;;:::i;:::-;1787:128;1368:553;;;;;:::o;1927:139::-;1973:5;2011:6;1998:20;1989:29;;2027:33;2054:5;2027:33;:::i;:::-;1927:139;;;;:::o;2072:137::-;2117:5;2155:6;2142:20;2133:29;;2171:32;2197:5;2171:32;:::i;:::-;2072:137;;;;:::o;2215:329::-;2274:6;2323:2;2311:9;2302:7;2298:23;2294:32;2291:119;;;2329:79;;:::i;:::-;2291:119;2449:1;2474:53;2519:7;2510:6;2499:9;2495:22;2474:53;:::i;:::-;2464:63;;2420:117;2215:329;;;;:::o;2550:474::-;2618:6;2626;2675:2;2663:9;2654:7;2650:23;2646:32;2643:119;;;2681:79;;:::i;:::-;2643:119;2801:1;2826:53;2871:7;2862:6;2851:9;2847:22;2826:53;:::i;:::-;2816:63;;2772:117;2928:2;2954:53;2999:7;2990:6;2979:9;2975:22;2954:53;:::i;:::-;2944:63;;2899:118;2550:474;;;;;:::o;3030:619::-;3107:6;3115;3123;3172:2;3160:9;3151:7;3147:23;3143:32;3140:119;;;3178:79;;:::i;:::-;3140:119;3298:1;3323:53;3368:7;3359:6;3348:9;3344:22;3323:53;:::i;:::-;3313:63;;3269:117;3425:2;3451:53;3496:7;3487:6;3476:9;3472:22;3451:53;:::i;:::-;3441:63;;3396:118;3553:2;3579:53;3624:7;3615:6;3604:9;3600:22;3579:53;:::i;:::-;3569:63;;3524:118;3030:619;;;;;:::o;3655:943::-;3750:6;3758;3766;3774;3823:3;3811:9;3802:7;3798:23;3794:33;3791:120;;;3830:79;;:::i;:::-;3791:120;3950:1;3975:53;4020:7;4011:6;4000:9;3996:22;3975:53;:::i;:::-;3965:63;;3921:117;4077:2;4103:53;4148:7;4139:6;4128:9;4124:22;4103:53;:::i;:::-;4093:63;;4048:118;4205:2;4231:53;4276:7;4267:6;4256:9;4252:22;4231:53;:::i;:::-;4221:63;;4176:118;4361:2;4350:9;4346:18;4333:32;4392:18;4384:6;4381:30;4378:117;;;4414:79;;:::i;:::-;4378:117;4519:62;4573:7;4564:6;4553:9;4549:22;4519:62;:::i;:::-;4509:72;;4304:287;3655:943;;;;;;;:::o;4604:468::-;4669:6;4677;4726:2;4714:9;4705:7;4701:23;4697:32;4694:119;;;4732:79;;:::i;:::-;4694:119;4852:1;4877:53;4922:7;4913:6;4902:9;4898:22;4877:53;:::i;:::-;4867:63;;4823:117;4979:2;5005:50;5047:7;5038:6;5027:9;5023:22;5005:50;:::i;:::-;4995:60;;4950:115;4604:468;;;;;:::o;5078:474::-;5146:6;5154;5203:2;5191:9;5182:7;5178:23;5174:32;5171:119;;;5209:79;;:::i;:::-;5171:119;5329:1;5354:53;5399:7;5390:6;5379:9;5375:22;5354:53;:::i;:::-;5344:63;;5300:117;5456:2;5482:53;5527:7;5518:6;5507:9;5503:22;5482:53;:::i;:::-;5472:63;;5427:118;5078:474;;;;;:::o;5558:327::-;5616:6;5665:2;5653:9;5644:7;5640:23;5636:32;5633:119;;;5671:79;;:::i;:::-;5633:119;5791:1;5816:52;5860:7;5851:6;5840:9;5836:22;5816:52;:::i;:::-;5806:62;;5762:116;5558:327;;;;:::o;5891:349::-;5960:6;6009:2;5997:9;5988:7;5984:23;5980:32;5977:119;;;6015:79;;:::i;:::-;5977:119;6135:1;6160:63;6215:7;6206:6;6195:9;6191:22;6160:63;:::i;:::-;6150:73;;6106:127;5891:349;;;;:::o;6246:529::-;6317:6;6325;6374:2;6362:9;6353:7;6349:23;6345:32;6342:119;;;6380:79;;:::i;:::-;6342:119;6528:1;6517:9;6513:17;6500:31;6558:18;6550:6;6547:30;6544:117;;;6580:79;;:::i;:::-;6544:117;6693:65;6750:7;6741:6;6730:9;6726:22;6693:65;:::i;:::-;6675:83;;;;6471:297;6246:529;;;;;:::o;6781:329::-;6840:6;6889:2;6877:9;6868:7;6864:23;6860:32;6857:119;;;6895:79;;:::i;:::-;6857:119;7015:1;7040:53;7085:7;7076:6;7065:9;7061:22;7040:53;:::i;:::-;7030:63;;6986:117;6781:329;;;;:::o;7116:327::-;7174:6;7223:2;7211:9;7202:7;7198:23;7194:32;7191:119;;;7229:79;;:::i;:::-;7191:119;7349:1;7374:52;7418:7;7409:6;7398:9;7394:22;7374:52;:::i;:::-;7364:62;;7320:116;7116:327;;;;:::o;7449:118::-;7536:24;7554:5;7536:24;:::i;:::-;7531:3;7524:37;7449:118;;:::o;7573:109::-;7654:21;7669:5;7654:21;:::i;:::-;7649:3;7642:34;7573:109;;:::o;7688:360::-;7774:3;7802:38;7834:5;7802:38;:::i;:::-;7856:70;7919:6;7914:3;7856:70;:::i;:::-;7849:77;;7935:52;7980:6;7975:3;7968:4;7961:5;7957:16;7935:52;:::i;:::-;8012:29;8034:6;8012:29;:::i;:::-;8007:3;8003:39;7996:46;;7778:270;7688:360;;;;:::o;8054:364::-;8142:3;8170:39;8203:5;8170:39;:::i;:::-;8225:71;8289:6;8284:3;8225:71;:::i;:::-;8218:78;;8305:52;8350:6;8345:3;8338:4;8331:5;8327:16;8305:52;:::i;:::-;8382:29;8404:6;8382:29;:::i;:::-;8377:3;8373:39;8366:46;;8146:272;8054:364;;;;:::o;8424:377::-;8530:3;8558:39;8591:5;8558:39;:::i;:::-;8613:89;8695:6;8690:3;8613:89;:::i;:::-;8606:96;;8711:52;8756:6;8751:3;8744:4;8737:5;8733:16;8711:52;:::i;:::-;8788:6;8783:3;8779:16;8772:23;;8534:267;8424:377;;;;:::o;8831:845::-;8934:3;8971:5;8965:12;9000:36;9026:9;9000:36;:::i;:::-;9052:89;9134:6;9129:3;9052:89;:::i;:::-;9045:96;;9172:1;9161:9;9157:17;9188:1;9183:137;;;;9334:1;9329:341;;;;9150:520;;9183:137;9267:4;9263:9;9252;9248:25;9243:3;9236:38;9303:6;9298:3;9294:16;9287:23;;9183:137;;9329:341;9396:38;9428:5;9396:38;:::i;:::-;9456:1;9470:154;9484:6;9481:1;9478:13;9470:154;;;9558:7;9552:14;9548:1;9543:3;9539:11;9532:35;9608:1;9599:7;9595:15;9584:26;;9506:4;9503:1;9499:12;9494:17;;9470:154;;;9653:6;9648:3;9644:16;9637:23;;9336:334;;9150:520;;8938:738;;8831:845;;;;:::o;9682:366::-;9824:3;9845:67;9909:2;9904:3;9845:67;:::i;:::-;9838:74;;9921:93;10010:3;9921:93;:::i;:::-;10039:2;10034:3;10030:12;10023:19;;9682:366;;;:::o;10054:::-;10196:3;10217:67;10281:2;10276:3;10217:67;:::i;:::-;10210:74;;10293:93;10382:3;10293:93;:::i;:::-;10411:2;10406:3;10402:12;10395:19;;10054:366;;;:::o;10426:::-;10568:3;10589:67;10653:2;10648:3;10589:67;:::i;:::-;10582:74;;10665:93;10754:3;10665:93;:::i;:::-;10783:2;10778:3;10774:12;10767:19;;10426:366;;;:::o;10798:::-;10940:3;10961:67;11025:2;11020:3;10961:67;:::i;:::-;10954:74;;11037:93;11126:3;11037:93;:::i;:::-;11155:2;11150:3;11146:12;11139:19;;10798:366;;;:::o;11170:::-;11312:3;11333:67;11397:2;11392:3;11333:67;:::i;:::-;11326:74;;11409:93;11498:3;11409:93;:::i;:::-;11527:2;11522:3;11518:12;11511:19;;11170:366;;;:::o;11542:::-;11684:3;11705:67;11769:2;11764:3;11705:67;:::i;:::-;11698:74;;11781:93;11870:3;11781:93;:::i;:::-;11899:2;11894:3;11890:12;11883:19;;11542:366;;;:::o;11914:::-;12056:3;12077:67;12141:2;12136:3;12077:67;:::i;:::-;12070:74;;12153:93;12242:3;12153:93;:::i;:::-;12271:2;12266:3;12262:12;12255:19;;11914:366;;;:::o;12286:::-;12428:3;12449:67;12513:2;12508:3;12449:67;:::i;:::-;12442:74;;12525:93;12614:3;12525:93;:::i;:::-;12643:2;12638:3;12634:12;12627:19;;12286:366;;;:::o;12658:::-;12800:3;12821:67;12885:2;12880:3;12821:67;:::i;:::-;12814:74;;12897:93;12986:3;12897:93;:::i;:::-;13015:2;13010:3;13006:12;12999:19;;12658:366;;;:::o;13030:::-;13172:3;13193:67;13257:2;13252:3;13193:67;:::i;:::-;13186:74;;13269:93;13358:3;13269:93;:::i;:::-;13387:2;13382:3;13378:12;13371:19;;13030:366;;;:::o;13402:::-;13544:3;13565:67;13629:2;13624:3;13565:67;:::i;:::-;13558:74;;13641:93;13730:3;13641:93;:::i;:::-;13759:2;13754:3;13750:12;13743:19;;13402:366;;;:::o;13774:118::-;13861:24;13879:5;13861:24;:::i;:::-;13856:3;13849:37;13774:118;;:::o;13898:115::-;13983:23;14000:5;13983:23;:::i;:::-;13978:3;13971:36;13898:115;;:::o;14019:589::-;14244:3;14266:95;14357:3;14348:6;14266:95;:::i;:::-;14259:102;;14378:95;14469:3;14460:6;14378:95;:::i;:::-;14371:102;;14490:92;14578:3;14569:6;14490:92;:::i;:::-;14483:99;;14599:3;14592:10;;14019:589;;;;;;:::o;14614:222::-;14707:4;14745:2;14734:9;14730:18;14722:26;;14758:71;14826:1;14815:9;14811:17;14802:6;14758:71;:::i;:::-;14614:222;;;;:::o;14842:640::-;15037:4;15075:3;15064:9;15060:19;15052:27;;15089:71;15157:1;15146:9;15142:17;15133:6;15089:71;:::i;:::-;15170:72;15238:2;15227:9;15223:18;15214:6;15170:72;:::i;:::-;15252;15320:2;15309:9;15305:18;15296:6;15252:72;:::i;:::-;15371:9;15365:4;15361:20;15356:2;15345:9;15341:18;15334:48;15399:76;15470:4;15461:6;15399:76;:::i;:::-;15391:84;;14842:640;;;;;;;:::o;15488:210::-;15575:4;15613:2;15602:9;15598:18;15590:26;;15626:65;15688:1;15677:9;15673:17;15664:6;15626:65;:::i;:::-;15488:210;;;;:::o;15704:313::-;15817:4;15855:2;15844:9;15840:18;15832:26;;15904:9;15898:4;15894:20;15890:1;15879:9;15875:17;15868:47;15932:78;16005:4;15996:6;15932:78;:::i;:::-;15924:86;;15704:313;;;;:::o;16023:419::-;16189:4;16227:2;16216:9;16212:18;16204:26;;16276:9;16270:4;16266:20;16262:1;16251:9;16247:17;16240:47;16304:131;16430:4;16304:131;:::i;:::-;16296:139;;16023:419;;;:::o;16448:::-;16614:4;16652:2;16641:9;16637:18;16629:26;;16701:9;16695:4;16691:20;16687:1;16676:9;16672:17;16665:47;16729:131;16855:4;16729:131;:::i;:::-;16721:139;;16448:419;;;:::o;16873:::-;17039:4;17077:2;17066:9;17062:18;17054:26;;17126:9;17120:4;17116:20;17112:1;17101:9;17097:17;17090:47;17154:131;17280:4;17154:131;:::i;:::-;17146:139;;16873:419;;;:::o;17298:::-;17464:4;17502:2;17491:9;17487:18;17479:26;;17551:9;17545:4;17541:20;17537:1;17526:9;17522:17;17515:47;17579:131;17705:4;17579:131;:::i;:::-;17571:139;;17298:419;;;:::o;17723:::-;17889:4;17927:2;17916:9;17912:18;17904:26;;17976:9;17970:4;17966:20;17962:1;17951:9;17947:17;17940:47;18004:131;18130:4;18004:131;:::i;:::-;17996:139;;17723:419;;;:::o;18148:::-;18314:4;18352:2;18341:9;18337:18;18329:26;;18401:9;18395:4;18391:20;18387:1;18376:9;18372:17;18365:47;18429:131;18555:4;18429:131;:::i;:::-;18421:139;;18148:419;;;:::o;18573:::-;18739:4;18777:2;18766:9;18762:18;18754:26;;18826:9;18820:4;18816:20;18812:1;18801:9;18797:17;18790:47;18854:131;18980:4;18854:131;:::i;:::-;18846:139;;18573:419;;;:::o;18998:::-;19164:4;19202:2;19191:9;19187:18;19179:26;;19251:9;19245:4;19241:20;19237:1;19226:9;19222:17;19215:47;19279:131;19405:4;19279:131;:::i;:::-;19271:139;;18998:419;;;:::o;19423:::-;19589:4;19627:2;19616:9;19612:18;19604:26;;19676:9;19670:4;19666:20;19662:1;19651:9;19647:17;19640:47;19704:131;19830:4;19704:131;:::i;:::-;19696:139;;19423:419;;;:::o;19848:::-;20014:4;20052:2;20041:9;20037:18;20029:26;;20101:9;20095:4;20091:20;20087:1;20076:9;20072:17;20065:47;20129:131;20255:4;20129:131;:::i;:::-;20121:139;;19848:419;;;:::o;20273:::-;20439:4;20477:2;20466:9;20462:18;20454:26;;20526:9;20520:4;20516:20;20512:1;20501:9;20497:17;20490:47;20554:131;20680:4;20554:131;:::i;:::-;20546:139;;20273:419;;;:::o;20698:222::-;20791:4;20829:2;20818:9;20814:18;20806:26;;20842:71;20910:1;20899:9;20895:17;20886:6;20842:71;:::i;:::-;20698:222;;;;:::o;20926:218::-;21017:4;21055:2;21044:9;21040:18;21032:26;;21068:69;21134:1;21123:9;21119:17;21110:6;21068:69;:::i;:::-;20926:218;;;;:::o;21150:129::-;21184:6;21211:20;;:::i;:::-;21201:30;;21240:33;21268:4;21260:6;21240:33;:::i;:::-;21150:129;;;:::o;21285:75::-;21318:6;21351:2;21345:9;21335:19;;21285:75;:::o;21366:307::-;21427:4;21517:18;21509:6;21506:30;21503:56;;;21539:18;;:::i;:::-;21503:56;21577:29;21599:6;21577:29;:::i;:::-;21569:37;;21661:4;21655;21651:15;21643:23;;21366:307;;;:::o;21679:141::-;21728:4;21751:3;21743:11;;21774:3;21771:1;21764:14;21808:4;21805:1;21795:18;21787:26;;21679:141;;;:::o;21826:98::-;21877:6;21911:5;21905:12;21895:22;;21826:98;;;:::o;21930:99::-;21982:6;22016:5;22010:12;22000:22;;21930:99;;;:::o;22035:168::-;22118:11;22152:6;22147:3;22140:19;22192:4;22187:3;22183:14;22168:29;;22035:168;;;;:::o;22209:169::-;22293:11;22327:6;22322:3;22315:19;22367:4;22362:3;22358:14;22343:29;;22209:169;;;;:::o;22384:148::-;22486:11;22523:3;22508:18;;22384:148;;;;:::o;22538:305::-;22578:3;22597:20;22615:1;22597:20;:::i;:::-;22592:25;;22631:20;22649:1;22631:20;:::i;:::-;22626:25;;22785:1;22717:66;22713:74;22710:1;22707:81;22704:107;;;22791:18;;:::i;:::-;22704:107;22835:1;22832;22828:9;22821:16;;22538:305;;;;:::o;22849:185::-;22889:1;22906:20;22924:1;22906:20;:::i;:::-;22901:25;;22940:20;22958:1;22940:20;:::i;:::-;22935:25;;22979:1;22969:35;;22984:18;;:::i;:::-;22969:35;23026:1;23023;23019:9;23014:14;;22849:185;;;;:::o;23040:348::-;23080:7;23103:20;23121:1;23103:20;:::i;:::-;23098:25;;23137:20;23155:1;23137:20;:::i;:::-;23132:25;;23325:1;23257:66;23253:74;23250:1;23247:81;23242:1;23235:9;23228:17;23224:105;23221:131;;;23332:18;;:::i;:::-;23221:131;23380:1;23377;23373:9;23362:20;;23040:348;;;;:::o;23394:191::-;23434:4;23454:20;23472:1;23454:20;:::i;:::-;23449:25;;23488:20;23506:1;23488:20;:::i;:::-;23483:25;;23527:1;23524;23521:8;23518:34;;;23532:18;;:::i;:::-;23518:34;23577:1;23574;23570:9;23562:17;;23394:191;;;;:::o;23591:96::-;23628:7;23657:24;23675:5;23657:24;:::i;:::-;23646:35;;23591:96;;;:::o;23693:90::-;23727:7;23770:5;23763:13;23756:21;23745:32;;23693:90;;;:::o;23789:149::-;23825:7;23865:66;23858:5;23854:78;23843:89;;23789:149;;;:::o;23944:126::-;23981:7;24021:42;24014:5;24010:54;23999:65;;23944:126;;;:::o;24076:77::-;24113:7;24142:5;24131:16;;24076:77;;;:::o;24159:93::-;24195:7;24235:10;24228:5;24224:22;24213:33;;24159:93;;;:::o;24258:101::-;24294:7;24334:18;24327:5;24323:30;24312:41;;24258:101;;;:::o;24365:154::-;24449:6;24444:3;24439;24426:30;24511:1;24502:6;24497:3;24493:16;24486:27;24365:154;;;:::o;24525:307::-;24593:1;24603:113;24617:6;24614:1;24611:13;24603:113;;;24702:1;24697:3;24693:11;24687:18;24683:1;24678:3;24674:11;24667:39;24639:2;24636:1;24632:10;24627:15;;24603:113;;;24734:6;24731:1;24728:13;24725:101;;;24814:1;24805:6;24800:3;24796:16;24789:27;24725:101;24574:258;24525:307;;;:::o;24838:320::-;24882:6;24919:1;24913:4;24909:12;24899:22;;24966:1;24960:4;24956:12;24987:18;24977:81;;25043:4;25035:6;25031:17;25021:27;;24977:81;25105:2;25097:6;25094:14;25074:18;25071:38;25068:84;;;25124:18;;:::i;:::-;25068:84;24889:269;24838:320;;;:::o;25164:281::-;25247:27;25269:4;25247:27;:::i;:::-;25239:6;25235:40;25377:6;25365:10;25362:22;25341:18;25329:10;25326:34;25323:62;25320:88;;;25388:18;;:::i;:::-;25320:88;25428:10;25424:2;25417:22;25207:238;25164:281;;:::o;25451:233::-;25490:3;25513:24;25531:5;25513:24;:::i;:::-;25504:33;;25559:66;25552:5;25549:77;25546:103;;;25629:18;;:::i;:::-;25546:103;25676:1;25669:5;25665:13;25658:20;;25451:233;;;:::o;25690:176::-;25722:1;25739:20;25757:1;25739:20;:::i;:::-;25734:25;;25773:20;25791:1;25773:20;:::i;:::-;25768:25;;25812:1;25802:35;;25817:18;;:::i;:::-;25802:35;25858:1;25855;25851:9;25846:14;;25690:176;;;;:::o;25872:180::-;25920:77;25917:1;25910:88;26017:4;26014:1;26007:15;26041:4;26038:1;26031:15;26058:180;26106:77;26103:1;26096:88;26203:4;26200:1;26193:15;26227:4;26224:1;26217:15;26244:180;26292:77;26289:1;26282:88;26389:4;26386:1;26379:15;26413:4;26410:1;26403:15;26430:180;26478:77;26475:1;26468:88;26575:4;26572:1;26565:15;26599:4;26596:1;26589:15;26616:180;26664:77;26661:1;26654:88;26761:4;26758:1;26751:15;26785:4;26782:1;26775:15;26802:117;26911:1;26908;26901:12;26925:117;27034:1;27031;27024:12;27048:117;27157:1;27154;27147:12;27171:117;27280:1;27277;27270:12;27294:117;27403:1;27400;27393:12;27417:117;27526:1;27523;27516:12;27540:102;27581:6;27632:2;27628:7;27623:2;27616:5;27612:14;27608:28;27598:38;;27540:102;;;:::o;27648:221::-;27788:34;27784:1;27776:6;27772:14;27765:58;27857:4;27852:2;27844:6;27840:15;27833:29;27648:221;:::o;27875:220::-;28015:34;28011:1;28003:6;27999:14;27992:58;28084:3;28079:2;28071:6;28067:15;28060:28;27875:220;:::o;28101:225::-;28241:34;28237:1;28229:6;28225:14;28218:58;28310:8;28305:2;28297:6;28293:15;28286:33;28101:225;:::o;28332:168::-;28472:20;28468:1;28460:6;28456:14;28449:44;28332:168;:::o;28506:180::-;28646:32;28642:1;28634:6;28630:14;28623:56;28506:180;:::o;28692:168::-;28832:20;28828:1;28820:6;28816:14;28809:44;28692:168;:::o;28866:178::-;29006:30;29002:1;28994:6;28990:14;28983:54;28866:178;:::o;29050:171::-;29190:23;29186:1;29178:6;29174:14;29167:47;29050:171;:::o;29227:182::-;29367:34;29363:1;29355:6;29351:14;29344:58;29227:182;:::o;29415:234::-;29555:34;29551:1;29543:6;29539:14;29532:58;29624:17;29619:2;29611:6;29607:15;29600:42;29415:234;:::o;29655:172::-;29795:24;29791:1;29783:6;29779:14;29772:48;29655:172;:::o;29833:122::-;29906:24;29924:5;29906:24;:::i;:::-;29899:5;29896:35;29886:63;;29945:1;29942;29935:12;29886:63;29833:122;:::o;29961:116::-;30031:21;30046:5;30031:21;:::i;:::-;30024:5;30021:32;30011:60;;30067:1;30064;30057:12;30011:60;29961:116;:::o;30083:120::-;30155:23;30172:5;30155:23;:::i;:::-;30148:5;30145:34;30135:62;;30193:1;30190;30183:12;30135:62;30083:120;:::o;30209:122::-;30282:24;30300:5;30282:24;:::i;:::-;30275:5;30272:35;30262:63;;30321:1;30318;30311:12;30262:63;30209:122;:::o;30337:120::-;30409:23;30426:5;30409:23;:::i;:::-;30402:5;30399:34;30389:62;;30447:1;30444;30437:12;30389:62;30337:120;:::o

Swarm Source

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