ETH Price: $3,267.69 (-1.42%)

Contract

0x3D39f4f618cdb335434156883574Cc6D20f683F4
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Set Approval For...215008102024-12-28 11:57:4714 days ago1735387067IN
0x3D39f4f6...D20f683F4
0 ETH0.000230684.99896859
Set Approval For...211202432024-11-05 8:26:1167 days ago1730795171IN
0x3D39f4f6...D20f683F4
0 ETH0.000217524.70530118
Set Approval For...163567642023-01-07 18:41:35734 days ago1673116895IN
0x3D39f4f6...D20f683F4
0 ETH0.0006570714.238976
Set Approval For...161899152022-12-15 11:52:35758 days ago1671105155IN
0x3D39f4f6...D20f683F4
0 ETH0.0006129913.25973659
Set Approval For...159028712022-11-05 9:18:23798 days ago1667639903IN
0x3D39f4f6...D20f683F4
0 ETH0.0006113513.24817771
Set Approval For...155788032022-09-21 2:17:11843 days ago1663726631IN
0x3D39f4f6...D20f683F4
0 ETH0.000355787.71008428
Set Approval For...155193582022-09-12 6:16:59852 days ago1662963419IN
0x3D39f4f6...D20f683F4
0 ETH0.000401578.70223658
Safe Transfer Fr...154666542022-09-03 17:22:20861 days ago1662225740IN
0x3D39f4f6...D20f683F4
0 ETH0.000312776.63335543
Set Approval For...154165622022-08-26 17:02:11869 days ago1661533331IN
0x3D39f4f6...D20f683F4
0 ETH0.001275227.63409505
Set Approval For...152681712022-08-03 7:25:15892 days ago1659511515IN
0x3D39f4f6...D20f683F4
0 ETH0.000274955.95838916
Set Approval For...151677572022-07-18 16:36:44908 days ago1658162204IN
0x3D39f4f6...D20f683F4
0 ETH0.0020280843.86941608
Transfer From151270612022-07-12 9:36:33914 days ago1657618593IN
0x3D39f4f6...D20f683F4
0 ETH0.002473426.28844831
Set Approval For...151021202022-07-08 13:14:36918 days ago1657286076IN
0x3D39f4f6...D20f683F4
0 ETH0.0011413424.73335018
Transfer From151005182022-07-08 7:17:16918 days ago1657264636IN
0x3D39f4f6...D20f683F4
0 ETH0.0011475718.65157406
Claim150886762022-07-06 11:32:14920 days ago1657107134IN
0x3D39f4f6...D20f683F4
0 ETH0.0020144718.43356616
Set Approval For...150542732022-07-01 3:51:17925 days ago1656647477IN
0x3D39f4f6...D20f683F4
0 ETH0.0016532735.82705496
Set Approval For...150398322022-06-28 13:11:37928 days ago1656421897IN
0x3D39f4f6...D20f683F4
0 ETH0.0042689392.50936615
Set Approval For...150384092022-06-28 6:43:39928 days ago1656398619IN
0x3D39f4f6...D20f683F4
0 ETH0.0013192328.58829384
Set Approval For...150344972022-06-27 13:01:57929 days ago1656334917IN
0x3D39f4f6...D20f683F4
0 ETH0.0012146526.32202111
Set Approval For...150344442022-06-27 12:50:48929 days ago1656334248IN
0x3D39f4f6...D20f683F4
0 ETH0.0017937638.87159776
Mint150343142022-06-27 12:16:44929 days ago1656332204IN
0x3D39f4f6...D20f683F4
0.0188 ETH0.0032612135.77817857
Mint150343112022-06-27 12:16:04929 days ago1656332164IN
0x3D39f4f6...D20f683F4
0.0188 ETH0.0033014236.21926263
Set Approval For...150342642022-06-27 12:00:26929 days ago1656331226IN
0x3D39f4f6...D20f683F4
0 ETH0.0014097930.55066914
Set Approval For...150341942022-06-27 11:39:55929 days ago1656329995IN
0x3D39f4f6...D20f683F4
0 ETH0.0009450720.48014005
Set Approval For...150341502022-06-27 11:30:22929 days ago1656329422IN
0x3D39f4f6...D20f683F4
0 ETH0.0012797227.7320394
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block
From
To
150343142022-06-27 12:16:44929 days ago1656332204
0x3D39f4f6...D20f683F4
0.0188 ETH
150343112022-06-27 12:16:04929 days ago1656332164
0x3D39f4f6...D20f683F4
0.0188 ETH
150341422022-06-27 11:29:15929 days ago1656329355
0x3D39f4f6...D20f683F4
0.0376 ETH
150341352022-06-27 11:27:03929 days ago1656329223
0x3D39f4f6...D20f683F4
0.0188 ETH
150340322022-06-27 11:01:36929 days ago1656327696
0x3D39f4f6...D20f683F4
0.0188 ETH
150339122022-06-27 10:30:38929 days ago1656325838
0x3D39f4f6...D20f683F4
0.0188 ETH
150336112022-06-27 9:10:45929 days ago1656321045
0x3D39f4f6...D20f683F4
0.0564 ETH
150332432022-06-27 7:32:27929 days ago1656315147
0x3D39f4f6...D20f683F4
0.0188 ETH
150317662022-06-27 1:02:50929 days ago1656291770
0x3D39f4f6...D20f683F4
0.0188 ETH
150317072022-06-27 0:46:49929 days ago1656290809
0x3D39f4f6...D20f683F4
0.0188 ETH
150316722022-06-27 0:37:21929 days ago1656290241
0x3D39f4f6...D20f683F4
0.0188 ETH
150316622022-06-27 0:33:52929 days ago1656290032
0x3D39f4f6...D20f683F4
0.094 ETH
150316532022-06-27 0:31:18929 days ago1656289878
0x3D39f4f6...D20f683F4
0.094 ETH
150316372022-06-27 0:27:47929 days ago1656289667
0x3D39f4f6...D20f683F4
0.0188 ETH
150082952022-06-22 15:29:31934 days ago1655911771
0x3D39f4f6...D20f683F4
0.0495 ETH
150058052022-06-22 4:23:14934 days ago1655871794
0x3D39f4f6...D20f683F4
0.0099 ETH
150058042022-06-22 4:22:25934 days ago1655871745
0x3D39f4f6...D20f683F4
0.0099 ETH
150011942022-06-21 7:45:33935 days ago1655797533
0x3D39f4f6...D20f683F4
0.099 ETH
150007592022-06-21 5:44:44935 days ago1655790284
0x3D39f4f6...D20f683F4
0.0495 ETH
150007362022-06-21 5:40:08935 days ago1655790008
0x3D39f4f6...D20f683F4
0.0495 ETH
149989322022-06-20 22:10:08935 days ago1655763008
0x3D39f4f6...D20f683F4
0.0099 ETH
149919652022-06-19 17:33:39937 days ago1655660019
0x3D39f4f6...D20f683F4
0.0099 ETH
149915832022-06-19 15:55:34937 days ago1655654134
0x3D39f4f6...D20f683F4
0.0495 ETH
149912262022-06-19 14:26:27937 days ago1655648787
0x3D39f4f6...D20f683F4
0.0198 ETH
149912042022-06-19 14:21:35937 days ago1655648495
0x3D39f4f6...D20f683F4
0.0495 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GoblinCNP

Compiler Version
v0.8.14+commit.80d49f37

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

abstract contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _transferOwnership(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

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

    function renounceOwnership() public virtual onlyOwner {
        _transferOwnership(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC165 {
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

interface IERC2981 is IERC165 {
    function royaltyInfo(uint256 tokenId, uint256 salePrice)
        external
        view
        returns (address receiver, uint256 royaltyAmount);
}

library MerkleProof {
    function verify(
        bytes32[] memory proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProof(proof, leaf) == root;
    }

    function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            bytes32 proofElement = proof[i];
            if (computedHash <= proofElement) {
                computedHash = _efficientHash(computedHash, proofElement);
            } else {
                computedHash = _efficientHash(proofElement, computedHash);
            }
        }
        return computedHash;
    }

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

interface IERC721A {
    error ApprovalCallerNotOwnerNorApproved();
    error ApprovalQueryForNonexistentToken();
    error ApproveToCaller();
    error BalanceQueryForZeroAddress();
    error MintToZeroAddress();
    error MintZeroQuantity();
    error OwnerQueryForNonexistentToken();
    error TransferCallerNotOwnerNorApproved();
    error TransferFromIncorrectOwner();
    error TransferToNonERC721ReceiverImplementer();
    error TransferToZeroAddress();
    error URIQueryForNonexistentToken();
    error MintERC2309QuantityExceedsLimit();
    error OwnershipNotInitializedForExtraData();
    struct TokenOwnership {
        address addr;
        uint64 startTimestamp;
        bool burned;
        uint24 extraData;
    }

    function totalSupply() external view returns (uint256);

    function supportsInterface(bytes4 interfaceId) external view returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
    event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
    event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

    function setApprovalForAll(address operator, bool _approved) external;

    function getApproved(uint256 tokenId) external view returns (address operator);

    function isApprovedForAll(address owner, address operator) external view returns (bool);

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

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

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

    event ConsecutiveTransfer(uint256 indexed fromTokenId, uint256 toTokenId, address indexed from, address indexed to);
}

interface ERC721A__IERC721Receiver {
    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

contract ERC721A is IERC721A {
    uint256 private constant BITMASK_ADDRESS_DATA_ENTRY = (1 << 64) - 1;
    uint256 private constant BITPOS_NUMBER_MINTED = 64;
    uint256 private constant BITPOS_NUMBER_BURNED = 128;
    uint256 private constant BITPOS_AUX = 192;
    uint256 private constant BITMASK_AUX_COMPLEMENT = (1 << 192) - 1;
    uint256 private constant BITPOS_START_TIMESTAMP = 160;
    uint256 private constant BITMASK_BURNED = 1 << 224;
    uint256 private constant BITPOS_NEXT_INITIALIZED = 225;
    uint256 private constant BITMASK_NEXT_INITIALIZED = 1 << 225;
    uint256 private constant BITPOS_EXTRA_DATA = 232;
    uint256 private constant BITMASK_EXTRA_DATA_COMPLEMENT = (1 << 232) - 1;
    uint256 private constant BITMASK_ADDRESS = (1 << 160) - 1;
    uint256 private constant MAX_MINT_ERC2309_QUANTITY_LIMIT = 5000;
    uint256 private _currentIndex;
    uint256 private _burnCounter;
    string private _name;
    string private _symbol;
    mapping(uint256 => uint256) private _packedOwnerships;
    mapping(address => uint256) private _packedAddressData;
    mapping(uint256 => address) private _tokenApprovals;
    mapping(address => mapping(address => bool)) private _operatorApprovals;

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

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

    function _nextTokenId() internal view returns (uint256) {
        return _currentIndex;
    }

    function totalSupply() public view override returns (uint256) {
        unchecked {
            return _currentIndex - _burnCounter - _startTokenId();
        }
    }

    function _totalMinted() internal view returns (uint256) {
        unchecked {
            return _currentIndex - _startTokenId();
        }
    }

    function _totalBurned() internal view returns (uint256) {
        return _burnCounter;
    }

    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == 0x01ffc9a7 || interfaceId == 0x80ac58cd || interfaceId == 0x5b5e139f;
    }

    function balanceOf(address owner) public view override returns (uint256) {
        if (owner == address(0)) revert BalanceQueryForZeroAddress();
        return _packedAddressData[owner] & BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _numberMinted(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> BITPOS_NUMBER_MINTED) & BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _numberBurned(address owner) internal view returns (uint256) {
        return (_packedAddressData[owner] >> BITPOS_NUMBER_BURNED) & BITMASK_ADDRESS_DATA_ENTRY;
    }

    function _getAux(address owner) internal view returns (uint64) {
        return uint64(_packedAddressData[owner] >> BITPOS_AUX);
    }

    function _setAux(address owner, uint64 aux) internal {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        assembly {
            auxCasted := aux
        }
        packed = (packed & BITMASK_AUX_COMPLEMENT) | (auxCasted << BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }

    function _packedOwnershipOf(uint256 tokenId) private view returns (uint256) {
        uint256 curr = tokenId;
        unchecked {
            if (_startTokenId() <= curr)
                if (curr < _currentIndex) {
                    uint256 packed = _packedOwnerships[curr];
                    if (packed & BITMASK_BURNED == 0) {
                        while (packed == 0) {
                            packed = _packedOwnerships[--curr];
                        }
                        return packed;
                    }
                }
        }
        revert OwnerQueryForNonexistentToken();
    }

    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;
        ownership.extraData = uint24(packed >> BITPOS_EXTRA_DATA);
    }

    function _ownershipAt(uint256 index) internal view returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnerships[index]);
    }

    function _initializeOwnershipAt(uint256 index) internal {
        if (_packedOwnerships[index] == 0) {
            _packedOwnerships[index] = _packedOwnershipOf(index);
        }
    }

    function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) {
        return _unpackedOwnership(_packedOwnershipOf(tokenId));
    }

    function _packOwnershipData(address owner, uint256 flags) private view returns (uint256 result) {
        assembly {
            owner := and(owner, BITMASK_ADDRESS)
            result := or(owner, or(shl(BITPOS_START_TIMESTAMP, timestamp()), flags))
        }
    }

    function ownerOf(uint256 tokenId) public view override returns (address) {
        return address(uint160(_packedOwnershipOf(tokenId)));
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
        if (!_exists(tokenId)) revert URIQueryForNonexistentToken();
        string memory baseURI = _baseURI();
        return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, _toString(tokenId))) : "";
    }

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

    function _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) {
        assembly {
            result := shl(BITPOS_NEXT_INITIALIZED, eq(quantity, 1))
        }
    }

    function approve(address to, uint256 tokenId) public override {
        address owner = ownerOf(tokenId);
        if (_msgSenderERC721A() != owner)
            if (!isApprovedForAll(owner, _msgSenderERC721A())) {
                revert ApprovalCallerNotOwnerNorApproved();
            }
        _tokenApprovals[tokenId] = to;
        emit Approval(owner, to, tokenId);
    }

    function getApproved(uint256 tokenId) public view override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();
        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved) public virtual override {
        if (operator == _msgSenderERC721A()) revert ApproveToCaller();
        _operatorApprovals[_msgSenderERC721A()][operator] = approved;
        emit ApprovalForAll(_msgSenderERC721A(), operator, approved);
    }

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        safeTransferFrom(from, to, tokenId, "");
    }

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        transferFrom(from, to, tokenId);
        if (to.code.length != 0)
            if (!_checkContractOnERC721Received(from, to, tokenId, _data)) {
                revert TransferToNonERC721ReceiverImplementer();
            }
    }

    function _exists(uint256 tokenId) internal view returns (bool) {
        return
            _startTokenId() <= tokenId && tokenId < _currentIndex && _packedOwnerships[tokenId] & BITMASK_BURNED == 0;
    }

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

    function _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal {
        _mint(to, quantity);
        unchecked {
            if (to.code.length != 0) {
                uint256 end = _currentIndex;
                uint256 index = end - quantity;
                do {
                    if (!_checkContractOnERC721Received(address(0), to, index++, _data)) {
                        revert TransferToNonERC721ReceiverImplementer();
                    }
                } while (index < end);
                if (_currentIndex != end) revert();
            }
        }
    }

    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);
        unchecked {
            _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);
            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );
            uint256 tokenId = startTokenId;
            uint256 end = startTokenId + quantity;
            do {
                emit Transfer(address(0), to, tokenId++);
            } while (tokenId < end);
            _currentIndex = end;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    function _mintERC2309(address to, uint256 quantity) internal {
        uint256 startTokenId = _currentIndex;
        if (to == address(0)) revert MintToZeroAddress();
        if (quantity == 0) revert MintZeroQuantity();
        if (quantity > MAX_MINT_ERC2309_QUANTITY_LIMIT) revert MintERC2309QuantityExceedsLimit();
        _beforeTokenTransfers(address(0), to, startTokenId, quantity);
        unchecked {
            _packedAddressData[to] += quantity * ((1 << BITPOS_NUMBER_MINTED) | 1);
            _packedOwnerships[startTokenId] = _packOwnershipData(
                to,
                _nextInitializedFlag(quantity) | _nextExtraData(address(0), to, 0)
            );
            emit ConsecutiveTransfer(startTokenId, startTokenId + quantity - 1, address(0), to);
            _currentIndex = startTokenId + quantity;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

    function _getApprovedAddress(uint256 tokenId)
        private
        view
        returns (uint256 approvedAddressSlot, address approvedAddress)
    {
        mapping(uint256 => address) storage tokenApprovalsPtr = _tokenApprovals;
        assembly {
            mstore(0x00, tokenId)
            mstore(0x20, tokenApprovalsPtr.slot)
            approvedAddressSlot := keccak256(0x00, 0x40)
            approvedAddress := sload(approvedAddressSlot)
        }
    }

    function _isOwnerOrApproved(
        address approvedAddress,
        address from,
        address msgSender
    ) private pure returns (bool result) {
        assembly {
            from := and(from, BITMASK_ADDRESS)
            msgSender := and(msgSender, BITMASK_ADDRESS)
            result := or(eq(msgSender, from), eq(msgSender, approvedAddress))
        }
    }

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);
        if (address(uint160(prevOwnershipPacked)) != from) revert TransferFromIncorrectOwner();
        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedAddress(tokenId);
        if (!_isOwnerOrApproved(approvedAddress, from, _msgSenderERC721A()))
            if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();
        if (to == address(0)) revert TransferToZeroAddress();
        _beforeTokenTransfers(from, to, tokenId, 1);
        assembly {
            if approvedAddress {
                sstore(approvedAddressSlot, 0)
            }
        }
        unchecked {
            --_packedAddressData[from];
            ++_packedAddressData[to];
            _packedOwnerships[tokenId] = _packOwnershipData(
                to,
                BITMASK_NEXT_INITIALIZED | _nextExtraData(from, to, prevOwnershipPacked)
            );
            if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                if (_packedOwnerships[nextTokenId] == 0) {
                    if (nextTokenId != _currentIndex) {
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }
        emit Transfer(from, to, tokenId);
        _afterTokenTransfers(from, to, tokenId, 1);
    }

    function _burn(uint256 tokenId) internal virtual {
        _burn(tokenId, false);
    }

    function _burn(uint256 tokenId, bool approvalCheck) internal virtual {
        uint256 prevOwnershipPacked = _packedOwnershipOf(tokenId);
        address from = address(uint160(prevOwnershipPacked));
        (uint256 approvedAddressSlot, address approvedAddress) = _getApprovedAddress(tokenId);
        if (approvalCheck) {
            if (!_isOwnerOrApproved(approvedAddress, from, _msgSenderERC721A()))
                if (!isApprovedForAll(from, _msgSenderERC721A())) revert TransferCallerNotOwnerNorApproved();
        }
        _beforeTokenTransfers(from, address(0), tokenId, 1);
        assembly {
            if approvedAddress {
                sstore(approvedAddressSlot, 0)
            }
        }
        unchecked {
            _packedAddressData[from] += (1 << BITPOS_NUMBER_BURNED) - 1;
            _packedOwnerships[tokenId] = _packOwnershipData(
                from,
                (BITMASK_BURNED | BITMASK_NEXT_INITIALIZED) | _nextExtraData(from, address(0), prevOwnershipPacked)
            );
            if (prevOwnershipPacked & BITMASK_NEXT_INITIALIZED == 0) {
                uint256 nextTokenId = tokenId + 1;
                if (_packedOwnerships[nextTokenId] == 0) {
                    if (nextTokenId != _currentIndex) {
                        _packedOwnerships[nextTokenId] = prevOwnershipPacked;
                    }
                }
            }
        }
        emit Transfer(from, address(0), tokenId);
        _afterTokenTransfers(from, address(0), tokenId, 1);
        unchecked {
            _burnCounter++;
        }
    }

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

    function _setExtraDataAt(uint256 index, uint24 extraData) internal {
        uint256 packed = _packedOwnerships[index];
        if (packed == 0) revert OwnershipNotInitializedForExtraData();
        uint256 extraDataCasted;
        assembly {
            extraDataCasted := extraData
        }
        packed = (packed & BITMASK_EXTRA_DATA_COMPLEMENT) | (extraDataCasted << BITPOS_EXTRA_DATA);
        _packedOwnerships[index] = packed;
    }

    function _nextExtraData(
        address from,
        address to,
        uint256 prevOwnershipPacked
    ) private view returns (uint256) {
        uint24 extraData = uint24(prevOwnershipPacked >> BITPOS_EXTRA_DATA);
        return uint256(_extraData(from, to, extraData)) << BITPOS_EXTRA_DATA;
    }

    function _extraData(
        address from,
        address to,
        uint24 previousExtraData
    ) internal view virtual returns (uint24) {}

    function _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    function _afterTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}

    function _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }

    function _toString(uint256 value) internal pure returns (string memory ptr) {
        assembly {
            ptr := add(mload(0x40), 128)
            mstore(0x40, ptr)
            let end := ptr
            for {
                let temp := value
                ptr := sub(ptr, 1)
                mstore8(ptr, add(48, mod(temp, 10)))
                temp := div(temp, 10)
            } temp {
                temp := div(temp, 10)
            } {
                ptr := sub(ptr, 1)
                mstore8(ptr, add(48, mod(temp, 10)))
            }
            let length := sub(end, ptr)
            ptr := sub(ptr, 32)
            mstore(ptr, length)
        }
    }
}

interface IERC721ABurnable is IERC721A {
    function burn(uint256 tokenId) external;
}

abstract contract ERC721ABurnable is ERC721A, IERC721ABurnable {
    function burn(uint256 tokenId) public virtual override {
        _burn(tokenId, true);
    }
}

interface IERC721AQueryable is IERC721A {
    error InvalidQueryRange();

    function explicitOwnershipOf(uint256 tokenId) external view returns (TokenOwnership memory);

    function explicitOwnershipsOf(uint256[] memory tokenIds) external view returns (TokenOwnership[] memory);

    function tokensOfOwnerIn(
        address owner,
        uint256 start,
        uint256 stop
    ) external view returns (uint256[] memory);

    function tokensOfOwner(address owner) external view returns (uint256[] memory);
}

abstract contract ERC721AQueryable is ERC721A, IERC721AQueryable {
    function explicitOwnershipOf(uint256 tokenId) public view override returns (TokenOwnership memory) {
        TokenOwnership memory ownership;
        if (tokenId < _startTokenId() || tokenId >= _nextTokenId()) {
            return ownership;
        }
        ownership = _ownershipAt(tokenId);
        if (ownership.burned) {
            return ownership;
        }
        return _ownershipOf(tokenId);
    }

    function explicitOwnershipsOf(uint256[] memory tokenIds) external view override returns (TokenOwnership[] memory) {
        unchecked {
            uint256 tokenIdsLength = tokenIds.length;
            TokenOwnership[] memory ownerships = new TokenOwnership[](tokenIdsLength);
            for (uint256 i; i != tokenIdsLength; ++i) {
                ownerships[i] = explicitOwnershipOf(tokenIds[i]);
            }
            return ownerships;
        }
    }

    function tokensOfOwnerIn(
        address owner,
        uint256 start,
        uint256 stop
    ) external view override returns (uint256[] memory) {
        unchecked {
            if (start >= stop) revert InvalidQueryRange();
            uint256 tokenIdsIdx;
            uint256 stopLimit = _nextTokenId();
            if (start < _startTokenId()) {
                start = _startTokenId();
            }
            if (stop > stopLimit) {
                stop = stopLimit;
            }
            uint256 tokenIdsMaxLength = balanceOf(owner);
            if (start < stop) {
                uint256 rangeLength = stop - start;
                if (rangeLength < tokenIdsMaxLength) {
                    tokenIdsMaxLength = rangeLength;
                }
            } else {
                tokenIdsMaxLength = 0;
            }
            uint256[] memory tokenIds = new uint256[](tokenIdsMaxLength);
            if (tokenIdsMaxLength == 0) {
                return tokenIds;
            }
            TokenOwnership memory ownership = explicitOwnershipOf(start);
            address currOwnershipAddr;
            if (!ownership.burned) {
                currOwnershipAddr = ownership.addr;
            }
            for (uint256 i = start; i != stop && tokenIdsIdx != tokenIdsMaxLength; ++i) {
                ownership = _ownershipAt(i);
                if (ownership.burned) {
                    continue;
                }
                if (ownership.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    tokenIds[tokenIdsIdx++] = i;
                }
            }
            assembly {
                mstore(tokenIds, tokenIdsIdx)
            }
            return tokenIds;
        }
    }

    function tokensOfOwner(address owner) external view override returns (uint256[] memory) {
        unchecked {
            uint256 tokenIdsIdx;
            address currOwnershipAddr;
            uint256 tokenIdsLength = balanceOf(owner);
            uint256[] memory tokenIds = new uint256[](tokenIdsLength);
            TokenOwnership memory ownership;
            for (uint256 i = _startTokenId(); tokenIdsIdx != tokenIdsLength; ++i) {
                ownership = _ownershipAt(i);
                if (ownership.burned) {
                    continue;
                }
                if (ownership.addr != address(0)) {
                    currOwnershipAddr = ownership.addr;
                }
                if (currOwnershipAddr == owner) {
                    tokenIds[tokenIdsIdx++] = i;
                }
            }
            return tokenIds;
        }
    }
}

contract GoblinCNP is ERC721A, ERC721ABurnable, ERC721AQueryable, IERC2981, Ownable {
    string public baseURI;
    uint256 public maxSupply;
    uint256 public cost;
    mapping(address => bool) public claimed;
    bytes32 public giveaway;
    struct Proof {
        uint256 index;
        address account;
        uint256 quantity;
        bytes32[] merkleProof;
    }

    constructor(
        string memory url_,
        uint256 maxSupply_,
        uint256 cost_,
        bytes32 giveaway_
    ) ERC721A("GoblinCNP", "GCNP") {
        baseURI = url_;
        maxSupply = maxSupply_;
        cost = cost_;
        giveaway = giveaway_;
        _mint(msg.sender, 1);
    }

    function airdrop(address to, uint256 quantity) external onlyOwner {
        require(totalSupply() + quantity <= maxSupply, "NO_GOBLIN");
        _mint(to, quantity);
    }

    function mint(uint256 quantity) external payable {
        require(totalSupply() + quantity <= maxSupply, "NO_GOBLIN");
        require(msg.value >= cost * quantity, "INSUFFICIENT_VALUE");
        payable(owner()).transfer(address(this).balance);
        _mint(msg.sender, quantity);
    }

    function claim(Proof memory proof) external {
        require(totalSupply() + proof.quantity <= maxSupply, "NO_GOBLIN");
        bytes32 node = keccak256(abi.encodePacked(proof.index, proof.account, proof.quantity));
        require(MerkleProof.verify(proof.merkleProof, giveaway, node), "INVALID_PROOF");
        require(!claimed[proof.account], "CLAIMED");
        claimed[proof.account] = true;
        _mint(proof.account, proof.quantity);
    }

    function setBaseURI(string memory baseURI_) external onlyOwner {
        baseURI = baseURI_;
    }

    function setMaxSupply(uint256 maxSupply_) external onlyOwner {
        maxSupply = maxSupply_;
    }

    function setCost(uint256 cost_) external onlyOwner {
        cost = cost_;
    }

    function setGiveaway(bytes32 giveaway_) external onlyOwner {
        giveaway = giveaway_;
    }

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

    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override(ERC721A, IERC721A, IERC165)
        returns (bool)
    {
        return interfaceId == type(IERC2981).interfaceId || super.supportsInterface(interfaceId);
    }

    function royaltyInfo(uint256, uint256 price) external view override returns (address, uint256) {
        return (owner(), (price * 10) / 100);
    }

    receive() external payable {}
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"string","name":"url_","type":"string"},{"internalType":"uint256","name":"maxSupply_","type":"uint256"},{"internalType":"uint256","name":"cost_","type":"uint256"},{"internalType":"bytes32","name":"giveaway_","type":"bytes32"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"InvalidQueryRange","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","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":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","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":"quantity","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"components":[{"internalType":"uint256","name":"index","type":"uint256"},{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"merkleProof","type":"bytes32[]"}],"internalType":"struct GoblinCNP.Proof","name":"proof","type":"tuple"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"explicitOwnershipOf","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"},{"internalType":"uint24","name":"extraData","type":"uint24"}],"internalType":"struct IERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"explicitOwnershipsOf","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"},{"internalType":"uint24","name":"extraData","type":"uint24"}],"internalType":"struct IERC721A.TokenOwnership[]","name":"","type":"tuple[]"}],"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":"giveaway","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"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":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"cost_","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"giveaway_","type":"bytes32"}],"name":"setGiveaway","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSupply_","type":"uint256"}],"name":"setMaxSupply","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":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"stop","type":"uint256"}],"name":"tokensOfOwnerIn","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040516200277e3803806200277e8339810160408190526200003491620002d6565b60408051808201825260098152680476f626c696e434e560bc1b602080830191825283518085019094526004845263047434e560e41b90840152815191929162000081916002916200021a565b508051620000979060039060208401906200021a565b50506000805550620000a933620000e5565b8351620000be9060099060208701906200021a565b50600a839055600b829055600d819055620000db33600162000137565b505050506200040a565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000546001600160a01b0383166200016157604051622e076360e81b815260040160405180910390fd5b81600003620001835760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038316600081815260056020526040902080546801000000000000000185020190554260a01b6001841460e11b1717600082815260046020526040902055808281015b6040516001830192906001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a4808210620001cd5760005550505050565b8280546200022890620003ce565b90600052602060002090601f0160209004810192826200024c576000855562000297565b82601f106200026757805160ff191683800117855562000297565b8280016001018555821562000297579182015b82811115620002975782518255916020019190600101906200027a565b50620002a5929150620002a9565b5090565b5b80821115620002a55760008155600101620002aa565b634e487b7160e01b600052604160045260246000fd5b60008060008060808587031215620002ed57600080fd5b84516001600160401b03808211156200030557600080fd5b818701915087601f8301126200031a57600080fd5b8151818111156200032f576200032f620002c0565b604051601f8201601f19908116603f011681019083821181831017156200035a576200035a620002c0565b81604052828152602093508a848487010111156200037757600080fd5b600091505b828210156200039b57848201840151818301850152908301906200037c565b82821115620003ad5760008484830101525b9289015160408a01516060909a0151939b909a509297509195505050505050565b600181811c90821680620003e357607f821691505b6020821081036200040457634e487b7160e01b600052602260045260246000fd5b50919050565b612364806200041a6000396000f3fe6080604052600436106102085760003560e01c806370a0823111610118578063b88d4fde116100a0578063d5abeb011161006f578063d5abeb0114610628578063e14b150c1461063e578063e985e9c51461065e578063f2fde38b1461067e578063f9850b721461069e57600080fd5b8063b88d4fde1461058b578063c23dc68f146105ab578063c87b56dd146105d8578063c884ef83146105f857600080fd5b80638da5cb5b116100e75780638da5cb5b1461050557806395d89b411461052357806399a2557a14610538578063a0712d6814610558578063a22cb4651461056b57600080fd5b806370a0823114610483578063715018a6146104a35780638462151c146104b85780638ba4cc3c146104e557600080fd5b80633d995ada1161019b57806355f804b31161016a57806355f804b3146103e15780635bbb2177146104015780636352211e1461042e5780636c0360eb1461044e5780636f8b44b01461046357600080fd5b80633d995ada1461036157806342842e0e1461038157806342966c68146103a157806344a0d68a146103c157600080fd5b806313faede6116101d757806313faede6146102c557806318160ddd146102e957806323b872dd146103025780632a55205a1461032257600080fd5b806301ffc9a71461021457806306fdde0314610249578063081812fc1461026b578063095ea7b3146102a357600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b5061023461022f366004611b88565b6106b4565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025e6106df565b6040516102409190611bfd565b34801561027757600080fd5b5061028b610286366004611c10565b610771565b6040516001600160a01b039091168152602001610240565b3480156102af57600080fd5b506102c36102be366004611c45565b6107b5565b005b3480156102d157600080fd5b506102db600b5481565b604051908152602001610240565b3480156102f557600080fd5b50600154600054036102db565b34801561030e57600080fd5b506102c361031d366004611c6f565b610855565b34801561032e57600080fd5b5061034261033d366004611cab565b6109f7565b604080516001600160a01b039093168352602083019190915201610240565b34801561036d57600080fd5b506102c361037c366004611d5e565b610a2e565b34801561038d57600080fd5b506102c361039c366004611c6f565b610baf565b3480156103ad57600080fd5b506102c36103bc366004611c10565b610bcf565b3480156103cd57600080fd5b506102c36103dc366004611c10565b610bdd565b3480156103ed57600080fd5b506102c36103fc366004611ea1565b610c0c565b34801561040d57600080fd5b5061042161041c366004611ee9565b610c49565b6040516102409190611fb5565b34801561043a57600080fd5b5061028b610449366004611c10565b610d16565b34801561045a57600080fd5b5061025e610d21565b34801561046f57600080fd5b506102c361047e366004611c10565b610daf565b34801561048f57600080fd5b506102db61049e366004611ff7565b610dde565b3480156104af57600080fd5b506102c3610e2c565b3480156104c457600080fd5b506104d86104d3366004611ff7565b610e62565b6040516102409190612012565b3480156104f157600080fd5b506102c3610500366004611c45565b610f6a565b34801561051157600080fd5b506008546001600160a01b031661028b565b34801561052f57600080fd5b5061025e610fd7565b34801561054457600080fd5b506104d861055336600461204a565b610fe6565b6102c3610566366004611c10565b61115f565b34801561057757600080fd5b506102c361058636600461207d565b61122e565b34801561059757600080fd5b506102c36105a63660046120b9565b6112c3565b3480156105b757600080fd5b506105cb6105c6366004611c10565b61130d565b6040516102409190612134565b3480156105e457600080fd5b5061025e6105f3366004611c10565b611385565b34801561060457600080fd5b50610234610613366004611ff7565b600c6020526000908152604090205460ff1681565b34801561063457600080fd5b506102db600a5481565b34801561064a57600080fd5b506102c3610659366004611c10565b611408565b34801561066a57600080fd5b50610234610679366004612142565b611437565b34801561068a57600080fd5b506102c3610699366004611ff7565b611465565b3480156106aa57600080fd5b506102db600d5481565b60006001600160e01b0319821663152a902d60e11b14806106d957506106d9826114fd565b92915050565b6060600280546106ee90612175565b80601f016020809104026020016040519081016040528092919081815260200182805461071a90612175565b80156107675780601f1061073c57610100808354040283529160200191610767565b820191906000526020600020905b81548152906001019060200180831161074a57829003601f168201915b5050505050905090565b600061077c8261154b565b610799576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006107c082610d16565b9050336001600160a01b038216146107f9576107dc8133611437565b6107f9576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061086082611572565b9050836001600160a01b0316816001600160a01b0316146108935760405162a1148160e81b815260040160405180910390fd5b600082815260066020526040902080546108bf8187335b6001600160a01b039081169116811491141790565b6108ea576108cd8633611437565b6108ea57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661091157604051633a954ecd60e21b815260040160405180910390fd5b801561091c57600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040812091909155600160e11b841690036109ae576001840160008181526004602052604081205490036109ac5760005481146109ac5760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b600080610a0c6008546001600160a01b031690565b6064610a1985600a6121c5565b610a2391906121e4565b915091509250929050565b600a54604082015160015460005403610a479190612206565b1115610a6e5760405162461bcd60e51b8152600401610a659061221e565b60405180910390fd5b6000816000015182602001518360400151604051602001610ab49392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b604051602081830303815290604052805190602001209050610add8260600151600d54836115d9565b610b195760405162461bcd60e51b815260206004820152600d60248201526c24a72b20a624a22fa82927a7a360991b6044820152606401610a65565b6020808301516001600160a01b03166000908152600c909152604090205460ff1615610b715760405162461bcd60e51b815260206004820152600760248201526610d3105253515160ca1b6044820152606401610a65565b602080830180516001600160a01b03166000908152600c909252604091829020805460ff191660011790555190830151610bab91906115ef565b5050565b610bca838383604051806020016040528060008152506112c3565b505050565b610bda8160016116cf565b50565b6008546001600160a01b03163314610c075760405162461bcd60e51b8152600401610a6590612241565b600b55565b6008546001600160a01b03163314610c365760405162461bcd60e51b8152600401610a6590612241565b8051610bab906009906020840190611ad9565b80516060906000816001600160401b03811115610c6857610c68611ccd565b604051908082528060200260200182016040528015610cba57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610c865790505b50905060005b828114610d0e57610ce9858281518110610cdc57610cdc612276565b602002602001015161130d565b828281518110610cfb57610cfb612276565b6020908102919091010152600101610cc0565b509392505050565b60006106d982611572565b60098054610d2e90612175565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5a90612175565b8015610da75780601f10610d7c57610100808354040283529160200191610da7565b820191906000526020600020905b815481529060010190602001808311610d8a57829003601f168201915b505050505081565b6008546001600160a01b03163314610dd95760405162461bcd60e51b8152600401610a6590612241565b600a55565b60006001600160a01b038216610e07576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6008546001600160a01b03163314610e565760405162461bcd60e51b8152600401610a6590612241565b610e606000611819565b565b60606000806000610e7285610dde565b90506000816001600160401b03811115610e8e57610e8e611ccd565b604051908082528060200260200182016040528015610eb7578160200160208202803683370190505b509050610ee460408051608081018252600080825260208201819052918101829052606081019190915290565b60005b838614610f5e57610ef78161186b565b91508160400151610f565781516001600160a01b031615610f1757815194505b876001600160a01b0316856001600160a01b031603610f565780838780600101985081518110610f4957610f49612276565b6020026020010181815250505b600101610ee7565b50909695505050505050565b6008546001600160a01b03163314610f945760405162461bcd60e51b8152600401610a6590612241565b600a5481610fa56001546000540390565b610faf9190612206565b1115610fcd5760405162461bcd60e51b8152600401610a659061221e565b610bab82826115ef565b6060600380546106ee90612175565b606081831061100857604051631960ccad60e11b815260040160405180910390fd5b60008061101460005490565b905080841115611022578093505b600061102d87610dde565b90508486101561104c5785850381811015611046578091505b50611050565b5060005b6000816001600160401b0381111561106a5761106a611ccd565b604051908082528060200260200182016040528015611093578160200160208202803683370190505b509050816000036110a957935061115892505050565b60006110b48861130d565b9050600081604001516110c5575080515b885b8881141580156110d75750848714155b1561114c576110e58161186b565b925082604001516111445782516001600160a01b03161561110557825191505b8a6001600160a01b0316826001600160a01b031603611144578084888060010199508151811061113757611137612276565b6020026020010181815250505b6001016110c7565b50505092835250909150505b9392505050565b600a54816111706001546000540390565b61117a9190612206565b11156111985760405162461bcd60e51b8152600401610a659061221e565b80600b546111a691906121c5565b3410156111ea5760405162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f56414c554560701b6044820152606401610a65565b6008546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611223573d6000803e3d6000fd5b50610bda33826115ef565b336001600160a01b038316036112575760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6112ce848484610855565b6001600160a01b0383163b15611307576112ea848484846118a7565b611307576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60408051608080820183526000808352602080840182905283850182905260608085018390528551938401865282845290830182905293820181905292810183905290915060005483106113615792915050565b61136a8361186b565b905080604001511561137c5792915050565b61115883611993565b60606113908261154b565b6113ad57604051630a14c4b560e41b815260040160405180910390fd5b60006113b76119c8565b905080516000036113d75760405180602001604052806000815250611158565b806113e1846119d7565b6040516020016113f292919061228c565b6040516020818303038152906040529392505050565b6008546001600160a01b031633146114325760405162461bcd60e51b8152600401610a6590612241565b600d55565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6008546001600160a01b0316331461148f5760405162461bcd60e51b8152600401610a6590612241565b6001600160a01b0381166114f45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a65565b610bda81611819565b60006301ffc9a760e01b6001600160e01b03198316148061152e57506380ac58cd60e01b6001600160e01b03198316145b806106d95750506001600160e01b031916635b5e139f60e01b1490565b60008054821080156106d9575050600090815260046020526040902054600160e01b161590565b6000816000548110156115c05760008181526004602052604081205490600160e01b821690036115be575b8060000361115857506000190160008181526004602052604090205461159d565b505b604051636f96cda160e11b815260040160405180910390fd5b6000826115e68584611a26565b14949350505050565b6000546001600160a01b03831661161857604051622e076360e81b815260040160405180910390fd5b816000036116395760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038316600081815260056020526040902080546801000000000000000185020190554260a01b6001841460e11b1717600082815260046020526040902055808281015b6040516001830192906001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a48082106116835760005550505050565b60006116da83611572565b9050806000806116f886600090815260066020526040902080549091565b9150915084156117385761170d8184336108aa565b6117385761171b8333611437565b61173857604051632ce44b5f60e11b815260040160405180910390fd5b801561174357600082555b6001600160a01b038316600081815260056020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b17600360e01b17600087815260046020526040812091909155600160e11b851690036117d1576001860160008181526004602052604081205490036117cf5760005481146117cf5760008181526004602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050600180548101905550505050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040805160808101825260008082526020820181905291810182905260608101919091526000828152600460205260409020546106d990611a92565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906118dc9033908990889088906004016122bb565b6020604051808303816000875af1925050508015611917575060408051601f3d908101601f19168201909252611914918101906122f8565b60015b611975573d808015611945576040519150601f19603f3d011682016040523d82523d6000602084013e61194a565b606091505b50805160000361196d576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6040805160808101825260008082526020820181905291810182905260608101919091526106d96119c383611572565b611a92565b6060600980546106ee90612175565b604080516080810191829052607f0190826030600a8206018353600a90045b8015611a1457600183039250600a81066030018353600a90046119f6565b50819003601f19909101908152919050565b600081815b8451811015610d0e576000858281518110611a4857611a48612276565b60200260200101519050808311611a6e5760008381526020829052604090209250611a7f565b600081815260208490526040902092505b5080611a8a81612315565b915050611a2b565b604080516080810182526001600160a01b038316815260a083901c6001600160401b03166020820152600160e01b831615159181019190915260e89190911c606082015290565b828054611ae590612175565b90600052602060002090601f016020900481019282611b075760008555611b4d565b82601f10611b2057805160ff1916838001178555611b4d565b82800160010185558215611b4d579182015b82811115611b4d578251825591602001919060010190611b32565b50611b59929150611b5d565b5090565b5b80821115611b595760008155600101611b5e565b6001600160e01b031981168114610bda57600080fd5b600060208284031215611b9a57600080fd5b813561115881611b72565b60005b83811015611bc0578181015183820152602001611ba8565b838111156113075750506000910152565b60008151808452611be9816020860160208601611ba5565b601f01601f19169290920160200192915050565b6020815260006111586020830184611bd1565b600060208284031215611c2257600080fd5b5035919050565b80356001600160a01b0381168114611c4057600080fd5b919050565b60008060408385031215611c5857600080fd5b611c6183611c29565b946020939093013593505050565b600080600060608486031215611c8457600080fd5b611c8d84611c29565b9250611c9b60208501611c29565b9150604084013590509250925092565b60008060408385031215611cbe57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715611d0557611d05611ccd565b60405290565b604051601f8201601f191681016001600160401b0381118282101715611d3357611d33611ccd565b604052919050565b60006001600160401b03821115611d5457611d54611ccd565b5060051b60200190565b60006020808385031215611d7157600080fd5b82356001600160401b0380821115611d8857600080fd5b9084019060808287031215611d9c57600080fd5b611da4611ce3565b82358152611db3848401611c29565b8482015260408301356040820152606083013582811115611dd357600080fd5b80840193505086601f840112611de857600080fd5b82359150611dfd611df883611d3b565b611d0b565b82815260059290921b83018401918481019088841115611e1c57600080fd5b938501935b83851015611e3a57843582529385019390850190611e21565b6060830152509695505050505050565b60006001600160401b03831115611e6357611e63611ccd565b611e76601f8401601f1916602001611d0b565b9050828152838383011115611e8a57600080fd5b828260208301376000602084830101529392505050565b600060208284031215611eb357600080fd5b81356001600160401b03811115611ec957600080fd5b8201601f81018413611eda57600080fd5b61198b84823560208401611e4a565b60006020808385031215611efc57600080fd5b82356001600160401b03811115611f1257600080fd5b8301601f81018513611f2357600080fd5b8035611f31611df882611d3b565b81815260059190911b82018301908381019087831115611f5057600080fd5b928401925b82841015611f6e57833582529284019290840190611f55565b979650505050505050565b80516001600160a01b031682526020808201516001600160401b03169083015260408082015115159083015260609081015162ffffff16910152565b6020808252825182820181905260009190848201906040850190845b81811015610f5e57611fe4838551611f79565b9284019260809290920191600101611fd1565b60006020828403121561200957600080fd5b61115882611c29565b6020808252825182820181905260009190848201906040850190845b81811015610f5e5783518352928401929184019160010161202e565b60008060006060848603121561205f57600080fd5b61206884611c29565b95602085013595506040909401359392505050565b6000806040838503121561209057600080fd5b61209983611c29565b9150602083013580151581146120ae57600080fd5b809150509250929050565b600080600080608085870312156120cf57600080fd5b6120d885611c29565b93506120e660208601611c29565b92506040850135915060608501356001600160401b0381111561210857600080fd5b8501601f8101871361211957600080fd5b61212887823560208401611e4a565b91505092959194509250565b608081016106d98284611f79565b6000806040838503121561215557600080fd5b61215e83611c29565b915061216c60208401611c29565b90509250929050565b600181811c9082168061218957607f821691505b6020821081036121a957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156121df576121df6121af565b500290565b60008261220157634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612219576122196121af565b500190565b6020808252600990820152682727afa3a7a12624a760b91b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000835161229e818460208801611ba5565b8351908301906122b2818360208801611ba5565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906122ee90830184611bd1565b9695505050505050565b60006020828403121561230a57600080fd5b815161115881611b72565b600060018201612327576123276121af565b506001019056fea2646970667358221220acd219bd523f60015ad634eaebe2c4c3042e6b501717fa679339ab0a89fae34664736f6c634300080e003300000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000001a0a00000000000000000000000000000000000000000000000000232bff5f46c000e1608372e8265fdd758975020abf27b90b01e70d02406a28f0daee5d0b5b713b0000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d586e694a6a5054554357324447725768354834454c6a7a4b554c424844357958594a436337766151314b64702f00000000000000000000

Deployed Bytecode

0x6080604052600436106102085760003560e01c806370a0823111610118578063b88d4fde116100a0578063d5abeb011161006f578063d5abeb0114610628578063e14b150c1461063e578063e985e9c51461065e578063f2fde38b1461067e578063f9850b721461069e57600080fd5b8063b88d4fde1461058b578063c23dc68f146105ab578063c87b56dd146105d8578063c884ef83146105f857600080fd5b80638da5cb5b116100e75780638da5cb5b1461050557806395d89b411461052357806399a2557a14610538578063a0712d6814610558578063a22cb4651461056b57600080fd5b806370a0823114610483578063715018a6146104a35780638462151c146104b85780638ba4cc3c146104e557600080fd5b80633d995ada1161019b57806355f804b31161016a57806355f804b3146103e15780635bbb2177146104015780636352211e1461042e5780636c0360eb1461044e5780636f8b44b01461046357600080fd5b80633d995ada1461036157806342842e0e1461038157806342966c68146103a157806344a0d68a146103c157600080fd5b806313faede6116101d757806313faede6146102c557806318160ddd146102e957806323b872dd146103025780632a55205a1461032257600080fd5b806301ffc9a71461021457806306fdde0314610249578063081812fc1461026b578063095ea7b3146102a357600080fd5b3661020f57005b600080fd5b34801561022057600080fd5b5061023461022f366004611b88565b6106b4565b60405190151581526020015b60405180910390f35b34801561025557600080fd5b5061025e6106df565b6040516102409190611bfd565b34801561027757600080fd5b5061028b610286366004611c10565b610771565b6040516001600160a01b039091168152602001610240565b3480156102af57600080fd5b506102c36102be366004611c45565b6107b5565b005b3480156102d157600080fd5b506102db600b5481565b604051908152602001610240565b3480156102f557600080fd5b50600154600054036102db565b34801561030e57600080fd5b506102c361031d366004611c6f565b610855565b34801561032e57600080fd5b5061034261033d366004611cab565b6109f7565b604080516001600160a01b039093168352602083019190915201610240565b34801561036d57600080fd5b506102c361037c366004611d5e565b610a2e565b34801561038d57600080fd5b506102c361039c366004611c6f565b610baf565b3480156103ad57600080fd5b506102c36103bc366004611c10565b610bcf565b3480156103cd57600080fd5b506102c36103dc366004611c10565b610bdd565b3480156103ed57600080fd5b506102c36103fc366004611ea1565b610c0c565b34801561040d57600080fd5b5061042161041c366004611ee9565b610c49565b6040516102409190611fb5565b34801561043a57600080fd5b5061028b610449366004611c10565b610d16565b34801561045a57600080fd5b5061025e610d21565b34801561046f57600080fd5b506102c361047e366004611c10565b610daf565b34801561048f57600080fd5b506102db61049e366004611ff7565b610dde565b3480156104af57600080fd5b506102c3610e2c565b3480156104c457600080fd5b506104d86104d3366004611ff7565b610e62565b6040516102409190612012565b3480156104f157600080fd5b506102c3610500366004611c45565b610f6a565b34801561051157600080fd5b506008546001600160a01b031661028b565b34801561052f57600080fd5b5061025e610fd7565b34801561054457600080fd5b506104d861055336600461204a565b610fe6565b6102c3610566366004611c10565b61115f565b34801561057757600080fd5b506102c361058636600461207d565b61122e565b34801561059757600080fd5b506102c36105a63660046120b9565b6112c3565b3480156105b757600080fd5b506105cb6105c6366004611c10565b61130d565b6040516102409190612134565b3480156105e457600080fd5b5061025e6105f3366004611c10565b611385565b34801561060457600080fd5b50610234610613366004611ff7565b600c6020526000908152604090205460ff1681565b34801561063457600080fd5b506102db600a5481565b34801561064a57600080fd5b506102c3610659366004611c10565b611408565b34801561066a57600080fd5b50610234610679366004612142565b611437565b34801561068a57600080fd5b506102c3610699366004611ff7565b611465565b3480156106aa57600080fd5b506102db600d5481565b60006001600160e01b0319821663152a902d60e11b14806106d957506106d9826114fd565b92915050565b6060600280546106ee90612175565b80601f016020809104026020016040519081016040528092919081815260200182805461071a90612175565b80156107675780601f1061073c57610100808354040283529160200191610767565b820191906000526020600020905b81548152906001019060200180831161074a57829003601f168201915b5050505050905090565b600061077c8261154b565b610799576040516333d1c03960e21b815260040160405180910390fd5b506000908152600660205260409020546001600160a01b031690565b60006107c082610d16565b9050336001600160a01b038216146107f9576107dc8133611437565b6107f9576040516367d9dca160e11b815260040160405180910390fd5b60008281526006602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b600061086082611572565b9050836001600160a01b0316816001600160a01b0316146108935760405162a1148160e81b815260040160405180910390fd5b600082815260066020526040902080546108bf8187335b6001600160a01b039081169116811491141790565b6108ea576108cd8633611437565b6108ea57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b03851661091157604051633a954ecd60e21b815260040160405180910390fd5b801561091c57600082555b6001600160a01b038681166000908152600560205260408082208054600019019055918716808252919020805460010190554260a01b17600160e11b17600085815260046020526040812091909155600160e11b841690036109ae576001840160008181526004602052604081205490036109ac5760005481146109ac5760008181526004602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050505050565b600080610a0c6008546001600160a01b031690565b6064610a1985600a6121c5565b610a2391906121e4565b915091509250929050565b600a54604082015160015460005403610a479190612206565b1115610a6e5760405162461bcd60e51b8152600401610a659061221e565b60405180910390fd5b6000816000015182602001518360400151604051602001610ab49392919092835260609190911b6bffffffffffffffffffffffff19166020830152603482015260540190565b604051602081830303815290604052805190602001209050610add8260600151600d54836115d9565b610b195760405162461bcd60e51b815260206004820152600d60248201526c24a72b20a624a22fa82927a7a360991b6044820152606401610a65565b6020808301516001600160a01b03166000908152600c909152604090205460ff1615610b715760405162461bcd60e51b815260206004820152600760248201526610d3105253515160ca1b6044820152606401610a65565b602080830180516001600160a01b03166000908152600c909252604091829020805460ff191660011790555190830151610bab91906115ef565b5050565b610bca838383604051806020016040528060008152506112c3565b505050565b610bda8160016116cf565b50565b6008546001600160a01b03163314610c075760405162461bcd60e51b8152600401610a6590612241565b600b55565b6008546001600160a01b03163314610c365760405162461bcd60e51b8152600401610a6590612241565b8051610bab906009906020840190611ad9565b80516060906000816001600160401b03811115610c6857610c68611ccd565b604051908082528060200260200182016040528015610cba57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610c865790505b50905060005b828114610d0e57610ce9858281518110610cdc57610cdc612276565b602002602001015161130d565b828281518110610cfb57610cfb612276565b6020908102919091010152600101610cc0565b509392505050565b60006106d982611572565b60098054610d2e90612175565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5a90612175565b8015610da75780601f10610d7c57610100808354040283529160200191610da7565b820191906000526020600020905b815481529060010190602001808311610d8a57829003601f168201915b505050505081565b6008546001600160a01b03163314610dd95760405162461bcd60e51b8152600401610a6590612241565b600a55565b60006001600160a01b038216610e07576040516323d3ad8160e21b815260040160405180910390fd5b506001600160a01b03166000908152600560205260409020546001600160401b031690565b6008546001600160a01b03163314610e565760405162461bcd60e51b8152600401610a6590612241565b610e606000611819565b565b60606000806000610e7285610dde565b90506000816001600160401b03811115610e8e57610e8e611ccd565b604051908082528060200260200182016040528015610eb7578160200160208202803683370190505b509050610ee460408051608081018252600080825260208201819052918101829052606081019190915290565b60005b838614610f5e57610ef78161186b565b91508160400151610f565781516001600160a01b031615610f1757815194505b876001600160a01b0316856001600160a01b031603610f565780838780600101985081518110610f4957610f49612276565b6020026020010181815250505b600101610ee7565b50909695505050505050565b6008546001600160a01b03163314610f945760405162461bcd60e51b8152600401610a6590612241565b600a5481610fa56001546000540390565b610faf9190612206565b1115610fcd5760405162461bcd60e51b8152600401610a659061221e565b610bab82826115ef565b6060600380546106ee90612175565b606081831061100857604051631960ccad60e11b815260040160405180910390fd5b60008061101460005490565b905080841115611022578093505b600061102d87610dde565b90508486101561104c5785850381811015611046578091505b50611050565b5060005b6000816001600160401b0381111561106a5761106a611ccd565b604051908082528060200260200182016040528015611093578160200160208202803683370190505b509050816000036110a957935061115892505050565b60006110b48861130d565b9050600081604001516110c5575080515b885b8881141580156110d75750848714155b1561114c576110e58161186b565b925082604001516111445782516001600160a01b03161561110557825191505b8a6001600160a01b0316826001600160a01b031603611144578084888060010199508151811061113757611137612276565b6020026020010181815250505b6001016110c7565b50505092835250909150505b9392505050565b600a54816111706001546000540390565b61117a9190612206565b11156111985760405162461bcd60e51b8152600401610a659061221e565b80600b546111a691906121c5565b3410156111ea5760405162461bcd60e51b8152602060048201526012602482015271494e53554646494349454e545f56414c554560701b6044820152606401610a65565b6008546040516001600160a01b03909116904780156108fc02916000818181858888f19350505050158015611223573d6000803e3d6000fd5b50610bda33826115ef565b336001600160a01b038316036112575760405163b06307db60e01b815260040160405180910390fd5b3360008181526007602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b6112ce848484610855565b6001600160a01b0383163b15611307576112ea848484846118a7565b611307576040516368d2bf6b60e11b815260040160405180910390fd5b50505050565b60408051608080820183526000808352602080840182905283850182905260608085018390528551938401865282845290830182905293820181905292810183905290915060005483106113615792915050565b61136a8361186b565b905080604001511561137c5792915050565b61115883611993565b60606113908261154b565b6113ad57604051630a14c4b560e41b815260040160405180910390fd5b60006113b76119c8565b905080516000036113d75760405180602001604052806000815250611158565b806113e1846119d7565b6040516020016113f292919061228c565b6040516020818303038152906040529392505050565b6008546001600160a01b031633146114325760405162461bcd60e51b8152600401610a6590612241565b600d55565b6001600160a01b03918216600090815260076020908152604080832093909416825291909152205460ff1690565b6008546001600160a01b0316331461148f5760405162461bcd60e51b8152600401610a6590612241565b6001600160a01b0381166114f45760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610a65565b610bda81611819565b60006301ffc9a760e01b6001600160e01b03198316148061152e57506380ac58cd60e01b6001600160e01b03198316145b806106d95750506001600160e01b031916635b5e139f60e01b1490565b60008054821080156106d9575050600090815260046020526040902054600160e01b161590565b6000816000548110156115c05760008181526004602052604081205490600160e01b821690036115be575b8060000361115857506000190160008181526004602052604090205461159d565b505b604051636f96cda160e11b815260040160405180910390fd5b6000826115e68584611a26565b14949350505050565b6000546001600160a01b03831661161857604051622e076360e81b815260040160405180910390fd5b816000036116395760405163b562e8dd60e01b815260040160405180910390fd5b6001600160a01b038316600081815260056020526040902080546801000000000000000185020190554260a01b6001841460e11b1717600082815260046020526040902055808281015b6040516001830192906001600160a01b038716906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a48082106116835760005550505050565b60006116da83611572565b9050806000806116f886600090815260066020526040902080549091565b9150915084156117385761170d8184336108aa565b6117385761171b8333611437565b61173857604051632ce44b5f60e11b815260040160405180910390fd5b801561174357600082555b6001600160a01b038316600081815260056020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b17600360e01b17600087815260046020526040812091909155600160e11b851690036117d1576001860160008181526004602052604081205490036117cf5760005481146117cf5760008181526004602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050600180548101905550505050565b600880546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6040805160808101825260008082526020820181905291810182905260608101919091526000828152600460205260409020546106d990611a92565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a02906118dc9033908990889088906004016122bb565b6020604051808303816000875af1925050508015611917575060408051601f3d908101601f19168201909252611914918101906122f8565b60015b611975573d808015611945576040519150601f19603f3d011682016040523d82523d6000602084013e61194a565b606091505b50805160000361196d576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490505b949350505050565b6040805160808101825260008082526020820181905291810182905260608101919091526106d96119c383611572565b611a92565b6060600980546106ee90612175565b604080516080810191829052607f0190826030600a8206018353600a90045b8015611a1457600183039250600a81066030018353600a90046119f6565b50819003601f19909101908152919050565b600081815b8451811015610d0e576000858281518110611a4857611a48612276565b60200260200101519050808311611a6e5760008381526020829052604090209250611a7f565b600081815260208490526040902092505b5080611a8a81612315565b915050611a2b565b604080516080810182526001600160a01b038316815260a083901c6001600160401b03166020820152600160e01b831615159181019190915260e89190911c606082015290565b828054611ae590612175565b90600052602060002090601f016020900481019282611b075760008555611b4d565b82601f10611b2057805160ff1916838001178555611b4d565b82800160010185558215611b4d579182015b82811115611b4d578251825591602001919060010190611b32565b50611b59929150611b5d565b5090565b5b80821115611b595760008155600101611b5e565b6001600160e01b031981168114610bda57600080fd5b600060208284031215611b9a57600080fd5b813561115881611b72565b60005b83811015611bc0578181015183820152602001611ba8565b838111156113075750506000910152565b60008151808452611be9816020860160208601611ba5565b601f01601f19169290920160200192915050565b6020815260006111586020830184611bd1565b600060208284031215611c2257600080fd5b5035919050565b80356001600160a01b0381168114611c4057600080fd5b919050565b60008060408385031215611c5857600080fd5b611c6183611c29565b946020939093013593505050565b600080600060608486031215611c8457600080fd5b611c8d84611c29565b9250611c9b60208501611c29565b9150604084013590509250925092565b60008060408385031215611cbe57600080fd5b50508035926020909101359150565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715611d0557611d05611ccd565b60405290565b604051601f8201601f191681016001600160401b0381118282101715611d3357611d33611ccd565b604052919050565b60006001600160401b03821115611d5457611d54611ccd565b5060051b60200190565b60006020808385031215611d7157600080fd5b82356001600160401b0380821115611d8857600080fd5b9084019060808287031215611d9c57600080fd5b611da4611ce3565b82358152611db3848401611c29565b8482015260408301356040820152606083013582811115611dd357600080fd5b80840193505086601f840112611de857600080fd5b82359150611dfd611df883611d3b565b611d0b565b82815260059290921b83018401918481019088841115611e1c57600080fd5b938501935b83851015611e3a57843582529385019390850190611e21565b6060830152509695505050505050565b60006001600160401b03831115611e6357611e63611ccd565b611e76601f8401601f1916602001611d0b565b9050828152838383011115611e8a57600080fd5b828260208301376000602084830101529392505050565b600060208284031215611eb357600080fd5b81356001600160401b03811115611ec957600080fd5b8201601f81018413611eda57600080fd5b61198b84823560208401611e4a565b60006020808385031215611efc57600080fd5b82356001600160401b03811115611f1257600080fd5b8301601f81018513611f2357600080fd5b8035611f31611df882611d3b565b81815260059190911b82018301908381019087831115611f5057600080fd5b928401925b82841015611f6e57833582529284019290840190611f55565b979650505050505050565b80516001600160a01b031682526020808201516001600160401b03169083015260408082015115159083015260609081015162ffffff16910152565b6020808252825182820181905260009190848201906040850190845b81811015610f5e57611fe4838551611f79565b9284019260809290920191600101611fd1565b60006020828403121561200957600080fd5b61115882611c29565b6020808252825182820181905260009190848201906040850190845b81811015610f5e5783518352928401929184019160010161202e565b60008060006060848603121561205f57600080fd5b61206884611c29565b95602085013595506040909401359392505050565b6000806040838503121561209057600080fd5b61209983611c29565b9150602083013580151581146120ae57600080fd5b809150509250929050565b600080600080608085870312156120cf57600080fd5b6120d885611c29565b93506120e660208601611c29565b92506040850135915060608501356001600160401b0381111561210857600080fd5b8501601f8101871361211957600080fd5b61212887823560208401611e4a565b91505092959194509250565b608081016106d98284611f79565b6000806040838503121561215557600080fd5b61215e83611c29565b915061216c60208401611c29565b90509250929050565b600181811c9082168061218957607f821691505b6020821081036121a957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156121df576121df6121af565b500290565b60008261220157634e487b7160e01b600052601260045260246000fd5b500490565b60008219821115612219576122196121af565b500190565b6020808252600990820152682727afa3a7a12624a760b91b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b6000835161229e818460208801611ba5565b8351908301906122b2818360208801611ba5565b01949350505050565b6001600160a01b03858116825284166020820152604081018390526080606082018190526000906122ee90830184611bd1565b9695505050505050565b60006020828403121561230a57600080fd5b815161115881611b72565b600060018201612327576123276121af565b506001019056fea2646970667358221220acd219bd523f60015ad634eaebe2c4c3042e6b501717fa679339ab0a89fae34664736f6c634300080e0033

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

00000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000001a0a00000000000000000000000000000000000000000000000000232bff5f46c000e1608372e8265fdd758975020abf27b90b01e70d02406a28f0daee5d0b5b713b0000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d586e694a6a5054554357324447725768354834454c6a7a4b554c424844357958594a436337766151314b64702f00000000000000000000

-----Decoded View---------------
Arg [0] : url_ (string): ipfs://QmXniJjPTUCW2DGrWh5H4ELjzKULBHD5yXYJCc7vaQ1Kdp/
Arg [1] : maxSupply_ (uint256): 6666
Arg [2] : cost_ (uint256): 9900000000000000
Arg [3] : giveaway_ (bytes32): 0xe1608372e8265fdd758975020abf27b90b01e70d02406a28f0daee5d0b5b713b

-----Encoded View---------------
7 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 0000000000000000000000000000000000000000000000000000000000001a0a
Arg [2] : 00000000000000000000000000000000000000000000000000232bff5f46c000
Arg [3] : e1608372e8265fdd758975020abf27b90b01e70d02406a28f0daee5d0b5b713b
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [5] : 697066733a2f2f516d586e694a6a5054554357324447725768354834454c6a7a
Arg [6] : 4b554c424844357958594a436337766151314b64702f00000000000000000000


Deployed Bytecode Sourcemap

27356:2651:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29533:276;;;;;;;;;;-1:-1:-1;29533:276:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;29533:276:0;;;;;;;;10459:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;11697:202::-;;;;;;;;;;-1:-1:-1;11697:202:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1692:32:1;;;1674:51;;1662:2;1647:18;11697:202:0;1528:203:1;11307:382:0;;;;;;;;;;-1:-1:-1;11307:382:0;;;;;:::i;:::-;;:::i;:::-;;27506:19;;;;;;;;;;;;;;;;;;;2319:25:1;;;2307:2;2292:18;27506:19:0;2173:177:1;6774:170:0;;;;;;;;;;-1:-1:-1;6895:12:0;;6827:7;6879:13;:28;6774:170;;16698:1596;;;;;;;;;;-1:-1:-1;16698:1596:0;;;;;:::i;:::-;;:::i;29817:150::-;;;;;;;;;;-1:-1:-1;29817:150:0;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;3133:32:1;;;3115:51;;3197:2;3182:18;;3175:34;;;;3088:18;29817:150:0;2941:274:1;28547:456:0;;;;;;;;;;-1:-1:-1;28547:456:0;;;;;:::i;:::-;;:::i;12393:185::-;;;;;;;;;;-1:-1:-1;12393:185:0;;;;;:::i;:::-;;:::i;22969:94::-;;;;;;;;;;-1:-1:-1;22969:94:0;;;;;:::i;:::-;;:::i;29229:82::-;;;;;;;;;;-1:-1:-1;29229:82:0;;;;;:::i;:::-;;:::i;29011:100::-;;;;;;;;;;-1:-1:-1;29011:100:0;;;;;:::i;:::-;;:::i;24102:468::-;;;;;;;;;;-1:-1:-1;24102:468:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;10307:144::-;;;;;;;;;;-1:-1:-1;10307:144:0;;;;;:::i;:::-;;:::i;27447:21::-;;;;;;;;;;;;;:::i;29119:102::-;;;;;;;;;;-1:-1:-1;29119:102:0;;;;;:::i;:::-;;:::i;7419:224::-;;;;;;;;;;-1:-1:-1;7419:224:0;;;;;:::i;:::-;;:::i;768:103::-;;;;;;;;;;;;;:::i;26457:892::-;;;;;;;;;;-1:-1:-1;26457:892:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;28063:174::-;;;;;;;;;;-1:-1:-1;28063:174:0;;;;;:::i;:::-;;:::i;545:87::-;;;;;;;;;;-1:-1:-1;618:6:0;;-1:-1:-1;;;;;618:6:0;545:87;;10567:104;;;;;;;;;;;;;:::i;24578:1871::-;;;;;;;;;;-1:-1:-1;24578:1871:0;;;;;:::i;:::-;;:::i;28245:294::-;;;;;;:::i;:::-;;:::i;11907:306::-;;;;;;;;;;-1:-1:-1;11907:306:0;;;;;:::i;:::-;;:::i;12586:399::-;;;;;;;;;;-1:-1:-1;12586:399:0;;;;;:::i;:::-;;:::i;23674:420::-;;;;;;;;;;-1:-1:-1;23674:420:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;10679:316::-;;;;;;;;;;-1:-1:-1;10679:316:0;;;;;:::i;:::-;;:::i;27532:39::-;;;;;;;;;;-1:-1:-1;27532:39:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27475:24;;;;;;;;;;;;;;;;29319:98;;;;;;;;;;-1:-1:-1;29319:98:0;;;;;:::i;:::-;;:::i;12221:164::-;;;;;;;;;;-1:-1:-1;12221:164:0;;;;;:::i;:::-;;:::i;879:201::-;;;;;;;;;;-1:-1:-1;879:201:0;;;;;:::i;:::-;;:::i;27578:23::-;;;;;;;;;;;;;;;;29533:276;29691:4;-1:-1:-1;;;;;;29720:41:0;;-1:-1:-1;;;29720:41:0;;:81;;;29765:36;29789:11;29765:23;:36::i;:::-;29713:88;29533:276;-1:-1:-1;;29533:276:0:o;10459:100::-;10513:13;10546:5;10539:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10459:100;:::o;11697:202::-;11765:7;11790:16;11798:7;11790;:16::i;:::-;11785:64;;11815:34;;-1:-1:-1;;;11815:34:0;;;;;;;;;;;11785:64;-1:-1:-1;11867:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;11867:24:0;;11697:202::o;11307:382::-;11380:13;11396:16;11404:7;11396;:16::i;:::-;11380:32;-1:-1:-1;22084:10:0;-1:-1:-1;;;;;11427:28:0;;;11423:175;;11475:44;11492:5;22084:10;12221:164;:::i;11475:44::-;11470:128;;11547:35;;-1:-1:-1;;;11547:35:0;;;;;;;;;;;11470:128;11608:24;;;;:15;:24;;;;;;:29;;-1:-1:-1;;;;;;11608:29:0;-1:-1:-1;;;;;11608:29:0;;;;;;;;;11653:28;;11608:24;;11653:28;;;;;;;11369:320;11307:382;;:::o;16698:1596::-;16832:27;16862;16881:7;16862:18;:27::i;:::-;16832:57;;16945:4;-1:-1:-1;;;;;16904:45:0;16920:19;-1:-1:-1;;;;;16904:45:0;;16900:86;;16958:28;;-1:-1:-1;;;16958:28:0;;;;;;;;;;;16900:86;16998:27;16097:21;;;16047:15;16139:4;16132:36;16221:4;16205:21;;16259:26;;17098:62;16259:26;17134:4;22084:10;17140:19;-1:-1:-1;;;;;16562:31:0;;;16509:26;;16620:19;;16641:30;;16617:55;;16311:379;17098:62;17093:174;;17180:43;17197:4;22084:10;12221:164;:::i;17180:43::-;17175:92;;17232:35;;-1:-1:-1;;;17232:35:0;;;;;;;;;;;17175:92;-1:-1:-1;;;;;17282:16:0;;17278:52;;17307:23;;-1:-1:-1;;;17307:23:0;;;;;;;;;;;17278:52;17422:15;17419:83;;;17485:1;17464:19;17457:30;17419:83;-1:-1:-1;;;;;17550:24:0;;;;;;;:18;:24;;;;;;17548:26;;-1:-1:-1;;17548:26:0;;;17591:22;;;;;;;;;17589:24;;-1:-1:-1;17589:24:0;;;10260:11;10236:22;10232:40;10219:62;-1:-1:-1;;;10219:62:0;17628:26;;;;:17;:26;;;;;:174;;;;-1:-1:-1;;;17821:46:0;;:51;;17817:363;;17925:1;17915:11;;17893:19;17949:30;;;:17;:30;;;;;;:35;;17945:220;;18028:13;;18013:11;:28;18009:137;;18070:30;;;;:17;:30;;;;;:52;;;18009:137;17874:306;17817:363;18225:7;18221:2;-1:-1:-1;;;;;18206:27:0;18215:4;-1:-1:-1;;;;;18206:27:0;;;;;;;;;;;16821:1473;;;16698:1596;;;:::o;29817:150::-;29894:7;29903;29931;618:6;;-1:-1:-1;;;;;618:6:0;;545:87;29931:7;29955:3;29941:10;:5;29949:2;29941:10;:::i;:::-;29940:18;;;;:::i;:::-;29923:36;;;;29817:150;;;;;:::o;28547:456::-;28644:9;;28626:14;;;;6895:12;;6827:7;6879:13;:28;28610:30;;;;:::i;:::-;:43;;28602:65;;;;-1:-1:-1;;;28602:65:0;;;;;;;:::i;:::-;;;;;;;;;28678:12;28720:5;:11;;;28733:5;:13;;;28748:5;:14;;;28703:60;;;;;;;;;12918:19:1;;;12975:2;12971:15;;;;-1:-1:-1;;12967:53:1;12962:2;12953:12;;12946:75;13046:2;13037:12;;13030:28;13083:2;13074:12;;12733:359;28703:60:0;;;;;;;;;;;;;28693:71;;;;;;28678:86;;28783:53;28802:5;:17;;;28821:8;;28831:4;28783:18;:53::i;:::-;28775:79;;;;-1:-1:-1;;;28775:79:0;;13299:2:1;28775:79:0;;;13281:21:1;13338:2;13318:18;;;13311:30;-1:-1:-1;;;13357:18:1;;;13350:43;13410:18;;28775:79:0;13097:337:1;28775:79:0;28882:13;;;;;-1:-1:-1;;;;;28874:22:0;;;;;:7;:22;;;;;;;;;28873:23;28865:43;;;;-1:-1:-1;;;28865:43:0;;13641:2:1;28865:43:0;;;13623:21:1;13680:1;13660:18;;;13653:29;-1:-1:-1;;;13698:18:1;;;13691:37;13745:18;;28865:43:0;13439:330:1;28865:43:0;28927:13;;;;;;-1:-1:-1;;;;;28919:22:0;;;;;:7;:22;;;;;;;;:29;;-1:-1:-1;;28919:29:0;28944:4;28919:29;;;28965:13;28980:14;;;;28959:36;;28965:13;28959:5;:36::i;:::-;28591:412;28547:456;:::o;12393:185::-;12531:39;12548:4;12554:2;12558:7;12531:39;;;;;;;;;;;;:16;:39::i;:::-;12393:185;;;:::o;22969:94::-;23035:20;23041:7;23050:4;23035:5;:20::i;:::-;22969:94;:::o;29229:82::-;618:6;;-1:-1:-1;;;;;618:6:0;22084:10;680:23;672:68;;;;-1:-1:-1;;;672:68:0;;;;;;;:::i;:::-;29291:4:::1;:12:::0;29229:82::o;29011:100::-;618:6;;-1:-1:-1;;;;;618:6:0;22084:10;680:23;672:68;;;;-1:-1:-1;;;672:68:0;;;;;;;:::i;:::-;29085:18;;::::1;::::0;:7:::1;::::0;:18:::1;::::0;::::1;::::0;::::1;:::i;24102:468::-:0;24277:15;;24191:23;;24252:22;24277:15;-1:-1:-1;;;;;24344:36:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24344:36:0;;-1:-1:-1;;24344:36:0;;;;;;;;;;;;24307:73;;24400:9;24395:125;24416:14;24411:1;:19;24395:125;;24472:32;24492:8;24501:1;24492:11;;;;;;;;:::i;:::-;;;;;;;24472:19;:32::i;:::-;24456:10;24467:1;24456:13;;;;;;;;:::i;:::-;;;;;;;;;;:48;24432:3;;24395:125;;;-1:-1:-1;24541:10:0;24102:468;-1:-1:-1;;;24102:468:0:o;10307:144::-;10371:7;10414:27;10433:7;10414:18;:27::i;27447:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;29119:102::-;618:6;;-1:-1:-1;;;;;618:6:0;22084:10;680:23;672:68;;;;-1:-1:-1;;;672:68:0;;;;;;;:::i;:::-;29191:9:::1;:22:::0;29119:102::o;7419:224::-;7483:7;-1:-1:-1;;;;;7507:19:0;;7503:60;;7535:28;;-1:-1:-1;;;7535:28:0;;;;;;;;;;;7503:60;-1:-1:-1;;;;;;7581:25:0;;;;;:18;:25;;;;;;-1:-1:-1;;;;;7581:54:0;;7419:224::o;768:103::-;618:6;;-1:-1:-1;;;;;618:6:0;22084:10;680:23;672:68;;;;-1:-1:-1;;;672:68:0;;;;;;;:::i;:::-;833:30:::1;860:1;833:18;:30::i;:::-;768:103::o:0;26457:892::-;26527:16;26581:19;26615:25;26655:22;26680:16;26690:5;26680:9;:16::i;:::-;26655:41;;26711:25;26753:14;-1:-1:-1;;;;;26739:29:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;26739:29:0;;26711:57;;26783:31;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26783:31:0;26834:9;26829:472;26878:14;26863:11;:29;26829:472;;26930:15;26943:1;26930:12;:15::i;:::-;26918:27;;26968:9;:16;;;27009:8;26964:73;27059:14;;-1:-1:-1;;;;;27059:28:0;;27055:111;;27132:14;;;-1:-1:-1;27055:111:0;27209:5;-1:-1:-1;;;;;27188:26:0;:17;-1:-1:-1;;;;;27188:26:0;;27184:102;;27265:1;27239:8;27248:13;;;;;;27239:23;;;;;;;;:::i;:::-;;;;;;:27;;;;;27184:102;26894:3;;26829:472;;;-1:-1:-1;27322:8:0;;26457:892;-1:-1:-1;;;;;;26457:892:0:o;28063:174::-;618:6;;-1:-1:-1;;;;;618:6:0;22084:10;680:23;672:68;;;;-1:-1:-1;;;672:68:0;;;;;;;:::i;:::-;28176:9:::1;;28164:8;28148:13;6895:12:::0;;6827:7;6879:13;:28;;6774:170;28148:13:::1;:24;;;;:::i;:::-;:37;;28140:59;;;;-1:-1:-1::0;;;28140:59:0::1;;;;;;;:::i;:::-;28210:19;28216:2;28220:8;28210:5;:19::i;10567:104::-:0;10623:13;10656:7;10649:14;;;;;:::i;24578:1871::-;24713:16;24780:4;24771:5;:13;24767:45;;24793:19;;-1:-1:-1;;;24793:19:0;;;;;;;;;;;24767:45;24827:19;24861:17;24881:14;6718:7;6745:13;;6671:95;24881:14;24861:34;-1:-1:-1;25022:9:0;25015:4;:16;25011:73;;;25059:9;25052:16;;25011:73;25098:25;25126:16;25136:5;25126:9;:16::i;:::-;25098:44;;25169:4;25161:5;:12;25157:278;;;25216:12;;;25251:31;;;25247:111;;;25327:11;25307:31;;25247:111;25175:198;25157:278;;;-1:-1:-1;25418:1:0;25157:278;25449:25;25491:17;-1:-1:-1;;;;;25477:32:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;25477:32:0;;25449:60;;25528:17;25549:1;25528:22;25524:78;;25578:8;-1:-1:-1;25571:15:0;;-1:-1:-1;;;25571:15:0;25524:78;25616:31;25650:26;25670:5;25650:19;:26::i;:::-;25616:60;;25691:25;25736:9;:16;;;25731:92;;-1:-1:-1;25793:14:0;;25731:92;25854:5;25837:478;25866:4;25861:1;:9;;:45;;;;;25889:17;25874:11;:32;;25861:45;25837:478;;;25944:15;25957:1;25944:12;:15::i;:::-;25932:27;;25982:9;:16;;;26023:8;25978:73;26073:14;;-1:-1:-1;;;;;26073:28:0;;26069:111;;26146:14;;;-1:-1:-1;26069:111:0;26223:5;-1:-1:-1;;;;;26202:26:0;:17;-1:-1:-1;;;;;26202:26:0;;26198:102;;26279:1;26253:8;26262:13;;;;;;26253:23;;;;;;;;:::i;:::-;;;;;;:27;;;;;26198:102;25908:3;;25837:478;;;-1:-1:-1;;;26357:29:0;;;-1:-1:-1;26364:8:0;;-1:-1:-1;;24578:1871:0;;;;;;:::o;28245:294::-;28341:9;;28329:8;28313:13;6895:12;;6827:7;6879:13;:28;;6774:170;28313:13;:24;;;;:::i;:::-;:37;;28305:59;;;;-1:-1:-1;;;28305:59:0;;;;;;;:::i;:::-;28403:8;28396:4;;:15;;;;:::i;:::-;28383:9;:28;;28375:59;;;;-1:-1:-1;;;28375:59:0;;14469:2:1;28375:59:0;;;14451:21:1;14508:2;14488:18;;;14481:30;-1:-1:-1;;;14527:18:1;;;14520:48;14585:18;;28375:59:0;14267:342:1;28375:59:0;618:6;;28445:48;;-1:-1:-1;;;;;618:6:0;;;;28471:21;28445:48;;;;;;;;;28471:21;618:6;28445:48;;;;;;;;;;;;;;;;;;;;;28504:27;28510:10;28522:8;28504:5;:27::i;11907:306::-;22084:10;-1:-1:-1;;;;;12006:31:0;;;12002:61;;12046:17;;-1:-1:-1;;;12046:17:0;;;;;;;;;;;12002:61;22084:10;12074:39;;;;:18;:39;;;;;;;;-1:-1:-1;;;;;12074:49:0;;;;;;;;;;;;:60;;-1:-1:-1;;12074:60:0;;;;;;;;;;12150:55;;540:41:1;;;12074:49:0;;22084:10;12150:55;;513:18:1;12150:55:0;;;;;;;11907:306;;:::o;12586:399::-;12753:31;12766:4;12772:2;12776:7;12753:12;:31::i;:::-;-1:-1:-1;;;;;12799:14:0;;;:19;12795:183;;12838:56;12869:4;12875:2;12879:7;12888:5;12838:30;:56::i;:::-;12833:145;;12922:40;;-1:-1:-1;;;12922:40:0;;;;;;;;;;;12833:145;12586:399;;;;:::o;23674:420::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6718:7:0;6745:13;23859:7;:25;23826:103;;23908:9;23674:420;-1:-1:-1;;23674:420:0:o;23826:103::-;23951:21;23964:7;23951:12;:21::i;:::-;23939:33;;23987:9;:16;;;23983:65;;;24027:9;23674:420;-1:-1:-1;;23674:420:0:o;23983:65::-;24065:21;24078:7;24065:12;:21::i;10679:316::-;10752:13;10783:16;10791:7;10783;:16::i;:::-;10778:59;;10808:29;;-1:-1:-1;;;10808:29:0;;;;;;;;;;;10778:59;10848:21;10872:10;:8;:10::i;:::-;10848:34;;10906:7;10900:21;10925:1;10900:26;:87;;;;;;;;;;;;;;;;;10953:7;10962:18;10972:7;10962:9;:18::i;:::-;10936:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;10893:94;10679:316;-1:-1:-1;;;10679:316:0:o;29319:98::-;618:6;;-1:-1:-1;;;;;618:6:0;22084:10;680:23;672:68;;;;-1:-1:-1;;;672:68:0;;;;;;;:::i;:::-;29389:8:::1;:20:::0;29319:98::o;12221:164::-;-1:-1:-1;;;;;12342:25:0;;;12318:4;12342:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;12221:164::o;879:201::-;618:6;;-1:-1:-1;;;;;618:6:0;22084:10;680:23;672:68;;;;-1:-1:-1;;;672:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;968:22:0;::::1;960:73;;;::::0;-1:-1:-1;;;960:73:0;;15291:2:1;960:73:0::1;::::0;::::1;15273:21:1::0;15330:2;15310:18;;;15303:30;15369:34;15349:18;;;15342:62;-1:-1:-1;;;15420:18:1;;;15413:36;15466:19;;960:73:0::1;15089:402:1::0;960:73:0::1;1044:28;1063:8;1044:18;:28::i;7211:200::-:0;7296:4;-1:-1:-1;;;;;;;;;7320:25:0;;;;:54;;-1:-1:-1;;;;;;;;;;7349:25:0;;;7320:54;:83;;;-1:-1:-1;;;;;;;;7378:25:0;-1:-1:-1;;;7378:25:0;;7211:200::o;12993:207::-;13050:4;13127:13;;13117:7;:23;13087:105;;;;-1:-1:-1;;13144:26:0;;;;:17;:26;;;;;;-1:-1:-1;;;13144:43:0;:48;;12993:207::o;8500:626::-;8567:7;8602;8702:13;;8695:4;:20;8691:368;;;8740:14;8757:23;;;:17;:23;;;;;;;-1:-1:-1;;;8807:23:0;;:28;;8803:237;;8864:113;8871:6;8881:1;8871:11;8864:113;;-1:-1:-1;;;8942:6:0;8924:25;;;;:17;:25;;;;;;8864:113;;8803:237;8717:342;8691:368;9087:31;;-1:-1:-1;;;9087:31:0;;;;;;;;;;;1613:190;1738:4;1791;1762:25;1775:5;1782:4;1762:12;:25::i;:::-;:33;;1613:190;-1:-1:-1;;;;1613:190:0:o;13964:917::-;14029:20;14052:13;-1:-1:-1;;;;;14080:16:0;;14076:48;;14105:19;;-1:-1:-1;;;14105:19:0;;;;;;;;;;;14076:48;14139:8;14151:1;14139:13;14135:44;;14161:18;;-1:-1:-1;;;14161:18:0;;;;;;;;;;;14135:44;-1:-1:-1;;;;;14287:22:0;;;;;;:18;:22;;5321:2;14287:22;;:70;;14325:31;14313:44;;14287:70;;;10260:11;10236:22;10232:40;-1:-1:-1;11265:15:0;;11240:23;11236:45;10229:51;10219:62;14372:31;;;;:17;:31;;;;;:173;14390:12;14619:23;;;14657:101;14684:35;;14709:9;;;;;-1:-1:-1;;;;;14684:35:0;;;14701:1;;14684:35;;14701:1;;14684:35;14753:3;14743:7;:13;14657:101;;14772:13;:19;-1:-1:-1;12393:185:0;;;:::o;18399:1602::-;18479:27;18509;18528:7;18509:18;:27::i;:::-;18479:57;-1:-1:-1;18479:57:0;18547:12;;18667:28;18687:7;15921:27;16097:21;;;16047:15;16139:4;16132:36;16221:4;16205:21;;16259:26;;16205:21;;15826:477;18667:28;18610:85;;;;18710:13;18706:224;;;18745:62;18764:15;18781:4;22084:10;18787:19;21997:105;18745:62;18740:178;;18831:43;18848:4;22084:10;12221:164;:::i;18831:43::-;18826:92;;18883:35;;-1:-1:-1;;;18883:35:0;;;;;;;;;;;18826:92;19029:15;19026:83;;;19092:1;19071:19;19064:30;19026:83;-1:-1:-1;;;;;19155:24:0;;;;;;:18;:24;;;;;:59;;19183:31;19155:59;;;10260:11;10236:22;10232:40;10219:62;-1:-1:-1;;;10219:62:0;19229:26;;;;:17;:26;;;;;:203;;;;-1:-1:-1;;;19451:46:0;;:51;;19447:363;;19555:1;19545:11;;19523:19;19579:30;;;:17;:30;;;;;;:35;;19575:220;;19658:13;;19643:11;:28;19639:137;;19700:30;;;;:17;:30;;;;;:52;;;19639:137;19504:306;19447:363;19836:35;;19863:7;;19859:1;;-1:-1:-1;;;;;19836:35:0;;;;;19859:1;;19836:35;-1:-1:-1;;19968:12:0;:14;;;;;;-1:-1:-1;;;;18399:1602:0:o;1088:191::-;1181:6;;;-1:-1:-1;;;;;1198:17:0;;;-1:-1:-1;;;;;;1198:17:0;;;;;;;1231:40;;1181:6;;;1198:17;1181:6;;1231:40;;1162:16;;1231:40;1151:128;1088:191;:::o;9505:153::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9625:24:0;;;;:17;:24;;;;;;9606:44;;:18;:44::i;20009:716::-;20193:88;;-1:-1:-1;;;20193:88:0;;20172:4;;-1:-1:-1;;;;;20193:45:0;;;;;:88;;22084:10;;20260:4;;20266:7;;20275:5;;20193:88;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20193:88:0;;;;;;;;-1:-1:-1;;20193:88:0;;;;;;;;;;;;:::i;:::-;;;20189:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20476:6;:13;20493:1;20476:18;20472:235;;20522:40;;-1:-1:-1;;;20522:40:0;;;;;;;;;;;20472:235;20665:6;20659:13;20650:6;20646:2;20642:15;20635:38;20189:529;-1:-1:-1;;;;;;20352:64:0;-1:-1:-1;;;20352:64:0;;-1:-1:-1;20189:529:0;20009:716;;;;;;:::o;9862:158::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9965:47:0;9984:27;10003:7;9984:18;:27::i;:::-;9965:18;:47::i;29425:100::-;29477:13;29510:7;29503:14;;;;;:::i;22110:689::-;22238:4;22232:11;;22245:3;22228:21;;22263:17;;;;22387:11;;;22357:5;22433:2;22447;22437:13;;22429:22;22387:11;22416:36;22488:2;22478:13;;22322:352;22507:4;22322:352;;;22603:1;22598:3;22594:11;22587:18;;22654:2;22648:4;22644:13;22640:2;22636:22;22631:3;22623:36;22549:2;22539:13;;22322:352;;;-1:-1:-1;22702:13:0;;;-1:-1:-1;;22736:12:0;;;22762:19;;;22736:12;22110:689;-1:-1:-1;22110:689:0:o;1811:517::-;1894:7;1937:4;1894:7;1952:339;1976:5;:12;1972:1;:16;1952:339;;;2010:20;2033:5;2039:1;2033:8;;;;;;;;:::i;:::-;;;;;;;2010:31;;2076:12;2060;:28;2056:224;;2404:13;2454:15;;;2490:4;2483:15;;;2537:4;2521:21;;2109:57;;2056:224;;;2404:13;2454:15;;;2490:4;2483:15;;;2537:4;2521:21;;2207:57;;2056:224;-1:-1:-1;1990:3:0;;;;:::i;:::-;;;;1952:339;;9134:363;-1:-1:-1;;;;;;;;;;;;;9244:41:0;;;;5557:3;9330:32;;;-1:-1:-1;;;;;9296:67:0;-1:-1:-1;;;9296:67:0;-1:-1:-1;;;9393:23:0;;:28;;-1:-1:-1;;;9374:47:0;;;;5797:3;9461:27;;;;-1:-1:-1;;;9432:57:0;-1:-1:-1;9134:363:0:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:131:1;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:258::-;664:1;674:113;688:6;685:1;682:13;674:113;;;764:11;;;758:18;745:11;;;738:39;710:2;703:10;674:113;;;805:6;802:1;799:13;796:48;;;-1:-1:-1;;840:1:1;822:16;;815:27;592:258::o;855:::-;897:3;935:5;929:12;962:6;957:3;950:19;978:63;1034:6;1027:4;1022:3;1018:14;1011:4;1004:5;1000:16;978:63;:::i;:::-;1095:2;1074:15;-1:-1:-1;;1070:29:1;1061:39;;;;1102:4;1057:50;;855:258;-1:-1:-1;;855:258:1:o;1118:220::-;1267:2;1256:9;1249:21;1230:4;1287:45;1328:2;1317:9;1313:18;1305:6;1287:45;:::i;1343:180::-;1402:6;1455:2;1443:9;1434:7;1430:23;1426:32;1423:52;;;1471:1;1468;1461:12;1423:52;-1:-1:-1;1494:23:1;;1343:180;-1:-1:-1;1343:180:1:o;1736:173::-;1804:20;;-1:-1:-1;;;;;1853:31:1;;1843:42;;1833:70;;1899:1;1896;1889:12;1833:70;1736:173;;;:::o;1914:254::-;1982:6;1990;2043:2;2031:9;2022:7;2018:23;2014:32;2011:52;;;2059:1;2056;2049:12;2011:52;2082:29;2101:9;2082:29;:::i;:::-;2072:39;2158:2;2143:18;;;;2130:32;;-1:-1:-1;;;1914:254:1:o;2355:328::-;2432:6;2440;2448;2501:2;2489:9;2480:7;2476:23;2472:32;2469:52;;;2517:1;2514;2507:12;2469:52;2540:29;2559:9;2540:29;:::i;:::-;2530:39;;2588:38;2622:2;2611:9;2607:18;2588:38;:::i;:::-;2578:48;;2673:2;2662:9;2658:18;2645:32;2635:42;;2355:328;;;;;:::o;2688:248::-;2756:6;2764;2817:2;2805:9;2796:7;2792:23;2788:32;2785:52;;;2833:1;2830;2823:12;2785:52;-1:-1:-1;;2856:23:1;;;2926:2;2911:18;;;2898:32;;-1:-1:-1;2688:248:1:o;3220:127::-;3281:10;3276:3;3272:20;3269:1;3262:31;3312:4;3309:1;3302:15;3336:4;3333:1;3326:15;3352:253;3424:2;3418:9;3466:4;3454:17;;-1:-1:-1;;;;;3486:34:1;;3522:22;;;3483:62;3480:88;;;3548:18;;:::i;:::-;3584:2;3577:22;3352:253;:::o;3610:275::-;3681:2;3675:9;3746:2;3727:13;;-1:-1:-1;;3723:27:1;3711:40;;-1:-1:-1;;;;;3766:34:1;;3802:22;;;3763:62;3760:88;;;3828:18;;:::i;:::-;3864:2;3857:22;3610:275;;-1:-1:-1;3610:275:1:o;3890:183::-;3950:4;-1:-1:-1;;;;;3975:6:1;3972:30;3969:56;;;4005:18;;:::i;:::-;-1:-1:-1;4050:1:1;4046:14;4062:4;4042:25;;3890:183::o;4078:1341::-;4160:6;4191:2;4234;4222:9;4213:7;4209:23;4205:32;4202:52;;;4250:1;4247;4240:12;4202:52;4290:9;4277:23;-1:-1:-1;;;;;4360:2:1;4352:6;4349:14;4346:34;;;4376:1;4373;4366:12;4346:34;4399:22;;;;4455:4;4437:16;;;4433:27;4430:47;;;4473:1;4470;4463:12;4430:47;4499:22;;:::i;:::-;4557:2;4544:16;4537:5;4530:31;4593;4620:2;4616;4612:11;4593:31;:::i;:::-;4588:2;4581:5;4577:14;4570:55;4678:2;4674;4670:11;4657:25;4652:2;4645:5;4641:14;4634:49;4729:2;4725;4721:11;4708:25;4758:2;4748:8;4745:16;4742:36;;;4774:1;4771;4764:12;4742:36;4805:8;4801:2;4797:17;4787:27;;;4852:7;4845:4;4841:2;4837:13;4833:27;4823:55;;4874:1;4871;4864:12;4823:55;4910:2;4897:16;4887:26;;4933:60;4949:43;4989:2;4949:43;:::i;:::-;4933:60;:::i;:::-;5027:15;;;5109:1;5105:10;;;;5097:19;;5093:28;;;5058:12;;;;5133:19;;;5130:39;;;5165:1;5162;5155:12;5130:39;5189:11;;;;5209:142;5225:6;5220:3;5217:15;5209:142;;;5291:17;;5279:30;;5242:12;;;;5329;;;;5209:142;;;5378:2;5367:14;;5360:29;-1:-1:-1;5371:5:1;4078:1341;-1:-1:-1;;;;;;4078:1341:1:o;5424:407::-;5489:5;-1:-1:-1;;;;;5515:6:1;5512:30;5509:56;;;5545:18;;:::i;:::-;5583:57;5628:2;5607:15;;-1:-1:-1;;5603:29:1;5634:4;5599:40;5583:57;:::i;:::-;5574:66;;5663:6;5656:5;5649:21;5703:3;5694:6;5689:3;5685:16;5682:25;5679:45;;;5720:1;5717;5710:12;5679:45;5769:6;5764:3;5757:4;5750:5;5746:16;5733:43;5823:1;5816:4;5807:6;5800:5;5796:18;5792:29;5785:40;5424:407;;;;;:::o;5836:451::-;5905:6;5958:2;5946:9;5937:7;5933:23;5929:32;5926:52;;;5974:1;5971;5964:12;5926:52;6014:9;6001:23;-1:-1:-1;;;;;6039:6:1;6036:30;6033:50;;;6079:1;6076;6069:12;6033:50;6102:22;;6155:4;6147:13;;6143:27;-1:-1:-1;6133:55:1;;6184:1;6181;6174:12;6133:55;6207:74;6273:7;6268:2;6255:16;6250:2;6246;6242:11;6207:74;:::i;6292:891::-;6376:6;6407:2;6450;6438:9;6429:7;6425:23;6421:32;6418:52;;;6466:1;6463;6456:12;6418:52;6506:9;6493:23;-1:-1:-1;;;;;6531:6:1;6528:30;6525:50;;;6571:1;6568;6561:12;6525:50;6594:22;;6647:4;6639:13;;6635:27;-1:-1:-1;6625:55:1;;6676:1;6673;6666:12;6625:55;6712:2;6699:16;6735:60;6751:43;6791:2;6751:43;:::i;6735:60::-;6829:15;;;6911:1;6907:10;;;;6899:19;;6895:28;;;6860:12;;;;6935:19;;;6932:39;;;6967:1;6964;6957:12;6932:39;6991:11;;;;7011:142;7027:6;7022:3;7019:15;7011:142;;;7093:17;;7081:30;;7044:12;;;;7131;;;;7011:142;;;7172:5;6292:891;-1:-1:-1;;;;;;;6292:891:1:o;7188:349::-;7272:12;;-1:-1:-1;;;;;7268:38:1;7256:51;;7360:4;7349:16;;;7343:23;-1:-1:-1;;;;;7339:48:1;7323:14;;;7316:72;7451:4;7440:16;;;7434:23;7427:31;7420:39;7404:14;;;7397:63;7513:4;7502:16;;;7496:23;7521:8;7492:38;7476:14;;7469:62;7188:349::o;7542:722::-;7775:2;7827:21;;;7897:13;;7800:18;;;7919:22;;;7746:4;;7775:2;7998:15;;;;7972:2;7957:18;;;7746:4;8041:197;8055:6;8052:1;8049:13;8041:197;;;8104:52;8152:3;8143:6;8137:13;8104:52;:::i;:::-;8213:15;;;;8185:4;8176:14;;;;;8077:1;8070:9;8041:197;;8269:186;8328:6;8381:2;8369:9;8360:7;8356:23;8352:32;8349:52;;;8397:1;8394;8387:12;8349:52;8420:29;8439:9;8420:29;:::i;8460:632::-;8631:2;8683:21;;;8753:13;;8656:18;;;8775:22;;;8602:4;;8631:2;8854:15;;;;8828:2;8813:18;;;8602:4;8897:169;8911:6;8908:1;8905:13;8897:169;;;8972:13;;8960:26;;9041:15;;;;9006:12;;;;8933:1;8926:9;8897:169;;9097:322;9174:6;9182;9190;9243:2;9231:9;9222:7;9218:23;9214:32;9211:52;;;9259:1;9256;9249:12;9211:52;9282:29;9301:9;9282:29;:::i;:::-;9272:39;9358:2;9343:18;;9330:32;;-1:-1:-1;9409:2:1;9394:18;;;9381:32;;9097:322;-1:-1:-1;;;9097:322:1:o;9424:347::-;9489:6;9497;9550:2;9538:9;9529:7;9525:23;9521:32;9518:52;;;9566:1;9563;9556:12;9518:52;9589:29;9608:9;9589:29;:::i;:::-;9579:39;;9668:2;9657:9;9653:18;9640:32;9715:5;9708:13;9701:21;9694:5;9691:32;9681:60;;9737:1;9734;9727:12;9681:60;9760:5;9750:15;;;9424:347;;;;;:::o;9776:667::-;9871:6;9879;9887;9895;9948:3;9936:9;9927:7;9923:23;9919:33;9916:53;;;9965:1;9962;9955:12;9916:53;9988:29;10007:9;9988:29;:::i;:::-;9978:39;;10036:38;10070:2;10059:9;10055:18;10036:38;:::i;:::-;10026:48;;10121:2;10110:9;10106:18;10093:32;10083:42;;10176:2;10165:9;10161:18;10148:32;-1:-1:-1;;;;;10195:6:1;10192:30;10189:50;;;10235:1;10232;10225:12;10189:50;10258:22;;10311:4;10303:13;;10299:27;-1:-1:-1;10289:55:1;;10340:1;10337;10330:12;10289:55;10363:74;10429:7;10424:2;10411:16;10406:2;10402;10398:11;10363:74;:::i;:::-;10353:84;;;9776:667;;;;;;;:::o;10448:266::-;10644:3;10629:19;;10657:51;10633:9;10690:6;10657:51;:::i;10904:260::-;10972:6;10980;11033:2;11021:9;11012:7;11008:23;11004:32;11001:52;;;11049:1;11046;11039:12;11001:52;11072:29;11091:9;11072:29;:::i;:::-;11062:39;;11120:38;11154:2;11143:9;11139:18;11120:38;:::i;:::-;11110:48;;10904:260;;;;;:::o;11351:380::-;11430:1;11426:12;;;;11473;;;11494:61;;11548:4;11540:6;11536:17;11526:27;;11494:61;11601:2;11593:6;11590:14;11570:18;11567:38;11564:161;;11647:10;11642:3;11638:20;11635:1;11628:31;11682:4;11679:1;11672:15;11710:4;11707:1;11700:15;11564:161;;11351:380;;;:::o;11736:127::-;11797:10;11792:3;11788:20;11785:1;11778:31;11828:4;11825:1;11818:15;11852:4;11849:1;11842:15;11868:168;11908:7;11974:1;11970;11966:6;11962:14;11959:1;11956:21;11951:1;11944:9;11937:17;11933:45;11930:71;;;11981:18;;:::i;:::-;-1:-1:-1;12021:9:1;;11868:168::o;12041:217::-;12081:1;12107;12097:132;;12151:10;12146:3;12142:20;12139:1;12132:31;12186:4;12183:1;12176:15;12214:4;12211:1;12204:15;12097:132;-1:-1:-1;12243:9:1;;12041:217::o;12263:128::-;12303:3;12334:1;12330:6;12327:1;12324:13;12321:39;;;12340:18;;:::i;:::-;-1:-1:-1;12376:9:1;;12263:128::o;12396:332::-;12598:2;12580:21;;;12637:1;12617:18;;;12610:29;-1:-1:-1;;;12670:2:1;12655:18;;12648:39;12719:2;12704:18;;12396:332::o;13774:356::-;13976:2;13958:21;;;13995:18;;;13988:30;14054:34;14049:2;14034:18;;14027:62;14121:2;14106:18;;13774:356::o;14135:127::-;14196:10;14191:3;14187:20;14184:1;14177:31;14227:4;14224:1;14217:15;14251:4;14248:1;14241:15;14614:470;14793:3;14831:6;14825:13;14847:53;14893:6;14888:3;14881:4;14873:6;14869:17;14847:53;:::i;:::-;14963:13;;14922:16;;;;14985:57;14963:13;14922:16;15019:4;15007:17;;14985:57;:::i;:::-;15058:20;;14614:470;-1:-1:-1;;;;14614:470:1:o;15496:489::-;-1:-1:-1;;;;;15765:15:1;;;15747:34;;15817:15;;15812:2;15797:18;;15790:43;15864:2;15849:18;;15842:34;;;15912:3;15907:2;15892:18;;15885:31;;;15690:4;;15933:46;;15959:19;;15951:6;15933:46;:::i;:::-;15925:54;15496:489;-1:-1:-1;;;;;;15496:489:1:o;15990:249::-;16059:6;16112:2;16100:9;16091:7;16087:23;16083:32;16080:52;;;16128:1;16125;16118:12;16080:52;16160:9;16154:16;16179:30;16203:5;16179:30;:::i;16244:135::-;16283:3;16304:17;;;16301:43;;16324:18;;:::i;:::-;-1:-1:-1;16371:1:1;16360:13;;16244:135::o

Swarm Source

ipfs://acd219bd523f60015ad634eaebe2c4c3042e6b501717fa679339ab0a89fae346

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.