From mboxrd@z Thu Jan 1 00:00:00 1970 From: Teemu Torma To: egcs@cygnus.com Subject: [REPOST] MT-safe exception diffs for 971207 Date: Thu, 11 Dec 1997 08:08:00 -0000 Message-id: <199712111608.RAA16152@lev.labs.trema.com> X-SW-Source: 1997-12/msg00654.html [I never received back this message I sent yesterday, so I am sending it again. This time uuencoded. Sorry if you have already received this one.] Here are my mt-safe exceptions handling diffs against 971207. The major change since 1.00 is that with sjlj exceptions there will be only one call to __get_eh_context per real function. It is implemented by using a new reg note REG_EH_CONTEXT. When the eh context is needed, a USE insn with REG_EH_CONTEXT note is emitted to the beginning of the function. After inline calls are expanded, the real call to __get_eh_context is emitted, and the value is copied to each REG_EH_CONTEXT register. This optimization happens only if dynamic handler chain is needed. References to saved_pc variable emit calls to __get_eh_context directly, unless we already have REG_EH_CONTEXT register. But I don't this combination ever happens. I think that saved_pc references could be commented out if using DWARF2 unwind info. Teemu 1997-12-10 Teemu Torma * integrate.c (expand_inline_function): If the inline fn uses eh context, make sure that the current fn has one. * toplev.c (rest_of_compilation): Call emit_eh_context. * except.c (use_eh_context): New fn. (get_eh_context_once): New fn. (call_get_eh_context): New fn. (emit_eh_context): New fn. (get_eh_context): Call either get_eh_context_once or call_get_eh_context, depending on what we have. (get_dynamic_handler_chain): Call get_eh_context_once. * except.h: Prototypes for fns above. * optabs.c (get_eh_context_libfunc): Removed. (init_optabs): Don't initialize it. * expr.h (get_eh_context_libfunc): Removed. * rtl.h, rtl.c: New reg_note REG_EH_CONTEXT. 1997-12-02 Teemu Torma Thread support for pthreads, DCE threads and Solaris threads. * config/pa/pa.h (CPP_SPEC): Support for -threads. * config/pa/pa-hpux10.h (LIB_SPEC): Ditto. * config/pa/t-pa (MULTILIB_OPTIONS, MULTILIB_DIRNAMES): New multilib for -threads. * config/sparc/t-sol2: Added multilibs for -threads and made -pthreads alias to it. * config/sparc/sol2.h (CPP_SPEC, LIB_SPEC): Added -threads and -pthreads options. * libgcc-thr.h: New file. * libgcc2.c: (__get_cpp_eh_context): Removed. (struct cpp_eh_context): Removed. (struct eh_context): Replaced cpp_eh_context with generic language specific pointer. (__get_eh_info): New function. (__throw): Check eh_context::info. (__sjthrow): Ditto. * libgcc2.c: Include libgcc-thr.h. (new_eh_context, __get_eh_context, eh_pthread_initialize, eh_context_initialize, eh_context_static, eh_context_specific, eh_context_free): New functions. (get_eh_context, eh_context_key): New variables. (__sjthrow, __sjpopnthrow, __eh_pcnthrow, __throw): Use get_eh_context to get the context. (longjmp): Move the declaration inside #ifdef DONT_USE_BUILTIN_SETJMP. * frame.c: Include libgcc-thr.h. (object_mutex): Mutex to protect the object list. (find_fde, __register_frame, __register_frame_table, __deregister_frame): Hold the lock while accessing objects. * except.h (get_eh_context): Declare. * except.c (current_function_ehc): Define. (current_function_dhc, current_function_dcc): Removed. (get_eh_context): New function. (get_dynamic_handler_chain): Use get_eh_context. (get_saved_pc_ref): Ditto. (get_dynamic_cleanup_chain): Removed references to current_function_dcc. (save_eh_status, restore_eh_status): Save and restore current_function_ehc instead. * optabs.c (get_eh_context_libfunc): New variable. (init_optabs): Initialize it. * expr.h: Declare get_eh_context_libfunc. * function.h (struct function): Replaced dhc and dcc with ehc. From Scott Snyder : * libgcc2.c (__get_saved_pc): New. (__eh_type, __eh_pc): Deleted. (__eh_pcnthrow): Use __get_saved_pc() instead of __eh_pc. (__get_dynamic_handler_chain): Move __dynamic_handler_chain inside this fcn. * except.c (get_saved_pc_ref): New functions. (eh_saved_pc_rtx, eh_saved_pc): Deleted. (expand_internal_throw_indirect): Use get_saved_pc_ref() instead of eh_saved_pc. (end_eh_unwinder): Likewise. (init_eh): Remove initialization of eh_saved_pc. * optabs.c (get_saved_pc_libfunc): New variable. (init_optabs): Initialize it. * expr.h: Declare get_saved_pc_libfunc. * except.h (eh_saved_pc_rtx): Deleted. (get_saved_pc_ref): Declared. cp/ChangeLog: 1997-12-01 Teemu Torma * decl.c (ptr_ptr_type_node): Define. (init_decl_processing): Initialize it. * cp-tree.h: Declare it. * exception.cc (__cp_exception_info): Use __get_eh_info. (__cp_push_exception): Ditto. (__cp_pop_exception): Ditto. From Scott Snyder : * except.c (expand_builtin_throw): Use get_saved_pc_ref instead of saved_pc. (init_exception_processing): Removed saved_pc initialization. begin 644 mt-eh.diff.gz M'XL("+8.D#0``VUT+65H+F1I9F8`[#S]4]O(DC^;NC]B-EN5-8DP_L08-JE' MP,GZB@`%SFWNKJYT0AIC);*D)\D0WE;^]^ON^=#HR\#;W>SNJV.S8&MFNF?Z M:[I[>O3?5]&*L]C)W"5/V=*YY>R:\Y!QS\^XQU9.N':"X)YE$;OA&4M\CT4+ MEN*@('*=8(LY'G3UHS"UX#'+EM#@AYR%Z]4U3U*`<,_"*(._@.)_MK9ZD\EX MI]??Z749FW.^6K-YE*P-5J^WMEHOF!]F_"9Q,MYQ69M_ MB9W0L_T0X=N+=>@BVNT#-EL06M'`%B%;I[`6OMQJN1$`^))9@/TS9^DZX=#3 MR:B[NTX2'F;8?^FD+`IYAW!F41SP6T28\#2SHX4-TXG]P)'8CH$>C*_\S.9+ M6R(0(_D7E\<9CH0)&*TPZ(S?`:+.5JL-5#2:["AT>:$=:!K8Q4Z%]A+F#;#U M7'U8;L)J$+,H`1I5$5K,XS$//3^\`;JP.R39'2?I4&B\^]!9^:Z]!)8$/+'= MI>-KZM2@ZA@$6AZPBR0"=M_'P*=%E,#T4^9<1[>2!5&<.=^` MYY*OH+N'T_%#H(@8`@TG4?A#QO"9[P3^/T`L,HD[3CK+1T'$[DD6=)86_7$% MB1-^8X,@B9G!C-?^#>[L0/_<$''%Q?VU<7T&)9P98#=R4<5 MQ^PLX_677A>'GL[>J*$G?I9%@OIYYVPG=EC[_8?3^0R[GE_,9^=G5Q;33TYF MEV='[Z=7VP=;+:31:AUD/I"T-`,#:AH[B0N`TRCH'[`CST,C(T>EA6%(@JW6 MRO$XVXGUL\`'705C1%QM50`C6),H%LO7N-42Z$P$!FB0(+1B8K8PFQO7Q9XH MK:1A?L`E!T1C'P6C;9/JN'%<5#Q#/-,L6;L9>T274G,<."Y,MSB0W8$V@X*% M//%=%CCAS=JYX5NM-.:NOX!'<81&,^DP@&LKO?;#1:0LA;2;'6J'!49WJ+9+ M[GXV)G!P@$-$G_23ZF4(B4>@&:X\7:(8C0WY7L"EVV"+I+^=:ZQE MS*/I<9J!.78%!/U,DJ#0<9%P7EIY6C65A2&?^;T<<0OJYUP'G(0BIP0N)?T4 M1W&HO^)"W/RK(MB'%%A31*5V4MJ"\MVC'43AS:=5#(/>@UA0L\==,`"T[X!! M2WT/@'WO+SR^8"=@?.P/5U/[S8<9Z.*9?36=__O["\&;1>*L^";.1->?N)O9 MJS5@1X3X%^<5@U6&!D(N^L#0%#6MO?!AZP74N#JPA/`4C#XAJCZQ,R0:,,>V M/5YL`FP_18$GW(0(1.YN"7K%'-?E:4K;#:%-"QMJQ6JC*!)M"ML*;!=R3]?. M`8QQJ3-,G[:N2@=O"?)2?>J6]ICZ#=E0I4U[(DA!:4M4(U+843V0'"#@(M>O M(C0WX."$Q1J:G!7L1PL@+FRM:`]A&Z]9`]D60(&846/6L,F@4Q,EQB/<-]#M M0VLH&VN@`2%1!C-0U4?OT:8*53?J6<,6K7E;=B,D8&F$-?%!.J3]-%Q";3V! MO[0RH(8PG;`07,#;)%JQ*S?*,G85WH.8LA]3^OLWKYO>^(O.(G2"SDUT^_J@ M8.Z4Q5><$\L4AA+FBBZ-M@0'/A`@5C(24BB*L]K8B,?K8LG]'V_$F\2)[ M8=\#W)*7!'057 M'F>)C?^CN()3Z_&"D:0%8U<;-@1IF&M7[L8[@(&;B_<+L1#JITLZXX(3HQXI M=R37`.FB"%F'KO$Z7>;]3DUE!5 M\+X,@14BJ==:(*&RW:I_25QA"3,0\B\'>DI;KW[]S];E\16YKP=LEP1BU[U- M=V_"]2Z_<>&#Z^XJ=-;M5L*SQ.>WN!IU\+_]IK;AEN_W=[C[K#0X&/?C74CAV=G:J'7M=UIT<](8' M@WY+@3-_($[[DHN<-H&!<\V#])"0#P<]:S@<,^P.O(=_8*68,%`0KGN'^/`[ MMON"S='U$L:424B,C&F'L;,H_`=/(/P0*0=E)BF#X`3HR-X#$/A9<,RH>,Q1 M#CGZ5UD39`I\]/P%!.H`I`:L+W;%Y'"5=1[,(;15YRX=A]]A[@7(#\_]N^:Y MN^ZA8`;,_8B!0P(N(7*#@'[F/$99RQ)\'"W,M$UP#TYCYH/%SU$S$S7&ZZA2 MC!VEC#ON,N\HFQCLB(`Q`;-K@8_``&IR3_(G9*7+X//.P[(R_4D[\K\%D7-P MK$C:1TL$7_[IJ%K65^FQD8+2!L1>1&N,$K2S1RVI4-W)GC4"6Y&K;LWPA1.D M7`VC%;]B9Q].3XD2.PSBII`"IY^/+M_V[0]G/\_.3NS9V=MS:)2,1&*BKX@$ MP7V-R(5?R%RSBV-P"X(U%^3?0:AD=HI[^2$\IL'&;3%CB,26M5V&K` MM*Z3T'8\+VE=7)[/S]O@^:Q7C-IA<]3CL&WL&69!/C6%O:J6WBQ+C?L\8C;409PYTX MNB9ZIZQ-6+YJY7@'8:Z3QRD;+2`0=98)54AE1Z$G)>T(42_`5UIAZA:,SP,` M@>BI@'.WY-0;?!3T4\*(K2#24:#2C;`L&BW@8"<2`Q3TYQEZ(@&$'NAXZ"`! M<:]6W/.=C*-*+6@!I159"``4!&;CL'3M4]!,(I?R[-,JWI49`0-W0]2/@#SR MWDCEO%JH`H*M!4XBR1^8Z)HP"2!^BBE6B;$CS#O\S#'$2$"-,0L/'XG6P+:% MX_H!3"0360W,4%*DCY8'NKFHOA#!$HST'IRJ52I"-94_9.P<(+IH3$0J.Q'1 M'8%3".\X)>69(P!A5IN(2;,`YFKF6`R>1A+@*@*EO!<349!@RG=1\EF*C9@( M]Q,Y'3G%CI!R^)EY'$](+)Q!0A\!.ORZU18V3OC=&`""UL%4?B%ME+9`V*[PD)X)6P0ARB%A0],#GFN8'BJ^P4Y5 MFQ;9%K-CPC(U^!UDC06,1"9-KSR^GTVWI8/^B'6TY+8PY#B5LAJP%>Z/\JT0::GPL?;Q$5!J^O'BTF)(+WO^GQ=3UC8^+L+M;0L& MMEHXT,I):WR4ZZ%15[.3J3U]^W9Z/+^B0#79!FP]="V*N'NL#:[-[!(ZVI?3 MMTWX"<*V14.W-:O)]KVK&1HLC+.N4'?-+?(.QM8QF7\X\6^X_SV0F8 M5VZQKEP'2942"/JL.(8L+2"E1>%))_6SA4"S-GVS",#"3](,!"0$?V5%W6#@ M]J$RRP]8K:_:/W[`22D'414GA6S!L&OM#X>Y+?BC9&$S%_E3F28(>0.#W"B^ MM[,($_V8O7*I\:E,9?F&(QGZW2O`(ZU%,[NEA9.+`#>_,D)VW=:;FF0_3!FT#=T7AZG3#!T:E"VW:=C1];`$//3*A'O" MP*LBHB'NE9-\5A4)X(&@0V@"4-AR'^O4(<^Q5`0@YDKP0\[QC)/<'T!0-K72 M@=/ND/`7D;N&8RN)HMF;A*2%P20\LYHE@)ET'F1:GAR54^K6&(@D091?(,Y4> M!!+\!8\*SRCJ=\2.*G.KG@LSN5Z#`7!02BR14@1U#ZA-A?I:VK6)?S]];[$+ MX8Z):6S_MK[KTX.>2<_:[^J@!_G""J,*Q0HJ-:'X0BS)4_Z*VINP"D\2#^]? ML3A8I\@U\&Z!QFV"IO9O<(G_:ZJL=^YJUATX5%CINGG\\RU865MM4F:L]#A5 MRH"C8<`''TD-/ZU!G>#QZ=&;Z:DZ:]"V(Q1G$!V*3?9'$)OLZ[.,?Y)EN2I] M*]8UZ-VW9I;6NT=L/_I45U'BR[AJN0#IE3J$H(I0P,:!H!ZF M*CT\$E`^.RX%3YCIA&2=<+U]UQD_(S2,:_C$-_&IF4D([-'642RW@4W8^*OL MXV^B1F4S65OEHDQDK]_O6O#+."11D0T=3DF'4QQ4T3+,U!9ZG*);F_X8;>9H M&D>S%BD>200U1(403IKR%<@A!/MBJH7*$Z-CU=,M5?P4)X,4EN=9>K0BPB%9 MG5Y_,K)Z@VXOSXG\850H+ZY&"Y^VP(H\%$N4M"3L3?:MWKAKY`B%!!\2=/"% M44:K!Y(R][OS&`;N,#/?A+<-16'5RD5_X)]2QGX9FF$09H7T7Y"YDW4RHDK-[*2 M&(^LE`;<*2.O3K9$3:8XDR;F[$^`S)-1KGE_=3+7*NP?3.J*T..<*R*_WP<+ ML#^0(D_LF71A>Y@,#?88B4\1SZF\)R5C]([V\H%SI`[T8-2/4?Z2`G[HE>(Y M)ZQM+4O.Q5BLYX9H($U]C.)J'I92B@AVXC55@^OBDM2^]1T52))+ M0Z/1AL&?*OR8UO@.D`,^@('IAVTQ+VVM94<, MH-LZGVADNP4"E?8[FWZ<@]1?G:ELFH2&>-"7.J9T(S5AH@I[0H_6\^,BA.Q;H#JO,D"A;[&!-TI841'1N42&H*[!!5K?+U-)-$%V# M;Z#"CL9*2"I:*%LN64*M;=9D#-OT9-+-MVG3DTXR.ERY')=?'AS.CMN MZD++H4)K)*O929[)7'P9,<\ MM,+ZZV3EY,4GN%OUN^!,]+M-Y6)2=&P8J;,9N1R!]]OOFMYO78E>5VS\MK+\MM=6EANOK0P; MVB;-MU:&]&E"0JMPU%Q:&;84!N/2RK+FTLJ@):$50T;*Z10JMXLIQ9:HX):Z MTP/5V M%6%(5]'LC_M577U09/X5N$SV!:]0%BJ!C"(@83(,DA1K=FJMQ4N3L1IP3851 M!7C-\?\3,#P(L-FV_94%O4P/PVH91YT5LIA9VV8+L$%[I%\AWVCQC=P*B6VC M5S%J:NLWNQ4C\:E/VXA$4G8K^@>];DNA0-M1Z3=AW?V#_OY!CZ["]BN;V9L( M_._08N^/6!<^?&O(,^_.21;] MSO*9^?3'-/,\ON@L7Q?ZBFE"UY?&0_.](\^$#,GWE]CVN_E/E].C$_O]A_GT MHST[F\VA55Y4L.T;^588>D6)G3'SC27@Q-8-1R&E4[7'PA$#9)Y$2*)X>11F M-O]WX83NO>U<1TGV@\C_\UL>8C93O'"HLP0EN"?_2-7)"9F5*Z21%>:HUZ@P M4@+V(G9E:#39L_"T-&=);VP-^D9)N71.Y&M97D37PO]/P>K"NH+(8DM?FEM6 M63B]:J7]O/#>%VF89%X[N@:RRI>O',('_)^>[+S&PKCJ?0],ZV(K*/6SMPM;AQJ6)2[S!`X^=J-UF*E' M3^>9XHO!-/F6'29J M`<$K%XXX7?KU>?H@?<6;@JI4%O3M[UDC\^QL-!I9H[V](GUS^5-?0:7_6K3& M=^8IU\M-,IA_)T*ZYB]/HCU7TI92FJ_B.N-"38(=='V1&(AWN_M6Z.QSJ'^ MZ@D^712P1,M$JTJG9Y6SP&,X]G*^V" M25+^>>LIAC MH"E+^^"@NU_(JM;US1.KF(&M1D#U+PK&:Y9XUFHQO'.56DRD\WKCR=CJ[7?[ M1HV.?+1OF%5AT07$S$D@N%67=0OBO8J/<5$9)!+ES`RHEW7A?H25YZ3FR8/I9OX=240NA;,-]('?)7 M1FQ2AKVFME&S-NR)3R.20(VFJ@PBQB]?>G<:1 M[/^VSGZ(MG+7T6.P&!`(2>O-(0C;W"M+.B#E<9,]9`2#X!B8"0-VM(F^^ZU' MO^8%DBS)TOZ>EPM_,>?88B&)-.?EUAHA&E_D\)"&()9A&9&$50;ECB5=; MT*](EMD!ROP%7R\E08@V(KR#Y"TUD\Y.TM(OQO`N;:3*:HJG+!FN>:E+T!4GFI.1=>GS"C*WJ7%J#]"?A_%H9 M8)2+Q2(1K0X1 M01U=B=$%S+[I8QT1T5>\$2)4408V_F,GAQ7](8-&:(_KF?CS8=#/N:Y6E4BU MFH"4E)N"C:*T)5WO?BK]ZU#3S58>P.8K(;.;^\RV`9)12+]#">II\W;6A;^. MLB^$FL#!1$#7>P$^0D6`:6`*L$G/]X4N2%SF#CA]? ME?TF(8R1I4CR.E>[2";7,V/Q=$UYPU;.W=]+>\.NM2M&@[@CINQU)/`A5&R` M7'H_A;ZA,6/<=S,'E@\-'GEUD?^<8MV(/$J6P8NI<;Q4%^V>-)$-!H/,BWC2 M\]AB-@Q"!AJ#_P<#XP&:XR:*19`8U,SA/,^\:32`+)=H`&![MGI1%/1&M`%E M-5E,1>U8:]T5I;"MQ')B81V82T"/+A<#*V5CB\!4$UO-%`")?RBYZW[-*;NU M/<5=#9=B@V?S9A1W::(S90HX7=O]RI'DD*_)82#:MI<9$)H",$YB#/KN>%O$ M=H&"9)IEF;0M;LQCR[G&A,`-#;7.>%?D/""92.D/F*,AGVNH>Z*]R_@P=T=&!C=25T_NA,B2FMLVC1R?K MA>.]?]VUYPX3S)(?^3RY`2.7I&9:+K*UB+C><1A]?84_GYG%Q%60">:2"1-4 MY_4NX8ZV(:LPVEF2#G3*K)"!,@U_Y6I60F+I$WQ2NJ4(JLK,0: M;7[YC:T$GCR49J+)&)!9Q(1>D7+]('Z!3A0$!Q.-)N'X6B+!V%"D.D*$[45! M>S8)/Q%SI.`5DC0`/`@;D0\O<"X9>*,Q@?!_ M\&=T/)$-L.[CR%TD`JUIL+V34HA9NU/39P@@TL($]V.<*;+R(\P8G1FX4 M)D.[:."?!"7$J5-U07(V?G1=78K&&F<,.&73P)IT309QD_5L8B="OV1%$)0= M;?V!?!Z-0$!/DVY'>&%B;CVX"OL):QHPLB1OL=MPGSB#S**'%#5)VDUP;NQP M5YK$V$_;IR>-IG[9%HD">&M.`\VD227;M)=I]A0+99FCR!Q498F:G^+$MU[; M6RRMV8XKF4A;J2>RBW>3$/$UTNS>XB/Y+#Y;RR`VD])M8CQFN>"VQY2_H>\Q M.".(EK-)I8WD:ER&T&!Q3+6)"#G9T_.[XF!+)TJD&%64WY)C9`ZT8^XJT_H> M_KE9R].B)%'&%N,_YRI$6][DX>_<\JXD83#S-%<=GW"3<3=-P;K[4)J"4A5R M3I(:%D1I+<\305ULC(]/[LQF\F#Q)=[#/.Y-BJGJTVY2K$N4-1/3X-8W*7=? MZOC=RS*:^]1[E_3%L34`OCJNE1SX3RWF`PH+/5E$%%Q?$J%0:M)7VG7*I;-F#?4&3J$Y'GV\. M5U.I6X0)=MU*RFK)"L[W>6\WRZ5*%6B@6D[9+>5T\U9PPJ M5HPQGHJIQ->8_AQ/P^F'BEBD-+P:47-CW3#R-2R,6(''OI"E'/.;RM//FY@T ME6.7DA,U]*\F7F\(>LS&J%RK\K-?>;>\YY1W#:KSPP_GGLK`"W/3N'P8Z;=@ M,@9`*T+L"#X-$U("FP=&%*%A:]'W>#DK^'Q842YG%NGF["MT6M^2)`=_@\YB M,!-'J/$S/=EM+7@*'/674CH+=F?N(6'+/!E9$(`FF:TD]U]UM^*4JY52:O\] MV,XS'OLY,_#4XUZU32LNKJM;C2!<%C,9"(D]%33$`5`'L.AJM103TU_, M?"@Y_1#3D:0<,G@[D%13AHUD60C;@*]LF$S73PKG7;9W$F#<;+P`AH.0@B@< M70UE,"V^@3-#DIR"A+.J'+;<#(9N!TC"BX.,N$E^%!%ZCR@@O@8YM'-5FOVL M66J/,1$G_X?#0\GVJS47R*%FH34\PD`?<(P6ILFM!KETD:LU6.2]7;/(3&0Z M!E0>C6F"#`GG1\4_E?E9[1T$"P00UEV3V#4\/]HF#O8`&LJ1T1C-MC&8%$)Q MN\DU,S[I`H_7S[1V>^ZN4]XK%P=%UJ95B7VKY9%Z'ECU+R MDA00V_'D6I#JK/"NM%^@`DM,;AG^,_$GO?!:;%"G'=U]_9RZP?)J'Q:,\^'CWNH.Q+DT<9E;125/%EG\A(435W+^OT)9$[V3I] M5XUJ-A\_V9"HK7N-9XD!43\[]>^:W7J[65_G4!&J(%77/%K'8Y4,QVA.9GWT'<<3 M$GEP*)=?BEE(_WG=.FZ*K73L0GH&P%G3;L(\HW8),LZ64Z=,L[_,J9/9S(OD MTT^FM;&?RI>&VGKLC9WRH(&-[:8V]C"]L6G[9W@38!A.;43_NU`[&6'KS&^(;&D/DKCN=@=[3[;;W3%,(MPI\U"9*AIDYO[+_(U"4] M+C#1?>3YE'M['H1C_\.3R6W5W-(=OG=W1[D]RU%.M9'4FMT?DE,IH MO(8JF4YRB%O6#09=?J"5$07174)=;Q;A8!B#8%))^W$5]BI`I'ETNVPTBCW6I7933N[%.4%AL1*1,EQM2K.DYW'G2A<>DS&*^$ M._V(D*]3-FXY:S6HJ^94DT0^UI*%<1)V0@_^*0S#Q6]N\Z M+%MT:363),V*=,ZA1I!N\O*R"^=N)G7>"M4#+_8L\BPZNY:S_'KAW^+OOT]@ M]=_[LP(<&PX*IS>0\CPBUY2#PD),X.2$2:Q*'!0\XL_&;M)3Q9$TA\?APOA*H>9\M2`+6@3\[IPU&Y@BF9E*$C\3C:^; M?OVL3$8@*32_^/>5G4!)TACJH##NW22^69\F'G2KUYW=W,0J#`]$X1C]OO#? M<$>\N!J\?Z9N$=&2^^5Q\SN056'D+_H!K(+PYC%< M,]Z,\OT9BU\3I6O>SQ-8[[SKHB;7[9S7V^=9&^ZS[+1[(O$MV6*[L2V6N;?V M8OZBJ4R\J;)9OK1XP8<0]D'L#L;>541WZ**TZSJE7:W*?47N_##=:$EXU'Q= MOS@^%W\(F=`XNU")F^*%<#>5-Z.B[\;9&=,W4/8DFGKO_8/"4;<[#/=!9$=[ MQ:*`GV?U;KO5:;A=%ZB.Z&T"O&(VBGH%V/"K"CPG^O>FT>@`O[T]N_BAVSF] M:#>:]+.E?\H-S,'8LCKXW&JV>("_IP'W&?\>!8-Y83`.O/GR'MW MZA5;8GGB?UZT1:.A48EQ9S:F.NNUF\^2\#9HL9CUJ-+O2>NWI M%O%1^W^K14_QMWDA])Z_?#JVL=7K%^9EW%_9U2E4ZEM8.B0AEU M6:W5F9"_E9`)5B03S#BZ^MU!^-*+)@?BOS:B6:\_FFU:`]*?^4ZJZK@URPF^ MZACXJ6>]<'D-XB4OHMQT(,W?-!JE;N/US$%HK[T[/S MUND)?I7D8G\\:K5/ZN^:\:_P#]>,U[GS25B8("P^"&+XT#H!67A\W-49,%R' M-QZ;/'$JBD+0;7:B8%QZ:E%IMWPOE71OE4JZ1PO*+20E9LW@UK(VFI&-92;2 MU-X#*:+E/0O\4BHQQ*PNOI4D0_I@@BO'/HIUU,1`!*LPC.^%SGS&=( MG=/C.K`ZS92P+#(P/+%Y\\)E!`KO"*V5PAGTZS=Y(%KT+I6[=Z&ULXAF.R:% M:R#'[_M,G5MV';>L0=+-;&F=663IS,]99[:[/88^@7H:!;WW<*0LC*?1&/[K MCX%PQMXHL%5__-OUY#(8H]*/"NUZK&G1/#EB;3/>OITLUA5RU=\C!+&:XE_6 M)29+V7&-'1]VZK+8 MU;R`N_5SL"MN^5[BK[I*_%6E^,,6T@+030I`D\UU=T!&N:C?'Q3Q6:::VG,L M#ESQBMJH.&[1`L]R7,V6&NW33J=K<@M5LGO>[)Q3PJ?)+OWU7?V\\=;^^"I\ M*`E'A]"OQ-4DF,K@,K,%K#`D8M++X.!92HCSZN)GFM>7/9#S4#NH@)U.L[,) MOQJG)Z];;[IO-[E#<%@J#/NS"+4"SOKZM-UE/KTI"[/8QU^MD\;QQ1%6]+,F MZ'"G%Q80.^GI!*_5Y%(2KMW]A%JS3JBZD:30W3=70#4BO>R<)'=WW65G5<*< M^H"WB@,K4@V?6-V*"\*CXNY9%IAU05!6!,M#KN04_6%C[$^OYD,\#04#X<]F MP:P[\6;O"?=*7S3;35IY&.F*C";L'.%\%@\G:'_LC;TH,I_1`[(7S/IVRF** M2-)6`CZ\Y->XF"*4PS0_0Q!ZORY\N\)H=#7UT*7=+D022D^3Z6D;5HHY0X&RPEF`*/:X MAM*@M5*L5IQ*<<\6[,7J/B99MD6QT>1$%XM'1)7&DQFS*1],LBOA-,I+V.@8 M1SE>L8/OQL5-Z;*8FNJ<>F-YJ&]X[U6DOD@&H&W2J4"[=02ZQ@]V)+&,.O@" MQFQ<&<7D";>N:O%>F[>V:O/6UK9,$)>L[;L?V[Z9&7D#HQI:2U&FM+H@^KZ@ M1S`IBVM5#/-I6>P]P(3R'[VIE@:\@ZWZ-ACW.6)CV&,7!0QR*=;)7FZ=`XW8 M_3<6<@4+.VLTE4:L770'M(A&OMOS2-UE$>)TG(CT[BU5:A0:PYQWT2\_[")8 M1.R%4]PBQ%__7H']DKLB%;RO;X7L2X3^2WVJM\];KUN-5O)C+^S"P6\4#677 M^HX)W!;[:Y$C=6(9R[2W;P7U*^BWWA9YC:$S8\*?L_G6$8CPB\@'=)DZ'J<\ M*^?:$>Q2HY@JURS+0M8\]"JD4Q4I0E;4Q1*612T/&256I>*4JL6<(-%9;C22 M)FK%?:=F'!34:",?7R,5]'7B35N^=.O8%#AMLM_&%KH?F&A89+2_\1I#F395 M5>\P\I8VV*+'[=]"(`[8'$B+D=BP%DH[?G!^%=H8/VYJ:[&4Z(E9C?=!^/+C M.F)7^-^H!P[$'ZT5J]:-R9]P`O2PZ0^%LIPK])^X1--9(7-&+.?-1%4/,HUW MHK<:T-M^Q;:N9EAK>EW1_([O>5;&`$?L:P[#*7M(09VEA83(BWL/*R-S;"P) M;6]7I0PB:WO0^UK,C/KVO<\,K?V4(TAJ'@ALW7MR[8-;O5?`ER67\17K,MYN M)ZV%E.(Q7W(S&TTD?3$O'=A`T$@/*6IWWW7V+;\!%!#:\9>\!^6!-!.<504` ME9JH(_CVDN(.*RQ:@^\J]073`1MM%3;JC@D?@0KQEG[V:T7BC`WY<7M3R:DZ MIIA`$W#>IDBE[X%ROK&C:_$0-?D_PA`3(UQOK,=&N97$J3H4SY*C%5L/,MXT M6Z,>708!`C",(G5HT)@I4ALM5AS7=14=Y(QC#5UC,$'K:SP>BM>TEL`&C0'I M6K$L%+S),`@(2B%<1$.)+F@D5J`CRJ(/VDO6(V4?Y4(^1!_3"_,`?4TN`74' M2YH^J=DGFTY'X:O10I2*CIN(@:L4LU=*13M47[2'OHG]JX+`JCBQ.G*KC%!B M+8OVJ*/!OQ+AJM&C-9*M5]#=%\*/7_K^5)L`HD/3163B&].0RI;/U4,,B2.8 MVGOL5^VR;R^GS&G&O_4K#YSR/\*(/VWUXX][%HEKOV2L+0CMRNQ9"`V)IR;G M11+:6L"26#-^J`]LY5W'W2UF;+0'Z$76CLOI2PS5G?&R'UCNQZIF,7T23\15 MV>G['W:FB_'XV?>PQD=^#U@1_'.`IA7[&,><#8IWYG#``A6B7J][Q6)IU$UD M+Q4/8&DI>X)(J!7K>@J-AB6?DSBO]/PC^*ES=#D"F1&#HHK)VFV+E`G)6$(^ MPK$-,L7RA-?L@[K1V*2.B=>HH'>"P?PC0H&\1H=&CSV16]/>2[X`)#-@G#^\ M]E;0M6].+D2C(7/P#XH33-<&LKY#<1TL1,_#J)+]$5[J72[0'9I0('=@&*`! MC@;74`$D+2,Z%/Z($/T4IEW)$>@""_O[&IV?`Z)K!!+SIM=B[,U-UM0HS6#ZRNES M&(3J;6"N40CA(#Y8C!'$$8-F?=\Z?WMZ<2[J)S^*[^MMM#CX\9#6"5'N*9@< M!8B8A.,1GKOIO#Z_1AO0;?&NV6Z\A1+U;UO'K?,?L>NO6^1S02LQ\#5C!P_T1UBZ"KHT1,_J# MCW>*_@B#/'I`E^'UZ@7"J23=BTB19^\0SJQL%TP$U3@]^[%U\H;1,*?!W!$? M9R-$R0Q6K*8C8">>^S!5OC@;>SU?%$1G@47+Y2).^"K3"@U]3&C*J/Q!_RU' M_-&`B!>-HWE/P9:;8:A4&@QC0^(0(@G129H93,G'X0B#KI.H9&J M3\^>T>QHV-/\[F6&^EQ1APK8*3UB/%`-:/9L&TP(PIP7PZ@\X&`S*>^\1 MR^MO=2D6&SN%3DF`KJ906[<8A=5&4<(KK=QJ;$3>)'CW%OPOU'7UY\%L4Y_C M-O.KZ_MC/ZLZ1.FT^J'BGV2">^:4S6@Q6E%,/NHI4""&!L^NR@ZXEU[Y+1-[ M+[?L?';]*<55`+JEI;F".HAX327R?(D$A-5*L:DBBX(^AC&X\:'#$047?Y(1 M@*'2AL9IDWP$\2(DU89PR/2NT%=DID"5!8CWU@\Z!W$UR]Y1Y3IJ-%-Y+(-K ME:T3C+W9*-JY:*5R)ZPAH83%FH7=("*YQSJE:8*VV8BF2;+$IA==*T!F#HFE M]B5P3XQXA@IL81X44(^=>&&H(#^YY6SFO&;%&?Z'-*#"F,3\A@WL%`5)&"/. M!+$>9F24FSJYR[.R*DI)TIR-C->TQC! M,M88S._:]J=PKAC@>QBKA'G[JUC>$HZ7V1.[/BI.Y>[4G14L,[=9 M54X!(&0P[\6G,_L0)?I`+Z:W[\BMN'Q>VW9APY+O MT.YJ";&\:5W^7JVO%##+&U?%4VU_Y8^1(<>Y.SK06")`LUG)ANUO>&!!KW-\ M+TLP\O[,&\S%+N/D3E#]!]UZ>A5Q)70T9$C]OF'IT[\BNS9<-]8<"C>>[+?! M1PK2G,OFOTF"N/_G,.B_+'_6[-+@W^?Q:D>\0$89BZJA^SQ+AG_!!Q> M0^[_/ZO_<[#ZM&J..&BLRANV'DF0NM%4?RN]_&FW4OV7%`)U]28)7#MB0.B+ MZ>@WT4)A,:6[-F\L-BY:FZI2ARXS6QS0E2NA&'K0*1`.J+)3C!&\QB08YXBK MOIM$L`6"2853TS1(28G;"@E^#]>SKE:#_B\W[Y2CKM!L+Y4BGR(]?A?2_9@$ M@P/GPYO,$M;QP"[PB`*$0L53U!G@4`CTC5EB[,H*YX%K(5Z)9NODN_JQ">,A MB;G@I@)PJ-H+_]1MI*NE4,#6QG_!)7@7F%@?J59RJW^&=3\3UG@/.<'*N[U- M:3>ZKF0X>JL/]K#NP:,?2K3BA><3B56R\9Z+,(BBT>78U[`SL35X$L&*@_[R MA"KV^K,*U,\@2#^+`%TM.'7L*R4@K9>@_\:+IW`6?!CU?>OE%=&VZ(4,JXM' MH(E)H:[MG#G)2W&UL\*(I9<0/OC//$NA)G^#\:P &=%/7V``` ` end