diff options
Diffstat (limited to 'meta/packages/gcc/gcc-4.3.1/debian/libjava-loading-constraints.dpatch')
| -rw-r--r-- | meta/packages/gcc/gcc-4.3.1/debian/libjava-loading-constraints.dpatch | 431 |
1 files changed, 431 insertions, 0 deletions
diff --git a/meta/packages/gcc/gcc-4.3.1/debian/libjava-loading-constraints.dpatch b/meta/packages/gcc/gcc-4.3.1/debian/libjava-loading-constraints.dpatch new file mode 100644 index 0000000000..85f13ebe41 --- /dev/null +++ b/meta/packages/gcc/gcc-4.3.1/debian/libjava-loading-constraints.dpatch | |||
| @@ -0,0 +1,431 @@ | |||
| 1 | #! /bin/sh -e | ||
| 2 | |||
| 3 | # DP: Reimplement loading constraints (taken from the trunk). | ||
| 4 | |||
| 5 | dir= | ||
| 6 | if [ $# -eq 3 -a "$2" = '-d' ]; then | ||
| 7 | pdir="-d $3" | ||
| 8 | dir="$3/" | ||
| 9 | elif [ $# -ne 1 ]; then | ||
| 10 | echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" | ||
| 11 | exit 1 | ||
| 12 | fi | ||
| 13 | case "$1" in | ||
| 14 | -patch) | ||
| 15 | patch $pdir -f --no-backup-if-mismatch -p0 < $0 | ||
| 16 | uudecode $0 | ||
| 17 | tar -xv -f class-loader-classes.tar.bz2 -C ${dir}libjava | ||
| 18 | rm -f class-loader-classes.tar.bz2* | ||
| 19 | ;; | ||
| 20 | -unpatch) | ||
| 21 | patch $pdir -f --no-backup-if-mismatch -R -p0 < $0 | ||
| 22 | ;; | ||
| 23 | *) | ||
| 24 | echo >&2 "`basename $0`: script expects -patch|-unpatch as argument" | ||
| 25 | exit 1 | ||
| 26 | esac | ||
| 27 | exit 0 | ||
| 28 | |||
| 29 | 2008-03-13 Tom Tromey <tromey@redhat.com> | ||
| 30 | |||
| 31 | * java/lang/natClassLoader.cc (_Jv_RegisterInitiatingLoader): | ||
| 32 | Check loading constraints. | ||
| 33 | (_Jv_CheckOrCreateLoadingConstraint): New function. | ||
| 34 | * java/lang/ClassLoader.java (loadingConstraints): New field. | ||
| 35 | * link.cc (_Jv_Linker::find_field): Use | ||
| 36 | _Jv_CheckOrCreateLoadingConstraint. | ||
| 37 | (_Jv_Linker::check_loading_constraints): New function. | ||
| 38 | (_Jv_Linker::resolve_method_entry): Use | ||
| 39 | check_loading_constraints. | ||
| 40 | (_Jv_Linker::append_partial_itable): Likewise. | ||
| 41 | (_Jv_Linker::layout_vtable_methods): Likewise. | ||
| 42 | * include/jvm.h (_Jv_Linker::check_loading_constraints): Declare. | ||
| 43 | (_Jv_CheckOrCreateLoadingConstraint): Declare. | ||
| 44 | |||
| 45 | --- libjava/include/jvm.h.orig 2008-03-21 22:09:54.249100837 +0100 | ||
| 46 | +++ libjava/include/jvm.h 2008-03-21 22:10:20.739500439 +0100 | ||
| 47 | @@ -1,6 +1,6 @@ | ||
| 48 | // jvm.h - Header file for private implementation information. -*- c++ -*- | ||
| 49 | |||
| 50 | -/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation | ||
| 51 | +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation | ||
| 52 | |||
| 53 | This file is part of libgcj. | ||
| 54 | |||
| 55 | @@ -265,6 +265,7 @@ | ||
| 56 | jclass, jclass *); | ||
| 57 | static _Jv_Field *find_field(jclass, jclass, jclass *, _Jv_Utf8Const *, | ||
| 58 | _Jv_Utf8Const *); | ||
| 59 | + static void check_loading_constraints (_Jv_Method *, jclass, jclass); | ||
| 60 | static void prepare_constant_time_tables(jclass); | ||
| 61 | static jshort get_interfaces(jclass, _Jv_ifaces *); | ||
| 62 | static void link_symbol_table(jclass); | ||
| 63 | @@ -557,6 +558,9 @@ | ||
| 64 | jboolean is_jni_call = true, | ||
| 65 | jclass iface = NULL); | ||
| 66 | |||
| 67 | +extern void _Jv_CheckOrCreateLoadingConstraint (jclass, | ||
| 68 | + java::lang::ClassLoader *); | ||
| 69 | + | ||
| 70 | extern jobject _Jv_NewMultiArray (jclass, jint ndims, jint* dims) | ||
| 71 | __attribute__((__malloc__)); | ||
| 72 | |||
| 73 | --- libjava/java/lang/ClassLoader.h.orig 2008-03-21 22:09:54.249100837 +0100 | ||
| 74 | +++ libjava/java/lang/ClassLoader.h 2008-03-21 22:10:20.749500589 +0100 | ||
| 75 | @@ -86,6 +86,7 @@ | ||
| 76 | void checkInitialized(); | ||
| 77 | public: // actually package-private | ||
| 78 | ::java::util::HashMap * __attribute__((aligned(__alignof__( ::java::lang::Object)))) loadedClasses; | ||
| 79 | + ::java::util::HashMap * loadingConstraints; | ||
| 80 | ::java::util::HashMap * definedPackages; | ||
| 81 | private: | ||
| 82 | ::java::lang::ClassLoader * parent; | ||
| 83 | --- libjava/java/lang/ClassLoader.java.orig 2008-03-21 22:09:54.249100837 +0100 | ||
| 84 | +++ libjava/java/lang/ClassLoader.java 2008-03-21 22:10:20.749500589 +0100 | ||
| 85 | @@ -1,5 +1,5 @@ | ||
| 86 | /* ClassLoader.java -- responsible for loading classes into the VM | ||
| 87 | - Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software Foundation, Inc. | ||
| 88 | + Copyright (C) 1998, 1999, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. | ||
| 89 | |||
| 90 | This file is part of GNU Classpath. | ||
| 91 | |||
| 92 | @@ -45,6 +45,7 @@ | ||
| 93 | |||
| 94 | import java.io.IOException; | ||
| 95 | import java.io.InputStream; | ||
| 96 | +import java.lang.ref.WeakReference; | ||
| 97 | import java.net.URL; | ||
| 98 | import java.nio.ByteBuffer; | ||
| 99 | import java.security.CodeSource; | ||
| 100 | @@ -130,6 +131,15 @@ | ||
| 101 | final HashMap loadedClasses = new HashMap(); | ||
| 102 | |||
| 103 | /** | ||
| 104 | + * Loading constraints registered with this classloader. This maps | ||
| 105 | + * a class name to a weak reference to a class. When the reference | ||
| 106 | + * is non-null, it means that a reference to the name must resolve | ||
| 107 | + * to the indicated class. | ||
| 108 | + */ | ||
| 109 | + final HashMap<String, WeakReference<Class>> loadingConstraints | ||
| 110 | + = new HashMap<String, WeakReference<Class>>(); | ||
| 111 | + | ||
| 112 | + /** | ||
| 113 | * All packages defined by this classloader. It is not private in order to | ||
| 114 | * allow native code (and trusted subclasses) access to this field. | ||
| 115 | */ | ||
| 116 | --- libjava/java/lang/natClassLoader.cc.orig 2008-03-21 22:09:54.249100837 +0100 | ||
| 117 | +++ libjava/java/lang/natClassLoader.cc 2008-03-21 22:10:20.749500589 +0100 | ||
| 118 | @@ -1,6 +1,6 @@ | ||
| 119 | // natClassLoader.cc - Implementation of java.lang.ClassLoader native methods. | ||
| 120 | |||
| 121 | -/* Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation | ||
| 122 | +/* Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2008 Free Software Foundation | ||
| 123 | |||
| 124 | This file is part of libgcj. | ||
| 125 | |||
| 126 | @@ -41,6 +41,7 @@ | ||
| 127 | #include <java/lang/StringBuffer.h> | ||
| 128 | #include <java/io/Serializable.h> | ||
| 129 | #include <java/lang/Cloneable.h> | ||
| 130 | +#include <java/lang/ref/WeakReference.h> | ||
| 131 | #include <java/util/HashMap.h> | ||
| 132 | #include <gnu/gcj/runtime/BootClassLoader.h> | ||
| 133 | #include <gnu/gcj/runtime/SystemClassLoader.h> | ||
| 134 | @@ -143,7 +144,21 @@ | ||
| 135 | // them later. | ||
| 136 | return; | ||
| 137 | } | ||
| 138 | - loader->loadedClasses->put(klass->name->toString(), klass); | ||
| 139 | + | ||
| 140 | + JvSynchronize sync (loader->loadingConstraints); | ||
| 141 | + | ||
| 142 | + using namespace java::lang::ref; | ||
| 143 | + | ||
| 144 | + jstring name = klass->getName(); | ||
| 145 | + WeakReference *ref = (WeakReference *) loader->loadingConstraints->get (name); | ||
| 146 | + if (ref) | ||
| 147 | + { | ||
| 148 | + jclass constraint = (jclass) ref->get(); | ||
| 149 | + if (constraint && constraint != klass) | ||
| 150 | + throw new java::lang::LinkageError(JvNewStringLatin1("loading constraint violated")); | ||
| 151 | + } | ||
| 152 | + loader->loadingConstraints->put(name, new WeakReference(klass)); | ||
| 153 | + loader->loadedClasses->put(name, klass); | ||
| 154 | } | ||
| 155 | |||
| 156 | // If we found an error while defining an interpreted class, we must | ||
| 157 | @@ -156,6 +171,46 @@ | ||
| 158 | loader->loadedClasses->remove(klass->name->toString()); | ||
| 159 | } | ||
| 160 | |||
| 161 | +// Check a loading constraint. In particular check that, if there is | ||
| 162 | +// a constraint for the name of KLASS in LOADER, that it maps to | ||
| 163 | +// KLASS. If there is no such constraint, make a new one. If the | ||
| 164 | +// constraint is violated, throw an exception. Do nothing for | ||
| 165 | +// primitive types. | ||
| 166 | +void | ||
| 167 | +_Jv_CheckOrCreateLoadingConstraint (jclass klass, | ||
| 168 | + java::lang::ClassLoader *loader) | ||
| 169 | +{ | ||
| 170 | + // Strip arrays. | ||
| 171 | + while (klass->isArray()) | ||
| 172 | + klass = klass->getComponentType(); | ||
| 173 | + // Ignore primitive types. | ||
| 174 | + if (klass->isPrimitive()) | ||
| 175 | + return; | ||
| 176 | + | ||
| 177 | + if (! loader) | ||
| 178 | + loader = java::lang::VMClassLoader::bootLoader; | ||
| 179 | + jstring name = klass->getName(); | ||
| 180 | + | ||
| 181 | + JvSynchronize sync (loader->loadingConstraints); | ||
| 182 | + | ||
| 183 | + using namespace java::lang::ref; | ||
| 184 | + | ||
| 185 | + WeakReference *ref = (WeakReference *) loader->loadingConstraints->get (name); | ||
| 186 | + if (ref) | ||
| 187 | + { | ||
| 188 | + jclass constraint = (jclass) ref->get(); | ||
| 189 | + if (constraint) | ||
| 190 | + { | ||
| 191 | + if (klass != constraint) | ||
| 192 | + throw new java::lang::LinkageError(JvNewStringLatin1("loading constraint violated")); | ||
| 193 | + // Otherwise, all is ok. | ||
| 194 | + return; | ||
| 195 | + } | ||
| 196 | + } | ||
| 197 | + // No constraint (or old constraint GC'd). Make a new one. | ||
| 198 | + loader->loadingConstraints->put(name, new WeakReference(klass)); | ||
| 199 | +} | ||
| 200 | + | ||
| 201 | |||
| 202 | // Class registration. | ||
| 203 | // | ||
| 204 | --- libjava/link.cc.orig 2008-03-21 22:09:54.249100837 +0100 | ||
| 205 | +++ libjava/link.cc 2008-03-21 22:24:51.692638568 +0100 | ||
| 206 | @@ -246,13 +246,9 @@ | ||
| 207 | if (_Jv_CheckAccess (klass, *found_class, the_field->flags)) | ||
| 208 | { | ||
| 209 | // Note that the field returned by find_field_helper is always | ||
| 210 | - // resolved. There's no point checking class loaders here, | ||
| 211 | - // since we already did the work to look up all the types. | ||
| 212 | - // FIXME: being lazy here would be nice. | ||
| 213 | - if (the_field->type != field_type) | ||
| 214 | - throw new java::lang::LinkageError | ||
| 215 | - (JvNewStringLatin1 | ||
| 216 | - ("field type mismatch with different loaders")); | ||
| 217 | + // resolved. However, we still use the constraint mechanism | ||
| 218 | + // because this may affect other lookups. | ||
| 219 | + _Jv_CheckOrCreateLoadingConstraint (klass, (*found_class)->loader); | ||
| 220 | } | ||
| 221 | else | ||
| 222 | { | ||
| 223 | @@ -269,6 +265,23 @@ | ||
| 224 | return the_field; | ||
| 225 | } | ||
| 226 | |||
| 227 | +// Check loading constraints for method. | ||
| 228 | +void | ||
| 229 | +_Jv_Linker::check_loading_constraints (_Jv_Method *method, jclass self_class, | ||
| 230 | + jclass other_class) | ||
| 231 | +{ | ||
| 232 | + JArray<jclass> *klass_args; | ||
| 233 | + jclass klass_return; | ||
| 234 | + | ||
| 235 | + _Jv_GetTypesFromSignature (method, self_class, &klass_args, &klass_return); | ||
| 236 | + jclass *klass_arg = elements (klass_args); | ||
| 237 | + java::lang::ClassLoader *found_loader = other_class->loader; | ||
| 238 | + | ||
| 239 | + _Jv_CheckOrCreateLoadingConstraint (klass_return, found_loader); | ||
| 240 | + for (int i = 0; i < klass_args->length; i++) | ||
| 241 | + _Jv_CheckOrCreateLoadingConstraint (*(klass_arg++), found_loader); | ||
| 242 | +} | ||
| 243 | + | ||
| 244 | _Jv_Method * | ||
| 245 | _Jv_Linker::resolve_method_entry (jclass klass, jclass &found_class, | ||
| 246 | int class_index, int name_and_type_index, | ||
| 247 | @@ -359,6 +372,11 @@ | ||
| 248 | throw new java::lang::NoSuchMethodError (sb->toString()); | ||
| 249 | } | ||
| 250 | |||
| 251 | + // if (found_class->loader != klass->loader), then we must actually | ||
| 252 | + // check that the types of arguments correspond. JVMS 5.4.3.3. | ||
| 253 | + if (found_class->loader != klass->loader) | ||
| 254 | + check_loading_constraints (the_method, klass, found_class); | ||
| 255 | + | ||
| 256 | return the_method; | ||
| 257 | } | ||
| 258 | |||
| 259 | @@ -891,7 +909,8 @@ | ||
| 260 | continue; | ||
| 261 | |||
| 262 | meth = NULL; | ||
| 263 | - for (jclass cl = klass; cl; cl = cl->getSuperclass()) | ||
| 264 | + jclass cl; | ||
| 265 | + for (cl = klass; cl; cl = cl->getSuperclass()) | ||
| 266 | { | ||
| 267 | meth = _Jv_GetMethodLocal (cl, iface->methods[j].name, | ||
| 268 | iface->methods[j].signature); | ||
| 269 | @@ -913,6 +932,9 @@ | ||
| 270 | itable[pos] = (void *) &_Jv_ThrowAbstractMethodError; | ||
| 271 | else | ||
| 272 | itable[pos] = meth->ncode; | ||
| 273 | + | ||
| 274 | + if (cl->loader != iface->loader) | ||
| 275 | + check_loading_constraints (meth, cl, iface); | ||
| 276 | } | ||
| 277 | else | ||
| 278 | { | ||
| 279 | @@ -1467,6 +1489,11 @@ | ||
| 280 | sb->append(_Jv_GetMethodString(declarer, super_meth)); | ||
| 281 | throw new VerifyError(sb->toString()); | ||
| 282 | } | ||
| 283 | + else if (declarer->loader != klass->loader) | ||
| 284 | + { | ||
| 285 | + // JVMS 5.4.2. | ||
| 286 | + check_loading_constraints (meth, klass, declarer); | ||
| 287 | + } | ||
| 288 | } | ||
| 289 | } | ||
| 290 | |||
| 291 | |||
| 292 | begin 644 class-loader-classes.tar.bz2 | ||
| 293 | M0EIH.3%!62936;AC>/P`$B'_____________________________________ | ||
| 294 | M________X!6?>GEKK>IQ%5[=.%0070O6<+;>];;V[[P&^V:]RKXV;8WK.('; | ||
| 295 | M!H:"@#;-,'G=N]V!J:30!&B:8AJGFF0-)HGFI/0Q/5/*;3:IY3U-M1,FI^J9 | ||
| 296 | MXE/`U/5!^J>IYJ>IIIM)LBGIE-IZ)F13]3U3>I-/94:>4>F9)IZDT]0]IJ@V | ||
| 297 | MIXH&TGE-/3T:HTQ/4]&C1IJ/4:`T031-,"9":8FIZ&2GM)IZ3$TR:FU&C(GM | ||
| 298 | M*/4]1F:4]$>H>4]1X4-I!M1Z&4-!ZC1D]1H]"!B:'H3`:3(,F:FT0>4TQ#0! | ||
| 299 | MB-/2:;4T&Q)IZ@:$:!!-11ZGA1C4](V4-`]3(/:H]1Z@`!D`!H:`:`#3T0`` | ||
| 300 | M!H`!H````]0#30T``]0&@-`-`--`:`)-20C4*>1HRIZGJ#3:GFE,F::@PAZ0 | ||
| 301 | M'J#)Z@TTT!D;4/1-J>IH!ZAH:`T/*`-#0```!Z@`&FC0````&@!D!H`$```` | ||
| 302 | M``````!,```````````F``````````````````$P$P)$DT)IH),-)IDTT(VF | ||
| 303 | M(1Z*>TIZ3R3PIDT&(#33$T>D&C0R-`-`!H````!H`:``&F@````````:`+40 | ||
| 304 | MP,AXAHV[384=&=*:I_H[F;&$@=O37@`S\@]IP%T.,X'0,ER*QC?1QSRUW6N" | ||
| 305 | M,PD32^QGX&7VT)L,"HQLLV_A$&=,*!-;&"*90<G]>NL**ZQZ$2E+7^&68,XD | ||
| 306 | MZ2L-J&VEA="HDKM#=(RL%<VYQV(N8+J6"[8R+"%8U*QHFMD@<E0,.=)F3!)` | ||
| 307 | M2:-(NGN;%KG4O>]F7&*"*JQ;(5';J(%2;Q.A.*U0,-@1P8$.WD]@LZ*(+8/Q | ||
| 308 | MM2^67GXUDF$[M<L>V*91J,-Q06UU8-K,$JF";`4%N=>X=8:D)$PT3#&JK1PF | ||
| 309 | M`6FCDVM\`OR89!US!(FP$DN'GR:J3I?3Z^*W$,PN@9,1IT2%8*V!L&,O3JI5 | ||
| 310 | M9V7FG=(-/TD2LS&X4'>0H"1[(-_EJ1(\?O,8Y'5]&9\O%]=JW;YJ->]TMO&3 | ||
| 311 | MUW0O>4K#;_1LB0M"2)(89D*IVLG-0=09=D.?N@!8^15(J,.O%"N5XG;T:=]U | ||
| 312 | MW"WV<%9HYM;QMB!+Y"WJQHK6!K:^WW/3<K1[R2NUV5Q5XWM:C9US`BZ29,2Z | ||
| 313 | M,W`U*6I`\.)#ZWG*.&8<>,V*>OSZ"6BLCN=38I2D'=Y:$6$(:)"SOK,X#:Q[ | ||
| 314 | M+:)P*%QZF^?P"D*K7+,D3[+;EK-FHG=U,%,@9&1F0,#/U#$`.FFE[,JK"!;O | ||
| 315 | M:9GS/GY-9C;[R4!XZB(Z7S3,MV<H'JQ5!^-/Z_S*OA6F/Z#L-&(@1B!B&I?D | ||
| 316 | M1,P9+ASVFS.J%9/AIE.B2<YO]HH+?<\<?D66$Z(3O,VDA!$4IK@`N#!"Q+2) | ||
| 317 | M&,TKEB:QKMEEDYVU708``T,-V>8K7!X,$95GI;Z8J?DZ'P>+Y7?/6?7?`%9* | ||
| 318 | M`^02!IR^$4LLMO"VFI?+^O'W_728W=<'7?#F4``8K;#,EEEHL;,OS_V0!U'X | ||
| 319 | MYR=^^ALB"$9<.8A)%`^@O/])`I]DQ+I`.X^K==RM9DILN(F?W,LG(DP5'`39 | ||
| 320 | M$54$10]$AH`8>^6;0K'NX(6U0;O<1<#[O)=MYKUGIFC`-RI-]Z5NE8I*`7N\ | ||
| 321 | MP.=_L@H!(;5?#6K\UD`25NI!)WMYH^/Y7=]5<O$"K1R@9PZFDA#.`N]O_\Z1 | ||
| 322 | M5X[\?%[EV]8@`:#U6-VAH+P>%:<=$_ZZM,#Q$C&]ER8U+I;GC=BY\)=H@!G: | ||
| 323 | M*::N"G;4X5`'0PN6Y<5VGN=;P,')31=0`V9$D"%)UM2:R&$8"]5YMORU$"HS | ||
| 324 | M/7UO=R$Q$,I:0QD5]=7*Y2''F17^;O;,JK@Z,(C62SN+OL]]M(NSD4%Q[B&2 | ||
| 325 | M&2J<!4`*&V6#/)@U5/-SGZ,GNKU8`HV>IK]V"1%2$IU5[:31T2<S6K+")\%Y | ||
| 326 | M#H*#TC,$Y%AL^4HT]([O;19QG:88**(!.S&][,+]E2-R#F?WE!7(H!N&VPLV | ||
| 327 | M:5H'6`P#*;'%:/<V<#RW$_347>H]L.3$83K6I3-D=3N=JFGTF`<T#W[!!LRF | ||
| 328 | M<3"GD,TT;E*@;/BU"7<&PB<H(%M'@EMU`9U0"#,$?)/(&X4^G4XJA#FUBUHU | ||
| 329 | MH,!)CO.+>V`>"N?&!Q.>X?6?KJ..`4;;$P#0"V.W"?M+'?RZ%:A<*Y@_/`-1 | ||
| 330 | M!U]#N0@!1Z5JU84FUAMJ`C_Y")13(2'H+#8C>@3]R@@4/L(:^!\1'5FJ5""% | ||
| 331 | M5/?77,VOVZ+Z7SJ,D9`S`Z>`8PI`;JTREAX/[GX:)_=[$[<-,U(C#>L,/.[I | ||
| 332 | MXST?5M/GS,HN_X!^9_R3$X5;-TNB<<6FZ7C9DRXX^PX2A78UNM=M?^U9U/:- | ||
| 333 | M.BGXEFIAAS7^1P98&8F<.(/@68-LRLL`6'LGE>BHD.V)--&1CAQ`5<*>UII3 | ||
| 334 | M;XKW@2D6QLG#4MJX-TGPEENNNFN2Z:E*I0*&>SH,:=!$0,`E+UVIY/I['V)F | ||
| 335 | M%@TN]]O*>QD]2OR:[I]7UK/;V/8Z=%Z6_I_^M7'7]#2N#>(0,!RGW+Y'6]6^ | ||
| 336 | MP*;^-[NI.7#\YE(OUB-8VVHLD2-)U):CBZ/3>2,X&+^D\COQG4]".VQ-`W7L | ||
| 337 | M&77M;=\/N2ZO?FUO7_2QWP=O&<JZ%ZA!9\3'!8E3.JC*RDYQ\"H^A8;;(VN' | ||
| 338 | MSL2S[CA]/Q7.D88(G_Q`AR`J/-!7#&`]CFM=BW/^+&%I\ZVS\TV^=`497QDB | ||
| 339 | MQB)OYYXQM9X(2;`3")I1#'R#;LILI0HB:2ULME:82U%-$T-Y^3_4=QA;KP&L | ||
| 340 | M)^,`LN6+VBEYU2]-@\TK%F^9R/1[7$-*KD?@-PA337^CO+K!O@.UNA9L38QA | ||
| 341 | MT#RL>YIZ')R88;Z]NHM#E7[*!USJT=0I/%4I7'3FT[A+(F7#4WU'Y>'8F5', | ||
| 342 | MIRIO=[CWCAV69]2KI4GO%JIWS)^:<ZB0[NEK**[GW^4A,9`A+-$V4PC8P@3: | ||
| 343 | MO.(`P&L("Z&-;%R4`V2<9U(0Z7%&_8^HMAM;O"0R$<R_W@4O8FQT,FJ-U;'] | ||
| 344 | MU@.$9NK/KLX)/VW-597*N8.4YZQ%:C-I]@?%SN`S*?$[N^N^8[7X%N>?)DSJ | ||
| 345 | M'<J.U3Q,FO_DPKDJSLVFR!0C9K9?TN(.*G><EIEQ)E$L:1SGH*F:1#+TY=\8 | ||
| 346 | M?*X&7SXZU\A1Q[SEK@3/P1F//79$!8Z_JL^;`/S_O>!)&7"9$,C'XF[0&Z6. | ||
| 347 | MIL,Y:JX1*?TR(3\U!)1HCQ-A0C]'W]I+W2GJ-3&NB;I6+UGQV/_$[UUM(<ID | ||
| 348 | M8:0@`&Z`_-GG'3QTU+_VD@J(`^&9G.RZK/[3VF?RJ37#*SU$UU7P7WKWPEA< | ||
| 349 | MN^N95&Y[S^;?5J714Y4V@J/3P`L32#.8M#P+Z.3[UX?M/>?(AT56-55502B4 | ||
| 350 | MK>G@+3QZ44!S.&(-9,W;..KZW'+.G,;]92Q-69=O$!?631=T6+'<.,GG:6HO | ||
| 351 | M!D':\:*DSJ#RL!`2PQ-1MFA4%)53Q+;R<FDX^NBZ02].P+P8C5$%OL3X.Y%8 | ||
| 352 | MXV#T_RRBD1)VD/A>JYJKXF(=))L0%:%@`Z!5,1MX"Z2B-3Z.V,[R[:(T5:)0 | ||
| 353 | MKAA$^LR-1M)C@J+XG7_)Z4'N0%P/NY;N#UJ-%#I>^=G!W5S=*O369O/^]VVE | ||
| 354 | M'%CECI^"]&+I:WL02,K2))",3$77FCNYG&8Q=)IICOX>P-YY?.6.L(MY9V/B | ||
| 355 | ME2H0;X3J';+6J>JVK4?RX$EV>\C9^KQXJ]W#QE#/"+:C`S6M#WP;.FX0[8/V | ||
| 356 | MZ^JNNY/B3]F<O"V&KV%7AV\W&.Z#N$+Z#%;%'H)_U)G8]"/0B_HEGSQX1/(: | ||
| 357 | M(,Y1O\J.8MT<T8&!AQR`!@D1@B&..YV#9+S&8&/>!6S""+$0S3"]]@-4YZ6, | ||
| 358 | M.VB_>LTJJK`0(?B!@B#?>N)(N>\E4J@,._BEVJQH9UZGF6D$'Z#F]QO]_?IQ | ||
| 359 | MD076O?U[W!?)[*^XF<8A0H4U;M^"K7K0:I7F-^'G-9I]G:Z/9;9T``*$C`%! | ||
| 360 | M2;9@IRZ9_ORUU7;3?U+.EI<'D\[?+[=5MCM.-MU1[19N^%0*[>MOVF$EIN!E | ||
| 361 | M4)@+'!I4N40H0,$69!5%!8+)39(%1#]OD];SUTGE,O9K;7LG-Q;^V%>5+&P4 | ||
| 362 | MF&C+VR7:33*+2SR5DKOJ]'B=NGV/CQ4C&@D`8:(C&#;%REE^6Q<TPME.4-%# | ||
| 363 | M5?OH!4[CL*K]ECQ-XIEMMZK+NDSUQ*"E5@:B$T%9,Z_>>SZ/&Z9V[X'(8^BP | ||
| 364 | M_?G0U6+-"Q/,W-I6=R$@*MV07$R:%`Y:XT2B=!LL*]WAE43PQ%#1*?<.L^]< | ||
| 365 | M-!U=/D6T79D]QDY5_#6A71[3:$)$M&(8KHX:0`$1M!JM;9N=-:UG-K9MG6EI | ||
| 366 | M"VFV_U;S6E2[>$MRX9RAE#RTU@:[M1(^/X[-(XL#+X!!=EV9,%11E[0.WL^? | ||
| 367 | M_Y^OYWVR$\,1T)*#`4`%O&**@W(KLFW59#<UR7[GL$QP%K9(:2*0C!A!2$3Q | ||
| 368 | MU0ID-VG^6!9`%`%(]EH[\(=<2%U3V%J0"S%@+)%!^SBV/I9.$N,+R2*+(#&0 | ||
| 369 | MB@I!$$29N^_7S67?XYLWNIWNK9.<W/RK[<_R6ZYOI='"VL`-:,6`L)HH4B@7 | ||
| 370 | MEF@S[6.^MP0-%UARQ0+A666DRI*8!RI:@MNJVHRGQ?,>YX^[<8=P;[LS,J$% | ||
| 371 | MD%Y=*$F;!A*046"K%(==JE)%@=C3_2M($X7DB&J;=KAR#G47'5[FS2@:4<&\ | ||
| 372 | MSH1RE_"W+"L5].:MGA[[7[YQZ?VZ+70:1'7=/Z-?XMBM-S5[6K*IV&$9&`9B | ||
| 373 | M\,A$HS*E02:"IB--E8MJJ<\T(RZBYA55!0M5%7BH(QO,*7[B_T-0]5S?E2>[ | ||
| 374 | M9&;C5/=5^%MKY3,.9S65O+I#`7MA0O([NRNY6NW(=8FU2HZ^$:)+Y_1R6\G] | ||
| 375 | M[PJKY*'40F!3\;NY>'NI:'J'6_D#X[#">A'G"C&;=-WNHY9KDTO6PYR>C?;) | ||
| 376 | M@:F(];UJ![&U]?D*$^!#YF>;0CS;"`_!!@%[DM=CSW8"K\A.2,L$@U'2C9>- | ||
| 377 | M5U575S2TLO.YZ/4(,'1GA&">8.($J#2U]5>*=:;XW/)_3D;UA-IM=$O)'&1V | ||
| 378 | M^`2*P^&2C`L,NI&@8270C`)Y9+P&O3Y;2__9DF=-^6E20`RC"8,D#)O!-F/* | ||
| 379 | M=K*U3"@::!=GY60I$QD',R(TZH1S]9!40-03/9=02"G/IC.QOAE:2+WQDMB4 | ||
| 380 | M%PUB9.PWWK@TS-F9G%HC0/J((+8(+ED28-HK)E2K*%,8QHO/_G_O\=@_EYWD | ||
| 381 | MWF8O)Q,9\+A,1=91HR-U<P>K7WK^Q#N@,&K&/#80>J*$8\G+,<`%BB,<K8"2 | ||
| 382 | MQ5[A,T3*@.*(8>$D8@9F)-<X(:18KIF*93N2(BA@&AP`)QD(((L(!SYX1S5O | ||
| 383 | M@8YIB:PXDX3(94#/*:CRNW4%%6UPP;0FRR[U*\`M8YQ'([NHMRKDFR42L7.M | ||
| 384 | M,"Z4HQ$(HO:D!SLK">945F%4)"HG$G(=$Y[Z@6L,"]6]YI8:0M@9F4>JJIJH | ||
| 385 | M+;X`!(-#C<P5L,$!.T!*V-:K9J9`Q-/(YIG7X5:6&,I*B+EP4;[[KS2E<4;R | ||
| 386 | M!S01L9)A)1P"4*JR'=R.@)'541?OWBX,78[\B6%*.KDKP_^/JN]\M9Q.:J2L | ||
| 387 | MQ9O>"%NV-BP]W:.DD*#HJ.@HZ7.I73:LUN0G.$QK%!%!T,=KE4U,%4(NLA`W | ||
| 388 | M(=)+=M10:LDP9%I8I6GL5##!R;6-CTXFMM%DU1VUG<$1#/A?V.-PXIC*\2O= | ||
| 389 | M[,8=GI0@A@8Y&9@QLJG<>A.I<QIXYQ&#?\)0Q.4I:`..$'1%-@1$,%\7.#P9 | ||
| 390 | M"2OUTR%?6EMSOC#7N`8##D")5W$['#33:'D@5V5UC&17377$IZ<*KO5%T.$< | ||
| 391 | MIQ1&23.5N`D7Y0U>5XL,<<S7:,L:E54@8TM(0[J(-Q;*&5:AN1Z'P)SMUQEZ | ||
| 392 | M=C5C;U33J6-GW4Z+H=9^4V73=H\'-4:##I/TZO0UVC14>-VPI<7W%.XOO1## | ||
| 393 | M;):P\/79[M>6Y+$S%&118"CL#8B6L#.9HV7GX`"HZQ&EV0^,HIZD%SC3>X$E | ||
| 394 | MH4&V0J1-&J(P3O<W3J*BU=;[]Z#D>TEA4BYS9>D;V&&$WB2`-%6T".>F5<.I | ||
| 395 | M8L3-XI&_Q4^P%0"07]E9EMV!;<&-(VN/"#I`R^,@`5)H;,><7Q;+GTD=B | ||
| 396 | M`V+"<<"JMZY5JF.>NF$:&PXB6?`9-&=S&ERO,W0UR0;N$=?-'D;YZW%+FCQU | ||
| 397 | M=*Y>NRA"2[[KA8EF;_-=)FLIG`M=*(<)M$\U%D>N#0=N-5;Z2*DP"T9$1F"> | ||
| 398 | M(X152$R3EWXM--C#,5S%E**K76.*W%^I;$O]+8VF.6^ZR#5R61E0S,VK[RQM | ||
| 399 | M7=L"9>=^]K7H10F33U0JZH93NDD5(O@22#V(M=041?=BK)1%QG0,*JA$\`1* | ||
| 400 | M]GSC6*)"I:+F.E!F&-=64T,:>\Y*0$-R@;1!A.^BNH)7]^EC4F$OSULI!%J@ | ||
| 401 | MH@>8Y/3UQE()$44V`.&-IM`V$I85S"6`T\[9:&^P,HV>X16A[4I1N,?DM+1[ | ||
| 402 | MCIQ<"]=BB@$4CR8D@`B(.1``F<[G,Y$_S2)RS0,*3'QM?T:9Q?(U_1QQLG9Y | ||
| 403 | M>8S2S((#CDN/YUA)<L9M-0[BFMX6Z$*1O5;"$<>=61F['.V:"P6[/I$7AJ_E | ||
| 404 | M,21@U*X.$6W:IM'75C&!M-H!M#30AL#6-IO4J0->7T"JO+-ULS,XAIZ.(VSW | ||
| 405 | M+$+H9G0F30-I<*N.9XG*DD(NM&F;F"A`A>TE</4U[)BAW9DVKM&2G/B3.3BV | ||
| 406 | M;M-<DC$;G7QN@VK2#.Y`WQ2J-"G50AE7`A,PI(`I2X*!L0FTDF&MIUF`TR"! | ||
| 407 | M%XINHNT1AX5I4J*BI$D=FC<Y^*YM-]<J6LAEAEZDL3)<E`T$Q#JU*:R@*5D; | ||
| 408 | M0Q$Q%*5"I_F9I*ZK;(DZ7-J;*&38H8HA$"%/C.@5>ZX4BCEZA17:T&7(HD+= | ||
| 409 | ME9L`,-P9DD`$DAD<;X43%3,PB*0Q@%C,@F.L%%=5B,*#?F'&'GE(#,XVK8-C | ||
| 410 | M:`>?"V:6=OC"=>5",XU\^4`M2!;%4JV2%'=C@UE+K'P,/)W>S;!`4@<O1/`N | ||
| 411 | M&#&,)F48C/B(A@<7=9?%Y.X'+IK8:NC!PU=X^&DS0O9)3@PU#9!$I1!"&P), | ||
| 412 | M*QB0QDABQ:L(,<X\`T)HSMEC6+;ZMDK&Q,Z\;S=;`W$U>0D,P"%<QF!GZ):, | ||
| 413 | M#BERNM+4*T!+.,N90[:-?00]*<I#<99$2@RY$IWZBEEPB*:5.@@$J6B:3`5I | ||
| 414 | M28QR.(03!:/`X)J:Y+7X"I+:<IC)$@SJ]W<$3:!+&0-8Z3%P#(,@VPBJ6TNR | ||
| 415 | MY?)W-D17-VR&H*KP5`QQ:T6**28`&R!"0!@2@R<.A*QYEK@IAD2F8"&&TP)D | ||
| 416 | M@%0+&E!L`W$-"O>T!/8%JOEJ$58`J;,#4,AMC;:8$T$!)I4F_,[D+YA0V"19 | ||
| 417 | M4D8UEQ(+!BTC(P8KB)_!$Y]E`5,\1*A`Q11=(!R?EH(BI7!`%A&1((!QKJA/ | ||
| 418 | M!MT(QC)R8R:T`"N9NGE%*$%=6PPE`()2&]1)R,.;=MP4J>^B:0.3A7&BEG+9 | ||
| 419 | MYF#;#8(IM!)KP85"ABP515%5B**\[J^!=<KIM%-12+%6*KKZII"EA54TE55( | ||
| 420 | MI%JJ+5154M51J<Q==<6_%XR^Z^"LDE)2,83_E6L4>"W'!=JO+Q4%0>F[;:RF | ||
| 421 | M^WU6;_GRVY#D^OFGDO5A-"FJ5C37(Z95Y=0JBJGVL..V%W@61Z:"IXVX?;*A | ||
| 422 | M6\XAKU*F2D@F0"Q'2(2`\08UB^U]YL'NZ*)JW]"RYCB;U=S"<2EP+&689, | ||
| 423 | M)&JJKJMCURP6,1@ZAD1$1$``\(`E9&+=K5NV_R>85'/^FVXP5V&<S#:1L^F2 | ||
| 424 | M(>ON2G03L:#C.+,)EBMYTS[M-_Y!*X$F-D-?<]=X4WUL\JN7'<&"=IUNFD5! | ||
| 425 | M"/6'D.?C(^=%^9R`)4GE,Y#JIN&&;EW&A0TK&M.)18\?:!RN)([P%E%<()W2 | ||
| 426 | M^ND/$6-[M7U1G[UDX7.K8\YLL<_/3.KB*EO[;JKT1XLJN(%K2AYZ.SD\LM`: | ||
| 427 | M)RT%&#?Y!_Q_T'*;9T0\/O]JT-.PO'!$8&C<M&,C!13FRZ6*ZJ*:QO6#3[/% | ||
| 428 | M).[P;A<G":28QL]T-,$&+#AF4@55!HU4JU0LJ6M4L--JJ$+"+8::04D%6*+" | ||
| 429 | ?RU2TG1I:U$H06)<TB$BJ$Y,>E_^+N2*<*$A<,;Q^```` | ||
| 430 | ` | ||
| 431 | end | ||
