From 7e5f6fd708859bd328423b124aefb956be09bb6f Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Fri, 28 Nov 2025 20:55:08 +0500 Subject: [PATCH 01/66] add (solution): add addition task --- 01_week/tasks/addition/addition.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/01_week/tasks/addition/addition.cpp b/01_week/tasks/addition/addition.cpp index 92872802..3529a582 100644 --- a/01_week/tasks/addition/addition.cpp +++ b/01_week/tasks/addition/addition.cpp @@ -1,7 +1,6 @@ #include -#include int64_t Addition(int a, int b) { - throw std::runtime_error{"Not implemented"}; + return static_cast(a) + static_cast(b); } \ No newline at end of file From 918f221bd7e3a47bc28c342405d128529ad2b3b3 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Fri, 28 Nov 2025 21:06:24 +0500 Subject: [PATCH 02/66] add (solution): add rms task --- 01_week/tasks/rms/rms.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/01_week/tasks/rms/rms.cpp b/01_week/tasks/rms/rms.cpp index 6882f0a9..2c14e09e 100644 --- a/01_week/tasks/rms/rms.cpp +++ b/01_week/tasks/rms/rms.cpp @@ -1,7 +1,14 @@ -#include -#include +#include double CalculateRMS(double values[], size_t size) { - throw std::runtime_error{"Not implemented"}; + if (size == 0 || values == nullptr) return .0; + + double result = 0; + for (size_t i = 0; i < size; ++i) { + result += values[i]*values[i]; + } + + // size неявно преобразуется к double + return sqrt(result / size); } \ No newline at end of file From 674d723f40f9665d98ba22f2709d17def13e0212 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Fri, 28 Nov 2025 21:22:27 +0500 Subject: [PATCH 03/66] add (solution): add quadratic task --- 01_week/tasks/quadratic/quadratic.cpp | 38 +++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/01_week/tasks/quadratic/quadratic.cpp b/01_week/tasks/quadratic/quadratic.cpp index abf7d632..ca0f37ae 100644 --- a/01_week/tasks/quadratic/quadratic.cpp +++ b/01_week/tasks/quadratic/quadratic.cpp @@ -1,6 +1,40 @@ -#include +#include +#include +#include void SolveQuadratic(int a, int b, int c) { - throw std::runtime_error{"Not implemented"}; + double a_db = static_cast(a); + double b_db = static_cast(b); + double c_db = static_cast(c); + + if (!a && !b && !c) { + std::cout << "infinite solutions"; + return; + } + + if (a == 0) { + b_db != 0 ? std::cout << -(c_db / b_db) : std::cout << "no solutions"; + return; + } + + if (b == 0 && c == 0) { + std::cout << 0; + return; + } + + double discriminant = b_db*b_db - 4*a_db*c_db; + + if (discriminant > 0) { + double x1 = (-b_db - sqrt(discriminant)) / (2 * a_db); + double x2 = (-b_db + sqrt(discriminant)) / (2 * a_db); + std::cout << std::setprecision(6) << x1 << ' ' << x2; + } + else if (discriminant == 0) { + double x = -b_db / (2 * a_db); + std::cout << std::setprecision(6) << x; + } + else { + std::cout << "no solutions"; + } } \ No newline at end of file From 3e0971d9d79030ba5b8315fcbd183fc559f35aa8 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Fri, 28 Nov 2025 21:23:03 +0500 Subject: [PATCH 04/66] add (solution): add print_bits task --- 01_week/tasks/print_bits/print_bits.cpp | 28 ++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/01_week/tasks/print_bits/print_bits.cpp b/01_week/tasks/print_bits/print_bits.cpp index a48a43c1..5e1c4fd2 100644 --- a/01_week/tasks/print_bits/print_bits.cpp +++ b/01_week/tasks/print_bits/print_bits.cpp @@ -1,7 +1,29 @@ -#include -#include +#include +#include void PrintBits(long long value, size_t bytes) { - throw std::runtime_error{"Not implemented"}; + long long bit_index = 1ll; // 0b0000'...'000 + + size_t bits = bytes * 8; + size_t delims = 1 + 2 * (bytes - 1); + + // Выделяем буфер под биты, апострофы и '\0' в конце + size_t buffer_size = bits + delims + 1; + + char* buffer = new char[buffer_size] {'\0'}; + + for (int i = buffer_size - 2; i >= 0; --i) { + if (i % 5 == 4) { + buffer[i] = '\''; + } else { + buffer[i] = static_cast(value & bit_index) + '0'; + bit_index = bit_index << 1; + } + } + + std::cout << "0b" << buffer << std::endl; + + delete[] buffer; + buffer = nullptr; } From 8888db2befe139821c05afdc364f0ec85819345e Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Fri, 28 Nov 2025 21:23:43 +0500 Subject: [PATCH 05/66] add (solution): add length_lit task --- 01_week/tasks/length_lit/length_lit.cpp | 51 +++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/01_week/tasks/length_lit/length_lit.cpp b/01_week/tasks/length_lit/length_lit.cpp index e69de29b..f2e02fac 100644 --- a/01_week/tasks/length_lit/length_lit.cpp +++ b/01_week/tasks/length_lit/length_lit.cpp @@ -0,0 +1,51 @@ +// ==== Перевод футов ==== +constexpr long double operator""_ft_to_m(long double ft) { + return ft * 0.3048L; +} + +constexpr long double operator""_ft_to_cm(long double ft) { + return ft * 30.48L; +} + +constexpr long double operator""_ft_to_in(long double ft) { + return ft * 12.0L; +} + +// ==== Перевод дюймов ==== +constexpr long double operator""_in_to_m(long double in) { + return in * 0.0254L; +} + +constexpr long double operator""_in_to_cm(long double in) { + return in * 2.54L; +} + +constexpr long double operator""_in_to_ft(long double in) { + return in / 12.0L; +} + +// ==== Перевод метров ==== +constexpr long double operator""_m_to_ft(long double m) { + return m * 3.280839895L; +} + +constexpr long double operator""_m_to_in(long double m) { + return m * 39.37007874L; +} + +constexpr long double operator""_m_to_cm(long double m) { + return m * 100.0L; +} + +// ==== Перевод сантиметров ==== +constexpr long double operator""_cm_to_m(long double cm) { + return cm / 100.0L; +} + +constexpr long double operator""_cm_to_ft(long double cm) { + return cm * 0.03280839895L; +} + +constexpr long double operator""_cm_to_in(long double cm) { + return cm * 0.3937007874L; +} \ No newline at end of file From 6ba1cc784a1c4cc48ebff52908a1aa246e069aab Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Fri, 28 Nov 2025 21:24:24 +0500 Subject: [PATCH 06/66] add (solution): add check_flags task --- 01_week/tasks/check_flags/check_flags.cpp | 57 ++++++++++++++++++++++- 1 file changed, 55 insertions(+), 2 deletions(-) diff --git a/01_week/tasks/check_flags/check_flags.cpp b/01_week/tasks/check_flags/check_flags.cpp index 75e7c652..877d11c1 100644 --- a/01_week/tasks/check_flags/check_flags.cpp +++ b/01_week/tasks/check_flags/check_flags.cpp @@ -1,5 +1,7 @@ #include -#include +#include +#include +#include enum class CheckFlags : uint8_t { @@ -13,6 +15,57 @@ enum class CheckFlags : uint8_t { ALL = TIME | DATE | USER | CERT | KEYS | DEST }; +CheckFlags operator&(CheckFlags lhs, CheckFlags rhs) { + return static_cast(static_cast(lhs) & static_cast(rhs)); +} + +std::string GetFlagName(CheckFlags flags) { + switch (flags) { + case CheckFlags::TIME: + return "TIME"; + case CheckFlags::DATE: + return "DATE"; + case CheckFlags::USER: + return "USER"; + case CheckFlags::CERT: + return "CERT"; + case CheckFlags::KEYS: + return "KEYS"; + case CheckFlags::DEST: + return "DEST"; + default: + return ""; + } +} + void PrintCheckFlags(CheckFlags flags) { - throw std::runtime_error{"Not implemented"}; + // Проверка на выход за диапозон значений CheckFlags + if (static_cast(CheckFlags::ALL) < static_cast(flags)) { + return; + } + + std::vector checks{ + CheckFlags::TIME, + CheckFlags::DATE, + CheckFlags::USER, + CheckFlags::CERT, + CheckFlags::KEYS, + CheckFlags::DEST, + }; + + std::vector flags_names{}; + for (auto &check : checks) { + if (std::string flag_name = GetFlagName(flags & check); flag_name != "") { + flags_names.push_back(flag_name); + } + } + + std::string result = "["; + for (size_t i = 0, flags_size = flags_names.size(); i < flags_size; ++i) { + result += flags_names[i]; + if (i != flags_size - 1) { + result += ','; + } + } + std::cout << result << ']'; } From 03782e6169b34e6cfeb19d46a1c60959939675cf Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Fri, 28 Nov 2025 21:24:56 +0500 Subject: [PATCH 07/66] add (solution): add char_changer task --- 01_week/tasks/char_changer/char_changer.cpp | 50 ++++++++++++++++++++- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/01_week/tasks/char_changer/char_changer.cpp b/01_week/tasks/char_changer/char_changer.cpp index 3a7344d9..cecca82c 100644 --- a/01_week/tasks/char_changer/char_changer.cpp +++ b/01_week/tasks/char_changer/char_changer.cpp @@ -1,7 +1,53 @@ #include -#include +#include size_t CharChanger(char array[], size_t size, char delimiter = ' ') { - throw std::runtime_error{"Not implemented"}; + // k - указатель для массива array без дубликатов + size_t k = 0; + + // size - размер массива с учётом '\0' в конце + for (size_t i = 0; i < size - 1; ++i) { + // сохраняем символ до его замены и приводим его к uint + // функции isdigit, islower и др. не работают с отрицательным кодами + char old_symbol = static_cast(array[i]); + + // определяем тип замены + if (isdigit(old_symbol)) { + array[k++] = '*'; + } + else if (old_symbol == ' ') { + array[k++] = delimiter; + } + else if (islower(old_symbol)) { + array[k++] = toupper(old_symbol); + } + else if (isupper(old_symbol)) { + array[k++] = old_symbol; + } + else { + array[k++] = '_'; + } + + // поиск и подсчёт дубликатов + size_t j = i + 1; + while (j < size && array[j] == old_symbol) { + ++j; + } + + // если есть дубликаты + if (size_t duplicates = j - i - 1; duplicates > 0) { + // обновляем указатель i + i += duplicates; + + // добавляем счётчик после повторяющегося символа (кроме ' ') + if (old_symbol != ' ') + array[k++] = duplicates + 1 >= 10 ? '0' : duplicates + 1 + '0'; + } + } + + // устанавливаем новый конец массива + array[k] = '\0'; + + return k; } From 6d671ea8edca061734f241cc5de57d9899d52a34 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Wed, 3 Dec 2025 08:41:23 +0500 Subject: [PATCH 08/66] add (github): add .gitignore file --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..db7aacbe --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +build +build-asan +.vscode +main \ No newline at end of file From 2b0311dff339924a2c2a8a8e78f21e37a1fe0784 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Wed, 3 Dec 2025 14:03:12 +0500 Subject: [PATCH 09/66] update (github): add main.cpp in .gitignore --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index db7aacbe..261348ae 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ build build-asan .vscode -main \ No newline at end of file +main +main.cpp \ No newline at end of file From 70b62121aa0912c99eff90bc586ca424c02422bd Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Wed, 3 Dec 2025 18:10:44 +0500 Subject: [PATCH 10/66] add (solution): add func_array task --- 02_week/tasks/func_array/func_array.cpp | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/02_week/tasks/func_array/func_array.cpp b/02_week/tasks/func_array/func_array.cpp index b327e68d..badc47dd 100644 --- a/02_week/tasks/func_array/func_array.cpp +++ b/02_week/tasks/func_array/func_array.cpp @@ -1,6 +1,15 @@ -#include +#include -double ApplyOperations(double a, double b /* other arguments */) { - throw std::runtime_error{"Not implemented"}; +double ApplyOperations(const double a, const double b, double (*func_arr[])(double, double), const size_t size) { + if (size == 0) return 0; + + double result = 0; + + for (size_t i = 0; i < size; ++i) { + if (func_arr[i]) + result += func_arr[i](a, b); + } + + return result; } \ No newline at end of file From fcce8024e768038b24b4eafe76744b5d2445727c Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Wed, 3 Dec 2025 18:11:21 +0500 Subject: [PATCH 11/66] add (solution): add last_of_us task --- 02_week/tasks/last_of_us/last_of_us.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/02_week/tasks/last_of_us/last_of_us.cpp b/02_week/tasks/last_of_us/last_of_us.cpp index c7bf1a25..9a3a7ce1 100644 --- a/02_week/tasks/last_of_us/last_of_us.cpp +++ b/02_week/tasks/last_of_us/last_of_us.cpp @@ -1,6 +1,14 @@ -#include +int* FindLastElement(const int* begin, const int* end, bool (*predicate)(int)) { + if (!begin || !end || !predicate || begin > end) + return const_cast(end); + int* last = const_cast(end); -/* return_type */ FindLastElement(/* ptr_type */ begin, /* ptr_type */ end, /* func_type */ predicate) { - throw std::runtime_error{"Not implemented"}; + for (; begin < end; ++begin) { + if (predicate(*begin)) { + last = const_cast(begin); + } + } + + return last; } \ No newline at end of file From 3b1e4bae750767be18d581ea5c1c5a51aa62e98d Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Wed, 3 Dec 2025 18:11:53 +0500 Subject: [PATCH 12/66] add (solution): add little_big task --- 02_week/tasks/little_big/little_big.cpp | 41 +++++++++++++++++++++---- 1 file changed, 35 insertions(+), 6 deletions(-) diff --git a/02_week/tasks/little_big/little_big.cpp b/02_week/tasks/little_big/little_big.cpp index abe24379..6a7ee142 100644 --- a/02_week/tasks/little_big/little_big.cpp +++ b/02_week/tasks/little_big/little_big.cpp @@ -1,10 +1,39 @@ -#include +#include +#include -void PrintMemory(int /* write arguments here */) { - throw std::runtime_error{"Not implemented"}; +void PrintMemory(int num, bool is_little_endian = false) { + const u_char* begin = reinterpret_cast(&num); + const u_char* end = reinterpret_cast(&num) + sizeof(num); + + std::cout << "0x" << std::hex << std::uppercase; + if (is_little_endian) { + for (const u_char* ptr = end - 1; ptr >= begin; --ptr) { + std::cout << std::setfill('0') << std::setw(2) << static_cast(*ptr); + } + } + else { + for (const u_char* ptr = begin; ptr < end; ++ptr) { + std::cout << std::setfill('0') << std::setw(2) << static_cast(*ptr); + } + } + std::cout << std::endl; } -void PrintMemory(double /* write arguments here */) { - throw std::runtime_error{"Not implemented"}; -} \ No newline at end of file +void PrintMemory(double num, bool is_little_endian = false) { + const u_char* begin = reinterpret_cast(&num); + const u_char* end = reinterpret_cast(&num) + sizeof(num); + + std::cout << "0x" << std::hex << std::uppercase; + if (is_little_endian) { + for (const u_char* ptr = end - 1; ptr >= begin; --ptr) { + std::cout << std::setfill('0') << std::setw(2) << static_cast(*ptr); + } + } + else { + for (const u_char* ptr = begin; ptr < end; ++ptr) { + std::cout << std::setfill('0') << std::setw(2) << static_cast(*ptr); + } + } + std::cout << std::endl; +} From f316b430a0f763d862d38fdfd9f46c539903ad07 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Wed, 3 Dec 2025 18:12:18 +0500 Subject: [PATCH 13/66] add (solution): add longest task --- 02_week/tasks/longest/longest.cpp | 42 ++++++++++++++++++++++++++++--- 1 file changed, 39 insertions(+), 3 deletions(-) diff --git a/02_week/tasks/longest/longest.cpp b/02_week/tasks/longest/longest.cpp index 04b3c354..be3163e2 100644 --- a/02_week/tasks/longest/longest.cpp +++ b/02_week/tasks/longest/longest.cpp @@ -1,6 +1,42 @@ -#include +#include -/* return_type */ FindLongestSubsequence(/* ptr_type */ begin, /* ptr_type */ end, /* type */ count) { - throw std::runtime_error{"Not implemented"}; +char* FindLongestSubsequence(const char* begin, const char* end, size_t& count) { + if (!begin || !end || begin >= end) { + count = 0; + return nullptr; + } + + int max_len = 1; + int curr_len = 1; + char* sub_begin = nullptr; + char* result = const_cast(begin); + + for (; begin < end - 1; ++begin) { + if (*(begin + 1) == *begin) { + if (sub_begin == nullptr) { + sub_begin = const_cast(begin); + } + ++curr_len; + continue; + } + else if (curr_len > max_len) { + max_len = curr_len; + result = sub_begin; + + } + + curr_len = 1; + sub_begin = nullptr; + } + + if (curr_len > max_len) { + max_len = curr_len; + curr_len = 1; + result = sub_begin; + } + + count = max_len; + + return result; } From c1876928d26e4cfd430411c7202471c74bedbac4 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Wed, 3 Dec 2025 18:12:42 +0500 Subject: [PATCH 14/66] add (solution): add pretty_array task --- 02_week/tasks/pretty_array/pretty_array.cpp | 38 +++++++++++++++++++-- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/02_week/tasks/pretty_array/pretty_array.cpp b/02_week/tasks/pretty_array/pretty_array.cpp index 48eab341..ed8fb483 100644 --- a/02_week/tasks/pretty_array/pretty_array.cpp +++ b/02_week/tasks/pretty_array/pretty_array.cpp @@ -1,6 +1,38 @@ -#include +#include -void PrintArray(/* write arguments here */) { - throw std::runtime_error{"Not implemented"}; +void PrintArray(const int* begin, const int* end, const int threshold = 0) { + if (!begin || !end) { + std::cout << "[]\n"; + return; + } + + std::cout << "["; + if (begin < end) { + for (const int* ptr = begin; ptr < end; ++ptr) { + if (threshold && static_cast(ptr - begin) % threshold == 0 && ptr != begin) { + std::cout << "...\n "; + } + + std::cout << *ptr; + + if (ptr != end - 1) { + std::cout << ", "; + } + } + } + else { + for (const int* ptr = begin; ptr > end; --ptr) { + if (threshold && static_cast(ptr - begin) % threshold == 0 && ptr != begin) { + std::cout << "...\n "; + } + + std::cout << *ptr; + + if (ptr != end + 1) { + std::cout << ", "; + } + } + } + std::cout << "]" << std::endl; } \ No newline at end of file From bef6f6fe7ee84ba90db64a65246497a2ed4cfdd0 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Wed, 3 Dec 2025 18:13:15 +0500 Subject: [PATCH 15/66] add (solution): add swap_ptr task --- 02_week/tasks/swap_ptr/swap_ptr.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/02_week/tasks/swap_ptr/swap_ptr.cpp b/02_week/tasks/swap_ptr/swap_ptr.cpp index 93db625d..228e1a68 100644 --- a/02_week/tasks/swap_ptr/swap_ptr.cpp +++ b/02_week/tasks/swap_ptr/swap_ptr.cpp @@ -1,6 +1,5 @@ -#include - - -void SwapPtr(/* write arguments here */) { - throw std::runtime_error{"Not implemented"}; +void SwapPtr(auto*& ptr1, auto*& ptr2) { + auto temp = ptr1; + ptr1 = &*ptr2; + ptr2 = &*temp; } \ No newline at end of file From b5e60482d1c5b3d15091b1072ae6ec5ad84f50e9 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Tue, 16 Dec 2025 20:10:47 +0500 Subject: [PATCH 16/66] add (solution): add data_stats task --- 03_week/tasks/data_stats/data_stats.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/03_week/tasks/data_stats/data_stats.cpp b/03_week/tasks/data_stats/data_stats.cpp index b941c211..61b874d5 100644 --- a/03_week/tasks/data_stats/data_stats.cpp +++ b/03_week/tasks/data_stats/data_stats.cpp @@ -1,4 +1,6 @@ -#include +#include +#include +#include struct DataStats { @@ -6,6 +8,20 @@ struct DataStats { double sd = 0.0; }; -/* return_type */ CalculateDataStats(/* args */) { - throw std::runtime_error{"Not implemented"}; +DataStats CalculateDataStats(const std::vector& arr) { + DataStats data_stats{}; + + if (arr.empty()) return data_stats; + + // Считаем обычную сумму и сумму квадратов вектора + for (size_t i = 0; i < arr.size(); ++i) { + data_stats.avg += arr[i]; + data_stats.sd += std::pow(arr[i], 2); + } + + // По суммам считаем среднее и sd + data_stats.avg /= arr.size(); + data_stats.sd = sqrt(data_stats.sd / arr.size() - std::pow(data_stats.avg, 2)); + + return data_stats; } From 8bec754b58ef58cc001fdcbcc631c01be6620576 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Tue, 16 Dec 2025 20:11:18 +0500 Subject: [PATCH 17/66] add (solution): add easy_compare task --- 03_week/tasks/easy_compare/easy_compare.cpp | 71 +++++++++++++++++++-- 1 file changed, 66 insertions(+), 5 deletions(-) diff --git a/03_week/tasks/easy_compare/easy_compare.cpp b/03_week/tasks/easy_compare/easy_compare.cpp index dd5cb7f6..df0c8e42 100644 --- a/03_week/tasks/easy_compare/easy_compare.cpp +++ b/03_week/tasks/easy_compare/easy_compare.cpp @@ -1,10 +1,12 @@ -#include +#include +#include +#include struct Date { - unsigned year; - unsigned month; - unsigned day; + unsigned year = 0u; + unsigned month = 0u; + unsigned day = 0u; }; struct StudentInfo { @@ -13,4 +15,63 @@ struct StudentInfo { int score; unsigned course; Date birth_date; -}; \ No newline at end of file +}; + +bool operator<(Date lhs, Date rhs) { + return std::tie(lhs.year, lhs.month, lhs.day) < std::tie(rhs.year, rhs.month, rhs.day); +} + +bool operator==(Date lhs, Date rhs) { + return std::tie(lhs.year, lhs.month, lhs.day) == std::tie(rhs.year, rhs.month, rhs.day); +} + +bool operator!=(Date lhs, Date rhs) { + return !(lhs == rhs); +} + +bool operator>(Date lhs, Date rhs) { + return !(lhs < rhs || lhs == rhs); +} + +bool operator>=(Date lhs, Date rhs) { + return !(lhs < rhs); +} + +bool operator<=(Date lhs, Date rhs) { + return lhs < rhs || lhs == rhs; +} + +bool operator<(StudentInfo& lhs, StudentInfo& rhs) { + if (lhs.mark != rhs.mark) { + return lhs.mark > rhs.mark; + } + else if (lhs.score != rhs.score) { + return lhs.score < rhs.score; + } + else if (lhs.course != rhs.course) { + return lhs.course > rhs.course; + } + else { + return lhs.birth_date < rhs.birth_date; + } +} + +bool operator==(StudentInfo& lhs, StudentInfo& rhs) { + return lhs.mark == rhs.mark && lhs.score == rhs.score; +} + +bool operator!=(StudentInfo& lhs, StudentInfo& rhs) { + return !(lhs == rhs); +} + +bool operator>(StudentInfo& lhs, StudentInfo& rhs) { + return !(lhs < rhs || lhs == rhs); +} + +bool operator>=(StudentInfo& lhs, StudentInfo& rhs) { + return !(lhs < rhs); +} + +bool operator<=(StudentInfo& lhs, StudentInfo& rhs) { + return lhs < rhs || lhs == rhs; +} \ No newline at end of file From 99f7f9fe3a303ac3be9ded007887d733ec45f5e5 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Tue, 16 Dec 2025 20:12:32 +0500 Subject: [PATCH 18/66] add (solution): add enum_operators task --- .../tasks/enum_operators/enum_operators.cpp | 109 ++++++++++++++++-- 1 file changed, 98 insertions(+), 11 deletions(-) diff --git a/03_week/tasks/enum_operators/enum_operators.cpp b/03_week/tasks/enum_operators/enum_operators.cpp index a539be38..bc8ecee9 100644 --- a/03_week/tasks/enum_operators/enum_operators.cpp +++ b/03_week/tasks/enum_operators/enum_operators.cpp @@ -1,5 +1,7 @@ -#include #include +#include +#include +#include enum class CheckFlags : uint8_t { NONE = 0, @@ -12,22 +14,107 @@ enum class CheckFlags : uint8_t { ALL = TIME | DATE | USER | CERT | KEYS | DEST }; -/* return_type */ operator|(/* args */) { - throw std::runtime_error{"Not implemented"}; +std::pair truncate_invalid_flags(CheckFlags lhs, CheckFlags rhs) { + uint8_t all = static_cast(CheckFlags::ALL); + uint8_t left = static_cast(lhs) & all; + uint8_t right = static_cast(rhs) & all; + return std::pair{left, right}; } -/* return_type */ operator&(/* args */) { - throw std::runtime_error{"Not implemented"}; +uint8_t truncate_invalid_flags(uint8_t flags) { + uint8_t all = static_cast(CheckFlags::ALL); + uint8_t flags_cleared = flags & all; + return flags_cleared; } -/* return_type */ operator^(/* args */) { - throw std::runtime_error{"Not implemented"}; +CheckFlags operator|(CheckFlags lhs, CheckFlags rhs) { + auto [left, right] = truncate_invalid_flags(lhs, rhs); + return static_cast(left | right); } -/* return_type */ operator~(/* args */) { - throw std::runtime_error{"Not implemented"}; +bool operator&(CheckFlags lhs, CheckFlags rhs) { + auto [left, right] = truncate_invalid_flags(lhs, rhs); + + if (left == 0u || right == 0u) { + return false; + } + + uint8_t result = left & right; + return (result == left || result == right); +} + +CheckFlags operator^(CheckFlags lhs, CheckFlags rhs) { + auto [left, right] = truncate_invalid_flags(lhs, rhs); + return static_cast(left ^ right); +} + +CheckFlags operator~(CheckFlags flags) { + uint8_t flags_inverted = ~static_cast(flags); + uint8_t flags_cleared = truncate_invalid_flags(flags_inverted); + return static_cast(flags_cleared); +} + +std::string GetFlagName(CheckFlags flags, CheckFlags check) { + uint8_t flags_int = static_cast(flags); + uint8_t check_int = static_cast(check); + CheckFlags single_flag = static_cast(flags_int & check_int); + + if (single_flag & CheckFlags::TIME) { + return "TIME"; + } + else if (single_flag & CheckFlags::DATE) { + return "DATE"; + } + else if (single_flag & CheckFlags::USER) { + return "USER"; + } + else if (single_flag & CheckFlags::CERT) { + return "CERT"; + } + else if (single_flag & CheckFlags::KEYS) { + return "KEYS"; + } + else if (single_flag & CheckFlags::DEST) { + return "DEST"; + } + else if (single_flag & CheckFlags::NONE) { + return "NONE"; + } + else { + return ""; + } } -/* return_type */ operator<<(/* args */) { - throw std::runtime_error{"Not implemented"}; +std::ostream& operator<<(std::ostream& os, CheckFlags flags) { + std::vector checks{ + CheckFlags::TIME, + CheckFlags::DATE, + CheckFlags::USER, + CheckFlags::CERT, + CheckFlags::KEYS, + CheckFlags::DEST, + }; + + std::vector flags_names{}; + flags_names.reserve(checks.size()); + + for (size_t i = 0; i < checks.size(); ++i) { + if (flags & checks[i]) { + flags_names.push_back(GetFlagName(flags, checks[i])); + } + } + + if (flags_names.empty()) { + os << "NONE"; + return os; + } + + for (size_t i = 0, flags_size = flags_names.size(); i < flags_size; ++i) { + os << flags_names[i]; + if (i != flags_size - 1) { + os << ", "; + } + } + + return os; } From d56fc843f498b84f5b0af9b87f78404498dd7384 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Tue, 16 Dec 2025 20:13:09 +0500 Subject: [PATCH 19/66] add (solution): add filter task --- 03_week/tasks/filter/filter.cpp | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/03_week/tasks/filter/filter.cpp b/03_week/tasks/filter/filter.cpp index 6648cb39..86e7855a 100644 --- a/03_week/tasks/filter/filter.cpp +++ b/03_week/tasks/filter/filter.cpp @@ -1,6 +1,18 @@ -#include +#include +#include -/* return_type */ Filter(/* args */) { - throw std::runtime_error{"Not implemented"}; +void Filter(std::vector& arr, bool (*filter_func)(int)) { + if (!filter_func) return; + + size_t j = 0; + + for (size_t i = 0; i < arr.size(); ++i) { + if (filter_func(arr[i])) { + arr[j++] = arr[i]; + } + } + + size_t new_size = j; + arr.resize(new_size); } \ No newline at end of file From 6c80a35f2d54de91bf468865c5cbdc467dab5f2e Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Tue, 16 Dec 2025 20:13:31 +0500 Subject: [PATCH 20/66] add (solution): add find_all task --- 03_week/tasks/find_all/find_all.cpp | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/03_week/tasks/find_all/find_all.cpp b/03_week/tasks/find_all/find_all.cpp index 74f393b2..dcb19cf2 100644 --- a/03_week/tasks/find_all/find_all.cpp +++ b/03_week/tasks/find_all/find_all.cpp @@ -1,6 +1,19 @@ -#include +#include +#include -/* return_type */ FindAll(/* args */) { - throw std::runtime_error{"Not implemented"}; +std::vector FindAll(const std::vector& arr, bool (*bool_func)(int)) { + std::vector result{}; + result.reserve(arr.size()); + + if (!bool_func) return result; + + for (size_t i = 0; i < arr.size(); ++i) { + if (bool_func(arr[i])) { + result.push_back(i); + } + } + + result.shrink_to_fit(); + return result; } \ No newline at end of file From 495147e0b6de8fc55f57ad8fd23ac458832f564d Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Tue, 16 Dec 2025 20:13:57 +0500 Subject: [PATCH 21/66] add (solution): add minmax task --- 03_week/tasks/minmax/minmax.cpp | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) diff --git a/03_week/tasks/minmax/minmax.cpp b/03_week/tasks/minmax/minmax.cpp index c2869799..963569c5 100644 --- a/03_week/tasks/minmax/minmax.cpp +++ b/03_week/tasks/minmax/minmax.cpp @@ -1,6 +1,28 @@ -#include +#include +#include -/* return_type */ MinMax(/* args */) { - throw std::runtime_error{"Not implemented"}; +struct MinMaxResult { + std::vector::const_iterator min_it{}; + std::vector::const_iterator max_it{}; +}; + + +MinMaxResult MinMax(const std::vector& arr) { + MinMaxResult result{arr.end(), arr.end()}; + + if (arr.empty()) return result; + + result = {arr.begin(), arr.begin()}; + + for (size_t i = 1; i < arr.size(); ++i) { + if (arr[i] >= *result.max_it) { + result.max_it = arr.begin() + i; + } + else if (arr[i] < *result.min_it) { + result.min_it = arr.begin() + i; + } + } + + return result; } From 3aca2a289c30da47f458bd30e7468732c4b4d173 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Tue, 16 Dec 2025 20:16:06 +0500 Subject: [PATCH 22/66] add (solution): add os_overload task --- 03_week/tasks/os_overload/os_overload.cpp | 43 +++++++++++++++++++---- 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/03_week/tasks/os_overload/os_overload.cpp b/03_week/tasks/os_overload/os_overload.cpp index e473418d..99628a57 100644 --- a/03_week/tasks/os_overload/os_overload.cpp +++ b/03_week/tasks/os_overload/os_overload.cpp @@ -1,21 +1,50 @@ -#include #include #include +#include struct Coord2D { - int x; - int y; + int x = 0; + int y = 0; }; struct Circle { - Coord2D coord; - unsigned radius; + Coord2D coord{}; + unsigned radius = 1; }; using CircleRegion = std::pair; using CircleRegionList = std::vector; -/* return_type */ operator<<(/* args */) { - throw std::runtime_error{"Not implemented"}; +std::ostream& operator<<(std::ostream& lhs, const Coord2D& rhs) { + return lhs << '(' << rhs.x << ", " << rhs.y << ')'; +} + +std::ostream& operator<<(std::ostream& lhs, const Circle& rhs) { + if (rhs.radius == 0) { + return lhs << "circle[]"; + } + + return lhs << "circle[" << rhs.coord << ", r = " << rhs.radius << "]"; +} + +std::ostream& operator<<(std::ostream& lhs, const CircleRegion& rhs) { + return lhs << (rhs.second ? '+' : '-') << rhs.first; +} + +std::ostream& operator<<(std::ostream& lhs, const CircleRegionList& rhs) { + lhs << "{"; + + if (!rhs.empty()) { + lhs << "\n"; + lhs << '\t' << rhs[0]; + } + + for (size_t i = 1; i < rhs.size(); ++i) { + lhs << ",\n\t" << rhs[i]; + } + + lhs << (rhs.empty() ? "}" : "\n}"); + + return lhs; } From fd63ae439f1e0c3a8155395d96ba35424011b4e3 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Tue, 16 Dec 2025 20:16:31 +0500 Subject: [PATCH 23/66] add (solution): add range task --- 03_week/tasks/range/range.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/03_week/tasks/range/range.cpp b/03_week/tasks/range/range.cpp index d2085495..7b5243ad 100644 --- a/03_week/tasks/range/range.cpp +++ b/03_week/tasks/range/range.cpp @@ -1,7 +1,18 @@ -#include #include +#include -std::vector Range(int from, int to, int step) { - throw std::runtime_error{"Not implemented"}; +std::vector Range(int from, int to, const int step = 1) { + std::vector result{}; + result.reserve(std::abs(from - to)); + + bool is_to_from = from > to && step < 0; + bool is_from_to = from < to && step > 0; + while (is_from_to || is_to_from) { + result.push_back(from); + from += step; + } + + result.shrink_to_fit(); + return result; } From da78a7ed9dac7c98043ad5621f47a0c3484a6a67 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Tue, 16 Dec 2025 20:17:05 +0500 Subject: [PATCH 24/66] add (solution): add unique task --- 03_week/tasks/unique/unique.cpp | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/03_week/tasks/unique/unique.cpp b/03_week/tasks/unique/unique.cpp index 9d2545bb..291e4733 100644 --- a/03_week/tasks/unique/unique.cpp +++ b/03_week/tasks/unique/unique.cpp @@ -1,6 +1,17 @@ -#include #include +#include -/* return_type */ Unique(/* args */) { - throw std::runtime_error{"Not implemented"}; + +std::vector Unique(const std::vector& arr) { + std::vector unique{}; + unique.reserve(arr.size()); + + for (size_t i = 0; i < arr.size(); ++i) { + if (unique.empty() || unique[unique.size() - 1] != arr[i]) { + unique.push_back(arr[i]); + } + } + + unique.shrink_to_fit(); + return unique; } From 17693251db2cd31b23a22ffca351f61ee1b007a8 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Tue, 16 Dec 2025 20:23:03 +0500 Subject: [PATCH 25/66] chore: remove incomplete 04_week directory --- 04_week/04_class.md | 902 ----------------------------------------- 04_week/04_class.pdf | Bin 251118 -> 0 bytes 04_week/CMakeLists.txt | 15 - 3 files changed, 917 deletions(-) delete mode 100644 04_week/04_class.md delete mode 100644 04_week/04_class.pdf delete mode 100644 04_week/CMakeLists.txt diff --git a/04_week/04_class.md b/04_week/04_class.md deleted file mode 100644 index 46e00076..00000000 --- a/04_week/04_class.md +++ /dev/null @@ -1,902 +0,0 @@ -# Лекция 4. ООП. Класс - -1. [ООП](#oop) - - [Инкапсуляция](#encapsulation) - - [Наследование](#inheritance) - - [Полиморфизм](#polymorphism) - - [Абстракция](#abstraction) -1. [Класс](#class) - - [Спецификаторы доступа](#access_specifiers) - - [Отличие класса и структуры](#class_struct_diff) - - [Пустой класс](#class_empty) - - [Поля класса](#class_fields) - - [Инициализация полей значением по умолчанию](#field_default_init) - - [Конструктор](#ctor) - - [Список инициализации полей класса](#member_initializer_list) - - [Параметризованный конструктор](#parameterized_ctor) - - [Конструктор по умолчанию](#default_ctor) - - [Конструктор копирования](#copy_ctor) - - [Указатель на себя `this`](#this_ptr) - - [Копирующий оператор присваивания](#copy_assignment) - - [Деструктор](#dtor) - - [Конструктор преобразования](#converting_ctor) - - [Ключевое слово `explicit`](#explicit) - - [Конструктор от `std::initializer_list`(_C++11_)](#ctor_std_initializer_list) - - [Делегирующий конструктор (_C++11_)](#delegating_ctor) - - [Ключевое слово `default` (_С++11_)](#keyword_default) - - [Ключевое слово `delete` (_С++11_)](#keyword_delete) - - [Методы](#methods) - - [Определение методов вне класса](#methods_definition_outside) - - [CV-квалификация методов ](#cv_for_methods) - - [Оператор преобразования](#conversion_operator) - - [Перегрузка операторов внутри класса](#class_operator_overloading_inside) - - [Перегрузка операторов вне класса](#class_operator_overloading_outside) - - [Ключевое слово `friend`](#keyword_friend) - - [Ключевое слово `mutable`](#keyword_mutable) - - -## ООП - -Объектно-ориентированное программирование - парадигма программирования, которая -основывается на представление в коде программы различных объектов, взаимодействующих -друг с другом. - -Класс - пользовательский тип данных, шаблон (макет) для создания объектов и описания -их характеристик, функций. - -Объект - экземпляр класса. Объект включает данные (поля) и методы (функции). -Что позволяет хранить характеристики объекта, изменять их и взаимодействовать с -другими объектами. - -Основные принципы ООП: - -- Инкапсуляция -- Наследование -- Полиморфизм -- Абстракция - -### Инкапсуляция - -Инкапсуляция - объединение данных и методов для работы с данными внутри класса. -Сокрытие деталей реализации класса. - -```c++ -class Budget { -public: - void increase_balance(double value) { - budget_ += value; - } -private: - double budget_; -}; -``` - -### Наследование - -Наследование - механизм создания новых классов на основе существующих. Позволяет -строить иерархию классов и переиспользовать код классов родителей внутри -классов наследников. - -```c++ -class Animal { /* common data */}; -class Cat : public Animal {}; -class Dog : public Animal {}; -``` - -### Полиморфизм - -Полиморфизм - возможность различного поведения сущностей C++. - -Виды полиморфизма: - -- статический (на этапе компиляции, шаблоны, перегрузка функций) -- динамический (во время выполнения программы, виртуальные методы) - -```c++ -class Shape { -public: - virtual void draw() = 0; -}; -class Circle : public Shape { - void draw() override { /* рисуем круг */ } -}; -``` - -### Абстракция - -Абстракция - упрощение сложных вещей через выделение основных характеристик. - -## Класс - -Класс - пользовательский тип данных, который объединяет в себе данные (поля класса) -и функции для работы с данными (методы класса), представляет собой макет для -создания объектов (экземпляров) данного типа. - -Синтаксис: `class {};` - -- `` - имя класса, пользовательского типа данных -- `` - тело класса, включающее поля, методы, конструкторы и деструктор - -### Спецификаторы доступа - -Для ограничения видимости полей и методов внутри класса используются -спецификаторы доступа, весь код после спецификатора имеет соответствующий тип -доступа: - -- `public` - публичный доступ, поле или метод класса доступны извне -- `protected` - защищенный доступ, поля и методы доступны наследникам класса - и внутри класса -- `private` - приватный доступ, поля и методы доступны только внутри класса. - -Синтаксис внутри класса или структуры: `:` - -Указывать спецификаторы доступа можно произвольное число раз. - -```c++ -class User { -public: - /* some data and functions for everyone */ -protected: - /* some data and functions for children classes */ -private: - /* some data and functions inside class */ -}; -``` - -Приватные поля и методы будут недоступны снаружи, то есть **НЕЛЬЗЯ** к ним -обратится или вызвать через экземляр класс, используя операторы `.`, `->`. - -Всё содержимое класса по умолчанию имеет спецификатор доступа `private`, -несмотря на это часто принято явно указывать данный спецификатор, даже при -определении полей класса в самом начале тела класса. - -### Отличие класса и структуры - -Структура `struct` и класс `class` имеют одинаковые возможности в C++. - -Отличие заключается, что содержимое структуры по умолчанию имеет публичный -доступ `public`, а содержимое класса приватный `private` - -Структура нужна для взаимодействия с `legacy` кодом на языке C, а также для -публичных классов. - -Несмотря на одинаковые возможности, принято разделять структуру и класс -семантически. Так, структуру используют только с публичными полями, а класс -с приватными. Создавать классы и структуры со смешанным типом полей не -рекомендуется, так как это может быть не очевидно и не понятно программистам, -читающим код. - -### Пустой класс - -Пустой класс имеет размер 1 байт, поскольку объект такого класса можно создать -и необходимо иметь адресс данного объекта, чтобы иметь адресс, необходимо что-то -положить в память по определенному адресу. - -Чаще используется пустая структура. Такая структура может понадобитсья в качестве -именнованного тега. Пока будем просто считать, что иногда надо. - -### Поля класса - -Поля класса представляют собой внутренние переменные произвольного типа. -К полям класса внутри класса можно обращаться по имени. В качестве поля можно -использовать указатели и ссылки. - -В случае ссылок необходимо их инициализировоать при создании объекта. Например, -можно проинициализирвоать адресом объекта из глобальной области видимости. А еще -это можно сделать в списке инициализации при конструировании объекта. - -Существуют разные стили кода к именованию полей класса. Часто встречается: - -- `m_` - добавляют `m_` в качестве префикса к перименной (`m` - `member`) -- `_` - добавляют `_` в качестве постфикса к переменной. - -```c++ -// inside class -int m_value; -int value_; -``` - -Поля класса хранятся в классе и инициализируются в порядке их объявления. - -Поля уникальны для каждого экземпляра класса. - -### Инициализация полей значением по умолчанию - -Аналогично структурам рекомендуется всегда инициализировать поля внутри класса. - -```c++ -class Time { -private: - int hour_ = 0; - int minute_{0}; // uniform -}; -``` - -Иначе в полях класса также может лежать мусор. - -### Конструктор - -Конструктор это особый метод класса, который используется для конструирования -объекта. - -Синтаксис: `() {}` - -- `` - имя конструктора должно совпадать с именем класса -- `` - аргументы конструктора. -- `` - тело конструктора. - -В зависимости от аргументов конструктора выделяют различные типы конструктора. -Основные способы конструирования объекта: - -- Параметризованный конструктор -- Конструктор по умолчанию -- Конструктор копирования -- Копирующий оператор присваивания -- Конструктор перемещения -- Перемещающий оператор присваивания - -Важно понимать, что если конструкторы не определены, то компилятор самостоятельно -сгенерирует конструкторы. Но если определен, хотя бы один конструктор, то -компилятор скорее всего этого не сделает. - -Важно понимать, что при входе в тело конструктора все поля уже проинициализированы -и в теле может происходить только присваивание новых значений полям класса. -Следовательно, в теле уже нельзя изменить константное поле или инициализировать -ссылку. - -Проинициализировать константу и ссылку можно не только значением по -умолчанию или значением (адресом) переменной из глобальной области видимости. -Для этого в синтаксисе конструктора предусмотрен список инициализации. - -### Список инициализации полей класса - -Список инициализации полей (_member initializer list_) позволяет инициализировать -поля в момент создания объекта. В списке инициализации доступны аргументы -конструктора и имена полей класса. Список инициализации указывается между сигнатурой -и телом конструктора, и выглядит как перечисление после символа `:` через запятую -полей класса и внутри `()` или `{}` их инициализирующих значений. - -Синтаксис: `() : {}` - -- `` - список инициализации = `(), {}` - -```c++ -class InitList { -public: - InitList(int val) : a_(val), b_(val), c_(val) {} -public: - int a_; int b_; int c_; -}; -``` - -Причем имена полей класса и имена параметров могут полностью совпадать, конфликта -имен не будет, поскольку компилятор понимает, что нужно инициализировать поля. - -```c++ -class InitSameName { -public: - InitSameName(int a, int b, int c) : a(a), b(b), c(c) {} -public: - int a; int b; int c; -}; -``` - -Также, следует отметить, что в качестве инициализирующего значения, может использоваться -не только переменная или константа, но также выражение (_expression_) и результат -вызова функции. - -**ВАЖНО**, что инициализация происходит в порядке полей класса, и не зависит от -порядка в списке инициализации. Поэтому важно самостоятельно отслеживать -правильный порядок инициализации. - -```c++ -class BadOrderInit { -public: - BadOrderInit(int val) : c(val), b(c + 1), a(10) {} -public: - int a; int b; int c; -}; -``` -- `c` используется неинициализированной при инициализации `b` (**UB**) - -Если поля класса объявлены со значением по умолчанию, то они будут проигнорированы -для полей в списке инициализации. - -```c++ -class BadOrderInit { -public: - BadOrderInit(int val) : c(val), b(c + 1), a(10) {} -public: - int a = 7; int b = 7; int c = 7; -}; -``` -- значение `7` будет проигнорированно, по-прежнему **UB** - -Списки инициализации могут быть неполными. Тогда недостающие поля будут -сконструированы со значениями по умолчанию, а при их отсутствии инициализируются -мусором. - -```c++ -class BadOrderInitNoAB { -public: - BadOrderInitNoAB(int val) : c(val) {} -public: - int a; int b = 7; int c = 7; -}; -``` -- в поле `b` будет значение `7`, в `a` будет мусор - -Список инициализации позволяет сконструировать константное поле и поле ссылку извне: - -```c++ -class RefConst { -public: - RefConst(int value, int& ref, const double& cref) - : id_(value), ref_(ref), const_ref_(cref) {} -private: - const int id_; - int& ref_; - const double& const_ref_; -}; -``` - -### Параметризованный конструктор - -Конструктор, который имеет параметры (аргументы) называют параметризованным -конструктором (конструктором с параметрами). Аргументов может быть несколько -и они могут иметь значения по умолчанию, Таким образом, конструктор может -быть перегружен. - -```c++ -class Time { -public: - Time(int hour, int minute, int second) - : hour_(hour), minute_(minute), second_(second) {} -private: - int hour_, minute_, second_; -}; -``` - -Если конструктор имеет у всех аргументов значение по умолчанию, то такой -конструктор перегружает конструктор по умолчанию. - -```c++ -class Time { -public: - Time(int hour = 0, int minute = 0, int second = 0) - : hour_(hour), minute_(minute), second_(second) {} -private: - int hour_, minute_, second_; -}; -``` - -Для создания объекта класса необходим вызов конструктора. Синтаксис вызова констуктора: - -```c++ -Time t1(1, 1, 1); -Time t2{1, 1, 1}; -Time t3 = {1, 1, 1} -Time t4 = Time{1, 1, 1}; -Time t5 = Time(1, 1, 1); -``` - -Аналогично для всех его вариантов перегрузки. - -### Конструктор по умолчанию - -Конструктор по умолчанию представляет собой конструктор без аргументов. -Часто для простых класов конструктор имеет пустое тело. Удобно использовать -значение по умолчанию для инициализации. - -Синтаксис: `() {}` - -Часто имеет пустое тело для тривиальных случаев. - -Если не определен ни один конструктор, то компилятор самостоятельно сгенерирует -данный конструктор. - -```c++ -class DefaultCtor { -public: - DefaultCtor() {} -private: - int value = 0; -}; -``` - -Вызов конструктора: - -```c++ -DefaultCtor obj; -DefaultCtor obj2{}; -DefaultCtor obj3 = {}; -DefaultCtor obj4 = DefaultCtor{}; -DefaultCtor obj5 = DefaultCtor(); -``` -- во всех этих случаях вызовется только конструктор по умолчанию один раз - -### Конструктор копирования - -Конструктор копирования необходим для создания копии объекта из объекта того -же типа. Представляет собой конструктор, принимающий в качестве аргументов -константную ссылку того же типа, что и сам класс. - -Синтаксис: `(const & ) {}` - -```c++ -class Time { -public: - Time(const Time& other) - : hour_(other.hour_), minute_(other.minute_), second_(other.second_) {} -private: - int hour_, minute_, second_; -}; -``` - -Поля другого объекта того же класса доступны внутри методов класса даже если они -приватные. - -Вызывается конструктор копирования: - -- при передаче в функцию по значению -- при возврате объекта соответствующего значения по значению -- при конструировании одного объекта из другого - -```c++ -Time t; -Time t1 = t; // copy ctor -Time t2(t); // copy ctor -Time t3{t}; // copy ctor -``` - -### Указатель на себя `this` - -Внутри класса, в методах, в том числе конструкторах, можно получить указатель на -себя (объект класса, который вызывает данный метод) с помощью ключевого слова `this`. - -Можно использовать `this`, как в качестве значения по умолчанию, так и в списке -инициализации. - -```c++ -class Self { -public: - Self() : self(this) {}; - Self* GetPtr() { return self; } - Self& GetRef() { return *this; } -private: - Self* self = this; -}; -``` - -Можно считать что указатель на себя передается первым неявным аргументом в конструкторы, -методы и операторы класса. - -Через указатель можно явно обращаться к полям класса, но как правило, так не делают - -```c++ -// inside methods -this->self; -``` - -### Копирующий оператор присваивания - -Оператор присвания необходим при присваивании одного созданного объекта другому. -Если один из объектов не создан, то он не будет вызываться, а будет вызываться -конструктор копирования, даже если в инструкции есть `=`. - -Как правило, оператор возвращает ссылку на себя (экземпляр текущего класса), что -позволяет испоьзовать цепочку из операторов `=`. Для этого необходимо вернуть из -оператора разыменованный указатель на себя `return *this;`. - -Синтаксис: `& operator=(const & ) {}` - -Поскольку язык не запрещает присвоить объект самому себе, как правило, в копирующем -операторе присваивания выполняют проверку на самоприсваивание. Особенно это -критично для классов владеющих ресурсами (выделяющих память), что может привести -к **UB** - -```c++ -class Time { -public: - Time& operator=(const Time& other) { - if (this == &other) { - return *this; - } - hour_ = other.hour_; - minute_ = other.minute_; - second_ = other.second_; - return *this; - } -private: - int hour_, minute_, second_; -}; -``` - -Вызов оператора: - -```c++ -Time t1, t2, t3; -t1 = t2; // copy assignment -t1 = t1; // copy assignment -t1 = t2 = t3; // copy assignment -auto t4 = t1; // copy ctor (not a copy assignment!) -``` - -### Деструктор - -Особый метод, вызываемый перед разрушением объекта, когда заканчивается время -жизни объекта. - -Синтаксис: `~() {}` - -Если в конструкторе выполнялось ручное выделение ресурсов, то в деструкторе -необходимо обязательно освободить ресурсы. Иначе деструктор остается тривиальным -и генерируется компилятором по умолчанию. - -Деструкторы вызываются в обратном порядке по отношению к конструируемым объектам -при выходе из области видимости. Последний сконструированный объект, будет разрушен -первым. - -### Конструктор преобразования - -Конструктором преобразования называется конструктор, принимающий один аргумент -другого произвольного типа. Данный конструктор разрешает неявное преобразование -из указанного типа в тип класса. - -```c++ -class Integer { -private: - int value; -public: - Integer(int v) : value(v) {} - Integer(char c) : value(static_cast(c)) {} -}; -``` - -Таким образом, если функция принимает пользовательский класс, а класс имеет -конструктор преобразования от другого типа, то в функцию можно передать -непосредственно этот другой тип, произойдет неявное преобразование с помощью -соответствующего конструктора: - -```c++ -int DoSomething(Integer i) {} - -int main() { - Integer i{3}; - int value = 5; - char c = 'I'; - DoSomething(i); // OK - DoSomething(value); // OK - DoSomething(5); // OK - DoSomething(c); // OK - DoSomething('i'); // OK -} -``` - -**ВАЖНО** понимать, что при наличии конструктора присваивания из другого типа, -компилятор **НЕ** будет генеировать оператор присваивания из данного типа, его -необходимо определять самостоятельно. - -### Ключевое слово `explicit` - -Ключевое слово `explicit` используется как спецификатор перед именем конструктора -и позволяет запретить неявное преобразование и сообщает компилятору, что данный -конструктор можно вызывать только явно. - -```c++ -class Integer { -private: - int value; -public: - Integer(int v) : value(v) {} - Integer(char c) : value(static_cast(c)) {} - explicit Integer(double d) : value(static_cast(d)) {} -}; -``` - -Неявно такой конструктор вызвать нельзя: - -```c++ -//Integer i2 = 3.14; // compile error -Integer i3 = Integer{3.14}; // OK - -int DoSomething(Integer i) {} - -int main() { - double d = 3.14; - //DoSomething(d); // compile error - //DoSomething(3.14); // compile error - DoSomething(Integer{3.14}); // OK - DoSomething(Integer(3.14)); // OK -} -``` - -Также спецификатор `explicit` можно использовать с оператором преобразования, об этом -после знакомства с методами. - -### Конструктор от `std::initializer_list`(_C++11_) - -В C++11 появился контейнер список инициализации `std::initializer_list`, который -позволяет инициализировать класс набором элементов. Что вызывает неоднозначность -при наличии параметризированных конструкторов какой конструктор вызывать. - -Конструктор по умолчанию имеет приоритет перед конструктором от списка инициализации. - -Список инициализации имеет приоритет перед параметризированными конструкторами при -использовании `{}`. - -```c++ -class Vector { -public: - Vector() {}; - Vector(size_t count); - Vector(int a, int b); - Vector(std::initializer_list list); -private: - std::vector data; -}; -``` - -Вызов конструкторов: - -```c++ -Vector v = {1, 2, 3, 4, 5}; // ctor std::initializer_list -Vector v2{1, 2, 3}; // ctor std::initializer_list -Vector v3(10); // ctor Vector(size_t) -Vector v4{10}; // ctor std::initializer_list -Vector v5 = {10}; // ctor std::initializer_list -Vector v6(10, 20); // ctor Vector(int a, int b) -Vector v7{10, 20}; // ctor std::initializer_list -Vector v8 = {10, 20}; // ctor std::initializer_list -Vector v9 = 10; // ctor Vector(size_t) implicit cast -Vector v10; // default ctor -Vector v11{}; // default ctor -Vector v12 = {}; // default ctor -``` - -### Делегирующий конструктор (_C++11_) - -Делегирующий конструктор - конструктор, который на месте списка инициализации -использует другой конструктор данного класса. В таком случае можно указать только -один целевой конструктор, дополнительно списки инициализации указать нельзя. - -```c++ -class Time { -public: - Time(int hour, int minute, int second) - : hour_(hour), minute_(minute), second_(second) {} - Time(int hour) : Time(hour, 0, 0) {} -private: - int hour_, minute_, second_; -}; -``` - -Делегирующий конструктор **НЕ** может быть рекурсивным. - -### Ключевое слово `default` (_С++11_) - -С помощью ключевого слова `default` можно явно попросить компилятор сгенерировать -конструктор (деструктор), указав после сигнатуры `= default`. Это более выразительно, -чем писать `{}` для конструктора по умолчанию. Рекомендуется к использованию. - -```c++ -class Value { -public: - Value(int x) : x_(x) {} - Value() = default; - Value(const Value& other) = default; - Value(Value&& other) = default; - Value& operator=(const Value& other) = default; - Value& operator=(Value&& other) = default; - ~Value() = default; -private: - int x = 0; -}; -``` - -### Ключевое слово `delete` (_С++11_) - -С помощью ключевого слова `delete` можно явно попросить компилятор удалить функцию -(запретить её использование), указав после сигнатуры `= delete`. Это более выразительно, -чем прятать конструкторы в приватную область класса. Рекомендуется к использованию. - -Можно использовать не только для конструкторов, деструкторов, но и для любых методов, -операторов, шаблонных функций, функций вне классов. - -```c++ -class Value { -public: - Value(int x) : x_(x) {} - Value() = delete; - Value(const Value&) = delete; - Value& operator=(const Value&) = delete; -private: - int x = 0; -}; -``` - -Например, если класс не подразумевает сравнения на равенство или других операторов -можно явно указать для них `delete`. - -### Методы - -Внутри класса можно определять функции, которые могут работать с полями класса, в том -числе закрытыми. Данные функции называются методы. - -Синтаксис аналогичен определению обычным функциям. - -Публичный метод можно вызвать через операторы `.` для экземпляра и `->` для указателяю. - -Приватные методы, можно вызывать внутри класса. - -Можно вызывать методы в списках инициализации. Например, метод, который будет -контролировать допустимость значения или выполнять дополнительные преобразования. - -### Определение методов вне класса - -Методы можно объявить внутри класса, а определить снаружи класса. Содержимое -класса имеет свою область видимости. Для определения снаружи класса перед именем -конструктора, метода, оператора используется имя класса и оператор разрешения области -видимости `::` - -```c++ -class Time { -public: - Time(); - Time(int hours, int minutes, int seconds = 0); - int GetHours(); - void SetHours(int hours); -private: - int hours_ = 0; - int minutes_ = 0; - int seconds_ = 0; -}; - -Time::Time() = default; -Time::Time(int hours, int minutes, int seconds) - : hours_(hours), minutes_(minutes), seconds_(seconds) {} - -int Time::GetHours() { return hours; } -void Time::SetHours(int hours) { hours_ += hours; } -``` - -Аргументы методов, имеющие значения по умолчанию указываются только при объявлении, -при определении нельзя указать значения по умолчанию - -### CV-квалификация методов - -Методы могут иметь CV-квалификацию. Методы, которые не изменяют полей класса, а только -предоставляют информацию о них следует помечать квалификатором `const` после сигнатуры -и перед телом метода: - -```c++ -class Size { -public: - size_t GetSize() const { return size; }; - void AddSize(size_t size) { size_ += size; }; -private: - size_t size_ = 0; -}; -``` - -Методы помеченные квалификатором `const` можно вызывать у константных объектов класса. -Компилятор отслеживает, что в данном методе нет измененеий полей класса. - -Методы можно перегрузить только по квалификатору `const`. - -Не изменяет поля класса и может быть вызван для константного объекта: - -```c++ -int Class::foo() const; -``` - -Может изменять поля класса и может быть вызван для `volatile` объекта: - -```c++ -int Class::foo() volatile; -``` - -Может быть вызван как для `const`, так и для `volatile` объекта, так и для -`const volatile` объекта: - -```c++ -int Class::foo() const volatile; -``` - -### Оператор преобразования - -В классе возможно определить оператор преобразования, который позволяет преобразовывать -пользовательский класс в другой тип. - -Синтаксис: ` operator () const {}` - -- `` - можно запретить неявное преобразование -- `` - тип к которому выполняется приведение - -Рекомендуется помечать `const` поскольку данный оператор не должен менять полей класса -и вызываться от констант данного класса. - -Как правило рекомендуется запрещать неявное преобразование к типу (использовать -`explicit`), поскольку можно обнаружить много неожиданных мест в коде, где неявно -произведено преобразование. - -Исключением обычно является оператор `bool` для удобства использования в условиях. - -### Перегрузка операторов внутри класса - -Поскольку первым аргументом неявно передается ключевое слово `this`, то перегрузка -бинарных операторов внутри класса имеет один аргумент: - -```c++ -Class& operator+=(const Class& other); -Class& operator-=(const Class& other); -Class& operator*=(const Class& other); -Class& operator/=(const Class& other); -``` - -Операторы арифмесстических операций часто переопределяют на основе работы присваивающих -операторов: - -```c++ -Class operator+(const Class& other) const { - Class result = *this; // copy ctor - result += other; // operator += - return result; -} -``` - -Операторы префиксного и постфиксного инкремента/декремента переопределяются -следующим образом: - -```c++ -Class& operator++(); // ++obj -Class operator++(int); // obj++ -Class& operator--(); // --obj -Class operator--(int); // obj-- -``` -- постфиксный оператор возвращает копию, поэтому у возвращаемого значения нет `&` - -### Перегрузка операторов вне класса - -Операторы можно перегрузить вне класса, тогда сигнатура перегружаемого оператора -пишется в привычной манере. Но для реализации таких операторов у класса должны быть -методы задающие и считывающие значение полей (геттеры и сеттеры). Бывает, что их нет, -тогда перегрузить класс не получится или получится на основе определенных операторов -составного присваивания внутри класса. - -Перегрузка инкремента и декремента вне класса: - -```c++ -Class& operator++(const Class& obj); // ++obj -Class operator++(const Class& obj, int); // obj++ -Class& operator--(const Class& obj); // --obj -Class operator--(const Class& obj, int); // obj-- -``` - -### Ключевое слово `friend` - -Внутри класса с помощью ключевого слова `friend` (_friend declaration_) можно -объявить дружественную функцию, класс или дружественный метод другого класса. - -Сущности объявленные дружественными будут иметь доступ к `private` и `protected` -полям класса. - -Дружественность работает в одностороннем порядке. - -```c++ -friend void SomeMethod(int); -friend struct SomeStruct; -friend class SomeClass; -friend OtherClass; // C++11 -friend int OtherClass::Method(); -``` - -### Ключевое слово `mutable` - -Спецификатор типа `mutable` разрешает изменять поле класса, объявленное с ним, -даже в константных методах и для константных объектов. - -Например, это может быть поле представляющее собой счетчик операций и необходимо его -изменять даже в константном методе. - -Также может использоваться в лямбда-выражениях \ No newline at end of file diff --git a/04_week/04_class.pdf b/04_week/04_class.pdf deleted file mode 100644 index 50a488d9fcab3609ae8817ce4684647091ae75d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 251118 zcmb@u1yodR*FG+dgauMcOT#cTOn{U$Qc}_lLpMX02q@j9beE)bNp}g-B2toqfJnpt z==;2ne($%|x7P3fJ}z(1oHJ+6ea+t2zV^QNIU|#zxFi<@1S4P?-`ZFtfY5>I?2If4 z1O&KMEzs5|I#w`D-`LvF$%&1CTg(wO7+U{62>|`uknZ*;Zvcm6B7P64tqOmcN;rLdvgmXn?HcS{z;4coF0jU(?I}6AfaF|7(xf20YP~H!u$=y z(8vkxXlVQ&o`L_@IDV590pkI|VQ?^vj*l0_%Lh1yj}8HcgJ3|!{pQFoDfz<^i2oYF zAKZW>SW8stBT28;wj zk#K+@fG2=R{uw?92p7`0ud! zmsJ4oSeyLe9_W9sslUkrheH8P116>8;Q{yx1Pg)=jsWD92mFVm{eqxxf-*I9wnpn) z*jk`}n+5t$N-P}U2%xqAcYhiN3a|wTA0V87NCGJI+dn}1{R6>2sjP4a9GDjl=B0!3 zfLIQ?mqe^O%snFoQ9U_er!K;8jE zeufYL5X1+>)o)DphK`0dC^Vq=9w-xiqphVd^`05zz}vJOm$ghK(92kK=WAluRLARr(>KmOq8&rk(& zu*v_SYdrs?)bj8E2mo1y0B%A8R0YJIjt3~85J2_zyHqkkS)A%<5Kj!_7 z1qlXL6hF1({{_o`FR;+x^ZtPaP?VoF_5Tx=e^O(4AW%T;e^x3`1RMkhI7A0f7=+~g zGnB1R?ykVv?cW8$@5~G=cmLbv-*35x0;@hG-%qx{fyEEN5eOX*7y&}Sf&IT#- zAQ%3DZ4`>y@!N1GczYzTN%g>q(SdQx3IirC_!=HxvCx!Q?+#-N70QpC00K_*4 zkeNR-vWvbcpfvx>KCpjMcYl@yynv4Yxmvi>9BV1LN7q=hw5u+wo%0?i_nILg@01Vz9thq5(8o6|vffcBD* z5FM~6Mj6@=xTUOm&qZ({BUU|qx_oFdCK{CQj8bF_Gi}x1!~KFKpbH`zBd$8T^24}$ zdnv1+YUFX_k8YQ{iq4g4+loOs40WtZaiN8gS0B%Z7B0Kmu59=kCT)c;&-WL&=}Dz3 zK9>3#b6zGGeFc%G+r2wq8@M{ruf6g(*-cz;$WQXT_qFdz``+>18u^sv0P=j{>UeAD z`MdM)`(?iJwdt2@OkLW$8){;85yPNt^3Lc6LTt{gAg zaW6)3eN=9G>U*}hmgsx1ajEn8|ATE4Ar+dI8KQf=RLKhBrsm|2SvImv(8d-73hE93lInx@{eozBT= z$9=NC+?so2ZEGIHVN+HH-;-onB_Uth3zN1Wt7N@33;os$`DIc)M)oZ=w{i=oo(No9 zQw%lniSjxR;rQ9qOvzU64QjyB|}}~;#2iC{RPOb90?Sr zSY1>F=fC;RNZtG9*i;p9w5_{!X@8!-c1ZtrAnB7|x^m?cWMXe^@>Xuo9x2x4{mTIFySV!Zyv)Rb7z58>gd=rZfPCee?F%Yh4JH)cKy@KzB;D5*N!E+ zy2PL<1&LY`9l2Mc`e_@wcBx*97Y7mCJps?%)U^srSc3(9(~L@Gke|9@Hrs<0jHk}#03dv&>Ao9OF%a%2~3 zWqWm4^8Sfjj_=Xi`U4vVw!>{pu9F|kNL!Kmqg`$$6uIS%4YlX4A5>&&)AeOoK@)cv zGVBO!KwlKF0?B?9RDC;Y?2~}hOSiCAuzuSbXDe2qXUBYmr9Fy&=$*NVEle`JzA!K1R&WgVIB}RwnA=R;fhPg)x zIr&x65tqE@!WiOHZB_UYm(7~D?1J0E81hr?cVKtk<6kdJj<~#+y=A3#W%WGu>)2`C z%%xKNJo0#Ntf$ve+!jx{EzPMwh-Ta&u3{~{br+xd8t=8;jM%W4gRi$wu0d42VdVLKA97$z@tIusomf#lCA#$Ft*-| zTx|2f=X=iu8+XJaw=GsL1=)!|PN*m?J!W?e_&D;VfK@MIb891f369|q&|@Ncm9-Yu zdpFJ2&2E3wxU>lMwMa|olf!paE?RvtuX?Rdd_`&zNB1vOIeKa-^uMYhY>V!04)LD(L$1G5l>4CbH&WR%W+ZbiyYR$0w!$>yOzg8^nicwy}=IW&;PLG zKysQx7TFyiv;3a$YqZw=i=p)>ErB{UA&Btac`~Y*Blv*u3PQi$Ituh_=fbFw^$YK<*EFi)y2TvGVU(-T^BHl9FFyE|jU`>op|_3w*$Fg~)PwQ%1o3>AjZ ztPtOFZfjgBA;-bW3D4ZO=vq6>s#hb|&bKd~;b-?5tU`@wgD_iWb?6{$1lv-qg!@vH($LbEe3552 zANx4Y%1J3o$6QUn7;G!+q`m{+;|jZ7}E?F_Rh5Xqs{K-b-$&y@ZO z1XI_tteuSA%01?t7Inz&n#AzNsyh2D^I75$X<EjDi zpQsBx;CdXi=wDc+e)^?a2J3Nw>ePb|(aq~?<1NWhmohfvqZd#YJ7B}#Kkc6zCaBRr z-4Ox(VZdg5GXeUebv~o?*DEN3%{cNkv|l2Vbu1`~(ko?@W+Q2o@%E!2(h&AI**Jy| za&asVZcK2Z?WnNL7ps0sL0pBiETuNBD4v(r7AIOWFH!3r5q>Nlg?6F^#j4?7eNf_$>xBJA7*Z!>VPWDMRbiT>Pb6zu zML%IGB{gvuXt}@b#J4bhXkLs-ouid>~4p{nDy(EG4 z8?92B2yqhSW>L}y&w#8Iy(P3#L@P^7S&Jb+T)#<)c#!g)`Fk5FGSt!-NwAa6cf`HN zOp-1-h8(nj&Fmahr+XTGxxd^t9CFYk&%`Er=)5yZSiRe)t%u?U>R*&7ZM*< zrjr;}&WKNeRK@UgbMnbHNm!ZaPb*Jb{F6w(mGqaa1`WiTX#x;*TKb?++=?67j{UP?4o zxAmte9!2aXoS7(|TrIb^A@pVjzYO1}d82Q&yZC$4Rif)%)!{F4sZ+amZnxVJfKr%L zBsZB6`!|TfKaTU~QP|32U98SP09Dtuo*swzy%ubRxOD)1xYW1Us_{F3`M8`=>ti*C+_V(P9h#zTUmH6n#`s6-dk*3Zd48JbR0x4`=^ilN&a1n!f zRT|O6(s|V%%oDK{&NIP~#_i4m2bCFZWc-EcOz?Z>88(z}(zq28Za_)=iIcxjsullW zQvPwi;o#{|B?&9$CrmqK!FbEXA%aQy;EH{V$1W-hm%$A!qW2A?kZwC=rRF0G<4ETI zzKHV^-7M#u4GepSxr&AiS zh1LuM;{>|bJ0gfa2bQw$~ zU&1@lD0Y(@$g*GrkJ!%Pe!2@?ogi)hkss!@u=$8{NSPs zn9{uW>w?)QB-B50iiG8{(mF(JN?lKlr74Ng`7_UR0ia&8~s_uO3MavuqOhjN3cWdk`33XwOb(k9AV3N4ZZ?B`bwW z>R4p2Rb0@V<{I1-B8XXI4rH$(EqbV|@A{RmP?=DKVpNR`EA5vL~ zHr0OZ%SwMeSu&+drYB|k*{rwtW)c%VPQq}=)56AM1&1^aUQ2b03@c@a8E&L0tuvff z;ozlIsxPgd)>cmwy|||G8)mf1?Ak%S;>X0?`8?!ObBj+H&S93OB6kALp%Jj*C;QM> znW2z?<2+mOYg5TtFdl*9T*(Rn4G9EA4DY(4c87xfps)lvq)f{&p5A z{k<%KOs4$TVNK0!x?n6szug$LeD|C30yzTg|mQV;JF8I z@qFr^N9an?ydVoQm;vPtV8;uasKP`u3QdJ;Gh0EYgx!P-d`6|3knmwxhGrB6M|y&n z5!r|2;?x0DKyUq(pZPX{U3Lq-ofPS@d|T7?>V5XfWXlz53aWZD9|PmWxJI(lZ+h{h zWHZ-rD9eLgKfer;q;H%w3eke?x2+BbI~D2U`;$)h@|WM;0THo!`fe?c$EMj|*1CSA z`sR_aG;Wp1RQDN+?B;oQ^?>)%%*$S!5gCU1UI>+A8^sy)Tn(yL*jd^u5z)iKf34nt zQ<7by)gSVsP9mC6vJcPl5s0F=<0L53V30WqP?S(V-4zBY!4pFAd~ScqyeXB)dS<&W=st>a`4G8IPtb(`CGD-WxCJJ0`q^9;Im z`r+9?QtAZ?JrBHY*mwq!1yShsNkm+h=cio=0+w|7p)QE|A_x8#z~Vz$imsT;9VM( zXUV?V6!A4gz3BasoR+lZ9XT!gz{0Hkn8BQ`#WfNV6YZCukGRuT-pCHEew=)&`(jcP z_-1cJhUW*Vz%|2EU{f<<3SD4m1LN&m+_2K(2CU?W=Jh*H_DbhLFa{btT9%f_51EDJ zuy5JD%nH#b%?-LDT@B8cfQLRw!^Kz-{QBjke7ye1#Oa~VP!Y)3xGaElK$^>C_#fN#&`1$fNyRb$+(*yjtdk11u&IiHIF^W;W* zCeZbQJZcK>l#=dh72FRudPmBsTmZa9ORvM-$Fy06KSh!_@fmGC!HpA2S`-bC6Mrg3 zmgz@1zEq0otcPBJ*uN|doc|3r_D*daM|iAY+>$>$l&&H5$ewZ0o7e1dZBlXecDmg> zM`F+kk0Ia8VnK(-FoTvGbH4!AD(@J57hLI9B>UnMzu0C0&k_TAXGjs2)wLidd!U>AnIjmy~KUe#)nW z_LD_c3hfe$(qlp8h06|GCUI!F<5&1}ayKOI4ztMIwq@-nAq%!7YvCitY(mch)ja#K zR;=c_(V+e0Yv3Z11DaMQk-wS--}#&b2n6>JsfPi6!BID zZ~<_#5>RTscT`iNXyUf$(d_!G$O+~v=9IjvuUn9U&L?ZYRwL96L^6njO!C#LKKW-x zpMlVUW3N&(>??Bu=P^l5TA2Z>Gf;6#W}2601^%1CvoJ%OlS*&{!7~2ho zd)Y9vPI<<#y*reCbH;l zqWdHaO~!)2P_Gm)bR!82z5R%SGK4)$E{*{hETq>bI87|6u%)MdmEHlIF-#`Wob=1$ zRIyBYMv#E8iufpqDa#0jd^3)KL|6qpIuw%J+qEv!+dn-ncqt<4(h8*tp*LA$#AFk7 zae1-+g3-YRDEnsQ()<`cbFn5wQ5Wgnsc-#@i(+$b1H5ZBjcN~b+AmMnz=2jwOF=Y^ z1MYm`XKy^$l{IffwQSOWR&OQWm(-oU>AO5LimpkR+z;^r9VQOde^MI${w2ht!EVo* znAT^9>NV}qC$E;pt4bf@W1t%hsmycRnm*>(Uy%+w5va-%--SAt;`ek6;rVEb(oSw* z$)-7xPz-#Ka$(E%;%s+_F)O=&8`{n0V`IQXlB*ro8PCGNU7NZ1xm^_^t_LX!TuR}r0lth%yL<6qEgGl6R-0tr5_JH z*+;Qamm(99Sxa6kD>Cb(cM}N{rvisn9Jp%U0zF{$P|bkOgUkw*phvN@m+K4?il?c@oQPJ@6Si%#n26Do-SbGnT_K`Ht7Zv^5F4f z#t9YOe9JKh*#W-){inUZR~Xf~J9yZJt=NxHz!eYF$3Z>eyWYWMBPM|1h{)a-Fx-im5G zCHZl=?zz5g&$FrPIA6&sPw|bn+D`T+gofEzC(h3M&dz7f_A8uDWZu8Tj)R5_y$lm5 zdoXa&zY}*&NTlOiQ_R;vZ9bW`Ek~{}sx%*@0ggVq*6yRIy7)MYbWtTsz)%n6D)Wp2yDo)d_+~MCmUy0p@GA0e&Pd;=Ai%%pPMF6jg>&-$MkM zuaV+%6BUr@m6!*o{VI}{Ue(U(5~r?VS{8xIg&&46?TW4G;(xK%DNQu*dyG${# zXc?B>`qvT>zn+Rbx}S@+LhB7k@$-!EI%yWeHCQRtDvI$O@8x{7tW9%}?bY6(elx-opx`zc^lR0+COMLAWn))T~{qy5HRXYk# z3_gH2W;tU^ZF+Kw1qJ;QqqpjEUZK0jNj^(bB98GX4aO)bgT^cbv zYj5s+!v_D=ywhVy<&CA=f1qkkUq5>%e=uiES3&28$|y3h`?E6DQ@4s=o*J1tz{q5} zrG5vu9*QD2D$DT*ERcT2wf$bIw~Nh@YqIofJipm&w?m6SFV4T-c-cE~5?G=dud^IV z=`CBN9`qc0w4Da-IR7$rZ$_){&`dx$v&!8^l+S&llA2M_iyznB+Xutl$p=G>gWqUy z7#36Zf*Mj&$=J=wZxq*uV@q#pJ+x;W7P})|!6?Zm82OBvc-u(ITF6Ao-l4(R+~lF{ zVco`3rg1F6vum+1Rwb6^Yq@e{nElCK5{2&2dypV7T?Nnzk#G_BiR-jOS}zr(EPUwb z&x7KhSbw3U)OIxno6g+M1}3*gNrh>;bguVD^rlaK=pnyfPK4{}<>vvkLanE7qp4nO z?;K+SD{$x^~2-XIyAY`xhSggl}mdOCRs>M34i(aJdT#jRHJY>0;X-jTn;+&LLBlcv}8gY^D2t8LOf<|Es~Wr)|M%>fWc9slWdnK6Ctq_5XLjqWuge> z?nmU>Yp9f2(*lNVtSq6yz#1&I7Rxv6eeMRX^M4gd;@vh^sXdKLk`rDC*!3m~ zth`j2y#nt0G9?`Mm`m3y?d(I$nh8DUkf4=kdNFoae3lPbNE5p+uxGgLgRU++`eL^B z>!Cl}3%}~#o}{pM4E#z$2YbE7SsJBY)wiTtNalmyrbIN=+!_hv?>5EN31WQ7J|7hN zl%~*;KCNCYES1ffK2=jQY-pu1YWSQhWI63lH+Q4}cX!138;VjEDB|FxUc3cq?7JJHQO8$Zk}U&ZrPUa&~_#9_41g(*g4ZSIwQevY-eDb0Ge zE~QsStxMi18%`|;%PqP0r5{AVn#CO%UQ*POKAwIHxx=El%WYK2}p%O2D`kZ zT`&K1zUeP-Us?TViW-JTdKG6QKJ%su9AT~}i(0wF^|W^XylZ5iX#cEdenYdMfqx?C z@=KE<5w5kz`h>G`eP+G8zL2|q%+bkV@9iP#&W3x1Y1VAuYs{XoM7aGtqK&+4yvvu`X+7 ze#!wgA^QQJvt9=hJn_GVO8dn=1#(X>GUFEtiOXRuLwT}r>jqVRU+v8Z`9#YZbYX&g zVuSH`t`Zm?LNR z)F}=9j>u!b1e`D$?2FyMVb42%iT}on;zQF7>lX$(1)b_&zI5qVP$j}PU^_q5<<^!d z40wvAwE44cP5@%=+63m$N9FK%N`Y1Q`rch(=?T(<4N2Fi& z#XO>4g;u3u(6YXK^5%Z+vpXkE{S~srALPUN9X<(u75z#i+vbS2VW4%PHZhp?$YJQ9 zNO~6=4NY!*p{jQCMH{ja-ya=<*+Cib!cVvwi@Wy&Lz7H~o!dqp>ho$7ky~@eLUZ(R zVs^^LG11g!#K;6~b+m%k6AxPIRL_l~qs4)}h1)EF9C{Cz^EoS2PaL~7y3X!nu!NPR z#YO~b9P2cGls-AS#WQm0IAnw#At2K)rEc^kRLEk-S6uz$Ry!k1ped)?&U6c`y@OSd~J}+keLSMb3CGY>Z z^_mogWF@QuXIG%E{s-dT#$!CBi|>t{5!&Q@%hMng%dSC{YNNG6tr@N}MCF0%P?~-J zv}syVbZWlkj{uc!#6U~_6qPKRg+W%&tBd%7gxK;cAr>W^>&)LRJYH$I zBidJ_PLO)1;8!>;;oL9Mi)>4nQL3uy{j2K0>zx=mD3giCzAQdFT4&7J zY*YF!@=iN-jX_5ClqXN|R|YNCIeIm_hiZlk z)=^oco_w;E7hbXmiHOiWbrt+#`W?gAW0#s*MQz^KNsb$-D|5yYyn!`9%FEjBiVWzL zvWYLy7bG4zQbq3H@LD)RqFh{zKjojTg>Gk_ISKfHE6YUEx%I?!7(HK1_NGDZ%}g0Y zlABqFZ&SXF7RxXlxjn=!=0VS;I=A1&x`pa&h0`{vav=_Gent z-owkytciiC{D7$p^!tWDO{n#o|9XVo->?_`E&hXu?> zrESc*!RDnkPD7d-b$VNG4Z>$jRdhNn&oL;@EPM1bi7nQ4>$JXVaKwKReV3rR+LkGM zS7pQK`xLY!sC~jRa`hvd)A!{_H2b!y0?`yf1uNu*6_dMVa-?U&o#HM|h)!D-1xT;U z_l0I;z(uqU>sg4{Y z^YPgbcs1rN^_^Hrp@VLBj@QZ!xHFa+cxI9_WhEGfCoP;kXtsDh?b*Qlj=;wF-bt~4 z;s-loo4veHEU(}z(o8P$5cBXNs>Qb2orl#?6W1gtBzb`QJ6^j=Y03^S=X=b)ZHQ{G z3tbG4BH+}sd8PyoJl&b3m4_cB2Xh(cKG>KfH-uZOEJ)N8CNJ@Zm3VScyak5tks6V; zWX;T0uNp{(lPO&KLttd=vD`yuhZKCe+q5C<6`8COqS8ufov-r~5_^9@@vzH`;KFi6 z40Ec$C5zaody{nEmIli?-|wDe{}?v2$s1NW;XuJtVUwk6J&+taIgNM^He;ZkyP+Y8 zH8V{{i@_LXZOxJT0wSBd$qO`z342w0l!^k6ie4}I{kp4V{GKZj_p)>y(Ic#cPCmFh zpI4AQM{12uZVI;@=M7*Kr=IT~HuPf&vo)@L&y{XqmaY9ss6w)~VrD&IYb9x@KMa%{ zZ)GiIe{arR691~pEZ_qrW3_e;BDG=-7GlJp zD1B)58pc|B%F!);SKT*H&mU6s?ztL7i?}1lONzquXPFkR)yi0xI9mB@5;uNv zk*KZTSXc955tEpW6>%2edrCboLyJlZ;e=)=SyG;6(YQ;9hwno(+gGbe#(TH;xZGO0 zXv1w!R4I2u2=p%t0NZ$@&ph%>Bd@MLcD{3J3-4Y1Xk_9#C1r50J5A!wHgN@_$fvVn z2jsf@-u)`|xt1>oXRpq!B}2`FcHz3EAPZ(KV&&{hhMH~2m8wWd+5Fx9Wt~dCI{*A_ z%g>S2L{9?y71iXMuohf{^4;#%Q>C}$hni=e?YT-;#W{=1&Tvld-$rd2aow8*O*-;j z!E_s5r6geql$LA0 ztQmqx%dHDFW1Dqz!Ny&ty*qM4yKS;v+&(;vNVe&y4tnl zt$8_qWi;gV#%~0=VTWWYd!SXJkmfrh#I?ZF0^{b+^N9`w4}t!{+QpIFXz}vL8;R)^ z*W7bmhP1r+@^0Vhp=XEh%y($}GI8uQ`RBuLaSJv3jB*@iG%Me9Nvp==8JX=cO^bIO z!SQX%ol2g|=G%#acz&eMHchLRvi<0K-twJyKENx;LtsAGtIz{G@k6Z3V@IWy=WmHm zblTspG_t40?3SVRT0XGmd5ufZ?{AQI1;_Hjo9c1~NIyGw8u=ut)ITUiRyRB-HMybW(gJB#aL}CsJz7=`Jv%Zxnt?O zj$oD1QkHs+Qk2kBRjY1|p1G67;hPt2|5JaC=Bb=j%zqcaOEOM@qQNqyGCE|<`+=d^43SO>jp}StDOoz) z8;Z6(wOt1ujFlPe!+S&@i+Hxg{7#WQO-?+FK1{;;%S*xNp{hqOhQKwIl-)$h7MbOP zj8Bvr^anv^-PTZ8wiOg+%#mt1h&vrtip~o!OxU|Q_6jQ@T9GJ~kGA4|K4z+)h=v@r z>dsAE7f54@h~c-Qs8t?==T(rWLSK)Yyz;O^`v1w*eb^&Z$hz6Ly-LN~{Rk!xyr zZw7QdX#Tvs(1;Uw1+D>xX(F~3LKc&#gajNmbDctR>N-U?k#S!m6NV(Qao=8fp57f^ z14<&7$BzUtag%iKJX7e1n&-OyjNvmASQb+Ts8(l~Fu=cz8pfo8=5hqdt*A&zMGTB^ z^Eu%p=-v7m+h5Jas>`L!2whYB=yx%hK>ODm;|Dh)#Fj_@UAAI4?io_hN5ojtk?)ap z!IbAR{#}b=tx#EbS;(~qX*fR!*z3RZ{d(Jscat|^DZ~8BmwS)>bY$iZA|lL|4ePmL zWtQD^_)0hrNyeg1Qq9K`#(0;&6?zt~6&R-EDQQjiNRaL$Il| zIx+v)Q-3DiL;F#|@OF%Ex7*2bc-q->#@mGz1q|7<@abXs?ccu5sZ?{k ze`u2tlrY_YQ;a=NVqUe?cyN$dXjKhkEmw(M0vJnaTIZ`KXjEH)xi`ZRoy);eNz3(^cI&e|2G4 zOtrjB3~1dKReKM|BC1P2%LHA2j|_CQRqE|2N&udf0v_xsb#{Pv_EJ`{svm*A-;o~p zyBFAn$F59Sc)*~($Y-@g{Ct${TIQAg74XoHYIdgtRoCVt_RVcwu}Gjz_-oDV9iS5) z`HWVICtIi5EK!?7_wX+biHs^vTxYP0Q*?CxR1%qbe!w|<0W5sZ-K z;?t6^UU!g!6LzKJ`YAs8`Mko@l+n;|5|0W8QSM~kOtX6|VNaIsuzYXQ7TcLAr9ToV zs8@FU6nI^54!l@tI%(Mc3molq zb>E^>SRzWX{)ZL52;Oy)ry`<5Z8$|rFR^wr#@fZ6W5>z1W5f~uYn5~}nnPkLG(T^J zDzL?!nC$cc#dn&WPuY=C*9!!CvD>cwTg4-z2!R7QzYj>3HjWPO@TIH_t$#gXuSwGi79i|Laq!_!8G!oCbn>U$!%OA~Zu&0}zD=H<^%pKjW-l({A z51F+`MP?Vs)1F)?!?T@?Se=K-k|y8}&Em-}b3ZJuOHD-O7RayNUCb>YHnvi_*KMto zJPc1u%tBmD2j+*&f=y*>pbZJuf+0O)$43R09lnN7llMY31#xDRoYhM6C7w>=p29h5 zA6=E*;g%WIB*ayPT6I6$G$iS0t?GG6RH<)eiklzBfpj^ zrZJh9o*(8TG%)+EFz3+Ngws{N+fknfOsU0kPVu(yTC>|gcSx=En`7#G9G@yHmbmV5 z`1EuiKU#_pzkAc#+6&fNHXyNgWyUB?I-G9-azV>}rSRJ!loAmM914;N_#U(wK%E&A zC?)T7ZQ=FL;x8n0)pVbmQu~0L^6g1ts+9(p38%Vj_pvyhY`0^zNtmogi3#TvHRZrW z4CK=@evkze@tKcwMUoN*-2Ko4DxDWVrBlwDMr5ND(1fX?|E;u&nv&!%O^b}Kh zD?V^h-m`fRxH5gj*YM&TaAg7YY#n<;@ynsH-O&rokwLg7Iqe%n%e9R+=?hZfH;#4LtS-*=dOwVq4Ni{i=Dt2X2}?CG?$_DO^YP&x z0uEajrjJCGq>rp?38zB}(-&ml6=-a{4(Z!9DFED9@U0Jeo)Zd{lOUxWWvwFeejm}q zkR{>%N^xO-HW;;Xn1U;?uoS6W5p!jDc;KmdBjiYG=v+xN>ZU)pdbP-#&L3A8qD*US zKmVJczka&(*MArU{QCIsAA|m1KYW4#zw7_=cTYn)^S1Y!qnp$7*SB!mNsBck?%}nOyz=P<-!tPGLSLW8^OKueEf>3i_Ivc>cbfGTCobOx-5HP!NMpWD>UsI2M_Ks% z+{OLW@#G+!oO>YASI^6Nf&1a>n@wIP4kv`8@qV_K!in5hPJ4YAc#k)y6R)%`G0}vN zrmkJXMt7XPtEYQF9xL@JMIVomTsedHhMwJ{sgY|fdR`a%G2U#jv$XVQr6Z5j_2o2% zuH78s9E~0bg48uBoe-hVh|uz@*hHX36Z?wbqPF*$Pkt;}nmJODFut2O$Ue}<%hi2! zXD#|QrRCMri@rxwPlkMod>0G?)V-VawnpU3?p~{_K5*iX7}{K^5lY0GsW6*q@F;2X z&yNXtI0|$z{g*pmjcx6GLz1SFsmnOW?iTM@%w<;oOx2$;6^G+2piExVKrT zd{y3T#-U#--nT9~fH~w6ybcjiji2r3vWw*_QwNJ`@pIM^S-M%uLHMy>6DSSLJ)xv` zbWPB0tkP^y`*7H&N<0;MAYfuHB#1G;R50NAkW@^EAN>I50`#Sf1vNf0b^DqF+XyOd zl43BIt2#xt#S&sEZb`GHafjNv-xK%l1yPHxiB8ChfE(E*!*32E^->=|O^Vn%Qew|&DU-aGaz`4&TFX-|~w8ucxG}O#kk*o7j z1W&VCNWGS;I-lf1|DMyP>FIin`MXped>!$M%;r1@Q#pxHKt)Mn$@-+%p zWPR-s_k0gyhVp2!xmty`SlG9P>>0JW^D8HF?UuGbIV%(Jt7|tJYDR zW;V8o`G{N6cioV`&tB!Y?^quXW&hYO$vU{nP{iO)kn0D_%lNLTZ+7V%*KKQ71Yd2+ z>}(*j3_id6yjJ}rN1K(MxHiFnkL)bVOyVUp;?kV%Vy*9a`FdxJi=@4Nm(UuOxGshV zc4S9|mEd!QP?lNAGLikytbRcYUuHae}_cMwl09-4$kg6l$LwV9^2;SxZ(wSHi@exK_6&)&CQ(fZRaf`pNo*{GgZN$pbA3I zL59568ZGs>Lq6qi?v39Cg1*Fi4hopu8{|3CFM8$#ABWEj2zm@lCi^qL+Wq#W3fpX8 zg(lW+#2fM8yLreDVzTu5t9GXJDHvW3>w8*pIc+h?aYWMCM3G`ES`mezLUfs?m`27t zzuf=og+G_Nl}We#m`8)AFcEq9n0~&0bNw3Adwx!ccpqNr*$U%v9dS9{8Xuj*LpHL! zDdIGY(mS@mQ=aNX9p*__p@<2|_snKasX40d?0=?cd2=YR9kwW3Ihy1o!!0ROt~NVjyq zI~pn1S+>mOi8Ja+ro#=pv^w|}$`ps^=|H_vaJ{S%-+}6SBi6Eo>$4>{y|OvM`35|F zP2$GF;koEJ*!?X%6ET9r+gp?+S8-&?7f<|rd3-aePA6$~CFC_lj2`iN1P?UbYIoqXqh>)s3Y)2?k(v8o`E;rQni zw}0G9QKqIHnN7attb8NhKwv#xFchwf4eMx|_H*k=5s97J<6c*s;Xhf+dW*%1@^8-}*3_7q%kE

58u$y1+*dB57gVo`7%jLHvf>VAE?0>)izbZIWM$uwfP-K*WGCnL-t6RB29 z-qv;#>Q@l4O-*eTI-D@?8Vpi-E9TYgMwS% zw$Q4HTlBQ8QJJwlaH3&3eU#ZX z#af@5)jo-ld^Tnz7@c$b8LvCnV`14+tnc`b$F?@>1ruUav0k$6#C)L8AFnZ$j+4WS z?#ffvieQ>(SZ7ka5eB6sPmY0F${iAi%B9|zlb6>PmcNKhN>ZSF&!daNw4t(Jc|e2W zF6q12)prvLP+4sj=o;QzJKXsg(!mpPBDreJf(&vYTs!Qx{`g7!O2WL~0ZX2b=8;MS z-e}x1J#00HO(HFWEuUanh01AcM93zCjiniMa{aXqu=kf-=gln6#-wG@*J9X-E5D>(fe zJ+&SSKymrX4AxDBLbNwgov;^?#&{Xvm5X!goqZ21h2g^KX%k*T1r*s@WVLP8pONlN z+BGi$t?{%UyGRSW)x0=&xCR`F1Tko=^{iJxp{> z($ZlEL<;Z|yn)p=pxBp5P?2xm%D-i{upgVLj1H<`au$j1GEY2+(@bFxkg2Sdi__q@ zC(o+g9IxbBYoTz5k{(|9dr@}Y7}j+XZ!kJHgE`ihQ6*-U=_i^t#~T;N`k-lJci16c z82LG{yj1WhSxR29yMM87Dd1nNVm~`LX^PF?>w5x7lCE;agTQAC_kZtf2mWiOPE%^t zWB`4n9`F_^cJEyb-JwmZ#L#s2hLak0)|~x@NR^VZ%6P@5Tcg`J9^j@++bm*kvIQoI zj9Fvtf%g&E-jyBwD2ju6c}2XRn2iYNKhU!{%ueF-LoJ6Inj zmfMgoFrVQ)`5iB`1qhV_^K|_z^P0U7bK#2y^9^|1g&o3pFes}<7^}!XbMiET(od1R z?{v@3=7s&--+_*Syc+nLpK}tcd$OUTnk>jS%~lkf)@w?wBe>Kt*x!L_j9B|%KI4A! zga-zSvLaFBUHWn4^ZFg+W)~&o-|&bFB;2me1@rLVk&%N1|MMOLxW!KTMmX>@85>9o zU%DhXiwz40A*+@tfLo*GOt#bPAM3c$Le>$5Wq zMPexy@7(04H5kHc1e%09;{4Y|yR$B!wFM=VO^u(GTIIM~J-dX)pAKBUPE+v~dkp1n z!Ka$Vi zq;hhbyGz_n$r@Li=!g#;<_z}B>gBf1@>J6f>tC7F70k!OlH){?lU{-(k`>jdEY6=6 zULwlEyz|MkS#Z`lEYs_j&ott0FRTG#$u6#*5mn8o_8ExfXa``=Zb%7 z54EQ)&Nr-3>ZVlGTK1n}OJet`1;uF*q;vCmWr!olc5Ccmq%iOy#{BipDGa0$Z|gP} zkbRf&L(7;|Tm&CCbZSbAc?XHu?$rp+ISo+dji?MV8ht!R=)`~bM(1ZieX&9#=C)5@ z=N=ij)`1@A(8e|&`~H%?xrATX{~Lxn!n3UWBEz=5R?&jvgv>lO!I2Ts7?Oks!Pg2H z2+*6)>s9_F)VR7+ZcD0l^3%AKkhe9=u%64SFss9ely%kH>9q=SQL4{tWkGA6svif) z1{etOmj^Hqr1wrf`ZX5$M1kvH5XiiN&&4aJz6<#c(kUZjty6dnp~{QNcTpl~53Cfm z#-_qgr7@j~TK4|Fr-&9-bxrVfpw}9>C}jD}3ue~A+S`kXpjVhLH}vy~KA>dx)&p}n z8!%n79d~u>W0-6@Gk2~e*YbRj znSPmISdnJQ9Wok|i{e^|=uxbv;wk z$1P6$WoQr}G%$MoAJ^Kscg?8-pYnYde?#x4* zXj@NqNOvv0+q1MK>Ru7QDgU>!o&PjKk`OA zDC3@V#1K5F4wJFJw!hRb3PvD+q~SGUOF9F$Wm4$f_ddq2r&@Y+*%Ucx{hsQL8B!zD&~6G?4{8$3QoM zEt?kfdomz)0VW|Fky+E$1BrvD9_p}_ zpyYl=RcElu7~WC_%hBD%;IROA%xZP@sJ_9?Cq1v6qW!^tjf>i_Yw)UT7IG#vcSmU* z6H+wBCKFr6Cg2)$BnZ+bZ5=e}tsVAv5I=GZ2*y+BfUQt#jFoFDma}@xu`akU1{Qo4YVPR)u{NH;vTiTj6L@iO? zH@fmO&_Z!y=U^bvuG5Ym?0$Zqz72H&L-xL|KfJYgP6dVM|Ew`1n0M1KRFVcW)N;hc ztpOT7T~-Hhd>GDi!g>oGxqfMAUWV9hfnE!~V0N$k{x;Ze&);qE()j$u9O$O_==K_6 z`Z~lv5BID`_&^Eu1tM{?S}905p7Q=YAJifGd>q}M;NHC+`OrXszy6Im-2~jcnh}6n zt0}~4AW`2tvE{`%+HcXN+3{}wd^?6ijn47zZYAjEd{qv0{CvDPqD9G>-DlS9bdP8u zwWQYQRF7EM@WJ8zdLj0;Uw-oq;r4#7IiN+Uk$nof`HUUPXmEW^)-u0JF;m5K{x?e6+n~?9VN@|x|Ky^02@46f4FT2DPAV8z16!o|~hj-EJec!{bDGB%0i@y8K!j84)D} zo1ZLxtYgjw%S_=8o#B!pLDAXv-(2ryS~UmN$JYmyf^Ki^tE;i#=bMytiY;OGQ#AtK>~fO#Mdw{lc!uqx>aeB_L~5%0>%K!A5&q^Qw1J?mRdGx~Oxw z$g1d8DEgDWsR?Xecw;*A=8AHc=~c@Zs{1UE#AGWCR>8%VUKO|HHg@l9kfG*sk z{up9`8XCHn{5*=u1z$F`2>dQ`eWi}r(}S?W*Nt0M3s^o0ta-EGfZJrZjvfq3Hc)b* z^_*_#BnK^$Z)OJ!6oJ45>7~@%UL!V?!M`wVw_J|Po@^cJf5(&CbS?bvaN5^0DE_>& z?E2%{sg)TaQp`4KzdM)arjvj+t_UUNNb*6&)F>1O6(zuv-9~(1O+>3?>6+cwm@4SC z;h>Z|&}OA&l!2Td5qcOnw8a{v##R_Byb7Ay=2xI|) zD1C4UPd=&9Bvk~R3=W2Y+(=fwB0Y?}L}ap?Yos}1+!?KQHF>Ak;4US?o5B6yZgy&@ zH~(PK_74@uax`WDef{mx7>QV9FqaXveI!tQd3(BrLA>mEo-!I@3yj7RJw4*lk$ysI zsy18Wnt?&yynH3b5dP3|91K?*zlWnk>hkfSX2Hi89A-hn2um2r4Nku-VP2Uz27`2t zwPO%nnKwr0l*B?T_3)+P$J_nP#0=`e-@92K2f5Wy>-8L1QN>pSu{}wUeL9mv56Zep zh1z7BWd!vL!8hI9*C~w~iY*PvF%7$;?4INg(;Eae$!(1pA5qIMMYos?rxlc=>qE+G zBB)sDc>!DD@!{V+KRSW(t1y26o^vs*YZ53Po*>)W8Dii#|8eR~pCcQnJ@4f_ZtU4bv}aU=Y~gz2y@MxiHu4^DJM*V8!v zF&Eu7+wqp31v9~%Pa3@rJz&uGi^d*e6c*RQdqc%_%gM==GYUKmK8?HDaf8RS-ri$B z=frnNvueGSQMFhJ#3RUd(?bYmV}t2j&T^~4SVne4{K~dI)smzB@hZ~>lv+30UCd5s zrh=(e{(nbIk!Py13Mg}g7$+n_K3uePBck~r6qX(z#zjmuLd1#$MHd+^NMxCqTmu`z$Y7|DF&rDDJWvt-D=~%jHX#SKFwSL47Gus8G%I1Ek;d+1 zNLMCR6Fe1KPX88VvH#x~8TNm03ZO@h)#bElW`S_$)_jmiijp9IIoc6g88z2r-ATSi#V?B(;*F z(6z2NE5T8)e6c;B8z?N3k15HsrdMBDq!@NkV?x0Cnb(l zP?I<+%l*(12jpr#iGK0grl(yfM+N|xCKBzN!b%r~)pk$A2LTVwd$nCgBtCp2T#e&xX{OUyK50Zya|c>`9)|;pdhuNZA*6iR|zw_#3P<- zKFfZN0i3gL$P)9f_VQ)I-Pp*XDgT(B3}30T02r4@sGz-3COBUvved8x(V#vA7d5(c80paH&+acl}XswV#XBJzodqL#%=j2K?~De(j+3I37IToPHr8RgCqf&vazT+(& z6pIk26pDtz6+Ho>k2)r*mDGjNq4_hnRy{&#V5adCc+Do!1^YfcD9g*ZAEaVzjD zwkzRB13F^esMFd%W>O7%jaA*PW&QFhLxkF4)^Q9i=a$lJZB6$Y0oL2)DlIxrSri$D zUJ{bb$W_FKCwkNk$xP*zddG153yWk7Ig{?o1P^fS$zOe|(e`0iXl}EuuP6oW<1Lh6;Ds4+uLSTkwh+m=w>Y z(@KfwR%K?(YpV9LkmUqMs$t=U+D;V56vP#$n^S(ICItqI?8AnuhMkk&#{LEG(5Cb_ z+!I$NXffGG!RjhLCpGVRDg+(EVk54PL<54Zvq*TNX_XN2N4|z^#t?8ox#Q9f%}j(rhxIq zG5VHBi46mFT2J0t9inqLIkRcu|FwDUO~iM``iRCWG|ZGE7uypA7Jm~Yoj0jw(nl#$ z%8U0hP4n*(Sr#g=%}7v6Re(MhbCKA;gEz&ejk*zF4C^6eL?(_&Bu1-j_Zl3hM7Ym4 z^xw%%xfRB5$bB(XneZb8WCsu~l2+hJCCoP?q?tECRVN;>C)!twkjI(F&&!{iXh?sP z4bUmi3k^6*A;cgLxI?;GS$FRf<7~ma2aIdGdyLm9&5VO`#*8a>P>q)*EslS6crTKj zxhoBbn|uE0u)$#Fr~uqRqmlovN$Kgfwd}vEd9l$0$T)O%9)y<0$Lev$h+~8u{pVgY z>uLzB&$I?V56HE1o5pMWc@;Uh$w7zW00n-hK`H59*&F9awLs8Ff_FC}uX27Q1kTTr z=*AD`%e-k%%BAaCJyC=w?WJ$AOJJX=1G~m&vVIDZ&&YGTk&Yc|7O&^u$9A&sAf^M& zW~PmN?_301)Fq{q&36y({FvaUxWs0k2p9zeTK;F7(KUdq!n{2a-9InZcgJQOjmcYc zkwuI)B~Sawp~e5aaKqA|L{o)+o0|`^)eVmGe22G*9*i3Y4B$(@Gs4)S9)4svwVs2h zdQ90*82y^Y_$+6Rmc+iH%3NkCg90Y0iwi%Vw$_T|afsTZVJuOi+5$yA)K(c{><_O5 zgy{012Z3Jg+3);j1G6q7{$;qq-rQzeHzau5@<#QKG_2-8Cm4B>lZb)cbTXWwX~-R2 z^gxGS^MwVW^P<(vqynmB6ptv_cZKs`^>u_DpxTcgI7PIY8M0?I?Kcgz-F*KT<)A?d z&(eq_iEpC)fk6aTPGqU&j5^%G5Xb~H8T;wuXsR5nCz=ioc!jHR1$Nz#FE}{NWPt5N zW*&`T+XV-|gqFY3X@_Sm**HaNy8?MqSv=7PyxKt1tBsk2D`dZOkC3 zunC$Em~{=ZnjiSf#75;_FRgMga~bvPQY}7S1EfS2Z|%W@U?0N=JgFF9@0{0tIRR+j zy*J;dS9v>Mb5w!wnH_v^pU)MoZY1NXBbg6%MbpaQF&}2_e~DtZkas6^lf}4?pPqLB zFmz#vurhIPw6VHMSbTWJ$ny@90Pm0Fl8lB1tsFrqas37zJ_lmeZq8kRsHR(TD+1p+ zbo}bw)SKQp^N?W)sOexKw*@E>Flu|B?v@8;!$E>$uPdG^{7945?l1A=_T06BiN?Jt z!hLpcjdLHvM?BqL85ATUjB!{!LCLBFCF_2!-%a0&+g9>5ZFla{SK4FAx2cBB=+z^% zm_v=|y(?ZE+Gro!yRvrv-PWES#aD(8?~J*F%;{zQJU;J$cw;GcN#YKN9c1|-?qmUe zE$&g>ILD+17>w0V{Y&C{aE~gIm~L$Pl`e_wEbV1JdSh+ip~fze>BT0I-xI&`pDsmy zPS7^15y!>JiaIv3rIUyq6?tBDZL{bGZdicB1%j4jNPS*P4_6ea;i$M(s&0uKbN);R zmW>t_E?$D+c3i|E8I@^n`6~+QSr&(D!`9eH3(HP&QX7_sQrav0^w!$oLyc7;(}PVS z+16CYjrP@XDVPJezp?G#Z)_X+jcusEvCZ-~w)OnRHnLNSg#%+U)tJi0rO}W!1;*ma z4KJ6Y#Rysla-nJ})D=&KD?#-iZ5H?hF2&}HWbQ#EMf{|Eoi#x!=DbNK8yzQ|=f9Fy zq2~1*+>Jw10_97C^&xDxR76MZcdeKBV9-G%lFt()2IO}1RWxg~9ic@?!%FJ)x-IY% z(|egQ&#bn>MGj*g!$mT}ayp5=W0C{LIX32G5OJ)JKuOkR>sF^COkq^C=uNNq)7A( zsw^%3(WkNVHcB(D3QkU;&Y(U6cDuKco#^@B=WIvcGc6U}k4B{%N5o4BTC&rkUO4-!ZEZmy1NgKeEm!1Y0+aaRLjMy z!Bs;UV6@ixGn42=?>RgQ?pOo~mG7yy^(ZggJ>1C0pV+bq0_rw|_eSS6OP|fpA9>** zj_*XI)~=YEzk@wn(3FQ4elF#gHk}N_o#h1@lb8!7=9EO%yQEx_o2F0?WWR*wYQR7N zmgR@{jt!B&gEGh%RixvKHxCOE=ZqKX2=+fsBQSp6^PLx6Q}-S1HR3 zt^gatxw&a(9{ulS`D}r&GoD&v2URkbNhs;D#8heyfIkQfM838!-XRPGkZhk~CXaIO zM8~Vq93+&$W**)k43s|=)jvk0Lt*SV`>5|rAX;T;^LIYM(vbC2TJ}H~ND~OrkB_%~ zprrp+1&g~9mLbrf8c6zK6k^BOgzFM{< zBC0Ip*bH@qb$K=_T&Guh< zWTO{orev?*4|Y6%-~}zprlp=i@S6wjH{Ih$DdjG%r<2cKg|>y7am^gS4Rz#k<5620 z-qr!}Jk1vB9~hQYM&24b@toL=Wv@c9%upt1cE6B%`tO%4|n zP$#JxiM=Qqsl6x`|7(f8!jGhuK^dW)h9`rR=ovY1NhT|=SrS>+Pt9!3D-U>vR7OI= zzoLmq`8ki3D9%=u%Bl-i#mBI3oDFxw#!AtY3{4zyRR8np_UqLxe0m@}EvQ+~B+oik zy>tSMFpnBDGO*de1fM1~&3q}HPXE|l&<(gU)$Lr!1FaG>5@}=IRDWbr0@)p@H$08> z=-fWY@?I&8lG)H3jj;gw*OOx+$z)`-aXK9%2bAQ!l9=T^5;kxgIz6fZZ1S(D3{nk((lcI}`J`-?Y00!H=9L<4nu!r#E2U73u%;@m_2LJOV_EnqC)<~b z91(`VDxWKvYZkG0s4MX}s>M7M8EnRLAVP?4^H2 zHY*>xwMZtYwfI*`WP&=2W#-1@OO$9p7$%Z}Ck1A&7uM&zS=twI)>;>`HwNWsctDm7 z^Ug$K(u#$+TZ6lo@T`*O44cwwqs~J1jU9Q+J3rs&%Vi5?+5#B$tUi``98HEzuN;rA z+io0NOw=N;}t#^S@rU z{<<2_Pz-1C8*cvR8Vuv$KiBzK1@!vEt=L=yjfj(IEdio|&4=ni&4&M(`Wp?#Q&A?- z76Q=^oNq@L!yIaUt@*1eu$Z#2IP&Fkz`5p9QHib&*P#poT=Xgy#h)NXQhEHtV$epB zt^C6fmg&l7n(4^ej+|zZHo#GHS$@N2F0*JC;*RfzI3H`Am)V!$L*J)V~E?xcSBx`e(-#^^$weluzr0ViMoSS$so~-vg znkTI442QbOf^>Z@a!_e~aPED`uv`wKjUH8`O6Ba+CKXeRH>R>>6wbU=-XU98qRCuQ zro7oC_um0%zO>cSxJWDJbJ;?=4F|SbI#y&zJA?8l-DZhJx~*8VD8>rYdD6Kr`ilQb zyh`}$-&x@^&+DSjCWyjywv5G%prrd}Vb$|CQxCwX2_d&b1o_6RH=U*y?QXP38q0xB@ntKjD^MemR9Z8EZt>Mb7L?iYmgA-_vlx8380?X~hAo3@Wl4U=T_e9hl zOl^SfR@gn=YTu2X<{MR}-%cJBGn5{uldVEEhH7nAd&y){Iz4Z+Hz4LasM;)TZ?HF@ zo^&dMxnwF38@q*w*M1ri>HHt6-a_nmpv&15bIa~TbItC=Fw1VFTs+-abjLQLjy@bXL2p|9+EQw;#%Mx#RzR?DJ${O zVu9i&$Fo^xMbLtFeWc*B z#N$J7^Tx;2_m~wkX??*ijgnP4Tjd_CjmWki&uA88mc@#zFqo(CuChFx?sPd@A2|>B z>rz#xYHUQ8#SKt}Y#yN%!F+S^n9O1s?!n;WCAmTDCl$rtK%}+^?HcZGTwqrX4O2|5 zeal_viAYJ0XEd3MmYb!a2&aUl5*Dd!c}wDFCb^pEP<-SqkyD*K;Zap z`;f8on?xN$ExfY+{B<(XLxXRmYOsBHgVwNvw|p(|Z2obCo6_?$@;vi#=bTw(1wn44dMTOZ<7CHsHF{9@KcEeK)%$%1dJx9qP7_8yg6%R!OalLj8**LX zo++p2mlJ=0mRGy`zkKWD7P)3yUL7D>UMn^}Nd1rJha*~??5+^aTe~Zq>f4-+mY+60 zC*lK%&*!V2<{sBpuzc1OMRTWl+uc3)Cp(XOJL+wZTe}CGYF3M!jEKJG9-g;D?v{?{ zyBEgpiK_-^Zb1M>fUo@aSPh_!g)2{ymEZlRY{D86_MNMa7A6jEH|Dwg*QW{@D&!RR zKULIGHLP$gr3oN*%+yh(tTj{y&x3RS_?jPt>MgStjadhd1+FfzF7!67A6bH@tMw!q zd**gEjG}RDX2c3mt9R5`=XF>WZUjw4gtM!0vcp44Na1E?CgTnn>b;|17f(^QehFey z_F&6XB?%tt2JSk0Fz|CtczU+s&zKJB^%EzVVY^`a^Diwm9V0q$xFUBI#JW?#?B`S# zx67L78oSGu8jt5?wsh$+QG!D>F$JI&{=`>QZKP>!m_=^BjxSWvsEM%BCob7d(9yAQ zVHww|{&D0zD#=Ta`&Jbu6d4+7w{)uWSJw1=d#+3f8*5s22?W_@qCE_Vtv()jWVe zjAzCMYL4NR0le_+_}KH&I1PhB0}R3$vMtZO*QTzmv~hn8!OXmN4JQvDS`Qr)qvfE^IC(Y>bW=eEc&iBOqu%D! z2tUBGKkrccv7pF~!7W8@Gx=offa&#$JnK;V0$H>CGk(Mge?hK2Y#T3)6rphr%-XzB zgp=vrIG829G=T}DB7(l%I@!9C58bFz7~TAGymnJ97ivVU97^8m{o|;ImRCm$z<269 zOwSHa;&ZV%R;47VTynsie|R?^W(L_GV7j1Ajb@u3N#=!_?*({OxV(RL=vj1iD5m`V zD^#N>Cr{;!D8y{4+A%Q&4?V;5iD<1B!{O=Ga+rbs?Oa^7S3nSkt!`FjvE1(wj>=-G zHCF{xxau0YslBCiX#l>-olUR`C#H1i;8*1mtb!F?Jhv07f;D56%80!FPZM3-&w*$P z_Ff3zE4?iiW&Xq1Opnhf$;{G#!7R~WW7r)mXmJ{x00j|z0>%;Ph-6g!i4-B$9;rd} zPlUPvW_{i)%GvC3;*T|xJgGU83aX*w2Gxd|AH%3x1jGDll73qqAM$kVCO%Kyfoy+8 zINh2X2BnVM&A|tKMG3qK#$@{Ji-fOE!X=qr;EKGnaA(Es2h6VJ2Nw)N#U;GRp>8r> z%aUM;Wo*QZ$puGt0!Z7Rr}ygy8H&e&%IsmQ4~#^GSlnZqW0QP~?H`NVopqZV>J9m* zZu=#}p%$)pG)n1er=Qi~uczBIQo?=59`aDRo zF{qej9en9bQ?eYydB+~q{4BBK0C!>7L#n4pc`JGx#QbwSWnR7BUDEizciU=m6W#q9 zj-|0xqu~k#nZ<9Z)2R8|bcieS(h_mU@SP0(*rK=CQp)~#xxxE<3URvs z@iY4w=iK5F2+bfQU;QN1X%U|fY}KqfppJJ}Oent2Ishou`k3|q!G zO{%o!pXru>NR7Yf+*^a?hE(iJt*WWl8q|Md>I?u-4MU5T-!N5T{*uF721F4av356R z;<}4A60~OKonRfZB2*izYDiP3O$V#Hs^&f?9}p(Mx&+6qelP7b{x!G)uXJ50ys_W? zrmUI#69|l70|^x6+bjy6tVDJqcfetmcPUim>|LbDmU$@vb;PNlwxZP)xSGI?%t%HrIxs9zmW-9S zcd)grsWK+lAcJ2Urw2o&?}=Z#sY}yrJS^wI*mX2GSBlL{8m4*m=x_|NLPKa89eCyc zFFAFso@C*fz$!T?tr_25-&YbskjNueJN`NKMsWWI z$R@|(u~&Z1PKPlBGu!kAWoflB4Bb5$D8sGV90EI7}^`$bh8G+K;5{8%ng+*gu^(f*5@CSh- zVBc!Kubx#L6{JW382BF{4BOo+SL(Pg7S4ub*uSAnLV-?Y)VP2Dnsb5(A!t;C@)hbk z8$t!7=S`L;sZ;vnEh?=TAgx!fmv+~WsD;+gt;XxO z)^Q|7)=lH{*6q*ubwX?fG4=}jO18w|^4C({fO0A&dxBpv`FVAS8_UH=Qpckx*$13r zz7I*$HPFC~i{L(X zO&%6a1ag?3I+)#}EMh}o0M#|u5qkSseIod=%mg8_&PHr*Jv`C%;3i?oSbLo{qpguc z?|Oq^-N-ZWw9QU+<~{t>Wt-(OY{zcT_~#q(V@xd-0pVjlURqR4s0MSK!9;9;UzCxX zD4#UMX4y|@{prwn4By^Wj@l(Q)IQKQI7)2rAyOxB&ygk2=#LDB)Er)vmL3bipR(G( zyR3c#pEfFK`s5JnGx|v2P~*p3Q{)M$0k&neWu)P^k^1jkQQ~A(?np)C31y=ByNDzJ z1WDP>Z*pp)g}i8Fas)Tt5P}={0q#X$Pxm%7(79ldxJJwj0v zbb->#zJWQ*^CTBl;^B#vXZ3VLy}YE4c>)OAmrnp8j0Bs9NASSh`dp9KQ#j=~LA>F9 zjB~gsE8yO`BA*>8beH9CnvS)}DZEP4KSze6S)K@|$D;k$hx{zG7O!KZ?6OF{d;Dl#&RQ`defPd4G(z0AI&-3pW2z+pWkE(vGUJ9q~$+| z$lrlmPJj}GXhDnQ9Kt#XRDw)l8T9L9{Z{PACeCci6R_M#b}|kW7g~|>mJL>h0OPoZ zWaFZS^1%ngk4h}VLLneSiM-&23APF>&S3L74zaTO7STSR_#*%cHV|7wog{!4?z6Jp zy*klAYnNBfFzuL^mSz0wH;xV2+tX20H#Cm1F($b3sWA@=v6o!%zU! zv)5{cVS9gkDU9xc_v6UYp|kj*%=7nV(I)}o*MUqp(Vk-|R0c*CHWezNC28SB0qfWC znKD7UDwD3oh|Iud!(GeML9Wp?4bh=^x_1kDL1Mw>@aAkZR7cYeoN87J5eLj{^-^ha zJpefy=5dgalSsMA+$nC{<$Os=5PJ!o4xyDXxUqsn^fBBBy(iU#Z8S|L!K|A*w9teu zd)pv3SIPIKgV;326&#EK7%iujW2YIwX_4ONLzDJK%L@6l%42B%BJe0-YI<|)5vh6xY46A2Nc)P zfUyyf1i!I-MV;j#vJc|D2Wv3}Z)qbh9k=fvZHz_`9Dr^hZ&`$3`?5#?X8f-O;lsA0iyJ69 zkAf>)x?YX%uy~UM|K5qzt)gvcDQE+iA-FKR=irKF-M=Qw%%}nC@EUsYvGOZC7A82D zI~$ok<=Zj3ebT#VDKU;mVz2zxOO5EReSie2 zUE=3iR_zuQg_gqZO1ThU8iMm|-*YROwAZ<(slMj$gi-3RJfQx71L0B{tw`B0+-Ptc zb2($hc`s9D-aLQ$;!fJRj3uLhy^`&cf~>?!cuvqT?o+Q5?GYgt0R~>~#qFC$IiJ2! z>8zHk3Ks~P3s_gL`4G5sBXLTSH5RLF_)+WYa@ZV+!5E2C;CdzLn-^9dr(w3hhyr?F zeTKcLdUrb*m#>TfTs-6Mc(7b8G~KcvR99)MA!$W(1^Tch3r%Pnm)Fygyj*%on^w}U zUT~r{egi^UB{5I;M}4!>@=djI}X=d$s<G+uwl(A*N~&)8>Ry`2$&EcSbJDmf6FCbqQpdTf9c2ZUuy*%`M=zhq z)`F9m%wX|8mfEyHoSMR?+l;mMH`bHsa&GpjSTV{gX04@$vJ|z&#o9L5_+JkatSw`5 zD1ILej#48=z=t6BXqO}*qKjmahweuWuDVu4zxvNC>{U~*u(P13vj4`$4vs|K=+ZGZ zpC*2hGep!x*6se%=MWd!<{F60@r%D!rX1QeXKIXKnEh3?ygK^G{(4$YW(9ChqbuLf z_1mtUh7$<5Zds0-JBP7Q7%c3{&9=e7RrOxWj z(_{I&*BYrjI^(mT8+9mx2=7GJ1T8}Mb&+my_I1nVlikdH0q(*(GvI4`$ngDfx8+N^ zBHYBXrdL~*uPivJz1Rg0qZfS^kn$^_WD<&z%V!() zxWws9K^kwYo0yw6H&aDh2jiABsiB(sO4#SPEQ&+Atc!MdT#x6Q1%JJd{J zDxk)1y_lmV-;wfcJ0Ch~Tn75y8=!gE+h}j5mp!TygksE@8@ZWXscW7+rOVb zC74Y$>%SZn>6#tt)jcnx&2s##w#GNfx)m~*_K2+qsA>oK!QgO&#nHx;CnqSZS#w!T zj!2JO0sw@CTbUNbA#8!zuaDXo#i=Zux$8c}s)`I=Z_#Al_H3-5{VM~QL%^+9yugLK zCif8|9@ixjab1U5Io%pJ1oS^V%4`pN5hu5B18q71u-r&-4-cQm4eaO4LduES1^QK?*r}_ z4wW12zMIfIz48W*#8X2GqnIer43c4<57$qNrfT8M9YJU5u*?tYbKzkW&NTLraN@;G z#T(n=Sx~%xCsD$)!6N#NyagI2Mg@T!q6L-hC#cBu;-5k9eNzKCg0OycKxgMS6;7qMoh^w=HoReNFw!KEzz~!o+sgW5(RfU}$&p z1xK-K;sbRF~V3j4FyZ6^`vlsa z*P%%mIyOcQLKiY_mJ%(pB&oL0LvfwOS6b=uImNZ|{gV;l%Dr+V2mKQO-9Dyss4mDmH2euLoa{3UeEgTIEW`!bGB-YIflDH&6LfR{BZQC z4h=zv&~yUryT4)bGq?>Wq%FqlnA5455?7P(o9Xq=j4$YZ+8lQQczz5d&>3-0>xUJp z0dzJa)c;1rXyW=!#XhUyklmDY?1NpPq|5R_8f}kvj?wQOiy}g@_6M2nZu$eXIqKBw zx$>8kaA^}#EFhQ{{2TjgGwn$TQ};FZ10>G8E!8>h26J}CdXwGkAOi0g8y)uqW&h+n zGSTt;2ppp^T4Bu~`=aDbHWW{nml5&R2=x5PMG+7C98MW;aG+*j*>>}{uo2zMJOlJ| z2CHvw{xti>QsY0>EFuQy%;?P@Db^NQ= zAuz5nwKOlw$V~a))JYfrc9l)iPh5Wt;I#h()bPLl3;%zE8d%xsnEyXeLxd5#gZGTC zeKt(R615|sVQO{t`iVB!C-C|;Es3O*BkBL`;m`LpKjf-qwxvNjP`ey_~CEC ztHg-U$HWqi_s7xm*~vzZ?y1As``Zoc%Bv%4i%6d??~nV3DrR;C4DEI>s^!4LM2|M_ z&kMECfkBub``a5YP50SYaLNn|7iwFdsG_HR_G2(AW_Ez*S^ZtL(d#s17g{*v87)6X zQ!;M>%uJ5Pjgdh;vIj2AVbc~vkAu-TOMVJV`lednh=MJ3VO1AtTyUhRXSmVpPs#UJ z$#a(F7thZpGrH-D@h4IvGrV!*p0LQwK--Gq!8nScYFbz(?-M=G#6r~Z5hTGtz94=H zP4K?88nd%5<;`NwzW=tB8C1tpG*Exz!NK&Tvs?FGlTycwx62Qz6)8Gb!Mt@Oxoe9a{msTnt|2fi)gK_$NLd>>hg6@;Xfj zz^^Vo&ueTF%l_cHZ1)LXYC+hc+fWz010;pr&4)I#zUH!0r*41KeG2u!z$O`XoDWsM6SpN&Ha4E^(l@#zgrw%1FC>nhe#|z`5T&c;Mz-W3o>`o`ExY3jCWY@_u$(UGmDSFgJN?Ud8I%C z*gNx6_ZI?)21Idz+WTQe9sl=|Z40!%^X#}1@;nndxWQ732@e<%f&0+L9I)A9s~(oK z9xf-Ev+5^h%W1p~5|Q)#Fv8m$fHIg1bx<9tc3}60H31omJMqW2Me8+vEX-ab@Cg^f zae_-%H&eCdj?RnN7e(u4G->K-&6B3LV7mW@v2TpdBYN+jidA zn%H_{+fF7n=j1!<{N=gM;n&TE}ju^9(XEgwU_y~Zg@ek(}~tGj<~rq++~hk)_q z=OB82v%!2bV=>ZoE5l*BDiXKe1EQaYo)++e{k$z`S`4HcAAgW$>^Ju;o(IgZmxA*BRjqnxM=Xksx#VcNS~srC1abS<&y>o7>~tpSxx?^p1_Ae6)mQvJ*%RmN6dFJtmKL@@}qh z%b!_KI7{|M5V{$)zb%>$OyXA>m2o({^ufrl%=mbK?|3LnaE5%ICv4e^_1tr$uZ>u6 z^>tMTW5ea$HKrAKjHPeG5WTjw#fHeHg4v&tB;CfBK@-Deghd9r+WCh z#*gZN27xZ`@}Du>bBYgveV|(w^lwSjN4jv&M%QKBgP7U#bF%E@WxF$rXXBF-;1on- za+ckh$3M+CTi?9ty0*s|TJSA1A}b7@Uv4iq7bjFC>nXNjyGYUgp>c_^o*c@0F#UKk zJ2ub^*HUi#jPqvrXyh9@yB@uJ-AOtG9=GG9EbMjftRr|W2>Uyvb@V1lxy1|jnpfHu z+}3r9#gTIN9!6TS=j`wjNzOrzjmEyVbK)gMzD~=`LU|*N$lupr-4B(_2=2(xbLhP= z+M5&pXSU#0_fYsw_Q7cTN6&uRl$5uQ&*(x{W=VePp=k zUX19Mm_e*ZRz^(2UDHfwIPnZY&CK-RzTOy4*DmpU1*V4u#a>?j>R%lb(%Ue^h0MO2 zH!ZQKZd)5X&A_Clvtg=vLB$Fq{Sh9IEyN)c9os}L1}K$cX1p`AsxVcs_RnC?5DrdM zT3`}P%-Yts_b4M3?MZ{jGZ~DQ9%X3h)EYI8V8FXzGzn?TAEP|Xc!u+F)YZ{to5MJ; z?QMuouuQ~C`)LCx#nm2Frk9~-XPpprl&NfK{BsyagE_~jZ*Kv8uhyKgMy7@J5SPXU z9mT=Rt@T$sQ{Trh!tyqYVroyHn%+oXr{T=pajkIVY)jwnpX>Yk)E|_A(0@)EToJ`G zg*prjpp%~V<-?X-n5GRJSx}TzKAnEan^XXyW-d zrbTTJ&M4T~j(yU*o1baECtdscZ)@XKd=g}SE#^r(+j&URLn+E==k~4Ic!g2F*2MNg zne+JFyFZN_UscICJIc)@I_p}0gfAUukXhI_$fkHx_)Y}(T0?!=p_J3k%o@gA5d)0k z(9N{@yJMLBchcrRht3zWOf=kb!cghSLZQVNk5@fkiy@w20t)yVd^vfymc5Marx;Gx z+y8+32dr#-jYSUl3!=E&_dbx$t!;L&P;a>G_2NSz@7woo8nqi$-o8Czdb`MqFbNF1 zFvn5~TCq9t?U^VWO)pwzUcV2>pJed;b~dT53A~nBKFYwI@=n4mj^1vUh-P>w>z1bu zmylfs<}R-(yytSG>SyLqk?mNJn+1~dS+An-w2UOZ%H@xBZX0FOnEsq6y1g=Hm}oOG zs--q09eU-?yGpzAU@WBQM4-#c5p}@8iRi*%NPyCerC8iI7Ah1wpf<@@^qAwi69`eA zoYTk?0;eI{RMfGt`gGFnL7a5!PE!MGlC}2le?hUjke58pw8zPG+LfK|sqOOWiMzB+ zjp8gcJCiIO<#qUA1Fqpo)`F_3Mx21MT7Y-I*3R02RoZ=l(HZeYw-)CXq{i+Qu*Vq| zZ_xx>?1`eE!it)lveM{0)E0*MNa~tWDgT@vq$L^|TU)ww~BrRE5Lq&`x z_4$LX0OLU{|82_X|O6T&u=DY)K(ILtO=qZ((97N~vhIiB7pGko4* z=>RiDE$!TJ9G#Mnc0^8e_A>+5s)-g+x2N6-*JM3CdAfJ^Jl(AT4HgmT%JmHPD~jZ9 z$^<62uLY|mXx+Uq$*;-XJeg$3%l&bg)Ko?;{sogrgt>lb)Fv%(SmiYk{vmw8EgV5` z^2rA-<8eCIhzf^agonW4F(Ez88)53}@iKd7!bwoFfiW^5FX@FuLJrWdQTwTg2~CNQ zbCd@UibT~`GCn|a{d*mS*@PvQ5*Rg5Jm16~ol)^njYL)Attc@Zi<3xHL8>#5yRcO- ze3mxL`N9~}_|AR9QXI&FXb4`ydI0~+afBFy6M}B`JFuXDC(f^E5tG;#-l#~Q9jx6l zE0Sa3GIANI^GFpxQ>)ympf#qea;ZvTkvHsgFLN5Yel&pqlNBP-daYgjHimUn3bsB;+-1xHky$8_5-NFFW2$|(}m~b z$(V#ue8S-dq4OHC-AGb$=_p{d2zGaGhX9 z-vh|x_i0?krluaN>N3^oenm{AmZ)&0`%e<(wHF$Rber^_sar5g9C$0r0d1`3&Niw#8kaw#`t;tyn*e3L!EOilagC0qcPSQujFu<;(a8qGP*W50NO!O zsCGe6v>+nNSczk2EN-(gRp?q7D8Y~Pm9*9d{`NJ3pm-!ekU2NS%~-@^=R@rMEVxN& zSD4(2Rq#!pY1QRz2RuvE4Do^(MPj$*^)OE5cWW#`00nWjay3vZkAA zfo`!v0@-%vsaZ9F&8*`yizY|!nSQ2Pag8Loky?P<-+q9r-+qO$Wd2WvvUeA4tYy`) z7I!$E3v4Y&G7D?K0E(VORoTQU1-8`MfrS#@D9wd?QG&g=c_Zbsr2Uy~LTW$2xuj3`+55_ERHQRtr zK}SNA2FA`@2GP!|1}%L*SD(=#U;5E;ykg+6_$R*at*VX#{D?#Eo#7vz3FVNE66~xm zdtvRhZYX`p{7(BtMw`p4^dYnH4Ibr>wKdY=nP&ds{G(ii3Wfo6di7E#0#q}{-0l(c zD%Zpb^$MX~YT4zFX}wxmZ)$Igu@)Sb@D}+MiUl19kJ_0IW>BJ9*;&P#_Qt<&I@{G% z@S`o%`M9*YQMHBOjfOw|SaTI|&bkf`>75txxC9Am-Dc>#(QOXa2s~F}+bm*L?q zX2Sa6S1zjPz)S1oF~a(p^kS*Izsf2?ZlHZosW7;vLino(2!$D#=l-CfT~$nmz(sUZ zVH~HoGkFc(X#6;kXfB>3(aLd)Yvmq^|%h%+#R$b^mFMXzL$x)*fLrVI`$nrTD?{}GwD&*^40XBW&o0U1bS1N^7)(I|)rx$LDAb-P5Q1DSi z6=()>zqQ6j;zoWg>RhNe?I0pKey7L{AAH2L^g23Sp`YfJI4w&iB_c)tIf~1sz(Lx9 zfMXURBDya9N2DdDFDwfWw4R!y*`$-85EapIyW)uj?{8R3m?c|3w*=GDI6OAH1LCpZ z5xCuaDa;kbJk;og7U*+MC0^WzFs#46Y?a-{!I3-J`vF&p0b;bjLo1OqS6hrf;Ikyt z-t1#x1IM5K)|(G$q7aT)rx&P75jW7^LY=rIvy~p4e^23>ege*C6BER40R>%4fsMxe zNQK%Zx4Kv?3p1r-T>SV4{o5;>!r={Zpi40VS20I6@8~!rgu!M^vZ90VA z?m@|xq!&|csZO^;@4?`XD=xf*=axQq81SqBn z;R^>~0eap`w& z_n{ug8ZbBU*VCWkR6E4|sCK;rb3@b#hL(8^D086>k_>EKdIV_oiI%;EQMPe?tZe8L z@lM^mjTV~|dTFoQrj?pk1h&c1rNLVfc;;P)jD! z_;M<5RV|v(@^cHx&dxC|G$E)U!}%+RdzS9y!4B{D~HL3SCEg&%4_6A5Sa>}gDW{3^k{v$C`$*;8Zi zWvqqtJTyf-p@^On!aUYq4G63llTt96cF=e(n@$ zYp%aqbzT_VeNiawA3YW**B!wyT(0s2qd2jSTFQglkyYg!kKz^L+(?1kDM9rwqZnv! zozt^5l}CFxM_VTc0tjl4J~~dJxMt*GFcF&L0D`6@Sv@_SMOd|8zUoSpMvZ3y)gl`| zt7ehLq&Nr?R4wpKFtm1JRYATZeA-kC2H3)?@78`+>42G}_F`aK(!v$g3x;a(u!Ncb z1A{mZRSol`#QO`R0p%z?+s16l3N!|Gh!XwWnYy@s%uYW+;6nHB-)le)pn7tO3tA6$)~>h0&}MS z`K48ByO09i`F?2yK01q4?JHOYU_jJ#TZikpf2z5z-NDwBf~dK6JziQ1SD$-GZ@i_! zDm$cDab!wCR-Y@$ZoULm-rI{+CPxTilm?WUhF zFo2l1;@qY%ia0S8+II2{Br@ni-rBIi;Q|wSOe2B~kmD^i&lA&=60zYS%57YEDoaWW zlyMzMC|eI~88qsFPZEe>KuOw$#4(u&DA5nh5`^KXyku+>v5!bS40sz_6M;Wjb{`l* zHE${{+b&p3;MHn`&-+mP!>KUg3nc(i!w|c0FG=#-$xTQF?$h_4GSn*tOH&o=&J>?A zFqTM=+yTX0Vv%rjm2dhXC~og@iAW`k>F`I>`9C6xmi@Q(li8)w;u~=lc z)vxdx!r>s}&p|p5w?|&>n}H;;-8p?6#baZvWX*FloxUDo7r&6qmf-z@&v*{jwS~Z^ z1uxvi?y^eDGP=ETfk`f$qUK^`tk9lbn%h{u4EOQog?|n&2}s3$K2aqDm4t~!rh9^P z9*%vED8p^!a^nvMO!=>*PMFuSd@SnB%cTe@u$aQi(f$8uH(w8VpVI zX^}RZaA*fc5S%S71jhGSn#CHF<~c87s@pjP4H&qcIH0J7Ng5Ty)|8P1_9~qh1eBTQ z;lMdv2}I#!kTl9R-IUG{Uo@96@m}1%kuq&skW$RBiRV48HZ_G5EalT^*=$$~dI|~N zpcWiWa}BzRg(P*kLYtC8p>1h_$cD6V=%3UemKtid<5Kiy|3XaWe8`PJxjx{rLm%!* zeZO6xaQzK6+)W5I%L5JugV&0JXisr1OUmn&l0uYN4SI?Zf;2VN@G7UR`6bTqSgI4G z)nbSX{*w^%dN-Ft3KNm0Sp#i!F_wfG&6gquU^Wl=( z^t7GRrO6;!2mV?_M1Gcl{#CwVFkf)+kU4D5M*jXieAk2?Yn1lPi7ps0G!hgPE*%r2 zrge($%cMJ!RA!brqpqqDNS9h*5LCzlej8{gV~gjS`K_SK4SP!@Yxb~TOO26O;W^pj z>_w-4$9suV&v9WQ9sNE4;ZET{GjuMe#D!ic{AP4Dqyz%iqlAv&qJnd0AiSFGT0n1)C@aOhAJKN`U~zBKF2#cj*s zy4rb3&4&=w;6QS7KCTkXztycnRGe(y8-h{SZ} znIp+3@+lh5k!#LCD;Un_Z_Lzt_O1O|(s%9?mb zQ4Oc^1F1w~Qz)v!?iX|FWhrqK0^@ReScqE}+fdUt9||P(of|ySD;%qZ)N_JS5gIj% z(Q2Ym(S0s)q1`nC^CfP+zFpk9ZA|*QFpW=0io%O~^&7YHItm)4)|>!A>aABaQvCOT zp*;$YL}R3$s3j=bu3!4LAW*_xh?r;zroazR9r^{NTZKh_mNPCDNVigFFsIpS`FGQ| zrS-J8uxa@SVjw^(eE3+xjA{jSv4!xZ&fb#T=?@G=Q&pkz>WNjPt=^JY6%0jUDQc6q z291lClDlH(CX z-SOXq>jhsBBtnZkBty%_V1}zv ztjhn_FfhPo4%#umUf{qUDM1VSK~&J&&jh$+im{|bFh0*~Fkb&gRTQ3M_dr~H%@(Sg50afXJCb?*xg56I7VMyh{dtJt zQZ7?3@QdM$U;7$?SOc0au^88aBWuyc=g!vW;hV+ZRm*86h zF_h^7AIR8Daw|}vpn)Mh;e|PyI&uHgK5b&N#-W%(yZ6WlNv|U6!E)c5*fV zK?z<_#p-q$Fe*omH1nkaBca3R4*1*iiT6Vgq<;*+i}Kg>ORVVwfcmw6h1c8ikec7T zr;K|Ikqb4$>nxzaZkqz4nZbB>+R|$0E z%(maRH@Sqb5AqOV`3pf$OPC-N9^11Q;V7$96$#~LF#1AiQRr<{U%kL+Sht$662ReJ!xi~R%FqLm5yZ52^ z?L=TRLY(*q7G`{5`F}ggIsQM>ns9P3vHYKo@~t?NcH5r1GOiU+I_VOz-vK`i0A(91 z9GGL^GW+a7df?k#f+z`Z#U;wD>|14{k)YQqO)g}&*J$KQWe5go{|KJyM~PzISUs7j z3H1FtKktuqm>~8n{((Vw{~WT>ssDQU?6v!MYd@&7^J=os?VhtAy z%xQ*V_z?MXr}yi1HL~~H;eC*Q`|{{-2Lru^An9@iLilXYNh|vKI3xLb^Iq3B)4Tcg zf{G+L%IM$OK9I?a5|?1Z`L>Vn_al5AJ6Nj0fPcP7`VLi7WojMbmMlayM=l0L< z<8Fu3yjU0kC$nAu>;5Hq7|U-zx}}vrH-n<4n;o->{BP_A%8bb^B%OfZI7;Y~CLxJ+ zP8%K7W5Q%8QNkQhr;C-Dd+BQUSx$$E!AwfgSNj+}_I}(rr_Yd8lwt}o z6Te6Zi@+RiX_SLl9=toi#pZB6kK%GcRbPz{J?2Qc>RRcAFuHa$>FN-TAPRljH1EaO!(RGu?>m zhq+_Ti&ue zv3NI~Uq^!`0$ZX56F3pt;zRt_iJ&k`JeL+76x8a&92{8MN=S;rVD-%&t(5H(P8<8D z%rNTH+WU2X&ONmi8w}OB$3l3*GVDY-{{~a|7jUi#f{aZp-oooa4QiGt!R}`N7qt+b zUJ10B2p(>19dq2b9ps5WYiYBGI^MG|7HS@s?IVIeMK1_cu>U6dn&--JHPV1OdyV?t z*?384Rlymy5a3Z4-cfI(v<-g_-($p*d~d%i1}DQ(HWpfdc6p;z#fA_IKSgcp1*F%h#$FPy6uo-TvE1)g*e zz)Y{Q*;ihTX1yTTc1m@@>(hDbfsE82^kYwsbF9R^sEn?&Y_*c-#)(UHhBJ}Av?jtx zJG^c#M{+0lUsJ$^pKw@MX%}{Jr{hT@;BmzZBh63h*| zM#CjDits^dn~$zZiVAO(C<0(MGO-2xzXBoWE3VzN@1X1TZH^DSt{v6CDfeJN4IK<7 zI1MuH%ZZuW?2Y!BTQsb43`P3zgS5YwoHmG+aMfxxLnV`+%WG_KY^M~-3kWcM+~4B? z@UNfT{PEq>r^>vf%s}uJd@PnLe)ko{E{{NucrH|5`#S3{HX)iwQogy2i(l+hfHAGz z--g01p4P4k@UyhA78A#K5_Luh?vW;SSvMYJAL0*nJwC|}xxp?jn>l)K%DHV{yh!Kl zK>+vBn_H4sfrbEV8lhM@G^~9q|AoDArx1Q7xAZUh8^5l2TYpNI`f9Fo z@;JWRM=v(<|Bk7kV1+~`h)h2ch}Gc6))EQq6gFIYcoG#}o0mOtxLzN;k@M${^4*~b zE3l_&#u&0KRZA4r-q)5X60P-nnFr%y^W^@tY}Do;s&^p632_YC}oV(7XsHwh?*FZRKONuH{}psMt(F*FDT zy}4Oa8X@;4=_y{c{RxuaK4_Hy#B5>DMq!M4XmZGW8Fk9xq1?8c+k2*p=P5*zvfe#* zx=RtviM{b{Cme~8&n3d#%QPkjdSwTSOo z4Su^}Y4%q8^YrufTgI*Jxs?$jy_LP0=9&8$C7uHc-=a+chhZxPeU-#L!r6WKm&yFC> zqBuvkK6U&7DcZ50#f5#)G6|@|%L=T=*Z@Ly1f*2C z2-B1)k*II0s}}n-)7E?5uWant`*-4mM}&Vd4)#gdq*|Rh_-QEyAp`LFZwHJHmA_MK z5ZVfAJz|QmnATuNtH{qVjzz&=wHQxg3a(a|koI}u(>or3n~$R`1iuHiNh)8Ul2;Y0 zo9n;Y_8}TwjT81R#izur;N1|ColGhLs5pEA9*uZxTE!61ge`1L8fGCVdz>VV;)WLc zW=Ro^0e21tA$QQLvzOT-gDikX%7~`dATOB-W>I2TuAtH@EwW?~&kV}629#V^mw?n) z=u8CUEMRyYX8;S-J$%p)qo>UXcfsve?i4>RZqtVi7kg?mIeD2Vp zxa}bo6R=3o!tvi?(7)?hr&z+sI#bJAKrL6YKu}X9ofIE0WZPs~xw@~Ixx=9Not!55 zmlHS8(Xipe&B%lU$%Y++!gRIRU=df>>m!*8Z`Z`>FG9k&oTreHOUX;-pZ)K5@1H1k+DG}AP@;(BE0EqL`C zs@!hwg|q6vjx_#8sj^OiQ%8U$yQvhh-jJM6cs%y`FQlxF|Ynu~uF` z(@t83&N%(MhTU|lwOpY`4PEirY8@%rhK@X=65i8Y4bMhY*=JAkfjC5|RXDK}EuKxP zDOU~DVN4J-S1b_auvu-I;4^-j1tnuz(!WhABkS#oW;HKrNVAY7A0<%@Zwn-LN1m$m zK*7$tEK23-0c{Hy)~^y!5D+JEaeBU*F^A1#r-P~nMP$rRag%C9v>~QJa|Z> zZKOgusVTzW&c)Fkgf`Q>q_!9l$j7-g?{^$b?p@H5>G3<~l6dhe+0Lf^+=A>d6Vkn)%-@ZuB@cD~xI_vMjXykqzU-!{q_v_VOWaFmz zd9WFky5a|{Zg7bJH-Onid>C>8`@q2{0|gh?ZH=kM$P9~QAtU(rri=;7(>G0bCEjGM zkO&>zF=c)E=OaM7aS;dGCA{zB!tsc$5k^)vVd2KXfIWEl zmr5g)MPFs=fLyLA@u?L!)i2!?II1U*qk{|E#-L@F#`NVQ6K&&%aik4C%4k~z*=2r@ ze7?d+%ezdHsbgKSC-$4^8yq+=<``K@xUQ*p(e?BXMe+8xzsQG1o`lW}txwUWwpRD)%)lO5($!E`6%7cy;we9D5>!oQ_ZL589&JE<8iCFewTGmp1jOxN(fgJN$-@#Ne=QF{L&awR?1OKa(az++@++Ok zm=I57FLS~~K}ju>YNWMUJ~#Gv}u$|EP<@Q1QYqYyY= z`(d)|2qp#mvJUp>Im<|q5YJAE&2*ucV3{oBuR=6OD3Yy~mCQEEZsl0-FW~srCoiF7 zP1X&=99oQ3>4(rvO98;%e|_30A~YD{f#pje0=_-kLMUYKEyo_)&RZS@Z9Put2Hl44 zbEZL@L3(iTr=|75dT_L-r3NIPT0)F-NM4a{v(he5|6Mc(>lLxiN;d}+F7TX|{t3|g z=k`bQTI{tLSI*NeKjZFZI$!{7xKbpR0X>vK*8?s*B?H4i)pa*=-be8a!E2m#!4s_e zF!PKl{y5XRw}6m{y0$#sL9#ojOdUlLWvm6afM_I+Z|*TT2bm4fxC+`n zW_quuO+$c;blyIKgQCx?#&*BZ~qIm{g+?q#%+;4ip^7@y;=Fe8G= zz>KnC9pbB=4VvXKT7?{-XEE+f!Kn9OL(S!@0*av&C6>#IV;bbOGi!_#a6GU=okAE` zE?J%+_Bt^4BO8^JkFr4+I_g0-`_dYRPl{@~x3x=^9!du)K$=_r@+yV zCn^PRwgcP1e~v(cFx%Y{EF8bYQNIH??p!x8zL+j=!p{)?Q;eSYOZ$vA^Y?tWZwIz! zkmwll>#c2Y%Zn1oxa0r~ejiFHbB98wpi;x|aw()rIU7*+C>g2_sHy~)PdSd3GQSaB z@0Xu5)50dFq z_!rdeXR`3JuT|zWn2GQDy44=SSO--z5nG~Vd_U{Y3#$mqb1B(Odr=lCnhTFOI`)=l zkHh04*88f+uY7U45Kzh?Gjb!J)m{XAm%=c>)hXsZ_koB)krcszgm-fh9(%?)XC#>4hZMn1oWGF1oU$45F{Gp5yRt>J^$vH8{YH0FE!FaD zg*v}Nx`7(+6-yLbQ@gFsN=xfbSKf1KMGJWc+H=`~rR}9f6#2!}ES6HcquX}}I`{nn zlh?!c6#A06-nvi)ANIP<3LzpX44bjiIC>1N&XUxLRJgqQbU3>2bdX042_;`?`hRqQ zoS7={uH$K5KhF}ad!B*MJ#HvCVz7$p=ZCUxj~g?5Qe%n`}c15 zh2Gt!3bwBMPy}2Yy?5gQ9K|tYz=NW@pDJZzEp>_^qaXo}?CIGVkm?MiWaJotmh*ZV zK8mGIL@A(54f~KT(Kl1}v##xKrP^y^<@rjs-S3)u)yH3@AF8o3wYrn@$|Xv2RoI1U zE>#);#k{Hz(V7Hx*hH=VI#kZzmJT?cRAKcxItv}eYBqG0rAj0k0*;~kOd-n(crq6X z*~{2kc!t>}9LpmyjpzL>9RDbYF3H8C*0aN!Q#UY5Ep}`wtp$8!r*P$UntwcbwYaau ze>(89rhhKIwWCPNHo0EPs=t@|`k%q8(5<$m!g@O(YE4M?t08}i2)QdEf7Tkin*kd5 z|BPQ|0^PvDi86+cG0q8`>_B6y5UR$l)l~a1o@UcAIkx_cC3R9E{5vuly zY*-yvp>|6eqsq2qz z2t$ZUsL^9w)~_Sbb2oZS3mboG`wUoyU&z{ty)7bw{IE5Xu@3!;1qZayf(EagjvfV4 zU;x+=Ea#22M6-#_0URn;xQ1Gyb$~yO@F`IkuVX;J?us-}tIw`;=CM$4eimii=~!;4 zp8h^>m0{_GY@}Vb72zu}u}YSzJ6I?0qSk6B1gFt~z%-9OKP=%him_5eiH_Rt0CrjW z4n(S_Uq=fUvYI0H<#d4OGMlQnoG4Qc+P}^!%j=$sZZ&_@2xpIq`AR1gUsIA^9C|9T zj|z2tr;_1kKaZZ$NBx3MUq*`sRfag-j;yI^Z#C`i)ltQm(sUA}XJzi4*0NEtxDG&b zUJ#G=+4R4hWe&&$4$0cK=g6*s$76V7jr<@ZUel964pA!$kTKl&p-&A`aL%C3Es0=4 z_Eh`Ad&HptN3V>=KphKPlwD^58u|D$p+lnQKFfWS?r}2rJ>KA`WieuTPOId#3z?Lv z)NtI;LmtcJg+c_1HuzWH{ghV)@={UeUzrFJGU2G=g{kU4&=c8#7qYN!d_3q(Vc3=P z$v9G%O@tlST{UWhPp?Gw?_0D2WXvGgNN75A;dywDA6KfL##WolH!cZnEk$RCg!1}g zJ2M z4x^oqbyoJJt!r%OuBhX!K&pGxoORXsf4v(+NmY#X%A$N0M%S&NJNgF&tM5LUh&SFU z+3ycu8*5{swFA%VrFs@~^ATH&XgK*bOPoX%4SBUjq5A$xc8T)UI>%H2NA4SduR3RR zPex78nZIWbJLjY*z*saZp`WrR5-eXJYL(g1AkFR0+52mIY6mN&8M7KR|+K#sw*Q(4DeS~IOOkJ!& zFCgHfBNlVv-hFcY{@r*VOyZpDdaIu#(`n`XoRk zkdT$}`&3nEX|yrssHBD+;RwI}2vl#eo8ewZH|RCLfF4@cM9uA0b%b>=M7pzduU`no ziw?A!rEWRG+EVqCS2u@=w}SD4Cf-WzG%9dMakyJNP~JUvM=h9l>Q#2Qv5sIShL}(Q z$!~*kUNFZ_srMI==mbxqcB9;3Yc*Os|HV-A8$i%CP0ntHhuL=O8#6qK8%=UD+TW7}UB)~0^CzfuWSD5-pvl3y5JV;X1U;Q z)#8AbyiU1ub;Dja-eeB0d;jg`l{!dQDr3Qb!YtG>pI6$EjChGujCI^tXy4hSn@Vao?VNbZ{^kp) zpyfDGj|N9m47g^E83_D>Pa4+@aVbP4JG!5v5qbc8yc|@5b;v*_iE4hnb%@#^`Q05` zuauf3>Vx<4Y`98?m-wmacal7gj2AW+ow=e=t`)j!b}$VN{4NqA;_$t;LEe{(xqG)P zjTb^sRqI&9RG@asiW7n zLCX2tDlWTPTsH{@9!%H}Yi!QF44grK3ICl+Vbrb$%Ll9ezBG?sXkGEO6K5sB5qjf- zrS`+xg?HIcXM}w{Ki`qyyNjw~ZWdT-jmzVw{!G*9{sHg`H90sLHnx;GJ$^9Cw591> zh0_E|r&;?nQ0;XLr^LfpRo@a@?Xm_1%@7rbCsKX=QvF3>S>dS3=D4LqQ3l~LL)4RK z9{V+VUwx3tJ@eLE+?XcyKX`uGelq>EH?o4`<751PE|KP9W&Ynizf-vzab#_YVb>Sb zcV3_iWWkbs8bS*THP(1wA0SQE^qBPE%RPeiFnRlwO&w*(lMN6S01BGqaIQodzj38B zr`PM*aDlIq-TZOQ)cM=XwvAr95f6-N!MB}dFW-b%O`N)|+jsw+uP>reLHmClnyIe! z3}s4rA5}Xql*ztqQ3#Ix9XgL~`SEXi&-(WMUzu_G|E`~o(l_$+KMV(MCj{*PtyB0W z@hD9K|MBl)$?Bg8#_NAQr=>nIl$;{_e%$Gg>a+3V%Eo_hC1m4;tv^dzC}ic;77oBC zfU%0Sc;kvmc-;U>^&U1woEb#Iou%xgA{4~sC$W}?(K4sNrKsxTuYSmf7uOVnV7Rq> zhOx)%vbx#rp+=`<6DXdx3Hl%u{T$Iy@Kxu2!f@<;h3 z&&4;pJS|(lQT-9AcFR(?*7M^iRp|Ffix72`g@nzQNmEhF@8>E4-&dBm{a9p|MyWZN z_hifSe{g10%T|EXZ$=2H+?7A&F_C6&_fGDQ^H&^I;aP4!Vma~{P_R5gI5_hK)jI(R zxRwtOvpg0f?xYm!u3G+?F=&%k1nJF{Jm{pB>CI32%}*sQ&zC!eU)O}qPiofodYqll zilx;jL63v8o|jEHc2~`CUL0nRtL(2WCD^JC(tViMXuB|-75~}k>#OqwQjY!(TWe~;xl3^FOS8C zn+LD9Ce=qX>ep>-!`!TtkB7Ks+wYc2aOXwW@d+>a>S~!`^Ghp z9GX%ct1V`0uipZP_+tG*r7I(aX|GR&?+Qat=^Ja_R`u;tSt>p~+gXD3I`#6P5_PAZw z{TNR#>M@*})8a@eUccgd$x1`8vTKujjy1#-?k7K!abcV6ZyTHRgFHEkgDzOBLR5qn zH`lT9W!}XhCSAcbpNdSJZ}0cc^%sk3OQD=o;a9EQ`8Z>EdtjX$>Gp2$axiinGcwfm z_C!*!e+S;m2<{POFKWCm&G;jlz|)q17@Dp8P$8vJ+vHLh;GR1FPkG~%v_K;FWV%3d z7T>iVN#U}tw(%706S>V`Isof@xhFkuK*9a~q=SVCI5`m+FPr?HgE*xjxY8haqzskT z-aLL{Y3$r<8ul;6q(g1;6T(>Y((h+!`aqsgWPCzmHk^g-SnMm%la0n21v}Is!rO(^ zu8ME)*_Mj3>KL7aA|Kh_VGRH6aCl}r#4a7U`?k*XcN+(uB%_Xo=wdhgLpA zb~s^C$7C)Rt7{@3J#D>o;+2dG8S_&4&tf`xp0i8ETPW#pfp;i>R$Hf5q@DOXhr(Fs z>GFkNevCl;+!0=9&UfzOq#5_J?rXnaOg?*|2pI>Kn(e&cai)=ku)p$n9)8+kB6wfl9ix$6whNSxk;2hfh#;%JA7X zP4mwXY`;9(zA`HHWdEx?5f?wa&yo^ge$;FXyj5&B%}X-ryR*u~>-{JwljzTIN~@s9 zMWC41e-r0>*1+2G2LHD-YPg_6N25*T?{jmO81waS&^d; zXMHfx&xYgRSTk)b$KKBw^|UhUwWHv3_t7>y zNz2!lNupHB%ky5+_yxIlgwp!SWF)&vMxNs4r8&_FjblE=5W;%8wL^<@YZo<5S=CZm zS~}-7H_bW136ZDAt3vZMKu!)?aDBwoai2}Yw!{%qCBUy|Je5vi``G1IpyEjZ+YyK= zmS%gcnl2uWYn)WJ4xT2jvdQ!Y$QA<&QWK!LvY^~~KYNlmijF0{1~L^(bF6lGD^|IL zdejHu9z$_@6Q2gFK9_n?eumQ#vRy$(0*H1pkTr~08oOURkL76dwM~cS}uTe;k+<$S zYpha;;$`r>y2v~gI$IS;fxoO#YAd(*9SLqAyIWsB@*PxxR4C9J^;J*d^iBK{UGt6V;UdQrI3+2y07r zSQB!)-L*}yyf}j4e(O0I@TQg5;$3;x8ga0SIPDW`?@7LS*0&b7tf9R4FUGzpI6Wd>G8#A$O+qP}nwmHGXwr~Dtowe?|csLK$yLMIgu726odslV;su>5g z>7=e(k($D#6eX)>W2YfE<#c+8LPd=SSozQd&R{9q{F`v7+3%pKxzo*fokDSQNibmz zR`-|?G7ITFVS*1n|JSvAp4Fu-5$g%RdClr1}qKFNvPi$)nS!;FK_w7VtPzzDd}HxzI9_sUFBuk5)?Vjmd#Q4twhi{%J3Fdr+YubdwRLTo|r$p zW;{%o-Wsv*MgO40)5srCP;TSyBzBg^RMtYrY`FLG zv>(n*cty0A4&;rd+m>!d@WYDVZCNZXsVJYqk^|J@uaJWam$TJUav zp{DAQt2Gw;n%8Ng%Q{kp?5bGMO(-ut$1|PH(X$uX8fzkIIq>D?VC3@bRyC--$5y$> ziNhm!Q@xxoih3DQSCp2YY>ta|3&d2P{q%w-8#&$^5`)PDC#pbwludU1NPRFojxyba zG|phrF@*NsjK}2Bs}*YUuGBM?w$>itEC6(&BQqiqi!Vy%4Etg+JmtyjkMJrEWe_F! z97JJaj1Pi-8b4$P-sZ-8n11i>qix0c!U`8y+jY}dO>@!pOmdruKQO$PMGJr*;ppaQ z*Y~2Pqpfn-qYYr63!-W0?D?B-KdfO?K8a&?y7ex?rI-Y@4dRfA!*=Lw;^^tJE6NY4 zWwMFXo#8^ys*qrsLaJvG&{CYF?yM^%EOAGWZFa;gyW{R1j}L~qm-G{BbaII+NeRi_ zGF6EgEiID3cAQf0aiO*%8b{^~CTTD60sXhgA(u&KlSo5))_iAxupv^r5v!W)>jk?P zo(lQ+h_aY+v=-+QW>V2@u9u}6kn1OR@gp=w!GnW5xR3M0pE*h3V2mQ=)(!6FKaB}N z9KA=HIedg1OKysaAWJ#Ca`4c)7x?QCdz*CL5ZXHB4>`}s4B^XE&pHmgE>-T(&n*={ zyIGZBRI>4*(Noh%jU*R=Yt+mS!0Z%SLALS|h6^?Cr-2AD@mPO~Na#je1F|v)|&zl}aJ&pQ>;H z)`bO5N?vnGU4H}VBdX6yIzV_s54&j0EKaTNo%Ggy74wfSwDdfHP9yRl4Q4%JKgIQ$ z2U*g|UM<<+RU`7&?>DMENk=|{&PJPfovC6xH;h8k$DX{Htx1ELN04;#W}jAz7SN4j zbQXo{uIeIishfG7ft*8iBS^)0tB$x#m>FX z>D*N!;w0C*Tz-__>C}8??eVM4Pq>0U z-;Pmn+ZXR=B(fUjsCM9pze!73DxOAjALq#SN=#0)`Q^bmvru_c@k zCt?@=Wl#8fnmC-SWi9{adMJSl+>>Acau}1CAB?Karp2w~Zp4BL3i7JtlX^&rCQ09l z?%%T_{ySUi#7!v|{+InUhcleC%UU2{%UFtwZ^w#;@9YSrjn|GS$b=422SA5afTRg| z#vAtIBoI4C?V@~m+p9WceoFuN@Mz%oknlM8g$R1qF;cRk)WuTXjSj-0xcB>Gh1rbg z^%GC|`TCP}%ubj@`IS}kjN-eIPI5s9nbw>j3CqQg(3W7GE1A<&^2Z3mIihrE%us^H*d@>7-#j#yy&2bcvA}jK{;agDe_*YJYe3M#qt5xZf)vjb;=sH<} z@EKzffsk_@CY$>ej1RF3>Wb*qkJv&pP#^5K^ekI}fHBg-159@|mn?c>U1%omNVVAZ z8!R_lH1){sGsv#U2$}pIB_arbdq0US+Z;?jibd5#O>$IFoZCnlu>Llk?GJIHghJ-S zy~R%~S1Rc{Q>FqIB7_V<7Sx?zdu9Tr&;gZWW}rIg096_`^Ey{I?p}b#Z)J&cV(x7( z2+2ZLTK3B+3Q^D1QDtKH2(bBOu=w#~>(wHQdK{uN>Zk!rOI}wj(P4xA^1u zMAZi69zE0GyRKds9>P6()-%mLy1Ol;yZcH$-kg$zd`fP~RVb=}d<_hmfP70ZY;MV} z&9}^@z=X^_eA*Vn-F?Uw>G(uv;g5*Cfxa8GJB^Euf3~*|RF}b+V0(fp|DQ1ur%N4s zloKlq3TfoBQ_XwF%XkN^5grneBHWIt1RmmWoz>)Rgq-18_5Sxp8-t?)&HJ7>7?bh` z<1Md=;p4?6!gL2BZA|C~4=injtYy?)IOL}Hb5BIyC^=2nW!tQjTl@8@?8X^+H!hvJ zC@cIXx{`(bPk2Jx>)S>KA1t%2PIo4Sq6+OKtP(7D8b)JAhlToRoq}C@bq=??Kb2aS zFJwkra%VVa&YH9n3c;~25iY~;G8GhKugjE!PrMG!DiAS{s`6JCT?YMR_QfY z2nSir|0P(ZFa>53A$T19SDWoD(D?^);sJjC7TvxVeQC6)S$)Q{etsfa{1%l!tm{6_HFrlo^2%=q+o$Ow@GOh3MX8s<;6Sq|r|0`i@9^X#PqPdmc8Hlf~OyWmO zlMrh$?!>ajTZwXoP3xp|%lDWuma&)($<6DnYrtnwpNZjh6~g{+2iBFJ+sKj_z++Sn z>uR*}4K;B}c7ek5UCvDD#Fm$CvXS?zAO66uGWEn(fVwVAz?55bx4af##gy9?XmSB$ zS(pvnGbzjRF{K&MSFG$8x=Rb@VRG&74{k~o6I-RB2Z^+R5Y1ymOTjt~vEfiUPk(l0 z+<(_koKRsvh}H-hn+`_CYjYe)g&ZAy$kx``eF;wC-daVVTR8Ez)xV&#EQM}fJW+Pz zI{yI=|I7cw%wS&zs3ylj4%sx`-(Q^zslLjD)rc9P1j#&DNH>{uuqz$OFpYL9?(BJk z+NPW-IS$b?@Y*L{RJA)bPiyC?3^Eu>1)ndu2p1PZ;Y)lm?5~em@YuRDKvKWGo|iRe zA%vn(9AG0Ga?bqWH!~XQ3Rjos4tK-b|2{1*+Gw=C|KbA1=WWKm=(8u06kF||L%wP&U z8sH^!=nQg&BCo9PqSezl-cGAAo*P&Dc9Cj;QLX3Sxf^iT9oI>8JOq~-g%f|X>1aKF zer-KVeTI4#*+9FoN82QV4H7LvTko3VFa;Js3*ZUq`AOqzg1XnyA~T840(N5u2z_Od z8j{M2Y6Pf#jFselO<*1&)S>u*K3tm#CT4>G2p8^ehSqqjp2Zl)pP%4ztp34PJ~@j- zI+-E%X9Pq&LJ*g6M2LTqKW!v@pNW{;t~QXR^{+Wu>)A0pC;L6Fkp3|=smU>_Asj11 zABPM$Gq=pD(Tn};d@w$`C&v7&)D2xbM&HO;FKN5T^ z+TV++aiZ%BVi&1J8NE_?PC)8a2>qg{^c8w$Q1vxq5LF~t|0LUrW4&?|X+f>Q!h$Ko zm$`-|vricHBA1V(Kq5aCsoz?4Qq+%LnHkH*r!xZ@9J09Vzc^fyM%y;_362C77uNIM zr%HduAo08JD4lM0T%G)osi_g9FAA4sc(x$=>!$8ij=Z%4t(RO?0@oz@f@LkogsPEc z1lYs4{%Pb}(*D?&a+o)`N5|8mh7Desp`-ZO%}JW|#?0%I@nx_XtyXC<_bT>W4~(#i z{8MzG94bd#qL3a?rv6`@LTsflWCvxru%E&;cia|mgp=L5Y%Itrv@m0oN$Vxm{U zL2*VbS6VK;!zx04AHe;Phw#gSjA6j0y|S(rH3e1u1WgT6^F+#qeo>xa9MfzoV&dA- z@nll0J|ZngX?Y`L;@b4}C*SzOESvvR+p$36rRCw>uLslso}A$~USsiZuS>?0_s)d7 z3r6zxqkfzk@aktXu*7BnL1q#4$6)(lR<&(Sr+ zorR)V>dAJHL`2|FlOZa8oQmL5IEFh4aAKa9qcG;9lNgD(_0Q&}LpGxZ%n}T=SuVq_ z!LDV+5+u`)B1KG(%8fd5N5+}Zej8?~ADI6(z7~F7Te-lhk8HV$m>!kRYa!-*inWX4 zDCAs=<_O>>;hDE~)M^hn52ay3Id;S*qrnQ8s2Yv_kAL-sS%Yo+k~t##8*H=Hc`@TM z!@v9tsyuRC<8L`oisXZkq{eKTiGrXtyZbCh4YGtA0qezGse+5q>SL-vZk)y%BnbLOjdX$Djk)*4i{}8B zrtFki=%VsO6lkS+CoD_L3@3akw0r#sCLG#GPffmM&vpJ~^8|pHvXl-=&ulU3>Fi_N zkHUmlUI9F^Ip1Y5F|-GvOE8{DR_J2fms<7u;%UR3bnd=e`$Jn4YTz%}3e21Y_HY|1 zy}^jOmA$KcLRfeOBluiST5VEUIxoVkj&Duq{CPv|Rv~^{+&KilW9yQBw4Ko!>JoSxlksm!r_CNf)pf#jQ?ediC^PBc z1$pp^{hZ0hcAcgtklK4Ry8nd0Cmt+@b)EM8tzzEGWn@eHJeiN-X}X5v8SN*x%Q7(z zPuW{sf9_dJC%qD2LbjvcbGFOkBXZ4^tS5tQeL)3DrCo~bx-|#bbr(nW1qtp3qy5zg zCS#{Y*gKMI(wi8<3t~oS8u8G*+Goc8aL4p|w-iVRDLbK1SZGC_zF@82? z+;DNTG39yS%`iRGiI*n&fEo@!*Qs{fG{@(LPrc3aWd@dtQ!Tb#=y%w=M(WZxpi&y# zu6peNa{m1~P*yq?-!7)$+H|aYhspJ_g{pBleM?nS@67Fd@Enz<(^cPg=Ob5tuSZ2o zUA1Z_yQg!cY`)x;NNDC_$$?8-&Rsj2^rSN8LA7xHXIS)sG(}0A?cQ+pF6PW?a}}M& z7@e16O6B@IwalJ;QKk9 z9@z=|bh{A$?i1MXC3m^NYdH*wZ{e2g<3EF!%+*f)`R6{d{$)ulA0EF*26kP*v4j@S zKx%7d$0NiC9iln+p~HN<07RNs9=`;~iNNydyg%SuB#$zZp~F=0-t_RMK=$8Jy|y*$L;{a%$#L^Qh; zI`kHY-oTSy;oejX3di~oK!zafp8ARpqY+cyN$iuM|$mK;M!6Hw5GPds@3kUhZ{ooAV zURoA>6H}8Boy^iEGe`S7pfMGO&hm%aLe5pY5fkMECXC8&A zT>G)V9PRk5KMwBr@P52dZhC+8{OHGQM9SbW1vh<@CWW*im!$mX^JOu?@BQ^~|9)|Q z#PVA|5ox1EPmUtOs+l!!VWVY7&S&nq{LAd^v4>Ka1`2$=x46aTYx6VzX6k@eOe11W zbD=tO0t2Yab97E1ysdkOQ2{f{!&u$Q4b{1DAY>Ns60SOomW${@N8AigV)=V8DYjbV z5S+WjsK>UO9cvkW8Jl2klkA@s-hQuph>P|&VlAyMBt$_+qK!`%Y2>n-g=*U_b?lXJ zcE&iXEBq%Cb4U=Efk~_77Y~9kO6S$IV{rwImGp4#RxUOj1^jj%XeYh2!Pg_bN6%K| zMu#`T(1TvK8_hBZ{KWe@!ZKAsR8mAHF%jT#kTvX4enCs50)rB%Y}Nfzxt4H8{_aAU3dL1&0EbIPSn|+- zEk4!AP-;Hst8Sn(rj-^*=}JxOWwkMy0Ef?Vs7r5Xverjy6mmAndj@~6Yp_G9JFkO; z1_LKp&?mUYM(7GD29QbU!C=-$U^}QdIku5P2(T`C=8Fw$=$Z@vn@I zdW5W>sFl#vX(CZfoQ+e5#jK0bw1kCX=Ar&+6K33!v1RnQZH@B0Gp1f1-NpMiPiiD? z*3#3ESkcF>+LFc&@td6HN5v{B18pZ2tGcM1cqak-w(h)$6LBn@bEuig?uf2bwYvqK z6^-2N=ZB_wBI3?LSV59Zt9}uU8FoKtoFVT-hH%TU)?#6kZ3LQH1a+5M9Nl#BFSUoO zM&(8?tvd3h)U+8QaGP*V@(h=CWFDpx8r#U!dXKHDfdf(boWWm> zyn2JlRHnBygZ#w4x)b2m%B+`>&Ok++z=!Jw>?RqnT)gFrXe~9dt9_cka*#RE6-w5& zM%G!R;9uRiIN=Nv{WLplGY|2UYWSd z{SV9ZCqK12sbF5SN9yAMNJ6jaetf8umrdTe355zr>u`mSgTV4&tCK(?rA<$vHa8O+ zXLXGXej*RHm29-JJBORl`1Eu9&-V5y{Xf$mpdrt5bZ_KQTBT zh&+#_!c9sV2&F&u5{s7poJC#2DV$h*AdlC{&V=aYNz4h?Ll+&{pIJI`r`)iq1p?`d{DRHfg?L;RZ9(h))U-p&Yz!VRB~mW3a#2?hTCp`{JetkPlSBUH ziQYs1bM`Mi{$#j5Q&fygJisfmG-PTQdzs3txLWk-G={WWVH*iUwO+v-_6~oh`hlK| zHH&|RFg5}yt7yi#Jy>obMN4Pdjby{Ci=o9RK}%=XrSHhH!ph~ZyUlfFO_)#A7_QV7;n|s{)zDpi$s6^OdJW9=4#`$ClZoB&>+I2{)u46NAd1O_`5MczlM#`(w;DP}D ze7ooC#eDl;PlFS0WhDk7CV%5pNGg+bV>t{?L9X~mYnFF_ zWrxq(LKvH^=$BlrB2O&*ru{cWBK;d2X?ZFY1zqMyZ^aQV$s@Zed5DJNyY}{}vc=mu zhljHB3h>lIZvy$fk*8`^4`W}8NT>9 zfE~%no|gwkMk|q0!82RS>`%+(YZOr{Xg9j0PPu$!4l6>0%Q#78m@j1I*3FOlZ~Ve> zPW;7fR%y|wV2sME)CHz)thSvA; zBPR@mVBQ1*I4ZIJs8zswv$Y!;a?yqIVh~0NlRKKR%RZ~%Ho@)VuaANKV+tx03@k@o z9;Gv19}FHO7+s`!=m!L$Y3B}c5kB+mBZNW)N@fV6K*eCUf;S&1r?LcR>`vM_XT|-# zD;CC}$a!Wj%X$JuYz0^h4RJJ@FXbP-H9=KDYj?>X==N%V-vpY*?dLk2R7XQ(Km_V& zM5-zwjT&l2K}3L{0(ZwW)b%TxHExb7QYAOXh23)Q{7!5UeN%+~k}O-bnWiRn*Z+`& zdb1eoHa>-2*M5i$Sb<+?>$dI(P!8?vwd8n9j1ccpd>sh1lRbtw&X=LH3lEfube_rh zp#b{VKX(kB1tK!Q1Ujg#Iwxkprv@JdVsg?Tl;k-2!gU*)#jMWW=JaQ6#zlN(1-;JA z#Vf5Vv)8aMlBQn*6RFvuTq@4%t5;DH7v3e!mMvukt->{buzDXmt{&t}+K5}bNALtM z)Bf>}PG_;HfRGvAp1UzSHE3;TU2-SfOX3quChAk12b?jfN=^;izo!mQGfMDE2>RFSHBn zlPjFm!>K;qIhqWapIZ%we9|)&KYOzMo{}D9x};|v+^MZ*K08$1lV+P%&S1-qbX`~j z?r#e-rj88UAWW4ego0t|aKeQsas%pOB@-P}=#0Sto$#8NfUse+6!dh9j&Bv2+-DS( zF2DooqVhP%zr-C0X&8|@ydKSY~8V{ zBg|j!sxm=LdL4r+GB%2k1eFL9`0>0Jd&ywBvQplcyg$swFL6*Yy66m%0NZt6L1l&{ zbC1J$$$I;^f(#P!9MgI`*{OE>k152$LLQ>>!-*q3{8o;hc(yUVsr*_y9g6s&L}i6B zk|#x2_sr(w@wucOK&P60cyK{9BkjjYYOck?93@Q4^ZfEl*9wZ2m25KlY%8DLT^E zi>$x!6j)~J6sF{*mPU}GakYcl?#REX%65}v!KxqU9*HJEGl2{J31UUQN3;D_#ghm* zkQbBTzR>X*?-IS_AY()tvL>vkJ3)M8SLSHFs58CG>-*dd^%|aZ_el(UuNN7#F!2m$ zgc>WnyzH|cjmRStZaA)n4}nZ4<}pq-yVLJ|xd`fPj5a#h6>)AwJ|I0F%rEzc`aO&C z#v**Z^2P$)B+J}!)^vwwX1}0xfR33H!~uN{lbXBiqd?=-z41c_^RgWjJAiDefMtl2i(?xnp8f)x>z*8 zj-Yu4!8c>Tsr`D<*3|?9fS9CnvCZa~V&^#<~kDGTw zsrYpvF}7i22%CeMutpo)_9D|bkB;BK8xQY;u;5}vg&#=nMh@RNL_^_Dufn34ohyg2 zjQ1gypUH5SQ>H9{_I6)KqdSB0RFw&lM(J35zl}7GND#9yn;}fx3*+Iv5Q@hH2ux(D zy;qgopn%(e(|2}1Uu;^*U-)a1XolxT8L-?TrWFR%Q{{$pQ?Ej;Sx4_MtE4Y*puAvO z=bOof5nk&Bbwd$gmHn7+2N89m;lvY7A^H(nN9$5k=@YysL92#lcAU*rg!m|_M%mjtBCLhf4Hbly%{ z@AKlIoBCWr!If;A!v1q9 zTp#*zrWe9!UK!OcefmPIB-EZt%?r|XRf#NcRiq6+_r`Z&H0wb!jC%aRX184MBozBL z=fQ05mR>*4FXBF5>_zA96PN>Y|Cy{Vp8J$@jqSHh^cMiurFY5>)`bP(T<3;Y0zUYGbcKC{_uP3 zd)@0_U|mF_?*B1k4%U?;;z8xUH5n7R{dNrRe$|OL=W%oqxy=)t zBX+-Cbl@p=l{G@(KGTTPWwuV(Dn$u{2hg;2<)s-C1=%bq7=NZHiK=(3XqWLPNx@s+*Y~ImgUWT z;(H}+Gy9hN@ZWd8W42kG+{IHR5xbDr(eJZ;5RbjO z}`cQp5 z?#S=A_K+n!-VyAj61P0!zRT3Js@}BFv-#ni-J}Sc+)mSZy_cZ$9f5t}TQ2^Cmpm$l zPxiJ0Jv<4~i4jYV5?zcP!dJ4~g5{Rjv2Vq-PjRP7!G%}D!+743vwvMXSM zt*zzC&gQjkfK{~&&8NvR=NA)xH=tVA(9a9jehYsU#NA{3I8J$9tIVmthUt+=_N6aM#{e@Y{4f~jJ(du@w z5g*iNk9sspBh-mio7gdD4`*CL)pwD=e(;<*r8(F{~g%Kxmc>&c!^;+h; zCC!&N@)EhX`>@;F&t|`%f1b86;XIvTy?;?_SMw7lTc_!s7( zFlIS*Eo(Us|2;J%tEuO@P2HQEe9vGzfe&sLusWvN1zGkYl|Bz8VEVcQOOBryz1kB8qKt(#-=~`h1{~3r}h7dpK<=r;%96etQ`MW{Opf$Ta{N$&FTzv zC~0^hg8+*Drt_48Kh!NKUm7f!i|^!%&#rH~qN2*iZ#6elUyBqCEi7G81?i1pgYo}@ z1s9l5fX_I%|xWjOw!oh*-eoe43FFw%*glZ_`2b$>8;Ha~)u zIdU7vEUwWyP;5*=Q3yRMav9Cd9yH3vZS~~He{p}<1AMl^2nCd2z>g48sL1msR|DCyH8{1T zw>9H)jOpKQ`MIocXr?r!=QN?0*P*R0u);K#Zx_sG`ZSZ-wb#*7b|jDWq_k|b3g7Zp z@q{C~>H<~6a_JxAVPn@$>Yg$w)%@=ZhA0`ojzUD+4~&3y*b@V0RyQ&)Bv?^DH2$L3 zp4s+7QK6MHWKX+A&da)u{|u=2E(;ll$QL9Mkl#I#{v^f0G}_OCPd1~|*bu9A4IbCo zN4sTl^{$+V_x!_R|G-o4TD>=cCTInk&Rq>plv&gNrKk=<8)vka7j=_(nwb+UBEqfF z$`pt)Ns52DBgoX3uS@SR!so)xZ3CX=KnAP50GGidQ!c9!&YbSsahaVSY?AyU2-ZNi z#=7hf_F=)C|1R5Vj%#+4c4tf&NS{$T6b&)-2OZg_kAu7<0dsJ%gpY zuW?OvVfqowiF?T}+dEx(FCZ=HQ?mFDlSuTEFWl+2ZX|DrWqRnLsqUu{BlgCY#*Z*9 z*UZ&|0lzxC{aG@0q%+s}CD(hI@{LE?+HDWEZKXFMQtNB(+7z2!CL=l8 z+j6E}9DC+kJri*T)n%ItHc){62HesMekc5(C-9C_5QO-S6R&OY zm7p>Bv8ue*khgP&BL;x;u&{5bHsfs8nF+3W44vK4xqTZnNL>| zcq(Du8A^6Zz;Gr8tFm1vD&`qfLCW|zd;!|V7-L~fl;ngI>|3e2Eu193)Z4AlQ_c^h zHr)&X8<6Dxx`|tN*G{PUsk+iD47HDYxugGDRz)Z;XjZ>;YmK<*L>lA3km4$h;wr_2 zpO#g0`PyearYpy9c{QC9q$8@ASt;}A5V-+%bUNb(TVl&x@j7@vQ@;5jc>y$*CY$+G zw)nk$CxnO}Rl?;EJRz6P;>C|$aZ6$Korexjr24anCYEn*aArw!2 ztzLs%X{ZUI=yB?l#OLJY+dmffq_seAxBb@_%~kARjWqQ zo(p~{o*@1N-&H|lYdyuK62s|KyP*H{c?Mv(_asJb8i7!giv_4Tp5~XY?AWh7jessw z#uRN|JZryX&0q#~OA*AG!V)w(=)k2EiuK)VHBjU~tTmS`Bqd3{lNFcJs3LgUx1u$X z<#6CGY@+hnH7=%&O4a)aTXU`QiL6mkPl?PvQZe*SQdZ7<@L1iBr16+EILsiLdIdyb zOw3%7R^+Eho}>yYr5n6Tc?>Hn8TlMBHKKjJ=)g?L?VRvGmtQAVT{14mS?Ck@z1vOY z>Dl?>e|u!=>h=_#L&7X#s!B_S_RAK(8nJnkg!1BBN>mjW!*7(!W2Bt2?c?f?mmFx# z#z)#R*RnI|ik&z$R))O( zCer*C#3$0)JT-cbG{+Nf{~5sc$;lBWBD*ur_H*g1&S(u3f(+y#&4)CpscAjlG~0) zd06mI13J?$^UF70IEn=Jx-BZwmvY#&wkynX;g_c6G2SX@xH^76(U>7HpG+N_{T97c zwZl&8Y$@?-b3Hjg;aM>X$TT2JJS2l7NsI*5(KU&W^_-@iJv^jp7b=H^Y45ZjGeq!{ zF860(w6m9?Y0R7_{6v}d8M#u!PsMJdGqCf72n>7@+}(+dLt*sh;x?ix zFUrb@bcyLUrPTQqlvUvvd52^gLyfbR?FEAY)r9vn%y9H2K&f4!inV0LD4>HOdm<(I z*iOCaoQbtRV-7_6>_skb$z;(}F@khdg-q=XFwOEv1gB|FBh4oz+CG6n^bjbuJ#bU5 zndstt$i~Rfw)LI4^T0bldY;kh6PzA?cZ#PvAZPnrwul@fH%|6!pM_u@JeIYU327LE zkdq`7NgyR7LdvX@QzR2(0>vI8!;iJ24sxs&5i@iHo+?q#_c7o?(6XAD-0{N9P#*ol zC0|^`%5$gI3n{CUA1;!yGHL}0?qXd|uoIkyu}g1;CpQCDwkj1;1aGz~hV<%E&`9t2 zj$l*RvErj-rUP%6MTGF+W1Rkt6@a2-5aCm-nE@qEu%oIXwvRO*d=J}!S(=3MqE3JY9QQ7O>3!%MmOF6J9iVcQU3jm6=BSKGIW$@kXF z@t7e|^E?GzRQz6ooMb|wQff`IcB4=Z z8;I?oFCT{}!TqnhX%ZVX(y1b-NcFm9qY*OPJz0t0Z9Jh>=2xXBg($QpjhJb)scng} zuK7*6mil-_bIO(|xRQxVU|8w$or$=CGz%(4P|Zz~y$^6gFRV#8fw_}~Px%N^Q6(}p zGcsxBM*=tvdn##ODdF}p47`UDQqu!}%efQPoQv45x;(-_sWkS5gj5VcdO4ftyi#C^ zZ=u4fjdDX`8nsFU4dZy)>xMPA@xDoLj(~{@FyL@trR7;Y=yWZvW z-300KYY^)`@;0t~hy{zTYbJ^I>s(yqtWt&G&te=zor*Q&3ZUm7_J_;8fs6zk9naQO z=lBQy&Xn>OZQiuP5uWp^;YKkqy9l}r?PsPAFo!OJiF%evPFJ=TH4gRoskX>s_kKZj&Qkq8IEgQI0b&r=et)Md-DfSlVWym+DM26ol4N1E^3{G6A^z)jEGubNIIxXeQCr+LgPgNX*+Io`m z0?L=7rl>z$w_g0Ywpy|CCM_nf82%;xQJ-3g`$u5d6%mH?sY_dL`GcUU``tI}Q8h=U z>AFpz@DoGu_h8&eSRc#qeunSLUG=D$zg_k_3F}(EeO{e)Jyog%iER<2+ogsk^lh|* z%b0pb{;v~yh})ol_(z1WqoC-xpn?|k)Gob34`6&h*A_Ko9>xR^pxxr=;6{Pwah=M@ z5aOqFhD8)>An{oDkpb%k_@PH`vC4E1`QhmKpYe!62VIx`QNrU);=I^t=m{+gjiZ6S zFp}~)2;xXDtjf$%P)d`W^CW11Xy(>jQE{kMu0f4a<4S9Hg$i)S(x`C79QlP7!Pa7< z)1TP!Typ!6`%FD=`srz#Ibp6c_^vh*zg< zZ14u1VGU12?FPSO)TFAm-Z=j*(7V_o}84bD?-E+!2ZH*53Qn z9I=uUFflRP;Vd19dp^y8y*Of5V4w1yLKA$*pwsiL$4HRHL)@}SS@(9)?e5UMx$xUo zqSe*uDul!*4DWz(kZI+wa3!NSj!7TN8aYzCCspAiT#|x0LR>R<=j`$~J#u@7wl4h* zYF_>uqVJ})7ZP5l-ak&H_&8o1eKn;t7%b92~`YG>Js~exs2-VVce!XqaDZtf4#8#8~!|O zsohl$k@tkXO>qr*|GE7=OGd#@G@IC-LAcwL)^C3qI?a7{tnl8@!54D%rmRpQ#tdl-&z6c1X? z!{7=Cj^k?7?=&WB$Gp;(g3{1@daZS!#)alWwHgGx>)Z8DqH@q#wQdcw{ z0~ zgShlLWd2xl{>y;V(5+6ttpL3;{5Ur17Q^Kqdxfo}ZtCes6M;TysD)%yNe z!PDmN61!slP_>>G@CVz&-V1%baCh7gP&O@>??1<_VmvOwR&F zI`j4KrxHb?w?bN0qtZ9syflq=GsVfgB*(>64lV9QRVUMvAIpl825052$jkVGS{PW% zmqd6h2SJ!sT_>vY{X{)WEbH%nH_ZCK4`7KCsA+|YQE>9rpg)7KJ-ZJ9wV*zM_bN08*5X?0io|j*1kQVqrS#IqU7nP}Q;gX8m(8_+k^2d^C599R0cgmF-kq(MduuM7oz4xci}l|&BCEg~Upb&vd@ zLFGd0-@hMz>>Af0i`8EUY+-_Jw%{_-rXU;Dqn19oXi_Q5 zYlLjpuu!^KSTW`0Tq2we%J(XYu(_r6pq4^v3Y3P6)akp5hzIffDb=iYRrGM-thTeQ zi|PkX8Ql8LmVCC$@xWnt`KT+g0!&Ep^*X{l4Z~Ig8h=IbduKfH2t>BayG5og2#CA zA-P!?%DiSmLCpTUf%3YVi1Y1eKBNL4TREgMns(EQ2K?gP?Zih6?GUIqZ^y49cG-$T zim;R*5PZ9Lth|UkuB}X6Ch3HifPQ0;>SCg*I}7iQ+Uv&G@$ZCp z8~8641NhvIZ}R-zU}V0KJ`p_XmcH35`(7Om)Z@#}x@>vZm&5P6uvLsHe*_(x+j6`4 z_SE8EJU?kHCLsTTajoiI#dx1SEDhLgIV|lda(=@@wiz^X#=gAIc{n-u{BdETjrA=Pr4Z zacSB|jI~3QPa@YH>|kXW9RAvP|JTCLb+?l4U*Yujcy_3V<$KO_@cW%3@Vo_E$|2Tk z-TQ6i@an7X_u^o@rlTb(qUP4HO6z1wKkk_BVMFL(}ZunhG`?py8i7V0$1Wxmvc)>Dtk$(VHGLXqL>M2S!x^_p-}lnxVJd z5#9P>dChT#et#*7>fm(e(3Erk7%sx3b9v}8nnUU(L|UVN@A6t!EF=>}@@ZK{dM0N5 zHt(fjIGviwDGtsYi>)*T#*Vzosw%N{J!>kt6;nfQrL8osMugyjK_F>=pdlcW)YEvO zYiS&(m;nQWK+~4v-#>#j(w4PC)q{)D7&Zfs+MqR)Oya$XNDs8AWH?Kccp3nxO4^mF z=E9SbyoCTe6cSaPWhm6HzL}_NHI&wj*qRuXS$bP0e003K*+UtupJnE8!FTD&hHPZD z#w?{{j-_bu!hj?pf*hf%@H zicSA@Khue-CSx{ChK{5e)@Ew?9%WF~8A1BGy>{1kNA3Q3V`NkP$I3{^3zNcp&9aXHPG`MsR;YOsE0Nc6yAQ)7) zxt>JC*w)@HB_*XgrT<)-!&0GM?^7V{5?&8`q+jS|>O$O8>1W`FuQK8d`SpIu2TYo! zq;{T+b^Z`eUfB#?I#Yl2&oe-v%)a4{91wEKYE8^_-=1He;vI<`>%N^v@Agm#sH9(k zZy|o&D1C46RZlHB{mk8iy@f-IMsFhutT{|(pKM7wxUktqJr0aGx4g&@X7)k7tRnJi z`{??Gtt7<*gyA@C&i$;LKy5cUL3ZNFiU}E0)MP{+Ct~2YwIVxixeH`npK486&0t~X zly*Rob4539<7+sxI#spJA8OqLrUNw0fEbSCXKXG9&xq2QmfIaJuI7Xd1NVW}m+=PU1?MsaB&zv~BefmjOazv@7EA3(??M{aXvn7eUu=`(7G~|DW6Yb@lyvy`UX$)q~L4 z&C{Dxm26hX@=CdCoeQ#V5rCpQ7{Okyvj1`yr-TYn{f~(oKmQ#nO%KGRchMe2AJ#*X z30(G3(HN814@$yabrKow!gzMt&Ujh%l6a$jlju)jZ@mIoQ!)?BY5Qf*Sb$N5vo(!| zyRFmpkBeKmQ$XXYLO#ykY+U3akK&W;7&=MK1J5_fm`oUjvPBIKx8b$}hW6P?+{`G~ zMFpv$$%9Mv-0f3jMBva{Ko)5Pp;&tCrrcUj{>aVR#omf%Pjtv~8UGuEn>0!+aGENl zmORoEAdP8kLcGb5KrJFXqU0lt-@nU5{R_@8U!rkBd zXEQu_dOFi>Q~^ecP__$#vj||qta=lv2-*(rKqjVitIXy%0*s-0ZB1+-HO71 zCuZaHPGM%WHf6KLo}*%a+bo!)1klGapj8VUE1lv_{FVqm5`ZRnF&EXH7jrM_KS<$| zqt?@!EKmCu+dgLIZf9o!xt=T4W)^Mm`sLTM}GaANFp_ zRP1*CsnVWvy#0w!r*{T z*o5NeH@Uo=JtS+?Lq;w#)aIb_k^GiwNXI zFYI1tD&Emga7^xrK;8)e)Uq@)MN*JIgjviJJISJzX-QO9)iQSHXone=!5jRI_KY#$}v9o5I1~%W%x-b%oRmxN2enJfUHw zB+I$|nw?6+&)i+2`;OreO=GTK;Pd6JIRr%xl;(Xopmk)Qn}S4RlE?aOAHUlE(Ps62 z0fvO#@Lf5o?UEQanH|?0X`XL#2yEPMb3S(B&!6V8V2!mR7Mj;j;sqZbjGuoECC+pD z$Gfq;0Zu%?6(*3-L-Z-9;Oa2TvNheW3TWN<$+2Nq5 zo`zj7YMwoOMCa51yB6*MA1bPE*>l-9yKXM&bNKh=+u(T2GmabLMFBUT$w}%>Q@4W$ zvwJVx7mZe zjhOX%M6IF|EaQw*l#1N+0bWaTyX!L+T338um_kcC10>OwkiI2+xu zrTZ`33H1YEjEO_X=jx~50CqK`ZMraxqH=I97u7p7!X7#V!rqy0a~24nb4N~W zQIP>1by-d39Wk!p%PkhYiJTj41~vbB7kaQ&d)v=XlS8j#8V>&rcE0k7+!|}G&BBR= zSBPEp%EylO?a^ZGWF%GGNeK}85xBV;VE=27hzS*XvQ~=6eP97J1pg7GAU2w@g!&Do zFw1sR%s0^8^SJeY_8DaLR>N3CKK9f|^(A!NmoK#C7ppi(Q)DgI5{PjqO+o0YAn z$Oe-Zx6|1(H*HyZr47ovp+gOXF*eTa*19ke!k`<;TtbP zpqr;OM(gUPRHj}pF%=R7ND?DH*k2K^WhL6k2t$)Lf!%-GKY8OXoBF0KI^3b0?l?>9 zChG!SD_?HWbYH2ew#J51`|&r-$R#m;>6&){s6#GD%~^;_!RaMO0g7O}NxL3@$wq=e zU}~t~2p%cz4-N*`eX0wn_6BVacV=m+-ObnP-=QpS?0#PKuT+xoffX&>HV^6e)oT(P zW+nnN6^lC12>jx2v*$sh=woHz2X$$#fCws58`f{F9H({+mtalJ?)n(ZT9eh((fGc3 zUm2jz{ZCp~0S!nl*VA+uj^~oQ6r1K8*qA;%|9p+L2C{>S>39*y5Y0VcF+<-{o>Zna z@FF^vYeR!pVONbzI1(l?1aqFf*tG7YtvW|LeA|X6GcBCMZI~O&ldS_mAgHhv^j5H< z?7hCB9$e(D)rrNApDd0COfavW3segeCa1hnhg|6aRRIt4+NM3n?R!|sTns6%XN07 zdi?G8v$$4-vL^@9*4T!#w8WstsvI4PWQnS6T@#D{FO)7|rlu|sv9?q_j$u#VOm33b z3&Pq*tJFWMa!3ZKi=^!cQkHvXK`R$IyHsUIXo5D}Q%;OVoS0kXk_gC|Q67}la^)M7g{j8r)MvQet_5(?6T!Wm>%_^Q zh2n@8Rr6(@wz{I@6Gc^xClegjbY$R82YEDPDK|f6etXyW-1!!mSos?ZVtlh~O8#r# z$fihZQ?T+N+5!hG{Gn|%G5)hUWBeE0VfB)1NjvpZPR=P_^Y zp4o=;2b7jez4K27G{7SGt?3M})MmrVIA3!oFjf#8Fmu9euSI5mq~CC6FZYl*SAA5> z9Vmu*SQn{Jkq_S3xUZ&$6Y@ugc4DIKDbxcK^$fusSW5sUcktMtDH2G+`l3Rq6QO;r zj+h?<%{&h+*m?@BUH{Zs##I)Cl+<1iJ=j{BMuMSs4K><;?cyLUa9cF2vm2WMQ8AQ0^X-&r@U7hUYd3gDZry+kJSRHw7Yo(P-Y`4E7Pc(48;0 z4zYbo9>LZK{@h+2x@PyEf-~(27OS=IcDE*QBK%6z4#t)Aa41toNU}>)y`jD=i>k_x zb-|csFzSf0k6Mj}B=|>DFtHG1?OT$y`-Em5)W?xxnfjBVK?c!~;psUgs4zIGvHyiNTQU~itj2fl!2F)_ zTI9Xh)|M%Ro>g;nSA zZQ|Xka;;k0CD6hrFwrT_!pgclMVOS;i|WX2z3|}kPeWDQGIE$aU6ABB2)lsFF1Se1Z*aLQH!N*Ioo$}8{e?Y)A0f~!j%_sdQ836vjk{*c78=_Qh5{#XH2p`zgHsmpM=v2f9N>oyug-P5@ zT}kp<fT z0OP;Rwj0=dsJz6|>Y3ZCzSl_kHMY=>=)g_0SdN`ct9K+Gb#xxRr}xbHM({hsCaapJ zFlhxLK(s_Y<|;_yjx57YOL@fY1>|(EnD`5Rd}y=y%Mn3$Y4I>-83~05TCg0cN5uAL zSWi#%-u3q=6E^N@A#TG#l@{DEcD075YBF@vT+gJyqZKo>FYj9VnWgzu z;DkD;LOA7mSTHCKuBVLpfn=j`jZL-bBvK!0El(Z_`%~l)8XI2eO2j}9?QG4254cfG zZ$znzg!jxKHElfqeT$TSBxSV`e42i$qoK|0pm^YXM{yB;v@kPy$3LD=zHy_`&U2By zQlBkh&ibT0p1b6bbaD2bh}{hCY0ZDs4*XP0?BPlCuS)Du1SWBVNOd0*w6;!lAux64 ztuwy}riz9}tj@#e<&&06;oT!>4sV|jK)4dY3pia0{qc|3_}~Tsv^gYz@EjGArQjZ~ zNe{_AA%PbFz+O3*Wd&nhSa(%RF(tAP9v0aHv%{{VinFw=Ic#(T5OU98z|gEO13fa1 zqf0m@fM`D^s9iSr17zXg_>-sw&}U6dSnEbOk{*hWUsfIj0@4{5+6(4+YAf~^fj*AT zGL4^q{PYG15u`Y1<1a`vz8HjiJTVAQwHSoID#LtUcjZFr)&2qACMLp>u{5V6~}= zL4IqVL0{gC!;{Qut(E4Co4WME1H0~tl`dp-=96{~e&eaMLTA-|fUOeRvcU7OHH;y4 zDqnS_9?1g+{Z$-Wn0lH?NF}(x6q4bXNzUmrB3Llj1-9aFdbnG!>+npUO4229jQS}x z&+(iIXJM^A>LMe@WygiLPm8AH23nuT0Y9JGdF8tz z;SGdVX1tRNgF&isA)K9@*xp>I<>^2kCvK61Z%i^c!Ub#3%P*Wk%N|S3kS40>@Gv0_nomer!2e zCLE%5y4!RYgRp0B2zzjT5BBkZvrpcQ9)kA*OAIz`XU3W3R$}i zj97U(OC91=ok{4Y^IH1?sGDwl1>$Mm%w%uC$%htH1;jcZER@CZDh51>hg4ZrYe|QY z&c8yUKN9yK+=+*fuD=6=WG)xUsRZ9I=RXQ~B)d`Z+ zEg-e1+PLG&0aK05_LUNiEXKma%LTCe&CXSS>y@lYN~%J!=QsA>cH^t+sn{Ys*BXgs zm!FODK1o{hn(B9F#s79D-09@|1B<`AX9@slg9D3y`)vx)cRc5N ztfzQ%W>+;Hqf*6u7OQ+e`KT=JRHmGbS|aq!W*n0_|0a zy5F0ko9_MzvTFYsxNhG0<+@lmMXY|`Trs!bs@AML2kVYT8dz)OTC_R=Rp?Wnmji~e z0Mee7PfZ3Qm>a#L`H87&w()*pKH&Bh;KVF%^J|Dj;V^uH_EF*7kR|G#%l zmNYeN3|nBmb9C&op%ssWRq)9XHkjO`>-c?oo5kc@p^3kK_yx4e9E>{?B8@j_Yo8ga zh{6xa!U@k91}T0vbOWwpM7}U+(lAbnNv72-(yBKTeI>J1( z@=fW4>F#8ubqgL0MnL-4g@X9?j+85-ISg?H3!n{{TQ0NcMq!^1E0UO}w46vS(Sedw zmlhJ(%_#{6RErifBA!lApN$Tp;eCQsRVGG(#a%#U+y#K-IyRwdqo4_xiR+76#ox; zI(t(PTH7op2)61$%Q`eHDEu-!`;wQRY39Kp&NX_N?yQ=A$uL z#mJfBwWdTJ_Y7Q!JyzAer^=6LV;K{0%j#_Gt$HC3}coZLM7Fst~>;74BS`? zg}>c0sT~(s0Dgl!1OK=K@f~b7!$KEiS+q2P-Y-93FNquTGFg4MJSO=l4hU)6;4URD zpdrM#>0M(QWt^(lyJtRS#Lo878ao;+Dio+muYZm)a=yW>p0QLPHaEJam!DtHS`c(;2{k2>giM%y!ZSz!DKB)kjh}cf4 z26cCY;f1E`;FeTT19aoT^&GwbMQ{f=)rd7h)`Q_9 z`zVJ)$cEDZKgI|(PSHMiz+zBk<~p$oF>wJK@HF({nSOF`Obp0Gl6o^;-P=QQre(`` zu;4O(4xn|Kv!Oww1U}$}8;_fARsWNmPpdbFIq1tUEs-WvsNvEp+QDAD37{cc#|87D zl)tsyy4Cmmo-uWLe4&`M{_nu~rQzR|(?46^UK&ph6_zO5pe=&v`y?~sT{U#Jf%E)F zwju~rgg)9xD&H_3Qqqo`yXH+)fZwj?=LCS=`(_DA#nY%+Zx;^hmncdMw*$Ry#E!Uk z3;$Ng|Jy8{0Y*uz>e?{O~f;7l=rlx&3DR9!qWUKAT0 z)f3!vm&~gqmzND5{$l5lOY4ShzWgw6X9(}yF0$HiO56;!k7u-P8^5dW43Vhk1A(#> z_q4$B=w$wV=ZPohZi411Z_JnO{nQHwRDfUN>o_J#fxb??a$7SpL7bPm%EpN-6@(@-ZWIT{bO;JWp z!JNyLNmcPCb)+oa=xVh4c|&Z^Qa&K7C@_6Q`M2?0Bc(*9FFS{>w2JMiMk<3_jO&Mq zT+X<M}k zYg`{s#I{;g^3DMQzlWF&(|U+bqh@LXcTJL{un(|xxQ_v?5-_`{y~5a{HzF>`$O=lc z4=8p@s3<`hJF#+8;OMqcdjO9M0U~04SN{?IL?E&7}zY#ijdjK#@G;EFT9q|=TaC;}G##11d})Fl$4RuRTs=Hg5QnZ!l1*4Xe;mL23>ZEFZ|LLan zeh6OnMxX=Qg2_%co6kkam}{|7 zyM^rOX7j|O5Mbc@N zL#wH&FQn(TWrRlFzpSCA$~3IBmDp;NbBP2d+y~=ypKE$5wi0n|fQ!c<- zbA(GLI)NZ&`5b@B^Mr4RvODq_4dq(+)ZcbaDOl9ulrAxLNlc{Lyflc6M-Mif$Dzn z(J4)IJ}{wXhVA)$04UM9EeqiMQ+3}~MZ_LsY!K|o;@y4osbCN6Xxdko6Y!5y+Btx0Fw8js#sb|y zrKX}T-xqQh(OYt1=Aqg#ZV|;wM?m+ol|cA1|N2eu()Qd&N9VyqXHlzP@o;x4PT>$% z;Zp9@9-|Gu9hQWazH)DS7BLq~NjMppjfFweW-goARr`%6Mkrjc&BdfG146-v)yU%j zSte&Omrc*4nn|AK$HFpKP&?pC-8@6yDu>66b5UN?N!rU*OeOP*QwSzl#t(l2yt(^v z8or5a7cN|J>ttQ5qxnkhC6PiEGWnz7ErQ9_uwxahGiLBd;9KyEx=qT`M#PYcftr60 z?nMxP@@S2qx%?879ko#g)-+r(v|T0lH_x%U3sIuRBOqA?qSb-^-xtV-osU5d8~p($ z#4R;G@VSKYZq$6P1u}wnI0qi^IicF2(C4$B(jZDt7;Q>%9eKTbcBNF!CSj}~|D+>S2;h-`hkeF`lb8uf zcq(a3aC#r*>>n7w{uz) z|7+z7g|lhaA!V1oCz5mTHrmMRDh2-w-p*>`t-6(^vW}0$b0<9AhIng?%Vn4+sq?KM zfB&`)dQR5p`Asd1tfXhcOlAB*Zu@JxNNL_$g7>l>+0bPIDNY3a!rGhvWGwm7R_Unu zQuHtAP<7r|LCvYL5C2riE1;x!5Ard1+GpKij_j@(EQMII-xIMs!n=mebjn2>(ZvgN zDEMy@tEsz6+SQ-F6-Z^dnlvPA&a79uKXP`=FmTdM8OlY38UYGYtRGYC?nyyMl$)>! z$t*%~>#o%gh5-aowMW6!8^c^4%oYM42*hh0mBG&0>^v1RP1drL|U_S{t*XX5&z?0A|7Q1 z1hDQDR}$?4eiD>dvbnhdPDBYNmFPr~wT<hT>^N`kso!d9j7On496!j;QmIhz|;hvd+WJ zL=)<;#+`SC6I<4TA6(j>n1JZ9h_>OE^!5YPVxZyhj-^FL%r{+DRB zEX>UG|8It53U|$#nC-f&CqElKlrWytPZw}wA?pML_z>8btwGfli10N7jmP{Hyu{ZXUD=>o&o}4y2N2yPp^n9!P-VJ6Udq~aYM)>5 zzzx1+K53t9S>dbM!Pw)ApWhn}{H*RZj)!haw|&(2CpCO@8oN3=GJM~X6DvPi5a{>- zn%uqqksaWWT95Z{IukPK)46A#rDr%SS$t+yVheBiXOZc&pSXp7+vTT@g|pznpFuzqiLAFp zlMWOP98&0uj^5(zNSFExvjE|#dS16frkpts{X=uHKti?}Tnn|b2x>a<*bp4E4Niy2WDteAElO=@Iw;Dl)9c{uCUDe`lw4zRO zC^+c3No)`VFwmvp>dd~j2mdtF)Z$&HDR-0pk-gpe?`u1dD>xqO6<}&nm8WTjQ;jMk z1lVgZxsuC|;Sg0&b2+TjvNfbz`8Sm_hUm4dlFDw94`>aqAr@?6l`osObEB|%wh0&I zQ&2kf5jJb_xs+Wn4$q6bT;y9h&$U>hsw9~d6^M?%%3Vp;E3|WW77o^MChy0}QAGsk zykgX3XJSUO+B}2&#kvrAR9vl0YB^BP=3huyd30QUd<AI4JEXf{jmp@q0%fDi0LYbVKeNyf zm3Mr(U+-fVuJB76Q*{emx+fovOu1VMu+pFP*T!<=9-ket+^vSyZ=Xf$!g$GvKn!N^I!5YJ?quO! z*Lj|Hj=TpdM~7=;X%<1(s1-sygeIj=iIxwQFLGS?-!vA33zO&}{)$U+ORbQ>U+Aw0 zS+WIMRjOdcW54?3d{hJTRR3`x1y~D2Aj+C7hm2PvE;T33)xMZ66lz6{aNEUJ`Sx0!0)H0Ku%J*pd*bh%l&&#L0lA*6hVKGBu7Z6L!!7l$Wx_8 zOp$dA72V;sTF<7W*(5=41$B1{fHONl`Yl8d-%slRZRWslUi1Y?!C{R`cYU zCbpq^2uK5}>DuB6j^z8t0(qr<4`!~bphgVyjFabtBX0E7y+fad+5#F?E8;?p6a45O zRuS~Iy%&!7)YO)n_qnnu|FCs<$dLiT5nW|z(<606Cjy}6n7j$(;U)Lv|6VhcK_|`3 zln6+TH^^t5XDU5hhW417B}(8vwjr^cdYkm>k|n7G2rE^?Ew7N!W0)r`>&`1xZ+-V< zemlH>75avvy(RFBfT=pPXwxAi)~Q=yI0JwbxZ;hCir$G;gXohk4oDK)=60Ag#i;b; zS?r`vEZJmNdmn7`4!@sk?!*t1F0Qin)h8W;CK&g@3V4&(iLT{cy`#_<{;9p9M0qH) zbrNY$mTv8|DFDDm;&6Ub<`pv30LjdssliF(s6As zTvLk>Qk-i@+lY$B7{3XkQX7AlCL4uFxG#>kvjwtz}x zt~)Vi*Kqa1U~UD~%pW~wY2fU*=gGi4yMIgLBl`gY^#|F4Tw23W{ZbONoR=0()y%M| zaOD1zfXp0^4_4n380Stb-pwK|%`jUyDn_5=Cn<&O3va~D^@1NbRC`QQuF611MjDdF z+aSoDb2u={%h86$Kvn-DEnQ0ItGA>R)|CG|)B;(Kk=m8J3jhr4PEK99sm~XZu2sED z1uV5lF5F9xK2~_Ar49o(cL&ri8u6f6KgvLrHE{p-#(XN~rE0F2;Uvpf7bu{%VGllJ zohU|ypot+_TxUsNGrZM@5kw9)VWp2<*(uig5$Iy|M-PxGdjps99uu_Ok+Vz#%m%I# zwsydTZAzN^$GgLzIz57sNmjZye^o?a?X_54LxRu}F8oF;__^TGfaW_bD|5kM2SHsw z7mekdgINZ_jH^!r+PC7cul!w)1C$WHabsSS$JPhS6nd1Q%4vsS#zm+bK!dP3$uB7V z6lD`e?3;k0d;C#H3^Vb;OOLp{l5)e`HXVnx4Mf6xb}5-VuC0J;0&}`H;g7h4!#HMC zh3bQT#ieGoP$DW1OpwC`Taqi5BD8;aGHXK@kCED$9X%8&c9#OPGSM^Ap(%=$ew~%~ zWxv{8hz82T@aN@7V!80uVlOFQcX?Jl5Gkk7TNXp0735xUrK!;kE3n7bW<8aUW%Z{2 z7Ae6>bG@|pRYcH+se7~g$YHQxvw~gHKp-uYio>o)&}{pA>)iz&xg)^{p-_ebDBBg2 z#Z97Cxyr?%$(rj!@oI%hOOB5G*aBFK=L8-s(h2AM9xrIMDT0JPhyn--GK@VCs6s7D zZLj#QWGW$5^!Y4)&U?U-i2}kg^sIfPa3V0Pf-i|Z+4!7RI{NEkPL7mcE>*ANAN+)T z5pYmdI2uFwK**;x$4UH*1@uHe=p>sIIx?9$Pw(Ryif$T!nIof=Je!}csgXwM+<{2^yj$0| zF=3e6OfITw{yh*PFbhph%)y$`Dme$9q9@b4txC%N?O@q>+%a6JgS|@0Id2CGX1-XF z@w{jto+<+cSZ+FWWAuapB#6PC*T}&N*uWN=Uoyv2+BD;H5NP+FeA@JbIR(*TQJng1 z0&*^nPzd*Vl72)9iY~aVl%7;H2bYKZVqUfl>9G)KuGRc8xU2=(3n=w977Sh1WaR;X z1el#-n3FdDuRXVck+9!eXZ~Ov+&+x0 zQ3b~4D_tzJ9PEUdJSw!!K01i?W3bX=%S+=)e339gyjCLUjlIV;*6N0X!_jmN{4Oa) zN!`=x)wtb;sTJ;z#m99P*;naAoIpOZ+1RGSCHqE|aD^SIK0YBWl!eSI*y=pJyO6@Tuo8=Ds<5L=i7KO5-wSulD_fKuprZ7- zsAlomCNnN}D+_|s(Ll5L0DeKo)AYNw94v*TGFL@_A{S}jxa1CVlEIIxdpOAa7?ue` zcfQ@tqqX1yXEb)_#+JBl<38Fss__@Q6m;+4yR+}0tuLxuK{+<=k>LTix3FxRg&qGr zb5tmX(sXk4UrD9}P19Udz=uhYJ_?gZC!lQ$f>2fx$>A{g$C%U3ajiiW>H}?QH;s!^ zV1Wk+2$3U^S_4N^qH@jQZo+d9NPM{L0d*iA`gTt0^3Uu*oa4vMEPm&lKTXKYIC$O2 zj_1+qkXXTvC~nkxr=6`lx#LqM7HVOs2j5%1G66)vZpTFd>+}}K(!JSOBWGmSz^a^4 zHI?668vrMH!D2C+K%O-BT1;Ut@`#b;A>smIRA}1phD~VEM=m^-A7;kx*bS*9|G*IV+lFEkRa!)_q4N^iJ_zaXPlse6N~ z>2(jDnRTVyRSumq72<7X@#?htlXs_xqZRWlkT=fN9bPr$EJXO}OX zPd*M#Qk_pR4Cm^G51|!=88WDub)&~^iw%_Z43;IM$9c^4WBY)>3KJRB%=EVZ2^#0e z?m>Yaa+=AV{u2!EO2thHjS91V%SKp!x{=p2@S|C+E7tcC&5rBKYUER6v*;U!i6PKV z$VG|O+b*qAL}>ay)#E4^5nmWfrFTaTDjP2*yG7bY`e``}DiKFO8I zSc#W;0Cg=cG%J?PMUj_%`2)_&V>J{?u{4W+AQK`auNRU?wU0Ha{p2^x$|7%8Qav4NhWphsw4!ry#cQJ{O`MS|cHe4ST!C0Sp4`Ygh+gQyQY;a=aZePTkSb$)+vOcT_vact zUmqMBmn1RFHu9574x(cGql1Wtzr-aIZ1-S}hf}1xN^PlMw$&JY?KgK~cA}=-m#af7 zaRZO)w!_;8{$8L6R}H$@4b+Ey(4>Jv&?-DMo&j5HWHxDCAVlNf0z=P$N5vWyy}M-4 zx(PklPHF)fjNYVg+#opOWZTd$y2y&m#iEz>Sn^sGjZw1XWC*B+#5w~Y7|r(&gubpQ zpkl!Y4-tZts@|;%TtA8CCW6 zj%Ky#(<-lV_IjxMCCd>e%4kuPz^9=jw(bLFEf4JI~>V3l3H+F$l@43}2^?JSQ_c9vJ`dRh%Z`KDc2XX24bTEJea-@oom$K|J8QI@Rp6JHUe9Gx z=3CV7=QeB+tj8D)t@+#|X~HEZx(&6*t_`(29e;%?oFE!nKL*#X@@0Nv#nN0iCC63O z13~gt49Kl>sA&YfR{vt}%~n4)UX{%=49`KfS>w387?Q+$dd*dpnEW`y${6A#2a^fn z4gWrFR$yfUx2v$Tkt#PsNYj}@Ele+hOF$-H1fP>*Kq_5CpPv!-<$Hc{=(tI8myAta z#e3bujBI4Zc0G5DZVdHw&0WRu#0M1KsehN?Z=6Xi8xAh zxk+~0_b32ceifNh=)q#sjPzSHq(!~Gjv?o>w~4(K9-v5-EZm4aEos=<^CNkCWjvHm zWl|JQbOkamxnew45=mHFq4Dc<82B_r3=->#1{IAx)c*9pW|@g4Sle4I`?wA$v_G*l zp}ho?9jYu?{FAY86&OLE0QL+spl8 zWkdL&-fyE`q_E4`Y}iA1Zg7o`AWF7F$A2hVz7?`bhaWq=+-mDO&A8*{NI;6{`+0C=bh^Y9U;Mc@(V~sa{v2x4$01gH((j)!wq`uv-jy2(7f3n z`<~uz!p)AN#}81j8TS9Xd38fOYvm4|ZD=(3EDl$`PCH}A`nRu{ z=nU&iU7SC0Zv306(gt(y#EXA`$I=?6|A#y*$N#QVjg_9||CfjT4_ZQlBl_k${GqeglsK*( zFaWe2sUyc^w%3#2xdT079AM$UOzi(*>>Pt^3A#1icAvIw+r8ViZQHiZbK16TpT=q1 zwrzX*n;R2xCuV-!A5~E+vm!Ef?j5^UWv=&mQOOjKS4>N#z}!K@q|(MHE|+4wVqmA>YtkhOa4~ZyuAh487M#4X5je#*(3k`5r3)w)7M4C?nRsa zj^p1P<{!8x%+9CKLtYw_`Slu~+e&it{DT<$#A@08x(4%eR?yi>aL%M?>dB!sejA?F z_I>$mogZf??a}*pwD&Y#OQ8pINK^m-TyQ zXk(*;U%i7I`qZozEIR$xzrnk02O^Jp2k6J=*HD1duNX2IaelaIv*qt%V!0thv6%=4 zbow~NJJ@4=xe}A;%rD6gE+GH!%LA!mdVBqKmZ8hXgD4i#sfphPj3r&|d$EnbP(Wvs zeq%zQGr`2@e+c=e8=!y$_a!BP^khmUx%Yt$G_->ZkzoV@>C%P*@~(}mgbUp6>?8-t zfFW?8Bs8MMfrB0+0eQga`d}ATv6(a?QqXr-M^Z_p3={-756L;QKs5c&nelxZO-v_K zP?)_XShex98urRF#-xN0K&9nG22WV#|9oYJwA0c>1ZeT2%_xA4k%nBSP*_uOlVW_b z23EdeKHSh>d*aMdd;(?NQKRY=HbR(_-t4$9#NVJ0cULy}IWS>T%$GP1L zShmJ0v*Ty6XqV(^DPB24)-mL_EoD)vbuG<=*DGvt4ZA z4Ccn!mn4I6R1;eee#x*DGFfK`$5zk#;1H*km?bW;MrLXZ$9y}z<<8eq>;oCh^N*_G z22AoCP41fD>qeR+uZm!66RHC&nY3~As^AUi^r{BsmyD`@y4cMr?c*u9lISx2k&!dOsIB8!g-p4wk$l5R|EG=+NmtJK>_H zgfZD zIp^Xu^nU?b{t9loPI5wG9ho1My4vjl*==EE#>-HaGwmj}A#DvH6G3e3yKIr-7^_H3 zU&3PhD6t&v4N@=>2|)KgtG$uD~e=PE~7`UJOnS$D^?{kDyPWF0&}?IXbQ zAT`U&?XkF0U}U10NUL!=i;c^B!PZ-t?yGTDyG72a8d=+vYK&a_AC0A>IlXocBa zLaBOJ3tSFeE41%c-9aOTRq&}?QO5!4FsZahdmmE?vhG&Bu*L))Y?bQTYUb#)PkvjI zFu1K|W+-rNYGNE&UQa~{dZ_z5=d7Ow9R%e2c$JN$fbR7pV(FBh8I};Z!&gui7I0!U zD8VIiDJ^o244Cvi{UFWr;Es9(L(46Lh9lJ~d!#ZG)VJ%(piH_u_Qsp<z zb8l+rJ7~%6W#858$^B1$lqn1Z+~{)@ex4z66bKY`c_X1 zpx-}+@HISE{U)_8mG7TQSS&qUq+lPVtZPAhA2`aq^oMRRdmjkngQ}~!;=3;h0I|sl zFxStb^A&W&_Bl!}0j~7kg{_s63z$T^4b{zis_~#pQRnt_7q*bsmzzcR^eZ;k;{`{| zE=FTV-NXO}U5Q}XI>Dves6Syst^-%#W&@kx6V8B+pK3e@%8&#jr2u6GkX%y*0RhgT zv!t((iKvib1|qex>gm;s*+FK5mlM6x2}Q_kD%6{%aH6sKgJ1qe=?_Jv1eG?OP*-4% zSa{8ztZ~$E289w-ACagxBaV zTLs;hz9ST3RqEPCC87l~+DxQg?8muq@S{r=QsDfjxZ4;~4nj8%gTIYZK#V4XOQ{$= z0u?tB$FUUJzl{LD5&Nz)qW1kTk^tcsmDW`E>jFKM$B3_QK$qu4>|-yH*46d!c~(G% zd%`KuUc(^@#$r^!r|O}ycM?>PeYZt^=$JVajDNJ_NL8RTH0mQZEyIH{&S?5wgQ#{S z_wZSx0~Gssj%W)Eb+`Pl-_)lmY2vh1wO)-dD3Wu^cC%oU8Ae<*uL_1cFqNqBg;R*m zyt8T8`Fv-*^K`%*hCuwYf;sYBSI= zYPxeDP5|SuqW5)c6CF82HuRnp+mdc}1p3nTpcBq0qr7kqDpI4&HFEQDBC*bS` z!LsRw%$v^55IO5Mr>6EFLm%Vz11fd|jO3>i@(Q{5tVvfue#y>EGqc3~J5S()`lMgS zmZ7}kKuH-u6|NCmOW7|3TTV>Bji73kW;GdpxejuRw4pcec&C#?2f?xd)Fv5vSeCHp zFWSco`AvloS5)6;-@<9^A(7dgYx8}hiK~SsZt+C@#>N4^X8I;i4pEeN5_J>dNOBg{ zP9NF3#+-}Au6I9NTu|o;aVXXS7S}^eIfNx>u!->*)E}~<#on!k%@<4_H1=JGTP9APfElPNMNJ&uw4|H$lnxK)fGD5R1 zVFp3*K&W9bOxKobO0SJ;<$Bd7-jx%{RIG&q%3VusGQgtX=aWu(GE3CWuUWB@X-m>+ zlroPzFzj2QqQ`WCQUjQ=hN*db5hiFEuV2n}85-gHgg_XI0S-7K? zvw={%K|Rq`Qu-wWxnxg^vrteS0)pBP(cBvyJQLX5*{!W~Ya)j=a)fNPs^J0x25X`f zC_T~J?4IrF7_1d7CP)urN4RaLF9#jP(=+EBO@uhn|y({Noe03c= zZQ-xk7_?%JT6{nN^1p?`$*pCF(vs)^T+Brt!aOiVww{J?Y=^}xGQ#7EW>hFjMH4zE z5a(YylF0@pWtB6HrR-I(4=-MGR&#obZws9Z9i=nYyqCg@*qf1aYqgkp=2GSmX)HmtkD179#uD3q7v-aph;a~pi<`>>z@;@m9gKkJo5uVCb$6NS&vvXM06ES9ll>C^xj7G@IFw(D z`VQeS(6zD9nf|-y!_sCUjl`>3AC@LUl!vmKh!oS^X4TcvY#y?!@Zy>&&Y}EwmLBc) zV>KSuzBxYjKAG|{$oc0oUMU$M=5iH%=04|`;d2<9k z(zO(lIneq_N|WtO66y~Bls#D^fL#Q;{TszDACNbf6;{8c3A_~@%Y?umtoKr*C8y`c z79Rnd5%)Xc1SATKMT-spK-0j-dT&t+sh$hwX8Gxql~UVU5@G33Lm9>|B%eyi6@J!- zu%{jy6%?N>SADSOA1l0kJZ^lu@rx5| zo29_=G=9XzqyqMwyDqIja4%D+stY$&V(&I~uEQlMD9FNip$%8Lhp5x4RIf%~Xq8=* zFw!?cF`{CBnY0Kw^Qe!NoPWs>{*=T?ge~}12U_HlNR~2)zOxaH`*7*C|H|@8VK8sx zD*MOXQ+3wpZhw9+zR6NOji~=~)o8HT4eh+#RRgXF z*2vZMLbUxU2i>~7dq!Y$$Ar@3-C%3SYuj&0ZGeQ)QB^t?fT{iY_o@6pz&h?%y7mV zs)TvtNxx$i)d?9H31!fr;F89JRJzeeHHtu#!9hTS2g^YM1C=(4nTOzxxEYhR$O+X6 zZ-P|_ZyIX^35MA{4CvCR5uu#Q1OzC*6assDjln^L0)>A@dj1)kM~#pWl}Ck;(Lw*ex`N$* zTF=p-pvWY^LHOm+pgvWr<^M`od&B%)n&(rgp3SDL{)__lDseG8oiK^6Ts1e8``Ce@pR0M|#o!d>CReOXCJ-ZZw(DhR&Bd0gd8b^?# zgwV+uLy*ejgdWiIodH(96%3bahOBU8;Kh^>I}OC2qU6N{B@l%O7Jx@lJLw4SYg)$2 zkW~|ffFFW-GQrwQ#0ge-upsk|% z2rJ5C%VpHToR8Mgry74IW?z1Z9b#IURoS@^2@qsljG76Rpx%LtiPsp&o!mRI|Ta_Bbm+KORA8XHiFN zl+7vi7ZW~*7M@->W;vvu9gN0MB=&%aMzJusV%3O7@X&0!1sQbsxd}O{;kb$qw6Cq! z43BC|3QpvaIg0`nj2hRPe(m*UC_s1_aKdo73q{}A*p6!c_;6!+5mkdRe zWT$mh?juY~@asm~{><bRH+e&#KKRo8f-(AA)pz>R1d_ zvkLiL^#S*FpikzbOB(i{>&~2C$}BP4nab%SsTRkljBKEwcqhxFxVY-h=K}~W)?Kbq zQ0t-F+}R=fP7c{#|J>r+rW6ew*pefCC_E>vh_)qb67;}kBJ0-{>60~Q@s-kjBe>a? zBWEpnMBC(EUCB=m49rXANU4|3i;NQ!rsUjy@(C<2>cplUSIU9&#zt+#861Fls}FIF ziae$a822W(5;=6A0IlPgoo5QncPax3w6M^Tb+2|!38;&kwScRe zG{==?L7)j~(u0H8o+X@*Nhw4i%#ucaqjs=mEek7Rvm#mB%T9MFOd`_lt5+R!0lOQw zlD!aho{|nCNZJ8o1*&>*IqEXdDQc?KMseP67f;##(*#w}YwSEI9*b%3dmRJ@UG8bu z&GCOpTO0XHqI4JZtZ!wBf_}2&3b9DERqxB|yMYFerwJ_t_?YNRxpI=Bfqisv$)`m@ zdvhHc=~H|n=ft(wjzWZKULn&(?jbcw-NOmGNl?7XXofdITdps^oP0JQE`VQpWhxRCw2MN z|CALv6-ylV%Vg+8^%aE%<@iLIGfH-%%J2Shqk@QDsvb#{pGDfJeVxhqhq=scU4aKa zxZ<5#yz~@h_tjo)>u^}p{P_Znk9UcWxf;f>u#SI)Pl=Adyh{VQ5eLRs+~}lTMq5>| zrUkZI*IPQGozzSz6vXz@nn{%BEfEi;no^>ru4w$Px}!+m;lnIL|+M=Qf+iD4eI zqe(y2dlSPoX9LZrm%w=yHDjy|5YF)JJvVLSHwzkBQbhWs&~MmVXG^zwI%swrmh5?_ zRMXQb<#`D-u-s5&V8rW}B4MNx#p|~sVWgK+l(@nP)G^-gtgmJPIpEg+vyGsOwf~io z#DCs3ZNEIh*Qa`kxtft=-d6D{C3z*K-u(QnqRz&jujIx|`YKg^5x&aG)f}v7NLSc2 zIf{T$FIPfZ%V2bP>9s{O8qcV#gjyQ$5dax~W)z`?z4iUvx9@J)ZZ3~O&3}?f+vOqb z{bUR_eRlyFM&b1YI;s`zWHN6ROdO`}X!)1d63qd06m+-U@kSulwwm{kGh{|P|JbD> z>sR|`&dIG};@w@>Y&_&a0NiR+qPwow$a3NSmQQVgU7F-mlIr_ zDy@0km|+qK>th4)n{LLh`=sj09~MQm&86Icn-7gTS$fu=R@r=pCL2 z4P#~g>0F=Q|118|{->)KjUZ5J>Gr7SEt(&Z5nY^bte3u2CiC-N-hU;oSKq(=;|ihe z^R5RYgiayKP@2ew@cv8H5SN+2;Lqs4F8b4-+s+1Sdvy3deO@}y(rpa5Pfnu{4O|*c8rEPc)#c4 zIj%h7y~1@TBAL_s_!iZ>VDXWI+wXZG?wQ0`#+7^ekT|g*c=}~&9cB8#MqcSNCPj^( znD9%e=u0Dhzu1}_J)Fme8bN58`@OYCS&uCrpp7y?tmY}(@D9+o^Xb zwSoPq?)_~8^yl$yXFgu&rEdp{UhK{-nm_s@vIx2{^-rU2AlycAh_1w-Q+>3gQy}v$ zF*$QlP2ae_8J&g>Wz6pW@?BRAsBWBOTWjLwMOwF|iO-h}<=4S2RnvJc^*gnZ>P!?i z0*hGH^chQcJ=PF)I&PImT%UBNjGn~hcK&FL&hgu|V{Ml>Jqkzr#rX`I>OVqNm;+J1 zT=3B<1fX^}KnmO3;a`(sF>6$O+5x+hTSPF*VZ(4u=#v@;Q;Kf|Tv7dtF@BjZG!)Yb z<@aw-T0TK#hoiryn_EmfIeTNO7DmWj2(|^&u`a%<2ZX7n^Wl*)E`Eb5sgLuhVu#gb z$>id?3aVwf;f$rC2)xCC#&{M9@eL>{=#qBKby5Oo8*+DD=DZannj%D8J4qO^PQDZf zo}a7-$^8vq$ImtiN^j)tYzXn6niv_>&|StlTu#$7GAL~hX<|L=n(NhsS zApiblPK((as?&Nybc`254mqfmdcnCH9N)ZGQ>FJ|OY*7!Wnm*Au!7KJrf z)h)8hnj|c1kL|Iij!Qn0>12}@zF$rWX#!6HUOP)KI( z6nclq+Yye8&Dd+Zka71S0)=jVgpO$X(3y7dZUD|sJo&%KGh12TnW;7hOUV~M0Cy?7 z9iWfLRM;2ds)9P-%jJOead02Egz*s=;8HbUAIHAv0~iH%!O(n)D0nfZ!^`NH!xai6 zaPRsZ#avl3B|8CfS{#X_bdYBXVOmiLC?|fg$z_Q;~ds+|#tlTXS73Y{p-Bk9rcFY+**aR^hpoXSN^&9zomzarn1tekF~ zH1SIaCH7ikq;`0!?@>6>k(XYFwV<;RLR-OUgv8+tiGcDuwqpZ=)kJ>zc)KVhk0?Ud zIR%Ui3b_J@X^YUOQo=IQk|Be&4mla2rTTq3X$}a8gX&7YHjieZ#=r3fX@Ejl5~xZr`atg!3;iM_?q5_tKMC(7Mv^gl!?WfjxmL zH~Qa|inSTQ6j$DjZb@FuWd;#_@_(gXkFuTae{FX3w~BjrzsjA#JmB1A6R%2ES1@^U z#16bGDRsA=!pyg6aZXN-i^im}UjjqFavw#fPath;AV^vDAnxGNLl-cxKF#%r?4j2XqByT%kG zU>-fiZlH4RZyf!pC^65%CYq}oj#2g&v4IG2JWG$5Tws*VMs-XhD=F_GW`!MMy>tvQ zJ5N)kd7|jlHNl5b*<)kN$5owedFH@W*Qduc>h$|_UfxAwLuqHYeB;Xq%>33Q7fn>T zYtSj8(!3}mBQ6%Oi7nez55XCm6DtOSilPp|#zpOrCS2T=VGNAWznVr`XJ`oEK=Ltu zPL=MI)BMAMP^!cB%xpznu$%g-eA;55Y5lZlN2_6~PZvWb@I)^R^PjJkOQpYAfi2u> zj~3MFWXWMy_1B^kJ=~-qosF>v1X{{Mjp#${?cN1m(+zBx>%2}dXGV%HX_6gFnXrM5YI z%jsGW0?2TkGL4dDXDW*VgxAU#R$4h)Tf7fE!$!yn{FqfaGh8NL;OXv|@;{USF#bo} zA^P^)Ks1c+^25D7!w!uns%h`zcb? zIguDRLDvL}f><8#4rnubj8trFDf_UKfl#hAzPOftn@tiHx(O*Laj=4fD@wxTiuOp(Vg$|cnrziDA7)Uq#_ zGrgGIECQT;Kw(bK8vZ`Q<)zHZKOlI7gMDPw`=qdw9tMHd=aWPqk3Z1l26WQSmtI|{Hq+ZtxB%28)(=ORgH((QVgt^ zqchCMD)%$X#duRvJu;pC8J54$6i*fBkLRw_B1hl@o7LT|lV)y;72}A-c<=A5VO+QI z-+yVQmrN%_g=^02MG>7AlW4e#fV70alRXIYD{AHCg`}~#rP&P)VI`p8&=|%=EUyrS z>+Y~w>$Wl&^I*i#kX8CLNXz)Upw=yNw^=xahT1 z?2a|mLLy+`F~0D!4soTB1GP}123A$?Qd}2)t9c_!1V3nr;zhZ-K`dZSi-i&YvF2C^ z2a_xeuK>rP^C;)u>eSs}FElm0=*};~DzuiIGSEWEi8Ztx3PJcZzrB3Q!rH#mU`}i) z?=G!AAUDnFV>W-1yU^-2ayea5zOjN`!D(N?i`-K0mE-&B4EX#m49E^50Kd@qR}+92 z&5vGZOdk&7cEPl))f1|?ok|o=j>Fzqt%PPlOI6WYYeQN_jB7sIa=M} z*|=y!@#C9ljkup`?l@;copW6bufBEZWRV#=gY-lZdOErZ^JCe}UUqxNTc}w2B27SO zh9+^nSgYjA1W6Dc&lnGJ!Ke&d#6Me4Dt0Q5_LcBNM!|m+04tb$2rV;Ukn>fo#wF5D z6}ZYlsQ@-e9%#Zky}xWtQU#bk-c8D?0c_B`ScG*swd`HU4)l>6;|jo5$UMtrbCmiN zu9wxnW6Vn#Cz)hl*QV^pmYvJRGANY9?&yFg=+m2+-z}9EFL=j+8)YdPC&F@U@H)R8 z!7mP8uRxwA6YekFU#dO3>t(Vv)8-hX%#+IVP1L<@tE)fYlgryVEs{Nh@4UwrB2TtW z&p5^xBKIhjDT;K{xrx-W?Z)+?1zECNl*sF7OwU4gHA;TwO@^-bKf%}k2~sfFO|1g0 zU{=)#QQp)_M*e#piJQ+@~wloe6rtVlBk{;xO-MoNq zHBfIFj}+OU_T!fkOx=2yq!_+>MrJ{s!aLaTc#%c z-O{;{bm^4&mwUMW_P^kvbx7rd)ri%8J13P@8V2ksX~>)0czqdI!W`$I#D8fN_*OvT zya|RLKby2FU%<^LIPjm(SR#9ur@*X;46x`CsXQF)ni=HssAOqrChRR>;97qs6jY#F)h&UL87K-<(-xpM(@HrmOo3^@ zmL-X0%LYt#L8nMBEyBW~!L>*a&@&P{?F__Z9JegY?YAo2$Zscr6_;$WI z?fzbWjMhP*>1}ePWZ^kChOWa&=AsL(=l6{S!A+?kA?by~nvdcT#vEJ`Bms^p7m=0) zmg2@&AA{APWyB(fmT8kr$<+BItYHvD`45ua;jUTU5{peT$2XflR>Drx+DdUdNHxf+ z0v(3*#LPBd?VlA0MhAJ-&|CvytbyC^PaI4qt{fYW)1R0UT1iN%G|M40m!n%$9^Wpp zmF53uu3Lp>3a?c3j^b;a{u?cV8vF( zz%4%YAZ(BslolsZ@GE!4Am})$U@_fCYTzq2Ss;rJMOxi)3juT5uZQPc3zbC5L|#75XYk~C4lxoLP{ zb)EG$qQK~j;JpRJWJ9GRLK3$O7mbD1WG@s_v=lkh`#Xd1bQ1?V%_)Nh&6nR{k=ud^ zA{O5^CKr$;J3`Q;i+?cB=bQyn+oUf!{8cYDe;(}>EAZFygi0BeTbLmi(nApkP zJdsDuzCQ6bzpkx&Q${-1Q!GbnQwqP6FGT9)8K*+qoZgc5}SieXsl2CkR7r z!ZV!NX}4AhT!<5df2#$YBT4R`LRVo_#HecoSlx}k#e*!cra!WQuV~p;>uU*EkylOs zLQo61FxKnR1%3i89%4av;PtlBIRR-i?4+6EN^$#iV&ZEDs@moYYvAinUm5~6j%0Vj z99g04C$u9;5G2LvgmYTs9R9sEB$6%7?t#4_b2-^zW202}Q;5SQqJ=x4yC$jy!y~4J z3xZEf2W}NMF(VL2muYq~DEPs)opZS=0(?b62af-9TocoU#!5sB@1R?r9wJ-DivOgD zL_aCw=}(GS{F5R|{G^Cr|5u85B$vIxtnGE@dhr$hY=X(<~3oO;S^sv;3$W44iHZexYWoN>ysFq^%*Tv_7&>F-hhAp3cpn>5TYEXvR zDBYBc~t3m8U_s{f(IWdrFmE0p01fm_K$#m za|{!y9`68ch$TzML+MRBl8lUZYpwiYc%iw-KqhJM-3Aj{*fxm(IV?LmEGoQDXPy zH1d$i@yy8-M#$3zjYyyPa%@VSY=_kSkdVR@scPJ2tDv%nFzX@m^fi5Gt$`lluHtB@ z2YqXVH6QG*1pc64L7rs~;c+Q!bjQ77UP)ByRqykq0PYN5JZ#q^Uhzgr%jT81V+A#4 zih~~}TMj$XnwHtmGuMw>w9LP!21Y$4oAQGuH;z{;@&hp@uGp34@tF2&#+JN;?oqEM zvNc8ccnRIzQ1b5|lq2l;7i-MF$E16&>U!^8w3HW)r6T>rJQ&uOlfTR7j8Gqhiv~}Q zIgkJdRP>i3mmH(;LmN{N{9+EISrd@pZb3H^Y3uw*mJvRS%-PhuB9E=acfm#Bm|}os z?TG9!RBs;Yi+fu7@EyD8-p%OLYlsW7?@8v^q>X1M0(lxaReRvuidF|BM2jO24@8Sw zPXR=WFn=4ww*B$_U;)6crS}+EAgoYndk#4iD@xX}cSWx77dy!IrFsNI(o>TE%oEVm zzQ*a|rz1nM5w90)s zEOYAv5+;WY*JDMf^5JfT0z^XuKLQb=UvUVX*F1m26}#EqqqaJ60?W4FH;Haa`15nF z1Y2Uo9mP_zc%SdRGsuoh=Dkt}u$4EmeQqQrb^jJI-M5!JJ$(+(*m+61BTsor8`nU# zVZt_}7vZPBrO8UU&D}dqHfCCeFF=Z%<(1YvR{@x+iLjvjV~q(AB`TPTc#r>SdzDN#1>jlm5lwDaSZ5`z|vT_x^++ z@jqeGx;c~#MHJ9EB&^JG6wpr-%$BI*9Fkr7Tw?>N?o!rmNXaX2#b>2c{$AT+@$ zS$bz~B__~1BU^rp;aE3MoXdpd(Jn$~mZyvfy-yB#I+T_M$)FRqDdMGRD7v`R9h2-5 zD2~l?;^DJE-TsPt&f^U(UAUrCQZD*33rjFMC_6$S+>8^ZX*Z82BSrc~!+5$6-g(Xi z!3rMfaqA5JU|NUr7t*DoS%>m^;Y8aCG1ledRB4MuGkVFn#KvV<^x{P4t-Rfz1bHPt zkLaZIhl93wAs>>fPJRI2v4?2g)zRmO0Zx*f%hC*p*qQr={_i;>?=ep`+2F;#6v_Xz7j{Mk5lnG5fWlMeR1^f}hjUz(&- z!o43&wap?Tp5UcSg8+#HsO8sxV@QFiYIba*p7dFjO= zey|**zsmYtq08m>!f9H_zwN!k65pzZI)3t=g_3Jqz4K`NXs=BJMPOBZ=1`G(o{3;8?Q!I1~93=pgXDG!PHwPHkq35yg5=eH1t> z>%2-u@BF2>t~$fs&-J*ODy!l8=#)zo+1CE(-en#2vE-G#^S2?RI{E+X5&jRk)oiRR zod11~aFS=e2B-bc^;?vm9wA(`Y8P-H$iA^<4hrT7qz6l*1}@~t!FOO@R4cJIcS3ba zJ!lMFYKF_2<{X=ac%PNF8*QnpVzU^-A2!(m2Up&0ezeA z`}yhcTP|Q|J+1e3(oX-&{5^W`UbI`1Tqp_#mo8`eqq!NKE~jxYy3wQFS2AK~uW2!J zaNIolm~QTLd%-UC3j6h{d{k zh~Xkmw$C6U?*{O;p@~&++*W9n))6dojXH}og?1B#qOD~5^zcC>A$-vsAQl)cKeQZlQOoGL}vr=E#5n*6pgmsZcH ze)OIJCbEH?8-+k4M5xb1Syh)A-BmL2kJ)L16tB{yjEc-p`IQZ*j_?kjIu$*G0yLp=4{^xqj0XGROAqHwf zkGYLdI|RmW}CM(iA(r}o8M699POd&+j5`$0(NeOg=id1ibLs%M1r5LEmcNJYNvWK z0Hcr`*j3h}l=N1mR@QP{~sJc~C3coB__#@eR`jKp<%(bzts_dVe_zOcMma}`x zifw`cczT!TzjOQmSONn-^W1F=X+tHt7C`QP)@3RPie77FGo+$ZS!_W^W__yk^>lZA z)Pz5!sliLOpls(2PhsI~V6z7BI=)M|5DBL8b~C2ApE7Y=0P?mlAFjPcY6`kq+rB8iB~r?&BXt6JP7qSUX7$GHPDFR@ zDG-{Rz&G)*NF6g@XW2*XAYxT9xNwVwZ3^a#h5P3a$Vg<^0cvn|gbf)g;9R%@rzneC zqbS5fG)qEtt1F@czbm&SypX2vzR7w3*-Rc&#D?fK#Fo^U2+and`$sCTRui%O5DcZY zfZ?@&VEIJ4BwrNKS6YhPQdA!~O|nRFF1R|12SQIpg$Uv(KrQj9YN@o_a+X&D7DP)P zP@`1{P}O=zgKR2xF|*7(vsrv970Hurj+Vx8#jtq>8a5F<$PghRUa2ly|<7JxRnOK_Xx%=%uQT}$)sa%~qSpKFl247S?Bi`d& z0cV`guHjk%XJ_g73<4L!rIM=l85%FRKt0tR+DFH9Z5I(p7kVwXIJ`3Nd#HjnAvTkP zR(e*L1W^I`BNJ^0sOAd0SMWi$2-wIi9*>xv4Vxi?wf(eEuzxW+Ja`%tdb;=(kW)NS zwkhQ_dJtr_B{jZKWxb@6J>4`an^Jc6NJ?>C4`Nka$~F6;mvZxN*x0W%YnF={U_OLc zvwTHX9Fdd%f=gv~to-@?)=nx~BEjXdOIE)2NER(Bs{M&puC5@Ib5;7U*(+b-4GmbD zkE>idkxO3k8w9qc%GO>h;nr{dq{6aLzTBG=+XP?d?PdD;JT_9K9qtuNTF;wtY#Q3! zBJQ8mlYWm8#NX8#E##8LjySa{s`LnER3?d2N?It@C83VxWb;5HO|tcdS8Ou ztgcep^^sbAhL0W9`Pt%^t??60v2!XC6IpZA~^rE zGRHxsoZQ?P>uW4AatruyYaFv-h;GaD0k`;#&kj9>_k9ViZc^kTxu<{Fj+ork&V zwY`B(Q|csvW83tYO60Uegnk)EIG8r7xAYAqr~-Kek0DsJH=7umwTT^w<0|7Ua<{Vq zw`;WHY#PDfab73I?54z=|6T~+CI!N{znc46p>d9L<;Z9|gvjY!RPB0ll&{}Zb<0NV z^ifJ=d+iKn4lr36xmhw;n}Y)dEM}<&Vqf4+Y}rd6=qlH8NYfW0u#u=Uls5Hn?8mW( zd=Bh12Q<>Y@pL3_?5{Ul)6_e5e^ZCLqfX3jT7RqEYldpeLRw~rsn+kNg=Yc=iR=FI z{b6aH)nKDiSJP?#a*vhdb!}coGoQ^vrSmI_WJ4bRJ4C7j>ppBPbImi2mvImy-$?dK zBV@x87Vi?{S#mh*aXUydzbx!4e@=KDAB%s!X%EK|)Q;`2E%-W=_LsxXvSc%}v4=PE zZIh#a;f21UK5huoV}$0s{r21jG)F``Y~`9!ZqlJiCS}np8?ub3M#fS<`Zzps)X!Bc zI<=f>4Np7baxhvvYc_si12`y4c)j(B%V9HFU;NLr4p=Nuao+f91YE3XpjKkL29#?r zt%^bQC$o-Jh|V4?Un)0~u&D!`N*RTnhhVxBY>klhXZo&EDOg}BGsdU_mE{{uatFKq zxz2ahaj}|@IcNM~V5I|9ny{syC)ET*F1tgE-C&H)!P7lE?Hru2197o`?Zl@eofV35273 za&fRHQ_9)nghfrLbG|pabc`*K3%b#PBik3}Xh!q}4~%A#pq8YnWC7(+k>KU7~2e=jaP}E`_qHQu;;5xWgT=?$)L;u5uwHes0j(E8MKC zs8>$y>&K^_Y*uNk=erxV{Z+)5k)nP|f;`fBOe4xzW3NtnXo`CiWjlfn{yyJWmKPqw)j69I_15UI} ztLYRfXMKo2^*|g|KguzAByBw;h0J+ znwMBMlzzdZ0s+fHD6Ioz6i3A;$ON8{nUEmWx-27g1|75p=S{XIIf2OomXuKSZ!n~c zz|qE-N~jpm5TYjosew+1KA6UQTrR zf`h=`<{G^2_E&36!PP1j?Ga>za!_3qpig?gOAUnjXln8YO5NeX&2fMy z_q-$^m^gvCLgkL6>LJr$JW+4qXlw(T;qMxoHj6^K;n`F)MkLx<1+L2mlv>)G^l$;8 zECq`r6-d`c>R?w7p{n=S{0~ALUYjw_C+z#Lp9r3WKHzcagVMG30{ z(M@U)Km7Y#^18R1YDoQjvnN$1wJ!*zXdSvY^?+@)*RQi=Bh=AiDmW|b0P$0_;G_to(R5O zj>UkVB}_fmU?1hGH}FSpX8-s#rLP!nxsGKmUv?P6%y)PWJW!=7iz7MWfNB%QfdJMI zfAn*z?`>8`-dTY4!U)hoMrB>BH7WYo8R%i37&<+{7Oq~n;`27!$$k7jc^BqhIG=|J zP8V?pEUx+0aF6M=Rf;=&vYT)e7uI%gOI4gqYpMtK>9&z#bf3Rpz>kk-(1V~=K85*F zX2-d3LzxxBD>$dvMoH-i|QOKz)FpaBt`J+Z!~|WU~5y^FBZIV#2&d9 zBL8#hcVws9S!2pzbH3z2xJ{u=OZ|CG`lDjc=0E+8elk~XI;1y7;$cX#TDHd;{Akso zh@WeZB}0-G@Ol=8TauPO_l9ys@8yxWW3T;K1m#;J?}p1*`qFX@gP)FW=70W9NM>vi zs$WjF@6#bVR-b>>b@2?3yI*+S9tIxT&LrDWJ}>GGhaPo40Eg@1MVL%xPr%=MW(tQu z6ytjdN9U0S?8p}8fW9akJSFHs8i3yB&@n>&VSqw*Rqov717Hnip>^` zFlgqq;RAUwzIgedb%_Yc#;WC4)7GahNfm`*p)S;U+l_eXJKbP`bLVjW9PXF(`p*&N zb7LCQH%AJ3VcnC86wFWCGgk_la7tuh3DrEEhh4TLB*FM|i+|bLe3vVQNFbtK=I4s= z=b_;8rMbattPm?^e?Qm1(lRKFZn+W$g;J#h;T);NIWH@PW$avk9*4wNv8OeTV_M z>KF>V4f*J8D}7wWh|n@84~`(A9{Ah}U{)HYp?KODGTwRlK&Ee^GhzvZ+jEXS z{4q448X)=kjZFk`-A~4Y*3pgO11}2pVTc(zqz3OnVOg0lyYP8xk&F=TuCsROqdnIyj+nNH0=z%t;x5H5`1 zP9HDz6B-@q8jmrjg87yU)oXtCLVUAaduSPP-a4U3RsvN(bNxsN!6ww9#GJ*`IQ`XNI={|@3&Ro~7=0I%1ok_o zAPMapDb-4!{WXI6)dG#?+8?-#bXOZ&Zvk_)6^zoKoVG*W9oGZ(2i~1-a398hzZxC= zi$zg>=fr7>4HlcbOJ59lqvs|!$(=b0nWFIuLXXErBUX&I3)}1Pu4(VSu}F1xB(Kcr zlZI}tDTXANL+(-xs&v9j@6_vrwRPminI%rO%<7%sw7G>s9p!iXi@Z@tTBO*(n-%6FN z0nwRTsb@E3xi>vNe>Hn;kB_O+wI;IyYIwtUpc(@eg4Mh6&>$TC+yQRI%+Cj~zL!}N z$9z3+_T0Szv0VY{70Md>qF*p;`DEd|!LLhhQ~ZB;VOjtGIGNa4SpSE5;Fj)IElx*l z?{!)EIk;G&$S24ENP{oeDm2^yaQ6fanmLHc(`O(!r4mt9r|&x7a$E!KMe(#UX(T@p ze`2*2dcoqit>66yz1(M0$%)oR?}yv#Drv}t)O6N|eav5bBx`rV_vX*9=c%19-gTee*Nyp_-{%hOFzwRGhMMpi z(d;{7A?tNdsb}U_o&Wae$WI+UpWcsunQaQKbKmVD1GZ}x-3gOVuWeKKygqPvwF5)a zcMh`O9ll?AumRBx2OwELKHAkMaYXt&o^BLGdV0Lt-G6Tj-iShF;Z_a`_da_t!Dm8N zlHdOhrTi`E$^b09`#U_{0ncBPL(i;_k7xhh$V*Ybys@RdpjpfUgh2AFEv%R6x5%%@ zjMe3pW6uYiYHG{i49D&?tWUy6{7lF?P2x_XE?a<%UzSJpB1d7|y9j&umKf63E3_UKIkdm!BF}OMDB9j%J zRa2$3k#ZeewiS2fTr#0)yoqt0XCHhxcGRYh*Z*l5C86G$_~@OfK%sm~GPzczs#OTZZ9e_p<2)Al_*|8yi=3vg@0)Oq z*f=LeckrOYPTo~I)ux*O#|PwluHNSd%Kr&__8mx^cNZ3~ysll9a$nISqa|N+nxI=s zpk5Rz31^PV2m0m6Zr0hbiWidV``3w*L)StE6!F1jAarDQX?H(WdW72^NKo^d6I+t7tz$@&OKhCif-TVU5p((XqfnmpO(g?+y>Pq`(5KLy$b0)ELy56P^ z`{=*h+kt?xzUbeAK@|aLwy+b!Sjp-o#bBX0$KHGQ0#w__C%y>V=H0b>!FaNf$q5uH zthlo=X?hI;BVl|unOp{sCvIi9j@jNAl;M?*7%Tn+D0dQ@Ig~h@UI3%$$bkyZHNheq z#P97#-R5@mju)53_!}XgzF4!}Go-V3C!vA&n^R!V1DJ2J8$aUYGzszFGu?caeHRHw zQQNHC`m$aJS0R(+xcGSe%%GEZ+3ea{ye# zJ3L_cB&vFfr&-{XPN3%pNJ~R+9YlU5tWI@wt&hd-F(igj>O`bFoEk55I1`9gau^mH z4Tq+eHqCa}6PxTVr@Rw}6 zH+VEfkE~g2P2oNAS}`!CH&!xLwF_wEwX5n2X1o}y*#jiR>`~D2w-u!UUe}Rw4|u3s zGoLyvaE2)_NbYi1i+;=mb@*IcWvFkNKc zG1s+&1OJll)ggD=`Bx>~9$=`I#xqn%0oJYHX^1%beB=MT<2icK!1em8dEAbP({W~F z!9<|qLk{&wY5X+|lZ4FFA-xia0Cd-kL@4)sU`Le7n!C2MZsZ=xlC34^a^Tfi()46j zePFsEKUDXMg?~-0fB&p^VAOX|bK=g3evSQ}p`!kBLRSXQbI+)~9#SD2B5n1Oq2HAD z{ri1M?O&3l3;biq^=@))R)t5^@;|hHw}ZYMb#0FlxyU^?8b^9lDwvit-Yn{c%^)C_ z{L5z9X*ek&uza%fNA_SNNr6`vg172I_m!V*~?8pKaTUMzJ&3k7`Et}Mg?aGKN(VhZL22*p0QWEl1hOLSlsL-Pn=750O< zfSeMddFjjz^u@ERg)tr`dwaH@e0$XEeVp>$Y#x>KP- zNN2=~xQOK$Fzr0|Iw><#$v?7)Y%~EpQY*CbBAhLNJ4NrBdbit*L9PELh=Sh$Mq@IV z7qhzq-8iOK9aEUu@K#K_@=au#9q9AT&=NM%A6^907!u{-huBn)sO%%g%7N|VIArxR z=|p7l>TMR8qI*`Xb|&Z!^{lvdSWV)qy*rRy3}ryf{Q zcCWT5gyUI0$Qm+?&qihv?8u1r6IlrS6vLR z<;zl0GfyhrI*1y$-9OuRAH|ytTlfM(z!)wH--Wq4)sdD3L<_iw~$n}5XkaS0K`-wD*mpDj4E(6m$LaX0T`5%mGZW+ zEt8dmh*ppz&?xUiNZ=rZhQPEY{legj8D+-(ATWxNbH@!K3bk%_66<<(oOZbzsE{et ziQ5iO%o9b!gtQ>^lQLM0H;~e7O*|$3fF;%kvQUD_x;e)*8Id>%W}>8u_(=$p^-Ew? zC{-cn5Xe#y6?WkSx<=0doqs$UUDXiRW-u~hCI;p76d-}j@vZ(L(bma~FOOe?!g z>0of07+hrl;!|xA? z-&?(?1tv0DqXhRS+3QiJjO}`|?l*`~<~1wFVNJ>)12IOg9&_Q&K_hD?HLsWK9dxeV zJ;N;762wvk#>z4RN9&QPr}H5!EEki_j@?33c7Z}mBC`mV?W$ah^S8svX1th|hCJD3 z|2j|!*rQoCi*qbb;*5#-F@7(G?TcB>>EekY;{Q(RzSn?9PZMe z;Hp#?d)BGeAoq}qIy-;o{>Cz@L}-Tt)K@$21*XVUPRt|2*OI|vPEsUqI=g@3w2i?f zZR}e+c`K;P3A7?Db*l_y!C3;P8r_JMNbjavMKcM&{%$L%hZ(;ClQ112`3I5&lI^MI zuVCvTR)Dw0+;ZB$P$UzX@ca zYm;;P6$4$0(t#v!z7PUmEScjjiB*wg{W}NgVB-|wIlG;|m+aa6>afOS^nljfEH7)Z z+WEq02*KWM=IH@OjPHU!2Iub_Mx=baiOW#$)Ja_d#PDN*?!zfWEN`=+fO3L$ z{Nb_1dojA`?*#sKe0NIR3K$?g5W!}>iO?R;aAS7nfeTAw=l~(rJh{m3y`v$}$kmWK_wXb0Afcw^D!I9s2Vw--;My#uS(t91yw)x>#(Dj{% zyKc4e#n}&Q*OvKvtA-ZTFWl=7Y2$_^h?1AD{)e4=r;{mN+`dPcqqgvCB#`iH0I+^z zIR@_o>sHVz^()R`fFom^Y7X%IPDr=O%35sQRC~#=@cjp*gX+R1X5EZH@~Q-#$ouJ$ z>Z(AttVnj+a46+;$pYu-afnbN1`*`DR3j}gbqe4c@PuB!(eONS%(MSb6dJqg_b0JgbV*VaAg65)z1JTx*TGN4N{ zp?Ld8g+6>I0@)gW@y+^+);(yo=a4=vX_AE~liq1q#_KyU2<_>@wZbwkB9*-#8H8o+ zx}R#uB`m0B-j`lw7Dhdd4tsWN*?t-KuzoqW+C36}mDf}qarvL~<^Ae$UAD14@7?KM zB2#BZq90gW#N-BlavHjKeCt0xI`W3Fo7@r_`KHV&w~Exq9I?H^t*m75 zR^Tw7K`gtR^g;>Gx6tfvab7@bLe%g0Gd1;!N0b|MiQ4h(TYl&lSN?Q|3WF#4`PMz8 zDh+knFcsqz=hecNSKgi{p>!bE%uM(qNaUc4zUetns#l)Au>y{-4=DeBft}CC9FLpc z&A@Kzho9y(J9d;+%O#p0KT@_8|C$T)_L^7RYrylv>5zB^H~r+{69kBzA9&qK_Q zvp9ky?V}qzhrn?#iSa6Nc_4e#B}Kbg=Rq-H2PSz3 z=Uww0iCgD1%~?n1);|cV9^1SzxZlIQ?OynKIEU_&p46gYgnT$EUh8JXQ25ta(_O-} zqpzPY*5tk3kHmp4V{1F!3~~dHJu^k35hXIP&}FwpiIID!6>Ez)w5x91vXTrt)&5C| zm}|`B99xd=o`J@0+6Lhxmb2RUKcs$h?&p7YaGo`5xq~*E98!1KG>1ndUI}xvy6X)J zOLFd$ipgR*$UTJ65OOkivWA+Ri(ig{39496Ed^r`bZ+x=e)Gm$Bi!k6ACE9Xx%MVJ zrK;T^Ia?h?$|*X`&rW5CRv+v~G4fAd+=QqhWIc8Fi;*`ESpUi#7i#e% zJiYCC)@CKGxY!a~>(R;zMb(lT^`^zWp3iwK0WttP47|d9C8>Qqs1U11Sv1sHp1dH^qWb4x`H|>a#ckzO`sVbA!GBfyZSE;A!FeUodXRFAIRfPtiO4PM4 zG)xb)@@fJWzOB6sQT0bfYo>N-AlYG^p#a-RY0F+{s_NY~(d9YI%j48owo#=lt*N;i zt#{gx(W9R9)bIUCAJrRWF3YWTgIrw0qqiLI)2M&e^O2Y1@uB_9+W=A5gXPskF8;cv zvu1iz7HwOf?ZIv=Lg=RK07@xAeT~UsOvNnLxHdmK?5}I|eC9*9)9o(Ay1MnY{So5| z&|i&dj=`8T^;ucCYD`zD=eVBS)LGS_w=kDluQTXVotp0ZMilCtuF<}4qmQl*N>{hb z&4c5uNaz@D&$;=?SIZAN!=0?7448osMsC@We&s()0(oW_V|wRAcg|0kq!jI(MzS78 zL7l->o1(WU%tIIAyKGUc16e(n(EeW`StLL9d+_=>q(=weDqO0=pOvM1qu%w0FqoJ8 zR_;-3P1aS+Aamk|)kbDh<8!!NME~8$So_as{N z{9HLk_PMtfdOJ>V?U1D57Srb*(&YNicebN?B7O_dLDLlJ^4RLbJ@Xb^hoS~ak;RR5z+u4?HjB|Z@XzGk4{8uOK7IAn&;7#k& zO%_S+s_>sg8JR~_f$iGF$7jpfPKgR)jile8k+Q5_lH``CiWwfjWx1S1R#k-O601?o)BU;wYI!YD{DxVss zuoxgTp0$iFas14MQnYK-;OYN#M`8;#E1@|`mX(x}?OzEk z+eFQ}lZl9}v9+CTY@?KI%U~?y^+elWC>p{h!!UxG*-YeB?F3b0H>xU!tJ5;{EThT4 z3lr|BSwzKB=$%U_grsRgR+Ru0LU5i>RMnb@0C0}H#tLT9{?#|&yxhllD23vFk=4#- z5inhqy{;0hB8Y5PZ05)6n{v@vsRSdjMTphTgy!LUtBMz5e$px-B^+L)(r(n>jm*8G zwW+yMZlo#YFp`WZdlUl&A`F&I3C$9n3B`DNAo_o3mQN08NNYpsP3a*J-R_i8lB_-$ zd-kn!|9FqB_TT!EUL=!=oH}YV=l%`15SPnNoh0wwE7f~jJ@dE^hB;UD`&{$fQMPa_ zrLohV@YY8gyFfmsNe;PA!`P0kVT5o(R>7Q_gY(vgxz|qe+c93|xiGZ9AH%CUvVYWI z^}lEkTE}}Lx_qIPyhf}?xAb0%ZpPk8dibwG#~2Jf*wbE1V2{LnzmymN$!4ZvAhTL7 znCqX=P~SxDXe1FjJh`YJmIs}rbp#dHf`Xcg`fJCs@iO3R!-y8Qk9Gwq_|kwL5Le%3 zIMo;0Be6cDSB%R~yTb72Ao%C5(pynHCD`TY72HeF#i3r>nfmBM($QXrYQ`Kqg^UfH zZH%K062?u_(TrCv=b*+!_)WTD7&E<@cPrQlsK!s0N;~M*r;tASG%HJ^&ts@3BYE(@ zi`xQ_{NgH!-E=%EfW8E@?XWcewUxgG)WZg$-qh|s|3g)w-e<=#0NIgbIB{2k2UA0o zXXqf)tXHlv`?uI~5o%2C9z|lrz~BKh-M^c8yP7V3oh+m5>@@PEJdzoG-m3;1O#Nlk za#2B$#zVDOGP)>0Ijt@MUykz{w8|H~RZDK49PnO~V_k z7x95z*8RT>8kGAJ3>p>t+6MJr7nBSyttr`1!K+~LzDLiW2^?*&Y*9?vd6>x0N?^$Q zke{?9R}Ghhj$?VH+k!^LxP*@Jhd_~ut>MEG+yXyK(SebPZ4o0A-9m;XwuFE30mC^$ zL;W&2MnOR;67%KKVt|()+yb+!oVgcz@VW$ zBh-=ynf&f_{m3Z~e1{m!0t1aEU+y=0ya7wIP68KxbV4)Gh0W_%V=T9%fq{=no7bad z?F#6gwIm2R^Rm#Tg#z)@H~HWi*5cZ|-YDB-p@Rrv!0c=22_a;8OxY3zv}^G4q~w!j zoH0#hM5)5+LomE@ug%H>M|&gigQ3-V%7u+s@8W|;uf~`U8I{D4{~Y4%14qsp%KG;< z)SQTD)R6u3Ks%)n_(KW3aP#<4TghGoIr82>JIZ7)!GiC<5w~gsf&U*-R`&nTC@Tju z=l|I2!n^Tbl=b=(^|4z3C2|QB3N7Mt(Nm5=fUmzRV`NVzVETs-k3dwixH5jreAAZ< zG)C7fjjme~MX~|MVE-Gz|79QXC&Vh|(1Q0Lq1`#MkP{|=@e4xYOMqe~^kDz?{D&Co z3xABC{<|~4norm!ymy9^W}UljsFWgKJWWF$RPxa z8HY3k)MC?LhX?Votq)t~&ewDs;HI0Th zoKM?9KzHB9=kf&=-6*#FSBI1ImF-O3kbeIY7Oq-3Fe<88-9)})4jBAMAgK;gCksCB zr#mZ-^nj>zlAu3P-Py4>)W4MR$K%j+m*k$N&sEmd1E)^&i?lhO=K-p51ZU`|SEi1% zyk63l0rAB3>v`T_SZu{!QFp-}dEmJR|L9y2)n^&(%FNb;h`$$ED_L_iCB~IVxRJA4 zLU($l=9c|2YY#c41D#(L)bj~2zc`7mI})`>Oac@7e&3d|+t8(zrhH-X_72DW?!*q_ z1Vv<;J6n@kRInx)Y_sDqYzc8ARtl+lR6sI>ijxP96^&(gTp(im0sa3^C{3NH{ zBHyj!*B2`1sdD>Z%2npnqbEce^M;q_GDUah7AmKEL9#Y8aH2(pD2#6q0Up(ft6R#D z?j2qlSZD$4(9*^u6iO$y)`-POV}fCLy^AURVPrtjwftOG(<&DYm^da5DElio4I&c1 z1njY@B%B9^!-E41(vy|+-~|Tc`Q{a=s>iE$`j_-U5valJSkhfpA58khnQ>@TD;rW@ zU?#zUu|P1?0M%-VV@wOzBc{AuxSk{N+=N8KjuK7SF$hqqj^Yd@rb81I-N0tZ++sQS zwHoco&YqT!TROLwGiLj+ryIohmTe9_8}5bSBjv!z7VHjPD}+`k3xevfJ7fr@+3%<= zdJFR7&~qHg0%6$^ZmL6iPvS|`3E=6|tL8xAsh*cGSL;7&SHpORt672}Q|l)Os9}ci zsM&_Z36D6jk+hvrY&Jwu+vsS0J>K!B`RnKi3=4lto)1BDRJVAASfn-r?JDWVct|?; zPT-vkEx&8@$mey-pZFI0`#DGf9ad>Rea->;9KQ=YS8SM77AfzeWvwpvbSNDzG73e+2iUTl%W3& zdE@(2NWHS;?M(0E{M;S1X0)h+HS|bWd2dlO!S#HSpxYw$uTg%duLg+VH#L4=%rQ>< zDlAaFi&_{#oet2r(Iy5&x81K8cGSQ})VTa=960!HG~}2T34>-c5D~TZTfLK5V|7^w zFTD_GF{({4v1nF-vvs=q-s<1UXb`}FH^lyP%Sl`}Ae0}31NRPJQ*u3N2XFB#T^~44 zd!_Q-qi~ym>H;L^;#M#tCEI;5_P{Chbc>DFeV7c8Aq@~8m>rx8_UW|&rV17X=nxiW$WyH-3V+sS4UUvI#x5vHHpm)){L%ohmWxn3rxZAEP$ApboPh1GX zCpE(9H8XtG3U|}}%K8v!>bC}TU92vdMo)+gU)kg|4 z)`eU1y}nef+{Fawe}r!=*!f~r%WFw_Z1;Z{f^oJCcK9H_>pZl{+W+)Er@0koJ(dDx z_+YddcaUD>Kq?G70)2j1X4A9RDV~5G51k&%$#)x0JctdX^Jusm`Q=Xx(d8R#F|6{_ z7f8@)@<-qHyYilW5vb5iy1y<7RU`E0ZuyT_v?jkTPAoI5U@`@TL-wCgtGGLH@(n~5 z@yb4Lgz3UD1|Y&%PB&&EuHHRL`GY$FmDIYO|54ljhxujv3s7es%5g~4+o{z#i^ z&f4s0jvh_7<~#Jl+N6%HMkk_rE{`WaSQgtO*dM5vSsiF9FeULfuyYZGFm;lkuxhbK z)-5ZqnKWy>a6W!Asu3UARV(HRZp7@kaCNWxnGjxl!A~2e$LFbM?}uSxHd+7Wn)6>v z&?%rSbc-`<>;9ElXd7v0*x4rSXkl#F_ze)M&%iwtvpAdjt2eN9>d2aPl708LHWAnk zb9~h%7GS4qtLM!)QGXfOz%H3%LjA)a5S)o5IOcT}ZI1=|tf9_&*^pml(7mTjnH?1K zn)QcW=PQ?RZ=j^+8J}I`iiwsOZfEV-3M!b>d-mXv3Z%$H;{1kG5~h^34At*NP$IQ4z~`;Xxq7TY@Eer! z&rpJY-J(L-hxwxT6^;b1(5mmq{^=ODzr3&DuEi^PhW zQfKJ$!)|1j5?dvel%D=<>a4Q#Xhq4PHYX*SNyucKI?zwlpB+3~ecXIjUWPxUHeen~ zR4%cf^U|Bg6)^i!cn_=l70M+8DvNBf6)|5Nyb=p9YK$>UGX!^HM?XVif#bS0y04qd?r{G&8{;d+1fXvc@a+^xR+q+KFR3 zIqTqn&p5jBBy3@v>Ae<(~X4(FZg#HKAMcpK-S22EHau*Zb2n0vf1b4jf!DGgl~T?=O}yP8nIvP_40T}By9<`KbU zUDtV*b_*#wX4$(=UXmCTl0YEH1JQW*z3;+f`!HD!x>P9_6v{GW2;c3FS?tKcACZ^? ziihs$_2BI2MqO|9Ux^$!{iCX@_XfCE?(BT=1(8ORAI^DcY);R}6&<#=g|fVPcb6P| zV@~lRqlCBf>bh+B5?*Mhby@ot+Z3;%DPhzY{XXa5Ems~V;-SPiCT^r)F0BYiK|JUZ ztt1FSG>M_{ALhrCsgRNg$WLCI?62wA4LIs2u}{&)42YP!uy==8W$`zf@y@e*D~4?n zZtc=JPU;W^qt)NMzCFcB|JlHB=^L%S#51Z!Tz}8CPkpkNj)#gHJW0<@BpJ@`1d*h`+Q zw|9(aUQrCY>12V7%j7N;{>TlczEvCfW$w8Gtrlb2Jkr^2l1=0ld%F9^p@?Wu+%?yv zCX*^Tz#RLY*v?-yX}ku#6hvxutVk>$AZt% zY>CNfVSy>`{!EO!RD|wkyS(@1%&YtGr$e!L?$%GbfE^e<**96d!TICf?4{NnDuzM= z#wdry7ai+Aae|D;ZGvZh&}TWp5AHvbfSmZ0S{x%D6sX`TH+$T;{k?VFAv=nSeV%+B z;`!_2b*JVrt{7Z-JxMm4QkHU#akP!j*OvwKT3@`5D{y1IF0bDH!qTmf~V=OuwtedZh&L)Z#hvY0kMdA zzH)YGXw7z}9RL~2U#jmX+Si)eo1y7aM)0OJ&GC1tC|6AEVNx=|{$dp^3=SzdPC=Ly zMMnlIEOB(nwb53Y?#Jed9t6~(zcaT7IjrgRi+1W8je0VO zDy2+NC4q&aIqflN*J_AQJB6N&8$(RIuz{fs^rYCC{BIf1;2A^J#URIlD(78u!x%dcqv*k zmVasWi6(2syQ&0EEVS2%B+kFh6fda>K@U*yiBVoTX%H*O^POEi#Pm%0ky5?qPJw_F zjq4y#pNAT3;R{Th6Z41VA8_toxK0#7!^gkgJOV(O9zLYzd?Mfh`+^zX%z@@EVggZC z1-R_Pqrmk#ODNDB$`KHBU^wP?p{^3WdE3E-h`^NL&{MBG~Zz2M=gl>2brQ`zxlAKD)UayZ8{Aq~UTa>(y1(NI?tLcKBSk4D?V}#F% zbYcIg^dSefqZ2q_i)T?dI*7GcPB^+2s~JwXT9JBfCJ6Dbg_-Q4i@~kz{g@%c*~cE0 zEQoz`Q^6R$=8}fdMYf6bj837EhBkhEaik{PZOHI zr$(mMv%8_6Tm_`SaarN1I%@}mU1T(^e$0CJKpWj6b+4hkbyH5L-XQ7qyl^U4!V1tq3FM7Aix6(%SY%SsnoCEaUM2MLRM1}7_yI;MYm@Q+vgxRKlL@TEwR+6!-b`(DylDCgZb*J z5{&`~kL9-y5w`93^=rPfsa$OS{(d$I)YiW7O{N!5?>75c{h`Kx1rU&ER=^#4sJErp9xz<@2 zT9qCko2z@^30ecASeWB@K8Z9SCh8rfVVpi#W#kT8I8#SK1H&HMj`w}XSM2q&L4D_DHM8b`p6DR3ah`%L_+VgT=mC?vFxU%-iP7~wU<{des+8Byj?>y z{>f;(+>X#PvgC3O1v~j-^skmopRTl1OD3~*R?UD-Oop|!nxZ7k2Cq6V< zIT9%53}M=Zlw?XYddNwB3jj(cW5uO6s6UHH_umvau2S+bfpgSYE)tbq!h)d)=#ddz zh7wS;ZC+OJN}w|d9Ymrxq?MXZJ;(xqfGUhutt4@!p%AhiZ~h;TIy5ca5dl?^BaRw~ zG${ez619b8zjl=-d)6+b^2t4+rsX{XvoQE58H|>z=B)hH=)zm8?(_x-O`pX@O&q=7 z`bqUjJd(elFLwN;1t+^|@F^ucH=y=})gdOhZxcrRQA<`r)^$Nshe9D7I55B&^!Dao~bz-j0S^!kWL*aldmYafW@B=Xk*K`6Sh_sKz+I_ z7Kbd*VQ8mZ$F4@a(+xGk|E~V{XM(c>eh;}}6@!P*Qzw)Q^6|!n)O6@A$RpmkdH%tt zt3V#2@h&vot1v=<-)u6$>2YT_(K%svI;{NFgP#H;Gw|4q#au31)v;XN;Rh}rj0<6W)o?7#)YZ@r~O;sfYpg?!0(rA|fEYs)3r_u685 z@mcC@f$&}JY$16XI9IF1@3Nb@&26%)xyoy{n*sKVceOTrKJ+|a!8(vUU%}Z8UZExZ zjo)O)D>(YtX?pWo?rIJHR_kib=KavAx-nL(?c9A_tzGp_UZd?Cuw%TH84T&M-Pt1X z^1nMHc%GUR8L#<&KijQV+uhsAe^FfbDh}f`zB6G_5k#EzfYw1pcpX%nby#^f!r-`H z5&puQJ&-u)a`_F)t#(EIwD47}Cf>lig)fNk*y|h!Nbq@F5q_RnJS8Waw^?A0%t-_Y zHyeZZlwlN0d5nAX!bQi#pn#YHRv*_IGkJk9Lr@U6TeEq^Fn0hI7XfRU8bCKU|Lb-$ zEG|=|&NVMKXww2z9qc?M^pOXftv0*xmQds1W^ORsfLC8>v0QXcRhxwtT5Lp@Wf?kE zdo4&DZ0jd!4HTgbLE$YF!Q;iMw_L>FwItUxwD81fT6N&ASwQQ1SnFb-0JxYbDq5@; zbSnNC#I39h3|FkmBjPLGrBavV!{7renWz*JFlcL=M=x< zeP;l}28gkea2POxU<0`SKA!1r0{Kx2 zwnMva6MyhibtL?_Y*!58?-4;V==Ylbg1>yGxpGMlvZuZj=V$}B%Ih1-@8r}ssoo%o z;_6#`&O~u>zd(h?s#}DYUi}_72=@fA|-7(>Et~ z@7zzckKLsm_P*Z8c6|R!QLGrpvaXakr4ss<`)3#weP1=n9n|J}-*ENd*Q&Ws_s@3< z*-)&X!m5RD_xbvm!8Sz4J)I44f=ebVyq!}f3v!d+ez1P=ST?f^(fO~8cbF}La##*d z>5T9iZYkUbPAMFB$vU%(b2@SiZs`XBg0kNVf-(d}_~wOV$JJ8$gGM#s{@_^=v z7W4U3>$!U6THhjhAlr^7xTc@Pb-2#F)G3Y0vQ!El79h%UNh3;?8I)npGAeiziH4VB9Ivtg1PiuLBU)$`m+yR$ zNJXElwVM|LYk+=Vyalh;_}0efsAQ(lSur zm{_M$C(q}1cI<-~@*Xet>8GZZ8F5cy$St+#NRV?rsSV!6CT2J3)eb@Zjza z!Qt+Zn)TJJuV&4X$*vXXJS^UL<8>-ti0U#TUij+n zW0=C*JudtL;pMQfiT+``)Mh7r^1Q{;*@AChU7=>B_Lv6aru0V(s?DDGg1DP1&*H7IUMk2_<2N&Y!Mlap5}lXbSDDe5UNk!J3cc8FGgFzt zA(YqX`fOo$m&v^7$Kz6>&e}#-D0IhM^S#}^cWR`kTFUQ`^!;g%94@9n6S7S^%@#?7 zEND>jJQFjFqJ4*G?7Ce8axQbeGKfoe{;v0!*r!+X(@r1ujg|%X!(Kn!b(IQuopqAc zFo+*r8Sc{(i(QbMm7s*r_MML)7cm&!&AMmMNPU>z5y3p2jOpjVtaZ%^eYMtju{EN5 zxsc!XQ1j7hl{}}h&CV7prO2VAP?ONb9@Wyzb>C0Q@L~+SU z7?#_H)eGFJc(KiDucZysu=ysx&;~QxTw$%#lx2~ z!~DH#)D{7*$%W-%P5PU(hUrk|tSwoM{y`QyOlm*r!>+<-i(CU;P$C)gh&s5h4NGHy zuRci#(RHTGOIhK8Sb2ZtaD;DLpMY4)`qB7 z;Nk52(rfO)2J{TSx=(_Zck!yE<%+`lV`c^acw6o|8pr+7lIOzrHUUq8`|IiQ`v-x% zWsV@^&bZV$-l1Fd0HF#VoMFZRshhbn^_Hu(%klBc@iYdTv*DRakH>>`>gV&_Ww&s1 zmuY#QXO4#+Zol7uen*c-JFLFN(d6+MalpWyBHyz1Oi&PP`ba~gW$kS(6lE`hz-LOkgl4{Uec|oH@9xDbs0wx#Vgpq1uaFZIY(Xz{ z^J>))I@Oy)dPQW5kd`@96A&P!iIWs9e~fFXGBYVz+G2xzFD_(8I4_8G@wz?wV{;0d z=4ejc4)ePhRAkOX;fkq3o{#s8pO*}X zoRI5No90TrB&=KsttP;yUoz+h_>o`V7a%QXIf)HDyn#cz*d3WwHJf|wpJS}y2yA~h z=pE9{9UX0hZtxNCLa)mwUjF3O;zzI~xYUn2c8SIW8{#L9&adbP0SDfkzkVhO4Ucq1CP?NVM5e%Ova2VN6W^dXKV z1?Zih#-yidZ3x*IqJ67tu$F~-AF~LCmu5&M@HIKmLGc2LN70LDchSNR+qUZaA}MV9 zdjdv|FMup~swVX-h9Vl6RocgNEHd}!n#kCsV+tQ zDuoc0QSvBbW+{hfKvTL`6E2=%0U2jHBefII-@fIQu1DQrO;EqAri-nPp>()uG}hA+ zeL*)x9LrQJlB+{{lc>poa$S5r^zP%3ZcWi-`lRj|b>~nkeu9{;IarRsdX}nv?h5<) z@%$Eqk#+6{jokw2*=WkVa?MpO-_GO^1mk>V3qKpHHVeWBYM%DNt{HQ`MY&IV?jmM| zD%>$7do4!H%QIm+(&uA<_hUvzpr0lAKI7{sL6eGF9ziup?O4(}Iew{TM=c-Ay;x$j z4VBv4{??%Bg7MY6^A>yx;&eIo51~yY(hE*b1f-u^?;F&c6SiNYD3|S$INN3WJ1{LK z$0mtj4o~vc8w*Hh=ZWcBUSv#y=_9_gLSCoE$!rzC*_pY8F}m}yFEdC<^)B-9LTH7i zeMhGul^_g(De?BXQa|;}&#VDeL@mf!ukioS?E{ktMB4rIgbNzQ&e~$pLH7US_*SNbnaf zklupG)k)-%^X7_Y+j@;Q{FO(N^T9Uh6H=ddj|Co!fj*>kOweG&WZx~d2-6$FfH#!n zzR8ifl%v=gDtXd^YZe~m@=WRPIc0g$B~=PaX3$14UYgQOL9@QB@Azh{O6{xhIfdND zc!avZMC5~WJ8uIVX`z^@i$%S0I}zyT?8fV3g`^4-+-$uiHDxDaW+rRe)7!*(kKFf; z%=Dm_XL|Kv?R(QjBp+-V1EgxFa=n{s z>%i)CkvdPi6uWb2h%re`ctvwDs`Sl+3yFb$8VIdb6k%$!Y+h+#RWDTV4U=8FuN)YXp1^(jQNneUaxZyL4 ztJ|I`h2QWD=p84*Jfvg9L$%A2X~kQ%1`s`E#U zCGe%Xnj&2)nQGjr#DiA*HJi8J!oCh6MKMUGu3Plo+#24;Cw)bi*ktq9sFG%6RrFV_4o!e=hJB?6 zYT$^Ji8NCUBiA&i;0U%HJ6?b>82d0`mz z5=GY6JTqC&u85RDRhXJ-*hH47Wn=pj|0cRG-JsfQf!>-t83OY|x3}M$c`S7hk0ir& zKP{m6j*)9XDG_4&`VN8P?9Swn;2Z>L>8#&)Z}c;9`ZU}yM}IvIOl@HU?Xibr(FFm4 z&tbj3pH2f&G>j``;`9!Jj04#eKvgw^loDS=OwoG)vah}@xD38{u3_j2{S6}2B1sn5 zVfc$vX4n}bR;uEiwKZ z40$`M@3r%o$c86lF1?-AfMF>V2ApkL<%bzpqQvmuD7dF)w8opZz{tB_)#~VddWq@Z zkm8M+YX_l+7W};!D}_B5tAeR1T1+)NZYD4U>%gZ*$yc1XgjQI*MA2_i?GaDE`V%{h zV`^)}JGhiGss?&S>O9nr<5sX(BgMr%oJwy=+bkYWGhfhqqa+GI*db@pd&7j3;C zQzzioqJW*fgTf_=IEe*A-zs2U5U8+2#l;wQ&yWLhu*cZ_x@sZEqf9!#py5?>bgoZDLO1&3Tjl7t)@EuAjpidYnlDdv5VS1r8x!w}S;PhQh%vuavc$_$4%YdPP zc?5NY224(DTiot|dDn}z^|=^-7MQ-FemfjsjJ&??$2Ui;RKDx}lc%T#Zi>c$iI-L4 z*fCJVALx5s)H4c4%gA4HUj%$jc=^24S(t~)ZTf@Lsk#RR;)u5NcvT5Tevdhs2;VIw z{jS4nOu4KVw?*P^3T$j1&I6?=j@+litupQy3T#$tJBnvzipDfvZftd0d#0tXO7DkD zlX%`P7B!eAs+r<*t2LwaH+&FQ)19(C6tyYwYqBj})t%mxh_y4Z&+Bi{DZ|n!i#I%* z{A%9py5(wfbt-Oi_{`Fz{=r3vZ#JgPe6;? zAz*{*7BoJYxL9wliV3NUe0#AoOF`kWb^e7%rj+vN zL=sjqFQL}ghFa1UgO_tOY<*61@+gZF(Gko=)NQ78<#tOZxT%Hil*Xd+V1Wpt*MKC` zEh}*|njSWJnY>IjDLzSwAgWwnj6*d|EiRqh!dE85rLA=zzGT%%yDfM`pv|^u=3LaC zRi}AGZ99hx<{0%Q=YXp~yvB5g`OL$!sYZMvB-Ku>Zv$ZOAzl>wp4>NMjAc#__o(ZrTFeXJn;4K zO>6m}Vj&IP4RT z)Hq@m)!X%1%v~K*8wnmgtLc+(KC*Ao90>5=s)divXBXI_N|+cy`GsT)OnWL^cl&H{ z7pOah6ltbU>yet+@^Nt(DfaoxX_!gB@pHS<_KdkETF#Wb8djyHC##!5o+6(N3 z97M?{s1NIYfxE7DLodX21o)iam&0M0*%cZIlso%K+7*_8V==N$Y$|B;4bU=LN+V6e zhCvj8e&dijsS5LjeWiSTLj^JmJ2IgEI!&I7 zkS|Fby+G8gyFmfBt!|lL5GTdiuw7*}3NOV@{k97y4lb&sf?6C~!QGfxxh!{NYEPm< z6T)`$JQPhuHTyOVX;!m_ELD&m@1$>6bUNV$AWBeN1kWDtTd9^phQ)n^fP8tUZfwWZYn z-?G%KzXhv(>7G}^0Y<4A;?t|u!%nFo;dxXy!r|6vA-U2(n}?3Me#4nzYYbHO;=8}t z<#2WvUwfssgU>rBV0kZx0^Hx#ACt^lA3>(o*-%&wY1>BUCzHG9m{mdF@rF~^eGe@v zZKEDRcH-nGm$60pPBI9EaZM?cZA{iSS`$EPL-R4a_&IJ(oiD^4r%ReIJd^P@q7eEd z`{}u@@LH6P2XfjD7*k6z_S!X$Q$pN<9cu!D@i|N}y6+NJe&+1Jvv6{W(~zDw!(-EL zKOnlw4vUedpS6-w4>%zQ2M&)_A-&rIjH=3i2;-5&lfml#BG34mo`ZDnl85E|O{&#d zA$JHHj3yRqshcEe!TqfSKdgfto)G9WfzG^ruE;a!qfv@Fcf-|9);Ovm}c{dlum@@+Qu}&t~bD7Wi zz?Dz^ssoB@tpYn2jJGIx$mpOEnpp17C50=2n^3_z)hNMCaW`p^i;h zfp5dtgLh1qx?(lBGejMaC8{x{0ar8h4#$!u`kc!ZXlMJJbBK*@TNmEq2?vuOTwJ&u zlFxj`@~dcKYdl+c1vX?|%9=0W@#&+*xAV`eBgiw?+m7gy^u=QMDP;n@vkeafsE;wP zl(ICA3uRl2fG-AAW3*hqmQ|Wl)r@3s&mLKP`@o^c*Mo7%YCh~A>y1)vMiRQ9vwWu0 zq_m4IYB<)MX7Qp4cVl}pbmB#5^1J)sgrt324jQrU7<6tHW~UfV_NoS2IO~w=WYL51 zkFUG@6~8XdL-jhA-dOkWdGiaFBRt+e6M(6br?| z0$nX@FNa3-6*#W#i=^0yb@Xtq>HC)1bl1Fbf6wv&hpRk%6*}UVYQr|`mSRIzfMU~a zgvUFIs~k+3r7?M=JIq-ZRv?NR?3 z2X@K@v3{GZ6TOD(=tc4Bnwk?m|Nic9Km>WI!V(b|s<| z3LeCw2+jc-e#lADID0;DZ|&As8E6BH)|qX_0*s(&#Eb~UjOH;@;WNo{!?J;9g9SODg?K5m zPT>$XBBd03V0Gql>uRV3rV(#GXI3fanzBNQNBP+C6eq$ka{C#5`rc4@{;J$y;o=(? zGxY2Fk$iQ%(C)EzfTmS0%4(9_6-!VH)`zjLmsaXs3Z9c)n=s=!nEzV6nG&NrTZ^vt({6wS@@WQN4S zb`!;meWQZ96Y;RG;^TXoQcv{*hciv6QWH(bQg;v{BD#^p;PbmFO19G-yTdKm)7HEE!1$k#@ENp;yPrh6JEamaG+ZP1*n zaXNyQPQ8?0?v;AVSA3R9vt-;7i9&GxO4QvCyVjI0qrW-bdJ_XKH&1T@7B1wH~T~orH8^@x>L_yl=8J3nUjO^ znU?}#bIAS*rHOmu{>n!P6wm#1I;&g3O1W=U4;A<=k+&Nz^;$29DZBhM9^JeS<4I55 zYwg4|HiCn9OH_NrZW^kJ1ExP?+@h+wiIUn?+FhxUpH+2;o?My*yU(<5EXzmSbeV4R zoe$or_}}I}X7&e-jfaMFWRsidd zd!RdPfFGNR{ZQ^0Q~p~+>d*l0M1`mT!0_(0uag%oVP#&6J22|XMj2*=q4ya zK+na*#RU>(Wv1uk1Zf~-X=!C|2T*7F@mvnT#Psv@qo|;7Px=6uo>TxZJ>?HzddeKY z^prDz=_y+P(^H-R=AS6cKT()}qA>qNVg8B2{1b)wCkpdV6y~2O%s)|Bexk7aL}B@f z!txV^iNg95h4m*2>rWKcClpZeML;|QEkOjZ{vuc2 z-qu0iUPjmU=`JGzgMzM}9e_a|0aV#P?g6--U_smhEe)*nOc7XrsPN+gR9pYATE*Wi zfRzIPI)2&(D<=SS{JQ1>us(6~!{Ik`u{|f~EaFYMC zt?u9MAlRPD;>!M|(Je{>^%W|kAc@#ORV+cx``BSEIWnt=R? zS#+`?HCE72UCP7&v?~3S4DhtXDhGI4Gz6WVMgsu0rw$MB zv?L)1V1IHP0QRSr09x1my;%En`){?#^~3)Eg?!nc>;&*MACLn)jcP%srwJ^82Z29Vs{v2tmIH7- zDXaN+eEgl)w6e1PO*n&!su}>aUeCnHMbE;?$jAty6{L){mAQ+Bm94e0iJb*N{a3C0 zmgV9E1r+`eHL)}X+M3wwTIvJ;Ns@(;lm16!0fY#&)YrAPb1>JnH?gw(CqXt&CJ^S6 zpuV}T9mpPjnZWNn*_hcu`aKEg>VpC>cG`B{>~P(q;GGltN%08 zKVh;nGyleX%2XR93W^A58<-dxf)w~!KYu8|!TOKFKnrVomwyst=47V-VWFTB|HK4o zX#T^#{{+Xx$ny7mKS^mD01b5=%I^$Aep#+D{HN5t7`$Y2i2r2&_G-NDTAL)4Def;gM;li z1HTphOF1UyAC>-xedt?RyZi?H*`9s_vVtO0zv|Q;WN6yf_MlSzYKXsOI9R!Um+A=! zWE&<%mKHz4Gk+Fk2I=?9h76wc|J9g(L$NZl{VuJ(m8B!l*51U@=$B@H5@iB$&HlF{ z0G+MPP4s`%$uGz78EWZue0B8<00yUmLRQ{7F2N%VE03Z zC)KSiwXGcN?Mw`Qr2OgfeyhU*YJ|TS{*~&VMA-gT2|r1;12uPTD{G*w?o*xo^qzm% z6dUW`^Q`ZvZ3trVZ`eQG@bB!|LALPAUVgT%->}+NpxQLI(lz+Oj)~>dIU;qVrOlx>mq8UuV7*i(hKDIfKP*hU$IWEALak0#2cWck-ae!fSHSv z1vGvVH!%nK2>^pQ$d>~}f%;Ykpvd@78BkD}k%jReewpUs=C06n0eW?CgOj$?5oi}W z9c>qH$ydGPk^T~;>)^qWsAxllO!zL)V(-Z_FJ#fgx&VRHHEIgwUp-?#XrQvyQdi`R zDwT}-UdYl=Pb!tC!UV1jvSr!B^n&Huow-eBy!mer`S>83xbsk zQy%0WmXBYSGXzB=-dyyp0MB zPGj2kz_;9^62;pE2Fz=&wz>rp_2HTK3(z(XNQmDW)0VX$P^H1G&A_~&AsKa`*ok1V zPzCXP9Ar?Gy}_Q%0EkP$bc`x4+Q1x?13%Sw)qh-n25ka0 zq}v=Ze<^&EWa#ph=@{R*&&sIUFlrCBF1(K`*2T1~enJNRRf81R0HKZ+43YOE6EV1; z_Gk?`CPu6e=@9fQ<|(OCYj+xvh;|JcOdMfN2}SRFs7l5n zVZ|6R@hIbBq~7Um*rC_s&hI<(KJ-OaU%2n=+uSOlt}uf(&;f5_IWAh~>!6%TXf|pC ziy%KzrSzRz=Y!1>db@ZQiLBb^2Hwl7@hoJ8S_O(6>U9Bm8h@|}vW5g{vn^pT!!`#-lTc} zp)eNW*_^QG3Fo%LaeP;|%yi6(+{UvVAnp7d)>wsd~!OvrT?Te!sj5N8E`4F_j4cQm9@v+Fgp`o#KJ43<0FRWA=#H!(yc!fe z!o`@Vk%1*9*qfK89w~2TGXi#qBRB^}&-Z>;a-X+$b0$!KKVBl_{#s(17?>2H^ANT9 zLMozI;B@8r!?+*#;}Wv;cQ1Fq+~b%}-vbJT*XZ$dpE;zv%rW>GcqP&`c9Jy)V8$8) z${Hh|6Jf@gI9yJ`O+w)@AnbO7&c=2J_rNxq2wZcHlwi0mu#57L(ej@>~Xi__{vdE1o->`*o7Nw=W8rw~q^=3uP z9~+XPkfB@4+%1YCo{izqnkB|brrvrQspK|yH++1C+ZjS~|r;Ej}`4x^> z`X*0X9^4X}j-u~}oK~)Q3XgQ+CJnExiib{}CJe9V%&PA6zl}}@n&W@3TbZ*+t7R&& zz_I9Dypp~6&YqRyy5lf@Kdp#;GtN}fjxTA3`oi3=t^1x1q_~P*#^(n10j~|<_`R}% z(JjO0eZxoKZUFV&6V0hM_301@E-N zIAs(G2{p7UQF1WCA;H;rF;LIBM}Nk)F#YuI^mfCxK~;<1t}=yTx>st0=vst}K4jz6 z_Bwcw9=aHO-~L5JOTD4l{d`JFVvAn0WiI)YR_V%XIy?Gng)NO-cp5h2`u)@HlHf~; zBefR1-0+kF%wdZOy%$+5HP?3dY_aq9ps(gH>Kb)Tt6Q>K*1A((>bSu+fHhQat*=+t z#gM*K^`m5MYH7*Jf<#mNX7`OG$bECYT3^}?xmy0q_wSCrZ;Z*jBHbZO!rA>Ws#^R2 zWBnY_?`}kG;Yko?78m(vcym(fvkS)QKhu7jkrAk~l(rb!SH&J_Hts$*nN*C$lxI*F z$b0jNwW7G%pyO)Q2Krk6%vQq42x#apBIK1MU(u%&(npCa>a(Q+L&A}+Tl`v|1@g6n zR6X@PGamzoOzf0eV!S$LX}F0`oVOC;czyBl`3@`1d?vIWI9-t#V)e7Wa1&E0L3L-W z+@v-ISf(+o1gMx-=quje4S}4aA@M^d&tR)3V^@p?Z+#a>GA}i-JjxXUv)XmEEWK^T z>X8&oCI{4-iu7V#8tNwvis6)L88y>LdWmZ#jDOQHMZj|{-gT|8*r`Qx3FjW*M5>1sjFy)&y=qe?EDd*XQVxQgT&OsVTXf!1T=Axx zZ<#bdv@H4n&6;m9QJ%x`5TeLma?_e`7*eCB$~t?o+nAW7KfDo!7o$pOY%wIY`g+;f42r9! z0J7AA==R+TYeojA&G~N2uz?gN0gW0JdF2}8RAo?274?1bw@A9EXTUkErSbWCN7;pB zY`z(K9Ri7$mII$XHHv^2FIH$jx9xY~ym}f?roL8*;g-%yKsiKVU)Z5ou|85c#aeP! zD5zD+&PPE4cM+DPhMWI&B5plY(SoiQq+HDx)=;|A?3jX$pgC614&uxEXtjk{BNo|; z(UYu30WcLVeQIi+n3~Eyg@-CYUua<(-nPoTB*8^UEp*J7zCODQ|36@hWuu9?L;I$hDhLK5%qe1%< z#H%`BC0b`O2#K$;u!-c7jP_p5)pD&1k z2;26uW+#`aNoRg9@o5Cmk8V?#@F|l#QUXaIbKIldm=WBiA+#F^6OCl%p6l~$ z_gvw5GVW;o8^3M?r8jx12DIbBqp*0Lh#h0rW`go&_>xP#$D^{+$S{Ow>l%}3C#(kL zr?zZx!^Onz0KWpot*b!fQuZ)@6n<%eB4_bJ&QS}vk(9Z&!9g)lLi)@`#)6_Mbh7RW z*pbkLrIzrp=03Y$d=D233k{g+;+~VP;GQ*g+Tl~k?k75g)!kZ>Sj_5@4;QB;#W%(J z6sULB+YT#XDi605pOE1T>Hs~~*kKYs%uH-gJ=5UIJIMj_er<;vEydg?;?0Zt+97NX z2eRw3B^$#2t6aF@=$18}eDD;Qf#URBnf6s};u-1I$8!KK@t`_`v0F}AO@KTloI3MEeQDxaKF zW7fKHCvX5Sjl~bzD65fRMi6V8% z3+i{s*OI66HOB@28uL_3AOT zZ06WO@_@m=Kkk(Jb&V3$y?ZUX%x6IaUEdUeoWoixSb z&tJsd%_O7 zmBY%CMCD^m;tJX)3>rJ_g9_#*EN(hy`*=U(BA;1oUeW^N@;CD0hT?{%(l6xpfjLO=`U@s`X^dzn^@k`i{RpGLvR=H*w-*6jik_dpN&`$CMH{ZjJXx?t$Y@ zxp-jU%R>`VR=MYM(ikrXINF5`$Cr1~6}0H&5sHR`Mr!;X1>||LuNF{OoH|?XEc5e5 z;@et8`VaZ=wP!x|qQ6GJ+RAXE@q$-*ocrG3nDDWA3c1D8sO4RH+%44MHS#y5QbO}b zI)+ZhXMaA9AF+Z*;6?7F9=OWUKg*}!2((u*#vS>^zD&EtIou$IggoJbr$6DkZZ$~F z{@kB>b@=&( zFX+MCE1I^*GjVs4C1~2BCYt<^0oVUyFPIgWbp^!6UHXx0gG|{9CNzg$>;gLOm4W0bNetO%=*|0l=KRBCXANsC^cLH z%*MuZHxtj7(OH5oxxk;_u#|$urlZkzr=!{Ej$Og~1`B=1ZSm6KV!qs@cicS%l8zu#&{R^yUPPI@H{xMN61!0(MVj`Fm=?yP#@^14XDL7T+ylA zV8dK4Q>J6XDnY1r&pKa1gkfdtQeR92EUJWpbaf%|_A*S~{AGS`404Q8LV3QvjSB72 zWpaw1Im?dFUgFo1%hNO}Z=((nNM&|;FefnP1$W2;bJ)cuB;gOT6{h5njTysGz6Q0`Zfqa1fN)Q$g3zBG$>DvtT}A$4R_CJIIM5cs1~j9=%Z-!_A~XSd^z1 zW)=WLhEW1Kn;(9ggXM41^orL#Mu36Yg<1>lISDGVEm!nPD0V%ha_Yu(eg0rgc5RyO z27Xm^O<(Q{duJWb-LoG_z)wseWderQ0|RN8H?m_E-Y@+*#^zMI&LwcX@1!}4tG{YK zc$3m-3H1w`(Ec+$byR(!Vx&yGFAz8AaH~6uf-cC}QDpErCf8g;%IsrvBxY&fO*O!| z8<_H;AX5gYg0oOVDm#S8R5%x9MJo||&Xo6HR~co7=L4R-b}G5Mw!2waYLc8TKm5M8 zckbuP;ke*M!9RK_(Yn__$MI;NZHIVhRXUm0tPt~Y7q)F}XEB9n*JNR~WU z9z9sOqg9o~Wm=WUrDOgKGPK{G*<+9>kfY++3%F4NOakbg8Bq*G(XXe;W#)~oyuvlz zCik(p*2fUo$liK>IwV^wJ$jrk>r))3f^wCAt zcoWMngLF#5*Gk!sXOGuwsgV)yDA2RK1lZ#E^I=0mnqs6=0m8x~ufIaPI6N}B$?A(BD z)~vEF7K4r5)#5xFQs#CNuQk8gRio8B86wr9veQMta6={c8GGq+RUKn%9!4u~LV4^% z{P>+agRNGIb#R=;g^$e4X2(L?LLqd1EY`-nbG7zPgSRAj~_M0|f zLu$DrH&beHDa^8_=g5F8Mkg@Itl~5!)^3JQLl22t z54qSOeYZ^-ww9}W#0Q^1Wx35;KYt!w{Dlb42IO*A`l`JILJu~LP#4T#+BwSkG?UwX z1o4vp?9G`pfe+008+n1-w4o7!p{Y-<8b{Mh&@Z=YuXpTWKCPlF&-wf6- zhBC2iCd=xnfFH;ZQANnGW4H;IjCJ<_V8#xpB%W2uU))13={yf~zb=KFB|p*3voxJ| z>~s9C#Vi%G8q^?d$!;J7RjN3^QduQ728^{+RdTH866@G*%m)ZgG|u#|t476^c+$ME zQEFOXr7*2?IV1T@p7b2*GF-2is+*izTVYMEW$w*Ec`9WwOBgI}hK!QU*p)3UeLq4F z6q6l-IKl!ww;sBN5<5YEKQbcnSbzPiDGb_fH{$WdrL%~TU89l6^GlB)Ew8gOeFTWC z<}8V=utrxOSrsfzJ4Mam>i6MMRYQMZlpyo2)r#t0Ht~n$8Kr>D#fJGC~T7o29{uZYP0!O}%#ehP?>s zK~eCbgz?L2heO``AlFOZ>$sc|c1RJffi*)v!sc>?l4Bf;4|4{3s$IP|Ul(#4^LdQr za|bM|Pc1p%e6#4OXWFtmDc>*hAgEN&X|V?z1lbT9|N z!PB@=T>*=V1-ndtz}6%lMbTOInvC`*x^FpJA_$s`Cm9I+`dD(*qk$3GLvSy0KQR4i z((Cw+#y`gGT&jV{64@C57c(Jldh`P$2ZMgg9FRlrtOee8dmLireS3Q`wV*~ zaEsBibE$(;I$>paiW~F5sl|3&<|7b!L^Z*%q1M1`y}~e2-?trE{9(Zow7tw+77j2- z5u%kHp*4utxej)Yk8{LNX0N?~i1u735H^(vgZC;H7RA{*0@iDz{eWnGyB#DK1k1B+ zFfDsWiel(8dMGsP7jnaQRRR0B-JV+A@s78C%8!P(e$Wq*Pvxln^*2Gv$u=95!?R_2 z6jO|AAClhPYeo>51<@BIA`KB)eX2}oqGvJ+!+z)>6mE;pe*8t~w|vf#oA+P+1oC(t zoUKU@D4ip@UN<##`lS+?pXtz%8D#-Qik;6cjFNUq*c-1kDAoh3meqM9H-+31iQmge zv3?=ap=?Un9filSM{Qb$%fuY3TV7qAmt@$16Wp%B*>_AG$nbtmy_AJ<_3oP#L z(r6vlzLh;A2~E>zF%seZbZUA4VF31JjVkR6y&(C$p?=e1|I#}T3~Yr0-S})36>(Id zINHp?W1>2-_hNL#h|iiyur>}z$3qa9^hDFd(FX3{&_vr-?fG4j&Gn7LwHw zwS1JKkX~?K9ow;ZK~Y72kACm(Wnd@!C!!8GoeGzoLhI)v&Qi}Qj+WhWI zF&SI=3xDN+a(@3wj3wNDIHosnL3$MV0;1N+{s{s8_8!5Ks7^tVh$}W7U9G59bpG`u z{$?UGxEEdZm*`<104fr*lVJe_2@E`arL~}TZ3dW zHd6hY!co!TNc3MoONb1Hqt*tn`zPQD<87dR*vahe^Av5OZL$z|e90jU#xskwF46zu zIhtVxe->JMHdJ11k?tPRqeKc zcTo?gwOF7%8uOCt^mAITHbx6PbM3ygWr=D>gb{Cg_CKOl>IA6aR~wdpV!frL@{`h^ zmBroP-cO&@t6`P6pURmcqG_6U{eo9lsZ_Ka!)L6|N0c@)NpN8UV3k1Rd}hs58aCHP zxZxZQ30pHiO+l+~3!6D3byh&kxt*T&eN^f_?nv)&cGGBPF#)agyuXOv=2hq`-LFepSXq+KMa5uA`(QFp5MOmHa%zm5dG0ML2N*yXfl#X~&|5Oau}gD7 zNE2)I<<@#t*8TF!X*SWz#Trd-Um+y^ME~vJQlTdipa9kx!v{nqRzBZN$ z$}srIF}y}G{PUx6SkL^=J$wTt{Ik-es#N`aA8oO6LQguI1Hy$1cB^pduwoSBhRD(P zY}G==+fDU^g2hOf1h(`r^yaH}TM`%>eB!?DPii8E6mfG#4-4X4Myu(41|zoORJ9h1*0iUJ9;D-jTLQ24g;m!PBymtEWdxwR17N#{JwLz#{*>POH^AeQmKEBE{1V22EA$xYd%_{*i(WSg4k zAoX$m<~(^+eXI@LAqvu7IZdq13cGcn$b8tBXM8bEX03#Auuo?(aHQpVX0b4!#p9y# zsBkomvhx^DJ2~n+@+!2>X6p&xgB42Iuk}K$I)R4>4^v}?wz>qW*Q#BG3e{JXoXBB zDPh<2V>Qs5+N3@&<#`7+DXp!gBWQz=8IrF-+ zRjJp9blF<96$f2`U(b9$Kx5_bzLqDBw>F%H$3b7rLWIoprl1lRQ@;0R7hFfe2H4j5 zYO>$9_jz6hdH+B$Vn3|%K|RFFcHscRoU*S18~s{*HNG^EFvYGkm+wlS^^&ILgfAB> ziB(iYzsyuc6{`w!;2u;#XB+r18uEc!RTa`I|NSZbtAh>Ft^LjD5R$=QA^wUiJ1ES` z&-!^pr7GTLuv$Ehx93ytn?_25i|5{_Jv{} z)`DiY8fGJr4hnZA<;8PU{jxZx68b6<_Y=k@W~RhSl!$wYSSu@G-x5?*3^(SFz^tZF zTC<0*a9U4?w)^Y52RgjP`(M1hWl&sg^RJ5r3+`^g-CcvbySsa^;2H?7!4rZ6cL{^L z1PJc#?rvx0(Y*WJ`(OK<4~K#(=3ck<>eV$f^}D)fCl4v6YX$OSi=J_l(@WO#>@m9! z#h6WTYKwC(6_( z-9~7*cmy_NdT?)fvO~_D%GBEh35s&6;qU2vi8TufW1oCEhjJEs%rFI4`Q9baee6TG zKYO~Sza|EYq`o_a0COtAs+~)scf%ntD2Yq^iUD~if79K z&@q>U&56Uj@g{9>BPfu~DUOQCzg5a!u3)Dsww2R-o!c0uN#m|c$m(A%SSdYupV!%b z5~ouI)+YF!u4?3#uHS#OU3&i^fD&>P!K@0F692%R2N#`OOI%x|gJU8Z*Wu7(C=WpAwCZmqu_4uk;9>rsX6UU9zODS=Nx?hy0T ztgJ!p_+B;8h#bm7>n?{Pug3a8vq>bB*Ta_0`R$~RG^f_h=o43pR|`cyrZ(89Jl1sY zxy$MEBZ%_Szabe(J-8KiBfN&UiW4iRq#cB4A}K*T* zkGP-G))aUPRBH-w4YIdvGVUmC2AwuCJ}7OQo{{%I;Ug4`%0h}m#4(<}g}|tU%*f2r zkWNq*Y2zeT3U>yCaKedn3ZPv}&r-(wByR_c8NlVBGfBf*Uo_k&TecxTBcG_3EB1yc z61O}3Y;cmPjB3$dDe*5p$?r{WiT+{9T5N&c|Iz}1wSOraI{b)_5~7C_t5|%78Y=OX z$qdha6cPkCn*fK6QPabroc3^$D1eTkRfrgNxhQF#Mk-{?n)Z#W0*s z=Jz+mbx@~6i6Ez^ZwWbqAxv)`DEZ&Ii{Azn4CdGxS+i8rqHPTG+MM!#` zzWyN!&4lYx&{MX0Mp~%NSum3PS|Cg1o6!d%r8Nvax5vyH`iKptx6+o%lYY=b`7pNb zV_*4#C7t@6Q*tK*@nRC*=hU~Q5Lp(fE9Jw2doM#{Wd2kfu%fx-}(#PpS5G((-!P(ZOt%!zrftiCU*2$r@5}zywbkk zwRW}Cr1W_kIO|Q$-42;-Q!r+RraiZJ)=!qP&B42$EAe%gwLiCraUVnfee>*|`1v|R z0=z}$Q_~SUUtt<)2Gn-`TSMQAhQOy!ttT-Ve8=;n<-$zH)=!k>QBLfpBRx~zlyib$ zZ*NGDDeh=hpF-%;FtrQm29$$H$Ljh*!LbWQlHPpBttJ}n8k+OT9EP+O@Y8Di*jh#a zj%Xv2F76aCXB77ad{&u!*hF59b0=eHxHOp~!@hJ_AH8las(RDJcXQYbdA?Xlfv-Kk7&{Afkg%`1HjB;($FvzMnagq>^&_$b=9q zrimI%CP5E7+3aF9`&dX!T}mplTfKLpF_N6Xg@=laOqY2|JV8GNI{3IEeuAE8f1L3r#^nP$erudswYnQ0*h-qR$&qH(sAo)Nl`JZi&`HJ@5xDIJGx=)tm(wb2S)$t$%+rO$Gjp zyyE}0`@icx@ca_S|A*xFS5_!M-)rh(?F8ti0nsh+S^-e#lQ4<=@k1wP4M_a|fGJds z9b6ei9qr73UUtToK!PJ6*ORO1pBaoe7+Ja4*nyT`ll^L9U}a$eGDER514>?1H*-tu3wGNI1E<7kYt2`4VZTj*_FG=)&o&L`e|Js1$46I zH^3`3M@eZhd1EIaIhPq=5oWnS z#{&GZ{nmj8U^H~OSXdd^nSlvN{^<+kt^#!B%-q1O;RHncf8H73CNutlWplDHGqQ28 z{91~cg^`n!8Q3ECKU@5Fd9J_DLGsVge=jlvGqW->a{;#(*cmsFiwt0n{_4jANYwv5 z7m$X9i;)EkonKKfs=Bx@c?f5ziaz&Eo=D@cf;@f4}D+j2aA@&Q^&<8MW4on5!8a@?lr#RXP=@vG|X$PtCqym1^KBhJFyok|K&rLduJJotICdBF3UZMBbAig-(;3*-wHA zogfG^{!PJ3e*c)4s5qO_K=}i6-m%nvrKXhh072qej8&}2SKco%o8%pp3-REkYLukJ z9A;etK9{PYprV4ybhza#cfl@Nl`!UQ9jr)-+n%(H@Y+_iT z?Y>}wYJY(W$o{@!NW_2Apc(_=v;!G8b+Lf0=d6E_NE?2?`rBt}Fx+ z35EJooKMUcKO#v0_gEuJahX6L5x;lxl}Z@yYnAc{(k{;It0&3gjAXbK(RP#T=HjOf zqU)!%Dbwm0fm#35E0r?=utX4s(lNLm3_qAZGBKpE|9-|Z+BSM>C>3WQ`D<=4mvQyJ zY_=9Wc379I$BHQLs0j44Dy((^m}jJR^;3O0R;Bhv)-CW=X=w=l_71FiBorw37ZDsp zab_&qRl9FtX_+4{Tm%`z5nR7EiaOA0=E$Yjjs)y}R#q4>jTz*S#H>*sP*kJ=DKHcc z9vKF~*5EV{OjJp(9lH^dBA3g}z;UmRyJdB9Q_IeL7cuqh4_tK92P>f4=^|@{+U{Vr z3f-!NO=&mzgj80E!)sI!aUx|JtOQ|dL?0EX!VSY~#P}n)=ch#soG2-jqAVS^usz<7 zVCYj~C!X5Q>KBW{H(F2#M)7m5m_LF!VMQ}|sxgC@u~UTkN(0QdzlByV>V5pqJil3m z(<{mXwWg;90l*r1NEalqQU;}Trv+-`(8SlAfo>xL9pM!`zk=)boeIPWt-howa zyjdjjL?z<1z3Dt!5xJ(B%`Ptsk9N9fBk-VE1Z(Kh*u@R84U{#8euQ-wW_o-LCTaBA zAY^E~g}B|ekSdgT!`6w)E_i5FVHPp9qXlf!<{Y~*Q7*V=Q(zu?ri-Bxnsb9p%T{Nq zj2nNu{mL4`6@XKCLan$;gL697e|kamcu>5+pP%)uy=sJ>?py*)d;VU8Cp+~KA!@@9 zx%v$0@C*1YE3{c27 zuO_~1RzxK`LHd9#tXa=OJdD5v0@;+ckPx|9p7cZUJV^p}KEDEoUDZbEg12gCBkjEx zd5ekyvAtulS$i})6U+C2dOyZ{h4U(Qt>KIf!oNs>{B&pj1UhC?0&+N9lZbL~ttdPL zxk8}%g4yxmv8K7bFlX{rlA_W>9w*)DS;u^PYcLEFk)Tvva8>nua9wNrj3EW2;TkbM z(vZdS zL4x12nOfh1g58z_k8Js765iQXIUYUNneE#TH!ysUURKL^ZP$vbxx~y_+5DCDC+a9N zy*58-Wn(>iTySfcF^gd^&R0YT`BysYcY)iUeyi*ARe^Ig`w%rYeXkZN%3l##Lu!iR zGZtDEqVL{ax_BdQATf*)esOu2cx3^whoF8u=(cxEm-03soO%kiZ8D^c3MyT4@}O}jBX}nKY+5M) z^?H*&TY=>(@Z5JivdeGqk1 z=sTaJ;N{(Rb8|D2l$5-8Y32Ex#rIw#x5^k`5w6aPunnA^lP)M{vUGLXikkKb%3Rjx z&_{}?gNs%okm^GLCPfLgslX zctwa&VwO%2az?4JFjrhup}{TOC9Nz3la4tU3Q$)SKklI|vWB?u&-0wfFlgyv)Ad*! zf;qg8Zm`{FYUOC@+x0nZ-!*z?*HwbKYuit)+2|UB?^=c|c&y=~kCn!;+0eS9R`wrO z^F~kB*6*F&_ohofD^V+JF>8B-P^IZB*(Xef+UT=OzrtpjUYlMm4{AML@Xm6QmYrP2 za{GYLZ7_lb%t`!lwVvb!TGp<3}$E8a(dH-Y@zzbcT`b%d7jM(?t#;38%1 zAs0cKuD=xHyH)96e+qd^N*Sj6o})3Zk|fV#nyX-5q_O)2$4Y!GL_tSO(XgOzq1~I8 zO#pI2xARM95X}TW=p7^LcLu#0sTl|RDL$sL;Ih=}P&mGKeJhV&oEl^iQ?Mz1REcCs zP&P2Y@B6eeR%!=R?dl0;j32S%$F$|Qww`+&=(X;{r-TP@iAO2OHx^Jlojf4;dhbwl zbV9T+rmKYDMmKTNXnnOU+ruoGQ`b{NFSoWIt1=&ZjXN6(?l#~G%c|hyOeO1 z@lHQ3n*L($;GJTiW_ny=B=0elhk+2K(b#%M^ML~S7!UhWh$z@O?o;V{+)<~3@1;mv5doa4rUkn~8d0{2P|4X3cJd-5 ziI|U*nWB`7yNdB+cOM)gw1T3$714RIo%em-XqC9eJ551lecUza&i#m5$e33t=UhSw zRDwrN8@t~PzTY((ZkFD2F7-uI&Ms1YryrKyp3YmZHgoqjLJ1xo;lqe{&>q5pPj_dC zPU>E6{O1vIdfo`NnKWujSz^_DBU4WUZd3!D$vRJR5Emtp>Y%mpCsxIZsi;Jq;1G4K z&u^^;qXJ){7Z~7QA!C*MmCq4bO=pb@@JtXM)`t|zomg~tSqFVi>^CF)1aE6u>^Ff` ziAY#(j|h|1F+Ul0yqs@s$Hr7@B-WX@(9|`7Pxa|*p`2~=v_B>&1)*Ry30FN78U(9$ z1i!I=ua8%rEm(3!LnZ8V71i4Zo3Ni!++7~u*wlJfL=s?O0@ua*#uiFDSUG+A7N_dd z#*?BoSe6BoCE1VbMFS{w%Yjvt?dt@Lk+deIRxeUS*dIq*Dgrtd>@cqH8EEthBiM|w znd7ZB3~H^EiONA`8zISGL%pevF_x+B{na8D(idh+o z+)(JHkx>M25|{aLFs=^ypD;P(xyT=@aG0J8U0SrWr7%rM2{#GPk*?Cs{R*7$3Y{BV z9rNMaf($!^yqm}}88R8{&^RL=tq0l9iV{C=z1nL%p=NrW{DoC5Y*6X$CC}&L#hJ$; z%OT4?%YMoDh-D~sn#q2v-erNOexTlafowr#0bV!tXiKe%?^SZL#rL`AWPZt34L|ke zlg7m}N%LBlm~-+iwjG=u^^t=tP}cj*3htL5V(u> za_jrBLcN>>?7_1d5swb_|K&L7awOXt8Wx;+YKo=GC_F{qF z+Vq!&O>%wr>N^(5X&vw&)E`JC8rpvD_6xPlACo%XxCw%kuu?#^(-_p|`5Za1UkH|* zT#Qg7FG@*MXzL?KQaq7NI6}2QNR{n-nU)pHf3xc<&>c*=_|WV3wf(m9b{yxTq~(_K z6#7if>`opJPuFwtwHr2<5$#%rO*Ybk1UWLixGTL zxE|HE*Ladu2!dd65>~W*!J!RW_U(=t_JQv$bw5+%5!QmCR!E|Bndh&m91aR??DIqu z+kxDMc}glC0+iFE9|qLMkuV_A;gdE{v!(5NeWfB%P$Sb*3Z$YL+*8AvYtHZ&+sqM2 z-ajBz1S1EC)?4HQ(1quTT|lnYzC|xqpN#3UrNLu+GyEImco#n=C8rZgeka&fi%!Wz z5vE?0la^7f%{62q#OkvQFz(P32s$wiWJ}U+iyfXA_#kNTRH}BEWI6BFL9J5iloTS6 ziPV-Xxtv>uQ{Wkd!6}JBZG6V*-t}ng9cQ(nJnQ#uTDca&{O?87F747-F)QpDZ)e%@ zF~3CxRajNtF6Of^ahz=RVDFhfTobNTIud`K3X5L+eiN%sx^yX7o-2F#5M5Kbkoc>;44^ApyZmKNV*j7=3?ms7~mxz4OCUW>*5D(V7*B zmFrHUYdShm+`}bsU4nNkI&)ou>criZ|HMY&H0gqiiaYf?ShDgI^j0gGs|Pz%bo#J} zu6lG)`FT~(?ph})2ZowJ(5G;2#+*8t!Nm;;@`vqK=GNze7i_50e*3J2Z1&dW+U42c z9lJ;47U#AqI6ilWj)j~jiWPIaHundoQB_a3ISL7NN&j==R~`ZrouLD7AK{-Ja9+9A zy6pcLsg_bnN!-3owo9^huU|kMhU0?4Dip8jW;meNrGH?6VZh?6(>iqj!ei_K^E8_@ zt?tf7Wka=)h5DJ76wA#LLC>>WN@YJp2`-f(Mr8k?lRIXR_%sSJgOSx>{>65q4(8OQ z^d6@#^Pzio#Yr;S5LYtVZ-XLA?{@P7ux6GWe|EvDBUOcvQP5L?G`JV4j2 zE0+7g3RQeSZRc~8FY7+5LwuELuRE@;S=3NJx9nSq{2g`NY8IHkL1{&BaY}ceh2c?{i{I$KQY{%RRzeY&T+>PY zSmIJ8fW6@2til*G)MLcx?Q)i(x0v&>t-q&iJ7DYkY{EyjAK)W;n=Z~BmKGk0jOARQ zjqS&HixsZ#w=r{dHYiINV;DWU!!$H5dWedxU+4#3Fq&j@O}? z#02Lfb9+oZ&bINj7(pycat=*2p?PWBfYy794=xL_Ysmbl9cYP_Pr6N}6HR?Pgfmtv z*FCb?e1gFzyasO5!(NvBtNCsGO=z&Sl*nf%K;_0YWp|HVU)cBQu$+ zi&@+9oLNe1;K4COtX8St#i&A5A1a`3Z-`j^&XygcQi;0FJ(u5euURtTy>OpnZwQTD zPjU4pY6`M@6HS~2#X8{`JXD@tN>ZByp0%Epoq23<&_l5r!IgdPgkt!1+H3>~uICVH zt3VCU6dAJ}BITv|Gg^d;6?){bqGLXz%HEhmtusQwVl-$GySFO1m*TzDlV<-FZcA^p zC#20KR|V1jOTfv!6;tuk30U<_{&ymG6QinY{5J%sMP|l=ur*b?O*)-4XxS8NQgE@- zw_zcpQl1qd4Kj@?qT}>yYH%MZ)ZXYh33vLU?W2_^Gf#by@)YaD@GA_-ps?ctvBN>4 z5pjYzWgEN2G}5KwoF0wgZe$x3Iu&Y|7>(oSs#fxE2MFfe$p7LbOxgx$2)!G z`P_3@%>EwJTG$oFcC}4oF+Z3uUGXxlI$Uc$7m?f0p!&s&JQWo2@c1d`!DoWfg5nL> zGej!_J+tx7yA6U_3chN$XXTmu7cYYaNMY7mE$gF#)NCOEBH z+BnMi+A~VIZ|F(LAJH+L1yZx6*MkuGd4u?p1f`MM>%+k+V+b=w7oNR^)1{U2C2tZ- z674cUx!IwUp|6Rj28x=qo3AK_`Zu@F>ssq1ocm7SiW#z%vY1)314;pbg-XzYOl1w! zf^20z)CPr?9T|-M!sN9Sv8=3m>K?JMm(A#FUMEx2k9Vkd`5S|@Rc?BIo*^VLE}=5j z&Bau78m!B7A(ET1@O(~c17iI6;xK34)u*j6^?tVvZS{uVO{$LOSQ>3kbXWN3sMz-w z>*s=$YTi#TzDHv!YyMI{SF>?!F96{&U2HyKQN(?orr-O?vt{;JZ_;l#D8ur}(>sW~ z$Nnms!H$qohA6kf6}yx9Q^i!kp)*46Zi;oxN*bXe6hEDStpE&vX5WU}t5EkZshzoPnQJv%k$-d>ppy9fY+yB_a6r@-zy&0h))(_p)4qoox8pxbiivX6=HrX zs2jT0CO8Y}krp_E8lGS8dM9{zX$(Tv^})F@u0lq>edTt_jx{eWXB;l0H>t)^F~G+4 zxI1I`1TFM3%9IT{>$_RG_E@J@C{<;nzs zRU5xyx8CqYQDVS?%X|DV=oK+Ttmv8L-m^|cz7Cg=zhi1HSU%Ku?eluml$98H+tg67 zfWD{NoQ86uzR4$Gh8^?;^=qfL0Y_;JKIRbl@~l`?zP5)^n1|`ySQ`HfIe#RD%aD4C?KY{K*qJaV=S^xj(%*c+QaX z?||JLGIuHa5uL*%L@i{!?v?gbY&HwP92mo0v9q0ED`W^4*L>ojrdU5v3x2y--~K< z<%w}*qwP#@HM7^%cpuIA#o@Zp5d2Nh#^cVuoOK|~0-0yvd4E2qJHsr8jN&Cqfji^W zoE1K;T(%9{p*re`#kyj~h2~gGH;60iYe?rte!MW(U5w<@O~zQ=fID5;>pJjlTnx7t z%-rsxC62jRlOk^Nk@C5XMi#nQTM+c=2p14s-0$kxutdVkF^@5fOFupS4Cmp$6VkDv ze6xl{Tz<1w{39%LtxI}4`}O_LjkhD=l0Ke4!%uEcv0MFZA8&&N?KQj~+gAhQA-i5# zArZY@$JJTwYK#KM&_gJ2w>T=Nd1WG1aMm|yo)dy zQ-j4P;g<@(!Is&Dg#|w9YLmHeI}{o!mxRzK>Xb>Evc!6+%xD=qt~o**Ld73o_Ez$Une-`@y99a?WNWsk3hoapQSVjLp=jzPI1Xg z3DI+hHu23)SqahFYAPA%B$%?gZ}tlky3gphH)(cw_2Y=eug8*1_TIqEzGjr=W;HX-+pMJ|~u2J)ap@1l`=+z|#Q|gAiw#kOUYOc?HGU zShp|+i$SK+-a$RT*UB7XWz;SnCx<)+<2A>fbYxSTS%uNMy%HAc4txHX{$})VEbC3! z!p69v+Ibx zV|03}hi~ty1?&8MF}H_oVaYvK^DH--_k%ozjco1*5>f|{tl6Cb8-$|?giCT^H(OPp#y;MyNU@ro!G7?k?19V=yFynXM)31tciv(bxNT4e>_%evZ2(P4O&$N7 zO~c%`WN!f^@v}h|$tP*-w=->h+RvHXHvFC4R+Er+5lqqp(82tY0 z!>0Q?lRY*zJ2!2&x{o~Wt#fUKYvZ;8cOCC6qiy`s1$`f3-x0lc7*e-{sP;(wE(zF7 zM9&q3(PNF8mD`6%1cf~RE&OPZK3oT8QXvC9hK!HZe;Kj<>$HQNuh#OXooSc?mB8i1aggt z&bepA(9T?tFsR5{{HDT&@g0^<6BnNE#}*{po)>a@^;}L;J+sCxZ#Wt6d7qE21elu7 zJ3o%b-9(x8DsP-f2x+W^E}-VLZaPg0DA-UX{XCYnh ziw6vCG~_{TmukT*^*FNCv#JP=MBW0T+<8r=6z2IG=U=&BtJX2&-t3nQmGAD~ukJ{^ z8~t*8O$ih>q3ML#u=LX{T2rl}?XWz@1+%Y^oqaeXh6%^_T}?sOsQWPHB$gt}1%7Gnbn8|6gh>tP#--{I@0iA+fw<};7NbnM@p zxJ2XzC@7?qab~D~Hi$*vfGb>IKTHtFj%(&LKHZC-o}85)#H-H5=?p~gCR8!49rUDQ zmF*HTJ%a38@mqya#fl{@InDz`llNkJT>3i@kv`ixGcgJZ@|493s*)eb9lU`!o%jw9 z+f_4f7D%h%4)$>2!#MK+Rfc+s_RC-01qEcM$5LpN09?RFVQ%)vYar+J)G!zqXlT~f2wcas zMSu1r)X16^O?=@WbimEn$#iN`DPS(J;4iPG{8acVrk^;}_y@7L>6}-{yHvS1$2bDc zVR3srJB`sy20hbG6Az>16~%nEa*76Ljm6kGzHKy7WfgdajiUp59mq#mZ%NPAN~*R` z^X19U8YEiT+*z{C`D?sA+hY9dXQP=D7iKp}dBZ^{5~2;9!`VAG7Us@sXAk+PZenkU z&&Omg4mm-<2Z2LyK516neaO?^7KUYarkz}aiqV}&Djx-u^$4u;tb@&6W29gL7XmX8 zb7@rBFUTW}l_5i)hncPD%<|%R$OdKlLS-3>@cYgR?rQk;I4D$o3X0wZT7aFo+2Jd@f-Se(PaPZMiCS;6C2tRm@9ViP28U0Jwj5vf>NW=g0)&R14M1j8$b zTpe|;EARQ1tmStG^T$&yP|YHaRYek61|kKt5maj8wSDL&Sf9e+#z&~o-(ACvF4+)` zTbP;f=FsX}ExM$*FJrRF!iS0XX~rUB$2IIaZ1|Y26kKdFTC?!}4C3fBP*@N>uGoG# zRxa7%Q=5t~syS^YnayM$T1d;cyfPmfq`yR2N5Py53;MoUBqqd(=n}%_?1nSUFV&xw ztk1bTOs_+sawD;!y{3HmPS$ zvUUL^mX#N^v<4Y$b8^E_Izg(gS@A#?D>!b}q#Rbr;@mr{2r9S3x7D~F>qL3*8e~-@ zI$lg1*gRJstoEwib}tkM2Z>Pf51BO9h`qg|jO}QKPOnUvHZ;RBN~9>+(il_0CP=z= z==7jJD3ytO1%3`lsnwKjkbZU={DeCV*&n5eu*2IkMfy=gEeiywGrxCh#ovNtyjEL z%#TUzGZcHHp)N{rWKa-)8^_8<6+{_tcq(L9BQs)Z54!P=Q$KACRdwe6uBYg5!lN6R zEWATm=aqV6F?_0~u`cGww@zpETaj03omT2nktNJpp@Fm^wEPtBg-}Whufw#J_2Yck zMb3n&2b%Nc!W?|Kvj!29&CL5GidfX;whqQ4#*%!uR0lw7{RDli#_OsAIdYh{NBlw- zT?vK6eRT6&80U}fgR$BTb~lNV{=Pjo6>X8vs|A>;t{<5|E+hFH1M2!hT5=LNIk;{9 z*SUKV5dQAsSDo6sy~cTV(-cD8Fi{`5802umqZI}H?(#i++vXpp!`pnH)^|89+Uj?P zfj72Cu5iqJ`L?~H4z1s*XlvI(b{Mcw%W~E0=~#KGV>P0vN(~U?b!)+8-SIdSX?Qi( z!Ua48oE{O&gBZ@w27VM85g~P|gSnw=g41ReA?|25@6~cIF_y@gPsqY6i5B(H<#B3I zdUD^*CGSgzBNS7ALWPR)ayknZ5Wrsc(x1^O@6__~M_r3;iE`Y|@;W*4bhP0*E7JFm z$I2yf!ODn+v`HmSsggIKNHoEfR+12x;Hf*q95A3d>+i(DQ)I?Z^P=cp+$<=_tW+!# z=1zLnod~|UT@H{MDK|Hd&jI{M|F|lEksc_tgyYE!(&pdGZBpM?c_VEkDR$mSI7F}g5IpHwp;zv z_f+xp8ODL?Zz{AFmQ_9oW~PiBY|LM^GS|u!4{J}VPHI%Qzsc39#?K$+PSN(DYltTu zps!mKxTrc5_7WB(cDOL*e~CIF6sK*wyMAE8M~E`uf4;xcWNbS_9QT{qeqTSn#D!xX z=5n^kgPm^z*BVj+M%PG+Utry%ks+TKNyVp&TIBd?N8FF7Hqx_ykeH*&BECO=`#tc%e+}rPJx~*QZ{si?%MT}e6MD; z5>oTj5?YE&tG1@op!FOsa|h7!Cc*=g-ssnA@r z&buR4p0@%$1d|2#_jph`%M4p?7Lyyww7r(1Jq!~4j^7ZOj|3`*5##!^Klc*}K3!|J zvA?8tCONiW@4Fqn7cNS@nYYtO-ig z{!ni|SSgH|R4JQa!nr}TQFbgpnmX1UF(}8kXju$$N}19-Vvuup&6+LPtkm?iPWA46 zYdMb`gLy%)Q&}wgZ%Ho;^M92L`6aylmq7TFNcfY&5dGg#7(j>rF8~HRP`3b(sIvjA z#s5nHg9DJC^RROO<+B;s0Kq>iD=Sb%5&$q*08#oc+5iys0u%=`JJ)~k7k`R`|3fwW zUo}hqlr#V5`2n8ekD@}q%bNcWcKAmJ{r@+8!3^LKe^k3>Ci!0|4A$Q%4EA5;GXUHD zviiRrf9vtj;NPwSb+rFQHGl%<|AHKV2phQg_k;k)!3}KVZ;C_z7sl}m-S~~p07}g2 z0>}eEF8tOC5ETG$!TJXt@o(Q>Q~!fsZ~)~+I9Pc8C}i?~MQr>#&p-PCfQo;hh=1UT zU#kG?1FXp(PzFGB0QF=5vg9vf(r(p%$>lbkWINq-luyOuPI{ZU7{A(#-PVT>a zl%0e7Pxb-0%FW2Z!}bSY@%Ml1Y+Q^0aPc=E@dttQ3&3Fg%Od~S9w@-g@)tVtPa6Q* zFaxNK?yn{O0B!zg03Z}@;4b{J**_WpSmw9gvoZr<%`X;(oB8iW{^<_DEdbW>=kYoI z>Bs?C?l0KnS5@_Y_VJr}{^B|SK;?H;{;!G+e-TdqlMJ7Yo$GfIzJ9`}0|0jPo_IwP z%)AYKOMUPrWHOA*d6qc(3Y;1zj2!}gFR&q}5~MLt8t-Rlvg3N#j-hS*o+%iaYnsA) z?z-NYJ62QkYqQae?ibOy%epqyqbntOGG=iN#+tq_l}FSGVuP#bAiryec*Ssw=2Z!( zlX8)n1qHz@`R}MAURedi1V6pu$mGp~%V2-la2cVv>hLPIaZ5f@dIJVlBzMj~sv1~-=TR<-1ggFA*xGGUFo!@9ZAyszP-`;y2}z8U z*<6lAIWOW8VT{p08b4R+C@n@VN!;>%?rGXyw-^t3HIi}?Tc{YHc<3TQpZ_!Qm5Mi5 z*Snt?U`g0&{p<13-;!&`4q>zwt8i*?s-!{>=uO7rJl9Y8sg%2hvGBFqya^-T6Caeg zS_upzUO61;IGzdWOmLSeAKXJ*Jyt6HckutOnj3!xz<=V{fAJjuhrsuLiE^+o|5=~u zca{U7_>h-3JoOvV0XIqE z%>@a}THHOQrb6@w#uZYJ;nj+ikZAQ)@?h`1Wbk0&&I{(Q;J=ZcjaM^=N>A7sCpwuY zkR%i|N?WG8b+wOh*4Xc1Ir`PlVeLEc&SixK%s;%r@87g65Ex(dIQAHM8u`AH{Xhg8 zfcBbg%e(e`Z@lfB>KE96e=ou$&euOMiP?ijkU4G>jzJbN0FUMmG0!Z^*W8u>SS2Kl3r zAcA2bI>__e8Fn#1G?Ibc*yA2YyP}@s2Xuqc&*AxdhWH2h6So(FZQ7reJt25Z2|>Wh zf}aNCrg*^HcqAYVs5`rFfyHX}yqZ&V$Fk$Zbxd&q%dU9j_|zuSoU{RTQ}=e~ z<(fFgv69Q@^?(IhOVRTU^4tY>EPYYq{b5}pJg2Td(kDUhQ`-8>PEe5abZeviejfsE-?D(AXdVx| zU}Q9^Wb|X|K*dDFt-NH?>rN4dz~k1fkCuBR1k}aL^$L#|+!KN~OlM}{TqUwbDUovK`U71$(vSK_GG+}|7v7Nk!g4&H2&X0*}R zNv4eA`LRbr7)@C%ci=$mb2SahH@Hn$xmOLUr58|{$LHi`tM><+*_HzhNN|WJS+}b; zTco{wV6furBJ^TkX-6d^mNZ&FFCvK~*k8!X$Rb2r6(t)9Zjbg-i~Hu|7S}Fo%K-A8 zblH04QeA`mMe8cRmUt)|y1^lt4|O40OIwhEh1r7XcEk(DkDs|!uR${_cO?90s-||N z9@aO(g-D0<9PWl>ce@Q)eJef(ax)W(Ia)7$^Q0F_rMt$2l$GzFA&|D;1%-NYSGZDl zY&VaX@*EEybjk~o9k)L=JAi{KY?(u%cl+GC(1?#gSDC zS7-kD(a-K}&K`Le@}2AVO`dwjOH(jp6NL5IXUtXxoKCPXxgmwiugI+Ta--a4mnJym zvw=qiGbCtn%Fzb&oUVG2=34N$B`i_KuZrY2EqCP?XU~I=uli4W3TXg>L z*M3lOe9~Z!tAWi|WXtzHwCA$tSlQi%tKj?*6P{q<;K!)PPqv4M^F(rUu332@B*!8^E zc_^vH_z2%K^Fn0l1t-*ruoi0*AkBwmcPH|)A$7}5Ipy36#Xd+U^m52ro>$1%+S?*svk=n5dO|1vl325P9P`|G z)8(K|^0^Ev-q8Qnc+*f9^$xRooawj~4)JIUnBRDX2_^U=7NA5xTQYix5g92qoaQ+X5eg$s(vIm^EHyL*X+Wyws5@dKub zZV3&F2~SL@_h?mZVs_W6@`V-(XVOhME=dYw2uT$@b8ZQI*ZjWO8Q#yG7kb04@}tg@ z{&EEhdfXj##Kb})Qv}3Q0s_Jv^CS^cm;~eS;p?Hiq&-#@^r(s*j)6zp~EI zpjr~4B{xJ+lPCojG+C=rDg7!l|5KS_se&PK`l?n&V4iiaet!Ie)a?hQA<6pFybq46 zGpD+@`pw)EY3dKWJash=p#|>V#dQ~idGd+*8f6MPWmD2r94^usV~u$dv^GQJ3MR4K zHbl8>P7F)b)r9NxQj-ZBT(Xn;WB8h^2(mN5{y*fsbC4z7zwWuqwr$(C ztu7l~wrzCTW|wW-wv8^ks*7E`^_~;I-+9j*+?j~EcP3^c@{heUGIp+9xpro*C%>QP zSy;Et9!3`(XsppLp;k%Q;&!2xRL|qGB#jyj(jzA=A>4bw248^8^l)NVA<-LvIkF># zWw<5B58h)#9%MvjM1~?UjC%-;XN1KJU19uzq4z6fZ|ZJ_iL7(`Arxc#L7e!j-eegk zR0wupG^|1g!R4VnrxagvV{2(`&i9(ns(;7YO1CORD{!h}v3R%xr@OA+cj$UYwZ+E5F2C0als`Q|7pw+H#WNDqQ3X<($d;9DPjX!{6IaS#m6=RkH6$;oE@VXoHCtoaiF5 zi1@PGi5Gn6q`wub%f92QV3bcvIYc76biDJgO-6jD2`hb^HK0bdx_y;wuO%!6eT8}B zFNA>(lCGV-2B}gLpD%2WPlHy+(@H-wpfNS1x`rBhHJ2#Cw{&RRQtGLRPNAeLh7w9l z&3gQFvvi*uq)=hL=a0GrBaS1;-8PnnTp?17Gew{lmK~Px|jPiU@M|vx(SY(lM z2C-F{26fIDIR|yUh*VKzgfhv`G}*bID#$Y?`fL07>)VtrgWzN1=Dz1z>S^1{ZSo~q z5{VG|Nl%K~3x%!ft(((axiJjPL0UnJ{nQt(4a^r~rK=}TZ5H(^GgIHKo#lk9ZpEoE zj8n=qWjum46B<(54w;57pF%nwP|_q8fp3Ln@zmPx9DR9+9W+K6lLLCOtQM4=y!}3(agdVNk?r9-z`Ey+g+Tb ze6i?Ylm|WUD$Ku(&eR<#(X7UbdRvp^-(i8*PVXJpT&VpIe>5{5N94)>DOZ%f-ViNH ztB4)1ldHdSRAG~r;w?XUS6X(B2%^t%O`k$y^ZH(ef2G!+&G!=FP0R&SfWrH8W|p#@ zMnXgkp~=I#e!A_M5{(z0+S4Q&8o#J502<%&VYPH=KQ9G$9J{4WXgM6FVcYqZRhKsG zMfvdwIx1L+*Zq`O9?T68saPTivpe_eC2NSb<)Wk(F|WHnXSbO?23 zjM8z~ z!axx_@lnl1O*^12ENyt1j5I2X+JrK&d`p$%GBF*dV`&s{xrp*hG~h`RPF2x}aGLCc zKwa`IqOp74rQ|zFBYY(%tQaxd;F$Z9k_bgvog>U>@yzsRpP%DGWRv_fL~XHbRB zE(826RPo=A{9k3oe>?s!DdVpm`gcwz|HW+cpVQO--7*`?Uq&W>)5yNmwl6v8pX%6u zw6Zz&W@G;Q>mEVw2`EZl`KJ=o zQCtf{25SgD?w_>lkxB1w%`MAop!a;9TZVys+$au@GK-LWG0RAL0d?G$<=^$ zwzw&>v^d?-b#C_ za*&M%smpmX>{Y297azE}R)VDwM;q+xI9WmSn8`Tti&0GEdA1qFNTAt&R%+PG3GP!P zhJ4TzS=5-~(T+1c=`XH+^-MAa3ZUZn(e5N)UsdIX9off3-XoK=e?z8KKX|ViAUW6- zDgONmgy`)j@*n>>|HbI}=OFmMU8DGGhyUJh;$KhWztbrGX5RA;je?o&OIQ2vMGDR@ z-R+yqYCPz2H>C;$!=k{VG` z>sBhi6cbG`U|AxBT3<}GZI1GXqHtM38qpAIglHf5(*d$Jx{A_`Ce_+M+y&d$T?F#`800csgqFCzXZD75;)_A2u9 z8ptekhKjRn<^v3X0mH0pQ&zRr4Vz&8`#=Wf3;D~3;w7)({&)3&P2FOA%jhpC6n20gecS>7zCl?W zQ#3u}{<9lSBbREP_F*tN&tx*Ii?=|*&#R63iS`WVITQJt!_DgYT9>Wg>33fak6h|a z7?AU+vS2!dJzXu}V#^v6;8W)If;~wA4;%yhP^|% zxdq+bM(74NkY06_V~Hz~Dmn-0O`ZpB^$(x}#K8a=_y+-C!@MbjPNT9NnDodKZ&`%I zjl@|{((lrxCPOBZOq7pZr!}25xpj$HQo@-N)1*xunbY4y^iSWa9h)D!A>2zB3Qbw{ zyP%l|TvdgLWsY=f!S(`zs-o!XAsYxBgR* z2MN6&Sflhw2kI^l33#?tgOi8CsFo@_<%6^xn%^{~i#+mbtrbiOf&q-Su>GdnN`e{v>Y^U7(c#o?0~5 zK63YmPC`s3;2%SZK`8UrMU+7>Z|?ZxyAT37Fov`N*tigeRRksnKz%hmwxZ(O5nFt% zT@XJZ3PPjf8@&$eq#D=~##8z>N2OF!zO!0pOcRm_d{z;5&c=vmz zJj37@{!>so^0^mZ`ng0xfXn3?JTB31oG+2D_o*+S@FFlGu!39lTzRxWT>57s_fzMt z1iJJO3F-Uw`*TnRLfmrar?J)@z1&Mk%bOk2yV&;igP6V#`jd0)(O%NiYp8+Szh2VOj$iYx6}ozciJ-iF)Fc1i7@Te(=8Sd~2oomWz7h5Q>* z>|hFF1zfMdW-2SRe9EnHq7ZcJSZj(*d{un1typ}|Bvk82YZ4rSzN@OR<^(E)8jmzo z-p+%)E(8h!)2lACQUO;4`Za$qj@{4`gU=TiEMLQHzpV%tt7Wp4x{#KMmc-_bIuE%G z?0Q!?*BY+IP}w$@$0`}yA`bDyk7$nF@pFk6ZEfO@6pd=Xv0t|zLvwQp$#%2G&jSocuG{mgp+yx94tzQ#7=#) zPfk#&>Ka#dfo_ow$Y@V*%KlNY&#~!>lLTM=Eu!2id2rXgXkJ6NVpOZBs$H!P;p$${ zqO+)}=z)R=j!`vWS+TT8tm5Y~bkWN_cBqzc-dsy#b1>uL3yL{ZQ=^fL3{7KWb8}c!atgY+#n)N`NMX#t6vYfbf|6xLb2S-A;RY=&6_v)uNlOchzLb=dd*^LU!d!s{ zdOdBHDo;yQ>+yp~`pQlN<)J@wzr(*59goFB3E=zLO5L{B8H>l#(qhKvx=q(^W_=N* zc{}IGmw{83>{xKTBg{#J2VkhONi?h!gyJ}bj%7cI1sD{sY%{BG1z!I!;P;MrPD#vOvpF*`6&OEVrDXcnR!t_uVEPB9~k2$dffI zv;PiV(*R4mC>o{>ob9oN*K*Z3kR>`gPszrvqf;>(>h7xtL3e%9DupC6Zf}v#{5Brj z^~dAzE{WH|s113(RZadfv*h=EQfV!hE7j~R+LwnCzknxsF;VoM)aetGVolCsKmgu$p$W!K`J*lT}sT+Z&ASjjjBL6p2QB@TdFzj{RqCfV6xl$ z0*Mke>gn?ICg`zn@Cy;FcChib=PO$Aq*;F9W5ie1rLo6kN0p2l6`NT<7eyeA!F%_l*tU=4z#h8nz^L& z_K>F-6Ljm|2QZSjagFj?39A>tQ8QS|91H~wozUcQmi+wt4=hEvFFXexV;47$yT5(` z4KKimN>L~8mMV1|<wlHn}prYoR1Kc-m;R7d^F3oyyUZZp9-LlY+5gq>O~~^P!u=XhpC~0(lW;XwBkf*H_XV6(dK7vzFC~lvm@`sHn?V zeF1Vs?5QBsb&gsVzIqe^^YT#YsxITLa{IC&+~Q4VwHl4Z;KZy!`qY%{$Dy zYirQ9P*0vdqsxvmzLAX?hV8Q;7A45{JlLd9gz?GGu!&9QQ|Z*1)|qFc?lghe+(GqQ zm_H$J%Dz;ei*70USfSX#0}-Ycl=Rg7IGu9*;-B^l?FPLpnF*UjIw zsOc_KwoQ6R$qc2pfZQl1Qfx?|FN?G=C3b)v>azU&|Hwc=yjKZ0T4abWVkY1 zmaMf&K+y3)U=U&u=opcPOuY58Sg1krOqBR0N77wMM2E-@Lx~*(UZ$@FUicde zVmg?EAPfY`cZ&*3GmA)exV=Fq5TKD-GQuT)REDjAhYN2Z&Ui8f)}a`p9e%hn(_T3I zAiY1h8gUh9e#f!_?sy5{K092wWt;4U^?q*xvDA21^a@OO{~=2>CD_LhDTsx>m;Nm7 zjV1*|EG+asA6Fe6A2K~B^d$R+j9{}43W^DErQU$&T{SG`9gZ*{N-~BM#2W5Z2{R{Z z*hi17{ucJDHw`3~r*4O!;{HTUP4}Ah(zVb(#1${xE~MRR{2+)K z2@-2Gt8k2vrei~kIeSc)(fB-5_fS~oMOaw!6q7MLSd6Q1^+cu`R;wnQCY(l$8l`;( zb@pGaGwTg|K!gfMd_111v4-1WK1?HIg*rB-=Zt%b zUmLIr*nl_HAUC^7Vg?7W7&mKpF!SK=-$KT|O&^5)hCD8$dCv48zA@kRD5!q)N9(96 z)o@5e+o)W%9tuV?R)f`8$f&8gR(-F0c~Pt>Q<*8`Q&ohGNWer7GSV=?_H6C)8Vm0_ zXwE@z?lQwkcQq2z5{{|8j0;yeG}aq!)V4`)rX^tWkOKzW7PEg49Xjxt= zk6Z|?r&bhdfPl~grANjNAnQ1&5Xa&TLVqA{P1BK!)^x+phW)4pIlocQsi!_1s0Wzv z6XJL8&AtsGX%9c7+Asn&Kc{E6vpa-e%$>W8F@7gp51IRZDxcv;Gd-dyoi{n_53PY1 zU9l>+84`=S*CeqXXB%hgXDeqiX$Yl0EeTyeY#=~n13y~Aw;(4LQQ zJV7BRCGo#&rHv5^5mly?K!hS3d$h=53YG0nn?#7iKdKEucmWgs9;o=m%OE@$8fX(9 zomMtQ9&x0h(>O4zfy=uk)>;O+f^Mjd#ExN@4{0o>QA+Zf&QUb%e4|0leeVu2M73pl zU&Srw>MD74qGU|W>G`diHF!UaD^Lu-<>Ys8MsoEXe4LxDHbUuiah! z;=ah1a1*Nyacp3)>v!!Ix9fi!!BSq;P|ciGdx$zvYR^rF4KnD~fmcgS-1jI+HhsCk zs%zb8>Teo;2#9oOyLbewOg1@$wUXe%WM#{oOxa!`j^I#@q|36Rb9lU&iO&_q+Y9-e zOhT6PZKu^?u_uL^dzrM37KA8RK!#1La!{;?lx#{gzwfQyk|1;^J~Y~_^|RTSjBbQw z&^K&$z`UP`BE4_;npSiisK+%|rKZEeV}hnmD3y%f1_5Z%^$NRXV?ekejU3Jiotc8b zvB3IJB4J!fqKBe$MEEZr_s9vV9}F`QGJVo+3@5`v_;oy+>DbOK6cVem4Tl#HL<7r? zp?+K$zTDlMw0mtS*y1?r2eltQk0tu`J-I?z*|mSr!}n}A`KgKdA~WK!%muFT^*p-r z{*JtK0}41DE0{DeWlrk_L37L*O%Diyt?5IL#JN~Ri&U8*XQ+NK%EZX*O1m+dj12iQ zZP_>u+Nn>t6jgVv9Tjp>cRFWg2~v1_xa--Y_v8CpZHE}+^Jtt# zmV1&;)WNTH9qVZ^KYDVfTSb?q+w@DVj!!1;!f{2>HV66J#kxn;#k&~T$T26j=iu=14v?C20X zczT`FkyU!u_rJa|q~_HdgCyLu zO%D)Gx0|4!=eN$*vB>kz*7}v_g-%YT7Qfy|dIn}a-m4)JJ@19cp4$(?mpX|~N8OC> z*w)zk*veQlKWyalLomIIE0>8h446*ymG~~6lB>*ynQelZb>f*-idS%29++-3(eW~6 z+eN!%ORhh0h6Q|k`H)7d>2l1&+ymw$UJR7ucy-@nO4Z!_CfDf;=Vtth$j7zpRLs)s zes#k$6?iqThj!WdEs{59*+Ag5?g{^q zz`bUVP(!373S1g($bls)APmARQ_aF_Q3h$%e7fK~--SXAevrg{6c;X~s5iUf=Q7j< zmV%9ScxIFwB4i_)v0mMFDKE9UJP_mhelVqbHbvreMx5!XH<()?XQBf#Ee^Gm=zGNL zQuU(#(C1-M<-X=x+t0~0Ar0v$UH}BgF7*0BR7W^M#D=Y@iy{UVZy$g;{Gz8?Xfn60 z!)u8gjUB1oj5Vsivoro+Qh!;3ooZu*&r=s@+va#U*1l*x$*}5bFD#31+l&S2z?s$A zXVAn+N8hq5&eDX`AUP=7=}$-`9~rbV?dAEQT|+gfl%*`e{XQS*3+WI#ln+(P6_yjZ zriffb=S6dVq~m!b_K88oIs4a1k z_j%83exGRv`?!ivOJnQbl;mi1{09+^KqbE&(RzLcBk}1tnYGjHGF2sL$Od>vQ2_>aCxV>#j*%+G za_OqgUPPZb#VSgjq&SaXLa1GiSO|Oy5{^xkdOCHlHk4{oJ*tx^6(Y;JFe#f!2pcg3 z)@K?!WOLPk5>@1>>NGt&->~ImLWJ(INgv~8R%9ejd)oU!+oHhf4kpq*$wRXU1Rv<01E)b(MSzWCrpB{2;l_VJY$EBT?1Ni8CqNC%(jm@D!j6RcjK?uwWAPq4E$U{ zMrkSKH3y4h&tT#NoDVM`sp|CjLTcMWZlxnjVl7YJ`4E&lZ0-Pz+>E40$(pNpv==R` zbY5vQrbI(Z=TQ~9HU5^70mZ&!7Wkhcj*dhaa;zIh&1uFCeZN}b3c={m8T@&U!xI3wSwK+H$CH8TEW}`GSf=Ye;GRjh>oHPH?@%d1Q({2FBzJ;BQyt}%g=T_ zt^39jZX39LkoR0!s*q*q$$jGH{2e2P+Q;^3;{lnyv()#Dm!Tn&O3CSRFY;FBAzd}d z3-ztvK#5F{@f@pz{8G#jGfR{;T>i|Jtz%=;YO8Ursuijg?Jdgu1eA+5x&Gb0DR zT}2gx@woScSrf@A1^p9cnD(@U#McveKGzSL4Vm0>T-c$na)zv z$zh5y_PlJE8&Q}{`CFKb$bCOd$6Ki&bX0W~BrH=`zMnMxbnU2uxXKg7S)$WDL+5i} zz#B8U<{Is@=)nMkURc7~1bqY?2qKNz_jD4%l6iQn@vBr%dC?TXjLO(LE7OPRrf-qtl@z&X-E+!rI;U; zFjY>s9?u-HUh1mh>8uRqCbt*`Ri$ujf|s{coI_)+kNy z)8Cq@QDo}P`rT=;N&;%1tzP0y*dt-+$!tqMQ6S=(T%3GE5lS(3Hc-`L%Lsg0um9|L z?r`3Wd-d%2-R5+B`MG&1-qAIMr`Oa3AbT(xY6b;JpxD)Gfzqr~Mv_Mj$=QO)Nz`_a zKG4}_J6h8YJ+)tX?=DWrhMO*`BsO*_ZlohsgXTRklM(iFdN5XeKXeWH$_>>lQ{CBm zPg1nBcPb0{rlUx(Tzu}vQ#o}2jS;<6@~erbY>qg_{R_v`)lIx^ZT5jv$*1q`@vo(L z+UvV;c-jnoD$I$?tT~o(I&^|FZJ07W#DebCC^Pqy7^Fu+`K1+)s2LSbN=*F2m5ERp zr3p(Db&?khJJKqiDVsQW0E{XuM_2#TZY0hAX2bq)K0MJkiY}&*(vAgdN8vTbE^i;Fw*8Q9dtQx_gU|{cUF(^>oMU zZ*vI;yK&bem$+^x86l?4%#;wsp;}2tgzk?=eixyYkMoq4?Hgvi9kGn-P4_2LI`p#s zAt$pb#VRdxK)yuofCUyqJPj)p*tklnR|wB3`T8TrP}gABaMxVd)_Xb6DSJk#c1ozK zci0X1PX)&tanB+CJHZ#-ghYq-MK;}QOXVK7=25N37H*HEt#Mg!B=7-Lt^+_#aswu; zI0?jJE?sLA4+l)mcUALZ^vF3<%&o!*^3z=TU_7%e{W@)d z*WD=r%$@7A7s4Nz0s@_8f2u0fb-V`f)JyE@o>8>i)kk(;&vKUptkgAo{Px-2)$htq zY=JnwO$Y!>Z&hwsvxn104vI4KqUtE3Vd$6_(_>)6HkY>wF_sK?^_&ZyxP>!37Ne2C zL{l18b6U!BQc4Fgl3le)GA|zM53k#8`=TXRE7WNFo-XmV>f;544UAUr*gFzjjWEzx z=c*$3k11e=@Q&a^kQ|JBhLPLI`nocy^W3pX$de(`l2Q z8q=e-8Q$O(=@Pw5URQ;&y^^L}mCGOIIL?f*{^>SBOOr*lS^`eXC)YGhchp{l=^>?Km0nBzcu)uMB!I9 z)ISKtuPy!qaQLSK`;-E3S0s$G+e~MDX2?-2RaxM8nz! zDM%_NLWh(5d0s$305Munl+*4d&CIOm8Bn3!4YPo2USuO<*M46Z-Z?U^o!5d!+DJ!L zz)s#d91O|!eUo;`wPz_g`Ux>z>RO*-nyZP!q{j`Et^iNRO{x>iw!uK4+lK$8+=za4 z`(|xkr@{gPtN|_tt&}?m9nAf|u!T2(5}QcysPnD*uCw1zB~Ien%SOPD%F6rH zz8pYch(!DMd1vl|11vs#5Xj^@njYM~JG9EW(~6QJ*C@s*e`}PW3QwR|w7n*CIVlnr zT8~FP73EH#FJz&PR#cKyCfyV|GE3r)cT_$qVoXttFsgdL{+#Ds*f$k6AFp$b^BhY` zfn-BxfhA;_EG0c0jnSB-is4lxfuP1O0~yb?qAvc{S!tt0@-gxX^P6+&#g+~;tOZhG zKG)E0*I};M;djH^9ZXhn!+#PO^|$iJzn6agFDu^rmy6W@p?L3KM#|rd_n7|1egC6) zkBOO)^RJk{|0XSpll`yMGQzKXyzhoK(C%4V9v<$fs_jo+XM82)Pt|A6B@M3a3(oy1 zg^7s5tMkEZ7ZE{*JHW)4f&YTh z>8%71Q~;7mFWzG!PO0~NF0#P05P(7r0HPp-uon+usrL+eyC8xFBrznR2-^u@wM!HT z92K!q;WdmAOHlj$4gn}G!krgj)85v-HI4mYGev77o~HLX{EConrtzvD1e*Q0yMQCd zmA#UAz5!`9`v9g$b-tO&9$(@QR4c0nC#Zv`{suULVh8k5o+(Ly1$-pb-`<6y3j;Q9 zTFsAL>*c74Q%!-}W_^WxULr`DBY*>PY(08*Cm1#fS}S_rhe;KrXY@DQzmIhh3}189 z*srv-#4_a7SaYZh1J(UW@l1pRZdE~UUSZk?a)ZbV zP4i`)$nb7Af_LwC9DBVJh8z049 zvGLji?0AC`T(*95JKO(J;7wy_ubHHMu>I`uRnbV z>ARt8wZNNk5KjZl8qgEFL}@S$d61rgIKK^%CIi0N4-mQo@Bti~K2|kF>svY+?#(v}t|>C%}7ZqL3fHpC%~;X3d&+A^8D+%|z#jZo}gTT5i-5x-R?vG-xG zgH|j);Pr$APG93~mwi3Ahy7XT5#ImJ^TvPa`tqreE5AL!+bN#83u+Vi>*i_DW(A}X z3O;OQd6t|KdZyxyJ@~NRpIyi)P5(jD(EZ(9b-NL2dY1f|l=mro*oQA`uDj{LqBP87 zeUjS{4YDQ1lM~2HaCUhqk;Mdr3)aklBX}3KGT{0LkV3q*M!}q-AfG)rwL!<@1oRtl z%6`QSepcvREp87XmpkTk+*7Xzy&#|U^C{gb0B0AJU66_007!~ZtTyrj%-^V#BGNEf z5%!^fOA*M<3fT*1xsQ7lw!?s_vr4Hslou|ySBNr1ZIxOlbj%(Ren9FB2tFmoEzYzR zz9Lx5(4P@OdXMy5FZ-(avLFj>ksxgE9Y`5*SCD&7Ws%+sq+TdAkUcrAe?z5aqe#d>2($yf zrjVJXMBRAq4P>^IuQKk z6#~7--3b@z0BJJ7`@>A#fR2lD9jGw5Hi@kw&RLR@C76@4kXJUN~dIJzHhLefl&6frD8;PY7l$87i2${qLfE?7EtEXKA0z(+zSXWwQ zxSnQtS2_i`4htpwYm}?GY7lWG6W7jUH&)^%EcyBUf%%bd#EzQj`N1Cj0JGB04!UunCTw3l6=qF6 z*}d&60sVRCxb6ZbCU@kQ8Ll?^FS3|V7f=RY>?!)~UWI~NVX}{)eF|Iw{%Zq*FZcf5 zSnAtr0`AovE?*5>69Vp=pyX#?eQSD-`lD|5n0>En>{Tz^9X11$5jW19tWEr$INs#N8Y|$&XE;Pd>W2=V^?0w{?HzLLpa>e zmowJK6_V!_ zz+AQL@yB?1g?A|5DB!v| zzLAV%;LTMQBf7l_neyb{A~1h!`)_dZcT7#@9JWqHEorN0vW--gX{a*&P*pWLWRcJy z8!>B^HJ-ukGm}0^De<4!(L~`0dIt2h5AA&#tQ8XA;yZ6|K~v+1^KRJ3|Z{2@)7lVRa^r7 za2nlb?U*5S@2GteT!N!k@APoGmS4X;fdgVsm{I6?#8cPpE&TZhZ-ruHIO+9R1L&#; z#l&>i@}V>q(Fk^189^}YI|V?FcY0rAc6no*xX>N5ST=@^?6csQGcWr!am^gF`W#+N zNHT5vEJ8RR;If$4MvGS+>X9fMXlwVoa48($+N1SlYM(S`! z;!xQ`_fJST%V}aJV~t1}nEYy^4<+_~{8X|A9oY-Av34hd$H5*7#q0a2#A#9+4L3I2 z=K+mlJ<#_cOqf^V5mZU5(AVh+1nkL8XU+fF~KA;X3Q0`O2HTUfEBWa>s7L7*WFxFS(}5jszTP1 z@OW}%%*W}vB2j#I z0TYfyNFgH`!uN{gG3ar;`UWl8NlP)SunSsKkcPC``L9=6QZtj_tSgDVLYDIdQcYFX zmIvmu63ieHKBQ+RNt_X+A>p{`cuFS|H{j5uAy7W?{*#i>fl-AysMT~7d>@~GdOxjz zKNtjVEx|Z))#v|MV-QNl-IRw$0*LEYknprg6eX>AF=QeB=-lYc68v;W&6T*FEJ4(Y zsQWqNUS#rTuOn>G_Dr7ZGWA5t6|G%_y%RO9YBX@_j5S>jy=2W=`jo2h(H=M;YEnRZPny{T^a{B}Y{4n1q5Hn`vA!3cPteyEfm$_nt9zRG0pg0#2v5 z0&-Nz`a_(dbf@$FZl#_G7Bl7i99UA#u6fDg0eWe9yZR7!6ru|C>x*v*OBHUW;)M(G z(w*V?1Nc;$KL+sA)8}}+2*=Pn3(2{l#;W5BEHg*sIXibnKK=~P!+w@wKvZEZ+a1no z%Dg=0a34mSbtqh7ohR2dR#ANk^ImC5ZzFza-fFDYkW4*IdlmgiIAQ8n(T?2-7n#h( zJ7*1l{4%s$sK+f_G6LeXKJe%EZi5B`#2TV$aN8TaA`AfMiy7Lp2KFfQi)_EwEfvHwk_~X=JBo!6o}h3`{T07y!a}BUJBRO$lb$;8#BliPG|Jme7Z#;2 zJ-h%jqAbIhb z_Q(M=8c#y@xwGG-&ha9ByKQ;iWOxTD%X!|1n`nN!@2rv}7Q)!YbF3-k#ZngStUeh; zQ)w`5r0SzXIvEp=LpoIIsTDJ92iPNhoXql=W|(GKKrExMhM|U`4iFcFJi&OaL01Mm zgLw1sTk!Aj1MvI&s}he;ul596Bah*)g+A>*FFv6@!v%S+k}*d?2q&IMOg^4eeUye)1s(+tz|@%*#p)QG_&Kb2v&uA-g5s-tu8rpq=>kq`He4v0 zJF+)+2DfH8DE*r}LU~y*Azf%`^gEGBTP;W98)W!6HEwg8$vBS86%X4vFOxj=#e$Bu zwpT(SymzJL=D3_k(2n#>>)T5DNDADGPLZ3)D_O==wXixS{s}meD!fRUZ%doBETzkJ zOvP`th@}|5En*VD=p&XVYQ5d ziHd7NjG4vL>_PfWsGb{KfCSqmv*oU)X6xz0=T0xT>$NwaYNI*X*6(FZ3hqw*jqQ`9 zpWQ(CcbVD8qlL~iN!yT;u7uWDU{j;&*T`t73p8D2np8e0&+bQFdZktG9Y zE(^jusT{NK!PAJ@Uq(W#qAXGjK4h^sA4n{cyFO$tAScDdRSOIR!IU~3{%bbJtJx2> z9qqmQ=WMZT!RB1U`^3tdC#fycjv_=tbxgHUKcA`+>zAP*VZ8J$lWKx8wOze>dI+_K zU3H43?g?;7Bqp+uynPw9Ev%QLjD}X{T*`jz4JU5|HH!V}o|%zKk&BwSjn##N-3&wc zB!kcA=vbW!!i?wDA<4{ElMSX-^`XLqn(tu+Vb7UsPj-B_pV<^pE&^l{@T~PREU^h# ze!7AnkWbPauNv5SJkd{5BxF)9RO`h+A1$leh0Vq5!a>N`AouVRRDJW;Gd`h}l%WiY zZH+0<((E0!ue**0o#$7!AUK4#5_zdKdW8;^YO}Pu%Wr(Yq%s+|)Pl%~ayKp`l)3K@ zq|b+n#)|v;A(!$6O4p8#Z=yjf@Hsx&trc1>s|oEU4`+CDZM~V4(03~~zNVKiQ!_Ul z>H_auJaRjHUG0t#$8>a^J|k%fXtBwa)Ot$9S(WRpb?xQW1Iu2#5bAj5mfW>xc_Vkj zF&x_T+0|TfrUEa|`?36L^;%8&s$UIdj4q&`Wr)Kh5>`FXH*qSnNYqKDR2xzyS9>KE zC4~z2Or@gY?xP6P3jAqM%R>3rjjkjA;8}_y0N#t#Qmc{5lK*G_SE*<5=&qD3@|9+n z$K4slN=-*vhs9)FqD50A|J#xNC*eKM2h=CGU!0E_uL@DWj6z zBRImp%U_PLtH=x#0(4d%CX!=P%0J;|SmiAcK-4NMazFoV7n!(kOmqQ(PdU^QX z(FFSxdPF>KiP`09(4(^Lz;2;jtaI2(r9gNjc(ClIo8ta z#e4$~5}v7eMxrXS-RtXaP5N@)Ds8tU$ux!0vf3|*OQ zLGY+2*!DkEUmg^{qxF@iG7cosx0&?F!Gnod+Lm%PTLSaD*@?;jc29NN(O0S!E);FUtwqM1 z5KRwN|3J=$0q3%+EpElQpTb|y8*$7Ezgr?He*!wTSEAu`Ii=dv^zE+g@M|0{PUBJ{ z{;a7tN-mh!!UMx9-Zl!QqmkY(SQvUMMEPW4u|{f%b{J^4Svp@o6X_A{ny>BKij4EZu+(#tYn8lZ$vl|sk|34 z@>ZoD`?+I+i#Y;YV;Mq$t^Q))9;Br7orUy^6K5=l6*`KN$Ixj=3j4rl_3@>7hP( zmL$JTkTv8_pBt3W-7m=e7AI=5OGGbp{1SbXjGOe|2LrSDb0lY5wNE zRKIw!E)&@Yxn-b~*C7;$*+Ml=Eu@?D&Gas*J$5+N#iCYKB3%kKx*1b+0g(d@52RzF zs+^jI`z*I{IAvMU3bQ5&H&aXQ1?2Vvv}fb`mSR~Dt_;Z%mTfpYo^3j#G~*-#bE2^p zSruYtT&+{n@OUwcf+nnA=YF|Df)zgW}rO zb??R{xVr^+cXxNU;O-VIxVyW%ySuw2xDzxGEV#q%wbpm`%0Bz-ea~OF>I15)=o-~M z$LM!-&H2pd{XO+s2RF@kGEIU_fyldkgkj;#$MsVc49==LxJJ3rkeRmbNm6LWA;Xi^ z{ZUads_NI|Vi241MH5p;a*zpA4iVW&r@yGvHQRm85^*{B+ugpb7w62*cwJ9Un!{GA zoSXzV-3xGUd!O&c21#7de=mJ(eX;hr+JZT-y3Xzk2NDh>B8hS4K$%LEubHr=3uDDn z@^wq>6~T(9!FTJh+MDZHs9N8_aVQWb=TaXw) z38!H*f?T1i8vL$HPpxg0aT3NDzuz(iMzOqHs*ah{{<4_q-0FDp)NCyyvs|MWD>v|+ zFz^8Noa{9$kdpLS-_HBJFm{$L_q{AJ2UHslAuKT8pEOL=h;lJCGTv2`mL+kyV3Gu9 zYVneCX#7bM`D)L`DXm4Et;Qv+LX1tU{WfClQqh*5mQbQ}A9yyX92);E;A?TA*M}JN zO}2=Y5ZE=2hsdowKqpXPLkkE@qqWy@ocXl+Kc@iY=k&U} zAiPu%=0(HQNnLaP;j=k$tRnS^1R4LB$MI?&DMhb}yfeq2vKwOYJ#Zoka=sCgB#d#c z3Nw1}w1UveZbe|FVoAQD*&`W2xtUe&10w6)*8nJu)TQN8f!-Siub_^WcwxQ85{*eO)VN-A=^LsTVq&d~~0ZnCEs6G6Dj?Q~N1TH+;srg5IG>;P@F7JHkH_Otdt zQ@eSq*H@-eU9}=w(mY0haYNyCis6Z@cc%6p_hn>bOxN5_)y~CE*3QOG*Ur195?sat zh6Y)t2t_ZvXGqbgDy+&uT~tj}V@P#KeMoIcqpiy%10&^Q;kYgNRbn+~Q|Lg=5D;pq z^Wwc!clnw#i=Cc(z2Th0)n52xHyK$Z^C7rJB4}}&mhP>}Ho5NUC(5m~`OIl9&uPl= z+^%oq%HHRel@uQBsy*L&P3~)tMFWWHSw`V&C%SFaNgG8oWhG7fMg*ZuV}m4&Up^D} zc9k&p_V3WZZZFS@s+aQ82?k%^*UHJ|+P&b|Eqi|7p2yeNmg~=tzL$|Ndl4(j zl*A)^f01I4?m{=T7o;nT`wf+KX5?C+u0gBgpo6i&qQRQ>C%6>lGE#h8wTr zMf%EYXwHf3)`6nyaalu2hv_Cr#U*}L9Am6x3QKp*M!BfB$CI$*SYJT)3FRzYq|*)j zAeU^AxwnMGTY~59E{HP=@tye=-Cp6#e9(*?pog!k-+=2@MgfXe)o@h zirV9l^M_3dd-*LnXM~cHEjGgi$yzeA=ZQ^;uC0)&Dy~H7IS847Lp9%xA0VLCfU=lZ z5E3FjBvV6fnk9eXn3JDy+=cpiL=)_jv-NZqk5g4dV1w97wApVT2rJp+_Q)4|#bHS-_?MIfnoWYf&UIxjewd@{tGa4I3q~HvA{pA{;c`b+sqA`VB1C;j%F@us*NF7a42&<-cP1hdO?cQH|xFMs~gNO^nebKi{l$m^ROV5!N#iRY@_6 zy>48-67Hv1{4_@6qGf&B^*%I<=8fqb%&-%$aD25{GfC62&0|VFvK8^%H?2il5{l8g z$}FqmVtLbsSh;E%g)Wj!ZEj`#(f(?HOi9x*5kI&aqOq%n}o52eXu~ECVH<96?T*n5Yxa{wd(X3jo_2Lpu$;=$W zE_$>J9-m_QOsiG&?}o)jIjgKLXhwFLmBOSP;Ntov+4Px(UvUR*HsUj5irNA{_OeU~ zyHU3ftC)D3zZG3B1bQak!zvUSPH0_DwRbMi6yKSh-I;Y5^8Q8`U-t#~4pDVQ)X~u2-we0N}u}B5p+hw>c!ZDFBiZ!O4!CBYiZDm_-j2h3G4*Hd)NKoC7A3lPT-%b?<7YO4-J z%l|os4TzEYI}?EgXyE!|5O9=~i=mCBv5=j)jVaL|ZWUlqgRro@JCP3E-)wn077kV* zEuV>l8ECBHpy%LVVPyrv)qro$!pz9R^v{_He_CPw$s6+YR+YbvX`|qwFJ>|(i z3}ju;G~TiZ@wWO>q(Mo-@timLbKZdd4`S3K%rnHkpXzZ@%Aumncu%msH1^e$()*n+ zk4su0XFK~Xpsrn9>3)5<2{fes?rHIgzq1w-ZAwxb@x<2=(dI+h`@R)%^Z-}+uEAbx%^~aOIO(1OOZ2HGW zAY%A875Kk}(=+`EE(8{es=b<>rLnz6dgQR=*N)aYHUW}LlrMuM`jZ!2jCeq zA=U}ZVvQ_a014b9Ev7rnY662jpdgAKlk%hgVKZ&XeYMrV){L8wWM_Cjo?%0QX#K1= z4(T-Kws}>`FOa?c+S9xJ{L1HI5(r51#{v&p=15lC;9#W&*~bU$+?~biJHzb(Jn;H5 z?mD0MJ7-#C{QN;&44f}g&hEv0Y{1Oi03|FsB;WMWh@twP0aZFJXIovn8^sDB+F)_< zH8YYD=l%mienB7`bBl}ER1TR0;A2hzGQIWZ^Y&wK4^T>aP+IGj+a`&Yx5eyR!M8@g z}K8g(*0a4@lgyr&qz3auzHQNv7rd^V3uKckd|BLo&Yy z006{HaYay>3Yy687qz7*3%4P7FuG|Q7}7a%j1ag#pvVWRC})qU7XZ#!ouv!)>AXI6 zb+q+BUl__v&zh)f!dB4Ud*HpWHMK=6#TRn8f2`Xi2dqMa z1EOO2!<4K>L^@JExL}Q)*v^3PgQx^Ggl@4)>P`GtzLH5K#KbR*fDn7!t~8m`r$#Y% zY#=LiRq#5Bq?k1{0?@sL_(6m1QSdtoeuxHzJ%#?fv=cR)lh3IDh+}$w?q_T}q>We> zqtXYy{r=JvAeIyn#n?fo<%k z_((CU`t-RjZz%gs*R33* zq>#Az*RwMNqX$vN0ig8;X+SrSY8x3|mlQVSPE$oLP_6oao-;+Bg=TfylXgXb8 zjS0M)q#2-Ey5Aikjhhq3OKf@n93Sr9mX*!%Jt*zvuVYBgsA&EgHa7*D@pa&H?AYwS z_mNz2hfsIU|cG&(=ZZ~B(>eadMp|j8O-{j!vhxan-?x`5pV12hRK#p1cv7J(2&#F0}YBBuEEBaYyfoxnCsljs&xNp@5uW zA-LTYOflA*MB%Jqsna1UykW*1!PEOS+hHW1AeI$Bwj&WJkHi~engq@m31o`whp@Eq z>7huP2l$-PdnP~Mez7jUAN6STQTn*CFA-gSubcrq^@Iw0@_75oPawN40&ZV9f_$p_ zKN+J{1KyNAdnDKh(ws}=&NLUG^5xPv0RkWR&%2)>6EAR{RNnmq6cqMA^mqd7HcZ`- zQxtxb@b{5i@}bH0gj@#%6#{PTA#W5sGOdEEZ$^`RMtUDZ>L5hI;y6IKDXTywQ7;om z9bh_#Q-f3GK4oY1al?IgbNLRQGl;!|FxAIbj`)jn?X5|T{Vq~3jp{AxB7dPW(d!pr zYk-M2P)S#}8Jw#KHi%ZtuWE|7GCU$ZZj8D>I6$-qfk7(-pasgX{85~i=%JdwmI5P- z6hl$=$Xi>Zc=oG#a+)B~@ij3?MfCoF`To8+cy9d0Z7$Ly>XqRu?=hHd&W+AAS+m?} zdR|KSEvhZ57lph$*45S*^BR|9Te*fVxrNr|)w$Xcw&RzF;mdkQA^iKTf@o{8IWFZW z^r09)I}FWOv=!s83k~HtbWg5dK4-lUZ_S|o+qyk?ZL&xYu5_Rm#AMygMzoCLL46Dw z(EgvGsm8Ck>$`G1vrF_TLiIn^_B7~nzqjsF+!iZ8=w7t1a0$tUBz8*?r+4IqBm|>p z92{4amLIq*9*55h%ctEkcf>|Bj|2fj-YAZaVB7-EABnN~Mq<7-6!J-w9~?auhQ`F; zqhE_7wv*l}#>fpCo)~t>^6C1fH4I`R^tx!q(i5i0G+p4+#`k#Di9XHrqm;i9d2|)4 zd)gFVO+wS8Bcm|whgMXa#6J`Y^$1# zEpR=pWrAHoTNKy6D$_Jud??1Hh6RHp0Uv@T{`wIqQjx3*(=&)Kz>ri_b1!%#6~|*% zp2HKvvg(~hTZc1&>h7+) z-X$D@PcjipN$yPrY|bWUmuwPCU%74To3s;)wX2mo)GCwYtxRMyzgozCY@{)Ruo*(B zQ`ZDdA`%2L|CLQG8&B)QFl5qAyNgE~mYL0@v}Dy%_)=gZzk)Rokg{iDNhX}iuyVBP zx=N{3)W@X%j+b(A|JK=wei zifXLN8KqGPKjKd8*{z*ZGQ*GNr_-@Xt_+0~noM*{Gsc=2OT6Vcjedl}7Is6{T# z>&~1-l8oNh>B3I!!l46U>!w)I!tWkBg-U!~k?V#PF_uR#y46aUx*JjqbZa=#;!;Ua zVd8~fROrR3eNUgX-KJOGda-8BCEQH@`WsDU_bJ)x$R|UCW949DU#R`m>L$0DTV2zw zcD?*ip;4|zqe1)r)KDygv8~)**Ja~B%6Cy&JcDvz7OKiRZ`M3TIW{@Xlovf})2tYoT%ra!G#w{? z^>9|J!cxX{EkX0(KyyZglKI&qnuJ11Mno}w)gT%rVHG`FzjEHFd8RujL9v(L!ikq#SW&oT5HA^kRIDFGEv!(p~ixp#HEVf4| zKEhT=Xd*Sc#|8q1HFSvwcIIhmUP`-gR7m^bK$4ldpS6)nhUIBqhe1H$n-4|Q&WOnbkbpF7V$TkS(2DP-ghkdhZk><*)67H z6BZL{oH~-Htic`>M|3qsjb75cIUG8F)FMgB^>$v8cb?#A%<=_p=PnA9=KAD^^xfzn+cAneZ85Ps z#@2$nQM`@7*)U0vRokV_r#P76H}^VYmc)TO1oBXhNukcba$<23VzL$N-F5l;hQ~d( zFU~7!7ZN(UJO6VtQJxFpYn!@}ihSU63i!{v)T zxlpsG_E}jH=O>~pskYk|Cl83~jVCgu3C*ufea+=YVy>4V*nXYuS7t|;?bCiV{8YV( z>{PVls6x(tAZujikl~?XU8)+OVpcFeRW`3t8R^at`B0J?C|!!8++k9(1ohZ?d3U5Y z!zyy&VOE_{yH{hGGCKXe%sR)+ohALS;nTXVTjh*GV{@)bZI1G!W25pi+K>KZSwY61 zy3>8Fbsa-y%NL+NdFXTnW9nKmguoPDwMWBq?U6vrN}gS56^C{^y=APIkXQYjN+j2! zn)bClc|}zUH0G~yisOPRGQXDqYkYd5be9E8DuL={TI)rOM4r*dGb+u?l-U#UBt>kX$I$$+vF;`0Tm|G^qEl z+V++{^Nk3cDFn|W#qPZ^BuPBJTfe@M{FO&b4YW|XL{*tOh|EKs)y1zsv;J7~(D|X`*s{G$*1%K!Qe=h~_a{iCS`X|-uKQGBY zw1)rJ;uTPf_&cgokBAxAvif(#PUz9ip|0JW)zu=WZpp_i07*DQt5r;=4(^L~ zLm%@mgp3*8LI$g`V}cMe?*-cOqWi*-@*GK;+NIygF~KuTOZ5w*$Cf$w=G#2W86|l>mSY>s3U0dUQ9x_I+Usws?G^Qyj;&*Yuo=J5qM)mlG>i>>VpcOP zXgCO`*5B`p{ctQIy=(c&mN+k(tHy>aoed*5-1A2w^&*29-DjtN-CDmb;NKeySoW?) zEz`#b9U3<@g-yHaNNuil561AN`5O0XS zPRddPHyfF!WxrpbHkL{|3B}czOz;LwBi`S3SH-}5yrw`kPe5dN0TAkx)zw5;o(dZ0 zLJG8gun;&E1`tD}B_e)-1|>`POz4anzC28Q%0xV%T|0MA>aAtZrEK%l$fjm>>ycCf zzN|)H;awUsPzkrJ#@bZ2^|uE^vt0oOl5XbqTYc<801`P>5Ze6elKZ&YHUODyb9^!l z?0b#L-c{ojk|07#rQNaFIvvERH2X^NlFZqMC{(!VjWg&rAnWr6u;+sQm=+pLIk2a> zwFXNBMDxwTthCx>4tn$~qIwI9vZ!fXl4HlV8# zlhQa$_o!@8;}TKFQP{J@Mf~v*NT|zMj)WUrXS~n#zI=Dwg{Rzs=bXWHNZ`n8d*xc? zH;?MRif&%q#@g<~Ra{;&zxDvb@c>(DnmuT)#r@D1P!6fn1}}(T(%OpMg|)E7ULd`F z$Nt4Q%eRmYDG=ez79Ae|H)t~@fk4pDEGvqDVF*JYNQ{w>6l=haVGMJa{)OR1QV8ei zBWf_^P=I~+N%wQh{rR(qQW!~9pV8DH-qf(N`#1RZBfInD2-TwgNG(ke24*HinR;OF z2v%c!Am~j1W?>z4yQDv+NFCCLo#CKPFFGc##`>Y8E5|8u0%e2u7}fSP>j}0|-D9zs z_Fl|u+31KmxW+o9>$ndLSBhbv`)ST@;ErqFca7%AqWpeDOH`G48`DBrLza|>9Yj3S z>~$YGqxmdGEUWr4r{sH0U+YJjE=+R5=F9rzucu+3peK(gXLjUthnSzjOur&$nf-_x zqbCl7f9DMTSqDNp9tg}J*6BOWX&ch zjI0WxxTHA3p+-|=KisqZR@R|pC?y=6F{}Q|h6NM%iAv#@O$*_&YO5*6mtZ3@Tx^>8KBBq*H}z#QIkQ%ZV>5<@=4ws+1g#7{RP?uko=lyWG+%#EbBn>PF!ftTlCm z6IO>Frju|?MPS!?C_}uO@G~26L>QJS^lgH&9P1fc;s!inT+?n3G`TTIBHpxkG(uA# zgkiz`h(>PC0-5a-uoPihQ!Q3C$Yzrg2q$lGw@S|{&o!gw6C4>P?S(}@NG1K|EbmeGQP++vb0ySqrKeLhHz#L1yKzOI4!+TN+|x{Tf-s zmf%xn9ziHyWKLSGFJGCXPo*y9=}A^Cn^#JT&T}j!r6B34JJ(Q*P){3>0)Y*R`JfC% z$2XGNW+4T<<8zZ%L?RU&NggpEt*!c1jy6LQV$&kO2*M|W!7?ZJaI1i;If=otrHEIm zy%9yUrbz4SP!;$@d=lNUk`zm6NO-z@M!dxQcAllm;1DZ^9DE^F0(qxpLXiaND-pl? zOP>OwOa`T8K+z?QWmZw>#!X%klxBmw;M|Hf&V00ZYy@)Q^L$x8Jri|^xY=-6e1bTf zYdEq8D=&>WTy1d`77qIYS;%c^etHMi&w_j*GNii8DPm+2mC~ua0KaHN7*3!q3l6uu0wTc1wQmH9$Hu5G5E4p@C~ov3)rC+7<9@S1C;`%~5F~;5Mm9cP;{Gli z^*$#5E#Zl*Q%peW*tpEzD(i?RWKMZcG=sD^hw3HaiL_HJms2{raBJM|8&8O`jS@+5 zN`jYIgb4>36#CwZeg?g#m@JQs0!) zNjy2lJQBoI$vrkQevu~X6iQl<%*oO7skD(E(`p^17m0~N%TZLrcS4tnh>9wT;=0W^ zbUJX4t%m5e4U!L>p%Iw)i)8uY70*S39ySF zNC;;3!(#1EfWfIJnxvsJ=X<{(1vat%+LpzS{^ad!N|sCG7HA+;T6owET{fjRSY;GF z@U8RBy9}}EI{!L^AUNnY7KW3263zoW2L;% z%>d5YkK_XZ8CWvuH1!M5o}&$3KXuiZc4$LJfk9!$X{nVt&t4XC`A>&&+qLEU}I`_W~LD`sC@a9sgeK z*SYj{-{*wtP2TI3rkAzx;?nbzU9~v^nhZUcbIJR9y4lllubYROHB|iNnxkcomFANm zn78SWl2M)7U*i?HhDUx2g1S@N=}H)eG}o$P3&R&-!INwxBl#7MgFIGp#J#;-3sBu6 z8t~aSQBkT(t&@6|>BK2A%SlBudL5n#H>?%9pBmiuMw-b^bZTza;@_7>m*sz`6@v## zUwmfJwc&m5hcJB%8o!cz)OalCWdjCtT$T?yG~B}8Um6V+d?uPv!ts$6u{^CWW1gF^ zaaBdfJa!VqCn#lGe1_M-DHtm`S&Kd?=ckal5?+owijBA{@&=PQ$9+wNY0%O);U5{b z_jOn}#O~!(_9F6HkBiFTTkW2j-Z-Go zhcS*vOZ4tywcHcP1OE)tRryn#^a*k|XasKwCpp?ok9D71bz&)^fwa%@C+e1YXJow7Eh#9B=hey0yc4}q&)`zzjzHCkMmNSV$#f67o)A(O@ktDX0LG%aRL{>MrADT4F- zv)l0+feIW6mGdOKEj7({Q~AqUDu+P3+cmjf$1l6R;mGI<{S~V1c;A%N1Fn=Q?t1VP zBh7Mo{sF?nVe-&y0 zU~`oZO>e}Po*KHPY8rbFm1YguEK=W(0`b1d_VPv?YlHZGE8c#!JHuZu6^WFagOFW3 zXSB?D4C^bYtLV?Xzl=eXX=Dojn8o@mZq-*RWSnsxoa%9_TGYTwr-n$>7h(nS1#hI@ zagB46EwCA)%Xft=qZa#NzYL5m6tT3c$82Tq)j~`<_I|c0Yi|`ZS99@^V6YQMr`91E zvydhQ0(1vq7#m}gs^3b5_Ub znti{>WrcH+nCs`6pCxRIp&23?(FV>G8x~g~$mx3D4u?6+c1e3F9W=`#r z*kunLD@PXNbNXZ_@70yl`h9%SvcHsh?oR9;*T!rq5_p;$O}}tS5c)Ws!CNnV5a{`} zw7|!^rzkz~5N<3^!L{dBv!Rliq?($O!(-}7IJ|0kU6K37j0|TDutT5yi1G!LN!~Cz z59jDKsCmQ=zL5&A;?T*5hdej~axwJ9wtpi`e0w*!X1`I->2S)_{*#YaFLKh*^_8fY z%&kfz`vq6EiALS?x_yH?|1}R@WkVw>Lg1%Dbae93jCI;``yZM`IVG)J@0&73ljGk5 z3JC3Zz1wDcMiEX;z2FnD(NxqowwgI8E*cCcdHpbd*_5T>AIX2ybs)>28Yq)g%5Sg` zoK}UV2%?rW42Ts@5wnIBYZd$M_8c}#o6-D=oGW+yBCQc@DBfr3AFMS#(XQwn!5lap zCfiugnv!(SJ!v%fDK%1HZ*>}R-hX}3V8l1PE6Du)^~Ca%K~b1G9d#_Z9TRnb`T(W2 zlBOmr*6BBP9+nEm&S9&1F`eoZ+0I}VyJ498rq(1Sb+*ZTwndKRlai*uny12EjjfCL zZ6l6-g*v9igxNza0&^PLieN3;icMp}zUQ^lD~Z!3Y?}}{sfKz|T$x5Deie)cgF?88 z!Dw2_53_aWRW!49k8NaQF_Zlhl4Roa209=wP?mQwxBsd_F##h+{~`7Ktwa5-YW^

9>|3AEle`;F)By#=6>H2%-f6e#r`4j!MLjR=d{+o69hjjPZnjzwDujFBkgh?2?1|S*tc4&g4A=FGqBlT`B`@K?N?TV1vj&O_#5 zg^gbJ;n5X+{_(IuD@@>;(h=V{Fzkk+XD&`kW*nuaxa6v*0UrHypF>eWxUcaeAafZ# zDQYv4x@?!KVvnjp1M}U~j*K&w{Vi^Vwt=@^x9B?+*;E1bx$-YAh)6Wq2c}*OnPZVz z!3gr9MBhK4nt~0{TD?{1k8c z+GMvkXb4RJadH4gAJ5~3;I!}`07)9ai_OzsWVVJC8H?Woz2Eojb_exi6T@=|fFUuU zi`n{TK`@a&I6&L?y2?Yw+{X_>3=jcNw57;wY~?sH5I+wX8w7kUEHW8U9ppEp1{^~G zvZbXl1s*Rm9i2f|umD&4T@dr7IXMmu001gTUcSrE#1CT9P=LNx!1pYHW*2c?uNeWr zFBL$8`%ZvZB+tws5Uy0o_vv9JD!6-_ixvc{2Oe-|oA!$M3NvR&A4cQ{ z>S_QmKn;V1qa-?#7#(GV5xjVP4FpIQ^TPPCZ`T~v)ra^VvxwOvmw>bPKAc@jkUZ;$ zngqUmS7^;}zR}$}%2RH`RxMP^Xsss8-alQ!xd31^m zOe~>jfrJeP=@xtJ4Pw+}sS$pCyQ*CWZ;s5|n0T8s&50XkDh~2Il+bU?jGlL`?b- zTwEG);NTzv6;9SS*ZsEePKa1Hj<&voi6d^4x;NS9pLU0<)4Y#jo!Rp;Sqd}?on8Xf zQ%Bh#fSh+DY_QI-qEt%(?JZQi0hb+2&-MsMPE7_e_cZMzi;j?*{AwG7N)y7ctKK9N zCan!pA8M{*l;b#;dB*Wy&V%cok0TF7m!C&!_s^X^x6AgJbf-f%8 z^^@8bmn$_Ax^wDMd=Ki`=`cgy9CYm}&E8TmNBR)H(*d19hY*6z2vsuRt_iwlKs^;I z#)yN_=dB6YGlb-Yj5KKRxd1103A8za@u&k}^le;ppL9L9T%SJ&8i3FS75~DT3ei#o zjqHcfGvF>dHumWMu=+j7vJNdP4yw_Ri8f#uIKr=75mv7s=8=)GM1;d(KrjvJx(~+q zBBoigHxne%g^Dl~TM=$k@XcR!K3_D|I%R7fM&>vf$-UJ4CSq1F=4z=A7hsZLNxD=Cf|pj4vTs zQ8-($G<`MGME6mzidM)pRDI|shYs?+H30)RAP0aORM&w9b&>%_^I*WcKl!o7yY2&6 z`{kj9QL6&%!=f(Ya_Xet4@G|lke7v2KV>dHK+yJ!IN-?ld1wZFiqqu<$nCSXjX^;7 zbzJlWz}F$f7=k4kg2|JP7ooYuX@KOxftr9+Ax#hwMFm@NmRlc@Rs}cLA-nZ~a+b@q zMA-Pv8Zf8|NwN0f;m}$TFfUfUh9qP>p06SJo~{Ww!MhKy30sK}3s37D?K2XGI90yO=& z7@;r(v2_Tk6%lXa`j?EO6*1-@$1$Gz)eXtZgRFKSvw|Qvu{;N4C5QKMEX3E~(>paMjzfp`@DcQ;qaGz3ei;0NHWAQhl>r`Z^&TN@H{8&dGO>^_ABtWG%9fVbZrgsx9qJRJSf@QXxSUl zbzj1b&J#|YvW_B}+8jQBjH)P9o~n|(5#uO0dG|tQQu9@X1EWV3Xh%PD^$cFx#*DU# z)``cAauOW42kq_LlDn;h*r(U;Ob1r^?`4LUzpzD;HL)5VxUuYL><^Dhm&R%h?{y_QcS^|r$glbC3Clbqf{{h!9#lJ~B4 zNLH@#T15>u5ACXA_73edb@<{Imkg$zp|s#fe*iz`9|*h72QKrC1TE!A9FNE1F#jU<*W31IHZQw^2 zso$dZsACk$Jxlrcy+A696FZ zTpcS>k%;qR>bm=-v5wwJd%`gv4r7f!SULDuVzT?{zMA(&$ zVd2DZ&f=f$FLBO-gv~tcE60oEK`!je$dO}9UmfJcSwNwz$xFf10J)- z^(G;V_l!u$Kjer91jZ5S#u#(*8w@^k#gJp$u#PH0IhtVN#S>17-weG7sizP|4u%dj z?BIpMH#8UybGk^<;(8*54()yyQfF_YK$uWjC89xqh4$%+&dibP5i4GHTdv z#A4};$jl|$2%CKh8hXvVlbZSjCs>co(c0qa3qi`vCBHFi=WL**uzku%{fE&RJe7~% zP_svQMe0;YJGe?j#T(FK=*=OW=_Je{$zw%BGk|eRiJau*L-nFDFnM)BoKZipMwwEK zWnBm&u_M0S!C_>Fx@8WWVq2&%!lGfAid1HdR^h27^e^zLl6*`rC_tIhD;l06`N+gv z#3K_lMQhd+Lc zK3|YI?JF(}Wt0gKr6g#P`>kif+xslYdo9ERA%WByeSOgKSCkeoBvMKKqERtG{K_3N zm=2lZm<{iI2E;`A5=-?Kj zU36S{3}t8WdqN;7d#U@;$kq4-eb(*F!u61<;znh0PtP0Y@sh9B8Q5g*IPQ&4%Ed&c zSSTjqOCpbxmV%Dwk(4;WLJ2ev@pYkkZ^VqKhMXOy&puq zjfw-0+j>=7Gy7z*G}T&qw$W&QokEwa!%;sI4hYQztmmJ@2o6wMuMf}twN;i0;eAJuk&f@(xZLW6pcwZ4IGF}nuLhB@M zg$OX^kIJM>@uFm2Ne0%|zZxLp7sPt|RciSG&%?*KZ$|xgu_}n_IonWOk~*zj625Mz~BC5%O9Ty;pMHh_8by~7jT2V1PVG_d3nZ@uger{>mK_;J;qX!7 z@=~J4MlrjC3npCyinSYXX`-eq;zaqh3{BD-q#m2pbV8?kQUj}(Hjo_PK3SK=3;W(L zz|$X7?(Zp&SDC-$FSy%#6s zyurDCJ+@Y=+j@s@e}Dfj5{!D5n_T_=$Zbe|(d+P7ILx!{^JVix%aO`@hCGP>M2rk; zq+THB(P3O7~@k#Wu+P&*)11*x5P0{?-S_=Y z`0(tXcjk7yQa94^aAs6p4{G&MER0q9h{aqAVc1$Npt@h3jiV~3MZI=(RYXl$&yGzx zl`Oiq>zYVutB&C@hRZ}S zPfvP|mq^i<&EebgejkZv3_}Q%_?brYzjQOLxNE?_OsOqqR35(ByX1E`>$*$@%Eew! zcEvwP%_V7!@M^w~UGCX;^I3?mQJBcAj(saiq5Z0wFu%8OS0OS;`LGzid&aZWcd2 z;HCcL_J4igA?0w7+Q0g&Df4=UetYXu%>GjgP;s_`HS{#SmY2lI_@N^*BXB%mYLfW) zw5Cx`*tssPIcRUt9nb;%mc&+n?!*B{BNY`Q2W5f<9Zw_!>G!K!9*TlQgH9BSH=7`F z|0wJLz3Nd}s}v1`%gsYf#rk4Q0jqo`Isp#*nw=)ZJ`$%H#WaMYB85|eGZ)1tNq@(9 z!>mnGEJ>w2BCL#cz>JdmQ$0Mh?EG>_7+hFtU&yC0=9565_8R;^YwMiWkMGM^t|zF| zAp=VD(8X_};n1Q;WK0UEUbX(=qA02vWaZzJFZwu0?d>$zfI(|iUPfVu0m{ZfnpAR< z$(~ZEK}Lo#O`@9Q2l2K;IoJjF>Pg4}qcG`1yOTC*lOG3qxzCw{8ps_#%FmZj0?7DYbKTgGu! zz+bN3RBm;%-ArjNwQp(NZo{_erP3vSB+Ypb?(GMAVIYm!zc%g4dP!1^Yc9%44a_qw zIzrhjDJ0q?l(9*)OsmPD@F zLYIy%3wA}PqOM8587lqiUHJ&a9=C{ruiE|`deb)kStwboFd-obb&rrq$?ja7RZ30I^5&8>#QrKzpyf1)uV|u# zz>0X?4)JE_5rKdGTK1x`A89=(rz?ckx4zC7&-!IQJPRHg>_Q_?yU|H+g(J>zIiKZy za+{%_R#O&VqG7-gm2@>J`+PJ>F4k1~ymnPTs#b_ZNO}zK~L?AaPLmWlHg6^SJTeIUxjonSR@Q)@8sZgc>IdZjNWIcO}JP}%~WOybSXWv;{ zw68%{%hDDln@+RX$cghDxj5?9fNvB zLkD$^J(-&8x4NYv@pw&aiv+PdLkhHuKUXSitcou_MBz&w?Q~^E(k8LrYS=WIkG%d! zZJE~2pWT+&1lyWs)yZv{ui<5Fk|f8_v z`{dJy*N^hH8XZDHQ$LqWpNR~GX()x*oKc1A-kaLz8>syy>r*-45pH@V1iE0((fg4s z8WMOKMJ#vD4(JqWlVI_lDs#l}VH(@-?rmxP>owHN{xLqAvm_5O&qJE{2gi}&GZ3vC zdA;@5tq|}%%1xezc3#}4Vm5=~UYpAgqkUWcuR9Av{D0WGlU;QS)n~z_B^h9CZq(3q zQVM>}3FeMqLKia1HfM%ed(EQ1zj@7$hV?iVNFvEyp2KcX5z9k^b}XWC=)K%_W9fL9 z4*gzCNvYJ(Fl=NzA*enZkt6ht$SEs62DN)V+4!1$`zx=LWLi`k+)Xls=tDI^oLB>U zIePXjLK96Wc2G@>O>}{*AifN99u%A z=CvyG==>6uDKdmlGnS^*JI-e93oB>YkXQ?Ojh^^%Yh74<`BQ7YGB{&J*VlhXO^?Ti zvpMX-wXN4Vdo^KZHDYPJ%+e%|J=rpVh@KW!8%yPVonrmb4}K1Y_-=OCZQE+{9~#YNNe&8n#pN{t^>@h3xGpae zSU2UTI@T)VOioXTA{vQ?D6zsdTe+2G8Eva?3Rqh@R}v|ywPsdd$rf4le{jXsRKbEa zxY4~%P4xFXBK7yIS!_May=l)b^%PmYipg1f15ONQ!Nns2>^?XL_!&9Irw5djRwNvg zBO`23W0J|Dol33_mkhTRqxPK?OGVww8OB;Vq2e2hSvm8PZ=*@M5c9=;PX7M(g$n!X z88^cPj2knH3RVb=LsDL`5RCZ3ia{4zCC?Uu)jo-=W8^@4MbdS|g@r8O!h!Thje%Lz zzQ4MDK(z~g^Shm|wus#m$OQxb0dN7L3r2lT>2pm&^d+heWRM6)pO4;;)-*ll5j<%G~Y}9hyC`1t*?%6X6F)T z?6Sb5O!p*>7g_C3>-%y2`G6B3CJvO!hU%?+Jqr>IsaejLPqN=VI#m>3H!XA*Yts!{2H;i-KKaS_RA4=yd zp9m`jVx6ofkY4PTZFctD!RVD$ie^iD1+&;(nAMLT^&Mv~u|nHPxTms z_w;Hv49iJIt}PS4vBAyz-tpZ?xBI-*m^^Oem~krmG6eC}`}ZED_dcI_vz(1KHy4~V zyL~+^E7jn01olq#9{BH5kjJ0x0>A}FaRD7sse#Z4&qbnRA^FDDKYn_sCW;}!svpW0 z^;mRmEO{OI!l~=`N&tmYR-j}LmV5n_X+W#}4IzM4{JhA-7#5>6T(%^P3~jVsEd#5! zXrc8%^Y(ak^|(~=Gw!MH$L8hR^Pk80rjvIR8f9)PO3Tx>FR~YSj#1=xZR37ABUh{= zDbH;pZaud^iwGH)tZmBUK)o7u^)2hy^FyLA=u05zY$8KsOEQt3@a2s+sMhXsv!?a; z+44y~(iix{Par(>s~-ayLBnC*mNw4^AnU_)4BpS*k^AXnIh;b)k$YWVeg)gPi^%`F54xrOnb_qx6y56#6sQJR=+h6N9K9XU zPA5Ws3Y3n;ejEc&QpzW!R-bq(lC{>^7N2Tho3Xw*^yU{wGf%wm8BZoFrO&Nc?uYdb zB&fFAeoV5$ac74TTP*fZ&mx_n5~!=^&cJ1}eq<9y6l$$kOeLJmyF#>-19P_$`d#0* z5&C7K@%LYvi0f&HKA($`WnnTpy}0NsK{r@fYQPLgog+px3KM`cX__>EMM`%Q5&}&a z1VnfO_bZVz(?JN{8ATK~g<{?w`j5mvxu7@s_KK|!W6lUtq3{OfUtBkS$M&T6i-si< z+1`uum5UBS*rjQ04gJ7~VxK2wL|GIVB+VzpF{2|eN~9_hA1=cr!6HQ$$@ocVb(`^1 z*0?X5f&~bUvR^6br%mGbu$fQ!4AM~_f#gEVGj9&D8(%3AEEthzcZK1?ans@wQ%Q0u zVP5h%&Qwd;_nY@RT@CmS6TqAax zgozNew&a@pi4}zdG$$J(D%D1mh)0PH^1Us0n{|d3g7p#m3qRXwJ8e`S;ZbY*KG)V( zD3~;d(J!+ppGc&V9sGFW#L_HdHm8mas>o!-QiV2Y z-t(8Yq}=-KsENWwJM74<38pwuIsF*%f-nfzf9Od2FuD}xBrUWTK9(N=T>TJ`1EHGy zX}qOVO;7>UF4&kxg#t)yKA6U!sJF0hJCv6u;GojCLb$}%e&k(7b8~6#X3J*hW;5)Y zkN7JSjGz*jK@+e}M#&R3N<+AN9U)j36QOE9gZnEUk58KPekxf1p1tb@ z*j=%g{ChK-=_@bye~BaHFCx$1LT$`{qwoBqBjhh^&;JKD(EmzD2+Kb@LjLAh_$NmQ z3)8>SsS+o?93hBePd;E1rbtHn653-8$;eu_g$RpN5S)x|3EyHEwVtnNFey?x04@y9 zVMYOwj~mz*RBsNA=Y8{Eju68PdwJmQ{xUczE;a2}xgjn2ZZg@XV>>-w*=j6vWwqo6 z1K~2@cuz-`|VdK%IK8>HN&pQ zvt8nj-iX>o;6tTS&F|T0v@K~nUM#@niKJ5BwAtk57eHfPTl0uq@ebUtgk4^B=c%O{ z8sMpqmC)o=hq%6+A?9o8rQTs9fmZkfbI2?|5)LhIO>}Rkcnhdzcnenv(+a2xGtexJ zUBO0v-+D`GN>65x=o9J_f4#eQz@FWJXt`X-y0(fAZ;x;>3Gz5wxL7rDJl=tM)&)av zU=qCYaQ=OtvHo{LrT=ly{96F<|F3D}uUPB9CjXfKO052U3;gY@{;O%^E7tcvNdB>W z0pR}b897w<_DEjL_{_O_%E_3NWp14e(S?+S1QB9J>?b1!PY-dRSu9jNsQCIeEnYHc z++4*{r3+w`KN!HIo~B$`wQjB_TMFKIK0ZWm#zdxNO9fL^_QPC>ig3_lE{6fAvU<94 zy3zmMv*kGFD*K7=*mwKxt$X_^$DRvj;B3 z=}RmOukgii&nf~^fyp;ZRbgjG8zVUYVL(cHT1sl0?%2^lNCaB7x*EzE&gb!15&9tM zNdU`;prvI9;{HxWoY+}SI22aS8`MI8XP$$QFoaQ4Pis9SV^{AAs3E<^SisiJ>Ao-i z>IVgX=x~gi|MNyLgb9Jef&S18rOB?Yg2dz0&HRV}N&_D?L;)10ECHz@adW>O zbTeL{giSfjP?wmWcx6Ji1_S}D1HVpN-?mBGe78*sm@_XDcdrDe$Tyh0 z`B{w5{#%W}$%bgqOay042%(zM)Ekk|RbpUAMWAPjp($Y(BILt{ybbYj(5i+H7{

zg}$wOr3Jt#D*>*Wk!X}6Y(A1ANa9%S%<+LY*G63Iec?V;qHGn4-(4w%h{hA(3CvCC zq8P#X4~*cJ`og{K4l9_ekX5lL3521dn82493aEuM04vi=?YYoT`3G zqy7vxR?Wu^9nMs{5?sy81~Hhuhp#udV*J&f^;i>lv-in9BKMh9?_Vu<)t8}Tf;sZt zx_2d#Q5q=ZCcOn|jSgzx6*t`cIdsVJCd316K8k&IsGKYZZPEN2u-y|+wZY=r?(PIam~H1G~h;$C?dx77)bz9CZwrq zSfn0Y=Y}B6S>O)f3>>+}bTcBL{<5a1Q@HKH!W+`m7{<9FMLPg$_abtE!Ms253t^V) zl-6tImZa;^BoL#rWeef;%I1iw6ge3>n`T$SK`g=RaHkq%E+ZF2+{Wl%kRE{~*+b>< zohvxa7A`y;6=UWv`>Bk?;CjZ$eBw)o%=y&((=m|d`ph&#lNu%tghsQY;>%TSX40^f zQFcrDsu)n-9A^)h7>->REU7qy%!8R61Un_R$gbvi6r;>paeT{qIk+5y_{s+4p`Ql4YFpnkzzzwUjXtLrT>|$GGK2Rt9o5_jk_E zFVBBPxc+E+r>aS2#_Lv-{q3v4mU*$vP|NZiIAo=k-no11J0>g~x9pV18omkmCi$Sw z#jjtNlXe@VLJQ&0TkVJ0fcWY)$>`ucFw(mfXnPt(Y>BPGJjw}Uf<@I~oR|zG= zOpnE{Ei0IjU67VnQI3S!)hm^erYFB7Q-;Nfb<6jR?Q1bh<%Q3l79_A2<)DWxy>AkG zmPy4LVks>w?A*;sPo(|RtqGf2H3-VNRa>~BEdNkGB*fSC5yX67vu4ikG5ry1Y9!CD zm6Ow*(+$1{)4lmi1|%PA%p4GRdV$yX%cO$jHt!_HD?>vTA6CN3!8mBZn&pKq@@qJk z+^aIAP9<3NUfE%KE88QQf71|k_y`%{Dzyn4f)7+uHT})j zd4G!CG1*hTjeE=4l5yC52|NyymMkWdwk&QQmsLYL<0<^E9G%hv61)jM{2Vm#daXJU9#f4Lv;V<>%Q9y@IzE1AlXG;kn17vw|0c zufe71Yzuj)7#9)J4W1~t9rs93)l!yne3>qjv%kHD1UQLi&k(r_k-N+7@FGRJlXB`# z!P6$UHU>agKWK4GoC1`F^MRnXOa|%X9g(2(oU!S?7(mkos`YL+@2^2r9QvAi1h7lB ze!IiTk6;hWS*;XgHvV5CZO}{&3jtdVjM~-5wJeBVi7oP08cynX*U$cFaYc{%F%JSX zO5^Waa2%AnVVA645SfBT9QWyI0_jwD@5JEE`4M3RsO+Xe{of86G4++|g8OYw$Oj~_ zJM1Rs(`RF_kaWw+Pz5T@YWGT`_%ga?htHbd57yXUBKIi5@2xd3#;w;qY?J&R#vwgj ziE60R^q&<*0<9&m=@T_62a$bRVssYb~rtoKuT7l|gZXAAy15LrsaV#nL<;sz_;5k|x zfBSdZ2->II&2h7j$W8j5(h!Lp({0_}S=496GecDPZ`<4W@K4;S$K^HC&OK|0wDIM& z=QZ*_hFJ#qy5qq@-BZ&VX#Pv14wMQXs`YHi6gu9|(kd~$`OgYNKJDqBmKM=j0!r`o z(0;@Iiat^|SDPEP&wDU#FUI5sb$1feodo<9R6SKy>`L8px8Y;o$Z?=f>k#?NMyo5g-+x%|h(;&xA&A(cw%D*~H z!Ep-5^WI=Yg%k8jKXgTPxv`tZv)(o^J)_505^T$btsrBnpRQuUE z-arkFpb@C}xHQV}SG27TT~RMl`HiG7^s>Zlt8d&xa`;uM+o`^*(^-dK+oM^ZzvB#r zqY)_U8sO0_^R)5PBEC24<4ye*@k+^36Y|a33yw;OLbE;|ixRJ)Q%JHtuIK%3jjCbc zl(IK2oBH4&h9iR}gBpz%or;hk7B#V(JP}@}=$Nqw67|H;F!pw#t363(?{Gt$rF*_h zjDtZ!{VKoK|X0gG}R6jfGO6#ZpRM zl5`Rc;hB(37&^iPTdGsnMFl6nafvB89>VNbk6 zS}oDwE;TSFbH;MIlVtn%K&Y{)rl4N~zb_~P=E)la4q%QyIdLiNE5vCK?&q;)zY-`` zrw;7VD3E-y(n+)sd%{T+la0uvfQBS8w@s~fL2Lj+CEXCxQ&UmhHGFS_@z5u!+5dtwyeae6S-jQ}kxeLO()o>ay{T_e~HUJApNb|!`$Z74jz&kgZArF98Rar@O$h@%?u!PWOa4Y%!Zd|?_X$B7@ zIk}+%4J|rl5d+AKKOjvVRZT+(fiEDx$8jigts#cl4H~i?{F-7yCi>l^@-`Z%1+;JQ z_I9o?UPPLzj~uA2wyW@{9;(%~7GR9r*HTqZOGW)WAH)^F4A^;yDjcbBA@acvmR}$yX2_Z_qV0Z;PWKkWR%`2qQ6Ud03?%VeKgX4s!WTnG?;L#Pq=4fOx>*#QV!sPG^lnuD zl^A=kO&9@x%)mZ(XH%oPFIZ<6?)l!%kWuIk)X&lL0j#=U5)XHEO|}8ay~6hJNH_zxTKqJ|VpW&DKiHRs z^-a>y{%oh4TUjleC|!%U0||1Z!rsBkn=0J>3)@E>*5``EzyL>&)F@g*Wi$AeNh)qz{@30|K}~HObg1T_Gu9W@6^M zF#4=)hRu1u`<4w_!D)f4$8PTvVmsn>Cevt!1ak%@ZGb`D&0tj_aMTM~X_Qc!Sq@6E z7NJ#F0r{3485YF1k-jE_o(~8$S^4L)&r-O7-4VTt=Cy_S0>n>&xjXq&a~5w~@?7gx z&G3IUC@$>cG=<=oz}TR~9mdU}vC`xpYKF2DDp*J~@}p06Fso0bS*v2iD0n6_SX{If zHl9VFvMf;1XNzW`GdU<~5gtW)YNxao$Yo`Po9CdFo}y#d=_Q;4@h6oOV7b0quY`63 z_7tJ=6PfFvQ_4`}L_*w}21qi?#L98T!DTc`^5v*ZzFVr>?Xgl*A!JYvP&%SztqA4d z%`6vb--G$PD=O0Kc(kuT1mT->^kv`$#I7RLBhKbKkmhkN=Ru#fe>nf4B2i8I?N(mn z6dU+03g1JcaD0{(>q+{Ij+0M)pFJEX{~0WJ6xFH zf@7gro~EoA&ulZj!I_RVNW{dm{xQtcT~2rSE912dgP+Q$)z}=L<&V=D#0Nyn)Hg0f zEJw~?-5!?*SJ@eV2FQ36#Kbj;WerzqCwHOtuvI7T$h75*cEp2oX?R0&Q7UfQ70vDH zLor3h@>L=ef+%4SSVS{i*w5O}Kbl$_-{ym;BCbpNz4$1(kWg2MyQn4y@9o&s(H!wp zsTN!or%+63Xzs>izpd_?nKdj<9BDMZyzg0$M0+2YtFNp0yf-J}tJ82i1r#76+-ZNX z_9GrQ?t_7>ljzSRDPfHvp)fP6TEG%xjxJG4nkc9Lc4}MDTuj+jPN8>GmG@UVs;B>G znzTk>zNmtUd07>!P{bBgL@fH@BC>{)UGLNtd_ zVhCeVR1ia6vuMM3fI>x^Go)<$)VG)y-7`&-5BiBa-pMOp`D&RbwHlrFte<08#3|fV z{DZjt)5{-PM#E&$g)LPN3lkG_$FV`f>k!K_f#XK|gVM#}#U_XbHVFPie~AU`hF9Jm z??hq#c9URNj)@XJ^{2;0ACR`g8?pOr4(zQAib1+ z+@I``I2fhPVf-f4FznJEqIFyzwtjcP(fIHPS)IgxewM7>^%%tO=9#!G(B`zK#6XZ+ zl!QBJ92{6dG*E=aAr)k(1mscSWbCKl$%x6rI_HB8;;xkWCXq&bpE1X=AuRdUrItl! z3C7eooTdNbkUHwfg7RBv5|Se#ln8E6n9Uztjt0~mao)O1ejW*XnvKf}SuBZhTUbhY zF2@Ty-bH7wn)S6SiNCT`!JeOpKjr?E$?tAh*zpdkqdj4}jbDC4Q;5NN?{j`=&GV@MS@)-YlZU~a z_w0R5u|Q49MB+zL5`8xc8U1FVd*O*O%pak-E3$6ipF~@!E{S(Wh?Hy0)sp3`mPD~I-B&tr)19W#EzF;w^Cf=h z%`yBwg_9~J?WR99t(3}+chQ}*PSj6vsiKm_ZJeL}zTn%W;v&Pn)~t$qQCx)MsZpxq zLidB7;L2qlNlL)FK+rjsllD~c>(eFrqk54PUi!5>Pyc4VH?w>|{FC@J;C{0pjjWsW zG|zT{{*;0tb4X$CM2zK+M=!M>uELwz>nwlVvl8FM-3$WRMaq3pG2gUAB%hzx2ZZ{K z59*&j>FH4AtYQltxjikZYVx&i8maTtCYne$_Tz{gx`kWWQp<$<$=Dxz8S-A{B-=O1 zI_H|wJU;JMQrl@wf2dklwxkr=%iCw^GM!JxN*Hg7b29r+BE?%h`W3#ftInR3*izf3 zG>OfbOKqW7F_y4d@}U+Ba$1z459Sn%jR+70CQhQqIZv5SlAW z#7}7I8Kzv)vGfi2`Gj7}q&&r>Z(H<@z<}b^NJ=e{dKo=p99>%niD3y{QH-}bp^5vu zx|DW?_+hK17)6Q{b;?1Ssxq&3vLtnw8fsh#vD5^aug+Y9n2~WtM(V587*3OiQo5#1 zshCldqH;k_57{Y^)OJiP^0sV|y(D#fli=L)nN?3Q#09IuobC~lGnsF7((S(0uX9Nz ziX?M|*2vX_`@R^-n}A}id0XSuJo8@>s4P5I;-rUit&v@_nYoowr|g;diaz`x(^K^k zx+zW|&_3X~`z+D8Fo&QkOnHHCC0L=;vOR$H6P9Z$@!)jxVk@AdyO$SLDV1~y*>A) zWpU+(5&A?Dsxd_RMDDR9PGOJp11QR$CMeYvlDI;VLTz-sMqN6jlGyf;82g(py@_O( zX{ZcT@^hRp?E}uC-r$=S1)5SObm&a#i4&(tHC|3$ma_cc)t!edrHV+0L?t4>xLtKo zCzRM!RMN`D#Sz!KNK8rnc=$-UGVq;hoV=#3bC8-tkUXmkx<*OG%yEj&W8dl_E2WnT zHnb+ijq2mgDBaCf${2CRc$0aOW(j2rOraUKh3r`4nKX4Wcx9E#h;&1wnL|_}QtlI7 zCP`cpLvkd?kX@otkC3F%nKZ%f5UU1(Cwt2y$=?6KzE=ai3ye^{V->#^iT-#S+pWly7+U^~ zbUTP8S40uqXwMe51UCvz6cVqfs-`9t_Uql-pIB}A?25hkHwIKF;)|4BGE`wAB}GNV zxaf#;p-Sq>OJc{y`>nv!2qP&nh7+-^I#R-r(k88B(^Qw4H-abwQGT=)5LL*<+tRMD zgx_t}H=bTk&FJHQ-#%>r9d+)1nni=hiHHQBB~f~SL{TC7mjOV)$U;C! z%#w^4Kq%y1KSKcfqG3Xl9^JgA#w3_bP(=~2;t||Cx(7krvwe*6f)Ly(-qWYxfoFP+ zOWyX?txLWO^6rb}Dy83+KdyeG5CRN?l?5q142`|aZ!9Qkf#c}_j8^hDRb)`58)rZ# z>VP)J<1w?#mT#-Tee@tRF`hC<7z#ykxnP7Bfa|q)Et#|cSZ2V;y9X;jyG5Bg?mf2zUkpY{X4b=i+Q;{BZ}oa{;tkOmF7Q^ehaq0g-c844%f9 zi9lC)sX#WHKnI$D{CvR0Z(va10JD4i6R5Z#P*l}2Ag}-ha%=~~0K?>(X+!D&{?}Mx zz=1ImLZ5bx{fX0c7|)1d#;l0ND~8<}+jYXVkOrX=)1{ANHQBMaudfKjF5EZ(fY*rQ z+=zb5>+m&H$r>OjTsN#>gx?G@!#EZKU6c$ov#y@QXfI0i+&2{_1;0zUeqij>0~lSc zX?)$}FpFd<2K8!R>|V&yXj^_V?0Ne`B~{*i+2&H&;LRYrVy$=j=j2sg25)$c1TYQ2!7PghJ)MC7?>EGR_hdxJ z4~S%h!Ve6s1I-Olqm4Fe{ICJw42Crr>FITd3c8=bffzEvc3wnk)j{S4q_pzx&gY$Q ze?iI5FaKJ;?ItCx1nr~A5++?yuPzOWTkOzVK9MWN6 zjL>C+4jGZmf11>xUWR{RG-$)57%_4Ke$@4~xrvY$3!&c!>uSPA@6N90x^DZd`QE)4 z)nTUgNqYc)@jEDk%)s@I1rbbYU`GRJ9R_SPq3lLO!RlaB`X$`;IX&RneLeYk= z)6Bz9qGM{1?ud%#9Ur6h?hej?!b z>w@7JlCXZUF$_VDl0=nZJ4ep|iokvim`gLr*Yn}|$gz#+08aQbBR-ojy*kWTob;3g zj2(qKg7E^7mO1ux=(k-u&i+Kf0J=7CtI*22u%+3bF8IjEYPXlTs@Ckc0O z?SJqYVVsBK0T^-IuGM?gN+IkItKXT=fdf3o7`RLkxU6PuIk-f<=5HJl(+fcHhfkk5 zbBWHjw)%ZdZQ>Ja6x)yIHR8X%~Dc$$*YFy@PH6X^Yfmc(n4g7;+q0Fbdl#rDCQ zi~!zFMSOS(rnL?6&jav=-Oa9bly^DxgPA=7p_wzk4-zRtk=fwdgysO^fun&8nal@- zHDSqoR1ovwe-ozI_fu;l7lV%#1{*=-NQ@UG>WA*vVTOwcq(j`iBUh2UkwFA>VW-}z zZyo>wI6zJ8gVC<7+hq47;XMOT6HCYD57eYBfqYNVJ;GaN*;%)N5q5^N>Ij}1R}f|4 zep+xly!i*B=JvZ^!zjC3MJ~{~jx`?I-V&fD87nuW1dqFyu+BrzL#qUHP3YQenSF?d z*GcrdZH0dF)wNyq>$SnS?|!0ST4GsZnfFOgNKa^gy%G>{Tbs1C>HN6`Wg?xoQ?Yz3 zaUF%x2pxr~8211`lEg9gJS#wv=1pq*Jh&}D$XT;3mv3&U1i#7DHQ^*_cfd%E;-Mrb zhkeLRl7ZO;iE(VlFbBS~v%Jop6o@0-$RSaJy44H^^qm3Mn(b{P>>*U%yj7yTdk1b4 zm}}I^?rP9nf1~Q0OPH*c{Yk^Wln~?pMxXO}f$f(T>yPH4wPV11lL*3~ZuHh#QC>XN!Ln2eil665Ridut#qk9`F8EgylLu4)1 z&cAhP{0YXV2=NJR@3Uc7pXZ~pZ#lFUvZ>Zm#NxiU@lqtenxYRDkdF}&|$y~?Mv&sM!^HFMY+ z)J|^T_jo~92Xv)A?`S1xPn#LI{|#Y}=6DP5)uE304m!a)?R6el&vjQ??-#D)$=Iwt zO#^<&zy^B1*I}oGv5NBPHcFV*Uw;2k-$#DnJ1_^NF2nVzE4IJ-4maGVlwn4nMU(Ew zq^K@U-944=-Tk*7@tyffM_1qvUBgH?4JcirYpKAAG_B`b2i;4G9iFLFEr(U3mW5au z-*c$II2c`GhZ_@=mpy8qsx}^f8)9_#5iwwbsliZS3{&G-wrqdIW2kJJI>nvrRVbg> zzSaEORVYpw!@xcX&|lfu!xn1};zaWP1f_Ct`}4S*Y_O$}lkPjFfk~hrwCtImv?v7V zoJu<)zy!MAQ9${3`fh-)D9Ydc0{7wfRxUZo8KUA&!#xMic^RN3;v)8nz+$n@kBguk z4=-7FLl_JQ0YkWr00BEU>E^0L{P7;S{xGS} z>+30p-_kIA)I3i@8hDEts*1tPC1X^XILrX{F6H*P!kmowd9Mng5ZBMDLaM+MQQl4L zQ30azN7bMut>Q)>X+=h&HR_>jdBPjIYZ-Oy>cJR+JKza%Mb9v*@4(?+{K)AFvWo(j z54bZl{LT(IX``IiimgM1$&r@avYl7Ru&b|a#S))_5nUA@=Q|T{5tulXi`bFVvSf@) z$?d4F3%BZ}tXOyyQvNL@#9Fhi9Y$G#YRzFGHvTU)xJAN?ep_^W{McQgwbd$fyT*Jv zNuJ7~!D{oS*GPMT#`KxO33UN<@)?_`FGxg*q^fE%m^5jM3~)P00{o5#9F^3e3jkS> zOG-@fD-*xlAy<6-nGO6|i}Wl&d()?#e=-~xn_Jz8{>SvP6vmp!wJKEBg03#BS&-kF zC`${5%9O5nYSb&(S=WrNE~U9|7{^zDNg?aQ#?t3QAuiC#H#YA?0K0-?Yqt0O*Rj3T z@q2J1t;tn^7oK&XyA}*C-OQ$4x|4Qoqkv!G*{!M44Kr9X@oOj83oCCnyG zmst++67a|e62JSz=B?X2eo zhUpBW0)-MQ4MjcE3&s=O#5;;Z6Cz3QDS2R-#c%mkbaRxIt|>HIh+0Zza!AQg8zX8) z)dw<&rP#dfc2X4M1Aad7eEoOr7zT+NaMq;dhQdLMWaNXIKP==wPG)Cs#rqM>?<8J04^Pea}EL z&fWNH7c-O!Vbtn?&F^wS@1wXobFsA?cxvz0wZ=C^=FRj*H$ANkQ+tfyU%4p3YoD@y z{vW_E-5+jKcHChP2WdjVH$D0lY_RD=q%7m8?_|rgy{srYDSGwkv!qs%@xm^gFf3v^ zWSv5((-6%T9ZsyBG6tO@S5`|r=QY`|#$*i|cb2?lDfj!@sYhmfL+s2966bo~SbnF2_ z`A8-ibiCj`!r&2cl3+`zU!+q-WM&jr_lTZ4u$p9P?`-GE@d+OBE>bVo;7~ayk%Sr`5-n3irxb(Q4d4Os!cOSXR#=3V4~jBaKqa}~ z*iC7JNx70FiP&8I6eiq&h-?A(GIKbH3tlTyQeFHl-5kX@#0NySfq+vwc|f42UV9aR zJ=nrcL0w=1Xg<^^?AYSiTDDL_1cU}VD1G;U&Zj;sXbo^(LKoU({JFCsThXFVFzh1v z5D6Kfhh(}}MK_lrZQ5!9O#p|~{^}NOj^Lm;c*OEp2!iBx-{>71+J zkeh!JlZVMb{Y7jlrAVV@l4`R{>R0i3&&(Bn;wHuFyj)`A6^T~HPdr zl&ahA=+uw-Ed%DyZY>MRmE``9YFAfR3CT6z$_fI_KhYaT1dqRLygPTU8ww0gpY6`M zr(bU-X7I#cyaYv?=XLGYY^zg|CpJ6xEBMruzuzt5Cm;pHo`jgP0dDe{^&F{J26MFf%(n+N$OInA^7`xytvsN{LMwm zOWtJO)7xt2)5Us+tm zZ58&^lq&2Z=0WRJ-sAg4GH0YkK4w&PV*?3gg|?(F2v91qwrDJ8!L*?zk_?kg$udU4 zc`~e;*HjGbUL-C<#-d7~3Xn()@#1mLKV_H)Vh>5mXMUt zMd>DVRQVuDHjAyMqmE1puB2P7xrfHraBcmfc2~jtt~1`VDFzYN;uqt>?Ev3|MN8j- z28C*NH6uA$(GoB(87!u6`FtuG)mdHB*J}|YaGB6j842_j*f%aknct?z&)4G~di;-B z9pzaQh)Dg`e!Yz>$Z^kY_>g`scAew%Nup^9++t zmGd+lius;J%jFXV@|L}^i0_UZuQ92qxQJ7;OTr0Qj#Q#+MCYugw!G5B8jcRcP~y8* zrLR=fa7MfVnmw8nLy1=XE*;j$jy7z>j>hQ1g&OHPwEV&Uieh45kslQJq67k zmqhV~w~eF}tVq0hgvqK6z4yKTID}{dU>JG6j(ZO!xy@S)bYGVU&1v~>J3Mg+xJ{Qg zTw=LpTLhmq577$?3U^`lv|6{tJlx#{kAHeg0JGE0tLj_O$T4>hg!)maUC8kYsH=1HynkU}%crU`|AZ7e~rs;kWmJmD+_L7>I zbvozDVw3)bXw8TamSi4T~`C%y&6AfvF^0l3cs7 zRo_>5(p7NpAbpCt6hX^@oizXMZ?j9wV}T$b+mwGU!k0fE`8?h3CI{w^@Fp1qm^oMF z8u1O7-N(jSy<*OEJ3Frv+}-hQV*K6Aw)sDjlf&`HH>$4gH*4-_4V(lq2Zh2I$j6QQ zqa0L18_Bzf+`L&=E{Y0i6H!^1^)D=^Ct<;n!ssozxUdGVgN1A&V^j6!Q;4~SPG=kH zz72F(t+~!YFu6(I&rzkLq2FV-32sv`@UhinwP(s4&lxHH)zvi0%l>#*J;s+?5HFBt3GPC#P!2l|)m&wQ~^@4Q?jKx61w&l}yO+t0v6BdZ}7CUKPVdNtK6w z)wu~*??~j{aVuX}y+jWl8fyX}+yD6CeP9SCvn29tkJZuO7gacwn2Qkj_1U;hnpV17l-jUU?i=eoB$ljhLs&SM z3j#jo0`7P*^Fuu0e2vPl(^K-Hq^tyQx4a%L+8<`W{+L#4?qgIJA6ME-#%4ksPnW|M zo5&n`e4c^34qBQcoSs=4NH>uYu@8kj-bP5OhzXmDajI|3$0Kenbl+?xTgKBCk#_P~ z-FJVJaE@^Q9SSogB&MdraC+aN(m{fIFJaA@zSXa-;f5}+*X#C&ftsUA>#Fzup=}ez zVj14sQKYtdXlmPMzN?ISQ^8r@=k+ua#h;h%0~Il_ZRNE|pXZ6X(n6jBBtjOI*>G+F zgHW_nGuW-$M~NKgxBb4VC0y!-xiA@~37eD=$$#PQD}y3i(l()i#-VYS#@#90-QC^Y z-D%vdad&rjZQR}6Y22OV-idFgXXo45UmLNpRZ&0AsmiQ6Z)Ki{%*SwAaWTzVi#r6O z)t$_4O!*WeFURQMsqVXb2Nx4x-Z~zr-p4M5D*wdAW)E ze+-J&u!*+9vP;5KZ&TAlDh&fGPi1$}W`fYGkmcjf8?QQBDyE+5K`~F; zk}TsVivn1J1s7DQiWSyG_ps&ZzOcxjdrk{hwqIdgjn9>McY$=3w`)&3+7Fr^vske+ zTL34kiGxxSy%0$H9=MMplpm7O$Mg=Q+`e*L>d`GR>{P<+gkTqs>ex4SB5N^PjTBjR zJ!L!+vPqPBzu!hFL_R(o{@|^_EvZ91`r370Ah_HoB^mUnD(0+Cv9|PW6}@64JCO20 zVz=R?Z*Wj(9gnd$&pBe8T`A`eTQ zau`(pCZZVjL2-H`bS43?q1Zc^h|EOpqGK^j-|Yl;f{Ehw$tm{>b^n zKRo*j53@Gs?%(EZRw}jo>xy{HxEu=ae$I0I8r<3JXS0jTN92MMpWScblhlW=L+nE{ zeA=;o_WP;@>z@hJQ%gq*q8pw z&qWBq3pCDI5%*j_Mc<(kA93lyR~9=9j2OP!Ihb*9ZU)IaGbG(FDcRCfr;MUgcJD)I zXp~sZ6c-K8AmB3_9I+`iY7bbYlnTB8{%H_w-(KKKcT8AmW#PPurUp$4ee?tY< zR0jMCSbGd0BaCz6XJZ?~-k<1`L%}S&1eh|f@A~JQg4D!O%Oqm23p>JN?yvHzDQQk~ zwXYk2$~Fbm<(S@2bSt$o+e#I=udS#=Yee(Na@aWy-?9u^uFbt){dx|(f#+&JS*9Eb z(RsT$hA%ufW_y{P!A)m%ju=F(Gq^kV$CVLqzE3AF_#|i9-J~XcFhfGb1Jea|fg((; zq8aUqvo81xVENatBoc zif9Kc+Jc-DD}hbEO$9GJWG+HS({;JozyBgn_5*`EEz_2)m~NmXX$HekSTIoxei?f6 zJK@lf%P%A}HNGu9&og)GZ)Au+m(-PkoQv-wt6MFV!{)GsrBKlb<~5zG%PMVAZp9TU z02a-o#&rj!2+Gwd6niA&3+Oo|+sa&{HI(<9t053vobZ{q=#C@9H6KKsEHY&gObuOH zlL`9C&-vmgQZ*tPxfR2WdzbI(nTaM@`pmyueiA7x3;Ru!WM%poZ_m}sIkXmVv3N;b z`Ok`kf~O9#GL(iQQ~QX#(&@fFS}~?AKX#*P<}19R11T(9((!fD!fDkKP|}1ksgwi@ zmmflXA#}r!r2D;sAWm~j=$F=v#dKbE6vF05fpNSB=H`iBc z8Rz(EuB9?t+s&uG@I;W-L3-(?gya6>$mGltkJ6XU^nRbLQrG$-j>y{nyOL(DUwj*p zbSy&#NKSkgef)J=2oY>B0%}8E2bV${;b9k_?tbnV%|`RgjjWo;)AvvcaiYi_IdQ;Q z-wOrdF=uN!_b@eyV!Wwi4H+(V|B#%xi{$qD{twoeyInSW9wV58VTFA1>%3-P>KN1^ z$}93td3Ex^b-Qm<8@v-f--QwEq{lXvx}gNw%@7ngL}u0+^h2!W?mi^nC@F#9V!0XT z3<#%TTl2j)HrB9a?i6&n@SWm7yxlQ)Aa0Gol(e*1a_yD;rfvK12CBc%_2_1)eG&Vv znM*kSOg}`f#pNYVV~c?$#kBs2!B-SH2}2Vqu_oj@l-)RNzKV=AP004v4r>x_+Lh&b z_Fxd*T~v;LNq*m~4gJ|~vr*DkYR&!D$8Gy4*zl>vJ{QEvz&Nxxwhg{zbtdVtlW4W0{k?m|C=G0+V(>@?H!Nu zlpBxNt~>RcJW-rOMh(06cbgJ%I)u-lF5x0^x|wD;vj&PE?;k^#cmmUGeg6)N(=-0z z9`R3Z#s812lD{nz{?zOIVUO_7EB|j;C4c)W{J*W&VP#|ekAj^)lqLU(R>H`__%F1Q zxN&QLx^DrW3Ey~W0s%cFppf5*^F^_r^JX}Keh>?p!`Oc&e0S=T^2o#EdyPhP)LF_Z zwvE7Pf6cPCw79OtvphWF)Yg=^<{j(_ql;Ugdd9kH<6`~^5oWHUGnpx!a3&IKB>z>% z5qn}oYk#y53%>qaPw?*{*n2Xad!deRd|oMqI_$A`@}ZnbIClhO8>z<~Y_Tv)jpgjM z-j|E}oyA#U7rzA=^x>wZIGi0bQxi1}qKOy^;zx{>6OB@!YuCFja)QpLns_49_NS>- z#4qd%{f6_iRi+ZfM6wa<^~0FSz$%hq;^`@!dJXHpeuglJ^IFJ4t@t)(`5L>#C# zy$d)+-$YbBS@$oF9XAh&lzj6N@=SyJ4v7SVFK8D`5SNF9^4$WofX@)5?S~#%8~KI8 zHbGP64!Y17S*YxP*g|9yrs{~@;ebC~|$Bd+`{Z2Mn`D}QU&{+K*Wf6!_Ei@3tX_J7KwVPs!W{n7i8 zChHD4FW9miIyZ0LuGo0AA%GBy!S#+`1I;>>veMgu$S{4|5>=2@a-i^lcBp|E6M1BJ z**EoJK<0pX#c0daw$g){nn^|_gveZL0SjA>+0*ZU(io1 zrsR+WyrT`IF#4$wlB%MR=9L7Y>-^LN<%k6aLGhA*)J4vhQ6{0KDJT1YhTs4dDk1YI z_VcLR0C_@oHxxGKGM%e0-~pF{3rZ;&IgMXptbv3q#k8ASnJJx53kc&|BIrhdXLo}d zxuOTiZd{GHO7>EqXY=;aBm;G7EOpEBO^sf9sKOkrY|?z8Qyv24J$o^~sm}0t7bn%u zk~@dKJ>_~(m)nC?i7}l4!-Kise=YbhzhUm-D%8YBUS71|`mh=oqNxl;mZP1ZfE=MP zN~o2Xgm>S&pN2V;jjde8t>MN{8^Xn1kaLHC&4Qk{`9(9weT9s^CAk3xaVRQtkt-Sc z1-Yz8l0->v?xMCf+tL{FH95l4Uu#9EtcE{b1Io_%(NeVZKIgTH^%W1bK_(rqp+W4d zPpJW(W1ibm?nSonKF3UP;gT`$hmt&~yq0>>PKv_JewSD5?@0b8mOBoCBx6S>JwBC3 zcNJY%*B%1qOz1XOO*A)2ty0pbz6&JpBdLrw-B?Qefw6RYbLWE@jE%V#Xf!AC%qdgh zoYga_3^swJz;@@FqHr#UMCX>oq_#$Ljh_xp<^?U+v2IRS=m=4Fg=>I!`5#aUn(_LZp?_C@>sR$RUkeg1=OaGnCtt|Lq`a$v=9UyD zsg?5;SJaLNOn+ zc{OSQnJ}3Ab}x2$kG*6N^pk4jyzO>Wm6g)(JbA_6a@@Z1@wyCDo1x}xBX`ZpN2xT( zzwfnFOH334om7M7RYUh}b3hY{d249u@O^im7r!?W`quJvQ3G@4So&T&!ESxJh~)kT z`(;-nbUJ8v+Vd^SfRGyvm7Sut27wC*wZs}*1Zm|qLF$%#VH!BSmp;9R{aJBu${QQ4 zXbaT@p*!*8nxAXQZ?OctVNM`iFt@nd`ij9<9aQjB{nG$J=8_FbI>!w}dI_4@J-ZYs zo<2pmO4hjBv=samMz_cwH@pV^#ZJ&kfI$CO@X?@>r7U|qRssXl7DVb)m~sumTe0$Y zs+h-^mjtn;NH0^6Y8b1vNe%%|Tb_p-qtmZ3x)A861BQ0uhgQ+7_zdxGti)8s{TYt5 zZ!r@gQs%YK_!%NUzo>`3*u}lTIx}JXoHisw`u!O)PyxGN#92&(g2QT4jg>T=RIIed z>IdL5(9N<3pWJoJ(TD`pA6w0eT1?sceXT)QMIpCVHj%?kl`Y!{%W#G3b}9yy6;o@* zODNtShz)~t>>iDrE1!$1{?3qqHC-4V`jv@X#qLW26UZ`|z!#lflA1|f@Cc{kgZC*U zD6sunHR{84eDqjXpwem(I*6CD-d|WKC}zPj;EdTBaG7w0BCBhF=+y%n6?#RfD*?Pw zV}oBwSyjxEpn^wW3f!ol;8xWRn-CH2Jio=P-!Z{#BGm*uY$%KyVt`cN;he@3Lpi#? zq25(=!Qr?Z^+a{zlJQ~X6`VY%=j*+KqmcUyvan}p4y>7XL8k8(^wN~jwmv@ zP$Gc^$BIzfjP#i~M-$dc=N zI`ZW$A|mKAXLeUt(M{e>UegyYYb+Bt1}p1e4Z#r2r&`s^!esVa;o#Qug>Gv9H=LZ0 z18H8VgHiP0)i)&iiN3E+S-931x~w&NZkrf958-LJ6n}n* zk!?_ajtR@o2;{MQ89~SJz8T#Oqz!#hOWQMy#ke)grF~aBeMzPv+{5&2HgfW5Yw7f2 zSR8InWKNv=PbXYo)K^n{boO)=TC*hknLq{BQ*-;7fZw(01hXv679#;-1Qwv4l%@<^ z>m;<=YF86swK`O*buJeZ3kyMwXVGZ)@l`ymhh9AzWLK?uldso10at^yg-k5mjTV!A zDDw^Ecy!wlg}m|i#8IkuBnZvvB|an?zFu0 zr;l&ZXbg?p_~!6AKNM*n2!UCie<~XEE}`aC@U0r#K&q%$vw0@f^odDF*g;7kemX~+ zhQmj1>_rPN#|7uv&*ZJcHBtY9#CG-!Z~Ue~n()ISm~=hknImV|L5I`TaHHcTT*tNG zC2&>4#Lg#ptx{-20?qHbcGRgiY5H!h&VvgVf(ghR@X+T=<%8{kEI*W2tKLn$Bq_;{ zA|}dYF3{80nEnk5q^AqJX-Xv-`OG=QaN9aNsZxuzAi2`W?nBEz`kDx+iu|s(#$^z3 z0*@5i^eZIz$(@UWpJ4rl@OLO8OZJ6Z0Ad9`LeB1G2bzgPr$|5^98vEUFeIfXzTWg% ziW4;w0dH@yfq!KmyYijej0v)r@FO&_nAqZpspyPK+*hyLLF?z*sLtkRBA@Ta;Q}Y~ zl!2aiVy)^`+8D{*Dp1E^IylL^K98J{A9SKwMbkdwtyIU1cv`iy7ir|Kb^vfNk5Lm6T(L>WAZXH%4npSO7Hx7*-$uiN-u-$YE(jyH+l zlxJ)vSRYy9CRmT&jGym3;NBbZA22IkGyOLz@?7jox~50oS{&79N_5m7SyN7328A6FQ&Z)|Pv#%;tqmPc*GI4aK265*J^9`?m)C*9h_dD9%r<|V){ zm#{>*!#O)d=lg>vUiMhCt5)G2-CzD7cI>Wl_Au?rUrZ&Ril5~9d26n~-Ni0iRUdT2 zE%u?#?;&xdLr_c^#!lQp^|pAF^|ufyw^(2%oF{S%&Fgj+!d)*qQb#n03*heE^m(Vw zTi1RT5t|fy1{a%b9K5O{o_j}%T-`k)#eC}sTp@aE{v=gVl`y9}pQVqr5uK$=QcFFp z%}9<bT#o3tLMxH}Ch;BM3eI6ux85xr(K(AK0Q_(hZ?p5ki7LuI{lsGHY4EpvbSfb8QU%PNkd@)5;Gli1u^@{OikQ+|dKQzs}A z9e4ICchdSL#!q$FOmT%*ct&TSYLv*%5OAzhAJd5OghcP+JswGmK@+ckKfY&I$2aTD zI1p=K)t7aTrR=?(?p`E@2mj>Fn3;BL z%uO#I?VGnxsQb@+tiU82?0hVuHz}xn@sS!7TWLtCQS{N-1Np}M5^WBdgm~tp!u;rc zatCroFDeu9>t(1VQu02F!-$%A?!=jPXX)^Q;RE!{HK~m`)BBZSELnbQg-?@vVFh!t zHDjllJKRj7V|ND_or|1MaT=NUc!FbgF(iUvB!%wG6ejMtIAUTUVf#3urqR)Jc6&E+ zI~q1Cu+#W>d^1f??C77!@R7T_rsespVl{CCzmPAJ)sS~D?InTPPBA&!4HwBUF-2C% zN0hte;w*bd8^6pD5USP10(!L!1<^%><@X?55VldHAo4;G&U^dDu&r}0eJ?K*`o@q^ z*)^6+mE!ub`%uLW&>74O;|;%Q14Q*XV&g`cM8hs?<0QUdLeugQB77rG!|c!h-~szs z1b(HJ`0@_AjdOh?Mxe^z)v3C6D_2d7eLjRA; zkUs5k0dx#Bbj+V2vY$(RK^1(uKUepENX`D!eh~xnzwQ^s^nA*YV1hpPi*Qy2YBF#e z1?b`(e_*df8hHT?D$DojV-2$Hodsu5`Qs2hPCpPH7b!Vdm51{3_$g2eA4Sdsld^yZ zPHpQ_ZG)NS?G)OpRfmdhh5KqNB2E*8jc~J@S}BkHFcwEM6hZ zIXiu0i83XmBLFo$g{-ii+1wA|tvj1Dt)Kq2e_Oo5vtw}uA++GxA(%Q?sSNcrDvY3_*LYO zd5;489PvTv$!}&!g0iIftFefVNg#=!h^FKa5d1o|j_n2ro%zVjoI4^PJ z1(K(OfZHan5MNFN&sqYV+6C&(_)YLup7e&BO$+4cw84yT#kzj{Rgw#6wV~B#ytN|s zqTtIgi0{)}s%Smla`l&Hi0&HWGp;h8jjIjX9}&mA*DIOlqDg1GE4aSBKnM4?jv{dq zuHd}TK*;yySW9!4NmSrlg|B*(QWh`lgmpgb4yfJMAeSSpLxtY&A+|u>i$M8zu}s3#c6h1(mmkI z)KZ0Xb3;uc)G+XxcGc6o6fCGA5CPB^(VODj4k#HA{@Pp*RX{vCOO=HFi0c#}@ZBlA zy^y%T>o&INj*w;3;odO1NPt28uf%@Z<^2P!#P?TwlXuFmv=$G$n@7g%1A+_Yp11(+ z&0X!S%1iHew$G>E6cM(lCpRiLzzd#EO1_)ogGc?NEB{JvY%gzU_lG)nnEP9jQm(h3 zOckNe^^zkDnCIMM#eQB*lOy}AnQu2m%{BXah!@LMJ7{;rzPsY}v)1*O4e1C-g&g7m z7%^88`UBah_g~2(kSB-+z%9wK=xKBy-Tb%uD6KUJ2r$`bUaHZ`g4MWk@wo^fA-dG= z)1gK|icH@Lb6^0Lj6sMo@EsQPRB z*I}$5`32AjFnsxBq6+Yw_XrD=f`i1+;bf2jq#2>>=%EpPX=w? ze6V`1+R%zF8KQRSy!{Y3Loc@IIRmto!unkG_~lt85ViX)TyeYMZNGWgp30aZH!5IC z@3I1RK%?~0eS&&E6wjSc`&{gxD67AL9Oe4tpEcv;xdKP)hqPXK)XD-sU1E6qFJ4kP zZy&mX+iWo__J;TUyqm5%f;}B{u?4^1C0_gC&z|5F^}P}A_p(g$nQDm57TpT)tAEWN zhWZcZwP;|2g(&OWx7gUWYVb+@n+Bwa5A`M7moCxwXCi0xwZW-y*j}}zu1w4q?ETjw zQQQxpDtl{eFkM9^%PdtZ>n&@OO@q@g?V1NY*!%DN9}v}CYf?ZB@?2ifc)PgoT<2Uj z^;h&%12k)4H0>ctc42L>W|1~0v^2RK;9 z{S!+06hi@};+z(ufk@V^p^DAhg;-m8Po{Zpm&cwkaX0~+7;lKRyR6GSbjD-5?dEyG z(`ANVd#rAQLsT@5#!%S318oB>B{~U?DO<6V&)?U0*55d~7T4(;ts<5O6C<1=&Tu%m zNkY2b4NG5kqhGCGMDo4&CLKRc+Be@$o?IrfI3`ODy&T>S-w7Jx|#Qn3?CT!5hwW={GWBKKLKj(m z^c>6b>gS6!97~^-8ca19m$b@coU8(P6uxXi#?&{fUTL7VLBB2tv4yMl(X>_{ zg$woWhLd^d>6Lu4#xnPOJhxp?Ye{?p+oow-uwEV3SY8gBqhF5Gea0rgzQwC0PA7`r z14L3fA`w;~_MBJC&T#InoHwjhP9;vg?mO-s?vvLwtu~GE>KweXiL-ko5l!Q9G1OL0 z?f{Xg2GmliY}NdETB$`!7xM@Esb)z*jr){-go5zF&gaYisqG{c<;=x_H~doSDi*Q| zcRjimvJQKZhPfojI3aLr$MabI;FrQ3+6Js!%t6RPiY75Va~e!1k(1y%0Y|>v;qG}L zA#kp{JnYPv^CjBoJJTGid3$%cTw z989EeNu;Q$GkB@T7Rk~KxtMS$;M~U>P8&BQOMRK7=MT-7Yu4W7lrQBWSR9QFnn5h# zZY!#+&)2>WW+o>vd#@fq8-|7bDi&obuR0S(kcyll2xnm~IHUX#n~#~KSS21OpzaIy zj9Q!Dp+qW?SKrP?Cb5#q&PHUGg|RC%kW9-!GVEke#?w_V$WT60k#NHNp~WR|x7|8} zh>2j;U~kn_Q4dN8s8Oy&k&wuiN_r77bw|Mf0d#o3L--S`Z7T0_-o?^TPhpo=IqV+> zi%VcOAh%5D<}ApTq?j|;<;b7ROAT6^4Qs`&`eC9$CM3ex-3bW5 zo0Vu+s8-H~vG~MksmpIxBn&y-rK&8h%-K6-6lGC5*k2JTPNXv>5Wk> zGTi12m@}J09{e8PPkP(V`QAnK6x=HiJH50;p=LiMKqw|A@OGysCV*coXUKH_woWtt zF&=XO@i6r&yL0rONJ8D=CM0Ws+ck$Y%^E%6R=WS{R{1(t#_;1K0(M-pEX6V4=Ee!# zIl5F;Njx6jP^y>?v)hjWv}1`N>;aX=(Yk{XLW%XXB4MJkT0%)`lc!Qo_zZ+5HgDTTOi4~nFd*ZVDlmuUk2HY@LT;W&0 z=VeD%n0O>z^kh=chTGOKDS=y_nal09;HtC9V{YgWuwN1C`%fn47y}tj!@e z4p+)A5`sv~)zuZ$8G2iCt4# z+58K?Jb!?CZQj}HcjJD~Pcc!Fr0HP(9L$b{#5t3PAt`sYlBCvK-etrS45;8+LxI8p zPRyGaVS5xN5|zkrjKpSumNsFeeasB)irKPV$Dh(Hqs*8_GkA&c=H-CwSX^LAzo%M( zpZ1%!ux#A3TqxIxi7;&5T2MhLHQ}D*UFiMAysFe$#KuOG)i*OtSa!<2U4zf`;d(=@Sx(53cR0Cgb76KP z3@4B&cV0rJR%~+iIeee3x?C%5M`>zYPj%5f+zy^g*oB`+-7r0Oss56Aqqw0yKezF` zML@ULPjkKBtG1Vm?oxa_+e|e)P{5jTd`#}#)}Of69XZe`8-Dj=oulvE$peL!)PBNo zNrA!AOdb`!P7N+#EX5X#-!^*%8YhCuP{~;3rPOO~x{^@-_^uFBHvc$#EK}$?B}I&e zES01vMy)b8%n{Fo;iZ(U3_lR#Fe?pE)E=Vcdi~gOsNMdsifBTkOAF<8KU$lZxXe!fY5>m(G3jML{YHI8;Si3$hqZ75(^rA86deNc5 zTO6si=iNsu48WW_Rzn@IgKO*0{FxSy3(b#NeYB4`qS?T1d4V70rHv6Duh$F)lql zb)Y~hEi*ASHV!7kG)N69U<}R>oPX#QK18OL7P!%NoKpwexJ5I%-^@sf3O9&-tDZLM zmQO5s#{R@U^DYo3=c?p0Z+hysqd0A4b)8955r zW~97dKM=F(N0#e`3;|#A2`FP_%>u88Qk4-VDf~iLpLF*oC4w-0oE{?`;E_147f6?b zAI}~*ALD}Gm9*P$wrwr$qNEPr-(gE}-Cn>uv;<%^a9!WUV&2b4Un*=-Q)HEf%?OP3 zht-Cc4;-h7*uQ*7*pk$A7&5D69Px!~M!>bJqf`)Us%F5&`ZauPA6S(e_B2vE28EJ* zy2m&hI$I>ollkJRtUQ}IL~Ybkz*uIHaeQ%TPwTZl)KPEX;G<(S!yFunJ!kH_5{Ok5%LY3 zIW`ol9ZP<82U2yLQK2=O(50uu@2a1N`>qqexNA15s0VyDLK@=b> zcZt`nSl!1Xr>VyE*%gr4w|%!~On8Hu&gPd$01gy`V%zNlk2i@|7y%z4?mtzsmPJPn z?p@H7KWgX4Bg-dOEP^5H8)1aHkPTT3O+vm`fr2Hg=g(1tLZJW+q#?hpb} zYH-ALwOY@hy`idIoPLF*`xDy4tpSE{&@j2B-^Xob6L)8XPzOz>7KuQ%(r#+~h&P~cIL9=b$$#$&*HF;zFo?#jFY9dQN ze~W%;%nz9F-$rcniB`1$7T5{3=9{2IKWVDP3DYA8-$Id&P4sN6q&QmcA{-Y>0^TYn zg@Wj3pEy-U|!ZY22lke%@C`AB9AFkmE~eI2fp^CCB>|2Ne$v;^aYc zh=OA>nqOmWr}EpKKk4U;i_MDTQNLhMD9iLc)wZUy;NHebUs<|bj|aP6-_hW?Iy`M} zQeReVbSF1?-Y2VsXgb{zQ918!7R^r1uVnDhxmA6(kbL_$FuM}6#%YD&3iFhysYb@q zFK7eVBcPc*vPHtbg z8{YQ1jEK3C#%>~I)+WbDZnZB#u(OrTEg3~XU`zM2hjcK(ym0u+3M)@MafZfiod6lzp z!m`JqHv7I`9OADE01stuk=g{$mu-(-_;zWu!7kUQs*<-eJKFsz_<`T5kP;X= ze3RNOj{Af7Z(ZSQq_3W;$23a%e!APN(=bb41xryh`lVwj(Zo<8%?LvC=!+YVxL{v| zFqsNVQ(G##_z+D(sicTP=3ZJv50R)u4o`ygV$adcc=Ino?Swr16^KY?h-0}KLi|hX zoYeZ>cD!R@L+Zuz+3iY(c4i`>v3Bh7LL5nQa*qmIgPOPGW6cHa!vghNhUjA{co2Ee zmca?$=yI0w;#sJWN;J!n)P9J9PJd@02`xoOg%3CRb+dCJSXb;5oE|%y&7+jWRgts8 z8kWFF{{xKQFJp`joWB*CWJ77ErgrA{`czGg!R|ohh6UK5g`<1u)rpYE;gOa{`u_S< zPMxC*@dnL4)JWA3i$W(GdAOJR{)Gdp$bEulBh4X}=JdIZ=Ud(Sqss%y$Ns9|~XQKNwZdY(LvQoyUr)Q#JU}j;Z zXM~~^(6bdaGBYuC{OpB=hK-f=F9))JbkApPVrhg=P5&1}@CkJB^V_)MYfu9KOf+>UxVduuQ@t=1{Rjjaxl;_YJFA}AHass%nYERXJ+_xhGU_} zXJPpBm=Ry&kB_qe@LAaKKdbs#Ll!m`eAdriSs58==swXpdM$ibdVE&KKU%Xg<7+Vf z@ixn!o&5vd`^^3Ov+944{{JJs$NDdHU9H%0^8mVUz87v`Z0ER%f+{X;_`LuE*CY6b z7ogM#fUH5t)z&H+l0{B1Xs6*pnqJU#X>q+h@8%hqx#JW$HMR7vB^ZBr#|%*zAH_D{ zx(OXqfUGLaJp~&s;aoV*2|h0UItdu#sSTNUtO}9b|30??|1C!T zpOPH@^Jo^bHn1`LYw-QgF-tA_UsKyq?{jv2j&KKj4SJ@(H4gtu-Ddh*zVPRt|A+43 zzaT&WBg_8*0%ZD}=l=o$s=}%&E~a=-zD=a~1f}R1qrV4X4DiY6>OML^oDlV^3oyOU zhX8|tVk3V0!X&PmJCOh0ue%b!WNiV_5VQjL4iGbww3?YI5@RXZhqPW{HcL!!Z1Xa9 zJFQ%mI<{Rt)E2g|d^o;2t@C*RI$V3nc*(eUnfOeGTi|ni{l>#aQmcdu4R750tNHyYU0dA^C+=pc~?#&iR8$yUTeG!H!_Dbn``fq5kQ_I zWeDj+L7LGi*-{&@{pU6NRThM&A!cD@fKsgMdlJxVCrXl zWO)=JP_PpDg>c0M78>%}!u6Qd{>bXF>*F!r<#=`V`whSy1)aKg_nGhLd)Hh5p8f8^kj799fCrS=aGriM;WtYm0BSL>wb)QQxiBg zD4!gCEZZkF7VIL6l%?dq&Kam}z^xq6XR6CRG*%>zRcW?E!ldh)W{L>w3R-l8!=5c( zDf%|UAhQ5{e$#B1YTzne zh@wlvug+m+Q~lp*c7l_CwI!pX^?zp*V2SJ(#>% z78qk2B>t=BY2Z~d*ri{{48t9TvLEGEfjANPa>vhE)W8_{Oq)K^&XIgCPzQKQzpU3> zvuX|sJ31PJ^C%=5uESD@`zb%#LN-p@ zR21i0kaK-5LfUkIv}2A?g6lUy?l9T=&?c_M%?HiJt(MAd^^c^DN92|1AGnUWU>pd1 zES#zVI74zO)V#o9TYMnyitE%z!f372p(Jy8uq~Im%+7k?*V{c6rb3jQOSW1nN$!gQ zH1k<6(*eSJeYQW9IKIi9t&~jMW^2!1$WaE1RN%mx3PC$}`wQ3S!QPdQ(NUa1yJRID zud%t`VSBj*butQ6wYQ76+ec|@3(vtLqHvuo^h_*+V0$;ohgEwF~?(z zNWW4rp54E|@;nryCz?Gvy{{dcU#;ccu5o)mTP*K5GH1ZuR2j{Zr*vZGe+TE{Xcp(B zoUO}q*xhF1ejKaNw?*M{pv-s`mrZX^>O{<^9lc#-bkq;ZOgxqVxR1zy&^+f#>ckw| zr9_R+Z5krHdEGA2x4Djq4dOP07&yDn@r$Ib@0i9!B_CbpIP6qQ2E#3c2^=0xaeH6h zc-vJc!Ua7YzTFP>h3>>6yR*i^!AuD-oY~Zdyz#9xv51{o-7?#Ez-_MKf+ykp;2xg_^C^6n1bE~VR z5Gmiw86kR&2sNde3B@F8n5hM-QT;60LCq_so23?}fF};W28N<$4wGdFyuT_CR>wRr zDxi^57A|lD$erZI=_iqu?`6qD882;N}#6o#|f%4jA+CEe$tQRqXNwC$TiY>qD_|M z3We5Jht;Ar3*LXZrnQCiL811QqOy&hlvX=-jzuA=DpGY#`Uwu$CNCUgY8#Ryc1hK0 zHX0Fa3Xi}qSS6=s7Rz5Iml}rUl98$jnXd)L%B9kwV&s}mvb6F;D2}`erJOpAJ z8PXOO8>5ah9zrE5BPJ_nH2fi@>KAXiL4f!&1d~Q*lLM-iD{A|5IGIe+nt>z^7?3lY z8bA~4c!O)s{56L;R{2VHl9`{D>FZ2H?WKg~kyym1n>i~UejFlbi)H-zlIXh0T8GIj0o5fs6}htE4-`b zv9?2;CQNNN-cC~LeH;is#d(hN~uB75+VIRxA$s*Tn%!L`+qskTNuRcs(K-WVArAt$+qi-*;DsbN|T+bi$c ziC1N~oBmEc_ZlPhk+pBVdOXDdLM@~e&c1ZG4C|^4XsnN$}BL>^Zh&B~4hU*uHOZ3f*ciD_ca z7bIjykE-;Ar=S_lC8FehY;`2DE;oDJJl0cf85&2sED2C=z1eB8cz;%5pI`6uJ9;zC zwZjZw$2*HU<~m4NB>3}HFteimWO5zdhY>5 z2GGHMwGrKPKT28^7`_n$c;|L+?fiklh$dkI)?lyCsT-!n?2zP!cM*tV)=YTH$cA_- zvV9~|Ej%Rv8Qn5RSHO`@x1W|_CM_l1N{kvgFtF1TrtZyLv84c3c;$D@-wSpFHW zCW*m|*~Q*UmZw`SkR;pYrEjab_mWZL38W-a4KBb5D|t^aC9a3q8BBnplrmQ(Z$XyK zFk`dMO||SaH+y9mUBGXJ4Ig-OfSvnu4ny-s^))RCXz`WG`RD` zP^ei*>RVkCjT(ACAy$Q-Wu?bU#}Q@8T^mq#^HkIj0>4*F@eV$hXe`=HVce~e_gJQ& zheww1MGPQkAqR`ME4SUC9$Xq5)qz}l%&fq|cEt`3=;&R@ukYb?eq2@#XHllI0KEcT z2%%;|&^j(7-f4zMFhwrtg}ENtu3RC9qb~e%RB=1071U}mR?}~pH%TeRq_-@^q_=MM z73HbN!fWSK`FuJ(`+%g0NN`J@GyZYj^@r{bCO2A=d|8b zq2>ci+m0qi22pernj&S_js0=sn<5XC=kA20kIjOAFwthiKL$b_&BfZ5v2X}iGkUPaQv~V3hQuF=JL7>YX1QKmst?A zW?stAx;)H2+s_o5##akB@pm=qmoukCy)p314vNvefHPx`W7z6hPfo;JX>^>#Q2GW$ z8Ldd^2(`mw>rBeA(;!}=n+~v-#W~z@XX4?cWS`;Xbrh}sdLovGh5hA6P2L(cLkI`baTqQ=QT8H3Qz?n*&Q5+t z)l0604631q;>^@F+t5U!Pe)pz>4^pe zbX*-Joh}U9M@CQ>N6=VEw#?a|-Zhfs(sx~tUb%<=mig{}r{HS78a?lNM@(Z;>HS`Q z6Xb?CvzLOv*TBZUatzI#PM^f>Q+mW~&q*gQ!?Y+k3kNK!KFS)hOT8r_y8q!dJ-Ot4 zwd{c}PFf8&y3P+xRXq(Ms*8b!QYxj&(||M$jY`0lrJZ8Rji0u=gDYRs>h7x7I< z4{8=XFBvVCdslsMekt&Xy+MgFM}L7NDO!{U#8s^7 zB0EvHaM4=TO8T2XoDzH7mg=bBPiu3zdA#^_1d0y@Ln7b+R{IB;g~CyMhu|sz>K;XALBBcq7cL8fA^4C;0Qv=hSu_CA z!XN;Ah=c;rFBA$#1Gp><%m)H)n1Ev8vcGcvkAOt~)pZ$%NYfu70J!Y0!T?8$WBija z{y(C!Xy`vBJRB{u@Q;8f8gUc^(+z)T)67ENx+)Y9_9fLnqhnM`G2;oh66McyV=v#c zN#y3NLGQ&rc%N{6_L3kaxuk*0if>HWQVwr_#dN^Hw^3u+KE6ngRmTn%V~jRSZwl=# z%=!QZnpE=PXAe?B^SJT${n9o4^{1wC=E-d6ebz73m9PmV8CM$A)(C8c(v0Hy55UbB z>0|lpJeE06KJTn3kYte6s5BkfGxjW`WWAl#W7(f?Z(k=mId(>qv{EUR73yWe9%zqW(C5vzPY!)oy$4pqt~`!X6Uv+c zv(YJWvlB`co3#t1r?AIH_!C3AY)#lN`p{+D**<%9FAR~PnCbFH@_g`?`KysPFRHxp zgd?K<1|LNpsUC3@_5Vvh4vBzbiyAl@A8H&6|37Kfe~OO&(rK&&iC+)?Xo3X%NRrRL z(NP!#ak$FNt(=SW#IgN_ufiFA_l0FY-I@C zUiCPSOOxbAXodoUHHcp1NKTTg6s$$1dA=8#q-v07lb z;gn6hs*IPV85hEGmGR1nL~bm?%Rk(=Twe37BLS6m=FO|{bA{|%91k(Xy-;juLh z5y_O;7$EC<;aF)~M(||T_Zoq(A3c3t9ZTAm=T=Gnsd2;%Dnap@`OgCe*VsmleM(M}ICb%<-!G`GjG+!SCh)om+S1CyKB! zYr|fJ_V2H>$PZc+WWF|CT3v^F`T@5r)bZ6+5-Mv`(|WMg)hP$RC6Dj9w5PogW)9xF zzjYuuyDtKi@w#Ly{tQ~*DELIH&x>nat$Qk3BKxC+5Mg#P|=5PTs3U< zQi?MuqwQQwB8Z~T7=7^`LZ+IyCbZ&a=DJ2U7e%0++Kki#dn>Vng+yP7P5`xzzeL;fHnOC=r92nmP_M(2p|*3$bcCE2{`6s47H3LeoQ=l=$# zE6=&XOPfZ{kt2S&HZF*e>kY^)Ja8wDia+aFkg5@;Q^82poucz}6R5>I^M#U%hBKyw zr;e*++5ZY+BNq!G4ZaYaDU zNc4@UQG+;DucVbEjqiwAguEu*a-frRwr5Z%9?|e6M3`6csPV=!ez|HWDCDk%@j{%5du{$r-B`e=IRiymV*_ivqUZAE5hw@>biYmTW*JrfKG~hES7^7s&ZAH`V zuZ#)#=Lix*%^?z5aZFq{X%h0mu(*=vRD%)@CCk$uIuSjyESux2|itO#LWBU z;kv80pYmY}Z`s}~9`f`#F)2tNv30>6)Y4$a?1mJhG^xkIjCbzYW_9h` z)W>&wh3-bqF(eeN%7qWXx3a#LOV+>Ql+YU(FXNWq%=j98Zyy}{EN?mk8e0Q*tz*1e z1Ji$E95^SFz+Y(B6}-0-sIt=UnHs))b+5N@#{0XGq(y$)=p-5XK_7!=jEI& zyt3eNq&4&Y<>%J7%cT?Nl(kJelnXpxG>(scjx8vwf}2(R*vXiq2@QF${>dK0J0&#I zi_tH-{S=eXKx(fX)ZkRg@hHsv`iuK*+hmxVFrViwCYZpB4xP;-p6wmP7wx+4i*5TR zZrPHz?`@3Je|!g9?c2?rtJ})xs$>1&SShn2H9x_(&mJR}z%an3u23+plbdD`xY$y3qZr{>oN zRqY+}0`sQbx}+P%si!;7*=R1#lOk;gbqd`h=R&*29n$9@NT2*_m31Q5`f<>+Axnf# z8;9_VSdIkY7p8k6`wC^<9T&~?^4vq`(nj4hquM3T1bnnKu@+WPtDnj!os+)IXOeB!=FH3dGWT6?F0v;(*7TphJOsMWYGAWsh zPEdav5_vT#>D=_}yY zIF^#O-^EB3@Gv&5b7pnypp#I1QkS#VYS+vip3gn7mx8diIJRYXR2MKNxBA;lDLrkr z-?2F#+hTu)jovA4$Nf>ns)=`t$a{l1!eoB^Gk1n9~dpg61VBX|{)J z?%mBWsSwmJh2K0W1WCJC_QT%oHCuBZ>TNi8v)1``*%;qIzo0X6iHi<0CJ<=)EFwYd z-PbM!43sg~;bC$%L$$-Jxzm_F*loECVYvS8jJxzDV$0`Aaa^31KWg#U2KpF2rifBH z&3B1l@Dui+y_pRrL^=`S-QEd{3FZl$nR8uI^AI=(OYV;BS`|BoNLX-(om6R{)QYE6 zuT!3H)%v2e?Ah4F!uk&!0y7-o@JC*Cj+a{=L!Wm8lommD)|gXg&W&5O3esPk&_%pV8B90Dd_Dk32|+*RU)By_6c0Wk$iVh27Xlg{{)5kwy^ z<`L9?{Tufaek23?&k6aD=XKQm6#F~(^MB}h!hZ+z{0}@&IN+Yb(NN@JNDvan2M2?J z2p1$63Am#`AQIqt0*>!tFbw#(=lScree3{!Bt!Yn%zw}K&-_`yza*q|)JOO)gg3iW@Q2uN#z3yvtHQpdR zbcXTUX0!a_9pY2ox01KN+YjhzJDl3S`8})ohD%O-k$t7SXwvHk zw5V~GN0r0e)Q0eOX>KC3tD05}y}~?NC)3|7m_3+~bM|Ph;dpQ{=_xhIWeyESdi5fK z+Qn0TbR((dw>mO6?35=aTZb;3e$mv130MV=L7nVP)?J9L@;V5uf#JxdEy< z?Y2^{a0N2Ox^~%UZYKdc0qgIce6cGDp3sARkW~zQxYDVdxVM{(Q*6y2#nfhh5PJ4H z_2aG&K+8ZZwuTm@K&;kLCHd=F9}DbKqfTwASEr>-brH)2R6t5(-xx8pD{3OGp2W!)5JSv70-;;XXM(v$gwtzJArCC@ky-UT642Uvbxrdi%-9 z$uY9`V|dgAH4#P?uq^z0c&|eVfSX>I1C`$q^furvz1}Qgs@dn-siMizA<($Jd@HN< zV~Y@;DIUsYX}o4H{aRZW-XPI?v1YN3Mj%$U0iO&1H#A;<6uD+|;-uy< z`I(dW?OrE8nUHtqk>C$*Kod{%puOw&8}?H_!O7D;EBSsc^~2BG>kgl3VE$mD?@IX? z6SC{pr|xXzwI`FDD5USRFWO;QF(>L;*7VlfuhTO-=Rpu057;N})8(B$t6R-zr}%Df zoKX{MR7kNVw<&hZ_dBN&-q2I4LhT21CC^lc+0`u0oi|#KBPo_yFSZb4C!woNley=f z6?7G1fR7CsS8BO}DiTtJC3e<9I8xtxZ z8XoyK^C!#YwKLuQRsFdhg|*B}MVg&*dq&ca@_xBYhMb(+5V)Gtah?Q)DS6?Sl+af` zI!lhyRb5iI#f(b^PNo%=WyKrZyOY2icOJpVrQ^#b^;6M*;K!vrmSOsJ?2@au{YLt9-+h zCO1r5$tw~}2j|r@B}_g7~L)a}ghSD&EyjwdHl%z%aBv& z2&D_Be;rf{Z(%cd<3t)E{-&0+G%wG1vQ zp`RK|2^}-NjwzsjExky%NI1^BeDmC9!n*OLLJ5u)JO@*U$X2WE5cfGM(=_$H-o1-& z5I<9O|9g~E7K$xJwTx7A<8k0(21mN3vbF{dP& zl$o6yP(nXq*Wa+u>hS*w4*i)+(WfMx^CsObpf1ps?B^QG^`=Rq$VVRbd`9Hic4;Zg z&5e_HcGsH(>`PY3DD390x3YT&5er|7@oHxQ2Oi*^j=G9^o}ik~)Wo}F-^%An@Y-wG z@8{DDb$kS?RaNQNw+nBJbA^0O*H}FWsme%JOoZ#&iGoyVXON!~?TQZ`dd-=B?;0-x z8;d`{kJ2li@1C`f*_&p{q1K15_Bld-7BdJp2DW@99k2;fA`415ow*TE9_^$eno5x& z<|m3|5wSdz2`8bq7ZR7-4oY~Pa|ZL0R8fmC?VflpK4$K7y1=It1*V|ufm{V5P~MwS zF?3c`2_2za)npZtGIG1U{>u_&C24{AEd7b=r>Hj=7B2F?@1twC_mdQ6-J_9CW=rDO z^SZZXt?E9%Y%*K0$UTc$G?@*Z8%jSI#_)rCe!#v3z`*^tCMjdk&kA`Vq;?S#z5-@OFfEuQHvQe1EbT+J5PQnedGt zkG_5WT5@wSdf48+%$5W3K;bRCLL|nmxR#zGAvr zbVc825;d(@@11-T?b)6_?$Mq;%o%m6!rIWua8lexbm=*ZmtkX5@!si)z7IK!KS`G- zqm_F_e`cD2*KiduMH`s|0-ck@!RKX8`}pu1<`$W2c-p zLFeG6WZmuDjK>T9t&elWMOCcMrlp@437}2Yra!lNs<(35=@aeeCsx6rYo$$egKR@Q z6koy#;ZyvZUb(AxlHZTjX)G@4<@dV`IhVO@-9jd&eU4ln;;Knb;T{)L{XsNX_Ncxl z+}6`1y||=Ksk)?2anZt7<@#hHSGD|St4biFGn91Hyd+8O1w&q%eCbW5&`mBj@l$By z$4QY61rQ0!3H~AO$8~S&G4=2GMwd4>ZGPtL74K1ablX^$td<=F>e3TB-|rn@?>WoV zVe`bTPFHzQN1v{8(`weqw}!1Xf6HbnhJdk$SKCN4&0}UuRyM_1iq1Bq#m!KvHkeA% zPzM?1#NNszQ#xQ4n%$~AQ&UHnYG33!PF6G|_*~juc}CB+^UFq-Qj}=t$?)^C?rm~z z+|gU^2Giu%W&^^jYEC1#zWLgVAu(q&m2SmXe_}%JxG?Noek)`0_Ox`S(pSAp0T3xm4k0l@%!mxcei)#*K{5N`1fn^;=$) zQk2e2gXcM5(FYlF%GqWzwzA4Q;)%5CJDSRqW}nmAU~`q`_OV^7%9z3sn}O3*tLM8P zP+NOnG?tO^*RsoLSrx0ufaMU%>|OtQZd4;iEuT}_;Hs!)8F|Hyq$XdLSjUYIeGFvf z9enEJt6x6NY9*c*eV_3uhNUtg>T^(!0ObqKNoc&7GUa#9TI2hpcfMuO(?!@f@UuOD z#1}ba#}1iW*RB*+TJF}rKfPsc&AI~DsQEGX*-4j2O2HbRvQWFdI}zDG zs}pM9py)A;UBWTCT3JoGh=De_{7ypG`Hw-J98{I`nz5JddWYL+tb8uy}V9N zf-2fI1c44yhIcsjj`c-tP5QiApW5 zw;Yw2;r=HhPd}ZW)YUD6Aiz_@*maKmx1^6!r=?CXGOjy~N^@kZw0yZ`{p$_00r5!I|mWhMZlX zhO>1qBl7U{I7U3j|2x`YQ)amj#MqK_gK>BG|vuya03osKW?kj~$J} z_z!RHfWVJuY8|h{IP>6{zk%F^_S7+rL1H^A4k%BBJ#ce}_b@Nh5=&#?cNt+}>mL=B zmrv}G$Wzc8K-7qJCTPz#1(lU#d`t;_Ox3B&+Y1zkUoI{>6Z=8_Nk1HKuVo}3ykzG# zVAH~ux_ZM1&R_J&*ZStdg^O4*G{1Uvb4!CO!knsN{RP^5~ z)PIZ`{R*qWLXEJl(r|MyHX#ME0LhZ1puavW2sj)HXE9;KF|H2BM3wX>cSIn}&p=K>)kQ`l8?nAf)Ix4Gn@p0l@lb zJK%TdVf9HY8VtyM#HJy@KsX3iJLF;78Ws%&m=-J=U|w+gg29J@9>@EFA!s131B(U& zqNK2Ca9sYtNDvM$VAS7?0bGBA{e2KH1g9?qav1({oEHcTcMJ&pu+%PAI|LGkX9x-~ zGuZ9Whncp=`$9pu@`FOaIQ&7O2wWOaCl=@X5V+3>ibUbILj%QTv3LQ}ka75ffzi0_ zpofXS$L9e%++wh42nev$u-XCJ4i4>aV^@hZjDZnrYjHOo)5U{kc z)(ixMLIbP$7=I8j6pF1cK*BEsyDtcg!jUPU&7i~AA4lg4^hANM#sEQ}P%suRKwseX z%<;Z})xe@fh*+566tMQO);SmoC<4~pAb?uo@P|U8vE>K!g&)2hIXX8GP`(#i z|A2OA2==&uHbb$-1=JJ*#c2naA>4L2_6n#l0Kw+vQ0;NXfBSjX zN8{+}VX*`po`Ie5&_g)-EWrpc0(Urib zBn*Y42S_*!=eZ#fxI6>F%xG-c13M_TZ3lK$2+o>D!BM#F&~R)U1_rLc!_jdx2zdR5 zH4nga0)ENyxuM};oM(iF!*FaJ8c-o@y+;EN1WQ)HTW%D#9sv6SpfbnD1!z!gIRi8_ z7>hq(|G=?f01fc6u)hxlN8|8<#@XM1Qwbb<{T`lF&{%T=_9zhcxelPgactA!W`^At z0*0e-X@IrE;u!*g;mj8TED)^q2JCN;!}114*8)I;;qIXb;K^aN18g0RoB_LbSTX(B z_W?&AF!mUL9m3WF2o!K=vGf_BA+gVOfH4JOpPvC59D5xBi~v)?;sthS@o{KKY<&jy z6dc_J1ckyG7X}<-v3Z6efp^b;#&B{l0LrvD9KKXnHos^5%O~Mivb6;Y$^boCfMAPX g^-%x~`&Cok(aFHU>6iNgu!@2rNr5{qZcCE>A6>55!~g&Q diff --git a/04_week/CMakeLists.txt b/04_week/CMakeLists.txt deleted file mode 100644 index 0531237e..00000000 --- a/04_week/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -cmake_minimum_required(VERSION 3.14) # Минимальная требуемая версия CMake -project(04_week) # Необходим для инициализации cmake - -set(CMAKE_CXX_STANDARD 20) # Версия стандарта C++ -set(CMAKE_CXX_STANDARD_REQUIRED ON) # Гарантирует использование указанной версии стандарта - -set(EXAMPLES_DIR examples) # Определим переменную с именем директории -set(TASKS_DIR tasks) - -add_subdirectory(tasks) - -# Создать исполняемый файл для каждого примера -if (BUILD_EXAMPLES_04_WEEK) -# add_example(struct_examples ${EXAMPLES_DIR}/struct_examples.cpp) -endif() \ No newline at end of file From c8693f4d5d64695b14fbfa566ae20dbe172701ec Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Tue, 16 Dec 2025 20:34:43 +0500 Subject: [PATCH 26/66] fix (solution): fix infinite loop in range task --- 03_week/tasks/range/range.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/03_week/tasks/range/range.cpp b/03_week/tasks/range/range.cpp index 7b5243ad..9869410a 100644 --- a/03_week/tasks/range/range.cpp +++ b/03_week/tasks/range/range.cpp @@ -6,9 +6,7 @@ std::vector Range(int from, int to, const int step = 1) { std::vector result{}; result.reserve(std::abs(from - to)); - bool is_to_from = from > to && step < 0; - bool is_from_to = from < to && step > 0; - while (is_from_to || is_to_from) { + while ((from > to && step < 0) || (from < to && step > 0)) { result.push_back(from); from += step; } From 18eedf4ef937aa4f5c6a86232440d173d69dddac Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Wed, 17 Dec 2025 11:32:23 +0500 Subject: [PATCH 27/66] fix (solution): reduce number of comparisons to increase performance in the minmax task --- 03_week/tasks/minmax/minmax.cpp | 44 ++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/03_week/tasks/minmax/minmax.cpp b/03_week/tasks/minmax/minmax.cpp index 963569c5..eb241de0 100644 --- a/03_week/tasks/minmax/minmax.cpp +++ b/03_week/tasks/minmax/minmax.cpp @@ -1,28 +1,38 @@ #include -#include -struct MinMaxResult { - std::vector::const_iterator min_it{}; - std::vector::const_iterator max_it{}; -}; +std::pair::const_iterator, std::vector::const_iterator> MinMax(const std::vector& arr) { + auto first = arr.begin(), last = arr.end(); + if (first == last) + return {last, last}; -MinMaxResult MinMax(const std::vector& arr) { - MinMaxResult result{arr.end(), arr.end()}; + auto min = first, max = first; - if (arr.empty()) return result; - - result = {arr.begin(), arr.begin()}; - - for (size_t i = 1; i < arr.size(); ++i) { - if (arr[i] >= *result.max_it) { - result.max_it = arr.begin() + i; + while (++first != last) { + auto i = first; + if (++first == last) { + if (*i < *min) + min = i; + else if (*i >= *max) + max = i; + break; } - else if (arr[i] < *result.min_it) { - result.min_it = arr.begin() + i; + else { + if (*first < *i) { + if (*first < *min) + min = first; + if (*i >= *max) + max = i; + } + else { + if (*i < *min) + min = i; + if (*first >= *max) + max = first; + } } } - return result; + return {min, max}; } From bf4e7b824723aa9a7035b47943df826a211cd0df Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Fri, 26 Dec 2025 15:50:05 +0500 Subject: [PATCH 28/66] add (solution): add ring_buffer task --- 04_week/tasks/ring_buffer/ring_buffer.cpp | 252 +++++++++++++++++++++- 1 file changed, 251 insertions(+), 1 deletion(-) diff --git a/04_week/tasks/ring_buffer/ring_buffer.cpp b/04_week/tasks/ring_buffer/ring_buffer.cpp index e2b57ba2..22c5ab06 100644 --- a/04_week/tasks/ring_buffer/ring_buffer.cpp +++ b/04_week/tasks/ring_buffer/ring_buffer.cpp @@ -1,6 +1,256 @@ #include +#include +#include class RingBuffer { - +public: + RingBuffer(const size_t size); + RingBuffer(const size_t size, const int val); + RingBuffer(const std::initializer_list ilist); + RingBuffer(const RingBuffer& other); + void Push(const int item); + bool TryPush(const int item); + void Pop(); + bool TryPop(int& pop_value); + int& Front(); + int Front() const; + int& Back(); + int Back() const; + bool Empty() const; + bool Full() const; + size_t Size() const; + size_t Capacity() const; + void Clear(); + void Resize(const size_t size); + std::vector Vector() const; + int& operator[](const size_t idx); + int operator[](const size_t idx) const; + RingBuffer& operator=(const RingBuffer& other); +private: + int m_null_value = 0; + size_t m_begin = 0; + size_t m_end = 0; + size_t m_size = 0; + std::vector m_buffer{}; + size_t m_check_zero_size(const size_t size) const; + void m_pop_core(); + void m_push_back_core(const int item); + void m_copy_core(const RingBuffer& other); + int m_last() const; }; + +size_t RingBuffer::m_check_zero_size(const size_t size) const { + return (size == 0) ? 1 : size; +} + +int RingBuffer::m_last() const { + return (m_end == 0) ? Capacity() - 1 : m_end - 1; +} + +RingBuffer::RingBuffer(size_t size) { + m_buffer.reserve(m_check_zero_size(size)); +} + +RingBuffer::RingBuffer(const size_t size, const int val) { + m_buffer.reserve(m_check_zero_size(size)); + for (size_t i = 0; i < Capacity(); ++i) { + m_buffer.push_back(val); + } + m_size = m_buffer.size(); + m_end = m_buffer.size(); +} + +RingBuffer::RingBuffer(const std::initializer_list ilist) : m_buffer(ilist) { + if (m_buffer.empty()) { + m_buffer.reserve(1); + } + m_size = m_buffer.size(); + m_end = m_buffer.size(); +} + +void RingBuffer::m_copy_core(const RingBuffer& other) { + m_begin = other.m_begin; + m_end = other.m_end; + m_size = other.m_size; + m_buffer = other.m_buffer; + m_buffer.reserve(other.Capacity()); +} + +RingBuffer::RingBuffer(const RingBuffer& other) { + m_copy_core(other); +} + +inline void RingBuffer::m_push_back_core(const int item) { + if (m_buffer.size() == Capacity()) { + m_buffer[m_end] = item; + if (m_size != m_buffer.size()) { + ++m_size; + } + else { + m_begin = (m_begin + 1) % Capacity(); + } + } + else { + m_buffer.push_back(item); + ++m_size; + } + m_end = (m_end + 1) % Capacity(); +} + +void RingBuffer::Push(const int item) { + m_push_back_core(item); +} + +bool RingBuffer::TryPush(const int item) { + if (Full()) { + return false; + } + else { + m_push_back_core(item); + return true; + } +} + +inline void RingBuffer::m_pop_core() { + m_begin = (m_begin + 1) % Capacity(); + --m_size; +} + +void RingBuffer::Pop() { + if (Size() == 0) + return; + + m_pop_core(); +} + +bool RingBuffer::TryPop(int& pop_value) { + if (Size() == 0) + return false; + + pop_value = m_buffer[m_begin]; + + m_pop_core(); + + return true; +} + +int& RingBuffer::Front() { + if (Size() == 0) + return m_null_value; + + return m_buffer[m_last()]; +} + +int RingBuffer::Front() const { + if (Size() == 0) + return m_null_value; + + return m_buffer[m_last()]; +} + +int& RingBuffer::Back() { + if (Size() == 0) + return m_null_value; + + return m_buffer[m_begin]; +} + +int RingBuffer::Back() const { + if (Size() == 0) + return m_null_value; + + return m_buffer[m_begin]; +} + +bool RingBuffer::Empty() const { + return Size() == 0; +} + +bool RingBuffer::Full() const { + return Capacity() == Size(); +} + +size_t RingBuffer::Size() const { + return m_size; +} + +size_t RingBuffer::Capacity() const { + return m_buffer.capacity(); +} + +void RingBuffer::Clear() { + m_buffer.clear(); + m_size = 0; +} + +std::vector RingBuffer::Vector() const { + std::vector vector_buffer; + vector_buffer.reserve(Size()); + + if (m_end <= m_begin) { + size_t left_size = m_end; + size_t right_size = Size() - m_begin; + + size_t i = m_begin; + + while (i - m_begin < right_size) { + vector_buffer.push_back(m_buffer[i++]); + } + + i = 0; + while (i < left_size) { + vector_buffer.push_back(m_buffer[i++]); + } + } + else { + for (size_t i = 0; i < Size(); ++i) { + vector_buffer.push_back(m_buffer[i]); + } + } + + return vector_buffer; +} + +void RingBuffer::Resize(const size_t size) { + size_t new_size = m_check_zero_size(size); + + if (new_size == Capacity()) { + return; + } + + std::vector new_buffer; + new_buffer.reserve(new_size); + + std::vector vector_buffer = Vector(); + + for ( + size_t i = (Size() > new_size) ? Size() - new_size : 0; + new_buffer.size() != new_buffer.capacity() && i < Size(); + ++i + ) { + new_buffer.push_back(vector_buffer[i]); + } + + m_buffer = std::move(new_buffer); + m_begin = 0; + m_size = m_buffer.size(); + m_end = Size(); +} + +int& RingBuffer::operator[](const size_t idx) { + return m_buffer[(m_begin + idx) % Capacity()]; +} + +int RingBuffer::operator[](const size_t idx) const { + return m_buffer[(m_begin + idx) % Capacity()]; +} + +RingBuffer& RingBuffer::operator=(const RingBuffer& other) { + if (this == &other) { + return *this; + } + + m_copy_core(other); + return *this; +} From 70ff77d6e46639d760193e496e151a4ac0bc3eee Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Fri, 26 Dec 2025 15:50:41 +0500 Subject: [PATCH 29/66] add (solution): add phasor task --- 04_week/tasks/phasor/phasor.cpp | 200 +++++++++++++++++++++++++++++++- 1 file changed, 198 insertions(+), 2 deletions(-) diff --git a/04_week/tasks/phasor/phasor.cpp b/04_week/tasks/phasor/phasor.cpp index 3ec1b9ad..177820d5 100644 --- a/04_week/tasks/phasor/phasor.cpp +++ b/04_week/tasks/phasor/phasor.cpp @@ -1,10 +1,206 @@ - +#include +#include +#include struct ExpTag {}; struct DegTag {}; struct AlgTag {}; +double areDoublesEqual(const double a, const double b, const double eps = 1e-12) { + return std::abs(a - b) < eps; +} class Phasor { - +public: + Phasor(); + Phasor(const double m, const double phi); + Phasor(const double m, const double phi, const ExpTag& tag); + Phasor(const double m, const double deg, const DegTag& tag); + Phasor(const double x, const double y, const AlgTag& tag); + void SetPolar(const double m, const double phi); + void SetCartesian(const double x, const double y); + double Magnitude() const; + double Abs() const; + double Phase() const; + double Angle() const; + double PhaseDeg() const; + double AngleDeg() const; + double Real() const; + double Imag() const; + Phasor Conj() const; + Phasor Inv() const; + bool operator==(const Phasor& other) const; + bool operator!=(const Phasor& other) const; + Phasor operator-() const; + Phasor& operator+=(const Phasor& other); + Phasor& operator-=(const Phasor& other); + Phasor& operator/=(const Phasor& other); + Phasor& operator*=(const Phasor& other); +private: + double m_m = .0; + double m_phi = .0; + double m_deg_to_rad(const double deg) const; + double m_rad_to_deg(const double deg) const; + void m_normalize_magnitude(); + void m_normalize_phase(); + void m_normalize_phasor(); }; + +double Phasor::m_deg_to_rad(const double deg) const { + return deg * M_PI / 180; +} + +double Phasor::m_rad_to_deg(const double rad) const { + return rad * 180 / M_PI; +} + +void Phasor::m_normalize_magnitude() { + if (m_m < 0) { + m_m = std::abs(m_m); + m_phi += (m_phi > 0) ? -M_PI : M_PI; + } +} + +void Phasor::m_normalize_phase() { + m_phi = std::atan2(std::sin(m_phi), std::cos(m_phi)); + + if (m_phi <= -M_PI) { + m_phi = M_PI; + } +} + +void Phasor::m_normalize_phasor() { + m_normalize_magnitude(); + m_normalize_phase(); +} + +void Phasor::SetCartesian(const double x, const double y) { + m_m = sqrt(pow(x, 2) + pow(y, 2)); + m_phi = atan2(y, x); + m_normalize_phasor(); +} + +Phasor::Phasor() {} +Phasor::Phasor(const double m, const double phi = 0) : m_m(m), m_phi(phi) { + m_normalize_phasor(); + +} +Phasor::Phasor(const double m, const double phi, const ExpTag&) : Phasor(m, phi) {} +Phasor::Phasor(const double m, const double deg, const DegTag&) : Phasor(m, m_deg_to_rad(deg)) {} +Phasor::Phasor(const double x, const double y, const AlgTag&) { + SetCartesian(x, y); +} + +void Phasor::SetPolar(const double m, const double phi) { + m_m = m; + m_phi = phi; + m_normalize_phasor(); +} + +double Phasor::Magnitude() const { + return m_m; +} + +double Phasor::Abs() const { + return m_m; +} + +double Phasor::Phase() const { + return m_phi; +} + +double Phasor::Angle() const { + return m_phi; +} + +double Phasor::PhaseDeg() const { + return m_rad_to_deg(m_phi); +} + +double Phasor::AngleDeg() const { + return m_rad_to_deg(m_phi); +} + +double Phasor::Real() const { + return m_m * cos(m_phi); +} + +double Phasor::Imag() const { + return m_m * sin(m_phi); +} + +Phasor Phasor::Conj() const { + return Phasor(m_m, -m_phi); +} + +Phasor Phasor::Inv() const { + return Phasor(1 / m_m, -m_phi); +} + +bool Phasor::operator==(const Phasor& other) const { + return areDoublesEqual(m_m, other.m_m) && areDoublesEqual(m_phi, other.m_phi); +} + +bool Phasor::operator!=(const Phasor& other) const { + return !(*this == other); +} + +Phasor Phasor::operator-() const { + return Phasor(-m_m, m_phi); +} + +Phasor& Phasor::operator+=(const Phasor& other) { + SetCartesian(Real() + other.Real(), Imag() + other.Imag()); + return *this; +} + +Phasor& Phasor::operator-=(const Phasor& other) { + SetCartesian(Real() - other.Real(), Imag() - other.Imag()); + return *this; +} + +Phasor& Phasor::operator*=(const Phasor& other) { + SetPolar(m_m * other.m_m, m_phi + other.m_phi); + return *this; +} + +Phasor& Phasor::operator/=(const Phasor& other) { + SetPolar(m_m / other.m_m, m_phi - other.m_phi); + return *this; +} + +std::ostream& operator<<(std::ostream& os, const Phasor& phasor) { + return ( + os << std::fixed << std::setprecision(3) << phasor.Magnitude() + << "*e(j*" << phasor.PhaseDeg() << ") [" << phasor.Real() + << " + j*" << phasor.Imag() << "]" << std::endl + ); +} + +Phasor operator+(const Phasor& lhs, const Phasor& rhs) { + return Phasor(lhs.Real() + rhs.Real(), lhs.Imag() + rhs.Imag(), AlgTag {}); +} + +Phasor operator-(const Phasor& lhs, const Phasor& rhs) { + return Phasor(lhs.Real() - rhs.Real(), lhs.Imag() - rhs.Imag(), AlgTag {}); +} + +Phasor operator*(const Phasor& lhs, const Phasor& rhs) { + return Phasor(lhs.Abs() * rhs.Abs(), lhs.Phase() + rhs.Phase()); +} + +Phasor operator/(const Phasor& lhs, const Phasor& rhs) { + return Phasor(lhs.Abs() / rhs.Abs(), lhs.Phase() - rhs.Phase()); +} + +Phasor MakePhasorCartesian(const double x, const double y) { + return Phasor(x, y, AlgTag {}); +} + +Phasor MakePhasorPolar(const double m, const double phi) { + return Phasor(m, phi, ExpTag {}); +} + +Phasor MakePhasorPolarDeg(const double m, const double deg) { + return Phasor(m, deg, DegTag {}); +} \ No newline at end of file From fca57cf7bf1cb47d408690a5273861d8849cb9be Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Fri, 26 Dec 2025 15:51:09 +0500 Subject: [PATCH 30/66] add (solution): add queue task --- 04_week/tasks/queue/queue.cpp | 144 +++++++++++++++++++++++++++++++++- 1 file changed, 143 insertions(+), 1 deletion(-) diff --git a/04_week/tasks/queue/queue.cpp b/04_week/tasks/queue/queue.cpp index 2a9f8493..e4648e33 100644 --- a/04_week/tasks/queue/queue.cpp +++ b/04_week/tasks/queue/queue.cpp @@ -1,6 +1,148 @@ #include +#include +#include class Queue { - +public: + Queue() = default; + Queue(std::stack stack); + Queue(std::vector vector); + Queue(std::initializer_list values); + Queue(const int size); + void Push(const int x); + bool Pop(); + int& Back(); + int Back() const; + int& Front(); + int Front() const; + bool Empty() const; + size_t Size() const; + void Clear(); + void Swap(Queue& other); + bool operator==(const Queue& other) const; + bool operator!=(const Queue& other) const; +private: + int m_null_value = 0; + std::vector m_input{}; + std::vector m_output{}; + std::vector m_merge_vectors(const auto& input, const auto& output) const; }; + +Queue::Queue(std::stack stack) { + while (!stack.empty()) { + m_output.push_back(stack.top()); + stack.pop(); + } +} + +Queue::Queue(std::vector vector) { + while (!vector.empty()) { + m_output.push_back(vector.back()); + vector.pop_back(); + } +} + +Queue::Queue(std::initializer_list ilist) { + for (const int v : ilist) { + m_input.push_back(v); + } +} + +Queue::Queue(const int size) { + m_input.reserve(size); + m_output.reserve(size); +} + +void Queue::Push(const int x) { + m_input.push_back(x); +} + +bool Queue::Pop() { + if (Empty()) { + return false; + } + + if (m_output.empty()) { + while (!m_input.empty()) { + m_output.push_back(m_input.back()); + m_input.pop_back(); + } + } + + m_output.pop_back(); + + return true; +} + +int& Queue::Back() { + if (Empty()) + return m_null_value; + + return m_input.empty() ? m_output.front() : m_input.back(); +} + +int Queue::Back() const { + if (Empty()) + return m_null_value; + + return m_input.empty() ? m_output.front() : m_input.back(); +} + +int& Queue::Front() { + if (Empty()) + return m_null_value; + + return m_output.empty() ? m_input.front() : m_output.back(); +} + +int Queue::Front() const { + if (Empty()) + return m_null_value; + + return m_output.empty() ? m_input.front() : m_output.back(); +} + +bool Queue::Empty() const { + return m_input.empty() && m_output.empty(); +} + +size_t Queue::Size() const { + return m_input.size() + m_output.size(); +} + +void Queue::Clear() { + m_input.clear(); + m_output.clear(); +} + +void Queue::Swap(Queue& other) { + m_input.swap(other.m_input); + m_output.swap(other.m_output); +} + +std::vector Queue::m_merge_vectors(const auto& input, const auto& output) const { + std::vector merged{}; + merged.reserve(input.size() + output.size()); + + for (int i = output.size() - 1; i >= 0; --i) { + merged.push_back(output[i]); + } + + for (size_t i = 0; i < input.size(); ++i) { + merged.push_back(input[i]); + } + + return merged; +} + +bool Queue::operator==(const Queue& other) const { + std::vector this_merged = m_merge_vectors(m_input, m_output); + std::vector other_merged = m_merge_vectors(other.m_input, other.m_output); + + return this_merged == other_merged; +} + +bool Queue::operator!=(const Queue& other) const { + return !(*this == other); +} \ No newline at end of file From 171b60ebf57a0040a9eee611eb213387d5427cfc Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Fri, 26 Dec 2025 15:51:27 +0500 Subject: [PATCH 31/66] add (solution): add stack task --- 04_week/tasks/stack/stack.cpp | 69 ++++++++++++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 1 deletion(-) diff --git a/04_week/tasks/stack/stack.cpp b/04_week/tasks/stack/stack.cpp index 222e4ffc..4a91ce60 100644 --- a/04_week/tasks/stack/stack.cpp +++ b/04_week/tasks/stack/stack.cpp @@ -1,6 +1,73 @@ #include +#include class Stack { - +public: + void Push(const int x); + bool Pop(); + int& Top(); + int Top() const; + bool Empty() const; + size_t Size() const; + void Clear(); + void Swap(Stack& other); + bool operator==(const Stack& other) const; + bool operator!=(const Stack& other) const; +private: + int m_null_value = 0; + std::vector m_stack{}; }; + +void Stack::Push(const int x) { + m_stack.push_back(x); +} + +bool Stack::Pop() { + if (Empty()) { + return false; + } + + m_stack.pop_back(); + return true; +} + +int Stack::Top() const { + if (Empty()) { + return m_null_value; + } + + return m_stack.back(); +} + +int& Stack::Top() { + if (Empty()) { + return m_null_value; + } + + return m_stack.back(); +} + +bool Stack::Empty() const { + return m_stack.empty(); +} + +size_t Stack::Size() const { + return m_stack.size(); +} + +void Stack::Clear() { + return m_stack.clear(); +} + +void Stack::Swap(Stack& other) { + m_stack.swap(other.m_stack); +} + +bool Stack::operator==(const Stack& other) const { + return m_stack == other.m_stack; +} + +bool Stack::operator!=(const Stack& other) const { + return m_stack != other.m_stack; +} From 77b1676e9d75cec62199ee2c7761a9632593b2b9 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Mon, 29 Dec 2025 11:47:22 +0500 Subject: [PATCH 32/66] ref (solution): remove explicit static_cast of the second operand --- 01_week/tasks/addition/addition.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/01_week/tasks/addition/addition.cpp b/01_week/tasks/addition/addition.cpp index 3529a582..b9263084 100644 --- a/01_week/tasks/addition/addition.cpp +++ b/01_week/tasks/addition/addition.cpp @@ -2,5 +2,5 @@ int64_t Addition(int a, int b) { - return static_cast(a) + static_cast(b); + return static_cast(a) + b; } \ No newline at end of file From b0b0dfa09cc805e2707b662c36450258ff6300c2 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Mon, 29 Dec 2025 12:01:49 +0500 Subject: [PATCH 33/66] ref (solution): rename variable 'k' to variable 'pos' --- 01_week/tasks/char_changer/char_changer.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/01_week/tasks/char_changer/char_changer.cpp b/01_week/tasks/char_changer/char_changer.cpp index cecca82c..9d1bce8b 100644 --- a/01_week/tasks/char_changer/char_changer.cpp +++ b/01_week/tasks/char_changer/char_changer.cpp @@ -3,8 +3,8 @@ size_t CharChanger(char array[], size_t size, char delimiter = ' ') { - // k - указатель для массива array без дубликатов - size_t k = 0; + // pos - позиция в массиве array без дубликатов + size_t pos = 0; // size - размер массива с учётом '\0' в конце for (size_t i = 0; i < size - 1; ++i) { @@ -14,19 +14,19 @@ size_t CharChanger(char array[], size_t size, char delimiter = ' ') { // определяем тип замены if (isdigit(old_symbol)) { - array[k++] = '*'; + array[pos++] = '*'; } else if (old_symbol == ' ') { - array[k++] = delimiter; + array[pos++] = delimiter; } else if (islower(old_symbol)) { - array[k++] = toupper(old_symbol); + array[pos++] = toupper(old_symbol); } else if (isupper(old_symbol)) { - array[k++] = old_symbol; + array[pos++] = old_symbol; } else { - array[k++] = '_'; + array[pos++] = '_'; } // поиск и подсчёт дубликатов @@ -42,12 +42,12 @@ size_t CharChanger(char array[], size_t size, char delimiter = ' ') { // добавляем счётчик после повторяющегося символа (кроме ' ') if (old_symbol != ' ') - array[k++] = duplicates + 1 >= 10 ? '0' : duplicates + 1 + '0'; + array[pos++] = duplicates + 1 >= 10 ? '0' : duplicates + 1 + '0'; } } // устанавливаем новый конец массива - array[k] = '\0'; + array[pos] = '\0'; - return k; + return pos; } From 3ff40839bb3ecf288aac1c2127ea2e3988883515 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Mon, 29 Dec 2025 14:48:40 +0500 Subject: [PATCH 34/66] ref (solution): rewrite ineffective solution --- 01_week/tasks/check_flags/check_flags.cpp | 61 ++++++++--------------- 1 file changed, 22 insertions(+), 39 deletions(-) diff --git a/01_week/tasks/check_flags/check_flags.cpp b/01_week/tasks/check_flags/check_flags.cpp index 877d11c1..2e6df889 100644 --- a/01_week/tasks/check_flags/check_flags.cpp +++ b/01_week/tasks/check_flags/check_flags.cpp @@ -19,53 +19,36 @@ CheckFlags operator&(CheckFlags lhs, CheckFlags rhs) { return static_cast(static_cast(lhs) & static_cast(rhs)); } -std::string GetFlagName(CheckFlags flags) { - switch (flags) { - case CheckFlags::TIME: - return "TIME"; - case CheckFlags::DATE: - return "DATE"; - case CheckFlags::USER: - return "USER"; - case CheckFlags::CERT: - return "CERT"; - case CheckFlags::KEYS: - return "KEYS"; - case CheckFlags::DEST: - return "DEST"; - default: - return ""; - } -} - void PrintCheckFlags(CheckFlags flags) { // Проверка на выход за диапозон значений CheckFlags - if (static_cast(CheckFlags::ALL) < static_cast(flags)) { + if ((~static_cast(CheckFlags::ALL) & static_cast(flags)) != 0) { return; } - std::vector checks{ - CheckFlags::TIME, - CheckFlags::DATE, - CheckFlags::USER, - CheckFlags::CERT, - CheckFlags::KEYS, - CheckFlags::DEST, + const static std::pair checks[] { + {CheckFlags::TIME, "TIME"}, + {CheckFlags::DATE, "DATE"}, + {CheckFlags::USER, "USER"}, + {CheckFlags::CERT, "CERT"}, + {CheckFlags::KEYS, "KEYS"}, + {CheckFlags::DEST, "DEST"} }; - std::vector flags_names{}; - for (auto &check : checks) { - if (std::string flag_name = GetFlagName(flags & check); flag_name != "") { - flags_names.push_back(flag_name); - } - } + bool first = true; + + std::cout << "["; - std::string result = "["; - for (size_t i = 0, flags_size = flags_names.size(); i < flags_size; ++i) { - result += flags_names[i]; - if (i != flags_size - 1) { - result += ','; + for (const auto& [flag, name] : checks) { + if ((flags & flag) != CheckFlags::NONE) { + if (first) { + first = false; + } + else { + std::cout << ","; + } + std::cout << name; } } - std::cout << result << ']'; + + std::cout << ']'; } From f8ab7f0772b983e868e873d93781e099e0b3a928 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Mon, 29 Dec 2025 14:55:25 +0500 Subject: [PATCH 35/66] ref (solution): create anonymous namespace with conversion constants --- 01_week/tasks/length_lit/length_lit.cpp | 33 ++++++++++++++++--------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/01_week/tasks/length_lit/length_lit.cpp b/01_week/tasks/length_lit/length_lit.cpp index f2e02fac..e5f29adb 100644 --- a/01_week/tasks/length_lit/length_lit.cpp +++ b/01_week/tasks/length_lit/length_lit.cpp @@ -1,51 +1,60 @@ +namespace { + constexpr long double INCHES_PER_FOOT = 12.0L; + constexpr long double CM_PER_INCH = 2.54L; + constexpr long double M_PER_FOOT = 0.3048L; + constexpr long double CM_PER_FOOT = M_PER_FOOT * 100.0L; + constexpr long double M_PER_INCH = CM_PER_INCH / 100.0L; + constexpr long double CM_PER_METER = 100.0L; +} + // ==== Перевод футов ==== constexpr long double operator""_ft_to_m(long double ft) { - return ft * 0.3048L; + return ft * M_PER_FOOT; } constexpr long double operator""_ft_to_cm(long double ft) { - return ft * 30.48L; + return ft * CM_PER_FOOT; } constexpr long double operator""_ft_to_in(long double ft) { - return ft * 12.0L; + return ft * INCHES_PER_FOOT; } // ==== Перевод дюймов ==== constexpr long double operator""_in_to_m(long double in) { - return in * 0.0254L; + return in * M_PER_INCH; } constexpr long double operator""_in_to_cm(long double in) { - return in * 2.54L; + return in * CM_PER_INCH; } constexpr long double operator""_in_to_ft(long double in) { - return in / 12.0L; + return in / INCHES_PER_FOOT; } // ==== Перевод метров ==== constexpr long double operator""_m_to_ft(long double m) { - return m * 3.280839895L; + return m / M_PER_FOOT; } constexpr long double operator""_m_to_in(long double m) { - return m * 39.37007874L; + return m / M_PER_INCH; } constexpr long double operator""_m_to_cm(long double m) { - return m * 100.0L; + return m * CM_PER_METER; } // ==== Перевод сантиметров ==== constexpr long double operator""_cm_to_m(long double cm) { - return cm / 100.0L; + return cm / CM_PER_METER; } constexpr long double operator""_cm_to_ft(long double cm) { - return cm * 0.03280839895L; + return cm / CM_PER_FOOT; } constexpr long double operator""_cm_to_in(long double cm) { - return cm * 0.3937007874L; + return cm / CM_PER_INCH; } \ No newline at end of file From 6f857f6805a883b05c68704b545d0f88873b47b7 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Mon, 29 Dec 2025 15:16:08 +0500 Subject: [PATCH 36/66] ref (solution): remove dynamic array buffer and output directly --- 01_week/tasks/print_bits/print_bits.cpp | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/01_week/tasks/print_bits/print_bits.cpp b/01_week/tasks/print_bits/print_bits.cpp index 5e1c4fd2..7fa649f8 100644 --- a/01_week/tasks/print_bits/print_bits.cpp +++ b/01_week/tasks/print_bits/print_bits.cpp @@ -3,27 +3,20 @@ void PrintBits(long long value, size_t bytes) { - long long bit_index = 1ll; // 0b0000'...'000 - size_t bits = bytes * 8; + unsigned long long bit_index = 1ll << (bits - 1); // 0b1000'...'0000 size_t delims = 1 + 2 * (bytes - 1); - // Выделяем буфер под биты, апострофы и '\0' в конце size_t buffer_size = bits + delims + 1; - char* buffer = new char[buffer_size] {'\0'}; - - for (int i = buffer_size - 2; i >= 0; --i) { + std::cout << "0b"; + for (size_t i = 0; i < buffer_size - 1; ++i) { if (i % 5 == 4) { - buffer[i] = '\''; + std::cout << '\''; } else { - buffer[i] = static_cast(value & bit_index) + '0'; - bit_index = bit_index << 1; + std::cout << static_cast(static_cast(value & bit_index) + '0'); + bit_index = bit_index >> 1; } } - - std::cout << "0b" << buffer << std::endl; - - delete[] buffer; - buffer = nullptr; + std::cout << std::endl; } From 1f9e7b420587787aaba7c4d02baa47a409abe861 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Mon, 29 Dec 2025 15:27:14 +0500 Subject: [PATCH 37/66] ref (solution): remove redundant variables initialization --- 01_week/tasks/quadratic/quadratic.cpp | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/01_week/tasks/quadratic/quadratic.cpp b/01_week/tasks/quadratic/quadratic.cpp index ca0f37ae..73ad53e0 100644 --- a/01_week/tasks/quadratic/quadratic.cpp +++ b/01_week/tasks/quadratic/quadratic.cpp @@ -4,17 +4,13 @@ void SolveQuadratic(int a, int b, int c) { - double a_db = static_cast(a); - double b_db = static_cast(b); - double c_db = static_cast(c); - - if (!a && !b && !c) { + if (a == 0 && b == 0 && c == 0) { std::cout << "infinite solutions"; return; } if (a == 0) { - b_db != 0 ? std::cout << -(c_db / b_db) : std::cout << "no solutions"; + b != 0 ? std::cout << -(static_cast(c) / b) : std::cout << "no solutions"; return; } @@ -23,15 +19,16 @@ void SolveQuadratic(int a, int b, int c) { return; } - double discriminant = b_db*b_db - 4*a_db*c_db; + double discriminant = static_cast(b) * b - 4.0 * a * c; if (discriminant > 0) { - double x1 = (-b_db - sqrt(discriminant)) / (2 * a_db); - double x2 = (-b_db + sqrt(discriminant)) / (2 * a_db); + double sqrt_d = std::sqrt(discriminant); + double x1 = (-b - sqrt_d) / (2.0 * a); + double x2 = (-b + sqrt_d) / (2.0 * a); std::cout << std::setprecision(6) << x1 << ' ' << x2; } else if (discriminant == 0) { - double x = -b_db / (2 * a_db); + double x = -b / (2.0 * a); std::cout << std::setprecision(6) << x; } else { From d9fe492345436188cc987817c1f1a3888b495ccd Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Mon, 29 Dec 2025 15:35:23 +0500 Subject: [PATCH 38/66] ref (solution): specify std namespace for sqrt function --- 01_week/tasks/rms/rms.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/01_week/tasks/rms/rms.cpp b/01_week/tasks/rms/rms.cpp index 2c14e09e..63daf000 100644 --- a/01_week/tasks/rms/rms.cpp +++ b/01_week/tasks/rms/rms.cpp @@ -10,5 +10,5 @@ double CalculateRMS(double values[], size_t size) { } // size неявно преобразуется к double - return sqrt(result / size); + return std::sqrt(result / size); } \ No newline at end of file From 8c9fa30017e9ef7e1517dca8584d9d746dcb5146 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Mon, 29 Dec 2025 15:39:34 +0500 Subject: [PATCH 39/66] ref (solution): remove redundant const qualifiers in the function signature --- 02_week/tasks/func_array/func_array.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02_week/tasks/func_array/func_array.cpp b/02_week/tasks/func_array/func_array.cpp index badc47dd..1fbd9527 100644 --- a/02_week/tasks/func_array/func_array.cpp +++ b/02_week/tasks/func_array/func_array.cpp @@ -1,7 +1,7 @@ #include -double ApplyOperations(const double a, const double b, double (*func_arr[])(double, double), const size_t size) { +double ApplyOperations(double a, double b, double (*func_arr[])(double, double), size_t size) { if (size == 0) return 0; double result = 0; From e586b2014de3cf2b822d0337fa5679dd8787bbe2 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Mon, 29 Dec 2025 16:11:27 +0500 Subject: [PATCH 40/66] ref (solution): resolve undefined behaviour with const_cast --- 02_week/tasks/last_of_us/last_of_us.cpp | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/02_week/tasks/last_of_us/last_of_us.cpp b/02_week/tasks/last_of_us/last_of_us.cpp index 9a3a7ce1..96995c94 100644 --- a/02_week/tasks/last_of_us/last_of_us.cpp +++ b/02_week/tasks/last_of_us/last_of_us.cpp @@ -1,14 +1,30 @@ -int* FindLastElement(const int* begin, const int* end, bool (*predicate)(int)) { +#include + +const int* FindLastElement(const int* begin, const int* end, bool (*predicate)(int)) { if (!begin || !end || !predicate || begin > end) - return const_cast(end); + return end; - int* last = const_cast(end); + const int* last = end; for (; begin < end; ++begin) { if (predicate(*begin)) { - last = const_cast(begin); + last = begin; } } return last; +} + +int* FindLastElement(int* begin, int* end, bool (*predicate)(int)) { + return const_cast( + FindLastElement( + const_cast(begin), + const_cast(end), + predicate + ) + ); +} + +inline int* FindLastElement(std::nullptr_t, std::nullptr_t, bool (*)(int)) { + return nullptr; } \ No newline at end of file From 8938cfcc61a73bb0fdcc08694232227a7cad0c3c Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Mon, 29 Dec 2025 16:33:16 +0500 Subject: [PATCH 41/66] ref (solution): create a common function for int and double and use ternary operators to remove code duplication --- 02_week/tasks/little_big/little_big.cpp | 39 ++++++++----------------- 1 file changed, 12 insertions(+), 27 deletions(-) diff --git a/02_week/tasks/little_big/little_big.cpp b/02_week/tasks/little_big/little_big.cpp index 6a7ee142..f114553c 100644 --- a/02_week/tasks/little_big/little_big.cpp +++ b/02_week/tasks/little_big/little_big.cpp @@ -1,39 +1,24 @@ #include #include - -void PrintMemory(int num, bool is_little_endian = false) { - const u_char* begin = reinterpret_cast(&num); - const u_char* end = reinterpret_cast(&num) + sizeof(num); +void PrintMemory(const u_char* begin, size_t size, bool is_little_endian) { + const u_char* end = begin + size; std::cout << "0x" << std::hex << std::uppercase; - if (is_little_endian) { - for (const u_char* ptr = end - 1; ptr >= begin; --ptr) { - std::cout << std::setfill('0') << std::setw(2) << static_cast(*ptr); - } - } - else { - for (const u_char* ptr = begin; ptr < end; ++ptr) { + for ( + const u_char* ptr = is_little_endian ? end - 1 : begin; + is_little_endian ? ptr >= begin : ptr < end; + is_little_endian ? --ptr : ++ptr + ) { std::cout << std::setfill('0') << std::setw(2) << static_cast(*ptr); } - } std::cout << std::endl; } -void PrintMemory(double num, bool is_little_endian = false) { - const u_char* begin = reinterpret_cast(&num); - const u_char* end = reinterpret_cast(&num) + sizeof(num); +void PrintMemory(int num, bool is_little_endian = false) { + PrintMemory(reinterpret_cast(&num), sizeof(num), is_little_endian); +} - std::cout << "0x" << std::hex << std::uppercase; - if (is_little_endian) { - for (const u_char* ptr = end - 1; ptr >= begin; --ptr) { - std::cout << std::setfill('0') << std::setw(2) << static_cast(*ptr); - } - } - else { - for (const u_char* ptr = begin; ptr < end; ++ptr) { - std::cout << std::setfill('0') << std::setw(2) << static_cast(*ptr); - } - } - std::cout << std::endl; +void PrintMemory(double num, bool is_little_endian = false) { + PrintMemory(reinterpret_cast(&num), sizeof(num), is_little_endian); } From 654d4951ac962c23279f3c943371dfa77f6db3e9 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Mon, 29 Dec 2025 16:45:58 +0500 Subject: [PATCH 42/66] ref (solution): add const qualifier for returned value to correct signature of function --- 02_week/tasks/longest/longest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02_week/tasks/longest/longest.cpp b/02_week/tasks/longest/longest.cpp index be3163e2..f5204e78 100644 --- a/02_week/tasks/longest/longest.cpp +++ b/02_week/tasks/longest/longest.cpp @@ -1,7 +1,7 @@ #include -char* FindLongestSubsequence(const char* begin, const char* end, size_t& count) { +const char* FindLongestSubsequence(const char* begin, const char* end, size_t& count) { if (!begin || !end || begin >= end) { count = 0; return nullptr; From 05ec36a34966e6b149545b5c9a4d7611c0967acc Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Mon, 29 Dec 2025 16:51:11 +0500 Subject: [PATCH 43/66] ref (solution): use ternary operators to avoid code duplication --- 02_week/tasks/pretty_array/pretty_array.cpp | 31 +++++++-------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/02_week/tasks/pretty_array/pretty_array.cpp b/02_week/tasks/pretty_array/pretty_array.cpp index ed8fb483..d5c17aa9 100644 --- a/02_week/tasks/pretty_array/pretty_array.cpp +++ b/02_week/tasks/pretty_array/pretty_array.cpp @@ -8,30 +8,19 @@ void PrintArray(const int* begin, const int* end, const int threshold = 0) { } std::cout << "["; - if (begin < end) { - for (const int* ptr = begin; ptr < end; ++ptr) { - if (threshold && static_cast(ptr - begin) % threshold == 0 && ptr != begin) { - std::cout << "...\n "; - } - - std::cout << *ptr; - - if (ptr != end - 1) { - std::cout << ", "; - } + for ( + const int* ptr = begin; + begin < end ? ptr < end : ptr > end; + begin < end ? ++ptr : --ptr + ) { + if (threshold && static_cast(ptr - begin) % threshold == 0 && ptr != begin) { + std::cout << "...\n "; } - } - else { - for (const int* ptr = begin; ptr > end; --ptr) { - if (threshold && static_cast(ptr - begin) % threshold == 0 && ptr != begin) { - std::cout << "...\n "; - } - std::cout << *ptr; + std::cout << *ptr; - if (ptr != end + 1) { - std::cout << ", "; - } + if (ptr != (begin < end ? end - 1 : end + 1)) { + std::cout << ", "; } } std::cout << "]" << std::endl; From 5620c8c20a7bbff9516c32b9701d35f1c89bc77f Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Mon, 29 Dec 2025 16:52:08 +0500 Subject: [PATCH 44/66] ref (solution): specify std namespace for sqrt function --- 03_week/tasks/data_stats/data_stats.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/03_week/tasks/data_stats/data_stats.cpp b/03_week/tasks/data_stats/data_stats.cpp index 61b874d5..0e2dd483 100644 --- a/03_week/tasks/data_stats/data_stats.cpp +++ b/03_week/tasks/data_stats/data_stats.cpp @@ -21,7 +21,7 @@ DataStats CalculateDataStats(const std::vector& arr) { // По суммам считаем среднее и sd data_stats.avg /= arr.size(); - data_stats.sd = sqrt(data_stats.sd / arr.size() - std::pow(data_stats.avg, 2)); + data_stats.sd = std::sqrt(data_stats.sd / arr.size() - std::pow(data_stats.avg, 2)); return data_stats; } From 35ad4a702fd62ca5a2f2ccfff8eb10dc28006313 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Mon, 29 Dec 2025 16:59:35 +0500 Subject: [PATCH 45/66] ref (solution): pass struct by reference and replace if-branching with std::tie --- 03_week/tasks/easy_compare/easy_compare.cpp | 41 ++++++++------------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/03_week/tasks/easy_compare/easy_compare.cpp b/03_week/tasks/easy_compare/easy_compare.cpp index df0c8e42..36c8cf85 100644 --- a/03_week/tasks/easy_compare/easy_compare.cpp +++ b/03_week/tasks/easy_compare/easy_compare.cpp @@ -2,7 +2,6 @@ #include #include - struct Date { unsigned year = 0u; unsigned month = 0u; @@ -17,61 +16,53 @@ struct StudentInfo { Date birth_date; }; -bool operator<(Date lhs, Date rhs) { +bool operator<(const Date& lhs, const Date& rhs) { return std::tie(lhs.year, lhs.month, lhs.day) < std::tie(rhs.year, rhs.month, rhs.day); } -bool operator==(Date lhs, Date rhs) { +bool operator==(const Date& lhs, const Date& rhs) { return std::tie(lhs.year, lhs.month, lhs.day) == std::tie(rhs.year, rhs.month, rhs.day); } -bool operator!=(Date lhs, Date rhs) { +bool operator!=(const Date& lhs, const Date& rhs) { return !(lhs == rhs); } -bool operator>(Date lhs, Date rhs) { +bool operator>(const Date& lhs, const Date& rhs) { return !(lhs < rhs || lhs == rhs); } -bool operator>=(Date lhs, Date rhs) { +bool operator>=(const Date& lhs, const Date& rhs) { return !(lhs < rhs); } -bool operator<=(Date lhs, Date rhs) { +bool operator<=(const Date& lhs, const Date& rhs) { return lhs < rhs || lhs == rhs; } -bool operator<(StudentInfo& lhs, StudentInfo& rhs) { - if (lhs.mark != rhs.mark) { - return lhs.mark > rhs.mark; - } - else if (lhs.score != rhs.score) { - return lhs.score < rhs.score; - } - else if (lhs.course != rhs.course) { - return lhs.course > rhs.course; - } - else { - return lhs.birth_date < rhs.birth_date; - } +bool operator<(const StudentInfo& lhs, const StudentInfo& rhs) { + return ( + std::tie(rhs.mark, lhs.score, rhs.course, lhs.birth_date) + < std::tie(lhs.mark, rhs.score, lhs.course, rhs.birth_date) + ); } -bool operator==(StudentInfo& lhs, StudentInfo& rhs) { +bool operator==(const StudentInfo& lhs, const StudentInfo& rhs) { return lhs.mark == rhs.mark && lhs.score == rhs.score; } -bool operator!=(StudentInfo& lhs, StudentInfo& rhs) { +bool operator!=(const StudentInfo& lhs, const StudentInfo& rhs) { return !(lhs == rhs); } -bool operator>(StudentInfo& lhs, StudentInfo& rhs) { +bool operator>(const StudentInfo& lhs, const StudentInfo& rhs) { return !(lhs < rhs || lhs == rhs); } -bool operator>=(StudentInfo& lhs, StudentInfo& rhs) { +bool operator>=(const StudentInfo& lhs, const StudentInfo& rhs) { return !(lhs < rhs); } -bool operator<=(StudentInfo& lhs, StudentInfo& rhs) { +bool operator<=(const StudentInfo& lhs, const StudentInfo& rhs) { return lhs < rhs || lhs == rhs; } \ No newline at end of file From 6b59a9e9107e186ab331f277d8f554a24031246c Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Mon, 29 Dec 2025 17:15:39 +0500 Subject: [PATCH 46/66] ref (solution): rewrite ineffective flags output algorithm --- .../tasks/enum_operators/enum_operators.cpp | 78 ++++++------------- 1 file changed, 24 insertions(+), 54 deletions(-) diff --git a/03_week/tasks/enum_operators/enum_operators.cpp b/03_week/tasks/enum_operators/enum_operators.cpp index bc8ecee9..38fbaa04 100644 --- a/03_week/tasks/enum_operators/enum_operators.cpp +++ b/03_week/tasks/enum_operators/enum_operators.cpp @@ -1,4 +1,3 @@ -#include #include #include #include @@ -54,66 +53,37 @@ CheckFlags operator~(CheckFlags flags) { return static_cast(flags_cleared); } -std::string GetFlagName(CheckFlags flags, CheckFlags check) { - uint8_t flags_int = static_cast(flags); - uint8_t check_int = static_cast(check); - CheckFlags single_flag = static_cast(flags_int & check_int); - - if (single_flag & CheckFlags::TIME) { - return "TIME"; - } - else if (single_flag & CheckFlags::DATE) { - return "DATE"; - } - else if (single_flag & CheckFlags::USER) { - return "USER"; - } - else if (single_flag & CheckFlags::CERT) { - return "CERT"; - } - else if (single_flag & CheckFlags::KEYS) { - return "KEYS"; - } - else if (single_flag & CheckFlags::DEST) { - return "DEST"; - } - else if (single_flag & CheckFlags::NONE) { - return "NONE"; - } - else { - return ""; - } -} - std::ostream& operator<<(std::ostream& os, CheckFlags flags) { - std::vector checks{ - CheckFlags::TIME, - CheckFlags::DATE, - CheckFlags::USER, - CheckFlags::CERT, - CheckFlags::KEYS, - CheckFlags::DEST, + const static std::pair checks[] { + {CheckFlags::TIME, "TIME"}, + {CheckFlags::DATE, "DATE"}, + {CheckFlags::USER, "USER"}, + {CheckFlags::CERT, "CERT"}, + {CheckFlags::KEYS, "KEYS"}, + {CheckFlags::DEST, "DEST"} }; - std::vector flags_names{}; - flags_names.reserve(checks.size()); - - for (size_t i = 0; i < checks.size(); ++i) { - if (flags & checks[i]) { - flags_names.push_back(GetFlagName(flags, checks[i])); + bool empty = true; + bool first = true; + + for (const auto& [flag, name] : checks) { + uint8_t flags_int = static_cast(flags); + uint8_t check_int = static_cast(flag); + CheckFlags single_flag = static_cast(flags_int & check_int); + if (single_flag != CheckFlags::NONE) { + if (first) { + first = false; + } + else { + os << ", "; + } + os << name; + empty = false; } } - if (flags_names.empty()) { + if (empty) { os << "NONE"; - return os; - } - - for (size_t i = 0, flags_size = flags_names.size(); i < flags_size; ++i) { - os << flags_names[i]; - if (i != flags_size - 1) { - os << ", "; - } } return os; From fbf46da5a79645650c4374ff45c70ff68029e977 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Mon, 29 Dec 2025 17:18:35 +0500 Subject: [PATCH 47/66] ref (solution): reserve memory only after checking for early function termination --- 03_week/tasks/find_all/find_all.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/03_week/tasks/find_all/find_all.cpp b/03_week/tasks/find_all/find_all.cpp index dcb19cf2..9f088ff4 100644 --- a/03_week/tasks/find_all/find_all.cpp +++ b/03_week/tasks/find_all/find_all.cpp @@ -4,10 +4,11 @@ std::vector FindAll(const std::vector& arr, bool (*bool_func)(int)) { std::vector result{}; - result.reserve(arr.size()); if (!bool_func) return result; + result.reserve(arr.size()); + for (size_t i = 0; i < arr.size(); ++i) { if (bool_func(arr[i])) { result.push_back(i); From 216a1ff70c80308b17214acec774a27a05966068 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Mon, 29 Dec 2025 17:19:13 +0500 Subject: [PATCH 48/66] fix (solution): include necessary library --- 01_week/tasks/check_flags/check_flags.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/01_week/tasks/check_flags/check_flags.cpp b/01_week/tasks/check_flags/check_flags.cpp index 2e6df889..18d106a6 100644 --- a/01_week/tasks/check_flags/check_flags.cpp +++ b/01_week/tasks/check_flags/check_flags.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include From 07c7f8d42fce5afba12195b14980fe3c67d05b35 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Mon, 29 Dec 2025 17:31:31 +0500 Subject: [PATCH 49/66] ref (solution): avoid code duplication using ternary operators --- 01_week/tasks/check_flags/check_flags.cpp | 1 - 03_week/tasks/minmax/minmax.cpp | 29 ++++++++--------------- 2 files changed, 10 insertions(+), 20 deletions(-) diff --git a/01_week/tasks/check_flags/check_flags.cpp b/01_week/tasks/check_flags/check_flags.cpp index 18d106a6..4baf93e1 100644 --- a/01_week/tasks/check_flags/check_flags.cpp +++ b/01_week/tasks/check_flags/check_flags.cpp @@ -3,7 +3,6 @@ #include #include - enum class CheckFlags : uint8_t { NONE = 0, TIME = (1 << 0), diff --git a/03_week/tasks/minmax/minmax.cpp b/03_week/tasks/minmax/minmax.cpp index eb241de0..adc13ccc 100644 --- a/03_week/tasks/minmax/minmax.cpp +++ b/03_week/tasks/minmax/minmax.cpp @@ -1,7 +1,8 @@ #include +typedef std::pair::const_iterator, std::vector::const_iterator> MinMaxIter; -std::pair::const_iterator, std::vector::const_iterator> MinMax(const std::vector& arr) { +MinMaxIter MinMax(const std::vector& arr) { auto first = arr.begin(), last = arr.end(); if (first == last) @@ -12,26 +13,16 @@ std::pair::const_iterator, std::vector::const_iterator> Mi while (++first != last) { auto i = first; if (++first == last) { - if (*i < *min) - min = i; - else if (*i >= *max) - max = i; + min = (*i < *min) ? i : min; + max = (*i >= *max) ? i : max; break; } - else { - if (*first < *i) { - if (*first < *min) - min = first; - if (*i >= *max) - max = i; - } - else { - if (*i < *min) - min = i; - if (*first >= *max) - max = first; - } - } + + auto smaller = (*first < *i) ? first : i; + auto larger = (*first < *i) ? i : first; + + min = (*smaller < *min) ? smaller : min; + max = (*larger >= *max) ? larger : max; } return {min, max}; From 508d5a76f599ef1e5257eaf93f9cbde213d74c6c Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Mon, 29 Dec 2025 17:35:51 +0500 Subject: [PATCH 50/66] ref (solution): unify style of fields initialization and join separate output of symbols --- 03_week/tasks/os_overload/os_overload.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/03_week/tasks/os_overload/os_overload.cpp b/03_week/tasks/os_overload/os_overload.cpp index 99628a57..86d3b8d2 100644 --- a/03_week/tasks/os_overload/os_overload.cpp +++ b/03_week/tasks/os_overload/os_overload.cpp @@ -9,7 +9,7 @@ struct Coord2D { }; struct Circle { - Coord2D coord{}; + Coord2D coord = {}; unsigned radius = 1; }; @@ -36,8 +36,7 @@ std::ostream& operator<<(std::ostream& lhs, const CircleRegionList& rhs) { lhs << "{"; if (!rhs.empty()) { - lhs << "\n"; - lhs << '\t' << rhs[0]; + lhs << "\n\t" << rhs[0]; } for (size_t i = 1; i < rhs.size(); ++i) { From 757ff8ee78eb68e6f9564463f0a2bd1f9fc1d21f Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Mon, 29 Dec 2025 17:50:35 +0500 Subject: [PATCH 51/66] fix (solution): comply with test awaiting return of pointer to non-const data --- 02_week/tasks/longest/longest.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/02_week/tasks/longest/longest.cpp b/02_week/tasks/longest/longest.cpp index f5204e78..be3163e2 100644 --- a/02_week/tasks/longest/longest.cpp +++ b/02_week/tasks/longest/longest.cpp @@ -1,7 +1,7 @@ #include -const char* FindLongestSubsequence(const char* begin, const char* end, size_t& count) { +char* FindLongestSubsequence(const char* begin, const char* end, size_t& count) { if (!begin || !end || begin >= end) { count = 0; return nullptr; From 396cd2d7a295742a2228595e815e96319ab50c7a Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Fri, 6 Feb 2026 17:16:00 +0500 Subject: [PATCH 52/66] ref (solution): change snake case method naming to camel case --- 04_week/tasks/phasor/phasor.cpp | 36 +++++++++++------------ 04_week/tasks/queue/queue.cpp | 8 ++--- 04_week/tasks/ring_buffer/ring_buffer.cpp | 34 ++++++++++----------- 3 files changed, 39 insertions(+), 39 deletions(-) diff --git a/04_week/tasks/phasor/phasor.cpp b/04_week/tasks/phasor/phasor.cpp index 177820d5..21dfa5ed 100644 --- a/04_week/tasks/phasor/phasor.cpp +++ b/04_week/tasks/phasor/phasor.cpp @@ -39,29 +39,29 @@ class Phasor { private: double m_m = .0; double m_phi = .0; - double m_deg_to_rad(const double deg) const; - double m_rad_to_deg(const double deg) const; - void m_normalize_magnitude(); - void m_normalize_phase(); - void m_normalize_phasor(); + double m_degToRad(const double deg) const; + double m_radToDeg(const double deg) const; + void m_normalizeMagnitude(); + void m_normalizePhase(); + void m_normalizePhasor(); }; -double Phasor::m_deg_to_rad(const double deg) const { +double Phasor::m_degToRad(const double deg) const { return deg * M_PI / 180; } -double Phasor::m_rad_to_deg(const double rad) const { +double Phasor::m_radToDeg(const double rad) const { return rad * 180 / M_PI; } -void Phasor::m_normalize_magnitude() { +void Phasor::m_normalizeMagnitude() { if (m_m < 0) { m_m = std::abs(m_m); m_phi += (m_phi > 0) ? -M_PI : M_PI; } } -void Phasor::m_normalize_phase() { +void Phasor::m_normalizePhase() { m_phi = std::atan2(std::sin(m_phi), std::cos(m_phi)); if (m_phi <= -M_PI) { @@ -69,24 +69,24 @@ void Phasor::m_normalize_phase() { } } -void Phasor::m_normalize_phasor() { - m_normalize_magnitude(); - m_normalize_phase(); +void Phasor::m_normalizePhasor() { + m_normalizeMagnitude(); + m_normalizePhase(); } void Phasor::SetCartesian(const double x, const double y) { m_m = sqrt(pow(x, 2) + pow(y, 2)); m_phi = atan2(y, x); - m_normalize_phasor(); + m_normalizePhasor(); } Phasor::Phasor() {} Phasor::Phasor(const double m, const double phi = 0) : m_m(m), m_phi(phi) { - m_normalize_phasor(); + m_normalizePhasor(); } Phasor::Phasor(const double m, const double phi, const ExpTag&) : Phasor(m, phi) {} -Phasor::Phasor(const double m, const double deg, const DegTag&) : Phasor(m, m_deg_to_rad(deg)) {} +Phasor::Phasor(const double m, const double deg, const DegTag&) : Phasor(m, m_degToRad(deg)) {} Phasor::Phasor(const double x, const double y, const AlgTag&) { SetCartesian(x, y); } @@ -94,7 +94,7 @@ Phasor::Phasor(const double x, const double y, const AlgTag&) { void Phasor::SetPolar(const double m, const double phi) { m_m = m; m_phi = phi; - m_normalize_phasor(); + m_normalizePhasor(); } double Phasor::Magnitude() const { @@ -114,11 +114,11 @@ double Phasor::Angle() const { } double Phasor::PhaseDeg() const { - return m_rad_to_deg(m_phi); + return m_radToDeg(m_phi); } double Phasor::AngleDeg() const { - return m_rad_to_deg(m_phi); + return m_radToDeg(m_phi); } double Phasor::Real() const { diff --git a/04_week/tasks/queue/queue.cpp b/04_week/tasks/queue/queue.cpp index e4648e33..1891504e 100644 --- a/04_week/tasks/queue/queue.cpp +++ b/04_week/tasks/queue/queue.cpp @@ -26,7 +26,7 @@ class Queue { int m_null_value = 0; std::vector m_input{}; std::vector m_output{}; - std::vector m_merge_vectors(const auto& input, const auto& output) const; + std::vector m_mergeVectors(const auto& input, const auto& output) const; }; Queue::Queue(std::stack stack) { @@ -121,7 +121,7 @@ void Queue::Swap(Queue& other) { m_output.swap(other.m_output); } -std::vector Queue::m_merge_vectors(const auto& input, const auto& output) const { +std::vector Queue::m_mergeVectors(const auto& input, const auto& output) const { std::vector merged{}; merged.reserve(input.size() + output.size()); @@ -137,8 +137,8 @@ std::vector Queue::m_merge_vectors(const auto& input, const auto& output) c } bool Queue::operator==(const Queue& other) const { - std::vector this_merged = m_merge_vectors(m_input, m_output); - std::vector other_merged = m_merge_vectors(other.m_input, other.m_output); + std::vector this_merged = m_mergeVectors(m_input, m_output); + std::vector other_merged = m_mergeVectors(other.m_input, other.m_output); return this_merged == other_merged; } diff --git a/04_week/tasks/ring_buffer/ring_buffer.cpp b/04_week/tasks/ring_buffer/ring_buffer.cpp index 22c5ab06..cf2acdc4 100644 --- a/04_week/tasks/ring_buffer/ring_buffer.cpp +++ b/04_week/tasks/ring_buffer/ring_buffer.cpp @@ -33,14 +33,14 @@ class RingBuffer { size_t m_end = 0; size_t m_size = 0; std::vector m_buffer{}; - size_t m_check_zero_size(const size_t size) const; - void m_pop_core(); - void m_push_back_core(const int item); - void m_copy_core(const RingBuffer& other); + size_t m_checkZeroSize(const size_t size) const; + void m_popCore(); + void m_pushBackCore(const int item); + void m_copyCore(const RingBuffer& other); int m_last() const; }; -size_t RingBuffer::m_check_zero_size(const size_t size) const { +size_t RingBuffer::m_checkZeroSize(const size_t size) const { return (size == 0) ? 1 : size; } @@ -49,11 +49,11 @@ int RingBuffer::m_last() const { } RingBuffer::RingBuffer(size_t size) { - m_buffer.reserve(m_check_zero_size(size)); + m_buffer.reserve(m_checkZeroSize(size)); } RingBuffer::RingBuffer(const size_t size, const int val) { - m_buffer.reserve(m_check_zero_size(size)); + m_buffer.reserve(m_checkZeroSize(size)); for (size_t i = 0; i < Capacity(); ++i) { m_buffer.push_back(val); } @@ -69,7 +69,7 @@ RingBuffer::RingBuffer(const std::initializer_list ilist) : m_buffer(ilist) m_end = m_buffer.size(); } -void RingBuffer::m_copy_core(const RingBuffer& other) { +void RingBuffer::m_copyCore(const RingBuffer& other) { m_begin = other.m_begin; m_end = other.m_end; m_size = other.m_size; @@ -78,10 +78,10 @@ void RingBuffer::m_copy_core(const RingBuffer& other) { } RingBuffer::RingBuffer(const RingBuffer& other) { - m_copy_core(other); + m_copyCore(other); } -inline void RingBuffer::m_push_back_core(const int item) { +inline void RingBuffer::m_pushBackCore(const int item) { if (m_buffer.size() == Capacity()) { m_buffer[m_end] = item; if (m_size != m_buffer.size()) { @@ -99,7 +99,7 @@ inline void RingBuffer::m_push_back_core(const int item) { } void RingBuffer::Push(const int item) { - m_push_back_core(item); + m_pushBackCore(item); } bool RingBuffer::TryPush(const int item) { @@ -107,12 +107,12 @@ bool RingBuffer::TryPush(const int item) { return false; } else { - m_push_back_core(item); + m_pushBackCore(item); return true; } } -inline void RingBuffer::m_pop_core() { +inline void RingBuffer::m_popCore() { m_begin = (m_begin + 1) % Capacity(); --m_size; } @@ -121,7 +121,7 @@ void RingBuffer::Pop() { if (Size() == 0) return; - m_pop_core(); + m_popCore(); } bool RingBuffer::TryPop(int& pop_value) { @@ -130,7 +130,7 @@ bool RingBuffer::TryPop(int& pop_value) { pop_value = m_buffer[m_begin]; - m_pop_core(); + m_popCore(); return true; } @@ -213,7 +213,7 @@ std::vector RingBuffer::Vector() const { } void RingBuffer::Resize(const size_t size) { - size_t new_size = m_check_zero_size(size); + size_t new_size = m_checkZeroSize(size); if (new_size == Capacity()) { return; @@ -251,6 +251,6 @@ RingBuffer& RingBuffer::operator=(const RingBuffer& other) { return *this; } - m_copy_core(other); + m_copyCore(other); return *this; } From 08fda73fa2c5fc1daa0fbc892572baa5a5528911 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Fri, 6 Feb 2026 17:53:48 +0500 Subject: [PATCH 53/66] ref (solution): remove unnecessary m_null_value --- 04_week/tasks/ring_buffer/ring_buffer.cpp | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/04_week/tasks/ring_buffer/ring_buffer.cpp b/04_week/tasks/ring_buffer/ring_buffer.cpp index cf2acdc4..6b98cef9 100644 --- a/04_week/tasks/ring_buffer/ring_buffer.cpp +++ b/04_week/tasks/ring_buffer/ring_buffer.cpp @@ -28,7 +28,6 @@ class RingBuffer { int operator[](const size_t idx) const; RingBuffer& operator=(const RingBuffer& other); private: - int m_null_value = 0; size_t m_begin = 0; size_t m_end = 0; size_t m_size = 0; @@ -136,30 +135,18 @@ bool RingBuffer::TryPop(int& pop_value) { } int& RingBuffer::Front() { - if (Size() == 0) - return m_null_value; - return m_buffer[m_last()]; } int RingBuffer::Front() const { - if (Size() == 0) - return m_null_value; - return m_buffer[m_last()]; } int& RingBuffer::Back() { - if (Size() == 0) - return m_null_value; - return m_buffer[m_begin]; } int RingBuffer::Back() const { - if (Size() == 0) - return m_null_value; - return m_buffer[m_begin]; } From f7c2bb16515da3e8774a8db9fa9edd8a8b11f6b6 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Fri, 6 Feb 2026 18:19:43 +0500 Subject: [PATCH 54/66] ref (solution): use list initialization --- 04_week/tasks/ring_buffer/ring_buffer.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/04_week/tasks/ring_buffer/ring_buffer.cpp b/04_week/tasks/ring_buffer/ring_buffer.cpp index 6b98cef9..6c76c81b 100644 --- a/04_week/tasks/ring_buffer/ring_buffer.cpp +++ b/04_week/tasks/ring_buffer/ring_buffer.cpp @@ -28,9 +28,9 @@ class RingBuffer { int operator[](const size_t idx) const; RingBuffer& operator=(const RingBuffer& other); private: + size_t m_size = 0; size_t m_begin = 0; size_t m_end = 0; - size_t m_size = 0; std::vector m_buffer{}; size_t m_checkZeroSize(const size_t size) const; void m_popCore(); @@ -51,14 +51,11 @@ RingBuffer::RingBuffer(size_t size) { m_buffer.reserve(m_checkZeroSize(size)); } -RingBuffer::RingBuffer(const size_t size, const int val) { - m_buffer.reserve(m_checkZeroSize(size)); - for (size_t i = 0; i < Capacity(); ++i) { - m_buffer.push_back(val); - } - m_size = m_buffer.size(); - m_end = m_buffer.size(); -} +RingBuffer::RingBuffer(const size_t size, const int val) + : m_size(m_checkZeroSize(size)), + m_end(m_size), + m_buffer(m_size, val) +{} RingBuffer::RingBuffer(const std::initializer_list ilist) : m_buffer(ilist) { if (m_buffer.empty()) { From deaf02a6787080879219c1ef2b1af462d87c1d71 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Fri, 6 Feb 2026 18:23:50 +0500 Subject: [PATCH 55/66] ref (solution): remove unnecessary code --- 04_week/tasks/ring_buffer/ring_buffer.cpp | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/04_week/tasks/ring_buffer/ring_buffer.cpp b/04_week/tasks/ring_buffer/ring_buffer.cpp index 6c76c81b..6ff06d2f 100644 --- a/04_week/tasks/ring_buffer/ring_buffer.cpp +++ b/04_week/tasks/ring_buffer/ring_buffer.cpp @@ -77,7 +77,7 @@ RingBuffer::RingBuffer(const RingBuffer& other) { m_copyCore(other); } -inline void RingBuffer::m_pushBackCore(const int item) { +void RingBuffer::m_pushBackCore(const int item) { if (m_buffer.size() == Capacity()) { m_buffer[m_end] = item; if (m_size != m_buffer.size()) { @@ -102,32 +102,30 @@ bool RingBuffer::TryPush(const int item) { if (Full()) { return false; } - else { - m_pushBackCore(item); - return true; - } + + m_pushBackCore(item); + return true; } -inline void RingBuffer::m_popCore() { +void RingBuffer::m_popCore() { m_begin = (m_begin + 1) % Capacity(); --m_size; } void RingBuffer::Pop() { - if (Size() == 0) + if (Size() == 0) { return; + } m_popCore(); } bool RingBuffer::TryPop(int& pop_value) { - if (Size() == 0) + if (Size() == 0) { return false; - + } pop_value = m_buffer[m_begin]; - m_popCore(); - return true; } From 21f4484881af5f9ad99a647ae4bbc9fce69f6599 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Fri, 6 Feb 2026 18:44:05 +0500 Subject: [PATCH 56/66] ref (solution): remove buffer copying from the RingBuffer::Resize and simplify the RingBuffer::Vector --- 04_week/tasks/ring_buffer/ring_buffer.cpp | 29 ++++------------------- 1 file changed, 5 insertions(+), 24 deletions(-) diff --git a/04_week/tasks/ring_buffer/ring_buffer.cpp b/04_week/tasks/ring_buffer/ring_buffer.cpp index 6ff06d2f..db6805b5 100644 --- a/04_week/tasks/ring_buffer/ring_buffer.cpp +++ b/04_week/tasks/ring_buffer/ring_buffer.cpp @@ -169,28 +169,11 @@ void RingBuffer::Clear() { std::vector RingBuffer::Vector() const { std::vector vector_buffer; vector_buffer.reserve(Size()); - - if (m_end <= m_begin) { - size_t left_size = m_end; - size_t right_size = Size() - m_begin; - - size_t i = m_begin; - - while (i - m_begin < right_size) { - vector_buffer.push_back(m_buffer[i++]); - } - - i = 0; - while (i < left_size) { - vector_buffer.push_back(m_buffer[i++]); - } + + for (size_t i = 0; i < Size(); ++i) { + vector_buffer.push_back(m_buffer[(m_begin + i) % Capacity()]); } - else { - for (size_t i = 0; i < Size(); ++i) { - vector_buffer.push_back(m_buffer[i]); - } - } - + return vector_buffer; } @@ -204,14 +187,12 @@ void RingBuffer::Resize(const size_t size) { std::vector new_buffer; new_buffer.reserve(new_size); - std::vector vector_buffer = Vector(); - for ( size_t i = (Size() > new_size) ? Size() - new_size : 0; new_buffer.size() != new_buffer.capacity() && i < Size(); ++i ) { - new_buffer.push_back(vector_buffer[i]); + new_buffer.push_back(m_buffer[(m_begin + i) % Capacity()]); } m_buffer = std::move(new_buffer); From 4699579d4399bc4444bbe0b6d4b80765d96df162 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Fri, 6 Feb 2026 18:53:16 +0500 Subject: [PATCH 57/66] ref (solution): refactor initialization for the Queue --- 04_week/tasks/queue/queue.cpp | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/04_week/tasks/queue/queue.cpp b/04_week/tasks/queue/queue.cpp index 1891504e..baded078 100644 --- a/04_week/tasks/queue/queue.cpp +++ b/04_week/tasks/queue/queue.cpp @@ -1,15 +1,15 @@ #include #include +#include #include - class Queue { public: Queue() = default; Queue(std::stack stack); Queue(std::vector vector); - Queue(std::initializer_list values); - Queue(const int size); + Queue(const std::initializer_list& values); + Queue(const size_t size); void Push(const int x); bool Pop(); int& Back(); @@ -36,20 +36,13 @@ Queue::Queue(std::stack stack) { } } -Queue::Queue(std::vector vector) { - while (!vector.empty()) { - m_output.push_back(vector.back()); - vector.pop_back(); - } +Queue::Queue(std::vector vector) : m_output(std::move(vector)) { + std::reverse(m_output.begin(), m_output.end()); } -Queue::Queue(std::initializer_list ilist) { - for (const int v : ilist) { - m_input.push_back(v); - } -} +Queue::Queue(const std::initializer_list& ilist): m_input(ilist) {} -Queue::Queue(const int size) { +Queue::Queue(const size_t size) { m_input.reserve(size); m_output.reserve(size); } From d8e750445e86738e69cbd25c8a92d3226e839721 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Fri, 6 Feb 2026 19:16:04 +0500 Subject: [PATCH 58/66] ref (solution): add the Queue::m_pushInputBack method and remove unnecessary merging and copying from Queue::operator== --- 04_week/tasks/queue/queue.cpp | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/04_week/tasks/queue/queue.cpp b/04_week/tasks/queue/queue.cpp index baded078..b21cb484 100644 --- a/04_week/tasks/queue/queue.cpp +++ b/04_week/tasks/queue/queue.cpp @@ -27,6 +27,7 @@ class Queue { std::vector m_input{}; std::vector m_output{}; std::vector m_mergeVectors(const auto& input, const auto& output) const; + void m_pushInputBack(); }; Queue::Queue(std::stack stack) { @@ -58,13 +59,10 @@ bool Queue::Pop() { if (m_output.empty()) { while (!m_input.empty()) { - m_output.push_back(m_input.back()); - m_input.pop_back(); + m_pushInputBack(); } } - m_output.pop_back(); - return true; } @@ -129,11 +127,34 @@ std::vector Queue::m_mergeVectors(const auto& input, const auto& output) co return merged; } +void Queue::m_pushInputBack() { + m_output.push_back(m_input.back()); + m_input.pop_back(); +} + bool Queue::operator==(const Queue& other) const { - std::vector this_merged = m_mergeVectors(m_input, m_output); - std::vector other_merged = m_mergeVectors(other.m_input, other.m_output); + if (this == &other) { + return true; + } else if (Size() != other.Size()) { + return false; + } - return this_merged == other_merged; + const size_t out_size = m_output.size(); + const size_t other_out_size = other.m_output.size(); + const size_t total = Size(); + + for (size_t i = 0; i < total; ++i) { + const int& a = (i < out_size) + ? m_output[out_size - 1 - i] + : m_input[i - out_size]; + + const int& b = (i < other_out_size) + ? other.m_output[other_out_size - 1 - i] + : other.m_input[i - other_out_size]; + + if (a != b) return false; + } + return true; } bool Queue::operator!=(const Queue& other) const { From 75eb5cdcd2855d3a65793d1c7be7fe667033e91f Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Sat, 7 Feb 2026 16:30:22 +0000 Subject: [PATCH 59/66] Auto-sync: 2026-02-07 16:30 --- .github/workflows/testing.yml | 16 +- .github/workflows/testing_week_01.yml | 16 +- .github/workflows/testing_week_02.yml | 16 +- .github/workflows/testing_week_03.yml | 13 +- .github/workflows/testing_week_04.yml | 13 +- .github/workflows/testing_week_05.yml | 105 ++ 05_week/05_memory_move.md | 1007 +++++++++++++++++ 05_week/CMakeLists.txt | 15 + 05_week/examples/storage_duration.cpp | 127 +++ 05_week/tasks/CMakeLists.txt | 4 + 05_week/tasks/cow_string/CMakeLists.txt | 1 + 05_week/tasks/cow_string/README.md | 74 ++ 05_week/tasks/cow_string/cow_string.cpp | 6 + 05_week/tasks/cow_string/test.cpp | 519 +++++++++ 05_week/tasks/simple_vector/CMakeLists.txt | 1 + 05_week/tasks/simple_vector/README.md | 66 ++ 05_week/tasks/simple_vector/simple_vector.cpp | 5 + 05_week/tasks/simple_vector/test.cpp | 397 +++++++ 05_week/tasks/string_view/CMakeLists.txt | 1 + 05_week/tasks/string_view/README.md | 42 + 05_week/tasks/string_view/string_view.cpp | 7 + 05_week/tasks/string_view/test.cpp | 365 ++++++ 05_week/tasks/tracer/CMakeLists.txt | 1 + 05_week/tasks/tracer/README.md | 43 + 05_week/tasks/tracer/test.cpp | 370 ++++++ 05_week/tasks/tracer/tracer.cpp | 6 + cmake/TestSolution.cmake | 10 + grading/deadlines.json | 21 + 28 files changed, 3251 insertions(+), 16 deletions(-) create mode 100644 .github/workflows/testing_week_05.yml create mode 100644 05_week/05_memory_move.md create mode 100644 05_week/CMakeLists.txt create mode 100644 05_week/examples/storage_duration.cpp create mode 100644 05_week/tasks/CMakeLists.txt create mode 100644 05_week/tasks/cow_string/CMakeLists.txt create mode 100644 05_week/tasks/cow_string/README.md create mode 100644 05_week/tasks/cow_string/cow_string.cpp create mode 100644 05_week/tasks/cow_string/test.cpp create mode 100644 05_week/tasks/simple_vector/CMakeLists.txt create mode 100644 05_week/tasks/simple_vector/README.md create mode 100644 05_week/tasks/simple_vector/simple_vector.cpp create mode 100644 05_week/tasks/simple_vector/test.cpp create mode 100644 05_week/tasks/string_view/CMakeLists.txt create mode 100644 05_week/tasks/string_view/README.md create mode 100644 05_week/tasks/string_view/string_view.cpp create mode 100644 05_week/tasks/string_view/test.cpp create mode 100644 05_week/tasks/tracer/CMakeLists.txt create mode 100644 05_week/tasks/tracer/README.md create mode 100644 05_week/tasks/tracer/test.cpp create mode 100644 05_week/tasks/tracer/tracer.cpp diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 13fd6e0a..32b897e4 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -1,6 +1,6 @@ name: Testing Tasks -on: [push, pull_request] +on: [push] jobs: test: @@ -30,12 +30,17 @@ jobs: tasks=("addition" "rms" "print_bits" "check_flags" "length_lit" "quadratic" "char_changer" "swap_ptr" "func_array" "longest" "last_of_us" "little_big" "pretty_array" "data_stats" "unique" "range" "minmax" "find_all" "os_overload" "easy_compare" "filter" "enum_operators" - "stack" "queue" "ring_buffer" "phasor") + "stack" "queue" "ring_buffer" "phasor" + "tracer" "string_view" "cow_string" "simple_vector") declare -i passed_count=0 declare -i failed_count=0 declare -i task_count=0 + # task name arrays + passed_tasks=() + failed_tasks=() + echo "=== Starting tests for changed tasks ===" for task in "${tasks[@]}"; do @@ -49,13 +54,16 @@ jobs: if ./build/tasks/test_$task; then echo "✅ test_$task PASSED" passed_count+=1 + passed_tasks+=("$task") else echo "❌ test_$task FAILED" failed_count+=1 + failed_tasks+=("$task") fi else echo "❌ test_$task build FAILED" failed_count+=1 + failed_tasks+=("$task") fi fi done @@ -63,8 +71,8 @@ jobs: echo "=== Test Results Summary ===" echo "Total tasks in list: ${#tasks[@]}" echo "Processed: $task_count" - echo "✅ Passed: $passed_count" - echo "❌ Failed: $failed_count" + echo "✅ Passed: $passed_count [$(echo ${passed_tasks[@]} | tr ' ' ', ')]" + echo "❌ Failed: $failed_count [$(echo ${failed_tasks[@]} | tr ' ' ', ')]" if [ $failed_count -gt 0 ]; then echo "❌ Some tasks failed!" diff --git a/.github/workflows/testing_week_01.yml b/.github/workflows/testing_week_01.yml index 3ece11af..be25e996 100644 --- a/.github/workflows/testing_week_01.yml +++ b/.github/workflows/testing_week_01.yml @@ -18,6 +18,9 @@ on: - quadratic - char_changer + schedule: + - cron: '59 20 4 12 *' # UTC: 20:59 = 23:59 MSK 4 December + jobs: test: runs-on: ubuntu-latest @@ -33,7 +36,8 @@ jobs: - name: Determine tasks to run id: get-tasks run: | - if [ "${{ github.event.inputs.tasks }}" = "all" ]; then + if [["${{ github.event_name }}" = "schedule"]] || + [[ "${{ github.event.inputs.tasks }}" = "all" ]]; then # Find all tasks TASKS=() for dir in 01_week/tasks/*/; do @@ -48,6 +52,8 @@ jobs: - name: Build and run tests for selected tasks run: | + echo "Event: ${{ github.event_name }}" + echo "Tasks to test: '${{ steps.get-tasks.outputs.tasks }}'" IFS=' ' read -ra tasks <<< "${{ steps.get-tasks.outputs.tasks }}" @@ -55,6 +61,10 @@ jobs: declare -i failed_count=0 declare -i task_count=0 + # task name arrays + passed_tasks=() + failed_tasks=() + echo "=== Starting tests for selected tasks ===" for task in "${tasks[@]}"; do @@ -80,8 +90,8 @@ jobs: echo "=== Test Results Summary ===" echo "Total tasks in list: ${#tasks[@]}" echo "Processed: $task_count" - echo "✅ Passed: $passed_count" - echo "❌ Failed: $failed_count" + echo "✅ Passed: $passed_count [$(echo ${passed_tasks[@]} | tr ' ' ', ')]" + echo "❌ Failed: $failed_count [$(echo ${failed_tasks[@]} | tr ' ' ', ')]" if [ $failed_count -gt 0 ]; then echo "❌ Some tasks failed!" diff --git a/.github/workflows/testing_week_02.yml b/.github/workflows/testing_week_02.yml index dc37cec9..f4f63b94 100644 --- a/.github/workflows/testing_week_02.yml +++ b/.github/workflows/testing_week_02.yml @@ -17,6 +17,9 @@ on: - little_big - pretty_array + schedule: + - cron: '59 20 11 12 *' # UTC: 20:59 = 23:59 MSK 11 December + jobs: test: runs-on: ubuntu-latest @@ -32,7 +35,8 @@ jobs: - name: Determine tasks to run id: get-tasks run: | - if [ "${{ github.event.inputs.tasks }}" = "all" ]; then + if [["${{ github.event_name }}" = "schedule"]] || + [[ "${{ github.event.inputs.tasks }}" = "all" ]]; then # Find all tasks TASKS=() for dir in 02_week/tasks/*/; do @@ -47,6 +51,8 @@ jobs: - name: Build and run tests for selected tasks run: | + echo "Event: ${{ github.event_name }}" + echo "Tasks to test: '${{ steps.get-tasks.outputs.tasks }}'" IFS=' ' read -ra tasks <<< "${{ steps.get-tasks.outputs.tasks }}" @@ -54,6 +60,10 @@ jobs: declare -i failed_count=0 declare -i task_count=0 + # task name arrays + passed_tasks=() + failed_tasks=() + echo "=== Starting tests for selected tasks ===" for task in "${tasks[@]}"; do @@ -79,8 +89,8 @@ jobs: echo "=== Test Results Summary ===" echo "Total tasks in list: ${#tasks[@]}" echo "Processed: $task_count" - echo "✅ Passed: $passed_count" - echo "❌ Failed: $failed_count" + echo "✅ Passed: $passed_count [$(echo ${passed_tasks[@]} | tr ' ' ', ')]" + echo "❌ Failed: $failed_count [$(echo ${failed_tasks[@]} | tr ' ' ', ')]" if [ $failed_count -gt 0 ]; then echo "❌ Some tasks failed!" diff --git a/.github/workflows/testing_week_03.yml b/.github/workflows/testing_week_03.yml index fdb0892f..38993cfa 100644 --- a/.github/workflows/testing_week_03.yml +++ b/.github/workflows/testing_week_03.yml @@ -38,7 +38,8 @@ jobs: - name: Determine tasks to run id: get-tasks run: | - if [ "${{ github.event.inputs.tasks }}" = "all" ]; then + if [["${{ github.event_name }}" = "schedule"]] || + [[ "${{ github.event.inputs.tasks }}" = "all" ]]; then # Find all tasks TASKS=() for dir in 03_week/tasks/*/; do @@ -53,6 +54,8 @@ jobs: - name: Build and run tests for selected tasks run: | + echo "Event: ${{ github.event_name }}" + echo "Tasks to test: '${{ steps.get-tasks.outputs.tasks }}'" IFS=' ' read -ra tasks <<< "${{ steps.get-tasks.outputs.tasks }}" @@ -60,6 +63,10 @@ jobs: declare -i failed_count=0 declare -i task_count=0 + # task name arrays + passed_tasks=() + failed_tasks=() + echo "=== Starting tests for selected tasks ===" for task in "${tasks[@]}"; do @@ -85,8 +92,8 @@ jobs: echo "=== Test Results Summary ===" echo "Total tasks in list: ${#tasks[@]}" echo "Processed: $task_count" - echo "✅ Passed: $passed_count" - echo "❌ Failed: $failed_count" + echo "✅ Passed: $passed_count [$(echo ${passed_tasks[@]} | tr ' ' ', ')]" + echo "❌ Failed: $failed_count [$(echo ${failed_tasks[@]} | tr ' ' ', ')]" if [ $failed_count -gt 0 ]; then echo "❌ Some tasks failed!" diff --git a/.github/workflows/testing_week_04.yml b/.github/workflows/testing_week_04.yml index 9f93eaed..e27e55bb 100644 --- a/.github/workflows/testing_week_04.yml +++ b/.github/workflows/testing_week_04.yml @@ -33,7 +33,8 @@ jobs: - name: Determine tasks to run id: get-tasks run: | - if [ "${{ github.event.inputs.tasks }}" = "all" ]; then + if [["${{ github.event_name }}" = "schedule"]] || + [[ "${{ github.event.inputs.tasks }}" = "all" ]]; then # Find all tasks TASKS=() for dir in 04_week/tasks/*/; do @@ -48,6 +49,8 @@ jobs: - name: Build and run tests for selected tasks run: | + echo "Event: ${{ github.event_name }}" + echo "Tasks to test: '${{ steps.get-tasks.outputs.tasks }}'" IFS=' ' read -ra tasks <<< "${{ steps.get-tasks.outputs.tasks }}" @@ -55,6 +58,10 @@ jobs: declare -i failed_count=0 declare -i task_count=0 + # task name arrays + passed_tasks=() + failed_tasks=() + echo "=== Starting tests for selected tasks ===" for task in "${tasks[@]}"; do @@ -80,8 +87,8 @@ jobs: echo "=== Test Results Summary ===" echo "Total tasks in list: ${#tasks[@]}" echo "Processed: $task_count" - echo "✅ Passed: $passed_count" - echo "❌ Failed: $failed_count" + echo "✅ Passed: $passed_count [$(echo ${passed_tasks[@]} | tr ' ' ', ')]" + echo "❌ Failed: $failed_count [$(echo ${failed_tasks[@]} | tr ' ' ', ')]" if [ $failed_count -gt 0 ]; then echo "❌ Some tasks failed!" diff --git a/.github/workflows/testing_week_05.yml b/.github/workflows/testing_week_05.yml new file mode 100644 index 00000000..312f5c25 --- /dev/null +++ b/.github/workflows/testing_week_05.yml @@ -0,0 +1,105 @@ +name: Testing Tasks Week 05 + +on: + workflow_dispatch: + inputs: + tasks: + description: 'Select tasks to test' + required: true + type: choice + default: 'all' + options: + - all + - tracer + - string_view + - cow_string + - simple_vector + + schedule: + - cron: '59 20 16 02 *' # UTC: 20:59 = 23:59 MSK 16 February + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Install compiler and CMake + run: sudo apt install -y cmake build-essential g++-14 libgtest-dev libgmock-dev + + - name: Configure project + run: cmake -B build + + - name: Determine tasks to run + id: get-tasks + run: | + if [["${{ github.event_name }}" = "schedule"]] || + [[ "${{ github.event.inputs.tasks }}" = "all" ]]; then + # Find all tasks + TASKS=() + for dir in 05_week/tasks/*/; do + task=$(basename "$dir") + TASKS+=("$task") + done + echo "tasks=${TASKS[*]}" >> $GITHUB_OUTPUT + else + # Используем указанную задачу + echo "tasks=${{ github.event.inputs.tasks }}" >> $GITHUB_OUTPUT + fi + + - name: Build and run tests for selected tasks + run: | + echo "Event: ${{ github.event_name }}" + echo "Tasks to test: '${{ steps.get-tasks.outputs.tasks }}'" + + IFS=' ' read -ra tasks <<< "${{ steps.get-tasks.outputs.tasks }}" + + declare -i passed_count=0 + declare -i failed_count=0 + declare -i task_count=0 + + # task name arrays + passed_tasks=() + failed_tasks=() + + echo "=== Starting tests for selected tasks ===" + + for task in "${tasks[@]}"; do + task_count+=1 + echo "=== Processing $task ===" + + if cmake --build build --target test_$task; then + echo "✅ test_$task built successfully" + + if ./build/tasks/test_$task; then + echo "✅ test_$task PASSED" + passed_count+=1 + passed_tasks+=("$task") + else + echo "❌ test_$task FAILED" + failed_count+=1 + failed_tasks+=("$task") + fi + else + echo "❌ test_$task build FAILED" + failed_count+=1 + failed_tasks+=("$task") + fi + done + + echo "=== Test Results Summary ===" + echo "Total tasks in list: ${#tasks[@]}" + echo "Processed: $task_count" + echo "✅ Passed: $passed_count [$(echo ${passed_tasks[@]} | tr ' ' ', ')]" + echo "❌ Failed: $failed_count [$(echo ${failed_tasks[@]} | tr ' ' ', ')]" + + if [ $failed_count -gt 0 ]; then + echo "❌ Some tasks failed!" + exit 1 + elif [ $task_count -eq 0 ]; then + echo "No tasks were processed (no changes)" + exit 0 + else + echo "✅ All processed tasks passed!" + exit 0 + fi \ No newline at end of file diff --git a/05_week/05_memory_move.md b/05_week/05_memory_move.md new file mode 100644 index 00000000..d0db6d25 --- /dev/null +++ b/05_week/05_memory_move.md @@ -0,0 +1,1007 @@ +# Лекция 5. Память программы на C++. Семантика перемещения + +1. [Память программы (процесса)](#process_memory) + - [Стек](#stack) + - [Куча](#heap) + - [Сегмент BSS данных (Block Started by Symbol)](#bss_segment) + - [Сегмент данных (Data Segment)](#data_segment) + - [Сегмент данных для чтения (RODATA Segment)](#rodata_segment) + - [Сегмент кода программы (Text Segment) ](#text_segment) + - [Сегмент локальных переменных потока (Thread Local Segment)](#tls_segment) +1. [Продолжительность хранения (_Storage duration_)](#storage_duration) + - [Static storage duration](#static_storage_duration) + - [Automatic storage duration](#automatic_storage_duration) + - [Dynamic storage duration](#dynamic_storage_duration) + - [Thread storage duration](#thread_storage_duration) +1. [Связывание (_linkage_)](#linkage) + - [Внешнее связывание (_external linkage_)](#external_linkage) + - [Внутренее связывание (_internal linkage_)](#internal_linkage) + - [Отсутствие связывания (_no linkage_)](#no_linkage) + - [Модульное связывания (_module linkage_) C++20](#module_linkage) +1. [Ключевое слово `static`](#static) + - [Вне класса. Глобальная статическая переменная](#global_static_var) + - [Вне класса. Локальная статическая переменная](#local_static_var) + - [Вне класса. Глобальная статическая функция](#global_static_function) + - [Внутри класса. Статическое поле](#static_field_in_class) + - [Внутри класса. Статический метод](#static_function_in_class) +1. [Initialization Order Fiasco](#initialization_order_fiasco) +1. [Ключевое слово `inline`](#inline) +1. [Работа с динамической памятью](#cpp_dynamic_memory) + - [Операторы `new` и `delete`](#new_delete) + - [Операторы `new[]` и `delete[]`](#new_delete_array) + - [Переопределение операторов `new` и `delete`](#new_delete_overloading) +1. [Ключевое слово `noexcept`](#noexcept) +1. [Категория выражений ([value categories](https://en.cppreference.com/w/cpp/language/value_category.html))](#value_categories) + - [rvalue-ссылка](#rvalue_reference) + - [Связывание ссылок](#reference_binding) + - [Перегрузка функции по ссылке](#function_overloading_by_reference) + - [Квалификация метода по виду ссылки ](#reference_qualifiers_class_method) + - [Temporary materialization (С++17)](#temporary_materialization) +1. [Семантика перемещения](#move_semantics) + - [Функция `std::move`](#std_move) + - [Правило нуля (_Rule of Zero_)](#rule_of_zero) + - [Правило пяти (_Rule of Five_)](#rule_of_five) + - [Правила для специальных методов](#rules_for_specific_methods) +1. [Copy Elision](#copy_elision) + - [Return Value Optimization (RVO)](#rvo) + - [Named Return Value Optimization (NRVO)](#nrvo) + + +## Память программы (процесса) + +Программа имеет виртуальное адресное пространство. При запуске программа +не полностью загружается в оперативную память. Операционная система (ОС) +настраивает таблицы страниц и выделяет области памяти для программы. +Таблицы страниц служат для отображения виртуальных адресов программы на C++ +в физические адреса оперативной памяти. + +В языке C++ упрощенно можно выделить следующие сегменты памяти: + +- **автоматический** - представлен стеком, служит для автоматического выделения + и освобождения памяти под локальные переменные, аргументы функции. +- **статический** - для глобальных и статических переменных, существует всю жизнь + программы +- **динамический** - представлен кучей, позволяет получать память в использование + во время выполнения программы и требует управления выделением и освобождением + памяти +- **потоковый** - для специально помеченных локальных переменных потока, существует + всю жизнь потока + +Память процесса можно разделить на следующие сегменты: + +- Stack (Стек) +- TLS (Thread local segment) +- Heap (Куча) +- BSS (Block Started by Symbol) +- Data Segment +- RODATA Segment (read only) +- Text Segment (Code) + +### Стек + +Стек имеет ограниченный размер, который зависит от ОС и её настроек. По умолчанию +размер составляет 1-8 Мб (Windows, Linux). Стек организован по принципу LIFO + +Выделяемая память на стеке **НЕ** инициализируется по умолчанию. + +При вызове функции на стеке формируется стек фрейм, в котором размещаются +параметры функции, локальные переменные, адрес возврата, сохраненные регистры. + +Компилятор **НЕ** гарантирует, что переменные на стеке будут лежать в порядке +объявления. + +При выходе из области видимости вызываются деструкторы объектов в порядке +обратном созданию + +При выходе из функции указатель текущего фрейма стека (stack pointer) просто +сдвигается, тем самым память автоматически считается свободной. + +Переполнение стека приводит к ошибке stack overflow -> segmentation fault. + +К переполнению может приводить как размещение слишком больших массивов, так +и глубокий рекурсивный вызов функий. + +### Куча + +Динамическая память (куча) представляет собой участок памяти, требующий ручного +управления. Динамическая память выделяется во время выполнения программы и имеет +продолжительность хранения, пока не будет освобождена. + +Куча медленнее стека поскольку при выделении может происходить запрос к +менеджеру памяти ОС (системный вызов) во время выполнения программы. + +### Сегмент BSS данных (Block Started by Symbol) + +Данный сегмент хранит глобальные и статические переменные, которые не имеют +явной инициализации или инициализированы нулем. + +Загрузчик ОС при запуске программы выделяет память под эти переменные и зануляет +её, поэтому они не занимают места в бинарном файле, что позволяет экономить место. + +### Сегмент данных (Data Segment) + +Данный сегмент хранит глобальные и статические переменные, которые явно +инициализированы ненулевыми значениями. Переменные занимают место в бинарном +файле + +### Сегмент данных для чтения (RODATA Segment) + +Как следует из названия в данном сегменте лежат данные для чтения. Поэтому +попытка изменения данных приводит к ошибкам компиляции или к UB, падению +программы при попытке изменить константу. Продолжительность хранения данного +сегмента статическая - все время жизни программы + +В данном сегменте лежат именованные константы, строковые литералы. +Строковые литералы могут лежать в единственном экземпляре. + +### Сегмент кода программы (Text Segment) + +В данном сегменте располагается машинный код программы. В данном сегменте +записаны функции, методы и точка входа в программу `main`. Как правило, +данный сегмент предназначен только для чтения и является разделяемым +(_shared_) между потоками. + +### Сегмент локальных переменных потока (Thread Local Segment) + +В данном сегменте располагаются локальные переменные потока. Для таких переменных +при объявлении используется ключевое слово `thread_local` перед типом. У каждого +потока свои копии переменных, а их время жизни соответствует времени жизни потока. + +## Продолжительность хранения (_Storage duration_) + +В языке C++ с сегментами памяти тесно связано понятие storage duration. + +Продолжительность хранения (storage duration) - период, в течение которого +зарезервирована память для объекта. + +Продолжительность хранения это свойство объекта, которое определяет минимальный +потенциальный срок жизни выделенной памяти под объект. + +В языке C++ выделены следующие виды продолжительности хранения + +- static +- automatic +- dynamic +- thread + +### Static storage duration + +Static storage duration - память выделяется и освобождается независимо от области +видимости объекта и продолжает существовать все время выполнение процесса. + +Соответствует сегментам памяти `.bss`, `.data`, `.rodata` + +Глобальные, статические переменные, в том числе объявленные внутри `namespace` +имеют static storage duration + +Создается до входа в `main` (для локальных статических переменных при первом +входе) + +Порядок инициализации между единицами трансляции **НЕ** определен. Следовательно, +некорректно инициализировать переменную со статическим storage duration, переменной +с аналогичным storage duration из другой единицы трансляции (файла) + +```c++ +int global; +int global_init = 18; +static int static_value = 10; +extern int value; + +namespace utils { + const double IN_TO_CM = 2.54; +} + +int& get_static() { + static int instance; + return &instance; +} +``` + +### Automatic storage duration + +Automatic storage duration - память выделяется при входе в область видимости и +освобождается при выходе из области видимости, причем вызываются деструкторы. + +Представлен стеком. + +```c++ +void function(int a, double b, const char* name) { + std::string info(name); + { + double num = a * b; + info += std::to_string(num); + } + std::cout << info << std::endl; +} +``` +- переменные a, b, name, info, num - располагаются на стеке + +### Dynamic storage duration + +Dynamic storage duration - управление памяти осуществляется вручную. + +Представлен кучей + +```c++ +int* ptr = new int(5); +int* arr = new int[5]{1, 2, 3}; +delete ptr; +delete[] arr; +``` + +### Thread storage duration + +Thread storage duration - память выделяется при запуске потока и освобождается +при его завершении. + +У каждого потока своя копия + +```c++ +thread_local int value = 18; +``` + +## Связывание (_linkage_) + +Связывание определяет видимость идентификаторов между единицами трансляции. +Связывание не относится к памяти напрямую, а затрагивает связывание имён на +этапе линковки + +### Внешнее связывание (_external linkage_) + +**External linkage** - внешнее связывание означает, что идентификатор (имя) +виден в других единицах трансляции. По умолчанию для сущностей C++ в глобальной +области видимости. + +### Внутренее связывание (_internal linkage_) + +**Internal linkage** - внутреннее связывание, означает, что идентификатор (имя) +виден только в текущей единице трансляции. Для `static` переменных, `const` +переменных, имен шаблонных параметров. + +Таким образом `const` в заголовочном файле, включаемый в разные `.cpp` файлы, +представлен копией в каждой единице трансляции. + +Для внешнего связывания `const` переменной используется ключевое слово `extern` + +Для внешнего связывания константы в C++17 используется ключевое слово +`inline constexpr` + +### Отсутствие связывания (_no linkage_) + +**No linkage** - отсутствует связывание, означает, что идентификатор (имя) виден +только в области видимости. Для параметров функций, имен шаблонных параметров, +локальных переменных. + +### Модульное связывания (_module linkage_) C++20 + +В языке C++20 появились модули `module` и вместе с ними появился новый вид связывания + +**Module linkage** (C++20) - модульное связывания означает, что идентификатор (имя) +виден в пределах модуля и не виден извне. + +Модуль может включать несколько единиц трансляции. + +## Ключевое слово `static` + +Ключевое слово `static` применяется к идентификатору переменной или +функции и имеет разные смыслы в зависимости от контекста использования. + +### Вне класса. Глобальная статическая переменная + +**Глобальная переменная**, помеченная ключевым словом `static`, имеет +статическую продолжительность хранения (static storage duration) и +внутреннее связывание (internal linkage), то есть видна только в текущей +единице трансляции. Что позволяет скрыть реализацию в .cpp файле и избежать +конфликтов **ODR** (_One Definition Rule_) + +```c++ +static int value = 18; +``` + +**НО** если определить её в `.h` файле, то каждый включающий её `.cpp` +файл будет иметь копию, видную только в пределах данного файла. + +### Вне класса. Локальная статическая переменная + +**Локальная статическая переменная** (внутри функции) имеет _static +storage duration_ и область видимости внутри функции, а также +инициализируется только **один раз** при первом вызове функции. + +```c++ +void f() { + static int counter = 0; + ++counter; + std::cout << "f() call count = " << counter << std::endl; +} +``` +- **НЕ** видна вне функции + +Как правило используется в качестве кэша, счетчика, синглтона +(singleton), при ленивой инициализации (lazy initialization) + +### Вне класса. Глобальная статическая функция + +**Глобальная функция**, помеченная ключевым словом `static`, также +имеет внутреннее связывание и не видна из других единиц трансляции +(.cpp файлов) + +```c++ +static void inner_helper(); +``` + +В современном C++ заменяют `static` в данном контексте на размещение +глобальной функции или переменной в безымянном пространстве имен +`namespace` + +### Внутри класса. Статическое поле + +**Переменная внутри класса**, объявленная с ключевым словом `static`, иимеет +статическую продолжительность хранения (static storage duration) и внешнее +связывание (external linkage), если нет inline. + +Статическая переменная класса принадлежит классу, а не конкретному экземпляру. + +Доступ к статическому полю принято осуществлять посредством имени класса и оператора +`::`. Также доступно через экземпляр класса и оператор `.` + +Статическое поле является объявлением. Требует определения только в одном `.cpp`, +поэтому инициализация в теле класса вызывает ошибку **ODR violation**. + +```c++ +// .h +class C { + static int counter; // declaration + // static int counter = 0; // compile error +}; +// .cpp +int C::counter = 0; // definition +``` + +Инициализация `static` поля внутри класса разрешена для интегральных констант. + +**НО** для получения адреса константного статического поля необходимо определение +**ВНЕ** класса, даже если значение проинициализировано. + +```c++ +// .h +class C { + static const int multipliyer = 2; // declaration + // static const double PI = 3.14; // error double is not integral +}; +// .cpp +const int C::multipliyer; // definition +const int* ptr = &C::multipliyer; // work after definition +``` + +Инициализация `static` поля внутри класса разрешена для `constexpr` полей (C++11). + +```c++ +// .h +class C { + static constexpr int multipliyer = 2; // declaration + static constexpr double PI = 3.141592653589793; //ok +}; +// .cpp +constexpr int C::multipliyer; // definition +const int* ptr = &C::multipliyer; // work after definition +``` +- Но для получения адреса необходимо определение **ВНЕ** класса до C++17. + Начиная с C++17 `constexpr` по умолчанию является `inline` и определение + **ВНЕ** класса **НЕ** требуется + +Инициализация `static` поля внутри класса разрешена для `inline static` полей (C++17). +Является определением, определение **ВНЕ** класса **НЕ** требуется, разрешено +в заголовке. + +```c++ +class C { + inline static int multipliyer = 2; + inline static std::string default_name = "name"; +}; +``` + +### Внутри класса. Статический метод + +**Функция внутри класса**, объявленная с ключевым словом `static` не привязана +к какому-либо экземпляру (объекту) класса, а логически принадлежит всему классу. +Следовательно, внутри функции нет указателя на объект `this`. + +```c++ +struct A { + static int f(); +}; +``` + +Внутри функции можно обращаться только к `static` полям, к обычным нельзя + +Вызвать функцию можно с указанием принадлежности классу, используя оператор `::` + +```c++ +int value = A::f(); +``` + +## Initialization Order Fiasco + +Initialization Order Fiasco - Ошибка порядка статической инициализации, +которая возникает, когда один объект со _static storage duration_ использует +для инициализации другой объект из другого файла с аналогичным _storage duration_, +поскольку порядок инициализации между единицами трансляции не определен. + +Следующий код вызывает **UB**: + +```c++ +// a.cpp +extern int y; +int x = y + 1; + +// b.cpp +int y = 10; +``` +- порядок инициализации внутри одной единцы трансляции сверху вниз + +## Ключевое слово `inline` + +Ключевое слово `inline` означает, что можно иметь несколько определений, +если они одинаковы. + +Для переменных (C++17) это значит, что это одно логическое определение и можно +размещать в заголовке. + +Таким образом, использование `inline static` используется для вспомогательных +функций, определяемых в заголовочном файле. + +## Работа с динамической памятью + +При выполнении операции выделения памяти процесс обращается к ОС, ОС находит +свободные физические кадры памяти и обновляет таблицу страниц, чтобы отобразить +виртуальный адрес (возвращаемый в программе) на этот физический кадр. Если +физическая память заканчивается, ОС перемещает старые страницы на диск (подкачка), +помечая запись и загружает новые. Если запрошенная по адресу переменная не +находится в таблице страниц, происходит _page fault_ и ОС загружает нужную страницу +обратно в память. Поэтому работа с динамической памятью медленнее, чем со стеком. + +Выделенная процессу память будет считаться занятой, пока с помощью операции +освобождения памяти она не будет явно освобождена и отдана ОС. Если динамическую +память не освободить, то она будет освобождена только по факту завершения процесса + +При работе с динамической памятью могут возникать следующие проблемы: + +- Утечки памяти (memory leak) - когда выделенная память не освобождается и уже + не используется. Такая память будет считаться ОС занятой до тех пор, пока не + завершится весь процесс (программа). + +- Двойное удаление (double free) - когда производится вызов оператора освобождения + памяти дважды для одного указателя, что приведет к ошибке и падению программы + +- Висячий указатель (dangling pointer) - когда указатель, указывает на область + памяти, которая уже была освобождена (удалена), но сам указатель не был обнулен, + либо это другой указатель на ту же область памяти. + +### Операторы `new` и `delete` + +Для выделения динамической памяти используется оператор `new`, а для освобождения +оператор `delete`. + +Синтаксис: `* = new ;` +Синтаксис с инициализацией: +- `* = new ();` +- `* = new {};` + +```c++ +int* ptr = new int; +int* ptr_init = new int(5); +delete ptr; +delete ptr_init; +``` + +### Операторы `new[]` и `delete[]` + +Также есть соответствующая версии операторов для работы массивами `new[]`, +`delete[]`. Обязательно необходимо освобождать память с использованием парного +оператора. + +Синтаксис: `* = new [];` +Синтаксис с инициализацией аналогичен созданию обычных массивов. + +```c++ +int* arr = new int[10]; +delete[] arr; +``` + +### Переопределение операторов `new` и `delete` + +Глобальный оператор `new`: + +```c++ +void* operator new(std::size_t); +void operator delete(void*) noexcept; +``` + +Оператор `new` внутри класса: + +```c++ +struct Struct { + static void* operator new(std::size_t); + static void operator delete(void*) noexcept; +}; +``` + +Для вызова глобальных операторов в таком случае можно воспользоваться +оператором разрешения области видимости `::operator new` , `::operator delete` + +```c++ +static void* Struct::operator new(std::size_t bytes) { + std::cerr << "allocate: " << bytes << " bytes\n"; + return ::operator new(bytes); +} +static void Struct::operator delete(void* ptr, std::size_t bytes) noexcept { + std::cerr << "deallocate: " << bytes << " bytes\n"; + ::operator delete (ptr); +} +``` + +Оператор placement `new` переопределить нельзя: + +```c++ +void* operator new(std::size_t, void*) noexcept; +``` + +## Ключевое слово `noexcept` + +Ключевое слово `noexcept` является спецификатором функции (в том числе метода, +оператора) и оператором, проверяющим на этапе компиляции может ли выражение +выбрасывать исключение `noexcept()`. + +Спецификатор `noexcept` пишется после сигнатуры функции и перед `{`. +Спецификатор сообщает компилятору, что код внутри не выбрасывает исключений, +и позволяет ему выполнить оптимизации (убрать код для раскрутки стека). + +Если исключение всё же будет выброшено из помеченной функции, то вызовется +`std::terminate`, который завершит процесс. + +Хорошим тоном считается писать `noexcept` там, где действительно код не может +выбросить исключение. + +Правила использования: + +- Деструкторы по умолчанию `noexcept` +- Функции освобождения памяти (`free`, `delete`) должны быть `noexcept` +- Функции обмена (`swap`) должны быть `noexcept` +- Хорошими кандидатами на использование `noexcept` являются `const` методы +- Move-операции должны быть `noexcept`, когда это возможно +- **НЕ** следует использовать `noexcept(false)` без веской причины + +## Категория выражений ([value categories](https://en.cppreference.com/w/cpp/language/value_category.html)) + +Помимо типа каждое выражение в C++ характеризуется категорией. + +Классификация до C++11: + +- lvalue - имеет адрес, может быть слева от присваивания `=` +- rvalue - временное значение, справа от присваивания `=` + +Современная классификация (C++11) построена на двух свойствах: + +- Идентичность (I)- параметр, по которому можно понять ссылаются ли два объекта + на одну и ту же сущность (например, наличие адреса в памяти) +- Перемещаемость (M) - возможно ли переместить объект, отдать владение ресурсом + +В основу классификации легли три первичных категории + +- lvalue (locator/left value) +- xvalue (expiring value) - временный материализованный объект (с истекающим временем жизни) +- prvalue (pure rvalue) + +```text + glvalue(I) rvalue(M) + / \ / \ +lvalue(I~M) xvalue(IM) prvalue(~IM) +``` + +### rvalue-ссылка + +В C++11 вводится rvalue-ссылка `&&`. + +Основные отличия rvalue-ссылка `&&` от lvalue-ссылки `&`: + +- можно проинициализировать только rvalue выражением +- при возврате из функции `&&` возвращается rvalue выражение. +- продлевает жизнь временным объектам + +Во всем остальном ведет себя также как ссылка. +Сам по себе идентификатор, объявленный rvalue-ссылкой, является lvalue. + +```c++ +int l = 18; +int&& r = l; // compilation error (l is not rvalue) +int&& x = 18; // ok +int&& y = x; //compilation error (x is not rvalue) +int&& m = std::move(l); // ok +int&& sc = static_cast(x); // ok +m = 0; // ok l = 0, m = 0 +``` + +В языке присутствует базовое неявное приведение _lvalue-to-prvalue_ + +```c++ +int x, y; +x = x + 1; // lvalue = prvalue +y = x; // lvalue = lvalue to prvalue +y = std::move(x); // lvalue = xvalue +``` + +### Связывание ссылок + +Rvalue-ссылка **НЕ** может быть связана с **lvalue** +Lvalue-ссылка **НЕ** может быть связана с **rvalue** + +```c++ +int x = 1; +int&& y = x * 3; //ok +int&& b = x; //fail, not rvalue + +int& c = x * 3; // fail, not lvalue; +const int& d = x * 3; //ok, lifetime prolongation for const ref + +int&& e = y; // fail, not rvalue +int& f = y; // ok +``` + +### Перегрузка функции по ссылке + +Функция может быть перегружен по типу принимаемой ссылке: + +```c++ +int foo(int& v); // 1 +int foo(int&& v); // 2 +int foo(const int& v); // 3 +int foo(const int&& v); // 4 + +int x = 1; + +foo(x); // -> 1 +foo(1); // -> 2 + +const int y = 1; + +foo(y); // -> 3 +foo(std::move(y)); // -> 4 +``` + +### Квалификация метода по виду ссылки + +Метод может быть перегружен, по факту вызова для **lvalue** или **rvalue** ссылки. + +Для этого после закрывающей скобки аргументов добавляется квалификатор **&** или **&&** +Таким образом, можно определить различное поведение при вызове функции от временного +объекта `&&` и постоянного `&` + +```c++ +struct S { + int foo() &; + int foo() &&; +}; +``` + +Оператор присваивания можно пометить одним амперсандом `&` и не создавать версию +с `&&`, чтобы к временному объекту нельзя было присваивать, тогда будет +недоступно присваивание к временному объекту, что достаточно логично + +```c++ +struct S { + S() = default; + S& operator=(const S& other) &; +}; + +S a; +S() = a; // compile error +``` + +### Temporary materialization (С++17) + +Материализация временного объекта (_temporary materialization_) представляет собой +неявное преобразование из _prvalue_ в _xvalue_. + +Материализация временного объекта происходит: + +- при связывании ссылки с чисто временным объектом (категории prvalue) +- при доступе к нестатическому полю класса, prvalue объекта +- при вызове нестатических методов от prvalue объекта (поскольку в метод неявно + передается указатель `this`) +- при выполнении преобразования array-to-pointer или обращению по индексу `[]` + к prvalue массиву +- при инициализации объекта `std::initializer_list` посредством списка инициализации + в фигурных скобках +- когда prvalue появляется в отбрасывающем результат выражении (игнорируем результат + prvalue выражения, возвращающего тип какого-либо класса) + +1. Связывание ссылки с чисто временным объектом + +```c++ +const int& r1 = 10; // prvalue 10 is materialized to get cref +int&& r2 = 5 + 3; // prvalue from expr '5+3' is materialized to get && + +void foo(const std::string&); +foo("hello"); // std::string materializes from "hello" to get cref +``` + +2. Доступ к нестатическому полю класса, prvalue объекта + +```c++ +struct Point { int x = 0, int y = 0}; +int val = Point{3, 4}.x; // Point{3,4} is materialized to access.x; +``` + +3. Вызов нестатического метода от rvalue объекта + +```c++ +struct Logger { + void log() const { std::cout << "Logging\n"; } +}; +Logger().log(); // Logger() is materialized to call log(), need this. +std::string("hello").length(); // the same case +``` + +4. Обращение к prvalue массиву `[]` или при приобразовании array-to-pointer + +```c++ +void bar(const int*); +bar((int[]){10, 20}); + +int* p1 = (int[3]){1, 2, 3};. +int val = ((int[]){10, 20, 30})[1]; +``` + +5. Инициализация объекта `std::initializer_list` + +```c++ +#include +void func(std::initializer_list lst) {} +func({1, 2, 3}); +``` + +6. Когда prvalue в discarded-value expression + +```c++ +struct Widget { + Widget() { std::cout << "Created\n"; } + ~Widget() { std::cout << "Destroyed\n"; } +}; +Widget(); // materialized to the end of expression ; +``` + +Материализации временного объекта **НЕ** возникает, когда используется prvalue того же +типа (при `direct-initialization` или `copy-initialization`). Такие объекты создаются +напрямую из инициализирующего prvalue. Это является гарантированным _copy elision_, +начиная с C++17 + +## Семантика перемещения + +Чтобы избежать излишнего копирования, когда создается объект из объекта, который +больше не нужен, в языке реализована семантика перемещения (move-семантика). + +Семантика перемещения позволяет забрать у другого объекты ресурсы, которыми +он владеет. Причем, объект, у которого забрали данные, должен остаться в +консистентном состоянии, то есть после перемещения из него данных, его +состоянии было корректным (часто дефолтным, нулевым) и им можно было продолжать +пользоваться. + +Начиная с C++11 у класса появляется перемещающий конструктор и перемещающий +оператор присваивания. + +```c++ +Class(Class&& other); +Class& operator=(Class&& other); +``` + +Компилятор генерирует move-конструктор и move оператор присваивания, вызывая +соответствующие move операции для полей класса. + +Для примитивных типов перемещающие методы выполняют **копирование**. + +Владение ресурсом подразумевает, например указатель на динамическую память внутри +класса и выделение памяти в конструкторе и освобождение в деструкторе. Пусть +экземпляр класса создается на стеке, а данные в динамической памяти. Копирование +по умолчанию подразумевает копирование значений всех полей, в случае указателя +скопируется не данные, а указатель (адрес на выделенную память). В такой ситуации +возникает проблема двойного удаления по указателю, так как два объекта имеют +одинаковые указатели на одну память и при выходе из области видимости объектов в +деструкторе будет двойное освобождение памяти по указателю. + +Для такого класса переопределяется конструктор копирования и оператор присваивания +копированием, чтобы данные в динамической памяти действительно копировались: + +```c++ +class String { +public: + String(size_t size) : size_(size), cap_(size), data_(new char[size + 1]) { + std::fill_n(data, size + 1, '\0'); + } + String(const String& other) : + size_(other.size_), + cap_(other.size_), + data_(new char[other.size_ + 1]) { + std::strcpy(data_, other.data_); + } + String& operator=(const String& other) { + if (this != &other) { + delete[] data; + size = other.size; + cap_ = other.size; + data_ = new char[size + 1]; + std::strcpy(data_, other.data_); + } + return *this; + } + ~String() { delete[] data_; } + + size_t cap_; + size_t size_; + char* data_; +}; +``` + +Когда объект больше не нужен, а его данные нужны, или как минимум нужна выделенная +память, чтобы не выделять её снова, можно переместить ресурс (память, файловыый +дескриптор, сокет и т.д.) из одного объекта в другой, а не копировать их. +Это обеспечивает значительный прирост производительности, особенно для объектов, +владеющих "тяжелыми" ресурсами. + +Но объект из которого забирают ресурс должен остаться в консистентном состоянии +и его можно было использовать + +```c++ + String(String&& other) noexcept + : cap_(other.cap_), size_(other.size_), data_(other.data_) { + // необходимо оставить other в валидном состоянии + other.cap_ = 0; + other.size_ = 0; + other.data_ = nullptr; + } + String& operator=(String&& other) noexcept { + if (this != &other) { + // очищаем свои данные + delete[] data_; + // копируем + cap_ = other.cap_; + size_ = other.size_; + // забираем данные + data_ = other.data_; + // необходимо оставить other в валидном состоянии + other.cap_ = 0; + other.size_ = 0; + other.data_ = nullptr; + } + return *this; + } +``` + +Вызвать данные конструкторы можно следующим образом: + +```c++ +String str(1000); +auto str_move = std::move(str); // call move ctor + +String str_other(10); +String str_moved(100); +str_moved = std::move(str_other); // call move assignment +``` + +### Функция `std::move` + +Функция `std::move` необходима для того, чтобы при вызове функции от объекта +перенаправить компилятор на использование версии с rvalue-ссылкой. + +Функция действует на этапе компиляции и всё что она делает, это возвращает +rvalue-ссылку на переданный ей объект + +```c++ +std::string str = "I will be moved"; +auto str_copy = str; +auto str_moved = std::move(str); // call move ctor for string +std::cout << str_copy == str_moved) << std::endl; // 1 (true) +std::cout << str.empty() << std::endl; // 1 (true) +``` + +### Правило нуля (_Rule of Zero_) + +"Правило нуля" - принцип программирования на C++, который гласит, что класс +**НЕ** должен определять ни один из пяти специальных методов, если их можно +автоматически сгенерировать компилятором: + +- деструктор +- конструктор копирования +- оператор присваивания копированием +- конструктор перемещения +- оператор присваивания перемещением + +Если ваш класс **НЕ** управляет ресурсами (памятью), а его данные — это простые типы +или классы, которые сами управляют ресурсами (например, `std::string`, `std::vector`, +умные указатели), то вам **НЕ** нужно писать свои специальные методы. + +Класс **НЕ** должен самостоятельно управлять ресурсами, если это не класс управления +ресурсами. + +### Правило пяти (_Rule of Five_) + +"Правило пяти" - принцип программирования на C++, который гласит, что если +пользовательский класс управляет ресурсами (память, файловые дескрипторы) и +определяет хотя бы один из пяти специальных методов, то он **должен явно +определить все пять**: + +- деструктор +- конструктор копирования +- оператор присваивания копированием +- конструктор перемещения +- оператор присваивания перемещением + +Такой подход позволяет избежать ошибок управления памятью (висячие указатели, +двойное удаление). + +До возникновения семантики перемещения в C++11 использовали "Правило трёх". + +### Правила для специальных методов + +Компилятор генерирует специальные методы самостоятельно в зависимости от условий. + +Деструктор по умолчанию создается: + +- default если нет ни одного пользовательского деструктора + +Конструктор копирования (аналогично копирующее присваивание): + +- delete если его нет, но есть пользовательское перемещение или move ctor +- иначе default, если его нет (но если при этом есть деструктор или парный + копирующий метод, то deprecated) + +Перемещающий конструктор (аналогично перемещающее присваивание) + +- delete если его нет, но при этом есть парный перемещающий метод или + copy ctor, или copy operator=, или dtor (при наследовании если деструктор + объявлен virtual) +- иначе default, если его нет + +## Copy Elision + +Copy elision (пропуск копирования) в C++ — это оптимизация компилятора, +устраняющая создание временных объектов при возврате из функций или передаче по +значению, что исключает вызов конструкторов копирования/перемещения. + +Начиная с C++17 компилятор обязан применять _copy elision_ при инициализации +объекта результатом функции, возвращающей тот же тип, что повышает +производительность и делает код более эффективным. + +Оптимизация позволяет не тратить время на копирование/перемещения, а деструкторы +для временных объектов не вызываются. + +### Return Value Optimization (RVO) + +**Return Value Optimization (RVO)** - оптимизация компилятора, позволяющая +не создавать локальный объект, который используется в качестве возвращаемого +значения, а конструировать возвращаемый объект на месте вызова функции. Такая +оптимизация позволяет устранить лишний вызов конструктора копирования или +перемещения. + +RVO применима, если возвращаемое значение prvalue-выражение, то есть временный +объект. + +Начиная с _C++17_ RVO - это не оптимизация, а правило, которое должно выполняться +компилятором. + +### Named Return Value Optimization (NRVO) + +**Named Return Value Optimization (NRVO)** - оптимизация компилятора, аналогичная +RVO, но действующая для локального lvalue-объекта, имеющего имя, и возвращаемого +из функции. + +На месте вызова функции вставляется инициализация объекта, принимающего +возвращаемое значение функции. В аргументы функции добавляется указатель на +данный объект и все вычисления возвращаемого значения выполняются над объектом +под указателем. + +NRVO может быть применена только когда тип возвращаемого объекта и тип +возвращаемого значения сигнатуры функции точно совпадают + +По этой причине **НЕ** следует возвращаемое значение оборачивать в `std::move()`, +так как тип возвращаемого значения не будет совпадать и, следовательно, +оптимизация не будет применена. diff --git a/05_week/CMakeLists.txt b/05_week/CMakeLists.txt new file mode 100644 index 00000000..cdf912be --- /dev/null +++ b/05_week/CMakeLists.txt @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION 3.14) # Минимальная требуемая версия CMake +project(05_week) # Необходим для инициализации cmake + +set(CMAKE_CXX_STANDARD 20) # Версия стандарта C++ +set(CMAKE_CXX_STANDARD_REQUIRED ON) # Гарантирует использование указанной версии стандарта + +set(EXAMPLES_DIR examples) # Определим переменную с именем директории +set(TASKS_DIR tasks) + +add_subdirectory(tasks) + +# Создать исполняемый файл для каждого примера +if (BUILD_EXAMPLES_05_WEEK) + +endif() \ No newline at end of file diff --git a/05_week/examples/storage_duration.cpp b/05_week/examples/storage_duration.cpp new file mode 100644 index 00000000..38079f4a --- /dev/null +++ b/05_week/examples/storage_duration.cpp @@ -0,0 +1,127 @@ +#include +#include + +int global_zero; // bss +int global_init = 18; // data +const int global_const = 10; // rodata + +int global_zero_2; // bss +int global_init_2 = 18; // data +const int global_const_2 = 10; // rodata + +static int static_zero; +static int static_init = 18; + +const char* str_a = "hello"; +const char* str_b = "hello"; + +thread_local int tlocal_var = 10; + +void local_var(int func_arg, const int func_arg_const, int& ref, const int& ref_const) { + std::cout << __func__ << ':' << std::endl; + int local = 18; + const int local_const = 10; + std::cout << "addr func_arg = \t" << &func_arg << std::endl; + std::cout << "addr func_arg_const = \t" << &func_arg_const << std::endl; + std::cout << "addr ref = \t\t" << &ref << std::endl; + std::cout << "addr ref_const = \t" << &ref_const << std::endl; + std::cout << "addr local = \t\t" << &local << std::endl; + std::cout << "addr local_const = \t" << &local_const << std::endl; + const int local_const_2 = 20; + int local_two = 2; + std::cout << "addr local_const_2 = \t" << &local_const_2 << std::endl; + std::cout << "addr local_two = \t" << &local_two << std::endl; + std::cout << std::endl; +} + +void same_literals() { + std::cout << __func__ << ':' << std::endl; + const char* str_c = "hello"; + + std::cout << "addr str_a = \t" << &str_a << std::endl; + std::cout << "addr str_b = \t" << &str_b << std::endl; + std::cout << "addr str_c = \t" << &str_c << std::endl; + std::cout << std::endl; +} + +class Static { +public: + static int* get_static_class_var() { + return &static_class_var; + } +private: + static int static_class_var; +}; + +int Static::static_class_var = 0; + +void static_var() { + std::cout << __func__ << ':' << std::endl; + static int static_local_var = 10; + + std::cout << "addr static_zero = \t\t" << &static_zero << std::endl; + std::cout << "addr static_init = \t\t" << &static_init << std::endl; + std::cout << "addr static_local_var = \t" << &static_local_var << std::endl; + std::cout << "addr static_class_var = \t" << Static::get_static_class_var() << std::endl; + std::cout << std::endl; +} + +void dynamic_var() { + std::cout << __func__ << ':' << std::endl; + + int* dynamic_var = new int; + *dynamic_var = 10; + int* dynamic_var_init = new int(10); + int* dynamic_arr = new int[10]{}; + int* dynamic_var_init2 = new int{2}; + std::cout << "addr dynamic_var = \t" << dynamic_var << std::endl; + std::cout << "addr dynamic_var_init = " << dynamic_var_init << std::endl; + std::cout << "addr dynamic_arr = \t" << dynamic_arr << std::endl; + std::cout << "addr dynamic_var_init2 = " << dynamic_var_init2 << std::endl; + delete dynamic_var; + delete dynamic_var_init; + delete[] dynamic_arr; + delete dynamic_var_init2; + std::cout << std::endl; +} + +void thread_var() { + std::cout << __func__ << ':' << std::endl; + int local_var; + std::cout << "addr tlocal_var = \t" << &tlocal_var << std::endl; + std::cout << "addr global_zero = \t" << &global_zero << std::endl; + std::cout << "addr local_var = \t" << &local_var << std::endl; + std::cout << std::endl; +} + +int main() { + std::cout << "global var:" << std::endl; + std::cout << "addr global_zero = " << &global_zero << std::endl; + std::cout << "addr global_zero_2 = " << &global_zero_2 << std::endl; + std::cout << "addr global_init = " << &global_init << std::endl; + std::cout << "addr global_init_2 = " << &global_init_2 << std::endl; + std::cout << "addr global_const = " << &global_const << std::endl; + std::cout << "addr global_const_2 = " << &global_const_2 << std::endl; + std::cout << std::endl; + + std::cout << "func:" << std::endl; + std::cout << "addr func local_var = " << (void*)&local_var << std::endl; + std::cout << "addr func main = " << (void*)&main << std::endl; + std::cout << "addr func static class = " << (void*)&Static::get_static_class_var << std::endl; + std::cout << std::endl; + + std::cout << "local var main:" << std::endl; + int main_var = 0; + const int main_var_const = 0; + std::cout << "addr main_var = " << &main_var << std::endl; + std::cout << "addr main_var_const = " << &main_var_const << std::endl; + std::cout << std::endl; + + local_var(main_var, main_var_const, main_var, main_var_const); + same_literals(); + static_var(); + dynamic_var(); + thread_var(); +} + + diff --git a/05_week/tasks/CMakeLists.txt b/05_week/tasks/CMakeLists.txt new file mode 100644 index 00000000..c06cbe6e --- /dev/null +++ b/05_week/tasks/CMakeLists.txt @@ -0,0 +1,4 @@ +add_subdirectory(tracer) +add_subdirectory(string_view) +add_subdirectory(cow_string) +add_subdirectory(simple_vector) \ No newline at end of file diff --git a/05_week/tasks/cow_string/CMakeLists.txt b/05_week/tasks/cow_string/CMakeLists.txt new file mode 100644 index 00000000..d234c642 --- /dev/null +++ b/05_week/tasks/cow_string/CMakeLists.txt @@ -0,0 +1 @@ +add_gtest_asan(test_cow_string test.cpp) \ No newline at end of file diff --git a/05_week/tasks/cow_string/README.md b/05_week/tasks/cow_string/README.md new file mode 100644 index 00000000..edb1a1cd --- /dev/null +++ b/05_week/tasks/cow_string/README.md @@ -0,0 +1,74 @@ +[cow]: https://en.wikipedia.org/wiki/Copy-on-write + +# Коровья строка + +Существуют разные подходы к управлению данными при копировании. Можно выделить +следующие семантики: + +- value-семантика - при копировании объекта происходит глубокое копирование (deep copy), + все значения полностью объекта полностью копируются (реализовано в большинстве классов + стандартной библиотеки C++). +- reference-семантика - при копировании объекта его содержимое не копируется, + а разделяется между копиями посредством ссылки или указателя. Также существует подход, + который называют поверхностное копирование (shallow copy), когда происходит + копирование только верхнего уровня оригинального объекта, а ссылки на внутренние + части объекта остаются общими (реализовано по умолчанию в некоторых других языках). +- [cow]-семантика (copy-on-write) - при копировании объекта создается shallow copy, + что позволяет использовать объект на чтение без дополнительных затрат ресурсов, но + при изменении объекта создается настоящая глубокая копия и изменения вносятся уже в копию. + Таким образом, копирование совершается только при внесении изменений, что в + определенных сценариях использования объекта позволяет увеличить производительность + и уменьшить затраты на ресурсы. + +Cow-семантика применяется в реализации строк Яндекса и фреймворка Qt. + +Необходимо реализовать класс `CowString`, который представляет собой упрощенную +реализацию строки с copy-on-write семантикой. + +Класс предоставляет следующий функционал: + +- Конструктор по умолчанию — создает пустую строку +- Конструктор от `const char*` +- Конструктор от `std::string` +- Конструктор копирования — увеличивает счетчик ссылок, не копирует данные +- Оператор присваивания копированием — увеличивает счетчик ссылок, не копирует данные +- Конструктор перемещения +- Оператор присваивания перемещением +- Деструктор + +Методы **НЕ** вызывающие копирования: + +- Метод `Size` - возвращает длину строки без учета терминирующего нуля `\0` +- Метод `ToCstr` - возвращает указатель на данные +- Метод `ToString` - возвращает `std::string` +- Оператор `[]` - доступ к символу для чтения +- Оператор неявного преобразования к C-строке + +Методы, обеспечивающие модификацию на собственной копии данных: + +- Оператор `[]` - доступ к символу для записи +- Метод `Append` - добавляет строку из C-строки или `std::string` +- Метод `Substr` - принимает позицию и количество символов (по умолчанию от начала + до конца строки), возвращает соответствующую подстроку. Если позиция начала + превышает длину, то возвращаем пустую строку. +- Метод `Clear` - очистка строки + +Для реализации строки удобно вынести все необходимые поля в отдельную структуру +и кроме этого хранить в ней счетчик ссылок `ref_count`. + +Правильно поддерживая `ref_count` всегда будет известно, когда нужно удалять +данные строки или когда нужно превращать shallow-copy в deep-copy. + +## Примечание + +- **Запрещено** использовать `std::string` в реализации и умные указатели +- Рекомендуется определять методы вне класса +- При необходимости вспомогательные методы реализуются в закрытой части класса +- Тесты оператор `[]` не проверяют на индекс вне диапазона + +## Проблемы реализации + +- В предполагаемой реализации имеется следующая проблема: при использовании + модифицирующей версии оператора `[]` пользователь может сохранить ссылку + и модифицировать символ позже, что нарушит cow-семантику. Для упрощения + решать её не требуется. В Qt используют `QCharRef` для решения этой проблемы. diff --git a/05_week/tasks/cow_string/cow_string.cpp b/05_week/tasks/cow_string/cow_string.cpp new file mode 100644 index 00000000..34d59738 --- /dev/null +++ b/05_week/tasks/cow_string/cow_string.cpp @@ -0,0 +1,6 @@ +#include +#include + +class CowString { + +}; diff --git a/05_week/tasks/cow_string/test.cpp b/05_week/tasks/cow_string/test.cpp new file mode 100644 index 00000000..bf54b279 --- /dev/null +++ b/05_week/tasks/cow_string/test.cpp @@ -0,0 +1,519 @@ +#include + +#include "cow_string.cpp" + +TEST(CowStringTest, DefaultConstructor) { + CowString s; + EXPECT_EQ(s.Size(), 0); + EXPECT_STREQ(s.ToCstr(), ""); + EXPECT_TRUE(s.ToString().empty()); +} + +TEST(CowStringTest, ConstructorFromCString) { + CowString s("Hello"); + EXPECT_EQ(s.Size(), 5); + EXPECT_STREQ(s.ToCstr(), "Hello"); + EXPECT_EQ(s.ToString(), "Hello"); +} + +TEST(CowStringTest, ConstructorFromStdString) { + std::string str = "World"; + CowString s(str); + EXPECT_EQ(s.Size(), 5); + EXPECT_STREQ(s.ToCstr(), "World"); + EXPECT_EQ(s.ToString(), "World"); +} + +TEST(CowStringTest, ConstructorFromEmptyCString) { + CowString s(""); + EXPECT_EQ(s.Size(), 0); + EXPECT_STREQ(s.ToCstr(), ""); + EXPECT_TRUE(s.ToString().empty()); +} + +TEST(CowStringTest, CopyConstructorCOWSemantics) { + CowString s1("Hello"); + CowString s2 = s1; + + EXPECT_EQ(s1.ToCstr(), s2.ToCstr()); + + EXPECT_STREQ(s1.ToCstr(), "Hello"); + EXPECT_STREQ(s2.ToCstr(), "Hello"); +} + +TEST(CowStringTest, MoveConstructor) { + CowString s1("Hello"); + const char* original_ptr = s1.ToCstr(); + + CowString s2 = std::move(s1); + + EXPECT_EQ(s2.ToCstr(), original_ptr); + EXPECT_STREQ(s2.ToCstr(), "Hello"); + + EXPECT_EQ(s1.Size(), 0); + EXPECT_STREQ(s1.ToCstr(), ""); +} + +TEST(CowStringTest, CopyAssignmentCOWSemantics) { + CowString s1("Hello"); + CowString s2; + + s2 = s1; + + EXPECT_EQ(s1.ToCstr(), s2.ToCstr()); + + EXPECT_STREQ(s1.ToCstr(), "Hello"); + EXPECT_STREQ(s2.ToCstr(), "Hello"); +} + +TEST(CowStringTest, CopyAssignment_SelfAssignment) { + CowString s("Hello"); + const char* original_ptr = s.ToCstr(); + + s = s; + + EXPECT_EQ(s.ToCstr(), original_ptr); + EXPECT_STREQ(s.ToCstr(), "Hello"); +} + +TEST(CowStringTest, MoveAssignment) { + CowString s1("Hello"); + CowString s2; + + const char* original_ptr = s1.ToCstr(); + + s2 = std::move(s1); + + EXPECT_EQ(s2.ToCstr(), original_ptr); + EXPECT_STREQ(s2.ToCstr(), "Hello"); + + EXPECT_EQ(s1.Size(), 0); + EXPECT_STREQ(s1.ToCstr(), ""); +} + +TEST(CowStringTest, ReadOperationsNoCopy) { + CowString s1("Hello World"); + CowString s2 = s1; + + const char* original_ptr = s1.ToCstr(); + + size_t size1 = s1.Size(); + size_t size2 = s2.Size(); + + const char* cstr1 = s1.ToCstr(); + const char* cstr2 = s2.ToCstr(); + + std::string str1 = s1.ToString(); + std::string str2 = s2.ToString(); + + const CowString& s1_cref = s1; + const CowString& s2_cref = s2; + char ch1 = s1_cref[0]; + char ch2 = s2_cref[0]; + + EXPECT_EQ(s1.ToCstr(), original_ptr); + EXPECT_EQ(s1.ToCstr(), s2.ToCstr()); + + EXPECT_EQ(size1, 11); + EXPECT_EQ(size2, 11); + EXPECT_STREQ(cstr1, "Hello World"); + EXPECT_STREQ(cstr2, "Hello World"); + EXPECT_EQ(str1, "Hello World"); + EXPECT_EQ(str2, "Hello World"); + EXPECT_EQ(ch1, 'H'); + EXPECT_EQ(ch2, 'H'); +} + +TEST(CowStringTest, WriteOperationCausesCopy) { + CowString s1("Hello"); + CowString s2 = s1; + + const char* ptr1_before = s1.ToCstr(); + const char* ptr2_before = s2.ToCstr(); + + EXPECT_EQ(ptr1_before, ptr2_before); + + s2[0] = 'J'; + + const char* ptr1_after = s1.ToCstr(); + const char* ptr2_after = s2.ToCstr(); + + EXPECT_NE(ptr1_after, ptr2_after); + EXPECT_EQ(ptr1_before, ptr1_after); + + EXPECT_STREQ(s1.ToCstr(), "Hello"); + EXPECT_STREQ(s2.ToCstr(), "Jello"); +} + +TEST(CowStringTest, WriteOperationMultipleCopies) { + CowString original("Hello"); + CowString copy1 = original; + CowString copy2 = original; + CowString copy3 = original; + + EXPECT_EQ(original.ToCstr(), copy1.ToCstr()); + EXPECT_EQ(original.ToCstr(), copy2.ToCstr()); + EXPECT_EQ(original.ToCstr(), copy3.ToCstr()); + + copy2[1] = 'a'; + + EXPECT_NE(original.ToCstr(), copy2.ToCstr()); + EXPECT_EQ(original.ToCstr(), copy1.ToCstr()); + EXPECT_EQ(original.ToCstr(), copy3.ToCstr()); + + EXPECT_STREQ(original.ToCstr(), "Hello"); + EXPECT_STREQ(copy1.ToCstr(), "Hello"); + EXPECT_STREQ(copy2.ToCstr(), "Hallo"); + EXPECT_STREQ(copy3.ToCstr(), "Hello"); +} + +TEST(CowStringTest, AppendFromCStringCausesCopy) { + CowString s1("Hello"); + CowString s2 = s1; + + const char* ptr1_before = s1.ToCstr(); + const char* ptr2_before = s2.ToCstr(); + EXPECT_EQ(ptr1_before, ptr2_before); + + s1.Append(" World"); + + const char* ptr1_after = s1.ToCstr(); + const char* ptr2_after = s2.ToCstr(); + + EXPECT_NE(ptr1_after, ptr2_after); + EXPECT_EQ(ptr2_before, ptr2_after); + + EXPECT_STREQ(s1.ToCstr(), "Hello World"); + EXPECT_STREQ(s2.ToCstr(), "Hello"); +} + +TEST(CowStringTest, AppendFromStdString) { + CowString s("Hello"); + std::string world = " World"; + + s.Append(world); + + EXPECT_STREQ(s.ToCstr(), "Hello World"); + EXPECT_EQ(s.Size(), 11); +} + +TEST(CowStringTest, AppendToEmptyString) { + CowString s; + s.Append("Hello"); + + EXPECT_STREQ(s.ToCstr(), "Hello"); + EXPECT_EQ(s.Size(), 5); +} + +TEST(CowStringTest, AppendMultipleTimes) { + CowString s("Hello"); + + s.Append(", "); + s.Append("World"); + s.Append("!"); + + EXPECT_STREQ(s.ToCstr(), "Hello, World!"); + EXPECT_EQ(s.Size(), 13); +} + +TEST(CowStringTest, AppendChainedMultipleTimes) { + CowString s("Hello"); + + s.Append(", ").Append("World").Append("!"); + + EXPECT_STREQ(s.ToCstr(), "Hello, World!"); + EXPECT_EQ(s.Size(), 13); +} + +TEST(CowStringTest, AppendEmptyStringNoCopy) { + CowString s1("Hello"); + CowString s2 = s1; + + const char* original_ptr = s1.ToCstr(); + + s1.Append(""); + + EXPECT_EQ(s1.ToCstr(), s2.ToCstr()); + EXPECT_EQ(s1.ToCstr(), original_ptr); + + EXPECT_STREQ(s1.ToCstr(), "Hello"); +} + +TEST(CowStringTest, SubstrDoesNotModifyOriginal) { + CowString s("Hello World"); + CowString copy = s; + + CowString sub = s.Substr(0, 5); + + EXPECT_EQ(s.ToCstr(), copy.ToCstr()); + EXPECT_NE(s.ToCstr(), sub.ToCstr()); + + EXPECT_STREQ(s.ToCstr(), "Hello World"); + EXPECT_STREQ(sub.ToCstr(), "Hello"); +} + +TEST(CowStringTest, SubstrDefaultParameters) { + CowString s("Hello World"); + + CowString sub1 = s.Substr(); + EXPECT_STREQ(sub1.ToCstr(), "Hello World"); + + CowString sub2 = s.Substr(6); + EXPECT_STREQ(sub2.ToCstr(), "World"); + + CowString sub3 = s.Substr(0, 5); + EXPECT_STREQ(sub3.ToCstr(), "Hello"); + + CowString sub4 = s.Substr(0, CowString::npos); + EXPECT_STREQ(sub4.ToCstr(), "Hello World"); +} + +TEST(CowStringTest, Substr_FullString) { + CowString s("Hello World"); + + CowString sub = s.Substr(0, s.Size()); + + EXPECT_STREQ(sub.ToCstr(), "Hello World"); + EXPECT_EQ(sub.Size(), 11); +} + +TEST(CowStringTest, Substr_Partial) { + CowString s("Hello World"); + + CowString sub = s.Substr(6, 5); + + EXPECT_STREQ(sub.ToCstr(), "World"); + EXPECT_EQ(sub.Size(), 5); +} + +TEST(CowStringTest, SubstrCountGreaterThanAvailable) { + CowString s("Hello"); + + CowString sub = s.Substr(2, 10); + + EXPECT_STREQ(sub.ToCstr(), "llo"); + EXPECT_EQ(sub.Size(), 3); +} + +TEST(CowStringTest, SubstrFromEmptyString) { + CowString se; + se.Clear(); + + CowString sub1 = se.Substr(0, CowString::npos); + EXPECT_STREQ(sub1.ToCstr(), ""); + EXPECT_EQ(sub1.Size(), 0); + + CowString sub2 = se.Substr(0, 5); + EXPECT_STREQ(sub2.ToCstr(), ""); + EXPECT_EQ(sub2.Size(), 0); +} + +TEST(CowStringTest, SubstrInvalidPos) { + CowString s("Hello"); + + auto sub1 = s.Substr(10); + EXPECT_STREQ(sub1.ToCstr(), ""); + EXPECT_EQ(sub1.Size(), 0); + + auto sub2 = s.Substr(6, CowString::npos); + EXPECT_STREQ(sub2.ToCstr(), ""); + EXPECT_EQ(sub2.Size(), 0); +} + +TEST(CowStringTest, ClearCreatesCopy) { + CowString s1("Hello"); + CowString s2 = s1; + + const char* ptr2_before = s2.ToCstr(); + EXPECT_EQ(s1.ToCstr(), s2.ToCstr()); + + s1.Clear(); + EXPECT_NE(s1.ToCstr(), s2.ToCstr()); + EXPECT_EQ(s2.ToCstr(), ptr2_before); + + EXPECT_STREQ(s1.ToCstr(), ""); + EXPECT_EQ(s1.Size(), 0); + EXPECT_STREQ(s2.ToCstr(), "Hello"); + EXPECT_EQ(s2.Size(), 5); +} + +TEST(CowStringTest, ClearEmptyString) { + CowString s; + CowString copy = s; + + s.Clear(); + + EXPECT_STREQ(s.ToCstr(), ""); + EXPECT_EQ(s.Size(), 0); + EXPECT_STREQ(copy.ToCstr(), ""); + EXPECT_EQ(copy.Size(), 0); +} + +TEST(CowStringTest, OperatorConstCharStar) { + CowString s("Hello"); + + const char* cstr = s; + + EXPECT_STREQ(cstr, "Hello"); +} + +TEST(CowStringTest, IndexOperatorRead) { + CowString s("Hello"); + + const CowString& s_cref = s; + EXPECT_EQ(s_cref[0], 'H'); + EXPECT_EQ(s_cref[1], 'e'); + EXPECT_EQ(s_cref[4], 'o'); +} + +TEST(CowStringTest, IndexOperatorWriteCausesCopy) { + CowString s1("Hello"); + CowString s2 = s1; + + const char* ptr1_before = s1.ToCstr(); + const char* ptr2_before = s2.ToCstr(); + EXPECT_EQ(ptr1_before, ptr2_before); + + s1[0] = 'J'; + + EXPECT_NE(s1.ToCstr(), s2.ToCstr()); + EXPECT_EQ(s2.ToCstr(), ptr2_before); + + EXPECT_STREQ(s1.ToCstr(), "Jello"); + EXPECT_STREQ(s2.ToCstr(), "Hello"); +} + +TEST(CowStringTest, ImplicitConversionInComparisons) { + CowString s("Hello"); + + EXPECT_STREQ(s, "Hello"); + EXPECT_STRNE(s, "World"); +} + +TEST(CowStringTest, MultipleOperations) { + CowString s1("Hello"); + CowString s2 = s1; + CowString s3 = s2; + + EXPECT_EQ(s1.ToCstr(), s2.ToCstr()); + EXPECT_EQ(s2.ToCstr(), s3.ToCstr()); + + s2.Append(" World"); + + EXPECT_EQ(s1.ToCstr(), s3.ToCstr()); + EXPECT_NE(s1.ToCstr(), s2.ToCstr()); + + s1[0] = 'J'; + + EXPECT_NE(s1.ToCstr(), s2.ToCstr()); + EXPECT_NE(s1.ToCstr(), s3.ToCstr()); + EXPECT_NE(s2.ToCstr(), s3.ToCstr()); + + EXPECT_STREQ(s1.ToCstr(), "Jello"); + EXPECT_STREQ(s2.ToCstr(), "Hello World"); + EXPECT_STREQ(s3.ToCstr(), "Hello"); +} + +TEST(CowStringTest, MemoryManagementDestructor) { + CowString* s1 = new CowString("Hello"); + CowString* s2 = new CowString(*s1); + + const char* s1_ptr = s1->ToCstr(); + const char* s2_ptr = s2->ToCstr(); + + EXPECT_EQ(s1_ptr, s2_ptr); + + delete s1; + + EXPECT_STREQ(s2->ToCstr(), "Hello"); + + delete s2; +} + +TEST(CowStringTest, AssignmentChain) { + CowString a("A"); + CowString b("B"); + CowString c("C"); + + a = b = c; + + EXPECT_EQ(a.ToCstr(), b.ToCstr()); + EXPECT_EQ(b.ToCstr(), c.ToCstr()); + EXPECT_EQ(a.ToCstr(), c.ToCstr()); + + EXPECT_STREQ(a.ToCstr(), "C"); + EXPECT_STREQ(b.ToCstr(), "C"); + EXPECT_STREQ(c.ToCstr(), "C"); +} + +TEST(CowStringTest, LargeStringCOWBenefits) { + + std::string large(10000, 'A'); + CowString s1(large); + + std::vector copies(10); + for (auto& copy : copies) { + copy = s1; + } + + for (const auto& copy : copies) { + EXPECT_EQ(s1.ToCstr(), copy.ToCstr()); + } + + copies[5][0] = 'B'; + + EXPECT_NE(s1.ToCstr(), copies[5].ToCstr()); + + for (size_t i = 0; i < copies.size(); ++i) { + if (i != 5) { + EXPECT_EQ(s1.ToCstr(), copies[i].ToCstr()); + } + } + + EXPECT_EQ(s1.ToCstr()[0], 'A'); + EXPECT_EQ(copies[5].ToCstr()[0], 'B'); + + for (size_t i = 1; i < 100; ++i) { + EXPECT_EQ(s1.ToCstr()[i], 'A'); + EXPECT_EQ(copies[5].ToCstr()[i], 'A'); + } +} + +TEST(CowStringTest, EmptyStringsShareData) { + CowString s1; + CowString s2; + + EXPECT_STREQ(s1.ToCstr(), ""); + EXPECT_EQ(s1.Size(), 0); + EXPECT_STREQ(s2.ToCstr(), ""); + EXPECT_EQ(s2.Size(), 0); + + CowString s3 = s1; + EXPECT_STREQ(s3.ToCstr(), ""); + EXPECT_EQ(s3.Size(), 0); +} + +TEST(CowStringTest, FindMethod) { + CowString s("Hello World"); + + EXPECT_EQ(s.Find("World"), 6); + EXPECT_EQ(s.Find("Hello"), 0); + EXPECT_EQ(s.Find("Universe"), CowString::npos); + EXPECT_EQ(s.Find('o'), 4); + EXPECT_EQ(s.Find('x'), CowString::npos); + EXPECT_EQ(s.Find(""), 0); +} + +TEST(CowStringTest, EmptyMethod) { + CowString s1("Hello"); + EXPECT_FALSE(s1.Empty()); + + CowString s2; + EXPECT_TRUE(s2.Empty()); + + CowString s3(""); + EXPECT_TRUE(s3.Empty()); + + s1.Clear(); + EXPECT_TRUE(s1.Empty()); +} diff --git a/05_week/tasks/simple_vector/CMakeLists.txt b/05_week/tasks/simple_vector/CMakeLists.txt new file mode 100644 index 00000000..44ad31db --- /dev/null +++ b/05_week/tasks/simple_vector/CMakeLists.txt @@ -0,0 +1 @@ +add_gtest_asan(test_simple_vector test.cpp) \ No newline at end of file diff --git a/05_week/tasks/simple_vector/README.md b/05_week/tasks/simple_vector/README.md new file mode 100644 index 00000000..6b7a4c47 --- /dev/null +++ b/05_week/tasks/simple_vector/README.md @@ -0,0 +1,66 @@ +# Вектор чисел + +Необходимо реализовать класс `SimpleVector`, представляющий упрощенную реализацию +контейнера `std::vector` для целочисленных элементов типа `int` в динамической +памяти. + +Класс предоставляет следующий функционал: + +- Конструктор по умолчанию +- Конструктор, принимающий размер вектора и заполняющий его нулями +- Конструктор, принимающий список инициализации `std::initializer_list`, + что позволит писать `SimpleVector v = {1, 3, 5}` +- Конструктор копирования +- Конструктор перемещения +- Операторы присваивания копированием +- Оператор присваивания перемещением +- Деструктор +- Метод `Swap` - принимает другой вектор и меняет содержимое текущего вектора с ним местами +- Операторы индексирования `[]`- позволяет изменять содержимое для неконстантного вектора +- Метод `Size` - возвращает число элементов в векторе +- Метод `Capacity` - возвращает текущее число выделенных ячеек памяти под вектор. +- Метод `Empty` - возвращает `true`, если вектор пуст +- Метод `Data` - прямой доступ к памяти, не позволяющий вносить изменения +- Метод `PushBack` который вставляет элемент в конец вектора. +- Метод `PopBack` - удаляет последний элемент вектора. При этом изменяется только размер, + выделенную память изменять не нужно. +- Метод `Insert` - принимает позицию (или `const int*`) и элемент, вставляет элемент перед + указанной позицией, возвращает указатель на вставленный элемент, позволяющий вносить изменения. + При вставке элементы контейнера, начиная с указанной позиции до конца вектора смещаются + на одну позицию. Если передана некорректная позиция, вставка не происходит, возвращается + указатель за последний элемент контейнера. +- Метод `Erase` - принимает позицию (или `const int*`), удаляет элемент в указанной позиции + и возвращает указатель на элемент, который был следующим за удаляемым. + Элементы после указанной позиции сдвигаются. Если передана некорректная позиция, удаление + не производится. +- Метод `Clear` - очистить вектор. При этом, как правило, изменяется только размер, память + очищать не нужно и выполнять релокации тоже. +- Метод `Resize` - принимает размер и значение (по умолчанию 0), изменяет размер массива на + заданный. Если переданный размер совпадает с текущим, то без изменений. Если меньше, то + изменяет размер. Если больше, то при необходимости производит релокацию и заполняет элементы + заданным значением +- Метод `Reserve` - принимает новое значение вместимости, позволяя зарезервировать место в + векторе. Если текущий `Capacity` не меньше переданного, то метод не должен ничего делать. + В противном случае выполните релокацию в массив размера заданной вместимости. +- Поддержка работы range-based for для контейнера. В данном случае для простоты + допустимо возвращать указатели на первый элемент и за последний, концепция итераторов + будет обсуждаться позже. +- Операторы сравнения на равенство и неравенство, учитывающие размер и поэлементное + сравнение элементов + +При добавлении элемента, если память, выделенная для вектора, заполнена, то выполните +релокацию: выделите массив вдвое большего размера, скопируйте элементы туда, +после чего удалите старый массив. В этом случае вместимость должна увеличиться вдвое. +Для вектора, сконструированного с помощью конструктора по умолчанию, вместимость == 0, +при добавлении элемента вместимость становится 1. + +## Примечание + +- **Запрещено** использовать стандартные контейнеры (`std::vector`, умные указатели) +- Устройство вектора обсуждалось в конце третьей лекции +- Для поддержки range-based for необходимы методы `begin`, `end` или внешние функции + `begin`, `end`, принимающие заданную коллекцию, поэтому допустимо, чтобы они не + соответствовали стайлгайду. Если стайлгайд не хочется +- Для совместимости с алгоритмами стандартной библиотеки **STL** может потребоваться + `swap`, ситуация аналогичная, но поскольку требуется внутри класса `Swap`, достаточно + реализовать внешнюю функцию, вызывающую метод `Swap` контейнера diff --git a/05_week/tasks/simple_vector/simple_vector.cpp b/05_week/tasks/simple_vector/simple_vector.cpp new file mode 100644 index 00000000..9b2ea971 --- /dev/null +++ b/05_week/tasks/simple_vector/simple_vector.cpp @@ -0,0 +1,5 @@ + + +class SimpleVector { + +}; \ No newline at end of file diff --git a/05_week/tasks/simple_vector/test.cpp b/05_week/tasks/simple_vector/test.cpp new file mode 100644 index 00000000..9bf16ed4 --- /dev/null +++ b/05_week/tasks/simple_vector/test.cpp @@ -0,0 +1,397 @@ +#include + +#include "simple_vector.cpp" + + +TEST(SimpleVectorTest, DefaultConstructor) { + SimpleVector v; + EXPECT_EQ(v.Size(), 0); + EXPECT_EQ(v.Capacity(), 0); + EXPECT_TRUE(v.Empty()); +} + +TEST(SimpleVectorTest, SizeConstructor) { + SimpleVector v(5); + EXPECT_EQ(v.Size(), 5); + EXPECT_EQ(v.Capacity(), 5); + EXPECT_FALSE(v.Empty()); + + for (size_t i = 0; i < v.Size(); ++i) { + EXPECT_EQ(v[i], 0); + } +} + +TEST(SimpleVectorTest, SizeValueConstructor) { + SimpleVector v(3, 42); + EXPECT_EQ(v.Size(), 3); + EXPECT_EQ(v.Capacity(), 3); + + for (size_t i = 0; i < v.Size(); ++i) { + EXPECT_EQ(v[i], 42); + } +} + +TEST(SimpleVectorTest, InitializerListConstructor) { + SimpleVector v = {1, 2, 3, 4, 5}; + EXPECT_EQ(v.Size(), 5); + EXPECT_EQ(v.Capacity(), 5); + + for (size_t i = 0; i < v.Size(); ++i) { + EXPECT_EQ(v[i], static_cast(i + 1)); + } +} + +TEST(SimpleVectorTest, CopyConstructor) { + SimpleVector original = {1, 2, 3}; + SimpleVector copy(original); + + EXPECT_EQ(copy.Size(), original.Size()); + EXPECT_EQ(copy.Capacity(), original.Capacity()); + + EXPECT_EQ(original, copy); + + copy[0] = 100; + EXPECT_EQ(original[0], 1); +} + +TEST(SimpleVectorTest, MoveConstructor) { + SimpleVector original = {1, 2, 3}; + size_t original_size = original.Size(); + size_t original_capacity = original.Capacity(); + const int* original_data = original.Data(); + + SimpleVector moved(std::move(original)); + + EXPECT_EQ(moved.Size(), original_size); + EXPECT_EQ(moved.Capacity(), original_capacity); + EXPECT_EQ(moved.Data(), original_data); + + EXPECT_EQ(original.Size(), 0); + EXPECT_EQ(original.Capacity(), 0); + EXPECT_EQ(original.Data(), nullptr); +} + + +TEST(SimpleVectorTest, CopyAssignment) { + SimpleVector v1 = {1, 2, 3}; + SimpleVector v2 = {4, 5}; + + v2 = v1; + + EXPECT_EQ(v2.Size(), v1.Size()); + EXPECT_EQ(v2.Capacity(), v1.Size()); + + EXPECT_EQ(v2, v1); +} + +TEST(SimpleVectorTest, SelfCopyAssignment) { + SimpleVector v1 = {1, 2, 3}; + auto cap = v1.Capacity(); + + v1 = v1; + + EXPECT_EQ(v1.Capacity(), cap); + EXPECT_EQ(v1.Size(), 3); + EXPECT_EQ(v1[0], 1); +} +TEST(SimpleVectorTest, MoveAssignment) { + SimpleVector v1 = {1, 2, 3}; + SimpleVector v2; + + const int* v1_data = v1.Data(); + size_t v1_size = v1.Size(); + size_t v1_capacity = v1.Capacity(); + + v2 = std::move(v1); + + EXPECT_EQ(v2.Size(), v1_size); + EXPECT_EQ(v2.Capacity(), v1_capacity); + EXPECT_EQ(v2.Data(), v1_data); + + EXPECT_EQ(v1.Size(), 0); + EXPECT_EQ(v1.Capacity(), 0); + EXPECT_EQ(v1.Data(), nullptr); +} + +TEST(SimpleVectorTest, PushBack) { + SimpleVector v; + + v.PushBack(1); + EXPECT_EQ(v.Size(), 1); + EXPECT_EQ(v.Capacity(), 1); + EXPECT_EQ(v[0], 1); + + v.PushBack(2); + EXPECT_EQ(v.Size(), 2); + EXPECT_EQ(v.Capacity(), 2); + EXPECT_EQ(v[1], 2); + + v.PushBack(3); + EXPECT_EQ(v.Size(), 3); + EXPECT_EQ(v.Capacity(), 4); + EXPECT_EQ(v[2], 3); +} + +TEST(SimpleVectorTest, EmptyPopBack) { + SimpleVector v; + EXPECT_NO_THROW(v.PopBack()); + EXPECT_EQ(v.Size(), 0); + EXPECT_EQ(v.Capacity(), 0); +} + +TEST(SimpleVectorTest, PopBack) { + SimpleVector v = {1, 2, 3, 4}; + + v.PopBack(); + EXPECT_EQ(v.Size(), 3); + EXPECT_EQ(v.Capacity(), 4); + + v.PopBack(); + EXPECT_EQ(v.Size(), 2); + EXPECT_EQ(v[0], 1); + EXPECT_EQ(v.Capacity(), 4); + + v.PopBack(); + v.PopBack(); + EXPECT_EQ(v.Size(), 0); + EXPECT_TRUE(v.Empty()); + EXPECT_EQ(v.Capacity(), 4); + + v.PopBack(); + EXPECT_EQ(v.Size(), 0); + EXPECT_EQ(v.Capacity(), 4); +} + +TEST(SimpleVectorTest, Insert) { + SimpleVector v = {1, 3, 4}; + + int* inserted = v.Insert(v.Data() + 1, 2); + EXPECT_EQ(v.Size(), 4); + EXPECT_EQ(*inserted, 2); + for (size_t i = 0; i < v.Size(); ++i) { + EXPECT_EQ(v[i], static_cast(i + 1)); + } + + v.Insert(v.Data(), 0); + EXPECT_EQ(v.Size(), 5); + for (size_t i = 0; i < v.Size(); ++i) { + EXPECT_EQ(v[i], static_cast(i)); + } + + v.Insert(v.Data() + v.Size(), 5); + EXPECT_EQ(v.Size(), 6); + for (size_t i = 0; i < v.Size(); ++i) { + EXPECT_EQ(v[i], static_cast(i)); + } + + int* result = v.Insert(v.Data() - 1, 100); + EXPECT_EQ(v.Size(), 6); + for (size_t i = 0; i < v.Size(); ++i) { + EXPECT_EQ(v[i], static_cast(i)); + } + EXPECT_EQ(result, v.Data() + v.Size()); +} + +TEST(SimpleVectorTest, Erase) { + SimpleVector v = {1, 2, 3, 4, 5}; + + int* ptr = v.Erase(v.Data() + 1); + EXPECT_EQ(v.Size(), 4); + EXPECT_EQ(*ptr, 3); + EXPECT_EQ(v[0], 1); + EXPECT_EQ(v[1], 3); + EXPECT_EQ(v[2], 4); + EXPECT_EQ(v[3], 5); + + v.Erase(v.Data()); + EXPECT_EQ(v.Size(), 3); + EXPECT_EQ(v[0], 3); + + ptr = v.Erase(v.Data() + v.Size() - 1); + EXPECT_EQ(v.Size(), 2); + EXPECT_EQ(ptr, v.Data() + v.Size()); + EXPECT_EQ(v[1], 4); + + ptr = v.Erase(v.Data() + v.Size() + 1); + EXPECT_EQ(ptr, v.Data() + v.Size()); +} + +TEST(SimpleVectorTest, Resize) { + SimpleVector v = {1, 2, 3}; + + v.Resize(2); + EXPECT_EQ(v.Size(), 2); + EXPECT_EQ(v[0], 1); + EXPECT_EQ(v[1], 2); + + v.Resize(4); + EXPECT_EQ(v.Size(), 4); + EXPECT_EQ(v[0], 1); + EXPECT_EQ(v[1], 2); + EXPECT_EQ(v[2], 0); + EXPECT_EQ(v[3], 0); + + v.Resize(6, 42); + EXPECT_EQ(v.Size(), 6); + EXPECT_EQ(v[0], 1); + EXPECT_EQ(v[1], 2); + EXPECT_EQ(v[2], 0); + EXPECT_EQ(v[3], 0); + EXPECT_EQ(v[4], 42); + EXPECT_EQ(v[5], 42); +} + +TEST(SimpleVectorTest, Reserve) { + SimpleVector v; + + v.Reserve(10); + EXPECT_EQ(v.Capacity(), 10); + EXPECT_EQ(v.Size(), 0); + + SimpleVector expected = {1, 2, 3}; + v = {1, 2, 3}; + v.Reserve(5); + EXPECT_EQ(v.Capacity(), 5); + EXPECT_EQ(v.Size(), 3); + EXPECT_EQ(v, expected); + + v.Reserve(2); + EXPECT_EQ(v.Capacity(), 5); +} + +TEST(SimpleVectorTest, Clear) { + SimpleVector v = {1, 2, 3, 4, 5}; + + v.Clear(); + EXPECT_EQ(v.Size(), 0); + EXPECT_EQ(v.Capacity(), 5); + EXPECT_TRUE(v.Empty()); +} + +TEST(SimpleVectorTest, Swap) { + SimpleVector v1 = {1, 2, 3}; + SimpleVector v2 = {4, 5}; + + const int* v1_data = v1.Data(); + const int* v2_data = v2.Data(); + size_t v1_size = v1.Size(); + size_t v2_size = v2.Size(); + size_t v1_cap = v1.Capacity(); + size_t v2_cap = v2.Capacity(); + + v1.Swap(v2); + + EXPECT_EQ(v1.Size(), v2_size); + EXPECT_EQ(v1.Data(), v2_data); + EXPECT_EQ(v1.Capacity(), v2_cap); + EXPECT_EQ(v2.Size(), v1_size); + EXPECT_EQ(v2.Data(), v1_data); + EXPECT_EQ(v2.Capacity(), v1_cap); +} + +TEST(SimpleVectorTest, ExternalSwap) { + SimpleVector v1 = {1, 2, 3}; + SimpleVector v2 = {4, 5}; + + swap(v1, v2); + + EXPECT_EQ(v1.Size(), 2); + EXPECT_EQ(v2.Size(), 3); +} + +TEST(SimpleVectorTest, RangeBasedFor) { + SimpleVector v = {1, 2, 3, 4, 5}; + int sum = 0; + for (int x : v) { + sum += x; + } + EXPECT_EQ(sum, 15); + + const SimpleVector& cv = v; + sum = 0; + for (int x : cv) { + sum += x; + } + EXPECT_EQ(sum, 15); +} + +TEST(SimpleVectorTest, EqualityOperators) { + SimpleVector v1 = {1, 2, 3}; + SimpleVector v2 = {1, 2, 3}; + SimpleVector v3 = {1, 2}; + SimpleVector v4 = {1, 2, 4}; + + EXPECT_TRUE(v1 == v2); + EXPECT_FALSE(v1 != v2); + + EXPECT_FALSE(v1 == v3); + EXPECT_TRUE(v1 != v3); + + EXPECT_FALSE(v1 == v4); + EXPECT_TRUE(v1 != v4); +} + +TEST(SimpleVectorTest, AccessMethods) { + SimpleVector v = {10, 20, 30}; + const SimpleVector& cv = v; + + EXPECT_EQ(*v.Data(), 10); + EXPECT_EQ(*cv.Data(), 10); + + EXPECT_EQ(v[0], 10); + EXPECT_EQ(cv[1], 20); + + v[2] = 40; + EXPECT_EQ(v[2], 40); +} + +TEST(SimpleVectorTest, ComplexOperations) { + SimpleVector v; + + v.PushBack(1); + v.PushBack(2); + v.PushBack(3); + + v.Insert(v.Data() + 1, 99); + v.Erase(v.Data() + 2); + + EXPECT_EQ(v.Size(), 3); + EXPECT_EQ(v[0], 1); + EXPECT_EQ(v[1], 99); + EXPECT_EQ(v[2], 3); + + v.Resize(5, 100); + EXPECT_EQ(v.Size(), 5); + EXPECT_EQ(v[3], 100); + EXPECT_EQ(v[4], 100); + + v.Reserve(20); + EXPECT_EQ(v.Capacity(), 20); +} + +TEST(SimpleVectorTest, WorkAfterMoveCtor) { + SimpleVector original = {1, 2, 3}; + SimpleVector moved(std::move(original)); + + moved.PushBack(17); + EXPECT_EQ(moved.Size(), 4); + EXPECT_EQ(moved[3], 17); + + original.PushBack(17); + EXPECT_EQ(original.Size(), 1); + EXPECT_EQ(original[0], 17); +} + +TEST(SimpleVectorTest, WorkAfterMoveAssignment) { + SimpleVector original = {1, 2, 3}; + SimpleVector moved = {4, 5}; + moved = std::move(original); + + moved.PushBack(17); + EXPECT_EQ(moved.Size(), 4); + EXPECT_EQ(moved[3], 17); + + original.PushBack(17); + EXPECT_EQ(original.Size(), 1); + EXPECT_EQ(original[0], 17); +} \ No newline at end of file diff --git a/05_week/tasks/string_view/CMakeLists.txt b/05_week/tasks/string_view/CMakeLists.txt new file mode 100644 index 00000000..2660fd76 --- /dev/null +++ b/05_week/tasks/string_view/CMakeLists.txt @@ -0,0 +1 @@ +add_gtest_asan(test_string_view test.cpp) \ No newline at end of file diff --git a/05_week/tasks/string_view/README.md b/05_week/tasks/string_view/README.md new file mode 100644 index 00000000..660599cc --- /dev/null +++ b/05_week/tasks/string_view/README.md @@ -0,0 +1,42 @@ +[std::string_view]: https://en.cppreference.com/w/cpp/string/basic_string_view.html + +# Представление строки + +Необходимо реализовать класс `StringView`, представляющий упрощенную реализацию +[std::string_view]. В отличие от `std::string` данный класс не владеет строкой +(ресурсами), а хранит лишь размер и указатель на начало строки. Это позволяет +быстро создавать представление строки, копировать и создавать подстроки. Важно +понимать, что поскольку `StringView` не владеет строкой, а лишь наблюдает за +оригинальной строкой, то при изменении оригинала представление тоже изменится. +При этом сам класс `StringView` не может изменять строку, за которой наблюдает. + +Класс предоставляет следующий функционал: + +- Конструктор от `std::string`, позиции начала подстроки (по умолчанию 0) и длину + наблюдаемой подстроки (по умолчанию аналог `std::string::npos`). Длину подстроки + следует обрезать, если она превышает длину строки. Если начало превышает длину, + то следует создать `StringView` с параметрами по умолчанию +- Конструктор от C-строки +- Конструктор от C-строки и длины +- Оператор `[]` - доступ на чтение символа +- Метод `Data` - возвращает указатель на начало наблюдаемой строки +- Метод `Front` - доступ на чтение к первому символу. +- Метод `Back` - доступ на чтение к последнему символу. +- Методы `Size`, `Length` - возвращают длину наблюдаемой строки +- Метод `Empty` - проверяет на пустоту +- Метод `RemovePrefix` - убирает заданное количество символов из начала представления +- Метод `RemoveSuffix` - убирает заданное количество символов с конца представления +- Метод `Substr` - может принимать позицию начала поиска и количество элементов и + возвращает `StringView`. В случае, когда подстрока начала поиска превышает длину строки, + следует вернуть пустое представление +- Метод `Find` - принимает символ или `StringView` и позицию начала поиска (по умолчанию 0), + возвращает позицию начала совпадения элемента (или аналог `std::string::npos`) +- Метод `ToString` - создает `std::string` на основе представления + +## Примечание + +- **Запрещено** использовать `std::string_view` в реализации +- Передавать `std::string` по значению в первый конструктор очень плохая идея +- Получить длину C-строки можно с помощью функции `strlen`. +- Не забудьте про константность методов + diff --git a/05_week/tasks/string_view/string_view.cpp b/05_week/tasks/string_view/string_view.cpp new file mode 100644 index 00000000..438c4536 --- /dev/null +++ b/05_week/tasks/string_view/string_view.cpp @@ -0,0 +1,7 @@ +#include +#include + + +class StringView { + +}; \ No newline at end of file diff --git a/05_week/tasks/string_view/test.cpp b/05_week/tasks/string_view/test.cpp new file mode 100644 index 00000000..b43d7bca --- /dev/null +++ b/05_week/tasks/string_view/test.cpp @@ -0,0 +1,365 @@ +#include + +#include "string_view.cpp" + +#include + +void ExpectEmpty(const StringView& sv) { + EXPECT_TRUE(sv.Empty()); + EXPECT_EQ(sv.Size(), 0); + EXPECT_EQ(sv.Length(), 0); + EXPECT_EQ(sv.Data(), nullptr); +} + +TEST(StringViewTest, DefaultConstructor) { + StringView sv; + EXPECT_TRUE(sv.Empty()); + EXPECT_EQ(sv.Size(), 0); + EXPECT_EQ(sv.Length(), 0); + EXPECT_EQ(sv.Data(), nullptr); +} + +TEST(StringViewTest, CtorStdString) { + std::string str = "Hello, World!"; + StringView sv(str); + + EXPECT_FALSE(sv.Empty()); + EXPECT_EQ(sv.Size(), str.size()); + EXPECT_EQ(sv.Length(), str.size()); + EXPECT_EQ(sv.Data(), str.data()); + EXPECT_EQ(sv.ToString(), str); +} + +TEST(StringViewTest, CtorStdStringWithPos) { + std::string str = "Hello, World!"; + + StringView sv(str, 7); + EXPECT_EQ(sv.Size(), 6); + EXPECT_EQ(sv.ToString(), "World!"); + + StringView sv2(str, 0); + EXPECT_EQ(sv2.ToString(), str); +} + +TEST(StringViewTest, CtorStdStringWithPosAndCount) { + std::string str = "Hello, World!"; + + StringView sv1(str, 0, 5); + EXPECT_EQ(sv1.ToString(), "Hello"); + + StringView sv2(str, 7, 5); + EXPECT_EQ(sv2.ToString(), "World"); + + StringView sv3(str, 7, 100); + EXPECT_EQ(sv3.ToString(), "World!"); + + StringView sv4(str, 7, StringView::npos); + EXPECT_EQ(sv4.ToString(), "World!"); +} + +TEST(StringViewTest, CtorStdStringWithInvalidPos) { + std::string str = "Hello"; + + EXPECT_NO_THROW(StringView(str, 10)); + EXPECT_NO_THROW(StringView(str, 6)); + + auto sv = StringView(str, 10); + ExpectEmpty(sv); +} + +TEST(StringViewTest, CtorCString) { + const char* cstr = "Hello, World!"; + StringView sv(cstr); + + EXPECT_FALSE(sv.Empty()); + EXPECT_EQ(sv.Size(), std::strlen(cstr)); + EXPECT_EQ(sv.ToString(), cstr); + EXPECT_EQ(sv.Data(), cstr); +} + +TEST(StringViewTest, CtorCStringNullptr) { + StringView sv(static_cast(nullptr)); + ExpectEmpty(sv); +} + +TEST(StringViewTest, CtorCStringAndLength) { + const char* cstr = "Hello, World!"; + + StringView sv1(cstr, 5); + EXPECT_EQ(sv1.Size(), 5); + EXPECT_EQ(sv1.ToString(), "Hello"); + + StringView sv2(cstr + 7, 5); + EXPECT_EQ(sv2.Size(), 5); + EXPECT_EQ(sv2.ToString(), "World"); +} + +TEST(StringViewTest, CtorCStringAndLengthNullptr) { + StringView sv1(nullptr, 0); + EXPECT_TRUE(sv1.Empty()); + + EXPECT_NO_THROW(StringView(nullptr, 5)); + auto sv = StringView(nullptr, 5); + ExpectEmpty(sv); +} + +TEST(StringViewTest, AccessMethods) { + std::string str = "Hello"; + StringView sv(str); + + EXPECT_EQ(sv[0], 'H'); + EXPECT_EQ(sv[1], 'e'); + EXPECT_EQ(sv[4], 'o'); + + EXPECT_EQ(sv.Front(), 'H'); + EXPECT_EQ(sv.Back(), 'o'); +} + +TEST(StringViewTest, RemovePrefix) { + std::string str = "Hello, World!"; + StringView sv(str); + + sv.RemovePrefix(7); + EXPECT_EQ(sv.ToString(), "World!"); + EXPECT_EQ(sv.Size(), 6); + + sv.RemovePrefix(5); + EXPECT_EQ(sv.ToString(), "!"); + EXPECT_EQ(sv.Size(), 1); + + sv.RemovePrefix(10); + EXPECT_TRUE(sv.Empty()); + EXPECT_EQ(sv.Size(), 0); +} + +TEST(StringViewTest, RemoveSuffix) { + std::string str = "Hello, World!"; + StringView sv(str); + + sv.RemoveSuffix(7); + EXPECT_EQ(sv.ToString(), "Hello,"); + EXPECT_EQ(sv.Size(), 6); + + sv.RemoveSuffix(5); + EXPECT_EQ(sv.ToString(), "H"); + EXPECT_EQ(sv.Size(), 1); + + sv.RemoveSuffix(10); + EXPECT_TRUE(sv.Empty()); + EXPECT_EQ(sv.Size(), 0); +} + +TEST(StringViewTest, Substr) { + std::string str = "Hello, World!"; + StringView sv(str); + + StringView sub1 = sv.Substr(0, 5); + EXPECT_EQ(sub1.ToString(), "Hello"); + + StringView sub2 = sv.Substr(7, 5); + EXPECT_EQ(sub2.ToString(), "World"); + + StringView sub3 = sv.Substr(7); + EXPECT_EQ(sub3.ToString(), "World!"); + + StringView sub4 = sv.Substr(7, 100); + EXPECT_EQ(sub4.ToString(), "World!"); + + StringView sub5 = sv.Substr(13, 5); + EXPECT_TRUE(sub5.Empty()); + EXPECT_EQ(sub5.ToString(), ""); +} + +TEST(StringViewTest, SubstrInvalidPos) { + std::string str = "Hello"; + StringView sv(str); + + auto substr = sv.Substr(6); + ExpectEmpty(substr); +} + +TEST(StringViewTest, FindChar) { + std::string str = "Hello, World!"; + StringView sv(str); + + EXPECT_EQ(sv.Find('H'), 0); + EXPECT_EQ(sv.Find('o'), 4); + EXPECT_EQ(sv.Find('!'), 12); + EXPECT_EQ(sv.Find('z'), StringView::npos); + + EXPECT_EQ(sv.Find('o', 5), 8); + EXPECT_EQ(sv.Find('l', 3), 3); + + EXPECT_EQ(sv.Find('H', 13), StringView::npos); +} + +TEST(StringViewTest, FindStringView) { + std::string str = "Hello, World! Hello again!"; + StringView sv(str); + + EXPECT_EQ(sv.Find(StringView("Hello")), 0); + EXPECT_EQ(sv.Find(StringView("World")), 7); + EXPECT_EQ(sv.Find(StringView("again")), 20); + EXPECT_EQ(sv.Find(StringView("nonexistent")), StringView::npos); + + EXPECT_EQ(sv.Find(StringView("")), 0); + + EXPECT_EQ(sv.Find(StringView("Hello"), 1), 14); + EXPECT_EQ(sv.Find(StringView("!"), 13), 25); + + EXPECT_EQ(sv.Find(StringView("Hello, World! Hello again! And more")), StringView::npos); +} + +TEST(StringViewTest, Find_EmptyView) { + StringView sv; + + EXPECT_EQ(sv.Find('a'), StringView::npos); + EXPECT_EQ(sv.Find(StringView("test")), StringView::npos); + + StringView empty_target(""); + EXPECT_EQ(sv.Find(empty_target), StringView::npos); +} + +TEST(StringViewTest, ToString) { + std::string str = "Hello, World!"; + StringView sv1(str); + EXPECT_EQ(sv1.ToString(), str); + + const char* cstr = "Test"; + StringView sv2(cstr); + EXPECT_EQ(sv2.ToString(), "Test"); + + StringView sv3 = sv1.Substr(7, 5); + EXPECT_EQ(sv3.ToString(), "World"); + + StringView sv4; + EXPECT_EQ(sv4.ToString(), ""); +} + +TEST(StringViewTest, Compare) { + StringView sv1("Hello"); + StringView sv2("Hello"); + StringView sv3("Hell"); + StringView sv4("Hello!"); + StringView sv5("Hella"); + + EXPECT_EQ(sv1.Compare(sv2), 0); + EXPECT_TRUE(sv1 == sv2); + + EXPECT_GT(sv1.Compare(sv3), 0); + EXPECT_FALSE(sv1 == sv3); + + EXPECT_LT(sv1.Compare(sv4), 0); + + EXPECT_GT(sv1.Compare(sv5), 0); +} + +TEST(StringViewTest, ObservesOriginalString) { + std::string str = "Hello"; + StringView sv(str); + + const char* original_data = sv.Data(); + + str[0] = 'J'; + str.append(", World!"); + + EXPECT_EQ(sv.Data(), original_data); + EXPECT_EQ(sv.ToString(), "Jello"); +} + +TEST(StringViewTest, WorksWithStringLiterals) { + StringView sv1 = "Hello"; + EXPECT_EQ(sv1.ToString(), "Hello"); + + StringView sv2("World"); + EXPECT_EQ(sv2.ToString(), "World"); + + std::string result = sv1.ToString() + ", " + sv2.ToString(); + EXPECT_EQ(result, "Hello, World"); +} + +TEST(StringViewTest, NposConstant) { + EXPECT_EQ(StringView::npos, static_cast(-1)); + EXPECT_GT(StringView::npos, 1000000); // Очень большое число +} + +TEST(StringViewTest, IteratorLikeUsage) { + std::string str = "Hello"; + StringView sv(str); + + int count_l = 0; + for (size_t i = 0; i < sv.Size(); ++i) { + if (sv[i] == 'l') { + ++count_l; + } + } + EXPECT_EQ(count_l, 2); + + bool found = false; + for (size_t i = 0; i < sv.Size(); ++i) { + if (sv[i] == 'o') { + found = true; + break; + } + } + EXPECT_TRUE(found); +} + +TEST(StringViewTest, MemorySafety) { + std::string str = "Hello"; + StringView sv1(str, 5); + EXPECT_TRUE(sv1.Empty()); + EXPECT_EQ(sv1.ToString(), ""); + + StringView sv2(std::string("Temporary")); + EXPECT_EQ(sv2.ToString(), "Temporary"); + + StringView sv3("Hello, World!"); + StringView sv4 = sv3.Substr(7); + StringView sv5 = sv4.Substr(0, 5); + EXPECT_EQ(sv5.ToString(), "World"); + + EXPECT_EQ(sv3.Data() + 7, sv4.Data()); + EXPECT_EQ(sv4.Data(), sv5.Data()); +} + +TEST(StringViewTest, ComplexScenario) { + std::string log_line = "[INFO] 2024-01-15 10:30:00 User 'admin' logged in from 192.168.1.1"; + StringView sv(log_line); + + size_t bracket_end = sv.Find(']'); + StringView level = sv.Substr(1, bracket_end - 1); + EXPECT_EQ(level.ToString(), "INFO"); + + size_t time_end = sv.Find(' ', bracket_end + 2); + StringView datetime = sv.Substr(bracket_end + 2, time_end - bracket_end - 2); + EXPECT_EQ(datetime.ToString(), "2024-01-15 10:30:00"); + + size_t user_start = sv.Find('\'', time_end); + size_t user_end = sv.Find('\'', user_start + 1); + StringView username = sv.Substr(user_start + 1, user_end - user_start - 1); + EXPECT_EQ(username.ToString(), "admin"); + + size_t ip_start = sv.Find("from") + 5; + StringView ip = sv.Substr(ip_start); + EXPECT_EQ(ip.ToString(), "192.168.1.1"); + + ip.RemovePrefix(4); + ip.RemoveSuffix(2); + EXPECT_EQ(ip.ToString(), "168.1"); +} + +TEST(StringViewTest, PerformanceCharacteristics) { + std::string large_string(1000000, 'A'); + StringView sv(large_string); + + EXPECT_EQ(sv.Size(), 1000000); + EXPECT_EQ(sv.Data(), large_string.data()); + + StringView substr = sv.Substr(500000, 1000); + EXPECT_EQ(substr.Size(), 1000); + EXPECT_EQ(substr.Data(), large_string.data() + 500000); + + std::string copy = sv.ToString(); + EXPECT_EQ(copy.size(), 1000000); +} \ No newline at end of file diff --git a/05_week/tasks/tracer/CMakeLists.txt b/05_week/tasks/tracer/CMakeLists.txt new file mode 100644 index 00000000..89739e1f --- /dev/null +++ b/05_week/tasks/tracer/CMakeLists.txt @@ -0,0 +1 @@ +add_gtest_asan(test_tracer test.cpp) \ No newline at end of file diff --git a/05_week/tasks/tracer/README.md b/05_week/tasks/tracer/README.md new file mode 100644 index 00000000..a1809d93 --- /dev/null +++ b/05_week/tasks/tracer/README.md @@ -0,0 +1,43 @@ +# Трассировщик + +Необходимо реализовать класс `Tracer`, подсчитывающий вызовы своих конструкторов, +операторов присваивания и деструктора. + +В качестве данных внутри класса должна храниться имя `std::string` и идентификатор. + +В классе присутствуют следующие счетчики, доступные извне: + +- `count` - общее количество созданных объектов (используется для генерации id) +- `default_ctor` - количество вызовов конструктора по умолчанию +- `str_ctor` - количество вызовов конструктора от строки +- `copy_ctor` - количество вызовов конструктора копирования +- `move_ctor` - количество вызовов конструктора перемещения +- `copy_assign` - количество вызовов оператора копирующего присваивания +- `move_assign` - количество вызовов оператора перемещающего присваивания +- `dtor` - количество вызовов деструктора +- `alive` - количество живых объектов в данный момент + +Правила изменения идентификатора (id): + +- присваивается при создании и **НЕ** меняется в течение жизни объекта +- каждый новый объект получает уникальный id (увеличивающийся счетчик) +- при использовании операторов не изменяется + +Класс предоставляет следующий функционал: + +- Конструктор по умолчанию - создает объект с именем `obj_{id}` ("obj_1") +- Конструктор от строки `std::string` - создает объект с именем `{name}_{id}` +- Конструктор копирования - копирует имя, но создает id +- Конструктор перемещения - перемещает имя, но создает id +- Оператор присваивания копированием - копирует имя, не изменяет id +- Оператор перемещения копированием - перемещает имя, не изменяет id +- Деструктор - изменяет свои счетчики +- Метод `Id` - возвращает идентификатор объекта +- Метод `Name` - возвращает константную ссылку на имя. +- Метод `Data` - возвращает указатель на данные строки. +- Метод `ResetStats` - сбрасывает на `0` все счетчики + +## Примечание + +- Для удобства отладки можно написать функции, выводящие на экран статистики + и логирующие действия. diff --git a/05_week/tasks/tracer/test.cpp b/05_week/tasks/tracer/test.cpp new file mode 100644 index 00000000..4db2a9c8 --- /dev/null +++ b/05_week/tasks/tracer/test.cpp @@ -0,0 +1,370 @@ +#include + +#include + +#include "tracer.cpp" + + +class TracerTest : public ::testing::Test { +protected: + void SetUp() override { + Tracer::ResetStats(); + } +}; + +TEST_F(TracerTest, DefaultConstructor) { + { + Tracer obj; + EXPECT_EQ(obj.Id(), 1); + EXPECT_EQ(obj.Name(), "obj_1"); + EXPECT_NE(obj.Data(), nullptr); + + EXPECT_EQ(Tracer::count, 1); + EXPECT_EQ(Tracer::default_ctor, 1); + EXPECT_EQ(Tracer::alive, 1); + } + + EXPECT_EQ(Tracer::count, 1); + EXPECT_EQ(Tracer::default_ctor, 1); + EXPECT_EQ(Tracer::str_ctor, 0); + EXPECT_EQ(Tracer::copy_ctor, 0); + EXPECT_EQ(Tracer::move_ctor, 0); + EXPECT_EQ(Tracer::dtor, 1); + EXPECT_EQ(Tracer::alive, 0); +} + +TEST_F(TracerTest, StringConstructor) { + { + Tracer obj("Hello"); + EXPECT_EQ(obj.Id(), 1); + EXPECT_EQ(obj.Name(), "Hello_1"); + + EXPECT_EQ(Tracer::count, 1); + EXPECT_EQ(Tracer::str_ctor, 1); + EXPECT_EQ(Tracer::alive, 1); + } + + EXPECT_EQ(Tracer::count, 1); + EXPECT_EQ(Tracer::default_ctor, 0); + EXPECT_EQ(Tracer::str_ctor, 1); + EXPECT_EQ(Tracer::dtor, 1); + EXPECT_EQ(Tracer::alive, 0); +} + +TEST_F(TracerTest, CopyConstructor) { + Tracer original("Original"); + int original_id = original.Id(); + const char* original_ptr = original.Data(); + std::string original_name = original.Name(); + + Tracer copy = original; + + EXPECT_NE(original_id, copy.Id()); + EXPECT_EQ(copy.Id(), 2); + EXPECT_EQ(copy.Name(), original_name); + + EXPECT_NE(original_ptr, copy.Data()); + + EXPECT_EQ(Tracer::default_ctor, 0); + EXPECT_EQ(Tracer::str_ctor, 1); + EXPECT_EQ(Tracer::copy_ctor, 1); + EXPECT_EQ(Tracer::copy_assign, 0); + EXPECT_EQ(Tracer::alive, 2); +} + +TEST_F(TracerTest, MoveConstructor) { + Tracer original("OriginalWithLongString"); + int original_id = original.Id(); + const char* original_ptr = original.Data(); + std::string original_name = original.Name(); + + Tracer moved = std::move(original); + + EXPECT_NE(original_id, moved.Id()); + EXPECT_EQ(moved.Id(), 2); + + EXPECT_EQ(moved.Name(), original_name); + EXPECT_TRUE(original.Name().empty()); + EXPECT_EQ(moved.Data(), original_ptr); + + EXPECT_EQ(Tracer::str_ctor, 1); + EXPECT_EQ(Tracer::move_ctor, 1); + EXPECT_EQ(Tracer::alive, 2); +} + +TEST_F(TracerTest, CopyAssignment) { + Tracer a("Apple"); + Tracer b("BananaBombaOuououou"); + + int a_id = a.Id(); + int b_id = b.Id(); + const char* a_ptr_before = a.Data(); + const char* b_ptr = b.Data(); + + a = b; + + EXPECT_EQ(a.Id(), a_id); + EXPECT_EQ(b.Id(), b_id); + EXPECT_EQ(a.Name(), b.Name()); + EXPECT_NE(a.Data(), b_ptr); + EXPECT_NE(a.Data(), a_ptr_before); + + EXPECT_EQ(Tracer::default_ctor, 0); + EXPECT_EQ(Tracer::copy_assign, 1); + EXPECT_EQ(Tracer::dtor, 0); +} + +TEST_F(TracerTest, MoveAssignment) { + Tracer a("Apple"); + Tracer b("BananaBombaFlySoGreat"); + + int a_id = a.Id(); + int b_id = b.Id(); + const char* b_ptr_before = b.Data(); + std::string b_name = b.Name(); + + a = std::move(b); + + EXPECT_EQ(a.Id(), a_id); + EXPECT_EQ(b.Id(), b_id); + + EXPECT_EQ(a.Name(), b_name); + EXPECT_TRUE(b.Name().empty()); + EXPECT_EQ(a.Data(), b_ptr_before); + + EXPECT_EQ(Tracer::move_assign, 1); + EXPECT_EQ(Tracer::default_ctor, 0); + EXPECT_EQ(Tracer::copy_ctor, 0); + EXPECT_EQ(Tracer::copy_assign, 0); + EXPECT_EQ(Tracer::dtor, 0); +} + +TEST_F(TracerTest, SelfAssignmentCopy) { + Tracer obj("Test"); + std::string original_name = obj.Name(); + const char* original_ptr = obj.Data(); + int original_id = obj.Id(); + + obj = obj; + + EXPECT_EQ(obj.Id(), original_id); + EXPECT_EQ(obj.Name(), original_name); + EXPECT_EQ(obj.Data(), original_ptr); + + EXPECT_EQ(Tracer::copy_assign, 0); + EXPECT_EQ(Tracer::dtor, 0); +} + +TEST_F(TracerTest, SelfAssignmentMove) { + Tracer obj("Test"); + std::string original_name = obj.Name(); + const char* original_ptr = obj.Data(); + int original_id = obj.Id(); + + obj = static_cast(obj); + + EXPECT_EQ(obj.Id(), original_id); + EXPECT_EQ(obj.Data(), original_ptr); + + EXPECT_EQ(Tracer::move_assign, 0); + EXPECT_EQ(Tracer::dtor, 0); +} + +TEST_F(TracerTest, VectorPushBackCopy) { + std::vector vec; + vec.reserve(3); + + Tracer obj("Item"); + const char* obj_ptr = obj.Data(); + + vec.push_back(obj); + + EXPECT_EQ(vec[0].Name(), obj.Name()); + EXPECT_NE(vec[0].Data(), obj_ptr); + + EXPECT_EQ(Tracer::copy_ctor, 1); + EXPECT_EQ(Tracer::alive, 2); +} + +TEST_F(TracerTest, VectorPushBackMove) { + std::vector vec; + vec.reserve(3); + + Tracer obj("LongNameToAvoidSSO"); + const char* obj_ptr = obj.Data(); + std::string obj_name = obj.Name(); + + vec.push_back(std::move(obj)); + + EXPECT_EQ(vec[0].Data(), obj_ptr); + EXPECT_EQ(vec[0].Name(), obj_name); + EXPECT_TRUE(obj.Name().empty()); + + EXPECT_EQ(Tracer::move_ctor, 1); + EXPECT_EQ(Tracer::alive, 2); +} + +TEST_F(TracerTest, VectorEmplaceBack) { + std::vector vec; + vec.reserve(3); + + vec.emplace_back("Hello"); + + EXPECT_EQ(Tracer::str_ctor, 1); + EXPECT_EQ(Tracer::copy_ctor, 0); + EXPECT_EQ(Tracer::move_ctor, 0); + EXPECT_EQ(Tracer::alive, 1); +} + +TEST_F(TracerTest, VectorReallocation) { + std::vector vec; + + vec.emplace_back("First"); // 1 ctor + vec.emplace_back("Second"); // 1 ctor + realloc (1 move) + vec.emplace_back("Third"); // 1 ctor + realloc (2 move) + + EXPECT_EQ(Tracer::str_ctor, 3); + EXPECT_EQ(Tracer::copy_ctor, 0); + EXPECT_EQ(Tracer::move_ctor, 3); // 1 + 2 move when realloc + EXPECT_EQ(Tracer::alive, 3); +} + +TEST_F(TracerTest, VectorWithReserve) { + std::vector vec; + vec.reserve(5); + + vec.emplace_back("First"); + vec.emplace_back("Second"); + vec.emplace_back("Third"); + vec.emplace_back("Fourth"); + vec.emplace_back("Fifth"); + + EXPECT_EQ(Tracer::str_ctor, 5); + EXPECT_EQ(Tracer::move_ctor, 0); + EXPECT_EQ(Tracer::alive, 5); +} + +Tracer CreateTracer() { + return Tracer("Hello"); // RVO +} + +TEST_F(TracerTest, ReturnValueOptimization) { + Tracer obj = CreateTracer(); + + EXPECT_EQ(Tracer::str_ctor, 1); + EXPECT_EQ(Tracer::copy_ctor, 0); + EXPECT_EQ(Tracer::move_ctor, 0); +} + +TEST_F(TracerTest, MultipleObjectsConsistency) { + { + Tracer a("A"); + Tracer b = a; // copy ctor + Tracer c = std::move(a); // move ctor + + std::vector vec; + vec.reserve(2); + vec.push_back(b); + vec.push_back(std::move(c)); + + a = b; // copy assignment + b = std::move(vec[0]); // move assignment + } + + int total_created = Tracer::default_ctor + Tracer::str_ctor + Tracer::copy_ctor + + Tracer::move_ctor; + + EXPECT_EQ(total_created, Tracer::dtor); + EXPECT_EQ(Tracer::alive, 0); + EXPECT_EQ(Tracer::count, total_created); +} + +TEST_F(TracerTest, DataMethodReturnsValidPointer) { + Tracer obj("Test"); + const char* ptr = obj.Data(); + + EXPECT_NE(ptr, nullptr); + EXPECT_EQ(ptr[0], 'T'); + EXPECT_EQ(ptr[1], 'e'); + EXPECT_EQ(ptr[2], 's'); + EXPECT_EQ(ptr[3], 't'); + + Tracer copy = obj; + EXPECT_NE(obj.Data(), copy.Data()); + EXPECT_STREQ(obj.Data(), copy.Data()); +} + +TEST_F(TracerTest, ResetStatsWorks) { + Tracer a("A"); + Tracer b = a; + + EXPECT_GT(Tracer::count, 0); + EXPECT_GT(Tracer::alive, 0); + + Tracer::ResetStats(); + + EXPECT_EQ(Tracer::count, 0); + EXPECT_EQ(Tracer::default_ctor, 0); + EXPECT_EQ(Tracer::str_ctor, 0); + EXPECT_EQ(Tracer::copy_ctor, 0); + EXPECT_EQ(Tracer::move_ctor, 0); + EXPECT_EQ(Tracer::copy_assign, 0); + EXPECT_EQ(Tracer::move_assign, 0); + EXPECT_EQ(Tracer::dtor, 0); + EXPECT_EQ(Tracer::alive, 0); + + EXPECT_FALSE(a.Name().empty()); + EXPECT_FALSE(b.Name().empty()); +} + +TEST_F(TracerTest, ChainedAssignments) { + Tracer a("A"); + Tracer b("B"); + Tracer c("C"); + + a = b = c; + + EXPECT_NE(a.Name().find("C_"), std::string::npos); + EXPECT_NE(b.Name().find("C_"), std::string::npos); + EXPECT_NE(c.Name().find("C_"), std::string::npos); + + EXPECT_EQ(a.Id(), 1); + EXPECT_EQ(b.Id(), 2); + EXPECT_EQ(c.Id(), 3); + + EXPECT_EQ(Tracer::copy_assign, 2); +} + +TEST_F(TracerTest, TemporaryObjectInExpression) { + Tracer a("Start"); + a = Tracer("Temp"); + + EXPECT_EQ(Tracer::str_ctor, 2); + EXPECT_EQ(Tracer::move_assign, 1); +} + +TEST_F(TracerTest, StdSwapUsesMoveOperations) { + Tracer a("ThisNameRequireLongStringToAvoidSSO"); + Tracer b("LongStringToAvoidSSO"); + std::string name_a = a.Name(); + std::string name_b = b.Name(); + + const char* a_ptr_before = a.Data(); + const char* b_ptr_before = b.Data(); + int a_id = a.Id(); + int b_id = b.Id(); + + std::swap(a, b); + + EXPECT_EQ(a.Name(), name_b); + EXPECT_EQ(b.Name(), name_a); + + EXPECT_EQ(a.Id(), a_id); + EXPECT_EQ(b.Id(), b_id); + + EXPECT_EQ(a.Data(), b_ptr_before); + EXPECT_EQ(b.Data(), a_ptr_before); + + // std::swap uses move construction and move assignment + EXPECT_EQ(Tracer::move_ctor + Tracer::move_assign, 3); +} diff --git a/05_week/tasks/tracer/tracer.cpp b/05_week/tasks/tracer/tracer.cpp new file mode 100644 index 00000000..2ccfb417 --- /dev/null +++ b/05_week/tasks/tracer/tracer.cpp @@ -0,0 +1,6 @@ +#include + + +class Tracer { + +}; \ No newline at end of file diff --git a/cmake/TestSolution.cmake b/cmake/TestSolution.cmake index acc27ee1..692da330 100644 --- a/cmake/TestSolution.cmake +++ b/cmake/TestSolution.cmake @@ -11,6 +11,16 @@ function(add_gtest TARGET) ) endfunction() +function(add_gtest_asan TARGET) + add_psds_executable(${TARGET} ${ARGN}) + target_compile_options(${TARGET} PRIVATE -g -fsanitize=address,undefined) + target_link_libraries(${TARGET} PRIVATE GTest::gtest GTest::gtest_main) + target_link_options(${TARGET} PRIVATE -fsanitize=address,undefined) + set_target_properties(${TARGET} PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_TASKS_DIR} + ) +endfunction() + function(add_example NAME) if(BUILD_EXAMPLES) add_psds_executable(${NAME} ${ARGN}) diff --git a/grading/deadlines.json b/grading/deadlines.json index d9138f50..630f54c1 100644 --- a/grading/deadlines.json +++ b/grading/deadlines.json @@ -131,5 +131,26 @@ "max_score": 400, "deadline": "2025-12-26 23:59", "description": "Комплексная амплитуда" + }, + + "tracer": { + "max_score": 100, + "deadline": "2026-02-16 23:59", + "description": "Трассировщик" + }, + "string_view": { + "max_score": 200, + "deadline": "2026-02-16 23:59", + "description": "Представление строки" + }, + "cow_string": { + "max_score": 300, + "deadline": "2026-02-16 23:59", + "description": "Коровья строка" + }, + "simple_vector": { + "max_score": 400, + "deadline": "2026-02-16 23:59", + "description": "Простой вектор" } } \ No newline at end of file From 6f99537988b32bb5a73b9314ae12a86358e693b9 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Sat, 7 Feb 2026 19:52:02 +0000 Subject: [PATCH 60/66] Auto-sync: 2026-02-07 19:52 --- 05_week/05_memory_move.md | 6 +++--- 05_week/05_memory_move.pdf | Bin 0 -> 316119 bytes 2 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 05_week/05_memory_move.pdf diff --git a/05_week/05_memory_move.md b/05_week/05_memory_move.md index d0db6d25..5cffaf03 100644 --- a/05_week/05_memory_move.md +++ b/05_week/05_memory_move.md @@ -335,7 +335,7 @@ static void inner_helper(); ### Внутри класса. Статическое поле -**Переменная внутри класса**, объявленная с ключевым словом `static`, иимеет +**Переменная внутри класса**, объявленная с ключевым словом `static`, имеет статическую продолжительность хранения (static storage duration) и внешнее связывание (external linkage), если нет inline. @@ -803,7 +803,7 @@ Class& operator=(Class&& other); класса и выделение памяти в конструкторе и освобождение в деструкторе. Пусть экземпляр класса создается на стеке, а данные в динамической памяти. Копирование по умолчанию подразумевает копирование значений всех полей, в случае указателя -скопируется не данные, а указатель (адрес на выделенную память). В такой ситуации +скопируются не данные, а указатель (адрес на выделенную память). В такой ситуации возникает проблема двойного удаления по указателю, так как два объекта имеют одинаковые указатели на одну память и при выходе из области видимости объектов в деструкторе будет двойное освобождение памяти по указателю. @@ -842,7 +842,7 @@ public: ``` Когда объект больше не нужен, а его данные нужны, или как минимум нужна выделенная -память, чтобы не выделять её снова, можно переместить ресурс (память, файловыый +память, чтобы не выделять её снова, можно переместить ресурс (память, файловый дескриптор, сокет и т.д.) из одного объекта в другой, а не копировать их. Это обеспечивает значительный прирост производительности, особенно для объектов, владеющих "тяжелыми" ресурсами. diff --git a/05_week/05_memory_move.pdf b/05_week/05_memory_move.pdf new file mode 100644 index 0000000000000000000000000000000000000000..4bb2c3b558627ed3e858e851016aff3caf0691f1 GIT binary patch literal 316119 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ξfa~ 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≀RA)ePKnqa|h7KJ%v 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 a0WN$ z<7;C&rRMwnq>%6PdGcy}jfWdM=dE=;*|A?>3~kUXdS_SFhsricAL*r3R{%T5CxNcLlK$xr z6QVV|IbL(^7oQ1cWTlZ?1RIZ96hmf`(jvZ3qHYeC%rBb3-Q~b0=;~INT6DhZW`%W?BIBm(=hr>055HwhmJhOt?GEIstUs@8#S@|Ed3}7?`Tw63Vrr(Ub zROquYqw>0L@9ogWJd?y+490;lnl#nZ3u=`Zh2#f_w~rdXaeCNVdgeL72Lp3DeTqJU z$k6)#<#MTo-c~!Zh(X$*=_9t^K3*mBRg{RL$XF9;i7c{?3uj^Q;$3+d9NznciwRE3Zb|L_ByL8tIu86P6 zPB`5Z7FVjDH?hC~?KxL1oC5x^sgJ4C2qSo@h@07HoL2ew-X+JA{b^n^xMsL9+$)9& zl+B++*jz^q&w$~q>fORh_Ex^69JzeG-YWWua0a}NSxs80F45fMn`qkG9ON(KU2Iv8 zWrDRs!`(mM`^6R@-;X2J;Ox)4N}d8nS+m#zp#W6i3n|{C*4b2{FXr$fM*9X0`kG2?f@-M20wcvnxHLfkCnz z6N?}-dM@w(f?Y;t|1A@OqwTq(5h(`bqh^J^i+H$l@BxQ)ISS|Y-dGPzfQ3zKcuw2? zD@cEQblY-Q7dYxEh2jNKh!05JN?0Ts#!rIp558#^aC9r7=|7fVER3F~H>N_y1g1a` z+4pG{Ae7{Fx{OeDOvtRv{y}Rywomaq2Q_-6v*IB}7Ks7%_Se}$-nEZ>qLOp!se5U5 z1!hDX{0DM#Byu%KcK;&!+_ZLZl}Q;GwfG(V`t;%BvHxunF;F7oWE6r%?J2y;OubWq z4OQiWifm_*ls9uo=$!F}P_+mPZHSX=0HRX|{@Yvtt)9hviO^C|<1r(I7j(0KP2p5U z+!iCHqmjkR$4zVR&bJFQU69==|C&Ca@MXJXaM*oDM5&6t)m+B@&86{uaGNR4pmR+# zYb$EF5j7Ih#a=siI9W@^aSD9Pc%#zXrxVKgumdjn#83oRqY*9 zx&n9uX=XKru=`g$OCpkWTe>29;l1|d>7#>Ed-;-unDfhElq|8esnbAtdI;2yfhd_K zYa+8kGiGTx2w-K?Le$o zPV)R=y{KBMC;An%wH8Y4pY;KF^FPngPvB)Vvb{S?&*!^W`$$f7`$#aPA=}0l$P#J+ zJzO43jSzPQZGFV@*MQ}QE(i+!zf7bQHw~t4z(U68OC1G&Wc^~S?nG&SV&ozEcE&ra zGJb(X@&H}4bdvNP!)xK`JyYzSb8Qsd&8PBm1gPcq?D!QT9=$>EqgyWMIxaN^meZ3lBoslG9y?5UXWvz*j9gQ9OGRbyeaun#LD~N8ZowH!PpX zFXLTl@YpWN=k2>y!h>Mma*Bs~TM?>EvKb&Iyl!C~#C7acmm@daEq59f7>$t~&-W3y zk4@{!Z9?I636st2>W?j5)xgFCuRW!zr&R|RbXOLaww9C1Jkcib&}6D~>q$dtduX!!V0{2vHOm`{kI4Vo^#ZPO!>n$O-qE4a zjjVoLJ+~6cCA}49ZX2=xces%BONnQ>5ID@S=}{L}S;Og#gEn8)y52F|sFmTVvx;?X zvAUTD-BKn+)l!BHwLWYDg~7_G8gsL_dJP@CL7NR(mj-dIt8p3D)ZI3vU7Z8mbfP7F z*AQlWExX;6fm-_?SxOdl#@ZzV=gu_i+a^G&rdh!z!GZ4=Rd>NMhTYED+m>{h?dn%x zH&-p8eVSKbwJ%vgFw^Y{yl;n@b5~J5Lvjh7I%#KzZRF_LWpXvEk3G+QS8vR#rst*A zSu7!3 z)SE?ItC}9Eq0MB@7U#K^&MKa4)o&$KGQo0_Iv$#}{48lWIBhM;j97PXnD$YGHb~|~ zKi~Yl5t<0HQ`35BKvua|F9861xwf4;vBSd`$B_?fLGFP!oOJ&7vrG!l8QXZ+p$`ZO za(dP7Q4eGXD@^&f*Qe^?Zfn7>ntyAJ-F))DR4+_fhw9;@PPP_PSA=V&U8{xHbetwz zW}8^8QJRP8KjhdK^%7Lk~)U2Lwc*q*B6!v`{FPV#ghL-xxZH7t3%B{vUYdy?Bc z4$cUp#jR(*qlI$%gWMah7fiHqsu(=gg$+X_KgldUEb;pduY$c8<{la#4egf*g zCVG3CX}fmC&%N<>sHKft8_p15+g*+HK~He?Y@akJ^(`|Or&deS^ij|;Ivs-E@yc|e z1x4tOmCMmYkLhlPMEKml-oN(gpcd7`XN)FPf}w#v8Z=DWwxO|0^T;M&P)sqd^^yJ; zYdy?80q#!snccE4wGllW9fRY=zrgr-2XrobfjxQ4`Hl{qYpdj!#h2)I&Ux&uFfDs$Vc~mFnV8GavL~FW_vHx z_4&1c(pp9fkv(%CRwQag3}Mc1@#@uklb1U+zlKEAvB0?&VR+PP)15|dn;HJO*vw|En`|)I-t1>bq}#Y4 zM1UXRZ zB(`{i#Gs^pfv8fFBG?U*A{@9QH%Xz1`fC}vGXhSV#5jjd62c=23GsH(qy`>Gk@8_( zXg|Z)*{Bi>ih7(a+F`sGOkv|ZkuY#3*d((A(JaGQ9ylUKc|+yEEZ8Ks6f)jG()*?M zAqJ>oSepbd4Sr}MFn*i&qb#N9xl>ignURpg5=4f&KaK?vWg67+xn)Ea%aTzP6=508 zWbThbLwE{}HP>v^6KMKtDXQ8OeGQq@aAjc`&SZBr)4LY_j15TH4Z4c)69-8Vi+U>e zEE&oTrJZUHTp<-C9t6cjddLFi69g&q<$|i!z7b%OO5CkYlCC{2SG9XhfLQxpedgyb zR!k1uEpuX4Jpc2{GBgM!2LGPkWfjCkn6lK)EfY>~#tw9U)mk>xbz40b(JY+L22yj6x#c`LST9BXVGk(Up zW|KqxhClH38}uWtI+2*^v(G6C3Ebku({500u$8d&TXLm`$KjS*MX%-=_hERQl2pe9 z-zr_ls3bRtn+R~gi9-~yMNi>DlcIer(}H(f8q?Wo^f5REw&r@w-R%E$iThd%fv?%| zH56AmDX+h9#=fZMb#b&nMKULoo5k;~O>`4x=+F>a`9T#a?ppkNrlBD2y$wZHh)I5| z0seUfN~-Btq- zi?SnDDfvmHK|zdM7~#fCwV4>q9si2@=Aj>PZsdE;c_L=6Na>(4hp+3N9;UOryoLGu} z3CD$MwXk%Qf*$D?R=f!+cqCYgInFFaK#%Jk?8Pg46W*G0Vi?;GuGRSRRE7K%b!v)VQmsy z3u!k{5f0^p^ZicxWaiKh?V_pxB2MOfqCd^AGiw=EMgf#m2}(==uZceLk~Q{_F8UT0 z6QL3r6<&v+ZOX&C5)3QiU z#^Is%H)7=Y?(3tBegJT24OA|Rl2;JRe1>f0JT)JE0ZnFoHBld zGk&pEOG)HN-(GVv+@yuh&UtN(*4k=|Ilt0#M>CuhP0slFl?mjlen;E&@7L3b?lDUq zM*_(l(ImKA!=fB=;wJ-{sTt5Q1GIM-Vsg$*&5uLpVh;&?%ANzIYO8MGVk>-9?rJL| zzqbj@BJ<*bAFlibi#2Wv|CBtWAQH?nGE|+?29(f==b7XQU8Kl57}p+cF+SC7w_`bb zqOPD#I%f)=S^+ejHu)^xRRb74!5rQq0~j(A=>FAJZ*vFNbPUkU=>p-@X{-KtiNA0i zc7`x`)7~HV2J1m)XsBKknxS1T-j+?W-cH_4vaH{?Rr|O-Z;1llc;&egHMgjrdH-Z1 zPh)BdRVvQhOP}fQt*G7C-Seou*9ip*-_&&0>Cn$JCl_-9;@y>+eX^ICbB{-A9ZlB$ zYCt+xW1#mIOkWkI!emd_4_v}S#L?ir%U$aOx4?5Kci6vv2~nI}`~>S;7o-+lB#3`$ zpU_u+mfrW082{vaKq4dx7?S<*~;%j~$p;pMumIxvU@p?13NeA3wXo0W8XgqKCCBj}8V5fxXu^Th5!-hhKmW*_CXQ)u0p7Nb0`7Xwl##`> z?(UZ5fEqA~Of+XFlMhN>M2tUt&nOKVF(OPLhfG;$zv~T2-XLbgIfO%o7L3bW$nf!D z{f!F;h9BEb$`W6RKiyq$mwyO9Lkyaz1U(uBgFysA-qkOVaDy8Dih`4(hRVpomCdq+;t)TUIRfkuS}GN;N{kd zqVAm$X_g{#@8jW8^QKivKW5&;gNtTw&nq-HzpFP^NZT@|w#Z4}?(;6};r%7$b5dQGyjVaVXio_b0 zdl`=-S3v&=%oRo&SKtn}np+36nw4yr5l{N+YGm>BFk#N&>Edfr0TipyllW7h&o_1{ z(*q;zQQIh`mn}L7zVlVvyCPc~N{>x)Kt}cpS#HFdZ}Nd|4|$g7pNUs0Z zYaloF&vRn~O*eohK{<6@_i4|3av5<>RGzRJ&XhcktvWkt9hSPmGI2`-#bqjL;4<+p z)?9~z!A=7pe?K)O(GF(!>o9)AxexHojXpK7W=8nuXI>k_Xh!%G>^SGwUQ=_EiXLy8 zmCI|IKwA{d6|M$X40#!ru>OS?I2R`ZepOAZ-`TWHM*8QlKDBqY8y>aEhoOp0P`6$n zquEN+ZmwARGd!9`#_VvARn80%{v{4*?^|G!9_F*E8znvH_w6JRI1;{*YjQ9%YDw4} zI&Va-5gaMw?F`SjL0VuWm_jU2WZ*AIYzFzPmdw)Znq8sW^f=4DM_sK*`t#dT{MB2P zsH+RZ*wsJ=^c;ST%KT1yQtfg=+F;t(-RApVbm6PM4vHdsgf6X_tda&n$=)|qR;N1_?W=?S+^!>Ns4p~oUl{+l$}w2^~+nP`VwU*fOg!c z9E%rzeg5v%1|p7p@Ub2Ne=k~CTy zuUZ)>NYEUEQKW1MFXPh8hxxy~+`M=Y09`CeeliV^E6LE-=ou{{SnU=Oj5dw4!zPWh z+vk7o#fb|x#e<%rlai&if2DAP&5M;Qca^NN zqp(a_kMAHwm^K@axsoHM6@1ihOa zD*0UkpQ+ACjssvBz$e~lc{Q8LbDrki80*|DGr(a{W@Q&(tZQ`hN@zeLd&}DU1ny{A zM=`WN<%d;5?yPjvV~$V^P{C;+#GCUTU6Vzk*^(d6zLSe$>Z#K4)G6OqP~7(m94aTMs5S&-JX8(i*yC1U;ILe^@@3uT8gV zZj(wDx>AV-8{eLMVB{Ql;##WXSgvv|*Ev=h+^7%E)Q4mn!Fi5ixx}zu0v5Rcvmgi< zIhO0V{=b_H9IEy%)r~eemSMGVEWvGXETgbTGyEfsrUiO}uMRbs-R`O|-JYv3TRfIw zb$Bd$L}(^z$!9yhi$q9mcr3S)(fZpwmW^IDYfvjRA@)a_@jw>=_!>1&`mk5(XA9B|Ku!%)Cnr?ivE3>##-H=7^rY81G!lfDOz=@$e zP$K4E}|LZbZ|1bW5!d( zb5{b5^QAIW=w{`1Z==#+h0sO8j@c1bUnRI zor-1Gf=6=^;?tetdRbo0E**okM_lb>|3_uQ#CxrRTA;{-j|RP=OLNmpT5*y0@I_X# z8m&D^;MkIC$p2WvV#dhZg;?zg6GGEEGsX7TSf{1SdKLI2U(LmE#?E!^0up4Y4ndZS zzuh{-K)HzR!)2{f_{08X?E>HL8GRb1AcvGPkqrCi6?6Rm+UP`(l_J1V4cHDg05IVX zD)pQSh`d!dAp{}(qO^63Q*@sJ%opf>%PRfX*6Uw;Z7@Lxe7|El1vmgo+ROJl9a2oD zIEM}KURz|4kzNXIydBS<0ef_)QEw6)_ISI^KLFC!b-kTnfDL-on*zr*-!4mN?=fDU z<4L{^1DguZg-fdt;yT%b6-JZ{O5&yruA@$(*6Ru{3}T*1wwzm=;38|&9@^&PtO`W$ zRR6)ezpwua4Gh7c{p;6KRq?UFC~F$|MK{9R%SP*MmonuUE>n9Nhb?$l3Q~tuaYidw z5YSP~k+W1`j(Z$s&6f7Ro5KWaxTsRt)EFsFhJvG`ALw{I7qT%|+pA`px>QPClh$1K z_(uY!zt&y3iYSk|(?s>-bZ_&uxB~GoCqZj6%|q6Euoq7(|58T+9;~rvYoCs)?mN5I zdEe(*@3S78iVS**IrA7W(9~9921G@wMH(Z$fWzT&x<(IMjt5%pfhJA7dq=rt^(cGq zyGv_RvSxhK7u0MK7Lw9)EG?y2WhUN~WfC36kLHG1C>P!=;(tYwsz|PU5%+8dm{Apv zGlVfLAsMGpgRMBN3GOoork8MKz#5f`q%s++*V$DRjLVO%aFv~h4Us|~jp~Xd=9Us= zD4+AkBt%t{>U7&bmc#J2%$-HV!NKV8IP6wlNV83x1|&rXbhsSlHPbn+wG~_#upNiv z)4ZgD?!9SqGd~zulzX-6ud>5w*>B32p%w2HN{Q=OaMLI|Ywdr}R*4Fr(SgkxK zTnT!k^5C@!J*vk6e7r2A4x3}#Sq`uTyq|KzE$_ESM9^K}p=2)^qmEGYWgTPj6T`umo7 zuG)g6ioBGMYy2RDrBgYQ1$1^Z(RXNN`dL5=4x;Q>o(E zl=eILBa(|CzY2$kiFIWPs`j7;t=p1HQKhY7iXHJ81M>^=w;1JST#O?I`X0_gtghFA zY)pI=N}UZ$C#MeIJt0f1uQidrX0iaU%EAl~LSphcs6-|pijZnTaHcd>-r+W-r=`dVa z2}8wvZl2%zf$2(h)^P_N2qSeZYvc0%nbFxuoK=$1%saZT>5F8EVd|uc%t7}+xz>_( zT1qc;YEHzj!=^VLF3Vo%Y=EmJ3up1RToH)3*!!XpQG$1sGv=NBk<(p1x;NY4sM5Y< zwfC^7;aOEkTs+Oz=7w<(1QF`vc%~2hY;NPJqeCrL$>pa2(IHJg%ap9GhTP%lTd}ed z^oP^=pb~~R@_M11QAd5&iNo3AaXo+4IO=M8U?V%=So|_8;bZgrG$Sss>j!49jYZ+V ztLk9+pH+3Rv#>G#-&Gw;I(o5I<)!DCMzEh&Q4MkTzM*`NcMzmL(Pk=9qqDw%Qfb2|rR|Qw z?;XujggQdX0~WmAua_g+AN$XP``Jhp3C~E%G$)+QLJys!OBmkAFp&6RE++VLHV{G9hchE3P1kQUaKBGJ-^Pk+tV?__v=||BxO}P zu`do04*%EJJvm(M&d`rE|62GU5&~uT>?L^RLqJg4o z{nK>~M(sLSADmDmMajY{K;_gqfTG=>eO5@>g(l5pHwpVg?Sg7Yv5N4_9D_yJ37*P& z1iX`KWWJ+v$!;kc@kFJmFsIw1P4Q(EKpog?_vgCWtklIV1@2XW3;+3M$zqX-81idloVSzeY2V5mSg#_Lfm-3Yx<<8w0 z(s{Y!BH(i$x1kx@@#%g|iJur z(+HIYfg7Do%~NrJiZZE~dxi|zcA`UFM|_PPokeGwKYGi~Nd}1ypUbo~fWR%Qw6ZZ)VnGx>^N3k}}R{{QG zl)Q8_OeJ1mknoE<;zaj?S9me)lh8BPY)JWR%dEjr-N&m}+`Ft+vb+3`B-}-^l+K~3 zWO8*EgETG(mxFJF?7a8L?A=NjU5Fb7^gdfPON{ZCtp<+YSt-1^cr_&LQ&>f$Q2Q+U5bahevo{WXfmw< zSi}i8nhUU3s|pvxO~r$+Spun>q|;3EW0!(pnypiGPg~QFhs4biLopbw6A+E0q{R$T zTEeBGmf8B7LM4xb$xv4+2#TofbF(1y6S+R zCS4{tQK#w>-SowZ_ueNeb+(ffPGmnq5T2RRFI6(wjACA*kC-!+i<;SZI;MQhvf)D5 z?cCW-&NVyjc9R(0kM{!1Z-8vOjASh;P|C{_%cx+>pDi`xqz@O?=s7VK( zw6;#C6Ydc%#eLfL%&8uhha{i3NY!1p|3J&TZYvq>=)QsJsepAQ?FnZ#PDDRhSOn~4 z$59Gdb5jpuO$9?Fm+3H6@C3rFtiW?Kz^a|wsqL+ZQbYSyz2N!uUKrvGJT=vXSlh(PrT!W8FJRtp`Aw|i zO%)E!0|Eo@^?xz;jlr1(-MX>OH@1_BJxM0EZEIrNw(VqM+s?$cIpG`IxjEmDTjx}r zx^;haukKa5ckLg&_wJ?V`De@=H-G;FX5%@0xg=cG)aa@y-z*B!u4RV$uS{w?4I@Z4 z{#vSe%3td3TpOXQoj*r3=Wj|R?(Bnd)@`*eDlR~vLO--U%1m}sBF^zX-GNXgrjy!> z;peFu{mm~zX*V(1;b+A^m+JwGYe#;T)0fLTaorE;57@J|D!!SBL>f_5Np%`q7R4h! z+|d|wJpmrYZ4%dp_#awqB=X8TZT1^*w_1XkrJK?DW+7csf*XS()kWF7XK2^e0oC!z zl1M{82iz&U7d4^kiNiPdNkhYFWh;B(Le)n7G{7;Jvj-$y32>3eV`(kc|EN(lT}q{= zLN6^^bw|&3`di2~Ol9s-Z>XdD;o}LuUr6g!sE6Ox!BalHd^FwzQa1Q+n6x$a zE3GEJ9sSkq59tBSyM=STWK1^<7Q5J?9r5cp034#FcEXtS9qsbx6hRWD+az7B zJ_BbdUR>uijA3u|16&lgW!QHawsq>U17dLIT#@`7{#DbKbTsQ525Xh4|5WFL$e(zY zpWqyJz#>yEP{%$je>R{}ILt_jjH3-$1Z`rUFiyh@=SFJ5(4C zcqYO<*BnnFss#O{_1H%LurUc}VB@&R_P45;9&OT8nS z)C+of^AzQtMvY^GY6>MQ`joremd)?5h^Bn;18vG7`7m-%QzRY|VKkdRenn(Us zv9EHYR4fY?l?R8puHz}+RVu_53}_9$!nq|aK0%hAq=L_#6$~0L!I(EBsjy(^7(B{B zyWpV@{s!W&wA|Y9{dzH~hK7U*e3lcb%_a-3_d88$ph?n#+xB4Ep@b(_kY<6-zXOPS(l zj+4A|T1j7e3w$eA{c(M?x}XXcOi}ALp?o zd34VVe96SQp8_;5v&#(D1L@=!rZAUFW~fk)FjDB8TB?-Yo2AI(sgiY~Ku9Q?9Jh4p zNZLB+|C)?}m}Y3zpZR11CT-`yQg=)syJExM(`YrqtHC-Ke_aA{TFZr@yKRj7y^1S^ z?_KSFRu~bTq{5b2&~Q|&!sa9-b`+~=b*9Z({wBsBC$~a2wL(}IvVQ2>C#nCz$YWSG zdZrt#k;#Y?*}X=V?)J+dMnI+Fka0+j{|9EiqUi`79n)J=Y9Y480l$O&7A48L;CeeW z$63__ML2@ovgR$%k4GuaI-jg@uqjp#dB524z=!c8pCd_Hc>fBnM>!?UzAoY%u4}Sc zuLD+dm9WyexP-(dB5$_Bg>oiPuVGOlM8AmnMx{PI|wMp8Eh>Cj2e>CgB6u0WBHKCHd)yRjY$BarSE<}O0|qU_Zjk_{;+Lx=FVubVOgGM8`%fcJ)riqo&_y5N z-`!U5cjqwt#A?(36g0wTTI%9x3@ltDRL8xcXkAg^$g5V1CDV z1M)unr0>h2kbA8hKVSsr)Pi@`*~s2S3ghL+xaJBU&WK#}nrh?T|G?cM_UzXwWoMS~&ntf5j|U_8hj;yf zAra67I+rOD#t}HpJl(xUgF^Xh&NHVQBReu6_K&k5MyCG@ogmo9{vf57q9E{30Zlcp zXpwd+{E?W?OB%>qOiVBD>JD%d@$o6~B4uTD=b5TDt<{E6*I???Kdba<1Y%^6z9z=L z_ZJE|xODLKt?3-D%plc9L79chL+O2o1&QX9Y}<^!0auTi3DDy&xrGHSR+if30>-Hq z8ba45C>&H=;`8MLM%=v3nC(3^EY6CCi?Yo+$B92N4*g|x76M<44@_L5!kf=(*fn*G za2u}QCX7MC6~xgt^UkR`o-pcC#h@&>k>T%B@DO}_W1CQvESo;lM}a!By^>f{w9;dV%Wchq^~+n6n3uV(A8#Is}24)nbi@k zE56PI^-X0e>$-Z69KN(HoH(B`<2-{j3GKicm{_n#_hLqoRz|{* zU11~w^r>}omw@XbwkYY$EwcfmodJ`^3f}5Wsbk)Yos~{YpE%al-7V|C{Z@S5<0F$V z5b2E*^}LLZbxUNQXlzQoD&Hi??!=H8X9*HBWdPg-2I3x$vE7DN%CRE zBIemzL5XaK5S(+(<_(&zh=0zw*DM3+9tAq1X)>?rF2gl+d}${cmnZsV&3p zUCiho%c9TrbT~E*V_NI!c6RsQ(lrz~$_eNUvdoww+QzihjPv-)35~ShQ*OU`XET;~ zj!6&6c?oO{Ce2;5iBLa8DR-XRH#zEG`6-U?HplzkXGApY=a-6qk-d> zD1m*BIHZ^wzQQuXN%trpeLgHAlJ+YO7?9#*AWzTVsg_V_;c#rW5oN^dxQYSEF)q<% z#Pj%yf=v&T-^;061rITrwfvMx8 zG08mI9tq=H?Wu$L>tCvXL8MK!t_DVI`@ zd3%8ShuF&U2EjP$+jg?{iAsp~mLiQ35z~MzCNvOj#{X)V2J+0Ql$U3Z)<_KN(2 z1h`e`Yq!mMsp8rD1VleL*8iY=BoPB2`oVP)Ke_N}4BHH^C+9?r{NrXLr(urb2bWe{ z{!gC%q>xpu~Zd<*JX2g zpp9O0X1lIAehy0wB>zL??nNxfs0y3(+=knXo0Ua(^Y}$gXEZ*ji+%HqYwp#+BD8uX z@v+b*{$NW({Y^Y}`v>43*5MWJzZ6}+Xh(SF_HH97Nd}<~zv-yS1F9w3jp5>j*39AJ zMxq#M2yFhkVqTu-G{yiJ!I=_7%s;`?4G-LySQu=p$=a2`MF)qwX5m$f$&hgy?O1} zH@U!pZgU@O@CHU%G0w@>;f;j`lH}jZijB<9#Dn^!Frm|6wV^I~CMVSPTsGbbUncd7 zPwGhhd0D9JTLpXEMtdU{RY6 zWO4`vI+-SWztK6E21_%+-(uH)G6eB}w@O{wiT&+b&w7mTV6QIaBTQFchyjOvJ6ckE zJ<_$vedo&8W9qR(qT$a32;h=yH#nYnpL>R(((?Q zncY$EYZsM|Jr>DmJvSanrLM+>SrM^rS2OR8h8AEuc$b5TST~HJMiTZG)pATMu5NgLG^25-(e&M))!qpN6+cQG7fT zOlBE_dvIs41-osPD?!J4^UE~X<*nn2zSj!qju+LqbNT^c=sJO;|In;lN5nKCIPdgL zw_A?Q@p`kH5dZYucOUEAM~8Up+Oy?J#S{8tX`*#IV%jO!uA8nHyISg9W}E>da3{rc zP!tJnnU+YUp3QMqd1Wwv0yaA6Ck1; z8usyk?jd+A$ZdP+j?cA=o=%@ys=!~+>TM}lbQ*}O6LuE@0qUgoMjQmR?~W&4Sl;E) zVI&`AgImPikF(X0K>3gMXqTtUg+#Dqy5D6K8|`1%_qv4;hzzD7yJ~DS`y5-in!yL5 zz~R3rCawoUfs|<^7B=1Sza%_ig0&gREp$i7M0F&7@$o~gaMz~o@*Gd0>4-P6w@rIw z)#fI@qaZr@>zHR-SoM$|3uYvTp70bJMhDGC93^E80K<7gR#3~sR=DHXyJ87Pt~*{U zRC2TmRT`9@@b%QSX_i_X$sRiI7{rBA;_;bP6CJHxGNJ@Ec*SFv)+20G@`w!5`YO60 zux?xgH?Ss`$;!P8!~cP>bWJZXG&+lCg-_qYrm%w!@AAm^7o{JxX$_^xclg7xvs9sm zu6BqK7y*Yy7=Bc%&kL`bIC(Z{+qol00TEoa(Ep;SuLM8xE9Ep;gqC$c2o`gZGqS)& zY@E7+CC$>B$0U%rzy<_rL`Rny_m@IbLC0{yE{xk3P1V&C6cd3@raWgVf^OnmBF?({g@jw7*HIN%cfB z$6%OXuxFYU%(84pDJRE;$^Vc2jQwJYmu$hjox<>S1!|FFM1h}YqAUxg&t)T=bhB>X ziSCJ)Td-^nxtp+a>LOivPlha&p=;;tAmBu+EvL*{yMjStHc-zlGtV67m(3DS$tIsT z<~+mWME=vp&t!{NU!U_K-TpQRrJUc+heH8Y(Qo2wwnI&`J?kf_Mble-oFxkHdkXfvfI<0*;PODykuzxJiqnbq~Cx0ffMns+ks#JJK9U`v#aCc-Sc9= z>+h;VLR&HL?|_S1+Kq3-`k zj=Unu^~|j84R%hxIkT!X3%X_LMI7Kms?)-P@L$hUk3P=`;{GA6#9#ui9JKtZ>ZD(0 zheATRIr^}%YGV>8%~A>j)w;`Q>DAq&pquL+0lmQX)AAYdI?mn9EPmqRUqn_^nT>{E zUf?B==M?J*k7zcKUf?;BIemJCQwEH4%Z-a7-(ymjI?lG#oLoZjy4D_Am(o<~=BgEj zhx!(!Gn+%P-|olSu_3f1+-4QzhbLz&*n@ShvG~=^=o@YP1n13wY}}f>DQ%zI5#*;C z+{%<0?6$`@bJPKO#L$r#8R|abv|4kW;DOXhgq>z(HdU79%n4XdSHsW%! zdeRVfXy2*P#4dSF=p7e!{+Uf=V5I+bk+bz2>kFb9>*`I*`i$zPX*uhT<@ISd##Ze6jTPZ=p%&JK`X2=IWC^)k&`C}?%g=nh3sDo~!a zZ_LUmu6~&{U7yVQ{a6(wL%E89sle~N!|BMP&xrVdep?`XO?$o7E|mFJs0SN-)4kbvoM%XQn%F7u zHF{d$*J}5PV+K7}?3KoC<7vTet#^FgAFD_+(-sqiv~EA?Rcn2Bzpz02L_3}B=WT(~ zxNCX!PF5PG{rmC$os5M&3eMsa7EGini%1)dGnWflQa>;LtjCKxSou0RfUY}m07Sr< zQJm>$?#b(q!q-W#7q{mg??)!+`4wxxXtzu4z0;Fp_!YkkqxhF?QJ&baazv<2mz@w{ zBqsgn;<5ZTF>|S$o#hpqG;1|uq-flC@CA)P>s;_Be7sCb)D!XE zxtUfNV@x=*RRTVQs9ecEt$vWjZMH{(8P&8;7-D z&Ho9uqJdV;_m6y>_1*^gF~N1CZR4y1_Der+CmKHg3-wRnGjO8ztE20q?fu5~ko4mA z;0n8)Q0_+=)@lFX?Lq5A9!M`;UlwGS4|JDg-v;7!tbZ$ryVu**;mDV6HX32mgL5v? zSK~X4FA50gRUN-~nl<|CQ|ohn+JHNHJfDR+Tq_8!zl~!YGJxvOl0iNHE~p*APjVA) zzxUnNXB57O0k)`0|KP~I@#bk9u1T)pV8@{tpR=^6awt$oz91y!1Kj;9H@0$NFqBY> z2*i+tn0G)IeEZ(h8e`q+b7G_WQwjcld?K{6Nx(@C9`bj=zm;ZtU8 zmWmSpY`dqA z?qWA2Axz;*;S<5NEZDiA{^TuJlAIto^7Wjuu(C}ow9;9IyP!$Rpz=>!5}j@SD65ej zUvIOJi`kDSK&+S~GPb_spqMA>sa}zt%~gw1G;U3@3yL176n>ZLeOT+gy(>5^kviR} zm&1x~3f3&1f}?!vKU44pUoepu_p$cTjW~T8Me)k$W{j<++BHhx$6Exjlljj~&KHbKGTYkt)z)VO0fz3R`@cRnLYeYH zRV$u1St7|^H8p4EIBUCX<5_WMoL9TUTRjhWOvw!7wV>n)AJHzy0Y!TjF&I&e0!m0~ z+(x>bf(jQ`?iX>i zRDQx0ecq>D9iSxOGM8VSKh8Fy38yu zGZl+2K^R6%fotU_-h$`}!oW9jt<@d7FZ+Ch=vo}m$?2$? ztlfMh4U~N7=vZ#UNnlE~8Qt|8C%ie=E`KtUY&t-MSPkL}9mbqJ{N`|CDQ8QiQRY*B zD)7*MZC}ELK%%*6K^{xfSoB0niQ`tj>WN(V#}b1&-9~xcapfMWT1n~*#u~$@thO4Y zXs#^Nb(5qDeIj~nUZE7`X{U^L=xbIPx-NW{&j_bmg8GfTYFsqMG@daxokRaX-0`Sn zi}v(yud&#L#}G1)sl__cmsj*iNQ2T{K&64D0b-}m*qWlCTQT`!b-@a@TpyV(R>NU#YrW`*_f-Uc+4WKoHGw9kS7x9qHJm&m#F-f zSo1CQnQ2T3DAnz*|G@H;M@YmeHc__Vqh_RU!W2ZJW>X`VG&)v#AUeN@C8iPqR-@QC5`K` zFp4Dd%8n+K`WYjRC09JzQ_Z@DkJA}M##17>^c&b#I5rSpaZ^<=@%w->RPdakBk6)9h_s@L(;D<52V86%$k?-T>Y4JK~Ao;&w`H z|3vacz16POIUJt|e)-Ozp!5gnJ^Ov#PO$v=`~;d_R0rz#YWu0+rai$+p+eXA=oDmA z(6jBsD226=i!#NgqBK3yR$Bs7^O6q$_UoB#aHMU|lGs&9KdNzJ;7Oa)q8BV>hr<#` z@hT5e0m1O0`~aQr3fN50PGZ?PC{d<3D;NoRD^!_Z83Htd3>GIz$@hPoAr~0a^0325 zKHlX7;DhoP0vCvX1;JWVX|cknak3E{O2cIvmKL$wSm+cw3R>xT#ANH1rYQJJR#fU( z$U>_wOZYaK1xX^COD@pH%v+YAYmqHkmhhzIYR5%MejjZLRU&_P9$6->iYn-UOrnvPQBl_t=HW`+7+$LJ-s779?g8P@7<6;gyN`By_u<5FQd zD?L#WNCr!Yb{O$dUW)L!Jj9XerLuyU2@;Jt?gsjG+mFoR4+p0xA`&)KQ#e`sssOg7 zngM?c{q#PcZl5Od82$JkD~4|4iWpU>H8vJ;I2SDcr&DOiy;tD=hS z^K~J4*v0g4i=*m0mP>HPv+T$l#46!dA>ocn0K7c25k;gBaciWS>=F{HK^zk+O^ln< zCasXi?J6{ihGMA^X%vg($8!-qG=dP{LzbK^X`w119oo2DQsqMozMSHOWqUqF3~gP{ zUX{~^uqZ4*LSgL@muTbpE+lAlKPVr>Vz2L>D8XLNN>rU()y}h!!|N+Hc$?66<~7OL{2u?~b2rvWh&-ugFaQ?O+5c2BCyeBj;I0EXUP_BwP`3L~38SMnK~5A+|p*X}VY`zQ3>bNNIFN z35AeZ^fqqh3T4fkrP{Wcq)>S>`n}_cS$HV4y1kbdKQ31re7A?j?rzNn_T_0a zg-)=N1(xBT#!9ji?1@LmKHPu5veCnt1`+DXzd_lieo8yO*wl$>G9fO^SF%mahTCNV z6WA8Yy&kf^z29?c(9Ie4%Ar3Pe{(ds^Df;H`vaIiNAHLs<^$|Ti%TT<38k#st8aUEPQi_}TzZ*$PvmiWnousK{ z48+hKf)<{#rq;#xiu=s*d1UUC;=C-CR4n(FWVd|})#5SqI&YrbGSeUKQtGRR?fR+k z@~DmP?kt)VQw!5o=()LOOYQgBGv(Hc&t9sZZ)=*!T9qMeaGJ|xK?Sp*Hc1bozk*CK zv{zO&po)SAC?it^p;6CqQ`6kFp=5PM*yw=?g39h!Hq)MGU^AX)v@@R1gWOIAB2uw) z_@yRf=erbEh6uOKjvD?L3EAtVvJQTAuYbJaaIaq3RW8eB| znB!~{O?kb+%!fsa+=sgVWhd#+c*a8glzn6!;$!~hOgrNO{GfYV1F0DfOTkCpB{X&5 zJ;j4Z0QOiYXNxg!VD?FXeAs9;6$#@+9i3teF^r5%kP?^DuP^k%`ewr&c2!ml|>@AI06pv!lz#KWDuo?qM zCwfdQx#ls3jlq{4 zN}AnXn_`AVNMDg{^K~wKC(-jrbxMZt)&i{5GNA#Ifj?G{QtvkPsC_Cw!($RaCZ$zh z>~Yce11zN}3dZBVUdvi&Fsu+sQ)jH=6U+6MLwE{Yi+*rMbG|=z&RkUQjoYP94XzMx zY&-qMX@q#xa>AkDjR}4rkA6r^Svt8^dUP=V!nfGCxlC}RNysuP+XYj~zF(9n4zP6O`>u!6Kdnt)F)Kz=tuA1%i!DK$&YbP7mU z(4R(!WHi*@tVWcJFmy5M%P=_Rck{VNP*oVzy5Uo<8Q>9?ZZMriTDpAkhm&5xsJXn& zOfa{Y%J9Esqj2Ud3)mTt9ZE_pLssr+13XfePFfYOSn577T3u{rZm1TuChck1PO@vK3ZhP!iI-z>i9Wk z(%b4?)f|T6yZpLIzL#P>;nk^AQi-*{+tNZDVLy2U1Y21Vl9?2jD^997$vFtLTqr|V zqh+aY#i4p2=~b%9MFYyFcRe3uoSg(ye3^|cjCYO9Agb#z<_6`RVwgzL0D=f!daMQnee+@eypz!~DRA!tt5DRHnzD+c!hU!J2FiJNzzW%z4yBxD%HIcVbO8~H>{s(@aEzXy^*0S6&qLTK2k=#v z^RZ)gdY*sLL!@@Q2!-gSitD+N!WZfZ@m$t~)^B(CZu~HwcPAp27^{ChjgM3b82JjQDY>v zPkZM?J~43~KHTSwpGidf+t!45u&*h*mwlkOe014beJDYdT%b#fS2<5SXFS2d0~@oA z0= zkL0P@Bb-(V6?r@j7Io#r0QSG<~XpFO+e0s%f$xjqGfUKbyjOo_rXls@ipEICjrV?F?BwunsaHi zE;2G!JxauED&z0K5Y^cBGc(Lznk|~DUykvbioqvgCaq_ek(k1k2cc{(fVWOl=+-tM zoPm5}#XS4~_RbeceaF_G#A%qRGoOY&V}t#wW%G}5XfbCaVA2So=@+YZ-cNq}JM)>$ z=f3t85&Jo(rueLtNAl8y=sQffLKY4L2%_G7`M;Ww+&wL4be{NT0<=5G!`YGJV-Q08~JECI5Lge{;1FV^1qvzrvJ9+ z2K%iWH;i_mWxaRzT4|Rnj*KNi3ZAi2!LL5@R{e}(nU0*=Vxh}JV&y`9+_fK^9L6lt zI*5+bLk1Kx)#~^4{)t6TKiODoU1Wws?}du%QjB!x;7;F*aU4~K&E8Cq(2t!Yd9A|} zEcdD%iNC<)j~F*{5fgx5-(hpi-4A*M-jGEPMFlQ%^c4W=Qmo?IDzCkyY3d@Yv}k?Bn;Q^2DVoQcd>r}8{`}P65Rm^y7>V4S z9g05!?ws`zRk=)4|C&Ls+znd$*DLVVb`jwB?)o|r*Yxptg}xW+PhzbHM8vtOrIIM~ z{dAZh`h32)zkRq*t6a!(-B{6==SeEz9FP?kTJ8DteWjZP!p|PUIWzlh^n4x!{|UDy z*Lzv{+Wv%duK$IN2%J$DRLSMOFvE&v(V#?OD8ew6hvtdONY{t8)F zFQCRe-%6(O5H#)Pj=h#W9_%0x|9k@N2Z%ib_}RKH*}Nv?avO1Y6|%VztJv_pC%V&O zq-7rSF(`r4myF~E$uU>2p|)`A&6=6~A$e0JaTN7L*~X)tEJ${plud5O8#)$pM^e~E z&pXcshMitwJp}1(+v{F+UcIpXxXM`yMTF#a936sp{p{PV*ws%b@K8gbjWu(|MEJOk z57wndn+Buq@}@Bv>Z&8vJXV1L$Be$F1$a&IhepFq1Lx!_aZYpmXdICv-Q#=r+#^X+ zT~Me6+L&f}Q2Tm8^+GVi&c5b>U{fdz3hlTR{5^j-=jf#16n9-( zQ^sR|i*1pR<^A%K9j|xGn_tzdP-g*9!8Jk+lRn!@V5KY+(Yv6g5#&4@`Aoq)53I`FytUz`%t8US5NWk) zXt(H-{M)AtRJC=S*9C9d;l^tZ8}kvkLTZEy;i{ZPSMy}R(wb9xaALL6i%L|r8(;K2 zeT?7imerB8<%j0~o0D|w`VGqv^*$34_K1qejxgEz=u1bMIn{nH;_@UJ-sB6D(990# z-fS`oYAo{jxtzSsD=zoR?!Lh6kstpn=Z{)H=x4hVSinGRBMn zjamI@tk9tgXUu z1ZEj-b=)ov)1f=8s#abhq`;qlnC(c|T;XCrmJIEfe-minp7kz+G}saTbBppIhjOQ* znmEG>1mi&LD7Uq2K!dkre}P>9m&#&z_QL-qE!xqR~!@QVQ)j3yMCi{=Nj{7i+H6Pf!!foy+& z&S_T;G+HoYFr@dRYIx^88?0}TQGp+t?4TT&&xiNDrTX#$Ili7%a0Hii#V`vHs4SA~hT>uxAjB5@NkQsAc$|Q3RsShSj zBk`60VoM0zX8Nv?c?7AJk#fS|YP{XJ-g4NA1%@Ib*Vkyx%2h>>n#+MOD{C*yCnQIJ zbmdCXh$cbow@#-ZOwdW5SNhwPPMb2LXOAGm8c-#NhzURXKQWswFb zzYdqq{hKc*DEVuIy^7`uDOU;@Z9c=wyJbs|%FJk$Q(4RgI~^$70SJTfBcW2$EwJ1B z=bv`Kwv916Y0c5iGS!M(-(=N{3CbRB708Ar8j*&qhV@QwBxdjp+6Qeg%eF+GUW}9$ zzT4S;XBaOG@h%#k{)sQm*+2OwQT&CGOBJn2u z6&4>Tvdqy$(sL^Co%8@qAJ2vmbA-lWqyYTErWrwlsAu~4TV}phFyT;5fUra;>K_y( zh%AI9{M(59MKBwc&(XObe{WwlBt_a0;sfk+Bts_&N~5cRXC?@Gd5qX}Sjc(u+-IzuRhdF_VhC zrc@}RrWDlFw?z7uOY|YVhSN&7;u*#F;+^~VIGvG_o4Pm~q@B~QS{;tk6`eTFpUzH} z*5|GiFIxz8@Fg3T*anR!gN+!@AhZP6_d25BP{qeGqTrN#!_;V)h~aQ!MX2>PPz0*Z zx##gE7PEToCo!0skx&4x$X^@s)OCA%B#?;H6FU z<};pbf)gG2BmY4VXxAetR>2Z9azF@>Q=PDtSp;E^!Sa|fU>oxY^Hdd65s;%}FtE9&RK=j! z4#lLu9HJZy=Opw~;jw{Ugf0JPipH5?LvE~>7cFu4KAfwLD1gqKes}jvq>U~?+ZA6t#Z-pg^fe&gMQ{97DL46!$YPX7jNK48(kHF6 zK>ra$9wb%?!#md1lcZk+Dav~h0A#_cD?;$pTh^+6dbQ=Y$tjeWvWCI_-E+_wJy0e$ z8=#%8Fdb@FaA~E^nK6ShlW(s3^Qxk^GHiUX&gE=IyE^BkPU8c(RV6&(qx69{5VY7k z^(A?>b4^hAnMaZ<_|fT}8v3WrIBoWz6gEC|{;;=dKB}L36?jz?hAOu(wR>U9bo{eT z_H$xl3l!+s4&uJj!)qJ!5@x6NtWIp_|Bf>Xu27cuVn;aI`{(Lqja6aSoGrc+%p)gn z?`rQ*uR&$_?2$L_L+Pm2ii=9;6la*kp?D_kHd|gG?)FO3!Mq^hWsh z(w-&nfJ?5V=Q{rvAmxYbcyQ^(Gs?1;7R?n$r{uC&*;a{Bjt{hT;}rtx+;Xz2gmJ;a zLEt^t3s30?cYl@S%&HJar6;IshGsLYz(f`9K+t3by7PgzU$JHVWoc%uNXKl8#*1>l z8^#+Cu<%`KB;26bqaHRtms-QZC|h7d6KrNJ%`NJpQubN%aS4UcMBnDqN5UuDhy4%q zS{lk*hf-}*Z4H#pxv8D=ltBAvCr5W=8KtU*nG;05Yo;qztamDsVxLR>Hipv#2C)!b z>Eo$@d*vk1bLH$r`1{PYRA0k8k275X5$NKYaJK3-Oz|bb2U<}>(Z8|1O*5iVRQd>*c&aCe{Q zlx#6tp>*9Lxz?z}JX~h^=(0pTc!hoSer%kQP^znsjPNq88d0S8k~z=v#b=G;e31Y2 z;v~^7JR1WnX z3UyRl->BNEa-3ZRS<7N4q163jUwx##PHpMZCkEqV>=6URZcUlK#gWEbT%FkWN^f;h z9P88BjCMKZLFck>5Zxi5;Xu39ycH<#b314!Cln>ZGamwdbqML=DJ&#isl$$pHB{x5 zBv+AT85TD}NGlPyneZbPJqmbv=eHcP73)wi?b7>^n!K!vK-?nj6`1P+sdlkplc*@< z_o%jaUR^zq!UXrK#vG;}C0w22O2B{0WLyWd?=uW-0`Br})C|6|QdzFpNt^;Yk)ZLj zB|4D~#>NIqBT%>bOErF96RdrGb;^fvjRf z-SF+YMg8IYhg2jLP1_A9G&Cwi3U4K>vk8_-t&u&JsR>5JTKg1pBu5rG!ZGanPhRCII_>vI8QsU5MYqG!k`egXT{}~WFudctaB+t)Tggr+SOOnJ(rH2lhEga;|H8$ zBj&0-(Bf?+Ty=emem_NQAQ+P{fo~mkwLAm$@k#}hZ-`7x)osxwFT|0*6It7YEdN_p zgV8#eU5_O3w6^(6oUWy9y1KazCn%i#Jp!~!CT{rwIGS6G3>5h1DLY}AqjAXJkeID) zZBh!1ttufl%HHdnTE_E4ttt`Xx023e8fKJ6Xz*B;md1ubDiKr8D!FyWRgAT~BxzHv zBGG(#F9lwfoe-)7pk}CW(n{CEjA)vr?J%1dY27|7(_zK-Ql`7_Z`PCTPD?=kGwZlg zvVAuSt)S*)zP?Q`_Le^zTwjFgX{UPM#eVNAy^WVL{rOwF1S%e}nn#7BDKSV}ye#(5 zQ*7eIscy;ZfER0pTz+u-daWeel8p?W)&*%kX`1%OvRWsMnk8WU3oTInA3lg+|-#L?>7IE27drS&aq~$@NlNzqj?-q@5apq$ax&`u# z@KbQTqGXR%8`>ECG|FaUjR={zFRGBZ*Z5>I)rCvDcBBSPpBCP0>n%F^W*&BwhHdOe zIw5d^E06e3%5mbqAy>11Z@16N5+~#w7BrolSwX)&zd5r@N(K#KIVs1-uhJTo^5TtY zcRNmi+_0vV2Y#E0Sl`l;znp{`YK%Gi6t5|~9^Kp2$1`3p%t-a6Mb z#&ayYYhTb<{Z{dlN@*R^2RPclT9pzqx`qy!ewd7N$-K-MB742}m-&e~QVt*7rA-Jh zf^65_iN9@d+aWuX;9RH1>VLYv0R0HQ+TQQ>Wg5<@|89O0(Rke;^HbhJkxC9yhDwBe zexwn_<~&c#eCN^mkIa0z3A%AjY!ia++RtCfXF%;rELdNDG78`y?x*E368Uw#-$;dl z8z0;p$YWEZhmvtd{EH>}t}8aVN&31v82Re{#WW|_#1cpJb^M(4mo5d*;2YG5@1A#N z<}j8uHwQWTV0y%H1UEX>qstNTA_XO>d3S{FbeN!_Wecw#Kev2JI94%e z6Xi?rvO0@~8%W?!pbza3c;sqM*B%P+AxZ}?F7@|Sm@rE!J#aYqXfCu|J8WCSJV>1k z1J}b^_pls>p+mxR8fgtf6X6IZCb8&G8#S9;?*5Q{!7v65^%{(9Fd!L)Ae7eBgG%MJ zSEs~0BF631!scjAfeB0es$jm$s(XSfibK?xgmA%|8uylIDyvXOt;7XNk!3m+nwN|Q zXV2e=i(;^xNk=j?F(M*P(lc2`iY1+1*RIjF&GW-CL$#3qC!M^Fi&_)Ezb4Iug!x4^ zYvz5|j1Nb|c=4J$Ew8ySFgq`%0nUK9EqKd^7Q&P$t zApw_@k`m>{SZr~%U=530U#9Ig|50XR!|{K(dke6*mTg-YcMXBymH@$N+}(q_1Z~{i zg1b8juEBy6+#Lc0cMBm%LU4lHYaq$C-23)E_xlJ~oNce@>(L1fA6th&uKb3fW{3!GA`!Vz9ru=WpU z6+i_Dijs}lheUrw%u^S8WlLvzEKK3@S)fARgfSxIgW$v92uVgk40us8fnYT*$3-bn!(iczDzfz~3>x{duQlZeogG~HZ8R0m#%t~4E)#E%) zSxHoSN)d;1R^9l@AVygbiW{1LuW`Xc-_r|#9K&&#pn;B_&mR2ylCS9~?0@>4&Vx1ftC0G>7syMzvB z(C`XvOPI(a18KDpheT(zUuG$7q$7zw+Mp|`o}Lrldf(UoD0(7uAe=@!W3zK=1@oY; z--Y2r=SIiSYPgge0c_3Z&UR+e(ukLzyDHjU6Df)YKG)ksj0&TmVP;hDj0AkF9IEvE z3{05movKE*pH|C-erTGE#@u~2Mb>l+yw=M9!pSgb;Ar()?~JB-LoKTk_wuNd*@+xzeAcYBMjHZrEnP=7Z~kT|>&^LV zeGE5DPZ-E~#z~~BdX&#XYZygeeR@}XiaQ!GqUUL>$eVq)CFtj0wmxiEx5=UX{N?Gu zAYNTYZs%T#z2@oV#LklkX zhtb{c4Y?snhXc!A#p)uA$ETTE&0(9$Ih<(2=qSOp2bJQNBk*Zz`m~i={Bits&7#6qvZ@V=eNq z^&6$n=`39qQ{{9r5sI}4y2kjm7)rlhZDqWX_jto6v1t7i(MX#&K?i`f?4vRD?%?>j zSLwI{1@*-Gr}T>tI-1a-`Png%$(oP@p>nSZ*QX{_-X$-qkt`?i?ewLV@?t(N*|$m$ z*(|D)4vVBs?tpvnt-AmdCL^7ecb{6aN86XXFXq)4sJr^;C1}qugw;2m%VYBm8iM+Z;mwn%~JF;v}3f^Eq zIEN&;Ii5AIpy#53zO2ktLW*|D?(yDYvln5zn@}ONr7w%;e!xd8UW?IW#GVA`z2;Gk z7Zq!MI!Rs#?tY2_Q6{1m5Lvt1Jw0B! zqx^kd*_O(DBbAhv$CiH6$NG}uNujEtOg=<^s~{#fd8_uKP5qfXf~3qhgU)mL4?j?c zdRh3zBy7|OCPc1dMzwcwL>;zNr@-pcXE)`lFVDc)4`U^m+b3X!c_x}!7UsOfUrk=F zZzpo}TzZ zi!QqWa&;peQw2?8_@|IAZ>paAqh(VZ=bC2}VG70}v8g00vGnz(A_YlOAE9QEXFPwS zR2UyUoDeh@!53`VeD1#AQsdeL+F4<{LcVDjQ@w2dfd=hjq)hWLnYN6Xiy&z4)Cp#P zEUm80jjtY*bUFIrBd_5iLVW~_9HZJzNhE!Q2ZT*XxfCi76VfPKG2RU7&~2(`tqM1r zVH7)ZWbtthzm7dq&55rPF5P}JYmhwgV4{ktM2X;`Uz&nBY7x zDnI0Iqtj6>KiqQm`$(|mURtT3*UliY)IM~G;*=i7*k*9qA^|?KNa%d$U=t`e_3^p#PK; z3=0fsJ4GLiqJW0%v=Nn$0Mx31Y0T}3w~I1LDU0b!yZr|f?2Qp`&KxvVFjQ5_)F$=? zDk?t(>o*AElch&W3;7asRC-e{7`Cg{DM|t|ZJ!Q%k7OC)TDS&r<<>zq2L+m^ZV>Fm zzYk9Us=d+%x&(0UCqij+|GA3mu0F7kJ$AV#gFU?Y0Ybo z<4}-x_WIfzROb2(OH>%BEBxjaR`M~CP3XJHxLoG1T9iL*`V=0Vm+|l$Ca11W4={AU z@Z@=loMjV`o|2YYj{Ew-C#bhrIikrVeACZNs@5!9 zIbe^PHZr}N>fa`xCOnK6wsxLWYqz7G;r6&Zt`e-W$8d%p=KLg?S+aCBwYny;HPgAV zz@JU~$UQBVFLH{9REH&sytb5kgXE2cZ?dAfvFUJ}E^}LKEHA2PYpkLYCEV99OHG+e zf;l-Jb`)pxA{i=g9;KKqYWP)bcEZ<3^;Wa8Bv6$+7qc1&uIlu&!=uK;pJ#_z zIkT#_j8g(eG>+fOvW>9EjGdBJy}Yux#LyVO17?66umtoouS6pPH2YoHA5ckMrrZaTW5;QEa03H$Z z@IGr*vyGVn;dmz2$iuJIDGz7VY_c;w_$h@yWgiv}Rzz~Yn`PQ{PnS;93zeG=7z&k% zb!HmiTw7zr=33g?QYCN@kQVwvs_eIuts19UE&A=S%=#>`W0CUm91wsP@C<;9s`u=} z$r{FNkI>CaPgZ?;%(`mWBsW_M2Qh~2WjAXc(%JQ$)Ir12$|*>w&2+k#5P_Zib~_BE z9+~=&kM)+Fwq#@s=$IUj<=;Z78|x+I;x>z9c0$Q3_*D{%AL3PH90oRD8N6(N=G(@j zobK_|Js$Fr5;q@pZx`j%#W-b$0z~Dto}0gaUYC3vArD_@!c%H&x>X=TI!v2|jt$ z=RN!U+j#t5oCC0>8QFM-K@~d|>U;wmaqQ9b)!&jv@J=*8u}4}(^$ZXDwR({o!V0Gz z*(i}LS&FoyQsc(Ca^q*ZD`cjZs$wL)JvA=NRe3fV>%M?MuHMu@@Vv;-I>T=b#P2bi zzB8K1*EU;eJXs8zHHr&JZWKdSBE9Nw#|twE3Z|ylC)1Z~EQKdK3j=dwtr~mH1j|dK zC-&Yi9(lNyJ-rckNm#~zdA&@ zj9p5Iu?PZL_yrqt$YBf14Lcy@@R}zQu;~p`JP%Eac~|7CM1Kt z$n411Bh;iQ=Rh_Gw}l2Vr0RzbLXAs}JLt7`@0h`>cfgNG_1I>P<$X0$UVKaL#_~*K zF?aa3I8{8_UG~_8cu<*|#iQZ$CNqkuwoh$DChXIy@-2uv`~ zN%qX~K4#Ed%$5Tsc!1lsUXhA+BK4-ZDeq9@UPT7ejW%aePWF4y;;XR)q14?_Tn?Ca zW#yLf{s7)2rA{DARvP_3i*HNFBAQTop1b9o zlPJ+Wd|Zu{B_Thhn*0g~Y!^moXVcIvw2)^wVByo50|G5QV`-sQB<+U~BfRnXbI~Vi zb2lHBE2zsT!vNd$&15CH;-k#RtF;N_J&-H2UKkXl2_aC@Oqa7Oab_gXlwo{ z@Zu!LnoDxxgXfm?SPCtc1?Mr+ZzbaSBZ3X`;RVM)k4D-c%Ffsjhf$<4rsHDkV~=Ww ze$T?VtaXM^wnC3Xy{0u0+lCP$kNJ6Hz&*uatakzFUDqoV2_tPzB_W|WeZu5qh-5U~ zBpO_z`lgZ@Ul>KB1pN$m_-Wd3(b)^dC(KVsS;A=0$(St;x=20A%<6L|vs!p5Wp<4f zDmb$xFu(Ru7rj_Z{dX;q?mlJVhZ+c+IM_g9Z zw-zBV;`A)d9lwHTUR`#)wUYkZd`zv>XeWXop%Yr{Q%7hLdYwXhYB*Qp;x!!qra0jn z8rfYWA5DQiu1|`opm&VE_YJFQF^jZ_aIUk9JH}`alB?8Ue5ui@=OvFcspmvRz2=hV z`l=?YaZE1o?I&L@)MeAQ*vbMsm*0xUkfU?Q;48P&>8_T*e>P$`n398g7Buw`ar$u_ zeW!4GMQ|+TZe*bXBkvf3NIVibpHPguqx;87C=yR_Qpp~-M4zXRpEav_7kCfJg&a4i zq%TEGRdV8&gj-H%SoU64`KpSVaG6{t)8ql17)z*pY)A`dpwCp$4z4txv9*rLw+`23 zV-(NhfAEtTr!#wnM4M7qwz;~{gsh{$a2S&6ig&GPOW%cgVxTw}`r_bBi476Z#q@#t z_2LPF=}EI7=V7xTBe$QnI62yTH@wv?syTM)0$$u<30V> zSg2N_byu&!C+j}?g_eR3ygn+twDDW-%XnLQp{42qTi{PdR87JVpT1s%mio;4NY11P z@oCi}^utYG8@oAO5q1Y-xF9Prb|qWu4wjwm+63upm8$KC>#BsB7*lh)Ptz)V>xCb) zY=t|;Kc&K?wgZu+m9bq&nck3UfuU@#Lm*f>f(JN3*c^Bn)6!**2)4PF9^9B((q+oA z`P-X{vDfxC3(lhrP1dp1v+U5;#!J@m><}!P(3*c5ZJ6mPsdgHa`|A8DpvJG~?K}M~ zoGum)e+<`dx}jP@{L&1Z>yk$AvbM}rlG=fdtTVt4VO^Dfryw9w9jKT0UM*1q56d@B zmf9z^K6%`o292#>&I>m!&&pj`6Oq;6@9szRi*Aw%MQjg3pVyTW{&jf)Mi(vKE@ z>M~7=x_DjqeXjPg)wueNvvT) za6ARERab)a-rA>NM>eJO1H>q+Co=T)6Ep(+(HRAtd;t?1wa!Ux4+6#G_=%VbmP&9np^CPyKjxs?&Ac{%H{R)msJ`;yivP07c{=S7>M)Hs&5pRsFI z=H5bB7zeQWHiH$pa^Xy=_z>K+5D}i67l=Y$nh9`iXetizzGI=0BwL@KuDxEQMzTFY z$c?OX3m{2%4N&k;buKWNs}v#|uOXmHYS@yatU`$^# zlxYhbRECuL6bh5w!-K5uH;lWGEW9Udrv%-o`&#LtYB*98@bv_(Z9w0$b1;&pU*GaD zG2^LYkYrwc!hok3=&FDG4NlI|b9BZJV^klVK@mMEjrCUqRKSV2xpOA(;_$?+wq3AU z9Ihm+-P4&Tn2p3ALZi?ZWCOAPOy}a zxCC@n9XxU4n7dPKv5pf*V2NG1NusCtECxYR6TNw*4*EHnzpR0)Gj)!Yc^ zvN)vdYf$NO z!&x$+tB#zen4Eo9;=vwA+JL<0;$gyD>HdDX7 z4GO#hU#fTojXHC2qZbmMvJ$&tkY+^>6mqU7WwMGD{6IljiTQx&#p4puFVAraC^s&0z>u|$m&XO(NW^uE$5jTKif#nrl2y6KRoS*RzcaFf z7ayTnej9AW%10E38wfC{Dxu3Oml!o1Q3AmiqY&G45i1EbrFg3*sAj3NLy+dVY2aep zxnK^m=20E3tb4GD?B953pPKc%*3YGl4LV0+ynfY$aP`c2Fvp(ZiI{W!;#VsLBEuxC ze#v6HD9xrdc<0Qt!>+`&i}Y^Y*r!fu39-%*quv0M*o&M-$c7J5F)P|B#K2+AIj{7j z<0}`GJwh?*x4VfS;9XftOGr~7AqsV?9XnK}G*K6RDA#1vl+_%} z@chTtjFxECcAfAu!vWe@M|8&-Jr#PK64YVs3!Vdw%@jq2ewF1kuPom-5qaIjA`?FJ zvAwjZe8K7HE$@HwO^o6T)6T%e)s>ishl&SvvaVKZuf!afM%(1gk^0u-C6tJiA zCkVPeR*M{i2dCoCa^Ec)AQSdV`}x#8cSd4P4w;pshI^aEP7`S7S0$ChZUPmtO}zFv zu;0&qD6&_<+>o}Sx`8Kaj*P(@%j5K$#9TgkK*6Z%jXR;Yg+o8IwJ*As1%VV~n>K7%(2#TQ$EqkV0h0|XcFYY=E`n{(n$4>mY+K?9V&ZKJuI35+ zFmkT41UL^j7Y0I+VXRlRWoUKzn2Z}%G}4f}t6Mf8JqN6O z@t~hB=U_$|v!+k3>PzW?5vFOm4z8Tl5ehzgV^4}Hg5uDDNUX{(?r3HEAVak*KsJo- zEC<}du30^gb+n#=$^^V-;|UGQhY|h_%HyUg?o3s7IOE+X;i9g{QXkKT)`oD;*D|u4 z8+v11o-07+=?kMM1-(&j$YWp}P{8l4JEEC|k4>4rvBUgIa1nZ>o~Fi6@)4^rT??@^ zw`8n^Z4~y6MNNus#e9(nbW6T?E&0>*cL&MqJ6ZC+LKucGSIudu#dxTBK2eIjO)+sG zQA>E;*cbl!?3&3D+M_WWYnOu0HbV(mJ=VGPp)^G>M?J~McI&-7fv3m_tCGx#UT}J% z66ry%78`+Cz*JBSehRlDcI0!7^l_lW1U-GXp%byRSb3!?ggCpH1Zf`FN4|=kNp}7Px%dg#;cXPo=-k0Bgu|S}z3n6zg;L>v%>^Il^A0 z3=cS9yt}>``P}zXLY|$GBS!`uJ5B~%>zy|H6T6m8SQ;!k=+O3{t>NvL;l|Y60|c8a(bCxP9FZ@=98Wr#NUR>q z5IuV3)#L21r()lio|8!@lFjbD^I{i24L9b*aro4h&=|s}^;KqVxw*#|xSB5H;N?@5 zO0l!grzBGz^!86>$Fn@!lnAIEO{0m@qvaRk#L(yp^*g|pa%5AbGoNb9x`vdc;{@c! z5>vXCk6Je)oF24MI7$IN#}HQh$1feIsi-^+N|Z&lmg@h|$vCdxmCVP_gL!?fxk+ZSfwY9CYf zLP{3IGOmR{m0+M#7=Kp^SC z`(-rp73~LeCo4NtX)-QuYy(JuBT++~61=^kt5= zcN30^LcRf8qKdMx^vEjc{RMTEiF7?P#Km#tA2**FmqL7blBJyz0n~vmP9APnp%%$` z+vIH_kEtg3tXdA5Jl|m5F7b$i8yPFyc%OJ;@R@29g!!Ql6ytKtykDH}mTA_50!*|~ zb3a;T!@*f!dlXZ`Er<4v6h0knEbRyH%J!vW$rM?`)}*32pxatF9h(H0)V~y?RJv_6BTM-;R|QQ&np6=|&7x&Kp(%Duzr?DHwHq7bab17}w^<0z`CxCb&70$aL*p7mX*yuAp~UQ1&a)y=YKHGXD+>_oxi z1)Y&bsv$9age21Qs`%PMhavQapXKTSwTC>64#+pOk=+~C{5QODwP2S9Ocn{bWLK94 zm8C{ImO3W9sL#xz5222wp31A#tG_MooGJ6(?Ck)q^2J1lBC} zjN}?e^=#&1Ta2MvmFzUmLgU0rhco3hqd zK!tRhuR$b+O+@5R0^%tiJ_|b;h|CS4&6G^*)|Q{uRWK&OQ0fvhCgD;tv5jV=vWyE% zW|i}q)GTABIqx!n5M11kVGdbnW=dz2Ha2wSNuynNbXL)Ho|$!iAmWTv+0_84XgE($ zQViWXqEgU*xjXFs!pM)aNoWgS@@#a&4(Jra`ic z+eaK~`yo=+f#05WKuitINHkG_m@@>p5wI9{p1 zd?OWv;vp3tVG``BaqxcA+)KVY2!=*t6h`6zhCYvG={%vIGHL`CJhKVL6&!47i|^VG zoJT^hNI-T*L$8`YAQg3CCuA{JdV!cvwvN72QYv28-eC8Up_?$kxMU2Cuuf9?)Qm*u z<761ANfv$F z1Y|##*Gf6caF)fiv-H9g=-M1#_!Bv(M7c$8Hu9}6K#=(=W1o{<&dPOYA>iRmxSQLy zjLr6DizO{Tg}0$5!=H|Ex2i4E_wzx=LmHexd&?*E4Q(E4S@#<3YWp%A>RN@3gyF+44Rh{e?-CLuj1#Bm(~Rcx9m+&V$B-Yr zlL%TgpwW6U3PW3ERH*>#PaHYFgHC$=7%Ke&K13A`-P$w~PC!o-4k2uhq(al@AS)B6xs9(}l9^5>ks;q#dviqh4N!3$>jtQI(54BkE53R5i z?w(=I(YM%^2h@ZYV9y&Vg_k_0BD93Y{M1Q^`SsI!;Mb=eT487Yz%ptKu;^)eZ^11^ ze#wMj?{q2-a0S60h@m&ECRr?T33EB5y~-%IiWYdE@<5QJy;*^&8WwnVW)-F|-7}oN z`WAQsfSQQRKCy&KSP@pGZxWDC^TfuUm_T&1g4!LkkG__(adj0~H)-e&_DH-UM&)+o z%cShQHzjfjXQbpk_-z@F%{bfHddC9-RQI>hyPjVxI2KT`O0~I=y)nk7*Xtl9)bI=i z^a=qsTuE1hAhml0kI&rfw=E8~%Y8*mS-{{>$xp5t$5pc!Q;GtVjW}{t!k%wm?;XSh zbDa4!XOw50?rVDSY`!SZ*m*{@+sJr$ojw41D(I*8QOCPdxzS07(wy_9+X?+EU%R|1 z^xF{c4kvjFpp#++ZH;u7_p2`Nv`Tz8vo>_^ijy7uthw+B??)5fWGu@exO-B_E&|AN z?hlsw`=21aBoJ>~CF59z=6E_5r?$9CBcJwY)f;pn1b@%>?ufm6mqKxoKyeZH?Wl`} zOz#6nUG)ZutKPkXPF}5g8{4%Z+O<8qdj}=0jfPz3(`tL(G#h2j*K$Q9zwU(ftLcWn z`Lsbs297^WH@sKZEW)ox_uSRV+Gv|nDWr?lg+Cok+CQX&J%CJ|A(`=Uyyk;iY{=a) z&Df9VT4rK0)7m^xp3FDfOYP?iLRq9|xC~z*5k1)%KiCj_t*fnd^G$m+Cez2YW0m&? zcs8%I(E5t+5i0!qXQ76j+p0QeVW7WvO1yLq#LlkU-zBnMwB0)lTAQxj;=MH1+ihZt zphM%x81`t@<=Bj>E%iLR)N^%H_iV=DU_3eS%zA@YU#S*X|4Meiy6+YBLBjQ>_I0%j zl%N7IXlHGAhiz3;xP^SxJjvhpjOg(P_iLK4Qu?Dzv}0Iw*K&TqXBT2Op)T_)SzmGM zJda3-I1>C?0Z{|mXA&f6R3A(%72(U z!8<@c%r;8iIK~MJImPPVHG9*No($zmFzGtoay@22L`*QW^EG1=-^ai_FVkaIkRP6Hq6)Cx^x-8MH;}$H0E=*)ki9LRmN^ zj>55X;i8s@0+1Nia0xCo!h#+vB$-K;&osIy)sP;LS(r>Kw#&$lx`hfT#YYFi?ytH` z2C^EoFOMI4w`eR^mG1d;9YVg0pMPhR50OFbMVDCi49U(np>t{Fn%DZ4TJo0 z5xVnw*pU?i)*wgBg5{k-sy0_g#+Tz@sD(sZ4>Z_F5@fgvw6DtNgwHFWLeEfbQ;Sa8IB(J)Z(OB1#c-aGhH z>dj}0DhGRGlOjLaEBvyc7A)YoLzIP=W6jl6jF)@i9Q8yqfdo9#lk+R5HQRXc1ia+p zoZrFF!xGo>97vg;A>3Jg5SwL#Kru9&_Lz?{3Jk~`C-yl4 z9*+vo&9^TWcpmwai)VA6+K|17Xw)({edtfHppk%B{>g{gbRF5{cp%Bhk1xC(%JO+t zh?E;Dj~{m*29kzb{Tx+PM7w9?J4r#<3@uHnFM_o*=lZw{9RbV`Fsnp_^k22~qATi> z^G->sxLQ1)c)vkQZ>v=Gl!~4aVldjCb&&pW<;j$xKGukQKJPF1SeNkG-lLTwx~4r9 zlTcC)p#ihLMJt}lgUDK3_VIlPN}X5Qe4dR)C3PW$YWa=F!$B|5%Y0+)OWGyWIh`;1 zmsU`uHpFXc@HE+eB-x#I z{H1*Z+{fX;**u0tLtf1(9_@_m~H(}AHgkJGaU+)Kw!&RK1U8xoH zkgNMC=F@V~2Ptz(2ANIg46rrrVJ#~n@Qp)8S#K2<4?Q7Uqb-~Dp;le2~`-(%leHC_KgeovxF?AVp0mk^aeUp|phF}bv+ z8`dR;ni6U(Lk*(Gr)|z$9SyblRj_37J+KbTu&Ks8Qn9sR2iFf=_#mc=tT)11@^zju z5j3$3FDL8ag=`VFq?GE|2Oc%{F`)=fU~#=D=Ky*ENLo3J!oGC-5oojG<8qx52sD~U zRIa@kTdNM08LjnaqgmXuQ;#G1ly&{3hp4kuGHv~k1!yNLeWB9tjJDUv!uK{$%ZDpx zie)-{J83Ru56xi*!2y+p_MyX+uZ#`XL=bgUdcZ^Zg;Tax7%n8w>+*uvE7Z0b=gwp& zw(=p-ALb=+1kj$zkge5fDD>EY9#?_`jCYixsdIMC$KO@3iFQVCG!oC7=uw&}B$XpZ zwhZsr?=CL1#X&+-NJ|vVp6GelU8sOH@C*<5x-yyA^uU9hV=@&kw#HSadV6b$mORVj zCb89z@z|6cT~4kx;vkrD&OK8C;+sj1iK~>|3nw{}C=sFnF)e9yZaWrtCP~7$)#(b0 zCT=4M$4WcGa7vl$KH!U1mK5`t8c()&2vPRZ{2q4W>3QDVL{V`7Y-f#Zs9XGVzh$8`&ukSsydIGIw=(>wMpx^2Ah@_fji@aYMoipsBx?f$8r^s=Dh(g}IuL8p%L$7T(<>ReI1tlISb_uvzkdpS|CG=| zpcip*5L0x}b1=M3D#k?21d5_4@bV(ii&|Sb++Gu9Ccf?JD1ff85VL$gVYC z8!_AWGj`(J4RJteZ&OPf8kp({TDuTy-u}gjg@c8T1Hi!n5@BYfV`m5DD_~`1?O;!= z$#I*87;q~E`T*R2+}2=s~$c8)*?IX%0(s|*PAN_zVC#Po^?AXU1(Mhv*8 z2vmuNRtDDkW(cgeWw<>7DZ_uN(t#9_6+jF+{<#9O-jm9DPb%v@sjT;;vfh)*dQU3r zebunuR}I^J)v(=H4ci^c?+ItS1N<}LfWJXF+ie;CeT4s0B7dqF+Z}0tzGKF}bH}$l z|NHLvyXE@565U!hkZHTC_}g=KV$kvTmFqW7e%b7p{st%P|K4WzYfjh!#GnJj1BerL zMq<$M{hW!I{ky)4vV;C=e%Fd_Wmt$o$G^ZE`(4ZXvo10J9o}y1>_1MIe(29FC;x=Q zzv)eX>Kpr=mj0PHmcPT>t)~9R@%F1W_)j_fy&i(jIT(mR$GzTi0Ej`yzo4HS-!=b_ z?v(X!@XT@BPX5z){zp3bXFi#UIqur~Kh;%^U-}ESzr*2wqQCebari?IZ}szE=JUI^ z`lC*=|BBB$>-t+457aUL&(q1@``>@c?H}6szs%<^eK*J7;1j^`|AO=WN#Z|k*Z_v_ zeS|-1BH)*!jX$X(fZ^7%{{PZG{^;xcpYkyPhF=dMemREt3yuHYLB#*z?&I&xBIq2z zzyg{w_$M99AJYv0hC8BuKTrcO{L*d$emQXY3(fzpS+HOhyN#T=?~=opK$qr`x&!8_xAz694P&T=zp)J{kIZ*YeYcvi?^?T zq4y8CpOgFx?Y|sn{e|{hyY=tW?_X>6KkZ=sQj`C&nYf?K{R@r197f$4>EF7nfV&ys z|JyYFe?Z>9+B*f@&wc-eykCx={zBe=^_zS(i98Ue2-n$6I z|83p;El%@u1{XxYPj~f?8|QueGB|)BqF+yPHrVz6-V}5Z{FWKp%I$gZOSLSb>=R4w{(#u5U$rH;<$M z>d5|#+kBs({t>qU+y%M*qJ@9Wnd3f}yGelCP~3fB<9;A^`~B|bL7#W{AeZ_5cfehV z|JwrG7Wls|0LWY3-#Xw&Z0|=@?|VEC@I8_TxR2rew^{wNAO7=R89`&F?|FTX0N%3$ zy1n}tpw{m^%UvAsd$H{u^nm8Xn%}F1UQJzt7!*kau-ry585nMdAfQs&fFiDj_VzlK zhL+ZLu78nc<+zo;lhg-E*&7;L-UiwNi$g7=|o`sHu zsg*g1FJjF<$ua?cR*jYQe<{Vv@cYt(s_4H5WoBgmQGov{UltJLcYU<527(F*Qu5nM za?-N{mGR!X{J0-RX4W4R+)MpMf|Y^gN6lGU8#r1R{_alxh{eXn_5;hC0c zj|AVbf1l=$3djUfiSOK*TA4bS>RFh&-8BLoYdZr&I~^laJ$s-vD62mvV*&iW5>2f@ zRRhw8?-uvR4X}XLMtnB_KpPvK9}51%s{BcsiRq_Ru`+blF)*|+bTHJ>v$N9!S)dGN=M(+>c?%}yR9G6zbo%=(zcGEdIV{Uo&CM4fGoL#iM7FPUVlu@eyhPh z4et+C)cGBeI{L0UKY{-Wz|6$_qaqv(Ep0%C)Xr50WR48&ep4k-s_#DbN1>U2YdMyn zyg)|UQqKz1WN#_Hcf&uG8o+dGA%7Op-T}0WJ}Akp;C=Vu2PQ~;e&<8%ZX2$(k&c_8 z9Y}it-yQG|Syl$NpY`!w(8%;2^p8!Pk%j5^g7!K_)^7YHHH3me*lmeK(37YZTJtC$)(8`{bJtnRzzSNBU~ z{_+zjv8la{g`TUhHBiaa!NQOjv=GPeu2cSfoekh_#nJb2NEuogJD327nLtku15M_L znp%KVgqU8`0;DR!hCpir(5kO{8PNJDMkbEm|D%1o*~9(efpyulGy+mOMw94%OEyxSn8?Wm1; z=|j_jX^9HYS4%yk(OrFhxT;WMfLHkhj%Sb!V~FbjgbQz{YieL33Bibbm5 zq5V}|#ez#IDQ<4!I0=StG;)2_kPSBCrz`|qJ=O)J!;dIK{Ty`$r9`g=B0iA|=Zt>3 zIht8Itg8&Tc_rabxk||a4_4Dw_Guc)rASLfFhC#0zGcs zxx*b{5(=>mHi?1Yd_2D|z$Y4!7aRFdmvAt!o&m$1;lX;lyGdTgtEVVnJhW#S73i}? zq4t2lsUZlW@BmFcPNd}z8y|wm-0|3#WzJpIS0vj|!oafgza(y7Pn1S^-rPtSc|Pgx zp>F^n4|Nt2LhrT(?NJA}!SZAQATM&jyj9r2H*|NS^hDU)Y(cB5@lo2XmlKG5fXmQZ zzOp08C40C|qfH9zp^k|#DOs3SLCP-ZyTW`H!icm4!B)&9Cy;f4`VS+sz|5Dii`yC5 zduq$Az)t~9aK5Pym}{vC9+X4JkFi6y7ntFDLb-@P)qcMZNG1_3(*s($!%ZU(COhwU|H@ z+gG#-KG`EWcj3DfYN-7{Y`%25YhYAvF3bKXgZIb7M9wxW)?OUW5ada6pR(_Z!4 zvi-)9eB557qYi51G6p;yj#GrU)N@(M+JMCV_gtIK4D+)j+8s4`lB39&pJA}(Mv>vD z8YTz7U9T-!a?DHCTF&$&)n+xkU!@5ud9SHiTiIKazS!SXSKroH&$xKO>BivNi`F53 zP-Nl>{(ksV%4b15Byf7pi5FBsF4JWLd%Vqbofi`gNY-CDpKGRnS=@VT$p<8)r{7DS zc9~{~DwR3mJs5W=t6!YwE%Pva@q+7SPw2~1sIrMC+++~ay4|7OuHE|e#o*HUh0RFw z+6f~f^>}lwYTk=SN_j6dsm7bHQbxzaEtt~Hd-zy0ER2$q0Sn=c*~XJ(@7;iBO`5$f z*0jTi5Cbdg%<$&Ls+D`Uk00DUPIRRVij;`>jhG8qEwbxhk@wYAds&rnN>} zec@FH3w52cl;6|I9!AnSzvzv>XwDfxY`UT9tzMfk4$tpN+9;48c@BKXG|d3V0w=#q zr{v`FWS6e0V3zRRSC&`FU*A7_pE{cgEM*vGs!icz6ML^;=vsIdo|Fcw20pVXOz8Y^ zb9*w*x81g}%Ve@HSdD|l7gcnOJVw@WB|dmh7s@P8s$?p5{D zNtfpaJ+J42CFwLMCPir|=hGNS7b-Ii+qc_YI$lDrLak0bK!VZK5J!(Kwn9r@9IMoA zhX__Sg|Fd{c8Bq!#kPPKM1;05H6>|-QoTfdM}cM+kEGD|5*jL4r6tXMj4SpT+NeJ* zE$!ke<@yYz1ObnuWL-_3o5EyQe<=KP1d;Rh3?OGfEFl6P@SK)_)uC@Wb|t$*02&1f(CBsk5#sCfW(lWmeO4S~Hwg*^?p{VX^%gkR@X&Ho-rObt1JwvSIoALiRbe3w zm$_1A6UmDCH<5lk(&uivgV@QKCgG>J?lIqbg3BtzoP>lezlj)Wffx1=Pg;prod&j{ z36d^{;Xg$@b@~_|QVp(SpsY^36?Pe+ts_=e@8AZcLG-`6-l8E|3$^)*he@e3Q>CvY zr0#@e#r9bYMs#Sx*tp%PST5Ead6t-Xz)p-AMm?&hGMRP>zsuKVn#G(m$1ROzibQLu58M7 zRq~^UNT^1)SiroRl$3panPt;8HsVkA@iga^YDCx!xlBm}gXvmJUJqOfmfpA|T#%L@JA;Kz?4O!Znbm^=Hms1_2_)}pFpiX#>;mPLnAA`Kmzg(ADuBD`t|d!J=Vn3G&LB(df26q33)w2YlXO3wqG z)p9GGqXjO55M8_^9h3AqXJKWBptaP8ZW*t`;$WLEp_8ikdzc$&+&K_AxGP?WDY2v_ zZ0D74NrAoqfr8SA0>c)0^lHEoFsEi?Jsct2%pzE~GnH{JDJGTQzKalhbg|LDMBbi! za*S%<4E>@Hj#(;dI&?KW`%^!gnTU{jIJ7S{L&dQpoJf@A@QJH7iU6OwU#%>aW5X2JuB^|fxBz$Z!@+Yvm zaYFtVW9JxM*|x3i*hZyd+jdg1Q%S|PZB%UAX2q)5wr$(CzE%6&bN0UN-geuU{8(%D zHAf$P^r2+7^*#d~$x(Bqn0gA#oR^UWnU6M4YWCS26A?Sg)+`As`+z#y*31`Kh)7di zSbA2Zk3~v2WFMs)m$6SJ98dh4*b9F6-D6~$+LvJB$7I6&P>x8P_%5=TRlsz>*}V>a zuSv-47j9zF$*>LhJ{v2F8&9D>>w!!sgP}Jg8kMV7KpP)2^=b~v47&X-o<2``AMSzAO$$%gin2vO*<1!A%9eYs zL*~qA2JOX3+wT&ygDEJTBZ!J^^H!AsRn#TqW8Qha(1E2DN$n8=#zWr?4Wr<3LJSNX z;G$o04vYnI*5z2=t%4=`*ZH?J>G|7I*+j)uMy9ND@!!r@r57qB%KlfsBSh~kZHz>f zr_Z#OTC{%fGKMI}$VJ*c>5h}muqv4ABz1@2y2niu%@Y_p{dz(@1_;%CZ6#~U|%|EX} zJT^1}g#w+Teu}6{)UmheuB`eY>Q03-HleQfOoa_JQ_0oP&Gv*dZaRQM(@oU|ZPSx{ zr9c*mcP`C+ds>G0fW{vFGkx|6#*4EvgP*ABSf1zsy(qlZF(PVOX8v8dMeHTg@j4jc zo%aP1p0D>jXc8`aSm{ReImKh_h%Jg0kD)Ndnx);?ecZ8o&2q!|;6xSEdBre!Y zdah2}k5$$=C$X8B0&t1&_$--~jJn?Ukk{e8sJ+KHdUuHX<7B~^jD$mltV`;<%%#68 z`geWzst^P~IN~(!%>Ddr-+eYA6-=LvQ~E8V&Z%}9y7pYPNfqFz&9q^q_tbMDEqtd# zTQp%41}5wIBi^ah3BB-X4j%{e?oN$VxU_RGoWqT0S0 zejUSw#OOr4I3V{w_7>uvI7GVO;OVOWM(To7I?O3smd1^6F3ngsxP4Tg0)i;_w2Sru z-13qwcp9z8=AX`uAl00-B#KxGF0Bcx%HdP`Nz30}!hZj2V=moY!RAEf-xnX3b2>)f1)#6#MSQ4EEKr(sx=6M~Ofk6h zy~@6AeZOz=itVtN{qJ%7x1j#I`0PZf<$U?VVAzSAJ=h2gOXRAQ-*rXPE6J6$?-Mu! z$_a@^{RM-Xkd%dC@j&H`t-lIq%h1meGgXfm+<#n#H-O<{5?VF zF~#7OGqWH99iT4kvn zwTzWi2L;TK;v|I@b~0YfoRn4UZ?%-~GpO1YNyY*b)4VLcU0Ixwe5HfCT_UBnDS>7&!ui>-aD=bHH%W=c( zaFg^n{BEa5CzRN84j?iDYwHxf9&R!0I2dJ&wkKMk#>INvzgNO>u z0l2wF<7B{HpoN9kgP18&c#yN0{ra?buzPzw4@LOyM`n&yHr}rO&hN=j7Se(k9k>0^ zRv`}n&8hMWJORVXy|fxgC$g~bynjw7jCWfNgc>?*{I*M6{E($)eOiuAvwgesyN(^Z z`gBm|^Gy?*GZ~Se5L2D4~@163!@Fqprwe?=TMB-8Lwd;kgV$%fV1OlaM4C;^*?~%3eu+Z zF2i%%^oHCfvln019G?ndy{Bb=si-VyW+%xr*WA3o9pGAJHl#fl!_L>Q?5-GGdNEae z?7D1nGFiP8`AmKJ)TZMFQ{pZ%`079AKt&D31*VA0dTPK7vdAt17EYr< z^FwNhNYGv?0?bnmigcf1VP_PKNRa^!Hds%3A$EX%e)xFc;E~+U#VjYDcOd)fbrpty%)oUNiy-02nvG-|H1=Zogv_(RH$BAT^XPv?zK(~Re@>s3v^6xY2c+g^YDz7Seb zP@s!3DFxqJ^T7VPjWu6+2o4Mf!I0iXfUVy1yNg`F%uF8&O~LpE;vg@_1n1+;uP1=sdYwdf?vq zTV*gGn%!dPn!mQrVJ3c5t9Q$zb!7V?fOCSUPf$N8<@Joh^oWAv=dymGaLxBigo%=4 zh+YVh=P27suIs@AccEyK=$?n!NcXAwQ7zpqfVLsHJt-gck>ca6+|3HJQMD!b0>=2{ z0X~afM@>mt7 zHN6$z_$Kr)`Z~mojXHNGu?D;}s0<2Et|?>X)sB)Hr5@B? zgJ4|w>H~Y@9qtUH5ptXX4MVEl&IbbUW)`9B@a|#p!J6UwXn~*2=YG_)I+*gFZEj<^y;?_J zcRo0&i6hh56g7kK#KzDCa<8r(*9ByXbXN|QVY%mYugBb(u-R2>+>sf5Q=Yn?8C7G9 zcg}N}FnGg5V1KV?C{T*%uf(cfiR>v_URKtsP9~l{fK}(EuI2F}|AyfG=FO?%c`bBc znH-oo1~}VtA$v+WGsJGFqL7wFv>n1tdx{aHj2-E>u`p=V`Z22CbvS>SiDa(YR?4(Y7!Gk zG>i1bGwNp*swYC*g$hw6dQHHX65x;&c+ql}Jo7$fVm9oW-Vp4cb>g^6NY}nPDk>Oo z+9yL_4H8P8x;b03=Av{Vm|>Yyuv^%!t+enNK`}w4BMJfmlyWJx`zmr+- z*|A1f@F?FD-$3zX?bi^?&y5*?Mr-3mU%N8IZjKmy-%pU!W8AG-ZBmcI6dvt6c1V9> z+ak=N3g{ppf~7(Bl|7jt z6q|Z2LwI}j*{V52$vDq#X`_g%rhdrs8@ko>&oa=BP-}=p`M^i?ZzrQ0+ zIYaW+VQr|n<_e8=^?1N3;f#a*A^(VL-IYVY22(`kQdHE*fRfa8A##wSKGIrKQjOLr ze=?HZAG_a-w z19rOV3NJyl$lQC%I;kGE=_Zf45lu~VLROaYIsRcXo$e#EekZRpqO~d2rq$K`O+)9m ze=DhP6dJK&DQC_iwn)@&WZQB8mw(rdt`&npA*K>@Lt4#p1g`O#>3}Bl%a{s6=ngfc zP==5+z1$nj&$d&EGG}0NrrUA~TcJgEO^;xk)3^D_FSWU_QogxqpB$eYLor|mb2RCu zV90C3?oytrlXep?3?{275f#Hr84>Wq#bgH7Oj$CbI`)sk55z01zb-@lj6g~vdaX&h z9-gFD(z8vu>mjcY%DZ6N6kf05T^_w|mM_}znO{E&&X=MPby;P5`qj%C-obvW-|gwt z-469Tbp)DYU`NQmrh^M42!I7=HqHfy`pu@E_Hrp#H*i%i`@$oPIpr+++Tpd?2B>$x_x>Ln&I%zJJ!rdx2&9^{jim!XEHM-=2|F(Oc7HIQ&Fw1Wd=t6do zTV%%1l_LwEOQS(bJ!($|9U&TOpe4IJ!m#kd&~hjA=pKBo!5 zc)}7aRM^pl!V~CaC|Tz{v^-=u2OKwrEF7-dg+3^p=Q;Clv^FK$IeGRr;x2a{?9Np} z{WR@dn35*3vAtuVzl!c<1+0`qF*D@zlrVm^h_-41oQY1Yp7+}cXzYV0r@ddM$q< zD~rP-D1Nh@sK_-Ep&8tbv`6#C#P9W+wyLVo;mPL#Z8sGG?sq(wIs|<*Jq$|+P@b$72t3~W^KmZ^SSCFj zh63K|>dtcGF(Ovmy=OHr6>MBPsy%eoZ7p{}_m(w*)_`~5byHt33^_y%NpY{6C0g_A ze+Vk|ctF2O3`w}k_MoCTi#I9s$e>gvRIBx1q9{voZ~)KFN%%fUHOcqPqtNB|8=*O zqRx_dfK3u1IpjgN4T;jAz~?}ECjm7>3a_f;k{FckocPju9$c@pUdT9ePBQbH6+nVR zQ-wPn)~wQ8#9id@J)3~}eSLcNt=3mgkmer=Wqfu#=k4v)rrnYBVNxmS!g=bDhfB5~S0a6-M^! z{(_3OE;W7S;)IzP(6ENx+gB`FiXZK9cmf0qC0U8^xJ=eDH39=Tn504IQ!s_OGe|~4 zH3P!QD3{SkVntw~X`gyHK%HP@B$n^5;>*+{^ohV~C+y2kOnxF$jcB zBDCkpv4mj=@tomC;|L7|Iz#0!upj|44${&M&}y~A7WyO;hV@uvK^0$I5cU)UUZ1<0 zTY;!yVxm6UR2lp|78J5auv8Rz=YY&|6;W!aMNSG_260Wp(Yd5)u6IEFWLOwkp#1)Uk_hiT9}z@UpH73=xN}pI%=pm+^<43f|hkOA3XxL zVQkWPTSn?W4m)2H8*EP~^!^;6@hcUd5v3P=0Iu13Eu}DD0-Fbkcf9`g(jWDWLHNE9 z%D8qKTokHcC7!w`Y+WD3-~V1I0DNH?r)yQb4K_|vN@D3W?j>?C3To9^;BHnML#T$~ z2hG(H+`ip8e&^zi2OIJA3MOs~XJtq2u8*_hh1D&_I^U+ZSs#tlE+wQ zgT0)G)Q9y-+*TLs;~eDLBeTkwbRY=^!E+OrqfiZE&LzV}-EyeYdq40qc;|tkm2)6T zk*^uNnyFO|r z)%v00)UZXc>K6wmezg(#1fqe0@>N9nAXy7!LhICb>DP$09gaGLTbn!5=;Z%hwV%8U z=Wm_q{PytNxc;)-);i{5e9;Y;Fco43f6r}eRAe*YFRi<(QPo~j;f3*aC1`mKtlAIz zpoCbq08fPX~_yIE+Pq3uKfvdruJn!R|*1$n9}INpFoC{yhU2y-kWVYPFo%xnxl>fLvctCb}wzM*2O&%0ZQM@bj;kOht(U9>)WUfcL#A*S-ssNLt zh!ufbjY2#GReedyb7V#GXIS>Rh=j)&&T+J~Gr}gLqw3Zo$_#SwXPNe&7`*50Fpw ziuJxu?`zVtsb7xckqQy~cFk$yAXhjb9Qp_*W0RU`SIm=dDcNp`-pf(eAMdcwV4t8s zJ?@ntGu!e`Y1Ft~Ww#IYAuSy(V-boA6Usrfm4*w}vE$mf9I}Qx+tQjzq4TL69H`O8 zJJ_jBbav_Sp%Lt;gs9O*JKfR|hC4yhmg9X8>I+uvbC1>3#h;2NFj`@!K`0P3_qiy3 zaoJhhm*G)Ju>>kdOq?j_${UIfwGXV5d1EKdZ%z)MN(5+p&8F`TE9~i|2UpU(zuM~Z zPGy|O?r(ovc3uJU?>Sk4|Jh(cM7eY&x7eV{ZOhyQBkl*o3K>U}S3FBf+Dhv@1GabV zw6&BHQC32XDlxF+ltXKvfL_>6xzHWM$xaby^Vh z-5=+#fid`i+Rqz`#0UT-D=?`9kiuG2LDfzeW3V+{L3&cdJ}I0kt&X{XN!x~rgB@pUhJq*EV`B(QYaQk+7(+teBuFOCXg}5n_s&l^ryP^Lc~(pBe*?QOgyuhuWKW zkB61~4tJRfl%GjO<7te$EhSRkwWcfxZZG>v(S=$?2=ceVT=rxQG8&Ed*TL~(aES23 zlyzhnQ958y7e||^**79vKHcVFGD-KMnX$VWbj0*m=z8rrv(N|D@u4@BnjOWC8cKcAzif8CnbgOELIx$g1hc8(t4^%lHvDQ|zkdz0`<46ySdX$MstLt5 zj?ofD1ee2Uf+Ts^+=#kYx#$e3yNwZAg?xLNB!Wcmtc4SLlH@&^F~ac|ZO)fC{&oW0 z9-wXHMdvYf!Ld9CCY?H`=_D;piACm>Ypc=J-{GywEERa3F1Nv#%&R^hM98-6cBDCj z66OgW5^V&>_aMDkd#p?iBd+;8I>x0&ID`fr5ywpGMtg=lp9I9tLroGJl*|=3 z=BcTK^f8!9l?kaHn6zm251g2YBZG#qB1+novD2AI#Rex$65WQD>rc5L{zVlqRe{`B)>1*S&`%?ph z7Mt@k9Fgz_=XEjDjE2YgvX2PUX0Yxs5?eFq2QuQBADd+dqL{CL`(@i1EW4K*p7wyu zSHSDTsgvF3y8;UMhsE55fiprtBbwd$z3lXHuaU3rw3)0D4CjfO)qHA|BwoKhO_lf1 zkx>1oPT9(7Mm!vmvy9#8s!!~r< zV-T!P0S~S1w(d*Lmf!)6=h!-(W#NDksfbCg5ie2G{rZjVY9eyjOIb4fp-!xq;dpfi zw_qwNOro|raCC{^Tm;AoCB~0fYLRq&nUJj1UD)42iV4Q1^Gn_i2Xc>Bktvl*-@UY2 zH=eTS+MN-S^RF8{;@G7edf{TODAGs*%B`5Wtu=+w@7-VgJu2y0rd}B#dEv$oy zfv9n1vX68$A{1dI9JMnfh$+Ufh!o*t?C6rkux%QsggFQNg`MXBv57TECTE!%qgwP7 zW&=u{P~x>rfOQWcf`lnj6QRT^Pe=%S;bL?&k&Ucs4mB__ zu%Qk3l9&E>e0TzlFfqxdyd5zY5>Ul3%V7leaZ!NLU$g02-nfc$tlcPi;V%7}@H13n zepzrad?$e>;YV@$5AMPQS#MQy$Gf)bFdb;FD*^8|ok%XXZ2EDs=kXZJq`2iRR?QaL zcD}Q^YqOWSmui)2POD=!<>}Qsw&4kh26De9rjT3z5O{%dggmUiHv)IRA@FNWBt*#T zNCG;jojC#oGX74%FoKX;1EZgQO^hKH6vAqG#wJML!R`1fn#n@O1v2b7Hx!`Ts3|wR zSZb@WcgfU|dcVTuH9`)^Ku1V}iX0b?WkByhCd4|=?RyqE{@iZsOtNymoiVMApZC`Dv%{j5 zM$5)pyK~EJsyFQ>;1FCp>e&uXESWx%3Xp_p9mb3=yyI4TpKuW3fj{Oi zF>pM)ES>LQpNvu~phkc10hcKvH*lrD>IrpPi}gwlFlu%@%oBfM4;il=;6WtaRk`-{#IN0z8E0JWqJIoN9x@vK@ZovyKril+6o2^03z8C&L8L231{C5uX6WYp-FDR15HB9@%so?%)@xSrE`7$9Dx z*7A_knM+{(Zz!KjEB2ow%wnw@1ADup2NOCU!`-dMY-5L#bv8xo=SZ}V6Q1t4D)!e8 zv5BlkU#IDkB5*lrF7|6Zo8waGj5!Nhnux~I)x-ob232!fQqIdN=49FOjgl4et z7sD`5Z~9lDenb6C-w^6Of&XgKuUzeAO(~v{%5*lhAXJ z2jFaAd{9>hKFNX&3PYyf*b~+kXI~LPrhUXqAe(+?LgDvtr`&_hI@$|-F$L_b z3++5lVybc$!GTo$#%I&0+T&20jQ0|GvR}561S@iSXHso;*#-zr{$`66XiG8Dw1(o? zbar`-jF7e%4d^-gdcc-cH&D+!th=BVC4R^p)rl*gW>p3vJW#KEjydxBYdj%be?O%j zntZtF*Ht0aH$;OQ)>P22OQF-tT1nfKhko`Aq-hv+x?M~zRP=LlrDm ztb>a~$u5XxbCi6a@f;)zaXqS@Ff|tC01F3tWT{*cKv{>%LL__-ek?y$b|*mEPuM}uHF^3WsglYFHq zpVc#gi_k?Ghk=Q*lRZ1^bCBgZ>2s3RJm^c$X%PLNzFcm!-KVIC|t}-071++ktU3F+H{>XIjl@ zS_vJOEw{~E3^mDg9Sg-}aVSB>&QLw>(1CDECPX4v@9-?8(VqoSen~yyYE^ya2mB=U(Cm37)uh-i7cL>tQ*c=ZQD@+kHwB|XDkAv`Z|4#8qR)1S${rU+Fc=p;m-Q8ZhG)p&mFMpR>f@~#wp-8;U|QWW~d zid_z&8xB)NsS8WhW4w?WFPgO7h7b;Umt`cRELo(7jPJM6)n=# z2<3vd{fo$>04f=M8w5s8E5JyEqZsNHJvSbNJ(H$~SLBHbJW?-1GhiPrKYoWxEg+b3 zEQ%-sbeuvkac3*+N*LK0ZF_=9Qz&$A#sij?ic2Fv%xqq@z9hlDe5Dy|0g6^jD?r)- zSsA6zoa-fQN+V#J=q*EkQ#AlP%+?HfK>?(Lhy_FIWOmeX#`{{u%du80`Xfqg@c3pU zx`~+=^i`#T@lmymTwuQL!nCvczLDF6-!qcHG*kLsN5}oNUB$+WDPAw8^W(Gv7o*HX z*2eP8G^3a2>NM!rGW_L0&u8R4$=hVWqb}LWkp5ky6X1c};_7SNWWBfb`n!E_gZn01 z#_K6Ay%W-M*x+Y5h;-yJDPYqJIO!*v9}3OO0&germ0v&=TJFkMGxV*1^52D2VQFpD zq+(oc!i^7A_SoZ55iH=eh6Y8E>2EGZk11;bYu6SO`7yL%fU1GXmRivF=ABACZ&eh7 z3z`r_(bqGr99@%MKp#1RE9Dyvv9iLGBFxy=nq!li05ONf89o8KO zQ4bzqWurbOVuU;#4pf{zq>F->M{co-6I8706HhsQ6oa=K#<>b) zq1;in@ViUKei#XiFS$NKa$VgNBqU*4ILR7%ur;pNN=nn1aAfiFdqWqx#AT||!p`|Y z0eg}>X|0#StwiZ4Hdc2YkHp`*6<=N;i?+@#E8P`H9_%H)&mE)P zW%!XFTTuTz4rg4aZ;DA4xk0Tevqf8%m-L4BR4e!)kO=a0v`UhryUiI!7N=Xq+O5H! zBpbE^557p*^rJgnqU1yj(P)RF5Vwp`wOjWwokBmFUEV9_wlb~%#Jf89vxp8M5ar`u zY4x`tuXIVu0g|n0c_Y19v=ml=C z)7`d)Ww6;CNLQTH50*lAN9$QyNc}E`w(z2FmGa!7Rg9Gl&!afR7=wfd1t4E=Qe0IC zCu9(5A3@tRhX)gRkWQv&dpsSJ~WBa0~KtD;hmep%Ql zhti;Nuiew-HSFi{0R&q4R-%OneL2#A;$lk{_qcb9iTNdus5>>Xzc;=KftxD zo)v)iF7Ve6wX~VO(Z9s^3VPNKw1PI4hJd>)^-LTH0BS)22ZKL=0ZxE2n~9y71z`E( z?2n0-iIEXNVrO9hAa)c00#s!HVuFs5osokb0Amo+vlTZoGck1}U<2q}IXO6(0B{Nk zfD+QoK)~7rpjZU(F8)L!_!rlmmW2c0ikTSz7N=zfcwu1!$o>J$b_RgJm6HHP?THinA03t>sfcalw^?&Lw|420dNBjR(=I<;33jQS~hM^bKb1?ej@Bhw* zf|I`EUx<7m3E@9?|IuXvkZyo0MH?{*VHp4mfnLH8kQ6gVx4+B^ZVrHqNLU-&{K4M; zFfuW7a0JjCCKm25Aa@t{V#4i z0|662x68o{$bl9CC&2m#+rY-o`A3J#49E=w13Lh_^!GaeCm$eX=Hy`cBYpmd{U2Tc zx?BL&gOwG~X{<~D7(IYM58%!J?HE9v*I)yPX#pJoxRs3&AoOPjI0U%+M=*a~{rwro ze?s}&&mXD&UxEL1@89OR}M~= zzv%n_$pfHc0R(uBKVFzw837P}b_Rgd|4%T0K>ppue`o0LyaMJN9RQgAA4mV_#6O+I z0T5FE@%Lxs0I&uBEtdcdIy)->N6rS|N3a9*!JGtt&>^f0%m9=z8$e&q&ITy=k9M## zaQxS(V&P<`V_*kN$$ymn+Y2iL10BnsSr706SUFh#_+w}0{I5CyI%L3z{i}}u46Fam z_ILhR0Ez!se1F>j3(Y?w`$ydz40M151CC4hlQtI4Kdk~xgg+_zlZ?Ns{&$oAY5g;8 z{wkscSZRb+2mlTF=koFo66XJ_nG=jkGDF*@A!w?AW zL-70ouwltLdbyZB58u-{h7%|BS$9y?8fzt83zXIR0Ojb8Nm_8!Zyp&tX~#?(GXl4Q zTeLtn`;4GBf)6~pccQSVh4uHeutT46q>jla*qJxUw~ zBYSL!gHKP)IFQizNw%Ak7Bq~jY>%VN8C)H$xZ)k~rfxoYN&ObNOazjixPW94vLyDi zuUCCQ4{VhazNS0G_p53hB0gEW-gNhcTo;6M(|8wvBN7w#KcmHRl|FbIp*V_Nb2-vm$|8@)!Yk;o)&jSCS zeSuc|-&?04fVc3+_aAt{zs>>y3^hd?C2O-kT71CX^cN)QpQG*{*r$Js`2o`kuX)~CF1UdvmGHYjCiR^#+?xPJZ zxA=0Nau>PD;sFMQ4P0qs^jM0`E|UElm<^hNw}z_Jxi=IJ$OKqbWxd*Kf6uDO!e`9A z>&ad0XB{o93$qUq(1D|4otOi}QznoSaLR(6!P%G7>?bClR`9Mc>=yNW%uAzlh@)4a zQtOC~nQ@!lP2ej=ATyb}frk=oY8&vTO^`eP3p&;$o+tqyGK-gs`t$W9)x(K0czAH(J(y+!G4dRz5Y~Oup6~rZ-MdG(8O!YNeLRbVA&ni4NZu zW>YEZp(1R7)KB-~OxD|hw#9a8hZirF_J3D8_VGz=`BVghW|m8p{?(j1Y1g?Wgq7{ z0l{=@%)kI;$6V~w8s)~5Z*VAK(_zQ%QOu06%!GQtEmMI?O~B_da^ZC4B8?r|Q5>Ks zOit?hgJLXRoV2u0fDOi%40xqoeXavjhODS(f2Pe&?pBzzUjVuYMu~-3w@0r zHtRQT329+;}~x zyN1Z+1MVL9kc<&xz*HpovRf~85Abbw%aup8?$D20Voi9DTNIUpcs{L(+|fUqjLWyZ z#vgZ_*8*Q_qPeE4Is@_Z3RQzvXAzQeakaATu?7)%BH)jjX_)TF_`gjIidBQVycqY^s4jcGFyt`tI^)Q^S!y_^snA%rCxEd=S< z;%ZtG>{#-Ng%^#xAODTGs?6TQ|Czg>YtO!*|qpF0XkjdKVqK>R%APBwpg|QRJ5#&M3ne~kYT13t9 zyLrorq!F-aCLKcd149v!syAvjsuihL9ia)Q(Ms|fHItgrFKw`Fh){i^nLwK;@+$ya zRYNL-5^HuAMSp=(2)r1&jFGirq71q4YhRnT(mcnE^G1T~;ZT`-?s6I9ywt`LSFtv$ zXepLIR(J_xVp55@v{G)Vwh}3Q+g{*_%q#va+O2zXiMDHUNsS_ulGd+Ms*=()ghS0= z?>ijOUq|5ExAgpq_iRN$ZT6VQAhdy^PvVWpt(;5C>z*w;)R=GA*j%#4t+*-cbk-cu zy=SIgr;UaB`=NXA>vd2kf$E@bd*D0hZaBdsGZ{`1F3N~$JDBwU)Xc=kGzhY`@Kyf z@;$9`_V7>Qu77k9bGxi}+W7n=tf8-oT=+q)^}P)Bk;HkH<~R8SxwdRu+7qe_gdRPC zDqQKeD@NwZq;@$-fMqYiFa0bc8PUrA41Us05P^iTc!%=`8dghoWHN&rQ#fv_ zOm~W(h2yfQcjgK{(<@(oznA|ydFhe7PtTWxwuhhB&2d- zK>rc3-t1kf%MFKM4(L(YMEff5{EiJ&-c?P_4_E_ zx_bWcieY-Ip9h-`-+o*u&EA0xmu-pv>dRUusk3dZ1Ipt>&5T>AY}>c_)u$r9j+556 z@c|>ZGcOMgpGIH%eiI&dDZ2=Nvw6|~8AQ2^T+JgX@9UEH~M7#XHtoe(OySGm&Ie4z0^x`DH^**>Q5B#AjYV~#2TF~a%{c9D8i^xD40t}YDUM}1i1fpirtlu#_*~Vl=gaLE>ejZ59zw-`TyLxn z}RP@~yPpSFWA zGis%^X0@yd`9hc6sQUEgk&HF5xCw8kT5;soY~!#4^q#)o*9kL!ciL+=)s(Q|))-o-UL)<@%=pP}$Bmv)SC6c)pg zByTSOO-V2UuB*|}#%mN!6RzAB8Z8tAaEwM4c2>HUgOf6>j+$yOfi4{t4Q8E^tjGJ( zs_}}pn=nrFTH~Z~3R=n!$yk##&7&`w2G6rFdH_5J$Rx5Pi6}DvE^izyQsTRP zT}Pep4LA3Rq|}=|K~F((9|$rT+VK5-i+B_hB~eWtMSR|FAM!6@(uNy_B*~Ex7PQO{CrP2g{_cbgI>xE{{K9@OZQ_Qe)I@vFs)6vG>mDgF4^22(x5?@5m zB_>VDDH~U4u4bvJ`{j<6t2eWi)q$0(Uf|{JxD_yK)_7kaK{`ZzNxH`Ku8U-43w(2; zYvk5c{~fbG;?x3D-y&sPZbY_TI9E~_)moSvw|i~Xt6U!9TD!W}a8yq?Al6$*YPW$O zy*X^D&8AgpFw5SyOGA6zSc}p;G1->37<5p>0iP^{!t7f98|@P*g6O8XHakIh7A1f1 zg^(r5u0A47$U0IJm=h^<5cD@%h}h2bw&5g<+V7F;+_N*+Mt&kjmY}a9!SUZW&-Hz+ z^o%1Nr`Bv+?!GyIj#{W=>1U7=I0<83>a`WAJL??VuMSvZ@qdR0d;?DuUawKZfBQlY zoLW+9t-OdbVMR)Hn+vXR4BJ>!coqkLeh-pWX0q7$%vIPqIf+*>G=Y{>KU8_tf4eV(H$}TVLDi^6Sg}&(d+!LrY#Y|LR#S7WvWyv6? zN(QtDTdN|aRH9KDe&<J>r3`D&4wAwN3BN+#G4?IuIL+0Sec>|&~y ziT$}jUz&5xB#uTLi6{dPWUrq1_eBw!e^{q<_m1J!qU~sUq(I|QGrJZ5q4Lw5%?md%fD#GT(O?M0?TIb{WKzzoFtY!F{_}JuH1cD5>c{Q|CiAy2y<0U z1$CyrT)@G+9lr^d>^zE?0B|BoeEsmJt8Y?thP|P9XjR8TZ=oOUAk5Gp-#bqlp6nBL^#AEl5t$hNy#Q7@V6yNw;y7i>z!vi-O)S29Ffzc497E!i5sb= zcja`nl{gY-vmYv~+O};H&7VQ(tQE4J>QH|Bk-k8I-HUrIu8Pfu#xU{!xO)rWIF@Z) zv&GB|7Be%mY%w!4TFlJM%uJSK$pVX+87*dJW`-y4bI;!UymQ~3J9i=`CMFcE=&G)+ z%v_n>)%CCZzwF^aV2t1Qv%C60`9v<#C|XzQtJ_DBRnG0qQZ~saWb9yzfZbGX^G23g z85KHpPQ_~0Gnr3GRy5vbIxFhin2WDGSs%Uwn-Jew{JV_v0j>Oy`Ti{h@R#`ik7U3< zQXoSASqkLifd5JMgXM$f`iJ2De>?lZ`XNsK7K0f-vL6f|c@8F~kHtbivLB2elI3q% zpOc;QLv&?eVgKKfAHQXx-|OrC34Q!GM)p4>tl$6tYX8TX{{YJVUCR1D#Nkiv>;LV% z2lMYmdH+)7f2S%q{?dB?q0D|HM*iOR-+7Mz==J|f6=VASE`pD2jIq8Iv}>kzY}eOb z0>t2RzCK(RgoyMu@VrL2oypZHNBqtM5;SZyLwL96d~wBtuDF~>ev`f8pKW#HWVz?R zj^R;Y=h8xJbn`_H>}sPgpd)9^Rf~?q!Gw%Gj^{WxXPUbbn!$7NIhHv4&}8WQ?_J4m zkl;j)ML2kkUC3%Rg&z8$w1Gte0RbR+SJFW(>4;`sbUy@BEH&t57hgH~=6&VR#u}_@ z**PGJ7^&EaO0f*31Xfw3i6ObJD|M}u_z&pOBA%&oP09_3sK?oFH5OL;e9{a-*9quG zT#Q>hj`#C8Gq;J_dPC`wKu6Hre2y<5IUiz6U%UaRNN_l?NU{TUw0V20*N ztGy0g@!&kKe01E>0^NPq+(PAe^*l~O3FhSDv%bE6|Ga&F*k;A#FwwN1&3V7(Fu{3G z1_TP=t_Ao#g(+Uaq^#B^L3HW@3%s6CW2f6!ocquMydeOhCb~@|u50II-hf84RCGzJg^EC&HT9k5=XL$2nHwPAE^Q{HCqO+2Oy^pk z2+(AXC%H|RR=>Fk7PTlAuRLI{RwX2d*%+4su@Gg^rB)o1HL7pm2~H|;&X<)chM5Q<2pTK|6zT5}$%WBvlnM^VfIt_}SCz>w)x1U4aL6u1cps6HD_AXy_eI*!`4e%LRI z8vUv+Lm=1?V94&KDn#^do<`g~0mS|;AvIX({^L^g5J5y5@DttXY0;S-RQx27S02c2 zP&Gh}J|@5;mKSoq=EsI#S=9VAGA$6h7FaBY!DwH$s@2oG8Oe*K#JJ>v@4gi}k<=g^QbzUuK)gF3%@{@oN zfGt2|6ReR2>=jby*<9g)vK_pk$GH*KI;71OYXz=TYvcvZ+LWvZcn@R>ntB6$0b26{ zS;@xulHbT61hWUrm?q_(fF3QTYLQ9akDO zdMoF9jFPwZt1_X|`=hMS_cudQrFRSxVEi1f#wUjOBiV7XSs#Kh-v^xy-hNkko%=`X zHBY>pV_cL6X&Uy6lS&9MWZ4fw{&ah?myvG1qWFmex(euB@>y1+%jVjyN5jc#+x(6P zat7Y=Q|c2Y5`NDexttepANeE=pU%@m^?-Q9QU%lZrBXZv@wc<7)zLZ8S<$p{Q3T%M zopYMiAxk$(#INejHky{4y$=iqrIBP*4nPrO{GLg3--hnt@^Hd;tuAy zoXI$9je1ggf?wnbP`qYe^V`2FCMr3QAeF@If*%<)`9)9#Lzs-0z>bz+;@P5cm8p}= z*2XI7%1ny%$6gQZ?r?SEWhBaBlQRw%=GRaqif;;{+4S2AePNJOmq+Dj$fu}k0Y*^8 zEz{GWn$$cfO_nQnMh%~Z6=DSj2R0~GBd5bCrPzx==?mK8x~xh?lrGw`zf2WF2bTGm z6G;^DT;(+}Lm4MF%cp2ypY%0+Ovx?@J3GIFD#4^=g$nJv>1g?4KqH&?b~>xvT!#d0 zrb5BoeT-^pl;T&VFCAuS3I$wG=a)k2t#0Di@w%UH0*7GKki%Hmk5x<7zr-_aLlci7 zOgi&tL>biWG1l`O*5@yRs5FHa1qe=UF4b>9QB;Dt$XcnLyr0rsLZ6sJt&-!qbrN`O^5) zA#tkOGzLps!E>%8?n@8MRS4V|4hsW&CNTmen5Xp+;SyL`5PJqkGBP+JeTjirlSH>* zX}%y`3Jz7s9@vQ2^#H;cbqe*-te&vkj}le$3N3YW)FHU9ReU9TY$aX6I(@g_rx2C) zv;9g*7?bd%96<*xu1CM9$y7@##F;IW$h43$*K^~m zB)W_24`_VEj=I8LaWR#qIg+MHaiI?l)Y@eIB0~0pW|GBOhn@+vPJCb!U&OSGkDSCz zvA0U+2x-m5WN+O$Sy(E+N=Ro&^q^qxUP&q$I|VG+S7Tc?DxG64<}JN%A`Dr{P^x9( zv)cwxLCKo6l9c>xqAH$0(iSXga!+Clu`_%Zy*e%FkS=P9XI7(uh`4s*+O>D{IyxVI zxU##Z1}X)h+|(4w;`QLTQ9zZ5b3{%D_Ylsw|@u4-EL z5>Lr0lBC2s%PSM~v{PS(2V~*GrQ`^TR9un|l~}5=hKzM#_seck!Er0G;g-vptI^>UOjUh_&QMld$g>|( z@Y+a@f||?4pISKDpmVaV@*ICa&Gz=emRG@-*`}JF;doW)d$LPmHQQyY@qB|aERqm``JXctj0_tNGg=Bq102UeVU&}H9} z;l`GG1QzkIRHc^+Hoj9bf6cZBfT~LWaElZ)(ehIFl!dQISGrb06kwFVYEz=0vGIS3 zk}fXY1a5L(ARZdu|Bb;T zhf{sdAQ8(P;ebeyrrbcqwXYvC(g)$_OH6h6qdBj&??odV*v+}Qe!nzZ_`UuJp3WsX zqlT|2>Coo)BSmS|i4wOJaNwt?c~>5tZ^e0TyX}wmN$ur{5IDDf_S&A_nqFEtmK(}x zRl|YuU)*R)B6*wKW!eJwcO!r+ZLj>8yPZ?1TeV*6-Eix{?jW$|J4%`c!G!SO@X~QG;?+cdzx&T3y&l*1Jb*ZS z*{3|pq%J$wJdB+??M)ySZY-KnuoaD&(+phuDJ+69t%ApDvG%gmQ;zm2-U51MK!#-k zPEV*Aa=gImkLPb37StHaPT6=5AxN#NU2B+e0yB?0KHmId6VlsapE$EZ1w!1qeoiz$tMn0x8`a8IhGH0 zSsg61d7^Y3htHIpC-qKs+BFlR;$_`@{(_UeQ{j83#-4?mBtB4sPX9On#SJugx~NL! zot$=31Rscc8Q9{`xN7c#vnxyLy^} zxq{QTt`@uSojC80O8rX>|8*nYj*je-l;O#ZxIWej444d(0=TC-khnFC6csYDJ?=et zr+3SMlIlwcMx&6zAZbt``#~m(OOEWCo~Do5IC|D#uFqUYn`x6u&&miMC^xJeE?JcZ zWStyAe$N&;pr|Mwg&9@|oHE2gDbbK5gjsmpxNujNr{y?pHHNR@xCy>Lijc>3BR09% ztH|pIoX0*vyC0B1l{u@_4yu>X5A1W1|fY=5?)`wt`5Gf8Yutft6 zPl;~7Jd@!XH!t?4E)3+cXlUX@i6KVKjeY-7Hd{pcC4ollCn^=RxIE>Ke*H?`?8Y6p zEw^H&bYE7(wv5%$se1Apgn&e_Ru3`(Z<3+z3x6~Dnd?y)e6K+B$yqnT0ny|Ein!HYS|`R5Doa4@MN8 zk&e~>^@I3@Ybw%7YIh-6N++so&XSHVJtXfF9@~o^S!emU|eaEsa9&3&iR~P0Ko(gb&7efXW}rdNuf&>%T1FIF z>=E>+!6XRVZ+?c18V9$Hr)ED3D0k8@+P2?lX;DL*qZPTtGA|h^TnIao>{8BrO(YO?Z;sU zD!|t_B(M3Q2MjT)Bmxb|7HnIN1zBW*Vkg1&jn29TD`Byei*c`aTjs>kpatbPOKqdq zlY9=_{1*`gElm_UPLC*tcphpLS42eC(;!S7VjSaeK^Su!;?O6t`PKQhled(#sdYx; z7SpTOU>Alh6m|7Rb&DA%;8)4HM6@Ma&oWOgL@$?M@4k9}fX-m>qeR%OvGe2WjP*Ex zK@k~JLp!Zvw7HRbpihgSIX2RX5Ka3)Pn&M|=Xf)RWJw2|Oct*pYPi>9zh{{yDxk!lAu?jbfK=B>+9(%o3YDm|0$fQ{ASTjAZ<-tCe% zkLh$)LhW03dLfK-}B!UTL zUvJzd>vikAAk(V>I5Y`y&#r%SV}$>rzRD=0LyKG4V{FriWj#{OqRIBr7Mtp1OkF8s zCI4t?*);1SAQl%9u9=C03Sm$`92b$Q5bK-1n5V8ex%>+;{8E)$^W9Y5eeFD6=ScO5 zBChipN{^4I&*a)K@5$!66b8@DgpRcU6uv(3Mkz1H(K>3!tg27GSv~c@2y}yrOrPg~ zX&QMm+vvuTRLUc2#&ZWYE~MHvOycvwwtNd&vQ9ETEtNsEy!+d1YqeG@J}Yroyn;!d zy}4su@155bJ6Hc$B0GiJnRGIkpkir1mBz1UjdMp*yfOO`|im z*3Co|VbcB6SL}F8%(pTkfSKaPfQA+GYr=OX;=ZB^MxoO8Q^$j$W%13S^?2^Zxv{0x z7M6)UREP#FWX#eV(d6AxSWz040zxBcvXY1l$YWTI+x{uqTWb)wr=O@-8$4S)k7M3f zrccKA4foC+z4g{}IhUM()^Rm$8)a-*+9=RW=m;Ii9?xf)DE zc}Bp1`iWFPd{DIGqc!@n>;S^g($aF-JtK`wiJHi%9pp4E?81_p6>qQa-wIVaW^ z`YNsm(_#U?`Z7`Nz8@#d3T2-@r>QQ^p}Zx6at2!kNoAJfUJHH`t}hLUbVl>S27_R{8KK@dCZHA{bgRxWD`0CxIM(f^i@6a^ zqh;f3DDsL6a%Y9!ZsDtPm!CnBUf8%)5>FypV>^SP?wX77gM`o`eUjN+NZDM7{O3gk z%a3Flqx8tTBpMplhY%VT(jpDbd-~6BD87oZIsz19p~)g}W5%IeUunDu&3h@v1DW;= z1=z{*Q=_m9?NCKXow4~nbL-#8tX9F7VZN71DVy5SVn@5WNfbji#)I&bnwu6{ENUU3j66zc|3XHg9?dz*$NTQ)4z^h?Ma1S*&Qrn#$0C*{ z2)cAA&tjP1Rf79hk#=iNnj@-talLE{l8r#n%h@dPDt`5k9Nf>P&#Q^n**O}_#ng{x zHBGJ0>|U+wE7TLall%&fR-^O+2fw-p3Ko*E{<(h|Js7 zg%RIyI}^hO)qQw~Uu%r$2Y#;6u$gFh-n8)|Jv4)X2qiEgS=BuuYi>x=5 z>%nEQ4z;$Y&8u(>8+sl@+P22cVrNAQo_D!t-}Qd24(Is`|io%1W|<59EHqlS;Fh; zB1lZ_T}hmhBIQRhgX9f-nx5G!H>DMew}$5z<`TNjJIJ*=J8ycCmZa!Gv7q&SFwt_j ze%SM?BYGf_c++ZaU47OIU43j2Nv1c%?GnWO6}ZDc%yRt_C(hzO`?umj><#QLoYA-D zge>WMlZ7m)dY^eBL+ek}R>gahnV^;7yEE5(m3vW+Y zWe(ZxdYF#3Q@>4J;ZPl|aI;&VZyX#XMUYR#GVG`EE>$g%C?;&je>>h=<=M`rv>Qfc zk@;Ra|6?F2jJTHH1CdD}Si@L}&7uK@50QX;R3dUMGpuakQtBkRvG$0Zw6ILh_2HuDY6s+rq}35HJ%NfGo5|DlW*1yJxDw0jp%2H z^L^EwoQ>|=^$Fa)X|CON=rCb@v}>J*&ae4XW^d-r;`35m(*;Z?sm|Z0xuCSmtV?as za&8C;PpsN92n5qxy4LqWLi%-7ZL;faHV$iRN%sKCWFLN2o z@w2{RBsSIZWPRHUJl>3pCKawayvA7Ped#KzEZR$t(SejXfKa7GqYGoc1*uw;LcTP$ z$Bp$yjDUHalzzV5{_+baA_6|UcdPY27N7gIaW>}E+w#&d0sr_F^V-l4A0vyiVJchb z=ty+r%TL8rxu3HB@us=I$jKbn>)tRdo>rH0t@ypSdUGzfi~H^}Y!-Sq`E$IzRCXsp z_1H}E;c8lZwk@6*F&G{_EMeostTiQzkI!c1HSJ0%qRakxgGzjob-zzh&2 z)a;+0kY~=b<#&F@Z#hab)$u5J+|-XuY#J_wDZ_+3b;jy-NCsdc*xbkI*lVKUff~19dQIg zEFKaLRLkUmH#RUO`<~{y;wo)qph|X!YCYEbP3lD52EEuxVn$udy;(XL_G7J;M0bi+ zz1aXzSLY#+`7#7v#=>^@$8XW_DDiWWrsr=~E_^i>m)%H5!DnbEf>w)*)HIz3Ib6Lp zivc1tj(!T_Qe?R^qcudg1X5wdB&uUQJkHq1cj$(FRuYvx10H_yBS)V>lsx)@mkKaF zg3z?T$Rot%Ptkt*^vTk8e;mKrY$z-RC=bpT`HnzMKZ>QKu1Z5XP@xMQQ36cF zrxXPl7%gaL*WQm7J&|&n>Np5pzig5c7kQxv*gv+ln1CY?SWq0OC2$+q#$eJY&m<1) z2nZoDIXT$`b(=Ll^c?~Y`^uF*9MeOsHg?5#n4=sovvRTS837n?fK_S_LD z>Qb1>@L0RNgTqz zfS;s6TC;woV-!;@Qm?^=Bgt4dxkw6pg3Avf8g#^FT_#qmbSPA-Ch&hm3KUbAF3eiT z=WJ}#Uis2CCF|B{{;H*>wp5TsRGhi7qsPRvxiX{liIE|F%m@?Rm;KfRm3$NQ8!PMj z4MzhAR(EWCRElm3T|{P`@vnNg7-@^7QlX?oh<%@i*>I@0-;^o@k z-+s?yw)%nJ&iSPJa@A6q-Ex`jF<-uB`~HDx7x&p-JZSxfY9?LnO zE$glrLjZi|z&RfQIDT;yBnKzCBt(2EjP2KnDLAIH0bTN*fd?Jit^olCO4CA8L{`)L zxQtXa4mN|_-CgL^^oUgLHYN9Eh&j#ahBKkDc~{$y%J!EPR(2g{r^D~k?Am2G;S=fS z^IJ6clVV(+6=l^b&nnLkHT$L~>o;r1^rQpeHQ_ptbg^g<`}RN!D|m4=93`nr!EHiB z%}iK~3`f#eahu}NlXWZb%uy_3V^I5%=FRbu+AH<+t?m`Os>$n)j`*N~TfInEBtQHK zCrct3?Lc_cy@5KG(Cvl61A~Bovg;_f*p1A#}QJ7e~J>q0LL;QH|uLYCIk$1_O$@5w(?)Px} zZP!oR=SHjaYgHTRq+m5?S`C)n1d*2R7yYb$hY8fg?c%T|*xGF4eE zM`LZr7x!5Y__PS@GO@b%{BVYoaJx?H!--@|=M7EAENQIK+-i|@7$YJT@lj~k9Lw3S zqng!+#_F?gtK@t_8ORYR;&<{7N=nF&;u4|}nMrh>H*cvUlG~rY*0PwkF5bKBo#MPb z&Eqte(bLo&YptYm2(^DBjfHX=HY;AV?DL-UR`({ikaDQp*c5!hmvIQqwzd~LEA&)M zW@esbsIiYAp?SQdDJES_h;kce$??3I;W1qUp6O`v^^}$D^v9rFC$w!1Vt_RzRKb}D z#dSZc-;}_aTekfUH?YiLCfop53fE%!Pywe~yQzXx!T*UojDa3XrrRBak7+o;(G+|4 zZF)o%XIELIX*Rfk@8_o9G*Hny7BMdezlfdz+h{{xPq3b35bn`iAMo|{ulXGKb`ePr zh(U#FpcM83RBd^aagQbCtaV7!A&~d#oMcDp0G+44q|s~NSRjG+d{Vu>(qWaVbT^nU zC<9D^Rb*?!(Dg~cI+Po(`rjuhV&j1KAP>-Dp&t-{IuI|sfOJtW#DN+PUD=^^wvmTWc0AXGQTDCt&uog@Pl6E%MhqyQYt|@&S-54 zZi*LVqTT3{W4bx38&~^+fPP-BGHgeaYj|h|og&nWn545r8$<>=2Fs+%CE9=l3IN7d zhT!l@(gZWQac9gEpRDFg2qI!d>K_g3bcJQa211`PbcoY=RcLUvGrBBaTfHQPA^emc zm;dW#YOrARn61E?Ex0zOE+%_G<+NUPGP-`gcKL$L^P@X<7@e)i-o8ICpEcZaj(wdT z64wCMc@YwC9L?XUz2HI0nn}@j4y%9-!|;ph>+)$qP<^lsL%{LkSPU`d!`M48OrBifz@M`F;YD_GnEX{~_!Gxn{q2B!-U%Oz!;+ z!ybbc2#;PxhA9&&&er5>oo!&eT4uP}RGY&^t3@Bij|KfcD-|u9z9bbbgFX>znYw&~ zJ|q=bjbBz@s|-8v8cEqZ zS4z94f1J_^>uG~T|6Ay1oaUxiN6J$!q!||}l(3t(*n|KEUppJylMS&i6XSQhmeh>| z-(c&P#$dM{o25)@^c)WN@*#foj;oQ1e2>{@9%P`)m@dqzXM)$8A(Q=piB*5+reo7&Eb@!^wOxJ!ArCLXCL(zFATYKcK3cE5ln@F%NWOlod}GSNImqgrays0*zDRrWbo1waC`dRmX7|(R3Mdtn$u-mv zat`4T*WL`0@{>OUC~ct+e2yZ%shdv)aRc9(^9B4`7bjG4jF73Fop*a8%aLwFvggPTTRJwnt!?(1Cmfk{ zoen0lmTGM68P*=8n~Of~O%q>1%NYRQs4Hj?1910|csZGNN;o4w+utt~oO_$F^^=WS=7Tu3g?BX{1A@O>*hiMZk<#6OiI-Gt~E4zsF|E4KE)w7;I0evB2DMJ~~m$l0qEPaADb3W9YR)Nyfa*>N+VyM)So z-L|UcIIp&k#b=#yxS1hSoS;**|E@WSDzrEm_$y9ERV+N7>9k=J3;GR=8js`g4n$R% z7PG&+HS1(H+Cp_@?v?aSA!Fj9av-2_V<&JX^ahLg=hS2r8NeBu76>a_nauX{$0fk{ zb&;>wp%WlKe)0HZYCJ?U1l57Xhij64<5du(PlhSN7&*|>NE%sf>y-)>c-;dV_)F+T zi*579Yqv|KG@jT1@^ffkRz4;odAQTlg!mywFG)B{PgjJ!&yn~i9b5GMiSOE|(nrf% zp>Kmj=9wA`@d=z%MYJ(9VhlG`cub;L4iNEXB5VZ#Fat~#6r4p#X_RUEjkT3Jec(-Z zJ*M+1%F%dpaoP;|CqbtC%BR%xoN1pPs>jO1q{`o^X!xDYt>E8uMw~v=cmG;q zE_-q*d%&oXPH<|1lf@;hIS7gcu^KkgtY6>0RUmqLeE~2LWWqF=5iYWojbTSb)cZz> zFHD+T1GySxyUQkoaD@$QUvnDT<$yG*wPv&ZLYIh^hgB# zZTlvq0bP#AC3XfB6h6f*Sb92`&FNpse={{n`=xT0ek!~1Jf+5BJHqlFq38Q)N1N5! zYzCjL?s|HI)!eA6O`3+oTJ1H}%Aln>n*R-qGx;u=ccGm;5UwGrbXca`7~V{<|qLk*~1*wCM{AVnP) zlCFNgV@-3|GB)uVKlMv+nL^es#>TB0$ZFb|0K|vg_oxCkltF8ki?kdW;47noi4~9z z-bG+DYJVZy3Kl3>HZYlZ-MTdK1_S9`hh}>s7!p2R;YUPBQ8LF7K56|h?xw+W ziZ`_*&kO77pABq?S?9{(CniNh7e=N@V||4!NN+fKaB`SG&SA`}?r0rv(k)huFN~a4 zxyq!$c^+;at0low^?1w)D7^kuiay@d#!n%AB0z%2@<+xE`rnRxW3M8owh@ zm9Cz=T^{|;rmE5Uy`cTL|%U{k(3zAaB1F}5-bB-RL(>-U@qIMFm4!<}tB>WoVrk2yfhE8Z%#6gmZjg!pkrmEHa;rr?BE+># z*lOm9rxTWdBY&2AUlF`YERw>mJN>leZ1{`V10}4s<9z2v7aKhPyxIQgO&$|k(C<0P zO`c+CWaLiMe$^T#_NRjy;bhG4XFRNkk?6M#+DYQ4sSP!)t1E9N6@)|^>YiKU#-Fe$ ziTZ|EGPFHN#t-t%4C?ubgo<*(T}-fvgo&Fm#0sTiPD_DoqaSxXzvgdBSPV`MOKvG1 zN4@T58Ml`sy9ST#<^r2E&;YR(Cr;S;Rx8eyG^bzP> zs|vQems9F03P_jypRcj*dPg2a?$li>yIK-z!lcKa4kbc;!_t4KK=+dI5a|_EDd<6i z8um(1z_SXlXC4^Qe^ z30p0+&$Kogp=MBOWE!DiYBXdq>W&#wbK-W>lt7#j)8G$>EvUh~gdv4yOM}q_67pd~ zUfZV#x^sI@t?dSf@i+*vjGv^YKWUyVeX|ggZZ*3rKTOv4mqj3a!QCHK2cMt) z0L#phR(HpVjn1Z5O~_xchsR=DhLM#_d`gXD&A zdAvkjBAKw$U{8xc)UIDc zZ1R^bXTyt9wCAHLEr>4zD1PFwWxHbO4s>WKahIV3P;?cN-28aqc>>WwhAium`wa|o z!4~T5UL6!;4;^r666MwvnRZY~GRKInk|L+0OK7&eB#;pYBg()}KXf3fQRLeu@p$oqKx z&%J*z{@6JGa`+K^fbjl>?#9kWp!wm8{0H+;n}GcTf%xaw|Ck zSGfOS?fh5h9?Nf5=YPZ6$?~tfGwp;i>oNw!pnGp<`sFV{?_xMmgrsC*G-p=I*7&}i zBp9WPgLdd{&*7Zn)J{nG=M089%-BrpO467Kqib6;4T(GYu)>Acj$yn*yq^XLYU6qq zig7M$_?>D7Jr(Qb9r6`X;1ejIDQjG~qW4iNuk@LvJls(iEpREKH!1M>JfA6k-Z4$& zIOfL|A{$deaD|S(AMSOmh8gu+$&LvSMjbxgY%b@7`^=|(K=*8?WkIs`D~cC_h{J>^ zizL)%oU~K?yDyGkv9+It-#a3-tR&SbjFpCJL9Ehlf`|B+u_kuralx>ga|32JTUZisd?_enH%p1J;%4A$=XW((lU%mf++4@f%+y51M@Bg9q^p9(W!oPY?{}^TeazXhUO7@@LQ%(kk z4+8Fg3IXq!cnR za~BCSN!RBfP%WzcC4XgoiS+=yKXu33yLFF!i3V^HJuhj3o9gL^|wgJ9RJ66Bc5EcYs02qKy z`{k_rinZ77U3`$jBp}T9nMEY4d0y*fAYUXv>iXg$66+o#8Gr`FH*=h|4X0an${NrN z0C=38SVuhZQQ?3QWB@jjSbxFsj`H2v0UCh;D@zCI(U~D51%OdOz)Nm1_Z$vCln1~z zc=TL-{TIsPqZ@FpF(CB^KtK=#wA}ZSLoRmSn|iK?=>UL+Smg_70G@=qVPNnT0NP3c zY*h|%b$lc6ZT2*PQaXb7A@!=$x`(P2UUEWipmK;cU&k|}Xsn*qx&z~2h2AEYeCnWI z_i@l&JF6_b9B|4pWAdYzBZW4G-!SY1uJRdhCxrPl+!odjQ5GiMgWMKQ7-$BSP__Lv z&BH;Ml)$#i&&$UE%zbv(l?T{$@5Kk0p~$i$5_V@uh0+yJNERms2JQ~%ghvM>hXRuS;DoVtR0g3iIb(dP?~-`#|7!D7qksSlR~V5WBxh*8jP#*-q%p{2@6>$zdeb@33n-IF#5E~E(PmZM`g@3kDh96IfM7??{ zJUhuURU;4pT^OU>A6^YX{y>??iZRmmr_*dql9s!23kJ@?_D8YFZ5vSMDbcGgXp;PC*<; zVT2W!W3*D412A|KL7Y()6-9tU9)P0}tT_+II)FP5grh|1&O1gyH_HzG0CoJm{0AaO ziL8eFkH~SwNi`TNh7jHXZ`h1QZ?OQ6q^GA)svxCC2m-qOc#ESjG#^Q+_j6J^ydH5^ zxacnL2U6G`W?RI&&K?H9eUG=Rxk5Z|2yUhy`vxSS71~1|0{4w8%94L+g9SI>))p7O z3(*tjsa^iec>!!aAfXBwU6{Uhn_r)Q1)lf{Xe0#|0a@_^BRBrUhg_*0~@AM?4e&a-C^Z{)5 zLf8g#Z6X3F)Zw4VMa#+#Pj`%k`gdvCVXOnR5&L|A3Ahi&01Lj}p2&QD9%=Un9!F^? zhE<^8dSJCZ@~&_)Q<`0%I9oYAijz+bZtAlWjzUz|%$&hn=dzZ5KQ3@MU@JSlUHA9E za=+jcBnuEHlb@qe2vKodnxJ+;$+RN1szFCJ0$Q2ypC(};eH4z0%z_Qgz<~`V_`9wt zSt;s5zY5q=-SQdry7O>H5A-AT%QxIG*{57aY|!lQ`>BufgYk^dRnr>w^3*$)J6Y~8 zR5Pl)Kg-r+=Dg5tu)M?ft%FTvb$o*3n22m=cK1#UFIao@`{ld($TjYpF$omK@yWW| z+@R!goxVQ{W5_fLUH^Q@L!20`_wChoX%kzMy@xf!>%KJ8%zPLfL3CK@jIcPn^_1(UYiRY+{ zITu-&+=6vTrJ_VJ;?Jbw`Cg*<+!A;ANzw7NqPFk)hYU#YPWVK7!jcH5+>URE1?wFX z+o<>EKY%#&I0Yp7K)OIabJ^Z?wm_hst^m=IU!1Jr?lXHhWXhh8*@540DN4_dli%-f ztgkXRheY;HWUm<3f{zlHprjN$hSAE#&gGruxde|RFzylVPbTMO311T4U9K9-*tv+9 z2(0{I1s!dva++_~9&pZDWUZ%emn1z)--JI|r#vMwb!l&La3uF~6zx>65?&E}a@M;) zHUk98H$~@s33zZJv+%{C!6aG6gXMUh@6GaJIrH4FxORzJ{W5UYy_PzG1+&LB53$EN z54OkIm%Y*om{*(>ZU(u|wD@>T|61c1v#?R}FfR!2&!VsBTC}*3!FCbR1T!tH>t4hj zb*g7UB%Ut6N(5PkRzszAx7{%zGAs|Mxv z@e2@EOWUoMj9xjNj%aVQ8w{{PmWRql7JU9B@KR%_;bHqjZgeAnpLscFt2bYLfvqUfR*)tkm}c(P-m zTspeMr2*8WxUnm6_Ox@X;@^RwurpMGgOTvzY?iA*sF*AYyMtpf}6LGxY z2#4Z1GvU!T)ojY|>0-1PegR}hx8>8@@QT71Lx*6MQtiX~c*4AG{1K0nJQ!umF$~(W zdquzX8!*j+gu9+pBxAbsOd=omslo2JX&NwoX%kHj5a<3D&g552x(5`)BgRNOhaAzz zKt>(fXV8`)d_qgG_VXtt?pLijIb95`=0az?vHYOf2GAGfBsBJj_N$CxYZ_X0IUb+2 z6<~cC@3r!@rZZf=<=xt14O)`~`O4|9GgQfWpoB3A3|lEB88zVftvN9&`}=m@9;V9P z**OTGN$7^f{X%-0GgFDPMbahi*w;qMhjNVKS!GdD>LsP%ojay_ z9ER8S#)Cb+N%Ab><3}h|_ncrDrxGm^GN{ZKzA95P{*5ho=aelHvOpLCEc8R(4cz5uFFifQ9e-ZbN;gNNV+HS?R zZQHhOt76+WJGR-eZQC8&?(THh9VcJbTHoI5U0Y|LKj&QYM=IAfW-{lfIZDq{_xIPR0tJ)Qq&9&-=vIfDvy6kZsh^WZd!rX5;ATo_QR0J z?jA+-R*C8!ZS9T%q{nx_TsWfO~iS(2TUt?b^s>aS_SwiN*3+r_EgeRQ(o3+%uk%EYVw!MlDknQ zX{!n98t7DR@1jOJI*&(Cf2>XvYAQ8VnUa z!&9IRjq1#lDvW6C9K2GL3vnB93Z|0Z>=Zl_L5Pnj;mzimJ|+7Yei`Z~Rw18MSBYfr zVV8Q=B!aL?Up+C8N2$y*b0oae5Cw*yP_%>zZ~*F@bBn0rR6--2?F$>6vqKTns*|dj z7jGXN$JbN}y5(A-dyiYA6e=CC!irq9#}QMr&yph)*@ux^rH_brPKlEuTj3d_;ybHm z2e+Xpgshf-OJ#*;H7kzC;3(E)M<#QIFOlb+i^vjw8+I}ad4cLI zHxh?>dqRxT=Z76VMSSrX4=XdTHQ`nu|3Gn0n^kv8M=n49!PcWhnkE8s0lMZ zij5UQb!ALz@cfTEZF^-CEdE-CSwcFW+BVecHC(ptU< z-J2`s-OG*KeEdh|WuR_=C)GUvz@Jc*#Uhd1Jcm-Cc<2JKJhjmV$39|5SlY)n6B)SC zvdSz+GmJe5**7G5@cmx%TGw8iREcqm*}Fh*zc>aZ{KC4DwiOfZY@TlF#30rA)%!5r z-SV64W+2Z^^}_=5!rfaERRkq2-^9?3n%zeymf;(<>njB7^KrWmXKWx%e-3?|5m3Sd zX(mL&WRks`k!yNP*=D+xjcW$8nVAFbw~ltPSTkard^#h-qJ{X-QducWp##Df`9um|Htlw#=hPo9BeAbilR9*ai=D#U1U=mM!m zLwAc1w z+~|E+6ruySB7m7ZtL!-$bDNzW5or?~B=qh$L-GgTOqh`##q#XivOEFDhP-6SiljZ8 z9S3_U$n^k_=UvfK9WnZ}nnqFzU)@wp12CyBB@rR*LDt{C=wnhfhr4o4-^dW(iH zzvi9pq%EgiAM>VZ_`dhr>Sj3BzszAR%x-xqsL zE!Zs0UewveL24t07?Wj8CaFgp!PC%W4LZe)4nPh^*rux%b2D#rbtO78O( zlJ8he%XBzcI1gn&({^1Joi}@j!UcAJ)ZQhK@?763UA|<#`x5bkq5la9fc7~~aeT`&wb5C&CQ8E|Wu zQ)W^UdF@WFXK*gT#!|Ao*4|qPlC@&LAOHyg3>8fz@ zdB-<0x0!lbx~QasyQr+i^X-y@-&0M>*(%mM=^d1>0T#CJwPezsus;^Ru{RI^8zGKPPbhr$&B@n$DdQBoY_BJ4V znUh%K>TI|DLDYMDG#@C_{A=eHelvp8(dho?NZ_P&2jCj+55BVUFsTX>e96Ket9hGf z%>bc&R7~}k7OPd>R=(Dkmhl!--L&{B?dEJ5F)L^?^3|)~-X|w@cQtCNOWUCIf2vqU ztV*_4?Z@qM7ujk9Zfa1eINEK-2KXPVt#sJ zcv$Koshz0ovU;hB&Qu{GJfwhFoNnISF&hI%Yc{n=YyQIb8Cp#0VQgZCti~QeM@bk? zI;qp+=mL3NSGdB?PMn+^gNibKA8Qt$R_WcG4!4G9a2G12+~K-}@ehK~#|#BDq{g$l z?Hk@_s<0a>kb047>6tPBJf3l5f`0~uoQ_))Xm^6ZSibR5jqJOCGUr(2?2px2rQ$;g zrmjRj9_M_42MrZaC=CQPxF>8BrmYr>ybZI(i@P$FY@|*_s`CqcHr-^r-1D;!MCB3XnjC{lp+oXzbLJYV>E;0}=C6rEs|r zStc)V7o7nmh;6!8d19DL2~b^dMPhJp^(CC<&;y)wYfgK@(++q}ciykn$F*jxmUlgh z_45Vy**`muF`K4xj1VhVPsMfG9sG-1*p*aLT@ZABwbeCK5(xg5;oeDO%}SvzVC`Se zsZ#Yt^L3<^xY3fB_*Q29CF6n6ecS&qd^vU4+NSIJX5~T9#)kXb({)`7!#Kt-IksPv zcwFZnrN%aggXs9C0c$(SqYW{CHg>1bulk0bSvf%i0b6B*?J zH#c-fg0FdHeR1vf4xLH(-oQhn-6+Gy4IX;mUu%vgtAC<}__~BZ7K1kICuUi|pXuV|I zWzH*8YLTX?fyHU%&RdJ4S}(}u1yP;cpL|X2K~97nleT@L;k)v>jD}LiE;;+)nBP}w z8+x5`A+%v<)m6k^%HaOH=@7Tc^~YI(BSC+CEK*k6hPiM0I1}raOjV}=1ry9x+ZtUp z)))&j-4u{i2iYZ?L3$x@D&(i^^}&(*J1QcBQze03jPm`y`UHY9w^u<5AL;3|k~MLp zqz@Uf_upwcqp2YvQ{svNofVWeCA&aoXUYY1_TO39p@#L6vNMS@H*Ki(`wE1M6e-M| zUf&gDJWXz1P3{j*kc{3%A~nb5=a~ljh*(OGOf;@~yctMt#e|X84=Dk z=!=#ISSwa9KA)~RbYpXqqQ(lHm!;!e1m))Y8+EG}8h9abo)YNTiqr!+tjQ4(2fyT> zx~C}lL{}@n<3V{d_^74Y-3&ia68fPr$@@KR?wL++p%Lar)GMkd@tb68NAD5zv%i1& zfTZ?Ey86#)1`GRtsS^5U2>sU(UhKaj&@%kPl=nIA?;u*vPu%7I8xJ4Lr_77>Z{%3E z{{@Pcf#uU=_cuc9|5fpQinAD*IX@%Fe__#nCYS%PzkOzcpHjZR8`A!<+h-W^HxnQG z-_nwQiBJ9;py+>u(f)n1{w0t9pQq&iHzw_W9m{`4Nq;xC{e5-}KI7ZJYTo`mQ2q?K z|8?A_(~j$}emJhr{r-z!`g2bIJ?8#zQ}2I9wtuOa?LQdKlBR8jnUN(Po?#hMBoYs$wu4y66%h>YMe_WD$l?q{7~pht9(<6ryYQwTIJXC-?Q!tT4Fw@GyRruy=Mh zH~BL+i^q4)HL!1f0{{ZRQwNAn?xZX>V+P&^Py#kU0V!vxv$|uq>ym&)5CGG>x0S?D zIPV51F&@BbtjGLrx@>9G5^&D8`SR49&IE>I2KY9nce>YavwOET1QFyyBpllU{8h6! zVs2^)mWTuR7C0Ev*$f}of*u492EflDZ^ zgP}cWYf-Sfdn(bJEcksVBy5KAj}VwS6L`5Y%vZSN^Dt2nMRQKT-etRtNca#5l<}+F3$IJTa%ZQ=Toqp5xnzFCrS5Dr(4DO+%WYf zcFi-(bRgM4h1q7#FVLieUi14-Mc#a#y|!FE^a{klNAB+_qCkQUn6WSi=`-Q!j8SJo zC>rp`hE=se<&0Tp!l8_L=$Eh1h~XBA@mz`k=|ig8e&e2K4*q-xs}GTbs@jm%`y$%V zcg7$!LEz^Qu7&M_T99VKoa6&`+7K|x061d^`bdmx;+b$AWk`P#5LjcFnP7J5pdu%s zZ6p|{tJ===AD*tpor))7%viD{2=YROHi-1!F0$(r;ySslF2flZ*{{Q7i_!ox+N zZ`fGMYz;z;L%vXx#YunB$qv!B(&|_fr}pIL{>0^;rG4VN&^IU1lC0Jw>-M|3O(217 zD3=aiO9LnM6_1`n_pe_2ILK8!R@~@Fs1Y&^?5aZ6E^LQ9Utt`ph5f#dZXLF5>dwE)>t zP1!J$yi_5X5_bT~hze#jHAN@i#IM3}x$ES9a@R!uZon}NDs|E?w`1^zRU8(q2vhWm zFbuM8Kr##^n*js0E8>vm(~sbA!y*tr6QRHl#{DE9PwHAlp1?=JfajiEvO^dK`8Oy` zr!>U1-&wMIUwiD%F%7~2km)#N6gT7qmrvS4dlXqOz#kJc3-Lc$s*iwt(jS=_0nfJAsX5FpLz0I4?YNe}Nb5bI}% zx?x;v3qLtRvI5i~CvSqfC_*p%xG@c4q<$t;<11+m*$X*UP!DeUod<(GVIjsytEU_b z5w4iNGMu!&GDs}92q2mHZ3zTXxcIxj#7E1prm)G<%W7{R-e}}=6ow`kD%>L=8m9>m zEmJUGk-!>+kT~IEv^eh6JAZ#xAyo8?hMGyM4E<9#P9&HM+;D!#7V74^O^-`wj1h|0 z33B)Aj(R}nr&+n-iZ|uaQ|+c3@I!tm&@X51!1zu(XdlY^ zP?UCPk9`AZIqCtVkRRCb;}C?^qa|sA0qXm{pnC>!SI~ZX`+A@WcCELX!3>~CaDHn0 zMK)|g$0J#vcaJv#eDhD@h{+);rQzLS>4$+EP6=QiYWof-=R^0RmQ$K7P|6GLjXznlR#XK!R-CV%7oyZXFsmAJo+BFXt!TNodAqxCXEO;@T zElX676QiV_^Ms~Y!)dBfnxK_tazdG=_3V@qg9qV&++nzX^h5oYruD?;+MJt;L^ z3kIiv@6ui8uW+mE?DjMyQG%KF95m}d%%B5T=oay zs8UhhzIe0AA0zDnVYm;svz5LyA)y@lrz!lIzu$V!>CG;vFN{29rkRwH7sx~0K=;pc zj7+QcJMrNBF!f(LaWIwGLYPO(poCP+nm~Cs@&puY1lWZ55$fP1P%`kYVYm)o@`!F# zZ!eIpTv*T2VzohLWv@&$0vixdXmuG{EjZ=It2~>JyLmJ+X!8~!-r-=+L zHHCnRk99~r;rm@hJ_LNoGz;%zctx7MR=>aU_uARxE5Y&jYq@VwE(d7?b{a*9-CHKD z>)V>u6s=4Oa?W7EH9rG*-n=d9a*(MfTCpjH%zeu^KvkJl=4xEYef->=TjPB;V0)wJ zi^ffWoizDTh6^4@aBTN3Ud0HS6uh$sxP^YJ3%GU~yImFf>TgxU_0O$Jkz4i8Y$R{B zcNt6p_fjXtRRT_r8tp=+KfjXdH2Rlxy|pvG;$5omyjMm`vSuFN%TaAGmXmk)PI4Y9 zgyjajxh_d7_P=lF95`s<-cZUiT6WlxF6! zkeDuCP$JHuo_rrqea$Q#S~Cb~=CGZbA|zi^UjY~2_JND)#@1faQbID$b1uS<)w(o% z0@9Beous`Rt=rYkyJH6X0#hi0Vbwej@7Pe-VMOvQJlqUk6f)h_OYg$)ZTTdG$-Bu{XcA-%1=$~r6v`UH;o%*wy{`3-d z6nC#C^Dd3!N~h7a0j$nESrc>k4q5){HB{B{a}GTGXVf|rt3(i@vXeOUCAJ_U_F<4y z(99=h)ed_&BS*K1sy08nMA!NNVfuhVqeOXOWn5!EipI_LczNlyks_bTaA2ZY44N>| z&=X|(pr^sW;B5u7N%ThX;%P61u8I=?RCsumMCv&JLc|v78Fqe8pB`0LN_&RQhqbFzx zIy+6C`KC|%1%9BjC@~Ox>$6>}BO|xJCUf_!4=4t%H_p_+1yb|0n4D(-*vU=PYorR! zgVG!#Gd4V;Q?wx=cd*$*c*Q`qe8ULgo6Hs{Uk}4Lhb^2xwW!I#p(uXA%)=fqfnZyu z8444`=@X5~GCVl^IQ-u9XsLIDh$kkHlO9D}@U0t+PziQ+7fJM=t^;hYX~jgl-h z71-^GwArdOMx{1rbo54w!PzESfnjsQu&igh)3y2N6DqVz%#KTv$isQOCE`Yt zLCkri>`kLyjtZAh_8(z#81smeNfm%!jdJ0Q&JdWK2Czayt9ulfX1$_{i|P{7-eRod z8Ah&Z(fg+Hnlh|Pg`4XTt4&2Mb}YsI@w1e&jC8rV9fdE5^FkBW7;t5SRMl{{T1YUD z-xD;*#b7Xlj?U}zf6X*VNoZ*!r17a_F86d)l}k^e_}b@rg%%2W=dFpA?xRh zXlO}lxRHr4RN6_^V97s%U>Q;J8tF9EiN>%CKdy?__QdR?7AvEDcft}6g_Cn6Cwi@u z`GxaE_a*d&uCkY^J>-h3W7G#zm?KUDTXPkPuQ^&shum(Ifw16 zj>r9IU#&MX>UV#O)avSDG=lLkD8iB^iAFVwc`KIjlOdHU@)B21l$wNW%2$tqE!;H3 z(ED8F0OLf|C}Q_1A+Qt3NE23NNd9SF;c#x#HnryMoS0=XN|om3XWPN4vxP%+Ig+Z3 zWj}-8+if;1@jts2E6)3Fe*5zG{uoJj|G|01?fL!QsLMk%p+5E?gBa(XjCsPQh_jiA zQE(3UwP_NIh)4^_IzGyF=rj6cBAzE}7>uQpSFc%ng<;7$E;XHqe%Wr$YaVDK$wW~R zesfnfe6^Nx!O;G!BFxI+Tpw)noo$jBEvr~wh6O!EZ-Oj;1SKQI8!aW-^-wyh*R7Z& zwY#Z#sL^#SIE#aCD&O#aki?mz=BbFJ(pNae_#%`^zD-o#NiYY+ER$M9BQbH^n)-% zYu3Yi0;cJ1kwS%>$F>f_HXu_aI$womJ4+>QL@o-6V0O^4C6(5GRWqNmPr}F5+>ZRE zvyBx#nVOB7O7HgormoKKW3%dA{IA95ixiXIzvnqnmoyfLh}Vt6DTji}h<*%0 zF)AV2b|*1TQ7SHzzI6R^otd5*gzq($DNK-wr~sD>Gl&?2?wmTPl=mWQ`(9@u6N4!|b@Ie7nhgzj%aQsOXu-wf z1l*^?=;!k|BGQ^T%CRKO7Q6zgoFs|Jz_7mro4aQCKk8mN8zfv(zg^^PArZ#=`)Pax zC`?X1?B=xU9No|Ua;=ee3BfTTCPT)!nU`&ta;R}x*~%#?hy#x_RS%O$E|wgl%_Gp! zA^BE34zhAJPt2SJR5Fw%&8a+bx4!Dwvwi{@BTczelMq6W1Xu;PfMrMVF%K#WVp^< zT`5}>5*15D<`=s0`}xwmVq3xUJ*9v|4Zc1y7#XMxa{P$8bxryZUbMP7g`=cqIEUU3 z)1)!#F((*UQ+!z@`&wN;*y!&)7BRAC61Dk@c70NUbven?b1oAkWTp~>u8uz$dDYt* z%)2^B1Sw!L1iKbT@;4iPnTOBiQeFmH1_cJn!rr7Xn~;FqoRMuAZ8j?`5dq}VbCDt6 zKvncfFvUv5tM+wr+}6d1&6r&#ZMgV2{Lp6{XBT&l{n8@W-((gwK@Dnui z8jss}jwVe_6jH3HXqb9Qd461F36)c3#@lnCWqbTsL@CKC88?!GN+x4)UYL}0Q;!J8 zt3Dj6{;BP*<(k`Dx^^HqnMAB3DT5ek=|)uA+$!Zc^>kNDBBim(WOMsm>cV}3cu3>L#Ka9NZxz}do z8Zf2K@Knp#GXd}zc?O|1rQyVJaR(P|d@vE^T9OX9*^(Z)v2By>rzT(T2nJu32N%Iw z9D_NNFKpUEnD$~#Nksw zCVS_qRJ(?byU9TZ7r-CF6IJMls>WM@xy{~J5*a;SRv#)I!&kmNm24>zj@c@K2D1X% zQq#mpUnvvu4;t{Y;2Rf`e>SO80A247q$MC%9I%-bl*hNIM#N(ia1S(i$A2|$b9p5A z?A;fGA+Pvb4J-ru5WDVSX@oxfEc-O^ZSfEt0wsa!kkk7(su8)y6U-KwtTSRmksXoZ z@X`3F9OORIGl}aY&KTN*v|i!rBwEF$sOnv8BY-Zc~J={LxIowOXnf-s}oSYcB z)fOcf=$0Ai$jH1WCbio|rhR<5#D90*;`u0PJ9_S4N2J@R%t8#0`+R=3+SzlPq1NCj zoGLyMD;XBVC#V}l@i~7YWZS(j$qkU16wnd9BkC&rKKV(dDe!B09!i@wGV1WdnfH5E zd8t&pB=YZ4@FRXFor^(|pbr2SCg;X`(%qvhKAE(1pxuR(CC;$zpx zU_^5^zXv
FnNtcs6yeHaSSD)_0ozmKavUtgDK%J4^Z_imazM@m^#`^ehi)!`1! zad$p=Sy8eCz>a|q3gZ`Im`oFn$SAK~^G$k%hDgp z;%QS=ezP|I_3Owzy?nY&7*ok?&f@jTUOiyDw1<2QYY}Zb4v`%K&<~M7%`SqOvZb7E zd#~4D5i-@&mOqJ_8@rA|W#Yb^_6O{dB?MYx-&7j~Jnyy;%=9xcT;|J|j(gdwY-wI` zpa14OJD$nXO_H&{$ys}S77`E!G62}F&q&}|!B99I8cfM5jvI;=%$V_Lz+{})f6cHG zI^0gfquZe=79)p8O|)a`T%>s z;;7lRHxW~GcDyIAu$?2{D!W#OK?2FnJXV>YT3a^DX~U;e>X?XPc8qs8=%_7oE$H_o zDRwRtu8l_r0;d8-HiKR{X|+h})Ew<>ahxmTutDs~bp#n&vtS7V=Nwu(FhYZ?95QSX zI%>y?EBc{imQM1fT|s>{)31@bCu3b9$#tLGzH+W%LB=*N#vfg(f;~*?9m}$bZXVxG zE`oZYkmBW7+5VH`zV*>M@K?sGOB=}^>yWY)zBQp~mK`;#B8yV%ObMJbq22@*&RI55 zal&;0PJn~ow_F=8iAAqi%Ow6?bVu1D8b4-&nLC9N1vP~)=c0WB>WXXov~3XrLxB#u zrZLo%qc$Gw3-3{D@;z}32=n%i*63>wJx!iSbTESQa9!EXM{$t6^|sYzE6xBr0=g$E zRc{*R>~0Dj69=;!Bjxi+njI~k%Chk`h z%+h9#_08sKXTj;WlI#x@xkPvGF`Q`fc`~?@$O&4V-)st|DGCuLs&-!u z$!>6E+L9WwOlYiauoMo3`K(dp5|Vbwv(nt&TC1abXd=EXu#3`DD%s{TBByMa)_~)G zL&i3C->S*p$gEsAl>Az?1%fzguO-}F5wl{^+HKEi8;oiJk<%#apkg06tUl_nQe_@F zsA7eOQih?$n-TL%FQETu&!sA32QqFF1hMus-egJ)mZJhv>MO-!wwYWLk}}+i=(u{d zO!Xi|))Z&5s0%xH%}rL^(xT+7jQke6soaJDn`Csi-UK&mRXDx&Q$$BLm+{bQR;`_= z6WngSvk!U@jU6X;5jApXHWl_Zx^-|73Zg05XZ))Qy$GFxsp2auR;%1A(Onk@0vV^Q z6^IYS4mO2XYnWih!otx!B!g6Q&KxfdKEyxdiL5lJzS!Is>1z97&FO1--MndV4hC92 zYWOoX*9mI|?pS=&z+%!eR#m^zB7a|mnG3flsmI)JYX$pH)w~J&P4^HP$?C{(1sWr4s{ZC@Ce@H`Z7hI7qGSHK^h>I~QNnU@Y9&@8sYY434 zbo^O7tQrih#_DxrU~c+OwUj}h_a~+5l&U@V-FGJ@8_Jd`Z&#n~B)WQD00rl5q^+7G zi@>1~uXwgjn(qh(Iw@}9+qpm8v%PQ0a}^UM>y-JLhkl8^AyjCE*BUXz zjQkk|UFP2A@K}Ni8t5}gJnOaq{c%~69)I}wu6Qx863y}b_4mo8bjB>fPM^npTRto; zDA1KJo`!ha`s)7fTWAYOO8lO!T@@C07jmsgt2GrbFBc5Y@oX2s>TjS6iRezqY|Wu@ z9OAr%gZN-=$Ji7VACf3DLK{gKnn%n8eL(j5XcWj2&DR93340t-HkW&*~B@_dnFuuuOmZJLV2<#0;!#pVDl$ zPiyw)m%ZK0?KMC9Gk+h$!THzb65A(%;BSLINByH1CE{RdXHNWChxkix>7V=q1~xAC zPg(=ZXTgSxg^Q7ki|w;x#KQdf@7Y+H*;qcy4u9M2-+D`b>o)vLZ|N_};eVd_Klb_O z`F|Fk{_ZOND@WwNnTLO`aQuHQ(PsV>hZA#tau}F7n7O$BL00&yGW!#}@W0|Jd`_R> zUzORa(+;7`$UQG~e)5PYkYLv2VX4AN-1kL`etfAdc7QS9M<>vGj>CGnJgQPjXZJM{9pWtI^f3KDD9M!_KN9I3v4p7% z9sPD<$GKNlcp3=Tprkqw=e51;*4Y)SZT#N>M-2_9|9K7mmn-mpf+GAk*WdrT3iNlP z&c9ZH{(g!4b#-w3g|hQ+RUkI5&$acrK&(8j7dJO`G&6@~`o|dJ&%z-4 zzjT2vdtv<0HU3chDemZL80;7r^mdZ)joUj2`^#xlEh0O@Rzz5(V>kEXM`%I^^ zOhL@305}i;aCqV%gob7`XyTycU^HXaTqIOzU^pl@k+7F`p)g1=fGKaDEw^74S(vb> z0InpqcAQASqxQx`bE%mcr$=bi#fyPXl zFmTBcfjMoB>#GfzGB}tqGJKc` zHyG}|XeLaC7=a^N5D4<4hJLVv9hx!aObFe+YDM_dhs4$bGnB<3K4K@Pg(v}dVSIZ{ zI6xoTwTQ4T_^D^bP8$Gn4u>Twq-aV4A0i4pkj0F3Iz-=rZXpVg9MsQ5`u%z*o&ZJy zkVJfWc#I()xUh6nzkazR0hk`RbRa{5M){8RI`yu@Gj>D-{-JF_&vn8OJ~Qs4>=ycc z_m1U#z$NSAFG|Ocq-QL~^iB1X%E0+hwFSmBjQ0A|Q2X8Sn;=+@s%5n?!}e>=C1b>B z13qEIDxo`v6N^5W=di^(L;?tqQ*z(DgB;=wefQN}{ZYyf%^@<*31%CS?*O#}OIVxw zmB0aua_D48>MIWBAVUMl>Jh&7Wa;fNH-W`KF?t9NGuml>SPO*aAej>bdtL=<4&Mie z&5K$CwnK256V*(x_o3mp&1T*Y#L$ZZ;g!8eff1yHK}@ggy~SY{77aYkIq&H%oAlK~`ba`H z-vX#5``|+P!7A6GM3Exka>lUvkSLIm)KfwGX9Yi!B)N?Bpd2oR&xMa3kFdGpg~pzr zKMZ%*KH6{J-%C!61Aixtk%f4ey(WDpqf4+8AkFT3r=9*d!8!@Jgo_PO`Ss`HM!7Ta zqbM{o9-nkUEQ#bKa;o?Js{hA*U}RvHOUL0B%^vz-YXAEQliIsJh}t`N-ut|w5cdgj zGEG5&V%cl3+jA?@D-rZ7*>n1uR^JDOU!Q%)$EbGx=QsPFpZN*~*Xy1Q6uKws=Gv^z z7=2Yb11&e^ZuriA*==_QoUP_Hc|xr^?llNB=2>kyuPkMH;kK496bfkkSxzdKRx{BM zl_uXrg+l!bwB67&9!`m-3U8xA;-^8kW89*z2?X8ZBv>bp4fH!X5*<8pCEC05Iy-XP z>E(G}@8y0_+;*kf)ycmwYTi6r(|pn5sx$2Da&6W2(!1v@y5Oua+GtVLZbjYFB-Eyf z?QeZv?QBoZnc{o<;W$F^1?mZlJ@pCC#QVK71L?uY(D0{{)KzLrlxGY+i5mIhMSb+i zQ?;r0``t9uQ@K+0wGtiCu_yXQd6ab7H&WIU)esBT+*}1liZzs*iLg1V9dHufqQ{oo z^RVr{lNVF&Hvav3YNkI0I)*>@bmO6>6H?(6PR-M|Hm{pdgnK7w*-kS+D4p zNOIH)Y&z{H| z5iCI~qxf11lgVoDbHX`-af6q^6q%HDges9ji^h?4;~d>3lNL?QXPvE{)nMV^Iy~Vu z91;Pc6{a(I3_}kciHEz6(^Tz*IyTR|jSRWkXDlLyJq%YD6yY=sYGyJ4ExklZhEN%!WIJoWIaOydfbr92*erARCW3Ih`!KXI>J$U2cz(@E!Q`uXAR2fe? zb&cH0u%b9bE8GSxI9r&so)e|wQpF%8YW4Fo<-BFqY&)Dwhv?M-C+xW{Xb997$w<&{ zr_Hb_W#UFZH)=v@zt49V2WRXFMinJuH$W%hfFQNe3WQjhR3n~lbNShGkf)AWGkgqO zjwNnlqBb0b644TQuv?M^F7G#;HMe zq8kYAk&P@#;bdZ-h+*Vi(Nk7h%8yR%SZQ6kv$EkPLJdS{wPVZC`#!!5j*46@54^0K zv&?uxJ!v09Tg~3k##IvVc^Yws84tTigCS|>XYS?{aX}+*r$^_X#cFYHkAB0%M!l^F z8uBH?mmx0tdMVNI6NMa9 z&E-N)<7?sKvQnZLs}_fr&%1N2A4@-1RA1bE6C-Ih4bv#vujE<`1 zz-<^|)t^J6t@wjmZ1p2fi(AvrrYm zXgnudp_(`hCE7x(!wRA*ebcuUok2*YvU0FGz6PIFnCOfM%e7UIp41)dAd7^eU4SyE zMSDY}c!n68!Oyc9uk$6rz~PIlIv=8JoCaTwt-6Ld8Z^U6WFoh6AYO46o#AK@sXYfx z+7=Eu#YGkURRL=_I<`2SDX5H-jS~}T0foAtP2tPQ$?un{7CJcoNq|W4HTaEP1M&m| z9iOx9KM2XDLip!5{`N@LYu8KDA^G(>qf_B1GA>tTI0;fIvZ&|;K@MPSXkp1tkP&V@ z1Tk$b0(4c_+eM_^?u+DxNxs2UV%XSfYZ#>l;#uvuLQT)EC&Q0v#3QHe<0P=#b{J+C zJ?IR@bp0)wtoaWwAjZBZo^j#s)HtaDI*Q|Pe=hb)kX z%a!Mz`%JY=mCqCwCj^ci-6Yk(PY@mD5#WxurLhF_j#00TTDC8bY?y#~icTm%cV-TJ zgO-LaLfKMIoPja5I-LlkVNYJkXnbxm>mB)i@@)dV>n3n}Hx*fO6m^0d=wr@orU1UU zci*brZ_0*&gf!vU7$5)uxO68p`{J(+rd*T1;>@mNO<(itf2oK4^UL(>H`*51f`-rv zGjJgXvdfm3T`3_f4iz-pk;_+ZV*BL2jL4fKPO-8B1PL`sJUsb)Bm9Ky*;Bchmt~Ug zKGVq4u+!t|39YKN8$Nlz#q=gtO>7%4+mIU8w)R|VTR25&FH!-;snoyf=F|9kaP+eak%yJdLuMW-~Bl;mRcz$4cYma#A@3?8Um+1jq!) zdh5n-M4qAg8ki3Ca*SurGa8AHy5t>Czt14C_D|#HwbK4T3(OBJ{1E-1c!&HDd#3_D zgZd8o04@ma6N&}#V7Ap{X&H!vOQ`#~`TSgV{?7f^!`W3EuRQ91dqfciU0=h{!;n?o zBO0t9I}KO(Mr{Ym##f$Gq(~iXFhrTjm^$F#!DJtVZ6D;`0%DQp_j#MA1>~?Yz{7LR zF@m=X$HK$li&}7unsLb^?+m6#3 z0We^rYXJ;-$LrezO=xk zFG9W-3}$>Cv!;QdMv)y*!rPaGCH_+H>7fijfUDnCwJMjke5%sr zuRj7c&wqZMy%AE&+`0Kc;3%I8lsafTMPH{j1jXgEbiW6~rf4gjBT@=@XyF;<^g>T| z70TJlVZ^5G+@E69Q_FQxW%SW9vS+4pH$rIVSsPekhouX1G=}g8&8<<)g=F;xg-QC^Y-JSQI+0UMt=WKb;`E)*TU8z(^R#uWq-Bq>z zKOeX+qwL6$eP)D&f&8V=2@<4vm?A>{0?Qo%-fY|{NlU~HLpeg?Q|L}h0S(?x2iKmH zowk84g`RqR)s(P zIh2(HuXX(6&WEA9#3JhpAyQsC0Y;pK&~L&tGT;)4>?mr25e}6OO>~p%uauE0s-it? zVIrmGDyr%=)3u@rq)S2#2KH0vHDJ0uFWh%hYi&tH zDdX^dDbz6L~-*p06<6Z{>+qR2^8gk|&<76q|P>C9M_r{ngd2`zBr=HO8=q-kw zb>bn6!Z-nlGgyKMi3Y7--!~Bie-Q}^D0P=q353S$7hH6D14gi30vd7{z5;(jg>=gk z`ywFP=y{f=kP@rQ?LyHYmHIn zaiZyRqgilI3+dzT2E{+Zab6)~me`V2t`BJ8fuU`4C`_A%&Vf-2>EFE$1z#DRR0~PVYRcyS8o5V|@?=Yb?8!H^2R8*o4N7nA386 z=f36SK}LKrLqpB4CA3K@!5HDd8)j@wT_P3@gr25s5>n#^j|`l9yMB0b)X#736~WIF zzr*v0?07M)hg7~A_$@%V;ht6m=nM9q0I*CrJgl@2>v}xQmK}8|DH^;3^|E)}s~*x~ z?KF|8IZ7GpZbXwRIY{LZ=dQvIZAq45|D*>zl=+up)R75ld>#{vYXKU3o*;xs($?BI zSa>sOx?*l6mcDNBaZ@;SxZGp@_x;F;R}8kbr^ZHvxAP(}_RZ&JpYrPg?MmA=#(JA) z+DC&d6s8g)8>nE9^-eDn0)w*VPWpFp z%3{2hvm`r6lgrdkt36l=$AUa9z}7*LVPhZSK?zmZ;)Jy1GbnR4z@w{?Atmz2lb{@f z?|Xa%Q3)$@sCxFil;-N-L(r);qAGuwXuam|je0KZ=(N4zdk^p-YOEA-C|ZMKl{4^i ziHI`5h#ZD6?+K6Gj`#z9Ax9JtTm3tgE`kQ7^KoW7!Rz?tCf%x z4SX^fJLyc2wyNW1l`rX+b6vj#_7ivz36FC-7`-o90g>;^H&=_6p^oWVPuw-=8Q z<`8!z#M%}p<(#78!c{>%pSO=!(0Bg1B7ZP9t?!7nADsI ze!^HiO7xZJwP^Eb^KM}itzoe=+qyoq8+3_-L{H5rW z-IOc4+xV7#N}SEf>7#sBRAy!Df`>-0cX2Js0;4HshW!HbgB0z$7#E(S>QNyyk9TLw1P{Ff_1O~ z()|!fyj$n=s^Tm2gKpgg&-*+G!I3RrQ0mSQ|4tWkHvXNbhm5a0f064^mC;2rx872S z@n;yyRY+fAF9w}anE{C(hq5&|7;YTFy+t09h+PY*w6hLzo*Ev;IWR`?)!uv8SJF`Q zFtmjHZy4q_Gn-4R*X&*x^gTGMcl;;f_nn5v?VB5fXP+XzW|2$fRrA?mP~s?!R1`d@eIi1kP|h@sQNz=3ly|hp_h~+>irfj^z3J=sBc+yokrYws~E;)JAt7W#q@d`&J@O9)t}f zGiRb^n#+ZscpVpYQ#rve2EjF;N3ux_lO6@GsrD2ASF%)OB-9T_#r8|1$|yR55pB7y zSZXmZQ&AP|LWxo?>?|jG8oh?GFm%C1!t()g@Bwm^8@ulyX1r(5I6A855crC#(s={B zV*dpkxmsM529=R8PgMl5X0Id+3W+^TgWf1Qj1egx*G{Fcfli@zW<|AAwNJHu6`~I% zsCeW}4V@bpeB0LJQST~~eQmq+UEIy+ps3+4v8;4u?`FQ74p1kAxd z;`||)u99KB(%3cP{8_O$ey~@Y5sr6h>f75{fma@EVRrI|_WBHUJ#tz|BD6^sNJfo5 z0mKeiKtg?z{cRt+l0{5Tgz8&irkm(Q2AQwQ=yYVUDCcfJ^071qjzeLS67#iG-)%$Q z)PX1ndHoa)!jnXstoMcSwxu+u*xX7;jUi#CCQ;8I&2r5_;rqj6f0n|Ybq;j zP00>kQ<+zqgi&gIk}S8`%qugm<`;aQ-FM8k&8A^%#DHz(EV~q@yOCS;x>d~=qR|2p z%coMND$O%v%oTwpTmivu_?9+h7Z@UoyHe$Jy^1M21 zr)Vedj<9539lt1^ll|TVi z?^DKhJ*&%+Z!p~L9p$AiJ3s3AW$-2TrSp#6UO>uaQttfMp(xChwF@P@P>Cq8sw(BR z+jxL*Nenmc)NlWQ_Tk8TJy^GR`rmmdU!twD+8ZYK6zr$fM1Ew27FdB4Hl8$|8b3n1 zddHd^f;62J4_?fMZg;feBMrEmp=R*AZFe9rbKw()Vz9Zs)&G=CE1l@QqqvsC1ftIK zVKy-fT1%j8VfI6ZWzojFh^RSea*z38VFr7C!h=m~-$XqktSpQX9EL5#%o-}8rIo|Q z$Bwf5gM$tQ$|R52tVl6WWzdTBC*`&U6xq(!fj(MBSi!S;vXW_8vsXFvr%+*GHxO2O zaC{z7e;@?3H+aHMH)l67`>M_l{L?WZ`4kD?na9&j7bh7na=Wcx<{LB_zP{te@(XDB zFv0mAdz_ysp7@)5X4BH0uV5sfNaFs5HeSgb9{veeyS34a|35XqC8dBLgp`vs_haij4RY~h2kUxBmYstn|& z&(H>Xj3jKL3*LHsDV6V%TN2Moz#nLn=C}&T612_JCwQE$TD-=4{Fvx9;;+HNWnfFM z(lWIyq$?IBH7Jh>B-!d=!ywmb>JFBrD|a=FhB2lyiI{-u?&d5RR6?(FY--wKgXfPg zxjIg4=`fn4o@~3?fN4Dbbl9-FQ=D1rxantq=#)EIvGv?3?vKI-6W|fI1_y}>I~WEB zjfV`dAQU4rh{6gMGLE)St{HcmqeRD4L=Ovdp^QuttuD398qYFWC|H9w1mzWG6r!ne zZhIo%U~y-nb62*uL3n#(=1e-1?2xn$VX=;N@tB1j)3YC8W6_v4D+JdRLy1?-&nubx zLH;t6`aHGhqH8P~j_~@*FdiyK@Nw2_>-FSG(6QgE%h%T5xbWB%t8?DV$wzaaxu0=B z^6r&(AzX)G?)r39jlh4qtw+Fj*-PQoG!Z)L<(7#+f4%+8hkMw&%?JC+&>Kol(C`Z2 za(;A&+P+>jS3Xp)g+}wWjfKwh@eGE7bueYe9Se_#;_>nHTwfkOHNIT&5mcIduX==< zbw4%a!`%|jMo=Zla#;)Ae7;g9xVRNP+_515#5{U>H?4)jxI^rE&3X$#QBX#s+%Z!e zG0Q330AK7P*zx-MQGEavzs9X^J?1K$TisPWo&$a&Ilquz<#t;YLfe;8VK4m@wYF{y z--;>)+-lsG9^TX3dZuQ*TFGBjecT_kuhxNY+id)CQ_4|L8sSa)9JF^|L&&^{Ycq-1 z8t4s&=Z}f>`8JQR;eX7Tsek;t$`y9#Hs#&%Ft!*BRi6!8k0LtJx6?q^GjnNeqs{(x zUt+lYftybY#j+{dI<%l1xmPAuRQOIckU0DcFbdKyMMlZeWx$h>VAB(ud+lU}`CssA z;$?R`!Z#pU$5kP(_zg`e~Iw zs}H-e5-a7)z!4M4*wau&x=EFm#zCdKcUC-;9vX|qg8i5wMTPx3Mj1mXL4DtZ?cj8bcm zormPcHG9Ec{#7oxrv)mR)!He=3BTyaj^333 zWGO&3QY2FJJ^-4tIZxKE*{h~$v@~Fv4Aj`ZJ9DVNR!1i}^1k_KvVTH{Cn@rKbK1|= z=i5a2?Alc+k0bxJLM#*cq`OTfe>(BB;z_v#cpAE+Z$*5*+rmiQgx2v|Uuiw|R=nx? zeDB9y>9t#2j#-6V2DPtY-lGSIVrMV!p0JYZijPC@={vmkyD$ja-pL6wzTKenV$5vi z9bqbD!b_&$QAs{(^42tME+6R}^Bfh(70+YGofMKE`#DJ<3)V`pzSYWd5e`Ggljg_w z?T9sYHdYzvX%^(9^7YnZiQOs0g0w3U)rEDn8mY>_8G#$k+$NVhKuwVfKzK|>7+oeL6a^%Q}8ox-4vJs zDUb*;5~rM$7oFlll@mbV{lGmN>lWr*N=Zx)#7FlCZ!9l=MBOWbG<{JkK*#`*w;)8P zARrkIDo8`%s?>P0izlp?$_QV(9-e2f`u?ri>X=pAOkSA6BbaEGt_fV9=fce^%vsR4 z{PQOH5y9tfAmi8XgTliAyqT?1i{@VP;cq}@b=D*uPLf{|z-yY)L*&v^iY(H((HG01 z!~4-5fe9L(?E(?hpR0#M@A=BF4aY)*`F^_Iteot#+@rq<^~=abAj(Wgb{(Ab9*T$^ z@|IO;WV!fObX*@@@A~#nX3eXux4BgWeR@1pV4;C<0oO6$ji=3D=QZw!zcw)OGocXm z_BVEcQRf3bu8^XHq&vyOZ&Zxzj|LJUu4xjUnc9CubsO+3<&Dlt&br6fyiIb)=GEr) zV9j^&|gB6 za5v`2T^zOw6<<)df?gXOL9#}FW?$1h+7||MSij-@n3pjChmVNOyu({t=S{QR{IoJ3 zIo60dGFhcN_9Vj}i<`Sk2n1s2T~BwUh{{jq{he)xA{Y!SeekHB!_nBjcpf>XpVlVM z*d9YPJTE+eUMtLBXiYyXTu7&XG8fSp0;Z+{aS&rCM97+|FF+A9c z?M3scqu7ki(Qs9JQ3ChQ%?pDukpVUQy^cwIw{VCUY3jHXc<~sxYk>tQH0SEZxW`II zHM}ZO?R)8>YiD!S_O*Y2KOYgVYK@!HD4crb&)NbZep^lDmnJ9<>(Mh#3jqRV`NKK0 zij+`mfVeq-bX$YTACyUe!GE47e z>OOoh>q4Ko(EhtsSyaLE4ou@mWxl`?lkde=UwVw_j^2C7EC!aKK_{(W@$FF(Y^peQ z7!3v9Ikq#AOave{Gc*vo!T!{gw~_m#wLCtbS3q*thzCOTT}WOk`~`oT@8YFV)Vi_0 zp&`P5JR=q_uW(QwBnTY{@D$7-V1HT@94tB_K46#>MM||!pH>;{L9xQ6R7E+lIJ#6L zPmDsgqC_!c4$d;eLjVndNtMi9R`7Reuq6u^PXWFvnx??A1YA1g92gxXH8u5Z(iSY+ z-Zqx%?EyuqTzqu%QY$VB6M<2YT%6GR16f7I)3N7^#v7iG?~e`2i|0|*7rbnkh$&wrh&<@-dU5hHH++Bu$uO&NlKhY_vg2_g%{AKD?3yW8+sCyO zfYo&|2ZL*(-lMo*dI1q}s|@(CyB7?6NCT#ZI+z2^hPVT{MGSgx-!V52wkmMfFb9qe zaS6oqF=IooAv>E}yH6O%xgl@CS)%xZu4n1yq7B(TM`rq#61Y3gm5|?RWYqFMHNxdLuv@45ap!O=^)ms(!MbJh|a$`)9Wn8 zD66O}&}Q~f;Mz-??QAr)%_-rnQ6!MLHOcMDd0(H9{_L823CYMxV9ON%Rq{A2gi$w( zn_ZanbQ^#8b+1l`-mvECY$QDBz;yilVdOLX6!Hy2$3b)ap>Y|z^YWwu!HGtGg6lae z3+7k>2hT$T32Red$8gn z$^)`kH@;BGVPdm&LBZ$qwWw=D5x!}k@S?S^$dbcwa$w`8Z@|Y(>32_V=mage@q)tu zq%{Sk@kUAVxUOARjV7vHlhQG8`pO%l8D+KI{xl4jcDJcjT1OvlE_@zMPo9T&SKq-Z z-E|^)7B~WF7Tz) z5&9PcC|EX)l|@&mz6(;#^t@(lx}85;*|zPa*A`mYY7MDu9>OA=*aN~tAn}~y^DCu3 z1wYRsQ;W_uU%R!d$lZlCq$a^2Mvdcf;eqOA3nj&<=M#DuW@cNF4TG8zok*P_Qoje+ z4-53(W9;u8z*co8M5S%kQoAmT4v0t5H@H-HwyMmyr=8{O=J3ynhK?#VQ1=#pdD20K zJ1kr7JG~#=!P28<9N1y9*SzifJdS)K@7x`8>*^xj28SmC9yo`0oRKtagBtZIRR3*+oe zh?owNI_0+&sP|n}0{zZ{rxW&#u%!JcHaB0?4c)iLPWp>92b&+kiuT5bhBvgd!A>PH z@O3z_2)~LELng$hjYZ^09EvML0*30hW&Rl%;Sft;*-*syrjuPf)-Cb=5HvPmR zTL12|ED-jirYlN~Ie>HDt>S|nXUtaI5AdE8_3J4Xxx_Omo{c;f7je%R!d=-)hq^q> z{qrHd)(X=3>j|1VG(E5jVDL-&KP=I0!d-}$Ooq!f!-N@8aO|;7D7eZCrPIZQ5p|*`0smj%#zRQ#RXA z@UK4w<7~R_TG_01uhQD@e%Yv}5c>tQ3m;>{D$YI_t=u{#Y4bJ`O>jf!+H|eRzOgg# zY}1FmVGd7mQcvKfUS)?X+m>x_L$ha4j1%iP1s=ku6$Z1eF<67(l0O+O?hawwT9fSB z86-TqMyat5X;Uer@>%rS)|lOPqJH?4`Z1t~#EYQJVXm@FtUA`*pUBr@>`CO%6VEY+ zWM7ToamYP+Na;R_JGHsop*&IJeZ6xF^8Sh}G`I_be@R(Th$ncNQa5xLQ;(4n?<8;q z6lZJkHOr>^L8jXK1rVDRv z*0sA<7MA@E7IFeV9>551$p44o1zWJ)rzwW85XotljRLBDaX9Vo7Mf=*rhIW*<@tM_leSO?MqOu~d zF-kn8_~dbthP4|MZ&ac9QKFn;U4#Q>y2IKtw#o6 z_+IU(>v=6k(!1BpMI%nMOhttzJ?QqQ}4AA)@cN>{oC5RD8`1ZJYk~>tQ{*RojLAbYQtI8u7FTOwamM3ENnY z<|;2)-9@~^XY{wP17=QYQsoCd2ypx55wupJ&>e3Vm=#rzF z;zn0A#?qbScm42`I>~2O`XknSbehFU=5?BPYMDrGHq95W$_^@P?vItkSotp|o!8^ zf`C!DWFg7lx`RSxo;sjbee&NeHuwgE=7RK{bJx2vSl_jnDQr3KAU3!p2YYdi@oYuh zQ`d8{bjfi@J-JMTwt*<9x;?c`dpuAEIJON=u%^mC=;0a@&F?WBSCUUwsKFkEWKb|1CZ*)&sFVqlFi}x|xoP84qKbI@ zQV)c#;n;yj7uRXJ&5e1)&!xXy`E7+USudbPNcRPaDIZ1N~ z4-BvP90{X>`@-0_>s}-ad^GRQPo_i$4dm6BMJlmYYB@&%MKR5UMcW!pvYrLY4a%4U zE%xZf=Sro}fJru7PZj|Wp?WQQVxsa)uobi!=q+8@I$47A^Ry3=g8h|OApYXSdNp^2iqiDQrYINHk(T5X$S?@inq($yUho9%f1H5vfFvWF5n9;Z0Rcg~v~wm;^FZ@CRkGWj#HeXr>$Sz61Rs)yJftC!uaiEt21Dp8P3CL$ zFm%h0As_cULT67p*$FP1*}O)MgXunw1bu=pqLZO3zUWy1y%8Fj8_-dyI%$Qp9m|e{ zGvuIWXR6yFIzgmPA5?)c^$OW8+pa5Q@>a;d(`crpp_eaZot8r-S! zJB@q8J7o>NuTSsqVnzhB!`K}Udn~su1n=#gqbtAk?WBS@*@rJfRL6^(D+E?AjraUh z*-7`}N3miFKl1nH`b7Iv&Bx2axho=6YouI=8Go44fBi~XP1aBF*=J&D;mRi3NYeMM zo1sOhKi4{C3SRI*Pm~m>mKC#BG$Le=YrS_0eI%vtK6=yksI~YKWOLIGzi*5ei!!HJ zR-dd?JL^0DuQj#mNIh}@sSHu z$TijykU(SDxIw7KoZ%u%nP9_+90Ui_PYYr>a`ts}Z7@XUUoqOy04RvMi)`X@h5(r9 zLqb47{HAu&4TbcN@!_E4+=eh(k(iCv-LXl2cf)B}D<7|IFzd+&zIN%frR$j~MQ0sV5@VeY4_h!o+Mc!3F+~cj< zcQ-dyik{0qdaVP0nR7BnYazm?Wg%IiO)52D$3|1&(PLSbowpy?Gb6Cgwkjq!Y7C^| z)`YK~9x_!Dta8(*e+0uQ(GeipE&2($IXSiMBp%RU(4Z1nhQAcvgS1`A`=asw5G8)m zJHbkbdc)?uuVzx^rj{V9h~)G6Y0R zC`mV-j1uruB*uV*GfJPSRtU`uITB*b%oF?xxg(!14>?;my#M@S?-Xf_)r9^lrQ}5y zMN>$$55gtcS0j2W#?AwSS4g5oQCiAafm(~<^n0t63iquAU$2jgn#<4UMSqO7SK5sn z_4l%vkj)<7j^Brci~1h!jaTtLI{ZbS(wANFZWrWz=2hISPyR$0UQgZkjbFAE%lT)O zrn+DRo48JrW+YqYEr*HwzSU#a2?rCUKrW%v4neD0g>I zrMI&AxD)kOIo(cqDO1CLX*#ZrtjsNJq^oS1AX`P(br>Y6ulHU{D*cgoMb=(nw9;2c zgjI~vFf&6}5fMNdDMUkO*>_K^m0YdbnV+0OXG0(@y{yB1zwGq2a}{`h8h6?z)fB2i zMKzi{QI(jk7|qze%&gd~A2*VkE^$sdRkET~qAD1TB@egH#(My%UUW#}-L-i(?}?qp zx8!|2v=ZC(S-^1k+@#n?rSq&Irm9(Jw-x_!XaC$-8TWV}SF?LR6_!vguMjcdFwdAQ z4+||gqJyStJu9;!m`BgnOiWCIl(YHO5#a#(o<`l+rV?>TloliQVCO|AYJXu5`eQ9X z2iRd+!b=G~UgN`@Ke0lHSPPLQtp7ayU~#}|{%jJv4u#kX`(6W$Hc3+V7pgwDv|l!c zM|C2MV*t;G1GA6Z7lxiW zWH#Gb>PY;3nbYnOaT*0PLx*8K==KDpo$@$G4;@;+PJ8i@Wtbcu2;yT)rYxJV_3xxF z+oE&*SbO}^WK@Z*-X6IUKDvLuVr*Z9R-n;F{>(Lv6agHO6p$hLt2B$sz#$pqP6L)V zr3Z?Yp*b4iD?Tm_UoOZEYR&~~fGzLCiQj#{?ZVh>w$IiDOxX?q;|SkpkK^mQT5h%A zv)9(a`MHfXyV+#wu&=2+N#&YX{Sop*8ck5weR(}YxyI@MN-38In~f+voHX2QI*+WL z?c7fcc|}pSWHG%Su1$;uSv3*VaS_*;$zo-e!j?pm)ow@ucG<28>GS%;?8lK34(++b z(PqMrL46dp!?g?B&d8KnyfkG({NIQ1onMwr`XM%f{J2Z=`i(|~%M6?|zS%6P!JhHQ z)+V59LBp3srfA3n_#el@7e|)GnWY|3*+Gf*pblyLZ0}{&BRnfpCIlB`;Knser3oBp zjF#|^zO_i@a|l3_pZV%pr#D)~fKB_(Iv~Vwy@a0s@Y4bmH(=bt5izxHV}4I-pZLBq zNE%4JOLb_uWSHz%A9>#nn=ISlPHjf0DaS0s&60wroQ9cLrGg#(7xrLllLnvB>Lblm zS=teK7z8|4mL&SOn6tUbg~uvx>F;WE;xO2DW7msHwQ(PT&%U`l>E<=d<&flolu`-9 zQfrmuu087qA?TgoLGL zDR7d6BNTea&w_+l!JOIdfC$w5Lz#&tU6xcZAzbj=j{AlhSq@}+0J)H^$d_+IKcmHG%p}6M z_i$?;Hxq58gC#OMYE(Ce*a1(o>*_`+zNKz?0TI&BOBi9nH!FZDx-oE3e<^%^*5otJ zn*9dKbOWn+Up$Qn1sC2gydYzTQJYp*p-*GuNX^F-5bQvJA6_QDlMvrzK)Mj!H%wxG zCGl2Y#-xdY7cR6d0UIUqDG?O^G@2$!m9mnI+cyt08UAE|p?*VYr>^5{akRJApyFXj zg-7#Mzu#nt6~%o{8v9!26l0gnK9Le$hxu{2_^S4W6-2}y1qq@uz0(o!^PH~LVfy!8 zX+~vplAh1-JTo0WmCmZy{Jv1bNAgGU;Y3Ek;C0QY*mzb5yo~Wzd)IB@m*-Qn!F!Sy z3}3JFd4%@M^Y?Z0>^49!rxma5#q#3v^8SxTX$Ib5s~2kzBz=^^X&FIOIB=}!T18eX zDy^_Ev8euNIuJ?8dK<|HYU?Z$C*1Jt-y7EoudDS*vJS5rMam3t5ZhWnwJ|9HaB`7m z5n~VrtQvSO`6EhcBGFIb0%6@`WEg6xxsDFi45lkfCSS2gai5O%V;dT>JYV6)slWa5 zc@6{%aC>82OLbmpAHCk#vqVlT`)IR>^OJ!iM*%ZZ%QnCokXFf65GBgVE6PjPc}h2` zR1h&C$1v;|N1-pe6`kPR5Au>~_fC1~%tO2U*8jUgS6<$wXfKyfyCux36GJQ%ONKmB zH2JG%u`C(eX)&AiZ^P*C$+C!PresOWahjUIIE=_JB>i(4DSO&C!=?)v>H1221D2xH zmEZd3D_nV;0xI{$?5c=gVc64E6;m}8RhPxW&g`x5odO}4!$PB_3Czr!$om@8 zAJZP|FkIgbuFZ&1>NMG~lQq^#hEIZ;-l(BD2^tg6;VVt5QzIh+bz599!&@%bWA$gv zk6WwXD@4`lo36j-e#G2A^2oT*ErcGeJY!67(0`K-6Q!AffxqhNv&fAvboeG0E1nq6 zK7N#jxM{g&yk<+9K5dI@OFEX4s0%*+b+iaIeE6#@*T}*94qh(Z4l#vv7?zP* z?K&-_t}XH(SP?|%i>RGU>fcn(lfqYIsO*=&OdumZ()`rG>Z$*iteh>x(2#kkWKhj787tGX-|s6n5OS%s!!@$ zNc64x0B+r|y{6JVShExHl6h_I#%AkBRG|FZ@gTux?Kw5BS%=d@0|q+(=Mi-ZYwU68 zT|SLzYqI@E#6<57xd+`6A0}E1}CZlCUd0Y51w`P}l`8?S?|lU|wr$h(!>Q7; z&<$e|?ve17<2(I}zQ)KD#brClm)A_IN}TH7TwhlRAnn8H5{E5NL{Xyx24%aTPQ%H(8Blp%%507ICkZYGMNZixD?9dD z;Ju^?0tiGEbQ}+_7q4jFR-aXwOLInzP%&0+)A}tEw~d~lfM)Wsk!EJUyNe9vX=0h- z%r-TTj62zMrNR;ZgaZW^tpm$ida~9L=1nb&%wZt$%-oSfn1<~x$Q9Dju0|1ZiI zEX;JAEUe6o|Bm!wV5DRJ0}=#KiQoiO!ob4*@5&f|hWh_o?EfE#A6p|!XdWK=zkB{) zl`;PG(7zFV{s%w&|EP?i&Hksf!9Te;0A3C&%fB2!$jC^@$n+0@4kHVpHY*3fkAI8+ z;oqd5zY#ls=lzw^C1m6Tl>G;lhl%r_n4drNH~y~l@6;dpf1!i^kz!|J0-%@J0jeH< zrvN1x|C7zc@Q?hzi~!UHXoZ!H4lr|>SqM3pnduk+av+TVD9g^y4p3nMXrugD_V2p? zVZ&c-{C8(L0TYaag`JHJfH~qIWaIotbL@Y#^Uve|fphe?f&X{jkuD*?dJg7))XKq1 zsQuSS08X?2)60KVtxL%H2gB(;TZ#f297l z>pv#LpOyh^{<9DN+5X>^{nblCR(2+Uaeq_>Sn`0%2$=yyFZMrs^T!lp;rydte-~$C zl(n<2LyMh(VV; z{kVz3eQ&@qL2*BcBye3&Xfq(XrXGmG^T5 zGe4TIEezCn`IcFlcni(DK<*=jl+@S4a*<^gS!J@l!Ow|gk=1REw^NYR45=g~OHD>o z!tnx2@;dXGNg1|SlQn75vZt{*ZgO2eJwa#E(U5}Qa1zX>R7%&_ll3Yo<2IElKJ3r8 ziafGX5T4v=`;1E8v-G#z5s=`D{G7v)!D>P*h|r&Cz>vJL18KmI!M(BbjHgW=?RH3n zjTSbfcSr`gX}!!OxI!mk&#{QZ2{X7G4_B8|57Rl0ctGltHk{MT(9fMfe__p-mX zq(3&ef8%Za4|~}ETXmg3FA+-r4|SbCrrN*lu>WA@{inJPBLiSf{_pBK>`cs@|D21N z9xw)|^Yd4nj}vEBY_B5+&5|x`i9v(puqMbt#0l}FRt!9BQ2x3M!*r5<8jSwY&?Rvt zl;BAIVOlC(?2t^rG}A8v-@R45RHmyI)Jn9hUbj;}yq2_BTR++BGJxJKJ|8+0*P0)H zI!*$lbsR4^nYsOd4E*(S5Yrba(Kp>zLCS!y_<$gPS3tVXj$%RkZGPzzSas%o8!=y9 z18M;Vsqi8X*5c(Z&haa*258F(Xh^#w&;0)6GrtTdrw+LK@T9WginUjr7hK>1)DJ^F zNZpm$bLkxD3IynCF-YBMZ=H_>whI@e3uRq5K5GeS3D{4Qs>4%N-1X=@5wt4}tZVHH z5Gt%d7d&PpFqrc>?Gn&!E{Kyr7dWvFlz{rIcNfqXu&_+9u=bprHVHwX_oySC5~lN4 zxn~>yV@He7BpAxdxdTG1M|zL#54ehj<4wQS9HNc1)yF80&vUro)edE`h73M-6OieG zNQ{xQ?pA*=1K%;JxInt|j<65p6y#8UvY#e(q->z_{~lOoh*locZGHnF-zvd= zOir(a(Ej5i;Kv|OpI5maO|9?z{7J*f#L>hN**pAuF?dz(`jicaQNchgkkcWQ^vLIZ zFyrgC+4nKNqc$LX|Cz`c@vXkje2xcajo}XXH^&KACNQ#KrOpG#`1#~D(xtD z)e^rA#CTmFdbz{dgy1Q|*?^gO(k+xJ{Vzl^{Dn&7>NSUg!owTj$-i`29|e(30hbZN z@=ihN+QG31VOIJ>qIT09`7`LiWln*^u#`#!goGNUfhrpyC+Q_Y@DBuc`i+_*`m-JR zS>@>BbPFS0eImdg#(o|q%}+s%<|y};2g6%H;IFWbFkDT6>rTO086=DS#`W+Ey`BO` zsh^h#`O1Lh)`Z)V1C!D{KLyOAB8X8QU{k@zzDvsREzNhL0@KYxLPD`Dnr^P%9w4zz z`oQt}b*=9~5W0N&1g4_&%TGIA0hwsV!};mp&rTPQYh?c7ZOAqt2t#%+(7-D~9w_cD zmnFzk1NJk5LX%h$1p4l>D^wsJ1a3p-vsO&;1_Zn-8r&dNJIIF~ptY*ZMvUTC=!TwI zJ5cmq>mz@cH_X>9D$Ia)JA^x9h&M2}v`AzxINu=kZN??Y?5@@;@;2!Gt>E>;+uqIX zjB2>7AcAfHc$7aNlPc+_zfUb(B@w|iUmBcimyHFm-{({aPef!cm`w4>TkThz<%T|zzP|`C@Isoakas4p1 zAls2?s<~XiF9H{QZBw1S#~kdKY=5z#z7n?J+xTzx@VUXe^tPtTf{>_vG2&#|j_UI! zAK3zB*9&24>W)tJ3qqR;niWvGo{Cfxc&byI6sE=%p+>}9c(KakB$81eLw*5dZLe8{psY9$?>iH_u*N=W6pw(+E9;YlOGO;^P=|==>xee1A6Q zYrJPp;=e6y@pT2a;T8-y08Wb&q1&GNb@IH{{C+fvU@fpd^MrC_ni|fXQuBZHkY14XZn~i(w^hF?V18;%Q z#_pzY67S$cTch~y#O3y_7sC0NBYzX~_hk&vqbIlAIiYZkvA7HA zviAZJ%P`E8$K;Er#HqkyS1Skw1m>xqr@?zyivJQ&tM{r?V;e2)Dupd`y7xlGQj7EA zLZG((3RfFzgDQpX_{ih=MxHg%U_)Eu{v5i;qFJ`*jhQ?1@p_aleI6E~+%M-d%=CQ% z?K8d(UkCnWyRymkM&g5uLdM6|#jG}$CoL{7+6NJ;btGSZ&*ZAP_8Ik)lvWsMZ?DHa zo0)xTXZ>AjXLBPD<&dO}f>evdn1MC<@-8UqD@$z0P;F7y66d1UdHpRLO_j5b8TS5m zH^mCic-si>=B4RA;_pTg-;^;#sVfR@EiiQDm+=Huuwz);7IRL{?1UA=<>%KY!1*TG zbqLBR9K4TNvURfgHy$eqo|{obvJES_7tMbr0`5m9pvIo(e^woMafi0s!WT_WP~Q|z zP8@hYj{7*U{klzVHh*?=t*DywZU+2Kg;IF;^39y~&g~?Tb8BT-_b-qKOa=MbH2$7h zvDCFSEmxc7np`nmH{$&kt$ClkaKB(keg5Sq#8O5C4gB_c;4M!3MhlU5d9K{_D+YCw z;;^lXRkKfg-fD@!Y+k>=U|(wh4x4Srk7Z{mdt(78Q;5@~hXFt0vgnNgKci86ncyGY z67mIyT2)#M8$h;wr}OE&dKKYFVI`1rahBmCZPz~XxQNG!o=CO@5X8J2PubAXA}S>q zEH^{HX_4+ca>-@_;~`6K8$^h)J*%W3@*SekzJIZm?t{^Djw9D9AVUr}5HUpz7x54a zEok)fdfpN37MOh-2=VxAYj!kS)MYGtaL|`^o*x_C8^KDI>nzCg(psLI`I^`-DH^;x zh_-hK)r{}jGHX+(mB5iWowHa2O9mO-7Lbb_d~oZcuTg^3^IJ67OZMgFB(Dd%8$;=d zq3THpTA6Te!IF@u{EA5LDvi3-m{j~B2krOq15OiWyfjC<6=;0B(!}TvnrG-UQwP9 zCX2nQ5SqFQDwa<2waTYc5Y~CRSPBgl4(S@md2HxX zmXwG}sc9>kXE{};r9K37{L@ayA#iCSJ;&B5{0=6-XFb&=)!7SokDHZC?IWPMT0g2E zBJc8g(%}mgN-7oGs1{p7YTQpIWW%8|Y*C&*Yz4aGuI`Uvh_*pRQf*(s=Zb_%QLQ1} z=5}tNIuv|6<+r@wb3d*W%3Z^|R)anS>zX@T$@{3c5GXP6BX}E!3!g4vsT!sn0IzmZ zF04wF6HYN8P!le9Q$x|xtES$hx|zrKYhtILK9R6dy_55lSFl%BZ+$^4>blq( z1?$jJd7gu0&F$NC9-U3zAoEhpRXUBv>3Q=bR=;J9z?D1G7~e9f5i5ZTMTK=%vt zCe*ltY8G=|Nu?%hZY+S4fLX**h6?$cOzf*s^ntpUtZxYyUBHNR2?7s{(%GB=)Fl^< zAQWhs>dsuLpAd}Y3&^=Nn(NSfSJ%GcUQWPv4&o7HsTsvm5>&BHx;-eX_78#* zE7X${46q_H&~OqJ7a5=N%^IXHl^i(1tj1bgx}s>q^}EcVq;z2)%44Un zB#u&sFFQ@c@D{FA$x2+2C0jksD^TdB%#t;(bku47=-F?I2sC)VjrbMhWJTrPLQ9TP zc-Gyh>Og;rTV7K%7~1XRAl6yMl!~wF)N7wA)#|;*=6o~PJUZ{$Cs1K=sfq~$8CH$y5M6%@x}QhU?LXpr%@;yL<46NZR}cJqvh|)tob&e}<0Ld^4^> zsPnBkIvPB38Ykt}z>6RjI~yG|j}^!k`vd|mu|%m5b6}u*Qw`r04FaK+LY|On&dT+5jn`fwA%DYm{o#v4jjknh4F z9OdeP-%Jrzl84FF*oMTGWfH=y5LKs$)Yy1Jfy9D(&18fY4d{PaPIU<{aa$zm+DGUy zh;=bQ|A)7;jH+|X z*7U|50tDCK?(XjH?(XiA0KtQ7+}+*XEx5Y|cXtA5&Z$vVIk)Oo-|ilx2R~VCS^HZb zFrR0>vyTZXU@-btqp(X?{`Sw9PDw|%?B8id*k?vZH*wKOV$@^>3wP!PS~?uAMGk-HGHppVB4iG2@z4iQu|EV zHBA;1XUkaLh0Bg6duNk3d-ii;Sm)sV7Z|Bs8n934%K|d_q z5`ZLOtg%XnpzN(#-l7+OAaKw(& z4ivLuXn;gOEWQ=;+AC&A<-9a-M-jUuy!&{-DJ2ctF45U*xpXCWTWFvA`Ce(v3yu8z z`Ns{jjsC60?e5W`uzjuXX3>Snj|BONx5*m|_0xL9CA=7LI@b;OV+KWKw?w`I)?#@` zY3mQk5tG(JVp~0W+ux;eWw(0S)9)AGyM zP5iduP(RN+&suJaG?^<>oB!=9=TLa^=XD%d^WmO5zpRB3@hX&L4D7e-AQkSfBrN19 zvy`T%VuQ(vc4QagiZ*aG&NBfj@vSxkc9{ zzVMUy?2Haw5&vQBx6vecAU|}lN^vB&*E45?btCtPsCY~11mZlChuq_r0=C)o4zokVUz1B`N39|9n2MH`t2x1;hF=v6|Plf$|CoJ=gyhw>*j;!b0)6 zy$%2Y}WeCFHoYaErl?`D5@*T$b=+05)!@WxY`a&a!hBI71fu}UCA zk2R&l)Di|&8Hr=Qd@y0)3|>&2eGT2OxY~c=!mZ2mnvTSKdSlo&0Pr;NDk!ZpJBX+C4{5x${`}+z!~7o-EewT-BTbg zV1D{JTiKj68ML&Q^(Hhzw-OR$XlYpZt4WRwRhnS_HcLln3m3JN7tif!tog-gJ3Vd1 z`QRnmK+1d6Xj%F&fyqoB|5&cLz2@q=s$HkBIGr`zX6`dBs_yro6iz|`#-9?MK|mgF zH@T?At*a%N1gUHh%1>@1-tZrtYAeL-A!Qr#<*uQWZR54NnI;J8^8qJF0Vkk$nRS@r zTAc6qyPFlzpUrd2$B@l|M;2~y0=p@aYUIxd+y(jLx z-3LIdip9y6Uq!C${7ru2s7E4MLwpJ8b>`Pi(@_R|ef>~P{7)_p z=l$#io1aOC`pVGv?3vis?)oMteMFoW%Kbm!fw9}RZs#0s&OxWZb>~+PeFC#G`6LMy zrDAR+B~`0@;9^=>_&Jc-gkdhlhN)1Yj9P`yS+6%W%grDzt%76kaN=z(v6NXS( z2U}$4L&j<*H+^M3!3|l&+o|G?{29w7&UO|7-gGy5MvPqhiD4(qI68`F3_rTk`T~&q zMi#VLJ@h32zcPl?05h;=)niN|^4Oaunxmp|CR8nNwRxa<)MJXnW-g^Ts^K{0W6&U> zkkE>hhQlE*jJ?i(}OSZ7K=U$Dlh z>89~85Bhrf_j4npTKXDBwW2q=^xS=_rFN&iQgC+|(py4*5-%X{o35nJP%D=i;zvV? zw++Mk)N=HQFzT`FdT7`+yRAbK$F$HT>TRDIagz4X36C4KE5)l&4sdCh{igl{pb#L5>hn zV(5)%ZI%A24#?mc*1Q;|&^(qk*Fip;?Agp_8(TkmC+iwsKfe+O?PK zv{313r4A8laUzwwX{!(NN;C6Xjsc2f?n$D>MCac|NQ&g>2Y63~+9Km(zThyM(I0Yd zwVq$@OziqndU095%&@v^Vn5Jy`C5-W3uC+aFSweV$toZ3cQktMDy}TG#;!6L&gY(} zZ?v-*Heg@RuM>NVy;3HmfYCMUOcWit1rC@z~)!K8HA4mOErKl9*ARtxT|2RrV zosZca6NkXrh`U{A*2ZtqSaTFch!BRrb@9^`=;4!G3c=q&i+q&7jTJC z_H;J=!0&s$x=Nrq*XFh?OPdr^WEb`JWB&4}DQf37gx?d-nN75--POQ+{GJ{lae8(r zWCqKO!DPUrGVBRaQi4i;xUOc!Ad_uJEgQTmL!0TS*3kpeasXQIB4UWmeN# zX|1DcSplc#aawUmD}2kp4f3p)?%IdIPUe;Y&+Oa-k~Ct+JbJ_#Ct0+}4aAdMFeqfp z`1TmcmNs0vX!+xervz{BAca0E)s9rkv1ax=_t!YChkYIA-5>Bnd|y(Qx&3E8w$dN5 z%SYlCF+Z!ny7kQ;i!*l*%FRY6b74Zg&s6flyO0SOi-dPLPQF3~dZZ>M>JkKvoy+u2 zkBzb5u+Br>d6k-FaO%2u!4iP7{%mE|l^iqLg;rH_$@N zN$Y%_owb)=I$w4(J_4p?1lo96}q7*aJr`bfw^tn>zLMu zZ6^wDMvuQIYEPuMnC=E233bIw5YYl#tKX7 z@im11$ueZR-vnKDa3hNmjo8Um-qKR~b2})eH}>b02^9d8ZS4>sJ&H6wRTJ`#OwK%i zkVG3LOJtYCf2M>aHGlA6E?3&>8zh*uk%F&jw-!vnngwQY{I(jI)S;~&XR7*8mC+p* z0tB(tFa=g@`}OEyMb*yHVH16OB<+PrNAj0R@iNIzH6j>0#>D308&Hw!Si0Y7jHw6_ ze4H}-EbE=f$|yN`Il-77;d`e|Li((BWz>qU0_JRGm`k4`_fkrshgL&-EFiEq-rstPgrmA8~N_jxZp=Cb}?Zw^OZtGU9X` zey)|7Hiirp(rtKvg(y#|(AZee0EW9UW{4D$qqw!5s6`$U)K`b=R|w*5YQ7V&lGb92 zd-THrCS-oiC#t{1e7y48Y{u55Mu2FK>3oA@?-TCC?$q#}BPlK^ZleES#*gnXi29NY z6ByD~7!De}s?H=y!r&8w$i2=?7~5{nL(R%-S)9B@Z;&ZK#j*|4q@E-HG0t3aW(zx%ri>0|N#?ky$ zFs3VI#J7jzmb;^|`X&n6&k|&sv5ru*OD;o5T^r!PFw&$NEB}?5GP1J$J81gv)hFS9 zr#`($eHq$V8vosZddCa@M+y`pBg;G9e|J}y{|62fEhE$4)FdGxdk;cwTDEr!g5eKq zfR>rzZ$pOI2pO5*b&Ege5B=dMu)NDP?{2_V@`yqZIuq2xvObb%?^s8(P+)GWYFvDPPy8Jn&l3~BNj#R zEtO@gQhAG;8!%cBU%Tb0yXe}}eeC}tUfOzpTz2EZMd?9jN&}Z~p3AI65=NE#kuoe) zP6R5SL`=#$7oIXAR;hGVJlWiJ!q1tWDJswSMZp=kF7Wx(dnr+4#9 zc^z{YTG$XPh$mg2CfyaIr|S*AO?TR$CA~8nI(~GItX+v#CjlQpHpjo-blCr!!FYj84f{&C~^55thy7@3)V z*EKpceGODp-S`hS9`;Smn6idVfbhE=!^UJVaVEeN0SWYEaiC;3;K^tWi_jz(92%B{ z0YtDS$kml`B%I)6##DFiE>H9;h5$}^S>tNuicyc2_PUj+df7>-b}O2;I+OB6nj}E| z`C<>2j{lb!xu+6Y$6{%~=41!c$Mx2Xx>fd*W?jfWYwM#BNN`~lrf zFYb{NCl?Z(;Mv^J0{0aJ8`V!pDDukynG8VhFhbZa!;%0JfB@vPYhR)62{|GaJs3wb zJsB3BP7>z#ao3-mfI$$0^R2Dcpr=n>aDWM@&zga0;%@gHGJ1gQ8-Rnytb%`T3)w9S zU>N}*Z!dR>yPxVo=8X)}ux!CfK&I0COinksNQF<&l8 z0UhAo^8mnCTtWkYOwkum?H8-lU^E5*7ohr3}T`MSuKsMk=9xy{$ctZ^f3Js?` znzQV%oBOM-i?JOBY^zzwsDTZN^0_agVa>PJoOQEb>@<@htWq4q0meREN;4l6;a;tEl3!*>#D+5 z1`3+~9mnp2jW>5dW$flC4_Lw&)i?p*NmG6o45|;H0IfET0;81!r6vT*)-8q^U|S95 zRye!zsCKx(0alG%`PG)8m*dF2^SEWE_1DeJGwWntviHEO*T4;z_je_y^y}M~_b=LK zboL~iZRe-E_EO%i9seTjoU|$5!WS6@fJ>6BB=(!W`XfKx8aKmOAAtJmxAkJt0n0I~j)QA?h9{6S zwl>7G2?UR{kk|y}jrmL)6GUYZ@M#GgtQuU55G2ij__l98)rE=E?$)~=h4IsJg<5~g*ThV|i6?nFH@ogyl9LE5)91JG4p_!q)gMM5C0rK08zBSxu@O4dU zbn86ohIyMWe#QIpH$^|h{OCChlI}ZEY`?`IErR6pOA(mciy2?cu`9>^LfHP*28^qy zfw#SclgI-z&jk>4XT8f8EX59HQb7K1C;&AhO0^uUjj!@s=I=Za>m>?s={=43nau<2 z#*n!kp{iTIH|~=6k=WzHNm160fF}q%ZR=y?woLjQ4NMQe5xrOE6f5kiA-~@H6|J0C zjUF)-iQC%g#Cf0q_0Y}P45ht=o0Tu>@KKNWqVM5IuNjH&OIPq->KgSdaqtfk+|kDS zZriS+s~($S^Rs(5&*r6X-%@+~2%V5SIvJ&}`1P17jJlsk@(G)Jm6hWu7;{eWs z5FE%!E)f8=S#;0W{Uteb*$W)d{9iYLi(8B{VC+EVq-3<(l zPyj&|`3VVLgG|JM6cCAoWC-RHfFQsCfU8C)(tr!~3pGHXnL3s#|I8Aq0TNpGDPXS} zFiIF;y4;C@o()BGIDBtPGrucc=Sx6i!0M6N9jCy>&aCuzGh-kbNV*I1qaDFZovJLm|#BY}|;z7b!!X~#%(JZ|X7AB#&UxO{6@N&H={O#e9bOP~seR)NWD64E#y`-eH6EfR- z7p&Xt4?8Q;++4>#aC4i5isGT+ku22I1j-ongf*f#zRVtePMgl5A<7uNdNVz)JxH21 zwSC&2Y5csjf&QV&3U%NXMQ6qg8KVh8#G((YQn7|`D|BfJr3R7)IpBk!LlP>gBxo<5BWbTybmJ-{=)8*GQ#%ct`m z=F|FmC2U5S%36_^*OK;;R>|>w$p_6ADz2!<^`-Hb2jSTLsV`q`(`1SKwJE=a+c%$GRTgDEBF zNg&SnEFWp9`%IHfITjhy(6%D2-vkA?qH+7p;<>TzDm5926`wj;hOEb3b9h3rxV}OQ zD?&`|*2Ue`jYhw*{KDHQaZ?lzZ_khs1kkt9UsGtq{rS@MmUD}M(*J4MjQZjDqH)0Dhu?$_C~4TPGjgCuHL0j>H&0K|uvamwsP;DZEYYyzlu-%N zCWQ>u_E(!Z&?l&M{=B3`?< zG}_YkA~Un-btb;}8o!L@n=Sxt=X!`hS5nf1k}LWSw7O6#RrNHgRnxIyq~fZkMorTS zFCveM6Y>IGNak6rYI zK#m9bSn^0Y?e{*raN?MXGT$<5{TH9bAj33qfnvF7vf`%EC;K`PR4!86rQ5&_^ zBteTA%F9Maamf(h#zbnD6wKI3-ldaleFLv!+LbqL6!C1SGqzSsdLa*zl{gawovIUj{MGra>5|HKD|RC9_OB+1Q27TD?+aK z`vo2#Hky+A=~g}lemphhdzoxL;L95fU7uoMKIdW9_u(lq)>O5@FD){Rmr_x=>P}%{ z&4aPAQ8!W(v(VY%9I+8(F5jYo`*z=WzU1wA4J5>3Lhw>y!99r5$>M2Z@y5cDxmaFk z&@A*zshT!BDA<`>lF}eBWS>SML=709RttWS;-R|A4!;&s2y1u14Wm z_(=@O^pHyoW0wpK?lR&>9+l;}O6(^C)j3*i)sjcj#pFBVMrB5Q)xG4qtTMo|JIY4y z1q5%oN&pG@P$=#tA#}T(IRnumMjatGCDs1QKxjLmfWAz2yYK9Nu}Qxi@x9%hAjNLo za!$_F#fkRpN!@Zy4?6rx0GqdPAgu-5!UCZyoZYcllYkY`Zb(8L*ohLqIL@mlsk^?_ zQCnQrjrS%*?y^((CY+f=FQh45stov;SzC|7E(t{a=L5?aL-0O z1-J}>@kH_A4kv5`L7;DzaW)_7*?(rr3gYBJT3fHFFw-amMEPW74|T6`y6P><9@%e7 z^VWX4gIpQ54cT128l1I|pI>|G;2oah)y+4!Ui`VyAisWj>CH?g9~-gCepe|wu)O#^ z_g4HT(VHGc2&vT9I)RG}%RPz)FSzDqGzM=MHpkf%Ik`zeJv~RF#Gx-!7=b*{PuU90 zOUs{qt-WmBip)#~J=l!c=#AMBECuZ2LicWE4R+^+Pbva9VUMSmRTv0-}ql+Gzg#QAD&i}cI+dC z4C?!D$L=RA-n%`eS&dRB4Y<2^yde_4Yz&NI)1@XT$wheKrt54 z2j3$S-wQ4LNEr#nB3KO&^cEJjm4#TyYuljBPP6{`bHmBY!^s%!wf^Teww2%4&fB+9 zjKI^f@=veG>XWn~RLM~6REB;V?aOve9sQabnBQrKZEZX{uXKoOSaM@0W{=7$=GPgU zOdNA#wKCL-Hugp?!duFpIq?`NPNLptuIAPhBMAw1*^hJ~Abj=n-%Q;I4wi}bY-0}$ zGeAej%1ZJ&n42Fpi`O(xEPDUd$k>Sus~fgSHU zZ*|yWg@?t^S+o$gbf)vEX5C8SbNQ{lpWFT)h6`Lr;kQP;BeV!D4lTD@E94C0~63)`zf45Rig6t zICP>i_Lf%5@bvfbycbBn<|yn}F9pDdrK+D!1g~JrFJRrb2o7WEgx-1Dm7=b>-kE;+ z8kCWugy*;$7rlzVaTgeuckv4|CziaWg?j2L&ByoHchtUBtkrs^5S<|DDu#1K}|vwBXlPxT(c0B zUGyAovet^m0d&QWVPP1edFy<6+-6OcA0WX&15{(cOAo;FVlTq6;4s;~&=xg0P|;Ki z?9~}E;2_o-N)_1}cQ{*>)G?*$s#Vd-ci#zJl(xO6?Ejh_UYsBhc%4??p!^wn?>=as z`o-QWaM9*z^s>zYo|yk)~Px3Suk>p*kZEvIPJr0&=k>biIUcgP#fip@P`H^kX;@#54} z8p6y(@Tp+Gl6{Iex0dsXDRYXDLAF3(_G*C2&|b|tBdWL`L-mKNB{+ZmAi6~`?MnJ_ zcA&z$C5f1^a&vFY9n~B<(U-?pwQJ~q+=K*QskuT>=|$wGE`FS5?4EeK>?rT!Y4dc7 zLEr_`gpU(7$&);I5fbLh#NIluGj#gi>A8J#_3?1ej@r(c!9UGc~?MFame;7yv7s?G_W z?q=;{1a)<>(e=+wqv^7>-4y05<;ts@ED$E`W{jsgcees_vJZt`NU|W^NK!>Joy9z#mYrrc@2~e5^VvN%(mbA%68VH!>_6Q}aG22Wb;h&?1yy< zW*jB^n<9VpqzuIeq9%B%AC9JdGE%NwQ3sAgZW0*nd?UPiJBf!no#o|o!H`KjC$Wv?o+IAO9v;cPK(7#uxaNlN~S$>SUa$A z>db0SBp5K^pM`tIB+a%K{OW?Cz?AJK&iRBphbM*0gtJFGoBSR?oDcfahR)q03;CKiq8 zS`1a^D=#*=o<5u%t(v#D7?F6bFW^*lSj%7~%K&#rwEWc3bzfRc8Ni673V4Ug*>S#k zfsG{#!XbQRmj2)YwTb1d@r^8S+2&mdUZImBZFYqffB*e`&txz(idrt)hU~L`yhIxb z)IX=-Yd*gMZN#(&+26mae;q!9@;5-gkI7s|^CoDuyB1uTbyV=TzuM}4pZky|O%}JD zeg$ZPmr($}LF3eC2m}n!cUc5ZUg?qy=8u8+MTZfGJullS?@QIf;C@vq1I zu8a0+R@Rogj!1%|yEUipfo=r>>_?Gefr8}FPo9Wz-xiT^jv|-K#R5f#*4)Rw_#)nN zYkW4?n%FS1MbIj29rHfy*yVz=%5IC1U5=6TL|09Px~LQt9SdL17*?PtY_R3{)R?H$sGQ&@itj9GMi6-CYaNrV zZ}^jeO{J{lt}cWoA8SQjVBbN{FF6U*RKyM?ve{Y@{!3U^esv`ba4fww_SZ`G6@9OE}oI;#UuV z@G+G{kJ^Xymf6LgmOD>yOaTJt^X_f&a)=W7Yme63VPu4Cot<4&_OXqZExOwMZB%TL zD%mwwH5Qh@Q}dH0(C&;q>>g<81SxPqLdd*W6r&MVlnB5f02MKf!LC;hH2`KZRe|*f z$gIl5(qOJ6MRFMams8izy45AzRp5BeC)2Wx`6_7Zw&}h-py|=`@6Q!2t>?bs2xjP? zSN)5^88sDRG{Gv+VD8gU;PiJVh-4DwB1*e$E1B>xi9+mI5Y+iAo*b5>rq6)`tEc0g z?kA0u?v^d-c$Tyn%{TRtm+taKas_$=5hX|t3#b}Vt|cjl1H2_2Bmz!KNIRv&{%JmU z{2*C3{Ura2Io`?Rzr%|Eo~?@hTed1>Z)5WR$XDN6yqOr-8JHRWFZe3Ud(S)r>wB`m zJ79gcyII&+I9T2RD=Rx43lk#;$2(wU;-q8eVEq@s`UgY#9kBj)t+`_Mb}s+i55m9g z*k1ta|9)ToL5==@L)Q0J_kScZ=n}HLx5ED;wn6v3Pye@Af`3L1yu;GJu6qwx_$NF4 z6Mz2WL4L=veYtDP$HmF~j}^bs;NMpN^HG0q zxBnYdeNWr?4V$t37NPQ=Kp8W`Ut8>BN3Hr8K8QX%!_vly#%znPeP$$)L(sbw%<%b4 z{7qMo7EV+1@gl+;_^~x+OTyW;%1lHv%gP!QBg;<(0el0ij8|r7oO(ZAa?WLuq z1_pOsFOe#Xa=uOYWjg@}N@BGd6f4A}-1(0|@%S-7aLXoAs<3+r%kX$n5%F9M8HWcc z{E5kI#;|R?mKe5Sik>f-@`smqiUA?wPB|m-MCQZmk(v5_oic~ZYJaj+MkDGZGHkd> z$+l_QQqxz^-nSHof4#}PpUr=(F8t$E{0mF{-=C=eDNp_LRR5R$_dlAKNUyfTDI?lVcJl^x`s0jjiqj<3J)R3+B?m6 z!s*6`U~vAyTh^Y0&%O-OfTHk|bT2~cfXY1sEFSRr0ApNV6A@JgumZA#L94BNZDin% z@xcqU+P|jR!%s2mdKeDi2KCu60s~``ot^Rt(1z758zHT}&h8p*3n}0YP^&Mu`SEjC z8&VGHqi?6W)WN2DB^3`&w>qGG^dJdc+||?v0h+s8Eg`8wXWkdx83etgDXEHrj^Jul zn5=sZI@t(7!61Be4k@_#fHxwG8Pt|7^ab^f0nCVPmatopq4NBJ5sJaf|H0^UiOL{I z``vS)U6aLA5no*-wy7S&NrZcUMvkU>i~$=qU;9GpldPYwG6pK`KJw?N(?N}nd}4vI+$<4k#59(D|kWd#zr0U1a^bO&# zZP1TtR-c&FKfb-L%TW*03IW`=`Q~ZYZPH5Obt%BP7k%aIeV6lLr;XR(DBJObC(XRkdXzuSMT`L@fa>SpOMk^)>@5NTBlXsB`fS^f3Mg@@4yD_1g#`-BS(Zd z3E1T;y#z4>DE+oH8?eIsf|72aKt{>WCck61Nc5JaL77|r!22;vB)(aB?-)D7RO6>S z?oWS@s|B1V$c^wtPwJ>kHI>^9aj(_eR^LtR*=}vc745E+rrd&}Oj=Q#g&pW{fDDL1 zFD~zPGlT%#`5`T{N9?@z0-A}1eM+b5WS1&>sECcdrYOzl8j3-su_2oBLHMyDr}F*^ ziaw`!L-g<(Q0kg~j|U#8xy;9}9upf>2q!=;vWcrE_<##{xs=(DObvJxJJR0yZ_M=b4YO$c{V?>+o8B8! zFdhJHlvj&5^6g_kGH!^`EnMx64YN1IPz_E7N7UV8faXz?4aWiw-}p`#N0inngV@51 zxP~m0Bdq;4joPd@O`KkjqZ@44DQ>{h&uGsbOZ9oac zmy1OqvI5AfQ3d$pK`8RzX+*K8L}cZA^-e`=i*vXNa)+>KbXy>}<5ASUYVA?UcKj!qyl9jFI8sECfcVrP#71 zk8lk_Kdu<3$!5{cfCT|ukJg8}J}4u${4dG#$&*I6Ono3mWO?P-zCnunV!T+a;fj5r zPr&^A%7!`0qt<+D%Uf4w--g7_b}ib@_}jftes@xx&04bR)K3Xfo!e4;x-gefowrT& zN&}mf(-NeJ?aeh4cEFCJ8thwm|qGyd6asM!6 z0?B7-_*c!Dfwsede16v1C#1aoC+l0oj~VZ^7^&yLe58rs2qcmWgd%3w+n0yFfeX?O zePh&%kXdi*qjlstHDgp;;=}rU)F{1zE_5fKAL=D3pFg$JkT6X9ynIe!ZU$R|50{YfBZrJC^rG5Q)p%#I6|60oAqhr*uvA&zs3hL;l9We zcrKM!08GrE-nOnUPLU!(lcoaJI|#OGP*{Sb8wv7^C#g^z$w}VqFZJ_4p?#djv!7by zWMf>Eb+(D8r<|0nBOM3c<|R{H<*}qvS_bDI0qyjqXGzxg3rm1@ro-E6lFF%;PX4JZ zj7l=ta;QVi{rwWDF*uZD64?BMq=OjK&1({jl_^fdmZz9WnB3`uyB0=~5rg0f0^PmN zVjcK6nup~u=5of5)wcdom#;vCu5j21|}4%Lu` zynja|?p^7QTPI=#D$yVl6{G;6Lc&bgNukhumwV)7;SuwCxYoG%EVAX{fhk|h{}8vl@14fq#Q<#CFa?oAmY&!*;Qy>rR1~5?Tpcl`0DD%GLEKM;>*jR3MAvVJ{7DTKrncM9t|>fm|ts>BZXo|WEzxhonLK|6G;eJWH1a)UPDN|qRGAxx|QCeqgx&>&&^^4|2CaS7a zBL|Ve4`hU6gGyQu`js^xQdpALF!HwUvLAlKi&r&KF0HVtCFccHejBaY5ReE3sU;hF zzd|f5YZ1<(+J;irUNxY)Ik#OJ4R09BGh(QEX568JK)^b+JndIs$4e_aI))oCmxsa4 z#l4b|l#$dRLpz&L(!%umg~LB!^F;pk!BPOsS^>Kpp)ms)Av5@UaB;AOIEeIdUT_=n z%xo~iBxWV4DTjtqRwtHl$Tt%#O0P6Z<=e*Da`v zzwSxB4`V$;_7hnSRPovhs?;UB+S;3c&QXIEy6`r)9ZoE|vk^pjTZ~ud^!U9N%FBC; zY#yDgV|Zj92P4#6Lgfw<6kkzg_0mbN%j2c3sPlzZTBSes zo?&8swXxX5u}DE2E#OSZ=ktB}N^W_i(q!2utlh{{Z>YTZwP#g&;G+`Q^nGcJu$+o0UU)H?c|*b1 zP84R9GY;>RWacDg|O|ie+y@CxQMsNAj8A@nY zQ9DvzXK}3@hyY(kr;}tAMjNMH+DxTponveE}Xmg9JXDf!6I?G$l@;Ei0h4*bXDeGjVxV6m@!yAGKXtxFpzrXsQ{qP|IfiN&PBl>cE)rQ{YZ9P2h{SxcJzRWHslqdW9UG7IoU5Q=h2O8^O{2PwX489#`@C5++9kj#1 zBCuB?-5hi~A)QDo*d}%F64HH#_*rn;IiE5v)izcaE1TVl=@!X}sNrw-DRDRrDb6>D zgsm@A<4+ly8PBbBcmiq*15xGoEV_qGtn!8Y3>%ZLy;aY$es!DMP0zN=$jh0h-%pEA z4^NX%mrk2cAEion6LOU*SX5J~X%iNtv~5Kyir8w|O4(Z33fUUjD%tqL&@g9EkOw;V z%KbfP*DO@r?lhS!jh8bc9cRVPhtpXYZ&J)rFwEpB3rA6%wD(#ny%V7LwKcB}DqTkc zvyx6Y>1oDB@ZAHs+qbitogYJ5oUfo-P~Y?&LNLy!OY#hyA0YU8I5c@AV1r8L=~Pzl z;`+B?@uVv+6=TJw?xj{u`Cr5an1b)m7R#zyizy1nK0BJ-=1_TH(wTY*yqUTep>I${?NIp^g;oYH&R z0(ZT358)XfcDLoStIg>*ZzS9)(zCqiO{x;}Ec?^x*Ke%4_N5CeSao~$yX4nZ*W=5l zQdPHLk+cwxUV0!1O%S~*ao@71ccRco4dYZ*4c$2932YZl?~KG>j!?NOeu8A7%I(j! zUoutghh!CSziI(M*aoqt3JtN-_R|YnU^Sv2fA!JhclzzVqGs81IS}qO+!Fie3`{Jj82OYG87BU|9!M>4#tc;xR6CXJp-;7m+{ML_R zqmbq{s-Frb4TELAv|7HuILc^04F;_msSJt49iPXoZZ134chtS+(zS0&R4MCC%Tp!| zJwhk*5Kr#9_!N3F$qq7iA+S7Unl*XC7~o+?* zuN&I2>|jJMEU@O??Q+b%=S68R`$?{ih>LlBx;}Yf=zU8#D=eew?0b;;BzoYgj}Fov zk0B)LXaMkR-U<()6q=M!%wa;x-lqua6GF>p=piRs+xJ?)9ctg%gN#Ebl_DS3{ z*XRG5L%7Az(?4diuS3BnN@)OLc!Zuf0SwnOZn0Ujb{a5muXZNm_3y|z=t68y!04T* z7pRo|G+A6wnJSwph-8@VC# zr@J5!<}%`w;>tR%xeFpz&Ve+tqLv4A`~8Py46FHA^;Md+#LwX9MIy>H(I_>EnAY{Q zJsTLl%YcF^%xpvk(iEsw<^)3`<#CpRw7S!l{jfyGM#+24eV$Pp?amGnO(9aBFbylp z#`U~4`g3M}15HC|#0D`+nE38IkpR{nE(t6WG0HrVMArb;%~lmnB6Mx)c-Q*is-1@j zsPdEYScq}~>1e}e0_obC{6b;`{!Pz(Nj+;HOMPPc({}aYBdeV8MVxqGrERNv5x@tG z{^tw(Q{5Ms-n>+m^G|j&%snZ+-}5NO_CW&Yjcb^A>ojG};s%V_(wxf4CYrHAzRqYX zk)_V-wAJlc6xoRhFVFJuA3hNn1PoW3w|^}uL}~1ILDDu>k{vTqs`#;h>{INDm}Sa} zQ4JaaG%=J!PqZ`i$)qvvVZ(}tTG3EQ%rF4c;MZHab5xJ%psP!Ok;-q6;JtV6{Rzcu ziJkDTg-J%X-$GaaC_)m_|Fzoxw@$9Vg=&lZjedxjS{bUjDjV84%i7!7zc2VRRGamm z9c4@$bno3kZ135be^7(>Nfd;%Oz%0nf3|zU(kr`|+N!-*-v3;~`o8F&q1w#vA+^l! zLC^02-Txs}`+d>hB68nx2g`d1Fynj9F*_qW9XmTS%RBgBcz^moB9$5c+D`VKIQ(B| z$8V9J|9t0vd%u679e-wp!qN*FI-CBnH-z;6%|862nEU@5aWD}6k(~S<)%zy}`di)q zFIE5Fx(EML)t`y|FWoV^v6FT|gdYa~2-bB+!kMyKm4%la9qbqWmG4F%U|3Ir2D9DM zWDjVQ^#U;QciJao6LYg5t6OXMz5G>+W)RPyW~tZ&EXJy&O9ob~N+jc8PU%VOKKQq1_pY{QK|fcz z;)rzN0gaS7ZhAk}rhHLk(*aKW2dwBzPQlnM;{aDFkEHC-Y8q6T;1C~wngS%%V9O0L zLiK~GM~>?yHwz7%_Sf(XTZgZAV7}&I{Qr7(-m|d(4~zQ$&4u$nuH^sO5&757D7HVF z9e+nWzqM`sy^_z$$nxIs`JX;|W+q0)-z)j+s@@*)^BI1V4}J$}YX`uT7`QJmhRqU? zLPDW1VKPDhN>xRwU_fFF+z%8WFuQgc+Ez-H5T1sSaIo|vZLM9JE2A8O*>XaJ?ue08 zZ9~CF4Mpj3B59CMgK=)1;N=T^lYG(sk38Of%$rXc&VF4F?H3o^&XAx29~S~Od?wdm zEU70tGhjo>05?)p5oN4Z_Y{O)fN~no_t-SEL{Kd&&%2osh?Q{W&uY+Hdj$im z^VQwg2TKM%{WA&Hqe;igOrK+)-r72(AyTNJRF*Von+KDMN$og7qT)FYewl zwy`%)+e|9V%*@Qp6=r5;=2VzDsW3A$R+yQYnJY&UW?{pg(ErR%wGD7@gcmmNVQ12MmDs9vRVWZLzb zxfdTFK`@P{P5szcJ}-|hq$`3}XhRpvp^92sT!)jOn`nA+Zg_H9^G7T!vHjsy53dBVT<9qTk1EkEq0~O z5>JRMGOb>FG<2tRZJ?=u>Rstc=?_nf3jo_3#R3GC`pxIf^rWqP_NRsq%?j@H&I){9 zLMwzGP!97}_35A*qggp%RMbMNriC$AiNU3$8*|Jv;-8F)@K-2=pyf`u?2NnajOT_@ zs~FR%8Dpgsd~0$rhLvLcQf@`5=XZyZt3q&|HA1x(^Uy05Lyc63!R#jcsgn$NH%AAg zs)BJIxB4rX#7)bXH2MEV*?IfBdn-WE$ZLwtig1R=yKyFDM3*#z$TWVMQU>4@mkE(Y zOf@lfp`iKs-1c;yWE!hEVnW!`Z7==oLR7J(AvGq=(pAh&Z0!fEFF z_|q0L5BEDztmRqWRz1-6Ad`ie&UaiC`S2A-ScU?Gky-x<;wW)Za_m{)JO%lFrl&b0 zvzKS!&P2AQj6!M5VB9+0A2@IT1SxS0LIeaxyHr%p3MjvFfA&hiu7xlk+&GN_+xtvY%D|6Cl#pUfhD%gMYJzh2vQLV6X1a1Ihv zPP(4ca`{5k@w?38<*+1DD7SYc%rjmNG7iAx-B8b89|XggOK#L|0IG)!%ePRcY6&A# z4P&vCuZjWv)uGQpE9IK|w2>57EV3MPwPuUrD#h(An^GJ`YqHeux8SV8zO1>OBJm!NTL1%sZl-AaFHj(y}Nc3tQn?U`J(ETza zU}nV_5f3DsLEix=jZ;OEjvzm`S%v(Jd+0WZV6Xv%?-+7Gp$^SI5!dog(j3Yv&53Pv z`E>cp=N?EqD8_PB@(XK1p?t2&&7>FaCn}@s{1IOlO@A@rh7UUAE?M*~D8{4D8WOV8 zjxR4IE*sB`XFzJ}%U3Y6rYy;V2+^vfa=noMA`7=h+9e8K!rN7B{?(n+IODKjj7wi?Ciyk&rWO4RAwT@_^)|5L zvEy7nb53Fr6Y#~R^-w0IAK%A_lh=lR+F)H8&wk1>|uvO#e!zjNPo_Mhn zju62kYW|g#(`YcC9KiZ&V5OhSujNuf>+)?DT;sHm2njltf!n0TP|1fYiW@nEY!0%) z<=*8!J!DY_)jaMK$|W5EM^1xr(tK$nYNe6A6Pp<9M^M!Z zd~y0|P-BA5*n_ir0w>XfUV9NVT> zvP!xaRe2GMG+Zo{ut7$wYOdXw3AhHS*lL<11^wy##wywllBcg0$L^z=FAmH7bw^Ww z-h!@NOye!_K8Hlff(6njnt(v)@u9^ry&fl;jcGPIRi8P4|Ax@Bzct z_0+2OXP~O8=%fAR>bmnwAzstR(p0LP{i8tb!3&G_9&&S|&g0B$R>DE|YTE~OKH>d6UA24?((UB)StNnYWNYD8J1fbv2`*O3ed(pN z#GnYJFj%QkTn0PK2q>v1nFUVA_B=;D#ia_cJ8YQC);c%Q!kLv;qpN5hZfKmE78}X% zjoZolVWH25h13l7S8F$K=XNN8g=Lr(8revbZG~MS7D^or`)w#_)Vae2UIWD3M|y1ig~qZ-G;*w3oBC|87vuGB;I#u z$$O>u=gMy)bsW(g>mFS>1o|7a0%~thdA=8?-X69rHPtIMdRSyN(?_bgzNV<3?jC_} z#taPdzdxzS9J@6a8Zrx+Z@UTe~$5(zs7|LC_ zqZ=xW5JyG0ibx7W-BEdS8}d`;UB#qF;C`+_I(IMBb*1cfG>G>u%(kyuL1^^)6Cld_ zdtrmmTldC%3ij#lk9CCY2k+YQgu0vP_t%|~I- zE2{oF4w=5x{x;>ulW51=4Q98+5sX*oZHVXP&8>Ju2U@PW_vISrvkq16d%i3`&IrN! zlMJRdYVI}~Rj%45+E}S;OsYK9CGHH~2X9+p`jmY0gxL^9Ci)n~#`7P~F3U=Bb~>X( z`JG=+2oW32o`0HM?e1rL#z@{hHs>+vTR7J+r>8P`oqkYp*fvhc;@dUeK@E+d5h%a) zfp@$G?1A(2)U4(`@p*N>ZR_}|JHC_XJX&<=ls;MTorT?8p`8^xxkVt*@E5g~unYaF zbCUhu`-s!U9@qqNj}2k%{bDtAMX5%kR-HjpnbB6^6s5zKnrz&vRjAGRCM`&5P^>qZ|#7#bv zlQ&Nn)!h795l0?ai)`JRsT8YnpmXNEV~fWh&Y=w<<3G0eF-!Fa8beGGg=pfMCqKth zb53wAP3!j{D^+6@WSqQAmH4*w;B%)8AH2C_m=ql?gtBle(tt8$!i_tPvW%+s;?lgi zOu&tG^so};Qy0i}^|)=LLS@BxPHK;&!wPiWi}`ZdD^=Ie8{rnGvC)XC)wCe2Fwn5b z3yCq=6go!36|k^|NByraR!D@fka)GzJzI@5ETUkQVWSPhqtQi$-HY=nvx`#b)}&?K zi&JEQGg0;W#gGt-aj=J4KLz0QIRa`{k#8t|$E~3K>)6HgCFA`UbJu^2?Em{9i@%aE z{&BYZht!LIi!A<%%lKa$S$w5y{`bg&;~%8le>b->bN(k$QPwVq5i#VEe~9)g{Y5yV z2qriwjj--GR_X^(Erd}y<^(5%M!RukUGOjT8!QSQyJ-x{rl_4hNhFZpe*fp@>UmvMtoGl#P=a7ui} zwtxSnDdNt8BhtJ`*z!QbUAi@${9f94l|{m}ntB7Wr({e5-+onJ8j zkNn~b9sU!)Q1jAIS!w#bXn4qhm^_PO;RSUOV-^Y)#1vr;=O%nAz$UScm>F00CZtRY zcKX?@w;!ZnWTf!Za#1UDesDszS`MuGC-#DLb+MGSl~XiFO$MU9UBNK+CLj}}?&tgE z`{l~V+|`-h&YD+s(~90}%d+O{IS6=fpbH^wcaK4o{qtFmB-koD5JHLyx@v=q4RNn0 zFfHX5zHl+^*akfg^iNRI>nd{Uu75+$lL5KzPbkQ+I?jhctmmN9R8;>sWC-;D8Xy4v zxQM7Pn2%q29s<$^GSCqf)r{YbQv$Dj1=>_r)O?i~x6oxER03+Y6jhZ}6zl_m06M_- zSEq@@FJH!bA_d|AZdF59O%dIZ`$YMk4OChEtD^j(C;S;G5_(F#hQ4x|*GC5-O&Zt- z76=TS^8KAKc#mG~Qjj=B7y^v_JQx^p$AlV`6H@D}$KS)>?0sn%$fp<={Q7c+I~CxmVCQ?>EhGq&3nO?JO+z70I{CI`_AqG6qIm&P|hEY z0Q2OLQvKW?`4>w<01b2x&f58HrxNJz;X>{(=UO!%GA}Qt)#4B7An<%Vp?EHEmft`l ztkvIyI?jF%Q<4&+pxjva3FM6x#{aB}+x&dcKfbg;ICBY1?2r3X-$avhQhX5r0j*mz z<>HliiLA@sRf*TIG3D~h!0+>12%qGzIdawY7IVFg;_~*B-D52?NuXmE%_QEVEy(T; z{m3)%76y6)OYn^&r*WW^S_0dPJau*rxc*Gl?_=XUe&}jch^j=hQ4T}XibCm7 zilR{~7EOiR*r|B8U3#>*Lf@$3y}6COdT>C0p5oko+H_{>VgZz&hVEKkUd%1D-UOX3 z<#9G52*-gz>l8I%4&cEYzv(Klb`YK!Wv(GP8w$M4hTJ~|hs;@~1l)6i=f!o*g_xbs ztFbSLz}ajoUN&K{tU7hWII>*Wq=RA2Px;sK}rkaRg1sb zt5qzUo|jaJR5}}_)>wakEC>ey6EtW#S4e6^0B@A)dUuY@XCzKZP#_KnkF7)KWzgk=0K1^}b~DeT#3Ih2MwtUJxFK+ka>)zuOS1R|NsC?##ELor5owfKGtq-#2q#Tn+TPBq>J zJ69-iHp=sZ?YvhH=%(zOg6N4xDD`4w39t~(`foJZ#eziylb~WMlv-&j^Joh-yWg-C zlo(i)BaDt{IIDu$AhR5KVu0XZT$E*Tbe%%yAcC<-*}o@&zmMRCr3qH4a}H+e1q$Q^hQ@nrHQQWO-%j>J}V5P(Q=cbl@c^{J!$b%ta7oK#Y4zQzNPw&-Pr<&yyGZQi3U;q>wovTlD2BEEC#}yp zX3C-SF(BUY1|6LP`NVj{l(Yd*w?FTV6hCc(&Y^VVEOJaYc@i#h7d??S%ACa6%;Sq% z=fiTl;c143tLZA(-BLW4>hv;ney=>t@dr)SJVu-Gv&meHK_cR3gW~?heSk9p~*LEpm{5?YpE!F-@$aW8nnq&5Rf zusL*aNK~9bv&%CNvGQb(($qQ!SH{G0p=MG-v_04zwrH6C)z!;U@9C3|D)ORi*nvKu z1xs}v|AA^|<{67!8sW|`foPR+y8E*}Ir-JpE86CGqB})#bL-#7;Zh(l}c|s3rK8K6Ztgm)t<@VGpcZonn;{J_ucfdKjR$ zV8tvatGvIO+}+*HkI&Fite+DSTJ>|~CQR5b5V+$vbWk2hJI1|?;J4V7jTcWJEq+gu zcPg==v3abTGoJ51_Jo?J#XTe-7`YBTm4`N-ykKxdov?1$y-s&yql65HqT_c`QPU8W3@(pr-Ou5ynJc z4+;isghmn04qQxxV8y`BX|uEqcRLC%R`Kv*q`j-EuS_7N^_QRZa`{y5sV1?g_n#DR zv`$VJDC!l6#6?0QQdbT*b_DEIMV=!bMH+AJx^d08(epjrcAgQ`AO)aItqv7 zx#QUAje;R3(tzG{G)J-+Y_%!tjnh%+2oDFjFJ4ImZNir~3?Z0Q_ieT8MQOq{S-0Qj z!<0pv!_wz~jL6-;EMa~`n1weiHX0CG!jcvDY%>zp9Ba>c)`$|rfVMCBcLQ#b;^c>9 zi#MPYzJ2X`?v}fbH~C4!{@d_<+urcLvoT(euWeE*f9fxYrzSLwSoF9PiF76H$q>4o448KE z)SmZqnLTJJ7&_1fsIlr=<$optN{Tq>xrcBP=($f2=m0NZrS7`(AterueUd%)c{`>` z^2)8pV?}of)9>suS&4uR#?ur4j-+`@*`5vUJ9pr;#EUA73!A4%YSCvLU;^AzcHUC5 zMv8mM3Y~&1I}Q+0luCwY4~;Q`2Y^Ar<5?$)k>p-)Q^38*D?D>I4-}waPL`c?!=Z={!)z?0|j5=i9|CE(+m{s*A*N$_zQb%wSI#AMN>p1pI`?l4a6m4NKWL zqH72}>w@+D&S5z=;BKvXYRRR93N`fb3Un>abV49~nH`R%t z>WUx=v$)ODVmiw0S`f#U!3JdM6eOrxg-hv62#KY1Zs71N;m^#uk+a|j>lHOZY1%U#Hks-h-}zu&Xs z5@sHYnpf8F8ci^|m$7C-AUm~lU|zS_|Lidq6GZvXb;f^Hr2k)0*?)&9Y^?voc1{*9 zwtu2&TN+*}D&iTROYe3r3sYyV3(j^?ITDa@WF!U}Xcsvg@G2+J%@7${C2Z5JxW5XdL0|oR2pExLJ{^#kc$2I9<#BC?^Cuq5(X;f(;rXu!|IpU44fze*zs>FCM_!!$Y9Q}#B73M#6WN+ zj1m$;hrK}lq(!i>umD)VTW|Ya&y?n9KU~Ua#Tu7oTBC}m@@b(5fIDq-CPcAcarG*mFCN*`mWST}{bMXBn1P_OU9A0vV!kgRMJ3`{- z5dHRI6YxqcOr~P6r_Fb|Wn;SQcC`W11WYl_WY;mSrrIr^9o(}z-c0L7`3yBtYuk~k zhuI~yo!;ImE+^O->!Z4hKd@G**)ewl9PZm}R_j$;>4@+bOj#K>ze~1u0lvD}Q`v24j9#Qazs6%d0^go~+aZWPglDZ*8Hv}86Bb{v~ zMw65f26s}7P@;XG(>l9YTHZLL$U`;Nh(^;09HJBhtCAQLih?};8&@$H`c@T+)}|2% zomBXZrWO*6vX4@O32mYdQL>g8VxksSZPQO%-6O9F@&Gs~)))yo9`s#aflkB`Xl1Wg z<}35~rCI}dRS`?g2sp(M3cWuN}0H_fhnI)OmZVZsUxm=T>`&(dLshG zs^#h`*Hi6tPt~lT%`lELVzP7GVJ)XxAo>Heztock)v{Fbwd7+VKE(k&5JeqSW-T5a z<C+^#+*YPY~+j9cx5Z7bxXHz-+!q*Qt%PYm{+%!F>Dxwi18*DJwc>uP2UQ?i2@?LLM!is4{4!$e=qQnKUnAk_S29&cI&Vg^iL|EyQ)D zHgG{uWM#J9V2nTW)6~rU`(%{W=p-nx5mLZBBuO~dw|ZpCfjLMcLtrlFnPMv5kuf1f zFe4&|Kn+GEK^cPCQkY3-AaQh;?`WQK5*_b=;Z?vKhRG~q2|*w@Uk3%kpXZJsIL`)HdH97TUge6vZaIY|K0v($g?Zm| zy}1b1EFE31{934t&iAg#^P?%^3jw?`T5%|4=BWq2g1^hnP6X;PD^=!U_~8ue%M|Z~ z&cSrRy@iOZ+vXi<>%2WvTRG14Kzqu~_CR_zb7cr*=Lo&k zhp~b!4%L!_z80JB@euG!4J5Nq6NwJmxl8h-c@~k>`ipc!5Q+ zvn)8nS>C-ocJ{-dQgmX#yz7IcbfPB;)B6)=%z z@iC#|`F++#@DZlHCc+FV!?FM?u!IF8m;QJgJ|jiqQ6_rt(PVZJN{pW^;xY$y=n9?H zG%#MCs%R{+;OP&12C66u1?KZ0Y(|{*ZA{D-a><8DycGdkXHF73**49HZ{3ME9T=IHaS zbHdN9mPtewRTG0F&{DZ##!8{LObe8Brj+t1Nmio=<$+=yGTs0MDJ-cmdKCGX0#aR4 z`BTD`GRRBj_z8+~GjS?#e(FH6atFTKQJyUCqC6hw_&0cp=(zePNWq_hp)gXA6y_%M zZgK@r4o;BuVPQWy2s4+4Y*kHM6gOGxF`e2(XBh?SnC5uZ6kt*Dza}#*T(857n&PKAUZKOBYWsdjgDnBtg6b=@@}5fDnR1uy%B z?s;j0`@!2_;O1@=_(ERNylQX@3K8#ZOh@|y0qqjMFp46J2tyhJStp0s0$YDdjPE&T zlOFCVp)*ltwLwBN5zuTZjEH@FN6%?Z!uXz(8sZULbU00K>6#4F^7X zN{Zd?vV6=bOh3&$DHFr82Q8S@qD>q#l%{>ihlt}mY$c;*AOR`+ElKCr&k<7A>~j5t z3#ux!PJE}Lo%(Hn@%p-E;RqcJ2f}yT^~M~?1PWi`hEROuB345-h;vZKI+#hvgpFf# zzKgD{(>Z_jn0rIhRhX}Hd`Ht|?y0kKvz<;aRom4Y}U?;|6osv-X2CMCQa~`{HW;b0cN_LgH>13Y$!}sf>9>)uYEju!OlyDnTG4;KN(7W?)rY_3xgXU%Kq@NFO|vU6R*6kffZ(6vXZdM z*|KEWm>(hDr%&N0?=xJnShzB>EU#ZHnhRxWR`M+NGlhthV#w<3df7ELjf_RlGVSvS z*>Bg@){d<$>R5I+SF@eUzJ54fjD$EOs2F{g8S3!J6QBN_8Xrz|i4=aFao^Owm9HnO zQ|;nbwX!?Mnx>D7gaynjs*Q{av$ikO-iq|~`3BxUSbPWKCg&91FkaqHcRQCW0cItP zFf5rSVSI+}?IFd*F|q`Sj0wdE&;s9N1vfGWiz_2{baeoSfm>b==TJ;6D)L@zY3$7+-%_oYtfYsj(H?*0{dr|F-RTA0w?9hTa8UW9E+cgc z&|r!d^pqNB2T@kev?2)7aaB+VKM|B)US~E>xa?*nBCC_^LE})9hKHmjdc0_Pb2bUMYGZl5DcED@*bP)ph?LnA+uZN7nN-yiJD(L-#&dolTxlmc zczgRUJg!w68p;EYmp|Y!js}lHq=#B|bdXk7rJAFw4P6{LQZB45*B)PYy5`|SwZ2dP z-kK%c!kfxQmi&{{mNn5;MkFU=<~nGZ?E7gbTyi?V|5+_v!0+(@nVHU&R-K~PeRE(* zbu7kx<$L|Y&9C$hVfFq!_N%<@2cE<*Xv>!fxV?*AGjzb_NeefiFY^=nXU~99OiSGGZFAKX^Jn6tEGL;=M#X*n8Z%jVURetmptX&&h+g${1Jl;g^?x7qC?=hrVj z>&JDQk&K=8*&lCf`!;*YV|hk>uWlHGi6e+>6|&lk{4c|D5fbZl`dQP zIDCy3pV#(iw#@0u9R7qV&zDRAmgk5k4V{d3;oD88{phLJtbz1sQ4D(1m+l_M>{Vi^ zA#z20h~M^9v~9uviWitT{$cOVfAFdQ9m(8(uKW7$`iK5`e;VQcd4~QMCv(i4|CY@C zgV6SG$sFrHS6#))+6@qX$xc~DDPzRnvZ_tXiR=D|`l)b0^fJ1}p8^|pUSH6JA4ur} zVIO)8>^m-PaXUdhi33VTKnqE59B-^yAwlF~(yDs76CWzh&6Wecj(D+^Jg8en*%KkJDrJow1yPmBq2krvh3X(ZS`E*m7Rg?9Hq||m7=#z z4Lkh|uc0GUDNd2+7}nMaWXEKa9kn6~w#c*FXtu>ncwgC39kA$jnQTn@DvMEh6uNqZ zaDh!;36xZgsa!oV7Z6C?=ln2O#*9}Qt9qJ_!P`Z$z9y=?eF4Lv^sfBZ_3@Q-`2R6} z`!Cw5{z`ZIC#d`np5FhB-#A%0{|EfW#>x3l`|q|iVE%^RK2ASWTXI<+*{8Jg0vhe{ z1IwNu=_2f-71eJ7f&wGNf(ONi8DltO*+U?UvKqxLcPTQyfWi{Rj~hq5vEF$)Hx z%$7NsGns_5&S5h|@>jdyu=h=7F1b36&bhoQJ1Xr|x7z)DJ|6`t`hYkU;DtU=l$Gam zUQWA6{V#wRyYk%isL&iBdbNPwY7Lg4AE&a(dGfm9D9d4_G0|z5*D1Lvz8DRwc{dNSV&$FruFz+2*!COURuGccz^F#Hd4d z=v<6{wJFA07bS`VljnyE(eH0z`5llJglSB;B#gj`OlU0Ec(h_vYP)SQ@W12ZJv1WB zYugJ8_lH}O?fWXvJO}=kttPDB;;L~IMaO&Y!@TnTF!@x}9lP1imiWp@P5`fU@!;kx zGkq{;bZ9tt!RRp=)<$vj;>YgJSAO+0)@COFGlR9(WFz-6TGYK?dWf&aJG?cTesd$~ z^Fs`LII0C7J!hbwh5fU(BX6`zbt8k*y|UTB0U2oKQ)w;K*8S6dyn4Fd6LfrrCvyHO zo>>a3coAvN;&u)We`4jv_>HA7T;itw>AOos!_wNRo^tDnA zYLy~lJiEyetJe7FA&r0ojR5mnpgV=AZU3@BdX1`TZ8I@fDSMX{5U5x z^gP6|T7F_x;D~QdbkLK|#(D-m9Ow|PDiO(PvBeru-&z&Jkx{>1ogBwe1mrq?e(vo> zUpp_MeMYyX60`~2DRk_`*L_-5zutpyhqt(s$lZx0x%kKns1SG@r(qNTG zez$?L7eTQfeEC(^AC^Pa&jsY01>=oSf3!Q&|9ytslr9NkD0YDpf{bxyX1b2ckZj{kaE2S4`5wW0iPNdlk1WM^CqM|AZs@@JS1AfK*_3^!l-J(5zh zBXqwSxS$ftTv4inJ`zzE+XbEn>#G*nB!%@hj{4-l??3Bd(@);%??c)5?EmFT-96#O z6nv{*E#4fY#U0Az9M~t?J@$sM?#HWAg{K}!3MuQwdaA|gSo35xYZxl*4q`4Lp9Zs-{&VY8NPWfMXmAgGGrXN)YQVWp5J!qaBut1fNF;WKAUqZAKnvKk7_wrkJS9mDvm`vX zgV%PnsH%kM5l#+=fuMD9y)`IuhzlULbk{ghTZD&@jX^PQmW`N~hJqR(My_9oFq9Rs z0erau)GU1$h)FrG8vHQ)dnUvS)odZCXPR3HDOI@-T$5xw#fcrZkE*!-uY86}l?Vn> zAIF59Ha_Le@*795^an2s~GL&kAC40MZyPL#s^{fGgUj$$)k(&`@V$ZJG~FC z=BP>3BMlaZU@WQ&?xeHZD7w2S2A9Q#ZBs3CiAC}Qad5(z3=NRX5C zl%5~6Wp|txr8rmltmIZ?I8h(D8>~4!RzG-i&lbm>Dcsl7JId!E!>c6jv2S%3R;spd zE$fo**~BA_k@D<{i$R?i;5x2N{7{^?p5KuBBs_^L(&s$M`-*ns9IUi-?iH*#Um2p| zv+R)**hwYz?GAk)o0}p1%4}1XWMdGI$Pn^;rpR#T`ie%Ii>+=HpO@|k8kA0Og;2cz zWui!Dsm^=>fWzRaEIS?IRwO$a!t>Z0;`Xe|x>~(N;<>d5OYI>%xgz81*&@lQDZIeH zRdo-x=X|%wlzkf&-LO&7+(k+bQK?hKK*L|JSU{KjE0oPKh@M?)J#PVltU46{!l(Ua zKwX`v@}aBs`p)(xWn9(dv(*9kBu(Kx<>ng_)Fidq`svlc7o-G&9-;LOOVKEvohaxY zZ_P>h=*m@;#_G!piXu|b9#JPslpN)?s87mSwTLYpvC+1QMO_*d=D$gXBtRdIM0}IH z%m4XY$11PXU34Xp!81XA$W2)jci1W0V7@kJgE3V8BbNn@!7tWD=V{Mv`M{j}to( z30HJULJ=ep=NuXhU?tYZAjx9wuW|1}&*9_MFgZ)QQ2*U@y{i|7i7zwoeqOZF-=*og z>k_vzGyZjmX-haQkLh#ziuNc$Dr*$kPeV7$vLYfr%i1CtK5Y~9`8;1mqgi)sO3UvF z(y(z!OgS&5Vn09jsrcBWiln6$8bmXSd?o4U7$TGkDappjl!z(UkjWFyD9i1`C7cu! z^qKTF)E7i|5KpbcwTE5-58?a?p4$B)_6YY%;E{R>o>Heo){q-RfVfZj5B9c&j zeZ+!Fojj6*HAHU6L(!!geA{R8!)Pn6IwvdD&O zsHgKH7RYU^&;jH^I)4@$LX;Dx6M}POwH#_^o#(mhU|d&49T>sfjE*4dp~JFqvsb~^ z=!i$91bq+r#xKz8aW=6>Z4;_e7!8w6phz0T$R(+zkt;}diIu=%+NGhTk;e^;Wj8Z4=PxSB>J}|4@0=>mq1b(A&^#~gn=mk^f4b0^IN?##r z9THY+2&SuW+GPU@j9m&Gt^0ugx zX!bE#^m9fgJ2y=0aK?-rmkG((W1EsDa5o4cD@}IS*N9` zv*5f~j=+n>+J*YHa?L5|FbNp!B9i5VOJ>*E10MH1G_1;0@xwqh67WruC zNqpy{^}Nrw@dwluK(A~v(j~uxM0J7TYO{LX|AC|K_xSn%^2mfk!7q;RHp@dh`is*h zXSG$ML6k|8&(X1NO-GG>X_4u{YL(b95H+DS!^Ln?gZB8rZ~aT0}0j> z4Ghc}Yw8Qs-Rt$^DQRK6e0&*L1X7K4gDl-a7zoePIy{b-*(e1k+Y(Y1ui+~@7s4~m zwoDH3Or478L5OeCPgr3Iw|2dSMfI~!u-onoqUiEDHrFn~BXBvR69&Qzw09598HfkX z;-HxdIEEF@!|JW_gDU)LS5+~PMo7H#Us;DFTRLz)oh{2&ab$F|9AydfvzzN?4x$~! z=BMe?GF$2Cr_qwp(k`XLrR0lwp-Yr(%h(&+wHenL;TfYDl;V0Avalpmm}L}ZoEk<# zk5L~Wp|w#!Au?F84S>elYmJgcgx8aq9PRcqHrMmjxRnXNo6D{q-#+$k#>YSBAuerb z=AkZbG$-<@^psssW;IY3XAc;@N7Y>}rAF+(@Mm{+3P+NtEEzC)d@A?BXH<1-^Kq2A z6p=oWv}uCqlJl4P?&lap`%iH34Aqy)6q&TFrM0v&4gb(h4d(zRCsmevUO_C=iBgnT zP=nU;e|mDO+HTi6o-Ie?u(#|Szs~o&eYoH07`oK&)D(F;99S(B$Nr++$xfh|85fuk z7-L~6v15UkhAri>b3kAaCROTGe2Be4^>T2vn=Px%3gqXQAt`}ci366tiMlj zeci~~^1*F0-;6CCW%o$-!1Qx^EUIJp^FEO25_anbH*>xa24_TnXcXl6=wto#J9ekT z!Dn9}TuU*68; zC#T7;w|{P#g9~t+I=7I-CbbOLNIo0!A9&@{1>2vqQdr8uULON?wdN|(vBgLd1v z^R3v+%9^&F%udt6k2BPK6*}yb6Pd&kwbdRrkokJjW}7 z(+rTT6l$l6b+OlH*&B)I49KS}ZRyslSxWkNps zDOO%gQO@p8&nhZk#zeuon^CO*vbR0x-^F8gr|G@$_AihuW1}w(iOfYM(u$ectC-WM z2`XdZ__yvuhbi`n4A-FJP;omAt3U%%Iclz1weJGrH3>)@(P| zH0JY&&t8+x69#8SZe|u#I^&72yDAD%dv+FG%Q?!~qkek-kXj|9$V5L{urAgH%LALX zJDZ|LqJnKBy~rcFgmUl9_Z#0GP)87(!4 z=K|710z^>WZXk%5&=r5EwTe^4u$xq|=#*h#T#@E~qn0S#!P?kXY-`c`u#f?#TU_r> zGHyP2c0*}h_Iihrb(X$@XG<*|S$#l$e&QCtr8yJYn}n0j*BJZ)nq?1QEU^JJG? zI)+!_S1r@6qhhhCySp&6XwP0ey$6m>uKSBk%MZ27;17(=-De2cQ_9tO$DmlKRc%h> zE+VU9lw?;De66fLk}<3ocah$EXRc%I^7C#yQ^3`BA&nH~Lm{fF-Hu+H?dyXrM^EeB z$rO*<@p>{s#xFhFuPYz^bN5?UCp|+wso5WyF>vFv184r|RIpB`_LdEh8l9^$v(gil zsLRG^_@~3Lz2xQ1w_YYM{PTJmB_EPNKCkn%-86yceIA&~wWCb#!j%%+3v<;<`%~EG znOo&&a}QVWjxDrapy3oCZ$5^g7>Z7!iZQWS%hJMar*RWi)wJyO;!t!FPS%!Y9nY0K z)ryruLF0_e(9E`bm7;oQI@QPi2{8*jA7=7~v2~NJ^bv01)fG>uqq8txjt7N{I^!{l zIB7kL#_6NZ!xW25S_27LD0O$DqniSiai%GdPp3U0q3gcN-lWR~Z`-!YepY zFrG18w0sH@Y8Sne@|CY!4rlUid6CMPI`XCDxP^uVK3|fXr9ZYL%iIGX<&(l=_Uf0f z78#ZNS%)Q*VktbmqfRpdiYzX&Ygrt_wrk6`AB*c`kumaKcKfzJrYHRT4ze|0Jr3vo z{Glj~AxJ$AUvDt;(={^k5fkg1y!DMBxeRF%cpq{9D?ITHl<4><+5z$h12~y z!&HGoS;oT66y?G^cVl0zO%OoL`#CgrE;+=eCX2`IAmj`K9@|jtO(f^GX~oY4w+UEL1(|KRQ&U?hFlb?<81wvB1qwrzXbwtLz(r@N;;ZB5&@ZQI7_wep>_|7)+c z*E!kAmk+6=l6q5>Jnw_5%Kf{q>l#1gGcul6a~-i=TI3KF?HX9&V$E4FH74?G*^vBz zuoQfp{V105tG-{V@vY+XIRbDSV5S=yjhuLSA&k+q*&fv*ZuRpJP@}thDK2_QyLAgnvboX6l;c~75hZS|?(jUCt7Kvu3pj<;Lj5BJWLigf`&ky6? zp6dx>#Z0aQ;|vV!#f!UkUB&dbE1p;Aa@WeQqIjCYlQks>D9OAT>DQYeh zD>GknxBvz@p=n}S@og__`X+qV1{lXD1MN2tQ70~s<;=w&IB%s@crB|uU-&KTTm%@$ z_I1iN6SnkTG^N_{1`g4N9+@p0+Bw{ELp)teUuo;n#aajkd=oZMI6Q%%F;12Vo*>6@ z7>jTZGG6n>gOI*3Y$!SK$WB4YbL*u0?=B->|3IJLK)w^G;*m~vf^d@s{41A2j=#vk z|Nl+F{w|UJi{$^mGMW3&6zuOa^#5`S#>xEeDA-@+=>Lv_F*AI58xlG>JDM7Phj!1> zjUWHYCW0Nj^o7P-6|TwTpbJ8zqzb@&=&t1xu%byfbcou;zj^3YTkVE#d>Vd{uI)R0 zSkwCIPk+*M!8Bk{^U^uUREJc@jW&IStykQZJ62P^#H?C%YN7`!UVvw&kp_H(7ib3R z8#>M0qBTWzdPQ$6A+e>ltTJt^XT5eqeKn|;L9@U|EmpOAol=12n6#=Dz>!z9O0U0* zdjEzel5Q)uovUzgXcyXCMbe}SMnp@Jon=82F8^#NkaWSDbGtNlCa0kciF>7<4xps4 z`f(!SkyC;wf~u)t;!Dg$o`8kqVqZl@kenMW^(;X!9>5hhPGaY%bevCkD9tn&l~qVH zvFH5*}|v%fLd|Eo>>KaSP^ zjm_(S-_8Fii|Fs`{#SbT*OvPKNzd4r{^k_=@3sXC6X!oPua9fMso<)neCVw|mc7Il zwI17MGbZ796({VKXA% zrA$uBB^S ze;b|STX8Ey*yqBvK*>BIoO>kNA#yej|CdzU7cyQNU`xZQMn^^lHAc3 zX>9TEAmO1Llv}P`Sw{L5ty==}YJbrC2Yv-M!}Ng@VX0dY!;X&7K55r=E+1dkLJ*>* z#>wnJc~ak}1&hu?6yqX2J^jy>=nFCd&{GXDj2yCX&L9)#?sOFsXtdy1wj$U zkQ39#Y)wFH98*Z`veYE);)OQ+8dJuvP+5(c>yH0@}v-!3D! z6#@Zo4kw@T_u&w;o84&MOPKrCPIoVC)P+cT*6-vF*6WU1Wdy38Mj-5-{j7-;QwzA= zMkYl!I7|-+nG&!wrqk;|jM*-RJ;O|#?kAeqb&=V^lZm+9QG^Y@-DztMZcS5DKNv2k z)x9=MXfTGxNrO{%hx?>togw$k@_{SfH#`1u$5j=n{LNp|GI5RuuN$<=nBwZE%^>2# z4&(}v1I|VflP?NixBJ@fTcT~y}R`C{Na;9psl%WNCoAgBn)CIBnh< z4LM^B{cnx!MF8rYg=*9(P}aaUXHIue45wcCLp*0rHKO#P`v;a@SI8Nso*0|I6pJCv zNez&jG2TfHo^CVN`BIGQ-Y$530b2BuKe=;044p$bgdl1jrfDwD`5(3oC)uFGjL`CP zKeinj3vmd~sc>`~LD2Op10XgM3O;KhXhm2A>?xGR^*~$apE%hTLcA++5D02U+-wB^ ze4SXe`ktVMMQ4}(%Zw?srbB#|pGaT~-azwaB0J5EeO{gl1dEq~(rXX!Yti8K`Cysb zf+Q=`p)bv24AkfFZnzW{5koldOAdUT%zA9^DqMM3V^t<3JKU|h5)>u zItlK+IJ~JMljPHns$AFYpbkb69jO9?xgH9*>c>x5A7fWy*JD9OYEAJguC~czAjta@+J^EAuF-iVNgH`=`I(iNxWnAIldX4WaTD z%@nYC_Q`|Lzcfm1Djgdp!Z;a3~unYo_NE}?H%`=bh?bWoH#bKS_CYPJ*mdG`c5j<1# z9?uR1wjUv8S{x&;VRpNms`Z5N2kMHhDbgn9@%*D?Z>mXPnM028lXB_DuJKr;RmCFi zsR06aom=v{zPO|LmdJ*M~3voB**9yiiXfh%gHD!luZI;H3E|?D$&DRhhQ@q)RhD2 z6-k?iO=M8X*|AWD0hv=&NXZbt1hDMgVm3*v7uY_I)jsbPot8{ze~rj>TCZlCOTEW_+Jz@Rkry@R|%DVH1v( z#Mrb#0<+z13mi3zOXDZ8^^ue6oxeLu_+SS@=SNvcSAP=H*z7(IyGcL()TV$5M`Dzf zpL0AIOJ^3X?#pMCP3<+Ob9G;4h}7+PLsxoi)5qLD%;Al~jH+nriw=(aA*@DlgoF$Bgmhxd8+6wuAwHWLjuKnkie0q@A!& zw-EK?FyM}^gU{Ohh7ZO2cvz$ow0%}1PEgKEu8|DghXx%E{P*yRN3u(C3I{vg)R;GiOWX^~Cw>{3ZNl##s|6=_=RIbh?7>P>m{m+`T~fO%lMsdO7U zgN}0h(dN$q6u6W67rs$5mD{nFD`V@|Slr{zdv5k%N2g^YGjn)!t+Zl2s@98NyMy|W z$=3RQtY35LQv1-58Y8;xA;Aj6{Yz}@;Ya1{+F%P+dM_2&Z#mE+{ubo%5>AxONfqD=YzFYKh4=H{O|3z6X&a!ZFR|di3{&UTsoUw zQfZOD>Uy+T9W0!kEi9Z>dK)YcfH(WS48^f+pl zl>I2m^CHQhF$*U$x}TW{J5o#d`WMx`*7?L~T5o3h_(R#HRQUp%cVSF)XWz!pmT>-$ zy^nL0&MB5EuqVBZNEvSmo=sEfIVZ5&8Iyj)2=|h2=k^hz0j!McsyQvBit6;=Bx##o zXb;Q8U{A}%qE79qe6iGmG3=rS^3h#x4%ITj^YeEWJFC)QwS*TGhB9!eO}3d39wB4T z6nVH}H;k_^L1O%w<8bZ4lz@)|Jb>H?jni$@ebWuo9nvk+UDCg6&M>_)iEGhmk36pR?Y!z!QsfccfUaezZ$+nIz1OaJ69$dKl9>^<@@G6LUHpML}AV$&ke)oT47 zx^YZ=Y;zfU-&z#uuKNhbUIo-!2SB*eBmK#cl}};D7BGxtoqJpzASst*306E;`OAp5 zEZyZ=N~O+nqFX({f(8qs2jm1|^h-z9`T}%o3TxxzDBsfUQK zgGr54ryf2Fe#`RvZsM%qo99*t$2 zt)~Qg0o$Z+w*_9n9mG5+=oL$2WC}6eOY*^IeF)sNkrrQMV3{$iQ^awe{tJe-rpAKS zbJ_|fWasjyHQ8JSuDE_frB+SaW<7aW($nR@SRzatY{Rw=0uQb9$n^e^6D;QduCkm^ z4Cgm00|btnEY4%jTgNp{EY2LTjf&?OE!PH6a|zpn>d}s|v*!hOMJl>s_-bG^t=bZf zqe6s59{u&HC-#B+pv`vsnqwX9_e?jNWi1zr@oN%-?AF`K=LD>zq)_xK_ypcpuQ0zW zklfgx6>Y@z&BU`Qyv_zkA+QYJCj&6T3nYXTm&nFiL{7qz@p9+@$YHZa%&QH=DCL+i z6Da{SXvWi9I(b|N)Bz8Ck&9r*q^;`fbvFy)n}c#?ev@lEB`+8#vx%yU@;vuV$hij6 z-SzKq9bt=tV$w_Bf&}fmF@tGI6FB1cFoJt!&~=P}MNt)KYb+e!OmVYrYuuG#BRZZSdr8q`2s{Q#f~Pc@#m@gp9)$EJG1;NIFN(5h4jt$grqa^QN3c> z!xmGgX6!`K(7<;6(`q`Un6p+%p-;E|RSk7#Uqe7@59POEuZA_LhNTKpy0;8 z9O=l3bvx_4VZJW_d7Y1S*R|20&i=rfe{)cHIk}@TpagkB(tEV*cPI4@ibG3BQAbUO znIIKQ=!-I7ID(7nHejLT60Mr0@(t?2THLOVivn-&Nv{Y}DNF<*m$soTTE_im*}eBo z_xCqVUNYNu*~veGGl_^1dUmiiq7fCpvkI~DW2^LHTXOLf<-d%+Jp=JnA8X;NvUXf% zJG1dkc~5+gtrMhqht+^S!HvE;H~zU~!}zZ|p8vHVK-=II&N2JO{9u(@NiF4l|N~63*Zj!60R3^Uv}PN-`{sh zv;N3HK}$>Lpd1a7H%2Pa1VIVPt)M!xlsWjO$ZD~Fd+x}PTog!v-$5m^j>cxf@xnp+ zs5RLl8Q;)p`#fdp!Df`!iH2&6OXLcgVmxLs_lVNOO?_bp8L4k)+j9_k*6<^b-!I=# z@qeSJTPwCQluglZQvSMTlx4=byg9|-)<|Og=hMacFFC`%D~SHPUG;yO>%#GO>B~P_ zdi;Ii|6$|*i(D5@hW}kcI~z0mKU786J-&QV#Tzfnv{bzwBQM%BZF7L(=(b=i1XNIk zBlCB-GZ>!)6sJp&82OBnFd5*lfxwv=pR(c|a0eM;JfnlYJ9kma8Og*LCZ$b}G2)M# zj5*8Lg3IR1I!tWjF>+3%zxq7JzWTVSU+T^`l&ig4{od44orePjR4Bkhh8R;67V^GN zLr4Nlm;o|bsyxO>_$HG;i2Q)F^!qcV#c{e?Fo72w!2Ou!oys-p%bhBq1q$%M&uTnO z94814_}#u=3Py8)$>&7`DsT*kc$UuXC8oHRAI}Ulqyji%cDp#k3iZ^26nJ@0eXDee zOyzq756%T_MFNKEV5H2(pO$M=g@G7g0N4@cJWUctv^ancFu-CDR)1aZDpLnY7XYBy zQerYZ^FYG@<{xZ%i9wgsUh=t0VG1zD^v8t)pu!5Qt^x^WKC-N!dG^c_0)c@w1_1f< zOR8*j0R%f&_ydOlo~HzQpaS&hihzpejTTo3yC=Kv(0ABejz`6&+RVXgV`}(KrDtXM$N`eQ0xIY6HP#IM=`kHx^b-_^2~;RfQwPRGS)gcIYxHD z&}&d}1_#-sMh@Q#5vs3Nxw1`(O_?1W&H001S~NNZz@+623c6hh__@P|3gAZtmNMWS z2tv_@C7+*X(;?rZYcf0uMq*V1(0d~u9v)6Vl|6&;{haZV$tL2EkM@<|r=QyLg*OIo zbuVQiWKZr3s^~>s@d6#f0@a$m&(C*nG)Z%vf4Ff5Uxy0QZup$%wzs9sS?@J_r^W^! zz#pS#YIBg5E)GFGhgq~ed><-YS}N50BYfw!QWEC=MueZM?mon7U1=Ru+r91=#MJ7C z4Cv#R=*2IztOhzEkTdBgnQ^Vn&LUl;^otXl%H@-QxOcwLFPywX%>(iVk2S;@HCU%=jRnuK(l37UWipucoo||9-!Z2}3 zVU0ar*Bl5tSr#^hH=O!aM=OW{zyz){g4KYOHegBW5~2(UXTU-4Mb1`* z=?1fmgFT+YaLfah+BznYswqiGzSKL?;b`0q+LZ0MKK83M?SMui9wj7kHza2_umP z9gCNkb?e|QDtk&}j7{yg8szX5h*raz^#G?q)OCT0DggI02>Y2EjWay*Eo$DrXGMM1 z5LBC$RhuadX54E$4@I&H_jleD%RRGmuO4o85)hRqu=c))&*l1*cprb7w0#0yW`&JB z-a;?H+SQnGjA#6;zvX*Z@O}Ep*HD2K!F{^ur!Rj{XJ%nIUR`vnJ1u;3_$5}j>gIf} zB&qV3AKVUVsE0iY+6$VshcDTf5TA&@-;?El@FD^n8o+tW$~>_h!&v750d6#Dvx2Oa zN*^l*CJnH1{9)|TE4!H9qD*!&?PGNOH5}2rt3O^9tAQ4JEp7ajY`VOWg(D0RI01lP zTO?!(V$$8>gTkzBRg+sj8Zg$|s!JebR~<1na2{YEz~XtxT81?3P>I`+ZBXVKw2;-V zQG!}q@JZ8LTyYZtQXC-j)p(7GtW&_!n20El%>&vN@=GA%1{8p?;Ow>#yZO6rZFiVY z=m&s6(q1BNZKlrDePe1CVW~5$4k0;Z2!%a0Uy!;4m{Z-pJ4zXq0nu34ZJVg0K*L$6 z)tB{uH}t(q*?26yc}O9=trWZmxi8Ew7W9cOIiCT5_>nu`S3d$)EsE>OA-u@7wt`@c1U$e4jdq)ErPe(v1?6yi9L!q*V<#9}U?dkHAKEEVnDGU(jDuPikP{?iAO098KF0FAIlfQOJ#7@Lss_$JDe21ElWydssX z9d2<{rb@g$^n|sKTQU!EsSz3k_!6ouGjtPg&`y1u-L3429k`Qo_+l-m?^0zu+tIa^ zHDEI*xT(E@73lNY1^RPP_l*nev#F~J)Hgk}3HM19?&Xs&>J{w8=X`v__2JR*>3N*^ z!vk)Ewx<*7?W`*PjXA(Cx=$W#!yUT{<}G&D{XEg$_nh7rIY!<3Y7^{3bZbyO>&-Yo zJ^oJ29dWP)b%dRJx9i8%peLjNJJjuM z;x~OY9+SZ!U<61zoDaDz-+;~rJLwODo{+aD(ssa2cPa{R{A0rNHsIl|O*KMAN9c|NN`mS4I z%xbCww`If?Yk4;#?rV8Fo&l$zm1s{&AtU<88b5dB!77oS@-uq%v;51!QuxD6zg6s* z0_$spl;>Z21pHFdp|bzeWe!HKZM8jW(>x~L<&{p?ur-rt6ONbazHAgQ38_O`ZL$rj zrxXMe*?Jv82*j#Gb*yK*SPJvdfRoDDwc-`_GGSFRLhUvo0p~F*lU-wo*YBhIc*m-EQ|&08 z)xc%GoqP0}K~Q*7N$)M)F=UQBoCl1w(u1op;$c)9`~k!b68zTLkG9q>TVND0@+Ag7(y+lpBXyh>uz_V89yx;wn()C&A$8<| zs6GqUFmaeDI^%-ePA=`7BtbmRJmf@CoFNH$2uj6@;_ zes_$~PMN@NlLrhSvQSdOBuOBrf;vJFpHE)XD<$+<`jO_@Cj{paUdQK0L>C@@@?*Sx zIhOc&h*}m8{mBm<-}eFthNhvsv_KLfiSsgEu_g&h&5HU_Q)0YhyyqCOszt}D8Xq!2 z(smDZ73YgJ`o7*9m2v~fc5C2A-6QF#My&Tuc!ONP4OEQA@^tR}Duyk`Z;CyBoGhTE z;92l>X|HHm$e)7?p;Z*XwZOhA0-s_sjG*EPSSM~ovpKs02n*%Bqen@(K?S20$XZ9e3iXy5QuRC-!6KPQDfO^u_ZB*&O-z+yrWf5w)@l;$NYs~M8Ov>o% z8jZ%Whc7TR)vLm3KR1U6sx}Gz=HyP%&KH*{KhV;MP}lnQqPz5Q&b9ODw0o@bn_OJP z#HDHwvCJc5qL0f!-##LJ_tmH=*|pwBen&R(Y#=BTh7?Yr${14dh)TsP!%_{PDo1eQ z)Jn3A57?xP*Zs2LT#fra#%7v1*rUOe62ltJDj#-i!j)~CVY>m=Iz-8}ydvtiWf%VZmd;WnmjEHY0&k6VG}hR;p;r!h($>8-4Ke z6ISL>fg@Y?aQ4^njdQPa0oxTn%3Om#YTSm;%&brr{4icBBCfb2>I$A~v|GFpK zAHEj(P6uP=*XW8R4b4B-`y(T%oozm^qu;c(kAHXU4&0x!o1v~#@gbV`x9))K5cx>x z@06lVhR^SaUgK(t>k*oo;3=Ggit?L=bIFsm3p%r(nYWV3)DL#ZygKch2thiZuq(K|mR`yG~F7#XuBp4hIXdr%=)W`DF~ms`*(I z4N7E_234a4fN*?lsG>*Og(vRZDb{*@TmJp5&qrlKWA8?R4O5kp6O^V8@=E!2D1NUQ)ITntm;)Xh_fGl z-ON*y)2vlO)==qof&PO{&EQusskfi3Pr6s@|sUQ2t%B(2tPR`vw#iE)ESV<^<_IHu-cuPbo zn~i&^k?!if9``}pYg6W7L?hX&H_LwSsJa%tuXj2hJD+|QntnuQB(uESQVE_6RF-Y$ z#Lic%ns5Yrj}n%%QozVnB9Ur|3KkBFc%8NYHuleYw)ID5(fSP~TmF&hi_`f2*r#WA zBt&%y9>Z8Wg2YFw?#m6Hj!yg2ys;c!N&X!|_?as4swVLJ&%L1AMR1;?<6rgfTy@g$ z3S4(R-AIb2E-F}!nm9x7u%?95hGpwKIXFF54!#-#oOZ z|77NNa(lH_|1K{nsi-K?2pf04a{Guz$sq;#kyuiAnb`BTy&wCnQRk00fjl1#7=?3y zjva6?A)_ibyA;vANEtM-U5GjuJLvaFp%qcaP>Hz3{z_*fYo+s-K<|QiKjDJ>8PCz2 zQZuWp%emOwj)R%mGe?MF4c{%#-GH~m{#!YDq{lwfotKkdJMXh(7qnM2uJ5(ZciFz_ z;$9D=>7;2IKh)n|)7PsAR!Wx<{K=%?AwxGdAS)3gf9esdR`*h8Gff*{Md?7-rsHYd z!JDxDI<|Erq1#fo{k6-5Q9Xo}9e*Vf~ES#4}cDEKbFU16QE01r}4lmHTi z2s*rBFU+fvA;Z0uByx%s!-NtZ8yHW%T&6SDvW;MJ+>z@lT$dci19?fheoQVvAHUNj zq(oa8kC_{b2Ch_A&KL&YQ953Z?w?+W2^k1#SB*5KV#gVDk4pxg;E|-b8V$a2s!?{Q zIx37y1j0g2YGQ$#XR1uD+wy$68OfhmUU=|~;i|_IviThtxF1jvoGgUn&?KQnK;ObIVxqKq~N=8OK^0|kPFRk5(Ld0Ob-bkBdHI@9~S(}c1ncO z`gG^m{uLECE95#bi|JNhzhK;By*z6q9wxEf#&>Bv2WN3-Q)ks@S7$%YhR*1h6_=;? zH6}(p{;1HW;*3P^7dbk)NVr(IXt=n$h`5-zq@I+VSg=z~ftW~ecnoQ5YLAz87JBU* zL~Cf*eltF52Ku6xd!`=;>@{_@;^PC_y-u0^^Nst?_ZZSr{NHH`$~(0R_baLyXuOU< zE~;lf2eOr84<@3;9S5JkHTOb4TF(8f?s(_IseIL@Y;NyXO2#XrUGcQ2Uk%M$f7VFD z_q@2A*#6wTiG=l1zac5!vGkDy(tWBGh_BX>=4O|X;E zERY}p8%{pFl5WNa(C(EI45`^LkYpn%Y3^S!;33N-g@Se6H%jb)`7?de`IKWO63ea! z6hc`Bqto}xvrBjeE%pTL8&-w;yaPi_l=4971Mp0Zfp=AiLZeyNNZb4UUxfm`O~G zpV{Nu#YIxsyyGtT73hbq+1(j$^9}XaSDa)gOXNGzV?%<+GnJ z1BQFS-kLSOKSRw%UYwM0J*r16p-(snokL5aHmF$AO^zray!~v>gH?Yi$Hr)MPJb3d z-QVVNUH6To+Tu96y`SB*CO+1Vkqi&V%42f&e2-rGV|D4!)JjBRyijPdY_k|9O{|aZBqzK+Hd=ADD&84#(FF+h%ikY@&Xd8c8puA zEtA=J_SSIgqNQ-yiCA2=YL%P&e6rzGU!B3T@CW6G$*gbR(RXskk^CAD&}0E~=fRF! zF)fOMpn2zpAS(p)?cmvtVvP3Y?WLNz#oXo2*t1#6-$)si%}rjLQD4E-bddlJMjB8k zGp|--%H60?de$2(epi>#!*X$ zErbfm>%tw(_Oc{@)(Rf{jKYDf4V?r=M}|(pMJcurfRamxL$4dQIC_d*rWGFX;u@=1 zs34~+vsCc=p`!MrsmbWP@pe|&+{>02+BRZia)9}RNRb7&wc388AJZ~|VNe5^Fu=JO zs;zZS*A>T8lgW}Ghst#1IFwepl4z1+j;DudI?m2}hG&>5Y@(Ob20zy>>$`7C<=!M# z4m&*?#j?yc3%IccM=WE1n&(W;8{-S+BoiFFEYo=L?URl&6t z*;vw*u;%eTUB8xx!&dpl$kwn84(}gm;3>0Njo>W9w-TtHNSKy(~jfU5PR5YldK}1o5sR<0l!&R^Kb%&hfk! z5-J0sB1#t3Cf|`_t)xU*+;t5P_nP&S*`>AodAcs`?OU2PLB(>-7}H&#>^SE)8+)*n zwUIGkrk^tNg!iYiA;%=zTm@tG#T25N!4>As>hZJ{Fd#)J)Ja4)=Zd9R>AnJT&Hnuk zi>+WzaArQ#j}%J5xXFNXh?BA{6;w*du~7Pbj7j3mMaD{7bP+UWmi2p8P5LV^!Q!0Z zn;)=68$b9za~(#GzgTSjN2mM0rl$XevHyPyn6fg{Gchs!cYrA?D+fI*=NG>D0;cRN z^sJ133u$0yWdEY5%q%Qlz?6xDo|%b(nejgX)Bl_q$?+F2s{gq2e-1eK`wabmT0rtw zc=zvEDKpbQATiy9(XW65)X+zd2-;Oq$*2Z7!Qceq<}{eyJ0Kg!`T)kzGRe?((x3KI0f0Q<{18{1=xK@DBQ}rO+Z&wRV4!||LotaK3OT%J~ejL znhA939+kjK_>p8l+ppm$#wCi(H1qL8g=koUN-4A+L*mF>b%KCTuTh>c+E_onfZP=s zO3GN+!M#vq998uJ0b=wpZfn~L6c4wWrx%NPZq#88_LM1$k-t)Jdi@3`)rH@!@M0qf z?pm&|ofd}?J!f$s+O||Hhd&^%WZ<6<9OqwB9RIrO{ugNf+r=+GG$BJL)4!p6!f*e@ zsrx@>sDBqu{UbyD`-b={L;dTh{-?6!tHprxe zi(wh^%P|uPU?B+!NTN2T;74Hr1=vdfkO!uLs7e$qVPv2rq#gs1$Z##K&;ms2yaOT} zW?;#dQPK~ZYFcR>QSrSNBmx=g&hs3oeE!Fajmr;*OE>9 zwE!hPHxYB|U9U1QU>O#GVxBsolfXv!E(|b)0o0FmT3~@PrOni!@7_ z2>(9%4i6vzCVZsVY`fcdVEzKAeHM?YYs}`7xyE5+=b8X2d;n;ipoJX-D6qe(5XBKR zj36iw>Jl^)pf$0i%O5yUZ-qa27_idhrv&M*GJ*nRG27sB4zKn(dufpDE1HI{@ib8k zVZQX@12pGOBFQMLsGXn#QZSWWCr zmWcX;m|LPV6zb(A<|n}AZ`_$$;IJw-XU*0Jl^$#6kosTO>JI-9DC6Hgc*vyBQV18L z9jVv{mx96PUC{$f0&plPw?a{mfd5QkfOkP+!tEOH(FQ=|!KzK!WJr6>3OYmLiHT25 zJKK1*4j{z=TTY?92z(BqFdGuBfgtoiXNY>u@T^eW^iiINKSX{?(mh$eW8ps^iUtm^ zoRk0oP7JLI<-6eCiG8Aty~JMJdtE$*a|K~ZMP7(W0bK@ZATS2xGQp+{KxRF}8qiHW zMjD`zhQwn5UItWSi<9edaO*@6H+hKYy+#^O1?KCExvu(tzKFD;WYxGA0nhdrV?kcs zaM^}z&eMY|=rZTcJW}2#-BV%@`K}oD3*ZKXIB3L1_b*r|{Mo5HCVoyWw`L zVjEQWGeM+XC@+IJ6@b^fpHNE7dU^0FTkq^z42$?Wa1Kssw17tq(AVH@4cVH1f}#sk zjm=$R5djA83u1WSfzn_AK<+9UP(An9{v`IepzmHlj#(8HRb38Ca6}yN)>|}2ea55+ z3j(|VR7C{bFzTgBe$9~FE+%iZjj*OISlV8B3BC^C!Qs~}qC+CUsb3n{sUa_JwIflWR2a2;7#mO*_Z1}%bfy6YZK#{`&_dkcHf|f_{uH!! zurvdfUavH1feJYX?=r7bCNE|u_<3j37VBdON z0cl{Xn#`;D+d-^#X0BkaKmz%gh)Joc!Kr!?U1ikOoF z)r|E}2R*J!m40d={GwnR-Is=NJoNTVS@8Y9C4o#_*o|Fs0Ew`EKsBb5ArNgSlNwf~ z0)$IkH+78`C5&;<9^|`WD?@6MaI!txMnFFY=8XY8Y3*orN*g5?pb)J(iPf6=(7!r@ z0Gu3=LInhwq5@b7w+l!z>BAC&n^5t-Bj0bu0Ee*V#AozlGOQ+`v=5jD5RRn; z6b@Aj6s|}xndc`BPD2=f*HPjZcI;E8Fa92pr%%)&iOV_Ih=#f29=-dx{Io9k<_hNP z)DY;?d!5;Pce0qcG!Na@65+d^G0>3{tp93Zjs0<6F7wcId0j5^h7hC9;hP?viuWYS z3eHb35QrNT@IbE5{qBwF>slJ@qZXYib)_7W`^K8%({o*Q{lqw!65<}es}H{u!arCG zv$>mVeC^Hp5x&bAV?N2TtQljT^`yx9aV<>oN-~H*BYP%Hk)sztaMyhxg<^dXRLs%w znG@eWdCg10=HQ*WJ3Of3$^`U@7=3BaqZmCns=VwFW9Q^;4c0MyjXB89fxm8M7>yfi zZ?pBpHQ1X>?z$8ZHm32pBB(Zb-Jo7vvk1RqU4B#!p}br^d!P!@1z z8uL*WF!ssYQ9s_JxA*jlyrv)cY1{AP>K(9qyS5lQ>ENBRdwHfY=x~Wovzi(0Rq-@t zo6I|lz>7t?v5(MpmspRyHGjMhkko~w36MPhsSw8sYHm9WbO zW4k_+{e8dr7x#h+oC)i^#(STj+W2+&`0Nr2#C5o;^X-62qX)L_!?Y~!XY}qaj`H#@ zgo81)T5@r1SwQp8nLaj->X~4){nCnj&`|-Yw0ui#xRG{1fa zxWTY_p@%C_opFbGkmj3InkA{2PMrXnge#&LQ#J3n-FMu}-R3hrW^J=xQy}1u*rRr{ zwnqkCtHEDfy$eGREe@S5g-(q_Q-?85F5h|#Dm;B z#>;ri?%ab=xPwk@-@#&bITiwpIX0x2mVV=k6Z9!&JM8_yWMe`QhpnwcV&w3afW?_` zSR&-cQ416f>#P0=;UEDEk8ffgbZf8ha|C?ZK|$c^8MfX&FB+{(0~4{!JP*W2jcqCv z1Z1yzQosky?4U0Hn}FKaTe@rvz|3eN5p%18;kTA@O{zaOjrn7IxQz*7o~?*Rzjbf$ z?r2;prVZAphX&p6q;W%gnf2G?6fjWG#O<sljNn4dP?LFOb03?JzL+b~71Qw-RNz z@c+PC&({bAVFnIl`_3+Ex}IO132w`J?kP=uI&zIJ%+gAR)(YvPff19z;BXK3Y2 zB#jrCZF97rW>i;$8iVf!ep?~n22LK^L)s8W<{-0|hDb1q%rOwuvt!H{V@x}U8B=*A zbbuW(JpqfZ`$I0QCkyLHfdLv7eP5teYv>GDHKF^<3fP9NsH7y=!MrXbeLS?0;i3Ya zq%LC`dmy{t#sHl}3%Ku*m=$NL;#v)#)qw>&KRv#H2-_5lEQWa4fLQ!M0QH684IeC_ zJD5*Gz>pL~P!O4r%$i1W@sk_uqZsJPE=6SAPqtkzOw@{oF`kDhbBtVdPjf~mL8TKmLHaZ8%Mt$c z7s`qotRAPx(-z~8rVHHL$#(5z0Mq0{#j=4ynG$&4XKwRX8i-d!*rv&qgffT7=&*}q zt5evzRaZc@El?_Ab;@5Xg{alMq| z2eS!k?r}H@xANb#6MhfWS^@nPf4bs%N^+_#keQdx)}1lbjttjS4<%;(R3vMk#n%02 zh~x01^(!=ueUzUDyYoZ7*S>D;>&54UP^Q77m%#NUu44rb85>aU#?Q-w&Ve=)EyZV@FYr82grw_#ni_1=s`Y)H=QYAOM~lDK z2&2)g<5S9?92xS2J~hb;lqjwE`q2D<Z%*|y4@w25mrgy;nBRo?4b(eO)Kw+FQea2(<25uDWI zQL7HCN%h+X`BobJ@k^j|yLz4Ww{C)@(K6TWoT`?aIx$(w1k_WEGMZ1%-i|5w`DA{o zegW{fwVZU)!DB?SRQ7eLHmbPQI(0p_gs*2g*ZR@rYI#IJv!yqelIjyJL?lg z-br2+sn7e(2tIl|t~3p~iq8s@C*$6-+*pV9tQ@ZWg^qIhn5Xf%3}Z(6%u!$wg=)Ey z#ZqIx^e!%FmAnYKl?AbELLr}ER6y|Db(MX(1q2M~tIdw9`;1jQ;GDP*^Y=)pfvdv! z4ivCKPKmEmOGt`R}YAjeG9xo8=l+nxlX@guT~b3LKd9c+ZKVy zle-g(FaKGvYL+;b=*_BGYFHhdHK=3=M_A%pf<_5cmSr_ZMiuFvg|9@6xzd5Oa0V)Ah9^6MkuMQ&N+}6U1XW6(i==gc z_>H~_L6@&Dqmu?KxZxb**uoV|W()WmOV9BGr0+yC=)T#2i6E{9_Q0b(~LwzzC!%Y1$RLT=9CfLlfUO*dA5woj{eW-(in3eOKG8-ldkT%;*3vM5Ua7e z4JEE~zWBqh|IyuBM^)Wzjly6cQqmwur{r!zq*J=3rMrpId++yc#$aqFYt6ORT(efqIUW39>B+Y;vZkFm&M`jcySyDB zJ(9OY_GJCojqGp(hk6ee;jmiG`R(~R240L2yp-5?^!m>#IwI%A?!ytU{qp^aq?K{n z;-@mZQ`I?H6OJn-@$GpFxER=mLx;<9rk~&3H1lg6Jk-?rn_iyz=SlbTx_Ec(@gFOF z=Gc>Mt4DDHTcV+|DQrnI5?7&Q=i!dfPlEh*usW>*=#zpGj!eb)7-`%2=2euDpR-SP z@pgokq6tsqP1yJnb2hk}8_4j7jycwAWwvY?dQnB+WZ)LJ}xjcd+R0oG^A z9%OPKzxq;T$#zUhWmT7y@1!m8Ghnoy5B`wok?}I#fO1lJZq!(dXgE^%XqO-MXWYFY zs=Z3vrMz;U+LxETOY^?ftik5uix;sz6Q8t8a45Y}B-|^dq+G-Dc~T)>ATh?M(_-iG zh18(S$O)V5Jv21Q6S2N0VmhDsEk!YcM4u6ceJUI&j4XB35*Au_5Z%j0B$v9gXDNtY zt%4VG6^q{zj<452Z^b1|1q-wHh6cQ{7--p_G$TFaekwNMxYy*2zF`{J&bv^gGPeHR z8@KICWeC>Y7vJ5EQt2_$9s`kf3-lBWd#5s41z1@UxPgGX_u3B68#3gV2J>5GE^m(> zEvOg`z8IS_nb=|&CyR>WlZmDtelf*n!5o^mJN4r9Q;ZvcQu;6$S(@QWC{(v#@iS{1$g{YCuXgWOc98(VKqEn%Y(l)WoDrmo8LYttL78n9t=57HCj&vfn0fdL`DP6^h?kKL|$L zzXmG>E-3Hw$37n|Tx@}N3mcfdpJYzH*I2mq$S!28=xgWh2ldF$Gh<|9&ox{okM@!! z;@71Io((yex>YDyWW`TlRCjBR4{d3xTgzBmS*O0#?EE}7|9+ltGNqWu$h`ik#|cAy z10C_ygV9oY+KIDYC$^ML9{tB_A78b!>YX$aO#eK^b~73Ww(K@2*;oW-1qRvIt_}K9 z84g;Vr)bL&=j1s?aJcJGOO6#78lyv{(Y)?8N!YSLcgQ=a)2BddC)g8Xc~4d2F`MSF`ppDR#@U>nZqy5^l0%Fcw|%xYw%jHBUa5m<;{&Qyq4+tgo__whYA=pHOTWb)+f=u#3{7f1$|e$W@ozoegw8p5v4 z?eR0CWSregU#Vp-3B#Lx%+4OBFQl5xX?cG6*hPXTfJ#Q*X9aDn!NJk)2zY(9piphI zp7W|dBXsepz8a9Ze(L3%((L(X(=ZoxQ?!8Vn0)yRzKfoS^LpF|44qevE_3zrx?nGs zuOjrcG5iEf0yuc{T|0F<8zJE5iXNNQ!X;b+=JbB(bnIxOu!*d`ERNSd{7RB5`lk)E zKm`ruW0SYT1U@X26!+hLMd=a$)23|Mmi+O#C8FuNu|`5nVy<-cGYRbd-n~qJv3sN+ zZ!LJ0S5OUvbu(oN5ndBYq`d7F?_ka`Qk6Tgyx&8c)VBK;+*rCV6+SNQo64A%C6*hj zN8R@dg&oIOO;tY&v=v=bN{zBmwv(9C!e7x(4ULlGP&7g#!KjdqR(!z`b)Q**BwK+Q zidv4E4hx3lFq6Gy#(7O+k_RUpz$rfSZi^4^RSPj*=cK>D4DueeM?5xeWy6CEa_JHp z@o2u)2RoFG#GFLG!Eg*TZuc6n64VG6BMH+lH%KLzo4gWEda@W}4)C8O zYH~?Vmt(eit3LFbQYRv<^WH_Mt#jyip23I1_M0KEi&A%VzY1KPJ7p#o@B7?dThg?6v3IkM?cO_;|1R8l~r6#z9kKtE=93MaufI*{^=By<6E_ zf46SB-hCmz_L}%$v{QV9&Tplm)c(~p34_{9R{Q&lTWF2epxLzB22Ry;cu^)%I26%y z(7kR!*+lhndqc7H?y$Iomio)jdBy67*Ai5)44(1pHi@|lk895BTRs^^kw(#?4VGh? z!%Smy=1DeD4xaa?*_E1Kvhw(02Nf;AWNM|kW-RjZ)*BR`HMe|v8}~Enq~+H~)Inyi zqpv``xoFmi*X(CGan`m$-9`6Zj=0WEucd!ZrLFC}J)DA|VWMo2X`-=&o`?lS-xum4 zvuw^1f&|m{IoH$?7X z{%n5Khl`)DI5-;K9r)9wpHOj+{1{1YJ3DD#U$DLSCOUUjbw2QeRhidZdt}}_D!2-3 zOh0MZ6pX1B!^$It04_ep#iptxCK4LL7#Nh9Vq-cc6!-ZaDQArZPq@Fd+!W1u%%kg9 zewh6-fSyT=hX)a+CRbncg>)S8x;+6L}HB@87zfCs~OI6yyq>k{ibeWm2;^??kX$eW=#U zNiPaEit^4iRMF@7+?Ow}=X})O$2-_rk?$s=s^kf=mJ;RBjG1{W>9ww>cc6!3^QG&SMfzOJD zw8^L};l}v-jlK{i3}vJ&+5dys{R@KEjB3l^jizM2}&gC}^nRN3%$3`V5gT zMD~?7x17U(q>t4Fx{2BRyd{xyz4ym}$Qs`3tanixK@L$Xa^v(saBu#hyyMTeIv$OC zwfpa)UeI(reTS6-R+H>DBI}P1>+1%dHXsB^KVCk3L(cS&1pW9kpJCDm{Dkqi??R`M z_IY3vvZQw#odkOkuCkpw0!mjCLv-Fhf3z$eEJ=ijoM8r9pVa--ECJP8r-)CEqBya$ z|7=XCndVBZ7nRE8$c>%?J-g$_Aw#@0DqRNEGump!c?v-lzLN?x6pAI-ibV#MqzsX} z6oWdj3edRkEaeL((&!v;$gHu`*S>Ye# zD@gO(V6@Ntj2Ko3RnlvQ9;MEE&FseRN60Q{yU$JNd+y>vlCho$Z?Hevd+893wQ4) z%N)|3(W3ODTYpk6neLCdW_+G$l}fyBZ-FYraj4xHT0_*HJR+noJ4fI&l|J%$n^)%U zt<7_9D_dtAgvlPeoUvR%=~Ebv(5#D7W-@%+dK2&pSg4|r!&k@-MO9Z-zwotP0;dN zop{x{=y&;|#$ld%Z<1@;_r!{YFfA!6w%Q-pb6W0~G~{1?s+U!Du{l32#4bN1ukq1> zA4;%lEcZ*xg+(Cd)?8ztQ{qYFG*eU$ybs6^d#t=q@+JaixbtQEak_v+78v$@Lq9PR z3tHlL6PjL6>6rYY&LbH`)&(;CvY()XV>h@Jk>O4I1STrEf^SnUsBe}&cPZHLSry{eItNwf zKX!I%2-AtJ3=5;sqRmoJ;2|1N*A%f%_*LyxUc=;DqxZB;z_ztRk8f7*XkOZ*IOFGD zLzp}tV!Ph$Sda2dcc-HrYkFgBfs=`zFJU!JV5dfm{9sqW!NBSo3I@vyK)m2pwJt`@ zgm`E>tx&xzw*~{sUOUY1M;b~^FKTh#Is0#sj;Q8HF&FGTxF9SPmOb={xlRkjP;PFh zF5X~Io2)gic)MzEiQ}8{ef!&!zyjSQ`Vv!J&XRYhpB#e_w9m2wEHA_sE6V-oYpmUt z<$cCHS1m(vgYJjRDW_|Q;X5>mH1nvNgz;??Li+gmOE0iWIldhHNJH^iIf!|LpOVGz z_{(*UfDUIKJi^9I&c@a~bFyeXTee=!rT>c9AB&}qrh|k4(>rHwxt0sJb3*3!gfHQl9JHL`Pk>BGN-H%ARV2xA#tu&EGQWvdbm z%ETI;>}`G{t{TogXUFbjyiznsVyf`}{JEsh*>DulywYOv8C%x{{dh;I~t=5Ho0l}l_u*p{7&ZDRT6ofp~5r@3VcQ98`^ z3WEO9Ad7I!xL8iYQ?cBn+{V}8F}hl#6}Y5VOvJy@w2B#7liMrwwjNfjY3ODixU^8kofgVr^nDpy9w%R`^Me8z|!{Mtq>6&<5m-X-xLci z)}(12ieO$Z7O|j!B{hB)Grk57Id4|#7HU$Kg223?h_D0m7#P7@rmggoXXW!xt zOX2Ak@r!hts)+9WO3;otF%=?o^+YQcf@M*u+SCLvpu2lM(frG>~ z2o>pr9T2X-Pp)*H5bQoS$ z)m(a8o|;(bCU!#V88tZm3xx`!_&Ix}Mz6(|%uZP+Cq=fmQEwf1ANJkTVvvA;A=vH7f3W6jbQl!&ZwsqflCBv$B)ubGS)+| zuD}!Ae&$7m#ynfA-~GzmbX1bIG#8cIW4zPA^aagD=b(S1{>v3_3|697-Pd>NLymJ% z)`LN!?_!ne2a1Y{9E9Hes@-Rer3hb;w{&Y9GJdC$>F^Gn5OkM8xeiq|Gg>N#Ls;j1 zV)TMAFE$BA2RflYz5>RqudWct!*PA5vCmYQoL{d^0k?yVgjFE$`G>6oY6DqYeTvgt zRJ4sM`mP727oGf~6JlE&-AQ;#K^U+gJ6dhREb5gIr-6rG12{3@Z*mB*@d~$a4Y0tk z-rC{YDCeV!rY70Y5Wg*|6AQG8*J}!0HS}%>sWy5v%sM;(VfWAKksKaxQehvadL-G? zb5mabK9m0=cTs^j_aJJdDCd85;tx^!TOh0dx{J!i1%m;?WNzhT>_GiHLYI@VsIj4~ zkue76KZ;Pp!GA`-U)S((RasB^)w~I*O*JwRHi-sBI==1zvS@;6V(g&$I8r9);(g6& zs5DUeSDAve9b(q-EG}^HvIT47M6g!I>@17kH{m7~bC*5iK;o*??CKZQd*eiydwzRG zNuSf9F(@{BKP!E9k9R#bE?N$nJrDLgTF>}+P*Hn3m|Z*P8g9XBAGQ1<^F6)&_RLxi z%W?DKHp-8?A8T4D=3)n%rv=ax8&GY|E?2NqY-Rb@?>KOwZZIL}qdV+q?|poT5{{i> zqv^wZl3$COaO=4=+CBUqJRTgesD$@Eys)#Qj#BTWx>rE?alUPE&PKcLnJf14<}FyA zc>yQ*s!byfrS@ytk-W9sJU5#aktM1py5Q&N8NSR7E?1NlIbUxOU+g?u`!Gs!-tn7S z9IS|^%zW6-z3-!6p?v$`>yPcpi%sdiTU`VdE3mUiqJq~z%DuaT z(qHW!eQz%mxZRF#pOF4gWn1^*1q$#sklEL_4*cY!h_BzBOOP-2%v)K~_Hd`!84sS9 zmb_`+J2}HX{T+noKO^`ae9=$sachV#&5Lo0b|f2ye7W#DypDWuSbNkH(CmAko1X}! z_S}&6%IA(S{>kV19~BquPINIj&B_%CrGd2&2i|X$_9>B~m}lt0fwdr7`Yb&xsM^;_ z=I5xMm`j7D_ZeK78#i9GB~)5cR+A2t-i;ONFBKaI5NJdQwVJ9M(oN~3XhnTQSasso zWMba862ezC>%>K5QDuPWqcvLm$Obw*2SgT@=F4O(72d(wM8@hUv_@z4%SY=Rc{fe4GN~{wvHR{2e%D9usJpL)T_|Mb?+5vwHUBo7>{t=|Za+AH#_A&@ zmY`6Kw+GlNl!SfAe{lKQ%NnjQl5~>YHKTL?F6)Q8UWrVU1Q9F5_9WVMeWaXa=?u&t z<)}+q={O!LXUP1z@Tq(T^@@3BZ4#Toe~QZf#8KJ`Q~AB#Q3u= z`tix`BSN`VF}@41!=o0Vm~$Q?LqZ9&vCP14yd^YLlx@s4h7Y_XxuQt!_37JfDudUf zzHvFh70B}Y0zB-=&Xk~XAyO@*ABXEn4voD@Tpn?*@Toa?d{6vp>$cqU?4H#ayUFP*?eR;?q+`+@ul58Z7#Qs^T3Lv9J5Os~uSP&U}hcf<1F zLH6sH^U9C7+#dKg0`bi0gj!MRo?cf(1RP6RFvBHj_uIU$lX*Xo41Xz~7%zPDf%r|G z`l!Failtw_D9SI!NAp)7^1X$BrT=^&L)vmiV>*`J5~*l1%di_DeIBSQ@|8rHZYKQ8 zIf1=vTyVmP0=j6(sEBl>Bb_<3uS~zBKUPwyXk>im8)BM*<3n8bZZ}P=aElSa<57`g zAwt0isyS_mtc8!vdsT3S%`%m~E0`0X<-GFTqR}H(HxH)~US4T z%9>7e!H^Mu$lJ^~(J$cU7JvPz-7%In(baJN_Va*Ke; zx*qT9PCfid^S36wsdRQd;?eXpWwIpdvJIaiq3%1_vLl^%DWP-$bf56{B(HnF;VEXE zQt;TX&Ewho5wh3j33bODGS&Obr@Ka{NK#E6r4RIl%se=w+~~e=*KlbhrC|{#C-U#n zWkD0lF(?_(ql|iR7bg(ssh#8pD%w4T^e282Z>T7|Vg-I|)l1ad@+&b3jO{06Fg_UM z(=PLX9Y3z{@!!?U-z?Xw+L=+)t>jzFIeG)Z?IH90nbBIC&>}^Ip&C+t?)GF=YRk=PD(;lxsgkLF@C#)`6A=;hmdW1^#>zB;@K`U7q$UMd ztrx3zWj|feNu$`aW-Y64I4L4x@26YYc-L*LX=X0+BTkx_Q?oA9#{1<9T~%X^!X+;C zv@dZX7^yfOx;Ej17T^@oSDWZ@7&)$qhx}a+r3&=nqe`lU0U>B9#Vj2b^h2=$?X>oc z=acco{<(~a`09xQZLysUYuw}b7+SyZq}b^SWu>D<3MHCtgjHt_O;nRIRVfrz^*xd& z6WbTzQ`4lDZMM|)gBAljB}FP&WlpwnppaeCN0>bTesjK_sayp1Oc4v%rr%sC#i59$ z?bF1HJ&V?}Za-E`&WD>X`X&bOOxt=`LbX|G-!M`9)TrLZ6K6fK`DC zV!QMUj&ak`)=U}!&ifE`$sZOztFz2s2+E5-f%*9m&g7129~`Qa;+C$R6;+L0eN~GF z_0_U0t@l!E#@$Eh!J|Op$8yXUgz8IA9eEg{@)AA6F-HE8?Cgx0fO#$LS$@eaf8EDSDaogpbX^G?Zu6zluH{`{~%{PbN<9!y!W? zif9C(XW&H=rRESm-OVbQtDf?<0oj3E)0v&gal4*?*DqD$bP=<7gUc9GZa5;CDxIVx z(>xOS+@+LhP~NVjMN0K%)wmL!Q844V+V|p>FquZWHt}gNgMFGesK|f4dGoNy@Iubm zp4z0BCG@OhYpDPi2*Gc&3C)GgglnF$+503tFf0>nxOf>n<%Q zXJ`x~f`L1)DjJ_tTg|gF@DbY%)n)D|J;|1*OXPp5TkJ~tAe*?{L}zA!(6~u}k9bdS zc&#o!zy4P%_5L#4c0C?9?|A;I_>d+44c4wtU1Cw5?}=9}{}@XdpIgJ8&O!OBP8b3>sl6csaqRF?I$aPya?h%3KvnddP7xB|Vc4fB3d{CRI zerj1^7xmYAwy_Z1prYFrG88I_QjMdcYo zR9rb^Ikaq+$IbdBW?0|Nd`c9v-Xj~2E7k~nk!pL_U$=dhHos@j#JBzY}KhA8_|pFGq8VI*-sC7=bl@KXSX&BmN5XP&b z`Z@${Qtd}IzS`x9@P(6=9UJ91C;5EnF?dKKbRzFXYJ*cMcTA_%wjf=q$^17E zrx-b|;;_*9@6&rZp_Ue=x#}Oc3)EkNj5i)UH4Jw-i3wI!Q4QzuR=z9u>y&QlZR5ud zERBA+J?-$JT1YSEG9E7__x?bBS4f(Wsh#%;R@wNIj;}8%NznMY?chGz^Cv&wK0g!6 z`sVS&L(A(j6vXmAfJ(?}O4w0adeB5Yy*YYwkE5k@N@eOHGzqtVF0n^-9nW?+=9s%U zG9e>l9IxMn@E)#N$lyu)4`GVx$-^!EI&Mw8J$gmSCW*(~338gxUOHX<*gYX= zZ7uRx$FSUfIsAl^;+LvhwUUyynwqM^g707zU5%}dY1a`eITt7U`Npd#&TAoaw;cOKz=Qn@9J$I5km1#z>doQ5r{?Ju|I@qm0P` z-)bpuhI@w9rq8d%HPtyTukzUUeG_dhJ8tg16?wi*YqUYJ6Vinlnk`4mrR@`z*XJ|& z0#_Q%vkl6ufvUpfO$CC&T1v1UlbE|LFoBGOi=t-{3+t94L=BHlk7^Q)T-xUGt^z*j z&d_{w3?O?&a5v%O{cl+6QM#s<5SlyrZ~AYc50$;+`KhFL|E?u5Y(#i6cW5Ow{Q8Bg z{s-qa;j+GUHeA={(@?tAhSswl4Hc^c%cYi}FH^a#UaR>%L+^=8Xg|vop6xxUZE~}4 zHMLmxa&b@4sXi#}n)b;si3)t5dmZBbB~;eM>wM#2=v%A%`R9qB6Ss%AqxSD^?W}^o zy!IB>`j|3^dnZJ-3X?-vJ#@r|Ver|&vwI~lgS@&pBi6L)vHPqP@U5Jw0sV!{j;Rv# zuQc0W4reqdN#oECZT@t9La=gcj)DGBkHAk~l6cQ=Pn+Ly&PJH2@=;^lshbrW6E&cv zAT$@vt&^;fG!^5e8B_Go7q>13_Mk`K$R^iS1*^SPM{S#F=VLC7S>Q>$vKWU(dBF4l zvH82%pS<0Crt~YxJ&vVMlvXuYF7M}gT91;8z=ieGu{jhDhN`x(yyW3k=i8^*?eo{C zi44;;vn%eIZ^eVRMDZwCvKMJF2o)Ix1BA1d^K|c~RsU47ya(68*%T24yB z9AE?8Usrc^#Jp&a4xe#(N_d8Ad)7-i#OTTwh_g6_#|j#TJDNZbY+C(hh*Z4pnyV`; zV~lyt2P=Rg3y%cfC6JLgA4-(65TUy_YMV{C>y)%QQL3vq3LXfVG~Y|ozPsO!uN$fS zwN|cK>(X@k^(aLOKhOD_GOwfEoh3KZQ=ey+(`P_}1oySBwEn`MKYPwRM_t0y$|ezY zwVUqft|w-Q{AG{R5F@HjzNX8H zF{H~V!zT9i!BFNRDBseh;n$PNhUNB5)-9zCJ;7lsxt zJy}k!*CJ*$k111bw@Y4z+Le5`V^d}Rim&qXt=cXfmBfUM;o6>~h3I~)t2WwMb zw?v92Pqjr&L$(ZbrUQhPIb>^XAiP3p<2!83-!FG2_>^8!ng1F+sZ}Uvc&Up|^0eVt zi=aKa@1C+PMMIk9PdfuEyQL#}>{f@+CwIR17~_@_#D5gm(bW7^Ib&4)S>{m&-2&@q zf#^PDMoI4P|1Gbw75#n-X5 zYOZ3?^Cl1(;D1Hz$5BS#k3p>rU~NG;%N*@#LRlZENPiP+lQ@HYqO^Vyldz}i^(#6 z5u8PG0Xsu8^?o-LcKn#>XvmI)Bk!T^{t2PoD1MDI{k4P@t>&i&kzOw z)42ek)LIZOE)MSBQ9X13Qc?o}Kj3hH%y0;hHh~L9t%U%CfPeG+l>*|QMFARssQ>)y z@8v+$P;MR$FaiWd{0$ovATbEU1?1!WSJ{8Ir2~Xf5LKtd`yLXD?_3bB6G=a8_qBr+!9{L=UHJ4LZ?N=;9bOq9`x+#I|tiiWnHKF|p-OY%nw<3%i zp8?rfWf~jb|AO!{y@?cOngAT*@KVJs@;RFRK-_HKCbs^H7iK4|=SfABC6^YS1B)b) zm{Gw7Q!BVHWh5oW(w!KMb6LNNM(1J{()SgxF(?Z35BAwoSW4nmFH$7S_Q+9NtWhEtj z!}N*hF=_CkVDYl(wApX{K8eNBr$nOY)7@v0rBex}Cb>;SE6Osl8dfCxcrs4#Sur78 zDHvBwF-j?qxtf^9AV6w?GgkBRySmSJH{RocB$uHdskY9<7{0eL1!WrTuQOAV?wz&V zEvQ7XVJ~4R6{p<4Jt2p3k>@h)9wA^5aeM8`H%dqMX|qKz_!#s;2IbrC_tj*J8U1^9 zw*=?EYaD-iv-98x^_D_SaK-8}!=&Lelpe<1n zsFE2(EbQXwOsJ`-%S9|LwVLVBH@Ay8Q4V%jiz+4@MOtnRFbhtqy|J)p#L>sd45mHW z<}sdhYjl}Ky{hzmitYP~nN&wdO}NE&FmQukW%(L(hPu>_M*Fma+zX5X)%QmwnWDjn zoQoyDHGYJaxkJq;fzj0^f_lobz`DA(!=OWH{)3C6u?xJ9?sIb4xB4XQB7ciUg}$T5r~M>0!EKGUS8~NyXlp;-^Chb zWymlzbk!?Y$SJIF=3%2(+qqaiQ(_Wj{rlG4bsOhyi+1YMbwMV{G8XaQO)j&OW%V|q ze$n%-4wFG`vbo;7hqCb=IImUF`b;Gr5~N`3t*O8s({*IPD|(~FvJoL=8lE}%a1UwL zCTSgM=y80*r=x3-LKgWT#^*cj;rw&@Eb_T-pN{>4qXSLoAL{fxGo1|CnKwnQTH+VY@$hSHAa3}m= zyiwgKkhy5>8z zHyDkdvqHf!NkI=qAn)@aNtS$C_6-h(>yN#xg!B2e%gZZr97F=AihkW$$U;*sC>ST; z%~d5S#%`#Sven3!o-mB6mJ731A|KkD(i&Q7>x&{c62EQMwYORBM{==gzc%gI`aMemK?rK=lf@2>ifNA?Ry?AbZo+8>R2Hp2l?K_207Z950K}uqcL*O&H*OQV3-+ zY6}@n3{%1iAi0|usPS!e1GB~Az4Akg_iP8^5B*5rCWch7hy}(?J4ug+81%Q2#Hoo* zCWhb-2s1oe5yPcX$(o7oq7Fq^TB{Y~iu3q_h{=yjQYM~uxIVN7u{D3NP<~KkZPpRP z9fDx%lp^X_uwW+6Ci*A}y=`sw(Y?RoRSzg(uAHiD1$W~pk*wR=O!+D*3x_WB-miy& zC9b%fl|(PC)g z1xan!{KCy>$XcVHkc5gY;es_8jx)f8AXg_}fBss>OpqXXLbxiYJ0SQ~H=a2c+6#gj zgQvdu?-QIg$iKd+l5X@2mql^^+>VHNs=QZwd73+0ibif&uGf``LjdGhTcxS)9e^FI z*uzMdVFMp^&1>C8UJQ%+muL?{^EE0tlrroicx0`+?NfSm+o1(e$Op`wlHgY*-GdOd z?&K?l@RR4Zqpxi&9Q7YODaS3wDk+7Rt=PdbhngrY54nB&ac|+S;tmL+zpTjiFn}UD zI9X@RCSJOTtdpr5HY=9KXSHp8qzrf-ki{&)d4Ux&p_X#*!*q`LEZy*>boZ^eD&rHC z$CBz&W_MKaiJu?Dp{Ztz5k#V})CTGhzs$a`f`i#(d*KvIc&@^?EktxSNJXW}<{(I9 zco9-lmA#A-x6qD|mSD5e^wfORv0CtvUbe)oG~E>5I<-5nqR!5zJk0qdzCR&ZZy)wV zPChz(efK$#%;IHXYI^55>hVP0_39e+MRp9+y+hmN49lPJHyLi{3F7JJPO+&Ye0ck_ zBwG*xiZ1!^d+Racln;)ElY98(Vhoe1@(<|-1qRm?2L)=r^}Z=|$c>?TcVtH=Fyg6q z+$l)jNg-!j+hg2UMNB>A2?aQBkFMQ6D7Xr_f$ZT8qz(D7FaxI*uEkaU0i+J9p) z&*pQ=&=Qkl#0GhomDWZKVsIL+SG-xA+z9u{uP=VAt2^qcaa^0+IyzrZtLE%}zQbL! zZx*FCNHLfHDV%u!`3oD{!@kqPc}kF$=lr`1CAtpmyGPj@n80sgCZ9<{PA$04!?k#7 zpOqJmw|q)3ns8FTI3^EU{A7ET0?%-pr5RrPW_~ZjeT-fHBpvy5m1NFF z@}#n{Eao&DNWJWP-*%xk1&C_uI%=aRj$dQ4J&qs2b}S`=N~MX%`oOJ@7MP$5Be%%@ z_y*&o2w6H%T1Z4AxiML#F%c^#eaPnpi)wbV-Kae}6yG5q2>4ehO=lk~2$usC1jDvZu0$ z%G7*lU$K$Vq27~6wE*6Vm9<_ZtJB!HL)=!UP z42^@|#2E5OIcC49HD4@plh!PnkM6ji`~_}1)l``N1!nu*?)?V#Cr&Oi-KBQ$57&h) z!g?EKi3rKa(Z@~BM#0*}JQkvUp%_QWQI8#DF(ux8FcbA7#9n_ZTpKF6{PqJLx@bz^ zUAf0jl^`o>Tx;SxkCc{;gr4tViKe_-vB$Rq;i_TY8r}F-XZDb?XGNa~{m$Tlg>K2U z!%L=PcA80{>!xZAE^BhEWQyO75StE_kbv3jV!jkA2;V_wwu(?N5}QPmuv{z@a^}42p%788P(7C z{1i|BKE0domb8&4cNvY@#TD(9HZalD`88G=25s{0E6AT7<~N*~(_wCgdzin=&wJKj zLZ%%Z|0zAWF!^!v(`d}R9=MF$k+cI%3?GNo(fAhwTJ7j9eZNKpeAvP#&VAvAR5|B7VJ7rT1Iq&=~|bg+Dw3=J{SUbDf58^R5}x@2g)9-`kf^+tL$oZ~D0q z(7(;G_3u}$|4mT1|8In1F4~{QU!b@^riy^`td*>p! z^ZY63&$A8)GCH-qCJ8aV4L?e2yCp)MVIMB-4CJhPHB*mDrR}D$XHyY$sHQi_OOgu1 zj*`0nvDFUCv5)nUuGj8i@43Wj;_WcIy6TPIIt``Ew)=&?FP^>Xd3AU?_|D}C%{PlD z<`F8w8uGPM*N5_s z4O58Ib#72O5UIBQTkd+Tod=CqPbie<50E8PCeO{oBb|C^hY|D59g zmjfpLgBkx^`2Azv{@@HKz=w@9oK!zLTAiuBFBGrXKZuA96 zgn6S~Fc;{?H~?w^+7t;NKvZNH1bmYQ5XiqN2c+q|Q5Vj2qg@CW@?3&|c(g!RTBN=J zO(5~cUuI)1=dwK)LgDf*35FCWK!MkwCO&S350qBZ9#|!MV+~^CCOZ7%y z;9OicXbR`~t$Y5&hXCE=UBq8@38@?u*qKDG3k>)M45)kq#)Y_9_xJuU5$- z5a>-9zzBcV1q6@_hExs$g+ma?G6(^NhEx{>0b~ZbFF+{g8-0O5U^iqR0&IOD(;nce z8@dTV2f5iU4+5G0AiyImWST;NFviIAgFt~@xj$(D0tO61stbk#*NBnZ1)6{%@c~c{ z3P++91P0|sZUX`b-)t8O10(YWfDeJJ>mYD07_xo=CWs4JA3zX*dPW)>poIVv^5=LV zz@GLE`2aEwBhwz}3l9{jE(it;4vAj?O$-bVsSR#G4Dhmw*uf0g=ax066eQ z{{T`U&j$cO_FsTf+{iWx49F@JNyh>(D6*UbLVi<+af1M*gG767pv%Z~2J)37`yju) zrkiyE8;XpNhZ~?4QX9bWCbFFdjxD*7{Y1c`+|+9zfGkKn2?1CL+0H-!VZB+7>xP|% z0H=D$dJTXdANXT{?!VLw~1ae&{*YBOBKkxxFi7cxS9uN#!rU4k@-`MlN-g*8V9~AHs zk=Jj4?FJmcKidUhFyuK01`9$S8x(ZYP6IGFvRwdRfKf(ngBylCUci>!&}#q;g1p87 zV1LN8lY_pwm9YZ`A0MZ(xx4XS>wQioTU)2!w=#Yo1p~J^Y)ovafnol2EbQo{@8I;; T-T;7!hl>k?fk8}O9OHihUceo+ literal 0 HcmV?d00001 From 3c26c8e2ff213da95ff602d9578e5d6806aaa6f9 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Sun, 8 Feb 2026 16:39:53 +0000 Subject: [PATCH 61/66] Auto-sync: 2026-02-08 16:39 --- 05_week/tasks/string_view/test.cpp | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/05_week/tasks/string_view/test.cpp b/05_week/tasks/string_view/test.cpp index b43d7bca..e0502f31 100644 --- a/05_week/tasks/string_view/test.cpp +++ b/05_week/tasks/string_view/test.cpp @@ -236,24 +236,6 @@ TEST(StringViewTest, ToString) { EXPECT_EQ(sv4.ToString(), ""); } -TEST(StringViewTest, Compare) { - StringView sv1("Hello"); - StringView sv2("Hello"); - StringView sv3("Hell"); - StringView sv4("Hello!"); - StringView sv5("Hella"); - - EXPECT_EQ(sv1.Compare(sv2), 0); - EXPECT_TRUE(sv1 == sv2); - - EXPECT_GT(sv1.Compare(sv3), 0); - EXPECT_FALSE(sv1 == sv3); - - EXPECT_LT(sv1.Compare(sv4), 0); - - EXPECT_GT(sv1.Compare(sv5), 0); -} - TEST(StringViewTest, ObservesOriginalString) { std::string str = "Hello"; StringView sv(str); From 47c8e271b8a34135c170f0daf8bbe82bc1ab2c22 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Sun, 8 Feb 2026 16:47:10 +0000 Subject: [PATCH 62/66] Auto-sync: 2026-02-08 16:47 --- 05_week/tasks/string_view/test.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/05_week/tasks/string_view/test.cpp b/05_week/tasks/string_view/test.cpp index e0502f31..68e57427 100644 --- a/05_week/tasks/string_view/test.cpp +++ b/05_week/tasks/string_view/test.cpp @@ -313,11 +313,12 @@ TEST(StringViewTest, ComplexScenario) { StringView level = sv.Substr(1, bracket_end - 1); EXPECT_EQ(level.ToString(), "INFO"); - size_t time_end = sv.Find(' ', bracket_end + 2); - StringView datetime = sv.Substr(bracket_end + 2, time_end - bracket_end - 2); - EXPECT_EQ(datetime.ToString(), "2024-01-15 10:30:00"); + size_t pos = bracket_end + 2; + size_t data_end = sv.Find(' ', pos); + StringView datetime = sv.Substr(pos, data_end - pos); + EXPECT_EQ(datetime.ToString(), "2024-01-15"); - size_t user_start = sv.Find('\'', time_end); + size_t user_start = sv.Find('\'', data_end); size_t user_end = sv.Find('\'', user_start + 1); StringView username = sv.Substr(user_start + 1, user_end - user_start - 1); EXPECT_EQ(username.ToString(), "admin"); From 8e83f64dfee8ddcb1dca9af8377da7020bfe4c5a Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Thu, 12 Feb 2026 18:41:52 +0000 Subject: [PATCH 63/66] Auto-sync: 2026-02-12 18:41 --- 05_week/tasks/string_view/test.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/05_week/tasks/string_view/test.cpp b/05_week/tasks/string_view/test.cpp index 68e57427..2068e7e3 100644 --- a/05_week/tasks/string_view/test.cpp +++ b/05_week/tasks/string_view/test.cpp @@ -250,10 +250,12 @@ TEST(StringViewTest, ObservesOriginalString) { } TEST(StringViewTest, WorksWithStringLiterals) { - StringView sv1 = "Hello"; + const char* s1 = "Hello"; + StringView sv1 = s1; EXPECT_EQ(sv1.ToString(), "Hello"); - StringView sv2("World"); + const char* s2 = "World"; + StringView sv2(s2); EXPECT_EQ(sv2.ToString(), "World"); std::string result = sv1.ToString() + ", " + sv2.ToString(); @@ -293,10 +295,12 @@ TEST(StringViewTest, MemorySafety) { EXPECT_TRUE(sv1.Empty()); EXPECT_EQ(sv1.ToString(), ""); - StringView sv2(std::string("Temporary")); + std::string temp("Temporary"); + StringView sv2(temp); EXPECT_EQ(sv2.ToString(), "Temporary"); - StringView sv3("Hello, World!"); + std::string hw("Hello, World!"); + StringView sv3(hw); StringView sv4 = sv3.Substr(7); StringView sv5 = sv4.Substr(0, 5); EXPECT_EQ(sv5.ToString(), "World"); From da1632a68303c37d02d0059d4551df03f69b3564 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Thu, 12 Feb 2026 18:44:26 +0000 Subject: [PATCH 64/66] Auto-sync: 2026-02-12 18:44 --- 05_week/tasks/string_view/test.cpp | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/05_week/tasks/string_view/test.cpp b/05_week/tasks/string_view/test.cpp index 2068e7e3..2388fbf0 100644 --- a/05_week/tasks/string_view/test.cpp +++ b/05_week/tasks/string_view/test.cpp @@ -250,12 +250,10 @@ TEST(StringViewTest, ObservesOriginalString) { } TEST(StringViewTest, WorksWithStringLiterals) { - const char* s1 = "Hello"; - StringView sv1 = s1; + StringView sv1 = "Hello"; EXPECT_EQ(sv1.ToString(), "Hello"); - const char* s2 = "World"; - StringView sv2(s2); + StringView sv2("World"); EXPECT_EQ(sv2.ToString(), "World"); std::string result = sv1.ToString() + ", " + sv2.ToString(); @@ -299,8 +297,7 @@ TEST(StringViewTest, MemorySafety) { StringView sv2(temp); EXPECT_EQ(sv2.ToString(), "Temporary"); - std::string hw("Hello, World!"); - StringView sv3(hw); + StringView sv3("Hello, World!"); StringView sv4 = sv3.Substr(7); StringView sv5 = sv4.Substr(0, 5); EXPECT_EQ(sv5.ToString(), "World"); From 2e5108448c564679fb302967489f46db4bc415a1 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Tue, 16 Dec 2025 20:23:03 +0500 Subject: [PATCH 65/66] chore: remove incomplete 04_week directory --- 04_week/CMakeLists.txt | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 04_week/CMakeLists.txt diff --git a/04_week/CMakeLists.txt b/04_week/CMakeLists.txt deleted file mode 100644 index b15ca37c..00000000 --- a/04_week/CMakeLists.txt +++ /dev/null @@ -1,15 +0,0 @@ -cmake_minimum_required(VERSION 3.14) # Минимальная требуемая версия CMake -project(04_week) # Необходим для инициализации cmake - -set(CMAKE_CXX_STANDARD 20) # Версия стандарта C++ -set(CMAKE_CXX_STANDARD_REQUIRED ON) # Гарантирует использование указанной версии стандарта - -set(EXAMPLES_DIR examples) # Определим переменную с именем директории -set(TASKS_DIR tasks) - -add_subdirectory(tasks) - -# Создать исполняемый файл для каждого примера -if (BUILD_EXAMPLES_04_WEEK) -# add_example(class_examples ${EXAMPLES_DIR}/class_examples.cpp) -endif() \ No newline at end of file From 7b413c08e5f59f3de1ada8b970761cdd89147d03 Mon Sep 17 00:00:00 2001 From: Lenar Gatin Date: Fri, 13 Feb 2026 19:26:05 +0500 Subject: [PATCH 66/66] Revert "chore: remove incomplete 04_week directory" This reverts commit 2e5108448c564679fb302967489f46db4bc415a1. --- 04_week/CMakeLists.txt | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 04_week/CMakeLists.txt diff --git a/04_week/CMakeLists.txt b/04_week/CMakeLists.txt new file mode 100644 index 00000000..b15ca37c --- /dev/null +++ b/04_week/CMakeLists.txt @@ -0,0 +1,15 @@ +cmake_minimum_required(VERSION 3.14) # Минимальная требуемая версия CMake +project(04_week) # Необходим для инициализации cmake + +set(CMAKE_CXX_STANDARD 20) # Версия стандарта C++ +set(CMAKE_CXX_STANDARD_REQUIRED ON) # Гарантирует использование указанной версии стандарта + +set(EXAMPLES_DIR examples) # Определим переменную с именем директории +set(TASKS_DIR tasks) + +add_subdirectory(tasks) + +# Создать исполняемый файл для каждого примера +if (BUILD_EXAMPLES_04_WEEK) +# add_example(class_examples ${EXAMPLES_DIR}/class_examples.cpp) +endif() \ No newline at end of file