#!/usr/bin/perl -w use strict; use FileHandle; use Getopt::Long; my @check_files = ( "cool.y", "cool.cup" ); my $grading_dir = "./grading"; my $grading_cmd = "./143publicgrading PA3"; my $just_unpack; my $just_run; my $verbose; my $skip_check; sub usage { print "Usage: $0 [options]\n"; print " Options: -dir - specifies where to unpack/run\n"; print " grading scripts [default = \"$grading_dir\"]\n"; print " -cmd - specifies what command to run for grading\n"; print " [default = \"$grading_cmd\"]\n"; print " -x - unpack script and test cases, but do not run\n"; print " -r - don't unpack, just run existing script\n"; print " -v - enable verbose output\n"; return "\n"; } die usage() unless(GetOptions("dir=s" => \$grading_dir, "cmd=s" => \$grading_cmd, "x" => \$just_unpack, "r" => \$just_run, "v" => \$verbose, "skip" => \$skip_check, "check=s" => \@check_files, "help" => sub { usage(); exit 0; })); unless($skip_check) { print "Checking that you appear to be in the assignment directory...\n" if($verbose); my(@found) = grep({ -r $_ } @check_files); unless(@found) { die "$0: could not find any of the following files - are you running\n this from the assignment directory?\n " . join("\n ", @check_files) . "\n"; } } print "Creating grading directory '$grading_dir' if necessary...\n" if($verbose); unless((-d $grading_dir) or mkdir($grading_dir)) { die "$0: '$grading_dir' doesn't appear to be a directory and can't be created: $!"; } print "Changing to grading directory '$grading_dir'...\n" if($verbose); unless(chdir($grading_dir)) { die "$0: can't change directory to '$grading_dir'...\n"; } unless($just_run) { print "Unpacking grading script and test cases...\n" if($verbose); my $tar_options = $verbose ? "-zxvf" : "-zxf"; my $fh = new FileHandle("| tar $tar_options -") || die "$0: couldn't run uudecode or tar: $!\n"; # skip the first line my $dummy = ; die unless($dummy =~ /^begin /); binmode($fh); while(defined(my $line = )) { $line =~ s/\s+$//; last if($line =~ /^end$/); my $unpacked = unpack('u', $line); next unless(defined($unpacked)); print $fh $unpacked; } $fh->close; } unless($just_unpack) { print "Running command: $grading_cmd\n" if($verbose); system($grading_cmd); } __DATA__ begin 644 /dev/stdout M'XL(`*ZUKT\``^U]:W?;-M)POUJ_`I5]&BFQ+M35CN)N<^WZ.6V34V??W9XF MCQ]*HFPV$JF25&S'Z_[V%P.`)`""%]L2';N8W<8B"0RN,Q@,!C/-UC<;AS:& M8;\/?XUAO\W_#>$;`[_I#KN=_K#S3=OHM-O=;U!_\U7[YIN5'Y@>0M],W,72 MGEN>GY(N[_L]A6;+L?S`FLZMH!G@7TUW%:R[#!C@0;N=-O[=]L"0QK_?&QK? MH/:Z*Z*"O_GX;^]7CI>>>^*9BPI"^`FAX\G<]'W\`Z'GY-^WXS^L24!^5L79 M4B4O:^3?[3WRYWAA!:?NE/Q&:,;^;G?8C^.9ZRW,.7M"Z#SZ=>@$[#=77H06 MY\2%9F;#:;O1SV.;>X]0_.$I.G;J&L0VHM M$O50U@2A<>*-LC:*^J36**-.BEJEU`NAB>)=2MV4M=>GN@?"T1$0_J#)D-2&D"+F8Y7_DIY6P/4SX(R/V=\3/V4\D'Y6O$R\4IZ4:_<]8*E8:W0;)V=8K%F8[(?0([\U^YT M^I+\UQL86OXK!:KQ\%=WT=QV++3W%/D73F">(\OS7`^9`<+_.A;NII_>OGU7 M46393\_R[NW;GRHO2>>9@>TZZ-2<8PD235<6"EPTM\Z1Z4S1TO1\B^;V-8\I M#YHM:[$,+C`1!/9D:OM+,YB_$7S/I$\BE M_X%,__VAT=;T7P90^G^/!YVR`-=]"@\C_'ML>K7Z4\H.+O&')GFA^<"#@F:+ MS("Q.;6=4\NS`W_]6X$\^C>&78G^AVV\)=#T7P)4E<,?RO5&NES_]L7_O'[Y M_O`5.D`GKCL=7UA:RK^'$)[_C.?NY--&5O\"Z_]0WO_WN_V!IO\R();_*UC\ M?WKH!)>5+?S_K4MC=-D9=4=7^'_P>'G9([_AZ0I$`/S?75=>PZVAV:('O=]$7BJK.OPV5"F&F6?O-68,HY(QB##13&8*?6?!E:=84&6;(]6&R%%-NJQ+\B.Q7! M[D651S"62ICY_@\&6O]7"E13AS\\`^BDGP'`GIZ<`+QPO4^5-:'2QPAE0K.%5_[% M?/*=J5"S/M0;<>QSC`] M/CMZ_^KPE^_K3`5GSU"-?K+^1-4/3K6.OOL.U:;6#!/XM+;CSJ=U^@I^0B)( M7*^3S!3%%;+FF'PO*UM+#TO#J`HIJB/ZC?Q+_B'Y#TAV+&QH,M\,,/M?+/S# M!LGR?X+@!FIF8>NMH[KI+5*N^ M=4],-';QOY@3+%UWKG<&]PH8_>>*::=P8I<(^KEK8(;D8S[/PU3=[$9.<_V]@S>(F@%I4G^0P.C?<1USL2DO M`+GK?R^A_VNWM?U?*5"5A[_`U9]'EX_T(=T#`<'^M[,9!I!+_WW9_]^@K>7_ M"#0;&'V;Y\X)U;@@W+A+O1_AN#_T2#ZO[Z^_U\*5!7# M'W*`80%SG>>:$=QK:+86JWE@+^<6$02M#5S_S[?_,V3[G\&PK=?_4J"J&OZ0 M`0P*7?^WS@/+F?J53%1&OQ`N>X'S+RPG\#5?*07P^A^X]D;=_^70?V_8%?Q_ M4_V_OO];#FP;;?$&$#R+/J`[AXDCP&C.B`=_*@_0DXX='K@9X448^:QN\*7,,5L;QR9K!7=RQ_N3OW1C\U1R5OUBAW+3;.R(6GZ\=A6J[ M>LT[/%*MQ2M![O;Y/ M966[53ZBNX7Q=63?TZK>AG3M9%L5/:Y.F>T[6]GO>:[)U:6D]C[N_UZR_V_F M\#JE-]2^NGO7PYOT!*X>#TAKJ'I`.29IJ?-\FJ>,3+[7];32,L8'CU!?-4(W M]UB>VD=I7M55'M5S\*L\MZ>-&*3OJ/LE9=32<^1[HT\=NR(.Z=-+S1Q!/(8# M]1C>SBU]1L^M.UZ`XL MP/-@+WT>%*I$H9F:TR/PN6FS8J\>0%YTX)SD-R9OEE5C+^5Y?S[S.Z>:\F<+K36Y[ MI_+D8W?".%C;W30#?#OZ%2OQ!-W>=B_2!XH:O2[GN4?4Z'7YU4=%,'9V:Q,H MY&G5OF9O2;5-<%]>-ZC*W(O98T*=UQ7\!LGJO*[(6-7TS0\,JHDK1GY M>%)Z6VB#2GEJY"A/Q4Y2ZO*Z(N]0Z/*Z,G=)8[:V]"9=59-$J6)1\C[IFCH\ MN65J+6NG@)95[L8415XWH8!2*?(2J;)6+[E+LW4N*M1JWI_%V5M)FJPE.FSI/B5,.2KP5)*RI=)E(+W;=0W:G[)DO!JU0? M9A>B&*Q,_5U/+?)EZ.]2]=2JZASE76JN(KNJM*$MII?(*CI[SY*NT%B#TBZ]'_-4QJG*Q`*% MINWU`&U76;NHMJ6K.E17+>15Y5\W4:6'FRMZKKL/B^BA,Y4+1:L M1*8FO(#.+A/!-71V.7C^[CJ[O&XNIHLN1Q7]M]/;#9@;#D%O9\;&>/W(E;:D MMXL]7Z=9X@U"X4+2V_4YVS11;]<7K+&4Y">F22,M/[^S$)I;SDD@8A<)HI[= MMXD*KT%+R/?-=>S]!K$@EU`0]GGI(:$@[$OV7RE,3TZ7SM1\Z4WJU/978S^0 MC[MDEJ0H5[4.RAN6=*U+,7RR7)R*3V21:3HUN9/5"KK&CZPL590*+ZZ5 M`J\J:9[4HLZ3)Z$DNQ`@9RE4L-<0U'*'2MK(U@2I.R!-3E;M=6^FC)1K>AON MH";H`5]9Q5E&7Q3U%6<9_83-:08]7B23RJE,>BJ,]UIT6G@* M*`8B[>S@R2U-N>5)D@#\(3P=2L2P/13)('6R#65R MN?6`*QF"/-&*4SU4L M2Y5RWVA\G"7>I]0]T7*,J#&A!)1VXKD`3ZS MFJ=\RLI6Z&`Q0ZU?Y.PDJ_#L(P,CW19R#6>+Z7V9JU>_78=F:M$+]&A\%3D) MZ1KSS#H7.$G(RE_L!"%M5@,4TH^G2,4Q9)T7W+[^MS]DS:Y"WOE9^A%]P?+3 MCTL*9$_+O*$#!^@ME?5()JM-8;1J*Y1L1IMFN;(Y"YOT(K,F1MJDN&?G0"!. M"BHEE5&TT`TW$W]\,%Y_I&X/OA(:)TF+3/'7R(ATG[N>W- M[3(1Q1J.=_C:7ML(/.H"Q1G//B_DRF*F^%4YX45)($T>E_'%-JA/ M_PK5("$`I+0'S\S$GKBVF187.4S<[Q9HORC'W^(@"K;H*M3R$5QZTA(T6;?36^5,W-Q%P6BK MKP;QHXL3W7QI,-HI%X2,=NKBP'^ZZ>H@X5C#\B!4.+D^9"\/1IM;'T1-B6.= M\X^BD@1GE!CO9WLJ,7XQR:WX8!*7XAY1@>4H;4P*,%$Q409?DQ.6RMB*%RX- M;V;AA4@^?V6X\RZ3.H2I%(1 MW;LU:%U1D/Z^P.(_;B[XTS?Y_E\[B?BOO79;QW\L!>+X3S,:[/'RLM)HH,_F MW)ZR2-`&C?5HD`"/(_$E?>C0APY)P9(!%@@7J<0$?V),)%>(_HH$E;KK;OG; M0+-ESQQW%GN`-=9?1G[\%SG^8[_=U?$?2X$J-_RAK^9N1N2'D8[\\*"@V<+S M/[`GH9CON*9WLF8G\'GTW^\GXC\/NSK^0REP@_BOJ1.FLB:XY6^KP/!WE=@\1\I8^4B>J^SC/SX MSXGX;]V!WO^7`F+\5UBG)NY9S20$CQ>PH]<_O3F&8$\L&G2\/F)ZUS1__X'$ M?YQ99K#R-A+["2`W_E._FXC_/-3R?RE0E8>_0/A'/EX3EN134?2R]0BI^8J% MG;K0BH@U0+,5;H_PRC^W,?FO?R.0+__+^_\!A(37]%\"%)'_=XG\O_N%[@+H M9OL2IVR2%+L7NU_J>@-P3X'L__&`6]/-Q8#+H7\#D[V\_G=U_,=RX`;Z/V'" M%-;Y<7JS]2C]."5BI/&3_$C':C[)C31O2J0PQ.!->-3F2`(&V<:BFYU=9>/% M535Q75`H2^']6+372=Q$VRYJIR,;+J7?E$M@W(3K8[%9CG4FX7L33:UK(;+] MSZZ=]'M:.BC$NG-U0V-UNX9[$@#ADWI0.^OOU'O]T= M:OY?!B3U/R`"@J;W60/M[8,<"#R7J('A-TM!-42[:$S_3)Y2R]WZ4V#+*%(6 MX;F%3*8M8IE!9JPCJDMFJ09B"BU)E@C-EK588N*G(L!F9,#<_5\_H?_M='J: M_LN`:F+X0RU,.UT+\_KM&ZU\>1C`Z)_*V&-W>G$'^I]V7S[_'1B&UO^6`CGZ M'W;HJ]4[#Q6H_0<?VGS-X,:!.2K?_:@\3\G^W MI^7_4J"8_(\NS]$!JG71,]2KH]&5ION'`LT6]0NUL)Q-F'X0R*7_P8"C?X/H M_WO:_K,44-`_4_53\H^M/>!`H*M7_`<&3/\GWNE9LQ(@?_\OG_\-^\.NIO\R MH)HV_$4N@S;U9=#[#DK]WYK+R)?_!XG]_T"?_Y<"L?\'O/C#P3PS]8JW_O%M M+[+O[^J=_T."C/O?:ROC^OO_H6%H^\]2H*#\#[>^?H!4Q.9;FWL_&"#WOT+B M[VQ&`Y"__T_8?W4>?-N+W]Z(E6 M&'YET&SA(2#'_C8>D\]V<+%^/G!]^[^AT=;V/Z5`53G\!93_/VG[OX<`S=9B M-0_LY=RB5P#H6)6K_^MTD_0_T.=_I4`Q^Y\^N9TWMK_$&D'Z9K7`;VCNR_/1 MQ>@+L0W"'URW%BL0R"N59J'ZJS5Q/UL>YAPSSUTP3E'5FXO2@-C_Q-R_$=@+ M:\WD7V#]E^U_!L.VEO]+`?'^+[O^B_C;O@O7[=1,1K+XK!A;_P7'!)?\=^7\S!D;"_Y/>_Y<#57GX"XC^A[^\/W[Y M]I>C]^@`]?4NX%Y#L^59P63_`VOZ MF*WG??2$^#328OG#@V;+^G-ESOVD#FA]9>33?V+]'P[U^E\*%-O_GQ]<''S1 MY/\`(;S_3K?[T<^D']0^]Y#P.,I'[%:[;!6RR\BE[TJ7IJ)#TS1WH[EHNOEH M"OH)'61TUB"GM0.QFLD4B30I;EY[TIMU^T.]#T&T[C$T6XL+HI_S-E<&,?'L M]S/\O\G[OVY?W_\J![:_;8UMIS7Q3U%C5FDV6W/KW/+0SF/T7X2?Z-3`CYKL M'B:$\M_XUB[[$&:,4-(T9?<&;1N[W1)F#YIG&)0[$KPA_>X+Z6B=]:V#^'Z@2:$,< M(/?\UTC$_^KH^-_E`$__C,)'::R`,8-S($A]&>1A0,+_TP9N@.31?V_0E?6_ M@[[V_UX*W"#^CS1AOK:HW[1ZD;`PX\+$\)%51%U&_.%OIH"0[3_OQ/]KPOZS M/]#^W\J!3=E_-K"4W\#2?4/;?W[5`/Z?@`-;F&MNYO9W`?KO).Y_]W3\EW*@ MH/]7>X;``VR7.H*Z-$:H,R*>H497S!VT29U"ZZW`_0*\_@>NO3'5'X$<^N^+ MY[^P_G<'74W_I4#M,2S/[T\MQ#0!G4.$]P.?[:GE0W1OZ\3R&H';\.F-+3#G MIC_A)?M>F;C.9]PS8`'NX>VC[5A^$R-UT8HZC!6?!=V M!U`U=X9`2(<6[(*INF\OEG-TALNP4`T"T>$/]2;=2]1,[V0%.YAZL_*X7JE4 M:#=,.C;^]R5I3>#C4HT&Q,4V)P&N,.N!P,6=$/8,;N7SL8O3QEL)\)B'F\)2 MVSYRW`!5VU7\%O?!R2FJ[E>AS+B[J=D-*;T&Q6%IBEG3A-XX*EL8*_ETP%!A M)MPFC%?X9+!/1O)3AWWJT$]<;<,479:BFYJBQU+T4E/TJWR,`%6*`4LQ2$TQ M9"F&J2GV6(J]U!3[+,6^F.(2F3!:M?H(M4?H"J%&@PQ6FXP3F7`POC[>#/FS M"_()3ZG)J37Y9'GQCM+.^#]-!>(NG5)V9P+(`95-B,2"B8J'FDP\6N_.I&;' MVK;P;B09/ANWIDW;`@,?#2N\-]A[0WK?8>\[TGNV>,-`"^][['U/>M]G[_O2 M^P%[/Y#>#]G[H?1^C[W?D][OL_?[X7MN>*I5?GRJU'[T\ M/(S(UY')'3@ET9BS)!5<,9:=UJV-$QW9)PY^`F:Y-2O1S,1]4_,5[(BC M.+\YMYR3X+16CVC*Q=G`S/%S;@^!>L3@%N`5ZC/-#`6/.+)M_[M)*J!:$&!V1X'L1' M9)B).5M\(R^%)P"2Z8\X"S=XME/9DA+:(N[*%DE`[HOA;\\P(K@TAE]O7<(_ M9)1HK7H-E@TM39N/.D&;9,[RW7#6#P@P5S.PC=@(QM M9PH+R1H/@W+M?_M]4?_3:?=ZVOZK%+C!^4_6A"E\&!1AONUIT!?VBS*JQ&D0 MKFS$1\ZC7X?CTF;_GX=(/A_[GXU\=_; M'0'R@F%V'(,(YDJ2(U!^\!++^UK"BUB68E[64)AU[_$ MEIF]<[OLW=ME[]TN>_^:_:R%P[4`C?^+E^P-'@'G\O^V;/_=T_%_2P)Z#/FS M:3OAB:R/#M\R?=\"OR8Q`8Y>__3F&#Q_1ZIGN+?QDLX<4/.1`U;V7&^">J!F M["(CUBO#X5S3LV9SO(P<_Z=6CW[_1DX.XF_M&M/_$?TB%D'8)KE6/:A_<*KL M(U$Z"A]K\<>97=FJARI#T!K21H;53;:3,WQ'Y#8+>:`J46B*25_1FRM,,1IB MPQUR28L%`QF3J:4O\.\Q^PVQD_#/JTB)"7^7N-J!&&\--,:0KUW9BMH.BH;K8\I'YUHB MN/>0$?^E+/U_NY.0_X?#H9;_2X%JZO`76<6O\"J>BR`K(-R5/DB\6P#_/V=8 M$(M\O][!_7^C/Y3W_P-M_U4.5*7AOYX,;FKJO>?0;!$)D#)O%\;W9.UL('?_ MWY/I?]@Q]/E/*;`]%,[_A^+Y/[G5GS``4,\8X?2_KSBNG[AGB4/ZF>LMS/C` MW518:$9G3V'F\*18MCV$HP%].'Q-:+9FMN<'9$@)C[;6'P,F__Y_PO]S3]O_ ME0-T___&=>-C4=.?SO[X9/IS_&?Z:6[.1NP`]07NJ$OB^'UT%;_[@B['U$_` MY8LK_.&N6Z3A.D#T?YL,_O+-C?Q_=(;:_WLI0*GX1]>=CB\L=A7]U)HO:8`' M^:O_[V$_8^AZ;\4B/W_ M;LV8%(\NP:,O^-Z@CBY@=B"8'J$WF\_FW)Y&BW^<;<0\`=]UFS04AV;+G$XW MZ_X_W_YO*/O_[&'0]%\&Q/M_S`&B%?^2"/I/J9B/)?XG1/(?A\8`^-U84_J# M`-G_;V`OK'6'@T]0?^_5T3_GS9C-N@)?*`X3P#' MQ"&:\/)9^H&"Z!\B+?U8<0"1FGARG<131>*X>[EH:\>+59R+#XC'OY?CV8G? MDF'HE&X:3.&Y8$`[):9Q/J8"0?D4J"?9&'*BXB403M-S_DV/C)JM\/*'Z9U$ M>\#U&H'D\?^.D8C_K>,_E00WN/^MFC!W=_4[]2Q9Y>TG-?'%=1)_421."481 M]E7,GKC+X0GVQ,>J4+"VN-%A5^=B/,_"EYGSXL8YOV3E#+VZ_4W9[5<'"OU_ M^?Y_!K+^;V!TM/U/*5!-#']H`6@4L@"$'-H(\/Y"LV7]N3+G?M($H+3]O\+^ M=SC0^_]RH)HV_"$;Z&98[Q]HZ_W[#A#_QW'!O<2FK/\+W/_IRO[_^MVVOO]; M"E2%X2]"]'!S][J9WAQJ1O%U@GC_=R/DGTO__4'"_L?HZ_A_I<#-_3__C?T] M7T?-\I4K.@3_/[VOQ_]O5^__2X%J8OB+^/_=U8+_`P')_N/2*L(4J%9I+OERON+B M\O&?U&?-_'&X^K1:P""'7!#/P!.!'Z3LUXRZ(&5=XR'\?1-8-*P5FBW;_^S: M4]X'P+K+R-?_)/9_^+?F_V6`&/\=*!ZN@#`O3WO[Q"4NYN%/^8CP.`6]'L9% M@VLI?+!N(*?0=LK*@V2)&_G3-'KO3=9_] M`.3O_Q+^'X>&]O]6"E15PU]$#:P]-ST(:+8FIF]M=E+GT/\PZ?^EJ^,_E00+ M\]R?N)X%\9O;E8JPN1LA8X0@P#H"'1$A\S,[.$6AQS>X%.)72`SAI6=-K*GE M3*PX)Q=<.(X6XP-[(-=-XRP5+(+8)\X)QA;)H!0#>4_BSM/8[B1R:Q@$GF6# M,.YR%GC'%5H1CK>?Q*GA!T'/?X=POD_$+(T"61J5-+OX['R/Q7Q3^W.!3*V* M&;@VE_`4#Q)^$T8=KH`2?F(N[<"<1Y8]M(,%3=@JG[!9.VR1-V'GV%VM:D3T:T[QBC\'MJ3`1O5U%]2W`AZ.8FI[I M3$[Y$8"OT@#01!;-Z;C0CCA'G-YQ21,KH:%7Z.H)GG+G!RIT$V_PG# M,(J7[!<(8MMA\9!)1R!B)!N@&M5-D(NB@*=>4;N+HLS%)A&)*5*F-R(/N!8I MQ6+)%'<'F:GD)48YLZWY-`4IJ2E.@T@BFB4X<\F3GY4')Z)Y:FG6-(FG8:>0)+_-X)0KK+O0P M^9+L";+BD(F69B.5/05HKHIU'GA`VO;$G?/1T@36&IQBT@%))/!#IAQEJ1`/ M72S,+N^CBV"@DCESR7"!S%E@>8"6)J>?*VH?7YGY,6>DU#"U\%^/2/D5:@A/ MF*7,&UF]I_9L9GDPT&$`==P3-!OL!G!O8OQ^Q9ZI`LA1;C3C5NZP,V@<-7OF MX%1\[>DSS@,H.9N4%$S`/$AX]3"QS&@5A0/_A.@[G#@!N6=V7JZ931)"+)]B MQ9"H/S1I):F5HQFI0F6"!P$WVW688%11.G$2IB>YT:,))CFX9MC.!EH#K$7KR+"R?.?`3OXK3T]=T96"<:>Z> M65Z#B%MDK?`Q)W6F:=R:?HVX,W0R:IO]U0*Q_^/8Z28,`'+T/QVC M*_O_Z_>U_6\YL-T7SO_[^>?_XGP1#`!Z10T`HDOR8GQ<_O1>/%[GS^8/!:,] M\5`^>:9>X"1?,A0H>-Q>[/9\B0?WHHVB;/T@!-^5;1?$MAQ*H7F%O-XN*N?_Q57`O>]0__7O::(W[3KG]2$&K7 M/TIHME(5%FLK(]?^QY#M?X8XO>;_94"*_\?8`>2S1H^9^3UKO'"]3V#L1QX& MH6O(%Z,K[0SROD+L_T4X%UYK&7GTWQXD[/\ZAK[_40KP]K]1!)@3(1P$,PBF MQKG:,/=A`=G_<=8)=Z#_-=K#Q/VOWE#;_Y4"V?K?GTT6Y47:_G$3)F?G%]Z, MOOZ^KYO`=9'$U2V&2Z687IA1!!O1>5^:E-RJ9.*_PU];\OQ38 MWA?X_[[(_Y\GF'_*;!%6@3T%MPTCR^%SW*'6`GWJ04.?;@PH*G\CN>P M->YW/9W]B0N`JF*]-53L-*5BNV3A[: M[.S=VW7+(+M;!IOLEL&MVI6=O7>[[/W;]>HPNU>':^C5+VF].LQJEY';+9G9 M\^=J9O;\,_T\=K?\K!:J)X2_B_ZFN+_\^ M$&#QWS=Y_'>#\[_!L*OCOY4"!<[_Z*D?.P+LZ_._!P7L_$^\$EFN_5>[FXS_ MT.]J^Z]2(-O_J]K^2S%C-FC_E3P'B$W*4YS`9B+4NQ,>&/T+MZC7O0'(]?_5 MD_U_#;HZ_D,YD.W_,8/^A1FS.?+7U+I9B,]_$O=(63 MPYM=U&4OSV,$%SAWX*VL730SY[[%WGYA2'"67=0C+UDH>4W]&P8I_LM&RLC? M_\OTW^L--?V7`I3^(3H#90&N^Q0>@`1!&W!.+/\NX-\Z==AISQ`0,'56T4,S M6]/I?09R_YMSQ+&),G+M?X>R_0P-$O>_ M![V.IO\R8+MC"`K`CE')L0!5S1=1_]>F"L`\^T^6+M,`5+KX+-A^)IUFK,G9 M2$%,-[[YG&?!>H.;SYQIJNSX1;`<35P6OP]^1@J8O][NLKC<97EVG?F1@@0, MB]5<[*K!>KJJ(*;)C3H]QW!3[K)A9H.'!:I9;)85P73C699G>7J#6;:?WF7[ M.:7ESS(!P]3^#!YT>0Q"@MM-M"*8UC?1C'9ZMW'?4EHMI+C=="N$ZL;S36S* M>B:L\- M*'63.;<7]URB<_BO2FK=6U_/%4%U\Y[;VT#/<=*(V#/\I[0Y5T0$*-AS:Y)+ M4GHN3["Z;L\]9),4&O])$7=DC67DVG_T^PG[SYZV_RH%#/S9I M[$9WALB9,#KX'G5'$N$FX4MXBH23]_*3GY,J0.+^"%F^.6&V(`^)[KX6:+;D MF![K]P"3Y_]E,)#/?P?MOM;_E@+;AF@`;D@6X$G]KSQ?99)^;\7WX%ZX;OCY\&V8+-3VR>,#=+9:K8:C4VN'%Y=B9 M@52/V-?+T>N?WAR__^W=Z[PL\=WEN,<2F2/5@=R"\[3J=S.&9MLP4BJCBLJ> MGGJLZO7TY+$@)GC@$=WQ1-M641,D*#H2.J)U:SK6XUR<5S(D,$[2LVY0`.7M M?X6X-.LK(M_^+Q'_0,/S^$AD%PQ,U$H9O MS$`8K`$K+'BWB3]142]\.GRK#86^9E#=_UEW&?GV/XKX+SK^=RG`^_\D]`P[ M0,H%--G^#:#9,GK=Y6H\MR=X"P`^`-9?!C'RR=C_#8>&9/_3&PXT_9<"V]^V MQK;3&IO^::7R_-7/A[\?GVYY]?__+^Z/C-X4^O#ZJ_OC[ZUT_O MCZJ5HY=O?WW-7I+?U0`AQ>X9^1SO;Z-L#9*"/)#0U=7]I34Y= M5/V7;YY83]%.FPL*>PS&IW0?:9W;`3(J,[M2V493UWD4H,D4-9`_\>QE@&P? M>2N'1BIF\Q5-;0A"['H7E8JW0(T9VA'JCG;B*E(#"LO'2.86VC%0 ML\EJ_P^H?5M1^_>G%HNC-W%7\RF)P4_RVB8=B-->0`UF4%\3UWB\ ML&E0/JAR$^/[-\T.C<,;=,MC058=KOH+R`Q1Q\-16'KNQ()PL?9L9D_PG@*G MPJC&GF5^&B'/Q&F]7:C8J;MDU<%-)^5,78+TU,)MX*(A4U\RIN<0;S*X,A@= M?G5B!:3@B>4%-B[*#"!2)GEEX73NC'[%W>I;301M<9WY!3HU/],*G^*I3NNV M]*S/$"W2#U934N#9J4LJ=&(Y$#X9;V`#FZG_Z`]G_^T"?_Y4#&?L__`#_0:RMFLE.\)@?*.8$:A=-R6Z6:ZTL\BO%S+\OZR-&^30?Z]M&++_EV%'ZW]*`3B<%<[_ M<^]_I@/"T/CYNE`]XB]\`"S#PF-XH'D&LP^)S[G>:-O7!@@(R*YMUA MLG+=C[_@?J>%,!"+N;:'\\)A`C(:FF?X;>4Z2G_)_4X-B9#I^#_?E?OMP@X4 MCAN0T4]YMM%6KD?X5P6F;K8K__Q^RLR>[_+^=F$,-AI((#=FQLVXP5YVK?+L MNB_R:I5*^0+F<6R`0R%_I+/SMV\W5OO9O9)GL_TEK_14-B%@OO[TS\R>/_TS ML^='?,C,GAOQ08=LT)`#J?9?Y<7_,MI]V?YKV.OI^%^E`$C?@OP/;+Z@_"_, MESN(`\G;F%XO$"2'+%Q84F)`9J-3F2;/%+4+A2!Q5352L.XE*AF:JXI''GO% M*KF?BBZVA]XOA$JO$@\.TN-_K&\!R-/_=ML)_[]];?];#E33AK]`&""XCW#X M"AT@B!!260\FK2HN%U+COZZQC/SSWX3___Y0Q_\J!9+^O^F%3WJ2>Q+Z[3ZM MG;-?LQKGV7M6`X?=NZ@?.O+FW'B';[4G[Z\9FBVP9[M@.X#-.`#-M?]OR^<_ M_9YA:/HO`]!=5T##G4*SM7),[T(P`BM;_S-,^'\8]@;:_V\IL#T0U#\#4?OS MQDU&_TF9+X+^IZ_0B\11NS@=4'1]6SKZS;C;*]S+M?W/KCWEWD@);N&G1JV0 MS_9_MC[W9^5Z/^-.VF&>\PT6CM?G8A7NAGU[UQ M7D1[UVR=G6*VYCH6J/TL<@^D9/[?'O22_+^GY;]2X`;V_RD3IOR+`(KU)+X% MX+HQ&RO,WZY[Z)W#2WU>74_Z[JU[8B)P7PS8E=@TRCN''R\))^[(_*G-Z*^)0#`&1C\O(KJ M0OV142]E+-%`3*%U3UD`]O\Q(R=2^-JO`N3M_[H)_<^PH^U_RX$;K/_J"?-U M+?\3UXEWA?R2;/V9NOC?Q$)0Q'!-^ZX5E6_)EID]WY(M6U#**3ZO MJ2*Z=GH^;9&P7DCU_UJB_J\[2/#_;E^?_Y<"V?H_)?]/F3";7`"NKT_$>:&> M2FYSDULDKW(!BG^,W!]8]UEY-I_]!+^/[K: M_U,Y4!6&O^`-8&VC]6"`^/^P3QS?^O/.XC^+\=^)_[?!0,M_I0#5__ULV@YU M`1LJ^B["'PO\J59_RK1SE^CR'#2#%_#/7[5^?72EK;ON,S1;8W,:"L3&W=A_ M&9VNO/YW#'W_IQ20XG\0YX8UP@7BT._GM?YN;[>[6Z=*=?=32H*Z9@7W#HC_ M/RRM6<[:S;XCR)?_$_Y_!D-]_E\*4/I_X\+IWU84\>?R$L\*1,[XP.UGC?CS MJH\J6ULUX8-9AP_P7DH/[VOC4#JXZT9J2`5U_/?UEI%+_X.N'/^]W='R?RD0 MW_^8A:1?,9^,&Y-1Q6R,G^`_\/@8'A]'CRUX;+''1OBUP1[95_KX.'R$1)H; M?'5`Y/^9908K;_T7OQCDTG\[H?\S^MK^NQ20X[_8#HORPH+!1#?"B/J\3RYT M\0%BM,!_OR%A_[_Z77Z1JR_-_K=37] MEP+;W[96OD=BP"PM;XX:9Y7MRC9Z>21%1PG#?-`X+"0-C>2"?TA)Z8$2A'3A MHGE,;8]D.CNU/`LME\YJ,;8\"$<",3F8!&Z1HL/>,1'K`RZHBCO#^=U9_$U`+N'V M3R&LS"XZ=<^LSQ`P90S!13Z[GS"[,U>!NP!GDB0RR?@B[GGBF/WLU)Z<8M;H M3"'>3%2C^9RKC$\K`K%/3"^`,"UX[HOU@7@RXPLTM6;F:A[LDG`[)(`**QY" MGT``G,K.PIU:!YT1VIZZ-$R,.0GLSU9E!_?(Q')Q]<\\.[`.VJ/*#J8>$M,E M#B2$7^+&GD&XF`,#(X$'$CP&`J?PZ"KDO@FJ_?#\UQ__'_H>=>I,&+5GJ+8# M+W]O?T36GZC:L*OP;2NLV59ERS^U9]1P'5TA:^XG\YA\GNZH2!:799'::429 M45;N&1>TD+!)N M980$HE2-8#[MQ.S^()RBH_`MG@K<]-[><2QKZA\M[<5!;2=:`_!\?M1[!-*> M](YP\T?U*./;5?#:\XZ6;F-_[ MA$'"O1:Z=8ZCCVWOO/SI^=$1B9]6):LJ2=&:^)B*JJ1>RL4')&*?#-@NZ6SR MT]\ET]EWYRLB\M)I2#]5=MZ_/GK/"FH"YIT7+&X;>X3OQV__]?[=O][3UX"W M07%``L($N)$C/.7=\TZ5,H,=Z]R:K`)H[D$5B]>65X6Q5F?JJC(M+H@TGI6O MI\[G6PO3"3+R]=7Y)JX[GV1D^X^1EP\/X&QNGN`UJH$W$\MH9D&',<[*_N"1 MQ(60L:*#YR^MB3VS+;QRXX)7"PB]ALYP.X`4@3E@=K(`MD4J%ZYD[9#U1HL/ MK@2ESNJ/;/V.":G9;!+JJRPNT`^TV`,$_GDJ[A*SLI?/CUX?07@X+!7%\X/L M[OTJ$-?4ME#U912UCF2*I]Y3E,A$B]J![1GN"%P87LC#Q1@S"_QZ6B-?\:=G M4?'?U\-634XQ_Z+Y*<\(43UY,JI0NUZ$FP91S<9ST_E$-H(^F?;T%TCF`73" MF8T)<#M>]&FA?Z'6_VZWR#+H6.>)Y3).],%_LI.3#N9(54X25G+NNI^(F+

L'WQ@3JAUT-KE&T[*B9+!&@[U"K&U;%(P)/HVZM?P(^G- M+3I)PM(/$(>,R`W2][^0WT*MU@G[0INT%8L$\)),!\Q82,7#D<'3=^[AU0+" MY4VCYCZ-<6.!%',A"$@'.9[2C%5`SKH,_B6S,^Z,4=P9K$,-D*&CZ(),SB-M MX%Z`5(CX##0:))ZL.`E]OT,?<%$@AK*'>"FK1)T?=2O4[/?NQSKZ[CL4/H23 MY/$A_H]-%"R5G[E0*%_#+;YZI%"NTA_KH>%W>#41MS"JR"P,^-H%5_X.F(11%L0'MAAA"UK-- M*L->1DW`/W'/$#2L9MNT8O%,$%.Z9+6,4_1("FX2\!_[Y"/M=O[]@+R/.R9L M)9%NF,XK&IR8`81=]=__HF_%(3,^JMYVR-O*UK?)N9Y,W%.^A;D`DS^%-8PQ M2V`J.EM:.A@7$+BF9RU<%G+37YH3J^;7:1Q-LN%W897[;,Y7%M=5QD>>=X5+ MQ(S&[C2]D\]XUI$]TR[K/2(B6199C6$731B/#5M(BP4"7<18[.`1X3J[C)/@ M(<'OFE'?"\OR%H1K-?&&FKZ.N##9/=5VCLFLX\8H?!5.1))ABRWF8&&'=S9H MYYBLX%N8O9CS,_,B8B^?*7_9XJ99![@?QK#R3]EROXM^9ZSU(V*<_0H8K[3? M2\U!,UQ5)G,7OXD6[!&5!E.6'LA$YD.TNIR9N!=!.8%8#G$V4%%J)W"#:+$* ML[*2PGZF=10*(>()Y?(0RC4:19"VH1E$_'U*=Z],9ENSK/]B9<^GOJ@0BO4G MN+PH\.W8!D=(=#N=+DK[%WC[M:A52;;&2TZ>0U2P)CX2R0"@QCD6W:+O+?9= MV)['/32&BG)5^U;8FB%RM_Z*2<.*^G7SZ\;@UIU3):P/82 MZ2T($_`MF%V[">!C(&>S5[T&O^F>W&BYF"+%-YIS!EW08)B*%*#5+;I-(6=&CHX0`94 M.5KD7%Q)T!;Y+3?ED.OA(E8Y'(I1>MQDRBA%.^A(,5K M:*KB]B>XL%6+0#*IQ14J/LLA#A%!L) M;'YJ<6L8K=08/RL[SMP?5[ZMLY<.S M7U(:UXD(4Z,[>(82!&)6M7@O3==LEH*)EZ;C'X0R-MN7PSN\.F.1HTHP1\], M9QT26%0";2\F)I]TJZ(1J/:[^;'EUO^!0'2AFWI:#M[V'[U_=?C+]V`92CD( M?AMOI>-*FF2+N"5MEZ+DH4(]["Q1H*&OH_?D7T+R4J]5<<*XZU)U'G&*43&V M5ZN2H.J/'F&9Y>C=Z]>OCH!BKBH[2YS3FN(Y"\IWBBMD#YUZ)=R)4&&3+HYX MGI_@V;R:FT0)N+!\4+/3TRNH!CNP26B1*W1#$Q5(E3&QMNA@'4!8*T,84]93 MCI)\(_SN%91XH&9>>.\%3J8:[GR8))^[21XT3ANZ_Z,2SEJAA\QI0_-8\^X0>7=)Q_[!C M7#W"[\[Q9LNGQ33V\;1O3:W/+6>%'SO??V?`]*8IJ=`TW@O:Q,% M,S!@[A@<+T]87G)@\0,_@O^@N_8K_!]H!GVFCZ*T#UD';?P27`[YE2WZ=M!F MB0G#\"QZ\(-9(,@:9RX6.*TE?O(#8()$O*]%H!%.0SP*7?6\"(CBGVR5J M,8P25WEN8TD;/C1;/#T_X_7X$3,D_1"6`9F(@/,8XWR,SESO$]6PD^,J>X+\ M4X07?VHO4,.LE22.DXU-_[3>I(WC#FZ9[0)-B)LY=G%:C`I:!%D0;I3]&5P& M6WX3.D<2?<,>B.338+%LFOZ"#!_CH[174[?<*!([MCE>')93J*.^CRLBS,XD M.FX/P^,MC#4Z@5#NSN.FY#7DALUHCX@6-2`'\F?P#[6N4Y<"83 M=BLUSJ.*N\PF]#*;<-O.2ZZV677I"S,#RV@XW?@"O;-Q:RST#F\^4`,9G5:[ MVVKW)%F`Z)T(+K9)\5&U<3*I4GF`G!Y2LOC1],8@S+W$!(%I'80'RX%636/- M8=RH@[_0HH7QM`1%X>\_OJ1W,5_B=$]C8>8CTQL6[TA.$8^Y:<.-<<$64-'- M4;?&@O<-B[M667'?U,+2OL4#RO2GT1;ZLXB3V[D6J#,['&\1,:%!NI_'III? MP.9C]L2ECHO,GG)X#\'-.9]LJN@&%;/U>'T:6Q-SA6L.?!TM+7>)ZT:TW<=X MHIF.=8S,A;O"PC-#A'>?4VN\.F'(FNBZ!";-B[=%ABNQHJ*H%]8X<)BMU[Z% M'5KM_:_/W^'MW+/`,Y=-:M#F51GBW.&%3,>DUK()1LN<+FR'F#KRF)M_KFR\ MHC<^67A)#DR\)6[,IV9@H@XS3T<-7-`YGAR#CM'K%9U`?,OH[AV:E4+$:4W@ MZ[G^&L(T+S#+8:5?.8+4$XHY;;8G'\'*0)4C9*\5NRZDR@G3P_ON'V"V[/P0 MGG]U^GTB/#4,MLRP,]VH=Z)Y]?WW:(_?SNVXGGT">C&F[@O/Z,+73-U7'<4' MP%1^`+4=>45.>.$56%[BAHTO1(F/R78X)V;RL:T>:AZ@1^AW;GL(B8?P5#'*A8AZ<0,XDD<[@M?4`WT429?%!M0Q)V>$`5S.2XX((='T0OG)AY1]3_RI[*2Q-)#^_(M*S] M?O&QY=3_$5,URTM%3\8O-?HG'&=0$)O&^PV0;GMJ-.A9NMN@A`:E$ M;2=DZ)G*?+84K()7+#6L>(F33E9]M[\CB2[D#AWQ7 M('N.7T3XE.OLP.;=F=J8SE5 MNA`'1G.KA>7!O3-Z%:])3UX9ONKWY$?J>2NI23,Z6B2),6&$+)6P%[I!)I]& ME;#OPZ-_L971*L$.0IDI1@H[/4'%#.T=R<1='FHT^`-9V#Q0\Q(\?O)Y M>W2^3\W1B>8&J@GW:^"2%-B]D&KZU%"$M!RF.^Z?$$LSH'?-R%DN4PG@%"/Z M(C05C$KALL%P"P8'I)K;\OZ"SX&W"_%!-S/P2%8M4CR(][R:_.V'W"J'MC+^ M:KDDYIEXGE#KC60U"Q2HK/K:S[DK]`)3A=QW-+T39#P-)SPUB3BQ`D()A+M. M62((81Z:DC!#D>"4451`9;,*L0HB:G/`Z$7W%\@"B"?(:DXL+4C876!LM`#< MNY;IS"^:%2RBH&B+`YT?7C2@XBNLBBL/%B4X%C\>A5_%;3F\P&GHO0UC%.&( M6/A!B(;[IE:KP!?Q;26%U5,=`_D%UM/!8AGRQ,3P4SGP&4T-*4,5E9R#LMD4 MQ"3E=WC^O7OWCEJYC46L9SQW-K02S!`NBT!:0S`ZJL(MT,.,CP$U-Q-1K0E'%WCR"+"]LM MP!`PNW6\6_B*TK?PBV5WY]]_['%=D;;G+J/5(&[DL/.B^#F#]%%4V2)JU$UP/?[ M!__CDYVZC#9"B!1%AAD.:J2>8UEC?1=P,)+B,UL&H8.)9ED/6F5@U$LI0A,K#:X3'O[<_ILEU<)L!?VZ* M]H>)B1]?"0S5*?&UN"O.M)'>1$A4G.B/XZ%SN768+JWA-]*<>)LD-`>(CS+* M[^,FL6LNLG$@?">S#G#A`JK\G6F&"%(9[+82K3W[0!L`-8G6I-`.$%91,BKNGB2_=>>/(@.6VAI5VUNH?\/FN!3U_CI0*DZV98&-V*;[T9$?%< M:9<_-X%FB_(/B)""V'&JR?Q#0 M;(7!/QP7K*CO@O[[B?@?@[[1U?1?!MP@_J]BPMQ=\-^W?*C&./YO(L0C'V4Q M$=Z1#^ZH"%O(!W:,PSK6U?6]9Q$&FRVB6B%#3CBUM?X]0*[_7T.F_V&GJ^/_ ME`)5]?!';GD+[0%,?SK[XY/IS_&?Z:>Y.:ODH,V0+-[_]NXU0?I"2Q@E@-+_ M]YHC@.;1?Z?V_`](^'`W?\IIS_?Y-'_T:GW5?$_]#R M?RFPW>\(&P"C+>X`(#(H^7'XEDK__'01Q/Y]A9R^"',C=/3ZIS?'L+B'LOI> M**O/K5@6GT2_7M)RE`)\;@!WQSKC'I/(4B*XPQT.[K&6BE\.06[D8;YE]NP` M\L.X9^`2,E^L$#C=^E,H50CEKNY51;+TA(JDJLU6")/$.V73*7C6#"Y5'O\G M\:66>%.7WJ2B#9'^)KV748H(4]#=N#=3.DCNGMQ6M&_?"O74%>:0LEE"DK0F M^=9\5J0C\1)T3`]WA=>US!(5&3"O.@`GX$7*K.=VPB"_$P:E=\*@4"?4UM,) MB5<)Q0<,2T=J-C%X"VX4"6Z\8MDY'L;QQ MZ\6V$0[&\]%OD=?S7]0S M,W=IS$=A9J-0+5S&?FJ%]W-*N\BO)UV[6Z MU\N8;>&65)IMO4A,E69;ST@;@IYQZR$0422&0/B\^2'H==8V!'TC8PA^4P]! MOYTV!*F"P6&8'T$W]M?UQ#QC%ZMY8&/J M&=OD^N$Z8X'GVO_UY/B_PT%7V_^5`C2(&?$Y!_<,9J[[%![`K'YL?JG5GQ[1 M>Q:7",\3=/X48H$_:Z#^+KH(/^''ZMB>3N=6=1=](2EL!YU?C71L\*\?FJVQ M.9U99K#RR&6;31@`YI[_#_JR_=^@J\__2H&J:O@+W`"(S'3>5#)1[!5`\9LV M";@SX.D_IOW.6LO(M?_K)^Q_V_V.IO\RH"H/__5N_X"**A5%+QW%H]&C]'R# M0D5?:*ZQ!J#V/Z9G^Z[C-[`LZ$[*MO\UVMV!+/\;O;ZF_S+@!O;_Z@ES=U<` MN&/5-)U;NH+W]OI='L-3)R1B@C33DEPTO7PT-SK1O^O9J6'3T&S9 M_F?7GN*U&,;]CNY_R_J?05?S_W*@FAS^4`P;%MBZ/=="V/V&9HLX(J/>NC=D M`YZO_QTF]G\]??^K%*C*PU]P\Z;)_F%`LT4\-SDNN$I;XYD/#WGTWQ[*_A_Z M'7W^4P[0\Y_G]/"G5L=;`+K58UZGJ%NOP,.DW4=+UP5#57VP\X"@V5I!&'.R MC[2N_T;"_\M`W_\N!RC]OW%=\-`W-KU:'0YP+R_IM@"9Z`D: MH\=H0OP\NN`O^AD:P\-?Y!/Q.4X8PETW1,.-H-D")=W$7-J!.8?CNSLX_S4& M_/U/@]"_OO]9#E15PW\=-PV8=>C-P/V%9BLT_*+..M9I]Q5"OO^7Q/IOM+7_ MAU(@T_Z+20/HLD]E_@J7VCH/+&?J\]N%.+.4]GJ8;3#B)=[_T2\N"79<(+]F M*C<#I?^7]9I_%-#_R?9?_:&V_RH'TKRX9"C_W[[1"_Z#`>+_%6(F33>D_/OF MNO(_T'^O-QQH^B\#BJW2X*C^'`O[71KKY)(\/D,=^NA89T2#0"(2,,7!V/R" M9O:(A2F8F>1?6ZL.OS90[__76T:N_K\_D/?_;7W^7PY0^O^G-9^[+-04IF0@ M>A)8`;.`Z+>FW(<(F/YYU?_4_KQ^!I"[_B?IOS/4\G\I(-(_HA(`BF@>_[=P MW4[-9)>]=M$8&,(NFM`_4_@#IX8^`/>\V:#S% M395!3#RS[O^WY?N_W?Y`G_^6`MO?ML:VT_(QW39F%;_UO[]_"-#'Q]N_MQO[ M'\D_CULM_+[Z^_]6/S[^0%E#*PS-"E\XAM!\S#_]]/;E\_>';W^!1!P3:/'L MI'6B3V[O%)HM3/D;M?XLH/\=).[_:_U/25#L_.?\V<'%LX,O^OCFP0'Q_P&[ M[[D-<9KOY/X7!/N2[W]UM/ZG%*C*PU_`_\>C*^J\0YDO:[_P5.\7OC90^_]: M;QGY]S]D^X\!_K^F_S*`O__UIG:.R-E/XAH8,/@%:RPD0[DY[RIUG<&=`TJ=D9";I 9LSX'2D&HSX$T:-"@X9MO_C\'!P&4`'`#```` ` end