服务器和应用升级方法

文档序号:7863012阅读:329来源:国知局
专利名称:服务器和应用升级方法
技术领域
本发明涉及计算机技术领域,尤其涉及一种服务器和应用升级方法。
背景技术
客户端安装的应用在获取升级信息时,一般会把所有安装应用的版本信息发给服务器,服务器会查询自己的数据库,返回给客户端可以进行升级操作的应用列表;服务器获取应用最新版本基本信息的方法一般是利用第三方服务器提供的全量或者增量接口,定时调用获取三方市场所有应用的全量或者增量信息;以上方案可以准确获取应用的最新版本信息,但是定时调用全量、增量接口的实时性不足;某些应用的新版本发布后,在调用全量/增量接口前,服务器的数据库都不会更新,这意味着客户端不会有更新提示,用户也不能第一时间获取最新版本。·

发明内容
本发明要解决的技术问题是提供一种服务器和应用升级方法,以提高服务器获取应用最新版本的实时性。为解决上述问题,一方面,本发明提供了一种服务器,包括数据库,适于存储各应用的应用信息,所述应用信息包括版本信息;输入接口,适于获取客户端安装的应用的应用信息并发送给比较器;比较器,适于接收所述输入接口所获取应用的应用信息,比较所述应用的版本信息和所述数据库中相应应用的版本信息,并将比较结果发送至分析器;分析器,适于接收所述比较器发送的比较结果,并在所述结果中所述客户端安装的应用的版本高于所述数据库中相应应用的版本时,生成应用更新请求信息并发送给输出接口 ;输出接口,适于接收分析器发来的所述应用更新请求信息,并将所述应用更新请求信息发送给第三方服务器;所述输入接口,还适于接收从第三方服务器返回的所述应用最新版本的应用信息,并发送给所述数据库;所述数据库,还适于根据所述应用最新版本的应用信息来更新相应应用的存储信
肩、O其中,所述服务器还包括待处理队列存储单元,适于存放所述客户端中所有应用版本高于所述数据库中对应的应用版本的应用信息,供所述分析器依次取出对应的应用信息并从生成对应的更新请求信息发送给输出接口。其中,所述应用信息还包括应用的名称信息和/或id信息;所述比较器根据所述应用的名称信息和/或id信息获取所述数据库中存储的相应应用的版本信息。其中,所述输入接口获取客户端安装的应用的应用信息进一步包括所述输入接口获取客户端所有应用的应用信息;或
所述输入接口获取客户端请求升级应用的应用信息。 其中,所述输入接口接收从第三方服务器返回的所述应用最新版本的应用信息进一步包括所述输入接口利用爬虫从第三方服务器获取所述应用的最新版本的应用信息;和/或所述输入接口利用第三方服务器提供的全量或者增量接口,从第三方服务器获取所述应用的最新版本的应用信息。其中,所述分析器还适于在所述客户端安装的应用的应用版本低于所述数据库中相应应用的应用版本时,将对应应用的升级信息推送给客户端。其中,所述服务器还包括应用安装量计数器,适于计算各应用在客户端的安装量并将计算结果发送至频率调整器,所述安装量为预定时间段内第一次访问服务器的各客户端所安装的各应用的数量;频率调整器,适于接收所述应用安装量计数器发送的计算结果并根据所述计算结果中各应用的安装量调整服务器到第三方服务器抓取所述应用信息的频率。其中,所述频率调整器在应用安装量越大时,对该应用的抓取频率越高。另一方面,本发明还提供一种应用升级方法,包括以下步骤获取客户端应用的应用信息,所述应用的信息包括版本信息;比较所获取应用的版本信息和所述数据库中相应应用的版本信息;在所述客户端的应用的应用版本高于所述数据库中相应应用的应用版本时,从第三方服务器获取所述应用的最新版本的应用信息并更新所述数据库。其中,所述获取客户端应用的应用信息具体为获取客户端所有应用的应用信息。其中,所述获取客户端应用的应用信息具体为获取客户端请求升级应用的应用信息。其中,所述应用信息还包括应用的名称信息和/或id信息;所述比较所获取应用的版本信息和所述数据库中相应应用的版本信息时,根据所述应用的名称信息和/或id信息获取所述数据库中存储的相应应用的版本信息。其中,若所述客户端的应用版本低于服务器端对应应用的应用版本,则将对应应用的升级信息推送给客户端,提示客户端升级对应的应用。其中,若所述客户端的应用版本与服务器端对应应用的应用版本相同,则结束步骤。其中,所述在所述客户端的应用的应用版本高于所述数据库中相应应用的应用版本时,从第三方服务器获取所述应用的最新版本的应用信息并更新所述数据库具体为当所述客户端的应用版本高于服务器端的对应应用版本时,先将该应用信息放入待处理队列,服务器端依次取出所述待处理队列中的应用信息,从对应的第三方服务器获取对应应用的最新版本信息并更新服务器端数据库。其中,所述从第三方服务器获取所述应用的最新版本的应用信息具体为利用爬虫从第三方服务器获取所述应用的最新版本的应用信息;和/或利用第三方服务器提供的全量或者增量接口,从第三方服务器获取所述应用的最新版本的应用信息。其中,所述应用升级方法还包括根据应用在客户端的安装量调整到第三方服务器抓取所述应用信息的频率的步骤。其中,所述根据应用在客户端的安装量调整到第三方服务器抓取所述应用信息的频率的步骤具体包括计算各应用在客户端的安装量,所述安装量为预定时间内第一次访问服务器的各客户端所安装的各应用的数量;根据所述安装量调整到第三方服务器抓取所述应用信息的频率。
其中,所述计算应用的安装量的步骤具体包括客户端请求时,查询本时间段的活跃用户列表如果所述客户端的id已经在所述活跃用户列表中,则计算结束;如果所述客户端的id不在所述活跃用户列表中,表明这是该用户在本时间段内的第一次访问,则对于该客户端安装的每一个应用,对应的应用安装量计数都加I ;并且将该客户端的id放入本时间段的活跃用户列表中。其中,所述根据所述安装量调整到第三方服务器抓取所述应用信息的频率的步骤具体为当所述频率调整器在应用安装量越大时,对该应用的抓取频率越高。本发明在一个客户端安装了某个应用的最新版本之后,只要此客户端访问服务器,服务器即可立即获取此应用的最新版本信息并更新数据库,提高了服务器获取应用最新版本信息的实时性。


图I为本发明实施例服务器的结构示意框图;图2为本发明实施例应用升级方法的流程示意图;图3为本发明实施例应用升级方法的具体流程示意图;图4为本发明实施例根据应用在客户端的安装量调整应用信息抓取频率步骤的流程图;图5为本发明实施例计算应用的安装量的步骤的流程图;图6为本发明实施例软件升级系统的结构示意框图。
具体实施例方式下面结合附图及实施例对本发明进行详细说明如下。实施例一如图I所示,本实施例记载了一种服务器100,包括数据库110,适于存储各应用的应用信息,所述应用信息包括版本信息;输入接口 120,适于获取客户端安装的应用的应用信息并发送给比较器130 ;比较器130,适于接收所述输入接口 120所获取应用的应用信息,比较所述应用的版本信息和所述数据库110中相应应用的版本信息,并将比较结果发送至分析器140 ;分析器140,适于接收所述比较器130发送的比较结果,并在所述结果中所述客户端安装的应用的版本高于所述数据库110中相应应用的版本时,生成应用更新请求信息并发送给输出接口 150 ;输出接口 150,适于接收分析器140发来的所述应用更新请求信息,并将所述应用更新请求信息发送给第三方服务器;所述输入接口 120,还适于接收从第三方服务器返回的所述应用最新版本的应用信息,并发送给所述数据库110 ;所述数据库110,还适于根据所述应用最新版本的应用信息来更新相应应用的存储信息。在本实施例中,所述服务器100还包括待处理队列存储单元,适于存放所述客户端中所有应用版本高于所述数据库110中对应的应用版本的应用信息,供所述分析器140依次取出对应的应用信息并生成对应的更新请求信息发送给输出接口 150。在本实施例中,所述应用信息还包括应用的名称信息和/或id信息;所述比较器 130根据所述应用的名称信息和/或id信息获取所述数据库110中存储的相应应用的版本信息。在本发明的其它实施例中,所述应用信息还可以包括其它信息。在本实施例中,所述输入接口 120获取访问服务器100的客户端的所有应用的应用信息。在本发明的其它实施例中,所述输入接口 120获取客户端请求升级应用的应用信肩、O在本实施例中,所述输入接口 120利用爬虫从第三方服务器获取所述应用的最新版本的应用信息。在本发明的其它实施例中,所述输入接口 120利用第三方服务器提供的全量或者增量接口,从第三方服务器获取所述应用的最新版本的应用信息;或在本发明的另一些实施例中,服务器100还可通过其他方式获取所述应用的最新版本的应用信息。在本实施例中,所述分析器140还适于在所述客户端的应用的应用版本低于所述数据库110中相应应用的应用版本时,将对应应用的升级信息推送给客户端。实施例二在本实施例中,除了实施例一记载的内容外,所述服务器还包括应用安装量计数器,适于计算各应用在客户端的安装量并将计算结果发送至频率调整器,所述安装量为预定时间段内第一次访问服务器的各客户端所安装的各应用的数量;频率调整器,适于适于接收所述应用安装量计数器发送的计算结果并根据所述计算结果中各应用的安装量调整服务器到第三方服务器抓取所述应用信息的频率。具体为所述频率调整器在应用安装量越大时,对该应用的抓取频率越高。例如对安装量高的热门应用,爬虫的频率为每小时都去爬取,保证这些热门应用更新信息能及时更新到数据库。本实施例的除了通过实施例一记载的服务器获取用户所安装的应用及其版本信息,并且在客户端安装的应用版本比服务器数据库中存储的应用版本还高时,立即去第三方服务器获取最新版本信息并更新数据库外,还按照客户端应用的安装量对应用进行排序,对安装量高的热门应用,爬虫的频率更高地去爬取,保证这些热门应用更新信息能及时更新到数据库,从上述两方面解决了服务器数据库中存储的应用最新版本信息更新不及时的问题。实施例三如图2所示,本实施例记载了一种利用实施例一记载的服务器进行应用升级的方法,包括以下步骤S200 :获取客户端应用的应用信息,所述应用的信息包括版本信息;S202 比较所获取应用的版本信息和所述数据库中相应应用的版本信息;S204 :在所述客户端的应用的应用版本高于所述数据库中相应应用的应用版本时,从第三方服务器获取所述应用的最新版本的应用信息并更新所述数据库。在本实施例中,所述步骤S200中获取客户端应用的应用信息具体为获取访问服务器端的客户端所有应用的应用信息。在本发明的其它实施例中,所述步骤S200中获取客户端应用的应用信息具体为获取客户端请求升级应用的应用信息。在本实施例中,所述应用信息还包括应用的名称信息和/或id信息;所述步骤 S202中根据所述应用的名称信息和/或id信息获取所述数据库中存储的相应应用的版本信息。在本实施例中,所述步骤S202中,若所述客户端的应用版本低于服务器端对应应用的应用版本,则将对应应用的升级信息推送给客户端,提示客户端升级对应的应用;若所述客户端的应用版本与服务器端对应应用的应用版本相同,则结束步骤。在本实施例中,所述步骤S204中,当所述客户端的应用版本高于服务器端的对应应用版本时,先将该应用信息放入待处理队列,服务器端依次取出所述待处理队列中的应用信息,从对应的第三方服务器获取对应应用的最新版本信息并更新服务器端数据库。在本实施例中,所述步骤S204中从第三方服务器获取所述应用的最新版本的应用信息具体为利用爬虫从第三方服务器获取所述应用的最新版本的应用信息。在本发明的其它实施例中,所述步骤S204中从第三方服务器获取所述应用的最新版本的应用信息具体为利用第三方服务器提供的全量或者增量接口,从第三方服务器获取所述应用的最新版本的应用信息。下面以实例来说明本发明如图3所示,服务器从用户的请求中获取到此用户所有安装应用的基本信息,包含应用的名称、id、版本信息等等;根据应用的名称和id,服务器查询自己的数据库,获取数据库中这些应用的版本
信息;对这些应用顺序处理,对每一个应用如果客户端应用的版本低,则把此服务器端此应用的基本信息放入返回队列,这个队列返回给客户端,提示某些应用可以升级;如果客户端应用的版本高,则把此应用放入一个待处理队列,后台会有一个或者多个进程不断从此队列中取出应用,到第三方服务器获取最新版本信息,并更新服务器数据库;如果客户端和服务器端应用的版本一致,则不作任何处理;结束后返回客户端。上述流程中,在返回客户端前,还可以调用后台程序来记录应用安装量,用于进行实施例四中记载的根据应用在客户端的安装量调整到第三方服务器抓取所述应用信息的频率的步骤。例如客户端A安装了 id信息分别为4、5和6的三个应用,每个应用的应用版本分别是I. O版本、I. 2版本和2. 4版本;在服务器端的数据库中与id信息分别为4、5和6的三个应用的应用版本分别为I. I版本、I. 2版本和2. 3版本。当客户端A访问服务器查询应用升级信息时对于id信息为4的应用,服务器端数据库中的应用版本高于客户端A,则会将该应用的应用信息加入升级提示队列,服务器给客户端A的响应会告诉客户端Aid信息为4的应用可以升级到I. I版本;对于id信息为5的应用,服务器端数据库中的应用版本与客户端A相同,服务器对该请求不做处理,升级步骤结束;对于id信息为6的应用,服务器端数据库中的应用版本低于客户端A,服务器将该应用的应用信息放入待处理队列;待处理队列中有id信息为6的应用,服务器后台程序获 取后会立即到第三方服务器查询id信息为6的应用的最新版本信息,发现id信息为6的应用确实已经更新到2. 4版本了,则更新服务器数据库,把id信息为6的应用的版本信息改为2. 4。实施例四在本实施例中,所述应用升级方法除了实施例三记载的步骤外,还包括根据应用在客户端的安装量调整到第三方服务器抓取所述应用信息的频率的步骤。如图4所示,具体为S400计算各应用在客户端的安装量,所述安装量为预定时间内第一次访问服务器的各客户端所安装的各应用的数量;S402根据所述安装量调整到第三方服务器抓取所述应用信息的频率。如图5所示,所述步骤S400中,所述计算应用的安装量的步骤具体包括客户端请求时,查询本时间段(在本实施例中时间段为一周的时间)的活跃用户列表,通过查看用户是否在活跃用户列表中来判定用户是否是本周第一次访问服务器如果所述客户端的id已经在所述活跃用户列表中,表明此用户不是第一次访问,用户安装的应用安装量计数已经加I 了,所以不用进行任何处理,计算结束;如果所述客户端的id不在所述活跃用户列表中,表明这是该用户在本时间段内的第一次访问,则对于该客户端安装的每一个应用,对应的应用安装量计数都加I ;并且将该客户端的id放入本时间段的活跃用户列表中。所述步骤S402具体为当所述频率调整器在应用安装量越大时,对该应用的抓取频率越高。这样一来,就能根据用户安装应用的数量,得到这一周的热门应用排序,对于排名高的应用,例如前1000,可以调整爬虫爬取频率,例如半小时,保证热门应用的最新版信息能够在服务器端及时入库。实施例五如图6所示,本实施例记载了一种应用升级系统,包括客户端600、第三方服务器602、以及实施例一或实施例二记载的服务器604,所述客户端600,适于向所述服务器604的输入接口发送客户端600安装的应用的
应用信息;
所述第三方服务器602,适于接收所述服务器604的输出接口发送的应用更新请求信息,以及向所述服务器604的输入接口返回应用最新版本的应用信息。本发明基于客户端的请求,获取客户端所安装应用的应用信息,如果客户端安装的应用版本比服务器数据库中存储的应用版本还高,则立即去第三方服务器获取最新版本信息并更新数据库。因此,一旦一个客户端安装了某个应用的最新版本之后,只要此客户端访问服务器,服务器即可立即获取此应用的最新版本信息并更新数据库,提高了服务器获取应用最新版本信息的实时性。应当注意的是,在本发明的控制器的各个部件中,根据其要实现的功能而对其中的部件进行了逻辑划分,但是,本发明不受限于此,可以根据需要对各个部件进行重新划分或者组合,例如,可以将一些部件组合为单个部件,或者可以将一些部件进一步分解为更多的子部件。本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的应用模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的控制器中的一些或者全部·部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
权利要求
1.一种服务器,其特征在于,包括 数据库,适于存储各应用的应用信息,所述应用信息包括版本信息; 输入接口,适于获取客户端安装的应用的应用信息并发送给比较器; 比较器,适于接收所述输入接口所获取应用的应用信息,比较所述应用的版本信息和所述数据库中相应应用的版本信息,并将比较结果发送至分析器; 分析器,适于接收所述比较器发送的比较结果,并在所述比较结果中所述客户端安装的应用的版本高于所述数据库中相应应用的版本时,生成应用更新请求信息并发送给输出接口 ; 输出接口,适于接收分析器发来的所述应用更新请求信息,并将所述应用更新请求信息发送给第三方服务器; 所述输入接口,还适于接收从第三方服务器返回的所述应用最新版本的应用信息,并发送给所述数据库; 所述数据库,还适于根据所述应用最新版本的应用信息来更新相应应用的存储信息。
2.如权利要求I所述的服务器,其特征在于,所述服务器还包括待处理队列存储单元,适于存放所述客户端中所有应用版本高于所述数据库中对应的应用版本的应用信息,供所述分析器依次取出对应的应用信息并从生成对应的更新请求信息发送给输出接口。
3.如权利要求1-2中任一项所述的服务器,其特征在于,所述应用信息还包括应用的名称信息和/或id信息;所述比较器根据所述应用的名称信息和/或id信息获取所述数据库中存储的相应应用的版本信息。
4.如权利要求1-3中任一项所述的服务器,其特征在于,所述输入接口获取客户端安装的应用的应用信息进一步包括 所述输入接口获取客户端所有应用的应用信息;或 所述输入接口获取客户端请求升级应用的应用信息。
5.如权利要求1-4中任一项所述的服务器,其特征在于,所述输入接口接收从第三方服务器返回的所述应用最新版本的应用信息进一步包括 所述输入接口利用爬虫从第三方服务器获取所述应用的最新版本的应用信息;和/或所述输入接口利用第三方服务器提供的全量或者增量接口,从第三方服务器获取所述应用的最新版本的应用信息。
6.如权利要求1-5中任一项所述的服务器,其特征在于,所述分析器还适于在所述客户端安装的应用的应用版本低于所述数据库中相应应用的应用版本时,将对应应用的升级信息推送给客户端。
7.如权利要求1-6中任一项所述的服务器,其特征在于,所述服务器还包括 应用安装量计数器,适于计算各应用在客户端的安装量并将计算结果发送至频率调整器,所述安装量为预定时间段内第一次访问服务器的各客户端所安装的各应用的数量;频率调整器,适于接收所述应用安装量计数器发送的计算结果并根据所述计算结果中各应用的安装量调整服务器到第三方服务器抓取所述应用信息的频率。
8.如权利要求1-7中任一项所述的服务器,其特征在于,所述频率调整器在应用安装量越大时,对该应用的抓取频率越高。
9.一种应用升级方法,其特征在于,包括以下步骤获取客户端应用的应用信息,所述应用的信息包括版本信息; 比较所获取应用的版本信息和所述数据库中相应应用的版本信息; 在所述客户端的应用的应用版本高于所述数据库中相应应用的应用版本时,从第三方服务器获取所述应用的最新版本的应用信息并更新所述数据库。
10.如权利要求9所述的应用升级方法,其特征在于,所述获取客户端应用的应用信息具体为获取客户端所有应用的应用信息。
11.如权利要求9-10中任一项所述的应用升级方法,其特征在于,所述获取客户端应用的应用信息具体为获取客户端请求升级应用的应用信息。
12.如权利要求9-11中任一项所述的应用升级方法,其特征在于,所述应用信息还包括应用的名称信息和/或id信息;所述比较所获取应用的版本信息和所述数据库中相应应用的版本信息时,根据所述应用的名称信息和/或id信息获取所述数据库中存储的相应应用的版本信息。
13.如权利要求9-12中任一项所述的应用升级方法,其特征在于,若所述客户端的应用版本低于服务器端对应应用的应用版本,则将对应应用的升级信息推送给客户端,提示客户端升级对应的应用。
14.如权利要求9-13中任一项所述的应用升级方法,其特征在于,若所述客户端的应用版本与服务器端对应应用的应用版本相同,则结束步骤。
15.如权利要求9-14中任一项所述的应用升级方法,其特征在于,所述在所述客户端的应用的应用版本高于所述数据库中相应应用的应用版本时,从第三方服务器获取所述应用的最新版本的应用信息并更新所述数据库具体为当所述客户端的应用版本高于服务器端的对应应用版本时,先将该应用信息放入待处理队列,服务器端依次取出所述待处理队列中的应用信息,从对应的第三方服务器获取对应应用的最新版本信息并更新服务器端数据库。
16.如权利要求9-15中任一项所述的应用升级方法,其特征在于,所述从第三方服务器获取所述应用的最新版本的应用信息具体为 利用爬虫从第三方服务器获取所述应用的最新版本的应用信息;和/或 利用第三方服务器提供的全量或者增量接口,从第三方服务器获取所述应用的最新版本的应用信息。
17.如权利要求9-16中任一项所述的应用升级方法,其特征在于,所述应用升级方法还包括根据应用在客户端的安装量调整到第三方服务器抓取所述应用信息的频率的步骤。
18.如权利要求9-17中任一项所述的应用升级方法,其特征在于,所述根据应用在客户端的安装量调整到第三方服务器抓取所述应用信息的频率的步骤具体包括 计算各应用在客户端的安装量,所述安装量为预定时间内第一次访问服务器的各客户端所安装的各应用的数量; 根据所述安装量调整到第三方服务器抓取所述应用信息的频率。
19.如权利要求9-18中任一项所述的应用升级方法,其特征在于,所述计算应用的安装量的步骤具体包括 客户端请求时,查询本时间段的活跃用户列表 如果所述客户端的id已经在所述活跃用户列表中,则计算结束;如果所述客户端的id不在所述活跃用户列表中,表明这是该用户在本时间段内的第一次访问,则对于该客户端安装的每一个应用,对应的应用安装量计数都加I;并且将该客户端的id放入本时间段的活跃用户列表中。
20.如权利要求9-19中任一项所述的应用升级方法,其特征在于,所述根据所述安装量调整到第三方服务器抓取所述应用信息的频率的步骤具体为当所述频率调整器在应用安装量越大时,对该应用的抓取频率越高。
全文摘要
本发明公开了一种服务器,包括数据库,适于存储各应用的应用信息;输入接口,适于获取客户端安装应用的应用信息并发送给比较器;比较器,适于比较客户端安装应用和数据库中相应应用的版本信息,并将比较结果发送至分析器;分析器,适于在客户端安装的应用的版本高于数据库中相应应用的版本时,生成应用更新请求信息并发送给输出接口;输出接口,适于将应用更新请求信息发送给第三方服务器;输入接口,还适于接收从第三方服务器返回的应用最新版本的应用信息,并发送给数据库;数据库,还适于根据应用最新版本的应用信息来更新相应应用的存储信息。本发明还公开了一种应用升级方法。本发明提高服务器获取应用最新版本的实时性。
文档编号H04L29/08GK102882978SQ20121039354
公开日2013年1月16日 申请日期2012年10月16日 优先权日2012年10月16日
发明者邱磊 申请人:北京奇虎科技有限公司, 奇智软件(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1