The accompanying drawings illustrate a number of exemplary embodiments and are a part of the specification. Together with the following description, these drawings demonstrate and explain various principles of the present disclosure.
Throughout the drawings, identical reference characters and descriptions indicate similar, but not necessarily identical, elements. While the exemplary embodiments described herein are susceptible to various modifications and alternative forms, specific embodiments have been shown by way of example in the drawings and will be described in detail herein. However, the exemplary embodiments described herein are not intended to be limited to the particular forms disclosed. Rather, the present disclosure covers all modifications, equivalents, and alternatives falling within the scope of the appended claims.
For security reasons as well as managing session at scale, every time a user connects to a cloud application platform, a new session may be created that may normally not preserve files from the user's last session. As a result, user devices may need to download a cloud gaming application and all of its updates and install and update the cloud gaming application locally before the application may launch. Additionally, user devices may create a local copy of game save data.
The present disclosure is generally directed to a cloud application platform that may incorporate a persistent storage overlay to reduce file distribution time and drastically improve flexibility for game installation, game updates, and game data. A persistent storage overlay service may be provided on a host (e.g., different location or different machine) by using a file system and emulator that allows a mobile device operating system (OS) to directly access a cloud application stored and run on the host. For example, on an Android platform, the persistent storage overlay may be implemented by utilizing file system in user mode (FUSE) (e.g., the Linux file system in user mode) to directly map games' files on the host to Android. Requests for file access may be re-directed by a background service on Android to a service running on the host. Subsequently, the game itself or the game's data may be made available immediately on both sides without copying the data. Thus, the host's folders are mapped into the Android OS in such a way that the Android OS recognizes the folders as a cloud application that is already installed. This procedure eliminates the need to install cloud applications on a user's mobile device (e.g., Android or Mac) when the user connects. Additionally, users write changes to the host directly and the host preserves a mapped folder that includes the changes, thus avoiding the need to maintain a local copy of game save data on the mobile device. As a result, delay in application launch may be greatly reduced and the need to create a copy of game data at the mobile device can be avoided.
Features from any of the embodiments described herein may be used in combination with one another in accordance with the general principles described herein. These and other embodiments, features, and advantages will be more fully understood upon reading the following detailed description in conjunction with the accompanying drawings and claims.
The following will provide, with reference to
As illustrated in
As used herein, the term “cloud gaming” may generally refer, without limitation, to a type of online gaming that runs video games on remote servers and streams them directly to a user's device, or more colloquially, playing a game remotely from a cloud. Cloud gaming may contrast with traditional means of gaming, wherein a game runs locally on a user's video game console, personal computer, or mobile device. Cloud gaming may also be referred to as gaming on demand or gaming-as-a-service. Thus, the term “cloud gaming application” may generally refer, without limitation, to a gaming application that may be stored and executed on a remote server as just described. Likewise, the term “cloud gaming server” may generally refer, without limitation, to a remote server as just described, and more particularly to a host machine as described in greater detail below with reference to
As used herein, the term “persistent” may generally refer to the characteristic or state of a system that outlives (persists more than) the process that created it. Persistence may be achieved, for example, by storing the state as data in computer data storage. Programs may, thus, transfer data to and from storage devices and provide mappings from native programming-language data structures to storage device data structures.
As used herein, the term “storage” may generally refer to one of two types of two major data holding areas in a computer, tablet, or smartphone. Storage often comprises hard drives and solid-state drives (SSDs), which hold programs and data. A primary attribute of storage may be that it is non-volatile, so it retains its content when the power is turned off. In contrast, random access memory (RAM), which is the other one of the two major holding areas, is typically volatile, meaning that it loses all of its content when the power is turned off. In the past, storage and memory clearly referred to two separate objects, but today they do not because “memory” may refer to either one. RAM chips exist that are non-volatile and they serve as both storage and RAM in remote sensors and similar devices but not as the memory in computers, phones, and tablets.
As used herein, the term “overlay” may generally refer to a process of transferring a block of program code or other data into main memory, replacing what is already stored. Overlaying is a programming method that allows programs to be larger than a computer's main memory. For example, overlay virtualization is a method for creating traffic isolation within a multitenancy infrastructure. Using a form of tunneling between isolated network segments, it allows for scalability and ease of use while providing for separation between the virtual network and the underlying physical environment.
As used herein, the term “service” may generally refer to software that performs automated tasks, responds to hardware events, or listens for data requests from other software. In a user's operating system, these services are often loaded automatically at startup, and run in the background, without user interaction.
As used herein, the term “host” may generally refer to a network host corresponding to a computer or other device connected to a computer network. A host may operate as a server offering information resources, services, and applications to users or other hosts on the network. Hosts may be assigned at least one network address. One type of host may be a host virtual machine (host HVM), which is a virtual machine operated and hosted from a remote cloud server. Host virtual machines may be created and hosted entirely on a cloud service provider infrastructure and may be available to remote users over the Internet under systematic access control, defined compute, and I/O resources.
As used herein, the term “file system” may generally refer to a rules mechanism that controls how data is stored and retrieved. Without a file system, data placed in a storage medium would be one large body of data with no way to tell where one piece of data stops and the next begins. By separating the data into pieces and giving each piece a name, the data is easily isolated and identified. Taking its name from the way paper-based data management system is named, each group of data is called a “file.” The structure and logic rules used to manage the groups of data and their names is called a “file system.”
As used herein, the term “user mode” may generally refer to one of two modes of operation available in many operating systems (e.g., Linux, Windows, etc.). A processor may switch between kernel mode and user mode depending on what type of code is running on the processor. For example, applications may run in user mode and core operating system components may run in kernel mode. While many drivers run in kernel mode, some drivers may run in user mode. User mode may be employed to build efficient virtual machines. Applications run in user mode may be assigned virtual addresses different from one another and different from operating system addresses. When operating in user mode, the processor may be prevented from accessing the operating system files, so these files cannot be altered. Also, applications run in user mode that have different virtual addresses can be prevented from accessing and altering one another.
As used herein, the term “file system operating in user mode” may generally refer to a software interface such as Filesystem in USErspace (FUSE). FUSE is a software interface for Unix and Unix-like computer operating systems that lets non-privileged users create their own file systems without editing kernel code. This is achieved by running file system code in user space while the FUSE module provides only a “bridge” to the actual kernel interfaces. FUSE is available for Linux, FreeBSD, OpenBSD, NetBSD (as puffs), OpenSolaris, Minix 3, macOS, and Windows. FUSE is free software originally released under the terms of the GNU General Public License and the GNU Lesser General Public License.
As used herein, the term “emulator” may generally refer to hardware or software that enables one computer system (called the host) to behave like another computer system (called the guest). An emulator typically enables the host system to run software or use peripheral devices designed for the guest system. Emulation may, thus, refer to the ability of a computer program in an electronic device to emulate (or imitate) another program or device. In server virtualization, emulation may be a synonym for virtual environment, where a virtual environment can also be referred to as a partition, guest, instance, or container.
Processing may proceed from step 110 to step 120. The systems described herein may perform step 120 in any suitable manner. In one example, step 120 may include receiving, by the computer processor from a mobile device, one or more requests for access to one or more files of a cloud gaming application stored on the host. Such requests may take any suitable form, such as a request to download and install the cloud gaming application, a request to receive game save data, a request to initiate a user session to play the cloud gaming application, a request to write game progress data to a user session stored on the server, etc. In some implementations, the requests are redirected by a background service running on the mobile device to the persistent storage overlay service provided by the host.
As used herein, the term “mobile device” may generally refer to a computer small enough to hold and operate in the hand. Typically, any handheld computer device will have an LCD or OLED flatscreen interface, providing a touchscreen interface with digital buttons and keyboard or physical buttons along with a physical keyboard. Many such devices can connect to the Internet and interconnect with other devices such as car entertainment systems or headsets via Wi-Fi, Bluetooth, cellular networks, or near field communication (NFC). Integrated cameras, the ability to place and receive voice and video telephone calls, video games, and Global Positioning System (GPS) capabilities are common. Power is typically provided by a lithium-ion battery. Mobile devices may run mobile operating systems that allow third-party apps specialized for said capabilities to be installed and run.
As used herein, the term “file” may generally refer to a collection of data stored in one unit, identified by a filename, and typically stored in a folder along with one or more other files. A file can be a document, picture, audio or video stream, data library, application, or other collection of data. Files can be opened, saved, deleted, and moved to different folders. They can also be transferred across network connections or downloaded from the Internet.
As used herein, the term “background service” may generally refer to a service, as already described herein, that runs in a background of a computer, such as a mobile device. A background service may perform an operation that is not directly noticed by the user. A background service may continue to run when the user is not interacting with an application for which the service is configured to perform operations.
Processing may proceed from step 120 to step 130. The systems described herein may perform step 130 in any suitable manner. For example, step 130 may include making, by the computer processor in response to the one or more requests, data of the cloud gaming application available to the host and to the mobile device, without copying the data, in a manner that obviates installation of the cloud gaming application on the mobile device. The systems described herein may make the data of the cloud gaming application available in a variety of ways. For example, in some implementations, making data of the cloud gaming application available to the host and to the mobile device without copying the data may include mapping one or more folders of the host into an operating system of the mobile device in a manner that causes the operating system of the mobile device to recognize the one or more folders of the host as a cloud gaming application that is already installed on the mobile device. In additional or alternative implementations, making data of the cloud gaming application available may include receiving, by the computer processor, changes written directly from the mobile device. Such changes may take any suitable form, such as user preferences, game progress data, etc. In some of these implementations, making data of the cloud gaming application available may further include preserving, by the computer processor, a mapped folder that includes the changes, thus avoiding any need to copy game save data.
As used herein, the term “installation” may generally refer to the act of making a computer program ready for execution. Installation may refer to the particular configuration of a software or hardware with a view to making it usable with the computer. A soft or digital copy of the piece of software (program) is needed to install it. Installation typically involves code (program) being copied/generated from the installation files to new files on the local computer for easier access by the operating system, creating necessary directories, registering environment variables, providing a separate program for un-installation, etc. Because code is generally copied/generated in multiple locations, uninstallation usually involves more than just erasing the program folder. For example, registry files and other system code may need to be modified or deleted for a complete uninstallation.
As used herein, the term “mapping” may generally refer to linking to another computer, share, or device. For example, mapping a folder may involve linking to a shared drive on a network. Mapping a shared drive may, thus, add a folder that has already been shared on a network to a list of drives accessible on a computer or mobile device.
As used herein, the term “folder” generally refers to a virtual location for applications, documents, data, or other sub-folders. Folders help in storing and organizing files and data in the computer. Due to the way folders organize and store data within the file system of the storage media, folders may also be known as file directories or simply directories. Folders may be implemented as pointers to file locations within the file system of the computer.
As used herein, the term “operating system” may generally refer to software that supports a computer's basic functions, such as scheduling tasks, executing applications, and controlling peripherals. For hardware functions such as input and output and memory allocation, the operating system may act as an intermediary between programs and the computer hardware. Example types of operating systems include Unix and Unix-like operating systems, BSD and its descendants, macOS, and Microsoft Windows.
A persistent storage overlay device may be implemented in any suitable manner. Turning to
As used herein, the term “user session” or “session” may refer, without limitation, to a temporary and interactive information interchange between communicating devices, such as a session of activity and/or interactions of a client referencing a resource that may be tracked by the resource's host. For example, a website host may track a user's activity during a session with a website provided by the website host. A user session may be used by a host to maintain a user specific state, persistent objects, authenticated user identities, etc., and may further facilitate communication between the client and host by remembering previous interactions/communications. The state of the user session may be maintained in a memory during the session and as such, may be stored to a storage device and later retrieved. Thus, the user session may be paused, the session state stored, and the user session may be restored by retrieving the stored session state. A user session may be viewed in certain contexts as game progress data and/or game save data.
As illustrated in
Processing may proceed from step 310 to step 320, which may include receiving access, by the computer processor and from the host, to data of the cloud gaming application, without receiving a copy the data, in a manner that obviates installation of the cloud gaming application on the mobile device. In some implementations, folders of the host are mapped into an operating system of the mobile device. For example, the folders may be mapped in a manner that causes the operating system of the mobile device to recognize the folders of the host as a cloud gaming application that is already installed on the mobile device.
Processing may proceed from step 320 to step 330, which may include writing changes, by the computer processor of the mobile device, directly to a folder of the host in a manner that obviates creating a copy of game save data on the mobile device. In some implementations, the host may be configured to preserve a mapped folder that includes the changes, thus avoiding any need to copy game save data at the mobile device.
A mobile device that utilizes the persistent storage overlay service may be implemented in any suitable manner. Turning to
Example system 200 in
In some embodiments, the term “virtualization environment” may refer to an isolated application environment that may virtualize at least some aspects of the application environment such that an application may interface with the virtualized aspects as if running on the application's native environment. Examples of virtualization environments include, without limitation, containers and virtual machines (“VM”). In some embodiments, the term “container” may refer to an isolated application environment that virtualizes at least an operating system (“OS”) of the base host machine by sharing a system or OS kernel with the host machine. For example, if the base host machine runs Windows (or other desktop OS), the container may also run Windows (or other desktop OS) by sharing the OS kernel such that the container may not require a complete set of OS binaries and libraries. In some embodiments, the term “virtual machine” may refer to an isolated application environment that virtualizes hardware as well as an OS. Because a VM may virtualize hardware, an OS for the VM may not be restricted by the base host machine OS. For example, even if the base host machine is running Windows (or another desktop OS), a VM on the base host machine may be configured to run Android (or other mobile OS) by emulating mobile device hardware. In other examples, other combinations of OSes may be used.
VM 630 may run an application 620 and VM 632 may run an application 622. Host 606 may utilize nested virtualization environments (e.g., VM 630 running in container 640 and VM 632 running in container 642) to more efficiently manage virtualization environments. For instance, as a number of VMs are initiated and/or closed the nested virtualization may facilitate management of virtualization environments for various types of VMs as well as more efficiently scale the number of VMs running concurrently. Certain aspects which may be global across certain VMs may be better managed via containers.
Computing device 602, which may correspond to an instance of computing device 502, may access data of application 620 via network 604 and background service 624. Computing device 603, which may correspond to another instance of computing device 302, may access data of application 622 via network 604 and background service 626. As shown in
Although
The foregoing has disclosed a cloud application platform that may incorporate a persistent storage overlay to reduce file distribution time and drastically improve flexibility for game installation, game updates, and games' data. A persistent storage overlay service may be provided on a host (e.g., different location or different machine) by using a file system and emulator that allows a mobile device operating system (OS) to directly access a cloud application stored and run on the host. For example, on an Android platform, the persistent storage overlay may be implemented by utilizing file system in user mode (FUSE) (e.g., the Linux file system in user mode) to directly map games' files on the host to Android. Requests for file access may be re-directed by a background service on Android to a service running on the host. Subsequently, the game itself or the game's data may be made available immediately on both sides without copying the data. Thus, the host's folders are mapped into the Android OS in such a way that the Android OS recognizes the folders as a cloud application that is already installed. This procedure eliminates the need to install cloud applications on a user's mobile device (e.g., Android or Mac) when the user connects. Additionally, users write changes to the host directly and the host preserves a mapped folder that includes the changes, thus avoiding the need to maintain a local copy of game save data on the mobile device. As a result, delay in application launch may be greatly reduced and the need to create a copy of game data at the mobile device can be avoided.
Example 1: A computer-implemented method comprising: providing, by a computer processor of a host of a cloud gaming server, a persistent storage overlay service;
receiving, by the computer processor from a mobile device, one or more requests for access to one or more files of a cloud gaming application stored on the host; and making, by the computer processor in response to the one or more requests, data of the cloud gaming application available to the host and to the mobile device, without copying the data, in a manner that obviates installation of the cloud gaming application on the mobile device.
Example 2: the method of example 1, wherein the computer processor provides the persistent storage overlay service at least in part by using a file system and an emulator that allows an operating system of a mobile device to directly access the cloud gaming application stored on the host.
Example 3: The method of example 1 or 2, wherein providing the persistent storage overlay service is accomplished at least in part by using a file system in user mode (FUSE) to directly map the one or more files of the cloud gaming application stored on the host to an Android operating system of the mobile device.
Example 4: The method of any of examples 1-3, wherein the requests are redirected by a background service running on the mobile device to the persistent storage overlay service provided by the host.
Example 5: The method of any of examples 1-4, wherein making data of the cloud gaming application available to the host and to the mobile device without copying the data includes mapping one or more folders of the host into an operating system of the mobile device in a manner that causes the operating system of the mobile device to recognize the one or more folders of the host as a cloud gaming application that is already installed on the mobile device.
Example 6: The method of any of examples 1-5, wherein making data of the cloud gaming application available includes receiving, by the computer processor, changes written directly from the mobile device.
Example 7: The method of any of examples 1-6, wherein making data of the cloud gaming application available further includes preserving, by the computer processor, a mapped folder that includes the changes, thus avoiding any need to copy game save data.
Example 8: A system comprising: at least one physical processor of a host of a cloud gaming server; physical memory comprising computer-executable instructions that, when executed by the physical processor, cause the physical processor to: provide a persistent storage overlay service; receive, from a mobile device, one or more requests for access to one or more files of a cloud gaming application stored on the host; and make, in response to the one or more requests, data of the cloud gaming application available to the host and to the mobile device, without copying the data, in a manner that obviates installation of the cloud gaming application on the mobile device.
Example 9: The system of example 8, wherein the physical processor provides the persistent storage overlay service at least in part by using a file system and an emulator that allows an operating system of a mobile device to directly access the cloud gaming application stored on the host.
Example 10: A non-transitory computer-readable medium comprising one or more computer-executable instructions that, when executed by at least one processor of a computing device of a host of a cloud gaming server, cause the computing device to: provide a persistent storage overlay service; receive, from a mobile device, one or more requests for access to one or more files of a cloud gaming application stored on the host; and make, in response to the one or more requests, data of the cloud gaming application available to the host and to the mobile device, without copying the data, in a manner that obviates installation of the cloud gaming application on the mobile device.
Example 11: A computer-implemented method comprising: transmitting, by a computer processor of a mobile device to a persistent storage overlay service provided by a host of a cloud gaming server, one or more requests for access to one or more files of a cloud gaming application stored on the host; receiving access, by the computer processor and from the host, to data of the cloud gaming application, without receiving a copy the data, in a manner that obviates installation of the cloud gaming application on the mobile device; and writing changes, by the computer processor of the mobile device, directly to a folder of the host in a manner that obviates creating a copy of game save data on the mobile device.
Example 12: The method of example 11, wherein the persistent storage overlay is provided by using a file system and an emulator that allows an operating system of the mobile device to directly access the cloud gaming application stored on the host.
Example 13: The method of any of examples 11 or 12, wherein the persistent storage overlay service is provided at least in part by using a file system in user mode (FUSE) to directly map the one or more files of the cloud gaming application stored on the host to an Android operating system of the mobile device.
Example 14: The method of any of examples 11-13, wherein the requests are redirected by a background service running on the mobile device to the persistent overlay service provided by the host.
Example 15: The method of any of examples 11-14, wherein folders of the host are mapped into an operating system of the mobile device.
Example 16: The method of any of examples 11-15, wherein the folders are mapped in a manner that causes the operating system of the mobile device to recognize the folders of the host as a cloud gaming application that is already installed on the mobile device.
Example 17: The method of any of examples 11-16, wherein the host is configured to preserve a mapped folder that includes the changes, thus avoiding any need to copy game save data.
Example 18: A system comprising: at least one physical processor of a mobile device; physical memory comprising computer-executable instructions that, when executed by the physical processor, cause the physical processor to: transmit, to a persistent storage overlay service provided by a host of a cloud gaming server, one or more requests for access to one or more files of a cloud gaming application stored on the host; receive access, from the host, to data of the cloud gaming application, without receiving a copy the data, in a manner that obviates installation of the cloud gaming application on the mobile device; and write changes directly to a folder of the host in a manner that obviates creating a copy of game save data on the mobile device.
Example 19: The system of example 18, wherein the persistent storage overlay is provided by using a file system and an emulator that allows an operating system of the mobile device to directly access the cloud gaming application stored on the host.
Example 20: A non-transitory computer-readable medium comprising one or more computer-executable instructions that, when executed by at least one processor of a mobile device, cause the computing device to: transmit, to a persistent storage overlay service provided by a host of a cloud gaming server, one or more requests for access to one or more files of a cloud gaming application stored on the host; receive access, from the host, to data of the cloud gaming application, without receiving a copy the data, in a manner that obviates installation of the cloud gaming application on the mobile device; and write changes directly to a folder of the host in a manner that obviates creating a copy of game save data on the mobile device.
As detailed above, the computing devices and systems described and/or illustrated herein broadly represent any type or form of computing device or system capable of executing computer-readable instructions, such as those contained within the modules described herein. In their most basic configuration, these computing device(s) may each include at least one memory device and at least one physical processor.
In some examples, the term “memory device” generally refers to any type or form of volatile or non-volatile storage device or medium capable of storing data and/or computer-readable instructions. In one example, a memory device may store, load, and/or maintain one or more of the modules described herein. Examples of memory devices include, without limitation, Random Access Memory (RAM), Read Only Memory (ROM), flash memory, Hard Disk Drives (HDDs), Solid-State Drives (SSDs), optical disk drives, caches, variations or combinations of one or more of the same, or any other suitable storage memory.
In some examples, the term “physical processor” generally refers to any type or form of hardware-implemented processing unit capable of interpreting and/or executing computer-readable instructions. In one example, a physical processor may access and/or modify one or more modules stored in the above-described memory device. Examples of physical processors include, without limitation, microprocessors, microcontrollers, Central Processing Units (CPUs), Field-Programmable Gate Arrays (FPGAs) that implement softcore processors, Application-Specific Integrated Circuits (ASICs), portions of one or more of the same, variations or combinations of one or more of the same, or any other suitable physical processor.
Although illustrated as separate elements, the modules described and/or illustrated herein may represent portions of a single module or application. In addition, in certain embodiments one or more of these modules may represent one or more software applications or programs that, when executed by a computing device, may cause the computing device to perform one or more tasks. For example, one or more of the modules described and/or illustrated herein may represent modules stored and configured to run on one or more of the computing devices or systems described and/or illustrated herein. One or more of these modules may also represent all or portions of one or more special-purpose computers configured to perform one or more tasks.
In addition, one or more of the modules described herein may transform data, physical devices, and/or representations of physical devices from one form to another. For example, one or more of the modules recited herein may receive session data to be transformed, transform the session data, output a result of the transformation to manage session data, use the result of the transformation to maintain the session data, and store the result of the transformation to store the session data. Additionally or alternatively, one or more of the modules recited herein may transform a processor, volatile memory, non-volatile memory, and/or any other portion of a physical computing device from one form to another by executing on the computing device, storing data on the computing device, and/or otherwise interacting with the computing device.
In some embodiments, the term “computer-readable medium” generally refers to any form of device, carrier, or medium capable of storing or carrying computer-readable instructions. Examples of computer-readable media include, without limitation, transmission-type media, such as carrier waves, and non-transitory-type media, such as magnetic-storage media (e.g., hard disk drives, tape drives, and floppy disks), optical-storage media (e.g., Compact Disks (CDs), Digital Video Disks (DVDs), and BLU-RAY disks), electronic-storage media (e.g., solid-state drives and flash media), and other distribution systems.
The process parameters and sequence of the steps described and/or illustrated herein are given by way of example only and can be varied as desired. For example, while the steps illustrated and/or described herein may be shown or discussed in a particular order, these steps do not necessarily need to be performed in the order illustrated or discussed. The various exemplary methods described and/or illustrated herein may also omit one or more of the steps described or illustrated herein or include additional steps in addition to those disclosed.
The preceding description has been provided to enable others skilled in the art to best utilize various aspects of the exemplary embodiments disclosed herein. This exemplary description is not intended to be exhaustive or to be limited to any precise form disclosed. Many modifications and variations are possible without departing from the spirit and scope of the present disclosure. The embodiments disclosed herein should be considered in all respects illustrative and not restrictive. Reference should be made to the appended claims and their equivalents in determining the scope of the present disclosure.
Unless otherwise noted, the terms “connected to” and “coupled to” (and their derivatives), as used in the specification and claims, are to be construed as permitting both direct and indirect (i.e., via other elements or components) connection. In addition, the terms “a” or “an,” as used in the specification and claims, are to be construed as meaning “at least one of.” Finally, for ease of use, the terms “including” and “having” (and their derivatives), as used in the specification and claims, are interchangeable with and have the same meaning as the word “comprising.”
This application claims the benefit of U.S. Provisional Application No. 63/105,320, filed 25 Oct. 2020, and U.S. Provisional Application No. 63/194,821, filed 28 May 2021, the disclosures of each of which are incorporated, in their entirety, by this reference. Co-pending U.S. application Ser. No. 17/506,640, filed 20 Oct. 2021, is incorporated, in its entirety, by this reference.
Number | Date | Country | |
---|---|---|---|
63194821 | May 2021 | US | |
63105320 | Oct 2020 | US |