From 373750629b2ba23c2f2511031eaf2c10a12e4f49 Mon Sep 17 00:00:00 2001
From: pfavre
+ * ONLY USE IN NON-SECURITY RELEVANT CONTEXT!
+ *
+ * @param length desired array length
+ * @return random instance
+ */
+ public static Bytes unsecureRandom(int length) {
+ return random(length, new Random());
+ }
+
+ /**
+ * A new instance with pseudo random bytes using an unsecure random number generator.
+ * This may be used in e.g. tests to create predictable numbers.
+ *
+ * In production code use {@link #random(int)} per default.
+ *
+ * ONLY USE IN NON-SECURITY RELEVANT CONTEXT!
+ *
+ * @param length desired array length
+ * @param seed used to seed random number generator - using same seed will generate same numbers
+ * @return random instance
+ */
+ public static Bytes unsecureRandom(int length, long seed) {
+ return random(length, new Random(seed));
+ }
+
/**
* A new instance with random bytes.
*
diff --git a/src/test/java/at/favre/lib/bytes/BytesConstructorTests.java b/src/test/java/at/favre/lib/bytes/BytesConstructorTests.java
index d08d46f..aa4f8c8 100644
--- a/src/test/java/at/favre/lib/bytes/BytesConstructorTests.java
+++ b/src/test/java/at/favre/lib/bytes/BytesConstructorTests.java
@@ -34,6 +34,7 @@
import java.nio.IntBuffer;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
+import java.security.SecureRandom;
import java.text.Normalizer;
import java.util.Arrays;
import java.util.BitSet;
@@ -547,4 +548,25 @@ private void testUUID(UUID uuid) {
public void fromUUIDNullArgument() {
Bytes.from((UUID) null);
}
+
+ @Test
+ public void createSecureRandom() {
+ assertNotEquals(Bytes.random(16), Bytes.random(16));
+ }
+
+ @Test
+ public void createSecureRandomWithExplicitSecureRandom() {
+ assertNotEquals(Bytes.random(16, new SecureRandom()), Bytes.random(16, new SecureRandom()));
+ }
+
+ @Test
+ public void createUnsecureRandom() {
+ assertNotEquals(Bytes.unsecureRandom(128), Bytes.unsecureRandom(128));
+ }
+
+ @Test
+ public void createUnsecureRandomWithSeed() {
+ assertEquals(Bytes.unsecureRandom(128, 4L), Bytes.unsecureRandom(128, 4L));
+ assertNotEquals(Bytes.unsecureRandom(4, 3L), Bytes.unsecureRandom(4, 4L));
+ }
}
From 3b55099afbbb18fabe4d25e7bc794431c9452b49 Mon Sep 17 00:00:00 2001
From: pfavre
+ * E.g. 4 bytes will be packed to a length 1 float array:
+ *
+ * This conversion respects the internal byte order. Will only work if all bytes can be directly mapped to float,
+ * which means the byte array length must be dividable by 4 without rest.
+ *
+ * @return new float[] instance representing this byte array
+ * @throws IllegalArgumentException if internal byte length mod 4 != 0
+ */
+ public float[] toFloatArray() {
+ Util.Validation.checkModLength(length(), 4, "creating an float array");
+ return Util.Converter.toFloatArray(internalArray(), byteOrder);
+ }
+
/**
* If the underlying byte array is exactly 8 byte / 64 bit long, return the
* representation for a Java double value. The output is dependent on the set {@link #byteOrder()}.
@@ -1969,6 +1988,25 @@ public double toDouble() {
return internalBuffer().getDouble();
}
+ /**
+ * Converts the internal byte array to an double array, that is, every 8 bytes will be packed into a single double.
+ *
+ * E.g. 8 bytes will be packed to a length 1 double array:
+ *
+ * This conversion respects the internal byte order. Will only work if all bytes can be directly mapped to double,
+ * which means the byte array length must be dividable by 8 without rest.
+ *
+ * @return new double[] instance representing this byte array
+ * @throws IllegalArgumentException if internal byte length mod 8 != 0
+ */
+ public double[] toDoubleArray() {
+ Util.Validation.checkModLength(length(), 8, "creating an double array");
+ return Util.Converter.toDoubleArray(internalArray(), byteOrder);
+ }
+
/**
* Decodes the internal byte array to UTF-8 char array.
* This implementation will not internally create a {@link String}.
diff --git a/src/main/java/at/favre/lib/bytes/Util.java b/src/main/java/at/favre/lib/bytes/Util.java
index 70d35e0..f2419c3 100644
--- a/src/main/java/at/favre/lib/bytes/Util.java
+++ b/src/main/java/at/favre/lib/bytes/Util.java
@@ -719,6 +719,60 @@ static long[] toLongArray(byte[] bytes, ByteOrder byteOrder) {
return array;
}
+ /**
+ * Converts the byte array to an float array. This will spread 4 bytes into a single float:
+ *
+ *
+ * Analysis
+ *
+ * Analysis
+ *
+ * [b1, b2, b3, b4] = [float1]
+ *
+ *
+ * [b1, b2, b3, b4, b5, b6, b7, b8] = [double1]
+ *
+ *
+ * [b1, b2, b3, b4] = [float1]
+ *
+ *
+ *
+ *
+ * O(n)O(n)false
+ * [b1, b2, b3, b4, b5, b6, b7, b8] = [double1]
+ *
+ *
+ *
+ *
+ * O(n)O(n)false
a-f (also mixed case)0x which will be ignored
+ * Benchmark (byteLength) Mode Cnt Score Error Units
+ * EncodingHexJmhBenchmark.encodeBigInteger 4 thrpt 4 5675746,504 ± 842567,828 ops/s
+ * EncodingHexJmhBenchmark.encodeBigInteger 8 thrpt 4 1696726,355 ± 212646,110 ops/s
+ * EncodingHexJmhBenchmark.encodeBigInteger 16 thrpt 4 880997,077 ± 116768,783 ops/s
+ * EncodingHexJmhBenchmark.encodeBigInteger 128 thrpt 4 81326,528 ± 13169,476 ops/s
+ * EncodingHexJmhBenchmark.encodeBigInteger 512 thrpt 4 15520,869 ± 3587,318 ops/s
+ * EncodingHexJmhBenchmark.encodeBigInteger 1000000 thrpt 4 2,470 ± 0,110 ops/s
+ * EncodingHexJmhBenchmark.encodeBytesLib 4 thrpt 4 15544365,475 ± 1333444,750 ops/s
+ * EncodingHexJmhBenchmark.encodeBytesLib 8 thrpt 4 14342273,380 ± 1997502,302 ops/s
+ * EncodingHexJmhBenchmark.encodeBytesLib 16 thrpt 4 12410491,100 ± 1671309,859 ops/s
+ * EncodingHexJmhBenchmark.encodeBytesLib 128 thrpt 4 3896074,682 ± 453096,190 ops/s
+ * EncodingHexJmhBenchmark.encodeBytesLib 512 thrpt 4 909938,189 ± 137965,178 ops/s
+ * EncodingHexJmhBenchmark.encodeBytesLib 1000000 thrpt 4 465,305 ± 182,300 ops/s
+ * EncodingHexJmhBenchmark.encodeStackOverflowCode 4 thrpt 4 15917799,229 ± 1133947,331 ops/s
+ * EncodingHexJmhBenchmark.encodeStackOverflowCode 8 thrpt 4 14490924,588 ± 819188,772 ops/s
+ * EncodingHexJmhBenchmark.encodeStackOverflowCode 16 thrpt 4 12635881,815 ± 1545063,635 ops/s
+ * EncodingHexJmhBenchmark.encodeStackOverflowCode 128 thrpt 4 3807810,524 ± 499109,818 ops/s
+ * EncodingHexJmhBenchmark.encodeStackOverflowCode 512 thrpt 4 917914,259 ± 122729,496 ops/s
+ * EncodingHexJmhBenchmark.encodeStackOverflowCode 1000000 thrpt 4 471,778 ± 126,385 ops/s
+ */
+@State(Scope.Thread)
+@Fork(1)
+@Warmup(iterations = 2, time = 2)
+@Measurement(iterations = 4, time = 5)
+@BenchmarkMode(Mode.Throughput)
+@OutputTimeUnit(TimeUnit.SECONDS)
+public class EncodingHexJmhBenchmark {
+
+ @Param({"4", "8", "16", "128", "512", "1000000"})
+ private int byteLength;
+ private Map
- * Benchmark (byteLength) Mode Cnt Score Error Units
- * EncodingHexJmhBenchmark.encodeBigInteger 4 thrpt 4 5675746,504 ± 842567,828 ops/s
- * EncodingHexJmhBenchmark.encodeBigInteger 8 thrpt 4 1696726,355 ± 212646,110 ops/s
- * EncodingHexJmhBenchmark.encodeBigInteger 16 thrpt 4 880997,077 ± 116768,783 ops/s
- * EncodingHexJmhBenchmark.encodeBigInteger 128 thrpt 4 81326,528 ± 13169,476 ops/s
- * EncodingHexJmhBenchmark.encodeBigInteger 512 thrpt 4 15520,869 ± 3587,318 ops/s
- * EncodingHexJmhBenchmark.encodeBigInteger 1000000 thrpt 4 2,470 ± 0,110 ops/s
- * EncodingHexJmhBenchmark.encodeBytesLib 4 thrpt 4 15544365,475 ± 1333444,750 ops/s
- * EncodingHexJmhBenchmark.encodeBytesLib 8 thrpt 4 14342273,380 ± 1997502,302 ops/s
- * EncodingHexJmhBenchmark.encodeBytesLib 16 thrpt 4 12410491,100 ± 1671309,859 ops/s
- * EncodingHexJmhBenchmark.encodeBytesLib 128 thrpt 4 3896074,682 ± 453096,190 ops/s
- * EncodingHexJmhBenchmark.encodeBytesLib 512 thrpt 4 909938,189 ± 137965,178 ops/s
- * EncodingHexJmhBenchmark.encodeBytesLib 1000000 thrpt 4 465,305 ± 182,300 ops/s
- * EncodingHexJmhBenchmark.encodeStackOverflowCode 4 thrpt 4 15917799,229 ± 1133947,331 ops/s
- * EncodingHexJmhBenchmark.encodeStackOverflowCode 8 thrpt 4 14490924,588 ± 819188,772 ops/s
- * EncodingHexJmhBenchmark.encodeStackOverflowCode 16 thrpt 4 12635881,815 ± 1545063,635 ops/s
- * EncodingHexJmhBenchmark.encodeStackOverflowCode 128 thrpt 4 3807810,524 ± 499109,818 ops/s
- * EncodingHexJmhBenchmark.encodeStackOverflowCode 512 thrpt 4 917914,259 ± 122729,496 ops/s
- * EncodingHexJmhBenchmark.encodeStackOverflowCode 1000000 thrpt 4 471,778 ± 126,385 ops/s
+ * # Run complete. Total time: 00:22:00
+ *
+ * REMEMBER: The numbers below are just data. To gain reusable insights, you need to follow up on
+ * why the numbers are the way they are. Use profilers (see -prof, -lprof), design factorial
+ * experiments, perform baseline and negative tests that provide experimental control, make sure
+ * the benchmarking environment is safe on JVM/OS/HW level, ask for reviews from the domain experts.
+ * Do not assume the numbers tell you what you want them to tell.
+ *
+ * Benchmark (byteLength) Mode Cnt Score Error Units
+ * EncodingHexJmhBenchmark.encodeBigInteger 4 thrpt 3 9427359,108 ± 194693,624 ops/s
+ * EncodingHexJmhBenchmark.encodeBigInteger 8 thrpt 3 2638943,318 ± 15520,030 ops/s
+ * EncodingHexJmhBenchmark.encodeBigInteger 16 thrpt 3 2088514,337 ± 50090,292 ops/s
+ * EncodingHexJmhBenchmark.encodeBigInteger 128 thrpt 3 133665,420 ± 5750,982 ops/s
+ * EncodingHexJmhBenchmark.encodeBigInteger 512 thrpt 3 25807,764 ± 407,273 ops/s
+ * EncodingHexJmhBenchmark.encodeBigInteger 1000000 thrpt 3 4,178 ± 0,021 ops/s
+ * EncodingHexJmhBenchmark.encodeBouncyCastleHex 4 thrpt 3 14260598,238 ± 4113483,586 ops/s
+ * EncodingHexJmhBenchmark.encodeBouncyCastleHex 8 thrpt 3 10910660,517 ± 51077,989 ops/s
+ * EncodingHexJmhBenchmark.encodeBouncyCastleHex 16 thrpt 3 7501666,934 ± 938571,073 ops/s
+ * EncodingHexJmhBenchmark.encodeBouncyCastleHex 128 thrpt 3 1077236,523 ± 78734,473 ops/s
+ * EncodingHexJmhBenchmark.encodeBouncyCastleHex 512 thrpt 3 266238,359 ± 2544,657 ops/s
+ * EncodingHexJmhBenchmark.encodeBouncyCastleHex 1000000 thrpt 3 152,235 ± 8,156 ops/s
+ * EncodingHexJmhBenchmark.encodeBytesLib 4 thrpt 3 24944896,332 ± 2367456,841 ops/s
+ * EncodingHexJmhBenchmark.encodeBytesLib 8 thrpt 3 23222999,376 ± 396218,748 ops/s
+ * EncodingHexJmhBenchmark.encodeBytesLib 16 thrpt 3 20423170,033 ± 194747,311 ops/s
+ * EncodingHexJmhBenchmark.encodeBytesLib 128 thrpt 3 6685522,295 ± 920540,781 ops/s
+ * EncodingHexJmhBenchmark.encodeBytesLib 512 thrpt 3 1612325,148 ± 18002,919 ops/s
+ * EncodingHexJmhBenchmark.encodeBytesLib 1000000 thrpt 3 825,527 ± 124,972 ops/s
+ * EncodingHexJmhBenchmark.encodeOldBytesLib 4 thrpt 3 17973467,504 ± 429817,214 ops/s
+ * EncodingHexJmhBenchmark.encodeOldBytesLib 8 thrpt 3 14836039,023 ± 16437596,584 ops/s
+ * EncodingHexJmhBenchmark.encodeOldBytesLib 16 thrpt 3 11727630,076 ± 1849815,074 ops/s
+ * EncodingHexJmhBenchmark.encodeOldBytesLib 128 thrpt 3 2656731,985 ± 53887,109 ops/s
+ * EncodingHexJmhBenchmark.encodeOldBytesLib 512 thrpt 3 288949,898 ± 7650,867 ops/s
+ * EncodingHexJmhBenchmark.encodeOldBytesLib 1000000 thrpt 3 127,737 ± 3,982 ops/s
+ * EncodingHexJmhBenchmark.encodeStackOverflowCode1 4 thrpt 3 24557504,065 ± 797466,455 ops/s
+ * EncodingHexJmhBenchmark.encodeStackOverflowCode1 8 thrpt 3 23515327,490 ± 979922,009 ops/s
+ * EncodingHexJmhBenchmark.encodeStackOverflowCode1 16 thrpt 3 20377272,084 ± 480955,369 ops/s
+ * EncodingHexJmhBenchmark.encodeStackOverflowCode1 128 thrpt 3 6767893,154 ± 511154,141 ops/s
+ * EncodingHexJmhBenchmark.encodeStackOverflowCode1 512 thrpt 3 1573543,465 ± 1126382,628 ops/s
+ * EncodingHexJmhBenchmark.encodeStackOverflowCode1 1000000 thrpt 3 833,885 ± 54,099 ops/s
+ * EncodingHexJmhBenchmark.encodeStackOverflowCode2 4 thrpt 3 25220997,342 ± 852230,094 ops/s
+ * EncodingHexJmhBenchmark.encodeStackOverflowCode2 8 thrpt 3 24152600,074 ± 480651,708 ops/s
+ * EncodingHexJmhBenchmark.encodeStackOverflowCode2 16 thrpt 3 21494551,701 ± 1722250,353 ops/s
+ * EncodingHexJmhBenchmark.encodeStackOverflowCode2 128 thrpt 3 7554272,476 ± 1329386,082 ops/s
+ * EncodingHexJmhBenchmark.encodeStackOverflowCode2 512 thrpt 3 1781989,859 ± 125696,811 ops/s
+ * EncodingHexJmhBenchmark.encodeStackOverflowCode2 1000000 thrpt 3 935,685 ± 103,571 ops/s
+ * EncodingHexJmhBenchmark.encodeGuavaBase16 4 thrpt 3 17606767,347 ± 3615884,433 ops/s
+ * EncodingHexJmhBenchmark.encodeGuavaBase16 8 thrpt 3 14077449,253 ± 3570354,199 ops/s
+ * EncodingHexJmhBenchmark.encodeGuavaBase16 16 thrpt 3 10177925,910 ± 5584265,227 ops/s
+ * EncodingHexJmhBenchmark.encodeGuavaBase16 128 thrpt 3 2094658,415 ± 2321008,783 ops/s
+ * EncodingHexJmhBenchmark.encodeGuavaBase16 512 thrpt 3 514528,610 ± 20419,732 ops/s
+ * EncodingHexJmhBenchmark.encodeGuavaBase16 1000000 thrpt 3 257,440 ± 23,100 ops/s
+ * EncodingHexJmhBenchmark.encodeSpringSecurity 4 thrpt 3 25269684,873 ± 1820484,918 ops/s
+ * EncodingHexJmhBenchmark.encodeSpringSecurity 8 thrpt 3 22631565,512 ± 291386,502 ops/s
+ * EncodingHexJmhBenchmark.encodeSpringSecurity 16 thrpt 3 18704986,566 ± 604936,041 ops/s
+ * EncodingHexJmhBenchmark.encodeSpringSecurity 128 thrpt 3 4904805,240 ± 18454,315 ops/s
+ * EncodingHexJmhBenchmark.encodeSpringSecurity 512 thrpt 3 1165535,921 ± 13487,051 ops/s
+ * EncodingHexJmhBenchmark.encodeSpringSecurity 1000000 thrpt 3 601,152 ± 248,099 ops/s
*/
-/**
- * Benchmark (byteLength) Mode Cnt Score Error Units
- * EncodingHexJmhBenchmark.encodeBigInteger 4 thrpt 2 9571230,509 ops/s
- * EncodingHexJmhBenchmark.encodeBigInteger 8 thrpt 2 3724335,328 ops/s
- * EncodingHexJmhBenchmark.encodeBigInteger 16 thrpt 2 1454898,799 ops/s
- * EncodingHexJmhBenchmark.encodeBigInteger 128 thrpt 2 135397,758 ops/s
- * EncodingHexJmhBenchmark.encodeBigInteger 512 thrpt 2 26011,356 ops/s
- * EncodingHexJmhBenchmark.encodeBigInteger 1000000 thrpt 2 4,163 ops/s
- * EncodingHexJmhBenchmark.encodeBytesLib 4 thrpt 2 24530310,446 ops/s
- * EncodingHexJmhBenchmark.encodeBytesLib 8 thrpt 2 23430124,448 ops/s
- * EncodingHexJmhBenchmark.encodeBytesLib 16 thrpt 2 20531301,587 ops/s
- * EncodingHexJmhBenchmark.encodeBytesLib 128 thrpt 2 6733027,370 ops/s
- * EncodingHexJmhBenchmark.encodeBytesLib 512 thrpt 2 1606857,133 ops/s
- * EncodingHexJmhBenchmark.encodeBytesLib 1000000 thrpt 2 772,010 ops/s
- * EncodingHexJmhBenchmark.encodeOldBytesLib 4 thrpt 2 18639952,166 ops/s
- * EncodingHexJmhBenchmark.encodeOldBytesLib 8 thrpt 2 15485869,934 ops/s
- * EncodingHexJmhBenchmark.encodeOldBytesLib 16 thrpt 2 11458232,999 ops/s
- * EncodingHexJmhBenchmark.encodeOldBytesLib 128 thrpt 2 2042399,306 ops/s
- * EncodingHexJmhBenchmark.encodeOldBytesLib 512 thrpt 2 280376,308 ops/s
- * EncodingHexJmhBenchmark.encodeOldBytesLib 1000000 thrpt 2 122,003 ops/s
- * EncodingHexJmhBenchmark.encodeStackOverflowCode1 4 thrpt 2 24755066,357 ops/s
- * EncodingHexJmhBenchmark.encodeStackOverflowCode1 8 thrpt 2 23455073,140 ops/s
- * EncodingHexJmhBenchmark.encodeStackOverflowCode1 16 thrpt 2 20548280,011 ops/s
- * EncodingHexJmhBenchmark.encodeStackOverflowCode1 128 thrpt 2 6675118,357 ops/s
- * EncodingHexJmhBenchmark.encodeStackOverflowCode1 512 thrpt 2 1618356,891 ops/s
- * EncodingHexJmhBenchmark.encodeStackOverflowCode1 1000000 thrpt 2 829,757 ops/s
- * EncodingHexJmhBenchmark.encodeStackOverflowCode2 4 thrpt 2 25323515,857 ops/s
- * EncodingHexJmhBenchmark.encodeStackOverflowCode2 8 thrpt 2 24027424,805 ops/s
- * EncodingHexJmhBenchmark.encodeStackOverflowCode2 16 thrpt 2 21262668,356 ops/s
- * EncodingHexJmhBenchmark.encodeStackOverflowCode2 128 thrpt 2 7492036,913 ops/s
- * EncodingHexJmhBenchmark.encodeStackOverflowCode2 512 thrpt 2 1789353,825 ops/s
- * EncodingHexJmhBenchmark.encodeStackOverflowCode2 1000000 thrpt 2 935,383 ops/s
- */
@State(Scope.Thread)
@Fork(1)
-@Warmup(iterations = 1, time = 2)
-@Measurement(iterations = 2, time = 5)
+@Warmup(iterations = 2, time = 3)
+@Measurement(iterations = 3, time = 10)
@BenchmarkMode(Mode.Throughput)
@OutputTimeUnit(TimeUnit.SECONDS)
public class EncodingHexJmhBenchmark {
@@ -104,6 +109,9 @@ public class EncodingHexJmhBenchmark {
private BinaryToTextEncoding.EncoderDecoder option3;
private BinaryToTextEncoding.EncoderDecoder option4;
private BinaryToTextEncoding.EncoderDecoder option5;
+ private BinaryToTextEncoding.EncoderDecoder option6;
+ private BinaryToTextEncoding.EncoderDecoder option7;
+ private BinaryToTextEncoding.EncoderDecoder option8;
private Random random;
@Setup(Level.Trial)
@@ -115,6 +123,9 @@ public void setup() {
option3 = new BigIntegerHexEncoder();
option4 = new OldBytesImplementation();
option5 = new StackOverflowAnswer2Encoder();
+// option6 = new BCUtilEncoder();
+// option7 = new GuavaEncoder();
+// option8 = new SpringSecurityEncoder();
rndMap = new HashMap<>();
int[] lengths = new int[]{4, 8, 16, 128, 512, 1000000};
@@ -132,7 +143,7 @@ public String encodeStackOverflowCode1() {
return encodeDecode(option1);
}
- // @Benchmark
+ @Benchmark
public String encodeBytesLib() {
return encodeDecode(option2);
}
@@ -147,11 +158,26 @@ public String encodeOldBytesLib() {
return encodeDecode(option4);
}
- @Benchmark
+ // @Benchmark
public String encodeStackOverflowCode2() {
return encodeDecode(option5);
}
+// @Benchmark
+// public String encodeBouncyCastleHex() {
+// return encodeDecode(option6);
+// }
+//
+// @Benchmark
+// public String encodeGuavaBase16() {
+// return encodeDecode(option7);
+// }
+//
+// @Benchmark
+// public String encodeSpringSecurity() {
+// return encodeDecode(option8);
+// }
+
private String encodeDecode(BinaryToTextEncoding.EncoderDecoder encoder) {
Bytes[] bytes = rndMap.get(byteLength);
int rndNum = random.nextInt(bytes.length);
@@ -261,4 +287,66 @@ public byte[] decode(CharSequence encoded) {
throw new UnsupportedOperationException();
}
}
+
+ /*
+ * Requires dependencies:
+ *
+ *
+ *
pTM^4d&;=Z<=2w=aCVkBrYy9#$#1&adMvTV)>g_YxY}^8T0qAJg*AsXX_O6_4|~+&k~^dHXF|oYQqj?v;<^RgnG?wp3RvTZrr9u=O>rC^EHdWPh0Rmlp+ z^DI!R0Rfe*LO_%g3?VSef%C6#T(pwKXpmRq>yJ>UIS8?2460lk!VM(i(^3(~QBjWn zvhHTv6t|L!Y89pZ@c!Q|Ek!Dq6BEKFuQ1>5y3PgeF>xtE5|ERNjnOGdsMqj7NgF;X zX~R3eFyHXa&y>^0Pe=GG{PT;85y!HI(R;-h?*2DEUHEsu)*j^O1StLnIl8uk`E|Lh z!$r6BJN< NQ4nWG?YEJB&3*&rJcHE? zeuF1GY(HdwWbd-O?H9etD0dImHrQte?N{xv_hj!pqz+@BWryugP*#RF$(x9$WTO0` z-ZQ=NsH^2Y)|+4-#C=bqj=#45U~fmgKSjx{D7DFc5AV=uzwAxN{zdyQ-W1$13AH}c zI|n6CMfsU_kJt82utVN+@NQA>N#2p(S*TMd%Ae>>Lh8>bnPtCgKW^V^zl1WMLjCLT zgbz^ThjB&F{sd3^*xrZh4|~(le!GzNc$e9G@s#oQemuX&?m}G`ptX+26UTeUpmv?! zA!y4qyBBZpSFG&NhSL7i-iD_g#P&BlGvc*S_D<9|5xsB#zlU)BF7I%ZmTLE+)ji&` z(I%6;9z5|_JT1{X!W-w!#xp0_Z+nkJyCtH;KcE-cvW@m{@w9gPcKaqg;cc`@m;F3` ze~(@d;k`P&Bk(5e==HsJ1bx2Ge&0J9ZI*#rgzSS@Zz2Itj`N;|rzUu_QT}l6D0{az z3;oyOoq*$GaZM`f_BWJ#04057A3{5Qg4(}n{|vqVH0r~adlhfG7j5two{rj~{`El0 z$=*?TTC&}ZUN{D=up8<3><+x?I6P?*`XmnZ+lFgSM@x?K4)M-KAG~V^z0-k@3Et5t zwF&4+#0nYP(E^>`({U7s(%(jX-UR9n;AtKB>_=PF*>9mgx1yGRLJeQFKeU_i)}H`N z^~l?eKKd2#^eTF5D4v-J4DUxjcAy>7ywmKr(0f5V?=bo^(K{9GGy~V*Ebte!x1tXs z-m~maaqUE0a{x7e8wk!o{dW+Zc!LbP*?R(>@E4q~N6o@`gHck`9o~4n)i&Vibzss$ zNuzPCje8>~eH+SZ$59w O2(=62N-q%d39dN~eHF5IqDPxiw-eA02hsO` z1KoC`J*VQG-b6hQqW^cH^cK7=OWT8-ZNTpnb}OE;&3+&4vR7K{AX@e#V6+vj_BQbP zXPkKtPpZT3`^c%s{lsRn{U~a(Pww81r?&y6Y2Fj@?x~==WPGOJ?N3B29*;L3i+)Q* zPX$43Q_yP1p tQ-Sk|!2LEn^HY49P}99Y;~sp#e^9?i@yvSE;YGY-D|+!I)aFg^ zSoBXbFgqS~xxn6ol~ImE`|e >Aemql=7 z1$MPqt%q6?T3cH9MNTWOZH;1!w0M~nX^F^Tu%)-vLYiA5E|xpOI1IK1TfIE&scN zbYc4d+hJz6wuE&TX^oS+cuQ|<6u&I%Kx-PW(bDkCvwR+_VdEh^EuL2M(5{v^Uf9|z zC%UzE`&$m&nyPFyt zk%~5T3l2~o_8pDUhMvZ*1`C++Ha0Xgb|SeK5DPVg>f->ehI+y+1lW1%8@AQQ)z#P6 z)rIRLb;zo->+9-6@*AnM>OZaXY^{rIwd%rKlj^qOQ@3?%UC-7Y+#jyDfz=37J@uZ3 zdMt#10uuzl_4Pf#Z&+%O(Adz(O7tk2lN)f155D2XI61W&bq+O#<(;BUi9j)dEQevd z>UO+&q$!FPi8hBMog%HIP2)6R7vLNgNK4xi&Q_ookPZ>!rduNDmL6>F=rN>Qy0C=< ziHhYG>ETFAk^q|k52DB2lRz&(Z~y>001O9PQXOysOn^6`9RY;6Pa=rrv?AOBdXro< zh6Rfuxt>VvZH?#UipG5gzJ%*xNek48enqu8Bpq2TJxT#QyBFm#E8J?MG|+*mksghd z3dvL4dZ5yg)&xCl?IxuPz3>$PcaY~!yl*#}fbZQ2;tvUB^VrMQiL{V698$ouRfB;j zenAmv`AD-3h=+)Aq^-aq;2d4l)C(X-!IM1AO_64>FC@K0IXG1#I=3;>6l}7k^Wz9^ z!FCk6zz8r+z6Z 7IJvxIVrPXs^fG zA;fpEE?V!YtM5VbaGkZar_KwIZw=L@66=cgt-yYiWY8;6k2a(kj4P*(m`8+xf6^RL z-z)q%(wL|~Cl|LG4rA+TwDD4106ZAFyl#TLrt_kSI4fTQpBHoq=%Z*VG*dI^Ad%R| zS4bl2wByd^RB{x4`2i2YwdjaAW|__)PwK?B7roXKNFeCJu)~352mT}g)3fAw i{JU-l#ENS_Pw8V4Y0z3&PC&X=JbhYBHD49J@ z<9rxs?J)QykKY$_97Niq?3=@c(ud*v#C;F8!>uW%C_XGA<=H4&Q;GVJRvbq7V5QY4 zYhr*N!CUeAkc Fy7?}wVgO(_ZxLk*E8r3;MzO+jos z4LtyTjW*DRu>kn%z_t$@IMQH)6vF&%Ab*C;fNej>0BpOiyWUIAAF2;yBQfj%1%$Ch z>e3wWlilMu3JM5=>r+tShEW9c6>jjN_=X_a|86`I^akkLAj)t >(?_PQ&m^fMX;ECyOKFaxjmw zgt=K@{!vP;p{A(I7K!gpGD~nlBB;CZSmmWel^{!Y_yNe2<%+1&u2=_1;|R@q2sphW zr-T7~GH`4_J2!|ufPY9xfiytDrx(LP2PhyYV*x24o`XOg$Rf1WQ@52;6Qv%GCLCFM z3H^3ZS~sB2YIK1P!S%J0;YKf$;l>2XX>7oo;0;0fjb6eYf_oF*FUmJp@m-{L(g1kB zZ~=0INRtf;h%|di3}I 2@Y+q%0O0%SnUI3y6cp+v&j=UZgT#|zhA-ej$!dD}J^HAiPkM4R^f>-IDauCS` zkZoxKnh#>ziJVUCdjQ}=t;|u$D2mdO 6Cv;kcFAm>f7Ncph24Dt?_njlw;u0290ky2#N*<{%J>UI))X;I&WhG~zf< zlCvKME?>ufud?%2$}h|h<1xIE8?Ws$?4Ic!KHAZY4NLEJ#3-OwYS__&;i`3q)SvGV zCuoMwjvPg|k~xGA(N#GHl6Qv!6h)-59Jb97lbl?YCnCBPt&BVs%Y!O*_8M+ o4^ASfmrZqa%v1=fGQPHZfx90 zv-0I2`3&`=sEFhtbPm`LShPwgUBoQ<5dBAc1BFZ-vdNY^fLTCOhJ9m5QQeJlfHGHd z#E^1c3MK>=_oJ0#^46HI;85ik-mkbMRw;`A8QTGDlvXIUFipU7--RNh4u6LtiE@cu z5Q|hK+%imRDUXxq(duHjHVLh(Wrw_0G~j6gT@uM6RAZb1qVfKeKsX$+4RlztT0TWn zk<2@xY>MCkb)WjZN`>SI0i4Gu8E8TKvk$;7njoKGOLC;i=AC54U_oTa9DIkOgQb_* z_hiac(GH444PGVMT(~i*fw1LI2*{ V$9=yovSE;B+!9J6V26Plq3%$Y2JjYP?z2N)Kk2q3FgDz-Ka zB_RsWXx%{bHuMI-Ofw)wM8kUGiB9TDiJGlyQ<4!PiC `C6Ywkh+D>%5P*#xYb zazh`VB&&^3S2MiPMG%i2ozkPGkHZ3A@^KX!#0uC31n Sf&iyQ~~ z27s^uufmkVL`dZgMKFKEQc XKICc=Xv6-L0Kb)(p!J`c#*^m-^h zU|ax@F@QG!G(if|)VRR6MUW=57VVHA>l9WE$N_w`*@+Xz(dfW8DKpg9!N4twVHbqv z2<;?5w&B o0!wXF} z2OwOKD1*k6qsp&}AmGI~3yKi)xC~YB@ieys-9qlPjSD-Vo%H~kl^mkCIYAKJjG;1K zy8u!Ovd|@}+w4GxshmtD$TgFYQS~~;0WpUQC8!ewBLOT4gbJ}iZ0nHU>-u`Y?*Jp` zoU!u}=DjqU^P@ip1f^uDL~axe_%$FIa!XrlYuoFsyO0HF3$s=ZZpa7ZVdz86ep( 0Xl}|Dlm$6%a@*0=sbekJY#2RCi!XW@zvN^zX7m7$bl`P5!!>Q%Dphm}--S*` z (ZVrj!;b^oMNqBT#+(g91|$PPISLYE zxs-ZPXhW>(lyNu|K$JM_m@rsdz5|T#cqedO1!Sk%Co#J43!5c4F)h_-hhDL0f}|-< z&=j;&aH+bq5hB9Pi2_kJrZjjIIE`_v!AdP3 9HbE%+<``p(=2#0Avfcms@GX+kwqd+B#j2PM>el5xzZ?00=yV zyF6X9;B_<=lPh-P9YU_>ly9RB#t6;x!eb+9tib#7OLdOOwOY0XdVohZ9zST!A>7Fk zerTJ3u!Z&}i-i&b_CTPfqGR-f9lHgh9E6A-oF>oRtIikg-;jvNV5;bJ { zm268n7!HUN9lhayp{LP|?rMHhCadX)Sj}jB7Q-_cDtW956BZ0{Nfd hy1 zy^_=NFbvmB6#HJ-A)?r5e+GsreAE3yfdX132}fk~2+h!>tq7e({IIe^HL0({(=^Kk z@rE$1<6U8|;EwL}rp9i=cxj!WWg@5^mq^nPwxfJy7eNDV7oLj&QRFnXJ_KrXMi@N- zSr2WB?M=WKVr*M0K9GUiJgsfOc^hyo`<>YLiV&fy9fb%R4{*%W zdMNdvTqBllaBX9X4v8c#gvCnHSgp2jjsvW}I^9VXkc{C~9HQ`6IfBHDAxokP4C>J$ zggGUOUTLNP#bh*Lr!;2N3~fZd$`EREjt2HpX91=$GSWcGeh~*_*p)8& tvbAwVw(rploof-VGQh|JL7 z$hzxA1U?`NA(g@?EY0D%c!hifc&GdEknrnnfw=hHX|)bAEQD+yKQv(|#G!)L)6Ihc z1J8&3T(RvY!MjzgpnR`l1IQ@tP2euzd O}KZXSNn8%%7|*qaBNl_b E>GqSi_gcmZB1E>2#=TX*2) z3G|?2)G)AD6AvUX;Rz6W&`bn-cYrbn;uD0U3zvuXjC}~rPiqo{J@K)C1_1Ol?KA1b zX28Bzwf83Y)QpS0Lo|QLC?aX9JW0;3HoL=Mj=c_~RRt4R1%WcUI65fD(wUBPDn6)D zjaE9EDkvy(BeJ{IwtNtnCYrsJJtDdbZnfc5l#r3I;F%Z)y)+2-J|Ge@tlCOu5j7Qp z#%Q360?3q<_lP7yj!hv%Y&d{30!P5I@d@FDc40{KG@%vLbrOx0)X-J}Yw~Lmh^bUV zEMYTK3V{&{NfiL8%tV{_phwhEAUqqqi_D1zSK(70GB6sbES$jruR<{`17zIdk0V|H zlirqefWbix^CIBg8m*x|zo3R>09BoiErO>#t$=SmpxKO#(1l}#Vlw>UVBeC2Q3Gcn zw@@h*z*ANM++m0w#z)E5k$*@eE^iMT{>%{u_2-W7Kn2h^fA$K4<^UBnK~c~LW%SY? zqbRePtd>0int;d$Xt01(j1(eiR6t<{*+V1%=M`-GG&P06tw)gYU_|A{FMr6FdcdQC z=utQeg Vek85SM(9w{ z0~uZ73M4-UUxxIIHT#WmE+QrlSmx>zlpjOVfCxfKU3O&3FlgX$>Z5VIf?+YoQB)Gk zH~BFn>r@q*3E4)x4Czrv9*0Rs@TxRypb4<4y*W%+ixdJbprSS{935!W-sW^lfKD?b zO(r2mQYwPXr!Vjm^iYsdA0ks?7Y@*lAw38Vq}-^dC90QbC+}- NZ{(SA`JiOMV->4Pc_nw`3LcQe>2ItK1obXr(BFa6vHn&>>~F WC4 xG%KK06Qqz$0UN+Y_CA5L zTIs;00q+Ej^QenLSfO8={ynuZ6Uq`k0^Y2iJ@Vfnpe+%oxo?CbD?StIv b(JGX66`~8b)Z-Gk_BHe&H%{_hv;r$bejWX8#p1fDY4=Xq?K(4Wz<&>2kmD7 zG|oX4gh^s&t8MT}IhwKqoPx-K;EWV=94XrpbZef~)`@doLi-hi;{(PTNLoRR6{^C@ zXk=1E#2CmM;J{G^B;nk4yc)%4F*eE&BqnyHT)v^kB+-O%SjI8cIS}N+CZoFvJVO}* zHA8Wqf*V_b!{~{g{+=uCAOe{k2TmjiChKLlhA_w;MEal!!UIQ(lJR1YCTvxDAS2!m z7*Qi5tl+?=7~7*UsK6CNk<@lfC$$*aC>TQ+sH@*;Oc#kjsC;|GJrZ&Z7s+J6A{W *0I}YFboh=F@a1+V-YlLnq3DN!V5<5 z(#I$L&S77eSFaIvBfy7*KR6lmX2?aV?$NP9*9YZP`ZRdl+KTuJ5pB7rlps77I26SX zp{dGn!F79E6ErQC84&~E$F<#tFSkO<1>d&Xs4!Ah3>oh=4JLdXJ%wb#s) yCeu4Dsl+WRoXZJcAOyIYld5gME0N~Fbvs41r}JM zK}Qg5lr7iq$HPL7I?8Gg; MyRa7oEAG}$Ku&$lr3c_2o{a|33Ght!ln_Z z58MR!4uIP=EOCI-7AES6cnZjff@fpz(Qs05VhtEW L#MZTb@L6L)^M*szP2!BS+P%kQwZrCZs3R|)vSWsFv_Lpws3KY>9dMtfH zLHQLMPXwlOokKwYE3+m~=z!Bt+EK!`(8{pM3wI{2sd$skkWaJWcLB~4D%uP#l)~OK zU)V2jN-fb~{E# }PxMi}8k z+k;M1A&P0kpv<9BbP 8ObQBwAz(_OgF)B%HAdILf zXlZd^(?DmUz%YiQlQa^er87n_RBJQ>-iKY}KfT%g0 z4sK2f8~k5>Ss*WVt|IzT1!3lWvk6FYpbxTe4mir;9YxUz`XC`hV~B>4)Cdd}*$Z)c zq9M~G9yXIKs9bR1BRNoNQ3DZ`6oi?Qn``{K@*7pnNe1c&-$sE&R7E%sMbXEw%?Slm z`Ke6Nx~1A9 Q?rjaCzgwQH16Q%@!k1l7rqxS&%A;4X{cTm~Hd>4Vw#A?_j zxbLk?Bnu}K2fXV$jkTI^SM#)naWHJIZmbfIjsr})U(yr8NAwIeMrw;8*Wh6yIcSry z8g_EBkGuj|xAJp|9W^0X9KQ~@7EX=ph{EtgmL6jG9GZmIB5k?e=Aq=}I!q#kuLjPb zA4El@UyvFQ`y<5YoDjMQ7&byRM{34$sJyb@s9*#`nAjkWRg&g(F8M}W=O8J8u0Dl2 z5%s=ck0J$mFZDbkopK5{2bC&fBQlzxl{1L8BZysLX1~ZeMDrm%^C=4F_`tD*!5t_H zX)z(H&xR+%5@l+tN&LoyRH5p~P+N!tb;>CnczabBJsk0fZ|*r6h8km{jFo6$HYepj zw3o0Q>N8ZycgSQf;YY%jz@J1@q$h?Bv`ztU6cUNr1H!UDq>*V1>@hZ7U^l9Kn<9u< ze2HTkKH$xRM}!gsw=e_{L37v%SgLQ>A?`wIivY1i)Cr(@4A)Eje#5(s=`LQqhcszR zxW8jq`4rDG(zXaeD*IDRq8P&PjbLMvLKnZ7#X{O6v) f`2ZRQq0k~awfFDu=JqAJJGuBRuXKx+FuLfNoy-nLlOAA0lR~@;wisU2-#|Wb6 z5@gZANHp2Fp7^1mf((?$bdD3x2cZ`#vxZF$leSg21OgS*ArZX8twTu |wUA>y7k6HNvPEtW)l%hD4H+=vlG3JE<}oQ zDMb%p7X3^VdkAJq>_oZ~B9{Pk@I$a{1)vD74gq8W@JZM*hvIdx)kDByLKe^(ZA;;4 zUV$Ix0=I40$v`02^CC#^q!qENw7G_FLYnfo3ii}KZQT5K)Icpbc-cO`CnLQLug3+P z4(8Y`X%H9cC5-uALf!{NIU&8XP1Fzy)<9fipfC*y1T*51?TRD~EEK^RQ|;KW$cD({ zBiM^Wfv8sDoL#m@SUO;e9)&gqIJ0lX17}R&-A$ClDUpNg0oWo3;1Yvx^+3Wv*8rSA zBPDkoVoY~HG$HLU_aTnR3`v^Y9t>VZbqMGZ7y=lJQd$?nvCi-XgGb1o=%l?yA7!{6 zCqt@Mi+~muOIe)O${mbvk;ekwq%obDgQwx>kkna(nnp@C3URf1t1?PyoUf{KxHw-S z%7Mmp(iZr7(?M(;2qi|ZnF6CqIbnx!gdvCn^K_z-yHi6_gMrLfCm(7-FR^23R6*3H z!|pknQ#|MT3o5)i0m|fbl+DFr2efd)l>;(P# IyW|k=}6Z5Kqz?+Jst|-AI-j;&AZBjbyS*@R-RYiUml7RXWFq)3~71+$$^x6e9 zt9J*IrNaXJrFYn|qie(!h5W-p17vCpqi4@k@X?TZaQDMabPjRKd#6}tDA|BT2F0zt z%UIAQj-M*2dNdJRLgf^SDMjy~#+1?vNh+YE!-&&%5pS%zULc>L*{;N+d_5*sm4Xha zV=EVdFuo+J3eox$Lk29D;!hXQA8a^|#6XfzVl=cN8DdtKFfoz>IleKZQUxc^7blQ} znP3hA2ReKiugXAG@x#kd*^Hr5y~Qf{3zq=_P@+U5gYzI3NG8c3p16h54JkkdWa%*w z4uG%gb&wu(LpX^;1hAx#S*rd?F#unK5gRG9iU`g-ES7pHQBC=~7n8RlI1=+XAWR{L zl)z0#gs=!bSj&OPCv#URh_?a5a*KL^Fk=@-if=M~9x?WW_8Y`$L55L73vo{29z=qd zKovo~c$}bE2Q23Cbr}CBwsq|HC?mjpb~Fur3=kFF)}pPEd|!;Th@_(Wq$(7-J6xa` zUW4HI5u?Ha;gmsTra=?fl^W3qW=`Z~FRE{vdlP15VQLM`cjSxwU>*(pEy5=8i%B&= zld7)~@^=B10hUo8>A6>&GpLVVNHS!&_i+TUYp@70OJfX$dBh0P5EJCC9us(R12*;E zOAJ+1yqv&0IKPEc&ZKx+=*3kpINvQojM^Wm(n`c20nTL`Xe-j$ic~)^T?TJPB^HzR z Pi?Iz!L$aIh>k^VwpP)X2MZdC(baqL|pOU?!wv8 z$H L9xAB z2A^&mPE>7anqh4@UO7Z-d`F;TWF~@m@u31EZ!6M{Mj1lg7a6}r{QYKVr1*o$zyU)P z)R)qfFbpG6foLbX05e9F!PDTtVVOjLE<|? KAsjwW~V zLf7^Idt 5t&6sj!yScP-9hS>Fl9Ki;oauxIt!6Gy?jv#)?>Q z+U14lOkz;1NHwwo5nq)e4jraJU6e#Q!bsv?KKOCc90@rBsx}0(Az3{dH>%6Xq@eA%7HTFad@sejH%U z;rECoVSJPd9bGPer?5f55^H45!qtgq(1Qpu0CI2ZNG6%VACoOqLk)l=(dSK#iY*9N z!JSJDfn<{Ikcr&d2I8?q-0F+cwNb8mtqjdX;l~v@i=)MUkb#83@O>aWfmry4uo~f4 zhXm>YjK|^of>Frio)!tnZ4t$Q!7!MUsUxXc-$8G#tAj?)gF+Eh2PpO!t3w1m#>rF| zrRksAX-v!^1|dqf6AVqw2dT^U7(Wzg!=VtyAZj3&grs7YqAd3SEYiFw^0tf(k;W9{ z=~ts+IvWnfYPQfqWnd5$pq{hT>YP{@%t#0HF%@Df4D=%GKqzAHA);L<_0yI~3Jcda z!;(afk34sD(gjPfbOVPkY^3WbHu0fGc (6$L#r5BQKsfV N%Tqx z{3Ny^1^8t9&O#e1W>Vx7N1 zAPB-FO0O%ag|1UNQ5_$@pqB_ns6iVb8CKvMm;=HNngL|jB-u-ZlMbjI59xz8^GHO& z*3n3TVEA=^ +HU258_R;(_SDwC@Zjw)6{zDhXX2O6O*V34g<($(Ijlcnik}EHvT> z?#`NPI$%%_Fw>7YOmtv~=z>TDX-5Sm>cqO(NxLBn^;t0-%-Sl(BK7jJxR6kaRe!+P zSsOqnl#ZaPfGAD)7tK&~Dr+b)#|mAUjs#Cd*sN^=iHYRT$lM6Xq)(W{plax*Sw@LY zQ3N 6!qJC_t%SM*LUQ2RLqsTpYk6IAZM6 zRi8*M!~{nOXDKV11IatNHVL^YIc&G2cBx5{0|YlB8+JzF=j7>%RvQ3i3Ys=j b<9Ws44~!1hhc$1Cn};@0PgI zRTwae5O%szyP(qv%o+I9W#Sk=>BIteh(tw=f~XdtlUC> Z~K3U}R=eaik-mNYnzn(Uht{_j_Yh zW3(3NBPyHWAddNfO2lC^?Vh7C+SSDNVSUbK2(RE^>;QIzS>7iAwuYu=B#wwrhx<%L z;CnJhlKo2bb8PT%nBWw5hiOUxI4M9?PnElYh(j)6e5xctCDu`E-N6F|3yw)AP_c>Xt}jI@X|+=Ugmf@?kYB8_Yih3XYr2n*uX(YB!u&Uqb61|j1FZ$p9yBtq7Ocfj?l zgcdS#nFbY;Mz(_vC_qu)<~ZVzJWR4Uc9tPRlTgi8dSGlk&1;OuWYiv`K|&ZZ%;ZJr z7LJ7i2}~^26MMu<7Brm(9;POb&lo KkC!oWc~139Vtcn#LSZ$) GlGSGAVD0;z#;jN=11T@W^6PzqWAOad?9`U7 D&w+4){(Of8zrPd zlyQ AS74$8x@PH+jDq(~Yvl8F66oXuDd1EP}?aH#7v$l64p6dI;N z0j?9uDNd2VFfo)EjwWVTkO0omqGH^nI QfWkOQR0bAe0U-*y z04S0?OTODINF(xrRL5}YIFUglKzWF$7QQcdRK^|>(1R2RS}{-ImqU-5UU?Btl1}JP zXlw0l8_7d_oG;Q;?|Y4j%0|A?`HfJ<`iO#~bV1()lpIrr+>QBKJZy!OWnn!Iq4Qo@ zx5Ev@=yOM)aVTSAw58~&8>)#kR^0>RVMrl`RvK_YZ9*I{UQrR*0d PiUi_bwZr)espYtX@`03pjPN7oHagkeUUAxOh4#~>4U z(Tn1`8&XB}H} 4r;fqX?1V|`6-v|g1ViefHMHQSXz5s_R2gx`g_9%s6P!UQ9Qs$xn z#6813dB3ykbw&e *o5XshBNw;itsQyN|mY(SR@CO-fvsOe4`gr;9N9DE<>VK17Os+*3|>efIE6NeG7 zqA>M7NwZ(jCFm5#VaGYNZeX?A7io6KNCWzzB+YSz3-MCAR>I+G2o%0OO`>&3R4F~z znEXO#9m%8{5Q82I%sESXF!YB8q_9IO{S3MXMB&iLeMEPPP^2LhSYV^Rp%pX|f}# H;|1G~<}6viu9r?ENVkrr z$3a|`4@dXbK!Y#>-y?yYv1_I~`X!|%NBf}u;Tok7 xf*#?=fqaMazZc{UjzOD4L=46n;Z; z54ClXz*5XPo>y0Pm?Mwl@3WEOV8rK;yeYs@J>g^nNMd+XkQEw%o61${w+ m_+`(LAgz2+l@kClO^xImX<>8lQ)q_PzS7 z)OSTXhyosPZviQsx2IN|NYfY*q?(L4B}P&RRSfirLMp+8Yw%^N<20%EZBD=*$CHRe zTdU&C)jP~`q7bcQxf@sgz}Nv@0*AEjc0*04dXBX~kiy`Djf=R`;RmypaceV%k3*8< z;rmp^GCDlWy421B)iS8;LseN_R$HU?)VUF9f&@u#JsJQ!1AC037(}@V!{ACw#(RxX z7E+TA#yU5q$C=YXw<_s`e2H;3o`C9!?6`R0U7|r^i7 gq> z4Q@a=zy~uJBJ`2S@G8j@O@~!mFiHdQh9z;a8D%2W3X~dT)BP4{6TJd?DmigH=o>&B zIwR)sAq9njc5(5s6f-o0+eAa*oeYICR}0vwZv>?R9Btg8gydnuT1mXDIGyGQ<1>yw zB?QQOGDtvfr1H(p_;YMz@!v6UN$W_ tb~P*zvhppM;ckhYm_qpRice|6|0WL>&K4kK8pte}Lx>AP3~ z9wUSV$U=q+H6-Czohh8}u)lEx$yL9owUV<2GwB>LOg#qdC1``ggm3~?xHw!2v*5^y zw!-vt$W6jg*m@L5mD%)g+O+Z+di2n`9mXuHQ^Y7kQOKpx 0M0rFHF4s>t|@oaDFFv*Y~QzMr|I8^l& z?CKv_u(EBNQUPcHQ-;V2ICxNvAc2T?oUO!m;)xKa#N&uRyIsehtSv<`iZZQe8_sBL zVGKc`*yx63pa=*4UM_zvorzz{%IfrhQXVwj&(THgxgns1CYWA_fH;g$@t~(1@DhP4 z b|erRF*OIvtpc!g{yDK2Kr>mm&T!~%pynJAogtZ&q+ea1orc~07$2hb z!^AOeL@Vs-u)G6STt)7Fs2!N1!*!-)87W9@Bu6+n%s(@THsYVvD8aA}ob{>V6~jTW zQVOd{FMpa6kJek}RU#OWApnk?CH@~afTyXM(xosF3?f2A%}smIko0!&ztxy&fKeok zuY )NSwAt{OR5e`U?I2Dn-N-Ziv^{qxpz{JWH_+Kw#%Tj-!qla@< zNiyY*zUXWfTqH0XNLCrhh(Qkfc1%*n&I|C8R;aFUQyrb8Ms))gA;rBBw?wt(#a<;3 z*>#KTgwcj~Nvw$>te!R%#xM#g;RN+Qma7IZl8#gs fq?pjjcz>1s$mU<7h0jD#~*6(m4Ul%h&LRL$qZv z42T5N3c*TOJs_W@yMuxjz=DZD*s!{`aA&{_=mGW!IxZhUryGwu8b=AO2!D5UX3$Nz zk-`;CS-}RZ74^T^debGhvMfu_=}u;3#+VtIs;(-@OnTma3O#`S=^12g)@GWjB~=&c z6X_rs5geU^j~MiQYn^l9k<|uV;9_t%aPQiCuRR_JmK%0r<~$O}l3AseD#NIB)y)>h zM}I~qr?jf+bMG}Y!){rJ=;jnEd+%qBtOl=R1Q8xZhOd~-Mr3W{l2qr*JL*Jh^Yzp; z`gNmJ?G1rraTIXw*^K12b<^CDvB7rOOKYo#tQk>BrB9P{(5AxeSlx!Budk?~X;ejC ztj-JNdc}!;ta?l~ L6@1lF*P=4(LajB(y-P)&yd;x+`tI$EPX$q*nY zx*(Yrtag^z%gG#3f|beE_|XGz-34>%fXr%e<-{!b&ER6c#Fli{W>yY~2SRl$G|UAP zOnZ<&ceIL0!TY2J@%&BG^IzK^k&51JM8P_8qHKKAAM%YgCAn<*&e)C{ =dy$8(q$bN9ZZzJ2+TC`*)ktpy{}&QMqSgB>uw8*m5SUZ|DFK&kNVa;vbnR zv`@bi24g`yqYwg4bW+6Cl30uANOfhzC$IoDN>1uo_n +A0()0hfZ0 zS!7riH6q44{=;7|PWubHsjQ8JDy6f2L@t#p-})3T^>r?br3YRG@X!6Z2m(9v$B%on zeRrcEe|@%$noX#D6kr{keLctP!wXzYb&LU`F@~+Gr;r7O;26cm5_m8ElGE!+RQqvt z{W7y)Bg$Va80Zw;-Xk2@ilSoPSH;kg(3?+5OH}s7rJ}LG6#B$xG^SMPX;$0k_m-fs z+i3PpU3s8=1>|oUu8j vij9`I4)+!Y`^2MWV25;IPhi}WxZ zw|)qFOKNZjFEFkPt)l8K(U}ZD6c{6(EAg)L@g}m7fq}wo)+H(+kdNr-tR&sbTmMet 89{P`OtT;45Wct zg<;cpYmf!LbO-2o7Kj0@dSCFT5US4 GXISKp3+&Mxpxp#Si(u`F?(hmmCV~ND`wm z!}$-@6mpj-fqZNW&rL1&`<$J0MlkfwP!op-ZDFX=KY2J~YPOSi1}R7;fz91(sK# z>&%iHnC$kc#kputQ^Caf2Uxh*R=C>OTfig>Z^J2!WzN=L%^qjR%<4#NT7C=8trtnG zi9KfvFxLyKf^29c9Gkzm6V`~N-`Yt7NDrHXLAM$X2$RL>@j+%*ByI)&$wEUXVtB8~ zN?kgZV>Z4jCc5I $|< zuz35K+3!HSE<`92T4=}!2Ey2t(RXFVI_h8dL3+uO^jJ}mBYA>-PH(#cV-=oe!qRi^ z<=Socuf|<$K)`L<`*uRR>}CW{jaT8{Lcxat5vNUih++B9m%v(R8 zp77;bDN)ka`Jn!p4N!-?>PJs$Y!-tVxc$T28qZq%`gYFxbH0)V@5~R$VfBSZf!H&L zDfNa327}OtdDS@RSGS$F>AwU8;i$9k`fExHS;!agV+1^Bw|WnpIj`p^I}HMoGQ{9| z)Tn3T;8~incgTY#VYDGjF+R+yZar<9H$p?S5ZVMwb4_WuB+xSanL edyABOLPBuC2bFSQQX5v6>JgI~R_E$*TX3kfvEUE2B6Hv|oqY*_d?3L=m)rv+Zon(93?$VRB)$j4aQ=>sTcH zYnIdWsNS4^Y#rhHoYi}V&mdPqXT^`!kgLAlEb|2RVaM5& ^MNmr95%Ra z$Bw#kgPzxAcHgwu6$sKHtplJlu!}?B0#mjkO+-&5cI av0Ma7GWv5Q)%B|#h&o< zIRHI4#66>@T_oJlnnBMyh{ (Tnd*U56pGr00 zDT=vmN2Ss9_bq0aD})nr9M0k|pl1!3L~dC0Qh~7}U(h^(YqVx=d3)(HmS4?kEcD9& zZtGb$02s~t>|%Jf02$ToUmHNZG>-;$y$&NVeQL{*8eGy+jCCY7FsppieAi~r t$*D$)rKp32M;;qq}ETv`+Qy{hOGzm@o(Qv&6!d>F)rVbOgq4N&gAm(WElnL zA#as+K(?byxhYC-g6)sI{g?cSzN%=Ks(e{+Uz|4_1NRtc7v&=juvEvE@Z9i@G2Bj= zb5)9zk; Ob# z%63^^Xo$yZR9jecVMiVDA}xirtbVZ4=zo%}w>qg!LxZOz^v}1HnxvyNaZd|buTyY! zorT=;!~4q-2WzzSYCkOLMg>7FG8iBWoc0KEOic)UB5M|9l=bezSQG|zm9Caq<*$=< zj x=ucd8tYpES)qYW~OgyG$edo)Ju;gDl-i=X|k}rYnDn(w$^AD-LC$g zl%?oaj7nj&5c9SB!AV|x;z>VW_5MzAK{zUTO}X7IS>t>gJ|L-TzL_68n~{`|k-&(k zDAhGtlNufJQ @{j~YLo?oc^`Dz5AOSGzFiLXJl|Uk;ou`Z*5K9uB5}Y{!*Pa{6 z4wG9DgN!UEeKw- @e*1w1dWLe$QleEs>WKEWeewf{vGX-iN zu#%@W0cJ`RgZ(k<@q;BI0fh4{o-~d&XU{VGKl&()N3&g#P%J1a3(h$|pdN(hKIhav z;udd?z_(VzuCn^C!bG3Z$1_YA?O&u?0W`Wo)yohZWZ;OsR9_VEqVu*g;_h`U!3^VH z 0i+D_36!zss47pq^zqSeNE{Q7e<`g8Nb z5jkV#Uo9lRmg8b5?1xYx%xEp?n8zT^cT>T5M8C`$FAsC9h5Y^x$b%PV7ow?}(3BUU z|E)m!hP}A4262pM$_5@3BQZuyJUmR4z73~P0OS^#c#8f%0b(%(_BpuR=QgW&X%NuT z85!9?3%gdTT0aE)XKNva2{A?D4GhWEY;{qk`5CrhNYiOyDN;rK8~Ar!+AkdqhT5-v zu^@Gq6#~BO(-9fyi-{sIW3UFbZ?PTh|LiA!nm;fXZj4)*^C-+yhDw-sk|GXR>QaX0 zkJ|W%f_YSfJIacFSE)UdEs1Yx&y8_ C6bQ=#Qbhcj5Jh&9cs{G3DW?>7og40{Ez@Dsc8fWU?Ur zZ=)&G?55zPD@XhmwbOS697jH@q8$iiEhDk2TPr?Q^8YW}W!`b{;(rH$n~RaTT`zn@ zSj&w<>iJ{6i2K@wLel>-dpLP*1QSb4Ouf2Z%=?fK{n3Qca kNR#pnJHHY1B)ct^SS=VF*Yp7qo2ZFz^&e0xPX^GUPFN1JfS|I!Iv z;w+6A^~t*z|DWD>vus0TfwVTK1C5Xu;Cu#dTi`E)Fy_)MX%-FT8NE=ky$iWe%Vs(8 zGwzZlLgAVURKpOq;ofzNjJq^JqJy>Nk;-Zeu5ipx1~v+ScD>xN9H^>q2Wa%}REHg4 zv_2MOpHl%-Iy{GW0bYDcDRl$j)(}|4pQsDB$(bhd(uwLBL7J%)@)6gn&FWhGFaKY- z%j7e{Ig0pARtG=P^<9J4(jnse3g8wfR~g^ZJKX^I26CZO$!iaefaz0R%j;&-)@OL> zwOd-N?0FCaWVQ6o>}9Q1sW!nf{v?c}sLQy)HxZfhB|tt#QAcex5h!ysjx5L2>%?}x zc%7nQ`wCIQh03Q6A_8Ds>+~7@*f%`tV}1=(#k?F^_^O?y8p8SQ)XsH3c^gPygu#b{ zbx2wk!ZKY$aO*z@-hC#KAs(lW?EZzNa}`I415qNBGmLDh1BkEalg7(I^f!BdWQ44q z^w0@qy!sqP4 n4M1qMflTp=tO5w2%BHK%fYyDMX(@(3GzXAWn_{(6q!Is?bjiSI#a zt^w;^xCF(J)3BYNy$g>RgCQC&e6RrP9XiCQF69~Yspf25kMw4!pbn5{)`+;T=D{Xw zyBQskNHoAkbvvjK7^1~naeCzAS-~Qrg_AEzR?C~A9>xd%*NcPIYwkCchGEI$1AYju zRn*}pkMoxe^!e99H>#dLny`#&?)S2DCI5^sn6G+p@rqwka;xa2i=RFh(20k~kJG>N z`r_G)V~_+May=&m5!LQ9rf%Mkcodivr_sAP@@ic%YS4R`s;Cpk1%!I)8tqQ!wo7Qc z#(R{Px{OtaquEeyUgf@KZv?G+*nGI5X!1MJkmk+Nk|`>Yz9t1D6IPLeY&O@la7AWN z%+`!eZ(l$4opN5)`wj9iYR35ZL{J>J;=)J Lys_ zGxs#P1}>?(5qbe{fIoTNh7md*rikFQgAo zK`$??sK#1>=GDJl=*=~rH~K 0blSiPJs+sd5K~_P^Ao=iNa!_~nz0!jZZ;*&Lglu~pYHbgSnDZVf;}Zbl+d$!si> zt1$9oobi}$NPb>}@BkNHo5W)d#+=|{{4JF?& {KRMucMkd%T)e=0cQ;ez@2p%3ykChLQ$%E2(FS5 z akF zCZb%XoJPt%DXt R!R8jE z;dfd46#uKM7=liU$9ZBGew$cX%l;Thd+_XK*7#9Zvj7ku9;Z(#ZNg+(<%JwLawBhb z1 g?<;63{B z*Nel|#R|>2g0Zg9ldBIGTK`6U#jb(ge4=1yoQ9zH ?U_}5Y510<8Y5!|8dbxOP;#bAJI-{SbX6a+{+eU0S zQ#s1U!93yyAB8QhQ{o42L8~^uu2fJP^malr>Zei7j`Q=x-v_lBECXzSPFcW_`}Z$? z4!#6balA*{L^en>GBA86-KpfTFaG6Xx8l(XuL~BiTM^OCMv!-PagmqqFWv;w{z)7u zKI=&Q`jL0h;cDSSo?2codHDAWqo8tS2G*adXJt2`<;D&SizOOZ5A(m~a5+aKn1vN( zbYk69 =A7R}X*N5>G+48E!&2TX%wR~2*uNMVbd@>9nsnN?&N ziUf3Lm`nLq&O58#z;}y`dQ`j2hUL8?b}rE{+cVR72C=N8oEkE% PM7TT{sg8;>gW@fSP&Y0O6!OyW*J@09?Tff=r)d1QI$Jw29HL^G;pt zyI=7+zlKQ|Z744N )f28*Kb;0ZS?)Dv1ike@j1^GH6 z1930u74mWxisbUHsrC%5N>haz7>clspS9F+dDK}F6HCX5SSP8euAT8(9Spf@S%Uua zU$m^f>OXs$%L1#NE?GfawkU{u71XFb&A3=r|FWPfP#cvCd1Xtn(CdrG!V-`c#KMv! z8PF88B$T=3iEp^$auLT%*xp?{=hJk_41uNi0uc#l2X!DyJHC#t)ofsZ$1Y`~Cm{Le z#b5n3^ViMac()J-M`~h#BHm(F5a+nf OTOCDfQz QAY{NefcjJu;JsO1 zf!VrL-Nhx5B1QNXe2P%6r;>OU%_3y-&m~geGs;$&<|<&FUH4n`tf@#VlS^v7=jh^4 zWnlK53TK`$?xlO}aLm)1O}8u%>Dwk^*Vgy~$wZr+u~j!GF;OW&)?(#e;=rp*1eHbG z17JZsH`eM1{NS_Exl^kOVe)Fl?ES?bgf3TKo^L_f@^TgQ0Z88gbHliwr{JKAm#?-? zrp*7U8n)rR XkrLVjNY{y`4 zYo!|ZiEMSK=&zx*WA3%Fg6pW;dS%UyS!3TeEcI=8!c&@e;Rk{Bn1q^s6Eh4#+%3T_ zy)*lD>mlxI?oLk}Ok8@v*H%7f>s39_dZKTZifx`ny{2zX>{<<|Q~P {BZ???1YD0_huJ_fd=|bj+*lUwU<-%9Hbg3ftXtq340>*e` zFXtTWN5g}Y_YxPM>(7mNj#e@pgA ^9XIl&dB6PQeBf8KH!{msIA+BtES-#}y2 a1qPP+09~I_Y z&!Vv{&>K@tjK ^I(o0HFs9W?k+X5oFE}SyFZ0|GG;RuY;de@-67|> z@l690f?<@V)swF-cg6Tm6mA~Ip%Pi5yHWp4-w{%_e9K^yOIY$;zR~b*!w7&n?0JkC zdC9P=0Q>8p9STCEVg>fgM0P #BD|Msa~TBP7z9|1;DFEgk`szYmX3 zPBhx*5d(w+XRmTPS|KAJoy5o&w&z}fHq3GP;*Y9`==k>Nd(<2~+7WVucsSUP&bgz} zL3yy*N{T`Nvm$f;+ 5vka$x5C(fNb$PKuq$ ? ^@ zEg>hhNsjl!j`!TF>xa+p=-lZnme5LUQ(|dS!7|?WU|B_;aKmmaliFJQLOhAM`wW(j z_FnQFS0gm{ZbXhP<=L^KlT5uIpmPY9o}VoXVoENTUPJXwaM*xyzx2nr;%2jQP85pk zi$tE17FTyie@{kM+9KeyKA&Q(6GE$Ce3UWN(8$nlT|g_C=CD5h$Lx)V+~tzvE!?Fo zkVsC`L^)u0oq^z+TSEg&ouy;NUx5Iq3n*|q1QvUBy}kIKqV>uQiWz|;c7iT$o9s}b z;`;&XM=PgBt$xdcs%0O4)}`dqxCaHB;u~gyNMx6Cd0)@f_mjU4{hq3Q5_JEBYNATV zY4G1LOh$ulUi=U9d-Xf!b_fFd&FBgEnx{jaa}=T`jBdo%K=ojis2kDC!K_7m6>c6P zvru%oWMd|?Txix$gvcNVXf9LHC8e6{@S98Y9jXu3GgKawHY!lg?uhX(5_D5%?Yg!^ ztb^3m W6)iRV?)FQ9o}*v zXMGyQzFO9z;giIEu3Kv fK}iz@mV&|?_L0CC@Kg5~yt zdW-yxk5+shf0u13mmm7r|68l#H`(k5Sw)#=`D4F*Kz%bN=OTEl&2+$g!aoP9pf$qo zO&pWN`)1^*OZR ;}Oj0&Xo(Nz#2Ieh`yLob0I(W{yel z`(u6 *z#_ii;JF3cZL{cDWx;XZFt)G(-1|YZ0n+pb4|%6Z$0H5O zMK~JOEa48A3w|{(dXr79u9^@2_i+^X&*~3Q8|lqWf`i#Lh%&Xf0>dPQRa{&jsOl}* zFd6wFf$q=9fLvx7?pgofe$cOBq >S&SKkG_$GG-=ny1IJeg_Q6jnU?lp#8D<032rQ&1S9Uo?`TcX1-T%aS2 z#I|T}*U`c0>l6=VO;$B(G$}V((>;vib5bvJt-bQ_5i+!tenwlqIBzp(7w`dn82HuG z4;Ta51HpQoPdRvugTcuTx}o>gGz?#oZ e?nH1yu6mZP!cSC)t%3Ls#wdR^q z&gxuM-5T+^35VvpK@y;t<(Tr}F>K)A#mfP-YwW-LI)p=A9`3P V6&-rL1!K-v=wNAUDC=8_mA zTF-N%pM=PZ?{JdIh`hwaJu<0o2+F5L{-_@`3?m7=*54HB!@)H6;)Kj;KTo5vROTii zr6;pu&MrXPVb^An6E(E_Vap~lF&^%|TKy})HVtBh=Y6=aaTYpHWd@D{+?;Gem3NR8 zIr$bezHM&^00q!)E)Q>crvq&WDdJ#mn;Qq$4*t7*N;JGxMrAi^K4s8;xsMQUmeY1W z8Mz`?@w3jzzHoivUn92Ct*|bC1V3 {XEjj_#I_Yqbel7L^&NkXoHP`ed6Xl9L$b} z!g#=1B$|pPeV7KELSl?bnY QU{9QRw1uCl5Z{0z2ZHg=x}tm6&+N9tHDD5ee{*aV94s2d zADp~`f5<^v7jl&}<%ef~7 lU=X5$%Q!5e_!z=tpqS-KhZ?BqhGEm8osS z#aYJwbV;s}as|5p-XDcPu>F$X+z6AoN6{@iG1_D`ZMS7anIS>(jn3$?2I zs#l9&AgL6n%T>F#7aJh2M5wcm1UkBx+Zz-$3ud#&)erFD&%t%kJ#T9jkT>3CFs61O zWQP$rE75L{Fl1^Xy=d?Jz`iu4b|`q>ZbaQAk)Af5$TAEf)%sQ9BP7L $H(i-TLKS^N%dKP|+ zvi~%E&J!f49A=h5Ap^*g9aYLhYfB02^CipOP0VVHMhA*vMLkX}mcrc8##Vq`A_h0H zdOG6uGdV!R;Z*H2`w*ILyIM=0=&s_3J2-y^SSTp<)MSMac06N;+>atRmAsppY%Y0i zKoNT`It+ySa1?g%bhW*JFH!j40GjYtk(W5{$o~9gDq@v!;Yvb>HRQlzc_JDhZ1< zkd!Mg670$iU`889LK<|WA0?li_xL`!5H*5)p^P{H>|NO+ae2wg(B#rBe^*1JpqQ6J zR$j#d?obz5Ny7uwESjppLuV9GXWd|xF `lJDgb-00p3Mc>-Nm2)OwS^x95(V`I7 0`!VD`x_Z!Vxk?7`Re4(;eO;6SR0^BetO>9fin-mnFddeVA-T;NAo2dU;54F$ z{Xt*X0_kU1BrR~I;6{+fA^-^UIzrxKVEvfd{PLU-$)I^dZ+jTU?npd%pj9JpTK+^g zN>7ORHDzreY-lA $5G0vZ)V_SUu7+%eXj@}{Jn2kwEV~m`G$rL^T*>ObU_P#C5u u+O zfpwMmD6i7w_Ut&hhS$wg-&$}zT`GeI<>m5pHMl)jHS4VXLp;qYj}TdjISw3jcXmV* zY&+4 5F;wmleWfb|$;dvsb zNK~JDu4Sey%Uc1^t|Kqp8jf(;9@#*WoKR>%)3Q={#n=PNVei|pZj`zDTveaS6d$U^ z50nw+e5{^`RmJ7VH!3{Q_`sKoAsJap_4!hcMU*Em`{BNkKT(|4tMBI%dBsc;RE%v% z1+Qu>{1?L+wzRAKsRYaVgiC*yV@1k)(w?C3_)wdHoc0jh&zZ`;9npztXv<=>j*3Ns zGujhn^_~O9QBqi}ps1?umJ=BLwHfiV^XI3?N}3ZYEf#X!0s=}tQIa@Fxli%*HlcPEv6Ao_2tE!} zeMA^?1xi_9WWqC+0bDn-Sdu=7JEE`w>PHF-9T0+_J$BcAVuXve+j&Pm3@5~w6)#aP zc~X=T2bylitP&$>+V^VC6c9b&-xfbbLRV4OV_AlY^V_HcS`L7F{MZVMzQ7<%a;IO@ z_>pz6IjkOZ9I8h;QIBRgm~w(hOz7tgMg^I0oT8#KS|g3~bO_5>B>UB@^LJ`%!uZ^p zWl>H#hO|r4L7;5l KE;qv!#!hZ35k}a<%?Ht zwE^#8(?eidRr+`OYYxs>#Td!w>aS$RC%3LIcg+#0g(dD)nNdt^q-ZFN{a;6Z1i`9w$t&MlhssHuos5FekH}G&v~m{LC?O~l`iR0vWm(qT zS>!%yN|luKT__k!HQF5Ty)msd_;5(EjRBPoeTlhNV;2b8pfnQ-G5~6Y)%vUpbSepH zMi4Z{J;!*!7odIADAsBif2?oe@Zv7ib21>SI5f^bTZNDSEJ^K$v;WdnfhifYU3qvP zx7Z@~>!;QwGze @@^ja hybWkd^^;tE(YoT6-xK6Lu~}2O1`SO{(}Q`?v8&L zA)ws3=-ZgEV=(9~P;dXHG5_w{vSBEwbm>z}ha-Bb@FP=kqAk5&^L=7`0`xiJ&(W5y zrzll2Z(&s&S3*9gF0{J=(mN18df!rC*3K5|+pSj;>X-2s+(*Z=_&Uaw9eQU$H{_O0 z)@lK)n@UOdPgjtX;W&{-NoM4}zNL?KBw7E8y+p^^-+Km(g$I=q5w*K|`bb!*e1$rA z1EhU}FaA65`bKf8%fK~&7Q32-L$K+6fa>e()sKF7Wg&ap)!%|)U(GAoS@B1hm^{U; zUqHwo`Ao6_5hnk&`37H{0a$;?vxu?&z>$d80Q6Y!>y-fDu0>S-4>=Z4GmhSGg9wR! zgQDD#1W=i*EvK(qQL|*PE`uQ?wf-PKoHRqG8>1m=tG&kh*i%n{4;1KW=el&2+jK|V zU;SvNNL`8003hjtQu4^wW=(*i@l$oIde+McW9!?9x4->j;1t=|Cd8zaG^mf_Hpcma zU=soVX2bBbH_x)b$)H9p)UmE!Vq`Ua1?FqmkbmC_{gEXo kJzI{E3`ZBGq5-2AS@-hzkia3?Z$nn%{GHEZT# zyh@Xux-}qBBLk_WtsfdiRhkGtX ~n;9cy7%;h}Vy}uRo%7i3>4Y z>PSxcQ-lqhpj}W#kC2{KT$t>!937AQeiG6#BbpNP7_~HYwY4I4txA}*hDNA(eP-2S zC=U6V&WKjm7?x6+yf-Z6vGSN%;;O##7{--YSdw|;1Tz#Kn|kgzP5Rt_zd%z4hvhU{ z5abD#7N;h{qDA@A=Y=cDn_7wtU@}|qWz0tl^7Uq0nyd!_ra c96E#bGESEm9uG1s76qa1p zduaJGnM#iO` h|AS`;y=%PekvMKO^1-$gnYM9XVrCt@S=a&Oi_ zKi`OZi4^X$f2%Z!_XvZoLPUeHw&h=ym;86V3XKTW)!f$b`HhT@QPMHS6+o)|jU`!Q z1R{_8kqN}jnFJqWRc2GVvasVA8{V_s;p+JZPQh)b-Arp?^1=2ist E=~eASQBiZ!kk(M z2N~zXX+Sm23 Jef zGqN!z9FKff56gloQ fZ;)wm_YS!W9@IF z^NllpKD#o60?>J7@FK9p60?rf(rw5@H5N+)=u71Uu}V r+}X*Dnek8b<&!T zbLI9;rWG9neAm9Bc%L#M!$cF`+b|<5J!yN@Ek>P3h@?L$$Vg<>f2p}CA!5-XfbPxa z `eVLLVZ zqw<@@AWL=HDrCirfZwIN|7wDK1lbQck^3pHhn#Kj7*#haiJ2P!u1X}X1+G{GOBOTS zfVLxG^}r{FSAZ;mtg@c>6S9{ )Lbr8l^ zX#18gDvR?Q+s^WET?&36^zMo3eOcFKBv*_R#FvWHHw)7d>H1-E9b?icilpc2uc_}j z@~ZpRfEqRh- _fCUH!={=5XXTp~uvIW3LAJqJ;a}1BNkB_-43_FVOLp#~=~eZc zXFm*`kLFkPUq96sPvfpcin@tmRWb_6eUlIJp4XAfU7N;|mo{Sb)&=b3HFW^C{FFJM ziyzoNTdALgRLX?3-vgwbv;sxBXbE|T&W 3I?|zvkbb)R(wsWprAtTtkx$>Vq4+Ou^A?TG;waS9S1wZ5 zQPJIt2yHd-2vRP}FB>ai#52$jSe75+m^7wry~&3c|I|3#@S1h9>QP7YGfPZ`^r*$; z1~`mj^U&4dq^28ACcbyg_;jX6ezkVNlYR>X5;_+VBZ+->{_#w{uo)5pkgx-6qrw=O zIX!zdDvyjaVLaHpA0{G8!C6{YZN7!Z7-4cSLW}J_rg!nqyxgcd(w~+anUi}3_4!sl z)b@Zxnlu&hkrlRed6x3h3C#!x6a4e 2MO$ao zLb^NTLMmV?K?dA=XVe~}X* PZ!ix0!20q4ez z@Rr!YpN>_~F3NXwh{n`Yw1KKaZ$Jj56Xn5V-CvGyWuaL%<4JB>VkQTH`y|;k?x?T3 z)Usn7Mj7y@^S?EzHUdfWK}I>Y$g(TS+23b!*5+NogBrz&IIWgt1`cANp~$GbQ_xRE z24FLe1n#q>^!DUWQQ|7^6V`bKynXB*``ZjLFY@trl?p6JdS`5SeAmIxM3Quq4X`q_ ziPfd!W$O>?ZMVSgm`BE3t*xe71cv0G6T?RECDYP031q;??dhNR-n9{Dk?6?t*(p^j zOt6|hFtv!N2M>)Idd=#W*@td*#+=#mq^4K)=`x>&CO8u%r??1FTA@dz2smlaa)QHc z%lh#U!GKustdGWWFmMP$6aZk8t}ZfZ;UvOoL^4H`G`mcsUV$uz=#KD>rdK9XmLW6& z`7|J-peVRip;v@9zGa#f#f`{oCE A^qguF_L%- z7)iNgT?#V~9!JTM@zSyOCp5IVHq?-Y_|uqxWPoTr&X4CzmF7L`2 B=&u!}yWy4iAN<3CdJrG%Ygry7^YY&ker*+1zLfHK$JS{PrvSWTEBU#y z!s>-`B9`I<^hQfvRLT1fO)(f}bBNlUNG<+Dk+cbDqNtzOu%V7hn={lJAngPP&*`kZ zvGlrQL9N!b@K_UY-9lBcehT{2V8E`3VM4AVa61-O4z|{D5?pIGQm{@<5Y6umUS=H@ zyoI}ETG|Miwgvb*I1w^YVr0ljA41>3C0M$0bi~26wr1(ljb;JYVJ?kPpIiop_v{!y z=U^w2g_xc^jvtNRWBrHq7Oy%9&0nM#w|LKPB1L?bDt*~A#B+ja5r{BG4F&v2Taj#B zOWW^qyfwl0-td4pQf^zfXPL1E+p^2K|1GC27jE<>++0N~3kd-Rqo+s^FmO@aMn~gH z7;CR3`F~;`Gz>p3CO|+c6+Z=X?)wB6<2q8O7SI7-FZr{)c*HHQiDI|D69qh;xv6>Z zFDgt*iGG5{z T zpg4yrK*lq9;_E^pV@OQ<=Hb(5%= YdSYB+vZD*R?YYzc3iW87R$=&PjxInGg8xNz?yDY_K~TcuYyTe4nHq7jr|tyAbJ z@0piowN@eB#Q_A7DPofV;YdjulY7i*8+Em1CL?=_{$)JRkr *~g%EqynZ0 zXk?U-dex5u>$UIq54=>E`ofo$;&B~;$}{|f`r47bIvIXerD%q(rX(tEu_#)fjA_Zg zfj(8HkNk>qGX5a FA25E(4IuTmW zZ)(3CwRQ$L9L 7jRK*xVFvF(QVEiQC$2%Sx?fn{*SQwxu>?Xic?F+QE(E)Q zSnuo4*U8}h5~geLsiz}OkN6wz`VrF=3638RoDU !{fNed~}b==-TjMELgD8{veAwTq1?xLJ2(0 zyCx+@@Pv~bHr=G$Is3q#ZQ2jy!v0Q^SNh(r_>t)&babkMSuU k`&%$C13G>-&H?0$3JRB%C~ash#^cz!cIRKhU&Eesk^-co`CNzgI09r zZFb|S-}pM$W4zF5jEBWn^*Iz+>(?`a0I8mS(<80n!Kp)&JpeZxjLf3X@J`DxmhODQ z8CnP}@iKAJT@SdY!Y$69X1o*VQ;?%XxIV3JhqgkeLr3GT1#Si&g9mV7d4`li17Rc3 zA&4P;mDE<#x|`8_EZm|`wHxYHb!{}aO8$02IM5Zbjn#G!R<}sN5TqeOS3JL+MNhRC zcXiAs7gHj}Kay>&SN#+Ivu_`FsT21L8X)VJ^Ubpu%I9W{76Ri>>10Qg0%aWpY>)We ziAzg3Ya-ASIv-b~pd;%}sd9AXZfv`X^PM9f>xQZrAKWYRC`=|?bf*_^ZFY@`II z@qH`*P=(4vy-YpMKjj&;<9YC56u&sBE1tn}La6;VGOE
N#*Ab^Mw7Z(b)lr(9{-b~F+6lbwLTnoc81 )F-xMwjv*Nz4y~I zovSp<;*HHBCr$9B!>+MpL`3-}ot^qEi6SElPy`$merL+NAX>&G+!D6KE5TO4I_aun zvsKH`h61F2t{stN86TI-YC)75*)HWXoU57-dm|2cptLYeldP2t;1CShE2N4Xv_O<7 zBXIN=|2EZbM%WwkSwf^G>;|ZSSwdFA(CP^ms$oxd($H-JP>oTE(;3q${}H_cy 2e-pf+Plia`s P8P%cO;Bwicd)BJXZ)9Gro)pV{NNj5^6kUxD!ByLC0_WGF>O!6m0tfk<(Ev7`? zw@F*8CE6`0(LiisC_asaP;sC5-WGEB{k4Dxrx!7gn8y6<^RrR!O^5A-c&E57<6Ckl zbL=!5b9!j%E|ant{m`5gWkAMc?OAFKDhxUmPDwT_@21gcNV3a0@u0aoW3}ynP#i8m z3~6EDB+_dg7GCbd;`3V($Hi;vD!?rITStRr10#pniGv}oo4 &CUO-#H?rDkbiW*2aYc{+K{F(tL%)zCs~=&FneN;6qb$~GYf7a!{fv! zsVR``p);Dnka~7xo%KsLMEt12i3i6GyXqmdRBSj)35=$Pntzk8i$C~k;Qxygjz(zG zD5cPM398AN#!}b=_@pbq(4`?MEBfNns$s_})1c7I#k=-E0RDn?gr+RPdsV`;#asB} zv;jf=N7sEXJ;E3u2W)!U8^cwa2OCy3DeF`(X=-W%oCz>%Tk*Hkm{GUp7a&goN=IVL z{|q}T1#gf5ezgmzw)JP^>@W{#166-Vjizdk3?3F>F9TNwWWoIt4?OEXb0U~3Ri}<; zY+GTbeSxo`HzYeNRpA8!{J|s%f-vo!8vz$zCRz95<3*5Rj3$dj)b})|13U-LhTaE! zkRM+FoB&^C%pE=jZ{$--?8Wn?W+KSFL7-*~%A|DO_KCODOjJtrIt1~Ae^q~ktDhOE z8sf(X>$%h_<>Rb`tr1Xalq7{%@J}J|{&TD! p15YWsI9Y>U5o|fQSY|pM8H`;vW3;0p{NVUG zEXX3h%$DBZMO;0Fe(4|_i~N>(^AUVd#KGw7Et+3imMT`n^yFou%1o{a_8*;M1Z<&h z^>%{=TYmOPRa?m+?ge~1L(^I)!=x1=F(&t;LgGTW7=x~wXJME1MxukFj}(b!T3xX6 z78!_MA3DuPvGYCYoOQfDgGX+v{>y!q>+a%vpcQy~hfDfrq1J2e1*5=jxQHl=uJ_(I z&`Yj1ufiAi_Z5^+Kr$dE5fJG1ougNXjKqw=-miYnKVSZ@I|xSw#m}|jsNZHYMt0;a zd6rjZ&r(~y-;rq_ov-S9H+?6=2zpJUD{d{~6F_nZn1hm<`cFlG?t+?!#tOFEB|mgE z!bJv+8f$%Y&e;?4jxwo tmb2&(5TCZG=ei7OkQD!0qWv z)7V^M8yj^c&YXjGi43Sc5`_pKidcArca;56OgXp^U{3a^6Jih)&srykYue39c=pF! zX8pq-m4#g0A#)qo*`->qXCHFQ>C~b?w<9u^*R~@;F$6|P>ICq{eIN9}MU2E%RB{3T zF$SZ2CNRE48WbltW#9OrJ;XY&cxe@lf1_g`dG!t}ey)8mMOPcz!o{pI?g YP${|pYJ(g?pd9r6%Xoct@rBo) zh7Z*h*g>X@SILy-jE(-0V6RCK?Bjb3-e#mrdw`X46vyoa>5}0RhbZPJKF|rNY0ObL zQa7kKUXLWg^R!57el^37TF3{3 RKbY3-RF zGxE-43X VV^j)wXnL}$aOFHGHXZhM-|q}VL@nUWdW@ B1XmAj@``gjzuw~FRNu#IFDpG&hXV+GfPHd8AOZjR%NKgNsXQ{@y*bvOMa=` zHsJXia2$dowC!M+g&4tenmtdd&T|LXz{NER)8dFUdh*ENrwIRu61Pc*aYz8Wh~{qR z> _v5Rqv WW gS*EpJNJZ_XM#7;Bg4xXU!4+w@K3KRd54>y(Z z`>3k+>Po-mu3GG#{H2Wax@9>b8*9|F!0C#0TinGh5lS)keN{6kQ$IU`8t)XKw$IYy z2j)&^{+9%U^zO2BZKtxhR)E7OxOlx7oM(tiY0oJw1(RO;RjX$ex*cC$gj(uAn6)9; zYTSljseI5sQGz`vYF`$q=BO#%>Rokhh8@^=^G#WumAZC-YY^2PpV2Ch_E{|3LimU% zn^w-Lfrm<(6Iz1KdSijCN|+#h);Dxa;yYRIwCS4v(g!&