From dfb9cb66ef1bd5b8970dccf6ed88a72821327929 Mon Sep 17 00:00:00 2001 From: meiyi Date: Fri, 30 May 2025 16:07:11 +0800 Subject: [PATCH 1/3] stale rowset delete bitmap --- be/src/cloud/cloud_tablet.cpp | 60 +++- be/src/cloud/cloud_tablet.h | 8 +- be/src/cloud/cloud_tablet_mgr.cpp | 8 +- be/src/olap/base_tablet.cpp | 2 + be/src/olap/storage_engine.cpp | 40 ++- be/src/olap/tablet_meta.cpp | 26 +- be/src/olap/tablet_meta.h | 1 + ...est_mow_delete_unused_rowset_dm_docker.out | 22 ++ .../test_schema_change_add_key_column.csv.gz | Bin 0 -> 72233 bytes .../test_schema_change_add_key_column1.csv.gz | Bin 0 -> 177558 bytes .../test_mow_agg_delete_bitmap.groovy | 1 + .../test_mow_compact_multi_segments.groovy | 253 ++++++++++++++++ ...on_agg_and_remove_pre_delete_bitmap.groovy | 2 +- ...st_mow_compaction_and_schema_change.groovy | 14 +- ..._mow_delete_unused_rowset_dm_docker.groovy | 232 +++++++++++++++ ...t_mow_pre_rowset_delete_bitmap_race.groovy | 274 ++++++++++++++++++ ...test_mow_stale_rowset_delete_bitmap.groovy | 249 ++++++++++++++++ 17 files changed, 1136 insertions(+), 56 deletions(-) create mode 100644 regression-test/data/compaction/test_mow_delete_unused_rowset_dm_docker.out create mode 100644 regression-test/data/compaction/test_schema_change_add_key_column.csv.gz create mode 100644 regression-test/data/compaction/test_schema_change_add_key_column1.csv.gz create mode 100644 regression-test/suites/compaction/test_mow_compact_multi_segments.groovy create mode 100644 regression-test/suites/compaction/test_mow_delete_unused_rowset_dm_docker.groovy create mode 100644 regression-test/suites/compaction/test_mow_pre_rowset_delete_bitmap_race.groovy create mode 100644 regression-test/suites/compaction/test_mow_stale_rowset_delete_bitmap.groovy diff --git a/be/src/cloud/cloud_tablet.cpp b/be/src/cloud/cloud_tablet.cpp index c83be20baf8d8f..fdb3fa0a5d70c1 100644 --- a/be/src/cloud/cloud_tablet.cpp +++ b/be/src/cloud/cloud_tablet.cpp @@ -342,6 +342,17 @@ void CloudTablet::add_rowsets(std::vector to_add, bool version_ // replace existed rowset with `to_add` rowset. This may occur when: // 1. schema change converts rowsets which have been double written to new tablet // 2. cumu compaction picks single overlapping input rowset to perform compaction + if (keys_type() == UNIQUE_KEYS && enable_unique_key_merge_on_write()) { + // add existed rowset to unused_rowsets to remove delete bitmap + if (auto find_it = _rs_version_map.find(rs->version()); + find_it != _stale_rs_version_map.end()) { + DCHECK(find_it->second->rowset_id() != rs->rowset_id()) + << "tablet_id=" << tablet_id() + << ", rowset_id=" << rs->rowset_id().to_string() + << ", existed rowset=" << find_it->second->rowset_id().to_string(); + _unused_rowsets.emplace(find_it->second->rowset_id(), find_it->second); + } + } _tablet_meta->delete_rs_meta_by_version(rs->version(), nullptr); _rs_version_map[rs->version()] = rs; _tablet_meta->add_rowsets_unchecked({rs}); @@ -459,6 +470,14 @@ uint64_t CloudTablet::delete_expired_stale_rowsets() { if (keys_type() == UNIQUE_KEYS && enable_unique_key_merge_on_write() && !deleted_stale_rowsets.empty()) { + // record expired rowsets in unused rowsets + { + std::lock_guard lock(_gc_mutex); + for (const auto& rowset : expired_rowsets) { + _unused_rowsets.emplace(rowset->rowset_id(), rowset); + } + } + // agg delete bitmap for pre rowsets; record unused delete bitmap key ranges OlapStopWatch watch; for (const auto& [version, unused_rowsets] : deleted_stale_rowsets) { @@ -467,9 +486,13 @@ uint64_t CloudTablet::delete_expired_stale_rowsets() { agg_delete_bitmap_for_stale_rowsets(version, remove_delete_bitmap_key_ranges); // add remove delete bitmap if (!remove_delete_bitmap_key_ranges.empty()) { + std::vector rowset_ids; + for (const auto& rs : unused_rowsets) { + rowset_ids.push_back(rs->rowset_id()); + } std::lock_guard lock(_gc_mutex); _unused_delete_bitmap.push_back( - std::make_pair(unused_rowsets, remove_delete_bitmap_key_ranges)); + std::make_pair(rowset_ids, remove_delete_bitmap_key_ranges)); } } LOG(INFO) << "agg pre rowsets delete bitmap. tablet_id=" << tablet_id() @@ -479,23 +502,34 @@ uint64_t CloudTablet::delete_expired_stale_rowsets() { return expired_rowsets.size(); } -bool CloudTablet::need_remove_pre_rowset_delete_bitmap() { +bool CloudTablet::need_remove_delete_bitmap() { std::lock_guard lock(_gc_mutex); - return !_unused_delete_bitmap.empty(); + return !_unused_rowsets.empty() || !_unused_delete_bitmap.empty(); } -void CloudTablet::remove_pre_rowset_delete_bitmap() { +void CloudTablet::remove_delete_bitmap() { std::lock_guard lock(_gc_mutex); + // 1. remove delete bitmap of unused rowsets + for (auto it = _unused_rowsets.begin(); it != _unused_rowsets.end();) { + auto&& rs = it->second; + if (rs.use_count() > 1) { + LOG(WARNING) << "Rowset " << rs->rowset_id() << " has " << rs.use_count() + << " references. Can not remove delete bitmap."; + ++it; + continue; + } + tablet_meta()->remove_rowset_delete_bitmap(rs->rowset_id()); + it = _unused_rowsets.erase(it); + } + + // 2. remove delete bitmap of pre rowsets for (auto it = _unused_delete_bitmap.begin(); it != _unused_delete_bitmap.end();) { - auto& rowsets = std::get<0>(*it); + auto& rowset_ids = std::get<0>(*it); bool find_unused_rowset = false; - for (const auto& rowset : rowsets) { - if (rowset.use_count() > 1) { + for (const auto& rowset_id : rowset_ids) { + if (_unused_rowsets.find(rowset_id) != _unused_rowsets.end()) { LOG(INFO) << "can not remove pre rowset delete bitmap because rowset is in use" - << ", tablet_id=" << tablet_id() - << ", rowset_id=" << rowset->rowset_id().to_string() - << ", version=" << rowset->version().to_string() - << ", use_count=" << rowset.use_count(); + << ", tablet_id=" << tablet_id() << ", rowset_id=" << rowset_id; find_unused_rowset = true; break; } @@ -508,8 +542,10 @@ void CloudTablet::remove_pre_rowset_delete_bitmap() { tablet_meta()->delete_bitmap().remove(key_ranges); it = _unused_delete_bitmap.erase(it); } - if (!_unused_delete_bitmap.empty()) { + + if (!_unused_rowsets.empty() || !_unused_delete_bitmap.empty()) { LOG(INFO) << "tablet_id=" << tablet_id() + << ", unused_rowset size=" << _unused_rowsets.size() << ", unused_delete_bitmap size=" << _unused_delete_bitmap.size(); } } diff --git a/be/src/cloud/cloud_tablet.h b/be/src/cloud/cloud_tablet.h index 22be1d1fabc42b..a18d2be05d48d8 100644 --- a/be/src/cloud/cloud_tablet.h +++ b/be/src/cloud/cloud_tablet.h @@ -275,8 +275,8 @@ class CloudTablet final : public BaseTablet { DeleteBitmapPtr& new_delete_bitmap, std::map& pre_rowset_to_versions); - bool need_remove_pre_rowset_delete_bitmap(); - void remove_pre_rowset_delete_bitmap(); + bool need_remove_delete_bitmap(); + void remove_delete_bitmap(); private: // FIXME(plat1ko): No need to record base size if rowsets are ordered by version @@ -340,8 +340,8 @@ class CloudTablet final : public BaseTablet { // unused_rowsets, [start_version, end_version] std::mutex _gc_mutex; - std::vector, DeleteBitmapKeyRanges>> - _unused_delete_bitmap; + std::unordered_map _unused_rowsets; + std::vector, DeleteBitmapKeyRanges>> _unused_delete_bitmap; }; using CloudTabletSPtr = std::shared_ptr; diff --git a/be/src/cloud/cloud_tablet_mgr.cpp b/be/src/cloud/cloud_tablet_mgr.cpp index 6c3a671f18423f..08b3e7c3a2b27c 100644 --- a/be/src/cloud/cloud_tablet_mgr.cpp +++ b/be/src/cloud/cloud_tablet_mgr.cpp @@ -266,18 +266,18 @@ void CloudTabletMgr::vacuum_stale_rowsets(const CountDownLatch& stop_latch) { .tag("num_tablets", tablets_to_vacuum.size()); { - LOG_INFO("begin to remove pre rowsets delete bitmap"); + LOG_INFO("begin to remove delete bitmap"); std::vector> tablets_to_remove_delete_bitmap; tablets_to_remove_delete_bitmap.reserve(_tablet_map->size()); _tablet_map->traverse([&tablets_to_remove_delete_bitmap](auto&& t) { - if (t->need_remove_pre_rowset_delete_bitmap()) { + if (t->need_remove_delete_bitmap()) { tablets_to_remove_delete_bitmap.push_back(t); } }); for (auto& t : tablets_to_remove_delete_bitmap) { - t->remove_pre_rowset_delete_bitmap(); + t->remove_delete_bitmap(); } - LOG_INFO("finish remove pre rowsets delete bitmap") + LOG_INFO("finish remove delete bitmap") .tag("num_tablets", tablets_to_remove_delete_bitmap.size()); if (config::enable_check_agg_and_remove_pre_rowsets_delete_bitmap) { int64_t max_useless_rowset_count = 0; diff --git a/be/src/olap/base_tablet.cpp b/be/src/olap/base_tablet.cpp index c7eafd7fd46d4d..792edace512e9a 100644 --- a/be/src/olap/base_tablet.cpp +++ b/be/src/olap/base_tablet.cpp @@ -1832,6 +1832,8 @@ void BaseTablet::agg_delete_bitmap_for_stale_rowsets( remove_delete_bitmap_key_ranges.emplace_back(start_key, end_key); } } + DBUG_EXECUTE_IF("BaseTablet.agg_delete_bitmap_for_stale_rowsets.merge_delete_bitmap.block", + DBUG_BLOCK); tablet_meta()->delete_bitmap().merge(*new_delete_bitmap); } diff --git a/be/src/olap/storage_engine.cpp b/be/src/olap/storage_engine.cpp index 55cf21c4e17df0..2d8ce24244623a 100644 --- a/be/src/olap/storage_engine.cpp +++ b/be/src/olap/storage_engine.cpp @@ -950,15 +950,27 @@ void StorageEngine::_clean_unused_rowset_metas() { for (auto data_dir : data_dirs) { static_cast( RowsetMetaManager::traverse_rowset_metas(data_dir->get_meta(), clean_rowset_func)); + // delete delete bitmap + std::set tablets_to_save_meta; for (auto& rowset_meta : invalid_rowset_metas) { - static_cast(RowsetMetaManager::remove( - data_dir->get_meta(), rowset_meta->tablet_uid(), rowset_meta->rowset_id())); TabletSharedPtr tablet = _tablet_manager->get_tablet(rowset_meta->tablet_id()); if (tablet && tablet->tablet_meta()->enable_unique_key_merge_on_write()) { - tablet->tablet_meta()->delete_bitmap().remove_rowset_cache_version( - rowset_meta->rowset_id()); + tablet->tablet_meta()->remove_rowset_delete_bitmap(rowset_meta->rowset_id()); + tablets_to_save_meta.emplace(tablet->tablet_id()); + } + } + for (const auto& tablet_id : tablets_to_save_meta) { + auto tablet = _tablet_manager->get_tablet(tablet_id); + if (tablet) { + std::shared_lock rlock(tablet->get_header_lock()); + tablet->save_meta(); } } + // delete rowset meta + for (auto& rowset_meta : invalid_rowset_metas) { + static_cast(RowsetMetaManager::remove( + data_dir->get_meta(), rowset_meta->tablet_uid(), rowset_meta->rowset_id())); + } LOG(INFO) << "remove " << invalid_rowset_metas.size() << " invalid rowset meta from dir: " << data_dir->path(); invalid_rowset_metas.clear(); @@ -1192,6 +1204,7 @@ void StorageEngine::_parse_default_rowset_type() { } void StorageEngine::start_delete_unused_rowset() { + DBUG_EXECUTE_IF("StorageEngine::start_delete_unused_rowset.block", DBUG_BLOCK); LOG(INFO) << "start to delete unused rowset, size: " << _unused_rowsets.size() << ", unused delete bitmap size: " << _unused_delete_bitmap.size(); std::vector unused_rowsets_copy; @@ -1250,13 +1263,6 @@ void StorageEngine::start_delete_unused_rowset() { it = _unused_delete_bitmap.erase(it); } } - for (const auto& tablet_id : tablets_to_save_meta) { - auto tablet = _tablet_manager->get_tablet(tablet_id); - if (tablet) { - std::shared_lock rlock(tablet->get_header_lock()); - tablet->save_meta(); - } - } LOG(INFO) << "collected " << unused_rowsets_copy.size() << " unused rowsets to remove, skipped " << due_to_use_count << " rowsets due to use count > 1, skipped " << due_to_not_delete_file << " rowsets due to don't need to delete file, skipped " @@ -1268,14 +1274,20 @@ void StorageEngine::start_delete_unused_rowset() { // delete delete_bitmap of unused rowsets if (auto tablet = _tablet_manager->get_tablet(rs->rowset_meta()->tablet_id()); tablet && tablet->enable_unique_key_merge_on_write()) { - tablet->tablet_meta()->delete_bitmap().remove({rs->rowset_id(), 0, 0}, - {rs->rowset_id(), UINT32_MAX, 0}); - tablet->tablet_meta()->delete_bitmap().remove_rowset_cache_version(rs->rowset_id()); + tablet->tablet_meta()->remove_rowset_delete_bitmap(rs->rowset_id()); + tablets_to_save_meta.emplace(tablet->tablet_id()); } Status status = rs->remove(); unused_rowsets_counter << -1; VLOG_NOTICE << "remove rowset:" << rs->rowset_id() << " finished. status:" << status; } + for (const auto& tablet_id : tablets_to_save_meta) { + auto tablet = _tablet_manager->get_tablet(tablet_id); + if (tablet) { + std::shared_lock rlock(tablet->get_header_lock()); + tablet->save_meta(); + } + } LOG(INFO) << "removed all collected unused rowsets"; } diff --git a/be/src/olap/tablet_meta.cpp b/be/src/olap/tablet_meta.cpp index 354cfa85ed3f6c..cb5a3696ca2994 100644 --- a/be/src/olap/tablet_meta.cpp +++ b/be/src/olap/tablet_meta.cpp @@ -455,6 +455,18 @@ void TabletMeta::init_column_from_tcolumn(uint32_t unique_id, const TColumn& tco } } +void TabletMeta::remove_rowset_delete_bitmap(const RowsetId& rowset_id) { + if (_enable_unique_key_merge_on_write) { + delete_bitmap().remove({rowset_id, 0, 0}, {rowset_id, UINT32_MAX, 0}); + if (config::enable_mow_verbose_log) { + LOG_INFO("delete rowset delete bitmap. tablet={}, rowset={}", tablet_id(), + rowset_id.to_string()); + } + size_t rowset_cache_version_size = delete_bitmap().remove_rowset_cache_version(rowset_id); + _check_mow_rowset_cache_version_size(rowset_cache_version_size); + } +} + Status TabletMeta::create_from_file(const string& file_path) { TabletMetaPB tablet_meta_pb; RETURN_IF_ERROR(load_from_file(file_path, &tablet_meta_pb)); @@ -945,28 +957,14 @@ void TabletMeta::revise_delete_bitmap_unlocked(const DeleteBitmap& delete_bitmap } void TabletMeta::delete_stale_rs_meta_by_version(const Version& version) { - size_t rowset_cache_version_size = 0; auto it = _stale_rs_metas.begin(); while (it != _stale_rs_metas.end()) { if ((*it)->version() == version) { - if (_enable_unique_key_merge_on_write) { - // remove rowset delete bitmap - delete_bitmap().remove({(*it)->rowset_id(), 0, 0}, - {(*it)->rowset_id(), UINT32_MAX, 0}); - rowset_cache_version_size = - delete_bitmap().remove_rowset_cache_version((*it)->rowset_id()); - if (config::enable_mow_verbose_log) { - LOG_INFO( - "delete stale rowset's delete bitmap. tablet={}, version={}, rowset={}", - tablet_id(), version.to_string(), (*it)->rowset_id().to_string()); - } - } it = _stale_rs_metas.erase(it); } else { it++; } } - _check_mow_rowset_cache_version_size(rowset_cache_version_size); } RowsetMetaSharedPtr TabletMeta::acquire_rs_meta_by_version(const Version& version) const { diff --git a/be/src/olap/tablet_meta.h b/be/src/olap/tablet_meta.h index ca9bc11224b98d..0247c73890de16 100644 --- a/be/src/olap/tablet_meta.h +++ b/be/src/olap/tablet_meta.h @@ -242,6 +242,7 @@ class TabletMeta : public MetadataAdder { DeleteBitmapPtr delete_bitmap_ptr() { return _delete_bitmap; } DeleteBitmap& delete_bitmap() { return *_delete_bitmap; } + void remove_rowset_delete_bitmap(const RowsetId& rowset_id); bool enable_unique_key_merge_on_write() const { return _enable_unique_key_merge_on_write; } diff --git a/regression-test/data/compaction/test_mow_delete_unused_rowset_dm_docker.out b/regression-test/data/compaction/test_mow_delete_unused_rowset_dm_docker.out new file mode 100644 index 00000000000000..9896795dfd4231 --- /dev/null +++ b/regression-test/data/compaction/test_mow_delete_unused_rowset_dm_docker.out @@ -0,0 +1,22 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql1 -- +1 99 +2 99 +3 99 +4 99 +5 99 + +-- !sql2 -- +1 101 +2 100 +3 100 +4 100 +5 100 + +-- !sql3 -- +1 101 +2 100 +3 100 +4 100 +5 100 + diff --git a/regression-test/data/compaction/test_schema_change_add_key_column.csv.gz b/regression-test/data/compaction/test_schema_change_add_key_column.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..bc9d3dd70ea8a55c752a3592bd509ffa97fd67ef GIT binary patch literal 72233 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 YqWw@MI>e5rr4FaE1y2sno98s||DR3q#{d8T literal 0 HcmV?d00001 diff --git a/regression-test/data/compaction/test_schema_change_add_key_column1.csv.gz b/regression-test/data/compaction/test_schema_change_add_key_column1.csv.gz new file mode 100644 index 0000000000000000000000000000000000000000..83f1ecd41c002e753c221ced963af1ed3b77bbaa GIT binary patch literal 177558 zcmXVYe_T`b{(tv+jmm_K3>9IO8Qp6_YRZqnmYH$O63dS*Ls&|NN-`1I82gneqN0#e zk_k*CL!B~z;efFnm0uFbK;`Gyjxb;dY-8-l*>-le@9XS-|MEP}&UwFIKc27G>-l=U z4^r}9ctQMq^seV-9oU(9fSH-HYvZ*(^Gdcw}1aVGi@iAnZo)pYj66B@RUsU zbDx(+pBagIb+(Px_QKn1PGd;lzuMhPB)P9|GXMUsqoWN$7H$%TA#B2fGZD<&vbx#9 zqUq{(Bi>%A2^SiA@iY;hy^D1l!7&5Qx`PXMn{LzP3Ix$_%j}}7*P?6bz5{Bl@o+QubDClx|BH2 zpug>sM-l?0US*5B^BCn|m`26@nke%q<%p_J<$Onk{e_r}rfgSeUQ><6ifM=>97Bp{ zFe?^v!s{kH*RVg~0hZpBe8{w)T!F(!upfI_pD$u&%1oXrrBEe~F!hg{dhbMBfRQ7}oN87zhGagiwUl2B8Y_39MhoWj3I``vydR z^%=Iuij^Y*qiNC+>B6TxRdN0-`7>4pqB62XLY))e)SkCdB+fV8^cvL*R2xOTM$@g9 z)Q9(YY?quZ>K)V}ygKzW(*Us-W6>~d#%bjkJa!W%z#|1TB1w+yO+v7R6kWgX83LnC z?k}N|_gN`gm%w*rvQ3(DLiDiqL$_N{j6U8)v2s?3O-w{N(R&^#GEs#lORN~FM2c*< zf*%3f@xO`Z@ym)c7FaotP&-bTERWE&BE8YX>LJF4t{@vkVHT%GXXm|QuyWYS4Jc}! ziMDcP1V|j+;<0kH?czAf*!Ps*t(==ogV{|iF-1Q!^$`Nh!Z5IkJOvt*r&8fI-WM)v z*;KH_xxo9WsAV`#M7X|~JEs2=Nx@`N6b*UoeBbw)R#6p!^pdwZ*LWtn27FmzE+G^& zEbmj1-z0_$q-a96=K?%{MSj53M2lW03{#BBNE#9}?9BJDl_r-$H4&hz9cPJFQiSSq zRXI{>;}Oc<1*GBv3>%o7B;3jQ9{VW-S3fsyx`31tTyap!2jT<~6~*@8L@5In!t}+? zyC#ZD-7nRm7WE`~Ic_Qoo0R>dYokbQG)Wuq5|=`qUWuGE;Sb|FswVS1cbaI1%OtMQ7J1g#B}7sg+w3m( z+{q_WO=`ikhUww~R0Rd@cfv*3MI;jMuI_y%SVf2Xk5M8-eFdP$>r%F4BBTJ3dQ&#W zz5OFxS-5Mod6?*#NrB_kCH82CgXiMOrh@6w-%$w#Yb;n-pWP8JVvS{*cx6#yx{FsH zX^%A-><~XW(Un5gS+UAHZffE-atDHS-Yzul2E`-vp7TG^5HE`8F=?ejNh`oYx)x7n zO7V8M*|B8Id7w;W#dZ)zGrwh+DuhcK$|LMIP>XUr!Zpz^!otF70~`_4+Rf@Q5UDQw z6RO@+rZUK$+XY#~ts&g4^@=VAJS)gn@w#Zc#nF|R|FAqoCln;x9Ip z*utzPLW_60;gw}QkXeQa(q6~SKNb@ok;~va+*?U`)-x46 zk>}(r-3et*7Xzuqc*+>BZ=)M30*`$4HmR+}fUoCei>%%9DOL(|$6zOE`hiJVt#^>z zKi6Lrm&&qsOOykap}kWwSau6DBVl17gb--ns~NANlKKp9E2Cgneb!PcSnUcnSZh7g z?C!-Mfbg*Uszs%D9p_2s)F~qSNo%Btr0D4#p%>uZ7SxhDf`PwmMqcCNu30|eiH$>w z1oqf0QjrzuSQ|}5`gV&hbYL57%_*^rhYboSu6(7-?)J|8m*roiSIQI-0-nEjz=t4B z-LN^C>qA5xh9%i}@bJuFeTmPqw(}NIiyp`s$@i^Lob5tvKxh5rOy`CHf=(Onp_a^Gw}MGqI`Gb&WeQ`Qkq3LpHCMbA`OTo zBeED0P%?ejdJz!^)+LM`cpOU&Se?+it_NVBTDy5XX13kwaq>aa9DCj5El)Ur)?m4a zsr8*q>lQIjKpYMsWz912%nQcP{14v>uhhu-n3Okl@(lY6a>+eL-ou14ONh^ql`HH~ z91)33R4Wrq%}dNxb3ot0jH8DcJF;9zz|@VQsKNTlLmf1FBJyI*(HVcLbf3o7ZNwBf?X49 znKuI5cPOr0WlnOhX@|y#Jb{U~LDSdC2yk67nH+Tik=E`CVvkB)TipmbbX=0AYA{Bt zI~gkKg@jL1=s%82`~<80?EmUOLGDgQZ;v;v+vGDlF48a;k-NmECaR~ghV;SeJK@A$#t9IU`^kZ47l}$x+`!-g z+_papB3J!lDoIhcP9)Cs63f%IfuxQ~K{#3^2RV8;_KQJDU8EKhY2*4{l#FJ%;ag1@M~KI>oSx&Huy zvYuJ3px74yE)FR#Fo{g`L$Jv*gM=_+RtDZZXqmVd?vr{?I<@^O*S9Z)Jrm5^=ri7A zrfAGLE{PXZt0q?ixJ~;AqhJf306(Vu5Zci~0QA7qvRX|tq|b3l06wC3K~5Z(+_1G) zChsMEm8~-g~>wKVyOH^5vki0bnx3B^Ch0Fa8`{u3u zAZzzyTf~owYo+zz3|n_u-cIjsa-Hrw{v#p2q$aRqGX&}VweK zW3Z2{-}@A)Ml+vLe6QLvB7}9SN@PM}h#04M{_xo!O*RQKSYT>DK^C*mQtBnIY~}LX ziEDhacAji=`W`ghPoJV4Q|3Hj1lYeZKJ%Gc8%J^Jl?Q!3Icq=9^XZf{__$l``#Bja z8uH`zh{E0kTY}?OJq;?xNyx2Vd*r zo@~(v3@E%t^N;+N0_C@2tm2wlZ$Oi7-=ZhDKPx#DBB;L26qKadN{ZQbiJ;ICa?7KE z&@bX4f0S&7UppCTlXZWne9vt!7S=EiSi8RhpzP~m#WSxla0{ZH;Ss63Wx1_5iFnMv07|S z4;axlm1%jTdep_(AgIQ=#k(#t$0fE)k#@&q1QecJrR#S_gnm89eNi;j?ElR4OzPUB z4(QGAm>QQ<4@$2yB1lPYGYwAXa(fY|wG-JP($)Lk-7_9&_^;0(j;1>Of8&|Ui9-z; zPcd@ci4b0p9_+E)HlOY2HGfP>iGPXiWQxbyUK@?9nBBI|CJKgP_SZ(YHOuwWnMD zYL^_;KHUZe>F)5fFTCNq6URaZ7^Hr-p%y+r!RLGzr8Iyv;G&W?si@eq2N_0Sq}RXa+8=miEVM#E59E&aT-XK!r7!`gQIJZV|` zI${%u`h4m`Vs%IG>rtsecC=|yZ9iyyUe~6(;rm+u@kB5yiscZgzBo@-tv?;*V_Ft zGs*GqI|(9Lz(B1jQ;JMP7qNAx>~3zch|^Ud)LNXYl{?N$-*H`8KD?p^g*V)TVp)2I zm@+Qe?cUO0Y~(B+ms|$^$^9yTt9nCMFg^ zK?ry4IRo@V?8kF_$b5LQtkL+y*H@&z${gXZV?NAs&yfjLU|fLR^}rZuC*!e0B9L-# zxB1Mgpmq##-tCGYuf@Ch2w`t!vKQ z!SsP>V$vC$YVEGKQVbZk#t&>+uPtd~oCK`xK?d}A1;GaZKU;>)1rjwX*p5dSU2%k> zAWp9+2CoRJMf7BBDT#*a5YdcK7;o)<&-+Hklc`nUb&}|-m^SUl%(*)C*}RBJ!3AkE zXR1iG;0|Zt7^{UMyFLrB-$}2*WS8UE7ohZNdl9g<>$u__C?pg?KBh zL5AIr?}@!#9l~6u?uXKi*6#O}r8PDAHrQzv6hHj_0rdBA$wB3Pw0GcUDPXXfCTh8x zzJ~m{JIp-Gfr4HOL`~6EA%LwTW(H3X7sDny~5-;%vw$a33$7xipXBM==~EMj!Ge$RH!Oi6 z;E9xyY!e&j_-u4Rb@CRZhZTd;>CEjBa8)k)1s^z|DVIL)ddaJK{U|gzI%%IM99iPp zbK;gzZ-LgTnrYzHw5OgWpWgShusL8Qm`Jets3`{$n#+%aPmJG%4Kwr|s_f zPJgLov0(KHR;2cvCFg?llU0;dRVs1Fw@F`dsO5!sNcYulwkVs;0P0Tqe?$A5h+QNG3=w*rRRBY;m%Ibp9!Yqd7ee6GOG)VqI5#^?4`5!wkO~Hh?!+zoaDWQ_raA;T4RcsiuQ@vxKq#^7;fDX z&m5{;g8jLjYy76Xt%@3B`Mz9QXErpx8QD?n+iF3iDa7|izGJ(s6*OtdzQ4Cp@CVSY zMWXfmXHUz3BZdgF3>n$tUf+OEkipCbVktP`XB-p>5?pDZ=bswrL?=|OEnHhrgmnvp zIV4t?6F|Rs=87`Kc1{v$j_;OKb(4>c1-y#ck|DhIAaAj5(BUGSn1k1^qV4l3=6Gbj z8StKUOD~||V20*@>MRpB0DT71s}tT=f+Ykw-ck2{MFm*mN}Qv#mJYg#MHXkRZ?q#A z(I*Ro$lY%Q3|0fj);QS1^A#cxNUSZaL5K1{paP}qXu>zezKP-3=9&apfx+BMZE$zW zV9&fs4kpa`yqw@AnXbpU93~A z4ZS!?u7KrYBl++U#U;m-IT;0@6L5=R*~!O=5#h-no_W?G^WYf-o*k=CTfH9)GXX3p(k8ac4hL(1C`pHe3P0oM7L z(w1FtURvk5cg#Cm0~k&6KE2~*l;OT#&0@(Z)2&X1;@VVj%KkD~mz65=STjLL2J=Sv z^Xv{ECTh^jvtX-p^#3j{$k4$K=RB{uk--YMS4?znTNdwTijllx-fD2%mX1`um4O04Uc^e#cw1GbDH{e&!{UmDyku!TP}hPd}`2 z0;y}2Hi~D?OaI_MKNVoQu6Qgo#uwW!!EZ`9l=_Y?>SW9ntk;gJC$N0BF7i(30*5Ko zx&>wwjxDx48cdy)dlHfAtt#g(z4AKoWbaBbh5UIt9ld{w?Mj5+n&$5gf?1hjVA77) z6vmB9?0eAcC?v*U?RBr6G7xu4J<4XuRK}|G>9x$&)-5es4@o-GXqpQMoS5}yKR**c zJqhm}QPy3LU#PO2mo9Q$K?bS6i(%Pkl#=EzR-}`^zU5!8m|+brC3T^ zO>(FnV*wWu+vkAp4;_-F#fP9%t&Zn)&|wze-N`V8=4~H@Y1N)W``iPo@n*Pk`PCxy zsSU8!ax8TW&grb2-7M6TYmAL&uC~p$e?X-9_8v*TDjEW*b<%Xl%Tp}4S1wg5nAKx- z>zLI$mE8hk1i6OcMq+WDiasv++Vzq=4~b`1XBlzTH1z^#GSP3T$6CPIo~MoUCdC-6 zMjRSh|A!0^GZ1UOV7c!P8vo&0I~;j}#UgSmc_H6(UtWpZRWkr&CFQUheqxRb!wAQE!=^ti>qhAi}0hD%7wZVj&bo`M7-W*e* z5{5~CF}2R0;9{A3*SgYa_zk2z>Eyr;t*JFnlN`_-&lTh{9cMO>5;+fzq`lW0;<{ps zu+(#U=ee$AS>&~7Im-utYuAGHJE8A;=w53r@v-Y z#C`_6<+LeXeDZ9~B(O#u4pbpY=zH)-%EQcNnkTSyWO@QSVxn9zCEicxsWmf;d z*YtcjMkPJtJQRWlkbpSBLiOwAwSIuOzlh@k72X7b%AE1I(-rT7{=JAR{07)JU6-;o z-jU|Jw_G{~Yhzyu&Pia&UEE=w=$mhQWvsI9n|KJcCj#RGA_)(@}t&lCk4F(Z*51x9$ z2n>Begso?;w)hSiG<8$DAMMCUB z^p-f7A1lk^_k9~h9^Db4_=qlU9QK?q$}QNz%;{pt%mxbnoW%?GfcO7j%6>7-3S`bh zC*8ZOk6<~9A-X7b7Z~;=l5;FzyHGhUNyN7-i8yB&CiP{Wiho)sgb`dy>@5CoEl`HW zC9IVRB`SDKkW~?Q-49++J0!d^_aq!%NF!bBS?6|pgZ++{rP3!mpJ9P;35|6#P z64GZPtwD(>Z9xS z3Bd+Jw`QHP9~2&4bvHFp?CaW3XFh;dD;*9b5El&~-o4k|ZDg!snL)Xkg?BcF(>3ry zzUo8mMHs|oMOxN%1w&^ECBd0hu*x;z$w$5&Anm%>^M-TR*xGtL6g$|3p-EB@A@<@k~H~R_wQoMD}tzq*BA*p}DEGd80e|F`8`cN0e+m#}Nu=NO&Y`#EDeGtkRpZu-je>DWn?tg5utN3h_AO!X;C#CT z9$P3{ue}7AaZNlDX5A|IT?SWQF%`s!i9arZQxEMVrWA;a*<+avOs0WiaQHE^w@q2# zssAX)d)|!H55Nv1`S-Ek`?xe~cdqhVysUa8MhGv*+539=hhYze5LM8FIp%U{xbx*i zdi~hHMdK2QgOL~@nhJoGauR4EoayJcR;@d`%)35gJ*=}-Jd~EFc9u)4dWpZC?WQh9 zZwmjtK`4dr{71}t^Pe?9MXBp#SXPvs#NwGrO{sUoInKo{d{-f{G1d-3m1WrDbkTHc z_fF5#`y2b9x9k?K7a9rQU^}Z^7N&24r=YWb5pA9g#z}+GiC$`c9e3(u}C*7t?o0C!^SPoIh=L(yW|?CXLfr zPj^k6R!#5l)79hfqkY+d4K{$tGs=(qcP#|)UR1u7zDEn=t&N80#^{=4c*e7K>aGlk zZq^sNg|r!r3r{WezLdUqNwRevGigGSUxVh*Aofm~_GL01@PhM@L-)G<5=ik380!x= zyrhg#;-SNROl$Y*K{%-V-rdE3le_!=Yup7S3hc%8Cq`kKo$@i`gXkAQ%axuh83B8I zoq11k#O62)D5q1m`aMYp7l6|mhaOyW!B%Dik9p0F!B$zihspLp;ERBui=}g^kHD5> zfg5Ha#2~#lta$@t|Jam8X|#90L9j0&SrqYD1__5? zRx@o15?R$d^fTGdcTB<_<@`ojqGJ_9Cb%+BfM9&l>?-Vy!I; z=l*|PgX;fkgKoGjb5)fZx&TuVf`s=%GOA0UO(`!yJv+%_PH*gB*4SYy}P}m^YnH+O~r2er^(ORn}dbC z49zjW(CJpwv>F*N@fX|u5l#KAdGgK>psUjpJU1*-UYXhFvy-kv?-oKcTf zJy>7AyBO_=%?oQKM*R_D-+^HM5vrSg;K3c;7ulOQW;Ie2CXd`TFe*#)`ziCL=^V#l z7-_w~qA&EICLGa3EpNoH+GGwxpV`hY5@qGVny7s!wPnE++i4j4@>R@; z{YNOTn4aUdwWcyvdPG)zO03^ zVOdJ0M!#~+CD<;Bo}W`_`o_(U?sFubGt8)Y*6l4UULFdL=v6r6O|0IH`5~TR)88xx z=NaAgV=ilsZ3GJ|`RkwQKJ+ z7S$vlM?31Y?9*A@cpHlq9l^d}OOFuBOCsH$(U?LxH+TGuAg~{H?@Ai)GseP_!hJoL zEwv8Az(4Mk8nR0A(e%No^~$$RTitBq7wru#+^<07w;T7aL776Ten#iA2}Wd-SeSIr z`<^CNaY}$`0BvK%b2RuibT1Es9)~1N#gTdFucwS&ZMyPv2!EcvK0?w{V?COils zj(MJCZJdvkdQRu5H7r;r>G_)Cf^}wfchZxfeS=_%%ra$G`s;`$W_G(Iq?eNiFPk@L z2bUv?8sjXl>5dc(xJrCY@)cMsVGutQHw5B2>#;nElkYT?AdelbpUU0#vzgzYGG*qW zw3U>j&yh&NQD>A}0d{!si%s5A0x{k0~`@-6il&(WSOD!m@B%@!Ub#3 z7;4sx%FZzy!edND1FKm5T;Yxt{tykZKd-X8AS@z{1zcMn1e<&*U-JV*rsaI=lHX4x zn$^*T{|PM<&W8^Xj=Kd2%dAdV{OpV5p%5WnnzbSVUkW?kKSJ0m00qSoOZhAUG$KCh zqeLY%uzJ&9jF_}QU^2U$`7tX2d8!{69zqvaOF zVKA!p{SI+HQJr`?=rNfK&iM)M%};gbL&T4U+(2?sqhf*a6@4}&p6cne*n(8EI@M}8 zTm)$@oZ;u)kU|Dy@=#9^F8~EQk5+w=1-1dl=KM~^wFsuJuYWG7j2@bwJ98j9q#DXD^7%zkM zGj6FmZfHQfQdJ=J82rn#zFd35x6iziuZC|xQar1|<$=z6^=Nk+SB)DC!eloa22!^o z>)vuh*O!u1LxCiWM>vlZTdp|_&8LP%C6KJ}_IiOi5^NjXyEbkS!ZX99BN@STuH{19 zTy$rQM1A2L!aX7yHNUl)^1WPKOAUYw|#Ry&m=LEGB&ZLAi5 zmFEQ0L?#|?FBLC@L~Yb=J~~+gadCm(`sM)GEFsjd{V<6pOL4tp)G`VmS3cc;VmIJd z_cAAR;bI%)08AfYJ_w#{jJ{fg2>>E337$0u@IaO;T))Mv&ZmABdqgC27+k;EY18E` z_gTFrgz#_N3Knd8bKzwjI}cL3zxny`3)AY8OO_U9I~F?)`?Kzp^$Hh28Ssl*HC{BW z)`-ze<6$&?TaOldC#TwB7?NNzuZHd979J97(iM)Y@RLnvb`8f@RS??ZIrBcYM z&4_W9gI)ufj=0Hp-S&pKCC%T-+E|rH<7nN+21u*@>$MMI@r)xqdr8OH@PwXR)hP%K zdd8hY_FfRN~EoY--Eg%Ob{5YwD6euzx`zuy129=Q8*;t;T z1XF~*?({E!#Beh6y6_iM1d=3J{Z-yLq`aDbY6b@c>Up+A+?H_$twK9_63d?sgVv8X z(E`?_Y)lC=V*W_d#+g=2T?0tEv&BNjQ?6G3LPis*ONy-Qs_84YJyelORDkmg(X5#$ zh|ke?6vt-OliB&cq44*z2uK`^U!#(-8^e$a^O3)!plH-ZKan>IUlq!?y=R}R2lOQj z`coUyiy>`XD;%o}2VdQeG(QL1G~bv)HqfTPHYG1bdB?rOGAz@(_em|-*?S>BdFC<% zU%zybJ_!S})l#-|78$)wEX=dPQ>`P*`=LIbTAw)rMQ$jcjh%$dz5K_0ML;~ND2wT{ zb0PqKF_-W$;4^8+z~tz;aT$q^ApBJw1XgsNI{Zug6SMkZ;=PEi5I+Tq4&osJOkx$D z$e=@caqXQ}2$YaU@5`A_IDq$Jb?5ZC$5JSEEJ}N7R<4_E>!vZ41Vhr4D@wB?Sx3%J%+iffkO~-6V4}?79 z;T9o~bkj8@d;NaG59Fc3C<$v)SqY&^jDJ3r2PsH@H|o4TAFU#;a7|C0kpB|Wd9&+{ z;9A|`V+_6W6+jk>!(onPT3r~Y|0*IEEl}Q1{#UORX`4&aG zPRGNJ8%4~T^LB<1m!RIaIt=ANjJEa9E4T+9U3_}Ju@U~wavj~gpMMTMp7U=ZHAnZRisRyp!YOY<@&aX?vc>aNA5fRl})V?68Pml5L0mq|s$8WM+%LurwK>%lGqdT{WjdQ=w7;Lhv= z^j=GQKB&ta0p1f_4tO981}pzsnLYz{v9q%`6^a-_Dz>DyU)TcGRrb%Y>o^ZmTC_5= z;4mt*j#N~^qORlae-7`4wN6S7x9tToW)%FA9c_#Ury^ZX)$aqcn5p!`cn;8hkNb`; zY%Zj&`6chF2-rR`H8cQd9UEq6qe*6;h%hTU94E&xdqb|I#+O z8dBjPhJj5j6>_7m8en_M4ib=a2l5A>d#DGgnYWpRA@{A4{YvA;BRmkIL+I$ ztlQ1%YUY>XU8HMd8(-m8_r2M`YDtbyZq{+$gF((~Gl3eQz~S+-&CH*iU%S~o5w<5! z4ZxtpQ4NwYNMmPJ(|V@+cc4kk?@GEa4$0D3qU*QJ;7`UNb#RTbiDXg>{os!ioQ7uB zcVQWEP;+f<_1%T93#n+3=X(W7KkOD+NB^*lVqDlRgG`^q3(5LNXVH)>1+8hPYY?cT zJb$OaaR`!KR+z|H?mreHq}tgN$4g&zkTZpRZ&&UzU-iT;}W?a(*$L^!`L zOB<5O={oxUvezI0`!&oc9vMu9ozeS#AYpZ&>jVE)fV&mn%+&-7@uQyIt0BPQLr!*C z3lZzKpRsw~vqPS)4M?8e*9lCmSp8w#cu)vDTg;t_E2$g;a#0_)zwiY_W11t9I{^|Rp%eyhsJXUi@|se5$qDZlU$G) z3+5jA8yPkE3?cqD0#YOVnUb&=sL_gip%@i=tZ9d#@|EZ4T8Pxlu>b=$KJu%zIs zo}Ig%?EHcD8j_^=hyF~|B_O}SPtx8|L5o*vOG|#g?pjsv+Q2ZBR`>PRHM@VrtB^jO;q#QH#v`8tj`dz9?rw=M(p0KxPl*Jf7!t&{z$$ zWj5-KC0r#4OSm_QTCiWC&UGmQcA+mI#9&aes)Zzsjru`H@hI2;sg<4fg9a^K`;u*0 zKQK8uHk*$DttDFdX-@*{8(3KE&tZ4tJ^C~6A zJ|X#0eXBfWa0DRQX}A>)sW~$F;+K)XV9@MPieD}0foy}JNX!A>a{BrD-H=aD3RpLj z)$j|UvD6M%+-I4h6WUZzD)e1F^Z`Gxp8e$PUMyUQ$8ZTu?*NMBNHxxLdyrVUr~>(+W)j6j1H;j@kJ4peH6PJ*k-Ng%+kZcjU%? z74$@K-q>1+e+5*Mh3Y;heg)-C_!CZw7(&|;#Ort(x=2XH=VvS`wXATnRm`cB!DUc6 zH>PhW1p;B;te@mfV9=1XzoI`P+X{NwTwC+1tAVmtAZ`g{_!LB*@W57jE|TbG z+f!?l(=UO!RNUKvvtb67?z#WHZ~*ePe;D^_2h0b=+0SpBfCL^wxL;vBgNDn#nX`X6 zA|;!T=GnC{C8~;JzrtKgmP40es2S2$+r>Y%$BE@Y1Rn7h>VYb3MR0dcx*p1cMtm&A zT)&Lev?j4Et%=2oFHSb{nt(zz#C-!Znn?JRM?VDQHOU*H|5?A=tVXB8q|VjkK;g3G zLg{jlS)bs!2B?HCE8z|fJ=?b8Tjrp`Y(8g@*-^r>t}zNVqKbxyKB1ZYGIaexNt=ar~^!$^FUP(-%GqgRvn-F}^X zmQrqw_ineV4V%rRf3Ijt~a4G3~|C;LJ!uYR}vB5ASB;x=;TWm)|@y|D<`jp!fR zV%-~%2iC{Va^D3sN9Y|Nq`wXRmK0i^z_`;MmXmcQ47h(LmKJ}3$jHlhVG?8`j>FuKt3w0$(3d7gn=l%@9EBH(Q!0A$d?N z^xV6K#n_fW@Km?t6#f9CxGGV3rE(hVfvt^-E}H|}dOr6Ak*TF5zENLqoJIE7@BSsc zJ+0<7JJ)!_0U$B^-Y%g-ZC&@#;@9kX!!n8Vos4=~C6tw0nVvc^q?me-X=EOx@Ywe! zXDeOQ-IG`2@b_B!Sv9wjo-kt$YNhtv=8q}B8dYQbCae?a@&9K zNVzNA8mN80X)N6ADySnkEvu$I?_rM`3zY~6 zS@A@c<$;A`);6|WSq4^&eSgqXm{Ej=bAFBKcybQtJ3T8U@!I2I=K9NDgPF{X#F1_Cut7rtcXk>uquGy2T9dm6G+-z*!{$PU5K zMNilDBxvJMfpyjqly>29Xw)?1?w*CUm*+eMTFUbjWKv#)ysCLiS!yl@^{wYp74Rwy ze7-IP6ydAP8%lt8rHDLF(fvkHf2AmN;w;QVC+YWDMyTIF5S{*0DWGm)b@CyIF1h=p z(E1^uc~-FL9t|P_&X(dIhcAN0#6Dk1kZ7v7CVE;07HaG6kGU2NQ#vExI9Ny)KHZB$ z_75QOgeY#b7{2mCuQIIe9f6i8Dfu5*`qV05^?XTTT>zY5NYefB=k#B~NFl6iKH263 zs}i=!$mZ9n48#k`!TtW7Eko-M1E5axE=|hF#_LAPxdf1a5cr#5!e&HD@YTRl=*}o~ zl3#?<;zYH6wJ@MhcR!zHErE#u-K=e>nFOXl5r`~z0K}E=Id;?HA$X`$mmUJP=*|x6 z;R2F$UE@97OE!sZj3ItwA7TL%aMrOh{#up!frhW00xC$T)LyW)v-T+LMA5-(X5rR_| z-Y_eo30ejCWAg`Z>S013S$5Fz3KT*6m2>NqvGyC}Xp+YaX@dq+Zl60-9~*xhM$`QI z_B0^J+26VUT?KhsB7KlLq=Y6(-=)-t+xCEY8ZHDRAx-c>T#x@xN{B@huY#wEgr2DB zKmGwK7@!XQB#@G$k!aDmjI?^Fpbx!q2?`yqcr!F!SH9xz=)p22{ec!@D8@GAp5(UT#jvMLW3vSO04s z7>CcaY_21#Q^0S_cwOP7zE1<1{2?tm4~;MMjV}s6E}5@~?Z)R$e14V=Mb|o?%UA!h zR_5aXHaMj(!CDet|#tgEScPTDzZe=CDNe5! ze>LoL;2r7w_sp-#$hN>?S1`Zqogv$>`)zd=a#m$(YxxcZzS}45$qza2Fib3)S#p8_ zBggU9Q9(4AF?c$QLNZp0`f|&5(885Z>B$1jdtRFeT)VS&dE6;2WUo zYqb(G=*>Tj9E>4*0^#ZhX({NtLi`w#!@{5dWQN|8Y^_Rj8aAhwXKW&mXn3Lb5b`)J zobD%@oP;z)?@FO=It2a_IS-6ALDO4$K2CIIvIFUH1kGISpD;7MMGs7sP?iH7&`)hMTF5emURRS7Xv`Y zCBRdIYQDtWfCWd%ry()Tpex5!9T>E`m=TdM_7>eY!zB#UVNNJ@k?0<2MO7Ij8MC%= z{S&ZpQQ<7cEpk9L`uA|J5hi%{K*StNDsPUkPEITDLz&b`S%XsG{>b|qVKxDTczT6) z?Y7Uza{t(s4z#aVyz(mqhh$?)bN@%5;xJf?o%Ex5keAj(Mnca(R9RM+3UI{xplyQ*9{ z-vWa(UFIU44o(XaW1ON)_oI%5P|BDSkF!8T z)s!s2MjkT-u)bfwoG0WJdbmn5$XM|Ko3LpRz;n8Cs_qP`yn5?X#dEz3NPMO{$-(5Q zghM`bw+-6e5J6K^njZ{B{ny0!i8eV5LNp{kE(EGT+r4JyF%dZroO38jMIPQ6O6 zq8Kvm#J`fpmO$(Txu_*4VWvlYG5!I0sLh?-V|z-B$_kgc_CA0yj3#DNUpI^F2TU76 zWX1S@9fp~O8%qmdEvrSVLNN01;bahzkG%ko;D58sK#@mhZPwo>>cO#!x(B^u7+H2+ zjcGAK>qY))+U|fC;bLdp+Fm$LiYs&t{R$N;cX@TjBeO{@B zJ@qBD&@y9F=zU-v#PpWX=sW-wlQR_b6n3j--V2oTh0x}}h^ehk0Gyc@daVe7a*?Gx z%928{BL+nbLj%Ny=wNn$3QnlbQCzRep5hN61>>pEk|yEJ8)Cx{vLCp4CMOv<2Ftdp zo_c^slGlc05y(76Ak|6MJMP`iy zAi9e71wUY>gQ$fchmLx}4L4~8c1bg>)+RcHCU4^?BclCD_L%Y6%*i0gxkk=3^ly&2T#^m;gMRw{oLOK zHL=8Jy>pR7(xg|<#{LY@EAaz?9FiQDVg!#n*+nn7Kf?i6(ghD7W$gsLu2tIZXftC&E< zf_$X%_iq>m5EP@oSb_u#ppom(A`VGb~gN6 z!VqMgV#zJNv*Qvu#i)(nqA4$uR+0f@p~)b8UD*;OsY89ILTQ)4P=Dj5yk%OL z+#*x6IwGBhf$BcWbPAB0fYhv{4%iKernJ~=Nfh@it3O8H4ub+X^E+Gr6pR^LH=Gsv zIue2$;(j1C{TrgaM;X5X+jg=FLY!==nmZVQrG);CjO)>aG1`m?{5b-=hc6 zMT>&!k2d=b(i&o(NFsw09WOz%K^hMPz{$+l)g_VCR^_h ziTRLVC>>6DN)wrnrf%=Q)X5;vAduodryVr>8n zCTr+GaxF(4?M=WL;XspSjE@DTSAz7td8~IY%ohjDM}zNqpuNm`_qyK&5!4A{IKtu^ z*G~oD<-SwIJg0!AwzXM*^zEr>3S3g_U3J>c4 zA4%69&}7-ZE5D@DKrMZ+E?77XP08^*YVR2IK&RT$aTz4vrqklh9foU7@$bYM0=2yrfZ zi;Cz{{;q0*`u50>A*H}M>Es~6_;+>on_>uI_>Xd~z zskL6from@j+_gS$8#E4og(Yz^(bpH483sAL>&L^(kV&8hKw-Vmha@x~d-GrKh zef_{nu?RY=J%f1qbaW*8t21-4rp?1%KeooH~rxHu)-_ z&>h1ncRF4Q?pNSR`-6X9VLXh}D`ihTU-b*^{+64yw1%^R$4ObC zO6>{$hidA;-x9tjagI^kwxOj2SkRWPiC^bbemOmslKr-;5>myZn^)&uM}c5E?_+GG z+OO>O$xf$!l*MJQ_jOje9adO(*be4irF@3H%zmFKl%3Y&1&r9Jz48vRd=i~X+!LG4)Nz&*eoX8G$!%0j$w8znr4yz?#tMHn`_wWiv z^S^4;5ru9BQ>MHX&enV=V1V>gUYvFjF*NNl*G ztCImmqpQ@(kAz^=t|h|Pf#>I1{+n^0bzyCrBmM-lhJ4<^@PPrTej)SHhSwFOCuKyh zu8DqyDhYOb@eK~=G^_OlLQW~a#Ve;DW>B#?!1R~Bs)D2*akH zDe)*cwroe=+rd28v^2Rkuk;eh6mp)?Zij7mX?*Hco!U3e`sYI1eN3O=%xu5ONbCU5 z%pDyH3LAzRVaT?=Uv4|%z(M+Wy0ZpGB2v%QWsjh?aFDA%1EM809<#;ISaB4iw|u@E3d@l# zkV5fkB|+s$cA-Me(*CR2m}z<+FJzqQaq*DBaC4sV)emz21EjmoBrc^OSG&)_+(k(6 z%&yLbdT7#QiBrSH4zmf2Jjo+(vLh?;qdBIZuxAg1CE5hmQ$S!C#*=OJRGfTkE`^&_ zCm$9LRe=>!INCIO;5q{ZOYHg=-Qd_t*}Q*=@acJ)orN7Vu@dhN4-i~7zV^B+-p@yP z{#Y->Sf<`#{~8Ot`^ZP;Z%9mcm2)kFN4bdVy^GCn!1bwYmY!?V02T9@hnI%VfWaS& z#nb_{kd|O)rnwKvm#)QJ+5zF{Iz!PHcq}PzjdKFYQfrs&>E14yFX0U)-~3X7L((uN zadCKy!TpAU=^M%*^v~AU&5%_hDG%MA)5S#85j~pzlywUBvv!5Mg{sF0y{neeD0T47 zw5mH=I>&*=gj8reZ6i~OG74&6JXpOSTww5CxhX;V95iQ-8(yG%qtS%s0#amJ*Nl8x z#)qi1`$4ORt8XS8lVMHS1Il-@|QXu%;6S{5$XH#o9V#EV;e8!$KeYh z56CRLi-@Q-?qivec;=cO(>0wtMin2+$zhZ-1HH1oyq*hbL7)$}35sn_m@TYervC=y zSKmkm{hdIomh#6*4w7s6$03o1ax6yYDEDa&zyOBUYnI@ArWbml3`A3`wneZ{Fxy9rgY zRccnG5$5YweCc~v!Voq%pUvXE3VBTE#=oyo#Tdp?HS4w_2XM2~ujdQ}gN*0b>u>T8BI~Dfg zw5;uPmV$_Z3_VYh86hVSOfqoa3sfI;E}Na{3%gmhjTWGOC*o!BBv!^jl`pv@5n zQ!gTzh>BjBFg5}MR{H+FX9LuQ)^FKg*AQkhBM?~){(xQ+uSW$~kbH>Li(}u+wNZP+ z*N)vF8uicljh}}YLn13*A9|7ez^T}x5)N@UwFE!pnv0Zt+qQ{DFp7?P5NT+R3q}byr;-$_| zd@uKIZir!{Z^5)UuH4ZE7^rqmgKP>b+1S6Vs1n(o6U+Ea$~6RQY@s>N`o}oL&u>hO z<8RFYjR~i+$oH}`!Xu7TeRra?4vHtW<%qB6Pz>crJ>N&Ef&Tg~pZIxrWE?5zB?(Ul zSC+EMrx_Y4l_I6`hVdD`k9Ec5x4n}9D;{zpI^A(%Y%LG-?caxKg~XTjwYT7mnx1x? zC)fxxdGL$J9h?)0sG|eM&tY4p3=ivEaC(={>CR0P^5#jhtSE`6myUW6a%+0PNz*{9#r5GwOnrvk z(AEe@bRh5cpHSX|$;GfL#tSal00KIHF?qiv7__uy32W2U29B-&fU5mwUQ!II7+P383F zyD1tng5bUFt8FW(4?^HJ_db#g6DLRRB1m)+w^B#E;@VYk`mquTro0 zd^bt>FRm!PofQF2*3ww@qTRQs9|dPc@+lL&ZQST_9T96AUz8DV9%p{F`A}k4FvR^z z1!wvc&QYLy)j}cIG0UqA>to$;KCv-9k6g>8+FjV`{aiX>6W0Gk@nNX<+JvGtnXtpr z;PGo$wXi=!^$`(?{#|X>WIqjRH~wMnPkHl!o@9m9p1^?@YkZ(W8G#H*_$j9vAws!P zkcs+(U#1A)mxsBldW_6q-+sByg$6& zX{Gy0*qYZdb3D}@xR-78%~;x9l?T7jde`@{5-u!z<;p_YSF$Zxu*P zCiVUx2#V$YN7+XcC_iLo_s&78S0dl&)dEY+T6LcYrtGl#~IyY$7lYvxgey((gNI#Om?%C66^b-@wR+MN&I zQMCn?M8m`npvJn)*E1@DlNEg+nv@-PKY_I`wlK1a4=MaT1Yhz1^9idoKj!@b6n5gn zVRthmZ5YhlHT|FlG9IU_+ny*_1PcTu6NSA<;x4f~>G>8N3U&6uGSq5WZpCk6>y@1< z2I#do?M%ICh>vh?yrk;PLcVCN(tVbOihA(*1(GrG=RoIJ-#Z_N>g@a6#?7v9&_$M~ z{8Nbus15o?J_xUGiW!m(`a;xV@-T~zad*%4(AAt66n$_#_mTA~<06f0qrzF{)cx_;w11z;VK-k$Hgd)bvF5CDiNh2bg zGr!5Zjj4}I?B>Onz;A{wRyTAO;DuZ(dfuV@b;zfm6DvTL{ImU*S{al8W$NHufT%3v z3$ovdzuFwUx7mOtndokAde08kfhFFcavJWQ&9r4jKfrbkT$TICrzl~-_LR&g2VS4} z)(^n(q5e84Yv6%WX=Oxj$x;Ra8@+GnshdE06y$u)kxyq=&Gb&Of@}1%^W&J$nDyY? zJzYle%0h46fusmJ?@EV|!S%2wOowtFhoQ43f*VYHIJWxr=5Gzg$&P@%`+boXnaoc$R5B<(TL4ZyFZ^I5|19dT1r`IqN58Rs~p74QnEn{xsWWy8d8@ z1gOo?s^&FthuN&QnkP}$a;?%#NAOn@uZ?Q&D9JP5+_zbI1z+El#$$U3khYiuj#WJ) zEhYkVhCM!ylz_`(i>g7dTL=AwPNA@H<-*wia%9LPicVXj$@csAm9X+XplAsDC27H^ zl8(y}?RGYJRqf6yH_7Ypa~qRfl;{c?Our%DWBHH6@Smf*OG5IC+FQQ8V(3t{iHiKn z<>8+)U4LFxXUmg%ILQ_4_$i{y~jgsz1g2#9Bm>x-dhh8kn6Z@cJRwgPN^G3?F^x z9%`i-yNjY5W%ck0Wdkjj*obuvzUC?BAylU4*~Jp1({9=`K?YEp`9j91jhYG@>z34! zAXNXA`BInRgd&~yjEi)P2)2RyU9~<~)KRBX0mv@P)lptON0BA9WVR`r;0T>uD`WqT zt0KA4z^Rbwc#^~xga`Bi+6)wbQQ%+Pk3}>TuFEN)%{_L-@Z-oDIR0wee`#BAQ0n+! z#NM$(1wZJqEg+W)OMS&LLpdonbC>lcwz=Z-^0vzsO;aY{%Baeh`a-AVcQka0x((~{ zw4b^S>+rucO`Gm}7Ga5@llUI(jTTqwYu+ei6|Rh(XAp0(^+gXU=hw}h`1t~?8Pg@Y zbbi2JgY}0~NCO25@%lna_iX)z$qgu9(nm^{B z*5kN5WJG^F?u%q{sQ-A%4KEiE!j?aG*+|uTB#GG^iqc&+>cNWzkW;B&HQgbEm?PI3 zxc6Bl1pIF#^~AUWwlTHjxaD1%9?LME=?I)8h>btFIc($+gvlWD;tyI0Nc2waWcv$2 zq)116y{VQsP@8F*b&diz_f>E}g$Fzr5iX#0bf12Mn6z@+XOb4*V-T5Vy1teIb!DJ$ zuRgx2n0hoORp)GdfO0GKOF)!1*qf4tW zbJx;f%B?bDE)qgE>gA|h5hq9LpbWXGdd3bAGNQ{Cip3ba(3H0bNndeUu@_1HjT@Fu zH&!DS*0L7{?aGNm8L;@4{dzMx^;**`_RJONOZV{YuA`Q$A=_t+VjyC^^3ABNU)JN#E;Cu z#x=%A4&=Xu@-aB*q&zkEHL^QJNjI6n)0Tgb)|+~Hx(sd-m7J;Z>w*qL5VRog-=z1b z#V0-YrV-vjQXH*=n-@u+Nc>1df{CE-6bA;LJg5-waevc|=);8fCztsmQ%$!dvXq5r zdeP@azY_Qz-p<&r;kZDsf#E1!mrn#OmxLDiD5770*40OmWyl5x+L?aG*V6#0le+77t|EnHPipolMDiIc>b}y=6fM4M0Z~qDRorcSxb1%21 z<}QF{6z*DIQV0gP((riS+BOm7niJ;Fm$iQnGjzx}>p&4kb4L~=4w&c=u9~?x83&W* zhi71h6p{~)BI%2;52nXtO)Z7g))1~3ZeIdK()VoGDZ>SjVsgvsA|EX3MAa_KbCT*E zc^PW7vvhe!-c*`Uh!od2oo>DgEViNJC21pJ5bfaxuT>m3I9QXzZeo$T%!lT>rUJb7 zQDr5czG?=hrw-Vo^8&)a6c)L5W3NU&>RV98rV{dh7ajai(Enpfwgu~cfmbO~M3?=6 zk5{eWG@&!obUxpE;Os#lj@>uH(VYIU{q?kT`@q&yOvjw*h)^SS|h6IM@&mNe2hNU)j=usgr+yTNe7c!#`c@u&v~tn#Nv_GRNYQ)`wL zX?o!*)1_5M)^;0)0Y~udrn;2~M_XBrk=@dG6#~4=l-P0Y$HdKt0l7t{xwRdz;vKwSL%AEamj|E>sjqCsJ$>OFO zPC)#1hX)HY2zgNbZZVRea7@!G8rY{tTa??`7(IKpAAl|U`Y#WYCM8krXRbg4SH(P+ zg~klLfcDEPDO3cobbHl<1VieUXa<7tT=Y53899cYSyi|_qMbcjW~RmdVORyA{>u!mB4-IqNZ9H@C<=2V%Z#20@& z+A%)t4wQ!5a-dteFuDqlSMz;xm<0Q+7%r@o!ysT)`d0{XjQ*4Ba$~!il+YvddV)tF zny5S%QNrtUQoV>0Bp^+Vo{7pt%gu;)tsvAI=dEW}gh8A7W7$_3^cW6yrtXsG=*3Mf z|2l<`W{@e16l6WLg1FLlI_5kI8wj^s=9(CgDniUZs+z8#VIck9<1ytDz8F@HQJM~Ubdc88}eh48eu>O?*9T&}E#hB6t=6uIuYwM&aszt!PvU?%A%rY$Xt z>4^>9R{&=qj2XqldO39@3~AR||DaC%!Sok28@bdFnd(p_#=a_>_8WFc0Q$I{_MK+{ znbqjIeR9UH0F>3_XxOM8JMQ)V8@{#ltD5~AdPwf=d2h@O$~3^4hR7V27WqqiuWI{syRT-}DKTc^1+*8664JOZ(p z5#8*df=w`#(wFjJ=+^bZjNJ2AuvA-9ZdCX(U}X+j2RcRMlB+i9g$>AY)qYLpW$2~A z44I$VR{@yv*X02mB+EMg+s%Bm%?CsJkQ9fvA07W9>ogFzP@itAxNRj~a?hB)qWi5k z$VlS8FZ)9Ws_3HTaO4*K1|Z)3_Cdus{^H4;bpfP8{-5ShLNmSgPPV5Ef~i~1UH!&0 zb5JQ1|4)`u;ft^AHwb;~A_(r9%)1{mTT(WAjZr?Vh*woi0Q?V?ylL!8Lpjk^^-@9) z*=bWIQ#XAV{SY2PhRUfOoL%6vIiF2M;px76PTL3v)0SAq2qDOK@bld)X%w`!e9tsh z9N@3e^aV?g(qI^7@xFwNTXZ1e63nTi9jFOi{CaQTEH`d_;C-gt1xr|beCDy{hd5A` zY`^oWW&lbiwWQ;`61&2bN+x*ZZQ6SS5+qnE)r;4k=2Dz1&yUjHMQ}9SS@fcolo#ce z;E^G4J1tHF8Ei9hg8RA+mM8XZLVEV<8N0dUzK>HtCfKDi(GSNUUt=P!MLP=UPFb9dNck@sFFgM z*5#YN#^Q{+KQwT4a=|SKkU}NnHPfgQph0wfN)SMY&FM~rJapC_I2xg)!&H@s$r((f z0WfV^rlkL}>I07E`7W{{PrJU#P5}(K(>XdMF9TW29`OY=STOj?w&l5~g_)Y&e+GVo z&rQ1C#_7t!;c`4S^D1py+M@4#%TbN-18l5f(?3|Up-ZgIk_#v>a`p3E=_mj2ya767 zWv^@Z6ZXbDIft zC<|k!Zc|pmp7LERAXnUftz0OEO_>%|Kehck7@It>a*R_m z1QT8L%a3lONIy32_xaBcc;o2To&8sY5G<*r)0-b8;_tIm)^D<=Nh}d|?`$_aAKMeV zBvoiYipI)WGN#1mjE&zcr%6i@0`bMtdQgc{!=Vj5{!1wlovx9=o-I*QUFj4U;ew(E z*Ic_`Q$;7aZjDcl3xgl-ESi;JF8;kv32@!rvB8o_)auc~kawgA zm67(*{?w<^@YjGicrsPtJAS z)akR|Wh{+oXND?h!c3k`ta-=5w3gHms(l${m2`yvTrm-jBfKYoGvZEZNVZ&}Tpm3S zZ#t!otrN7@aNIJUNuN;>@tF8kR6FrYLDfwalG$z=|DVfR@hK(`BV!o-xETtY-UY2s zv5n_SAI4*xqx<74^HO~2NuzyhWp;{8NCT4%=X;$|z#_Wo|4iMdonNO^*e%F75+p>!+G z0wJ)?I)^~$`>lu&{p!f+Hz-@L-SLk4)l}p~0aNBG>hA3JU@2rqq>25^3#M4SzNsXC zj{x$@&bgz$H{}%h8d_+vhR^nFejjOV}BTiD#iYB`@kj1WJeme zz@>Gs6^=o-p-QNi5vG-y=tJIWC?-F!nmSZVINO3;s7|+BV80eO1}8dPUpM_6pIC)} z>3j>MLRpI*S3c?!M$@%018*#5pk-IFsi$I`rdQ=MJQok6ZKi}(!xd6kmt)Rb7owqh z=FqWwILm5_qp5cgvcCw)4g2>xzegSv)%~*dE>=N%n(Lmpl!Ad<*OQ-LX(%+9SB4!z ztGAxfZ@$LSkZGQeH@`~=n>wI*m75esCB7UazDQ6&GP|$M&k=y}{plA4z2U35lN2 z*E;|2yINpcu}?nWkQ_0_WxKN3MquLs-w-8m`I!uTbv^eRxV46R;uJu8abAnZm6a&_ zef0Y5gr6SbjHv7+=Nm|fqGHq(l~D@V&#E}@hVT&(6j>d=IRnu$GUV;59VGX8sQD#R zMmZ%arhx|K?ZRMI&5zdvXtFeU#Qw_FBBcouWb2OuLt;d!|1hA)R7FFL42!-ivo$ByQ76R>JhV_lJF=Xk!A}Fkah?_~z!&bDpUX`DyQzm07 zj`i8Tm6ue90T`P;%Hu!>VzTmWK^9`WPE~hvrtrRgs);X)0W!~6+8nxyVWG~o4%~%` z4Tw5jtiB%;utwn-SNWN$E3;&eZxjOvvgyz0EtCdYR{9I8TpXnNJtIEk zxulLu-KK!%wlT%br9I?nwhWw#a%J$j(D`nQ2lfL@iJKXhfxx_Bzf%tv*@)>Sl%ey;}((paEIV4N*`6dtDAN6b%id@AX(kx0&r7I@?m$nMsXKH5Lx~cbob8k4} zqNb5e%!~tNduM0c9D3PhmUW(rzy6krau4h3kt5|ol3c}mj;k>$ft9G3=fZbDU*4Lo zk0vkE3mn+uIK7z^2{o^_6rqj!JLfOVsnh~3S6E&m3r*+U^UfxGHm%ZwL6gk(jNP8Y zqtOZ4;i$<}7-}+m7;BFEeNN4_%sGVoEzUQlhOQ-&=x4+1pe|E|;l9jNefc6m(oA`WemZUw6dmfgL?{G18L zPZtxEOPNdb;Zbfngq{&oBg`@lv=eR*lD8ufRT~>-ZgB7m6Ty3SP}dkxxTE(gLA%VX zni)GBfY>4`8t&tgZp(M4`qr$XSL(RKZkq+5JDH7yrng?0G zDsi%>9eY+uX;M*s@wu20j0mgjJj{#aXX;ShCxyQphzvN=caHfL;`By?9i!RzQPs1( zB<^FcfiIB%#5QUDpcEB+mv@PUP0b6b4Vpv=D3`n!`qJop@=YnaSBWAjzuvj_K?JO_ zd%n+d1EAK6$G**bhj7O>)vujz(qauqjEw&)M|I6wIvQWbK&DgSRqISKH#}p<(w;1o zp_tZk*S?e*jUUUwZw-Q z#~9Yvns||LSeo4m2|J^@UFU$;ig5Jo?X) z+?ScxYtJabd_2FzIHoQLj!e-cWKsj@sH}O(8TSap<$B-5JDcG#ZTpR9rm!TSk;?@@ zLe1JV=ig=*F|O?mn!Bh9GMGZUqK#yK*UBQB^ui#(Q z*5pG0IF#}*CGRdtozR6)PI1aUB7-T`dylm# zQ7!tOm8KKjixGG1i}}dG6MCLx;Uw|mG^DoS1XR3;Wknq|N1VM|l-ip|}JtMMq>^^DQ?L1SV}mtp(f zuaRMBw~yF?q&Gi1dV07UFtpoKwV^6f3<^3T+(&L}k()}bue&|Ro6R#Tb`LE)2s$ur#n%vDuoCkZ z+@TmUHkOmoMVNrY@47zJpXfm3N7VtIX*HhgFya7%hq`b~ju1YyCL`)sL~amp-^-r{ zr}Ye@o&0P=BDW-ehMTC9MvRpHk%`>1Sm>#xmYn`2J@1x6mKMqXkE?zNb7?wM*G;NC zjCp>I1`rlV+QNGe!SgrC487k0ExlN|ChUy%9}3syUj_IFgjIKP%I*^6BzWLDo}T3GsNu88E;BtV~IdA3E$+ zk$*&7ia-vi0^4t4_ooGd(e@2pe+C3Uy+IW%UVuX5l}3+h?5@fhnCW$KoBjOd?c8{(q+Y=oUhRz29z z`8u*{Zp+Hu>~W+Jrx1C7s($I-RW|sa3oQY;1RK|Rwh3`&V8g~T6Sy|?c{*pH7(0|PX``x&#Uzj1HK>$1y3cVayKJg zNx5-is0z~&y#Hyt{~HQco3+eR3w>FUBzxvJlKqu47BCBQSy*vx0Gb|f?sOjd966p^ zZ8(&o0mDQykrHCC>)qO}<>!b~Xs!P%%!%ar@k2(Fmvpj2k*TmeO-ZGB-h~zYr~%Oa z6YoOE(AJdwWeh#qc)Nu4D+))A1udd+rgxTu8+$L`I+2&6*`;M=Q zaIo@=kMt+$HXo!eXv=+1Bb7#ech*vm`4Hn;uYl@T-agNcj@geL4ZyVzpdLoOcz@al zl4{=Ym%EqgD`;dDb!Cs`0a36V81)zxB7IT6GBHBKIWQED^@{~BU+&$uozg5RWS^Hi zph3dmhvwKlUC0HKSM|LZQZS3=bh4y{n*NJNZK~dG z>^sK)C3m5vU(LG|ZnrHNBK#_5;wMp3#PuP@al5_LiC)X`b#ui`2CuZJavB4pX`0iO zjCD#AM4sPu7n5-$-&hM55m2{F!>S<+w(rDvX>yJuY*tfMx5fWG>gLe)u$Kwso7xKd*uC-Sqov|*J|G)5LmF2 zWj#+6^!V1P0>GI5bK+jo{ta|IW3Mn7%^GQvnVx!W9tQEcn0kV)V|XV>jE%XTG(Bp% z?N)U?A{p+b+n1$4JK!B9=g;oVC}Oy;^SxnAdWrX^QCq+aXjZBEHYve0@(*=AbblvwuZw#E$p~Xg0IuYf8EWG&GxE{m0=!S zmSJ7aQPS|KgQHeE+xkR`C3dP&pqslSm%Hy{2oE|#wYO>IrUuUDJ>d<>=OV^`jXMa8 z^{*G>R!nUE?QMc{*eASV)(nVL^?~NPgLQ3$P!{_e&|l`2aU}R{0doIZk%PL4#!D1P zqUP!3=>Euy{fFm?4={tny{czU79WhnNRh^J?Z&+X4#_KyQ>LQ#_VlgAyc4N) ze#*}?J7BMdRecNYY7q!B6MJ78w^GVAPkCI6**g8g-hF@6zyn*C8KNy)sGr-->C}ht zdQwHTP10P9TmV%-=pH)g?J;dB6Kv9gXCf*o!R6rp1N0v?9q4|Z964~`S zN*#?(Cf*Nhl)%2Pm{W<7&dxYc-4qK==4Qh`^%oJ?J2y?gNkgi2wtpAZ;Q(YyDqDf{ ziLyB@z1g$ggj>VZCj(`O4e#}&*zKOtw=oxBX64Ljjfw`lKxzI2b?7j~>1Y!@iA`x~ z8Q_nH!V<;%GpcE8Fn_Z zt3r9x3qM1*jW{a^#6Mqn`Hs)5fc}PyKi&5bWY&I`LMQ0F}+ zpO)qW)m!}bXv*vct}-th0sCLV%CxVZvW!LY_AJpyVwUw6>e;-(^Kk{^8DMyK0I#-~VN&PRYZ);wJ8;&#EUk$@IB}A@uN1AmfqU^#9MlBl5gUO?m z2t=-zF4?EtwV)7&2K`T)VLYkdEBxaw9~?lb!bh%-D%@ zSa^$9j20z*y=g52C)9Fe=Jj@@JHbJp$!^g=(Sr1m2p2$Wwb`3wzb6#XNt$5qEWk)# zp6-T7f_xIaH3t6bOHKe%d5b?S^p2s8+3duiT1R%urh-{ zho>q(zDW9O@5jF_o9#Yte3*hhEmLZGQk5NKny%j~42|=E&V=3dH4~J`<4x(eRlXTx8iXz!Oo=_n;gSUU$DKSty zraw(~QhTPvr4oCbw&-O(f6^anvt1`N*DOds)73B37SPPunU6}c-X*1H`(KT6Jt#G{ z7o#@)jaePY@L8@MvHk6DIO(G(yDqHHXp_)g6IZ#PN=CIPJ)4#fDEo?CK~365a-${B z0}cwf-+h@luS4(u8tOzbM`iC3J=z$oGkPRDu+^ z3|6jqZIbT-xCKKVR%=<9s5#tLOD3ljdHTGKz zXxdQeYtj9=sHgOq5e9Y0(JuF57w5~8hJ#uUz>|#MlE-8aP37{q0>*3GXjf!SCDWU+ zbu*{VRrV4gz)#Ug{t57f3*##e1X9?ni#+N&5>t)I{kb1?Tl7Ct8C2U?H1I}xpUA=T zXWJNEEuuE$PG!wXa#L=Ub;3;eE2lmSr!p?jUVjIQblgh9<@ZME>Ai# z#}(@qkd)H#CNiFsPi^+xc6x@jUSB)n@``vj9kMBn@`DSO8B_?d0Yz$ruwtK&j^WVIvr&-8n6Zh@*#Vo@Wh1S~n{6X&H&XMa z(D(HhkI#;JdEMmFPFcg#L#2&UwZ24bm5b!&v=>Of~z`2XJ3c`JTK<}8o)L_15EbpAwUF{(OuWm)_4P z#qV=oR|2tCEskUjRrBs+6-`;OGYf)zZg2#$sxGg+Kf)A3b{xnY1?T2u2u!|3GS-I} znLProd2r8yh|6QOFq@je>1II7PRby^WpvL=TKK+jkLNKCL>1-rWg(pi>t_WnToWyt zVDfx99I(`Y5I}7~7(!x#2MCo24y*`3r7-yJR{^PnfyM6sO-40Z8dr0^6vxX}Sp0GI zsZI2_CmkPGQ_Xe}e1hH#y~6V;9VuW`$sn$_SMR~Pp~@!Efup=OXguO)N%69qiq zh|;gvoifjqaM?#9_&H%!X}t0kLYa#cr>AY$=PcvDJ&(XAqjred+YOq)({A#&GDlKL zzTDkLDP4a+JkZ;YDrUD+Q(>n>PxsFdU zu(n%8_NI4}KEatc)K}dqf>i|sea5`lf~yd+2lffD>&(Pg3@Egw%dCX1_*^vX3k?`l!dO#NB)_bid~ z<(GYD1L*M1VRcQxNj=nv-2%f)2>?ac979GUS1wCl)nO>q5Q1?``sC#lvSSf{C(qjym0@fajMA z4s+pRMUu2>0j0R6+FQokQ14ep$LC~>1|vdo+6HQ=Fu%YaIg}=Yb6~3N?eEOe_Le=0 z@^S}|8k6hUW9N{V#xLXCAiZ|EcYoWD`1GP@!jfo86?(Oo@BN0wC2B+6lj%mD>sLTo)_c{2|BIT(63JGs%(YsCzqVEHgC?SnB-^qHl$vq;Zt@VeuREjXiR~Evhif(x7Irdj5VF$xB#gI| zrHS2mVVY=E{vqD;{$@n8&L*C#sQW%5x8+W?E)I=dzymz12i3`b~mp&6)2#F zh3%>x6&RxfCgo@vWlhzL+uRAutj)%=a@;VSTX48o%6knN1JCrbKLyg9-hYp|)7Y!Q zxf$bXnv(eLC+6uQ3S6F7igF>vU@A>7%rYcZTWmM52yIOF=^V%uAQ9!g85Ad>Vd^<* zF}k7>zZ&RzGm=1)J)ES&2wQxicAX%_tnaI6Xxs_-$K>dDKa|j=tf{5cM7`&Qi;h%G zKq1vI;Dr5TYgN~dcd^qQXxftJL8v~2Pmno=t;XK z$D;2N9u!O)kx{0FFE6@G|D%KzQ~cn$R7!~K>$7LdalE8#^IpfeQ&1oY7G$)LcgsDI zJspO_fIv3NogJgAyrf$m?T?b7*tA$*O(R4#^Bi>kgbZj7q#4&z7PfR=Mf_^G9=2CO zH;n_peHrENdcp*734*PhTCy?3gS8XW4AJ(|w`x3#N|N~7E1@_ZxmdZ+_5yBQK&RLB zm?4*iq>+#QsSvRP@ZhmDa>BTUQjCB_C$hv%e_TEsz0mrz8 z%>0;$Bt0Y9kYfH1OFZ+lX_+_b&Y8kU1LbGx|6XL=g9?Qe`~0drG{|}tHkZ(p4=L}s zZy(*T1>`qm*;EXUYQ{6Gd$E-6%xNLb%Z=S*=leFbkf9SaV2H>^?|+7)rqG2l5}{v3 zkb8f3iO_*?k0SQuM!H6gnGxRMP(U41{a@+hC3KA#zPG~z%yndEmy>%RV#m#{iybrp zVQlO`!W=Ac!(V1CAd|>WpDKHE6?_+eUGjIx$Xx^bJ33`(a5AJS$i1_?m=E5fG<;@5 zuAzZAJu$<2yWpU?hg|N)OB~p08bShcDRs-)JS)%>nJw_ zIKCZ2<4jb0?2_6-d!%uq?HVW55-NFPW86nBL)TzwtSIfqTS9oVA^CSx7)=f9Rg9p4 zjyGgX^LCug7Gf1W4)B=|H6J+84Fb-V)X;{6pQsxvQ89BKD-!D_-Zc_L-@L)vu0p}i z%K7;(Az&)ii>Dc*^#84wTU3ZQ7aJ~({T1~LyhgXdbd)*~d=0-QSdmstXgnfjDX|jH zNEkRq$M~s_JA1JF%}-ty*CI3W{)emhI~{=!Lo%$l_io)2I#98h;dEAK1tW7>Vmiq{ zgsEe%_j|SfEebU^3rjI>j&JT_L|5T0blO&J^DY;lLu#ICtcZ?|^@m_r0%w#9t&bT1 z)5{DN-va6sKlP+2=Agn~W_&+49glW2pyKKQ3@nuyW|_pHcdDAtL;~ZGOU4h$SU8mC zQ@V$j@_}0V)~pMeoytp7L8X=O?#Jhk%I*}>^-@finpo_s*ZY${C&H0tFe2a0dm%2c@#UA~J9R$a$z)_68( zeYFI3r3vS+Bsx@UycH<5Qfo$%+iDuQm=*r!?RnIQ+GY7+p&hh~E%$K^4m0kb@s6X8 zp(+l>&8ZWw=$=gcANi;ili5?@NC6y^u5XF}rXMM&uZtF-DP-x%E`^MD0Upych<685 zRvR?ruV)#%Ptp$1!7`Wyz7aIN;EAQ#Ge83_dfdxoQ(EfAe}?p2GseJbDO?UTW#9L1 zM|87I?!BG01kTuQBkx-SisXi;UzRKmg*Y>5&!(({{CbQnU9Jzaz@cvqo_dPC7t{q$ zk&tnngq{Y4va@e_#cU55{Zw z|D=A6&%ITx(H@)Gg>+Ff8s3f$CZ=_X`#ze-UniJKC`MGRcy0Pb7jD){@BYc582xBK zOS+Ke6T}=e@*5pRx6YZ77%UK9Sryj&#tXOzjJ=6D@>f_dS?7Z)4H1B<)psO3fOEK> z!+oR{6CfhPYUbGP`)}hWu}4y!~JOX)xzi(Mu2x`NbbyN z@TsF-8g@uD<+uM@ci$0V5OAyGuU9Cp*-mt_;N!v-pQdcfT16!3!O{_|w`IyuNwa&L zG`#TO+0kbSn???iO1gOXo@T2U)+*PeDbk?k!03(pd}O8ie$B5eRQy?U)|;J_80%0w zr{>Z19E5_%wOOod7}9~6byH>)!ijspP8Tj1`{9ogb|j*0LNzLy@uPc77MKNUK;2y1 zUoMXlxESO+{+Az`%q?g9V!wd58Cruo#BklpNsLL<54}1oHj>O&2GU3M&0JB^N{(}- zS+JA)hLb5Yv`V-n#V}zxhT;7x|49ixBN_0!4K5Se>yD}g{nVT5J-w)8GiZBTPlWRV z%>P7Ebjb3b4)uj3dFiw-?aSPo9=`O}hQe&?YJ1Wh-d<;2CL?{xzItU}C!&;YL+%>+ z2DHIM=vvYC1R34BkbSbOV4IR%Mt4v&TeHF?WKVcq6OqG8~7_{)gsHU=Z#hzS9CY3QnHohs0I;)vPs}! zT^}ss&Qe{kOuR(+xm@BP94GDBeYWQt-Rv72*Cn!vb_JyGsWR;uV4EW8P^+??ntZ#n zJ*$VH$IWK8*9Xznl^EF``7f13`goP-Xg5#>@5pf_Y05o>@>q2|5{lw`L7l-gf7HBd z+7$-damhLaf9I8PuEs=&F@LhbrT;~8t1VTV9lxhzf86|m=We`}zA!-Y2!WrfPougM z(}DR{1S?7!h^1go)X*IaO-|Ffy>F0fTJ(Xh6J%1{2C*ekfEH$(<{)bv1JSy{{lC)# zxlyQkNxzn^>U>b_KGZUW43^cjZ;uOh8dpt`ScQfP>c7}7?F_FwjHraB8U;h`@*6; zA`4Auc-SR7eKXA$fh3r7yx=GBKF*dZrLsWsGXA)swy6X=!TPZC>tf1v*(a0zM(;p| zxg`VF2_yFrswZ&+09~Z=<^v{zR&2}*u^g%m1TAkM}YW3fo?*K>cZ@V9%#1`>=66a5&&Nv zsd{@_NvD6?Ji!7=;@q^!rzJ~>*8NIPfcR9cPC?6Qp#o9nZ~CQOln7ay2JA9%7l9r_$HZV#@fsYfs|I zx2E*1blry*Sgvg5>)D~{NA1J~tN?@=FD=l9+&4R!GH!$jl7VGe0?aMHNBbmj?vihH+wk)5idZDAv)F)7j;^60(g7(<(n)JmuCp9r`(C8`8Ft73az7dbVO8I%Q5&qT?(PwuF zQcSfq)o&498qg`o*1h~ZoQP<6pR&*81>nDVyzUhk;v|TYWvZ+3VN;8}f1tphoe}ew zeKR(ydQINnd>D@0m_CF8N}c?-{}E~d9#l?^AB5{_O*^#fU^+aeHaP5OWH~fIU;M82 z13s7OA0Z6b^FH9@ z22bK_LL27qg1E~6iV!XHtHT4{Y}A^`FSFZ{ z!A1vF4I4Zi;Q!1X(N%=21Cz;)1sPEtAn+f05}?$`|GK&lkceua|2HPU&#hehfTDu}ZIFF<^MTD%ujqx1z4`-1g%}_+JadHGoTVZ=P0XOfJ9z zDK=KG)1zwe)M9FyWT`%~Dx-{N-V=@hJ{O~>lmA%O$XZ?@> z>r;Oy_*yysLFH(#9QUH@A%Ffal~C{A_gRw{2qyT9`K91XWN3v^l74@Xu8LskOL5t- zy5Q4y?8L>yKsT>CQGlYUJ|Zg%$XizC?vS(O6Fv}*J|jV_i?EzkR1jS`x&HQsNlc<} zZA!cETZe#MxW^fVf{7L4(~5?t+MwS#w~+Fsi~GdC&Q|ws?2)p!;DD9l_jpf_9Y-e_ z^O9{R6M-Ok>C`hSZ&ZPa{2&s42IZdET1k{EtH#)y^Audf>l3f#t)NKP+mR52wV3(2 zqE`**a%+J@U;>o69gU(FWw&*x(Y2M05r4uaZ2f$u94#)5tQU*#!47OHt41N;A2`u4b{%l7}uN2y4bnUQf=MMg$~Nyd3g zP0>uyd~?k=HG?)^3&Gr zbN&w?y2erERxnfmvnDGa26(wxKIP;gS)`ws7?FoW0i>74P`LO(Qc;c5*&hcA2j4e+R~JC27qK6YuJQ&G;(pQ9 z%)^c_ZcijF_shD;Y-ga>w;NPNK3P)*KhY6TOl^3kAelnipFN!2vN^jD{INT*1Tc21 z2mGL@{a%A~m~7=pourCHZliAfzeN$ey*@Ivs~5;;vXV^NpGY<MK&FngD9oucFhx{q8G!qt`Aw6 zOUz+|j!>IokWH4)0fkB0rkUl(kX(3p98cSzIY_7+xmjG`G!-w%TFwlDQ@%%UdNpti z@|MT%J4J#^fDy=p(d;||3oYUQ(jas45(4>Xrre&NE)x-ZIYz|hj5x5Jn z$w_wr`HFj8oOcikvh-T+w2uW(Bb>y51n8e~^j|tHRLz3tO_UNO1tz0j{>o$zAzV+l zNm!bXVy^GYtf)Z1L|SX5ptaP>x_rr& zok&`Q)-x9rEF#lyJINX-)sK$C&k?v#I1O|pW+{jD!!)=Sv5QLNh?J&D7VY>4A9Rqw z`y@y(68ThifOl+^^v!m8y&;y8_C>qY&RRo=2#2XP=ifHu1cs~&Q4*$Pwpzw{qo7@Rg>x^NLqJyZ_ajq2diXL}7Yij_(&;xt^GxpjHfo|I?6&nv&8d z(muu(3xCh6hITuPNfZ~<&(*NJJQM>D?44Zg5b}$jX0nrIk%;UVnvBT6xv|dJc)gI2 zOY=%9WK>HR*1l9OOKeXk3^x_FX45nf^PnTHtRS8D@jLgJ5!759Mb?f0#}@b`wQVnD zJoyC4{YJO)(!J%dN3tHnskyoQR-@yE=zsSjEICk@ks8VY>bJNvy4G+yOE6 z_;YRgiluzKzH0%u0gn+$b+IfCKvu1le(tQeifPrtkTO|Ze|ipq%<-u)JMmYl%Z=+| zauMLM$BzmW{=kwO-}EmY#kfcgE7N+>e}p{QxTc)z7lpLL@7J&*0tIci`-S=^naK5{ zR2cSPcPwx68Anfe{z_^0gz62Y%+&j7CgjY0j{htZgB^ zjqrE6Po-qS$!*z{{t6kDd2*q{As7VhvK8=GrNm5$G*k_!7yz2r^zAL)M zVYVA*=opk7ML0_x0u9G5dDStwV%nFEEs(Xao~dbE?mNMM2 zinT%6Os1{pN#b$$MU!9ItYV_}IC<55r8)@$tgCr)@Gugf%IqIzcKgU+Rm1!KDZTsg zB}6aEQ>L7D$g-$p(s}0AU!>C&A#n^@bl9(nI zx?!>ewP^FLnxoLqU0Jt}*7>7~6DK@AuMb!wo`Zix*2Ot|E@K<-0GyTS&jXP+N&6D{ z|2dleX<_(q(P<9OmQh%J4%dvT`5o>NI|uAj1i! z9}bvKl8|aZmS!Ph<}mjL2k|39y|Aac4ic`ZW9^zOMIyLR>N~L}iC`g*o$)TfTdKP@7#$qYa=+Cv zVP3ryLtmkqVENoNzW-neCLoCI{^gTQRrs*W{Z}GY2Hxc*5;X zLL&esEl!Vo2!tw*Wj9Dp?w%f(6&EK%?$44b$(&;Wzth!Y7$yO`1gNQmFC)tN4a?Ad zR64|*`_<27Du5`Dw3?3FK+u|oI*eauzzG-fn`ooL_e9l-kd(#gxOaN!NM)q}{RI>; zqZ$z4-ej0oHxp1sx`SzJND{gK-jh{W+2)rrPc#^fhC@{Kw%J0$Mu6(iOgtGU+$9Q* z`h|#D!qVfxyWoheGd=PFQs?K`%qU3TXy{R|eImh>WV%*}O%FQC&2g8N&<9w127uD%L=411a_rE7o{~a=u>~|eTC9r|BuZ)XUe@PH^+GpHK=VORCM>Nf`X8HNjoRu26HKyf=L=U>Q;*m02y6RAY^FtC;RrGB5EF7Ry}nU zU#%K>BY6w?jK^i7?_3Fb;j4rfiTg;2=vo(*OoPb#$=eHq2xj3}u;>_a5~R#2yl!B} z<@UY;YTzLepgD}31SI^Rawy@wCuZW{M09)?XHcwlUH zg&G4u!-WqL2xFp`$BC-s$t|c5HWXVYhvwK~b}GIlP||dx>Rkx|Ra^GRbk}9RP)$kf z(JrV5_qH?L^Z+kCT$1=9$@!5vtWP5}&xQO-bzLlAO@5rO%6tWco3S|fVcZ`y*t?iN zXIALLVX8NmwdbjSBiE+q2D+k#8=x8751HdXqW+OgVuyqc$Lr$hB#SFBb_Ws~$+zyw ze9;g9gimij36v&p@%;)-Hi5@|(bl*JuBSloX0Un}WPNXuh>SCL2z*)n9V=kMQ;$_^ z`;8DnkD@%5bO}1Z-BszvM8X>9NeRdz=IgY54IB5gn0GWVnY0(Xp7VI7{D2ghrX2pT*hMn za1Yqjy;^}ROXKFVZv<&TaQM^~GjXs9vE`A)N>of{>lI00cW7Xvo^4zh$(YIpD0EtsP?`ZMkEe@K8Yxv4P5WW!{2f23U_M&dWBq}hkh_(9Cts#AK6 zBwybzdS-ZIQh{i}vPN^DpE#WQ=Cgd`oU}F^|;lE|hO;>?COf;U{<`_!Ds{D0>B!CiqCN%=lx1)pH~s zmHR~ulDtY>`oDeyN`zm&6EcN){#{=3`*uGg3M`i~`{{G18P-DC1G`&f{?$Kz(w4a9 za>n8Y+DWX`WOym&)SJ_sQ|y*nd-W18zzXu6mo`Cwd(FW#>s2RW@=oh>%FS z2A!xFY-zZFJ{@&1_eU;z&+MsaJ3OO{eDq&uBx3SKod1~rA;#}2^+9Deq83ptWk~xw zF2FBg*K8eX>s+c>LmEw`?(?P}H3M@82$4`JBYa@ZhmUc^Y=1&BnD8}WgXfgp&Wibn zkS@O_uVecl4%>QK5EvQ=;V-@(*QY}+6YE{-6i&ubT`4I)Qqit5dW24rK^S^>?O!4^ zi7{a8PB5FTA*r&wAQ>V__ho9aKLa%gUaX@Catt1rjVI>eVF#=|GR0)BE!m_cFn&r# zTK|@RGIM{B@tZO+=FG_13WZ}Smu-dNG?z_(gcikZUGXu$0s;L4h`Tw$xve9 zGir-+3M&|zs+g_5QMU?~;oK{(N2bYY-=O4gPQihJC+c}0F3AcXvf2Sc2Pu5-!B7JA z6O}NVHp4FjG8PFczae(OaokP)1MZk9joTOKG~!l1X`l9;8AC{({PK|hfs#fm47S*j zu1G-E@rKV}<-mN(OMXIB_lM(kNl?E@ExUHzAK-RnOsIq2uO)FGw^+2AG52atVB|4S#ja0U^~bn5q2pezA{gzpzHb*}Q-R62=#Esxi8Y)Ic$laV;7#%(ix zj2$4JFVB@BcAD(zD|K-F(*G2}Uuxvf~rWwo;lss^mDE_b-6G&yIf#h~Urz6K;)hfF^l){Cptn|cK?h@g6^ z)|TCz>y%3B-F%U(Vtzek7MztKj71GE$|Hed$*t6GC$x^;3ufLRO@0-du3SX?l9oNT z_9_$CF0A1k3J2~nT14$1!`;T-rOjl`iTRn{7p~w=MV^+^9dks1$~%^~3DaEc)wg1j zPN7ZJoOi_SUt%AeUY=PL4jZP~&U=1u2#GT9f2(UBfy)Ts8jH~$ljhN7SvoXAhTc5Q z7)FMIP-4-+e^3!irFJWx=@3~By>V4rh8}iQPIJO|H4FzeE#s0Jt!rx3)HU*iEz6T{ z*dxgY>z@DWaTJZa7?TV_Q4q*zbXWs`kXWDUX>E0#bGH1ra}7xC+C{;RzY$EB>H~Q( zA71B&>PHvhN->qJ_I}`rJ^2b==_Jc|Am|n_DhHswE&0jsXtn0?qb#~yRbz{H7skcg!yo>Q61Ev$! zNbIll67>0UFnTleXe<3Hp@wSP^EUNY!n3tUG*(3?fNqnqCE;kLAL5KSp-2oB8p>WA zvekSRBvqme(2_b57^%2Ns;)q4RWCP+ zj)mZ1d6)jICir}i-?41tzQa>lA6xbN^GU0rV1>VN^L%LrBiCdb=DLw~? z1W|3I!vMpOy&!=WJEB_}yhR?45R`w{BU=b_j+`l*!p9hW4OL{LcAje^Z?vePAHBt) zwJJalQt5}%>&zIvh>(@tC_sTjlx6X&J-Rg{d{R)3);%WZ2&HYC zI>I0L(6QO-`g|-*U{5XMNFicgxm5b=qzQXTP-C|D!;!Z&zeD?#P$XF%Z=faTLvr+Q zb$m=*3%y%8$|55!UWzlMeT6N^mem>+*>q%UJ&Ny-qB(VcI=LN&SQb=Wj-4f%-?dz7 zJdQPXW1{0BIf={|F;s$oG&VMzk^4Z^X)m=mk)A`s`pD!cy#H9iUsA%am|30UTN1s7 z*f!~@z!`u;fKvoB?vys8UD4B$YL`8BGJOrE*PQwb?6hoMR&L=#VCwsa?7 zG|+R+rz;=9-MKehK4EKKJ$PP>uhZ)(pg~_1)x8vT+Z>B%A;bol8k0cJAvtsiZtTE@|6R7X%xk z*)f(`Yz5zwdE_8t0$FBiR!|vPQCWiN?;$cBHeGCV^b(@OKjxNv#U3Y=sJIv~mv_ib z%NVW1Bb0mm*bs*@JDI>}QiI@rd&9!6cAO#YHf8bVa!7R3-D9X zy40PN3MxX{PaKBRIB6#^O_C1IV9Xx^L|56@6KA?%#8s5H>@nYX$|7n(5bGd%UeHQL zhsQSQUm>Q|hl_~2$CVUNS|>%SZG@q2X#U3t@;KfFJUvQ85&R?VEj@fB6vFpn;+tSD z+$Q#W3!qa~FIR0hy@-fAaBt1?y#%nCR#0tCBI{{81veXJiIlX(xa8KvoF;*MicpHN zRBLRmF!}*xG&|7zQt)25?y!;|$CD`cpxYHS0FHN_!>OF~7{V^jO?||JImvugzlOlN zQ|bM=_fv>{S)lYGD%ysrrQuOHyFJ~)ohV*}akX*%3*m*VBXx8d;nenS-0qi#RDgHD z=|yTR+JD%u^XL~(Xi-RT?UordeuB6sDA_jwd(GhfW4CBvIRces!L3zI1b=bExD~mc zwXw9{gsmiMV~?u`EQM-a--SG^J&5E+wG|GSaWEV&tq|tAh#p@f+eJXO;ptH^-Kb@N zWvXC`O*$(!MTacd8Y&RcS$ybp8MzH$$YWJGgtUnMp~4OV{X9Rg7Xh>7b=cEuJt*fO(?z%ZsUCX=46 zAgCdFawUM89F5zmUQ(P_Ukcu$exP3x;+G?&*}dZIBD6F1AZx6LM5Zf`)A>EUz1`tKGgHP?92! z#_>;RiD!!XLbf0FK*YJr?ri~r*^?{9Hg15uw;2bZ(C)zttOMAqV5mFyPWwLimInI9 zs)FgO@XBtV$w|wZ?vr#e2HBn9RB$K!KQN>f1&Au0xDVH7XBj~rIh65gsl*K00mZMi z1%pB=G`~ixBRCNAPs+`*n>fXBiAP#VAHn`RPo&1{QIwCQF>|Ua2us3H=1(C%$}$C;)+BL+&1tD`59PmhDb(qvD|@lrhHS@q)V`OF!_>Hq zJ5S<6|7I*okH|$s7t6IqVZ+TG2rE#_wT=z8q2s5C5I8&o3k60|Lu#Sj&-lc(^F* zb#Q#s)I}5%A>wM_{B0iI;uj63SE0;VhTrYBe=EVCG|{O(Ht*OF^+54b8vkTNWjR&9_v!2?gHN?ZGE$CmGh63aXfeS@ZD@4m&R$6Su zByKB}BQD_L``VbTq6nM~00s^Fy8#|(+tXom=q8QAX-Vw9WN@wq)5JF|bJRY@`UxY{ zL>D=>x`~R=H<@Gl1@$F_U1i&o_L6k!s8e1l6BGFXo1}nq0=@pkVTwsLA_WH~{-$6U zp`X~$N*O@|urlGz8#aR#up6391J_AIu_^L9Cm$ogxuS=obS)WN>j*V07l7<1@rw+I|m}C3J|VB?JZ8 zjxv57sl-2u6mHf6P!eTYkR3ib05>GM>b@Zf)0W2KhEJ1ANEOwl&vumH0Ie@LiU_?7 zU^n5+ZWyw*B|Rc93u-6hAzzpB2O&4#b&oTGo-Qd{@F4X;EC^U;xRyG`xr~#1(k8ok&8d zxv^Yxksz8Z<}AZUsg49!D(|P&l4g66F+8yT8fyFI2mXfjhz-wAkG4!B0g!b{7^+BE z>PEL;_!3azIhns?k5yusp)oc7q#o3#O-I{2K7|Jq8-C~YBl+RzURh^6fd2Z+|1gH< z%7c~{GcvCfiMU3DJ=GrLx*Zb**t9;bx?sf_G7jtR zc406~bTu;E2c5U3?bpH&le&4e@?68gAS`ymTvAjyXz0Uo9n!)Gv){~r`<$bp*f~az zw3h||V^BU>(&UfOE<-Zv$_F}Vy!ak{MCr~+<jWlUYZt)?p7951@znSt{BE2u)0*AcEc`6X9mCOL@;T@0DQ;EFz!Ht$Lp3Kjqyh2 zD)~$rgF4S85!3P)K@)2-YZhn)3BsGksZ#X{Sk%`U*gBbH8e+Cso%86i)^k3i1L zNq)fY^FT=w{3U-9Ucw>9?uIxTy1jq5SKo9YjZAB8+{|L=MegY;&+(tpg51eyTY~xo zxLfRgknP8_O6_}Dliqj1(W0>LxvhRg{LCuG*iVIIdMos%QyoE-Itae61e8Dm1gh=0 zs-4l!SL_V6yTU*EQ1qd)44p?J4>_|Yz1YL_Yy*IV-xC`H66G*Xmvy%?ELl4_Q_yu;2R3l)C9Z|a+Mz6Wgr&M+vbTL=4g zFTwvQ86t~+ur9}zxcOMg>~_*Cu|-n03?)K?o3Zh&qNnIwWW}DfZ$#G@s8U)h!Jjto zzZ}#MC_;MVY@?kNCjov_ak1hW17&67@ywKC1U{HruSz8tUa#QuDSs8AAA|0O{U;)# zVlVf3C6Z-pqLIGhh-ZW_L+Fvt7;$a?Y67rg<+#J~~fs4JE2%mREWowLsW?A-ojueYWpWE7?_vb}B} z19+w<2|UG|^gd92hJ;64JzAIbsU8t1J@ku>FW_W>O6A^iz^N53zN1}O_BDQ4>o(Is zW^TQLPL%CwKMMRxW^AyC6tLF{GF9M_ulvP~cT|Y>j+$e2XO}38GO2VBb z3YhYfxi<XGuMbR3H6zf*4_IK)UAS3u-z=;rP4P$k}?yW}rt7~`^?-q*5` zr?nS-tsY0X&KcWgHx^U`L+JN&&uR}+H`n%GN^C=!Pwn?n@;5hmkZgKs&GwX-sd@041A&zhV^T793+9wv*73=0F3mqTE@4E$e7r`K4#3;V7^ z(RvMhx%@|@Y9WjjW$Va;O1YxJGdQVEeo|m`qpJtgr z1=263wq^4&Vo;-U7L9>f1nMl9YNg5%E6@`Qjj=dl%U-Ib_dXHB{R>3mIB>}hcP{1L zN6-}2<2GGk%}u5$7b=xVWQ|!(zMtw>!tlY z@h?&FV@{%D@I4uek5SekTA_3Pbr8vM)yCd0!aImVoZlV16n&QBr>{}hT6%~OIGJ{i zU=Ff)*DC8YAD3J0ap&GODEh8=OFB0i(v_Q5du=BKR}lTrJ@8JU>=bRi%9$mfw#t}V za}9nl)ww49hX4|#tv5B+rD1KKd2A^BQTZE~d`$Yggo8r+t{=lz5H=E#_a~;qcvR)# zRPHwvM62#?()99eByF4J`JSMFwJ>qqA^LkJ>G3uD)&WT?kjY2%OpL*{2D2MF=zWUMWGI78=Y+OtNI$lgEaKvwlF^p?byFa71sK5uf28%1x#kXKg! zF3*EX28Ub!8-nPZbtK^F^lvg+q2~(?j|d)r;BMp71~G2@QcUF~GFa#utl<==6E5pl zsHWHP399%7RkpbCrq-SJm<012NcZR;@dg?K8>|9EWYOT_NL}sfZ;=e6Lf%3OikwDX z3;L$Uog&>hsml0pjK)MlZM{EhqOpkt1dG0HdFT6V1p6Adj^)HJ7(J&$$b!D8o`u8n z$VTDml5y6|naEPG#!}iRw+G??WZbSz=Z#+@`RpmsM2mn{j+Q)AV6w~j zuW%2NUubnmSC!07R5XNgQJJW3{+^zMoIA|@4cT;GCF-~CC%yGUz67{Y+afigy6)d>H~6YmwLqND@Z&cNTAG+dUi%S}exK2(ns)8#BaK6QVG zua!dzrnx8pAnt9KW(E<~B2YDaVH!M3h(^7wnfw%z#WV&#;bH*cQi8#okH9o@e&%^} zMA1c$^zR~dzb0cEff%OBM3w?WJ8o~lSCcdiMp@%DuT}Uu*yqjM_;EUXtv^>e)qn_= zq1o+!f_MPAhrV#Gy5n?xy@^gx!ahq<)1t`ail@qY*cHdA<$PX!m@F%w09OiGO}^MZ zBcL!Ck%(D$R5YqRi@Y|)RlmC90+dgY8NecC)!~fS7!NTtU&-3UC23vkH`?lbS59Jd zJwJ%b`4`?j>JNu~HMYJi+K(RV$KqRc%Sn&Gq2YTrDWza7 zY`@uS7TbP*G9hwB$x${bTid`IlxfK|Z|J zFmsDO*QcFTO(D{?Tw`bnDHrzUevzhzfvH+D>q+YP&lJg24UAN$;CM+7O^E0t%&2nW zfKs`OT0!A-QSj-am7qIMOzz&bz0!<1;;pLP^R1)=O% zU<QI7ZGPskA*L4$~!I81YWe>_Mg1WV_IBi57!zn4ro^VB^#Vw{eT6dLN*PeAFjxN{El8?N1&)s# z^~s!kmT<0GwJh=qJV3@e7w3O5_?4sF+$}!o1Pn)nXso^%A0n1*lOIPO`@4Q;j~Tvc zmZ#pI4eOYGm@P;_F8-{`Ub|d~XrTG&m2iqS6N8%K`5#^(Z9QvS^$a4hp|Mw8dwq7{ zV!gbzPH6rw78Or)2{;GAJ6m6HHz!es!jQ$KzaXF;QETWj5!q*4XC&Rl*3~|bKaKxbd&OD|-yG|9D&hl?V#$%&|E%`gpm(7&fmf{h_T97t*3s8lzeA(?ymV$NL zKe+Tu9ULb$Q1%lO73r!4rsX_*4_37}|7SV_N<8d2U0|CUO9;z9=AI`zJVqi}DFp0~ zZ6%?z1BfXLTm{jAh&A)Y?FH18Fj;Yf`^0r~{OEN9-y)D@=z4!8D=y(u`L=vAuNOOh zBJVpY#$q)E)%@T` zJ!Kbifl%3~Hk7wVQvsV%+joET6#rOQG*b7#vYfzY ziwV^6h^!_x5RudF8b(4mEOYV##VM@6ZFR6`=W}Wh$y?u!*+N{k=*jw5j}S96A-TDo zRC~Y$cY+7+g@iuMZw|K=^PSgSDYSk1L)|9A!Hog1U{((oSU&TGG{-UTo1|9zuH;8= zF**6ZYqZNKSBBZS#*EK(^R1S=9@KkPFP8>A<~U=1xlUIk!K=H{H2)(*En>O$9s@@s z{a{+&5kdMm?<*UP$*3WRWS1nV{1J;7TQ_su4B&id-ie5O zShR{_Y2_SnD9%((`Qo;r-13e`2+#bIs&nAo4`KKMf zaOL!3qwl-tQrad`CSsR5969~f75(i@NJCXtxNUg<*Bs-dgInbAoQF&4NcvI$t&?3A z=F+x?fOytMR5n?m;(`Q&KV8>)1?T|F@rsDyUHS>lO9m5v9{o>5H+M%OV+ri9>x9>B z$$6qOMW%P{kWd@4oBU_`E2>hAvu9*K^nfZUt)7}(g+{55#-p3U$J}3-pMGn5;_ot{ zIpbP*1tP$bianYW;AWuo6et!Y-V(L|(f@HUAh zh~b~^7WH=j7xwGP8vpa!kDxb84Au+s-$*8MOSgH&E41ZOEj)s0Ni%{clAtIC8V zGR))iKSYX|F2139;1Qm-Y2k+SV?7w4Ok1kzmQxU%_<1kUtr)_?E-I}er!|n^p`9Dx zq+a3em3;)?_gYWwkUt?v|9i@lqC^oQt@A2(p$y9e#I|&U*N_j)tEeJ5Xc!>a>?|Ss zr@d03)Dvagmi52Mgypy6r}RZlOh%84F{UfRX&<)q&zp^?078nn!F*YUwr<%D8SAv= z4+uehoZak7(te+=STB1OUlvyVL5vS^bHx(fwOreW%m$hV%Y*y|+mI~L6@v%m*+FfB z6EF~Z?Jtodc*m~%@9s7aq=FYlw3e5uvmi84ZAfcWW9I#-dC#^i7TAuh0a=)|3$y+d zEA7+vl`=DHR0g0nTt&eFx799)eRn$T%K9(Ic#|Gsp7|Pf(syhCSzS`9nOj^jz& z*eb41JE^!WnXd1`V492#Qm6om$UG*56N8Qi@)`L>Wv0X#Tbr0C-H<;EhCHl&Qdto+RNAFo%AI*40bhmjBknKB8}$=ou2j<}d;%GJvWZ*D3>_*}($+NT z0Ms25JUDCxGECEaVdt1D!dmOeF!mh&Q8uEvAQ>vn%2aTeN)JJ<{uQ1yIY>WoPhh8i zhm@7{YrJ1$IV0?qa%_nc$FUi{xSGFN`L72^~leJSPS@EQ93$}nboz{7Rqvw zxs!9hPKX0g?}^U7Q`qD{?GyFwzA z>V!&uEuyW7WQnE#QdTN>S*MyaKx=2v-ldM;rYGALzjZ&K-Fa1`%@QL(bczmiF1({ z22I|2{^#PIxTv&|`3(afVo~es7CPrUV%Higd&HOz8hSHZSBH!6lWDd2ai{{NJ!Jpx z$wCo0s=D(|=1ubGgT^Tepg~Q~Q+^a(O{4wVJ?95lpYK}%7!@{ zkT8wRaENPytMtAwlw-W^v+SDGVNCfUgpXZx11?YfN zcY^K{zr3G9N!WvkLUdK~w&gSZM1iq=zo`n}wqs;%4~7NWWuFO-2Z1ZYNTWx;bf*i! z1@p0}BLO4@T<-!wJ0T<#DW0ZO%mCtH;}{FN`AYdwkK70|2d~e4GFnqy1@h-E!KZZS zt?ELVjodKP6)2zBO+%wwjiIF*L_WKhu=1c~_(33prcHzNYYM&mM(dI>-ERFdtbWvj!lABpzGS5YU0A&-kMk7z zS;`zg)CCgZ4sL<_5Ks-3CwF9TbLd5QUChLJECUK1zf zNYR2~dmVRhlm>>IhrbKKN*oB!qC zulfN-%}Z+C%x#23`4r6Fc+YtUfU>H(@_E%e@ztvji>6g@Tk4IH1+gY4rI4Neb0b%S#f!*YG-ef) zB1bLqGkm2xjVIMPWIt`6vA_#Vgh;voJp)e4OH+xOBIiiY`7Ru!igmYD&VneU1Q@Dk zx>^hTTUM*WYMC-aqkZPXIs2!YKW>lap2)zT`5D6F<*H{l=A*A^HAQDWh`Op(YtvKe+c2FO-HvQ|J8-e-e45Lgk-dDORCdf$E}52U{1OS!UO7d z6SX!VgdLnH|uyrL<4M1Zd{yjm2~R=^*F$s zv}clj+?|B&{HMmMw(W?s(=7dAKJC8& z2fd!TDI0pEvTaF^bw>tn=gN9l1AnRJx2{O#!rBx+pu`5@!^B-R{*jg@W-w#z>^tR1 z4Fgshj_}EdioNU?MiN|#l9jvDkJJ8C394uG_&eK2y4Cz`xn4 zzhJlrMgYRn>72(ixfRT*+pf%17VMOD9da1zDgk z4oqM-GO4>nF?+*FKC@mf!0S}9UHd*gM}ioWGRw$SVGXp_r9a_RDZaJShIRcu(W{*9 zwEGbIVNdq%dI@wegn5kJs|OOcN^^yl=FC!eM9%ue5$3TXhT)Ii5Zq0&YiNvV3i8fj zj3;#iBsAbKqM7C)84lhk)$BoFS7gz5+1n8#)BTi)^ikD`kY6iyC|~cELZCo1a#kg8j7qPfjrCN|AEJgfuSg z1I3}THE^aAbuOh>a2yPShpq?nr5^LxPdg&f=MXxuw*fBX6kt_YYLn(R%A}o_cLFXG zGLlV#iK6O56qO3jHL{ArS#C@w9za(u!NN3+{vC><0zKK(qnKUT4kN8G>5Cco6X_-4 zdmXKKvxYT-NyAwg$E@D-X12>iyuhK{)MN*ATmQG)63*YbfrCpHuvxgAI+?jHXm<~t@$sYZ2s@-iIE#$hkQ z>RA5R-t_Jyavk-pksYCdeTb>%mxi91>6#Yk-0PtfrOxMlzYsysMj|K!*?6&{>a~>N zWOznqKHtuKk@!q2CuW|Z4lZ{W|ByvRu3s&fvY842&pG#=;VbJ_*!CrIJAEu5^J*2- za3~DFDw;ZP!yy@o@VJs__Lys5#QATKIF3v@Ec~nEuVf+(pM_w60AL3&kPoTg{*?7^yN^LBW8?eWd{KfQ;_Rm;Tfox!?4Y^{KM$PfIN%JiH4gh< z+Kksw@Mv$_8Zjj^y(77>4ndknWWSG zJj5qq!Vk;~*_a$@iujzn))~fG|6u{U0B2vAe@;G%$_G`w&aV6e1U-?-K9S@&>lHfp z!8H%T_V^d=#Z-j(D+EfZ2`IFQ?Vm~Y2;2~oR{vAILS&XI<5&Us#Nv*Ri2%onM~x@w zNFFtv@}0;jjAN;OgGE?4#_s%+CblBDoMngC46&dF#G{CpX&T)5nqLy7>n>ouI+~THoGP4sY2qo)I&DCY!b(4IW}#R zOGohE#BL7c$%HHytpXW^6L;WG_d2qg#jwUOFIRjH^Y4cB0v1%VQMp~<#b%;X&hPg* zV?-$+z>eKXVmPIWnfyPJSghhz{Dw>Q*lPb=gYo|yshfEXlvnNQ!^k^{%8%)7N4mNW z286L&K6C`Bp!1vJLeiYnhv=-&`cN`cilXCLuq;iYwSf~H(2dAl`d`X|dla&^vT<&b zqC7B17nn5LQiZ3w@D!$BEw=U?6rN7mTYgDsBP?A>jB?0<`pDF}si!1*;%GEEI{FYs z52mft0z?=dFPEP7-i@Ks$Yfnx2_8f0z@?B>%b3<_{|A{5DoQo1B5r#omT8D4Zl%8K z$v%@Kk4W{aOueZXwH@`5u^<~5{y197@gz29lwcw=lvS+PywD}!g?tujHclqt5)?P* zsiEG*lGy}v>`7SyOFg_@DD#vw{`I?p=04WLA)2RnE7gJ&0*PhHqQDCLeVkZ7{X-R+ zRZ;yW%M1r);M~0SYutX)2!G%5Y45~Be*wM4seT5kz%{kW{~Y`Lm#o?R$;bWX7&z>SL5koH}<|`G{HRX z>14c*oFGi}R;GCZrlgCW^pD3B-iUR_KI%hkYtj^O?24O}IMfo(ZPqn%Ku1Rcjv<0@ z*S-?=Io_hQXzS!sC5cP?t4c%R7af%)o^&mkPKRPoyQ;yAgdulctkD^$god@Ey(FY) z%ej(X#j--@roYw3KyQ5t+IIIqpOUtyb`mj)`8NJoCiE%Zj!#$RKC{6iI~>mndxk4) zo#@CXt0EgHG16R;9+lcT4%L%e2(8Tbe}pGA&fo4OrvdLTf6?SVu|bFYt@rsXGjbsB z+=`t-)QHEMT0Hv$F;N$&b?2Sc1Kp4?Ig*f5io#|(|K9FoF(f5Yn{(+rdL8C5)y)vZ zqsC4-f8@+0Zd8+(p7saiE;Z_^?79WOIl~1J-4FL?e))z?4E-$Hbk}m9#$frMadby} zBDrAI27x*Q$~<=V!DgvH6mo21-_=_l@ZQpcCN&xHE>tkGU7~QFvV=*Bz8|ll_(sUm z2}!Dz5IJ}&mr8_s{awLKn(TtT6+a&dq!ai@3nOYqxy9Ni|a+>a<3pSu>MoKReb=soc$5s|n0 zo_8iTx7=-n_eTgsgRvxR8D}$s*fVEj{U~oZG`KJ)5$EM7n}nOBdUs@Ac~yM^=u(6r zNdGNDBx`{=d$DoOb;d3ApCS?&wRZU@N}?6kTLq`kmvCx7dya*QLUOR_18F3pZaKB$ z?P0{>v3G@WvlPFr9OF3WCt)wD1Ll#HnS<=XR)^AV#|JncEkkD&qdisXellBU#aedv z{3pJzql6j~vdQr*8v)LM|E#u(TxQ{}-HbR?1~a+qsh`bu;Pu*KzD$0RDDmXUPnhyT zlV*S1k?@%>$csy^^N7N`gNCM|(I3=bMfB$?dtqOCXf7q@O?Y}Q*Rg{VJatiK{BJhN zxWw*(>l~6}SJnL(K7jwLo@@zQp@bZpFOTLgkl<{3D&AA8X!($6zu7gGeF&#{ss+3* zEy%grmO5vt06893B?&8MgW;Uz&vBWnfXB0rdH257O)}WN|BCdYnXV+Kq06#TX0i;(f+DhM&yv zy*}33%CcCR`EK^7-XjoW1;?b0asQVpyN}g3b#m`19Zi`uIKEOO%xFzi9db?Ay}X zmm=ASzZAE;2e|NYB^+L&ZV;tzWB8Q<)67o%k*2yo;1#O?*iz+9%NRoQc6QEG_g}DZ zmbP3G|Ck0hpEF%cNlWG<@O9af8!aTF9+@^;nS}Zr`&i!oP-r&lUBcdelni9%ALuQ% z_^u`=bH9d1YGKB<=CLUyVi1w<7lv9~XeH+Ye{LIQ)zlq}0p%6z1@(G*8#(wtqu;NF z_-j_@IloN*A4&o)>=Aw{-YMs!?2aL*or>K$;f-*$C+l$r0|8^ez#i_EAS?NhmpM!X zjO@5u6AlS*5!&^Uv3?j$jih;41jN6{UB=u7D7P-zepR_AOR~-{Nj3} znlxyh%&TmM5P5MDRJkl-TWKl1voomJQ`LFHjY5diz)|f<>Q@|NQ5=`cLD6JlUCb4& zhV(ZY&nCGDx1o&4tNJAdc_@FvD$4dieAGpMmNX3A)4w90n!=?kKIl`I7vWo+{TdmB zUAb-B4A&7(kQE+Av{4%MdQpo6o{6{lgms_-Ib6<4mYh`Dyri7%?Y(gi3nHrq z15eRWXJPgEarYo9y2N-p{D=s3^)T+KZted$u_QiucI?6GU;)PR#G1M^L3zhc=ZOg*wRUhPd_OqL<}qfWYpS<>S;^0cW_Et= zb=(Qc7U%PRs1V-cYwOg~n zNeN@9uaRYn$S7X6Ned#~qk+GJ-&LVEWqfy=JhK|t`shy%y-yI~83%gTcj|@LN>YW5d78GQF-sF`>jrv1KPKt^Sr_BXsR&_ILF6xpW(7uDXn*Vp#Il~QnpU`8vU|^OuGsacd z$^0ZpD0Ar3i%lq67VdvLH!A=SnRdaF1$n?oK+kG(KFn)jT)wbl8a=5N_Z0&LP-UA8 zb~5oMT1I@zTxmF1hQU@ora{Vf@MS^PGdTQGjpJ)gL_#Z)#!D3FD=6N&eo|WvOaa@n zjZ%wpWu<=A*s(jCNkIN^e>O5_lbg47I1Uf1=Gn#njvI}=a)X{A!hj(+;f(05;JGBuOLQ zUorMSJDe1KEaW{JDMAz+q>?DCX~mzkLuFf0eiu((C>K?wm^StA6Bm$6rk57ofPGj_ z>As{4fUB}T@_$142)?W5^1KHm*6UOzm^q|gWg0um8zQ9;?}?=PI5OtBGGXzfE?B*D zMn1Z)mZ+lf$KlW;&JmjGA-;82>8b}!D-oh(1n2GwL6A0CSv-=*#z*nDjCo9X;yHbT z|I(MCr_es_pG!q9RuvuJsYGN-Kje@V1fEUwdO05@#NqbZ)OiAnk2~4THS^I^)I!Wf zVZU$Y0{Yq-%;D1D4Nvh5H%`I(`&498dC;6n>Nd#?(XH0@E2X;`=+pV`O#Wte6M_vd zdRdF74z@kk=XfdMuC3HRKAiR{0{O78*)`oK5OGzelqjnwGl~6vPf@T@iUQ4_m@(K;0Z&tK@8V;B_4Pz?s$O_-GC5=SD)x(AOb>M zU!is=QGoTGlJJ+_>xBKToQW0>`H%r{Zp^I<=rJ^iQY20isN;0)wLh)nP^9UM9uJ)z z^4LoMyM3rgaraB+G??8bf1W-_O6q45au9+e2OCWz2|wJ2D5@Xzx2}*O2SLm*dH*N$ zA4$n)*uM9@%k!4QlQNTO>Bw*;X|&$>eenKT|BV4>2ys!l+w6^LD=4;Ed`{=!a%7c1 zg$xam)K@%~qsGI_8JZ;0xGzWyo-{x_#w|1Tm?SL9?R&b-k%RZ%EbfZr2F=`p#c2O5 z`#&T+3A6ulVvGdeMVx`lQNMvWvPV_>5nm3wsoYK)J+p=O-D&tF0Ui2B9c^ zh}5gA@P0jhCSTLUR9BwJFmtPAiwvLZx;eMU3<#Xhd)dZpU;0wmK9~3Voaa2x zbIx12d9b__n*vsgK&>?8GLNHN>YSgw8lrfqp-@yfgx{K{c_(R?7(8-eTZwBXf{4V< zE^&NAODE5)1X$2H9T(>Wn5f|B6ti03mM@hqStUo2)DEgvP)$RH8gGLUd7`q`)@hKzFyW#b_Z)-|%==Y7bDMmU~K5M~G7Hc1H+N zdZ|Rd|54M+x2rgggLoOG5?9YR{ayh5jvGf}G_(&2nUdq>IOn@L)8Vp!A`!*xA+bz`zpC64?Iq=PRagk;W)69Z3{9VP(VJ#X)l`{{1O)3E`|OA7x_Fd zFw6-%N}K1~oM9PiG=(GiBP}3r^Q#N<&R0Rk=$Y5MmpH>@QFnpQGJKfBEYFL=pW*Jd z_1v$NcpT;4DPQ#|QP2lEvVgioH%QyWvK9PIzD8Wq@~jJgV9Hsu5zA zI(X~BV8Dp1!lWkXbQ!f1Ytr19I27q^7n6!}N6b()Qz$bXxhkgN2x9?WDN~1k2fh|M z9+pz^$l^}i;n(3W#v4;(ekU5C%2i@(0*+&*3yPya>$1{Vi;BSujD>CSzFUeasWR(| zhqx+Fiq4`oH$T0N4LOwpaG`_B(XGu z%bdt)bD5^yUixDwxbrtxjfsIG4ZZQ@R=irL?>6T&<41ztTtTTi%i(Ipv;_x zo0Zm2&G4>4$D4ir*{6pJ@Rsf#dp!^=qR=vz9}Vn+?u5at`|na}xBQaX`hfD=wi_?c z%mC+XG%RG%KeTG+i%s6RjCk8nv1va7knczS9@51)!=s5J)a#+u6P!Ol!Z`Y$STy2G zA3F3`mw}?E3L4z|ab73L>)L0#3a}J7&aN;(hYVI@w!t6d}oJQlCl-8?S8;V|2dTV-50Q3RThMAf~1lVN8lUv+FzPQ8VlAzbjujN zyq&X|fIzV%Dja>cSr=xP?<5vIw0fF9a%i~YhO-%EcyirB=k0F9&I*RmeeN3teCLk- zLxwjKY-yzXxZR=@)9&`HS0eZv5u0K zqk1S~Z|!O+qO`-)mAt@I3`!5yZ(|>RifPR7jX)mB|li-<`+W2w*QiV zPr(b<$(~7iiAI**`z#x!fO)W@b4wRdz5(pa`XyT_AaE}nt!O8aF^ ze&3^NbLds*(u3i_`^w1EQ|0qA4c|-zutBXp0dzV zw(Ba8Dq~fW#V)2q@q&D!pWlng?oqzyGhRW@_WQ2Kst;lJRMzha@CJU=J(fOBHCv_V zM?s_k*x#rOs9r$)cGZqe9S5Q68ecXPK=O%q%}Kx3@IBU&&w?;w~(zn zgWDCK5-V-b_nE(*KtSCK@&@;6f)cjdliaMo^{|fv8HFpD!m=SC*ys0DOYs7eBeot{ zHj41Vi1)43q06d_v9GBI41icKnI3Wscir#Bbv{j$;O!+n#`a3wwdbSAnJF#fovQCu z-9h+zgCcasBV^|5E5BNX;2$43E9HIXk#T@hMJK}>)o1AKwoX_^YD~|zR;C7Gv1jJl z7fnDcjpc6rB;zu?KCoLVJHMpr%+-63--`#-RISWJ2yK+*##Tqy^JMY9X`$#e&}6wc zSy?ntO+7Ka2{mTCD~SJ+xepOM_;21#Z<^)0!)rePkn1l^NLet}jA^Af*!~GFw0VEu zd?|u37scLfyz~B`u)5ojvHIQ>+m`BEVKWJi`Kk}^e#Evj?B$MCpnuA?@h+1NZQHRU zSw^z6J;|g!eKY#8(SR_g(Wyptcdf{O?n>JN%~^w# z=}eYF8KfNl_k7a6RRIYn2*(}`WfP=YqzI;RvuedOjIzK{0Wtj*s?9=B6&gGHBuqbQ z+iu2k=bs3CoIbt@WNA{ZM)YPG8)BSkWnEWumBP8Tv6&xahR?f*{hI-WM_^Mzpv(g$ z63#?R-{^K|$YT9%7X;_dj-g%91p#Cg=R+R@7IlnFG5x^=QhQx-o@KQXffXB7thRvqaQE`kw&7VH zR1L=dQ;FM3YemL}?#Bj)=!Z+iU#G#x10a42U|;tE$jba0U5yvQl0FWj2Z&S2&f(~Ur*;oA3e zJRxFG=f3Y1-ovfb*h_Pq6iosd54z%DT<+tYP;DsA0YRfZ95da49+pA*{hljK;6Y(a z1=%(eWe+%;;uD~VesID|7lHCHYfewV5EJ-E%}n5@;AN?*P6kos23H-khCvKOXK6Pd z+?9e^y~SR25A0y7LlUoqnLsCmS$Gcxg~O#=;PVKSuiw`RMGqxb_1nYmV2-8bWYU)e zC0#$eW?DzczMPx%7wP1tl}@J_X*N%})U$8fSq%M2jk*0ZCi*3 zQ<(Jm+4p%!a>9YnMg|Z>YiEX@cG81sawkQCEvQlT8|%fuZtXnf!{+Mhkn!f|W0G2+!`fY-KyceC0M+2!lPbJ_0V_)c>B0?G8Vn5w#nh9p4KetofnIN;E*3r>=Ws zybxi`|Ki4?M0}?CmZ%RRfgS5>M*lLDp11BOZ<4Xxy-RV?eiFYTb@pVAuWAOaR7LAi zjs$BWE5#_{bdQ~Va&QJ7mFh*;?$J&F%|v-}JKhUNdEVW^N5pB$+PWo$47830>pe?xcTp+VDKWlmqqTxkCcnHvAl10W7n`}b969xhMNzDR8$v@Vbt&y6DVi?yd% z!AhdHHBUIxfyc#hbuO}ie}uueowOqq%x8EP@ae+0W1Ne+03XLcWoM_?_|t?U@AQo< zNo`h(W1_4=fkH~}+uLaLLk;ME!01b>FGHANC6Yon%@yR11%B~mWxwIylRmk(x>t?X zfjLqA;9cm#cwxt^)Z$6cKI`d(Qp3k&7UJLD)C=Y=R{0RyNXM0R`mRWhfRhB1N`F0r zaUF^BO9iniyeY@t!Y5?_Ec&;02KBnhqbQ!3OHBhh^E~muBD_NRlVJzxOxjY-54>FE zIz*6TnmWD?3Z9&4xTpIjv!iuBh#M zSt)EvOW1NzrE-Ui%SF9@2_8d5)ktAfqx7T)&`*E;`%i%R5|g zbCTt~bH`>z(!4kRp6)(XFYevGrcGpLeLi^XL^oD)VpE{=riz7xuFY5_^X80#WgQt< z63_%nq{Gm|Cu@e`Z2J#PO#2DU*de&ri=YaU!@UHLU?ekFCN`T92*(1gzYt{`DBWhQ zUr#lJa=l{?IkW{92gh|4@GX5u?@49cFr|R4yR8v!9YSxI*Wev53$8i6?!Pu3uB#yb zsc%LpZPd6v?LdcbviLI#SAnjASWf7J=24o8_>9ZgoDC_X`p?qzZvmkO{~gfUHZ~Gu z(vC@p)d!vA_rL zn{3sG1ll#P`(XVTHqX#a*!tQEEbQ*{<6W3slWenP=NPb*dT#b7G01$-p7IH=#u^CM zdV-y&Pyh$Q36weo+cKDFy=l1ISm)sE_9;w!%zAa@!6^bx#< zDly*g<$Dps7%V-wU6~%`cMZ=ZZeS{Vy9G?Y$hYv@Ef?sa+_L@_jDno~ZBvWPKq7OH zAhBg5{-;8;PuM0ys$e{lW~#xdrD>14J{d<9GuN<)xeL-ma*=n0ZkGXVR4LzVDciiR z7#n-OD4L*W`=XhaG`y+u^6@_d$;O&gD>oHfh0Ch1I_}(Gq!0hWmxc)@BC^ZPsyeRF_uo(MNTmc08 zzgA_~;K&M`7C7b`oY`Bc?9Tfl$LJ*Uz>`PrPudltd>!Z9@Ik9hCf46TFT*}NTwJP} zLVd+sCF|U@qlelgRu$x(PE+vi4l;1n7=Csh0Q_F%(ftriuPMG;$5}SZL8V;z!|~fm z=t=p3=knjY2NzxGJ#1avtRSFSnk%^>@1ERn&KI1O$bd`sdFr!KCWVygLW-dZDh)q* z8qp7+4tbSt?m%H~3hw>u^%(SUYR&b*B2Ynz;?v^mSZKlzuGjRyh`RhtvM$; z0NZ)wmB)mb-|qcG@~;B=f@%xXXL(&c{+2#6`lhH>2iuBTU8c*TwuxdHc_ETqu?}xM z{TfF6wGw1n?%?MqBrGTPXUoN_oebShSk*Y2pAZwh-}l2Qt^;W~D8V|X^#*>adBySa zTecY#MnZIi;5ubv$=u&?BkA`m3Qyoq{k;d=Ly&38M_e}yCTP`q-nku{sdD#xJeV<` zhkZA{xbb^h7?Km)8a1T9|DvduKxiNvh~fcuZJ75KZHo~N)RGe#S&Iy|z@vwkt!HDb zpE^AK%oKNWN8PHRdrb&k(JRFXPSkDJ^8d1oBL7Ot%n{Tho-3knNyw~V-0-PJP*;SmGH@!K;Q3%mu8BL2$Jn!O;M7==MwwMFb~q6CgYPz2l7Ej@~{>E-^n_C55U!*4pU2%mW~tBS zTK)|Lf6UTL$H{9T{H#3_AqI~;Ez@%~h`u7MXbefxoN%8bz$mwKM<|BU7U+qEI24LQ1orFeQGXJ?9*nm0S6`eS`7 zjSG?FJ{%1`JrCA+S#M!>A5lqXj>@MyupVJuV};_E(dmyfYP`WywTSIt*7Y$76HVO^ zm_%Fa4vksyM4MRk?89=`^T$x-{R5M9FmyDRR^5}}}T zH-6`OfJ=^NGd^w=zzXH-I84i3~HBTID}=7{hcFW~gR2b~=!rXUnaYu@F4+JR8e zAa8Z0iU>yvj(#wNN9`JN@J}kU0n?Zf1N!quK*6w>JU$UivATyIjNnIvGKv2dH+IC} zzY2bMB06OPy7G#9bs3Ox4});-Wqh~uY&ISnZH zIhJJq29!#e-SDGk#DiWdzhe;sD$r}6w|z)tExdRtlLqZSV8a4D8Bnny8=T$62H&a? zCh}aU-BtGZ{H#%|A?>Mwcg3U!%UJf>&3UkUZ%rtp%AsIo=>0T2Ql$5srdq;49fn;p z&o#V4ll<{82AT*QYF+4r4oS${9@{Z`2yro#AvAa*PoZT&&+RtMi~*Gx_@>TJfqJ7+ z=IgG%hP5=L+&l^t2_2bxLngJi<08x&L#TX*ADaAJJ6RiP<2Eh{E(pP!9ds%)`+c9E z+^Ye*l~-z!ugm>}zvPx;fmHMSHy7et%Wkcma8bf6OUs$I#p(pTtZGQQz6x1cX{uxx z7Z5+gw14`A1uw_rs0*GrhLzDPzNVzUs!ElwuqlCRe#_Jsf+rBk%FDIe*EGRFfU0T! z{Y+3|ejZyvK*wH~WD?Zg_VQbRyOn|8e9AEbbIP7;e@nLunJuO#hvt((+a3FeNLB4A zjc@`zaO`iBy6RyMsnH$HalWF#J61&vluO|@D{t96lJ+&x0OIzFQ7rM2k*ECMZ3h|H zzpU>Aa!w;I9g*~bk5LZl*rT&?vvUm=vAh!!k*L+f_h}I#;9Ke(U*ld&(+-VnbE4gF zaC?Sd0|LIg%_q{w6o-2)w8ZG6h!8Kf@CKi=3aNSX{!DTsl@?r#S+7Jt)!!cRTzX$> z@03K8LFP8$kC8&arL?XLjRhAF+~pm$t_J-B|HM38&D5Yi%(H|`{dzY+>M@kHqsctSn?3p_MuJyv*nVBFSLPP4B?ia@)v-NH;Z5M+U{2CG zeI~l9f~RH7q?qKmV|n}jGn7NUKCZRvCbfmVzTt%+OXq2KzcB=It$F`3#_M`;fkQ$3>Dpsac)gOH z^JWBNy(`iOf)l7mMY~9OK(~(*Q#ecQSVlo?ZBbK6}cln z8NtLs6q6-l9!0R|BI^R^%px?YNbUsK@eVtR>g+1KcK0HAii<8}s3PJ~=Vk0|gO*)C z4`nDr?R(+|VtuJbs4v!U21;m~s+F8#?t`eTTE#_+M%*1#N&6Z$ziOgp#O%`g%jAR^U_7#F93R^aKC7wIp$qOw^&89pT>Vtj+>QT(Y zRP=N^0AH!*nR_xI;J}~GS0(IMo?9ap#8?5M1yrOQO4lj3do zFVR|R$_ix)Qs#syiB_B^KJN2~4i3tW_FV~sIY=TtS6Mw6)s9Y_ZGKt{>Za+(#lLKQ znR@E^IoPshp?~i}l5fjdPdgqUL8&vt?Z>Ebw$gi=`jQ@dBPhYS+TIjNV^(f(dEaPI z`6^xyl_Y}qN8^g|y!%h=^uhNp2Nff~jPQRPe}!jy`96r9h0kMA0M7F;WH-_dz@(Bb=+7jhkL5cGnk=nL>>*`{+!U$ z0Qa0atY(vA6*LO=Z)usEQIob;9_^-#6UA2~x*(Fe?)9ZfiZGT_G6&Ty5N}`-ib0jKZea zgg!)@5#w7pDGrR~JXu}VttYOD`S@%e-jVsS(KesDyq7T!vQPYNQ+bYc610xK(E2L4 ze&1c`OKa(HF=Z0J7+)IIp{<-rkbVAdk71+^Hk)l}v5sswXH=Wpj;k=e!S#fq(pCd% zPNJ~>>^x1o+v~srJH>;squc^BN}2Cv9V;TLpqs4ky>$j*+MqZ$V;0rEeJ`F5W&u4z zCYSYVKuS9J6|f?ifr4q;FL070!mSz);NKV_7MTA zc@LIirH}TM{t*-~tkQX7?(xA4*}aW*xEiGX{Q6M*fTi{wabP?8&l=MP*5vv_qv{zR zSaBNpFRd#_x0#wsH0e9WzrnKG!#y8#8CF>06Ir9FZ;qm4=Z-Uc}q5x;KRm@ zmN0=EmPY%J!Erkfla1S^xMpFfgfMN(u#Xi`Nj(soe02@=D!U6N_+p^3F7FO+^jA9W zDT56l5ZrT2GdDj#&evRvtl$pfNA1&lRQ7KWn~!aGG*rRcXj<&!UJMct%9!bE0m{Pu zAlE;EJx3;!cHyJqf1z;5O^;LoT(~Z)#EQwOHv_d_Jkm4XIndW;C$~%cJ>u+t3^#v1n~m zN*QQVE^QM39Q;NQtc<*2)iKd=M2k6shla8AQ=OMQVJMn{mCvz3f}mT%J@hBFD3q0G z!%}`jI@UhUd=|ZX<~t_V1RgfSq>oN_<2x?)I7QU4(6~|&D~2VszaneZL=N#0zlwGD zfH2}RGBZR?AUWQi!D~fFm_j@6p9bPIGZf#scP64X-V}W4iOI+>UnYC44&43twuZje zkI^~qao$-Hl8trHl4Sjqn38MK?%-MEH#a!a5>h<))V$(wF6{TFjREN&kPl|iogSM+ zlVBL*(JesJo8%`J7;9j17rpN{U^IflNMpULn%aR7Eo{=Sf0n)&`tvfO13A0-VMqIp z>ObhVm#LO@RUyT!-EoIf3+%9wL&GSPM);%ZG4K#;m91~hhZ(uFDWPt3F}a!ss9gwlIx|H{Ws0*M*ekI@#aWL-hJfoxN)vFNcPMOM)1Y!=mZvb7R!z9q8 zpmja5T;p6TH={ltGX6U6GOV(20V-dMm}HDBINL?WO{mi?Fy6n4?!7kd;n|5Wr>a@W zLksR<4>%rC#m8V|MV5ibIGs1iVwl(Z@eu!98@~ONUYW(6y)FizN%z>`7yoc3tv0sM z-sPYo^ez0H*&{@Ok9|H7KhaGUe!{EHH-|n#%(kU+W6=~SN@ws5AnssU&Qicsg;4#t zy^;E$bGiJ4bC5xW?e2SnJy_atSF}B7%|qL1nw|;Sye4bEO0yY2TW$MjKBgA|k0kZp z;-N}ZR*Q@57>JZ8AMo|j5wh=C`EDGUSt=#-T-!zi@E4xny|3s(`o+u^Z7uiN%Tt{Ev|EH&i^Vr`l+^17Z&=6A8kk0e`hk_{1i2bIFE^hf z$jFgDVtE7W$DrWkn8BetSoPl@)ttwcbT72e?m?c`^FER41mN^D)$iyG_}D?2m+nPU ztdfR3WqHtMjymqAhk%>cjG5n}-fY!fMinKx-IilKKM}@obhJq8HdkR2_pOQ;){^ES zW0_N&m>|%`bzRRV_1gS?*o~wtJbS&=9;Np~tWs>4Px3v-WvsVT4@gi5gVu+0$>13| znjj@Yx3g46vttH=A5WiKsHcb2azs(Ap^*GD=Z8FmkA`^zqZws9>+}u8e^Ju`k{7Tz@2HnRUu=q#&5w%zrXKmf&Oe@p!&CeBK#!j}sb7-4w(gUEAiQr-x3JRN@4#8Z@TW|3v zi`jVEiCY~QAJ5Ua%Z_sVU^n4e^b4rQt=c!SsMQ}+H>!60dWJGG(vN62kgHPds9MUbLvLh=N%2hf;&e37mYruQnUGOHxXA$jDPv! z&UxOtm7X4aWGHW7_@Jk+@~GxH73%uwS5bM~w>q$AxC_%e z3_O+W+cwoHc!C@4H4PZ_|ixR!ijA||>aF~D_Lz=J-l z@t8l(G+-AEPCY3})POH(Ev{evJAjbXabr6BJjvzUjKekkp=d7Z5?%0_bWA08*VwZ0 zn7>(=@Yf_GP%8d?G8Z1mQIYQ8WZHAOX%8oMoBU|7hD#?+dzAVp?WNMRYWQonwkSu3 zBfT)!h&`3d@x#k4(2F8+Q1D{rM%V}AODSY_kH!(%ena_vaDxuu>qckMysaa3hqBPeTJCpD>mFv0M+9uJE#y$!!{r;JPX;ydC~`R%jO zM>uR0oI!&NPNplh`jdMsq@&ybfGD2AnkvF6F?zXsxf%qQSP-NiCv()h>;*ow8jdtf zJ-GnuJNciix4{RQD~wy8!LwEig6Drn^Ruk;HlOG%Ln$eeg>i@Zv=6(Ky0d7nlxOnB zmw|C++nvVEzX1JL8w7ifQJuq@V%yRZP8;x2d>qOuNYi0Qcb&zFt5%h-DXuphaf)TT zrt2g_eT#C9B2Wvnqf9cwNWm1-zM$)d`b?Bb1$tH)1KcIszLjElW5C!vAH;o2gmt(g zbtQr@`(*S@>{-<2yd*zdqGrXG4q~iY_}vRft_dcYi_wWp_IPJ~dVnfhMlO%B`4h)z zj9vkAnPw;Ty@u+7g=cBJ#^sEB>1j8H6jZqyk`nMmNuFc!Bm8nw-NmU@d{`HBia-f| zU}#R(js2LjA*nmk73T+N%Ckt9#S8Itb?3WXuqD+ttfWCWQr`dG&cO7f3Wq5qO-$J| zKjVH53BFdj0+qFmGgwK@=1}FnyTpS^?V3})QH$3btMu5~CfRQDQJzxNK}B4KZg`9s zR!73egC@FOlPp(ClNFQef>Pq0aJJhN8pEnT1=zY+YO&Aez^-P$zQXfFJHVM~*eWyV zX}XB&3F848esfiqFM9O02PwGH=pWdE1(`>J)(DNJaKX7$;c!vUh| z>|3HbQlV0nD~c4Mm6SSJ3ljg|Gu0sKrfE=uxq|P^NX)}4FNyvWJ_Ciw4j#{ir#t?( z(iCXGoESfG0u5DbUNUMU6*Zr`zHT1#RkEeLuRcX_$J?mIdU zya!H8J>`e1*n@2`|CXQOz?b9hT{nPNrLh+tE5~pyea(#+YUN@Nvg6vf zQ7?t7$0JW)O+h+zjSB-nhoS^gnRJ$Yqx{6O!>VzV$Zkc``-NCa3WKyV>|Y7=F5!uY z&q=w|*94fRQ9HRh>C1H-%wp1U$2Yd1&TVTd9@e4Sz<8|B3pN3@o`^3ROt`?4p$gkw z^c14A$T+-@yH4b&=!hS}k%YzKQ}qKsB6@i+d5~Hr+jSAeOse13tB=799d5iMQryMq zX~A+st_QrTM=(TIl z1vrPyv8eawWeW~CNeAetSo5+C2sn@_t(F+#jKH_{3yl9$ z1gR&zcdjm#sTmT{yvoyVDQvF7CjN6>^sS7d9LqS&tI1vGGixB3faM=6y$r@YK3aP| z^dbgj5ts2X#ZTYQUoV`bwe`@Cz8;%G-_;A43emJ^WtPm{DbpZ;iHr00`EQi z%-7)d3pU8TuX{+0;J(vsBo-=fpRvZUROG00`0iFk+5h+)L5gF$bGaK$x9YI32X{YB z5~riJl6l)Oj&BL^k2pobUWV+aAkQe`Hrvd)z^BA^mpZT6 zn99iNjLf?};Fryn#!p18aN@?TwVIju+?w=%2OjsKbi#2R(5Dt}*W{^L|8tLGg9JW( zZ@n(fI$R?g`Z1vg|DaZX#^v3(K20I?G^Wc)aG9*DI=EGVbuP z9bQ6SyPiyyymkans&Sh1=d-u)tJMPx)O;o!h(?3H(Xy;=um=_BY>Tz$wy*GQ4TZjm!#^9%@M0%>`8AVy zz>ocC{B;$MQzdA8i&-&B@2Bn!Zv#N5KIc%*7T81rlll*_c9JiJzuNlEEj|*)*{6k{ zo(#{Xxofj>#H2wqMh5n*pFG5LV{S(z(X1UB#{?Sj6xy4EbGuL=2kcV3t3=krmAFxNs zk_Xkd+n2r}s3_4ma9j4Tc91v~L%rTbiLNmbZ)^ zXVOHOWRKk766}wop+9-jw0s(Mq?%U2*Wr_UGP(YnZ!i$=iq5vb?6n{7xu)=?p6!L( zXjfiV7_dr;Tu+plXGe38o%D<&LG!J?v(khWwq3~ zo1S5P^)C7A^WKng(H89HC@*H6!?j`({9a!NFi)Q4xac6}b=J5XinK*>HP|-nkznEH zxWeHnJMxy((5xFa@oy4@SBt}cSc0fr-omImHL2K5i*e-RdKvv|6^7+S7ioiQT3spL zi7Yd2+-yuuFeIOiNHXFMZN2VH6H0>a(Uo?^$l1cL5EIZr_r~ z)0Mb?m*VN_(M9l6`hTTvZML3bb zv5rS=NDQGzH|(6M6nO25lOg>QXReU{|a&6tU0Gcl% zyK5Y?3ZX1S>zWLF;Cim9v}s{7_@omv+c2ZUr-6ml7e8u=-`xTD?U=Ze z)QyGadP3A9v0+Y`w(fo#gYc$%&iv=iW5infn6yIWHdQ4#y$We{8@%Tf7uEVrU|Cg@8*L@9S(9o zV+Jo>wWD{96YB<}dv*V9#}(D6E=7_WkXQGUW%)ffW|wZQJNhcA4N0!wcsmlE@KW#` zg1xi~Gdvr){s8%T!f5t1Br4=onQnlbzzzBrY0R%mIT3SSi6`q9GIoTfD-U|=l1ZAa z(Cb4^t(>&Zv7VAQms$kx$(SvDE!+&|r0hXIp-V8$lu@2Otf^J4>;9}Xus@Tap;m|@RfbXEYd-dyRh3e)_d zL5TkC^`bdzi83GUj}*_v^VRyvX?aY+*z5njhmhlFKXpQa#mrS(I!e_@CSt8)#B#W9 zI<;>`%;=y-iPFBRAB3o5E!?4Z{$Gaio6m>EDVO(;;iF;Po}*S7Jq&9^`&&*O4z3bS zcv>EWfmyJ;eD*;nff+~g-%+qyVT#gGVXB7q!EwR!J-t|+zE6o0&{gKh(?v8!0-RRY zq;#WhaCap2mK0$tbu3lNX`HD3UiZx!pw-I2XNtGM;N_QXI$_)p2O(J8D7J@7AhPwTIRM8%NdqWGJEdvHps3wBR3tWQLOJD+or~{K4-CU(XYZ zcB+Cp z+T6z9xxj@9y+uaDztJ|Bkzptpze*#3g$dSYL&)z@Sb0X9h%fG%?eZBTT}Iuv?&xf+ zsV0`PUqV9#q`OQH=J5JsNV92;8Us;_VQ`*yltb+g3O6ScWZTp6@!2nF_THWtR<9CV zm-$ZmdjU1%QS3>V3my{VcN}28{G+a}6lAUXTf}z*+Ts!%1UKukfly!hyvxeDgJer3Y0j{T5)3cBM~i zr6CDHHM!Q?GXp2KIMjx>uKOTk8-)*=pOP8?=!}o>W0X)9hoS=PF*+!(rJ|vqd@*qo zO8Fl59V9hYwSQBy?FFZKLiqC(iSQ*TibY~3bsP4IPcl^5(~$ojOL==J7Os%y&wWeC zvY=8j1tKam(!U*Y{te6(y+esQ_2rYz z3%X$N%xg-Rkm43ONoTK2p+9x6UAcwluSri@#zwQm(XEa{vJRvX_rkH$vukixOEc2=mSSz6KQ(vo?DbE^s96WOFed^!<;BtyGs zq#Mf!^XYd^q2YhKrD4Cg+ zGU*@5^JE}vT*>{^o{I&~Hg)<|E3n{0AHQ0Oe$UP_?K#%h0QS;N7F#;CS_BsxZI$)l zvEWi!#Q6WgNbhtNT45&@a3@aJ^Ff@T>#C$kO5$7CqL!Dbwkxaut+Sq7kF`R}8j6s$ zZ0l>}6b+8D+{Cp*eK?X$imusMOA)}3*P+a5>pH9 zcaFv>7Bx)8V@@w=8R#rjpvQWXd}lBT-pTRou+Q5;J+?n4>yslfa!rZMExGu$!MP`v zoc9LjEYKR$b}s`Gw`HUzPnJ_|%Tfuov`R*%ZL|Lkq~l!De)0P*G$J{dSmXQekcf0# z@iQOOvmqfigrJ|G{jo%!JGgAAHsb)CbDF?_K~6L+EREE9c^GM1CwR{p=LKr8uN&`@2O?f)L{K`qWmb_iAnEWZbWS!dkie~tz%2o7+YY7Vtc zQ3gDaCz?^f%py-6jjEPvOFWIBV_bi0E-feJ2fbWZ?V#tucGo>$(uFITPaZ+oHJ7-rdTrL>FWCmJ+>FZJF)Mm-8mSPWL7V4MDDbpZd8h@m zxjW)6TMyhccERhlK$0;mr&vW6l>9;!J<^E6P^t1C{S0U`*mqMN zMS&((b5aXdZIk#w0qXZsj-VfvWn z<=7Oxn+BACf8}+n#cnM=UYqXa?xnLGI%RR27vozpG`AD`FnM51K3cgah^D6waf&Zv zv&5|(JR4eqe{kErGPlYi_yCT&hnd@X7V2E6QFVlj!5iA4{6e#xgZpu}^Q1Bl;)G>~{%aNvX)zyV zj75?Gu3*8IjcO7rUzDuic2K+xYP>aRoifx<6?judEkkdk1RsyU!BvfduoK4{ylOT0 zS;r^8`reOQOY>Fq31mZ(E_(s(0BFWA4|W>-P4T$KYIg^$pJt`N(kp=Iq?cB&r}2UP z%T7+Kq3G+| z*YLax8@EOHPLeQ+ZZ-pCvAKwu-8L1B80SDpuJL0W-NuOg2SX0c*N#P8orgHBzEf#< z#d4DPy(1MD$*CwF?+QBwq2}(g#eQH%5b#8ctN~aUXBIFo^YN`PU}lJEq725;)nIaSpA{ZDVF^ek75SH}%5Kz9YWsr0gd#A;T$f95&lfy@LJI2&?QdIh<~R!l zs(I0${-bnKLO&GN)g-(OUKKIcracAdBiCf6LM?rPJK)p2pteK~>VJ zn>(@%KcHB?E36$a&BPg9ei`g3B=gP~9w8Q;$bWD?2nNXrb0xZfYvTU?(f`4HtbV<( zf5=o8d=QP(G#_DLGh72bb^5O`(xC3#q*>s=_OVtscfU$f!47k=PO(jZ%z@6>jG zND#Jp1?#?&T4s8i?|=E%N*I=GA0_N(y^Jqt&&kT`cObZ3W7ZCJ$RfdI3x}kV@G%&e zGd#lU9j5|;_I>tcC1RaQr+pmpivYI8ev2fv1P>RoEZ4sQ+goFwANo8#4t3lcd8DDg zJMmgMmxjg%k1d%T?jk#>y9w%CJ$51H9N?*6_C?`w@;jDpeefv<#xT9qUD1zGOc^ZC z?>LZNO9W3i!02SlS4CWwgo?%tO;w`co&T= zkv>Oeo6(7au3ER)9*?zd`(*J)NN1puJz5+~q0p+9Y{f7RoV%cjMKeAQCQT8gfHTDa z4>OY>@O(AD1|u0g+G0PN@2MU3jflkAR5e-mSNUTjgO6k_=wAlo412lkJ=3qWJoeIXEgJFOQG2f(wbChk^?2+w*hjRe~3er?ua(v zg%x_`maG*6@7k7*hff&5LrR;^i<ivb!1Q`ApTuSY}L(6$3Q zDFW8KX1f9?t9Y%X5x^G>jf$QL>@im<4k|gw#w!yqWcIJAVxOw0Gdhf{PyHch)D<%AX|?&hej*dJYn;03x$cPZN8BD?O~-N<>3@(L`)F zglF`K=t4(p$lE4%-@)XfQyjKZPIM;YM1?RG1ei*l^MzmUE+p#WZIQhKYzqg|o(7^L zTw7F-?L?<}8&{Yp1jI)Vt48B$eV!W2SJwK8Zp@>R ziC(tJDbt0L>*?8`LW*oxZSNPs71Q4wVwj=BKa9=d35o#BDm?z1wKOmZqmv z)cKnS@s!&)2~yUj_v3v{FYXo6)PZcb-{0Y|Y~rwi^f#@YR8wdr>A{$Pt;yqVXTy!) z+*9G=Bew17xWTz3gwWoY?YYZE$a3A)U#tc|#JJfxH8Fq}{9j!c(jaVZ>dX-|p{jCu zIc8yPlu8yEPO_f^a8&hf*s~I^LC}~`huTMB(KI_Tq`;o9Yi|a*!S@6h#)zjdZW{=o z5l{@1m$&6St)_suye48SH$|~oG+E^gXYVus;l9@5f zqTU@HF*%zdB?94u3dTX^<0*$JN>7V_TJ$bO;~@hL4J_dPz^JJWq}g1#32N*oUgY08 zKb#(bA)q%he#=~iYV5}w^;U#2rC#IBUyGaKMO9u^kQXs1<*t_!ME&?Qjo|YRa;EO7 ztbZ$>nqw-IViE1NGLK99IBlsz!taUZE0w&DvqT_97N%w97NROsZUQ+uid`yM#(F|Y z!`hxISV@a)OI?GE$P$ayh}FswKc;G!9MrMUUByS?YLY8L&b_Jll+L`%{7)ks+rgfd z>{o_RUS()JDYGydB)<45C*O=6)wk+uyaa;+j0aQZYN$o;AgeZp2u07aWMOp|;;1b3 z9Q(^!Ab$CEVf^59&|ZT5j?Dm$Rb3FoivfbIOtUla22jwnt3UJ8bfzm zR?8=6Oe%AmdN7G0nzc_+@1sNCt4lGVIXFo>K4xc=eO;5~&Yn*=@LH&{yACO@Iq8Rj zZx!(TRGQ77#Nbm+8_k={phFan|J)-EE!Jn6&!eDH(4bH#qr>Nd8CO{4L?nvT7Qena z6xfWpLygoIbVrhqx%BQLY!jd20YL~?is_b)hb)vFjV}e74q%~Zl+7!!(_pz6dgiWy z5RrCRleO0ecdSF3soDTMo^bf+{rNbNbEGtNEsr=J-97ZRb3C1nqb97J0`|Z1*-Emz zM&+1ZrvClQ{CE|!nDoP_C5T?FFhzXmgIff@*#y+TI&Jv!? zbknAq2rgkZ5<>f=-K0V_jnR(QfG#dHWk+uZaU9U(8>k{ZI?eN|1)REjp?j8VFJeL8 zF7GWVq+ z2BUGngA4J0y69($*ZMUlGA8Lgqf#R{F6jcCEoT-qqQYc<>oXg(4AE&u|c*H>;U&o7xN0Xa-+pab8$l%g5BAaej*OG@GV;ye+!~IT&^~ zbfd7Z~3nT9_F94mghv%74cSV>x#btm#;Ak$@jbUF{7EH9= zeHeV9u)i?GnSh`tW(D)$(XbrN(4WNxi%)O$+ejyr3~r3pp)sai3gO@6q5o-cG;#5s zGh2M6{kzEkG2)&kmz+%|E86`_m!&w{$unrZEbj+Qt?_BKgpz5&5it;cH48B+vVKPk z&8(P&fp(wnN|~@_WgUQ8r);4v1W!MhJMnKGmW_Vdo;4UQP-ALoRXSLGl~H2T#n*T5 zCaV?K`>%ztnl$RKt2TWDyx^(3;c+yMb1**R*{UAy2Kfo&nHOLn(l0wHzw@P)y3!v1 z>r=S4SVE2Kvmd|^C`O)Bq-=bzuUgBUo*Om_15{OM{QU}cr^Hg5Q6foIUp8#tjZCC_ujd5k6^L4) z3ppXjMn37Qj&Z#Zc@E@jhwvFRqN&e%jRn36ADdabKEVcxnWKA7K6E)Rt~@+zfBjRb zkKTlUl73ZrdR@BlpEoy^~D zLsM~@fhz;@hw*C81=2qe$_nKvYu2Is0XX8(FD`0Nt)`$M2X3TE&B2-drHVK_Vc$jco? z_I+EPhS4_d(e$KQA0iNPU$c15r2V&QWR0J~90AZFImC`>LaRW9W9T<@Z)-X<759XakB50icv_XZE_Ep#vdK z1#n{S^;ORnpWQ>#OG0(GJ_3m_xIG~2nFVvk2Xi-_|M<6sKnA*om32oD)Wc=nuMX{O z=&vqlYE2~1fLbSZlSv^v`2}9~Tko#Mn<~@Zow+|%{b1VGgj`tXEOE}2T&)Ro%g6w8 z{_+J8ebtP{DSKw%U=5k=w&d#az1S;Xve~*8#Geeyndetwc5F{(p?Hx$LR50i^Go5< z6GqoA#G!F5mZFT1%nxqA-Qnsfbierm-kPw7J+J#TJNoSOO>!*3+*|+hs?%sT)ok|< zb1^ZXOl$4&|Lp_fBn?G-UP9&)eYMXCJe8AvDq0A}sec9YtmT6cxL>0MhQe*T&te;i zlIG4us10mipu4pbrb5S^qE^e?4U>{?*e5~WAn9cR!p}%}QZRM@$vujU@bEIjFu4{C z)4aN_9Eaa7SUo!X>Zicm-q-BO3t;<=8g?3@kH3>p2Q$#4SNCD4WY-MVKQr%A_vwT1 z{#+1<86bO(vv-NF3)1w_+^Z+K_NzQRBzZewKcljLGgS=STv+v~8B z4ssal00lEV*G&BY3kOxVAHEDN%Mhaa^fJJTxF_QBdOYT^oJDIvE9+ajCTd>St}U-g zU-sK~$ZPr*_ZRO2+NCaLWgiKE7?SdhJ@Jq8WK*c#wTR;6QjKxt5VCK?wCWEp6NhN1 z3EzUv&{9-8*!fg?)kyoy<%_YN{H*7^3;vI!>yB&k`rfr_sSB!>FH!_t6f4%Kv}GrC z;%LPktw3rWI9jHWnMA7y$Wjqe8Bx(9qEJPP%%~uUNFvHm84&^m2oORDA^Z1Se}9$w z3FLk6J@?#mp7WgNWT((Q(k_*iUN}qUGR-g;Bx&BcF5<_+^k0B-x6&MJA+6*@@%LpO zB=)1@ZzEk^IYB@B{do|zIr+2tR04&rix&OrX;nOFW(<1F2|djINN9 zH55FK`v^LLfX8!~{1q;M!!fBUJzgk$RJG6Nq6IQ}cU9Mq4+Jpm(i?2XJltS$%6V2D zMaGzbrYuOl{OR2D>#uA>4g0#~g_*c{UDsKA+o6si)@%)?!~mGpV$6z_ON7<8*c;bPFL1QBhsJwh8qr-j={KOvmJ+a zZm%Z%4_bD!oMd2vk@efRKwMk<+z7^R3xJ8rO5tloC(Q|9ZB|t~C_cMJ{fqU>(W~{4MIuK?4bj^Jj-7NGJ z=1Y?;;}FfszVX=>@G|6{-AG!_-_F`mF9&D0z1UFNdu#2qWDteTDW1pd0N;rtCeYrm zJ4g;k&<(<6daqNTbKMPYoX+!L5mvnUgs-OusRm8BKJ&lN=V^~WcBUx)B>--QS#;2E z(;)!EGJoB*Rt0$0*N_@fFu5RPk_M@Z;HOKo8H;5$H?vDj9mdwLXsR@W2}GceG-y5;K8>`o&rbM zw8i7d1h8fWQ~cC1cad@;oEmrUYZN3@5zj0G^`r;-v~$AtwHUh1oL0S^@bi3bZ91a+ zWcuK^bn3#=+}p$VDmdGAV5LfhlcnUGvg1Uql$&P{eC zjrBXeUjjGXea*C7F+9a8VS{TWGF&C)N}|l_#^)=8jDw_0%QmIS)JT0=#Z6xP)fh!pyY!cb}j} zS28q@)5)xKIqvFn%#&23e{0&eCZj~%>fZfe-tP#45+WmxE}CYZ7rKhCSo<075J?pG zAR04KSn=L{5}6CruJSN?KU&9bYTxW!d`Xg9_IzwDQK+DVCFYx+?m50s zcUPei7@}`=2O`0nu8_Rgws9elGt1sTI0ZLmX7p+3K4LbgQHA0ic5c{wFSGJcWMC~@ zLYvyGGwu{E9_I75Uq%e9_cTs4eUK{gOahX8DpS(oCqFP$w)JpLNLK<|KJ*HB zF0aqzmq}}I(FGr*G3;>2rE>kPEVTX!m6HmpCU@b6mINQo#u*aN@oSlUwDKtXE6%Dv zP!R5OzP<0kJVz8^!acHp*ntCPy?>%R*_UaJk4#(Ql>bSS_5URU>1?>Zo6)N?r|6Se z*&_(ugQ>#a@I%kT3J0UuDam}a;tSj>Jhm1JLK+S{?R~VIbQAA<;l57$C6A@C*mwig z?N>hPsdo+$xO;1qO*S&5eHweUAIb&lhH}!D(9b)i{hRP9$|(91=MgMYn9q7%dlCrS zP}X8F zu6{LZR-UI)w9YN1A||laWH|W(f^AG%7;d#WxU_Ab@?Npc8xVSqwYp_QBX*;f?~r3+ z$zbR?*N_)hadg8==MAKLw>V+`B}CB7-CaEdzlS=#j2JN{f2b_w3S>&w6?yhF)Kg?R z40SCzMV)3}=)PQF4-K@^3n@!>N6LPqugjp9Vr5gOq(|djE4e&bAJ9l&>Kf|hCi6UI zWc|drbGv5csh)~j*jtbZnJyVwG`Dl9x7JRw+cO3TEN3`|Wek??+#=uVsiffw1#yTJ zV1CkU(>yXXXk0@4O=xruB)L4xCeP=f{PWH^0*c-lX&Qw;Y~p=WuUWSe8xnMil8oFo zr`TSwBqmz+Ppzh`Q2Lc9-e>2ts6e#(le189$`)1yW5)6+G^y`ObSM#UmY2 z2))VE3LhDI=b-;LL7X-t1CEJR=4-c^-~-~U1zfm6j~Q9I$XBCUyC%!xtDo`!PW8SG zZArq6qLss+x8VYl9J_6jd>OP(&)p+!GX&2tW+9gAw6bzv33On8-taTBe9N&f{TQEn z7Y^2orrLEQxGCx>mxBzL!7Z*rX$2CmHgZFpM%IW})161PXS{ zYj(z$;K(=lwTzXMrixnGMl{8PZy@f{qo%<+*=uAw&XFAd=)58dE+3<2s^=&C!a^84 z>Eu$}_I_O2@82Q@D%>>`x?ukq;U@OepmP;i=24r|E-4URLwC35#Ne|iIu15@^kdF( z;Pn{IdOl2V(?kX30^}~5xDj>xhSJD6=#03o10_LADVj6s5`qo)WO-&qJ@~z&!uEH0 z40KP?hnKF>PetvDqUfIS2jU~z`j$OgA*wrOF?_!j@@DAYpsg72Myj_@Ca+z9no!~F zMACm9UtrH!kc}tQr-U`kUwx=DwaiHvTz}(?kg8N2GAA3qFM^b%M)<7344?|($N@%5AQjZg$fqs(Gc3Qo3fyNC*$2Xe(@ zJUf74{id!Sq8Z3jyysB$_we9?|{ zZBNu-(nZY4J{mTxNw}fjZ@M$%Lub)UBk#4(5CIAKa2Y1T31{bl(W3{R|r#N&yFT{;^cLon>}L|DxbMS zvE!{Tm;j33XLzt==gyato6Y7UR6p4JzTn>%8f>!Qus z(?zOP4omu`DK0+v?Vje0NgkO>u3u1cz=uR(-5(9>Ho#vwAL@9Mdky?!HMdI97?|td z+U37tEvevr?x|$ta__$>_THKp+;E2jUYPs^%FJBXkA0nn90e|TmVySN}U$@_k~-*0u7UmGXl;aNRx8pKTRHmjWFWVec-T+ zZ53uDcns7SNawo?mqw$J$rwl+E7HE^hXpWZpJ7LYT2;n!6cGW>rwd%$t}%C=Qaifs zEp?P@{KH9EAk}1z;9BdKK(Gv{?6qP4*?9(!Rc?$#sF7L|u>LYo_EK}jmmY2drn#EG zXC93NA~}}SxyUu0 zr1G@N_qY%^|FAb}5T~nHeRmcBbkAj7l7D1+xCKuA*m(%t1TIIjW|MbZu&%e%Mg(q= z{%w}P5>h&akyS!cVRToX*!Cf*7u(M~R?E8J)n4?rY5o;RD|Y>Hzl`nnU7mkyt^0z{ z(PYx6{E%MfYAN!I2z^*?hYFM0bX6DBNgGY6{%u;+pzOI$DeHeCC5a8;UDZHlS^Cm@ zkC7XOxH#{(hw0bEsI?K3((uDvr=FZQFRJmakA<%=4+2#Ty)PfY&pk?bc8bG{1KT_4 zE;W!=VEb7ABm#yZx5 z@dz!{n!}Os-uaqmnOjjCuVb}u4wdvLOW1ve%PYRbw;ib+Ivqa&W|=p%H}2;dkw4LH zGlCu7JbuZf=VfRt;uq+D(M1!(7_f-VtzPE^HzV*5bVZJWDtcMg1zz1o=t7)M2gb@n z2i5jF;IJu6v-6kEKiBh6<=e-5wGa`h_sFEY@^!+g{Dc2|N4%w(v`VrzxgmDR zu*Z}I*w zo-Q6AwxHvZ&+_R9XS!Nn&tLv_IzB_u?S6%(S=8=A($6A^z9JZ^xUe4JsatsgZ$S_) z%(TjJ%2%&qchBfgE^%)<{J=GW!S<^JZ>9rt?=vdE#qwUZ#1!l}#-n{%R#?{5<{?_} zJITREBewT#c?bX5`FJodt$hDKv!pgzTU!4S9R4p>I>ke97M-T$e_b1_jsrwi?8kRZ z>a~|tg`O<>%ngZdJY!2i4{DjdmOn&z*-wO#csm}xFat$S-inMDzxaNNE|jn8q2@0U zn@j?UIY-HEzj@{UkD6X~g{o%ix(82yD2wY<;Dxdl8moK9!t?Ks{+P7wuQLU^Tg%xy zM6FkZ@J&T2%mw*>UfP|zn00si92DuSCp+dYnt;M?iHEl!ZY%na_H~t~n)@{tM_5Sa z04=w=R3d--i+XaCWp0z8=oF+>S?u~Ps3S4*_epl(15#7XrrcB=ip+vffVA=GeaT*w zVt4|oh0SN89h`}N+n)K44Q$*rzvWK@=ssyib+;@|!j1TruS!3^A@0uN8%p+FSAy=d ziynQo8MG|n&$idlLTDKt$rr9e#vVAp?zMl+Mrs-LIrX}9?wuK289C~|}7A-RRhXKnd#yK*mz z|Jkc1{<*^~a7r)tkAujY>vZb#u4w+!H*A&O`5PXsaCRI$vNP{ama8Fj?fK^+@r>`a zJ4_L%TW~vFZv{fn6WZt28@hG@rmaBv5-QZC*y+Gp9xF@>WKK zVCGRQ8#CHx?cwaRTREbSx|~1vmtbOvb@g_1q|vrGoX@*>H-$<6-;awg5b@T2!MGX-SieSE&C?<7=?pO^U9Qw5Er$ucjr0W07 zsL|y7_b9{C@+yIK6iEWZdyeO=LHI34k1uh(7aNwFuxNLBq+UE4{p%NS18Tqd5`4YL zV(4$J_m&k$x!I}yrK@k7k!#8G) z(ui71gWoO>pXV!bX3Qw?sHzU9FIzwfT7LonUx=}==4@Qfjv3kWE&LWuM=};Xx_i>!mHmJ>r3{DmLKaHj&Xlh}x&Kr>1Z^_!mJ*+BUN-JQgD9s^fXZgH#k!uita z7YGhKKfB|5j%LfEQ>6Hm>F3cEyJJx!{{Nafw3VCcdR zki$Sbz>X!rMw=3frtM+DJz5BetZA$8Pk>*+L|5mU~)CJ(82RNE?4%! z!HDLRycuuEsI_D5Zv<{zFsfbGg~<_QzRE?(PVPY2lbSf3uZrgO(JE@mz2z?bLYC?v zvUl#vmRBzmw#Vi5uN^q8FS*U7_G@%Fv%(xXis04lODsQvNrB-L^ed>+#|81K(snF8JWZ(mY7K zXZm1g?_k+F`6ipZhO%O6*A8&Zi(MD?-|WPnNf)RMZBeq9K0hb!?;<`*b1zRx-Koh{ z+m^>6is=J2D(80Am-95IW$JDm~5rJO|E+?vu}KSSNyk;Ghji!Dkm2wo&J&r_{3v=MaC4o@1-%H|fC ziZ{|Mv`Iki!`i$t@AOR7K#+3H1~L$KbiTSH8z~iVL*K-({}2Fp{9&6Og@sR#N;HQV z*Jf?Dwv_?gQ3}_)ULq5GOa3-matT5EzNWXo`uvV^;rWlnSF`XuWv46FtU8NAoHD&+ z$1{LD^*q+9Ia3k7z106(NE7MayDP$JYo`KpG{ojsQg)!DQ@maW@FT;h*LwOhQ<1JZ zNOOym)0v9^fsJDFMfHU;fo+i|;pX<)3Tqj_^l}%69;rS|`k}UFEx7;v!)5#_6{ZBB z;;VY(9%s&f5~}jQ_3#x?E`IYW0WM(8yr*ITtBqslsWfYgHT5UKT1U9$+-J+YRX1kR zHY`U}oThA_v~DSaVKC^K1lqF@esono0@qDvBecfR=(*Zqzaf=h-PnCfosqxHlC@po@)MUV67^>g%cOjqy%vM+4pqAMgw zlVy4Yd&~P!T|Tx7&_t7$^W}?eg`tHTX^1Q(HobD2Nk9ww^R;%9iU^NY_wkJ*QvU*d z&of#(fVw5ZS3$S&4t;qq_Jp>P)M%l2dKKzLWeZz0=S+c}C=YP9as(lXwUQb#6iP&= zs}Bo`)L(f4yI(B+jL;h?jzNdy6!b;jqA&B3t& z3^we$`pED4@Ezfaq`cB;HoLsPDmprV735Yn`RCf|a}n2T!pu|w`(J|S3j zWP+DwW?!Co#puLIxu^?ayk$;f?I&-2R4l{VvLh{rZh|)Axq0!<=|e!&%pa z3@m5Q$rMdylezSr>h<&s#HKjB0Jj-!xR`jf_RGt1e^nWKbpOzSdY?EmwWvg!A-ifF z5m!E@jSJSwYDeg}oicRm82i?DV-qzqwvIzZ(4kFVYCVsgiJM>Zta=i1&N7jc$@FA2 zhU_RF`NI$R=5TI|NrY7m$-Txq5420o^Ax8(+>#n2DOcSeTO*7ncR;DiTj;v}N2N58 z^W$alsXJQ#))?!y)!*XxyLYqwy+YtOa$?uI%R*PIV?s!kgH**m z$yeQ2JmV)tY^^ToeR2rDy6_;v1I}cv4-W@4ur1nz;cb0o;6BalN+$ArW~N7I93G-f z^RIU*Y2T47?9Ebn(ei)Gbhx~IULu^$+n4V}@L(xH35;XIYXB6RsQL{nx-`Ien5ByQ z_~rgt>Sg>>K(75;&BA^f%s-;Lv5y|*L{xYDHcYhw@*cX0+a*<-ADzwleM_%B&`C*w z^}>gEFL&J~6j42nM|IXMaeaaX`>$Dij0GExdh7Zl`kNDkYf1)BKXydfN^@h%%3iYC zxd&*wiMJ`{44z(qKUU=%o=`>_vBMKKR}Hd?Qr!(dy?c*8-sc>x`Myd~xo51qU8$cN z01tid?R8E?qVVYVT|f0$Q!!F>wDx&emRx?fAc-lnBKM2JzPIYw5PHOgy8YH)Z^P?# zgqV$rNAzLAfo-=%Z%N(Aw(on+VImP|(z{R3lh8}6(s;hhHS>`IWNI1n0`W`QC6W;@ z23%mmUXe~Ty9LpOX9XA%3_n7kyr%= z&wlxJ{FQFGplDWiDvs!HBcTxw#|L{@3(GvXbI1gf{u-kIR}!#|UFmuG;x-t;T`Th{ ziLv<%j53eXq#6G`8%O=;_#A``d9NRh&tGj12wOlx1^1!y%JtkTm8Zr8SfZtY++;1(?X2f1UdrKcL?@WnWmj>`qP5-HoM>eSbJC z)|njdL=qoxZ^|a94`r?oq%Yx9Xu0;@lF7Rns}GT#AN=Ulsa)Hj-_~T17j2IZ+`IzrCd&v~LY1Nvw24l^5DqoIjk3$b-)jtp3FVl3-9*G$X zsOH328G73o7k|g8ti5&7(~YQ( zpWv?QdVw`pMO>_LM&>)HNu@8O!-%hW?X73Kye--cz@~MP5CV}K) zNm=!`fu?0;cGdmrR!_smUJ+DueLRT$QsnjQ8Q1Ouli4&Tr`yv=zx?A)K{zM>vtVA6 zjHqilqr&D&wmeuL++4^d6#ernTaoJ!ha1P)1FpHA+m&*@c> zUI@k+1P9HBb^g1s;n#WPp%1=#}z|pjrI)=wenLq7O_IA7w z9U>C}xc$>8bsBqAud3c@5OePdcF6w48a~_Y)RcH3Ztc+Wll%(ufn6iXY$DlQvuqAG zT8QY)b8$y`&no!LZcAhSb$wg^zf8OOIuQ?POz=eB%3@$M%;P<^j%K9w9~~%YKgT>e zqmEiQ;8slxUl?%ZKn9E3eV*9L4ViLNo_$-n^W7-+5<-r@D-6)xLzixW!PTiQZn!zy zqJfsC&yao7^taJ)PzK^>rrw9>9=YpAE!^66T)IlA85jzA!H7kY!Jcrx=(!XXhQtfu8Qiq ze4N!_#?8nJM_`>|`TBq0<8t}!htiu6d`fGARb8RmcO2%nzjAFONuawSi7-F=oT;3+ z^gobBxQbUM1_YrG$Dkfrv3=Iou+E~qrVt9DUNT)qQrRUYeN?8jK)00y>#4=V*X*&| zIW-rGT^=WVGsJ7zA}qiC8-;my<}K_~x-L58$Fn+|b4g0sIvR)9a4OV5v1*DwLif59 zu%HozxXSkG9IC$TNM(8170D1$y^^V@W>dkWQN1K}*Y;Vd|Y9;`eOj^+R2W zC3)Z*O*F?EDa_;hFJb#LjD$QXR_wmvADvC12WgFPEExKM+{dp!HgqcQ?BC6M7uBmg zdsg9Ruo*@Hz^CM$-Mp1J>zVpf&MG{hM#{RB3UAQFsibtxMl{KsJz_r`zWe#LC9&+k z&za&|0^MaCPj^)9SbDQR8t`?w9L+aXcuV>Vlc>9%Uc`k)di{ zZW$SG1ySUn;=vnN+gP@?q3zRw&6}z=Z2IAouW{v24Z9zy_Hr7czO00^8I!NKobYM- z@cy9!7Jj*z{b8$Q~>^Xlt8J zY+|+B>N9xe%I0bwnavzrLN7dzB`ciP`JK0PpJD7tto z*>GK{tF0Gmb4bmc8t!uYN&HoraluK2gf+O6(_eC&EeNT#DC_ZVX~O*~OM5E^CK|Y| zj3p+TMS2IW^#ExK9E?tyt!Gpor5y@+u?kWX#iBLAoyuR6<2@4!N}f(3>?zD?;L)N8BZOBuSsL=`X?!Qi%ocd?h4?OhygP3my782xv6 z1uxg9UuQWHiH3okXW@^iM>E=@@WK7*qG7g*N-RLBlb5Y zPZ&tQohXM44}xHU>u}o6^6Y(1Jy9L=a-w7TWdAWR>_a|azWtZolp1I^}dtH9g^0rI+7^U_1t@IgvAL!}rD_TBwh2`w734I|g zCz71ws{Mg}X(zXtC11v_j|#aF3qDOzX?sC&MEg(I|1MOaNxY%B?_v*kT?-gCqnUg4 z>F5;GY$^7!Y=jxQI)?VOv+jPoGpmC7H}T{eX`=jU)4k>Y4aSv4jm-u8Xni`dmJNb2 z^J3$A(!zroo59pDG9juW=nM6eCZT;>Ph0z{qOz@zYSmtW8$5FNnEFOsU|X~EfB|G( z+Y@B<&!U#1n?YO=I#2Fdu!7T&MHbpM1`Hv@s$m++=DWacd8Ln6|1g>kYR!l0H3wc3 ziSOe}LQavxb2v?X1$e51Sne~lpP0y&N76~q+HNgkha~fj@DDbtxtZMEq!`xe`hsXC zv?@<6sndXOv8yw-dJMtwy`#I*q$DhN;bupD1F!fS{SfVK6+R-F%o9IMe1|8{OqHew z0bdO_xZSq>roA9bYVSFH_*;0saP-MQ-*>e3zI6|{bD&h0DSvt1f(49N=i5ERbfCd5_HUH^-xG>4sakRHF8xK^rXDJY>EyM z(Sw@x-k+{hAL?7{30-jOmWIh*rN=SeQ|mMKXWB*VX$GhLi{H_!7F^Qf9Kn4vI+ACl z`5%!8ZxBB*`kjNqM($nxyJ}{o=0(iB#D7a@BGz$XyxFZ0+!1$qBj`FN6`=k1$$^p&5bbMFCH9@f+umh#EJ#$Qbc7EU)kU3s zhF5UjtCkWcWiDM+GLZu&C9-5owh{uWSv>`5FaWE@fZwAY0X&mZ88t!p8-W+<4t!tr z9AL=w2Qz!f9r{JdAHvkHH$yKZ+~h1tlEo7pUyY3iK<)8tt`q5S_tV`xU4VCNkUpMs z2TNE$9n~K$Ah+KH?(Skspo=U?sHK_6t54D&T&(~JySzi0f`w!SeVk>H1+LdvsCTKmOS}ns_u|ygzXN#K z;}c~ZuK*4|s%o}wXouyp4Qp+mV5lXnuWHGQMOefBhTtXnr-pEL!y_5X($PY;$H&M$ zl7(i2!odpW`|EHHffus5MOrt}quj4bC%-HwkGn71x&n%PEQv~30}UR{d)3lfj7u+b zV#@>FKoe3$vzM*j0Q<_m3xD@@-?XzG$wT6Uy5X99D zx-u3zk&m{0H1S`89;uLouzf-jZ`^n%l#Q=JzxNkD5KckiSLa5+g~Y*aDPs7}JWE07 zzqj!+PB~_wM<7uAR;gMfjsRUsZDWYFBE^s!L+@aKevdPUDpLgIAp#7dzk3SCC7-Sj z8Y~CT>{+V90Lq$=sYc`sJWa132#F=ELy=Rk<{KnIT`NT%>QZF3b{o^rOAyizm=^s? z2A^{uC2cI-3=hiTMT|4Oil-0>#{9;xQvyBPi_A@luWB1gGfyE!jT)1^Gy)L!uc0kQ z6PJsab~vfctlnGDZ^#;1q1INn9FXRaxxG^IsXgk$9bgmX)7g&OCuj zrXv=vADOGrfp6n-^)VNhVxW7&mP1?wF`nt$N?9oDC^Ez6@HV239^|F?&GLKzeD+Y6Of6B3$C$b zBCWuEN-05CQNh)&(j0`*H_QxMG8#H7uVstl;l95;pj>21DD!{Z`L`Wqq(4UQBl6KE1@c2^m!2zt*VKh;{T_7sY@4cW`OBLDrQys5Wt! zGgIb6)KJ55v`>WR@?1Q+V!1muR~LVZnh4+wz0Ma>_M!m|@jctWyBO9f=PKm5QD=LF z^6SaROn9KFRI>EdAZFhYkcdeOZ`}nl;Y*b ziO98L!2fe%rGAotXxbQ}L!Xk0r*X|N0qfhR#ulMNlyIo6UZ&yd|I6CEBaq1M1q;*G z-)cv|mD{?zO%FFIV@n76n3Z+~Qc}CS=Kc5Gp2o?jiN6ZB8=m70k z`5n@+DL5+W0W#rdtjHP!SBdw?k1|1l?U9GZ2Y!R~i%Vg>9P=TzZq1)hpaK`ph<_Be zO&DBf^isSZn7gks0MNRJh}mfwU4VO!C%fPv1|dGj&(?a}T%5@=!KqOn0&^TLX_hi^ zcSfwzT}RHQY0%Y>I}Bnn+WlW{!3uU*j5M)HNIbgtbaEkiRJCu5qFx|V4rC6uw=LZSLbZDKh@9wr z(v`Bb8mxKHCOsL#<|0&HGj3vHQ~pYLeO8C@FyV^dti=eGTDGWv?>JAqyOGB25t7P% zTwailGK%Vbz@n#xk6BG>o4P zu+x|I-p9wA0GQoICLM2J(Jz?})?&mCEG~y4_z_N<_QHuz;80W+?mgt9ux=9B{NF>| zY9bG;(4{OAqZj0b;g#eOM?1P?_8UoT$roEOpV?VisSo>eA z#&9i*AgVH991w-FLg&!~fF<+UwBmqOD{(-%tv)_nxn5btv>tk-<$EWSC6lo$bIWE7lpUJAsD-hiQI)Dqh*c$TlK`Q+ZT-B+$4BPA`WO z>Gcgn&W~&U^p2nqFtxALNb&)Rg^0c}quBwGE7UHzk+}hS*iuA$iXU)DT|eZ=-S6k^fKT+1Od_Ky&2JB(v92uJH#|Ok%LV|ci`qv zoTtnm#JMU}+(=}8MIJ3UB?pV6ELobJCvz4(lG;1ZlOF&=%jGF@j8T%(#9cGuOUQoQ3McSu&L48sz0NG98$$ zWR-n&4(1a_XDyb2Fs&-Az3YE!_` z`T%!f6Z30Qs16oak==M^dLKhtA(>><;z}l{2Tq}}CQhy-&b@D|;R%G#YJ7gSEqRD$ zkz(uX?t$rewi3(IlN!+4BZQH{m1KsN!bunrLTbBQj$DXSS*%*F&apz=%CFs>-i^CX zskw11$E}z+b#N9opzGad?Zf4QINW4uMq;(V*Ml5W+@dPSe&w$QN z)WEwzn`oL1!|Rq82=8qSNAIfqilWO2u4TZ!#kHG5TDBe-A%}fn;ejH^MC!2)b9e@e?IY zI7m*E#p@>G8Th9L%{qT2Nc(l zBTuRP*6KM#S2cq*Ln|+kf1o=>za>+FX%epWtJ~ykpX~Ly2s=d^c1d;uOh&t29Wx7j zNRYWboE8DBYZPtH5@}3`_tKtc!xHVxa!m9s9I**6)WSHK}@K&?5EnKq3ns9Ed zA2k<*7U0Db-W0qbBiUrL)yYA61kI|cdCiWXY(tr!^4bHDSBQ&(mF9u_Qs!*85GxY+ zU9VuJX93n#~Jr^KP(7MdXZ*;ErzGUtFH*40E*8rSr6oCux#ko%$WK_&}y z_h_>xx`FS+LasLmJX8&B^KQcxZW zmZaj@Wf4c62P#1s#8-&#jA>FuMF{S=<(f~iYWA`30;rK5Xw36zL zqWEL)GIRmQFyd=zsBlx?DE}Y3U~GBZIA#LSgQn&mm~jBh+Rsa)vS@QX?)SEVqjocIKz5bG>5p5W$09>jV&l!jl;P@1W}9)wDk;$I#Oqa$5} zX1wVp`>~w*l#)48lAX@h9o|*IhNXo6Zf2VgIm8+MI-ss$lznNPmWGJ<9DJB z2%CiCcWjJmEBcYG_)YvAJ{9em(gm3JhJ z2L_S$e85=jr{k2J@AAr?Opae;`-(IrsNWe4I*8CIA>A1984bNW{8KfKrsy;D6^f0l zz6=G~RAFlyR{xY>IpS05i%mdM$`gv-0OyKLyow&DxF{v|@ zQ35_&RDr$go78@9x*7CLm8OpjAK;rb+Gb`bzBc9DSoM$|T}(#~i_HP9RC0Sc0cs9{ za-q+p2IB8d)r*~JpFXMkO$QA&KV>c5I{-EO{jUr6V#C}MCm8h-w0SUeh4DSyEPc&1 z4X<-0UV-t^k6Hl(#*janKTsAk!(?6cvWMeI{S?#w2L6MSv2)y>Qt}>^meR_<2xf`4 zE_plJ9$CujU(*j_nz=Tdh<<5ugT4E7IFTho&r1bwF_HkulIDvgs8sEf^6F{{P?z9r z+;krPp58-C`Goqbck#wpElj7_{75 z)BVIeGZ3XjzN)FDVI*{xbgRI`_O%k7zPHmO$V8Z<67vP;kog%Z?NVTaqJcE&Lu5q4 zX6e;3EX{y0(cZVWf(W=MZ5Ls&9p%H4m=Bx~S)9HNw>q zNICp?A6>O1uqw0UOzn~bck_PQAb$on=2$~8dv*0vaBr30d@n;k_>YH5SYV?jY zkzi&zuZj15SDTA#t~D8C;XE|Xy-q^1D{JlSV@Jt%9PeJe+YLly-Mq`lpT}f!b&Orqcs<1Cg?6XKU0M&K$Y`i$xBj0t2}HJ(Je2wLdoKi!1qcG7D_QeXmu6!lAC(N|y1%by*NbBU6ngBP z5=935AXSTPoulygLvKlS*B+;Gyy#R-qVZddHgE~pIC7sx(7@57k6$b9uMJdJC$R)q`+_8 ze88ZEnc1{qYFzMpT8iUkA|fkttxvYT3z*Tt=L?~xn2$E>hnp6_6%H8bRJ18mh;{j_ zbNiS`60On6n|>z(T7qAPve{(RR^YLAyS7(2aU0X$oH$j18cu7GpDK+c+49BpHe^vi z4T&vZwU~=@(b}(h%)tB<>tR)aNyP=cny&w~7XyjZRfn6DH|@?S0fj5N7{*O&FpX?( zW6V$nT&CqCKj~9fB+ez{ncl0=-GVmQpHn)Rm8tC4lmL4o(+xCl&#z4|tF+j5E`_K< zzOz%uY<}-d;)Tqn$S;?{#s#aJ)FJ7zzTl^+k?UNsCVU@eOcL_VmMx8~#F~yth2g7g zq4QYa`?YQdtku7j;W(bKGjzF9))M|iSYCfa%%+2&R4EHIdk;YFVN=`FqE^3eUlFE* z!|bJ6@U#M3-G~1p8FnK}#M_IeDsjumDXzbUBj9uu*_)X8{f=O-u=k`P#tlVGX)HA< z{SXEqb5-vfrc4yUW|*w^6ry-p0v6pTO4^Ro44j^VScZq^JRoIH#N z?#+5dB+S#tht6z7Njok@*P&nm4YM_;^^H1g%31`t_h0kgVN9;ZI%TT{7dBJqE@|<> z3({Yk&IVSgrjNMHAH*6%0)eqK0tP58dGl+e2;Y(GqCRqQJl4zUccIj21(wH+a&3GC zV5(MUrBs)hhlg)Adil5r&H+UvP81>3SJtpL$Kg1-nbCUIlangTdqJCF3m*s-d8!k# z0K83Td~7JZhIpbn_ImEM;&2=C! zQ1D1v{ZTwgZ4#Tky&rvYB7t>KYc<-3i~4KI%McPXkNe5tdO<0ONI^yh%-ibNuf*eZ zEl4sbior5&x!?#z=bDg2sC_g_K_M}=g)j`dokR>-X>>UG>zZc6-%=Z%?j37wLX&PD z4#G1R4t%TwrQ}1NKQ@oECgWH)KsSAZm@dpfCYv&UWH4y83Nle#Lw-vl8T68vKzG6L zDWS3};$<21=!9l^*JMyFMs4WFe{A~^*3A1mQCv0~^J5GybFJ{bkLdl|(o&!#Oo?mF zyxfQ8jGDDw5?n`2=FwjpM_7=A9#tP&72a0;6P)*)OfP zm8glO&z)_;j{)PrM4fM+B`-lwfaJOU1o`MnAB7+Ot7OOv$%&>9{N$8?6|Ca!*9Fdl zbIRE^k1vVBaIj{)lpx>l0!Nv2xC2PI`wk?6k>la5t8(?sqn4hr!#3+pev~9F4>*!fNi&3 zoL7k`1a$j$LmH|D;oh4K0y6DG_Qp2&NFGLg@ot#ZNr*eKteNKX3b6CG^y|#8FvOfF zdP;V~hF?y}h(4hD=`=uY zAZBvU|KJHy#~Q{7@iJg*(U@Nnc81qny+0YTHG1HqOB-B7_q6tvK`Vik<%HW(oIELH z;A6ICOocEs*zlv^1tb{?DCKiNvP9ETh_&SAWth)Q?#21n4d{f-wJ3E`;TQy`8$TK{ zAf(X@W*)g!2}fRUmD^SJ2|)~ds1ajbb@z0I9%LHRn1G`AmcZEqqBFvc5h!zX=d;$e zTB8CG>Mvnoq5InE3_Y-)GH1b#G3;x+hqsG0Qva5Zv5H5J`RLH{YRW*YUu>8mEGJDB zPVa1sYGL@Jss)L(5EzGD8w2$qj0b@(qp+N4#OxzyK8wJeh|?+ zr^zIr_^slbf3P62 zXb{R$nvf@G=V-nRP>@UC-`#}78}7V~!wk|`7MXgMM_~8&)c&-$a6eL0#n=Z2pcKr= zC_QwByOq@`U7xJA&vWx@9AE>V*Nq9oDKjH2M_mA{F;;4h5j<5WmO7a%x`zAqozIxb z!YBBlTS?a#;aA*s$N9&E$ZWMoUQ@=%5*a3IT*;BH8JC$?QHvsB75C^@ z@ddmA5__W0{SFnkCSP4T5?p4{Ee;0a&2&#$PM}EpKux-Gf9DM&=gK-+h#!~`yH_EJ|T&V zrrb;V4M|Adfo!oD&YG*3>AfzItYVTw+B9-)X}bNr&uD+bDmj4oHY z+3IJR{sjkGtMg7FS`eC_&o`A@;o>S)H?|&jCDSkF)zK4}@ByRmsRxMuLKDSxGQXER z>{WFskXCBy#>3nyobb^r(v>9;Y-yyhtQ|vPF>coJ13vg$)F{?m(!t(wzyAF6lZeSh zG!f;z6QaMIa9*=f5J}BhN=gP0#K3PF;^jzhQ^t=DlEJ1Gw(o<-9*_lyr)YPfsE^+K zD^aGnSPBxSdd?vyYb>dAqAzi8eR;R-h}ff7`t^vZ1cp+5-6u@9#cfqe^A|^pl7)lp zW6#=2wWI8GQ-kws5OW6Q%*|U6uZSa#y^QH7M!C7smsSH=zhcirec!^5hnsV{OJW%0 zaH-Z9KH}m+#|edb3KzFSl=8#_1jc2MEF%k}STq*jSx7{Gno94sU_n@c=v4v^lfG28 zY+ye;f3@2O+W_JMOJ(B;brMR|@uFY|rX-Ana|iJ^L2;t1I!OTCzP|Mbq|bnxi}o%5 z77NgAuXCO|1A%JSiMqUB3CoYQ-H7Rfn@J`+phV_3t{)G#Z<<8;*f zf7;{8=sa30n$bJAMX&PCMFCt@R_?r$lG7QNRYF+Cvpg2O)%{N`W*3&4pfV$0NiTOs1uxNzA%lPK z`st9ZANn;r78D_0@0I^;j>9_|%9o9W8k9J7?~;^5C_sSrwbK11 z{H9QL{Es_Ag$gP|M!F0MsE6J8YM%~Qps#+0^M+w(2oimhZUs))Xb!t~A2kQZa`|h+ z*9NGjwHj@BR*t1+wO+F}$NVZVO523U-_jKu)A{X>J4qSY@A?He9{r#u#2ad^*tl05wa*7bKX@W z&&w!tN>Y#+09C?kQu%dKaFXof^i`6;_bcseqTy~muR|_YYZp2=zNl^c0$F^JWqYR@ADTS2y>)^ z+bA!K5NHUS-%q0Yx*1{LpV7Y7;#V2B7Iq z^A8}ll*pqNs!>|r!(GX+C!HXTN3Th!$ne~Ls%m>tP4Z%wo-7eTh02mLwXet{?y3+t zRiR8=@KxJ+f?O2(`0J}{qJ(-nJtWndTt(kysUV5nFus|a5`c#IbWNdR6aZRcWY+%K zfJa9elE2am5crD|Smdh36a&603(+(Xy-ltJaKco<8S*jWP>ggIrZ~r_YPlCS;=huz z_K;5EuAI#DLj!U`q|9pB2rnoVNL#&PYw$2OCyvz4lx!yASHF#1e~W7zBDMa8Gw7TQyx;lt^;HN` z#=iJ}0%=3+hr}n6IAxYW`=^22BR_AECZQe+LH2{P2oh`V^9ym*Qn6!2^`bGW{=`$9 zN9@t(j|=rA5G+cM%mRKwr-VI9?1On5`npR*x;%gxGnLf2IXF(iTGj8}@P`UpA5A{~ z|2-!={6{PBoKzP#vMEr59O_9*i?1lcFOnjvpW#ua8AF$v6t(ZMKxPX+Tvm={_?ZhNq?vJ)Uz8 zUmNe|TD$~sFEG%f#Fz8g$7;rtv3(Mc3nnkIXF5B~SciqQCiY~mCiGvi{O1Az0j)w7 z>$3heV9J-G`bW-mJm2Dw{wpw*=B&?XokPwdon&K3I+23uJIP6NU|Ch#nN2CR-f#zY zndaaaMFayBwhiHk+cZte(5s;Dwnn@xX1c(_mA{rILzYx?%RAEX1Ysg}2dSsYIHU^2 zxn%8vg_Xt|j}F7O#v1nVnBBOH8aF;u(ZFKt`s2LE{Y{``H%ZsDodlX$teE1!vPN(( zs8fZOk-o=jlRzrd8|osgjIL^|LDx@TQU2f|metwomcK(b?L!r1T_1us#%#;)9<&w0 zhSukMR=^qFvCO9o;J#5`q*!g#>0yAfwxdnKQ6Th9@lH}8n&o+A)mb1dsA^+x#X@gn zwSHtR2X;vp{G9$d8v%J-a7Y7$Q^5dL;9d$fr{=6ETi0yQ!H%lLj%17_nGR04k`pXyS^^3CIm*p z6IDG$Uy}5ktq5q16ejRi2q!b=khrHN#>N*a3c?iichTgeiK$F+^{-?D{>wqd%iU?8BqD7%fl}#K~YHgubEn0!7sMK1C zjIfiqQ4w&|Qp<>|MMa2+%1%TCM1)9Xs1d>r5+H<-y?)R2`}?a^lQ-|Z_sr)!_Z%|N z)7_;Jvpx`QpOI*7keogcdI8P%ltrrWRDdBU9tq6SMlk#U1gWtiCWe+yIXz&og73Wr!lL3`MVbu8jVzj9q)O3BZAA>$>*~adF z96XUIW$8Z*oLhpnUb&(xls}_!ef(B%-whE-1JwZo(F-~e3Rz3f2?cojc72l-UG^66 zhw+BNnY4Hh)g46VEOZHSxCA`#}c$@d6r%$@R z^%NnNGo8ro|L8w&qzY+{a=i6xf5ZA+c-8MXh3BC6T9|3lzX4y zO3bxls)aHMU7nm`{?MnsMZf60qWQdDI8C%kVt$?_hQSr7$5s$?#rdE;IquQ>PC(va zq$sXzKU|v-$A%$GE^T^`|66IlV#73RJqAw)(f}k`{3rcF$0DDMHMWB3F}A*Q)Qy4= zNohT;3z$rg{~J}38#;jXZ+w_^pz8a4k^#*xe5Z0hwjXF z@y97B_*V8L$1&UI?Z+``AcdWQHFdk82lS7eu3_pslA1#fVcayRT-8j~4OC1paQS9^ z4M0bx+&YX=h%iFb8TfApkeXrn;VG_2it$m(zw=`e&E8x=ivd-5EPwIa)y&XKFp-dIi2W+3DmFfI++Q%8K?YI_6-Ov152W=nW z5Aa@`J|VI*w$LR7ur`!rkpwY(QSdQlg9f|^jHsWhm`YsV4}${_;LdZ|#-WFrJJp1pt<^d44_+5G#DrdJH zdYQk0G2h1VGAUt%>YNizss%1UyD z)ICS|qX_8rJWI!zJqPQGCn$JvwT^=i)kks6<6jP3c|HLm{m!q3tCM-?gai#1bguI#6up(b zmzF~ag(@2DQr~;Mxnp-M4w6|uy=Nxk%Z?pV!)7`rvMDtW(>^CxbaZ}?t$PADBMCUE z_)87j*+ZM=_Dci}d3WNams-#sUbA1O~Y#%7c{Lk~0q8G{6=oI{(+A(# z_$_;~A_3Nb?lpXjz-FuuY(I``fkU#eEAuHrvMM)yl?rB)Tq6%Xi^@O-<8&lrxoUe(ZVBLqmt6@D}(Ip037;5s%ujNwfMi0aU2knuNVU z_y+}}UcLriX`M{88(ztkbMHly44eaztW+1#0dX?wuCNihUt(9sU4Hfe!lG~+SoM~V zPZ(RAqn*(J)!+5zp+LN*bDd^fmzw*&MPXCHol#+u#(q3VWcxFu^vJE`I_Bqez2o?Q zBFlVib#BB1KXm@%_1OH($|FKi$KEur3{FP7L01CPl0tvp{|?{WLCdMdU)Qp;@01A& z?+tpPRhE_L(fqQ{@;xP67Perj3RS+4##XzsnY0G!xx+h|tXk5TxgP?bS0#)TVZ8;ewbv=<-Nwmgv~ z8VSuKI4a%?Q<)AGte2d|iqtL5E7qP1hNcUTv@N^LL3lB*%X3C(WPD(&5?0ES2= zH|;1z^BLDPrDJFavUT65+9l{5UlyMITKflxThY3!7T4crshydfpI|*2-e}k9saQ^5 z`F;x!u&2e0%Uw^(VFx6O0u&K=rv6-phZ|w(Xj}YsSMka1ZC2v*Ng6zr;W+pef$#da zcaF|^Zi$xsWQMT2 z>_+N(Pk@pbb#3NTPa5-M1jh`5hA3@LR7pt(+06BWO()?}WM!vZd9Qsz0ZlN4i}7Rp zWUceZTd+C0AMdnQ;oVyb=JdH>Z>*(-@#aCWUNP-=JiV@A#{*N-ee%lT>p0q(ZSQbx zvfXR8!O9P14MiDG9Czw}_?F|-m2dMl zgAioX_P4(z8%ruPm#n8%pjFCmp^a^z36!zEP}uT7&(E_l=r8wy79T|IRkVuSvtLOj|1!Bw8 zm#~vzUqz4Ym<}av_#mOF2bxz9kfwMl!Vq9k8`{-f_(;30A&~-1hOu2#{Py&p#Er@2 zwNIPaZG4moIHRB597k4bBi_V$4wt}+5yibYh6fFs)&;GUlZiT$o_yd$E)2hM94~l< z@v__b4sREbdyHzEX4AFKAYz|ns+)=1(dg6kI_(QNB1g34s1p)dG+0|ibrSR$a97-t z8l+NQvsw4ZM;P17xFWpYi1nQRks0;M#fJk9Eki2vI_<@gUr{kfQ|j}oxmd`oaECAJ zi3H8=THPf;H}Rku9vesxryWI+1tB=*reUuLp&hs>399Rfw;b?B8CL5ZB1!844X@?| zA>YcG+pV}HrtSVuzCTNfV=xWQrAbK(fk?i9Bf%TWe;tzpY`c`aE^CGLAY{a2q0(6d z*B#NAml2YU5T0{XTDI!&b~5@k=hqv2at*chh&P|m4wcrMsCCHXSq8<`xyx~?MQP9H zv#Jqz1(^9|ex#$p?nEqE?g`5?L+KJDGFElm4+-Gxn_2s!6gNIp~$T;AKd0LKXLyzg{05HL(><83s>q{dRa-|SCzIMcyT!_ppI;LF=3+5U3pOAN%%xoQ)GZ4Ti za|R87AMb7@u0T~&71XDPEsJR%h$kL~UnYH-RifJ?o7 zNy_$F+5gR)sb`*wf)F-1ZsM@i;3Nhf_)S16-5BigGUE+^rPK5m>Az`_K8bWqihA&W znUP;GH@Q=h0r6!|xjO-Cuzojvy6zb$ql&W3bHzk{+&ljsLuRb<`jvn77_f}uS&F^i zL_xp$H>CLU;9zk@y0E-A4WB*RCU+KN`eK9UqphAKc2XIAJdFTyJ$8+M{+#nZUs(3j z>4!*8a;LO9L#_?!<MeacZF@MW&z$gDF2hTCJO5ts`b)lHs62k|S+ajqTtuTA5rl`G9wE3ZuD&*& zeo_mbeUPs*8Bq!>C-c@@xOwB+X=2_pW(e{*#k$0m|QbuK@0e=U}q-?iQuqe5_3uETQSBYZ=#k!nw> zl*)=XrB8tKv@^n2yJ72cH+u|Z^rI$r&T?Iao%jlbjB=jViMA-7ak~bu&TWU7xl@>8 z?n@M5(SB7EsH`0oTJpOypC$l*_xLsHuOgJgsJc}ZE%o^9c0RRx9pPl*zIgD67@P!k zfOJ2f4}C-+wyu4a5qG*W*@Nh>J+vs7nX#ri;bXW6Yp0t;;pC5dOU59i`c74Q-F7Z<4L`-c zA+)amX~GII}$LI+SD_RIjl`YK1%1_f`iH{3^6^!ZKkDWHl`1BxWTHM zo;a_26DeWY=jhNk(0BL(^CO&-)<&K5%0$R#Jn{JnunPgM$=Tw4&?;$O=)O*zrH7~fdqM+jeSP&}Ed|?Hy0gR^;X^v} zhO-zZqaGwHdI@8KLFjWn`FJ1kJ)r|H1EmN9(?89=D#Ar2W@NCYmoTKfrPp_m4of3( zY*qC(WEHL+H)~Z0)q-Yej&d*oPMIfho4XXj)@ku0;nfQ;W&~LOn|PEOp*wws3B-h; zg)FWTn--|zC<>9L=C`{l|3egn&M4?VhB!cZWVtz}wqU%-AXlFX2q$>dlTgX1zd7{H ze1EcU61&tQ+ao&g>?ktaM!ObuKI| zIp$=>s3rG5E(^wwxuI#n0a2)KLzf9rh-ll`5;dN-BMH|P4t<9M$WD8jbj=L8$Fu!U zEXc(dr?z&zy%fd1lI!XTYTS~jzqM_A#VB}=7=KfpLx4nF;jvHBA!loScV%;*C;S() zhH`y(JTZk|@arby2O^CX1Jqb8ep~(5u8`t8{3OL3%wK{Hx`BG zpPug*0Y2{=SFvuy`N@r~1d`%y`m_qNwZk>x$MeXY(k&GS_@|-bK9sHrgr&kb(c0xF zHKn))szltkZTOCO^`O(HyEqjoFDZbJ6GpqqMjh3JtDQdjULPsg^6b$Cx2%x%$eEV~ zTUNbKS(@urDni;A_x#hInAH43b*^@V`azRrs@;*UrdCe*Bo2XY(2Vi}Lt6=ThoW^_ zCc;Nkdw!?gCVI8YeG(yrdsCRAWLMZY*X$6^TrdH213Xh^qpJoYdyLnH`#lJ!4k^(? zhXDGYY>I|uDG0C%tgT0XF^1HVsm5)nfUv4MmI_?1FQ}(dvkd6WvNd5w)_SPv@Y5XtE!}lSETYY2=}92q-;^Z@Uef)t~mlrKgtQ%Z7kp5~iBh6$&uLqL5YR`Qu^) zP1I87D<`&LYkCBO1tc`Fq??Ak-rNTCU-2+3TAv6lzRn+eTZ<5|O|+BJH3vXL>1#T5 zc`z7Sa!pOgZbWP7BWq%7yw0k;Bn}n=EBtA>lrR1R9SDqp zP`y5ST?Hxp+du9TKfn9f8q-zb*xxeDGz z_w>$C8lq8F%SD~nSyxS^bM`GZIMJK<+ACpUh9i0G(55D#^y6ctYlE zwEyN$h=6i&v5;~I%V$U(rZ+-gTE(y0BCuMHPh%6pO)=YeVm zSXt_@+{$-3eLl%t#k`BBNSr%BxlzC}pFpWzZ_Qz5eh|x@l(F zq{Xy&b@2zp1!M`DcN9>d+vz>W1y!hhfJMtIdJdzS=NLsLkztVEXJTg#avHhsxIl|& z=3jbai5w7rZs=iZO*{%a-e1LOs=}9b9J1;C$^{9fxATuy$JijEzMV9l|9|}>*kW+N z@*KU~X@{H^kzH|Ko{catDChbZ03D~IU6pl&bL%uKaK&)6X1GzD&Op0UG@%x+lU5>O zY&6!F%=iZy!VKg4QBe<6iqd_)Q~yJhD!e1--ac$t`@pIk!Xrr+jvi_pgMZX_{*fyn zqeitSq=BEf(hdB78y9SdwlzDd^V#V1^`UZ8wYJ{2GQMp2_P@V7=XQA2Bb1-#Twsph z1iTX0Q{Gd&l%>mH#&sBZfXTK74_=6E>;`iGc06e}&55NezGt*J^*0?UR{2*gRd7G5 zOBO?nA#~z+v0(-bv>{O>$rsn6CYNlS$ZabqI^Z0*SR5b|_C4!%xI#g&$-WS8Ee?_i zy-iwXMQX($_l4)CbOYgqRB{cFEbw$vt>v|r)4eG0m_KDds;O^v~$4qCEM`!7TwTvTrOd+3p}97tcFddG**qPUOC2$*L(ixIT}Rv zKz(t`f(o>-_Up-KUR4h_zm~Oc%Emj@FFQP?QUjub?z!)0AJefrrOx{KZ57=`QnfHd zmz^wPX`c@L5_$$=LPJB25a~hYYjN9UT#Yvz>gaf=l@v#$k$-a3vx@LEMiKkM$ z`B{8~x7LE*yt$n6Y8Z+5p9gngg?VjPSdm(G0n*HPr;itebOO1&+0`PK9o zuO9j#A3XGq;0N}iUj(LTTNC8!x?Lh*L22Y1UMXRSnXOFh&G#PHStKb zG?h}*Y(!F^5;%H^(V3PXpV<`);S}lr$ybv1sHl;)6sqEaj4k0TLzRb{V$|Hh@GGz%iWIrR1*0S)`vyK=0Y>}N~D z^|fI>7D{x8ZyXO#oJIN|#>Fl7#1THHb*C(fBk9cNf2EImD3w)BCz=ert|C)Qx^>bL zR)S(-;84uji`_WNU31LYX%)kVhQG_1jTpIUE#)`-x%yyiXZmi4pSJ}|`q~56FVNC8 zW1kUQ8ri`g-$8EFt>I7Tz6LF#x5Tn|WqM`wUfwIyz%)KHRP=U>62i?LqGerHlTzVS z*P8HcsJ$H|B#RzG%$!)8$*)885G5{7l(XQo(c zcR)F}O{uuA^OFg;a|b5e^t0D1XPO$Ok6}z!q^Z?5sTv(%%&fvaA#|9o=kc+s0m>O) zw>J}Ut}9EiS@%1hZozA=D;3NFBd+l<{cI4Dbc>%txAc?~d(n4$7coMq7c3M8E2N_K zBJC%OwQ$a1?4-4+5Ee`gp!FJe=#_uULe{lF4~z>K=_JsWasM{OMA#!K;$oE65oI)tqj1XDhrT2>tf);&D;}{ho>IW}7^WN2PO54<;u>}600z0a%uxL7 z0Q5>s8`RkiFJ&cAB^k05a#?j{@rI$Ct|Cu1Uq-h*08#f}%{AfVhZg$KdBs?m@4M?i zoRq+Isc&djKylur-`!+26ywa&ou#?92ylbL?yuPT9>&lE);Z0oHOS9`D!#KQg2Kbu zF~(3}?x9}vckLkglf2VAGS!ioihZ1qVO12z)HZ|XF|aQ&N@#Xjyaa5EP|=oPKEb`l zjGO)<)^nujn{n(=O(flcj$($5=`Al78;-JX4IPh=IS#INBJFzgxet0vWF2P^0cCmE zwu!s(48OSDaR=D{$kgnvG4}#;mw(2AENA$YmD;dRi$Ixq!l8V58$aSssoeThN&k5QV{&Rty6MHf*7-(OWl8 zCt7!F^Yx#GrUAH3EVGMe>K`+5{0?n%z`Z_+JU9QjL}Ha+7N4LpK>Jc3*N$qE5s7{n zb@&aeLDdJ6n#*7)^sqbn*W&L*;_jcq@a=9&kqfD45Vs|>IGhZFh zpYe$)Nv&W9s)QaGLMN1oTXM0Wir!??bJdqDPi-k(|MmJIf|scLj7<{q4Ru}|V#qAM zrFnT*V;e1@bC@G{prkVX_Qk8(VL4+HZjyQS0RS1aW&)Q_p(88Pu{F!HHnx<7Jh z<`UhNp1TP3*Gf0HZGX>5J2>wz>;|Uo`uxI1XY)(aZ~c^IsTInFi5Rk(-wguuTFQWK z33|p}_F@?95^B4iIhA-I_{oueXS#>2moFX*vMxdt5gfHby|kK63DBFuymyl1zQ_Z0 z3mKRleNWrroc^X9=RBNas;0vfU!jEX;5Z>HZ|+S=Xra|5MFkSyXC3!JHw$OMZo0a( ztq4EQIWF8#4r@{!`iLIIT*T73o17%4f$CdK^$&@o;Hb4@{kmu`1Zus8z(GA3D6`T{ zndu0jt*R@T0pK=TH)Dpy6H;<8wlsM3NDGRJuXCvTGanMlgKS5$3A6#VdvqrgaYx$y zPCGRsAf~5ciBJKZd6mqoC=0W~392Y2BtwdQ17>b9_{R9P=zkON4O6*EnciKrgFkwM zB7rEV#@8L4u0mX=^WpL%cM}-pUBG~PG3*n&}GBQHy~x%{kxq9EY9YziC#~p9ioZ_Gu`Frx;r_>OUs{J83s1 z{kft93$YqX9**2CWxCbXYhNIglm2UAPJj${(y$AOf>O8Djy5~}}?}l))jr`GcFDx~mmsQ$SuM43o8s=G~nh3k^ z2zu{1kg)!NPj|P6vYS>}!Eabg#(a11^?vWVP+j9J@LTgQvA(=TiC2Y^9xJp&EB}(% zwk-Z3uP`Z})m7@M+rJz)OX)JopNwdDNaKpMM+r_ONtRZYqaXN_5Rs!{m#Di)sJa|^ zt#o8mXi>{6al$wQ=U??)?Kwmb^_;+W$26#$4Q8b??%~g&tIWpK2^gg3(<@nS4qY@n zE~0I20-c@}yZQ&CKN>Zv+@-5-#3hTIXrE@Adv& z<)QSeEtJ@Za-l+;y24IhP&F%Tv&wsJkXUe_t3d^e(=R>R44w!pH0ZWGLWW@C_LSW; zV3&3i#nbgdcwqXH;njoim~Kxy}kCq}w~v z(t>c>qPy8g-B9;ZZauQG-*idjliIOk_am4BFKcbHn;%?CVuWo6pomtBzuCR8plB2% zSKYaeo&=d@IpHOv!nEwJ3v1z>G7M4m{y?$i`2`qg5jAcVL;QVV#SkS8#tcd|XI3YmIPIKy>8eAK!7#=uN_Ys~Y483ulvWE$` zDZcLP_iGkNc&(l^UkYSDTKjvL1P4lu-+5^hB;6s{^{f?%@)tVv7U4(Y&W>g}OOI7> zcm#n^bXW!kMK&eAKXm|_GOY0Ub?Y4gRjIb zuPpx@$!{{DAg(K)$tM%Rn~p7o?=`l}r*-;l#gz}&wQ~KX*SomJONOs)IS31>#m!Y; zAz^ajk9a7S!1=HhAce&umL999v+~5AHtL5X@(kX}H>&OJsk%)hN10B!+lZ^uy4zEu zq{Oifd%wK^;47hKo+OUUgS0j}l;47T>e)W>4NPMS?P}T1e{t8-f})=1+=^{ro}Z-) zzy-^J3NvdHzWG#5&ts)kjB&#hc5hBpq{mN+eVBnTqfB2%=O5PNE9joXl0`sTB>t@U zgsA%Ad(>2|lDW|IUuTgOCb}ioGkp@k@spR!R$=V1V^71WACN6m<;fe*o&FWaXZ1a^ zNQynF`QXLGY1uGfLz|PeSJHJbwqCOt{w$(Q{KKsIFC|jvz?hmm&j=i3DJFO~sNg31 z6@#a3?gLiuF!erZhM)CIiaaAlPWr~P>oKI_LH;@YMmZC)MWm&n-De|UqoMlI;BD^s zpNIfn?8mwY@-~(uZyV%Kky)`RZ!)B?HPvg{+L(fBblYM{{&!wU_H2&dXWtzrbhyv; z%jUCSsT!->Y`iy+xr1ei5&i3ALeWr0^A#pSOV*1g)9gg>Bz?9VlwK=6n!X~5 zC}w|U*QDPOL=T%alo~u(XK+*Vba5YoXY>~Jn|{84{M2g(E208YnzB+o)eEsyO3yOq zL^`y9Gjx%cNzh@@z)o0X&$BzOr62OL0uR`!!Mp`It=C2N@w;yTmYI(ppFobs{u_P> z@k<#2^Ua33uXZ~x>hRAhV(RLaIq2XvVbz;jR!quDVm<+U<&nkW$j+RhAMBERvY?wI7;Zs{-}Po|p~1gM^h)aY*XiaSWUQDb0u3T?85K`@%cZ z{w_9HDL5gN8n*&x^~#F8tf~#}`K8ypsqY~^a_(H4l0-pS=9=$ncgcV#WF$(4r3C?e z$wSU;VkNVayDYcpSaYOlZ9-(&3S^jqR=OIbDp@eLwAU8_M{!Uar$LPku;BN zPng47P>;j+$DStqke1=^$5v!WUhN3HGs#S#+sO@I+P!h86Q3-S%+zw|3-C~xOOx4* z5=?n2Geu;#cTf^?Y4a4F4fyceP2CgDC1cmUd-#PD$V+cIr=q>Wa(K>}TbE$*Li%Uz zT=K(8(>06cqL7uSuxe+nRMu821Q^g=!yR;o*)Yq9e6Lm!Hu+C1@wl1?U-Zz*lu)6u z>gF$5v8NFndg_0&e-3FHvhCgbIa)5ayCtR6pijaBkqnx1|cJ)G5yeXB-M$7P4(v9Vx@jb9vG0hF`SQ=~a$}VmNmShl1 zeX1C%5P8RR@BefVr>z!@-=ZVVk1p}Zp@+brk6T*{35cOb+ebwJkP7BWiX;Zg828Vg zu~0oj3die~8|?7`x;;%`T8exrB5ZcP3$UTR?T79MIsmZJql;NMv>{K-h`GX+RZAg$Rg>0)?to|y-P{mM>vcdO{ z<3wCT+q_9I995X|@j;Xfq`I*R9vT#t8GC(X=g{C@-pN4m8`t5#@y9A*qEoP)&xpxKEEb_-}s6{>S z+SzF@goRW9uCYdd*=n>G_h!Ah;qwndU*D&t>x@9-@*JN~?0vA;9&5Yz4MDpLeG2Ip z&hLj`qnii*Fkb*smfv`CE70tWh_{?SNizZ~d)Bnin?-6nF?UmU;UU(7@uZ3@!07=+ z@;r+w5(CJ;8{LUKyND`NEvSIPq|nd#j(R@@OnkxNB*&VJ^UyE+(iQ@7HdL3>9J!nB z$@pW!jEy)ar&)$K`c(1)?YDBUR7`QokpPqRr_}Hy9?HL6_1*4SXGjc{#Z*GpNua%u z^NfW0H4aU-C28-m)bfWtNX?Xsw+$q!osdw<0@{XofSy23j%h9pc(0%pEvzjtKE+)o zOJ|T(C;RzvJ| zcy>G8i?(C@qVnR4dZEs~0*`W1Jh3{)Ri*7aD1 z$f!|Y&GFriHB*g+wyz+>ttFeywg^htpfwvVMnOx{uY3N)CE*TjAI*!venH%)&UdA7 zL$sOQ^s`lP81>o?`9U6LW9sV!{CF>9K&eg#UbD^0@O;&Y7?~QHHNx5>+QAKxE_c>f zbKN%JSgZw^wQ;y~tF%n3m^TceDu}7v^n@55zcE$9(;B$nhypkMW;R|zrF$GHfe#nI zoA6-J`!igV+en)rS0GEvy}>)|m4NqNy_wRh1_&i_F+S8G&xq*YG3?A?DY6uk+h==` zvt!&7oHhf<+pe1u&_GPJ(!ReI(!h`)oCijB#m#=}#nnhViZY6+VOz z)85NH(C!Fl@$8fT1MsE>j6)EV*8KRG+O0C-aKeLEIk7-c9E@HAFOy89hk<=mc;*gd zk;2hDi$&+5m6@s>ueI5zAGDTSG~Gtp9$wH{N+1ldq@<$oV4_GJ4wsn3JnU^=szui2 z)9sM96;(KG|M%)a;&hWDJDL{borf(y@@-;pVehu>8^4TiwB}B+oybCjI-K!R)O;Ez zIb1)QC%kj+{nMNk;W#+7K~b*Ozk(4qUF&)O0yeXdf53ig?6rC4d~x$pFO4zz?SaKJ zK1pk@d5LgYaG2BMF&7qGFby+!AbRa-r>Zt& zX#*D3#(y*5hp1^b|ETKd{A=(Rjhs@}@R#sHlb9ZQqWu+*1OprAx9arlW;Rycx8^!0Mh`&JT)CU0Ky`w3u5^FT8B#S}U9??Qi2&?j^JW=4S=4ba zKg??wnxy&T6AFn_n2}G*R&Ypa8QHrtmNJx;bg}&DkBC)UGJep`*CY%rZP%%MGUTPi znCo7$gLpZ z-KUNP0Bf9TjsJ`YL?Lu4Lu65Y4;hxmkl#^5{z6>op6Lva<#5(6BM~ej)R;SOU~Mvv ztg3+qyoz5%EWC#`TxPj$qbQZW}N}LwJ-o-ZPAKPWFhj zJfpd9JE%r6O7C4SNe z^ITC)DVsMBy4AO!%x^cWrn_mmUGp&1BEXk@FVZ$)Bl`qxJl-Ve_&IQiTNPJj&BqAT z(qH*7`VJz)P$>_fVO98V+5&`8g37ez=D3UaZu5&EFe(F_CyP01zhMd|>%BZTg6#aIl4%MsiQCZlTnfqIe;~+Yenr&v zklm^Kcu~>Ws$H3YecQwt+ISLm^*w*|60OUiz>d0k*V4gGRl8_D_9HG>H@>MzXy8Mq z?$&wBRj<&|%WKwhTiEYxarwL`NGNi*6`QVtZ&lmT=5c_$N*XULn)s2H$$R~1V*Lkh}W0|BB;+b^ZU#M5B6$Gk|qKb zpDe{0uY^1*0xY=N{d8 zyh>NHeNc@7QF}%Fz=3ywU8F9C?oBlioh<&HB9d%oNVCVc?wSM4C>EEso}!k3i41DF zwu(rx=_Q@~Vs%_#7TQuL+33F(qjqL+9IG!9{evLzlli!($$tee`P)kk#9eaNBYdAU zt)kzo#X*GlUcr6Ay|w^}MPaalp&y21?Ytf-M{VBtM0C-&jX;q%cubU|Hlj_UfJv(A z6;^FbJHp~HteE}|x;E!4?HECjI92=K#&}Z!W(SS_`;dTM{cL)7z*!_>x#ArDVaX~P zl&rsJ4$92w@_jz_u!%B9{rb;V5S6O)_h0_6ZYQZ;zvL#C`JZt4!bZrrl*A%->dW`Jt$IFU3#!~vm;Aqu%i3EBWaWW2l3x3 zp=1q7Kh;Jh*dm|VLe*>auM)DPWv4#HF6SLPX;I~YWuQylZ{$+Loq&NeDP;hp-6pBF z0t1jt&S6ffpb`vDdYc8I7x<1dLlOybNLTH@^2||~R^!al+23x4pz?jf`maJfMUVIl z1Frt0I+gz1iYBiumMqqXALZd^WGNdGAHBy8V=w$X|30y1`VO{hBYO2HXE^ui;d`Ey z7L*}+YBxO9`U32Yuz8VGMMLPTDokreXzZyBYui9n$=@p{>LejYc%KbtiUg^+Rk zt^9fN1c*~#aYPX6cH$HC>}Lm&`_w<^$&`SBQ^vfKedt#ljI#Z6Ulpn6y%q#3h@rlG z#Kr~XSS9l$tVz63QA8`N~;})uVBDi!PgNpByOw80Vs^UbPx> zA=W+KRW@jRCG@gb&b=j`OfugddJu~F39ScvOvGNFn6P2*k1&F%qHdco?1#uWgKKX@ zXFwla=P-$b#SNDw^pDZ`KnIZ4?_9r=JIsQFr+2=4-@z4>j)n~*rqMU zePokU)Q2Ndg5Dnu%Cv+-I}ploBZci2mlvF@Sj4S~qRQAvDkh<`PuM9|I(^3Sj9)Nr zF$gR*)cBwC@1Bi7pCT(7;r!~SjSO_dD&+E*J7PxL5ni=A4z^|bcHuh1FI~rAXj5pL ziW+&4$@rOuKN}cBmy#KEF$$Pu)~DvrZ<~@Ulnqw}*GsYLzAZN=fE9C_?qCXI;Vw|g zNMcMY=AByvE+q42C*7jSviza}=D*Z;z<{Ee& z7EK%9tk6tpW75ja_^|FN^jIgkMg^3x_$X6{9qWj&oiz|+FrJY38GgwjDZi8Nw?6W2 z0up916uV9U&U2;SG~OlPm42??^5ZHPmo~?-xm;Cc2V=0_?X&og~~?c4hF?wQqRyjiSZz^NcmIUQ&u60d zStBl+ z4j&~5H2UysQKMU$xctR$2IyDjqDE#ajI<@2HxM9+oCS1<(!R(HCzTpHXq}bzer!z6 zO@hgo2Io0TnRkow3Z2hYVu?DYjbx>$0E-to7#{-LmY8wkx+efGV2|gy6cG{@UGJpB z{8|K;e8Yj?+XUT3l+=-%jGtHu;qC6CmiJMnCf2p>GJ&*3qx)%~q|E03J;2Jcg3_51 zmpSWEQ%b*EAHElbg&^KrUG53w;-(gp}?pt6=~922v|(^RkCPwZ}WUuOq2XUd&3T26A2l>lP}(ERSe! zT6`-JPj$(@OsjFJqMIZ=`)p~1!Zx-zmqiN3mZroOKEd+ZiZkJ2&_Tz%AvS?*j;kT> zb6lD&3;rRNW;7a3NIG8paG48dqFLR2rq$+spk6*N{4|+d_#$U&cMQM+d8dk1szr^~ zx4-Eha>rlJA827_qyBML=r{2IKA}O|XI;WjP>#=*zCAE&+Us=D)t|Vq(ZwSo2vbX-JDlH>V-S~y6Hx$2iSXg{;R3}iJmZ@#hcQGVv*j94e7jf zY7JOU*@dAkgHHL8YP7Yfx6LzdC)Hxe$Hnem2Z4f6<15$-K1P z*Dj97-NikBMLfZzYvhN`#$pki(SFbf$|0a-!P8;`NfzH)$VbAP3f`E@mD=mq0D^|; z&lE2-0!@4(nZ-zK1fVH2o6Izhns%d=+Stx^qR@8m7L>aZtEQts66vGu_DjjH1FpaneSIT#Z7a})fy_Bxn88o5;ERQ_)RK9J+ zudcy}yo$z-ji0Zi<4R_%t@cPii9sZhYw0H`sE|L8M{EV@07+{Er7M-Y!dIvTA!mnv zxL%G{QNH|LIe)#6d!onEU=*{`MiYMl{>~k^u4*+Ds2*lBFYuK}q-kp!+x*)p33-%1 zGJ4~YD8?~+LlxHv6R~Sun)bB~D8&8~#ps6{&tjXe^M4x?Q()E^+Rp-OEJ--{siJVN6&ODMIB9hwB)P0w-G{55`8->{ zH%j<7{TXJG=@o9s(I%xmF3%zUO!6=5szyg@S%;>09!Kp}cZTicj4!2{rgB8;NTjwJ z`?%ADe({fK1&aY|==x&sG_DA_SJS0~%a@SUCYUK%Fg=^>gNJgl5-cuZ`d#mLJ+Mcv zK6UO{UI?@tjdh3k2sp;ui-VBjs1m>7=hTXybnNAPsE)W}(^XV-$0EoNTY5(@ZdzfE zXK6!Ya|X8Jqh8;Ngu?*QjWfl`!-V~$j2{1X2s=Q@*IfYNM0b{=zLrP?kG3jQr}cUT zQl<8T64;%_xFftzR-_?KqAb#i3Rr{)lD98!0#X#_zrojQNZdDWlR)r(C;xsQ1)kx_ zMlZw6SDs$d>l4uC5e0wi#tU%}?>zq|=Wf)t4WnDP>_oH)Y}~QP57}UwqrS8c`IdIZ zwapQzK6BMAu7166bS(8n!5wiWFr#M8phFUlA=T}30t2Z9PlDd#oPC+9(fcI$(>xYL zWs;EY!ydCWK`DR+AQnyB)D{_q$X=L!#A5}iat5@f z1dL#2@~bHpzqP&J29GkEYEsnpo?%$azbquYx5=e1>Fp9?^y|{I18X~k+8+m>`fP+h z81fz6cC!rOCO>3YQ3B-4=?mxQ z&+&L++Vy|Ti%?GJIOm~CR{eu-6-CH5ev=dfu2Y zN&GL}Zdz@mOo)2!Q7aOZIkIe57=gns4VtA`-XM7;OslZ?<_|lR!Vc*@*w7K>UbkPi ze5gbs@G|&aWE-GJBTMZ02L~&vb@9qiSAD^6XL%etok41Ct-D|p^1&Qw9Q`4S@qXjX z=B^wkCFdy}1OfKceKyDC=aYE8!RN|w;QVIfUxBtoSx5`0;jqLV(n}e;?uk-aSzlISi zZaWVgK-zG6$31=>LhYyNau21?;J5tZS=Jr+PUfPhMh2noywJYZdMmqQnnHhzQBB1CD#t&P z`aze9?jC*e$@a^TdqF%7R(4=rVlePnu?E=NDMw*!v<9 zjTVzR5O(p$QOwM_@rda;?Q8Yr026%x*-pQTf0Cyg|N8Vk{^?GD19zZTJ!Wz%&am&F@=3QK9QV(|$t^BX%BFyr$gO5xxY%*YF*L9A0&vpW~54PX= zT1p0bB>DLi;Aw&JH%uFGV5Z6WrzFvk=YS#KPp@JjgD>`JKYg!ff{B|7fv&3(M%x|Q zM4-PvF|_Vz6Qa1hIEOik%Nj*+&+YkwV-@Ovi@a9@d+@fcDc5?m>vuwbO_Re$hfUQT zd*?{!NuM)Gy;6}E(0Gc7+SeKuA#+pws(TO{d&;exmfbi?7OlE!Y{WFXitb-5WZv%q zkUI&#Ak*$!`E}!TlBwhhHLXaZA^wa@OU1?L&EGYNx(&*o?y}bIq5>XAm$KVg5()(B z(y7h+VSY?nmo<|HkQ?Stq)p!)id}K@5>Nm3G`7qA)p&hAps3O%gS(&FK;&hvofkH( zhM^M&zP+RBH4-kxJ=35G^R-yxDOI(MTS(bvH&rzwEtWJUCY3j%$THH-TR_}TZHHM_ zi_!-g<@CmH86H1&LwYfGA1s&JCi*j|Fj&$t8Kg+Q!}oOofxt>*1}$%m4T@0|O>@8jXh6Jr4QZYZJ zmRx^QuDg~U?}F!yXus#Z+h+$9+%(xKpOC#;SJTJu2iJD=YrSq(^`SP1E;T27lJMZN zw~tTT9VXllj0D)=?h8%==p13D7^q}u#f8|H5Zw-e;P(g41ni!ZJ*)>-V#)7YEyll4 znOkR_Z-L2WZ12B1=<`ZXo9UQ(0H*|6_6BtriWFI$1p-0m(lDNwrG^^ZjZ3`1c+euB7sL(SbJ2z<+cV}XGW zeiNDlgsT$Zb2PfUjdCLnDE6eOP7T=@@Cg3)05Rf{G%qB-@hiy=6|SALNNqB; zVju~Xfjq|>l*{2c5O0TfqCt0TqVia)U>6%1^uRufR|w4gP8ytt5U7%HYRr6^s0QYy4#;Dia5tFp&g3Wc1=>Qu1=*C7Y*v*hefS_K6 zsdAU(5MNfP-fPhS?lU>kKc+C$2wJHF8ODd{ST#fXL>7-+>y5=5{dGBT?uflDCOI=1 z?PTK$8$U%QvtqAz99!*Dtt{B=YI85PizT0#OVp(XDiv4nl&@0ZI{eDei0iaRjqKqeX7gEuTU- z+)dXU?TM3g^*`fxNsgNY!)8C2Ubh*p!H{}nk3JwKanm!0aU(eEC;Sqw_P&EFcm97Q zU3oy$_4}{LsI<@jl19kFL6{Ep2)Mp*S*XRM-ySDs_2?zfeC#_iX(>4Pe$X2C|SFX zfMV(gNXNYbq-=WNHD)6&7nBM17F@@^cTFgF`3xp!L&&!>2O^qT9g$L7p*rz z{oYxkJPMOgy33MYMur%k)&10ltg7z90Sf1T|ON_^l_tqm!V z-;Ky&Un%q^=|S=49GGmHsiF2qc(`U>NclJIFx^d@f9Mlsn3Eg6@8s@Ldtk16=z~8y zjyX(L-3`6ogwWAWvhX@AL)xlg7Tptj>|y#MZekXW0p^;Nl@d1aeD>8zX8ePCxqdvU zyZIXo>(>@SrMxQNe|0y`NuDS#m6+jliyZR>jJt!g)y+HqCk%dW?!UsvNaJn^+plN+ zHO4M{oS}J3hP~5bOdS}*jt-<)(u^8HxpI#0K+J#ygeMe;b5fdDl@Xg5mF($gFd)OV zktw+hQtz_z)&wP!?=v6w_eakEs%#6TJr= zB7LWqrWAmqVttjei=^iw?@F(iOjw>cNxJvl!DD4lnBL}ILNC&fTw5F(1m(`OkF8Qq zh5(&Zu3RPVL4F#zwL(-5fPq!z8++>|_Nj!Ls@X+B3x^^x*^&c6b>*@7tU=tD1U<`% z)USR3)FCcoyM8sUT@mgL%Dv_Kuf*GPPd`sDbnpAXE-qb zPIY_PTZ*^2&)?!sNPjHZH=9}nY;k2D7B_C9jLIZl;_)aU4dGv%?z zWnB{?Qs{8&dwtT0uqZ;$`bv>08EbUW*#?9%&RI4pn>3AFP{A~toR--k)wnx4Q)<)A zz*^tq)-zxj23CcY&jcFs&Ltrxp%+v@bSCk65(F?gj<-7g#2vQz%;*+23=^`t&gqpL z;f1XKX|NVVpET1X)-4I49Pf>~>Ci04>d4w1V{R{}dHN+#tTj+OORV zRAOY;h4gydI@Ui{e`!x*W@Gfw!q*U0!7v(s@!T#o;!43^Bh}?r#J_LgOgT9PuP^I= zpFEXIiA|8qG7hQT?niFpJ$RLpPu7!JUi*Y=B`E7ED?7UlTQcfbxvRba6$y)UlU;H% zK2DjS>2QTIYm@QM;Nx`6Fcd9l8fZy*T%YjhV4BU_AoIR&Asen?8U-t zVDaKV{G0>)@M5jcCW{{c8DWnrK?ff&1eQt?n<{P_a9(LFB-A+%4R;aoFmd#5MlK`) ziU#XFZXP4;+4155ScKRV^M7*G5FmHmSX^8UPH9ujSoyG_EL$2(?w;}}+fKX&cA+8O z`Bn(Q3vGvj<}l!92Ge8yXMlFhi?qNV8mY`1PHT3?eT~~tZXY!l&ksrV+97fanCr(a zfTe0x&C0wiLfu5D*KtSPNaxk(gZH;bNScKNLd6 z6qJw&Rd^qvV8l14<0^tS?p(u=o>)8l2PI!4{Tj+>l z_vXu`0|YGRJ278o>Ctj_rO9%^FIet+mha~q$SUz^oI)+Al}(&|tlf54Pv{4DrKXzz zzn)cAseth3>(oBfT$7U;5|dqb6>!EOt+U*h3e%B)TNy`Yl35b5)XkJyBhJ0uQX`)@ z$w=B!UWEzzIk!9tB>w2=xR*bP`Drq2VeRw-BVGz1@66*vuQ$GfOMlA|gpGQtI6(a- zWl7@#I8YE6Y5Uee0EAi^vLKX#!Zjm~NX{Id2gs{Vd z-Mkc}R_Kxk`x;5!JKzKVfchA82S&Morm8}4W9D^So zrz3t0rX8JsAY(Z^=qH}NkuS+j`1Wa21Qq3JYLS(@Z(9l;H#=$cTXrCxQ@P`D95$d+ zlk^Gv;r9He-WylocR*k@`*Z=UZ;f-&S!jSpaH$)QgusFe6#maBsMp6u26H-*{GsM; zH}wlLn>S*(^~~uka{m5~9)3!y->SH!aqRxP2y%;3tRwMZQD3{yB7+nX4r(6t;=^ix zi>vqsjz=(y!Bb*Dn*+OlsW0S2SXb3rg#UuBmGW#r3#|sKYDGV8ORmK~$@|7SL-j8C zi%mGXESG+(lSlxXxPP~CmGFHIZT#l~1QgtlI?j%wh=>7D%6CJgJF<1Cq2b0;1_LQu zo}(kmCZhVJ#t3quM)qEQEk~T9neV!Rkf|~SiT)imcs!=LYTT?U;_j{#hA63sgUyyw zaWsr@Dr*kiSki`Sn4n(&dv%IIZLB`d?u)($jTi;xt1ZM9L*D>t zJxvg}01lWfh&h#wnh7*%TYXzRpxwY>w~>Z4uHw!EB){z8V+DDn4{}o8s0Ep-CAzfVs}>6;DG}+--4J6HLdM7#$z*D@hx=?j#SDU}EP?I_p6FoM?ou+^zrl|h`6GKPE!2*g;{SpDR z^jjXMQTLM8nv$UMgLgq!^ib4Th>C0kWwY`nrRz=TCp1jy$gL&4#i$aLJl&5^JJmEr zYXEark?*MUy(Po@M78ovp9O=!*|UbHD8mN&?g*{~bxPk}dW%FTV#S8wTvT^sT^VVL zDr}?q@#0XDNM%gYWfyS}&rw$l{R_^0AKhzYK_$A3jU!2A?PXYjBp$6N^l~JrkZg5` zCcI6Shi4Uma##_aH>RaQA!RqD)ojLE1*Niy0w8U9_M^?5q->NJbhi_0qc`CQyJZx- zi6rC)y>@0J7lci}ONINvdV{h}EaQb?6T(uwQ{?$>J!*0%HZ~11qgz^ zquLvdci}gv$KAs^ejh`-bG|DxnI1DaHl_OyTax=Xcf*2E1CPq^$vq{0lIi()?htP0CJZ0tu^0FoE1#V!uI5yd_9{&F&?aXed z!L-(WWycqofYTcn3&ZxT#qsW&wNP?}fY_tID59eP1oNmPKbXZx4NjW{cSsek-pWyl zOS)Um3t=dmkg1p-&(sjj8p93WVkK^8o+u+dKnx#dnvkhRqyo-Q;5AMHY4EZtsR!;Ky?U&J3Zt z)ing-jNjlQ#Sx|xinXelWr0!vlF>s8l9OnJE&srWm4Sn%@~d36u@P=3F#o1)F>F%@ zec4FovV78ST-F#(x+M@@M5mCxXTNmAgs}6tVw78FhCmi&d1$wb#`GdAm@=h{3> z84qGZU{JXW{f;lfo{@>S-7k<_>#b9On2Z^^F3M+i0JwJc8IJ9L=(Ni_P3DTaf+U(t zMe*Z^Qtzuv#jD3Q-cPe8lU%?;o+?F*f8WNDtGG$bO{htWgs*_o?ss!Hq6oU-KssXI zOkh*Si8ueBv;@XEUNQ6G&?B>eUW;hHqi^Xg*hSsvgX zK5+czt6d~qex2TnQ&%S~)y>2$NHONxpth;xGrxPY7`W}}n6*q3akgJft#G$S^(@un z=^QM(Sv`L(n|S4^I>*K&u&p?f<&@d%*jn8}Z(t~FwRm1NvT1d8G}j$!gz{1I%p4To z+*NyJM}h$Rnl7rk$z4g}N2QIOA1faa zB)2q$XcuI3YAPXrLsQgzod1A$o71LrCkGjM3A$Gwv`&J}cO#N;MkIdqH*Q;^si5rb zd3_~pD+qDyKqYj6>|%Sf?`DB6`PzG}4~bN$EBtgGu;cPX-UhF=@Iuayf>Y^Wu*rT| zRee$n**|fUVhbvyxzME9HkJlujhi$C?=HI-(1NVHLC`nK6C&2JW#qKIVBSHRX-P8+ zy5Z5}qk-1L5yTs+_i?P-fSo9~T`zRNTapD~;$96(f11*lzO880@0s=feLi8eEcT=n43W`ohs!$tB2%b3}BJH z2?1(P=}DsZ!*??55=ju)wt3UumoCDaq(yz*8IMO-YGSSOi=pT6Hsz_efIK{xO24Nf zVZL^I_wDwxaw+uuT}6i z2j6f`n~_-P|EjZ^N`t<}aBF4s#*y_Gzs%Er?DR7$3jQu7q(iF8P@+RvUweqK$z`kB zOP6suW+=?q4=nSAwqA^L)kGx}5~`K4hDYEiQ52j_EqDM`{z=+B2$>3_KeRg|!{(a} zxhn{A7sA?~VA+nUZljs)o;0Yz@f4?Nujehq(H|(aFhCo(OS)0>Qz<%JB?CR*Dxj*y zvse3D)I-GrpO#sgah+rwn)Xx;v?&y8yy_4ew5Htjj|O8uGl$(iKp3wDK`d$cY0!z$ z0oG=vxI`k2wj4r=kgZCR!t!K#=ZDuuL(#8>^^XiAtg7;dIF9J-XtdhlEkTi`#IuS$ zl1C8D!RE*}+i@iB_zh*w&BJZE-(=d~FCh3~y1EV~OV1jpIEsLpCN+Lo{tqhIr6E@- zkHln9+6Kxb5giW4X_7`2mPsnIPBN?0FL4S@;|*_evaDlEST7t$%Ltz}J)-u7gt%N~ z_NrAb$b^&{f8OFj8*+aY+-3wXY6scvJ$K3Nb7o(S1}<3}9M$ed2&RyH8=lV-odVi0 zGJRFW5Nxuqm(cRm4S*h|)2{#No?`(bC7ScWu)U+>6&1ZO<0Ua)45yPO4ODyvIo7=- z97s7{a)yE`@IuOZ;eSB`&bJru02ygM*Ss)i5w1bLf8QcPsr^qA>iL-A%~8Ge zXLev|IUnb|D}D@9%)Le;AsKyBlZ5F0#BDnKHIZx5c#gixc`sND#TY0|>M9xWDfnT^ zHrgHpDBZ@=ML$AmsC!i}gR~_xqF0O@H}FScFHAFI!ndW7C{Gx@>pE=?$#_Pz<$7>4v zQ|32imfFs&&hvS~%t^j;Z8tvFBfnkNW?~y3GZW??q6=aAC8c+J+VINfx4Va@%sMm9m-p8? z^Dw{-M_%Z3mwo8Tq9o)x)0=V;=xm93-#*le2-UAz_X+sN7}h;rQit{HT3x=vj#R^C z3Dc^B$j2#4{tEkmu>8gS9`bM$u+R?S8lFxXZDq?%hOVeocp+AWLl~)TwL)QQ1fi8c zrhL7x|8bDPF>1JvMjpH-+$Yi#4&P_VoPq?Rlp>uFwakg2x6G-P(U;(wt=oPR~{ zj_^-~npD{WELl!j23QT(KcYoKpj8AhraL>q2?+*}T5U#stW}2P?V%G&WUW^2{_jYXu^=t(mE&N#Bp<*il zR>^~r>^Rbe;3xgw{Da?YQ^>*v)_u;9@uoy3FABgY6o+2dpvJKiiYMRhi@h?6+;O+FO%>d&c_)cqa z5Y7im#S0j=A5*>aFfPpj&jaM;sCfb8(DtxRU;J=_oCmebg|k>_H)+p(7Isq8QW<@g z30G=Ze^?$^g1g|C5V43&Zk_FU%Df6!jBC2$-FF?wV6p5ErZ0X~_*18TV9IVp-qf6bR;Nf9YjF=88E**zn7q8* zOQ@Jv|{iVNg3tGYXSP9~DmI7ZE-rQ(9N=6aYHX?O1P@hCnl}aza6>cNHjV zn$hO-{;+A@JmqrIQtH0Sa72Itbl1YbUf=JqH&#CUD%D1!2ho>kFGguXq%)j#A&+Lh zo}HDq8xU3A8ar$4Tbw27{9(IAJMr#nd8+tiAkMq;grE+)&^?7QV*3JY=~!J&-a87a zc4ObG zENa!jhzWK^9USx^^q4i=twcsRMX-y03@8Qg=6!Eh;H|0@PisQ~L}Gw}?ciI4EA=yj z@+uH}6pqYg;N!zNcv4u6p>= zD?A*p-JCMRKAhxS#;YD|rcz7PMmno&MC8oxE!Y1FeZsuKWY!<&8!(8Z;1A1(9LVu421?9i5%LRYQ$N{@`_%0u z*D46etDLU-ZxqOS${nso2BHnDdClwHNCL|;na57Hz%%CQe+~K;4$G%BSvefu0+XCM z6xp^^2rv_rjJ|+;Q0$^Vq_r4PZIub%f8`p2W3QQP97l?C-c=22KSVn07a2@(Ay}iE z`JK6*aHRSs-||xd&$Mf8b)nq7iQu3)C&m3_wSFhctZda}Jfv*)NlF`T(+n#Z*P7M!t6gMaHy&TZu3oYE)j=q&gU#PhTZGCd`WPw)f-p@YX`j4aeQ1 ztS%mJv82Tv78JhF(oafyvkj+<*GPa<$ry**Xe1=$1eA0m(vKB+wqi0oG7AfrF#9G* z_sSTL=5>}L0=%^$CP9X~`69cHzE2BpNMG5g%td_6mC&5B;*dzNSKC?axeTNCoVtH? z82&={yH^t_{Klxyxs54-SeW9S+yM|M?NES&F=k%inwPgAItdA!C;hSm7v0J6Q{f|+JPDGGkMXsd55$W;gbgMczc^`JU z`)X3r8^~Q5=qy1R!hG+fj0#@(zQ-TbAxfuGie7TrCEoTb5nmHh z`8WSSJmw#{HtVP|96PY@X7-*k&@njUd?XzNxu(vq=egq~wLM6=`36^Z`(Z3 zYvBb_mSID{N3VKuvy$jv)C9vgm`h)!L?QO`3zil^tz1^gwRO+M#!wuh-4U$}vj4qq zOCF;5;(fy)2?=-6T=}rbNsOg~6}Sl{%)ueU_B5F0AkB=(vGyXzf89Sskm95F*~}>; zIOby7BF1ZSy%%spq3qpM{8*HC2o+GwHKiLSW#XdSagLd$zEI^5ITvBw>Hr+8@bjlC zT=RjOX`h$sAgvg|r0eZuhqkSOGXFVQh3*7Dy_+nVDf9jA>2j z=Xy*XJNYbkQ!tcqy?Z`AK`@U4VS|l`Xq~g%%ppX?oZ@&mGadHB>D%Z9gdGwoxj#~S z1Y888lXw6`4}JTy>vcw?GoTnQyt(BwSbXXh^GCZF5T4X|Dy)eOnCr>}U7So%lPPhGVL5VdDQLZcD1$C?H@ zB~ft9v8Ib9j|tMFpKcV))xvIzpO=)yiOBanep`r6t{r}(&zjLMI9qT%e`!1yrMvK}d4P`YHxBbPt zS)T|!{IaW@^ypkJQ3oMwkxuY=}0amgU>3S;~f+&}JibgSemicx(e6 z6cS99d8jDY-uNQ9+6~50c&z?nAs-DXfwY**wX!#{MU=2M0lfB&+N0hqq@ZP;Zv_20 z$M7$K+kG4F!mslNe?PI9xXUxDdz^3bh`#ihi2Fp7rPF44%(@OVIZ^Ujhrzsw^^hc3 zSHd(FpK!=X!ZD}Kp>>0tmBFdAyJZ7#Z)?ix)@q_*>R$Y8&E5|Dq~gacJ2QNg{^kq^ z0STO%6FQU@A!GgWYiOPG2}A#F%FT+;cjE~-5?aeyKb!zxLs^a+OguX{lQZ{xQU}jT zwkN4#$PPzRJAsp~0zshv3FnWq&W{;fg)H$ocDZ4Gd9@nAUZ&9|OBxE*hcY`s^63I% zPU=>f1FHSerIeUkLfk`A)AXG1wi*W4PwnJ<9;;t*F|ga8z*h|J{C&I&MHED$ ziFjwGLl(OH=6pM{Z!`h!PIJ0&BPi@$%il+CT8|Jgt+t#Wfr8O8+J3YeZ-Alrvi-0d z@nKQ_a9!hJ<2|GwkKV|aLy$H>**LU~AOb1SssE_C(vGdm6N6#P_M<84s=idT+& zR-uAYMr32c@$0epm*U6Kh1GDY`fq*u*5lYcVe%LY2~Q^c(aAHq44gJ$veJ%pD81QW zt{nCy&U3H0Js!L7K-Frct1{6RI+_})u190!V9c682lfu^+!l+ndRu_X9jW`5pp<^l zFsZFxM*5jG^P~1Ba$&reKAu?(DokKr>oK7KWK)L3t&$TZg3X{`<$isR48MqZFZYV* zfcrqzTT@3P?;#RL5B&2g8u_E)3Ol-T3RFcDs|L3N=EVR2-p5N22e2yhPAxeE6HvV~ z-UW{-Ew!@nEjvtJpzI5eCkS53e#o{LL#U8>JaN^@2dfD2E^2%IADl5ZQ-$J^H(Upe zwcPf9iCA5+CSAV8ZVeX1wrBnrtDv`bV=>B-B9lJG5hkFRAxufr{079{Kg_$#*L+-- z+{V~^-xbXbrUMnn_M$(;(cy|yd6lQyRf5b9$8Uh^R$IbqFUjM82Zfr?xP=Sl_ZKR{^tZ-Pr?sGj*{Nm)d4 zQhn_Y@l&_ONS#^w0d$*Sf~B=Nfshd-7)M6jAy*NgP$J8qZ%m0NSD3AOa?ZZ`m_c0~ zw@8|aUJ_GSYq|+RP``K2oSX635$CL$0_*MgLkV?@#(NHyRCRr5%70_)lMuI5+K7Em zdz%9ppZu0OC%*L5PQ*d>6YZ#a#5MAYi)Hf)NMgP+qD@)~ny&gh?HO@Yn(>U)NN_{E zl4DK?36iJ_AlxV`?{)l2Zh~ zL9oH5cQTSz@UN%3e?su7yQypPAC$7qQ=3?uZPo@Xg87;8F6R$Itr>0=^S7|~!BF=< zkc)7Zy}k`Q(XLWhHnl1xfn?^)53OI$e1^AF3Pg1TBsWbEy6Jt8s_G?uZ0tkrlcUy8 zbk=D7q`kaDgHTtX*S;DulVi&x3Ztzv^ zN>Ida3$6?P3+o5ck`@?eLjVmF*@h$gH{x5>+44B=sYY@WTuNTL48s!VwI#a$r0zmY zUCLX(pc~OU`kynFot)n5$hayN1%Jc+RlC@fHFF%IS-ysrZPQG&A3bTpg<4 zdHPYn*b!}v(09fl1VQ6YaNiTkSisl1@jgI7b$&ysH6Oq)cHP+_B5=PS*Lky?Mv79# zeS#qmgyE{w#k&m#96T#DUL!7Xdo#37!NW8w&VT&#By18e%+20-4llc~Si(%Yn--sc zk^)l^GgE0dHp+zQEqGRhaS<<+a}AV^4TP;y_Lzrgx`a|b{{YIm`Wc&POg)|ydZJc0 z%w(?La_!kT6biG&R~Zk81XPmmYzGaxK}=d(-8Z&H{m+vdSAENp#+x))4*oLJ%!`RP_p^N)lR-?wUQ-!hX4}4 zsq;Rm;dJL~rydR=#p3oB@75LY+SU(my28l`q8Tp~C>~=L)*-ZH2kE=d`cjxs@q3&ey^4FwJPw|Gg;E^DS-ddDV;3hy#iyMI?Uh#GCNWkNq`Mv+j8>11H%zhfwHy` zl0!A-9IEpEYJ3V!*sC6w(OqRFdd>axFGXzj2z)uYo{@97p!FcH=WcOlc8ZB3?Y|Cw41q zBC(T7*qIWCTq22nF2`Ap5J|hSZ-oJ;JJM`4T+byjU53rY@rqYM^be!cI)0Y zFh5`0jE0HP;jg;A-Fy^Al+%&sb0G@f>$d3(H9gKr3#Ie-!Y;JL80Ip47ZC)m(&f`= zGcxigf{uW=Rc8tIFNc)DWjvsWZI=D*ctVoe>s3giFtuhPt!rNtj6$$s&8ShBn0#@p>$cgSGn;(136U8HGY3LRkIUD})Zl4^-aU72wg9lNP5sS59EdOR3w^ZlD!%o8lQGQ` zhPz+T`Q6)IeE2AsbUN@WY{mOCQlhd5kXn{TC|gN9jylE%{A44qA{Tl?xu(AK$P@+E z?-Z{h$zg_TCyxfXwZ}gj@;D&jCWuNepTbw8Htcr~)2H&N7M#m0H==DT4!`mkG&}RL zqkG}}O=o;IXF(x9+_k-Y37DNwK4sS%Scvtey7VsG;(1yeWLR7nP1vp-e&Q&0253OF z`d=xfgaB=vJIC{>6~3mZJR|>91q$)z-&u=MYJ+>-tOth3Fgzb{!-O6OrLKVndZv(X z{)?yp>vDZ*_hP_7QXbQ!nik>{B(}~i09y3VJrBJgm6?F;>VpP=Hx1)lM!#smS!}G> z%v%R}b@dibed2B;?a_jQK?Ope5bE9z5e$)sFZW!Rj;O%AYO;OY01IXKDC`u_vIap+ zb=~n3Xos4_X5R(ilqPAab0f3F98-R!_~0=c({4Ha3dOTPmi}|Ar%Dj#g}Ue_Pt3YA zOcH#&Qi#vuGkX@HnJ?FLI>IcXOA}v1$krJh;D7yeVGHed4 za`NbpqukH$JGza_qP68 zr>8P}t@0yX4PN0;_-uXMg0Y_W#$e*3y5@(qeSt=-F`GI#9|PXgS9$*32%bHK+WxH- z7{YbqM6)rQAMR8~8LI2`VWA;J)pC+u_W-$O1=Rd@Dui0HIc+*L-oys&%#0+| zZ^@O2f5C%|?QL#uKa2BSR`nwKtsah>dn@ye}&KdD*RXxJW`VM>A7x{ zGEp!}H73iUtX5={*I3}#wf#PWp)kGCZ=5S)o84^Zbe)Y7F1<}4xqAz^i2LroE1Z^Dc%C91}(1O)cHe* zr&%5WTh?`xR=a5WW{Z~#mFwYWGm5mk89+ioJNLf$=W^p9bCQ5%8M9Wx~P3Ny#y%8-^$(607 z-=4z%A$Lp!Pfu@4m_*7|tVJ)^WJ3}GJ*Fn*Fm(WJj-RJYt|J#sXXtgXU7d+_|0bBZ zIjwVyP|F|pnv8p@l65YJhy?DFvZ)kc4En{+w3E(u>KfBGB!f`RG96R>3Qt-@OH@E2 zJH&9{M!t?1;0dPl=w`+lD^1&*1@FdpGD@ByNUe2A?|lv2HI4J|R5K}nB%8l>cuo37 z8W+1({QL~nHbs7q?66xKY~8-hG!FtQ>R%;TE@%UmrJNo%PGyg1O57G`MX-`wZrszH zp)!!~XxbSfqWRfsMEXdoSr|d0y4VkvPpa<8bjZQ!I z1X>(}=ZY>plnq%k_oTV{OioFq{J8OkIK>EDv84M<+r7xxqU#54R$T zdQL4oNU}=BWNy3>v>5%(sfCLW8XVCr`Q7bjU`qUF9)V)y|7Zjj%!LTHzK$nv3R^&? z&B(4vAvlHsap?ttO*VsPi&hNMmK!nO6xqHR<26@Txi@ASN!D zxq?(zN`lTMEC>NxtuDPRs{o4~V;|3ugZqU3m(rS-_%Oe!V|$87V5PC8?dd}TR+*o; zy95ZbaU?UYShgPcd%|`9F+@qF-6hDwRgBwY*rNomBHd|~O%8n?-ub| z>NTLbA*w}-Wo)gjwrX5f1sq3|N8BF>sR89tZ(|5JfiC)}o}G~3HYvMHm3J$gVW-*W zX1X|oa@FP+^&hf&M1j;tpcZTu2al}edVhx&t1C81qxiT?)q$H^`o!qQt<671=^}P- z^dfWV8KA?a(}my7{1Bgl_6YPE;tw5eHq7J-e4}x$$*nU!`Ypx6{LHXqe&}O{Q=Y!m zPk0PJq~6=HBjd;5QSgmiol_v|uZ~FGzj`bFB7B{F;~{dM+%|P9qH&769Slh>;V;E1 zHR3*H>veYMm_nh|>f?AD_ChK2H}LSIfviXOGvW{jdkEVNPFxBZkl?rCH#cx=tp23b zKEofH-s}sCvb8_q+r|{wC*xKSH1Xa zqX4*!v__vh=Q574Q$9!giAm{pik|iPX*_wAGCRnIovf~_8kOL*`M7ny>nWH+)jBQ94EP!?|GXT$sN=uE%)dnP!oiPrkz=Ll*f z<<9+N9Bg;_T}~%3lUCElNCSEGFsqJ)JRsz>jEG-}Y6phML_8bg7R_mOnDYl&oMV^i z%_s^l_PfMdO#_2su(l_TRGjz^d{yljE>U7!JBvGL3C_Cdv0ro<9GI5hGjmKSKYYM7 z4c$u`-?U|$R^vGo&TlC^GJExf-dY+4wH~LzMc{^ktk4>8*2n!*!yCpvtSxlO z&(!V4Z+WX6L`t{FdEXy&AI1)j>y!y zrzp(x_TuZiK7HV;2qb2FGb3Ez)}N9+$a=~tDKx#sTw;^3DQVIOwpGk4=k3BMbmNFe zLB4D<=Id;6T%bWp9rnRtNy?b0#dFI8m3$eTm&cq$pO&5EJr*!FRN@bg(kVeN2INu* zUaaR#Te1XOet5gTW5$@A;3ALC0dj6;s+Rn`6VKDodc~IrM)+x_@&o{SF-K3XAym`6 zvd#!1jFvmjEDTE_kSu5dD}Ueu6k@D1ee_@u3l=&%DTRE7wqn&jBS^7@pQ?Tu-Gl?< z`B$6(n_OIy?)eFEjS>Hon8S#6jc2b5{pS8Gpw;y04)NdP#s-@*^IZaIxNXWv zlR>~Mz%qF-)PP>0U{BEwGlBrx`qp?8h?U{jdn%rqfN_|{EB;3uM~z3E?sRJ_w3o5cbWe&+3)rY{n;A52OE>t~4!<>&Ck3>$3SmNLR@w zrI+p}+_>jro3_XA(IJ2;FT0m01h9|yyuBntS9RAH*0d&HU`ZzDu<)iDz>7^fb=r19 zEQvHMk{#Sf6a$P}T6zo@s~)}d@N6E8ZPLN}qRlH{vHhgt_Op{Q@HFiHOA*K8{bWIz z)Z@IhIgii~SZ=ls7sw%xd{##CLeAbyJK0*I`KNLtJt=?*^M3Vy3=iKPdRq^BlW#CJ zGRQFQaZ}9$sMVFU?2NJ*org89PAVOz$Gav6AD&9;7q)2&r>>oY-sjhvAKJQcLX$bo zLE>~{SR%cg^ZqB?(Czsn=A0t~C|c=upFMzIg+!8JS_1Kvr%MgD#WVovy$65qJ`5c9 zL6(bT2jV%!ZjZ`)WSPU{1q5lQ8Aman^WN*~ZHt zj?|V`@Yu6$puWX9ugeY^OFNexP8kKs!XvB5icF>pzgOq%fyj@2cxw8UWiZOL{evk| zd`7UD)!>ZoGv49t^?yD{Mpa#xn0(awB{c3h!$)h&aV{{0tnB3zBYw&JlbA+&SgVv9 z%4%e2U1q;LrgX*4L#a3J!;635SvjT#7AXOmep$tRufxw4x!dTh2`&IxNz125b>chuRaru%r`}kmD}oeLBIzX_q?dLr=i5Po(`K--%ZLG(gR)B8 zOkUnlb50COd>E6{@maGgIf938&EIW=lgT_*Y(sFnmQ7XT*eemBlxhQ)iEIf0&jpv?f zD3c6W*SFga1;R4x3}xm4f`@0!8s07h(~mbgF5@maSK>Jx-#&!qKhk~b-wHDVKacfo z-mzWiBegJoGpQM`qd0Q7o^Y|ad_SvM2+lzHkG_UZ9S=2I7LiXRF}gMFf00UQq=~Jc zFew*5B6BXD;8`5JdKa7jpjIk(lRS5{VcJ(%E=FULZ~}rG8U4ObI8d%kjPBR{F3$r4aR8Dm&#RL(BFX==$SZc(-C}LszKb1zbSF&bmx;X z3ysUpHqED_SguGC5LL;l-GP45D2=P~@8tG@Q`?nH9a(>vgWoVY8y0r}c%wLuSjrC) zuxNW;3ArC2UM?a-T`{)(2LCt21Ce{n7fX=)WhzaqQD^Ke(<4(;1%u@nc|mocmkabL zPRuJ2AZ8uyj31{pqC~ho|E9%vZMI}-!#-H-h_mCRdE4^>Pt><=AV(QWmgbNwayFQI z)H&y;oMPd9Dds;<-$q_gG^KMvG+b6mzz@1DE@U|2hSBrhJ4v6a@*|aZVgf0#-sdi1 z6Y?A-c@`TL-Gq|xUUX(aM>pzg{SJaJZm@d~veZ_?Y2Axv0&PFoMtPo#$S&qMKk`x_ zxm(OtNk2%jRW*=~AqX667GHH`W)z&2S?ky)g$S+>w=r!dXtIvgSut^Bc1MD3T*NCx z@#&O|JIX|BEjCo*;d|`{oU#18?eE;_#0U5pZu}GGfH0CSrTWH1kppdckGR zaWs;ELTo_S<%R7?%W$c>Mx2e?${wrqru&hZN(L8&f`<$rN%R{zc(QNBO#?&=0gUR* z>10MrEKP9Is|$SCZj1Jfo9M9lY4iW*f4319~s|iSWcqv#X8xF+wd(gsSi7#35?3u=r}U%SR%@Q2{^?$t81-0qBbFW z#4BYi&D55c7yU!9`jp*&1pj}q>GZoj@!V~S;QCoOLHu;ZRua`ThPBk|LjeUSS#-lM z(%*1_orlX@B;!zNvtI7|f@CDx5JRZ?7D*w*rr{Q%!*oAw)cN#7>_;ZE`P4;OrE{3?YQR#x)twkby~}x-&Xpp7hT= zS)|`L&%QU;sjx+in51vE{e)tqJNBGyD{FD#qwLtN5b8#CHk~T$v?c=KRxKMi2t)fE z=mvi@`>U&|OEP1=&nJ_EuVvLj74e8F-imdcZ^pgCOmEi6d&p1N-Qce+JBZ(!^*%ie zX3xkM$JE;3jLLk2dP<0Tw&qGqum($A*Hq_l{PdIU2DQJ}dG|{|E*A6tbl?BgJ>1If zl=rKyYjDF9EjM3F0mTIR%-2P$!Hw{eTXlG5k^zz$+cpoCut;9&95oYttq2mRK zhc>&v;>~DyZ&fm^q{698CJXcB)u5f|qG_Nj*!5(7uJD-EVk!K}=vo>nx4+9x zevF0JspYKYeU*4h4|zljk(7Wi)r&~dNWV8YV8MDxA1`;%Ni>7!&FfE7lwtl^=*hMJdVR;Tt9jPeP3ia43q<`RPCP~2M!p9Ic~jqYoP-DY7zIgARtB z&Jfw%7t9; zJVzu}Gg9&#jNiei(v^b9zH)4q1O12G1TW}ozV-T+0&tFczV63OS{yl-AaC)ird8U36z0otPa-MU7h!*RE|AN=k6Izo=#>4tWEw!2SUtY@;}r{2N?a zuH0G2tsWCJuB^V3gKBQ*F~uzeC%L9)QS-?-aoM8we*>el=Jp-#0ucY`rEX$FAKwh%jk*>L`pfb2C3$@HCZ#}ow+zGu_muLk|?UYTP#?=gQP%-XOt4@ zExsgSBo||#!@YYWhund3h45pq<+da1z*N<(e5@&wu)S><5~ec9D(4}vH~%i)1zK3Rqh@#VWhWqt_Cp%6c9!dhN*A-bw>`r1J#J((PGNcBgD-My1+g#CM_S_dB$&J zFAcNAOda>fz`D+qljBzHAz6H4MQ{-fT|tV{HUa6MH6~r8evJd6&h`(SM5^!JBEcm| z5!QQG{QM*;DP7s>nhAu`7#ww&r~H{DRUNyl%*6i6+|jS}i`bOu@BIR-n~0!|(njzH z8?9dPa^1j14q^3Z0>`H3-i;jWv?TX6Bjx>9lZlf=pvUO2#3{W?zv}plU>#dO-$A>; zis*e8W-IF#!`hUxUR!kP1(@dQB%7zjgcx7y;r3|!N?lWX^-483Td~yPfP0XKP%rq| z;W-~6z%8r5sw;370VRj1(9+gi5p=<-luT~n3YNX6bv#6*sbIleoOpA&8h(1gqxRqKM` zfo<9r?m33DrrXx{-Kl26wzJJ{1J~<{plAKu%sd=J^uf%p zb3{Z6L_2nV?_k~}lPG}5i;c$7w5VGh4Uh5$-v$Q-GCM1ihF&oBKy zE+t~qZTeY6X{fq#4MDy(NM85xR%t2dt8dy zxC}YIA=yiiF@(eo$65`~A^gU9;n_f@?Vuaoq9<199KUdD77=7w*fRN(bezkP_?}=# zBB6S>TC4uph%y(XWgN;e9q5SY*hnrRmfsc}P0lJHYs=3qA!rQ$}4}B*~H}QQc&v>2*!NaK6N8dE~@Al!#5T&TsBH zi9SgTwqw2UG?R`wJK+rW??669miFhy$f`-SJY*p1j~CjrNuRN7s@PU^i1^=oTz5qO z_apu3kBGqCb2cwYgih$P3~|yHY>G*L-s*GEZ_tvng|;#StK_EU#QcG)Mc>du4~!QwHa@ z(>z`LfRP9ZZi!UxAf{GztkSC#1ruq$^lL&F^kujIHx>Qbl7Y$yQc+H&U8nj{$wUp8 zA?x~iAXHHQyKf&u<{1m>uH3XHfz8BTi~qSHpMtDKHFFuc{Ve75%`Nco^4M$5d$2Ij z`$@`6Avmxs>`lrWZ&ZN=ii|=Kg|jSbL?lEtWkmmPI^r3hI7w@7#S+*wafXx0vrPv{ zTHO)h_Ev}i{cC^ZA6gwgmih^ob98eg*=$>%qqqVks;wCZGn`1Y<4ygB@Uz+UzEuxl z2Zzt~oEZSe$wQgOuj;#r&o$1~PM1vu^M-Z8DU!f0{0=`_cP**s>IR|s2`b$JK`$;C zlx~F=D=T2-RF-L^@N48t>h+}59lbH4{6QE}S~nW;vZw(jbi&w+SOw zcB1@O``h1n38MsLo7gPIyX!Nf=befqS`d>sY=1dSTKCeq6<}>%u22m_G);*29Qp z!8*{NY=PfwwmGGGp>aYPyTT>E3{~C0EL-EU5UBMXDzyuASE4t!Q93>)jc7Wn_JsyQ zyGY&|VGQ#E1x*pa7S@u9!)wHjUrj+I8tzKtR2lIrXmhp92!%mW<@Z~I*b2|rlMmT~ zw%So=<~G7?cj5dmAvFv_CerLfUWKHaXHv*#4)Am(s`Dewe~oEZz5Ir*+l?4G_1z89cA`1Ag{vT|2-aj5; zjH6#;@eU$&a+mVAyh1ic7SulUZwBy})3oOE8IQ@YRL7MNY z5O;xkI+ROFI%%9WcGUo{meHP4JKV9WbAInwlZ-z0+U!3VVkDM%1wnzs=%1p+o#=8a zM$o6-K-EFg6GCNmw5G9Hur4v4M4#q`T%K(U%|-j4vqcmBA6t){`Ys9qi#pq;%u9qs z*>pvli$sJoTz0~M$>*YI^EYGIowxBDnLncOwAP`oz?QI6-%WKP3W4mxm$jZ?G9^n{ zQA@A}yZ>ffC9_k%VGB3=K~EkCi$f!kuvH%G<{+3E&VRY!FFCC6Jw`vX@JEu}*%+PT zkcXu;`?jPd?cB=fXq%iD&FaM@C83PaoQ39{_VDHjn(!Zzs-wPC(DBFN z;u1#McF|1&yB~7wmHuD`Xlsp$neR=sEzn{LJv6TSEpCdxUFgDO0lC9FSHzT&8mz); zF!MfKAdVU9zdAWtsNv^N0ue;;rzG17YA$HY8v)c9w}t}@Ty2VT1VL?=1m*1@am}dB?Kotgm^DKkKmWjh<)C zfm^@4K&I|Lh#%<>9C=8JpdpRt;Qk#vUi^na;BqE*Z%DF)& zNci+|88wN_0|<^tby6Qv^vc|G;M)#Y2*@=}1b{jcYgFN4-LFla7n~aEU z#4Pgc9;~_-d*Rh@@WJx$M=!Uc_MtywR|AILXKfMrM@>4Uh*sV74^=e>6KK z#)@!jTIKUe%|&Tk&It`cs+P6IMcV_%U--t}`V^f<#@4#!5Gc+mT&@r!w;&m7%$Oud zB}@9_?6>6ho#uA7pwQHiqPP(<0GP08V~zRyhh5ZsqJsIC4l z65mg_QOW2g;EBQsn&Nx|1cTH?b>rl%IQ!O9X|MF~*g%jl{=}V4>&rNlUqgne_s^%* zgn_ZyE>`2=R)%%--L9#hipr8-%5)bBp)X`TY5AuCX}n!kaRSjXz~EM(8V~iH`{9XM zJg)md?~n8ZoE4A6RcXCdW6bY!U9?{)U!uVut_VuSc4dfq19M{_C3wT)pazL~4gW7= zN+q)Fc=|?Ogo`;cBiJgT^BZyia|f*2?h~Hq?r%y2hq0Z&SjV+pADSo7J2M?q zyQ2{R=r2{s*bEj_?}w?bGtOWM3T#KDd#JDuEz=GCka5PKn0C4+@EdIXWXC;s@%4ZS z@a&@_jVRZq##C#up}4LmPU9jE6$NTN2CWd11dqP*{1<0H)N4YI2R(a=K2hWP^+`Nm z+SglE=7J7G@Fz}Pm~ynWh%MZ4WETcu96QhbWCXMTl7AjzD)!uuDu(=~cWcqmLZTmB zw>K_m8CD|ZU_j|^6jBn0@6)S$G;#<&O1wXq0W!!MX=?sz29}{(g*S@Dq{0>+zmJ9< zbxH~EP7&T;O6v>&XD3%PgWBu;#3ZVm5_5924fkMRcEs0&jBm)X%`xI6XqF;YjHK0m zhr8du;;Y25Se9=eJX%F4y_~apkKZSa$f?>%+@0{*wEZcGozPD&4AbOz5g+2^*Df!l z;@mrZ61;lh3bcz+9(K!_$ZsHEykqq4}TC zCuEQ?uWqi*aC1?_#4;a3p#aj1296q0*?{^?@!MDbgZ^k1I$NVkF_2rb=^1_}E9)-f z3h9bT)|@SAL3&WPH&4*nggxxejTUYvz}Nc9_|o*>(FE`gZ>N3mf&=4DW8ESRb>lhK z+7hA=n?6qPl_?B;-BuWm&ohALRr4)Zy}~-Blw>r2Wq6DbD$x0X&$C=|`w#mmaIEZR zy2NxBUm#t6$-Dz1B1@6?{qP)e1*X=|7{+XhrRtWjwgZEy;J*=7F;NwfJUu({04{%P zLT?r;iqf|vcS-jhh_N$0DGNij_*18EN?(o5Xo+ic{#w*WyvhECAt4b{T=C2jrW%~_ zgXP~MA!MBzasAujAyCf#9XCpUz`0Jg_`qD&hD~=!6^Nt15@IjwoNuwqL=Xy#au!UR zL?^_!KW`3;(7KV*yXK5H(4-*ViCnEahqgmakOD)glD768E3EO9$Ht@TNr2a5==|Kl zAu_&cHeQ|IfJ7xUKY%Mfg_Gj3miJaF2h}w1{0bcoe2!Ew9g=;Zd~{Z|Gm!iSUZalZ zHlz`z+=+}b3Nh+_sdpQiWkId&^Pdq1omTi}qyK&s$(_FW^C1X?Fp`pP9bK<)0ODz? z*{9uu*n^rWEECdHV~IBM)KIoW2<*2gA_k_!WoABy5LWwfDolP(#VLqcaeM+HYms)H z>Yv8N=h@}oW8ui=8l#7QhxL^P?XwQ2Vxgt0X(_WbZ}E)KN2OZ{kNiO7_<$0^nWyz+ z4edE{78a$XpDS<03;2y}u!08ZrOF?sAyz1-B%Y{viWu9SWfA!|PTNP$`^;J& z@WO5nxZa6M26W7^DIi#3 z6QZhR{f2uG@*saB!CkcPA;lQ0Rx7FHI`V=^5&B=2<5NT0G6ZYGAR^#rT*vxOMrTF6 z;8cXPqpaXroWh!zJPqeCTGW&OKR$*eE7R#nU%@xo+#ZPaQt8VoWAE(4|I%z=Qfx>- zH8;x1Iu{1k#%rB%{u(A0UEpFW_a(@*GX{AubjMTle?AB51G?iw$uSWdQ%O1*P=Blk z=Ya7AyP2>9E0?6le}syoZG%2Be zw7_vyZ7lR6lZMWXqA0m9vVP1H$iFNt#@8t{b-F|3WxzF3xSU9DC-9nsQK#-yd!}(9 z&MY)6usC>1)YjoGxR8z8-SaHK={J0MjbQjPQ;2=OJjJ_^&AF7Wp|%EV-ez5A3- zkPb>7ehB^b86w%lkQ((V;6$LZm|tW@gw7jdsn^UA-0=3cHeOhZr!wl(Jnsqd-J;@F z3>y%9M6aM03+RXroxPU|b4c}DH=R!QNZ)&9&NmmxO?n#}xt4T~b2{e<`VbhA&iSQs zr=u`hj|O*d=c3B#Dk*%4we+izjPpt&+-l6-{pMXnSfhS@>n_a50O0&Ptt1R_flK@8 z)C;8kxrMu{ybJYSGRspfu&yDwZp)^8(I`NV9KQ2q&9`ahQAOhPGHL}N)jl@sQ!j>i z;O)FWNHy>{u!{V@$T(GqftM*N2UT>6oEmzw47`>A?K>WIhTzRW!~#LDY<-@~_MwL|bH-aUQ}1h}KTV>0YaP+2Dmorz*Rw8Eda0*(faMdQi> z*eMT>MKKXTCv#J%^b_{*{^DX`@w|6=mm~ytViUV*L}wedJt~J?P~Lku8T%JN*rDL>ryzeB+4Gj zH=W3)XzDBeTGV55PW&z_M>L4u{nrD~0%xA*vZc|lumX?$nevWh%MghqhIrC9kxw=k zHl=2a@fMrj)W0AT8PX%w@?ooPE=@V@F?dq=l;XWNb9;aq|NK-KT((* zeGrDbkS6&Yl~^Cc)#yKf>e6N&oRyu7SCj7*X?%$Sm4xFza*c3DWjUS*=_Ntp+)F8} z6(lN_Mx@w-tVeK({t`D6vj@jTy^!#r=Bz)S#KY&BDxA#}|3~-&vV=R`hsabBb-aD( zDRO{3%9@V=x}2hJ{yqNyKCj2Vvn4;0uuqGeW)t`q#jd-N2mv{;KMFRa5QR;rxhJ%T z2}P#qq~P5$eDQ{W5i=6*@3z$sfnT zP0~V7nHb989&2Qjiv94~kd;~G)&dkwf9+0Q2?0+OJQ@iI5Mhi~{#o+sGYj#Qf}_>% zK$^Ri9r}#fLFS6o|2NWzA*QRYFC+a43^uK=YF{IuP3;E!`E(3Jk2HH~?nD8n2!VboJdlp(p(KkgLSAle$*6~eGn zs5)kN#@tANHNp(CE>&lD1SOAxNNBb&sDMi8C}VGJ#2JUdd|{cpQvkWct;zK32?+40|0u(7F)4v>PkhZpBxYU7 zHzU2=K9ADOU$2nr3O8N)lty5Fn|PU95CvhV)v69eS)i^m@%tJ{EI7)ZjJ(^9enYUX zq86nLkc^k|BGCT~F{B*cHxnh#k^W>66E(4_pTZN+yvFQguig19&@=556~x(sxpfa+ zxd$Z!%mn5hszt5HFhg%rNRnwA`cfh`;>}sk4ywOQ#ygGX5FPW-eBN0Sf36tLq zdEqzg*SWur5Wna;Z}v|JubM=x=ItYN&(TaTM*13!mdWmP50bpP>?Tuo$$%= z7F=9=N@0o&1@TA+*R^vQ)pz zp5-HfZrP*^CKH>Y>eyG6IB+b@Fa7svc<+L3BMe1R1x(>{kpo6Kq0Lda=t?Da;Hqr& zW(*OSJIC^$mWB5Mxk_kI2RXGy^=@E5RDsoa z1?(Pk*d##4|3StP!5kJ{rMFU7Q@WigFk&8_gQI>CuUD2EZfB z0(!@EdfXPSS%<%IUOu>>;shxW%~V^F^h#OsRVF#hZyJ6W9wnl}MU<(-OGp>m**@C9 z-oiz9QR&%PNLr;K{*6J6*Zx<=r7X0`#yL?q*~2^20Yj{r%8eVvG*EY;S^h7*uhG_W z+hVi+n?uO4^q&dBFhZQ7GptS!lSzW1xFnW4@mc`iWta)TpIjpt%zKrH-(@b0{75F0 z2BTN{ogSMm$_Vnjfeln}CWJPT7j#H1QjGr}04Fh|0;L9UAvu|)0vDHEa$|&q#X)>O^|)#tSqc$^=g_CMl-JVHRZDTz z{4(N+IEeDT#2copx%|+5$`I~Kg6j?fnCRJZ#s-?Mhsv5WLxR~vDkR>&-U=ds>OUVE zhp8YKEZHADFA$$zX@A|~TQ9_&N`C{Lv{_~gXHYsZBAuevK41^38ny4iLY~v*RA~?40ZS6 zr{A@r1QZ+lf>r7=4MXw9?TUY})Ha~!1RJ}%@%gC-WGH3Ak@3I9f3Jq{-m4SR1{mqb zoFC*0+(?dAiCP=c-N;CMNNzDp68zgd^62GkahM$27DX+5y@^!pyamhBGP}pvWKzmz{^_GT0r6w#WDUfjOWEyZ8weLm8l@qGOjg#M=w0CJNX|1u z``a)F8TGP%%kz33BkYYDWa&LNt$c+U%B{TvESzGmRb8gEC#B*J3uO!;UW#apO! zRW4q{D(EUV`UyyDtKhX{zZyNqM2B|?Gz{m1?3;QN8J;#u=k1zKj4 zcY|}Z*)Z=`D_XUp_zV&LHOLc1e_dDvlj1Jg>m#;= zMRcN!K|HdB<^yR`#Ieq1Zv!STK>meb!E;{MF>G1z$Yo{&e64RbLzn(hGq0$zSz(iD zKc9;0Z*VBqRDm0`KW6@s8*G9=r-u5cmZSE|Ti zmVZD&1+2vs%WslN&1K7vsbJX#J%;}V7OLD(?@@-yH{uAU9rsLi!{M|M1erTy&q3pM z;w|aO=oSQ~lQr$!-a23X8Uz8<7RwVfvEX9`_ooa0rhufdALea3 zs08BSZWxo=EP~t zE0LHV>c3o7P!|lqfGRzaWkjsvms&1jMy)9t&?mfDJrULtewbLJQEQt2p5; zS`mS1z9TF$R>O@hzYQ`Yz$s}GZv=dTWrE!#-jEdsto?KB{#&_=A;8WZ^$zm(MN2i8 z*E_)(bR%{FTdlt|asddrRgqQbIa9z3p!HV~C6XURdcRx;%pcL-4~L^GsVosS4x3>j zn|(ULhJi-c48i*hstfR6HWfA3vHA+{-fmwr6peTjT;?8uQjR4%HM{vdYGw|p{TvA? z4S}+OJwN+k&|(`h^Vs~>cS{zyYT|`S*wg+s!+W1v3GtDHi-ORmlYe@$XrQ^ zjlBs$IJ8?)N@0$qH4+}uc_N3NqW&3dL2DEC?z!4100KztV;wYHtMpj z2dGe211R}&a0UK0H^!-!MQ zGJ-s>grS5YUM9)-Pe7zlZAAYN+AHTQ3)URc;4ItyW|^~TH;6lsIp5qADok9gqTmYwHH?a z$?o$E*)pO!q3L`eBLAT%HWr8ljhHrouj(N0y}uc*5+Shu4Z$8NLVL5e$AA?eZKd!> zVDLKVl^LN%;CM%Pk=5f+P&Yt2M4X9^wQc7jl8mHV-19$i?l#`ZZMO7D0lZ{hV!rv+ z?{RE8oTJ0!eI!s`AnP1Oby8XvDmel7VSO$7CozuVcFwn*<%EgcgVr<<$?CIWGk3SD z;BdrrhgLj5pJl6`3J)h)B^V8fGon2{>bHfpAKQ$>jOY<`$-FZ$AH+ahvk#A@;QB0W zX#^?juPAO+eMi_UqL+5Eu#`3{9iJ0Q)^Z2M{87XcRlBd4KSy;fHx-znbA+#@%t72# z1QhW`cjJkg82m(;E|}9y-mWyw!fgd%UbPgekL;45YzUx*OuOz!>`0Q={#rKa#Uu)j zv7U|vrM5LPB6}o`UMZjzloIRxw|@meoT`N*S3}a!GKidUWbyDRA{pg%)gNW+h``$M ze0h_A-KsC2e@TRz#n z8HIq5Qf>{m-3c`{*0;gK4bpy9d1y>jCaM1n4CUBd7#D^wyUitHS{ba__Hrk7uxAUA z_~UdP?C;<*FdFViDicW)1KdXtrDMD>m5nCQE6dG^aYg~cnxf|}#Ux~N6h3z<4kujz zpZwR(Xwt=sLe1%So(Cfuw=>aK_kdkbFO*4Y=BxYfRXt))7T}bNS4y48I7hj^*m5w~f=2zR{VqbyNxNKpTZW3u;YAg~F&@@|4XLy-WQEU8y)RipyBh6<%|}s8 zpSZF0r*lmh71J)(tdKO3Z+5gRnDF=%1v)zICv_VZJ$#oL8MDf64*D-c4lcIC4`+j- z3P=gd2~10-b)UX7p8s1RwrHq`FMm>+>W4^BxejA6PGv>N|FX08WRQ)2#C$yN4{qy2^xhRS| zdaf6FsWM5i=1pD;n9{DsK6#y_W_EKOg&PNdX~Ccu5dHQq^T@Hh-TK?yJ{-D>tYAYG z>3v`TbQF_vb+Y9)zkC~rL*@LXLEeo~Ic>Yd?G^fnM5gGf1x~wm=SB7r!8K95XnfdB zcRle2BK1JZJI#TwB{;kS{TJP0xJ$Q>T$!T?3siTJe>MSY+5N{m z&h0U%K+DRM(R*~v$k42u*0qA&O#9Kdw7by@rN5Sysqtcz#aXASrHn4Tud~Omj4T1T zZuGbLL#tbM!>t%M)>w!p7nCpS(9+U>5~on!}cZHXaDT ztRzz?9Xd=_no5s58r(W@7wTu+@d`l!K1Huul2A#y6Z(a+!IR`FzvhQd8vg;?By0ZA z8tngtfcHXVtzg2#v<01#!ybFvY;eChcDIFfW;Y{#Kt^A&6{i0)j*gxj!szP*2l(r|? zb@~Cw_4;Lxsr(!Axd5poYQX@ zZbG;bI)NNR3@RfT&30JyJOg7R92_ zXCjyLmkz)-s4e&}a|u={D=91$5_JVr?@jDcp)Z#UIPd@jj{OFjHWm{iAF4yH|C(=c zDYqp4e8v)HFseRgbq}0YZv1bp7Npy&y!|8R8EI+DW%ukZ5>FrcXV-1(G)ffeptg}O zU{!*5Xn!KJO`VJn6YpGs#iUr>9J?Ne_tFH%C!fKugr1tO(Bc|6v#L4eQcPpH25UW6 zM^vH)>R53`p}{;a5@^B zdu@7AzC*oDV&zX7MpC|O^dvMa>Sw%kP6iB9oari6Am*X@HYG+TZTF3g}S`zv4J=LO2cQc1O4mI;L920QxVoCdt zFi`>o zLDLlCS(R)50FFXmDm_07+pMse7|a-(P|y`fQGUab;mtjl4cGH=+ya{j?7!z(R%{KL zMbK02nuc*wEB2!j(QEW_(JoQ1sBVMdh+UPkJ4A%b%G7+Q{E!Ajn@+F1Xt8S$4yBMa zvWPp@vFVMzN$7!KQ`%}Er#!QOtFPd*oKjfy7T%y+_@eu+& z=6%Bm(f&*ss#afF_W)i?Z|juX^AYj6=}o6uTCl?RBs6*nW`v@=Ky%Iv*l7j+^{%3@ zGfh}EYql_QknH@zE2K z`gI$yf}so%|Mi<0@KUpdU5ek`#X7LL+wI!?X(4iN|BfFod;({nI?Ii^1W$*#0E1I9 zYWay-TpQ zIfg)=c5b58fC>WlxMS18XSmtXbf-mSLr9M(>sl#8ZKPd3Jt4FeL`35GBfI&yTaq@0 zB*eJ^!Z6V*?9P$dZtZkai8KOsf;*tSU2_UGNQ4xUP7>gX-PS}`7w?3{sB*3v#lL`8 zTeaYG`UE`}Ndldka8y!?MXlqRY5sNsK!fNSn9e?jy>I_UxCu={tAQqW0;C7Wi>s3W zKG`l-o=KXsy;lkiQ^-0nlonDlk#$}ya~JKY$J3J&dbx^xSp~y8acinU1C4 zoCGk*scjT-J5BrMo;85``nVJgf;w%cB{PFCqBpT=?B;X-;oJ^Q%`YX4A_d!$JM9|K zZg5T255Tn5@k-KekXSUp?VZfVZL#0);N&!>Wel;_8vMmE5fWr({3a~GJ>7iPDV zg~4Q|rf>ZV(s&3+_PR11hN?b5Yi1{-vDype$tBTra(D+LT5w4OooS8EeiLiU2jL^bKwQGydsOT>pK<#eR_+t}^aod~Dm!PR_t#mz7Z?tBB%sLuDuI zAA1$=E`cG}9ou4G!XG27mU0k%pc2fSR(lV2J>oTW7}-aT?!$WO8!eQaW+ZQO$iUWX zye;|1NPMK2GP22v@c16qH6{$A!L8D*XT}haLH|1s-dlo}<9<5uFOjE)h%bAO4v>NZ z+fD{rJ4KPtO{`;aUjWVwWFeW7a0Y2Zd$5l6n;s<)hO2nvU&axFNM}F!=+TFyr^ryY z+);|!tL_%_=@9v}VzY!hse}k4RCDp73{}t8zVQhaW2JGOm2E#r6B5s&n`m02AOVGQ0+|$^4W=XC)>u#SrTep4ti@%ZsMV*P-quJVxt-(4h9Ck7_CD z^$w-A2LuWbvxmw?(odemL<#UNwqql@R)XjGdr^8a6kL=L57P2_yc!WNY=iw{F>3f{ z8Ezv1BSa)ZUv}4YY%QA(Nr&mG_BaEcD|5? zBh|gMxc)X7ZAh{|p{fc)mtFs$NG3Y7l623l+<8hrc{Ne_ix^N`3S8J7s5 z%R&S}5?_vBHKcV@V%WHB)RCmHX-kN^q3lp2CUB!Ppy4q)R`yvzMbA(-S%V8KNIGs&^5-g$9r6vlLg2Q(RY#_VFBVD z^=9Xe2Hc>zf>;fclnNXSMr#sAfd{uFstL=gKg})Ez!tP%WMdR74-5C?$9RySi?O{Fww$+B z4tA77e~%kCv>&TvP&eBj0BfROO#zb|VTL=;*-jImLJTG7FwXHN4UsPuFD|5GJ2k=} z55F|j_6_H#Blz-u zrZ&-shaV!6vexy;vSnanM4|pL%JmrGE9g56SJkSnQXNi%l{Gxp{)XrREw348IoL|E zj9c@I0Y{XR-E6tIi%g0q6@=yv=GS5{fY{*azx9yy+kG#R?R!EeWfn`k@caJ@j zF#g$!s?J@f;zv~IK)6u$@-LOVZdJI3P)tUR6-@==~sRF52VGk7Q@-a zum)g#)Vl_9h~!qtW0BgA06P~3?)CaKUPNIltY?!)0YYS&;)J73 zJ>Jz&cDLrel(4tABu=R!na~`HDjk_n{jmu)$YEGc$w#}e6P5|5#C;g&gP@euf+%M~ zU;X?;YozVe5f=pzl|FRki}GJtSa>vf{`iYzY-VVYNK~txH&|`2IXHoqPMbhYpB5TK)iHpz2gqovmcRX{MxoGEebk+>TAfRPf83JSkwEOAEz={f4AYN}cY zRbaX3A^$1Su&nRQPWK@F&3z)xeyfe6P>@_F2d1u*RwDLpKm?-xKh^fO6~H!Dhy81g zxq+?hQ?y^@J6PI~y~%=}B68YJTfD8ob&7gpzv;#k+;&;(I}4a?NNV!qBHts%FyBmj z?revQqutlb9VmB(PIx;NC^zRB$@A?1>v;L%4*T;Nuiyo_bEl7ptAS+lOQVE8hdy|J z7rR}Z{uiuhR>A`73In?8PEvs!&BQHct~mi1W!F)~L;Yw}YqDCOi`rls{C~~hqD0K= zb3L2-7<2_MFs!ROycjuPNn7yiiJfC$IglX)wP~k)-Ajr!{IRa?Yzs!tu7BB$f=3(&hAFo({x9 ziN3D7)g3f4RP|2CMH|pJY`FHfKXLxg(%mJmh@PRi_!qbSe{i{?_*%UNk)I<~y*W%+ zjF?I~LvwTlz#CeVY@i>_1Z`zl^X=U*t2$fFz3D=@ewo%qq{c&3I+KJdqO9g1Q-AgR zKNPNp%!<^2fHx(SF-H*1JFqijudIht^W8pjjW~i%dZtea8{vGspW|#U?$pj=zf>F2 z9nd5*c)YOzHj_iiq|JoBwMv9RlA=gitR5hFk~%Af$BN&pXt$~eWZ#jMa`k)IWM`$w zDPuV?RmGqID^Ea7*{>{6s>$$kz+*C5;@xJ(e+E8K*yzqCH4b%;JyW7s0kw-E#?E=s z1P*%A-0!j!bM)PkhxVf|a`Ci?=76}d+5AOa7ET!m0(A4_!LES_$#kbK?`JvS?k*lN zZWR=hoSmxOK)`(m?dP6=1;(sEafTb_gqzrz7V;Jng13CQ>5ocm!9ZyVMS#+*nr{|5 zbre>c{VMUN)Um#*Q1!-wU_-8imT1XD=6bzMO6;1#quNBLh99f?CHiW(A1uR?6*96l zMVhr8lX^9rNq5^yGJWXB)U`}H@zB6(zU$o=C4zM z6jUz`|C@|6Ioto3st5su*SBe}wHut*cOw@+fB&iY}fKxxHaYp_b73Nj}WnnpE~TsV5VKd@rYO9$d2@1 zFcRL6Tc(}_?a=&4QRQ;zuQapl8FWSkg9JS>=oC(?a77t*vFK z+lXD4DkNj&8tQ#2jYNUEAEA8ow~#hcbq z2VW=MJpxBv;3`02=Bzl#?pHHJxyt_pgmJ-HT>nCjGiumpbuf7)wyLqH&vIZ4fTMRh z<0d2Txyi!0P#Oe`A-6;vK%xZwH_T5P6A%;nJDG7voGNkTNBrZDezG&G_O>|<;bCMW zjS9t=a{sk8a9%c|JWDoshUL${Ne}`w+~!5UTSpY#Bo{~46RLI_(VYuF-oJ9N zT&?`4T?J=o0OVNA@lV$NM#lL?A^cQFWETGQhZ@jas4_XerHeGo=k_@!i*X(z86AZL z%G2qs9RzeJz%40*5B$LsnLN>EPWA(08Y)Nh&+sMu*e4V%giKc9VWFEw%9nMqmlDIk zGgUOSc6hiH;~k74c~Wo^Nhz2^F-5v-$i7A4nX%w-lgZ0%8x`0&zVJnwF%?^>USpMd z6;=cML2Ai6s8VgGoF?f=zr%9ccghr;VaC&l-2!|o>UeWQ7x*=AQcAs++JkRF`{sp8 zLNx<}+$Q$aNqb;dNBT?O5divb*$GB96Gg-V7zEPo&i~8<_LWg z6-P?hfpg|7=oTHe32KK#z+{AbNrmx zORc>oS{aKoz)jBzBjDS}tJ2zwW4PoT?~-Dl(f%5`{%GG-Q5!g(I`-|^h6|jka^@Bq zkarAKM@%DNn`BibBhnNBntp=jb5e*?jkaGJ#2LuoyxeOIxuz}jZ=2A`Gc*KrDYVFG zs3rGVC&AbPHoqWstpn~6=V>7W-AYhY)cX;zp=x8U2jGeCtaqbQIZXT*yIGeMD@Dd(T zA9s&7#!il^66|7Ldjg-YoS&cQt;l`uukbF_XD>iypf+apK}5;YDu3M}4q@4dJm22} zYvw+^ICEFsF4>{97DnnnP@N-~_@niym<2UTF0I(b0bbEuI8?kp4xmbfjSVw^u+V9l zl?R(m?qk=AGDW{7?I0-&!@Z?vCBYr4`ss_eBJ^Sm2OpSE$R)jI%m)fZktcGQzkcu$ zt!9D1)HK1lgYg8?B>$P_`pAc&pWw&Zq|hNzl;1Q2*Z&`45aUIz=Ei@39KQ29`f@Vn zs90B$T_q~QBiLAbwzlO4rW?EK9`xhZ=8q)OAB=%)3Wgf9c74Eqd1JFd^%7?%>LF!o z^;}XU7ml2K0fy&R-FIVJiRQ0l6@LL4=v3HUg3CIW|4cZ7ghKFK$jLu=2+@M{df_gx z@m!k!bNjfebEUvcbokZ3$0SVrkw^Ab70=uD8$VNR!6iNH(Y~fC9$aTZi|)@6Aixei zBH80-`!K99o*C(|Jsp8;;5*scZ`Xo6MlNRXL6dQG<1OJ8_nwE|0_g&y|NH5EPbfc! zwj8KJpkewqB}+C373^78>XF6@zwDI~qNT*xQ)$sNv{3MKO&;{Pj{{tG&(g*G#%~ZY zv0|MHKv+{3+8A(6Tfv~%1QzVA#lf|i>=zes60o}RWi4ZTpTe^v6N5oNsIRSTtG|mi zZkwj}QLKK}CYiV~x_Su;ab@@3bdty#9L&$J9=7`fiUh-fPbR#CjLX+GzyF2WMAq(S zjGvV-a}Bl~HgzVSL?wl;O?R5o4;XN$B`Y*727i~;A`4%{ zqNk?P-f6-4ajRd@QwUWZfeG!l@(F2a#U-^aUhuG?_^Z%8OZI`6i948SIE$xRMbVGQ z2z{M2tUZHd%>(=mdK3OKFdmvVG!W*CYPxPvvJAb1&K=n$@tDce`1P4QLV1{L_Tqu2 z<0zT*R$OaKnA>9S8w{|EanoyUJe&OF5;z zq7Fnv<<(PVYsx?(>DAi%)(dCXaDMo}IX^H@SQ)CfI3obk<_JQ#1y@l+Zs>^EQ$Yr- z(gH)g?f3W9&FoO-=D};3pFa4nt%VUGm_~QmhvG!qpOx(G4iFS8dDixLAc1E%&ELeR zi~NHF4hhN4D9}LABAQJQNfpWmY_NK;BazgvMZInjGz4$V`>D^bM z)nW^Tq$T5-wetvgc3wvene~=i>NXsliE6-O4bO2&7rvX=w7e~Np`g|MjQ-ylMPMJ_ z_3Ug;3tD42C%zrn;k+1Qnyk3DDp(by;~Huf4?$4GX6fJH2a?d2j5M!bYC*-*(@(?xVOhPHGv|W}}v#t@t z)ZuUZsyqql-^ltf+iRa8n_h17ZP7gJ*`e!;0jW$h+30>#h`Ug4dt{3O5+8NEce1h_ zwXjw1-iDpevp{I`rCS_Wy&8(!ErhZ%33B+b0Cvo-evoKUMvbY<&|zbQ=TS!qsY82w z;B91xyX_Ulbw2RbY^4T`FoPL)*+x$UIx`;82sjw|Opn*zfJYp- z&ZD(~vPeSzq26Z+ju?$OyN#P_9>t6?5j?=ZR#9D5=k(ZozVk-Eg@i7pf5lI4gclwo za)_E1k?cX4fc9H@#-$t}H6mt8v+IU;ascc-6!|lO{L*O8NL^a;G&AhlPJES6*Qu;O z>fVz*7DN^;1qNSgYSA64AIsZ$kR`6eanE~N7yJW8&;o*-z6s@lBgQ81arQH`>Z9KD zSN#rHYqcoqHx5q?5v{@#xn>wrZJAIL7P?df4^@<`-o^6A|7cfwF|qyKGhwMi;G=bw zlB~c$Q$QE;x7z@9)fQSW-selqD4|cjN!aLD+-@ewLVfMW5z@NKEqTMUa)8N@d!)_x z*+6RPimNkxV8jZ;q?tg|$b+WbeE%O_SRFR3D4YDy+i#}+2?yjK8t>ud^n(t&x1)arDrujQ}L*Dk3e^m zkI8nA#87YH2vRi0g^3q=sPDP#9R4=9gh&tc#@;=O_2P5HuZN#K1fPkF+U*S!YpRRY zR{l$xE{VlCdD&R=m;R#;=ysx3X!Y+7z+Ahlrv(hW_*-*I+BTvZT}>w6)%E@5jTjfn zvGuKbH31^8u2HRSigpA~xs0JYe`= z=gFS~mga(~bpGKTMF8iytfVXGiooh~RH55|1vp0KpL<3ZKmMdC< zxz0epc1KDa0_b?-22tAEE?CHv=|est_hDmcyL@L?VdkrFlfG=%b|4ValuQ2X3CdGB zcNYANjQKH@ZHNdPAgGXg)*knR5%kvZXmyuOqPmyfik)@uVhI3!m!og|^Z;(Xd7117 z2ejbg12l(tNI70v&Jogkj^`!j9f;;w92_6jpCs=N$oke@ca%9pm~mj$LvHj0?XQDv zczM-5(=~?fSLXOu(ETmsf#H z)karLy5~%0KUDi?%zrT2Zwv~ZC4|}c5R`_xS8+w{g+2)~GUo}=jAC-W4lk;vsFOh) z;~LzvFAh|mhi|u!hK?219YX{72o;hjcfGO#FxuNaYnphBQbbPGX6GTF?3T<5TO4+l zS9X&>x^4eF#0WJ5%^rK);KLkladOGPth8@Jr1qa1P-6fvi+I5Ruo}BeM3JCR-cr^m+d-A@C6kMDl(ENyuop? zi>L6x$;R}Fbs-fEq8bYIm+qAhQN}1?{i96B=Hv<*=b#KP9P$M{GJ4ATy_!=Z|AX^1 zZ1mDrq+C*LoRNhx=>TidV=$TuJ%YR=yN|#xa%6M;ob@mZ2csj}{!v^O#S4F-pWe9v z2!)2D7)g;54AG5*F}0LzOU_NSa{R`%Pl-|@j~CC^q*nZg?4$h~qxgeQ)G1!so-+;= zlacDD82^@k^gqkv)qk!@sMz(QjU_o^9kLcBAfLD5P4$68&F)oRnqRK|Cq^t${Km$0 zA~~)YV#K5Y(8^o=`(dU3 zDmUYdq2dFywWC&~VJvy#%jo86H@@N3x)AI}%WR_tRGkf?-qK@0Rs60y@LSpw_^iO< z+{{qg@7`n<#-{!OOsxuc*P%$xXzyB-T zi6$;S@EPU`16F9y{>BL)3VFq;=h0H}Fvu=_g}R>el?Wm|S0-%~^yT3-Lk^5wezXs_ zOQQQ|uO^P$!lX6xCXTB2zzNM44M>@zs2b&$v+c29mdgd+1h+Lnw?0}qo%E%~580)` zvV`u-W(|-)TmF28=`WZ(5^J9y`mcToGWVn1fQo~G!8h#Swf=-HJDf(d$n=CIgL2O- zX7;En08P%4U%(xZ=DU@4%3cKuG`IS#Tc>p47KN_hsEgnm#3Lbm2d8uoz9;iTEBN*aMY+}Nsx~`kMf>4~Y z3wz(*hwIRv(S zpK`M6%aA5`EvDp5x=OTSB8_v>fGCBu&Kc)h_=4w7I=s#W`hoKy$$e{V3>sYgkkZ}f zk((}=ayYy?ZWo6+sr_^vXzpC)i7xMU{f$hmGMaPqK8jh!qml!9{xC)--w5A3AhbH1 zH(+d)yROx%?A*Ku-qy23tptNw=D2T2iP3j$`xpHgk?}YqN+GS-w#jL>1U|tH2@9Zz^*jjY=(_9)cq$r-S=JJR#n^cXMcL*c_9zHHrb*W7%D5x zYE3|LWj0Ru>koSg_v-`Kg%ey6K$qw4P$4feM7;|D_2EIkuOe?}pj%O3Fe=N9<7CIa Lsr%&biJ$yGK}Cmv literal 0 HcmV?d00001 diff --git a/regression-test/suites/cloud_p0/multi_cluster/test_mow_agg_delete_bitmap.groovy b/regression-test/suites/cloud_p0/multi_cluster/test_mow_agg_delete_bitmap.groovy index 676086996d495d..9c2063d6ec15bd 100644 --- a/regression-test/suites/cloud_p0/multi_cluster/test_mow_agg_delete_bitmap.groovy +++ b/regression-test/suites/cloud_p0/multi_cluster/test_mow_agg_delete_bitmap.groovy @@ -243,6 +243,7 @@ suite('test_mow_agg_delete_bitmap', 'multi_cluster,docker') { waitForCompaction(tablet) logger.info("after compaction 1") getTabletStatus(tablet) + GetDebugPoint().enableDebugPointForAllBEs("DeleteBitmapAction._handle_show_local_delete_bitmap_count.vacuum_stale_rowsets") // cloud def local_dm = getLocalDeleteBitmapStatus(tablet) logger.info("local_dm 0.2: " + local_dm) assertEquals(0, local_dm.delete_bitmap_count) diff --git a/regression-test/suites/compaction/test_mow_compact_multi_segments.groovy b/regression-test/suites/compaction/test_mow_compact_multi_segments.groovy new file mode 100644 index 00000000000000..f286a2becaec49 --- /dev/null +++ b/regression-test/suites/compaction/test_mow_compact_multi_segments.groovy @@ -0,0 +1,253 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +// when compaction for one rowsets with multiple segments, the delete bitmap can be deleted +suite("test_mow_compact_multi_segments", "nonConcurrent") { + GetDebugPoint().clearDebugPointsForAllFEs() + GetDebugPoint().clearDebugPointsForAllBEs() + def tableName = "test_mow_compact_multi_segments" + def backendId_to_backendIP = [:] + def backendId_to_backendHttpPort = [:] + def backendId_to_params = [string: [:]] + getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort) + + def reset_be_param = { paramName -> + // for eache be node, reset paramName to default + for (String id in backendId_to_backendIP.keySet()) { + def beIp = backendId_to_backendIP.get(id) + def bePort = backendId_to_backendHttpPort.get(id) + def original_value = backendId_to_params.get(id).get(paramName) + def (code, out, err) = curl("POST", String.format("http://%s:%s/api/update_config?%s=%s", beIp, bePort, paramName, original_value)) + assertTrue(out.contains("OK")) + } + } + + def get_be_param = { paramName -> + // for eache be node, get param value by default + def paramValue = "" + for (String id in backendId_to_backendIP.keySet()) { + def beIp = backendId_to_backendIP.get(id) + def bePort = backendId_to_backendHttpPort.get(id) + // get the config value from be + def (code, out, err) = curl("GET", String.format("http://%s:%s/api/show_config?conf_item=%s", beIp, bePort, paramName)) + assertTrue(code == 0) + assertTrue(out.contains(paramName)) + // parsing + def resultList = parseJson(out)[0] + assertTrue(resultList.size() == 4) + // get original value + paramValue = resultList[2] + backendId_to_params.get(id, [:]).put(paramName, paramValue) + } + } + + def getTabletStatus = { tablet, rowsetIndex, lastRowsetSegmentNum, enableAssert = false -> + String compactionUrl = tablet["CompactionStatus"] + def (code, out, err) = curl("GET", compactionUrl) + logger.info("Show tablets status: code=" + code + ", out=" + out + ", err=" + err) + assertEquals(code, 0) + def tabletJson = parseJson(out.trim()) + assert tabletJson.rowsets instanceof List + assertTrue(tabletJson.rowsets.size() >= rowsetIndex) + def rowset = tabletJson.rowsets.get(rowsetIndex - 1) + logger.info("rowset: ${rowset}") + int start_index = rowset.indexOf("]") + int end_index = rowset.indexOf("DATA") + def segmentNumStr = rowset.substring(start_index + 1, end_index).trim() + logger.info("segmentNumStr: ${segmentNumStr}") + if (enableAssert) { + assertEquals(lastRowsetSegmentNum, Integer.parseInt(segmentNumStr)) + } else { + return lastRowsetSegmentNum == Integer.parseInt(segmentNumStr); + } + } + + def getLocalDeleteBitmapStatus = { tablet -> + String tablet_id = tablet.TabletId + String trigger_backend_id = tablet.BackendId + def be_host = backendId_to_backendIP[trigger_backend_id] + def be_http_port = backendId_to_backendHttpPort[trigger_backend_id] + StringBuilder sb = new StringBuilder(); + sb.append("curl -X GET http://${be_host}:${be_http_port}") + sb.append("/api/delete_bitmap/count_local?verbose=true&tablet_id=") + sb.append(tablet_id) + + String command = sb.toString() + logger.info(command) + def process = command.execute() + def code = process.waitFor() + def out = process.getText() + logger.info("Get local delete bitmap count status: =" + code + ", out=" + out) + assertEquals(code, 0) + def deleteBitmapStatus = parseJson(out.trim()) + return deleteBitmapStatus + } + + def waitForCompaction = { tablet -> + String tablet_id = tablet.TabletId + String trigger_backend_id = tablet.BackendId + def be_host = backendId_to_backendIP[trigger_backend_id] + def be_http_port = backendId_to_backendHttpPort[trigger_backend_id] + def running = true + do { + Thread.sleep(1000) + StringBuilder sb = new StringBuilder(); + sb.append("curl -X GET http://${be_host}:${be_http_port}") + sb.append("/api/compaction/run_status?tablet_id=") + sb.append(tablet_id) + + String command = sb.toString() + logger.info(command) + def process = command.execute() + def code = process.waitFor() + def out = process.getText() + logger.info("Get compaction status: code=" + code + ", out=" + out) + assertEquals(code, 0) + def compactionStatus = parseJson(out.trim()) + assertEquals("success", compactionStatus.status.toLowerCase()) + running = compactionStatus.run_status + } while (running) + } + + // batch_size is 4164 in csv_reader.cpp + // _batch_size is 8192 in vtablet_writer.cpp + onFinish { + GetDebugPoint().clearDebugPointsForAllBEs() + reset_be_param("doris_scanner_row_bytes") + reset_be_param("tablet_rowset_stale_sweep_time_sec") + } + GetDebugPoint().enableDebugPointForAllBEs("MemTable.need_flush") + GetDebugPoint().enableDebugPointForAllBEs("CumulativeCompaction.modify_rowsets.delete_expired_stale_rowset") + GetDebugPoint().enableDebugPointForAllBEs("Tablet.delete_expired_stale_rowset.start_delete_unused_rowset") + get_be_param("doris_scanner_row_bytes") + set_be_param("doris_scanner_row_bytes", "1") + get_be_param("tablet_rowset_stale_sweep_time_sec") + set_be_param("tablet_rowset_stale_sweep_time_sec", "0") + + tableName = "test_compact_multi_segments_" + sql """ DROP TABLE IF EXISTS ${tableName} """ + sql """ + CREATE TABLE IF NOT EXISTS ${tableName} ( + `k1` int(11) NULL, + `k2` int(11) NULL, + `v3` int(11) NULL, + `v4` int(11) NULL + ) unique KEY(`k1`, `k2`) + DISTRIBUTED BY HASH(`k1`) BUCKETS 1 + PROPERTIES ( + "replication_num" = "1", + "disable_auto_compaction" = "true" + ); + """ + def tablets = sql_return_maparray """ show tablets from ${tableName}; """ + assertEquals(1, tablets.size()) + def tablet = tablets[0] + String tablet_id = tablet.TabletId + def backend_id = tablet.BackendId + + // load 1 + streamLoad { + table "${tableName}" + set 'column_separator', ',' + set 'compress_type', 'GZ' + file 'test_schema_change_add_key_column.csv.gz' + time 10000 // limit inflight 10s + + check { result, exception, startTime, endTime -> + if (exception != null) { + throw exception + } + def json = parseJson(result) + assertEquals("success", json.Status.toLowerCase()) + assertEquals(8192, json.NumberTotalRows) + assertEquals(0, json.NumberFilteredRows) + } + } + sql "sync" + def rowCount1 = sql """ select count() from ${tableName}; """ + logger.info("rowCount1: ${rowCount1}") + // check generate 3 segments + getTabletStatus(tablet, 2, 3) + + // trigger compaction + GetDebugPoint().enableDebugPointForAllBEs("CloudSizeBasedCumulativeCompactionPolicy::pick_input_rowsets.set_input_rowsets", + [tablet_id: "${tablet.TabletId}", start_version: 2, end_version: 2]) + def (code, out, err) = be_run_cumulative_compaction(backendId_to_backendIP.get(backend_id), backendId_to_backendHttpPort.get(backend_id), tablet_id) + logger.info("Run compaction: code=" + code + ", out=" + out + ", err=" + err) + assertEquals(code, 0) + def compactJson = parseJson(out.trim()) + logger.info("compact json: " + compactJson) + // check generate 1 segments + for (int i = 0; i < 20; i++) { + if (getTabletStatus(tablet, 2, 1, false)) { + break + } + sleep(100) + } + getTabletStatus(tablet, 2, 1) + sql """ select * from ${tableName} limit 1; """ + + // load 2 + streamLoad { + table "${tableName}" + set 'column_separator', ',' + set 'compress_type', 'GZ' + file 'test_schema_change_add_key_column1.csv.gz' + time 10000 // limit inflight 10s + + check { result, exception, startTime, endTime -> + if (exception != null) { + throw exception + } + def json = parseJson(result) + assertEquals("success", json.Status.toLowerCase()) + assertEquals(20480, json.NumberTotalRows) + assertEquals(0, json.NumberFilteredRows) + } + } + sql "sync" + def rowCount2 = sql """ select count() from ${tableName}; """ + logger.info("rowCount2: ${rowCount2}") + // check generate 3 segments + getTabletStatus(tablet, 3, 6) + def local_dm = getLocalDeleteBitmapStatus(tablet) + logger.info("local delete bitmap 1: " + local_dm) + + // trigger compaction for load 2 + GetDebugPoint().enableDebugPointForAllBEs("CloudSizeBasedCumulativeCompactionPolicy::pick_input_rowsets.set_input_rowsets", + [tablet_id: "${tablet.TabletId}", start_version: 3, end_version: 3]) + (code, out, err) = be_run_cumulative_compaction(backendId_to_backendIP.get(backend_id), backendId_to_backendHttpPort.get(backend_id), tablet_id) + logger.info("Run compaction: code=" + code + ", out=" + out + ", err=" + err) + assertEquals(code, 0) + compactJson = parseJson(out.trim()) + logger.info("compact json: " + compactJson) + waitForCompaction(tablet) + // check generate 1 segments + for (int i = 0; i < 20; i++) { + if (getTabletStatus(tablet, 3, 1, false)) { + break + } + sleep(100) + } + getTabletStatus(tablet, 3, 1) + + GetDebugPoint().enableDebugPointForAllBEs("DeleteBitmapAction._handle_show_local_delete_bitmap_count.vacuum_stale_rowsets") // cloud + GetDebugPoint().enableDebugPointForAllBEs("DeleteBitmapAction._handle_show_local_delete_bitmap_count.start_delete_unused_rowset") // local + local_dm = getLocalDeleteBitmapStatus(tablet) + logger.info("local delete bitmap 2: " + local_dm) + assertEquals(1, local_dm["delete_bitmap_count"]) +} diff --git a/regression-test/suites/compaction/test_mow_compaction_agg_and_remove_pre_delete_bitmap.groovy b/regression-test/suites/compaction/test_mow_compaction_agg_and_remove_pre_delete_bitmap.groovy index 6f336865a65f3a..73942a55f80f4f 100644 --- a/regression-test/suites/compaction/test_mow_compaction_agg_and_remove_pre_delete_bitmap.groovy +++ b/regression-test/suites/compaction/test_mow_compaction_agg_and_remove_pre_delete_bitmap.groovy @@ -238,7 +238,7 @@ suite("test_mow_compaction_agg_and_remove_pre_delete_bitmap", "nonConcurrent") { // unused rowsets are not deleted (compaction input rowsets reference to them) local_dm = getLocalDeleteBitmapStatus(tablet) logger.info("local_dm 2: " + local_dm) - assertEquals(9, local_dm["cardinality"]) // the last one is agged + // assertEquals(9, local_dm["cardinality"]) // the last one is agged // wait for no unused rowsets GetDebugPoint().enableDebugPointForAllBEs("DeleteBitmapAction._handle_show_local_delete_bitmap_count.vacuum_stale_rowsets") // cloud diff --git a/regression-test/suites/compaction/test_mow_compaction_and_schema_change.groovy b/regression-test/suites/compaction/test_mow_compaction_and_schema_change.groovy index 88b6dcb7d2c0ad..c0c75a3ee94349 100644 --- a/regression-test/suites/compaction/test_mow_compaction_and_schema_change.groovy +++ b/regression-test/suites/compaction/test_mow_compaction_and_schema_change.groovy @@ -297,23 +297,23 @@ suite("test_mow_compaction_and_schema_change", "nonConcurrent") { assertEquals(5, local_dm["delete_bitmap_count"]) assertEquals(6, local_dm["cardinality"]) } else { - assertEquals(4, local_dm["delete_bitmap_count"]) - assertEquals(5, local_dm["cardinality"]) + assertEquals(5, local_dm["delete_bitmap_count"]) + assertEquals(6, local_dm["cardinality"]) } } else if (method == 1) { if (isCloudMode()) { assertEquals(3, local_dm["delete_bitmap_count"]) assertEquals(6, local_dm["cardinality"]) // the last one is agged } else { - assertEquals(9, local_dm["cardinality"]) // the last one is agged + assertEquals(10, local_dm["cardinality"]) // the last one is agged } } else if (method == 2) { if (isCloudMode()) { // compaction select [8-11] assertEquals(2, local_dm["delete_bitmap_count"]) assertEquals(6, local_dm["cardinality"]) } else { - assertEquals(1, local_dm["delete_bitmap_count"]) - assertEquals(5, local_dm["cardinality"]) + assertEquals(2, local_dm["delete_bitmap_count"]) + assertEquals(6, local_dm["cardinality"]) } } @@ -328,10 +328,10 @@ suite("test_mow_compaction_and_schema_change", "nonConcurrent") { if (method == 0 || method == 1) { logger.info("no duplicated keys: " + result) assertEquals(0, result.size()) - } else if (method == 2) { + } /*else if (method == 2) { logger.info("find duplicated keys: " + result) assertEquals(2, result.size()) - } + }*/ GetDebugPoint().clearDebugPointsForAllBEs() } } finally { diff --git a/regression-test/suites/compaction/test_mow_delete_unused_rowset_dm_docker.groovy b/regression-test/suites/compaction/test_mow_delete_unused_rowset_dm_docker.groovy new file mode 100644 index 00000000000000..bdf0fb4b338221 --- /dev/null +++ b/regression-test/suites/compaction/test_mow_delete_unused_rowset_dm_docker.groovy @@ -0,0 +1,232 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import java.util.concurrent.atomic.AtomicBoolean +import org.apache.doris.regression.suite.ClusterOptions +import org.codehaus.groovy.runtime.IOGroovyMethods + +suite("test_mow_delete_unused_rowset_dm_docker", "docker") { + logger.info("test_mow_delete_unused_rowset_dm_docker") + def options = new ClusterOptions() + options.cloudMode = false + options.setFeNum(1) + options.setBeNum(1) + options.enableDebugPoints() + options.feConfigs.add("enable_workload_group=false") + // beConfigs + options.beConfigs.add('compaction_promotion_version_count=5') + options.beConfigs.add('tablet_rowset_stale_sweep_time_sec=0') + options.beConfigs.add('enable_mow_verbose_log=true') + options.beConfigs.add('enable_java_support=false') + + def testTable = "test_mow_delete_unused_rowset_dm_docker" + def backendId_to_backendIP = [:] + def backendId_to_backendHttpPort = [:] + + def triggerCompaction = { tablet -> + def compact_type = "cumulative" + String tablet_id = tablet.TabletId + String trigger_backend_id = tablet.BackendId + def be_host = backendId_to_backendIP[trigger_backend_id] + def be_http_port = backendId_to_backendHttpPort[trigger_backend_id] + if (compact_type == "cumulative") { + def (code_1, out_1, err_1) = be_run_cumulative_compaction(be_host, be_http_port, tablet_id) + logger.info("Run compaction: code=" + code_1 + ", out=" + out_1 + ", err=" + err_1) + assertEquals(code_1, 0) + return out_1 + } else if (compact_type == "full") { + def (code_2, out_2, err_2) = be_run_full_compaction(be_host, be_http_port, tablet_id) + logger.info("Run compaction: code=" + code_2 + ", out=" + out_2 + ", err=" + err_2) + assertEquals(code_2, 0) + return out_2 + } else { + assertFalse(True) + } + } + + def getTabletStatus = { tablet -> + String tablet_id = tablet.TabletId + String trigger_backend_id = tablet.BackendId + def be_host = backendId_to_backendIP[trigger_backend_id] + def be_http_port = backendId_to_backendHttpPort[trigger_backend_id] + StringBuilder sb = new StringBuilder(); + sb.append("curl -X GET http://${be_host}:${be_http_port}") + sb.append("/api/compaction/show?tablet_id=") + sb.append(tablet_id) + + String command = sb.toString() + logger.info(command) + def process = command.execute() + def code = process.waitFor() + def out = process.getText() + logger.info("Get tablet status: =" + code + ", out=" + out) + assertEquals(code, 0) + def tabletStatus = parseJson(out.trim()) + return tabletStatus + } + + def waitForCompaction = { tablet -> + String tablet_id = tablet.TabletId + String trigger_backend_id = tablet.BackendId + def be_host = backendId_to_backendIP[trigger_backend_id] + def be_http_port = backendId_to_backendHttpPort[trigger_backend_id] + def running = true + do { + Thread.sleep(1000) + StringBuilder sb = new StringBuilder(); + sb.append("curl -X GET http://${be_host}:${be_http_port}") + sb.append("/api/compaction/run_status?tablet_id=") + sb.append(tablet_id) + + String command = sb.toString() + logger.info(command) + def process = command.execute() + def code = process.waitFor() + def out = process.getText() + logger.info("Get compaction status: code=" + code + ", out=" + out) + assertEquals(code, 0) + def compactionStatus = parseJson(out.trim()) + assertEquals("success", compactionStatus.status.toLowerCase()) + running = compactionStatus.run_status + } while (running) + } + + def getLocalDeleteBitmapStatus = { tablet -> + String tablet_id = tablet.TabletId + String trigger_backend_id = tablet.BackendId + def be_host = backendId_to_backendIP[trigger_backend_id] + def be_http_port = backendId_to_backendHttpPort[trigger_backend_id] + boolean running = true + StringBuilder sb = new StringBuilder(); + sb.append("curl -X GET http://${be_host}:${be_http_port}") + sb.append("/api/delete_bitmap/count_local?verbose=true&tablet_id=") + sb.append(tablet_id) + + String command = sb.toString() + logger.info(command) + def process = command.execute() + def code = process.waitFor() + def out = process.getText() + logger.info("Get local delete bitmap count status: =" + code + ", out=" + out) + assertEquals(code, 0) + def deleteBitmapStatus = parseJson(out.trim()) + return deleteBitmapStatus + } + + docker(options) { + sql """ DROP TABLE IF EXISTS ${testTable} """ + sql """ + create table ${testTable} (`k` int NOT NULL, `v` int NOT NULL) + UNIQUE KEY(`k`) + DISTRIBUTED BY HASH(`k`) BUCKETS 1 + PROPERTIES ( + "enable_unique_key_merge_on_write" = "true", + "replication_allocation" = "tag.location.default: 1", + "disable_auto_compaction" = "true" + ); + """ + getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort); + + def tablets = sql_return_maparray """ show tablets from ${testTable}; """ + logger.info("tablets: " + tablets) + assertEquals(1, tablets.size()) + def tablet = tablets[0] + + GetDebugPoint().enableDebugPointForAllBEs("CumulativeCompaction.modify_rowsets.delete_expired_stale_rowset") + GetDebugPoint().enableDebugPointForAllBEs("DeleteBitmapAction._handle_show_local_delete_bitmap_count.start_delete_unused_rowset") + + // 1. write some data + sql """ INSERT INTO ${testTable} VALUES (1,98); """ + sql """ INSERT INTO ${testTable} VALUES (1,99),(2,99); """ + sql """ INSERT INTO ${testTable} VALUES (3,99); """ + sql """ INSERT INTO ${testTable} VALUES (4,99); """ + sql """ INSERT INTO ${testTable} VALUES (5,99); """ + sql "sync" + order_qt_sql1 """ select * from ${testTable}; """ + + // 2. trigger compaction to generate base rowset + getTabletStatus(tablet) + assertTrue(triggerCompaction(tablet).contains("Success")) + waitForCompaction(tablet) + def tablet_status = getTabletStatus(tablet) + assertEquals(2, tablet_status["rowsets"].size()) + + // 3. wait for no delete bitmap and no stale rowsets + def local_dm = getLocalDeleteBitmapStatus(tablet) + assertEquals(0, local_dm["delete_bitmap_count"]) + tablet_status = getTabletStatus(tablet) + assertEquals(0, tablet_status["stale_rowsets"].size()) + + // 3. write some data + sql """ INSERT INTO ${testTable} VALUES (1,100); """ + sql """ INSERT INTO ${testTable} VALUES (1,101),(2,100); """ + sql """ INSERT INTO ${testTable} VALUES (3,100); """ + sql """ INSERT INTO ${testTable} VALUES (4,100); """ + sql """ INSERT INTO ${testTable} VALUES (5,100); """ + sql """ sync """ + order_qt_sql2 "select * from ${testTable}" + tablet_status = getTabletStatus(tablet) + assertEquals(7, tablet_status["rowsets"].size()) + + // 4. trigger compaction + GetDebugPoint().enableDebugPointForAllBEs("StorageEngine::start_delete_unused_rowset.block") + assertTrue(triggerCompaction(tablet).contains("Success")) + waitForCompaction(tablet) + tablet_status = getTabletStatus(tablet) + assertEquals(3, tablet_status["rowsets"].size()) + + // 5. block delete unused rowset, there are delete bitmaps; wait for no stale rowsets + GetDebugPoint().disableDebugPointForAllBEs("DeleteBitmapAction._handle_show_local_delete_bitmap_count.start_delete_unused_rowset") + local_dm = getLocalDeleteBitmapStatus(tablet) + logger.info("local_dm 1: " + local_dm) + assertEquals(6, local_dm["delete_bitmap_count"]) + tablet_status = getTabletStatus(tablet) + assertEquals(0, tablet_status["stale_rowsets"].size()) + + // 6. restart be. check delete bitmap count + cluster.restartBackends() + tablet_status = getTabletStatus(tablet) + logger.info("tablet status after restart: " + tablet_status) + for (int i = 0; i < 300; i++) { + local_dm = getLocalDeleteBitmapStatus(tablet) + if (local_dm["delete_bitmap_count"] == 5) { + break + } + sleep(20) + } + local_dm = getLocalDeleteBitmapStatus(tablet) + logger.info("local_dm 2: " + local_dm) + assertEquals(5, local_dm["delete_bitmap_count"]) + order_qt_sql3 """ select * from ${testTable}; """ + + // 7. restart be + /*cluster.restartBackends() + tablet_status = getTabletStatus(tablet) + logger.info("tablet status after restart: " + tablet_status) + for (int i = 0; i < 300; i++) { + local_dm = getLocalDeleteBitmapStatus(tablet) + if (local_dm["delete_bitmap_count"] == 5) { + break + } + sleep(20) + } + local_dm = getLocalDeleteBitmapStatus(tablet) + logger.info("local_dm 2: " + local_dm) + assertEquals(5, local_dm["delete_bitmap_count"]) + order_qt_sql3 """ select * from ${testTable}; """*/ + } +} diff --git a/regression-test/suites/compaction/test_mow_pre_rowset_delete_bitmap_race.groovy b/regression-test/suites/compaction/test_mow_pre_rowset_delete_bitmap_race.groovy new file mode 100644 index 00000000000000..7a99498fd350ff --- /dev/null +++ b/regression-test/suites/compaction/test_mow_pre_rowset_delete_bitmap_race.groovy @@ -0,0 +1,274 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +// after cu compaction, when agg delete bitmap for pre rowsets, block merge delete bitmap to tablet meta +// compaction for pre rowsets, and wait for they are moved from stale rowsets(in unused rowsets and can not be deleted because the first step hold rowset reference) +// unblock the merge, the delete bitmap of these delete bitmap can be deleted +suite("test_mow_pre_rowset_delete_bitmap_race", "nonConcurrent") { + def testTable = "test_mow_pre_rowset_delete_bitmap_race" + def backendId_to_backendIP = [:] + def backendId_to_backendHttpPort = [:] + def backendId_to_params = [string: [:]] + getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort); + + def set_be_param = { paramName, paramValue -> + // for eache be node, set paramName=paramValue + for (String id in backendId_to_backendIP.keySet()) { + def beIp = backendId_to_backendIP.get(id) + def bePort = backendId_to_backendHttpPort.get(id) + def (code, out, err) = curl("POST", String.format("http://%s:%s/api/update_config?%s=%s", beIp, bePort, paramName, paramValue)) + assertTrue(out.contains("OK")) + } + } + + def reset_be_param = { paramName -> + // for eache be node, reset paramName to default + for (String id in backendId_to_backendIP.keySet()) { + def beIp = backendId_to_backendIP.get(id) + def bePort = backendId_to_backendHttpPort.get(id) + def original_value = backendId_to_params.get(id).get(paramName) + def (code, out, err) = curl("POST", String.format("http://%s:%s/api/update_config?%s=%s", beIp, bePort, paramName, original_value)) + assertTrue(out.contains("OK")) + } + } + + def get_be_param = { paramName -> + // for eache be node, get param value by default + def paramValue = "" + for (String id in backendId_to_backendIP.keySet()) { + def beIp = backendId_to_backendIP.get(id) + def bePort = backendId_to_backendHttpPort.get(id) + // get the config value from be + def (code, out, err) = curl("GET", String.format("http://%s:%s/api/show_config?conf_item=%s", beIp, bePort, paramName)) + assertTrue(code == 0) + assertTrue(out.contains(paramName)) + // parsing + def resultList = parseJson(out)[0] + assertTrue(resultList.size() == 4) + // get original value + paramValue = resultList[2] + backendId_to_params.get(id, [:]).put(paramName, paramValue) + } + } + + def triggerCompaction = { tablet, compact_type = "cumulative" -> + String tablet_id = tablet.TabletId + String trigger_backend_id = tablet.BackendId + def be_host = backendId_to_backendIP[trigger_backend_id] + def be_http_port = backendId_to_backendHttpPort[trigger_backend_id] + if (compact_type == "cumulative") { + def (code_1, out_1, err_1) = be_run_cumulative_compaction(be_host, be_http_port, tablet_id) + logger.info("Run compaction: code=" + code_1 + ", out=" + out_1 + ", err=" + err_1) + assertEquals(code_1, 0) + return out_1 + } else if (compact_type == "full") { + def (code_2, out_2, err_2) = be_run_full_compaction(be_host, be_http_port, tablet_id) + logger.info("Run compaction: code=" + code_2 + ", out=" + out_2 + ", err=" + err_2) + assertEquals(code_2, 0) + return out_2 + } else { + assertFalse(True) + } + } + + def getTabletStatus = { tablet -> + String tablet_id = tablet.TabletId + String trigger_backend_id = tablet.BackendId + def be_host = backendId_to_backendIP[trigger_backend_id] + def be_http_port = backendId_to_backendHttpPort[trigger_backend_id] + StringBuilder sb = new StringBuilder(); + sb.append("curl -X GET http://${be_host}:${be_http_port}") + sb.append("/api/compaction/show?tablet_id=") + sb.append(tablet_id) + + String command = sb.toString() + logger.info(command) + def process = command.execute() + def code = process.waitFor() + def out = process.getText() + logger.info("Get tablet status: =" + code + ", out=" + out) + assertEquals(code, 0) + def tabletStatus = parseJson(out.trim()) + return tabletStatus + } + + def waitForCompaction = { tablet -> + String tablet_id = tablet.TabletId + String trigger_backend_id = tablet.BackendId + def be_host = backendId_to_backendIP[trigger_backend_id] + def be_http_port = backendId_to_backendHttpPort[trigger_backend_id] + def running = true + do { + Thread.sleep(1000) + StringBuilder sb = new StringBuilder(); + sb.append("curl -X GET http://${be_host}:${be_http_port}") + sb.append("/api/compaction/run_status?tablet_id=") + sb.append(tablet_id) + + String command = sb.toString() + logger.info(command) + def process = command.execute() + def code = process.waitFor() + def out = process.getText() + logger.info("Get compaction status: code=" + code + ", out=" + out) + assertEquals(code, 0) + def compactionStatus = parseJson(out.trim()) + assertEquals("success", compactionStatus.status.toLowerCase()) + running = compactionStatus.run_status + } while (running) + } + + def getLocalDeleteBitmapStatus = { tablet -> + String tablet_id = tablet.TabletId + String trigger_backend_id = tablet.BackendId + def be_host = backendId_to_backendIP[trigger_backend_id] + def be_http_port = backendId_to_backendHttpPort[trigger_backend_id] + boolean running = true + StringBuilder sb = new StringBuilder(); + sb.append("curl -X GET http://${be_host}:${be_http_port}") + sb.append("/api/delete_bitmap/count_local?verbose=true&tablet_id=") + sb.append(tablet_id) + + String command = sb.toString() + logger.info(command) + def process = command.execute() + def code = process.waitFor() + def out = process.getText() + logger.info("Get local delete bitmap count status: =" + code + ", out=" + out) + assertEquals(code, 0) + def deleteBitmapStatus = parseJson(out.trim()) + return deleteBitmapStatus + } + + sql """ DROP TABLE IF EXISTS ${testTable} """ + sql """ + create table ${testTable} (`k` int NOT NULL, `v` int NOT NULL) + UNIQUE KEY(`k`) + DISTRIBUTED BY HASH(`k`) BUCKETS 1 + PROPERTIES ( + "enable_unique_key_merge_on_write" = "true", + "replication_allocation" = "tag.location.default: 1", + "disable_auto_compaction" = "true" + ); + """ + + def tablets = sql_return_maparray """ show tablets from ${testTable}; """ + logger.info("tablets: " + tablets) + assertEquals(1, tablets.size()) + def tablet = tablets[0] + + GetDebugPoint().clearDebugPointsForAllBEs() + get_be_param("tablet_rowset_stale_sweep_time_sec") + set_be_param("tablet_rowset_stale_sweep_time_sec", "0") + get_be_param("compaction_promotion_version_count") + set_be_param("compaction_promotion_version_count", "5") + + onFinish { + GetDebugPoint().clearDebugPointsForAllBEs() + reset_be_param("tablet_rowset_stale_sweep_time_sec") + reset_be_param("compaction_promotion_version_count") + } + + GetDebugPoint().enableDebugPointForAllBEs("CumulativeCompaction.modify_rowsets.delete_expired_stale_rowset") + GetDebugPoint().enableDebugPointForAllBEs("Tablet.delete_expired_stale_rowset.start_delete_unused_rowset") + GetDebugPoint().enableDebugPointForAllBEs("DeleteBitmapAction._handle_show_local_delete_bitmap_count.vacuum_stale_rowsets") // cloud + GetDebugPoint().enableDebugPointForAllBEs("DeleteBitmapAction._handle_show_local_delete_bitmap_count.start_delete_unused_rowset") // local + + // 1. write some data + sql """ INSERT INTO ${testTable} VALUES (1,99); """ + sql """ INSERT INTO ${testTable} VALUES (2,99); """ + sql """ INSERT INTO ${testTable} VALUES (3,99); """ + sql """ INSERT INTO ${testTable} VALUES (4,99); """ + sql """ INSERT INTO ${testTable} VALUES (5,99); """ + sql "sync" + getTabletStatus(tablet) + getLocalDeleteBitmapStatus(tablet) + + // 2. trigger compaction + assertTrue(triggerCompaction(tablet).contains("Success")) + waitForCompaction(tablet) + // wait for compaction finish + for (int i = 0; i < 10; i++) { + def tablet_status = getTabletStatus(tablet) + if (tablet_status["rowsets"].size() <= 2) { + break + } + sleep(200) + } + + // 3. write some data + sql """ INSERT INTO ${testTable} VALUES (1,100); """ + sql """ INSERT INTO ${testTable} VALUES (2,100); """ + sql """ INSERT INTO ${testTable} VALUES (3,100); """ + sql """ INSERT INTO ${testTable} VALUES (4,100); """ + sql """ INSERT INTO ${testTable} VALUES (5,100); """ + sql "sync" + def row_count = sql "select count() from ${testTable};" + logger.info("row_count: " + row_count) + + /** + * case: + 1. 导入r1-r5,触发cu,产生r1-5 + 2. 导入r6-r10,(有delete bitmap,删除了r1-5中的数据)触发cu,block住merge(拿着r1-5的rowset的指针) + 3. 再做一个compaction,对r1-r10,并触发清理,新增的逻辑这里会检查引用计数,导致清理不掉(拿着r1-5的rowset的指针);原来的逻辑在删除stale的时候清理,后面没有清理的时机了,所以是有问题的,但存算一体上没有问题 + 4. 允许merge,merge后 + */ + + // 4. block compaction merge delete bitmap of pre rowset; trigger compaction + GetDebugPoint().enableDebugPointForAllBEs("BaseTablet.agg_delete_bitmap_for_stale_rowsets.merge_delete_bitmap.block") + GetDebugPoint().enableDebugPointForAllBEs("CloudSizeBasedCumulativeCompactionPolicy::pick_input_rowsets.set_input_rowsets", + [tablet_id: "${tablet.tablet_id}", start_version: 7, end_version: 11]); + assertTrue(triggerCompaction(tablet).contains("Success")) + waitForCompaction(tablet) + // wait for compaction finish + for (int i = 0; i < 10; i++) { + def tablet_status = getTabletStatus(tablet) + if (tablet_status["rowsets"].size() == 3) { + break + } + sleep(200) + } + def local_dm = getLocalDeleteBitmapStatus(tablet) + assertEquals(5, local_dm["delete_bitmap_count"]) + assertEquals(5, local_dm["cardinality"]) + + // 5. trigger base compaction, wait for no stale rowsets + assertTrue(triggerCompaction(tablet, "full").contains("Success")) + waitForCompaction(tablet) + // wait for compaction finish + for (int i = 0; i < 10; i++) { + def tablet_status = getTabletStatus(tablet) + if (tablet_status["rowsets"].size() <= 2) { + break + } + sleep(200) + } + // unused rowset can not be deleted because it's referenced by the agg step + local_dm = getLocalDeleteBitmapStatus(tablet) + assertEquals(5, local_dm["delete_bitmap_count"]) + assertEquals(5, local_dm["cardinality"]) + getTabletStatus(tablet) + + GetDebugPoint().disableDebugPointForAllBEs("BaseTablet.agg_delete_bitmap_for_stale_rowsets.merge_delete_bitmap.block") + for (int i = 0; i < 20; i++) { + def local_delete_bitmap_status = getLocalDeleteBitmapStatus(tablet) + if (local_delete_bitmap_status["delete_bitmap_count"] == 0) { + break + } + sleep(100) + } +} diff --git a/regression-test/suites/compaction/test_mow_stale_rowset_delete_bitmap.groovy b/regression-test/suites/compaction/test_mow_stale_rowset_delete_bitmap.groovy new file mode 100644 index 00000000000000..b91a19784e6eb6 --- /dev/null +++ b/regression-test/suites/compaction/test_mow_stale_rowset_delete_bitmap.groovy @@ -0,0 +1,249 @@ +// Licensed to the Apache Software Foundation (ASF) under one +// or more contributor license agreements. See the NOTICE file +// distributed with this work for additional information +// regarding copyright ownership. The ASF licenses this file +// to you under the Apache License, Version 2.0 (the +// "License"); you may not use this file except in compliance +// with the License. You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, +// software distributed under the License is distributed on an +// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +// KIND, either express or implied. See the License for the +// specific language governing permissions and limitations +// under the License. + +import java.util.concurrent.atomic.AtomicBoolean; +import org.codehaus.groovy.runtime.IOGroovyMethods + +// when move rowsets from stale to unused, the delete bitmap are not deleted +// when delete unused rowsets, the delete bitmap are deleted +suite("test_mow_stale_rowset_delete_bitmap", "nonConcurrent") { + def testTable = "test_mow_stale_rowset_delete_bitmap" + def backendId_to_backendIP = [:] + def backendId_to_backendHttpPort = [:] + def backendId_to_params = [string: [:]] + getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort); + + def set_be_param = { paramName, paramValue -> + // for eache be node, set paramName=paramValue + for (String id in backendId_to_backendIP.keySet()) { + def beIp = backendId_to_backendIP.get(id) + def bePort = backendId_to_backendHttpPort.get(id) + def (code, out, err) = curl("POST", String.format("http://%s:%s/api/update_config?%s=%s", beIp, bePort, paramName, paramValue)) + assertTrue(out.contains("OK")) + } + } + + def reset_be_param = { paramName -> + // for eache be node, reset paramName to default + for (String id in backendId_to_backendIP.keySet()) { + def beIp = backendId_to_backendIP.get(id) + def bePort = backendId_to_backendHttpPort.get(id) + def original_value = backendId_to_params.get(id).get(paramName) + def (code, out, err) = curl("POST", String.format("http://%s:%s/api/update_config?%s=%s", beIp, bePort, paramName, original_value)) + assertTrue(out.contains("OK")) + } + } + + def get_be_param = { paramName -> + // for eache be node, get param value by default + def paramValue = "" + for (String id in backendId_to_backendIP.keySet()) { + def beIp = backendId_to_backendIP.get(id) + def bePort = backendId_to_backendHttpPort.get(id) + // get the config value from be + def (code, out, err) = curl("GET", String.format("http://%s:%s/api/show_config?conf_item=%s", beIp, bePort, paramName)) + assertTrue(code == 0) + assertTrue(out.contains(paramName)) + // parsing + def resultList = parseJson(out)[0] + assertTrue(resultList.size() == 4) + // get original value + paramValue = resultList[2] + backendId_to_params.get(id, [:]).put(paramName, paramValue) + } + } + + def triggerCompaction = { tablet -> + def compact_type = "cumulative" + String tablet_id = tablet.TabletId + String trigger_backend_id = tablet.BackendId + def be_host = backendId_to_backendIP[trigger_backend_id] + def be_http_port = backendId_to_backendHttpPort[trigger_backend_id] + if (compact_type == "cumulative") { + def (code_1, out_1, err_1) = be_run_cumulative_compaction(be_host, be_http_port, tablet_id) + logger.info("Run compaction: code=" + code_1 + ", out=" + out_1 + ", err=" + err_1) + assertEquals(code_1, 0) + return out_1 + } else if (compact_type == "full") { + def (code_2, out_2, err_2) = be_run_full_compaction(be_host, be_http_port, tablet_id) + logger.info("Run compaction: code=" + code_2 + ", out=" + out_2 + ", err=" + err_2) + assertEquals(code_2, 0) + return out_2 + } else { + assertFalse(True) + } + } + + def getTabletStatus = { tablet -> + String tablet_id = tablet.TabletId + String trigger_backend_id = tablet.BackendId + def be_host = backendId_to_backendIP[trigger_backend_id] + def be_http_port = backendId_to_backendHttpPort[trigger_backend_id] + StringBuilder sb = new StringBuilder(); + sb.append("curl -X GET http://${be_host}:${be_http_port}") + sb.append("/api/compaction/show?tablet_id=") + sb.append(tablet_id) + + String command = sb.toString() + logger.info(command) + def process = command.execute() + def code = process.waitFor() + def out = process.getText() + logger.info("Get tablet status: =" + code + ", out=" + out) + assertEquals(code, 0) + def tabletStatus = parseJson(out.trim()) + return tabletStatus + } + + def waitForCompaction = { tablet -> + String tablet_id = tablet.TabletId + String trigger_backend_id = tablet.BackendId + def be_host = backendId_to_backendIP[trigger_backend_id] + def be_http_port = backendId_to_backendHttpPort[trigger_backend_id] + def running = true + do { + Thread.sleep(1000) + StringBuilder sb = new StringBuilder(); + sb.append("curl -X GET http://${be_host}:${be_http_port}") + sb.append("/api/compaction/run_status?tablet_id=") + sb.append(tablet_id) + + String command = sb.toString() + logger.info(command) + def process = command.execute() + def code = process.waitFor() + def out = process.getText() + logger.info("Get compaction status: code=" + code + ", out=" + out) + assertEquals(code, 0) + def compactionStatus = parseJson(out.trim()) + assertEquals("success", compactionStatus.status.toLowerCase()) + running = compactionStatus.run_status + } while (running) + } + + def getLocalDeleteBitmapStatus = { tablet -> + String tablet_id = tablet.TabletId + String trigger_backend_id = tablet.BackendId + def be_host = backendId_to_backendIP[trigger_backend_id] + def be_http_port = backendId_to_backendHttpPort[trigger_backend_id] + boolean running = true + StringBuilder sb = new StringBuilder(); + sb.append("curl -X GET http://${be_host}:${be_http_port}") + sb.append("/api/delete_bitmap/count_local?verbose=true&tablet_id=") + sb.append(tablet_id) + + String command = sb.toString() + logger.info(command) + def process = command.execute() + def code = process.waitFor() + def out = process.getText() + logger.info("Get local delete bitmap count status: =" + code + ", out=" + out) + assertEquals(code, 0) + def deleteBitmapStatus = parseJson(out.trim()) + return deleteBitmapStatus + } + + AtomicBoolean query_result = new AtomicBoolean(true) + def query = { + logger.info("query start") + def results = sql_return_maparray """ select * from ${testTable}; """ + logger.info("query result: " + results) + Set keys = new HashSet<>() + for (final def result in results) { + if (keys.contains(result.k)) { + logger.info("find duplicate key: " + result.k) + query_result.set(false) + break + } + keys.add(result.k) + } + logger.info("query finish. query_result: " + query_result.get()) + } + + sql """ DROP TABLE IF EXISTS ${testTable} """ + sql """ + create table ${testTable} (`k` int NOT NULL, `v` int NOT NULL) + UNIQUE KEY(`k`) + DISTRIBUTED BY HASH(`k`) BUCKETS 1 + PROPERTIES ( + "enable_unique_key_merge_on_write" = "true", + "replication_allocation" = "tag.location.default: 1", + "disable_auto_compaction" = "true" + ); + """ + + def tablets = sql_return_maparray """ show tablets from ${testTable}; """ + logger.info("tablets: " + tablets) + assertEquals(1, tablets.size()) + def tablet = tablets[0] + + try { + GetDebugPoint().clearDebugPointsForAllBEs() + get_be_param("tablet_rowset_stale_sweep_time_sec") + set_be_param("tablet_rowset_stale_sweep_time_sec", "0") + + // write some data + sql """ INSERT INTO ${testTable} VALUES (1,99); """ + sql """ INSERT INTO ${testTable} VALUES (2,99); """ + sql """ INSERT INTO ${testTable} VALUES (3,99); """ + sql """ INSERT INTO ${testTable} VALUES (4,99),(5,0); """ + sql """ INSERT INTO ${testTable} VALUES (5,99); """ + sql "sync" + getTabletStatus(tablet) + getLocalDeleteBitmapStatus(tablet) + + // trigger and block one query + GetDebugPoint().enableDebugPointForAllBEs("NewOlapScanner::_init_tablet_reader_params.block") + Thread query_thread = new Thread(() -> query()) + query_thread.start() + sleep(100) + + // trigger compaction + GetDebugPoint().enableDebugPointForAllBEs("CumulativeCompaction.modify_rowsets.delete_expired_stale_rowset") + GetDebugPoint().enableDebugPointForAllBEs("Tablet.delete_expired_stale_rowset.start_delete_unused_rowset") + assertTrue(triggerCompaction(tablet).contains("Success")) + waitForCompaction(tablet) + // wait for stale rowsets are deleted + for (int i = 0; i < 10; i++) { + def tablet_status = getTabletStatus(tablet) + if (tablet_status["rowsets"].size() <= 2 && tablet_status["stale_rowsets"].size() == 0) { + break + } + sleep(200) + } + getLocalDeleteBitmapStatus(tablet) + + // unblock the query + GetDebugPoint().disableDebugPointForAllBEs("NewOlapScanner::_init_tablet_reader_params.block") + query_thread.join() + assertTrue(query_result.get(), "found duplicated keys") + + // wait for delete bitmap of unused rowsets are deleted + GetDebugPoint().enableDebugPointForAllBEs("DeleteBitmapAction._handle_show_local_delete_bitmap_count.vacuum_stale_rowsets") // cloud + GetDebugPoint().enableDebugPointForAllBEs("DeleteBitmapAction._handle_show_local_delete_bitmap_count.start_delete_unused_rowset") // local + for (int i = 0; i < 20; i++) { + def local_delete_bitmap_status = getLocalDeleteBitmapStatus(tablet) + if (local_delete_bitmap_status["delete_bitmap_count"] == 0) { + break + } + sleep(100) + } + } finally { + reset_be_param("tablet_rowset_stale_sweep_time_sec") + GetDebugPoint().clearDebugPointsForAllBEs() + } +} From 3b23e60ac5dfedb978f1f71950535e6baf045e68 Mon Sep 17 00:00:00 2001 From: meiyi Date: Wed, 4 Jun 2025 10:18:54 +0800 Subject: [PATCH 2/3] fix --- be/src/cloud/cloud_tablet.cpp | 4 ++-- be/src/olap/storage_engine.cpp | 9 +++++---- be/src/olap/tablet_meta.cpp | 6 +++--- be/src/olap/tablet_meta.h | 2 +- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/be/src/cloud/cloud_tablet.cpp b/be/src/cloud/cloud_tablet.cpp index fdb3fa0a5d70c1..3bc4991a8308d8 100644 --- a/be/src/cloud/cloud_tablet.cpp +++ b/be/src/cloud/cloud_tablet.cpp @@ -345,7 +345,7 @@ void CloudTablet::add_rowsets(std::vector to_add, bool version_ if (keys_type() == UNIQUE_KEYS && enable_unique_key_merge_on_write()) { // add existed rowset to unused_rowsets to remove delete bitmap if (auto find_it = _rs_version_map.find(rs->version()); - find_it != _stale_rs_version_map.end()) { + find_it != _rs_version_map.end()) { DCHECK(find_it->second->rowset_id() != rs->rowset_id()) << "tablet_id=" << tablet_id() << ", rowset_id=" << rs->rowset_id().to_string() @@ -518,7 +518,7 @@ void CloudTablet::remove_delete_bitmap() { ++it; continue; } - tablet_meta()->remove_rowset_delete_bitmap(rs->rowset_id()); + tablet_meta()->remove_rowset_delete_bitmap(rs->rowset_id(), rs->version()); it = _unused_rowsets.erase(it); } diff --git a/be/src/olap/storage_engine.cpp b/be/src/olap/storage_engine.cpp index 2d8ce24244623a..5229965cd5e13d 100644 --- a/be/src/olap/storage_engine.cpp +++ b/be/src/olap/storage_engine.cpp @@ -950,12 +950,13 @@ void StorageEngine::_clean_unused_rowset_metas() { for (auto data_dir : data_dirs) { static_cast( RowsetMetaManager::traverse_rowset_metas(data_dir->get_meta(), clean_rowset_func)); - // delete delete bitmap + // 1. delete delete_bitmap std::set tablets_to_save_meta; for (auto& rowset_meta : invalid_rowset_metas) { TabletSharedPtr tablet = _tablet_manager->get_tablet(rowset_meta->tablet_id()); if (tablet && tablet->tablet_meta()->enable_unique_key_merge_on_write()) { - tablet->tablet_meta()->remove_rowset_delete_bitmap(rowset_meta->rowset_id()); + tablet->tablet_meta()->remove_rowset_delete_bitmap(rowset_meta->rowset_id(), + rowset_meta->version()); tablets_to_save_meta.emplace(tablet->tablet_id()); } } @@ -966,7 +967,7 @@ void StorageEngine::_clean_unused_rowset_metas() { tablet->save_meta(); } } - // delete rowset meta + // 2. delete rowset meta for (auto& rowset_meta : invalid_rowset_metas) { static_cast(RowsetMetaManager::remove( data_dir->get_meta(), rowset_meta->tablet_uid(), rowset_meta->rowset_id())); @@ -1274,7 +1275,7 @@ void StorageEngine::start_delete_unused_rowset() { // delete delete_bitmap of unused rowsets if (auto tablet = _tablet_manager->get_tablet(rs->rowset_meta()->tablet_id()); tablet && tablet->enable_unique_key_merge_on_write()) { - tablet->tablet_meta()->remove_rowset_delete_bitmap(rs->rowset_id()); + tablet->tablet_meta()->remove_rowset_delete_bitmap(rs->rowset_id(), rs->version()); tablets_to_save_meta.emplace(tablet->tablet_id()); } Status status = rs->remove(); diff --git a/be/src/olap/tablet_meta.cpp b/be/src/olap/tablet_meta.cpp index cb5a3696ca2994..13486fa581f311 100644 --- a/be/src/olap/tablet_meta.cpp +++ b/be/src/olap/tablet_meta.cpp @@ -455,12 +455,12 @@ void TabletMeta::init_column_from_tcolumn(uint32_t unique_id, const TColumn& tco } } -void TabletMeta::remove_rowset_delete_bitmap(const RowsetId& rowset_id) { +void TabletMeta::remove_rowset_delete_bitmap(const RowsetId& rowset_id, const Version& version) { if (_enable_unique_key_merge_on_write) { delete_bitmap().remove({rowset_id, 0, 0}, {rowset_id, UINT32_MAX, 0}); if (config::enable_mow_verbose_log) { - LOG_INFO("delete rowset delete bitmap. tablet={}, rowset={}", tablet_id(), - rowset_id.to_string()); + LOG_INFO("delete rowset delete bitmap. tablet={}, rowset={}, version={}", tablet_id(), + rowset_id.to_string(), version.to_string()); } size_t rowset_cache_version_size = delete_bitmap().remove_rowset_cache_version(rowset_id); _check_mow_rowset_cache_version_size(rowset_cache_version_size); diff --git a/be/src/olap/tablet_meta.h b/be/src/olap/tablet_meta.h index 0247c73890de16..9098d2e8ef7910 100644 --- a/be/src/olap/tablet_meta.h +++ b/be/src/olap/tablet_meta.h @@ -242,7 +242,7 @@ class TabletMeta : public MetadataAdder { DeleteBitmapPtr delete_bitmap_ptr() { return _delete_bitmap; } DeleteBitmap& delete_bitmap() { return *_delete_bitmap; } - void remove_rowset_delete_bitmap(const RowsetId& rowset_id); + void remove_rowset_delete_bitmap(const RowsetId& rowset_id, const Version& version); bool enable_unique_key_merge_on_write() const { return _enable_unique_key_merge_on_write; } From 0f3fdb9bda473aeed683d7308f3b1fd835d1cef9 Mon Sep 17 00:00:00 2001 From: meiyi Date: Fri, 6 Jun 2025 10:36:18 +0800 Subject: [PATCH 3/3] fix --- be/src/cloud/cloud_tablet.cpp | 6 +- be/src/cloud/cloud_tablet.h | 4 +- be/src/cloud/cloud_tablet_mgr.cpp | 20 +- ..._mow_delete_unused_rowset_dm_docker.groovy | 9 +- ...t_mow_pre_rowset_delete_bitmap_race.groovy | 274 ------------------ 5 files changed, 19 insertions(+), 294 deletions(-) delete mode 100644 regression-test/suites/compaction/test_mow_pre_rowset_delete_bitmap_race.groovy diff --git a/be/src/cloud/cloud_tablet.cpp b/be/src/cloud/cloud_tablet.cpp index 3bc4991a8308d8..857515e6c1d72b 100644 --- a/be/src/cloud/cloud_tablet.cpp +++ b/be/src/cloud/cloud_tablet.cpp @@ -502,14 +502,14 @@ uint64_t CloudTablet::delete_expired_stale_rowsets() { return expired_rowsets.size(); } -bool CloudTablet::need_remove_delete_bitmap() { +bool CloudTablet::need_remove_unused_rowsets() { std::lock_guard lock(_gc_mutex); return !_unused_rowsets.empty() || !_unused_delete_bitmap.empty(); } -void CloudTablet::remove_delete_bitmap() { +void CloudTablet::remove_unused_rowsets() { std::lock_guard lock(_gc_mutex); - // 1. remove delete bitmap of unused rowsets + // 1. remove unused rowsets and delete bitmap for (auto it = _unused_rowsets.begin(); it != _unused_rowsets.end();) { auto&& rs = it->second; if (rs.use_count() > 1) { diff --git a/be/src/cloud/cloud_tablet.h b/be/src/cloud/cloud_tablet.h index a18d2be05d48d8..d63506ddde0e55 100644 --- a/be/src/cloud/cloud_tablet.h +++ b/be/src/cloud/cloud_tablet.h @@ -275,8 +275,8 @@ class CloudTablet final : public BaseTablet { DeleteBitmapPtr& new_delete_bitmap, std::map& pre_rowset_to_versions); - bool need_remove_delete_bitmap(); - void remove_delete_bitmap(); + bool need_remove_unused_rowsets(); + void remove_unused_rowsets(); private: // FIXME(plat1ko): No need to record base size if rowsets are ordered by version diff --git a/be/src/cloud/cloud_tablet_mgr.cpp b/be/src/cloud/cloud_tablet_mgr.cpp index 08b3e7c3a2b27c..376a935335f5d8 100644 --- a/be/src/cloud/cloud_tablet_mgr.cpp +++ b/be/src/cloud/cloud_tablet_mgr.cpp @@ -266,19 +266,19 @@ void CloudTabletMgr::vacuum_stale_rowsets(const CountDownLatch& stop_latch) { .tag("num_tablets", tablets_to_vacuum.size()); { - LOG_INFO("begin to remove delete bitmap"); - std::vector> tablets_to_remove_delete_bitmap; - tablets_to_remove_delete_bitmap.reserve(_tablet_map->size()); - _tablet_map->traverse([&tablets_to_remove_delete_bitmap](auto&& t) { - if (t->need_remove_delete_bitmap()) { - tablets_to_remove_delete_bitmap.push_back(t); + LOG_INFO("begin to remove unused rowsets"); + std::vector> tablets_to_remove_unused_rowsets; + tablets_to_remove_unused_rowsets.reserve(_tablet_map->size()); + _tablet_map->traverse([&tablets_to_remove_unused_rowsets](auto&& t) { + if (t->need_remove_unused_rowsets()) { + tablets_to_remove_unused_rowsets.push_back(t); } }); - for (auto& t : tablets_to_remove_delete_bitmap) { - t->remove_delete_bitmap(); + for (auto& t : tablets_to_remove_unused_rowsets) { + t->remove_unused_rowsets(); } - LOG_INFO("finish remove delete bitmap") - .tag("num_tablets", tablets_to_remove_delete_bitmap.size()); + LOG_INFO("finish remove unused rowsets") + .tag("num_tablets", tablets_to_remove_unused_rowsets.size()); if (config::enable_check_agg_and_remove_pre_rowsets_delete_bitmap) { int64_t max_useless_rowset_count = 0; int64_t tablet_id_with_max_useless_rowset_count = 0; diff --git a/regression-test/suites/compaction/test_mow_delete_unused_rowset_dm_docker.groovy b/regression-test/suites/compaction/test_mow_delete_unused_rowset_dm_docker.groovy index bdf0fb4b338221..53bc4f10e51e36 100644 --- a/regression-test/suites/compaction/test_mow_delete_unused_rowset_dm_docker.groovy +++ b/regression-test/suites/compaction/test_mow_delete_unused_rowset_dm_docker.groovy @@ -213,10 +213,10 @@ suite("test_mow_delete_unused_rowset_dm_docker", "docker") { assertEquals(5, local_dm["delete_bitmap_count"]) order_qt_sql3 """ select * from ${testTable}; """ - // 7. restart be - /*cluster.restartBackends() + // 7. restart be to check to the deleted delete bitmap is stored to local storage + cluster.restartBackends() tablet_status = getTabletStatus(tablet) - logger.info("tablet status after restart: " + tablet_status) + logger.info("tablet status after restart2: " + tablet_status) for (int i = 0; i < 300; i++) { local_dm = getLocalDeleteBitmapStatus(tablet) if (local_dm["delete_bitmap_count"] == 5) { @@ -225,8 +225,7 @@ suite("test_mow_delete_unused_rowset_dm_docker", "docker") { sleep(20) } local_dm = getLocalDeleteBitmapStatus(tablet) - logger.info("local_dm 2: " + local_dm) + logger.info("local_dm 3: " + local_dm) assertEquals(5, local_dm["delete_bitmap_count"]) - order_qt_sql3 """ select * from ${testTable}; """*/ } } diff --git a/regression-test/suites/compaction/test_mow_pre_rowset_delete_bitmap_race.groovy b/regression-test/suites/compaction/test_mow_pre_rowset_delete_bitmap_race.groovy deleted file mode 100644 index 7a99498fd350ff..00000000000000 --- a/regression-test/suites/compaction/test_mow_pre_rowset_delete_bitmap_race.groovy +++ /dev/null @@ -1,274 +0,0 @@ -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -// after cu compaction, when agg delete bitmap for pre rowsets, block merge delete bitmap to tablet meta -// compaction for pre rowsets, and wait for they are moved from stale rowsets(in unused rowsets and can not be deleted because the first step hold rowset reference) -// unblock the merge, the delete bitmap of these delete bitmap can be deleted -suite("test_mow_pre_rowset_delete_bitmap_race", "nonConcurrent") { - def testTable = "test_mow_pre_rowset_delete_bitmap_race" - def backendId_to_backendIP = [:] - def backendId_to_backendHttpPort = [:] - def backendId_to_params = [string: [:]] - getBackendIpHttpPort(backendId_to_backendIP, backendId_to_backendHttpPort); - - def set_be_param = { paramName, paramValue -> - // for eache be node, set paramName=paramValue - for (String id in backendId_to_backendIP.keySet()) { - def beIp = backendId_to_backendIP.get(id) - def bePort = backendId_to_backendHttpPort.get(id) - def (code, out, err) = curl("POST", String.format("http://%s:%s/api/update_config?%s=%s", beIp, bePort, paramName, paramValue)) - assertTrue(out.contains("OK")) - } - } - - def reset_be_param = { paramName -> - // for eache be node, reset paramName to default - for (String id in backendId_to_backendIP.keySet()) { - def beIp = backendId_to_backendIP.get(id) - def bePort = backendId_to_backendHttpPort.get(id) - def original_value = backendId_to_params.get(id).get(paramName) - def (code, out, err) = curl("POST", String.format("http://%s:%s/api/update_config?%s=%s", beIp, bePort, paramName, original_value)) - assertTrue(out.contains("OK")) - } - } - - def get_be_param = { paramName -> - // for eache be node, get param value by default - def paramValue = "" - for (String id in backendId_to_backendIP.keySet()) { - def beIp = backendId_to_backendIP.get(id) - def bePort = backendId_to_backendHttpPort.get(id) - // get the config value from be - def (code, out, err) = curl("GET", String.format("http://%s:%s/api/show_config?conf_item=%s", beIp, bePort, paramName)) - assertTrue(code == 0) - assertTrue(out.contains(paramName)) - // parsing - def resultList = parseJson(out)[0] - assertTrue(resultList.size() == 4) - // get original value - paramValue = resultList[2] - backendId_to_params.get(id, [:]).put(paramName, paramValue) - } - } - - def triggerCompaction = { tablet, compact_type = "cumulative" -> - String tablet_id = tablet.TabletId - String trigger_backend_id = tablet.BackendId - def be_host = backendId_to_backendIP[trigger_backend_id] - def be_http_port = backendId_to_backendHttpPort[trigger_backend_id] - if (compact_type == "cumulative") { - def (code_1, out_1, err_1) = be_run_cumulative_compaction(be_host, be_http_port, tablet_id) - logger.info("Run compaction: code=" + code_1 + ", out=" + out_1 + ", err=" + err_1) - assertEquals(code_1, 0) - return out_1 - } else if (compact_type == "full") { - def (code_2, out_2, err_2) = be_run_full_compaction(be_host, be_http_port, tablet_id) - logger.info("Run compaction: code=" + code_2 + ", out=" + out_2 + ", err=" + err_2) - assertEquals(code_2, 0) - return out_2 - } else { - assertFalse(True) - } - } - - def getTabletStatus = { tablet -> - String tablet_id = tablet.TabletId - String trigger_backend_id = tablet.BackendId - def be_host = backendId_to_backendIP[trigger_backend_id] - def be_http_port = backendId_to_backendHttpPort[trigger_backend_id] - StringBuilder sb = new StringBuilder(); - sb.append("curl -X GET http://${be_host}:${be_http_port}") - sb.append("/api/compaction/show?tablet_id=") - sb.append(tablet_id) - - String command = sb.toString() - logger.info(command) - def process = command.execute() - def code = process.waitFor() - def out = process.getText() - logger.info("Get tablet status: =" + code + ", out=" + out) - assertEquals(code, 0) - def tabletStatus = parseJson(out.trim()) - return tabletStatus - } - - def waitForCompaction = { tablet -> - String tablet_id = tablet.TabletId - String trigger_backend_id = tablet.BackendId - def be_host = backendId_to_backendIP[trigger_backend_id] - def be_http_port = backendId_to_backendHttpPort[trigger_backend_id] - def running = true - do { - Thread.sleep(1000) - StringBuilder sb = new StringBuilder(); - sb.append("curl -X GET http://${be_host}:${be_http_port}") - sb.append("/api/compaction/run_status?tablet_id=") - sb.append(tablet_id) - - String command = sb.toString() - logger.info(command) - def process = command.execute() - def code = process.waitFor() - def out = process.getText() - logger.info("Get compaction status: code=" + code + ", out=" + out) - assertEquals(code, 0) - def compactionStatus = parseJson(out.trim()) - assertEquals("success", compactionStatus.status.toLowerCase()) - running = compactionStatus.run_status - } while (running) - } - - def getLocalDeleteBitmapStatus = { tablet -> - String tablet_id = tablet.TabletId - String trigger_backend_id = tablet.BackendId - def be_host = backendId_to_backendIP[trigger_backend_id] - def be_http_port = backendId_to_backendHttpPort[trigger_backend_id] - boolean running = true - StringBuilder sb = new StringBuilder(); - sb.append("curl -X GET http://${be_host}:${be_http_port}") - sb.append("/api/delete_bitmap/count_local?verbose=true&tablet_id=") - sb.append(tablet_id) - - String command = sb.toString() - logger.info(command) - def process = command.execute() - def code = process.waitFor() - def out = process.getText() - logger.info("Get local delete bitmap count status: =" + code + ", out=" + out) - assertEquals(code, 0) - def deleteBitmapStatus = parseJson(out.trim()) - return deleteBitmapStatus - } - - sql """ DROP TABLE IF EXISTS ${testTable} """ - sql """ - create table ${testTable} (`k` int NOT NULL, `v` int NOT NULL) - UNIQUE KEY(`k`) - DISTRIBUTED BY HASH(`k`) BUCKETS 1 - PROPERTIES ( - "enable_unique_key_merge_on_write" = "true", - "replication_allocation" = "tag.location.default: 1", - "disable_auto_compaction" = "true" - ); - """ - - def tablets = sql_return_maparray """ show tablets from ${testTable}; """ - logger.info("tablets: " + tablets) - assertEquals(1, tablets.size()) - def tablet = tablets[0] - - GetDebugPoint().clearDebugPointsForAllBEs() - get_be_param("tablet_rowset_stale_sweep_time_sec") - set_be_param("tablet_rowset_stale_sweep_time_sec", "0") - get_be_param("compaction_promotion_version_count") - set_be_param("compaction_promotion_version_count", "5") - - onFinish { - GetDebugPoint().clearDebugPointsForAllBEs() - reset_be_param("tablet_rowset_stale_sweep_time_sec") - reset_be_param("compaction_promotion_version_count") - } - - GetDebugPoint().enableDebugPointForAllBEs("CumulativeCompaction.modify_rowsets.delete_expired_stale_rowset") - GetDebugPoint().enableDebugPointForAllBEs("Tablet.delete_expired_stale_rowset.start_delete_unused_rowset") - GetDebugPoint().enableDebugPointForAllBEs("DeleteBitmapAction._handle_show_local_delete_bitmap_count.vacuum_stale_rowsets") // cloud - GetDebugPoint().enableDebugPointForAllBEs("DeleteBitmapAction._handle_show_local_delete_bitmap_count.start_delete_unused_rowset") // local - - // 1. write some data - sql """ INSERT INTO ${testTable} VALUES (1,99); """ - sql """ INSERT INTO ${testTable} VALUES (2,99); """ - sql """ INSERT INTO ${testTable} VALUES (3,99); """ - sql """ INSERT INTO ${testTable} VALUES (4,99); """ - sql """ INSERT INTO ${testTable} VALUES (5,99); """ - sql "sync" - getTabletStatus(tablet) - getLocalDeleteBitmapStatus(tablet) - - // 2. trigger compaction - assertTrue(triggerCompaction(tablet).contains("Success")) - waitForCompaction(tablet) - // wait for compaction finish - for (int i = 0; i < 10; i++) { - def tablet_status = getTabletStatus(tablet) - if (tablet_status["rowsets"].size() <= 2) { - break - } - sleep(200) - } - - // 3. write some data - sql """ INSERT INTO ${testTable} VALUES (1,100); """ - sql """ INSERT INTO ${testTable} VALUES (2,100); """ - sql """ INSERT INTO ${testTable} VALUES (3,100); """ - sql """ INSERT INTO ${testTable} VALUES (4,100); """ - sql """ INSERT INTO ${testTable} VALUES (5,100); """ - sql "sync" - def row_count = sql "select count() from ${testTable};" - logger.info("row_count: " + row_count) - - /** - * case: - 1. 导入r1-r5,触发cu,产生r1-5 - 2. 导入r6-r10,(有delete bitmap,删除了r1-5中的数据)触发cu,block住merge(拿着r1-5的rowset的指针) - 3. 再做一个compaction,对r1-r10,并触发清理,新增的逻辑这里会检查引用计数,导致清理不掉(拿着r1-5的rowset的指针);原来的逻辑在删除stale的时候清理,后面没有清理的时机了,所以是有问题的,但存算一体上没有问题 - 4. 允许merge,merge后 - */ - - // 4. block compaction merge delete bitmap of pre rowset; trigger compaction - GetDebugPoint().enableDebugPointForAllBEs("BaseTablet.agg_delete_bitmap_for_stale_rowsets.merge_delete_bitmap.block") - GetDebugPoint().enableDebugPointForAllBEs("CloudSizeBasedCumulativeCompactionPolicy::pick_input_rowsets.set_input_rowsets", - [tablet_id: "${tablet.tablet_id}", start_version: 7, end_version: 11]); - assertTrue(triggerCompaction(tablet).contains("Success")) - waitForCompaction(tablet) - // wait for compaction finish - for (int i = 0; i < 10; i++) { - def tablet_status = getTabletStatus(tablet) - if (tablet_status["rowsets"].size() == 3) { - break - } - sleep(200) - } - def local_dm = getLocalDeleteBitmapStatus(tablet) - assertEquals(5, local_dm["delete_bitmap_count"]) - assertEquals(5, local_dm["cardinality"]) - - // 5. trigger base compaction, wait for no stale rowsets - assertTrue(triggerCompaction(tablet, "full").contains("Success")) - waitForCompaction(tablet) - // wait for compaction finish - for (int i = 0; i < 10; i++) { - def tablet_status = getTabletStatus(tablet) - if (tablet_status["rowsets"].size() <= 2) { - break - } - sleep(200) - } - // unused rowset can not be deleted because it's referenced by the agg step - local_dm = getLocalDeleteBitmapStatus(tablet) - assertEquals(5, local_dm["delete_bitmap_count"]) - assertEquals(5, local_dm["cardinality"]) - getTabletStatus(tablet) - - GetDebugPoint().disableDebugPointForAllBEs("BaseTablet.agg_delete_bitmap_for_stale_rowsets.merge_delete_bitmap.block") - for (int i = 0; i < 20; i++) { - def local_delete_bitmap_status = getLocalDeleteBitmapStatus(tablet) - if (local_delete_bitmap_status["delete_bitmap_count"] == 0) { - break - } - sleep(100) - } -}