ETH Price: $3,861.41 (+0.36%)

Token

Puxxies Gang (PG)
 

Overview

Max Total Supply

3,342 PG

Holders

1,112

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A

Other Info

Balance
3 PG
0x4f88d77cad8b6592e5050d24bdaf2f306efe3e13
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Cult_Pass

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

pragma solidity ^0.8.0;


abstract contract ReentrancyGuard {

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;

    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

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

        
        _status = _ENTERED;

        _;

        
        _status = _NOT_ENTERED;
    }
}



pragma solidity ^0.8.0;


library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
    uint8 private constant _ADDRESS_LENGTH = 20;

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

 
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }

    function toHexString(address addr) internal pure returns (string memory) {
        return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
    }
}



pragma solidity ^0.8.0;


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

  
    function verifyCalldata(
        bytes32[] calldata proof,
        bytes32 root,
        bytes32 leaf
    ) internal pure returns (bool) {
        return processProofCalldata(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++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }


    function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
        bytes32 computedHash = leaf;
        for (uint256 i = 0; i < proof.length; i++) {
            computedHash = _hashPair(computedHash, proof[i]);
        }
        return computedHash;
    }

  
    function multiProofVerify(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProof(proof, proofFlags, leaves) == root;
    }

 
    function multiProofVerifyCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32 root,
        bytes32[] memory leaves
    ) internal pure returns (bool) {
        return processMultiProofCalldata(proof, proofFlags, leaves) == root;
    }

   
    function processMultiProof(
        bytes32[] memory proof,
        bool[] memory proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
   
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
    
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

  
    function processMultiProofCalldata(
        bytes32[] calldata proof,
        bool[] calldata proofFlags,
        bytes32[] memory leaves
    ) internal pure returns (bytes32 merkleRoot) {
  
        uint256 leavesLen = leaves.length;
        uint256 totalHashes = proofFlags.length;

        require(leavesLen + proof.length - 1 == totalHashes, "MerkleProof: invalid multiproof");

      
        bytes32[] memory hashes = new bytes32[](totalHashes);
        uint256 leafPos = 0;
        uint256 hashPos = 0;
        uint256 proofPos = 0;
      
        for (uint256 i = 0; i < totalHashes; i++) {
            bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
            bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
            hashes[i] = _hashPair(a, b);
        }

        if (totalHashes > 0) {
            return hashes[totalHashes - 1];
        } else if (leavesLen > 0) {
            return leaves[0];
        } else {
            return proof[0];
        }
    }

    function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
        return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
    }

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



pragma solidity ^0.8.0;


library Counters {
    struct Counter {
      
        uint256 _value; // default: 0
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}


pragma solidity ^0.8.0;


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

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

pragma solidity ^0.8.0;



abstract contract Ownable is Context {
    address private _owner;

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

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

 
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

   
    function _checkOwner() internal view virtual {
        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);
    }
}



pragma solidity ^0.8.4;


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



pragma solidity ^0.8.4;



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


contract ERC721A is IERC721A {

    struct TokenApprovalRef {
        address value;
    }

  
    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;

  
    bytes32 private constant _TRANSFER_EVENT_SIGNATURE =
        0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef;

  
    uint256 private _currentIndex;

  
    uint256 private _burnCounter;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    
    mapping(uint256 => uint256) private _packedOwnerships;

 
    mapping(address => uint256) private _packedAddressData;

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

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

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

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

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

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


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

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

  
    function balanceOf(address owner) public view virtual 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 virtual {
        uint256 packed = _packedAddressData[owner];
        uint256 auxCasted;
        
        assembly {
            auxCasted := aux
        }
        packed = (packed & _BITMASK_AUX_COMPLEMENT) | (auxCasted << _BITPOS_AUX);
        _packedAddressData[owner] = packed;
    }


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

 
    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 ownerOf(uint256 tokenId) public view virtual override returns (address) {
        return address(uint160(_packedOwnershipOf(tokenId)));
    }

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

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

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

  
    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 _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 _nextInitializedFlag(uint256 quantity) private pure returns (uint256 result) {
       
        assembly {
        
            result := shl(_BITPOS_NEXT_INITIALIZED, eq(quantity, 1))
        }
    }

   
    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ownerOf(tokenId);

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

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

 
    function getApproved(uint256 tokenId) public view virtual override returns (address) {
        if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken();

        return _tokenApprovals[tokenId].value;
    }

  
    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 _exists(uint256 tokenId) internal view virtual returns (bool) {
        return
            _startTokenId() <= tokenId &&
            tokenId < _currentIndex && 
            _packedOwnerships[tokenId] & _BITMASK_BURNED == 0; 
    }

  
    function _isSenderApprovedOrOwner(
        address approvedAddress,
        address owner,
        address msgSender
    ) private pure returns (bool result) {
        assembly {
            
            owner := and(owner, _BITMASK_ADDRESS)         
            msgSender := and(msgSender, _BITMASK_ADDRESS)  
            result := or(eq(msgSender, owner), eq(msgSender, approvedAddress))
        }
    }

 
    function _getApprovedSlotAndAddress(uint256 tokenId)
        private
        view
        returns (uint256 approvedAddressSlot, address approvedAddress)
    {
        TokenApprovalRef storage tokenApproval = _tokenApprovals[tokenId];
        
        assembly {
            approvedAddressSlot := tokenApproval.slot
            approvedAddress := sload(approvedAddressSlot)
        }
    }


    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) = _getApprovedSlotAndAddress(tokenId);

       
        if (!_isSenderApprovedOrOwner(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 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 _beforeTokenTransfers(
        address from,
        address to,
        uint256 startTokenId,
        uint256 quantity
    ) internal virtual {}


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


    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 _mint(address to, uint256 quantity) internal virtual {
        uint256 startTokenId = _currentIndex;
        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 toMasked;
            uint256 end = startTokenId + quantity;

          
            assembly {
               
                toMasked := and(to, _BITMASK_ADDRESS)
               
                log4(
                    0,
                    0, 
                    _TRANSFER_EVENT_SIGNATURE, 
                    0, 
                    toMasked, 
                    startTokenId 
                )

                for {
                    let tokenId := add(startTokenId, 1)
                } iszero(eq(tokenId, end)) {
                    tokenId := add(tokenId, 1)
                } {
                    
                    log4(0, 0, _TRANSFER_EVENT_SIGNATURE, 0, toMasked, tokenId)
                }
            }
            if (toMasked == 0) revert MintToZeroAddress();

            _currentIndex = end;
        }
        _afterTokenTransfers(address(0), to, startTokenId, quantity);
    }

 
    function _mintERC2309(address to, uint256 quantity) internal virtual {
        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 _safeMint(
        address to,
        uint256 quantity,
        bytes memory _data
    ) internal virtual {
        _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 _safeMint(address to, uint256 quantity) internal virtual {
        _safeMint(to, quantity, '');
    }

  
    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) = _getApprovedSlotAndAddress(tokenId);

        if (approvalCheck) {
          
            if (!_isSenderApprovedOrOwner(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 _setExtraDataAt(uint256 index, uint24 extraData) internal virtual {
        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 _extraData(
        address from,
        address to,
        uint24 previousExtraData
    ) internal view virtual returns (uint24) {}

  
    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 _msgSenderERC721A() internal view virtual returns (address) {
        return msg.sender;
    }

   
    function _toString(uint256 value) internal pure virtual 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)
        }
    }
}




pragma solidity ^0.8.4;







contract Cult_Pass is ERC721A, Ownable, ReentrancyGuard {
    using Strings for uint256;
    using Counters for Counters.Counter;

    Counters.Counter private _tokenIdCounter;


    string public PROVENANCE_HASH;


    string public baseURI;
    string public baseExtension = ".json";

 

    uint256 public constant MAX_SUPPLY = 369;
    uint256 private _currentId;



    uint256 public constant whitelist_LIMIT = 0;
    uint256 public constant whitelist_PRICE = 0 ether;

 

    uint256 public constant public_LIMIT = 3;
    uint256 public constant public_PRICE = 0 ether;


    bool public publicIsActive = false;
    bool public whitelistIsActive = false;


    bytes32 public root; 

    mapping(address => uint256) private _alreadyMinted;

  
    address public beneficiary;


    address public royalties;

   
    address public nftContractAddress;

  
    constructor(
        address _royalties,
        address _beneficiary,
        string memory _initBaseURI 
        
        ) ERC721A("Puxxies Gang", "PG") {
        beneficiary = _beneficiary;
        royalties = _royalties;
        setBaseURI(_initBaseURI);
        
    }


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

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

    function setProvenanceHash(string calldata hash) public onlyOwner {
        PROVENANCE_HASH = hash;
    }

    function setBeneficiary(address _beneficiary) public onlyOwner {
        beneficiary = _beneficiary;
    }

    function setRoyalties(address _royalties) public onlyOwner {
        royalties = _royalties;
    }

  
    function setPublicActive(bool _publicIsActive) public onlyOwner {
        publicIsActive = _publicIsActive;
    }

    
    function setWhitelistActive(bool _whitelistIsActive) public onlyOwner {
        whitelistIsActive = _whitelistIsActive;
    }

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

    function alreadyMinted(address addr) public view returns (uint256) {
        return _alreadyMinted[addr];
    }

    


    
    function isValid(bytes32[] memory proof, bytes32 leaf) public view returns (bool) {
        return MerkleProof.verify(proof, root, leaf);
    }

  
    function whitelistMint(uint256 quantity, bytes32[] memory proof) public payable nonReentrant {
        address sender = _msgSender();
        require(isValid(proof, keccak256(abi.encodePacked(msg.sender))), "Address is not on the whitelist");
        require(whitelistIsActive, "Sale is closed");
        require(
            quantity <= whitelist_LIMIT - _alreadyMinted[sender],
            "Insufficient mints left"
        );
        require(msg.value == whitelist_PRICE * quantity, "Incorrect payable amount");

        _alreadyMinted[sender] += quantity;
        _internalMint(sender, quantity);
    }

   
    function publicMint(uint256 quantity) public payable nonReentrant {
        address sender = _msgSender();

        require(publicIsActive, "Sale is closed");
        require(
            quantity <= public_LIMIT - _alreadyMinted[sender],
            "Insufficient mints left"
        );
        require(msg.value == public_PRICE * quantity, "Incorrect payable amount");

        _alreadyMinted[sender] += quantity;
        _internalMint(sender, quantity);
    }


    function ownerMint(address to, uint256 quantity) public onlyOwner {
        _internalMint(to, quantity);
    }

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


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

 
    string memory currentBaseURI = _baseURI();
    return bytes(currentBaseURI).length > 0
        ? string(abi.encodePacked(currentBaseURI, tokenId.toString(), baseExtension))
        : "";
    }

  
    function setBaseURI(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
    }


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

 
    function _internalMint(address to, uint256 quantity) private {
        require(
            numberMinted(msg.sender) + quantity <= MAX_SUPPLY,
            "can not mint this many"
        );
   
            _safeMint(to, quantity);
    }


  

    function royaltyInfo(uint256 _tokenId, uint256 _salePrice)
        external
        view
        returns (address, uint256 royaltyAmount)
    {
        _tokenId; // silence solc warning
        royaltyAmount = (_salePrice / 100) * 5;
        return (royalties, royaltyAmount);
    }


    function supportsInterface(bytes4 interfaceId)
        public
        view
        override(ERC721A)
        returns (bool)
    {
        return super.supportsInterface(interfaceId);
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_royalties","type":"address"},{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"string","name":"_initBaseURI","type":"string"}],"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":"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":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROVENANCE_HASH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"alreadyMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"beneficiary","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"bytes32","name":"leaf","type":"bytes32"}],"name":"isValid","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftContractAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"numberMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"publicMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"public_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"public_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"root","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royalties","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"royaltyAmount","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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"}],"name":"setBeneficiary","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"hash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_publicIsActive","type":"bool"}],"name":"setPublicActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_royalties","type":"address"}],"name":"setRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_whitelistIsActive","type":"bool"}],"name":"setWhitelistActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"whitelistIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"whitelistMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"whitelist_LIMIT","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelist_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600d908051906020019062000051929190620003f3565b506000600f60006101000a81548160ff0219169083151502179055506000600f60016101000a81548160ff0219169083151502179055503480156200009557600080fd5b50604051620045dc380380620045dc8339818101604052810190620000bb919062000538565b6040518060400160405280600c81526020017f507578786965732047616e6700000000000000000000000000000000000000008152506040518060400160405280600281526020017f504700000000000000000000000000000000000000000000000000000000000081525081600290805190602001906200013f929190620003f3565b50806003908051906020019062000158929190620003f3565b50620001696200023560201b60201c565b600081905550505062000191620001856200023e60201b60201c565b6200024660201b60201c565b600160098190555081601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200022c816200030c60201b60201c565b50505062000808565b60006001905090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200031c6200033860201b60201c565b80600c908051906020019062000334929190620003f3565b5050565b620003486200023e60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200036e620003c960201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620003c7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003be90620005da565b60405180910390fd5b565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200040190620006d6565b90600052602060002090601f01602090048101928262000425576000855562000471565b82601f106200044057805160ff191683800117855562000471565b8280016001018555821562000471579182015b828111156200047057825182559160200191906001019062000453565b5b50905062000480919062000484565b5090565b5b808211156200049f57600081600090555060010162000485565b5090565b6000620004ba620004b48462000625565b620005fc565b905082815260208101848484011115620004d957620004d8620007a5565b5b620004e6848285620006a0565b509392505050565b600081519050620004ff81620007ee565b92915050565b600082601f8301126200051d576200051c620007a0565b5b81516200052f848260208601620004a3565b91505092915050565b600080600060608486031215620005545762000553620007af565b5b60006200056486828701620004ee565b93505060206200057786828701620004ee565b925050604084015167ffffffffffffffff8111156200059b576200059a620007aa565b5b620005a98682870162000505565b9150509250925092565b6000620005c26020836200065b565b9150620005cf82620007c5565b602082019050919050565b60006020820190508181036000830152620005f581620005b3565b9050919050565b6000620006086200061b565b90506200061682826200070c565b919050565b6000604051905090565b600067ffffffffffffffff82111562000643576200064262000771565b5b6200064e82620007b4565b9050602081019050919050565b600082825260208201905092915050565b6000620006798262000680565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60005b83811015620006c0578082015181840152602081019050620006a3565b83811115620006d0576000848401525b50505050565b60006002820490506001821680620006ef57607f821691505b6020821081141562000706576200070562000742565b5b50919050565b6200071782620007b4565b810181811067ffffffffffffffff8211171562000739576200073862000771565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620007f9816200066c565b81146200080557600080fd5b50565b613dc480620008186000396000f3fe6080604052600436106102725760003560e01c806355f804b31161014f578063b88d4fde116100c1578063dc33e6811161007a578063dc33e68114610937578063e985e9c514610974578063ebf0c717146109b1578063f053dc5c146109dc578063f2fde38b14610a07578063ff1b655614610a3057610272565b8063b88d4fde14610824578063b8a20ed01461084d578063c3b754dc1461088a578063c6682862146108b3578063c87b56dd146108de578063d2cab0561461091b57610272565b8063715018a611610113578063715018a61461073a5780638aca408c146107515780638da5cb5b1461077a57806395d89b41146107a5578063a22cb465146107d0578063aae282e1146107f957610272565b806355f804b3146106415780636352211e1461066a57806368d21bfd146106a75780636c0360eb146106d257806370a08231146106fd57610272565b80631fe70d6f116101e857806332cb6b0c116101ac57806332cb6b0c1461055757806338af3eed146105825780633ccfd60b146105ad5780633fc18b07146105c457806342842e0e146105ef578063484b973c1461061857610272565b80631fe70d6f1461048057806323b872dd146104ab5780632a55205a146104d45780632a9e63c6146105125780632db115441461053b57610272565b8063095ea7b31161023a578063095ea7b3146103725780630a398b881461039b5780630e827678146103d8578063109695231461040357806318160ddd1461042c5780631c31f7101461045757610272565b806301ffc9a714610277578063033a02d6146102b457806304a99f7c146102df57806306fdde031461030a578063081812fc14610335575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190612f7e565b610a5b565b6040516102ab91906134c3565b60405180910390f35b3480156102c057600080fd5b506102c9610a6d565b6040516102d691906134c3565b60405180910390f35b3480156102eb57600080fd5b506102f4610a80565b604051610301919061363b565b60405180910390f35b34801561031657600080fd5b5061031f610a85565b60405161032c91906134f9565b60405180910390f35b34801561034157600080fd5b5061035c6004803603810190610357919061306e565b610b17565b6040516103699190613433565b60405180910390f35b34801561037e57600080fd5b5061039960048036038101906103949190612eb5565b610b96565b005b3480156103a757600080fd5b506103c260048036038101906103bd9190612d32565b610cda565b6040516103cf919061363b565b60405180910390f35b3480156103e457600080fd5b506103ed610d23565b6040516103fa919061363b565b60405180910390f35b34801561040f57600080fd5b5061042a60048036038101906104259190612fd8565b610d28565b005b34801561043857600080fd5b50610441610d46565b60405161044e919061363b565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190612d32565b610d5d565b005b34801561048c57600080fd5b50610495610da9565b6040516104a291906134c3565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd9190612d9f565b610dbc565b005b3480156104e057600080fd5b506104fb60048036038101906104f691906130f7565b6110e1565b60405161050992919061349a565b60405180910390f35b34801561051e57600080fd5b5061053960048036038101906105349190612d32565b61112b565b005b6105556004803603810190610550919061306e565b611177565b005b34801561056357600080fd5b5061056c611368565b604051610579919061363b565b60405180910390f35b34801561058e57600080fd5b5061059761136e565b6040516105a49190613433565b60405180910390f35b3480156105b957600080fd5b506105c2611394565b005b3480156105d057600080fd5b506105d9611407565b6040516105e6919061363b565b60405180910390f35b3480156105fb57600080fd5b5061061660048036038101906106119190612d9f565b61140c565b005b34801561062457600080fd5b5061063f600480360381019061063a9190612eb5565b61142c565b005b34801561064d57600080fd5b5061066860048036038101906106639190613025565b611442565b005b34801561067657600080fd5b50610691600480360381019061068c919061306e565b611464565b60405161069e9190613433565b60405180910390f35b3480156106b357600080fd5b506106bc611476565b6040516106c9919061363b565b60405180910390f35b3480156106de57600080fd5b506106e761147b565b6040516106f491906134f9565b60405180910390f35b34801561070957600080fd5b50610724600480360381019061071f9190612d32565b611509565b604051610731919061363b565b60405180910390f35b34801561074657600080fd5b5061074f6115c2565b005b34801561075d57600080fd5b5061077860048036038101906107739190612f51565b6115d6565b005b34801561078657600080fd5b5061078f6115fb565b60405161079c9190613433565b60405180910390f35b3480156107b157600080fd5b506107ba611625565b6040516107c791906134f9565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f29190612e75565b6116b7565b005b34801561080557600080fd5b5061080e61182f565b60405161081b9190613433565b60405180910390f35b34801561083057600080fd5b5061084b60048036038101906108469190612df2565b611855565b005b34801561085957600080fd5b50610874600480360381019061086f9190612ef5565b6118c8565b60405161088191906134c3565b60405180910390f35b34801561089657600080fd5b506108b160048036038101906108ac9190612f51565b6118df565b005b3480156108bf57600080fd5b506108c8611904565b6040516108d591906134f9565b60405180910390f35b3480156108ea57600080fd5b506109056004803603810190610900919061306e565b611992565b60405161091291906134f9565b60405180910390f35b6109356004803603810190610930919061309b565b611a3c565b005b34801561094357600080fd5b5061095e60048036038101906109599190612d32565b611c9d565b60405161096b919061363b565b60405180910390f35b34801561098057600080fd5b5061099b60048036038101906109969190612d5f565b611caf565b6040516109a891906134c3565b60405180910390f35b3480156109bd57600080fd5b506109c6611d43565b6040516109d391906134de565b60405180910390f35b3480156109e857600080fd5b506109f1611d49565b6040516109fe9190613433565b60405180910390f35b348015610a1357600080fd5b50610a2e6004803603810190610a299190612d32565b611d6f565b005b348015610a3c57600080fd5b50610a45611df3565b604051610a5291906134f9565b60405180910390f35b6000610a6682611e81565b9050919050565b600f60009054906101000a900460ff1681565b600381565b606060028054610a9490613936565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac090613936565b8015610b0d5780601f10610ae257610100808354040283529160200191610b0d565b820191906000526020600020905b815481529060010190602001808311610af057829003601f168201915b5050505050905090565b6000610b2282611f13565b610b58576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ba182611464565b90508073ffffffffffffffffffffffffffffffffffffffff16610bc2611f72565b73ffffffffffffffffffffffffffffffffffffffff1614610c2557610bee81610be9611f72565b611caf565b610c24576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081565b610d30611f7a565b8181600b9190610d419291906129b7565b505050565b6000610d50611ff8565b6001546000540303905090565b610d65611f7a565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60019054906101000a900460ff1681565b6000610dc782612001565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e2e576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610e3a846120cf565b91509150610e508187610e4b611f72565b6120f6565b610e9c57610e6586610e60611f72565b611caf565b610e9b576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610f03576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f10868686600161213a565b8015610f1b57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610fe985610fc5888887612140565b7c020000000000000000000000000000000000000000000000000000000017612168565b600460008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416141561107157600060018501905060006004600083815260200190815260200160002054141561106f57600054811461106e578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46110d98686866001612193565b505050505050565b60008060056064846110f391906137b7565b6110fd91906137e8565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691509250929050565b611133611f7a565b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260095414156111bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b49061361b565b60405180910390fd5b600260098190555060006111cf612199565b9050600f60009054906101000a900460ff16611220576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112179061353b565b60405180910390fd5b601160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600361126c9190613842565b8211156112ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a5906135db565b60405180910390fd5b8160006112bb91906137e8565b34146112fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f39061357b565b60405180910390fd5b81601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461134b9190613761565b9250508190555061135c81836121a1565b50600160098190555050565b61017181565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61139c611f7a565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611404573d6000803e3d6000fd5b50565b600081565b61142783838360405180602001604052806000815250611855565b505050565b611434611f7a565b61143e82826121a1565b5050565b61144a611f7a565b80600c9080519060200190611460929190612a3d565b5050565b600061146f82612001565b9050919050565b600081565b600c805461148890613936565b80601f01602080910402602001604051908101604052809291908181526020018280546114b490613936565b80156115015780601f106114d657610100808354040283529160200191611501565b820191906000526020600020905b8154815290600101906020018083116114e457829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611571576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6115ca611f7a565b6115d46000612207565b565b6115de611f7a565b80600f60006101000a81548160ff02191690831515021790555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461163490613936565b80601f016020809104026020016040519081016040528092919081815260200182805461166090613936565b80156116ad5780601f10611682576101008083540402835291602001916116ad565b820191906000526020600020905b81548152906001019060200180831161169057829003601f168201915b5050505050905090565b6116bf611f72565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611724576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611731611f72565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117de611f72565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161182391906134c3565b60405180910390a35050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611860848484610dbc565b60008373ffffffffffffffffffffffffffffffffffffffff163b146118c25761188b848484846122cd565b6118c1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60006118d7836010548461242d565b905092915050565b6118e7611f7a565b80600f60016101000a81548160ff02191690831515021790555050565b600d805461191190613936565b80601f016020809104026020016040519081016040528092919081815260200182805461193d90613936565b801561198a5780601f1061195f5761010080835404028352916020019161198a565b820191906000526020600020905b81548152906001019060200180831161196d57829003601f168201915b505050505081565b606061199d82611f13565b6119dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d3906135bb565b60405180910390fd5b60006119e6612444565b90506000815111611a065760405180602001604052806000815250611a34565b80611a10846124d6565b600d604051602001611a2493929190613402565b6040516020818303038152906040525b915050919050565b60026009541415611a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a799061361b565b60405180910390fd5b60026009819055506000611a94612199565b9050611ac68233604051602001611aab91906133e7565b604051602081830303815290604052805190602001206118c8565b611b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afc9061351b565b60405180910390fd5b600f60019054906101000a900460ff16611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b9061353b565b60405180910390fd5b601160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000611ba09190613842565b831115611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd9906135db565b60405180910390fd5b826000611bef91906137e8565b3414611c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c279061357b565b60405180910390fd5b82601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c7f9190613761565b92505081905550611c9081846121a1565b5060016009819055505050565b6000611ca882612637565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60105481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d77611f7a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dde9061355b565b60405180910390fd5b611df081612207565b50565b600b8054611e0090613936565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2c90613936565b8015611e795780601f10611e4e57610100808354040283529160200191611e79565b820191906000526020600020905b815481529060010190602001808311611e5c57829003601f168201915b505050505081565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611edc57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611f0c5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600081611f1e611ff8565b11158015611f2d575060005482105b8015611f6b575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b611f82612199565b73ffffffffffffffffffffffffffffffffffffffff16611fa06115fb565b73ffffffffffffffffffffffffffffffffffffffff1614611ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fed9061359b565b60405180910390fd5b565b60006001905090565b60008082905080612010611ff8565b11612098576000548110156120975760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415612095575b600081141561208b576004600083600190039350838152602001908152602001600020549050612060565b80925050506120ca565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e861215786868461268e565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b600033905090565b610171816121ae33611c9d565b6121b89190613761565b11156121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f0906135fb565b60405180910390fd5b6122038282612697565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122f3611f72565b8786866040518563ffffffff1660e01b8152600401612315949392919061344e565b602060405180830381600087803b15801561232f57600080fd5b505af192505050801561236057506040513d601f19601f8201168201806040525081019061235d9190612fab565b60015b6123da573d8060008114612390576040519150601f19603f3d011682016040523d82523d6000602084013e612395565b606091505b506000815114156123d2576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60008261243a85846126b5565b1490509392505050565b6060600c805461245390613936565b80601f016020809104026020016040519081016040528092919081815260200182805461247f90613936565b80156124cc5780601f106124a1576101008083540402835291602001916124cc565b820191906000526020600020905b8154815290600101906020018083116124af57829003601f168201915b5050505050905090565b6060600082141561251e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612632565b600082905060005b6000821461255057808061253990613999565b915050600a8261254991906137b7565b9150612526565b60008167ffffffffffffffff81111561256c5761256b613af3565b5b6040519080825280601f01601f19166020018201604052801561259e5781602001600182028036833780820191505090505b5090505b6000851461262b576001826125b79190613842565b9150600a856125c69190613a06565b60306125d29190613761565b60f81b8183815181106125e8576125e7613ac4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561262491906137b7565b94506125a2565b8093505050505b919050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b60009392505050565b6126b182826040518060200160405280600081525061270b565b5050565b60008082905060005b8451811015612700576126eb828683815181106126de576126dd613ac4565b5b60200260200101516127a8565b915080806126f890613999565b9150506126be565b508091505092915050565b61271583836127d3565b60008373ffffffffffffffffffffffffffffffffffffffff163b146127a357600080549050600083820390505b61275560008683806001019450866122cd565b61278b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106127425781600054146127a057600080fd5b50505b505050565b60008183106127c0576127bb8284612990565b6127cb565b6127ca8383612990565b5b905092915050565b6000805490506000821415612814576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612821600084838561213a565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612898836128896000866000612140565b612892856129a7565b17612168565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461293957808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a46001810190506128fe565b506000821415612975576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600081905550505061298b6000848385612193565b505050565b600082600052816020526040600020905092915050565b60006001821460e11b9050919050565b8280546129c390613936565b90600052602060002090601f0160209004810192826129e55760008555612a2c565b82601f106129fe57803560ff1916838001178555612a2c565b82800160010185558215612a2c579182015b82811115612a2b578235825591602001919060010190612a10565b5b509050612a399190612ac3565b5090565b828054612a4990613936565b90600052602060002090601f016020900481019282612a6b5760008555612ab2565b82601f10612a8457805160ff1916838001178555612ab2565b82800160010185558215612ab2579182015b82811115612ab1578251825591602001919060010190612a96565b5b509050612abf9190612ac3565b5090565b5b80821115612adc576000816000905550600101612ac4565b5090565b6000612af3612aee8461367b565b613656565b90508083825260208201905082856020860282011115612b1657612b15613b2c565b5b60005b85811015612b465781612b2c8882612c2c565b845260208401935060208301925050600181019050612b19565b5050509392505050565b6000612b63612b5e846136a7565b613656565b905082815260208101848484011115612b7f57612b7e613b31565b5b612b8a8482856138f4565b509392505050565b6000612ba5612ba0846136d8565b613656565b905082815260208101848484011115612bc157612bc0613b31565b5b612bcc8482856138f4565b509392505050565b600081359050612be381613d1b565b92915050565b600082601f830112612bfe57612bfd613b27565b5b8135612c0e848260208601612ae0565b91505092915050565b600081359050612c2681613d32565b92915050565b600081359050612c3b81613d49565b92915050565b600081359050612c5081613d60565b92915050565b600081519050612c6581613d60565b92915050565b600082601f830112612c8057612c7f613b27565b5b8135612c90848260208601612b50565b91505092915050565b60008083601f840112612caf57612cae613b27565b5b8235905067ffffffffffffffff811115612ccc57612ccb613b22565b5b602083019150836001820283011115612ce857612ce7613b2c565b5b9250929050565b600082601f830112612d0457612d03613b27565b5b8135612d14848260208601612b92565b91505092915050565b600081359050612d2c81613d77565b92915050565b600060208284031215612d4857612d47613b3b565b5b6000612d5684828501612bd4565b91505092915050565b60008060408385031215612d7657612d75613b3b565b5b6000612d8485828601612bd4565b9250506020612d9585828601612bd4565b9150509250929050565b600080600060608486031215612db857612db7613b3b565b5b6000612dc686828701612bd4565b9350506020612dd786828701612bd4565b9250506040612de886828701612d1d565b9150509250925092565b60008060008060808587031215612e0c57612e0b613b3b565b5b6000612e1a87828801612bd4565b9450506020612e2b87828801612bd4565b9350506040612e3c87828801612d1d565b925050606085013567ffffffffffffffff811115612e5d57612e5c613b36565b5b612e6987828801612c6b565b91505092959194509250565b60008060408385031215612e8c57612e8b613b3b565b5b6000612e9a85828601612bd4565b9250506020612eab85828601612c17565b9150509250929050565b60008060408385031215612ecc57612ecb613b3b565b5b6000612eda85828601612bd4565b9250506020612eeb85828601612d1d565b9150509250929050565b60008060408385031215612f0c57612f0b613b3b565b5b600083013567ffffffffffffffff811115612f2a57612f29613b36565b5b612f3685828601612be9565b9250506020612f4785828601612c2c565b9150509250929050565b600060208284031215612f6757612f66613b3b565b5b6000612f7584828501612c17565b91505092915050565b600060208284031215612f9457612f93613b3b565b5b6000612fa284828501612c41565b91505092915050565b600060208284031215612fc157612fc0613b3b565b5b6000612fcf84828501612c56565b91505092915050565b60008060208385031215612fef57612fee613b3b565b5b600083013567ffffffffffffffff81111561300d5761300c613b36565b5b61301985828601612c99565b92509250509250929050565b60006020828403121561303b5761303a613b3b565b5b600082013567ffffffffffffffff81111561305957613058613b36565b5b61306584828501612cef565b91505092915050565b60006020828403121561308457613083613b3b565b5b600061309284828501612d1d565b91505092915050565b600080604083850312156130b2576130b1613b3b565b5b60006130c085828601612d1d565b925050602083013567ffffffffffffffff8111156130e1576130e0613b36565b5b6130ed85828601612be9565b9150509250929050565b6000806040838503121561310e5761310d613b3b565b5b600061311c85828601612d1d565b925050602061312d85828601612d1d565b9150509250929050565b61314081613876565b82525050565b61315761315282613876565b6139e2565b82525050565b61316681613888565b82525050565b61317581613894565b82525050565b60006131868261371e565b6131908185613734565b93506131a0818560208601613903565b6131a981613b40565b840191505092915050565b60006131bf82613729565b6131c98185613745565b93506131d9818560208601613903565b6131e281613b40565b840191505092915050565b60006131f882613729565b6132028185613756565b9350613212818560208601613903565b80840191505092915050565b6000815461322b81613936565b6132358186613756565b94506001821660008114613250576001811461326157613294565b60ff19831686528186019350613294565b61326a85613709565b60005b8381101561328c5781548189015260018201915060208101905061326d565b838801955050505b50505092915050565b60006132aa601f83613745565b91506132b582613b5e565b602082019050919050565b60006132cd600e83613745565b91506132d882613b87565b602082019050919050565b60006132f0602683613745565b91506132fb82613bb0565b604082019050919050565b6000613313601883613745565b915061331e82613bff565b602082019050919050565b6000613336602083613745565b915061334182613c28565b602082019050919050565b6000613359602f83613745565b915061336482613c51565b604082019050919050565b600061337c601783613745565b915061338782613ca0565b602082019050919050565b600061339f601683613745565b91506133aa82613cc9565b602082019050919050565b60006133c2601f83613745565b91506133cd82613cf2565b602082019050919050565b6133e1816138ea565b82525050565b60006133f38284613146565b60148201915081905092915050565b600061340e82866131ed565b915061341a82856131ed565b9150613426828461321e565b9150819050949350505050565b60006020820190506134486000830184613137565b92915050565b60006080820190506134636000830187613137565b6134706020830186613137565b61347d60408301856133d8565b818103606083015261348f818461317b565b905095945050505050565b60006040820190506134af6000830185613137565b6134bc60208301846133d8565b9392505050565b60006020820190506134d8600083018461315d565b92915050565b60006020820190506134f3600083018461316c565b92915050565b6000602082019050818103600083015261351381846131b4565b905092915050565b600060208201905081810360008301526135348161329d565b9050919050565b60006020820190508181036000830152613554816132c0565b9050919050565b60006020820190508181036000830152613574816132e3565b9050919050565b6000602082019050818103600083015261359481613306565b9050919050565b600060208201905081810360008301526135b481613329565b9050919050565b600060208201905081810360008301526135d48161334c565b9050919050565b600060208201905081810360008301526135f48161336f565b9050919050565b6000602082019050818103600083015261361481613392565b9050919050565b60006020820190508181036000830152613634816133b5565b9050919050565b600060208201905061365060008301846133d8565b92915050565b6000613660613671565b905061366c8282613968565b919050565b6000604051905090565b600067ffffffffffffffff82111561369657613695613af3565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156136c2576136c1613af3565b5b6136cb82613b40565b9050602081019050919050565b600067ffffffffffffffff8211156136f3576136f2613af3565b5b6136fc82613b40565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061376c826138ea565b9150613777836138ea565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137ac576137ab613a37565b5b828201905092915050565b60006137c2826138ea565b91506137cd836138ea565b9250826137dd576137dc613a66565b5b828204905092915050565b60006137f3826138ea565b91506137fe836138ea565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561383757613836613a37565b5b828202905092915050565b600061384d826138ea565b9150613858836138ea565b92508282101561386b5761386a613a37565b5b828203905092915050565b6000613881826138ca565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613921578082015181840152602081019050613906565b83811115613930576000848401525b50505050565b6000600282049050600182168061394e57607f821691505b6020821081141561396257613961613a95565b5b50919050565b61397182613b40565b810181811067ffffffffffffffff821117156139905761398f613af3565b5b80604052505050565b60006139a4826138ea565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139d7576139d6613a37565b5b600182019050919050565b60006139ed826139f4565b9050919050565b60006139ff82613b51565b9050919050565b6000613a11826138ea565b9150613a1c836138ea565b925082613a2c57613a2b613a66565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f41646472657373206973206e6f74206f6e207468652077686974656c69737400600082015250565b7f53616c6520697320636c6f736564000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e636f72726563742070617961626c6520616d6f756e740000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f496e73756666696369656e74206d696e7473206c656674000000000000000000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613d2481613876565b8114613d2f57600080fd5b50565b613d3b81613888565b8114613d4657600080fd5b50565b613d5281613894565b8114613d5d57600080fd5b50565b613d698161389e565b8114613d7457600080fd5b50565b613d80816138ea565b8114613d8b57600080fd5b5056fea26469706673582212206cdc9c2b8f6cda09de93ee02bc39a47921897e1525d696ede62626f262fd110664736f6c634300080700330000000000000000000000008ccd7fe0e34eccb3fe0c55e5ae6ed9ffcb48575e0000000000000000000000008ccd7fe0e34eccb3fe0c55e5ae6ed9ffcb48575e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000006168747470733a2f2f677261792d666169746866756c2d656c6b2d3435362e6d7970696e6174612e636c6f75642f697066732f516d62796b5548777042513348374351635a4e647a3879414143465473446d33435231417a4e38516a717a5346702f00000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x6080604052600436106102725760003560e01c806355f804b31161014f578063b88d4fde116100c1578063dc33e6811161007a578063dc33e68114610937578063e985e9c514610974578063ebf0c717146109b1578063f053dc5c146109dc578063f2fde38b14610a07578063ff1b655614610a3057610272565b8063b88d4fde14610824578063b8a20ed01461084d578063c3b754dc1461088a578063c6682862146108b3578063c87b56dd146108de578063d2cab0561461091b57610272565b8063715018a611610113578063715018a61461073a5780638aca408c146107515780638da5cb5b1461077a57806395d89b41146107a5578063a22cb465146107d0578063aae282e1146107f957610272565b806355f804b3146106415780636352211e1461066a57806368d21bfd146106a75780636c0360eb146106d257806370a08231146106fd57610272565b80631fe70d6f116101e857806332cb6b0c116101ac57806332cb6b0c1461055757806338af3eed146105825780633ccfd60b146105ad5780633fc18b07146105c457806342842e0e146105ef578063484b973c1461061857610272565b80631fe70d6f1461048057806323b872dd146104ab5780632a55205a146104d45780632a9e63c6146105125780632db115441461053b57610272565b8063095ea7b31161023a578063095ea7b3146103725780630a398b881461039b5780630e827678146103d8578063109695231461040357806318160ddd1461042c5780631c31f7101461045757610272565b806301ffc9a714610277578063033a02d6146102b457806304a99f7c146102df57806306fdde031461030a578063081812fc14610335575b600080fd5b34801561028357600080fd5b5061029e60048036038101906102999190612f7e565b610a5b565b6040516102ab91906134c3565b60405180910390f35b3480156102c057600080fd5b506102c9610a6d565b6040516102d691906134c3565b60405180910390f35b3480156102eb57600080fd5b506102f4610a80565b604051610301919061363b565b60405180910390f35b34801561031657600080fd5b5061031f610a85565b60405161032c91906134f9565b60405180910390f35b34801561034157600080fd5b5061035c6004803603810190610357919061306e565b610b17565b6040516103699190613433565b60405180910390f35b34801561037e57600080fd5b5061039960048036038101906103949190612eb5565b610b96565b005b3480156103a757600080fd5b506103c260048036038101906103bd9190612d32565b610cda565b6040516103cf919061363b565b60405180910390f35b3480156103e457600080fd5b506103ed610d23565b6040516103fa919061363b565b60405180910390f35b34801561040f57600080fd5b5061042a60048036038101906104259190612fd8565b610d28565b005b34801561043857600080fd5b50610441610d46565b60405161044e919061363b565b60405180910390f35b34801561046357600080fd5b5061047e60048036038101906104799190612d32565b610d5d565b005b34801561048c57600080fd5b50610495610da9565b6040516104a291906134c3565b60405180910390f35b3480156104b757600080fd5b506104d260048036038101906104cd9190612d9f565b610dbc565b005b3480156104e057600080fd5b506104fb60048036038101906104f691906130f7565b6110e1565b60405161050992919061349a565b60405180910390f35b34801561051e57600080fd5b5061053960048036038101906105349190612d32565b61112b565b005b6105556004803603810190610550919061306e565b611177565b005b34801561056357600080fd5b5061056c611368565b604051610579919061363b565b60405180910390f35b34801561058e57600080fd5b5061059761136e565b6040516105a49190613433565b60405180910390f35b3480156105b957600080fd5b506105c2611394565b005b3480156105d057600080fd5b506105d9611407565b6040516105e6919061363b565b60405180910390f35b3480156105fb57600080fd5b5061061660048036038101906106119190612d9f565b61140c565b005b34801561062457600080fd5b5061063f600480360381019061063a9190612eb5565b61142c565b005b34801561064d57600080fd5b5061066860048036038101906106639190613025565b611442565b005b34801561067657600080fd5b50610691600480360381019061068c919061306e565b611464565b60405161069e9190613433565b60405180910390f35b3480156106b357600080fd5b506106bc611476565b6040516106c9919061363b565b60405180910390f35b3480156106de57600080fd5b506106e761147b565b6040516106f491906134f9565b60405180910390f35b34801561070957600080fd5b50610724600480360381019061071f9190612d32565b611509565b604051610731919061363b565b60405180910390f35b34801561074657600080fd5b5061074f6115c2565b005b34801561075d57600080fd5b5061077860048036038101906107739190612f51565b6115d6565b005b34801561078657600080fd5b5061078f6115fb565b60405161079c9190613433565b60405180910390f35b3480156107b157600080fd5b506107ba611625565b6040516107c791906134f9565b60405180910390f35b3480156107dc57600080fd5b506107f760048036038101906107f29190612e75565b6116b7565b005b34801561080557600080fd5b5061080e61182f565b60405161081b9190613433565b60405180910390f35b34801561083057600080fd5b5061084b60048036038101906108469190612df2565b611855565b005b34801561085957600080fd5b50610874600480360381019061086f9190612ef5565b6118c8565b60405161088191906134c3565b60405180910390f35b34801561089657600080fd5b506108b160048036038101906108ac9190612f51565b6118df565b005b3480156108bf57600080fd5b506108c8611904565b6040516108d591906134f9565b60405180910390f35b3480156108ea57600080fd5b506109056004803603810190610900919061306e565b611992565b60405161091291906134f9565b60405180910390f35b6109356004803603810190610930919061309b565b611a3c565b005b34801561094357600080fd5b5061095e60048036038101906109599190612d32565b611c9d565b60405161096b919061363b565b60405180910390f35b34801561098057600080fd5b5061099b60048036038101906109969190612d5f565b611caf565b6040516109a891906134c3565b60405180910390f35b3480156109bd57600080fd5b506109c6611d43565b6040516109d391906134de565b60405180910390f35b3480156109e857600080fd5b506109f1611d49565b6040516109fe9190613433565b60405180910390f35b348015610a1357600080fd5b50610a2e6004803603810190610a299190612d32565b611d6f565b005b348015610a3c57600080fd5b50610a45611df3565b604051610a5291906134f9565b60405180910390f35b6000610a6682611e81565b9050919050565b600f60009054906101000a900460ff1681565b600381565b606060028054610a9490613936565b80601f0160208091040260200160405190810160405280929190818152602001828054610ac090613936565b8015610b0d5780601f10610ae257610100808354040283529160200191610b0d565b820191906000526020600020905b815481529060010190602001808311610af057829003601f168201915b5050505050905090565b6000610b2282611f13565b610b58576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610ba182611464565b90508073ffffffffffffffffffffffffffffffffffffffff16610bc2611f72565b73ffffffffffffffffffffffffffffffffffffffff1614610c2557610bee81610be9611f72565b611caf565b610c24576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b826006600084815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600081565b610d30611f7a565b8181600b9190610d419291906129b7565b505050565b6000610d50611ff8565b6001546000540303905090565b610d65611f7a565b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f60019054906101000a900460ff1681565b6000610dc782612001565b90508373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610e2e576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610e3a846120cf565b91509150610e508187610e4b611f72565b6120f6565b610e9c57610e6586610e60611f72565b611caf565b610e9b576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161415610f03576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610f10868686600161213a565b8015610f1b57600082555b600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600081546001900391905081905550600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815460010191905081905550610fe985610fc5888887612140565b7c020000000000000000000000000000000000000000000000000000000017612168565b600460008681526020019081526020016000208190555060007c02000000000000000000000000000000000000000000000000000000008416141561107157600060018501905060006004600083815260200190815260200160002054141561106f57600054811461106e578360046000838152602001908152602001600020819055505b5b505b838573ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46110d98686866001612193565b505050505050565b60008060056064846110f391906137b7565b6110fd91906137e8565b9050601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1691509250929050565b611133611f7a565b80601360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600260095414156111bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b49061361b565b60405180910390fd5b600260098190555060006111cf612199565b9050600f60009054906101000a900460ff16611220576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112179061353b565b60405180910390fd5b601160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054600361126c9190613842565b8211156112ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a5906135db565b60405180910390fd5b8160006112bb91906137e8565b34146112fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f39061357b565b60405180910390fd5b81601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461134b9190613761565b9250508190555061135c81836121a1565b50600160098190555050565b61017181565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61139c611f7a565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611404573d6000803e3d6000fd5b50565b600081565b61142783838360405180602001604052806000815250611855565b505050565b611434611f7a565b61143e82826121a1565b5050565b61144a611f7a565b80600c9080519060200190611460929190612a3d565b5050565b600061146f82612001565b9050919050565b600081565b600c805461148890613936565b80601f01602080910402602001604051908101604052809291908181526020018280546114b490613936565b80156115015780601f106114d657610100808354040283529160200191611501565b820191906000526020600020905b8154815290600101906020018083116114e457829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611571576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054169050919050565b6115ca611f7a565b6115d46000612207565b565b6115de611f7a565b80600f60006101000a81548160ff02191690831515021790555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606003805461163490613936565b80601f016020809104026020016040519081016040528092919081815260200182805461166090613936565b80156116ad5780601f10611682576101008083540402835291602001916116ad565b820191906000526020600020905b81548152906001019060200180831161169057829003601f168201915b5050505050905090565b6116bf611f72565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611724576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060076000611731611f72565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166117de611f72565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161182391906134c3565b60405180910390a35050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611860848484610dbc565b60008373ffffffffffffffffffffffffffffffffffffffff163b146118c25761188b848484846122cd565b6118c1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5b50505050565b60006118d7836010548461242d565b905092915050565b6118e7611f7a565b80600f60016101000a81548160ff02191690831515021790555050565b600d805461191190613936565b80601f016020809104026020016040519081016040528092919081815260200182805461193d90613936565b801561198a5780601f1061195f5761010080835404028352916020019161198a565b820191906000526020600020905b81548152906001019060200180831161196d57829003601f168201915b505050505081565b606061199d82611f13565b6119dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119d3906135bb565b60405180910390fd5b60006119e6612444565b90506000815111611a065760405180602001604052806000815250611a34565b80611a10846124d6565b600d604051602001611a2493929190613402565b6040516020818303038152906040525b915050919050565b60026009541415611a82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a799061361b565b60405180910390fd5b60026009819055506000611a94612199565b9050611ac68233604051602001611aab91906133e7565b604051602081830303815290604052805190602001206118c8565b611b05576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afc9061351b565b60405180910390fd5b600f60019054906101000a900460ff16611b54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4b9061353b565b60405180910390fd5b601160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546000611ba09190613842565b831115611be2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd9906135db565b60405180910390fd5b826000611bef91906137e8565b3414611c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c279061357b565b60405180910390fd5b82601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c7f9190613761565b92505081905550611c9081846121a1565b5060016009819055505050565b6000611ca882612637565b9050919050565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60105481565b601360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611d77611f7a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dde9061355b565b60405180910390fd5b611df081612207565b50565b600b8054611e0090613936565b80601f0160208091040260200160405190810160405280929190818152602001828054611e2c90613936565b8015611e795780601f10611e4e57610100808354040283529160200191611e79565b820191906000526020600020905b815481529060010190602001808311611e5c57829003601f168201915b505050505081565b60006301ffc9a760e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611edc57506380ac58cd60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611f0c5750635b5e139f60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b9050919050565b600081611f1e611ff8565b11158015611f2d575060005482105b8015611f6b575060007c0100000000000000000000000000000000000000000000000000000000600460008581526020019081526020016000205416145b9050919050565b600033905090565b611f82612199565b73ffffffffffffffffffffffffffffffffffffffff16611fa06115fb565b73ffffffffffffffffffffffffffffffffffffffff1614611ff6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fed9061359b565b60405180910390fd5b565b60006001905090565b60008082905080612010611ff8565b11612098576000548110156120975760006004600083815260200190815260200160002054905060007c010000000000000000000000000000000000000000000000000000000082161415612095575b600081141561208b576004600083600190039350838152602001908152602001600020549050612060565b80925050506120ca565b505b5b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b60008060006006600085815260200190815260200160002090508092508254915050915091565b600073ffffffffffffffffffffffffffffffffffffffff8316925073ffffffffffffffffffffffffffffffffffffffff821691508382148383141790509392505050565b50505050565b60008060e883901c905060e861215786868461268e565b62ffffff16901b9150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff83169250814260a01b178317905092915050565b50505050565b600033905090565b610171816121ae33611c9d565b6121b89190613761565b11156121f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f0906135fb565b60405180910390fd5b6122038282612697565b5050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026122f3611f72565b8786866040518563ffffffff1660e01b8152600401612315949392919061344e565b602060405180830381600087803b15801561232f57600080fd5b505af192505050801561236057506040513d601f19601f8201168201806040525081019061235d9190612fab565b60015b6123da573d8060008114612390576040519150601f19603f3d011682016040523d82523d6000602084013e612395565b606091505b506000815114156123d2576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b60008261243a85846126b5565b1490509392505050565b6060600c805461245390613936565b80601f016020809104026020016040519081016040528092919081815260200182805461247f90613936565b80156124cc5780601f106124a1576101008083540402835291602001916124cc565b820191906000526020600020905b8154815290600101906020018083116124af57829003601f168201915b5050505050905090565b6060600082141561251e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612632565b600082905060005b6000821461255057808061253990613999565b915050600a8261254991906137b7565b9150612526565b60008167ffffffffffffffff81111561256c5761256b613af3565b5b6040519080825280601f01601f19166020018201604052801561259e5781602001600182028036833780820191505090505b5090505b6000851461262b576001826125b79190613842565b9150600a856125c69190613a06565b60306125d29190613761565b60f81b8183815181106125e8576125e7613ac4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561262491906137b7565b94506125a2565b8093505050505b919050565b600067ffffffffffffffff6040600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054901c169050919050565b60009392505050565b6126b182826040518060200160405280600081525061270b565b5050565b60008082905060005b8451811015612700576126eb828683815181106126de576126dd613ac4565b5b60200260200101516127a8565b915080806126f890613999565b9150506126be565b508091505092915050565b61271583836127d3565b60008373ffffffffffffffffffffffffffffffffffffffff163b146127a357600080549050600083820390505b61275560008683806001019450866122cd565b61278b576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8181106127425781600054146127a057600080fd5b50505b505050565b60008183106127c0576127bb8284612990565b6127cb565b6127ca8383612990565b5b905092915050565b6000805490506000821415612814576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612821600084838561213a565b600160406001901b178202600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282540192505081905550612898836128896000866000612140565b612892856129a7565b17612168565b6004600083815260200190815260200160002081905550600080838301905073ffffffffffffffffffffffffffffffffffffffff85169150828260007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a4600183015b81811461293957808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a46001810190506128fe565b506000821415612975576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600081905550505061298b6000848385612193565b505050565b600082600052816020526040600020905092915050565b60006001821460e11b9050919050565b8280546129c390613936565b90600052602060002090601f0160209004810192826129e55760008555612a2c565b82601f106129fe57803560ff1916838001178555612a2c565b82800160010185558215612a2c579182015b82811115612a2b578235825591602001919060010190612a10565b5b509050612a399190612ac3565b5090565b828054612a4990613936565b90600052602060002090601f016020900481019282612a6b5760008555612ab2565b82601f10612a8457805160ff1916838001178555612ab2565b82800160010185558215612ab2579182015b82811115612ab1578251825591602001919060010190612a96565b5b509050612abf9190612ac3565b5090565b5b80821115612adc576000816000905550600101612ac4565b5090565b6000612af3612aee8461367b565b613656565b90508083825260208201905082856020860282011115612b1657612b15613b2c565b5b60005b85811015612b465781612b2c8882612c2c565b845260208401935060208301925050600181019050612b19565b5050509392505050565b6000612b63612b5e846136a7565b613656565b905082815260208101848484011115612b7f57612b7e613b31565b5b612b8a8482856138f4565b509392505050565b6000612ba5612ba0846136d8565b613656565b905082815260208101848484011115612bc157612bc0613b31565b5b612bcc8482856138f4565b509392505050565b600081359050612be381613d1b565b92915050565b600082601f830112612bfe57612bfd613b27565b5b8135612c0e848260208601612ae0565b91505092915050565b600081359050612c2681613d32565b92915050565b600081359050612c3b81613d49565b92915050565b600081359050612c5081613d60565b92915050565b600081519050612c6581613d60565b92915050565b600082601f830112612c8057612c7f613b27565b5b8135612c90848260208601612b50565b91505092915050565b60008083601f840112612caf57612cae613b27565b5b8235905067ffffffffffffffff811115612ccc57612ccb613b22565b5b602083019150836001820283011115612ce857612ce7613b2c565b5b9250929050565b600082601f830112612d0457612d03613b27565b5b8135612d14848260208601612b92565b91505092915050565b600081359050612d2c81613d77565b92915050565b600060208284031215612d4857612d47613b3b565b5b6000612d5684828501612bd4565b91505092915050565b60008060408385031215612d7657612d75613b3b565b5b6000612d8485828601612bd4565b9250506020612d9585828601612bd4565b9150509250929050565b600080600060608486031215612db857612db7613b3b565b5b6000612dc686828701612bd4565b9350506020612dd786828701612bd4565b9250506040612de886828701612d1d565b9150509250925092565b60008060008060808587031215612e0c57612e0b613b3b565b5b6000612e1a87828801612bd4565b9450506020612e2b87828801612bd4565b9350506040612e3c87828801612d1d565b925050606085013567ffffffffffffffff811115612e5d57612e5c613b36565b5b612e6987828801612c6b565b91505092959194509250565b60008060408385031215612e8c57612e8b613b3b565b5b6000612e9a85828601612bd4565b9250506020612eab85828601612c17565b9150509250929050565b60008060408385031215612ecc57612ecb613b3b565b5b6000612eda85828601612bd4565b9250506020612eeb85828601612d1d565b9150509250929050565b60008060408385031215612f0c57612f0b613b3b565b5b600083013567ffffffffffffffff811115612f2a57612f29613b36565b5b612f3685828601612be9565b9250506020612f4785828601612c2c565b9150509250929050565b600060208284031215612f6757612f66613b3b565b5b6000612f7584828501612c17565b91505092915050565b600060208284031215612f9457612f93613b3b565b5b6000612fa284828501612c41565b91505092915050565b600060208284031215612fc157612fc0613b3b565b5b6000612fcf84828501612c56565b91505092915050565b60008060208385031215612fef57612fee613b3b565b5b600083013567ffffffffffffffff81111561300d5761300c613b36565b5b61301985828601612c99565b92509250509250929050565b60006020828403121561303b5761303a613b3b565b5b600082013567ffffffffffffffff81111561305957613058613b36565b5b61306584828501612cef565b91505092915050565b60006020828403121561308457613083613b3b565b5b600061309284828501612d1d565b91505092915050565b600080604083850312156130b2576130b1613b3b565b5b60006130c085828601612d1d565b925050602083013567ffffffffffffffff8111156130e1576130e0613b36565b5b6130ed85828601612be9565b9150509250929050565b6000806040838503121561310e5761310d613b3b565b5b600061311c85828601612d1d565b925050602061312d85828601612d1d565b9150509250929050565b61314081613876565b82525050565b61315761315282613876565b6139e2565b82525050565b61316681613888565b82525050565b61317581613894565b82525050565b60006131868261371e565b6131908185613734565b93506131a0818560208601613903565b6131a981613b40565b840191505092915050565b60006131bf82613729565b6131c98185613745565b93506131d9818560208601613903565b6131e281613b40565b840191505092915050565b60006131f882613729565b6132028185613756565b9350613212818560208601613903565b80840191505092915050565b6000815461322b81613936565b6132358186613756565b94506001821660008114613250576001811461326157613294565b60ff19831686528186019350613294565b61326a85613709565b60005b8381101561328c5781548189015260018201915060208101905061326d565b838801955050505b50505092915050565b60006132aa601f83613745565b91506132b582613b5e565b602082019050919050565b60006132cd600e83613745565b91506132d882613b87565b602082019050919050565b60006132f0602683613745565b91506132fb82613bb0565b604082019050919050565b6000613313601883613745565b915061331e82613bff565b602082019050919050565b6000613336602083613745565b915061334182613c28565b602082019050919050565b6000613359602f83613745565b915061336482613c51565b604082019050919050565b600061337c601783613745565b915061338782613ca0565b602082019050919050565b600061339f601683613745565b91506133aa82613cc9565b602082019050919050565b60006133c2601f83613745565b91506133cd82613cf2565b602082019050919050565b6133e1816138ea565b82525050565b60006133f38284613146565b60148201915081905092915050565b600061340e82866131ed565b915061341a82856131ed565b9150613426828461321e565b9150819050949350505050565b60006020820190506134486000830184613137565b92915050565b60006080820190506134636000830187613137565b6134706020830186613137565b61347d60408301856133d8565b818103606083015261348f818461317b565b905095945050505050565b60006040820190506134af6000830185613137565b6134bc60208301846133d8565b9392505050565b60006020820190506134d8600083018461315d565b92915050565b60006020820190506134f3600083018461316c565b92915050565b6000602082019050818103600083015261351381846131b4565b905092915050565b600060208201905081810360008301526135348161329d565b9050919050565b60006020820190508181036000830152613554816132c0565b9050919050565b60006020820190508181036000830152613574816132e3565b9050919050565b6000602082019050818103600083015261359481613306565b9050919050565b600060208201905081810360008301526135b481613329565b9050919050565b600060208201905081810360008301526135d48161334c565b9050919050565b600060208201905081810360008301526135f48161336f565b9050919050565b6000602082019050818103600083015261361481613392565b9050919050565b60006020820190508181036000830152613634816133b5565b9050919050565b600060208201905061365060008301846133d8565b92915050565b6000613660613671565b905061366c8282613968565b919050565b6000604051905090565b600067ffffffffffffffff82111561369657613695613af3565b5b602082029050602081019050919050565b600067ffffffffffffffff8211156136c2576136c1613af3565b5b6136cb82613b40565b9050602081019050919050565b600067ffffffffffffffff8211156136f3576136f2613af3565b5b6136fc82613b40565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061376c826138ea565b9150613777836138ea565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156137ac576137ab613a37565b5b828201905092915050565b60006137c2826138ea565b91506137cd836138ea565b9250826137dd576137dc613a66565b5b828204905092915050565b60006137f3826138ea565b91506137fe836138ea565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561383757613836613a37565b5b828202905092915050565b600061384d826138ea565b9150613858836138ea565b92508282101561386b5761386a613a37565b5b828203905092915050565b6000613881826138ca565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613921578082015181840152602081019050613906565b83811115613930576000848401525b50505050565b6000600282049050600182168061394e57607f821691505b6020821081141561396257613961613a95565b5b50919050565b61397182613b40565b810181811067ffffffffffffffff821117156139905761398f613af3565b5b80604052505050565b60006139a4826138ea565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156139d7576139d6613a37565b5b600182019050919050565b60006139ed826139f4565b9050919050565b60006139ff82613b51565b9050919050565b6000613a11826138ea565b9150613a1c836138ea565b925082613a2c57613a2b613a66565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f41646472657373206973206e6f74206f6e207468652077686974656c69737400600082015250565b7f53616c6520697320636c6f736564000000000000000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e636f72726563742070617961626c6520616d6f756e740000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f496e73756666696369656e74206d696e7473206c656674000000000000000000600082015250565b7f63616e206e6f74206d696e742074686973206d616e7900000000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b613d2481613876565b8114613d2f57600080fd5b50565b613d3b81613888565b8114613d4657600080fd5b50565b613d5281613894565b8114613d5d57600080fd5b50565b613d698161389e565b8114613d7457600080fd5b50565b613d80816138ea565b8114613d8b57600080fd5b5056fea26469706673582212206cdc9c2b8f6cda09de93ee02bc39a47921897e1525d696ede62626f262fd110664736f6c63430008070033

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

0000000000000000000000008ccd7fe0e34eccb3fe0c55e5ae6ed9ffcb48575e0000000000000000000000008ccd7fe0e34eccb3fe0c55e5ae6ed9ffcb48575e0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000006168747470733a2f2f677261792d666169746866756c2d656c6b2d3435362e6d7970696e6174612e636c6f75642f697066732f516d62796b5548777042513348374351635a4e647a3879414143465473446d33435231417a4e38516a717a5346702f00000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _royalties (address): 0x8CCd7fE0e34ECcb3fE0c55e5Ae6ed9ffCB48575e
Arg [1] : _beneficiary (address): 0x8CCd7fE0e34ECcb3fE0c55e5Ae6ed9ffCB48575e
Arg [2] : _initBaseURI (string): https://gray-faithful-elk-456.mypinata.cloud/ipfs/QmbykUHwpBQ3H7CQcZNdz8yAACFTsDm3CR1AzN8QjqzSFp/

-----Encoded View---------------
8 Constructor Arguments found :
Arg [0] : 0000000000000000000000008ccd7fe0e34eccb3fe0c55e5ae6ed9ffcb48575e
Arg [1] : 0000000000000000000000008ccd7fe0e34eccb3fe0c55e5ae6ed9ffcb48575e
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000060
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000061
Arg [4] : 68747470733a2f2f677261792d666169746866756c2d656c6b2d3435362e6d79
Arg [5] : 70696e6174612e636c6f75642f697066732f516d62796b554877704251334837
Arg [6] : 4351635a4e647a3879414143465473446d33435231417a4e38516a717a534670
Arg [7] : 2f00000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

31205:5309:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36316:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31817:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31713:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15322:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18714:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18303:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33424:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31650:49;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32696:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13444:185;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32811:108;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31858:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20532:1775;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36016:290;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;32927:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34349:474;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31514:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31998:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34958:108;;;;;;;;;;;;;:::i;:::-;;31760:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22318:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34833:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35522:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15981:152;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31600:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31435:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13929:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8039:103;;;;;;;;;;;;;:::i;:::-;;33039:115;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7797:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15433:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18944:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32073:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22514:399;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33561:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33168:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31463:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35080:430;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33718:618;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35632:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19263:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31906:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32035:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8153:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31395:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36316:195;36438:4;36467:36;36491:11;36467:23;:36::i;:::-;36460:43;;36316:195;;;:::o;31817:34::-;;;;;;;;;;;;;:::o;31713:40::-;31752:1;31713:40;:::o;15322:100::-;15376:13;15409:5;15402:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15322:100;:::o;18714:218::-;18790:7;18815:16;18823:7;18815;:16::i;:::-;18810:64;;18840:34;;;;;;;;;;;;;;18810:64;18894:15;:24;18910:7;18894:24;;;;;;;;;;;:30;;;;;;;;;;;;18887:37;;18714:218;;;:::o;18303:400::-;18384:13;18400:16;18408:7;18400;:16::i;:::-;18384:32;;18456:5;18433:28;;:19;:17;:19::i;:::-;:28;;;18429:175;;18481:44;18498:5;18505:19;:17;:19::i;:::-;18481:16;:44::i;:::-;18476:128;;18553:35;;;;;;;;;;;;;;18476:128;18429:175;18649:2;18616:15;:24;18632:7;18616:24;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;18687:7;18683:2;18667:28;;18676:5;18667:28;;;;;;;;;;;;18373:330;18303:400;;:::o;33424:113::-;33482:7;33509:14;:20;33524:4;33509:20;;;;;;;;;;;;;;;;33502:27;;33424:113;;;:::o;31650:49::-;31692:7;31650:49;:::o;32696:107::-;7751:13;:11;:13::i;:::-;32791:4:::1;;32773:15;:22;;;;;;;:::i;:::-;;32696:107:::0;;:::o;13444:185::-;13505:7;13595:15;:13;:15::i;:::-;13580:12;;13564:13;;:28;:46;13557:53;;13444:185;:::o;32811:108::-;7751:13;:11;:13::i;:::-;32899:12:::1;32885:11;;:26;;;;;;;;;;;;;;;;;;32811:108:::0;:::o;31858:37::-;;;;;;;;;;;;;:::o;20532:1775::-;20666:27;20696;20715:7;20696:18;:27::i;:::-;20666:57;;20781:4;20740:45;;20756:19;20740:45;;;20736:86;;20794:28;;;;;;;;;;;;;;20736:86;20836:27;20865:23;20892:35;20919:7;20892:26;:35::i;:::-;20835:92;;;;20954:68;20979:15;20996:4;21002:19;:17;:19::i;:::-;20954:24;:68::i;:::-;20949:180;;21042:43;21059:4;21065:19;:17;:19::i;:::-;21042:16;:43::i;:::-;21037:92;;21094:35;;;;;;;;;;;;;;21037:92;20949:180;21160:1;21146:16;;:2;:16;;;21142:52;;;21171:23;;;;;;;;;;;;;;21142:52;21207:43;21229:4;21235:2;21239:7;21248:1;21207:21;:43::i;:::-;21299:15;21296:101;;;21380:1;21359:19;21352:30;21296:101;21467:18;:24;21486:4;21467:24;;;;;;;;;;;;;;;;21465:26;;;;;;;;;;;;21509:18;:22;21528:2;21509:22;;;;;;;;;;;;;;;;21507:24;;;;;;;;;;;21590:146;21627:2;21676:45;21691:4;21697:2;21701:19;21676:14;:45::i;:::-;12045:8;21648:73;21590:18;:146::i;:::-;21561:17;:26;21579:7;21561:26;;;;;;;;;;;:175;;;;21820:1;12045:8;21769:19;:47;:52;21765:426;;;21842:19;21874:1;21864:7;:11;21842:33;;21949:1;21915:17;:30;21933:11;21915:30;;;;;;;;;;;;:35;21911:265;;;22015:13;;22000:11;:28;21996:161;;22114:19;22081:17;:30;22099:11;22081:30;;;;;;;;;;;:52;;;;21996:161;21911:265;21823:368;21765:426;22238:7;22234:2;22219:27;;22228:4;22219:27;;;;;;;;;;;;22257:42;22278:4;22284:2;22288:7;22297:1;22257:20;:42::i;:::-;20655:1652;;;20532:1775;;;:::o;36016:290::-;36125:7;36134:21;36253:1;36246:3;36233:10;:16;;;;:::i;:::-;36232:22;;;;:::i;:::-;36216:38;;36273:9;;;;;;;;;;;36265:33;;36016:290;;;;;:::o;32927:100::-;7751:13;:11;:13::i;:::-;33009:10:::1;32997:9;;:22;;;;;;;;;;;;;;;;;;32927:100:::0;:::o;34349:474::-;156:1;314:7;;:19;;306:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;156:1;392:7;:18;;;;34426:14:::1;34443:12;:10;:12::i;:::-;34426:29;;34476:14;;;;;;;;;;;34468:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;34569:14;:22;34584:6;34569:22;;;;;;;;;;;;;;;;31752:1;34554:37;;;;:::i;:::-;34542:8;:49;;34520:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;34689:8;31799:7;34674:23;;;;:::i;:::-;34661:9;:36;34653:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34765:8;34739:14;:22;34754:6;34739:22;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;34784:31;34798:6;34806:8;34784:13;:31::i;:::-;34415:408;112:1:::0;447:7;:22;;;;34349:474;:::o;31514:40::-;31551:3;31514:40;:::o;31998:26::-;;;;;;;;;;;;;:::o;34958:108::-;7751:13;:11;:13::i;:::-;35014:11:::1;;;;;;;;;;;35006:29;;:52;35036:21;35006:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;34958:108::o:0;31760:46::-;31799:7;31760:46;:::o;22318:185::-;22456:39;22473:4;22479:2;22483:7;22456:39;;;;;;;;;;;;:16;:39::i;:::-;22318:185;;;:::o;34833:112::-;7751:13;:11;:13::i;:::-;34910:27:::1;34924:2;34928:8;34910:13;:27::i;:::-;34833:112:::0;;:::o;35522:100::-;7751:13;:11;:13::i;:::-;35603:11:::1;35593:7;:21;;;;;;;;;;;;:::i;:::-;;35522:100:::0;:::o;15981:152::-;16053:7;16096:27;16115:7;16096:18;:27::i;:::-;16073:52;;15981:152;;;:::o;31600:43::-;31642:1;31600:43;:::o;31435:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;13929:233::-;14001:7;14042:1;14025:19;;:5;:19;;;14021:60;;;14053:28;;;;;;;;;;;;;;14021:60;11537:13;14099:18;:25;14118:5;14099:25;;;;;;;;;;;;;;;;:55;14092:62;;13929:233;;;:::o;8039:103::-;7751:13;:11;:13::i;:::-;8104:30:::1;8131:1;8104:18;:30::i;:::-;8039:103::o:0;33039:115::-;7751:13;:11;:13::i;:::-;33131:15:::1;33114:14;;:32;;;;;;;;;;;;;;;;;;33039:115:::0;:::o;7797:87::-;7843:7;7870:6;;;;;;;;;;;7863:13;;7797:87;:::o;15433:104::-;15489:13;15522:7;15515:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15433:104;:::o;18944:308::-;19055:19;:17;:19::i;:::-;19043:31;;:8;:31;;;19039:61;;;19083:17;;;;;;;;;;;;;;19039:61;19165:8;19113:18;:39;19132:19;:17;:19::i;:::-;19113:39;;;;;;;;;;;;;;;:49;19153:8;19113:49;;;;;;;;;;;;;;;;:60;;;;;;;;;;;;;;;;;;19225:8;19189:55;;19204:19;:17;:19::i;:::-;19189:55;;;19235:8;19189:55;;;;;;:::i;:::-;;;;;;;;18944:308;;:::o;32073:33::-;;;;;;;;;;;;;:::o;22514:399::-;22681:31;22694:4;22700:2;22704:7;22681:12;:31::i;:::-;22745:1;22727:2;:14;;;:19;22723:183;;22766:56;22797:4;22803:2;22807:7;22816:5;22766:30;:56::i;:::-;22761:145;;22850:40;;;;;;;;;;;;;;22761:145;22723:183;22514:399;;;;:::o;33561:145::-;33637:4;33661:37;33680:5;33687:4;;33693;33661:18;:37::i;:::-;33654:44;;33561:145;;;;:::o;33168:127::-;7751:13;:11;:13::i;:::-;33269:18:::1;33249:17;;:38;;;;;;;;;;;;;;;;;;33168:127:::0;:::o;31463:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;35080:430::-;35178:13;35221:16;35229:7;35221;:16::i;:::-;35205:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;35314:28;35345:10;:8;:10::i;:::-;35314:41;;35400:1;35375:14;35369:28;:32;:133;;;;;;;;;;;;;;;;;35437:14;35453:18;:7;:16;:18::i;:::-;35473:13;35420:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;35369:133;35362:140;;;35080:430;;;:::o;33718:618::-;156:1;314:7;;:19;;306:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;156:1;392:7;:18;;;;33822:14:::1;33839:12;:10;:12::i;:::-;33822:29;;33870:55;33878:5;33912:10;33895:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;33885:39;;;;;;33870:7;:55::i;:::-;33862:99;;;;;;;;;;;;:::i;:::-;;;;;;;;;33980:17;;;;;;;;;;;33972:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;34079:14;:22;34094:6;34079:22;;;;;;;;;;;;;;;;31642:1;34061:40;;;;:::i;:::-;34049:8;:52;;34027:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;34202:8;31692:7;34184:26;;;;:::i;:::-;34171:9;:39;34163:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;34278:8;34252:14;:22;34267:6;34252:22;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;34297:31;34311:6;34319:8;34297:13;:31::i;:::-;33811:525;112:1:::0;447:7;:22;;;;33718:618;;:::o;35632:113::-;35690:7;35717:20;35731:5;35717:13;:20::i;:::-;35710:27;;35632:113;;;:::o;19263:164::-;19360:4;19384:18;:25;19403:5;19384:25;;;;;;;;;;;;;;;:35;19410:8;19384:35;;;;;;;;;;;;;;;;;;;;;;;;;19377:42;;19263:164;;;;:::o;31906:19::-;;;;:::o;32035:24::-;;;;;;;;;;;;;:::o;8153:201::-;7751:13;:11;:13::i;:::-;8262:1:::1;8242:22;;:8;:22;;;;8234:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;8318:28;8337:8;8318:18;:28::i;:::-;8153:201:::0;:::o;31395:29::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;15061:250::-;15146:4;15207:10;15192:25;;:11;:25;;;;:68;;;;15250:10;15235:25;;:11;:25;;;;15192:68;:111;;;;15293:10;15278:25;;:11;:25;;;;15192:111;15172:131;;15061:250;;;:::o;19439:244::-;19504:4;19560:7;19541:15;:13;:15::i;:::-;:26;;:66;;;;;19594:13;;19584:7;:23;19541:66;:133;;;;;19673:1;11911:8;19625:17;:26;19643:7;19625:26;;;;;;;;;;;;:44;:49;19541:133;19521:153;;19439:244;;;:::o;30168:105::-;30228:7;30255:10;30248:17;;30168:105;:::o;7897:132::-;7972:12;:10;:12::i;:::-;7961:23;;:7;:5;:7::i;:::-;:23;;;7953:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7897:132::o;13226:92::-;13282:7;13309:1;13302:8;;13226:92;:::o;16704:673::-;16771:7;16791:12;16806:7;16791:22;;16874:4;16855:15;:13;:15::i;:::-;:23;16851:459;;16908:13;;16901:4;:20;16897:413;;;16946:14;16963:17;:23;16981:4;16963:23;;;;;;;;;;;;16946:40;;17060:1;11911:8;17032:6;:24;:29;17028:263;;;17115:113;17132:1;17122:6;:11;17115:113;;;17175:17;:25;17193:6;;;;;;;17175:25;;;;;;;;;;;;17166:34;;17115:113;;;17261:6;17254:13;;;;;;17028:263;16923:387;16897:413;16851:459;17338:31;;;;;;;;;;;;;;16704:673;;;;:::o;20122:400::-;20224:27;20253:23;20294:38;20335:15;:24;20351:7;20335:24;;;;;;;;;;;20294:65;;20427:18;20404:41;;20484:19;20478:26;20459:45;;20389:126;20122:400;;;:::o;19695:416::-;19844:11;19926:16;19919:5;19915:28;19906:37;;19994:16;19983:9;19979:32;19966:45;;20076:15;20065:9;20062:30;20054:5;20043:9;20040:20;20037:56;20027:66;;19695:416;;;;;:::o;22925:159::-;;;;;:::o;29845:311::-;29980:7;30000:16;12108:3;30026:19;:41;;30000:68;;12108:3;30094:31;30105:4;30111:2;30115:9;30094:10;:31::i;:::-;30086:40;;:62;;30079:69;;;29845:311;;;;;:::o;17765:298::-;17845:14;17929:16;17922:5;17918:28;17909:37;;18038:5;18024:11;17999:23;17995:41;17992:52;17985:5;17982:63;17972:73;;17765:298;;;;:::o;23094:158::-;;;;;:::o;32413:107::-;32475:7;32502:10;32495:17;;32413:107;:::o;35756:244::-;31551:3;35877:8;35850:24;35863:10;35850:12;:24::i;:::-;:35;;;;:::i;:::-;:49;;35828:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;35969:23;35979:2;35983:8;35969:9;:23::i;:::-;35756:244;;:::o;8367:191::-;8441:16;8460:6;;;;;;;;;;;8441:25;;8486:8;8477:6;;:17;;;;;;;;;;;;;;;;;;8541:8;8510:40;;8531:8;8510:40;;;;;;;;;;;;8430:128;8367:191;:::o;23262:716::-;23425:4;23471:2;23446:45;;;23492:19;:17;:19::i;:::-;23513:4;23519:7;23528:5;23446:88;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;23442:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23746:1;23729:6;:13;:18;23725:235;;;23775:40;;;;;;;;;;;;;;23725:235;23918:6;23912:13;23903:6;23899:2;23895:15;23888:38;23442:529;23615:54;;;23605:64;;;:6;:64;;;;23598:71;;;23262:716;;;;;;:::o;2242:190::-;2367:4;2420;2391:25;2404:5;2411:4;2391:12;:25::i;:::-;:33;2384:40;;2242:190;;;;;:::o;33308:108::-;33368:13;33401:7;33394:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33308:108;:::o;663:540::-;719:13;766:1;757:5;:10;753:53;;;784:10;;;;;;;;;;;;;;;;;;;;;753:53;816:12;831:5;816:20;;847:14;872:78;887:1;879:4;:9;872:78;;905:8;;;;;:::i;:::-;;;;936:2;928:10;;;;;:::i;:::-;;;872:78;;;960:19;992:6;982:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;960:39;;1010:154;1026:1;1017:5;:10;1010:154;;1054:1;1044:11;;;;;:::i;:::-;;;1121:2;1113:5;:10;;;;:::i;:::-;1100:2;:24;;;;:::i;:::-;1087:39;;1070:6;1077;1070:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1150:2;1141:11;;;;;:::i;:::-;;;1010:154;;;1188:6;1174:21;;;;;663:540;;;;:::o;14175:178::-;14236:7;11537:13;11608:2;14264:18;:25;14283:5;14264:25;;;;;;;;;;;;;;;;:50;;14263:82;14256:89;;14175:178;;;:::o;29686:147::-;29823:6;29686:147;;;;;:::o;27188:112::-;27265:27;27275:2;27279:8;27265:27;;;;;;;;;;;;:9;:27::i;:::-;27188:112;;:::o;2665:296::-;2748:7;2768:20;2791:4;2768:27;;2811:9;2806:118;2830:5;:12;2826:1;:16;2806:118;;;2879:33;2889:12;2903:5;2909:1;2903:8;;;;;;;;:::i;:::-;;;;;;;;2879:9;:33::i;:::-;2864:48;;2844:3;;;;;:::i;:::-;;;;2806:118;;;;2941:12;2934:19;;;2665:296;;;;:::o;26512:664::-;26643:19;26649:2;26653:8;26643:5;:19::i;:::-;26722:1;26704:2;:14;;;:19;26700:458;;26744:11;26758:13;;26744:27;;26790:13;26812:8;26806:3;:14;26790:30;;26839:233;26870:62;26909:1;26913:2;26917:7;;;;;;26926:5;26870:30;:62::i;:::-;26865:167;;26968:40;;;;;;;;;;;;;;26865:167;27067:3;27059:5;:11;26839:233;;27129:3;27112:13;;:20;27108:34;;27134:8;;;27108:34;26725:433;;26700:458;26512:664;;;:::o;6040:149::-;6103:7;6134:1;6130;:5;:51;;6161:20;6176:1;6179;6161:14;:20::i;:::-;6130:51;;;6138:20;6153:1;6156;6138:14;:20::i;:::-;6130:51;6123:58;;6040:149;;;;:::o;23988:1533::-;24061:20;24084:13;;24061:36;;24124:1;24112:8;:13;24108:44;;;24134:18;;;;;;;;;;;;;;24108:44;24165:61;24195:1;24199:2;24203:12;24217:8;24165:21;:61::i;:::-;24353:1;11608:2;24323:1;:26;;24322:32;24310:8;:45;24284:18;:22;24303:2;24284:22;;;;;;;;;;;;;;;;:71;;;;;;;;;;;24418:139;24455:2;24509:33;24532:1;24536:2;24540:1;24509:14;:33::i;:::-;24476:30;24497:8;24476:20;:30::i;:::-;:66;24418:18;:139::i;:::-;24384:17;:31;24402:12;24384:31;;;;;;;;;;;:173;;;;24574:16;24605:11;24634:8;24619:12;:23;24605:37;;24736:16;24732:2;24728:25;24716:37;;24970:12;24938:8;24913:1;24864:25;24839:1;24815;24788:214;25082:1;25068:12;25064:20;25022:299;25123:3;25114:7;25111:16;25022:299;;25294:7;25284:8;25281:1;25254:25;25251:1;25248;25243:59;25176:1;25167:7;25163:15;25152:26;;25022:299;;;25026:77;25366:1;25354:8;:13;25350:45;;;25376:19;;;;;;;;;;;;;;25350:45;25428:3;25412:13;:19;;;;24247:1196;;25453:60;25482:1;25486:2;25490:12;25504:8;25453:20;:60::i;:::-;24050:1471;23988:1533;;:::o;6197:231::-;6265:13;6335:1;6329:4;6322:15;6364:1;6358:4;6351:15;6405:4;6399;6389:21;6380:30;;6197:231;;;;:::o;18076:214::-;18146:14;18269:1;18259:8;18256:15;18230:24;18226:46;18216:56;;18076:214;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:139::-;2309:5;2347:6;2334:20;2325:29;;2363:33;2390:5;2363:33;:::i;:::-;2263:139;;;;:::o;2408:137::-;2453:5;2491:6;2478:20;2469:29;;2507:32;2533:5;2507:32;:::i;:::-;2408:137;;;;:::o;2551:141::-;2607:5;2638:6;2632:13;2623:22;;2654:32;2680:5;2654:32;:::i;:::-;2551:141;;;;:::o;2711:338::-;2766:5;2815:3;2808:4;2800:6;2796:17;2792:27;2782:122;;2823:79;;:::i;:::-;2782:122;2940:6;2927:20;2965:78;3039:3;3031:6;3024:4;3016:6;3012:17;2965:78;:::i;:::-;2956:87;;2772:277;2711:338;;;;:::o;3069:553::-;3127:8;3137:6;3187:3;3180:4;3172:6;3168:17;3164:27;3154:122;;3195:79;;:::i;:::-;3154:122;3308:6;3295:20;3285:30;;3338:18;3330:6;3327:30;3324:117;;;3360:79;;:::i;:::-;3324:117;3474:4;3466:6;3462:17;3450:29;;3528:3;3520:4;3512:6;3508:17;3498:8;3494:32;3491:41;3488:128;;;3535:79;;:::i;:::-;3488:128;3069:553;;;;;:::o;3642:340::-;3698:5;3747:3;3740:4;3732:6;3728:17;3724:27;3714:122;;3755:79;;:::i;:::-;3714:122;3872:6;3859:20;3897:79;3972:3;3964:6;3957:4;3949:6;3945:17;3897:79;:::i;:::-;3888:88;;3704:278;3642:340;;;;:::o;3988:139::-;4034:5;4072:6;4059:20;4050:29;;4088:33;4115:5;4088:33;:::i;:::-;3988:139;;;;:::o;4133:329::-;4192:6;4241:2;4229:9;4220:7;4216:23;4212:32;4209:119;;;4247:79;;:::i;:::-;4209:119;4367:1;4392:53;4437:7;4428:6;4417:9;4413:22;4392:53;:::i;:::-;4382:63;;4338:117;4133:329;;;;:::o;4468:474::-;4536:6;4544;4593:2;4581:9;4572:7;4568:23;4564:32;4561:119;;;4599:79;;:::i;:::-;4561:119;4719:1;4744:53;4789:7;4780:6;4769:9;4765:22;4744:53;:::i;:::-;4734:63;;4690:117;4846:2;4872:53;4917:7;4908:6;4897:9;4893:22;4872:53;:::i;:::-;4862:63;;4817:118;4468:474;;;;;:::o;4948:619::-;5025:6;5033;5041;5090:2;5078:9;5069:7;5065:23;5061:32;5058:119;;;5096:79;;:::i;:::-;5058:119;5216:1;5241:53;5286:7;5277:6;5266:9;5262:22;5241:53;:::i;:::-;5231:63;;5187:117;5343:2;5369:53;5414:7;5405:6;5394:9;5390:22;5369:53;:::i;:::-;5359:63;;5314:118;5471:2;5497:53;5542:7;5533:6;5522:9;5518:22;5497:53;:::i;:::-;5487:63;;5442:118;4948:619;;;;;:::o;5573:943::-;5668:6;5676;5684;5692;5741:3;5729:9;5720:7;5716:23;5712:33;5709:120;;;5748:79;;:::i;:::-;5709:120;5868:1;5893:53;5938:7;5929:6;5918:9;5914:22;5893:53;:::i;:::-;5883:63;;5839:117;5995:2;6021:53;6066:7;6057:6;6046:9;6042:22;6021:53;:::i;:::-;6011:63;;5966:118;6123:2;6149:53;6194:7;6185:6;6174:9;6170:22;6149:53;:::i;:::-;6139:63;;6094:118;6279:2;6268:9;6264:18;6251:32;6310:18;6302:6;6299:30;6296:117;;;6332:79;;:::i;:::-;6296:117;6437:62;6491:7;6482:6;6471:9;6467:22;6437:62;:::i;:::-;6427:72;;6222:287;5573:943;;;;;;;:::o;6522:468::-;6587:6;6595;6644:2;6632:9;6623:7;6619:23;6615:32;6612:119;;;6650:79;;:::i;:::-;6612:119;6770:1;6795:53;6840:7;6831:6;6820:9;6816:22;6795:53;:::i;:::-;6785:63;;6741:117;6897:2;6923:50;6965:7;6956:6;6945:9;6941:22;6923:50;:::i;:::-;6913:60;;6868:115;6522:468;;;;;:::o;6996:474::-;7064:6;7072;7121:2;7109:9;7100:7;7096:23;7092:32;7089:119;;;7127:79;;:::i;:::-;7089:119;7247:1;7272:53;7317:7;7308:6;7297:9;7293:22;7272:53;:::i;:::-;7262:63;;7218:117;7374:2;7400:53;7445:7;7436:6;7425:9;7421:22;7400:53;:::i;:::-;7390:63;;7345:118;6996:474;;;;;:::o;7476:684::-;7569:6;7577;7626:2;7614:9;7605:7;7601:23;7597:32;7594:119;;;7632:79;;:::i;:::-;7594:119;7780:1;7769:9;7765:17;7752:31;7810:18;7802:6;7799:30;7796:117;;;7832:79;;:::i;:::-;7796:117;7937:78;8007:7;7998:6;7987:9;7983:22;7937:78;:::i;:::-;7927:88;;7723:302;8064:2;8090:53;8135:7;8126:6;8115:9;8111:22;8090:53;:::i;:::-;8080:63;;8035:118;7476:684;;;;;:::o;8166:323::-;8222:6;8271:2;8259:9;8250:7;8246:23;8242:32;8239:119;;;8277:79;;:::i;:::-;8239:119;8397:1;8422:50;8464:7;8455:6;8444:9;8440:22;8422:50;:::i;:::-;8412:60;;8368:114;8166:323;;;;:::o;8495:327::-;8553:6;8602:2;8590:9;8581:7;8577:23;8573:32;8570:119;;;8608:79;;:::i;:::-;8570:119;8728:1;8753:52;8797:7;8788:6;8777:9;8773:22;8753:52;:::i;:::-;8743:62;;8699:116;8495:327;;;;:::o;8828:349::-;8897:6;8946:2;8934:9;8925:7;8921:23;8917:32;8914:119;;;8952:79;;:::i;:::-;8914:119;9072:1;9097:63;9152:7;9143:6;9132:9;9128:22;9097:63;:::i;:::-;9087:73;;9043:127;8828:349;;;;:::o;9183:529::-;9254:6;9262;9311:2;9299:9;9290:7;9286:23;9282:32;9279:119;;;9317:79;;:::i;:::-;9279:119;9465:1;9454:9;9450:17;9437:31;9495:18;9487:6;9484:30;9481:117;;;9517:79;;:::i;:::-;9481:117;9630:65;9687:7;9678:6;9667:9;9663:22;9630:65;:::i;:::-;9612:83;;;;9408:297;9183:529;;;;;:::o;9718:509::-;9787:6;9836:2;9824:9;9815:7;9811:23;9807:32;9804:119;;;9842:79;;:::i;:::-;9804:119;9990:1;9979:9;9975:17;9962:31;10020:18;10012:6;10009:30;10006:117;;;10042:79;;:::i;:::-;10006:117;10147:63;10202:7;10193:6;10182:9;10178:22;10147:63;:::i;:::-;10137:73;;9933:287;9718:509;;;;:::o;10233:329::-;10292:6;10341:2;10329:9;10320:7;10316:23;10312:32;10309:119;;;10347:79;;:::i;:::-;10309:119;10467:1;10492:53;10537:7;10528:6;10517:9;10513:22;10492:53;:::i;:::-;10482:63;;10438:117;10233:329;;;;:::o;10568:684::-;10661:6;10669;10718:2;10706:9;10697:7;10693:23;10689:32;10686:119;;;10724:79;;:::i;:::-;10686:119;10844:1;10869:53;10914:7;10905:6;10894:9;10890:22;10869:53;:::i;:::-;10859:63;;10815:117;10999:2;10988:9;10984:18;10971:32;11030:18;11022:6;11019:30;11016:117;;;11052:79;;:::i;:::-;11016:117;11157:78;11227:7;11218:6;11207:9;11203:22;11157:78;:::i;:::-;11147:88;;10942:303;10568:684;;;;;:::o;11258:474::-;11326:6;11334;11383:2;11371:9;11362:7;11358:23;11354:32;11351:119;;;11389:79;;:::i;:::-;11351:119;11509:1;11534:53;11579:7;11570:6;11559:9;11555:22;11534:53;:::i;:::-;11524:63;;11480:117;11636:2;11662:53;11707:7;11698:6;11687:9;11683:22;11662:53;:::i;:::-;11652:63;;11607:118;11258:474;;;;;:::o;11738:118::-;11825:24;11843:5;11825:24;:::i;:::-;11820:3;11813:37;11738:118;;:::o;11862:157::-;11967:45;11987:24;12005:5;11987:24;:::i;:::-;11967:45;:::i;:::-;11962:3;11955:58;11862:157;;:::o;12025:109::-;12106:21;12121:5;12106:21;:::i;:::-;12101:3;12094:34;12025:109;;:::o;12140:118::-;12227:24;12245:5;12227:24;:::i;:::-;12222:3;12215:37;12140:118;;:::o;12264:360::-;12350:3;12378:38;12410:5;12378:38;:::i;:::-;12432:70;12495:6;12490:3;12432:70;:::i;:::-;12425:77;;12511:52;12556:6;12551:3;12544:4;12537:5;12533:16;12511:52;:::i;:::-;12588:29;12610:6;12588:29;:::i;:::-;12583:3;12579:39;12572:46;;12354:270;12264:360;;;;:::o;12630:364::-;12718:3;12746:39;12779:5;12746:39;:::i;:::-;12801:71;12865:6;12860:3;12801:71;:::i;:::-;12794:78;;12881:52;12926:6;12921:3;12914:4;12907:5;12903:16;12881:52;:::i;:::-;12958:29;12980:6;12958:29;:::i;:::-;12953:3;12949:39;12942:46;;12722:272;12630:364;;;;:::o;13000:377::-;13106:3;13134:39;13167:5;13134:39;:::i;:::-;13189:89;13271:6;13266:3;13189:89;:::i;:::-;13182:96;;13287:52;13332:6;13327:3;13320:4;13313:5;13309:16;13287:52;:::i;:::-;13364:6;13359:3;13355:16;13348:23;;13110:267;13000:377;;;;:::o;13407:845::-;13510:3;13547:5;13541:12;13576:36;13602:9;13576:36;:::i;:::-;13628:89;13710:6;13705:3;13628:89;:::i;:::-;13621:96;;13748:1;13737:9;13733:17;13764:1;13759:137;;;;13910:1;13905:341;;;;13726:520;;13759:137;13843:4;13839:9;13828;13824:25;13819:3;13812:38;13879:6;13874:3;13870:16;13863:23;;13759:137;;13905:341;13972:38;14004:5;13972:38;:::i;:::-;14032:1;14046:154;14060:6;14057:1;14054:13;14046:154;;;14134:7;14128:14;14124:1;14119:3;14115:11;14108:35;14184:1;14175:7;14171:15;14160:26;;14082:4;14079:1;14075:12;14070:17;;14046:154;;;14229:6;14224:3;14220:16;14213:23;;13912:334;;13726:520;;13514:738;;13407:845;;;;:::o;14258:366::-;14400:3;14421:67;14485:2;14480:3;14421:67;:::i;:::-;14414:74;;14497:93;14586:3;14497:93;:::i;:::-;14615:2;14610:3;14606:12;14599:19;;14258:366;;;:::o;14630:::-;14772:3;14793:67;14857:2;14852:3;14793:67;:::i;:::-;14786:74;;14869:93;14958:3;14869:93;:::i;:::-;14987:2;14982:3;14978:12;14971:19;;14630:366;;;:::o;15002:::-;15144:3;15165:67;15229:2;15224:3;15165:67;:::i;:::-;15158:74;;15241:93;15330:3;15241:93;:::i;:::-;15359:2;15354:3;15350:12;15343:19;;15002:366;;;:::o;15374:::-;15516:3;15537:67;15601:2;15596:3;15537:67;:::i;:::-;15530:74;;15613:93;15702:3;15613:93;:::i;:::-;15731:2;15726:3;15722:12;15715:19;;15374:366;;;:::o;15746:::-;15888:3;15909:67;15973:2;15968:3;15909:67;:::i;:::-;15902:74;;15985:93;16074:3;15985:93;:::i;:::-;16103:2;16098:3;16094:12;16087:19;;15746:366;;;:::o;16118:::-;16260:3;16281:67;16345:2;16340:3;16281:67;:::i;:::-;16274:74;;16357:93;16446:3;16357:93;:::i;:::-;16475:2;16470:3;16466:12;16459:19;;16118:366;;;:::o;16490:::-;16632:3;16653:67;16717:2;16712:3;16653:67;:::i;:::-;16646:74;;16729:93;16818:3;16729:93;:::i;:::-;16847:2;16842:3;16838:12;16831:19;;16490:366;;;:::o;16862:::-;17004:3;17025:67;17089:2;17084:3;17025:67;:::i;:::-;17018:74;;17101:93;17190:3;17101:93;:::i;:::-;17219:2;17214:3;17210:12;17203:19;;16862:366;;;:::o;17234:::-;17376:3;17397:67;17461:2;17456:3;17397:67;:::i;:::-;17390:74;;17473:93;17562:3;17473:93;:::i;:::-;17591:2;17586:3;17582:12;17575:19;;17234:366;;;:::o;17606:118::-;17693:24;17711:5;17693:24;:::i;:::-;17688:3;17681:37;17606:118;;:::o;17730:256::-;17842:3;17857:75;17928:3;17919:6;17857:75;:::i;:::-;17957:2;17952:3;17948:12;17941:19;;17977:3;17970:10;;17730:256;;;;:::o;17992:589::-;18217:3;18239:95;18330:3;18321:6;18239:95;:::i;:::-;18232:102;;18351:95;18442:3;18433:6;18351:95;:::i;:::-;18344:102;;18463:92;18551:3;18542:6;18463:92;:::i;:::-;18456:99;;18572:3;18565:10;;17992:589;;;;;;:::o;18587:222::-;18680:4;18718:2;18707:9;18703:18;18695:26;;18731:71;18799:1;18788:9;18784:17;18775:6;18731:71;:::i;:::-;18587:222;;;;:::o;18815:640::-;19010:4;19048:3;19037:9;19033:19;19025:27;;19062:71;19130:1;19119:9;19115:17;19106:6;19062:71;:::i;:::-;19143:72;19211:2;19200:9;19196:18;19187:6;19143:72;:::i;:::-;19225;19293:2;19282:9;19278:18;19269:6;19225:72;:::i;:::-;19344:9;19338:4;19334:20;19329:2;19318:9;19314:18;19307:48;19372:76;19443:4;19434:6;19372:76;:::i;:::-;19364:84;;18815:640;;;;;;;:::o;19461:332::-;19582:4;19620:2;19609:9;19605:18;19597:26;;19633:71;19701:1;19690:9;19686:17;19677:6;19633:71;:::i;:::-;19714:72;19782:2;19771:9;19767:18;19758:6;19714:72;:::i;:::-;19461:332;;;;;:::o;19799:210::-;19886:4;19924:2;19913:9;19909:18;19901:26;;19937:65;19999:1;19988:9;19984:17;19975:6;19937:65;:::i;:::-;19799:210;;;;:::o;20015:222::-;20108:4;20146:2;20135:9;20131:18;20123:26;;20159:71;20227:1;20216:9;20212:17;20203:6;20159:71;:::i;:::-;20015:222;;;;:::o;20243:313::-;20356:4;20394:2;20383:9;20379:18;20371:26;;20443:9;20437:4;20433:20;20429:1;20418:9;20414:17;20407:47;20471:78;20544:4;20535:6;20471:78;:::i;:::-;20463:86;;20243:313;;;;:::o;20562:419::-;20728:4;20766:2;20755:9;20751:18;20743:26;;20815:9;20809:4;20805:20;20801:1;20790:9;20786:17;20779:47;20843:131;20969:4;20843:131;:::i;:::-;20835:139;;20562:419;;;:::o;20987:::-;21153:4;21191:2;21180:9;21176:18;21168:26;;21240:9;21234:4;21230:20;21226:1;21215:9;21211:17;21204:47;21268:131;21394:4;21268:131;:::i;:::-;21260:139;;20987:419;;;:::o;21412:::-;21578:4;21616:2;21605:9;21601:18;21593:26;;21665:9;21659:4;21655:20;21651:1;21640:9;21636:17;21629:47;21693:131;21819:4;21693:131;:::i;:::-;21685:139;;21412:419;;;:::o;21837:::-;22003:4;22041:2;22030:9;22026:18;22018:26;;22090:9;22084:4;22080:20;22076:1;22065:9;22061:17;22054:47;22118:131;22244:4;22118:131;:::i;:::-;22110:139;;21837:419;;;:::o;22262:::-;22428:4;22466:2;22455:9;22451:18;22443:26;;22515:9;22509:4;22505:20;22501:1;22490:9;22486:17;22479:47;22543:131;22669:4;22543:131;:::i;:::-;22535:139;;22262:419;;;:::o;22687:::-;22853:4;22891:2;22880:9;22876:18;22868:26;;22940:9;22934:4;22930:20;22926:1;22915:9;22911:17;22904:47;22968:131;23094:4;22968:131;:::i;:::-;22960:139;;22687:419;;;:::o;23112:::-;23278:4;23316:2;23305:9;23301:18;23293:26;;23365:9;23359:4;23355:20;23351:1;23340:9;23336:17;23329:47;23393:131;23519:4;23393:131;:::i;:::-;23385:139;;23112:419;;;:::o;23537:::-;23703:4;23741:2;23730:9;23726:18;23718:26;;23790:9;23784:4;23780:20;23776:1;23765:9;23761:17;23754:47;23818:131;23944:4;23818:131;:::i;:::-;23810:139;;23537:419;;;:::o;23962:::-;24128:4;24166:2;24155:9;24151:18;24143:26;;24215:9;24209:4;24205:20;24201:1;24190:9;24186:17;24179:47;24243:131;24369:4;24243:131;:::i;:::-;24235:139;;23962:419;;;:::o;24387:222::-;24480:4;24518:2;24507:9;24503:18;24495:26;;24531:71;24599:1;24588:9;24584:17;24575:6;24531:71;:::i;:::-;24387:222;;;;:::o;24615:129::-;24649:6;24676:20;;:::i;:::-;24666:30;;24705:33;24733:4;24725:6;24705:33;:::i;:::-;24615:129;;;:::o;24750:75::-;24783:6;24816:2;24810:9;24800:19;;24750:75;:::o;24831:311::-;24908:4;24998:18;24990:6;24987:30;24984:56;;;25020:18;;:::i;:::-;24984:56;25070:4;25062:6;25058:17;25050:25;;25130:4;25124;25120:15;25112:23;;24831:311;;;:::o;25148:307::-;25209:4;25299:18;25291:6;25288:30;25285:56;;;25321:18;;:::i;:::-;25285:56;25359:29;25381:6;25359:29;:::i;:::-;25351:37;;25443:4;25437;25433:15;25425:23;;25148:307;;;:::o;25461:308::-;25523:4;25613:18;25605:6;25602:30;25599:56;;;25635:18;;:::i;:::-;25599:56;25673:29;25695:6;25673:29;:::i;:::-;25665:37;;25757:4;25751;25747:15;25739:23;;25461:308;;;:::o;25775:141::-;25824:4;25847:3;25839:11;;25870:3;25867:1;25860:14;25904:4;25901:1;25891:18;25883:26;;25775:141;;;:::o;25922:98::-;25973:6;26007:5;26001:12;25991:22;;25922:98;;;:::o;26026:99::-;26078:6;26112:5;26106:12;26096:22;;26026:99;;;:::o;26131:168::-;26214:11;26248:6;26243:3;26236:19;26288:4;26283:3;26279:14;26264:29;;26131:168;;;;:::o;26305:169::-;26389:11;26423:6;26418:3;26411:19;26463:4;26458:3;26454:14;26439:29;;26305:169;;;;:::o;26480:148::-;26582:11;26619:3;26604:18;;26480:148;;;;:::o;26634:305::-;26674:3;26693:20;26711:1;26693:20;:::i;:::-;26688:25;;26727:20;26745:1;26727:20;:::i;:::-;26722:25;;26881:1;26813:66;26809:74;26806:1;26803:81;26800:107;;;26887:18;;:::i;:::-;26800:107;26931:1;26928;26924:9;26917:16;;26634:305;;;;:::o;26945:185::-;26985:1;27002:20;27020:1;27002:20;:::i;:::-;26997:25;;27036:20;27054:1;27036:20;:::i;:::-;27031:25;;27075:1;27065:35;;27080:18;;:::i;:::-;27065:35;27122:1;27119;27115:9;27110:14;;26945:185;;;;:::o;27136:348::-;27176:7;27199:20;27217:1;27199:20;:::i;:::-;27194:25;;27233:20;27251:1;27233:20;:::i;:::-;27228:25;;27421:1;27353:66;27349:74;27346:1;27343:81;27338:1;27331:9;27324:17;27320:105;27317:131;;;27428:18;;:::i;:::-;27317:131;27476:1;27473;27469:9;27458:20;;27136:348;;;;:::o;27490:191::-;27530:4;27550:20;27568:1;27550:20;:::i;:::-;27545:25;;27584:20;27602:1;27584:20;:::i;:::-;27579:25;;27623:1;27620;27617:8;27614:34;;;27628:18;;:::i;:::-;27614:34;27673:1;27670;27666:9;27658:17;;27490:191;;;;:::o;27687:96::-;27724:7;27753:24;27771:5;27753:24;:::i;:::-;27742:35;;27687:96;;;:::o;27789:90::-;27823:7;27866:5;27859:13;27852:21;27841:32;;27789:90;;;:::o;27885:77::-;27922:7;27951:5;27940:16;;27885:77;;;:::o;27968:149::-;28004:7;28044:66;28037:5;28033:78;28022:89;;27968:149;;;:::o;28123:126::-;28160:7;28200:42;28193:5;28189:54;28178:65;;28123:126;;;:::o;28255:77::-;28292:7;28321:5;28310:16;;28255:77;;;:::o;28338:154::-;28422:6;28417:3;28412;28399:30;28484:1;28475:6;28470:3;28466:16;28459:27;28338:154;;;:::o;28498:307::-;28566:1;28576:113;28590:6;28587:1;28584:13;28576:113;;;28675:1;28670:3;28666:11;28660:18;28656:1;28651:3;28647:11;28640:39;28612:2;28609:1;28605:10;28600:15;;28576:113;;;28707:6;28704:1;28701:13;28698:101;;;28787:1;28778:6;28773:3;28769:16;28762:27;28698:101;28547:258;28498:307;;;:::o;28811:320::-;28855:6;28892:1;28886:4;28882:12;28872:22;;28939:1;28933:4;28929:12;28960:18;28950:81;;29016:4;29008:6;29004:17;28994:27;;28950:81;29078:2;29070:6;29067:14;29047:18;29044:38;29041:84;;;29097:18;;:::i;:::-;29041:84;28862:269;28811:320;;;:::o;29137:281::-;29220:27;29242:4;29220:27;:::i;:::-;29212:6;29208:40;29350:6;29338:10;29335:22;29314:18;29302:10;29299:34;29296:62;29293:88;;;29361:18;;:::i;:::-;29293:88;29401:10;29397:2;29390:22;29180:238;29137:281;;:::o;29424:233::-;29463:3;29486:24;29504:5;29486:24;:::i;:::-;29477:33;;29532:66;29525:5;29522:77;29519:103;;;29602:18;;:::i;:::-;29519:103;29649:1;29642:5;29638:13;29631:20;;29424:233;;;:::o;29663:100::-;29702:7;29731:26;29751:5;29731:26;:::i;:::-;29720:37;;29663:100;;;:::o;29769:94::-;29808:7;29837:20;29851:5;29837:20;:::i;:::-;29826:31;;29769:94;;;:::o;29869:176::-;29901:1;29918:20;29936:1;29918:20;:::i;:::-;29913:25;;29952:20;29970:1;29952:20;:::i;:::-;29947:25;;29991:1;29981:35;;29996:18;;:::i;:::-;29981:35;30037:1;30034;30030:9;30025:14;;29869:176;;;;:::o;30051:180::-;30099:77;30096:1;30089:88;30196:4;30193:1;30186:15;30220:4;30217:1;30210:15;30237:180;30285:77;30282:1;30275:88;30382:4;30379:1;30372:15;30406:4;30403:1;30396:15;30423:180;30471:77;30468:1;30461:88;30568:4;30565:1;30558:15;30592:4;30589:1;30582:15;30609:180;30657:77;30654:1;30647:88;30754:4;30751:1;30744:15;30778:4;30775:1;30768:15;30795:180;30843:77;30840:1;30833:88;30940:4;30937:1;30930:15;30964:4;30961:1;30954:15;30981:117;31090:1;31087;31080:12;31104:117;31213:1;31210;31203:12;31227:117;31336:1;31333;31326:12;31350:117;31459:1;31456;31449:12;31473:117;31582:1;31579;31572:12;31596:117;31705:1;31702;31695:12;31719:102;31760:6;31811:2;31807:7;31802:2;31795:5;31791:14;31787:28;31777:38;;31719:102;;;:::o;31827:94::-;31860:8;31908:5;31904:2;31900:14;31879:35;;31827:94;;;:::o;31927:181::-;32067:33;32063:1;32055:6;32051:14;32044:57;31927:181;:::o;32114:164::-;32254:16;32250:1;32242:6;32238:14;32231:40;32114:164;:::o;32284:225::-;32424:34;32420:1;32412:6;32408:14;32401:58;32493:8;32488:2;32480:6;32476:15;32469:33;32284:225;:::o;32515:174::-;32655:26;32651:1;32643:6;32639:14;32632:50;32515:174;:::o;32695:182::-;32835:34;32831:1;32823:6;32819:14;32812:58;32695:182;:::o;32883:234::-;33023:34;33019:1;33011:6;33007:14;33000:58;33092:17;33087:2;33079:6;33075:15;33068:42;32883:234;:::o;33123:173::-;33263:25;33259:1;33251:6;33247:14;33240:49;33123:173;:::o;33302:172::-;33442:24;33438:1;33430:6;33426:14;33419:48;33302:172;:::o;33480:181::-;33620:33;33616:1;33608:6;33604:14;33597:57;33480:181;:::o;33667:122::-;33740:24;33758:5;33740:24;:::i;:::-;33733:5;33730:35;33720:63;;33779:1;33776;33769:12;33720:63;33667:122;:::o;33795:116::-;33865:21;33880:5;33865:21;:::i;:::-;33858:5;33855:32;33845:60;;33901:1;33898;33891:12;33845:60;33795:116;:::o;33917:122::-;33990:24;34008:5;33990:24;:::i;:::-;33983:5;33980:35;33970:63;;34029:1;34026;34019:12;33970:63;33917:122;:::o;34045:120::-;34117:23;34134:5;34117:23;:::i;:::-;34110:5;34107:34;34097:62;;34155:1;34152;34145:12;34097:62;34045:120;:::o;34171:122::-;34244:24;34262:5;34244:24;:::i;:::-;34237:5;34234:35;34224:63;;34283:1;34280;34273:12;34224:63;34171:122;:::o

Swarm Source

ipfs://6cdc9c2b8f6cda09de93ee02bc39a47921897e1525d696ede62626f262fd1106
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.