interface IERC721 is IERC165 {
    function royaltyFee(uint256 tokenId) external view returns(address[] memory, uint256[] memory);
    function getCreator(uint256 tokenId) external view returns(address);

    function contractOwner() external view returns(address owner);

    /**
     * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to
     * another (`to`).
     *
     *
     *
     * Requirements:
     * - `from`, `to` cannot be zero.
     * - `tokenId` must be owned by `from`.
     * - If the caller is not `from`, it must be have been allowed to move this
     * NFT by either {approve} or {setApprovalForAll}.
     */

    function safeTransferFrom(address from, address to, uint256 tokenId) external;
    function createCollectible(address from, string memory tokenURI, address[] memory royalty, uint256[] memory _royaltyFee) external returns(uint256);
    function mintAndTransfer(address from, address to, address[] memory _royaltyAddress, uint256[] memory _royaltyfee, string memory _tokenURI, bytes memory data)external returns(uint256);
}
/**
 * @dev Required interface of an ERC721 compliant contract.
 */
function safeTransferFrom(address from, address to, uint256 tokenId) external;

/**
 * @dev Transfers a specific NFT (`tokenId`) from one account (`from`) to
 * another (`to`).
 *
 *
 *
 * Requirements:
 * - `from`, `to` cannot be zero.
 * - `tokenId` must be owned by `from`.
 * - If the caller is not `from`, it must be have been allowed to move this
 * NFT by either {approve} or {setApprovalForAll}.
 */