ETH Price: $3,158.66 (+2.87%)
Gas: 1 Gwei

Token

BirbScream (B$)
 

Overview

Max Total Supply

4,069 B$

Holders

481

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
10 B$
0x98a0c1e5e4dbcc3be2c02ace7efe19e4d79a882b
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:
BirbScream

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-11
*/

// SPDX-License-Identifier: MIT
//                          T h e  B I r B  S c r E A m !   
//https://www.birbscream.wtf/
//
//   /##*   *####*        *######* /%,             *######* *######,        *##/  
//   /##*   *(/,            ,**, /@@@@@@@@@@@%,    ,/(####* *######,        *##/  
//   /##*    .            *%%&&&%(,,,,,,,,**/(%&&&&*  ..*#* *######((((((((((##/  
//   /#(*            .,,/&%#((///*.........,,**///(#&&#.    *(/(/(#,        *##/  
//   //.            .#@@@@&#/**,,,,,,,,/(((#((((/*,/(##(((,      .,.        *##/  
//                  .#@@@@&%#(/***,***/#&@@@@@@&%(****/&@@/                 *##/  
//             .,(&@@@@@@@@@@&(/**,/#&&(*.,**,,*/%@#/*,,**#&%#/****#&&#.    *##/  
//      *%&%*  *&&#((&@@@@@@@@%(/*,/#&&(, /@&#**/%@#/*,,.,,,(%&@@@@(,/#%(    ..   
//   ./&%***%@&%#((((&@@@@@@@@%((/,/#&&(,  ... .*#@#*,....*///(#&@@/ ,(&#         
//  .#@@#..,#@&#////(&@@@@@@@@(/*,,,*/(((#######((/*,,...,*////(&@@/ .*(#((#, *,  
//  .(&@#.  (%#/**//(&@@@@@@@%/,,.....,/#%%%%&%%(*.......,**//*/#%%* .,*(%&@*     
//  .(&@#.  ,****/(##&@@@&%(//***,,,,,,................,,,,**//*,..  .,*(#%%(**,  
//  .(&@#.  ,***,(&@@@@@%/*******,,,,,,,,.............,,******/*.    .,***,,#@@#. 
//  .(&@%*,,*(/**(&@@#///***************,,,,,*********,********,.     .,,,,,#@@#. 
//  .(&@%///////*/(((/*****************************************,.   ....*(#%/,,.  
//  .(&@&(((((//************************************************,,,,,,,,*#&@*     
//  .(&@&((/////********************************************///////*,,*/#%#/. ,,  
//  .(&@&(((/***********************************************///(///*,/#@#.  *(#/  
//      *@@@(****/////*****************************************//((%@%/.          
//      *@@@#///*//((////*********,***********//////***********(%&&(,             
//          (%%(**////(/////////////////**//////////***/////(#%%###,  ,(#####(,   
//          ,(#%%(/**//////////((((((((////(((((////***//(#%%%(*     ,,*,*,*(##/  
//           .(&@%///////*****///((((((((/(((((((((///*///%@&#.  ,(,        *##/  
//          ..   *&@&#//(((//****/(((((((((((((((((%@@@@@@/   .*(##,        *##/  
//   *//,   *((*  ,,*#@@@@&#(//////////////((#&@@@@@@@%*,,.   ...*#(////////(##/  
//  .#@@@@@@*       .#@@%(((/(%&@@@@@@@@@@@@&%(((((%@@%.         /@@@@@@@@@@@@@#. 
//   /######,        ,/*(%#(//%@@%//////#@&%##//(#%(*/*          ,#############/  
//   ,/////*.           *@&#((%&@(      *@%//(((#&@/             ./////////////*  
//   *//////.             /&@%,         ,(((####(*   ,,,,,,...,,.,///////((((((*  
//   *((((((,             *%%#,           /@@%,    *#%%%%%#((((((((((((((((((((*  
//                                                                                


pragma solidity ^0.8.4;

/**
 * @dev Interface of an ERC721A compliant contract.
 */
interface IERC721A {
    /**
     * 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();

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

    /**
     * @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);

    // ==============================
    //            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);

    // ==============================
    //            IERC721
    // ==============================

    /**
     * @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);

    // ==============================
    //        IERC721Metadata
    // ==============================

    /**
     * @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: contracts/ERC721A.sol


// ERC721A Contracts v4.0.0
// Creator: Chiru Labs

pragma solidity ^0.8.4;


/**
 * @dev ERC721 token receiver interface.
 */
interface ERC721A__IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

/**
 * @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 IERC721A {
    // Mask of an entry in packed address data.
    uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;

    // The bit position of `numberMinted` in packed address data.
    uint256 private constant BITPOS_NUMBER_MINTED = 64;

    // The bit position of `numberBurned` in packed address data.
    uint256 private constant BITPOS_NUMBER_BURNED = 128;

    // The bit position of `aux` in packed address data.
    uint256 private constant BITPOS_AUX = 192;

    // Mask of all 256 bits in packed address data except the 64 bits for `aux`.
    uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;

    // The bit position of `startTimestamp` in packed ownership.
    uint256 private constant BITPOS_START_TIMESTAMP = 160;

    // The bit mask of the `burned` bit in packed ownership.
    uint256 private constant BITMASK_BURNED = 1 << 224;
    
    // The bit position of the `nextInitialized` bit in packed ownership.
    uint256 private constant BITPOS_NEXT_INITIALIZED = 225;

    // The bit mask of the `nextInitialized` bit in packed ownership.
    uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225;

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

    // The number of tokens burned.
    uint256 private _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 `_packedOwnershipOf` implementation for details.
    //
    // Bits Layout:
    // - [0..159]   `addr`
    // - [160..223] `startTimestamp`
    // - [224]      `burned`
    // - [225]      `nextInitialized`
    mapping(uint256 => uint256) private _packedOwnerships;

    // Mapping owner address to address data.
    //
    // Bits Layout:
    // - [0..63]    `balance`
    // - [64..127]  `numberMinted`
    // - [128..191] `numberBurned`
    // - [192..255] `aux`
    mapping(address => uint256) private _packedAddressData;

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

    /**
     * @dev Returns the starting token ID. 
     * To change the starting token ID, please override this function.
     */
    function _startTokenId() internal view virtual returns (uint256) {
        return 0;
    }

    /**
     * @dev Returns the next token ID to be minted.
     */
    function _nextTokenId() internal view returns (uint256) {
        return _currentIndex;
    }

    /**
     * @dev Returns the total number of tokens in existence.
     * Burned tokens will reduce the count. 
     * To get the total number of tokens minted, please see `_totalMinted`.
     */
    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();
        }
    }

    /**
     * @dev 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 Returns the total number of tokens burned.
     */
    function _totalBurned() internal view returns (uint256) {
        return _burnCounter;
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        // The interface IDs are constants representing the first 4 bytes of the XOR of
        // all function selectors in the interface. See: https://eips.ethereum.org/EIPS/eip-165
        // e.g. `bytes4(i.functionA.selector ^ i.functionB.selector ^ ...)`
        return
            interfaceId == 0x01ffc9a7 || // ERC165 interface ID for ERC165.
            interfaceId == 0x80ac58cd || // ERC165 interface ID for ERC721.
            interfaceId == 0x5b5e139f; // ERC165 interface ID for ERC721Metadata.
    }

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

    /**
     * Returns the number of tokens minted by `owner`.
     */
    function _numberMinted(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> BITPOS_NUMBER_MINTED) & BITMASK_ADDRESS_DATA_ENTRY;
    }

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

    /**
     * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used).
     */
    function _getAux(address owner) internal view returns (uint64) {
        return uint64(_packedAddressData[owner] >> BITPOS_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 {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        assembly { // Cast aux without masking.
            auxCasted := aux
        }
        packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }

    /**
     * Returns the packed ownership data of `tokenId`.
     */
    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
        uint256 curr = tokenId;

        unchecked {
            if (_startTokenId() <= curr)
                if (curr < _currentIndex) {
                    uint256 packed = _packedOwnerships[curr];
                    // If not burned.
                    if (packed & BITMASK_BURNED == 0) {
                        // 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.
                        //
                        // We can directly compare the packed value.
                        // If the address is zero, packed is zero.
                        while (packed == 0) {
                            packed = _packedOwnerships[--curr];
                        }
                        return packed;
                    }
                }
        }
        revert OwnerQueryForNonexistentToken();
    }

    /**
     * Returns the unpacked `TokenOwnership` struct from `packed`.
     */
    function _unpackedOwnership(uint256 packed) private pure returns (TokenOwnership memory ownership) {
        ownership.addr = address(uint160(packed));
        ownership.startTimestamp = uint64(packed >> BITPOS_START_TIMESTAMP);
        ownership.burned = packed & BITMASK_BURNED != 0;
    }

    /**
     * Returns the unpacked `TokenOwnership` struct at `index`.
     */
    function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

    /**
     * @dev Initializes the ownership slot minted at `index` for efficiency purposes.
     */
    function _initializeOwnershipAt(uint256 index) internal {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }

    /**
     * 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) {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }

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

    /**
     * @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, _toString(tokenId))) : '';
    }

    /**
     * @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 Casts the address to uint256 without masking.
     */
    function _addressToUint256(address value) private pure returns (uint256 result) {
        assembly {
            result := value
        }
    }

    /**
     * @dev Casts the boolean to uint256 without branching.
     */
    function _boolToUint256(bool value) private pure returns (uint256 result) {
        assembly {
            result := value
        }
    }

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

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

        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    /**
     * @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 == _msgSenderERC721A()) revert ApproveToCaller();

        _operatorApprovals[_msgSenderERC721A()][operator] = approved;
        emit ApprovalForAll(_msgSenderERC721A(), 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.code.length != 0)
            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 && // If within bounds,
            _packedOwnerships[tokenId] & BITMASK_BURNED == 0; // and not 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 {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the balance and number minted.
            _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);

            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED);

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

            if (to.code.length != 0) {
                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 {
            // Updates:
            // - `balance += quantity`.
            // - `numberMinted += quantity`.
            //
            // We can directly add to the balance and number minted.
            _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);

            // Updates:
            // - `address` to the owner.
            // - `startTimestamp` to the timestamp of minting.
            // - `burned` to `false`.
            // - `nextInitialized` to `quantity == 1`.
            _packedOwnerships[startTokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                (_boolToUint256(quantity == 1) << BITPOS_NEXT_INITIALIZED);

            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 {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner();

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

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

        _beforeTokenTransfers(from, to, tokenId, 1);

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

        // 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 {
            // We can directly increment and decrement the balances.
            --_packedAddressData[from]; // Updates: `balance -= 1`.
            ++_packedAddressData[to]; // Updates: `balance += 1`.

            // Updates:
            // - `address` to the next owner.
            // - `startTimestamp` to the timestamp of transfering.
            // - `burned` to `false`.
            // - `nextInitialized` to `true`.
            _packedOwnerships[tokenId] =
                _addressToUint256(to) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                BITMASK_NEXT_INITIALIZED;

            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        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 {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);

        address from = address(uint160(prevOwnershipPacked));

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

            if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved();
        }

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

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

        // 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 {
            // Updates:
            // - `balance -= 1`.
            // - `numberBurned += 1`.
            //
            // We can directly decrement the balance, and increment the number burned.
            // This is equivalent to `packed -= 1; packed += 1 << BITPOS_NUMBER_BURNED;`.
            _packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1;

            // Updates:
            // - `address` to the last owner.
            // - `startTimestamp` to the timestamp of burning.
            // - `burned` to `true`.
            // - `nextInitialized` to `true`.
            _packedOwnerships[tokenId] =
                _addressToUint256(from) |
                (block.timestamp << BITPOS_START_TIMESTAMP) |
                BITMASK_BURNED | 
                BITMASK_NEXT_INITIALIZED;

            // If the next slot may not have been initialized (i.e. `nextInitialized == false`) .
            if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                // If the next slot's address is zero and not burned (i.e. packed value is zero).
                if (_packedOwnerships[nextTokenId] == 0) {
                    // If the next slot is within bounds.
                    if (nextTokenId != _currentIndex) {
                        // Initialize the next slot to maintain correctness for `ownerOf(tokenId + 1)`.
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }

        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 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 ERC721A__IERC721Receiver(to).onERC721Received(_msgSenderERC721A(), from, tokenId, _data) returns (
            bytes4 retval
        ) {
            return retval == ERC721A__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 {}

    /**
     * @dev Returns the message sender (defaults to `msg.sender`).
     *
     * If you are writing GSN compatible contracts, you need to override this function.
     */
    function _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function _toString(uint256 value) internal pure returns (string memory ptr) {
        assembly {
            // The maximum value of a uint256 contains 78 digits (1 byte per digit), 
            // but we allocate 128 bytes to keep the free memory pointer 32-byte word aliged.
            // We will need 1 32-byte word to store the length, 
            // and 3 32-byte words to store a maximum of 78 digits. Total: 32 + 3 * 32 = 128.
            ptr := add(mload(0x40), 128)
            // Update the free memory pointer to allocate.
            mstore(0x40, ptr)

            // Cache the end of the memory to calculate the length later.
            let end := ptr

            // We write the string from the rightmost digit to the leftmost digit.
            // The following is essentially a do-while loop that also handles the zero case.
            // Costs a bit more than early returning for the zero case,
            // but cheaper in terms of deployment and overall runtime costs.
            for { 
                // Initialize and perform the first pass without check.
                let temp := value
                // Move the pointer 1 byte leftwards to point to an empty character slot.
                ptr := sub(ptr, 1)
                // Write the character to the pointer. 48 is the ASCII index of '0'.
                mstore8(ptr, add(48, mod(temp, 10)))
                temp := div(temp, 10)
            } temp { 
                // Keep dividing `temp` until zero.
                temp := div(temp, 10)
            } { // Body of the for loop.
                ptr := sub(ptr, 1)
                mstore8(ptr, add(48, mod(temp, 10)))
            }
            
            let length := sub(end, ptr)
            // Move the pointer 32 bytes leftwards to make room for the length.
            ptr := sub(ptr, 32)
            // Store the length.
            mstore(ptr, length)
        }
    }
}
// File: contracts/Strings.sol


// 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: contracts/ReentrancyGuard.sol


// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)

pragma solidity ^0.8.0;

/**
 * @dev Contract module that helps prevent reentrant calls to a function.
 *
 * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
 * available, which can be applied to functions to make sure there are no nested
 * (reentrant) calls to them.
 *
 * Note that because there is a single `nonReentrant` guard, functions marked as
 * `nonReentrant` may not call one another. This can be worked around by making
 * those functions `private`, and then adding `external` `nonReentrant` entry
 * points to them.
 *
 * TIP: If you would like to learn more about reentrancy and alternative ways
 * to protect against it, check out our blog post
 * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
 */
abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        // On the first call to nonReentrant, _notEntered will be true
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");

        // Any calls to nonReentrant after this point will fail
        _status = _ENTERED;

        _;

        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = _NOT_ENTERED;
    }
}
// File: contracts/Context.sol


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

pragma solidity ^0.8.0;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}
// File: contracts/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


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

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _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: contracts/BirbScream.sol

pragma solidity >=0.8.0;

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

  string public uriPrefix = '';
  string public uriSuffix = '.json';
  string public hiddenMetadataUri;

  // mint config
  uint256 public cost = 0.0069 ether; // 6900000000000000 wei
  uint256 public maxSupply = 4069;
  uint256 public maxMintAmount = 10;
  uint256 public maxPerTxn = 10;
  uint256 public maxFreeAmt = 1; // 1 free per wallet

  bool public revealed = false;
  bool public paused = true;

  constructor(
    string memory _tokenName,
    string memory _tokenSymbol,
    string memory _hiddenMetadataUri //https://birbscream.sfo3.digitaloceanspaces.com/unrevealed.json
  ) ERC721A(_tokenName, _tokenSymbol) {
    setHiddenMetadataUri(_hiddenMetadataUri);  
  }

  modifier mintCompliance(uint256 _mintAmount) {
    require(!paused, "Sale is paused...");
    require(totalSupply() + _mintAmount <= maxSupply, "Sold out!");
    require(_mintAmount > 0 && _mintAmount <= maxPerTxn, "Max birbs per transaction exceeded...");
    require(tx.origin == msg.sender, "Contract minters gets no birbs...");
    require(
      _mintAmount > 0 && numberMinted(msg.sender) + _mintAmount <= maxMintAmount,
       " max birbs reached..."
    );
    _;
  }

  modifier mintPriceCompliance(uint256 _mintAmount) {
    uint256 costToSubtract = 0;
    
    if (numberMinted(msg.sender) < maxFreeAmt) {
      uint256 freeMintsLeft = maxFreeAmt - numberMinted(msg.sender);
      costToSubtract = cost * freeMintsLeft;
    }
   
    require(msg.value >= cost * _mintAmount - costToSubtract, "Insufficient funds.");
    _;
  }

  function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) mintPriceCompliance(_mintAmount) {
    _safeMint(_msgSender(), _mintAmount);
  }
  
  function mintForAddress(uint256 _mintAmount, address _receiver) public onlyOwner {
    require(totalSupply() + _mintAmount <= maxSupply, "Max supply exceeded!");
    _safeMint(_receiver, _mintAmount);
  }

  function _startTokenId() internal view virtual override returns (uint256) {
    return 1;
  }

  function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) {
    require(_exists(_tokenId), "ERC721Metadata: URI query for nonexistent token");

    if (revealed == false) {
      return hiddenMetadataUri;
    }

    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix))
        : '';
  }

  function setCost(uint256 _cost) public onlyOwner {
    cost = _cost;
  }

  function setMaxMintAmount(uint256 _maxMintAmount) public onlyOwner {
    maxMintAmount = _maxMintAmount;
  }

  function setRevealed(bool _state) public onlyOwner {
    revealed = _state;
  }

   function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner {
    hiddenMetadataUri = _hiddenMetadataUri;
  }

  function setUriPrefix(string memory _uriPrefix) public onlyOwner {
    uriPrefix = _uriPrefix;
  }

  function setUriSuffix(string memory _uriSuffix) public onlyOwner {
    uriSuffix = _uriSuffix;
  }

  function setPaused(bool _state) public onlyOwner {
    paused = _state;
  }

  function numberMinted(address owner) public view returns (uint256) {
    return _numberMinted(owner);
  }

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

  function withdraw() public onlyOwner nonReentrant {
    uint256 scbalance = address(this).balance * 100 / 100;

    (bool dev, ) = payable(0x77D7EEA7CE5A13eB1e20f1DA9Dc86135945d1c8f).call{value: scbalance}('');
    require(dev);

  }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"_tokenName","type":"string"},{"internalType":"string","name":"_tokenSymbol","type":"string"},{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"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":[{"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":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFreeAmt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerTxn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmount","type":"uint256"}],"name":"setMaxMintAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260405180602001604052806000815250600a90805190602001906200002b9291906200033d565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600b9080519060200190620000799291906200033d565b506618838370f34000600d55610fe5600e55600a600f55600a60105560016011556000601260006101000a81548160ff0219169083151502179055506001601260016101000a81548160ff021916908315150217905550348015620000dd57600080fd5b50604051620043633803806200436383398181016040528101906200010391906200046b565b828281600290805190602001906200011d9291906200033d565b508060039080519060200190620001369291906200033d565b50620001476200019160201b60201c565b60008190555050506200016f620001636200019a60201b60201c565b620001a260201b60201c565b600160098190555062000188816200026860201b60201c565b5050506200072b565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002786200019a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200029e6200031360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002f7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ee906200054b565b60405180910390fd5b80600c90805190602001906200030f9291906200033d565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200034b9062000613565b90600052602060002090601f0160209004810192826200036f5760008555620003bb565b82601f106200038a57805160ff1916838001178555620003bb565b82800160010185558215620003bb579182015b82811115620003ba5782518255916020019190600101906200039d565b5b509050620003ca9190620003ce565b5090565b5b80821115620003e9576000816000905550600101620003cf565b5090565b600062000404620003fe8462000596565b6200056d565b905082815260208101848484011115620004235762000422620006e2565b5b62000430848285620005dd565b509392505050565b600082601f83011262000450576200044f620006dd565b5b815162000462848260208601620003ed565b91505092915050565b600080600060608486031215620004875762000486620006ec565b5b600084015167ffffffffffffffff811115620004a857620004a7620006e7565b5b620004b68682870162000438565b935050602084015167ffffffffffffffff811115620004da57620004d9620006e7565b5b620004e88682870162000438565b925050604084015167ffffffffffffffff8111156200050c576200050b620006e7565b5b6200051a8682870162000438565b9150509250925092565b600062000533602083620005cc565b9150620005408262000702565b602082019050919050565b60006020820190508181036000830152620005668162000524565b9050919050565b6000620005796200058c565b905062000587828262000649565b919050565b6000604051905090565b600067ffffffffffffffff821115620005b457620005b3620006ae565b5b620005bf82620006f1565b9050602081019050919050565b600082825260208201905092915050565b60005b83811015620005fd578082015181840152602081019050620005e0565b838111156200060d576000848401525b50505050565b600060028204905060018216806200062c57607f821691505b602082108114156200064357620006426200067f565b5b50919050565b6200065482620006f1565b810181811067ffffffffffffffff82111715620006765762000675620006ae565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b613c28806200073b6000396000f3fe6080604052600436106102255760003560e01c806362b99ad411610123578063a45ba8e7116100ab578063dc33e6811161006f578063dc33e681146107c2578063e0a80853146107ff578063e985e9c514610828578063efbd73f414610865578063f2fde38b1461088e57610225565b8063a45ba8e7146106db578063b88d4fde14610706578063c7504dde1461072f578063c87b56dd1461075a578063d5abeb011461079757610225565b80637ec4a659116100f25780637ec4a659146106175780638da5cb5b1461064057806395d89b411461066b578063a0712d6814610696578063a22cb465146106b257610225565b806362b99ad41461055b5780636352211e1461058657806370a08231146105c3578063715018a61461060057610225565b8063239c70ae116101b157806344a0d68a1161017557806344a0d68a146104885780634fdd43cb146104b157806351830227146104da5780635503a0e8146105055780635c975abb1461053057610225565b8063239c70ae146103c957806323b872dd146103f45780633cb519941461041d5780633ccfd60b1461044857806342842e0e1461045f57610225565b8063095ea7b3116101f8578063095ea7b3146102f857806313faede61461032157806316ba10e01461034c57806316c38b3c1461037557806318160ddd1461039e57610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063088a4ed0146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190612e2e565b6108b7565b60405161025e91906132de565b60405180910390f35b34801561027357600080fd5b5061027c610949565b60405161028991906132f9565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b49190612ed1565b6109db565b6040516102c69190613277565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f19190612ed1565b610a57565b005b34801561030457600080fd5b5061031f600480360381019061031a9190612dc1565b610add565b005b34801561032d57600080fd5b50610336610c84565b604051610343919061347b565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e9190612e88565b610c8a565b005b34801561038157600080fd5b5061039c60048036038101906103979190612e01565b610d20565b005b3480156103aa57600080fd5b506103b3610db9565b6040516103c0919061347b565b60405180910390f35b3480156103d557600080fd5b506103de610dd0565b6040516103eb919061347b565b60405180910390f35b34801561040057600080fd5b5061041b60048036038101906104169190612cab565b610dd6565b005b34801561042957600080fd5b50610432610de6565b60405161043f919061347b565b60405180910390f35b34801561045457600080fd5b5061045d610dec565b005b34801561046b57600080fd5b5061048660048036038101906104819190612cab565b610f68565b005b34801561049457600080fd5b506104af60048036038101906104aa9190612ed1565b610f88565b005b3480156104bd57600080fd5b506104d860048036038101906104d39190612e88565b61100e565b005b3480156104e657600080fd5b506104ef6110a4565b6040516104fc91906132de565b60405180910390f35b34801561051157600080fd5b5061051a6110b7565b60405161052791906132f9565b60405180910390f35b34801561053c57600080fd5b50610545611145565b60405161055291906132de565b60405180910390f35b34801561056757600080fd5b50610570611158565b60405161057d91906132f9565b60405180910390f35b34801561059257600080fd5b506105ad60048036038101906105a89190612ed1565b6111e6565b6040516105ba9190613277565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e59190612c3e565b6111f8565b6040516105f7919061347b565b60405180910390f35b34801561060c57600080fd5b506106156112b1565b005b34801561062357600080fd5b5061063e60048036038101906106399190612e88565b611339565b005b34801561064c57600080fd5b506106556113cf565b6040516106629190613277565b60405180910390f35b34801561067757600080fd5b506106806113f9565b60405161068d91906132f9565b60405180910390f35b6106b060048036038101906106ab9190612ed1565b61148b565b005b3480156106be57600080fd5b506106d960048036038101906106d49190612d81565b611709565b005b3480156106e757600080fd5b506106f0611881565b6040516106fd91906132f9565b60405180910390f35b34801561071257600080fd5b5061072d60048036038101906107289190612cfe565b61190f565b005b34801561073b57600080fd5b50610744611982565b604051610751919061347b565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c9190612ed1565b611988565b60405161078e91906132f9565b60405180910390f35b3480156107a357600080fd5b506107ac611ae1565b6040516107b9919061347b565b60405180910390f35b3480156107ce57600080fd5b506107e960048036038101906107e49190612c3e565b611ae7565b6040516107f6919061347b565b60405180910390f35b34801561080b57600080fd5b5061082660048036038101906108219190612e01565b611af9565b005b34801561083457600080fd5b5061084f600480360381019061084a9190612c6b565b611b92565b60405161085c91906132de565b60405180910390f35b34801561087157600080fd5b5061088c60048036038101906108879190612efe565b611c26565b005b34801561089a57600080fd5b506108b560048036038101906108b09190612c3e565b611d07565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091257506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109425750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600280546109589061374b565b80601f01602080910402602001604051908101604052809291908181526020018280546109849061374b565b80156109d15780601f106109a6576101008083540402835291602001916109d1565b820191906000526020600020905b8154815290600101906020018083116109b457829003601f168201915b5050505050905090565b60006109e682611dff565b610a1c576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610a5f611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610a7d6113cf565b73ffffffffffffffffffffffffffffffffffffffff1614610ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aca9061337b565b60405180910390fd5b80600f8190555050565b6000610ae882611e66565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b50576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b6f611f34565b73ffffffffffffffffffffffffffffffffffffffff1614610bd257610b9b81610b96611f34565b611b92565b610bd1576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600d5481565b610c92611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610cb06113cf565b73ffffffffffffffffffffffffffffffffffffffff1614610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd9061337b565b60405180910390fd5b80600b9080519060200190610d1c929190612a52565b5050565b610d28611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610d466113cf565b73ffffffffffffffffffffffffffffffffffffffff1614610d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d939061337b565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b6000610dc3611f3c565b6001546000540303905090565b600f5481565b610de1838383611f45565b505050565b60105481565b610df4611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610e126113cf565b73ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f9061337b565b60405180910390fd5b60026009541415610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea5906133fb565b60405180910390fd5b6002600981905550600060648047610ec69190613607565b610ed091906135d6565b905060007377d7eea7ce5a13eb1e20f1da9dc86135945d1c8f73ffffffffffffffffffffffffffffffffffffffff1682604051610f0c90613262565b60006040518083038185875af1925050503d8060008114610f49576040519150601f19603f3d011682016040523d82523d6000602084013e610f4e565b606091505b5050905080610f5c57600080fd5b50506001600981905550565b610f838383836040518060200160405280600081525061190f565b505050565b610f90611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610fae6113cf565b73ffffffffffffffffffffffffffffffffffffffff1614611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb9061337b565b60405180910390fd5b80600d8190555050565b611016611e5e565b73ffffffffffffffffffffffffffffffffffffffff166110346113cf565b73ffffffffffffffffffffffffffffffffffffffff161461108a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110819061337b565b60405180910390fd5b80600c90805190602001906110a0929190612a52565b5050565b601260009054906101000a900460ff1681565b600b80546110c49061374b565b80601f01602080910402602001604051908101604052809291908181526020018280546110f09061374b565b801561113d5780601f106111125761010080835404028352916020019161113d565b820191906000526020600020905b81548152906001019060200180831161112057829003601f168201915b505050505081565b601260019054906101000a900460ff1681565b600a80546111659061374b565b80601f01602080910402602001604051908101604052809291908181526020018280546111919061374b565b80156111de5780601f106111b3576101008083540402835291602001916111de565b820191906000526020600020905b8154815290600101906020018083116111c157829003601f168201915b505050505081565b60006111f182611e66565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611260576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6112b9611e5e565b73ffffffffffffffffffffffffffffffffffffffff166112d76113cf565b73ffffffffffffffffffffffffffffffffffffffff161461132d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113249061337b565b60405180910390fd5b61133760006122ef565b565b611341611e5e565b73ffffffffffffffffffffffffffffffffffffffff1661135f6113cf565b73ffffffffffffffffffffffffffffffffffffffff16146113b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ac9061337b565b60405180910390fd5b80600a90805190602001906113cb929190612a52565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546114089061374b565b80601f01602080910402602001604051908101604052809291908181526020018280546114349061374b565b80156114815780601f1061145657610100808354040283529160200191611481565b820191906000526020600020905b81548152906001019060200180831161146457829003601f168201915b5050505050905090565b80601260019054906101000a900460ff16156114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d39061339b565b60405180910390fd5b600e54816114e8610db9565b6114f29190613580565b1115611533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152a9061341b565b60405180910390fd5b60008111801561154557506010548111155b611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b9061343b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e99061335b565b60405180910390fd5b6000811180156116175750600f548161160a33611ae7565b6116149190613580565b11155b611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d9061333b565b60405180910390fd5b81600060115461166533611ae7565b101561169757600061167633611ae7565b6011546116839190613661565b905080600d546116939190613607565b9150505b8082600d546116a69190613607565b6116b09190613661565b3410156116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e99061345b565b60405180910390fd5b6117036116fd611e5e565b856123b5565b50505050565b611711611f34565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611776576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611783611f34565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611830611f34565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161187591906132de565b60405180910390a35050565b600c805461188e9061374b565b80601f01602080910402602001604051908101604052809291908181526020018280546118ba9061374b565b80156119075780601f106118dc57610100808354040283529160200191611907565b820191906000526020600020905b8154815290600101906020018083116118ea57829003601f168201915b505050505081565b61191a848484611f45565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461197c57611945848484846123d3565b61197b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60115481565b606061199382611dff565b6119d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c9906133bb565b60405180910390fd5b60001515601260009054906101000a900460ff1615151415611a8057600c80546119fb9061374b565b80601f0160208091040260200160405190810160405280929190818152602001828054611a279061374b565b8015611a745780601f10611a4957610100808354040283529160200191611a74565b820191906000526020600020905b815481529060010190602001808311611a5757829003601f168201915b50505050509050611adc565b6000611a8a612533565b90506000815111611aaa5760405180602001604052806000815250611ad8565b80611ab4846125c5565b600b604051602001611ac893929190613231565b6040516020818303038152906040525b9150505b919050565b600e5481565b6000611af282612726565b9050919050565b611b01611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611b1f6113cf565b73ffffffffffffffffffffffffffffffffffffffff1614611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c9061337b565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c2e611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611c4c6113cf565b73ffffffffffffffffffffffffffffffffffffffff1614611ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c999061337b565b60405180910390fd5b600e5482611cae610db9565b611cb89190613580565b1115611cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf0906133db565b60405180910390fd5b611d0381836123b5565b5050565b611d0f611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611d2d6113cf565b73ffffffffffffffffffffffffffffffffffffffff1614611d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7a9061337b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dea9061331b565b60405180910390fd5b611dfc816122ef565b50565b600081611e0a611f3c565b11158015611e19575060005482105b8015611e57575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b60008082905080611e75611f3c565b11611efd57600054811015611efc5760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415611efa575b6000811415611ef0576004600083600190039350838152602001908152602001600020549050611ec5565b8092505050611f2f565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b60006001905090565b6000611f5082611e66565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611fb7576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611fd8611f34565b73ffffffffffffffffffffffffffffffffffffffff161480612007575061200685612001611f34565b611b92565b5b8061204c5750612015611f34565b73ffffffffffffffffffffffffffffffffffffffff16612034846109db565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612085576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156120ec576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120f9858585600161277d565b6006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b6121f686612783565b1717600460008581526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008316141561228057600060018401905060006004600083815260200190815260200160002054141561227e57600054811461227d578260046000838152602001908152602001600020819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122e8858585600161278d565b5050505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6123cf828260405180602001604052806000815250612793565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123f9611f34565b8786866040518563ffffffff1660e01b815260040161241b9493929190613292565b602060405180830381600087803b15801561243557600080fd5b505af192505050801561246657506040513d601f19601f820116820180604052508101906124639190612e5b565b60015b6124e0573d8060008114612496576040519150601f19603f3d011682016040523d82523d6000602084013e61249b565b606091505b506000815114156124d8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a80546125429061374b565b80601f016020809104026020016040519081016040528092919081815260200182805461256e9061374b565b80156125bb5780601f10612590576101008083540402835291602001916125bb565b820191906000526020600020905b81548152906001019060200180831161259e57829003601f168201915b5050505050905090565b6060600082141561260d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612721565b600082905060005b6000821461263f578080612628906137ae565b915050600a8261263891906135d6565b9150612615565b60008167ffffffffffffffff81111561265b5761265a6138e4565b5b6040519080825280601f01601f19166020018201604052801561268d5781602001600182028036833780820191505090505b5090505b6000851461271a576001826126a69190613661565b9150600a856126b591906137f7565b60306126c19190613580565b60f81b8183815181106126d7576126d66138b5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561271391906135d6565b9450612691565b8093505050505b919050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b50505050565b6000819050919050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612800576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083141561283b576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612848600085838661277d565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e16128ad60018514612a48565b901b60a042901b6128bd86612783565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b146129c1575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461297160008784806001019550876123d3565b6129a7576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106129025782600054146129bc57600080fd5b612a2c565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106129c2575b816000819055505050612a42600085838661278d565b50505050565b6000819050919050565b828054612a5e9061374b565b90600052602060002090601f016020900481019282612a805760008555612ac7565b82601f10612a9957805160ff1916838001178555612ac7565b82800160010185558215612ac7579182015b82811115612ac6578251825591602001919060010190612aab565b5b509050612ad49190612ad8565b5090565b5b80821115612af1576000816000905550600101612ad9565b5090565b6000612b08612b03846134bb565b613496565b905082815260208101848484011115612b2457612b23613918565b5b612b2f848285613709565b509392505050565b6000612b4a612b45846134ec565b613496565b905082815260208101848484011115612b6657612b65613918565b5b612b71848285613709565b509392505050565b600081359050612b8881613b96565b92915050565b600081359050612b9d81613bad565b92915050565b600081359050612bb281613bc4565b92915050565b600081519050612bc781613bc4565b92915050565b600082601f830112612be257612be1613913565b5b8135612bf2848260208601612af5565b91505092915050565b600082601f830112612c1057612c0f613913565b5b8135612c20848260208601612b37565b91505092915050565b600081359050612c3881613bdb565b92915050565b600060208284031215612c5457612c53613922565b5b6000612c6284828501612b79565b91505092915050565b60008060408385031215612c8257612c81613922565b5b6000612c9085828601612b79565b9250506020612ca185828601612b79565b9150509250929050565b600080600060608486031215612cc457612cc3613922565b5b6000612cd286828701612b79565b9350506020612ce386828701612b79565b9250506040612cf486828701612c29565b9150509250925092565b60008060008060808587031215612d1857612d17613922565b5b6000612d2687828801612b79565b9450506020612d3787828801612b79565b9350506040612d4887828801612c29565b925050606085013567ffffffffffffffff811115612d6957612d6861391d565b5b612d7587828801612bcd565b91505092959194509250565b60008060408385031215612d9857612d97613922565b5b6000612da685828601612b79565b9250506020612db785828601612b8e565b9150509250929050565b60008060408385031215612dd857612dd7613922565b5b6000612de685828601612b79565b9250506020612df785828601612c29565b9150509250929050565b600060208284031215612e1757612e16613922565b5b6000612e2584828501612b8e565b91505092915050565b600060208284031215612e4457612e43613922565b5b6000612e5284828501612ba3565b91505092915050565b600060208284031215612e7157612e70613922565b5b6000612e7f84828501612bb8565b91505092915050565b600060208284031215612e9e57612e9d613922565b5b600082013567ffffffffffffffff811115612ebc57612ebb61391d565b5b612ec884828501612bfb565b91505092915050565b600060208284031215612ee757612ee6613922565b5b6000612ef584828501612c29565b91505092915050565b60008060408385031215612f1557612f14613922565b5b6000612f2385828601612c29565b9250506020612f3485828601612b79565b9150509250929050565b612f4781613695565b82525050565b612f56816136a7565b82525050565b6000612f6782613532565b612f718185613548565b9350612f81818560208601613718565b612f8a81613927565b840191505092915050565b6000612fa08261353d565b612faa8185613564565b9350612fba818560208601613718565b612fc381613927565b840191505092915050565b6000612fd98261353d565b612fe38185613575565b9350612ff3818560208601613718565b80840191505092915050565b6000815461300c8161374b565b6130168186613575565b94506001821660008114613031576001811461304257613075565b60ff19831686528186019350613075565b61304b8561351d565b60005b8381101561306d5781548189015260018201915060208101905061304e565b838801955050505b50505092915050565b600061308b602683613564565b915061309682613938565b604082019050919050565b60006130ae601583613564565b91506130b982613987565b602082019050919050565b60006130d1602183613564565b91506130dc826139b0565b604082019050919050565b60006130f4602083613564565b91506130ff826139ff565b602082019050919050565b6000613117601183613564565b915061312282613a28565b602082019050919050565b600061313a602f83613564565b915061314582613a51565b604082019050919050565b600061315d600083613559565b915061316882613aa0565b600082019050919050565b6000613180601483613564565b915061318b82613aa3565b602082019050919050565b60006131a3601f83613564565b91506131ae82613acc565b602082019050919050565b60006131c6600983613564565b91506131d182613af5565b602082019050919050565b60006131e9602583613564565b91506131f482613b1e565b604082019050919050565b600061320c601383613564565b915061321782613b6d565b602082019050919050565b61322b816136ff565b82525050565b600061323d8286612fce565b91506132498285612fce565b91506132558284612fff565b9150819050949350505050565b600061326d82613150565b9150819050919050565b600060208201905061328c6000830184612f3e565b92915050565b60006080820190506132a76000830187612f3e565b6132b46020830186612f3e565b6132c16040830185613222565b81810360608301526132d38184612f5c565b905095945050505050565b60006020820190506132f36000830184612f4d565b92915050565b600060208201905081810360008301526133138184612f95565b905092915050565b600060208201905081810360008301526133348161307e565b9050919050565b60006020820190508181036000830152613354816130a1565b9050919050565b60006020820190508181036000830152613374816130c4565b9050919050565b60006020820190508181036000830152613394816130e7565b9050919050565b600060208201905081810360008301526133b48161310a565b9050919050565b600060208201905081810360008301526133d48161312d565b9050919050565b600060208201905081810360008301526133f481613173565b9050919050565b6000602082019050818103600083015261341481613196565b9050919050565b60006020820190508181036000830152613434816131b9565b9050919050565b60006020820190508181036000830152613454816131dc565b9050919050565b60006020820190508181036000830152613474816131ff565b9050919050565b60006020820190506134906000830184613222565b92915050565b60006134a06134b1565b90506134ac828261377d565b919050565b6000604051905090565b600067ffffffffffffffff8211156134d6576134d56138e4565b5b6134df82613927565b9050602081019050919050565b600067ffffffffffffffff821115613507576135066138e4565b5b61351082613927565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061358b826136ff565b9150613596836136ff565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135cb576135ca613828565b5b828201905092915050565b60006135e1826136ff565b91506135ec836136ff565b9250826135fc576135fb613857565b5b828204905092915050565b6000613612826136ff565b915061361d836136ff565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561365657613655613828565b5b828202905092915050565b600061366c826136ff565b9150613677836136ff565b92508282101561368a57613689613828565b5b828203905092915050565b60006136a0826136df565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561373657808201518184015260208101905061371b565b83811115613745576000848401525b50505050565b6000600282049050600182168061376357607f821691505b6020821081141561377757613776613886565b5b50919050565b61378682613927565b810181811067ffffffffffffffff821117156137a5576137a46138e4565b5b80604052505050565b60006137b9826136ff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137ec576137eb613828565b5b600182019050919050565b6000613802826136ff565b915061380d836136ff565b92508261381d5761381c613857565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f206d617820626972627320726561636865642e2e2e0000000000000000000000600082015250565b7f436f6e7472616374206d696e746572732067657473206e6f2062697262732e2e60008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206973207061757365642e2e2e000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f536f6c64206f7574210000000000000000000000000000000000000000000000600082015250565b7f4d617820626972627320706572207472616e73616374696f6e2065786365656460008201527f65642e2e2e000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732e00000000000000000000000000600082015250565b613b9f81613695565b8114613baa57600080fd5b50565b613bb6816136a7565b8114613bc157600080fd5b50565b613bcd816136b3565b8114613bd857600080fd5b50565b613be4816136ff565b8114613bef57600080fd5b5056fea264697066735822122026485ef5b7779f1aeb3bbebb4294524cda8275a59057f7d079089409ae1a0e7064736f6c63430008070033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a4269726253637265616d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024224000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e68747470733a2f2f6269726273637265616d2e73666f332e6469676974616c6f6365616e7370616365732e636f6d2f756e72657665616c65642e6a736f6e0000

Deployed Bytecode

0x6080604052600436106102255760003560e01c806362b99ad411610123578063a45ba8e7116100ab578063dc33e6811161006f578063dc33e681146107c2578063e0a80853146107ff578063e985e9c514610828578063efbd73f414610865578063f2fde38b1461088e57610225565b8063a45ba8e7146106db578063b88d4fde14610706578063c7504dde1461072f578063c87b56dd1461075a578063d5abeb011461079757610225565b80637ec4a659116100f25780637ec4a659146106175780638da5cb5b1461064057806395d89b411461066b578063a0712d6814610696578063a22cb465146106b257610225565b806362b99ad41461055b5780636352211e1461058657806370a08231146105c3578063715018a61461060057610225565b8063239c70ae116101b157806344a0d68a1161017557806344a0d68a146104885780634fdd43cb146104b157806351830227146104da5780635503a0e8146105055780635c975abb1461053057610225565b8063239c70ae146103c957806323b872dd146103f45780633cb519941461041d5780633ccfd60b1461044857806342842e0e1461045f57610225565b8063095ea7b3116101f8578063095ea7b3146102f857806313faede61461032157806316ba10e01461034c57806316c38b3c1461037557806318160ddd1461039e57610225565b806301ffc9a71461022a57806306fdde0314610267578063081812fc14610292578063088a4ed0146102cf575b600080fd5b34801561023657600080fd5b50610251600480360381019061024c9190612e2e565b6108b7565b60405161025e91906132de565b60405180910390f35b34801561027357600080fd5b5061027c610949565b60405161028991906132f9565b60405180910390f35b34801561029e57600080fd5b506102b960048036038101906102b49190612ed1565b6109db565b6040516102c69190613277565b60405180910390f35b3480156102db57600080fd5b506102f660048036038101906102f19190612ed1565b610a57565b005b34801561030457600080fd5b5061031f600480360381019061031a9190612dc1565b610add565b005b34801561032d57600080fd5b50610336610c84565b604051610343919061347b565b60405180910390f35b34801561035857600080fd5b50610373600480360381019061036e9190612e88565b610c8a565b005b34801561038157600080fd5b5061039c60048036038101906103979190612e01565b610d20565b005b3480156103aa57600080fd5b506103b3610db9565b6040516103c0919061347b565b60405180910390f35b3480156103d557600080fd5b506103de610dd0565b6040516103eb919061347b565b60405180910390f35b34801561040057600080fd5b5061041b60048036038101906104169190612cab565b610dd6565b005b34801561042957600080fd5b50610432610de6565b60405161043f919061347b565b60405180910390f35b34801561045457600080fd5b5061045d610dec565b005b34801561046b57600080fd5b5061048660048036038101906104819190612cab565b610f68565b005b34801561049457600080fd5b506104af60048036038101906104aa9190612ed1565b610f88565b005b3480156104bd57600080fd5b506104d860048036038101906104d39190612e88565b61100e565b005b3480156104e657600080fd5b506104ef6110a4565b6040516104fc91906132de565b60405180910390f35b34801561051157600080fd5b5061051a6110b7565b60405161052791906132f9565b60405180910390f35b34801561053c57600080fd5b50610545611145565b60405161055291906132de565b60405180910390f35b34801561056757600080fd5b50610570611158565b60405161057d91906132f9565b60405180910390f35b34801561059257600080fd5b506105ad60048036038101906105a89190612ed1565b6111e6565b6040516105ba9190613277565b60405180910390f35b3480156105cf57600080fd5b506105ea60048036038101906105e59190612c3e565b6111f8565b6040516105f7919061347b565b60405180910390f35b34801561060c57600080fd5b506106156112b1565b005b34801561062357600080fd5b5061063e60048036038101906106399190612e88565b611339565b005b34801561064c57600080fd5b506106556113cf565b6040516106629190613277565b60405180910390f35b34801561067757600080fd5b506106806113f9565b60405161068d91906132f9565b60405180910390f35b6106b060048036038101906106ab9190612ed1565b61148b565b005b3480156106be57600080fd5b506106d960048036038101906106d49190612d81565b611709565b005b3480156106e757600080fd5b506106f0611881565b6040516106fd91906132f9565b60405180910390f35b34801561071257600080fd5b5061072d60048036038101906107289190612cfe565b61190f565b005b34801561073b57600080fd5b50610744611982565b604051610751919061347b565b60405180910390f35b34801561076657600080fd5b50610781600480360381019061077c9190612ed1565b611988565b60405161078e91906132f9565b60405180910390f35b3480156107a357600080fd5b506107ac611ae1565b6040516107b9919061347b565b60405180910390f35b3480156107ce57600080fd5b506107e960048036038101906107e49190612c3e565b611ae7565b6040516107f6919061347b565b60405180910390f35b34801561080b57600080fd5b5061082660048036038101906108219190612e01565b611af9565b005b34801561083457600080fd5b5061084f600480360381019061084a9190612c6b565b611b92565b60405161085c91906132de565b60405180910390f35b34801561087157600080fd5b5061088c60048036038101906108879190612efe565b611c26565b005b34801561089a57600080fd5b506108b560048036038101906108b09190612c3e565b611d07565b005b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061091257506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109425750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b6060600280546109589061374b565b80601f01602080910402602001604051908101604052809291908181526020018280546109849061374b565b80156109d15780601f106109a6576101008083540402835291602001916109d1565b820191906000526020600020905b8154815290600101906020018083116109b457829003601f168201915b5050505050905090565b60006109e682611dff565b610a1c576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b610a5f611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610a7d6113cf565b73ffffffffffffffffffffffffffffffffffffffff1614610ad3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aca9061337b565b60405180910390fd5b80600f8190555050565b6000610ae882611e66565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b50576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b6f611f34565b73ffffffffffffffffffffffffffffffffffffffff1614610bd257610b9b81610b96611f34565b611b92565b610bd1576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b600d5481565b610c92611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610cb06113cf565b73ffffffffffffffffffffffffffffffffffffffff1614610d06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cfd9061337b565b60405180910390fd5b80600b9080519060200190610d1c929190612a52565b5050565b610d28611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610d466113cf565b73ffffffffffffffffffffffffffffffffffffffff1614610d9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d939061337b565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b6000610dc3611f3c565b6001546000540303905090565b600f5481565b610de1838383611f45565b505050565b60105481565b610df4611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610e126113cf565b73ffffffffffffffffffffffffffffffffffffffff1614610e68576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5f9061337b565b60405180910390fd5b60026009541415610eae576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea5906133fb565b60405180910390fd5b6002600981905550600060648047610ec69190613607565b610ed091906135d6565b905060007377d7eea7ce5a13eb1e20f1da9dc86135945d1c8f73ffffffffffffffffffffffffffffffffffffffff1682604051610f0c90613262565b60006040518083038185875af1925050503d8060008114610f49576040519150601f19603f3d011682016040523d82523d6000602084013e610f4e565b606091505b5050905080610f5c57600080fd5b50506001600981905550565b610f838383836040518060200160405280600081525061190f565b505050565b610f90611e5e565b73ffffffffffffffffffffffffffffffffffffffff16610fae6113cf565b73ffffffffffffffffffffffffffffffffffffffff1614611004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffb9061337b565b60405180910390fd5b80600d8190555050565b611016611e5e565b73ffffffffffffffffffffffffffffffffffffffff166110346113cf565b73ffffffffffffffffffffffffffffffffffffffff161461108a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110819061337b565b60405180910390fd5b80600c90805190602001906110a0929190612a52565b5050565b601260009054906101000a900460ff1681565b600b80546110c49061374b565b80601f01602080910402602001604051908101604052809291908181526020018280546110f09061374b565b801561113d5780601f106111125761010080835404028352916020019161113d565b820191906000526020600020905b81548152906001019060200180831161112057829003601f168201915b505050505081565b601260019054906101000a900460ff1681565b600a80546111659061374b565b80601f01602080910402602001604051908101604052809291908181526020018280546111919061374b565b80156111de5780601f106111b3576101008083540402835291602001916111de565b820191906000526020600020905b8154815290600101906020018083116111c157829003601f168201915b505050505081565b60006111f182611e66565b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611260576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6112b9611e5e565b73ffffffffffffffffffffffffffffffffffffffff166112d76113cf565b73ffffffffffffffffffffffffffffffffffffffff161461132d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113249061337b565b60405180910390fd5b61133760006122ef565b565b611341611e5e565b73ffffffffffffffffffffffffffffffffffffffff1661135f6113cf565b73ffffffffffffffffffffffffffffffffffffffff16146113b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ac9061337b565b60405180910390fd5b80600a90805190602001906113cb929190612a52565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600380546114089061374b565b80601f01602080910402602001604051908101604052809291908181526020018280546114349061374b565b80156114815780601f1061145657610100808354040283529160200191611481565b820191906000526020600020905b81548152906001019060200180831161146457829003601f168201915b5050505050905090565b80601260019054906101000a900460ff16156114dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d39061339b565b60405180910390fd5b600e54816114e8610db9565b6114f29190613580565b1115611533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152a9061341b565b60405180910390fd5b60008111801561154557506010548111155b611584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157b9061343b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff16146115f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e99061335b565b60405180910390fd5b6000811180156116175750600f548161160a33611ae7565b6116149190613580565b11155b611656576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161164d9061333b565b60405180910390fd5b81600060115461166533611ae7565b101561169757600061167633611ae7565b6011546116839190613661565b905080600d546116939190613607565b9150505b8082600d546116a69190613607565b6116b09190613661565b3410156116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e99061345b565b60405180910390fd5b6117036116fd611e5e565b856123b5565b50505050565b611711611f34565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611776576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611783611f34565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611830611f34565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161187591906132de565b60405180910390a35050565b600c805461188e9061374b565b80601f01602080910402602001604051908101604052809291908181526020018280546118ba9061374b565b80156119075780601f106118dc57610100808354040283529160200191611907565b820191906000526020600020905b8154815290600101906020018083116118ea57829003601f168201915b505050505081565b61191a848484611f45565b60008373ffffffffffffffffffffffffffffffffffffffff163b1461197c57611945848484846123d3565b61197b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60115481565b606061199382611dff565b6119d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119c9906133bb565b60405180910390fd5b60001515601260009054906101000a900460ff1615151415611a8057600c80546119fb9061374b565b80601f0160208091040260200160405190810160405280929190818152602001828054611a279061374b565b8015611a745780601f10611a4957610100808354040283529160200191611a74565b820191906000526020600020905b815481529060010190602001808311611a5757829003601f168201915b50505050509050611adc565b6000611a8a612533565b90506000815111611aaa5760405180602001604052806000815250611ad8565b80611ab4846125c5565b600b604051602001611ac893929190613231565b6040516020818303038152906040525b9150505b919050565b600e5481565b6000611af282612726565b9050919050565b611b01611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611b1f6113cf565b73ffffffffffffffffffffffffffffffffffffffff1614611b75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6c9061337b565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611c2e611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611c4c6113cf565b73ffffffffffffffffffffffffffffffffffffffff1614611ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c999061337b565b60405180910390fd5b600e5482611cae610db9565b611cb89190613580565b1115611cf9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf0906133db565b60405180910390fd5b611d0381836123b5565b5050565b611d0f611e5e565b73ffffffffffffffffffffffffffffffffffffffff16611d2d6113cf565b73ffffffffffffffffffffffffffffffffffffffff1614611d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7a9061337b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611df3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dea9061331b565b60405180910390fd5b611dfc816122ef565b50565b600081611e0a611f3c565b11158015611e19575060005482105b8015611e57575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b60008082905080611e75611f3c565b11611efd57600054811015611efc5760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415611efa575b6000811415611ef0576004600083600190039350838152602001908152602001600020549050611ec5565b8092505050611f2f565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b600033905090565b60006001905090565b6000611f5082611e66565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611fb7576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611fd8611f34565b73ffffffffffffffffffffffffffffffffffffffff161480612007575061200685612001611f34565b611b92565b5b8061204c5750612015611f34565b73ffffffffffffffffffffffffffffffffffffffff16612034846109db565b73ffffffffffffffffffffffffffffffffffffffff16145b905080612085576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156120ec576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6120f9858585600161277d565b6006600084815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154600101919050819055507c020000000000000000000000000000000000000000000000000000000060a042901b6121f686612783565b1717600460008581526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008316141561228057600060018401905060006004600083815260200190815260200160002054141561227e57600054811461227d578260046000838152602001908152602001600020819055505b5b505b828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46122e8858585600161278d565b5050505050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6123cf828260405180602001604052806000815250612793565b5050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123f9611f34565b8786866040518563ffffffff1660e01b815260040161241b9493929190613292565b602060405180830381600087803b15801561243557600080fd5b505af192505050801561246657506040513d601f19601f820116820180604052508101906124639190612e5b565b60015b6124e0573d8060008114612496576040519150601f19603f3d011682016040523d82523d6000602084013e61249b565b606091505b506000815114156124d8576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600a80546125429061374b565b80601f016020809104026020016040519081016040528092919081815260200182805461256e9061374b565b80156125bb5780601f10612590576101008083540402835291602001916125bb565b820191906000526020600020905b81548152906001019060200180831161259e57829003601f168201915b5050505050905090565b6060600082141561260d576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612721565b600082905060005b6000821461263f578080612628906137ae565b915050600a8261263891906135d6565b9150612615565b60008167ffffffffffffffff81111561265b5761265a6138e4565b5b6040519080825280601f01601f19166020018201604052801561268d5781602001600182028036833780820191505090505b5090505b6000851461271a576001826126a69190613661565b9150600a856126b591906137f7565b60306126c19190613580565b60f81b8183815181106126d7576126d66138b5565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561271391906135d6565b9450612691565b8093505050505b919050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b50505050565b6000819050919050565b50505050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612800576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600083141561283b576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612848600085838661277d565b600160406001901b178302600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254019250508190555060e16128ad60018514612a48565b901b60a042901b6128bd86612783565b1717600460008381526020019081526020016000208190555060008190506000848201905060008673ffffffffffffffffffffffffffffffffffffffff163b146129c1575b818673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461297160008784806001019550876123d3565b6129a7576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8082106129025782600054146129bc57600080fd5b612a2c565b5b818060010192508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a48082106129c2575b816000819055505050612a42600085838661278d565b50505050565b6000819050919050565b828054612a5e9061374b565b90600052602060002090601f016020900481019282612a805760008555612ac7565b82601f10612a9957805160ff1916838001178555612ac7565b82800160010185558215612ac7579182015b82811115612ac6578251825591602001919060010190612aab565b5b509050612ad49190612ad8565b5090565b5b80821115612af1576000816000905550600101612ad9565b5090565b6000612b08612b03846134bb565b613496565b905082815260208101848484011115612b2457612b23613918565b5b612b2f848285613709565b509392505050565b6000612b4a612b45846134ec565b613496565b905082815260208101848484011115612b6657612b65613918565b5b612b71848285613709565b509392505050565b600081359050612b8881613b96565b92915050565b600081359050612b9d81613bad565b92915050565b600081359050612bb281613bc4565b92915050565b600081519050612bc781613bc4565b92915050565b600082601f830112612be257612be1613913565b5b8135612bf2848260208601612af5565b91505092915050565b600082601f830112612c1057612c0f613913565b5b8135612c20848260208601612b37565b91505092915050565b600081359050612c3881613bdb565b92915050565b600060208284031215612c5457612c53613922565b5b6000612c6284828501612b79565b91505092915050565b60008060408385031215612c8257612c81613922565b5b6000612c9085828601612b79565b9250506020612ca185828601612b79565b9150509250929050565b600080600060608486031215612cc457612cc3613922565b5b6000612cd286828701612b79565b9350506020612ce386828701612b79565b9250506040612cf486828701612c29565b9150509250925092565b60008060008060808587031215612d1857612d17613922565b5b6000612d2687828801612b79565b9450506020612d3787828801612b79565b9350506040612d4887828801612c29565b925050606085013567ffffffffffffffff811115612d6957612d6861391d565b5b612d7587828801612bcd565b91505092959194509250565b60008060408385031215612d9857612d97613922565b5b6000612da685828601612b79565b9250506020612db785828601612b8e565b9150509250929050565b60008060408385031215612dd857612dd7613922565b5b6000612de685828601612b79565b9250506020612df785828601612c29565b9150509250929050565b600060208284031215612e1757612e16613922565b5b6000612e2584828501612b8e565b91505092915050565b600060208284031215612e4457612e43613922565b5b6000612e5284828501612ba3565b91505092915050565b600060208284031215612e7157612e70613922565b5b6000612e7f84828501612bb8565b91505092915050565b600060208284031215612e9e57612e9d613922565b5b600082013567ffffffffffffffff811115612ebc57612ebb61391d565b5b612ec884828501612bfb565b91505092915050565b600060208284031215612ee757612ee6613922565b5b6000612ef584828501612c29565b91505092915050565b60008060408385031215612f1557612f14613922565b5b6000612f2385828601612c29565b9250506020612f3485828601612b79565b9150509250929050565b612f4781613695565b82525050565b612f56816136a7565b82525050565b6000612f6782613532565b612f718185613548565b9350612f81818560208601613718565b612f8a81613927565b840191505092915050565b6000612fa08261353d565b612faa8185613564565b9350612fba818560208601613718565b612fc381613927565b840191505092915050565b6000612fd98261353d565b612fe38185613575565b9350612ff3818560208601613718565b80840191505092915050565b6000815461300c8161374b565b6130168186613575565b94506001821660008114613031576001811461304257613075565b60ff19831686528186019350613075565b61304b8561351d565b60005b8381101561306d5781548189015260018201915060208101905061304e565b838801955050505b50505092915050565b600061308b602683613564565b915061309682613938565b604082019050919050565b60006130ae601583613564565b91506130b982613987565b602082019050919050565b60006130d1602183613564565b91506130dc826139b0565b604082019050919050565b60006130f4602083613564565b91506130ff826139ff565b602082019050919050565b6000613117601183613564565b915061312282613a28565b602082019050919050565b600061313a602f83613564565b915061314582613a51565b604082019050919050565b600061315d600083613559565b915061316882613aa0565b600082019050919050565b6000613180601483613564565b915061318b82613aa3565b602082019050919050565b60006131a3601f83613564565b91506131ae82613acc565b602082019050919050565b60006131c6600983613564565b91506131d182613af5565b602082019050919050565b60006131e9602583613564565b91506131f482613b1e565b604082019050919050565b600061320c601383613564565b915061321782613b6d565b602082019050919050565b61322b816136ff565b82525050565b600061323d8286612fce565b91506132498285612fce565b91506132558284612fff565b9150819050949350505050565b600061326d82613150565b9150819050919050565b600060208201905061328c6000830184612f3e565b92915050565b60006080820190506132a76000830187612f3e565b6132b46020830186612f3e565b6132c16040830185613222565b81810360608301526132d38184612f5c565b905095945050505050565b60006020820190506132f36000830184612f4d565b92915050565b600060208201905081810360008301526133138184612f95565b905092915050565b600060208201905081810360008301526133348161307e565b9050919050565b60006020820190508181036000830152613354816130a1565b9050919050565b60006020820190508181036000830152613374816130c4565b9050919050565b60006020820190508181036000830152613394816130e7565b9050919050565b600060208201905081810360008301526133b48161310a565b9050919050565b600060208201905081810360008301526133d48161312d565b9050919050565b600060208201905081810360008301526133f481613173565b9050919050565b6000602082019050818103600083015261341481613196565b9050919050565b60006020820190508181036000830152613434816131b9565b9050919050565b60006020820190508181036000830152613454816131dc565b9050919050565b60006020820190508181036000830152613474816131ff565b9050919050565b60006020820190506134906000830184613222565b92915050565b60006134a06134b1565b90506134ac828261377d565b919050565b6000604051905090565b600067ffffffffffffffff8211156134d6576134d56138e4565b5b6134df82613927565b9050602081019050919050565b600067ffffffffffffffff821115613507576135066138e4565b5b61351082613927565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061358b826136ff565b9150613596836136ff565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156135cb576135ca613828565b5b828201905092915050565b60006135e1826136ff565b91506135ec836136ff565b9250826135fc576135fb613857565b5b828204905092915050565b6000613612826136ff565b915061361d836136ff565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561365657613655613828565b5b828202905092915050565b600061366c826136ff565b9150613677836136ff565b92508282101561368a57613689613828565b5b828203905092915050565b60006136a0826136df565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b8381101561373657808201518184015260208101905061371b565b83811115613745576000848401525b50505050565b6000600282049050600182168061376357607f821691505b6020821081141561377757613776613886565b5b50919050565b61378682613927565b810181811067ffffffffffffffff821117156137a5576137a46138e4565b5b80604052505050565b60006137b9826136ff565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156137ec576137eb613828565b5b600182019050919050565b6000613802826136ff565b915061380d836136ff565b92508261381d5761381c613857565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f206d617820626972627320726561636865642e2e2e0000000000000000000000600082015250565b7f436f6e7472616374206d696e746572732067657473206e6f2062697262732e2e60008201527f2e00000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616c65206973207061757365642e2e2e000000000000000000000000000000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f536f6c64206f7574210000000000000000000000000000000000000000000000600082015250565b7f4d617820626972627320706572207472616e73616374696f6e2065786365656460008201527f65642e2e2e000000000000000000000000000000000000000000000000000000602082015250565b7f496e73756666696369656e742066756e64732e00000000000000000000000000600082015250565b613b9f81613695565b8114613baa57600080fd5b50565b613bb6816136a7565b8114613bc157600080fd5b50565b613bcd816136b3565b8114613bd857600080fd5b50565b613be4816136ff565b8114613bef57600080fd5b5056fea264697066735822122026485ef5b7779f1aeb3bbebb4294524cda8275a59057f7d079089409ae1a0e7064736f6c63430008070033

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

000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000e0000000000000000000000000000000000000000000000000000000000000000a4269726253637265616d0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024224000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003e68747470733a2f2f6269726273637265616d2e73666f332e6469676974616c6f6365616e7370616365732e636f6d2f756e72657665616c65642e6a736f6e0000

-----Decoded View---------------
Arg [0] : _tokenName (string): BirbScream
Arg [1] : _tokenSymbol (string): B$
Arg [2] : _hiddenMetadataUri (string): https://birbscream.sfo3.digitaloceanspaces.com/unrevealed.json

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [2] : 00000000000000000000000000000000000000000000000000000000000000e0
Arg [3] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [4] : 4269726253637265616d00000000000000000000000000000000000000000000
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [6] : 4224000000000000000000000000000000000000000000000000000000000000
Arg [7] : 000000000000000000000000000000000000000000000000000000000000003e
Arg [8] : 68747470733a2f2f6269726273637265616d2e73666f332e6469676974616c6f
Arg [9] : 6365616e7370616365732e636f6d2f756e72657665616c65642e6a736f6e0000


Deployed Bytecode Sourcemap

49252:3774:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15701:615;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20714:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22782:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51924:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22242:474;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49473:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52372:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52478:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14755:315;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49572:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23668:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49610:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52784:239;;;;;;;;;;;;;:::i;:::-;;23909:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51844:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52128:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49701:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49379:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49734:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49346:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20503:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16380:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48372:103;;;;;;;;;;;;;:::i;:::-;;52266:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47721:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20883:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50911:160;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23058:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49417:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24165:396;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49644:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51393:445;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49536:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52561:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52040:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23437:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51079:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48630:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15701:615;15786:4;16101:10;16086:25;;:11;:25;;;;:102;;;;16178:10;16163:25;;:11;:25;;;;16086:102;:179;;;;16255:10;16240:25;;:11;:25;;;;16086:179;16066:199;;15701:615;;;:::o;20714:100::-;20768:13;20801:5;20794:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20714:100;:::o;22782:204::-;22850:7;22875:16;22883:7;22875;:16::i;:::-;22870:64;;22900:34;;;;;;;;;;;;;;22870:64;22954:15;:24;22970:7;22954:24;;;;;;;;;;;;;;;;;;;;;22947:31;;22782:204;;;:::o;51924:110::-;47952:12;:10;:12::i;:::-;47941:23;;:7;:5;:7::i;:::-;:23;;;47933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52014:14:::1;51998:13;:30;;;;51924:110:::0;:::o;22242:474::-;22315:13;22347:27;22366:7;22347:18;:27::i;:::-;22315:61;;22397:5;22391:11;;:2;:11;;;22387:48;;;22411:24;;;;;;;;;;;;;;22387:48;22475:5;22452:28;;:19;:17;:19::i;:::-;:28;;;22448:175;;22500:44;22517:5;22524:19;:17;:19::i;:::-;22500:16;:44::i;:::-;22495:128;;22572:35;;;;;;;;;;;;;;22495:128;22448:175;22662:2;22635:15;:24;22651:7;22635:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;22700:7;22696:2;22680:28;;22689:5;22680:28;;;;;;;;;;;;22304:412;22242:474;;:::o;49473:34::-;;;;:::o;52372:100::-;47952:12;:10;:12::i;:::-;47941:23;;:7;:5;:7::i;:::-;:23;;;47933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52456:10:::1;52444:9;:22;;;;;;;;;;;;:::i;:::-;;52372:100:::0;:::o;52478:77::-;47952:12;:10;:12::i;:::-;47941:23;;:7;:5;:7::i;:::-;:23;;;47933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52543:6:::1;52534;;:15;;;;;;;;;;;;;;;;;;52478:77:::0;:::o;14755:315::-;14808:7;15036:15;:13;:15::i;:::-;15021:12;;15005:13;;:28;:46;14998:53;;14755:315;:::o;49572:33::-;;;;:::o;23668:170::-;23802:28;23812:4;23818:2;23822:7;23802:9;:28::i;:::-;23668:170;;;:::o;49610:29::-;;;;:::o;52784:239::-;47952:12;:10;:12::i;:::-;47941:23;;:7;:5;:7::i;:::-;:23;;;47933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44864:1:::1;45462:7;;:19;;45454:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;44864:1;45595:7;:18;;;;52841:17:::2;52891:3;52885::::0;52861:21:::2;:27;;;;:::i;:::-;:33;;;;:::i;:::-;52841:53;;52904:8;52926:42;52918:56;;52982:9;52918:78;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52903:93;;;53011:3;53003:12;;;::::0;::::2;;52834:189;;44820:1:::1;45774:7;:22;;;;52784:239::o:0;23909:185::-;24047:39;24064:4;24070:2;24074:7;24047:39;;;;;;;;;;;;:16;:39::i;:::-;23909:185;;;:::o;51844:74::-;47952:12;:10;:12::i;:::-;47941:23;;:7;:5;:7::i;:::-;:23;;;47933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51907:5:::1;51900:4;:12;;;;51844:74:::0;:::o;52128:132::-;47952:12;:10;:12::i;:::-;47941:23;;:7;:5;:7::i;:::-;:23;;;47933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52236:18:::1;52216:17;:38;;;;;;;;;;;;:::i;:::-;;52128:132:::0;:::o;49701:28::-;;;;;;;;;;;;;:::o;49379:33::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49734:25::-;;;;;;;;;;;;;:::o;49346:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20503:144::-;20567:7;20610:27;20629:7;20610:18;:27::i;:::-;20587:52;;20503:144;;;:::o;16380:224::-;16444:7;16485:1;16468:19;;:5;:19;;;16464:60;;;16496:28;;;;;;;;;;;;;;16464:60;11719:13;16542:18;:25;16561:5;16542:25;;;;;;;;;;;;;;;;:54;16535:61;;16380:224;;;:::o;48372:103::-;47952:12;:10;:12::i;:::-;47941:23;;:7;:5;:7::i;:::-;:23;;;47933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48437:30:::1;48464:1;48437:18;:30::i;:::-;48372:103::o:0;52266:100::-;47952:12;:10;:12::i;:::-;47941:23;;:7;:5;:7::i;:::-;:23;;;47933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52350:10:::1;52338:9;:22;;;;;;;;;;;;:::i;:::-;;52266:100:::0;:::o;47721:87::-;47767:7;47794:6;;;;;;;;;;;47787:13;;47721:87;:::o;20883:104::-;20939:13;20972:7;20965:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20883:104;:::o;50911:160::-;50976:11;50107:6;;;;;;;;;;;50106:7;50098:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;50181:9;;50166:11;50150:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;50142:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;50233:1;50219:11;:15;:43;;;;;50253:9;;50238:11;:24;;50219:43;50211:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;50332:10;50319:23;;:9;:23;;;50311:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;50417:1;50403:11;:15;:74;;;;;50464:13;;50449:11;50422:24;50435:10;50422:12;:24::i;:::-;:38;;;;:::i;:::-;:55;;50403:74;50387:130;;;;;;;;;;;;:::i;:::-;;;;;;;;;51009:11:::1;50594:22;50664:10;;50637:24;50650:10;50637:12;:24::i;:::-;:37;50633:167;;;50685:21;50722:24;50735:10;50722:12;:24::i;:::-;50709:10;;:37;;;;:::i;:::-;50685:61;;50779:13;50772:4;;:20;;;;:::i;:::-;50755:37;;50676:124;50633:167;50853:14;50839:11;50832:4;;:18;;;;:::i;:::-;:35;;;;:::i;:::-;50819:9;:48;;50811:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;51029:36:::2;51039:12;:10;:12::i;:::-;51053:11;51029:9;:36::i;:::-;50587:318:::1;50524:1;50911:160:::0;;:::o;23058:308::-;23169:19;:17;:19::i;:::-;23157:31;;:8;:31;;;23153:61;;;23197:17;;;;;;;;;;;;;;23153:61;23279:8;23227:18;:39;23246:19;:17;:19::i;:::-;23227:39;;;;;;;;;;;;;;;:49;23267:8;23227:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;23339:8;23303:55;;23318:19;:17;:19::i;:::-;23303:55;;;23349:8;23303:55;;;;;;:::i;:::-;;;;;;;;23058:308;;:::o;49417:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24165:396::-;24332:28;24342:4;24348:2;24352:7;24332:9;:28::i;:::-;24393:1;24375:2;:14;;;:19;24371:183;;24414:56;24445:4;24451:2;24455:7;24464:5;24414:30;:56::i;:::-;24409:145;;24498:40;;;;;;;;;;;;;;24409:145;24371:183;24165:396;;;;:::o;49644:29::-;;;;:::o;51393:445::-;51467:13;51497:17;51505:8;51497:7;:17::i;:::-;51489:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;51591:5;51579:17;;:8;;;;;;;;;;;:17;;;51575:64;;;51614:17;51607:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51575:64;51647:28;51678:10;:8;:10::i;:::-;51647:41;;51733:1;51708:14;51702:28;:32;:130;;;;;;;;;;;;;;;;;51770:14;51786:19;:8;:17;:19::i;:::-;51807:9;51753:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51702:130;51695:137;;;51393:445;;;;:::o;49536:31::-;;;;:::o;52561:107::-;52619:7;52642:20;52656:5;52642:13;:20::i;:::-;52635:27;;52561:107;;;:::o;52040:81::-;47952:12;:10;:12::i;:::-;47941:23;;:7;:5;:7::i;:::-;:23;;;47933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52109:6:::1;52098:8;;:17;;;;;;;;;;;;;;;;;;52040:81:::0;:::o;23437:164::-;23534:4;23558:18;:25;23577:5;23558:25;;;;;;;;;;;;;;;:35;23584:8;23558:35;;;;;;;;;;;;;;;;;;;;;;;;;23551:42;;23437:164;;;;:::o;51079:207::-;47952:12;:10;:12::i;:::-;47941:23;;:7;:5;:7::i;:::-;:23;;;47933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51206:9:::1;;51191:11;51175:13;:11;:13::i;:::-;:27;;;;:::i;:::-;:40;;51167:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;51247:33;51257:9;51268:11;51247:9;:33::i;:::-;51079:207:::0;;:::o;48630:201::-;47952:12;:10;:12::i;:::-;47941:23;;:7;:5;:7::i;:::-;:23;;;47933:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48739:1:::1;48719:22;;:8;:22;;;;48711:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;48795:28;48814:8;48795:18;:28::i;:::-;48630:201:::0;:::o;24816:273::-;24873:4;24929:7;24910:15;:13;:15::i;:::-;:26;;:66;;;;;24963:13;;24953:7;:23;24910:66;:152;;;;;25061:1;12489:8;25014:17;:26;25032:7;25014:26;;;;;;;;;;;;:43;:48;24910:152;24890:172;;24816:273;;;:::o;46468:98::-;46521:7;46548:10;46541:17;;46468:98;:::o;18018:1129::-;18085:7;18105:12;18120:7;18105:22;;18188:4;18169:15;:13;:15::i;:::-;:23;18165:915;;18222:13;;18215:4;:20;18211:869;;;18260:14;18277:17;:23;18295:4;18277:23;;;;;;;;;;;;18260:40;;18393:1;12489:8;18366:6;:23;:28;18362:699;;;18885:113;18902:1;18892:6;:11;18885:113;;;18945:17;:25;18963:6;;;;;;;18945:25;;;;;;;;;;;;18936:34;;18885:113;;;19031:6;19024:13;;;;;;18362:699;18237:843;18211:869;18165:915;19108:31;;;;;;;;;;;;;;18018:1129;;;;:::o;38798:105::-;38858:7;38885:10;38878:17;;38798:105;:::o;51292:95::-;51357:7;51380:1;51373:8;;51292:95;:::o;30055:2515::-;30170:27;30200;30219:7;30200:18;:27::i;:::-;30170:57;;30285:4;30244:45;;30260:19;30244:45;;;30240:86;;30298:28;;;;;;;;;;;;;;30240:86;30339:22;30388:4;30365:27;;:19;:17;:19::i;:::-;:27;;;:87;;;;30409:43;30426:4;30432:19;:17;:19::i;:::-;30409:16;:43::i;:::-;30365:87;:147;;;;30493:19;:17;:19::i;:::-;30469:43;;:20;30481:7;30469:11;:20::i;:::-;:43;;;30365:147;30339:174;;30531:17;30526:66;;30557:35;;;;;;;;;;;;;;30526:66;30621:1;30607:16;;:2;:16;;;30603:52;;;30632:23;;;;;;;;;;;;;;30603:52;30668:43;30690:4;30696:2;30700:7;30709:1;30668:21;:43::i;:::-;30784:15;:24;30800:7;30784:24;;;;;;;;;;;;30777:31;;;;;;;;;;;31176:18;:24;31195:4;31176:24;;;;;;;;;;;;;;;;31174:26;;;;;;;;;;;;31245:18;:22;31264:2;31245:22;;;;;;;;;;;;;;;;31243:24;;;;;;;;;;;12771:8;12373:3;31626:15;:41;;31584:21;31602:2;31584:17;:21::i;:::-;:84;:128;31538:17;:26;31556:7;31538:26;;;;;;;;;;;:174;;;;31882:1;12771:8;31832:19;:46;:51;31828:626;;;31904:19;31936:1;31926:7;:11;31904:33;;32093:1;32059:17;:30;32077:11;32059:30;;;;;;;;;;;;:35;32055:384;;;32197:13;;32182:11;:28;32178:242;;32377:19;32344:17;:30;32362:11;32344:30;;;;;;;;;;;:52;;;;32178:242;32055:384;31885:569;31828:626;32501:7;32497:2;32482:27;;32491:4;32482:27;;;;;;;;;;;;32520:42;32541:4;32547:2;32551:7;32560:1;32520:20;:42::i;:::-;30159:2411;;30055:2515;;;:::o;48991:191::-;49065:16;49084:6;;;;;;;;;;;49065:25;;49110:8;49101:6;;:17;;;;;;;;;;;;;;;;;;49165:8;49134:40;;49155:8;49134:40;;;;;;;;;;;;49054:128;48991:191;:::o;25173:104::-;25242:27;25252:2;25256:8;25242:27;;;;;;;;;;;;:9;:27::i;:::-;25173:104;;:::o;36267:716::-;36430:4;36476:2;36451:45;;;36497:19;:17;:19::i;:::-;36518:4;36524:7;36533:5;36451:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36447:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36751:1;36734:6;:13;:18;36730:235;;;36780:40;;;;;;;;;;;;;;36730:235;36923:6;36917:13;36908:6;36904:2;36900:15;36893:38;36447:529;36620:54;;;36610:64;;;:6;:64;;;;36603:71;;;36267:716;;;;;;:::o;52674:104::-;52734:13;52763:9;52756:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52674:104;:::o;41318:723::-;41374:13;41604:1;41595:5;:10;41591:53;;;41622:10;;;;;;;;;;;;;;;;;;;;;41591:53;41654:12;41669:5;41654:20;;41685:14;41710:78;41725:1;41717:4;:9;41710:78;;41743:8;;;;;:::i;:::-;;;;41774:2;41766:10;;;;;:::i;:::-;;;41710:78;;;41798:19;41830:6;41820:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41798:39;;41848:154;41864:1;41855:5;:10;41848:154;;41892:1;41882:11;;;;;:::i;:::-;;;41959:2;41951:5;:10;;;;:::i;:::-;41938:2;:24;;;;:::i;:::-;41925:39;;41908:6;41915;41908:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;41988:2;41979:11;;;;;:::i;:::-;;;41848:154;;;42026:6;42012:21;;;;;41318:723;;;;:::o;16686:176::-;16747:7;11719:13;11856:2;16775:18;:25;16794:5;16775:25;;;;;;;;;;;;;;;;:49;;16774:80;16767:87;;16686:176;;;:::o;37631:159::-;;;;;:::o;21803:148::-;21867:14;21928:5;21918:15;;21803:148;;;:::o;38449:158::-;;;;;:::o;25650:2236::-;25773:20;25796:13;;25773:36;;25838:1;25824:16;;:2;:16;;;25820:48;;;25849:19;;;;;;;;;;;;;;25820:48;25895:1;25883:8;:13;25879:44;;;25905:18;;;;;;;;;;;;;;25879:44;25936:61;25966:1;25970:2;25974:12;25988:8;25936:21;:61::i;:::-;26540:1;11856:2;26511:1;:25;;26510:31;26498:8;:44;26472:18;:22;26491:2;26472:22;;;;;;;;;;;;;;;;:70;;;;;;;;;;;12636:3;26941:29;26968:1;26956:8;:13;26941:14;:29::i;:::-;:56;;12373:3;26878:15;:41;;26836:21;26854:2;26836:17;:21::i;:::-;:84;:162;26785:17;:31;26803:12;26785:31;;;;;;;;;;;:213;;;;27015:20;27038:12;27015:35;;27065:11;27094:8;27079:12;:23;27065:37;;27141:1;27123:2;:14;;;:19;27119:635;;27163:313;27219:12;27215:2;27194:38;;27211:1;27194:38;;;;;;;;;;;;27260:69;27299:1;27303:2;27307:14;;;;;;27323:5;27260:30;:69::i;:::-;27255:174;;27365:40;;;;;;;;;;;;;;27255:174;27471:3;27456:12;:18;27163:313;;27557:12;27540:13;;:29;27536:43;;27571:8;;;27536:43;27119:635;;;27620:119;27676:14;;;;;;27672:2;27651:40;;27668:1;27651:40;;;;;;;;;;;;27734:3;27719:12;:18;27620:119;;27119:635;27784:12;27768:13;:28;;;;26249:1559;;27818:60;27847:1;27851:2;27855:12;27869:8;27818:20;:60::i;:::-;25762:2124;25650:2236;;;:::o;22038:142::-;22096:14;22157:5;22147:15;;22038:142;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:474::-;7555:6;7563;7612:2;7600:9;7591:7;7587:23;7583:32;7580:119;;;7618:79;;:::i;:::-;7580:119;7738:1;7763:53;7808:7;7799:6;7788:9;7784:22;7763:53;:::i;:::-;7753:63;;7709:117;7865:2;7891:53;7936:7;7927:6;7916:9;7912:22;7891:53;:::i;:::-;7881:63;;7836:118;7487:474;;;;;:::o;7967:118::-;8054:24;8072:5;8054:24;:::i;:::-;8049:3;8042:37;7967:118;;:::o;8091:109::-;8172:21;8187:5;8172:21;:::i;:::-;8167:3;8160:34;8091:109;;:::o;8206:360::-;8292:3;8320:38;8352:5;8320:38;:::i;:::-;8374:70;8437:6;8432:3;8374:70;:::i;:::-;8367:77;;8453:52;8498:6;8493:3;8486:4;8479:5;8475:16;8453:52;:::i;:::-;8530:29;8552:6;8530:29;:::i;:::-;8525:3;8521:39;8514:46;;8296:270;8206:360;;;;:::o;8572:364::-;8660:3;8688:39;8721:5;8688:39;:::i;:::-;8743:71;8807:6;8802:3;8743:71;:::i;:::-;8736:78;;8823:52;8868:6;8863:3;8856:4;8849:5;8845:16;8823:52;:::i;:::-;8900:29;8922:6;8900:29;:::i;:::-;8895:3;8891:39;8884:46;;8664:272;8572:364;;;;:::o;8942:377::-;9048:3;9076:39;9109:5;9076:39;:::i;:::-;9131:89;9213:6;9208:3;9131:89;:::i;:::-;9124:96;;9229:52;9274:6;9269:3;9262:4;9255:5;9251:16;9229:52;:::i;:::-;9306:6;9301:3;9297:16;9290:23;;9052:267;8942:377;;;;:::o;9349:845::-;9452:3;9489:5;9483:12;9518:36;9544:9;9518:36;:::i;:::-;9570:89;9652:6;9647:3;9570:89;:::i;:::-;9563:96;;9690:1;9679:9;9675:17;9706:1;9701:137;;;;9852:1;9847:341;;;;9668:520;;9701:137;9785:4;9781:9;9770;9766:25;9761:3;9754:38;9821:6;9816:3;9812:16;9805:23;;9701:137;;9847:341;9914:38;9946:5;9914:38;:::i;:::-;9974:1;9988:154;10002:6;9999:1;9996:13;9988:154;;;10076:7;10070:14;10066:1;10061:3;10057:11;10050:35;10126:1;10117:7;10113:15;10102:26;;10024:4;10021:1;10017:12;10012:17;;9988:154;;;10171:6;10166:3;10162:16;10155:23;;9854:334;;9668:520;;9456:738;;9349:845;;;;:::o;10200:366::-;10342:3;10363:67;10427:2;10422:3;10363:67;:::i;:::-;10356:74;;10439:93;10528:3;10439:93;:::i;:::-;10557:2;10552:3;10548:12;10541:19;;10200:366;;;:::o;10572:::-;10714:3;10735:67;10799:2;10794:3;10735:67;:::i;:::-;10728:74;;10811:93;10900:3;10811:93;:::i;:::-;10929:2;10924:3;10920:12;10913:19;;10572:366;;;:::o;10944:::-;11086:3;11107:67;11171:2;11166:3;11107:67;:::i;:::-;11100:74;;11183:93;11272:3;11183:93;:::i;:::-;11301:2;11296:3;11292:12;11285:19;;10944:366;;;:::o;11316:::-;11458:3;11479:67;11543:2;11538:3;11479:67;:::i;:::-;11472:74;;11555:93;11644:3;11555:93;:::i;:::-;11673:2;11668:3;11664:12;11657:19;;11316:366;;;:::o;11688:::-;11830:3;11851:67;11915:2;11910:3;11851:67;:::i;:::-;11844:74;;11927:93;12016:3;11927:93;:::i;:::-;12045:2;12040:3;12036:12;12029:19;;11688:366;;;:::o;12060:::-;12202:3;12223:67;12287:2;12282:3;12223:67;:::i;:::-;12216:74;;12299:93;12388:3;12299:93;:::i;:::-;12417:2;12412:3;12408:12;12401:19;;12060:366;;;:::o;12432:398::-;12591:3;12612:83;12693:1;12688:3;12612:83;:::i;:::-;12605:90;;12704:93;12793:3;12704:93;:::i;:::-;12822:1;12817:3;12813:11;12806:18;;12432:398;;;:::o;12836:366::-;12978:3;12999:67;13063:2;13058:3;12999:67;:::i;:::-;12992:74;;13075:93;13164:3;13075:93;:::i;:::-;13193:2;13188:3;13184:12;13177:19;;12836:366;;;:::o;13208:::-;13350:3;13371:67;13435:2;13430:3;13371:67;:::i;:::-;13364:74;;13447:93;13536:3;13447:93;:::i;:::-;13565:2;13560:3;13556:12;13549:19;;13208:366;;;:::o;13580:365::-;13722:3;13743:66;13807:1;13802:3;13743:66;:::i;:::-;13736:73;;13818:93;13907:3;13818:93;:::i;:::-;13936:2;13931:3;13927:12;13920:19;;13580:365;;;:::o;13951:366::-;14093:3;14114:67;14178:2;14173:3;14114:67;:::i;:::-;14107:74;;14190:93;14279:3;14190:93;:::i;:::-;14308:2;14303:3;14299:12;14292:19;;13951:366;;;:::o;14323:::-;14465:3;14486:67;14550:2;14545:3;14486:67;:::i;:::-;14479:74;;14562:93;14651:3;14562:93;:::i;:::-;14680:2;14675:3;14671:12;14664:19;;14323:366;;;:::o;14695:118::-;14782:24;14800:5;14782:24;:::i;:::-;14777:3;14770:37;14695:118;;:::o;14819:589::-;15044:3;15066:95;15157:3;15148:6;15066:95;:::i;:::-;15059:102;;15178:95;15269:3;15260:6;15178:95;:::i;:::-;15171:102;;15290:92;15378:3;15369:6;15290:92;:::i;:::-;15283:99;;15399:3;15392:10;;14819:589;;;;;;:::o;15414:379::-;15598:3;15620:147;15763:3;15620:147;:::i;:::-;15613:154;;15784:3;15777:10;;15414:379;;;:::o;15799:222::-;15892:4;15930:2;15919:9;15915:18;15907:26;;15943:71;16011:1;16000:9;15996:17;15987:6;15943:71;:::i;:::-;15799:222;;;;:::o;16027:640::-;16222:4;16260:3;16249:9;16245:19;16237:27;;16274:71;16342:1;16331:9;16327:17;16318:6;16274:71;:::i;:::-;16355:72;16423:2;16412:9;16408:18;16399:6;16355:72;:::i;:::-;16437;16505:2;16494:9;16490:18;16481:6;16437:72;:::i;:::-;16556:9;16550:4;16546:20;16541:2;16530:9;16526:18;16519:48;16584:76;16655:4;16646:6;16584:76;:::i;:::-;16576:84;;16027:640;;;;;;;:::o;16673:210::-;16760:4;16798:2;16787:9;16783:18;16775:26;;16811:65;16873:1;16862:9;16858:17;16849:6;16811:65;:::i;:::-;16673:210;;;;:::o;16889:313::-;17002:4;17040:2;17029:9;17025:18;17017:26;;17089:9;17083:4;17079:20;17075:1;17064:9;17060:17;17053:47;17117:78;17190:4;17181:6;17117:78;:::i;:::-;17109:86;;16889:313;;;;:::o;17208:419::-;17374:4;17412:2;17401:9;17397:18;17389:26;;17461:9;17455:4;17451:20;17447:1;17436:9;17432:17;17425:47;17489:131;17615:4;17489:131;:::i;:::-;17481:139;;17208:419;;;:::o;17633:::-;17799:4;17837:2;17826:9;17822:18;17814:26;;17886:9;17880:4;17876:20;17872:1;17861:9;17857:17;17850:47;17914:131;18040:4;17914:131;:::i;:::-;17906:139;;17633:419;;;:::o;18058:::-;18224:4;18262:2;18251:9;18247:18;18239:26;;18311:9;18305:4;18301:20;18297:1;18286:9;18282:17;18275:47;18339:131;18465:4;18339:131;:::i;:::-;18331:139;;18058:419;;;:::o;18483:::-;18649:4;18687:2;18676:9;18672:18;18664:26;;18736:9;18730:4;18726:20;18722:1;18711:9;18707:17;18700:47;18764:131;18890:4;18764:131;:::i;:::-;18756:139;;18483:419;;;:::o;18908:::-;19074:4;19112:2;19101:9;19097:18;19089:26;;19161:9;19155:4;19151:20;19147:1;19136:9;19132:17;19125:47;19189:131;19315:4;19189:131;:::i;:::-;19181:139;;18908:419;;;:::o;19333:::-;19499:4;19537:2;19526:9;19522:18;19514:26;;19586:9;19580:4;19576:20;19572:1;19561:9;19557:17;19550:47;19614:131;19740:4;19614:131;:::i;:::-;19606:139;;19333:419;;;:::o;19758:::-;19924:4;19962:2;19951:9;19947:18;19939:26;;20011:9;20005:4;20001:20;19997:1;19986:9;19982:17;19975:47;20039:131;20165:4;20039:131;:::i;:::-;20031:139;;19758:419;;;:::o;20183:::-;20349:4;20387:2;20376:9;20372:18;20364:26;;20436:9;20430:4;20426:20;20422:1;20411:9;20407:17;20400:47;20464:131;20590:4;20464:131;:::i;:::-;20456:139;;20183:419;;;:::o;20608:::-;20774:4;20812:2;20801:9;20797:18;20789:26;;20861:9;20855:4;20851:20;20847:1;20836:9;20832:17;20825:47;20889:131;21015:4;20889:131;:::i;:::-;20881:139;;20608:419;;;:::o;21033:::-;21199:4;21237:2;21226:9;21222:18;21214:26;;21286:9;21280:4;21276:20;21272:1;21261:9;21257:17;21250:47;21314:131;21440:4;21314:131;:::i;:::-;21306:139;;21033:419;;;:::o;21458:::-;21624:4;21662:2;21651:9;21647:18;21639:26;;21711:9;21705:4;21701:20;21697:1;21686:9;21682:17;21675:47;21739:131;21865:4;21739:131;:::i;:::-;21731:139;;21458:419;;;:::o;21883:222::-;21976:4;22014:2;22003:9;21999:18;21991:26;;22027:71;22095:1;22084:9;22080:17;22071:6;22027:71;:::i;:::-;21883:222;;;;:::o;22111:129::-;22145:6;22172:20;;:::i;:::-;22162:30;;22201:33;22229:4;22221:6;22201:33;:::i;:::-;22111:129;;;:::o;22246:75::-;22279:6;22312:2;22306:9;22296:19;;22246:75;:::o;22327:307::-;22388:4;22478:18;22470:6;22467:30;22464:56;;;22500:18;;:::i;:::-;22464:56;22538:29;22560:6;22538:29;:::i;:::-;22530:37;;22622:4;22616;22612:15;22604:23;;22327:307;;;:::o;22640:308::-;22702:4;22792:18;22784:6;22781:30;22778:56;;;22814:18;;:::i;:::-;22778:56;22852:29;22874:6;22852:29;:::i;:::-;22844:37;;22936:4;22930;22926:15;22918:23;;22640:308;;;:::o;22954:141::-;23003:4;23026:3;23018:11;;23049:3;23046:1;23039:14;23083:4;23080:1;23070:18;23062:26;;22954:141;;;:::o;23101:98::-;23152:6;23186:5;23180:12;23170:22;;23101:98;;;:::o;23205:99::-;23257:6;23291:5;23285:12;23275:22;;23205:99;;;:::o;23310:168::-;23393:11;23427:6;23422:3;23415:19;23467:4;23462:3;23458:14;23443:29;;23310:168;;;;:::o;23484:147::-;23585:11;23622:3;23607:18;;23484:147;;;;:::o;23637:169::-;23721:11;23755:6;23750:3;23743:19;23795:4;23790:3;23786:14;23771:29;;23637:169;;;;:::o;23812:148::-;23914:11;23951:3;23936:18;;23812:148;;;;:::o;23966:305::-;24006:3;24025:20;24043:1;24025:20;:::i;:::-;24020:25;;24059:20;24077:1;24059:20;:::i;:::-;24054:25;;24213:1;24145:66;24141:74;24138:1;24135:81;24132:107;;;24219:18;;:::i;:::-;24132:107;24263:1;24260;24256:9;24249:16;;23966:305;;;;:::o;24277:185::-;24317:1;24334:20;24352:1;24334:20;:::i;:::-;24329:25;;24368:20;24386:1;24368:20;:::i;:::-;24363:25;;24407:1;24397:35;;24412:18;;:::i;:::-;24397:35;24454:1;24451;24447:9;24442:14;;24277:185;;;;:::o;24468:348::-;24508:7;24531:20;24549:1;24531:20;:::i;:::-;24526:25;;24565:20;24583:1;24565:20;:::i;:::-;24560:25;;24753:1;24685:66;24681:74;24678:1;24675:81;24670:1;24663:9;24656:17;24652:105;24649:131;;;24760:18;;:::i;:::-;24649:131;24808:1;24805;24801:9;24790:20;;24468:348;;;;:::o;24822:191::-;24862:4;24882:20;24900:1;24882:20;:::i;:::-;24877:25;;24916:20;24934:1;24916:20;:::i;:::-;24911:25;;24955:1;24952;24949:8;24946:34;;;24960:18;;:::i;:::-;24946:34;25005:1;25002;24998:9;24990:17;;24822:191;;;;:::o;25019:96::-;25056:7;25085:24;25103:5;25085:24;:::i;:::-;25074:35;;25019:96;;;:::o;25121:90::-;25155:7;25198:5;25191:13;25184:21;25173:32;;25121:90;;;:::o;25217:149::-;25253:7;25293:66;25286:5;25282:78;25271:89;;25217:149;;;:::o;25372:126::-;25409:7;25449:42;25442:5;25438:54;25427:65;;25372:126;;;:::o;25504:77::-;25541:7;25570:5;25559:16;;25504:77;;;:::o;25587:154::-;25671:6;25666:3;25661;25648:30;25733:1;25724:6;25719:3;25715:16;25708:27;25587:154;;;:::o;25747:307::-;25815:1;25825:113;25839:6;25836:1;25833:13;25825:113;;;25924:1;25919:3;25915:11;25909:18;25905:1;25900:3;25896:11;25889:39;25861:2;25858:1;25854:10;25849:15;;25825:113;;;25956:6;25953:1;25950:13;25947:101;;;26036:1;26027:6;26022:3;26018:16;26011:27;25947:101;25796:258;25747:307;;;:::o;26060:320::-;26104:6;26141:1;26135:4;26131:12;26121:22;;26188:1;26182:4;26178:12;26209:18;26199:81;;26265:4;26257:6;26253:17;26243:27;;26199:81;26327:2;26319:6;26316:14;26296:18;26293:38;26290:84;;;26346:18;;:::i;:::-;26290:84;26111:269;26060:320;;;:::o;26386:281::-;26469:27;26491:4;26469:27;:::i;:::-;26461:6;26457:40;26599:6;26587:10;26584:22;26563:18;26551:10;26548:34;26545:62;26542:88;;;26610:18;;:::i;:::-;26542:88;26650:10;26646:2;26639:22;26429:238;26386:281;;:::o;26673:233::-;26712:3;26735:24;26753:5;26735:24;:::i;:::-;26726:33;;26781:66;26774:5;26771:77;26768:103;;;26851:18;;:::i;:::-;26768:103;26898:1;26891:5;26887:13;26880:20;;26673:233;;;:::o;26912:176::-;26944:1;26961:20;26979:1;26961:20;:::i;:::-;26956:25;;26995:20;27013:1;26995:20;:::i;:::-;26990:25;;27034:1;27024:35;;27039:18;;:::i;:::-;27024:35;27080:1;27077;27073:9;27068:14;;26912:176;;;;:::o;27094:180::-;27142:77;27139:1;27132:88;27239:4;27236:1;27229:15;27263:4;27260:1;27253:15;27280:180;27328:77;27325:1;27318:88;27425:4;27422:1;27415:15;27449:4;27446:1;27439:15;27466:180;27514:77;27511:1;27504:88;27611:4;27608:1;27601:15;27635:4;27632:1;27625:15;27652:180;27700:77;27697:1;27690:88;27797:4;27794:1;27787:15;27821:4;27818:1;27811:15;27838:180;27886:77;27883:1;27876:88;27983:4;27980:1;27973:15;28007:4;28004:1;27997:15;28024:117;28133:1;28130;28123:12;28147:117;28256:1;28253;28246:12;28270:117;28379:1;28376;28369:12;28393:117;28502:1;28499;28492:12;28516:102;28557:6;28608:2;28604:7;28599:2;28592:5;28588:14;28584:28;28574:38;;28516:102;;;:::o;28624:225::-;28764:34;28760:1;28752:6;28748:14;28741:58;28833:8;28828:2;28820:6;28816:15;28809:33;28624:225;:::o;28855:171::-;28995:23;28991:1;28983:6;28979:14;28972:47;28855:171;:::o;29032:220::-;29172:34;29168:1;29160:6;29156:14;29149:58;29241:3;29236:2;29228:6;29224:15;29217:28;29032:220;:::o;29258:182::-;29398:34;29394:1;29386:6;29382:14;29375:58;29258:182;:::o;29446:167::-;29586:19;29582:1;29574:6;29570:14;29563:43;29446:167;:::o;29619:234::-;29759:34;29755:1;29747:6;29743:14;29736:58;29828:17;29823:2;29815:6;29811:15;29804:42;29619:234;:::o;29859:114::-;;:::o;29979:170::-;30119:22;30115:1;30107:6;30103:14;30096:46;29979:170;:::o;30155:181::-;30295:33;30291:1;30283:6;30279:14;30272:57;30155:181;:::o;30342:159::-;30482:11;30478:1;30470:6;30466:14;30459:35;30342:159;:::o;30507:224::-;30647:34;30643:1;30635:6;30631:14;30624:58;30716:7;30711:2;30703:6;30699:15;30692:32;30507:224;:::o;30737:169::-;30877:21;30873:1;30865:6;30861:14;30854:45;30737:169;:::o;30912:122::-;30985:24;31003:5;30985:24;:::i;:::-;30978:5;30975:35;30965:63;;31024:1;31021;31014:12;30965:63;30912:122;:::o;31040:116::-;31110:21;31125:5;31110:21;:::i;:::-;31103:5;31100:32;31090:60;;31146:1;31143;31136:12;31090:60;31040:116;:::o;31162:120::-;31234:23;31251:5;31234:23;:::i;:::-;31227:5;31224:34;31214:62;;31272:1;31269;31262:12;31214:62;31162:120;:::o;31288:122::-;31361:24;31379:5;31361:24;:::i;:::-;31354:5;31351:35;31341:63;;31400:1;31397;31390:12;31341:63;31288:122;:::o

Swarm Source

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