From 6405877951e8e4e701d669bf1561b77950b8e87c Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Wed, 15 May 2024 17:18:23 -0400 Subject: [PATCH 01/26] Add feature flag to show relevance score in search results --- .../corpus/snippets/document_result.html | 6 ++++++ geniza/settings/local_settings.py.sample | 1 + sitemedia/scss/components/_results.scss | 15 +++++++++++++++ 3 files changed, 22 insertions(+) diff --git a/geniza/corpus/templates/corpus/snippets/document_result.html b/geniza/corpus/templates/corpus/snippets/document_result.html index bb60d2a6a..aad0cf473 100644 --- a/geniza/corpus/templates/corpus/snippets/document_result.html +++ b/geniza/corpus/templates/corpus/snippets/document_result.html @@ -1,6 +1,12 @@ {% load i18n corpus_extras %} {% spaceless %}
  • + {% if "SHOW_RELEVANCE_SCORES" in FEATURE_FLAGS %} + {# show relevance score if enabled #} + + Relevance: {{ document.score|default:0 }} + + {% endif %} {# result number #} {% with page_obj.start_index|default:1 as start_adjust %} diff --git a/geniza/settings/local_settings.py.sample b/geniza/settings/local_settings.py.sample index 958271f32..e844cad4f 100644 --- a/geniza/settings/local_settings.py.sample +++ b/geniza/settings/local_settings.py.sample @@ -7,6 +7,7 @@ DEBUG = True FEATURE_FLAGS = [ # "SHOW_WARNING_BANNER", # Uncomment this in test/QA site to show test banner + # "SHOW_RELEVANCE_SCORES", # Uncomment in test/QA site to show search result relevance scores ] # Uncomment and change these to override the default test banner message # WARNING_BANNER_HEADING = "This is a test site" diff --git a/sitemedia/scss/components/_results.scss b/sitemedia/scss/components/_results.scss index 60c5b29e0..7d5b114e3 100644 --- a/sitemedia/scss/components/_results.scss +++ b/sitemedia/scss/components/_results.scss @@ -77,6 +77,21 @@ section#document-list { mask-image: url("/static/img/ui/desktop/all/separator.svg"); } } + .score { + top: 1.5rem; + } + } + + // relevance score if enabled + .score { + @include typography.meta-bold; + display: block; + position: absolute; + right: 0; + top: 0; + background-color: var(--background-gray); + padding: 0.25rem; + border: 1px solid var(--on-background); } // result number in list From 0251cab54413e04b241bee722d5d66f822c7a88a Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Wed, 15 May 2024 17:18:53 -0400 Subject: [PATCH 02/26] Add wip regex search view --- geniza/corpus/solr_queryset.py | 69 ++++++++++++++++++- .../corpus/snippets/document_result.html | 2 +- geniza/corpus/urls.py | 5 ++ geniza/corpus/views.py | 67 +++++++++++++++++- solr_conf/conf/managed-schema | 12 +++- 5 files changed, 151 insertions(+), 4 deletions(-) diff --git a/geniza/corpus/solr_queryset.py b/geniza/corpus/solr_queryset.py index 9983ea21c..9665ede04 100644 --- a/geniza/corpus/solr_queryset.py +++ b/geniza/corpus/solr_queryset.py @@ -3,6 +3,7 @@ from bs4 import BeautifulSoup from django.apps import apps +from django.utils.safestring import mark_safe from django.utils.translation import gettext as _ from parasolr.django import AliasedSolrQuerySet from piffle.image import IIIFImageClient @@ -30,7 +31,12 @@ def clean_html(html_snippet): else: html_snippet = f"
  • {ellipsis}{html_snippet}" - return BeautifulSoup(html_snippet, "html.parser").prettify(formatter="minimal") + return BeautifulSoup( + html_snippet, + "html.parser", + # ensure li and em tags don't get extra whitespace, as this may break display + preserve_whitespace_tags=["li", "em"], + ).prettify(formatter="minimal") class DocumentSolrQuerySet(AliasedSolrQuerySet): @@ -78,6 +84,7 @@ class DocumentSolrQuerySet(AliasedSolrQuerySet): "old_shelfmark": "old_shelfmark_bigram", "transcription_nostem": "transcription_nostem", "description_nostem": "description_nostem", + "transcription_regex": "transcription_regex", } # regex to convert field aliases used in search to actual solr fields @@ -214,6 +221,19 @@ def keyword_search(self, search_term): ) return search + def regex_search(self, search_term): + """Build a Lucene query for searching with regex.""" + # store original regex query + original_regex = search_term + # surround passed query with wildcards to allow non-anchored matches, + # and slashes so that it is interpreted as regex by Lucene + search_term = f"/.*{search_term}.*/" + # match in the non-analyzed transcription_regex field + search = self.search(f"transcription_regex:{search_term}").raw_query_parameters( + regex_query=original_regex + ) + return search + def related_to(self, document): "Return documents related to the given document (i.e. shares any shelfmarks)" @@ -255,10 +275,57 @@ def get_result_document(self, doc): return doc + def get_regex_highlight(self, text): + """Helper method to manually highlight and truncate a snippet for regex matches + (automatic highlight unavailable due to solr regex search limitations)""" + pattern = f"({self.raw_params['regex_query']})" + # attempt split on first regex match + split_text = re.split(pattern, text, maxsplit=1) + if len(split_text) > 1: + # found a match, truncate text down to just context around match. ensure snippets begin + # or end with newlines to prevent malformed
  • tags from appearing (they get mangled + # when using simple n-length substrings) + # using newline as start boundary, get <=150 characters of context before match + before = split_text[0] + start_newline_regex = re.search(r"\n(.{1,150}$)", before, flags=re.DOTALL) + before = start_newline_regex.group(1) if start_newline_regex else before + + # preserve matching portion unchanged + match = split_text[1] + + # using newline as end boundary, get <=150 characters of context after match + after = split_text[2] + end_newline_regex = re.search(r"^(.{1,150})\n", after, flags=re.DOTALL) + after = end_newline_regex.group(1) if end_newline_regex else after + + # combine truncated context with preserved match + snippet = before + match + after + + # highlight match in context + return re.sub( + self.raw_params["regex_query"], + lambda m: f"{m.group(0)}", + snippet, + ) + else: + # no match = no highlight + return None + def get_highlighting(self): """highlight snippets within transcription/translation html may result in invalid tags that will render strangely; clean up the html before returning""" highlights = super().get_highlighting() + is_regex_search = "regex_query" in self.raw_params + if is_regex_search: + # highlight regex results manually due to solr limitation + highlights = {} + for doc in self.get_results(): + highlights[doc["id"]] = {"transcription": []} + for block in doc["transcription_regex"]: + highlight_snippet = self.get_regex_highlight(block) + if highlight_snippet: + highlights[doc["id"]]["transcription"].append(highlight_snippet) + is_exact_search = "hl_query" in self.raw_params for doc in highlights.keys(): # _nostem fields should take precedence over stemmed fields in the case of an diff --git a/geniza/corpus/templates/corpus/snippets/document_result.html b/geniza/corpus/templates/corpus/snippets/document_result.html index aad0cf473..b3e8e0ba2 100644 --- a/geniza/corpus/templates/corpus/snippets/document_result.html +++ b/geniza/corpus/templates/corpus/snippets/document_result.html @@ -73,7 +73,7 @@

    {% if document_highlights.transcription %} - {% for snippet in document_highlights.transcription %}{{ snippet.strip|safe }}{% endfor %} + {% for snippet in document_highlights.transcription %}{{ snippet.strip|safe }}{% if snippet.strip and not forloop.last %}...
    {% endif %}{% endfor %} {% elif document.transcription %} {# otherwise, display truncated transcription #} {# NOTE: might be nice to display N lines instead of using truncatechars #} diff --git a/geniza/corpus/urls.py b/geniza/corpus/urls.py index 81633cef9..e8f9c4dbc 100644 --- a/geniza/corpus/urls.py +++ b/geniza/corpus/urls.py @@ -8,6 +8,11 @@ path( "documents/", corpus_views.DocumentSearchView.as_view(), name="document-search" ), + path( + "documents-regex/", + corpus_views.DocumentRegexSearchView.as_view(), + name="document-regex-search", + ), path( "documents//", corpus_views.DocumentDetailView.as_view(), diff --git a/geniza/corpus/views.py b/geniza/corpus/views.py index 53aeb8cb4..50b040342 100644 --- a/geniza/corpus/views.py +++ b/geniza/corpus/views.py @@ -1,3 +1,4 @@ +import re from ast import literal_eval from copy import deepcopy from random import randint @@ -271,7 +272,8 @@ def get_context_data(self, **kwargs): highlights = paged_result.get_highlighting() if paged_result.count() else {} facet_dict = self.queryset.get_facets() # populate choices for facet filter fields on the form - context_data["form"].set_choices_from_facets(facet_dict.facet_fields) + if not isinstance(facet_dict, dict): + context_data["form"].set_choices_from_facets(facet_dict.facet_fields) context_data.update( { "highlighting": highlights, @@ -286,6 +288,69 @@ def get_context_data(self, **kwargs): return context_data +class DocumentRegexSearchView(PermissionRequiredMixin, DocumentSearchView): + permission_required = ("corpus.change_document",) + + def get_queryset(self): + """Perform requested search and return solr queryset""" + # limit to documents with published status (i.e., no suppressed documents); + # get counts of facets, excluding type filter + documents = ( + DocumentSolrQuerySet() + .filter(status=Document.PUBLIC_LABEL) + .facet( + "has_image", + "has_digital_edition", + "has_digital_translation", + "has_discussion", + ) + .facet_field("type", exclude="type", sort="value") + ) + + form = self.get_form() + # return empty queryset if not valid + if not form.is_valid(): + documents = documents.none() + + # when form is valid, check for search term and filter queryset + else: + search_opts = form.cleaned_data + + if search_opts["q"]: + documents = documents.regex_search(search_opts["q"]).also("score") + + # order by sort option + documents = documents.order_by(self.get_solr_sort(search_opts["sort"])) + + # filter by type if specified + if search_opts["doctype"]: + typelist = literal_eval(search_opts["doctype"]) + quoted_typelist = ['"%s"' % doctype for doctype in typelist] + documents = documents.filter(type__in=quoted_typelist, tag="type") + + # image filter + if search_opts["has_image"] == True: + documents = documents.filter(has_image=True) + + # scholarship filters + if search_opts["has_transcription"] == True: + documents = documents.filter(has_digital_edition=True) + if search_opts["has_discussion"] == True: + documents = documents.filter(has_discussion=True) + if search_opts["has_translation"] == True: + documents = documents.filter(has_digital_translation=True) + if search_opts["docdate"]: + # date range filter; returns tuple of value or None for open-ended range + start, end = search_opts["docdate"] + documents = documents.filter( + document_date_dr="[%s TO %s]" % (start or "*", end or "*") + ) + + self.queryset = documents + + return documents + + class DocumentDetailBase(SolrLastModifiedMixin): """View mixin to handle lastmodified and redirects for documents with old PGPIDs. Overrides get request in the case of a 404, looking for any records diff --git a/solr_conf/conf/managed-schema b/solr_conf/conf/managed-schema index e6597a6a9..f2ee0aa21 100644 --- a/solr_conf/conf/managed-schema +++ b/solr_conf/conf/managed-schema @@ -314,6 +314,14 @@ + + + + + + + + @@ -342,9 +350,10 @@ - + + @@ -402,5 +411,6 @@ + \ No newline at end of file From 891076bf1c7b6ac04a9f71f4a60f788213c5c5fb Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Thu, 16 May 2024 15:04:18 -0400 Subject: [PATCH 03/26] Fix bug highlighting multiline regex matches --- geniza/corpus/solr_queryset.py | 27 ++++++++++++++----------- sitemedia/scss/components/_results.scss | 6 +++++- 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/geniza/corpus/solr_queryset.py b/geniza/corpus/solr_queryset.py index 9665ede04..c4f1f01a5 100644 --- a/geniza/corpus/solr_queryset.py +++ b/geniza/corpus/solr_queryset.py @@ -280,7 +280,7 @@ def get_regex_highlight(self, text): (automatic highlight unavailable due to solr regex search limitations)""" pattern = f"({self.raw_params['regex_query']})" # attempt split on first regex match - split_text = re.split(pattern, text, maxsplit=1) + split_text = re.split(pattern, text, maxsplit=1, flags=re.DOTALL) if len(split_text) > 1: # found a match, truncate text down to just context around match. ensure snippets begin # or end with newlines to prevent malformed
  • tags from appearing (they get mangled @@ -290,23 +290,26 @@ def get_regex_highlight(self, text): start_newline_regex = re.search(r"\n(.{1,150}$)", before, flags=re.DOTALL) before = start_newline_regex.group(1) if start_newline_regex else before - # preserve matching portion unchanged - match = split_text[1] + # add highlight to matching portion + match = re.sub(pattern, lambda m: f"{m.group(1)}", split_text[1]) + # for multiline matches, highlight contents of each encountered li/p/h3 + line_regex = ( + r"^(|

    |

    )*((?!<.+>).+)(

  • |

    |

    )*$" + ) + match = re.sub( + line_regex, + lambda m: f"{m.group(1) or ''}{m.group(2)}{m.group(3) or ''}", + match, + flags=re.MULTILINE, + ) # using newline as end boundary, get <=150 characters of context after match after = split_text[2] end_newline_regex = re.search(r"^(.{1,150})\n", after, flags=re.DOTALL) after = end_newline_regex.group(1) if end_newline_regex else after - # combine truncated context with preserved match - snippet = before + match + after - - # highlight match in context - return re.sub( - self.raw_params["regex_query"], - lambda m: f"{m.group(0)}", - snippet, - ) + # combine truncated context with highlighted match + return before + match + after else: # no match = no highlight return None diff --git a/sitemedia/scss/components/_results.scss b/sitemedia/scss/components/_results.scss index 7d5b114e3..4639204bf 100644 --- a/sitemedia/scss/components/_results.scss +++ b/sitemedia/scss/components/_results.scss @@ -114,7 +114,6 @@ section#document-list { @include breakpoints.for-tablet-landscape-up { flex: 1 0 60%; align-self: flex-start; - padding-right: spacing.$spacing-sm; } } // document titles @@ -252,6 +251,11 @@ section#document-list { content: attr(value); height: 100%; } + &:empty::before, + &:has(p:empty)::before, + &:has(em:empty)::before { + display: none; + } } .transcription[dir="ltr"] li::before, .translation[dir="ltr"] li::before { From d593a4b588497292c36204d6d4e1c08738e7506b Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Thu, 16 May 2024 15:14:10 -0400 Subject: [PATCH 04/26] Update clean html unit test to reflect prettifier changes --- geniza/corpus/tests/test_corpus_solrqueryset.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/geniza/corpus/tests/test_corpus_solrqueryset.py b/geniza/corpus/tests/test_corpus_solrqueryset.py index fb7c7267c..74d2bbe98 100644 --- a/geniza/corpus/tests/test_corpus_solrqueryset.py +++ b/geniza/corpus/tests/test_corpus_solrqueryset.py @@ -227,19 +227,20 @@ def test_related_to(self, document, join, fragment, empty_solr): assert related_docs.filter(pgpid=join.id).count() == 1 def test_clean_html(self): - # minimal prettifier; introduces whitespace changes - assert clean_html("
  • foo").replace("\n", "") == "
  • foo
  • " - # should open unopened tag - assert clean_html("foo").replace("\n", "") == "
  • ...foo
  • " + # whitespace should be unmodified within
  • tags; minimal prettifier in others + assert clean_html("
  • foo
  • bar

    ") == "
  • foo
  • \n

    \n bar\n

    " + # should open and close partial tags + assert clean_html("
  • foo") == "
  • foo
  • " + assert clean_html("foo") == "
  • ...foo
  • " # should insert (value - 1) of first numbered
  • assert ( clean_html('foo
  • \n
  • bar
  • ').replace("\n", "") - == '
  • ...foo
  • bar
  • ' + == '
  • ...foo
  • bar
  • ' ) # should work with paragraphs (and not insert ellipsis before paragraph) assert ( clean_html('

    foo

    \n\n
  • bar
  • ').replace("\n", "") - == '
  • foo

  • bar
  • ' + == '
  • foo

  • bar
  • ' ) def test_get_highlighting(self): From a161167404df26dac51c0e273c6f252e0819d25b Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Thu, 16 May 2024 15:25:39 -0400 Subject: [PATCH 05/26] rm pointless relevance score computation for regex search --- geniza/corpus/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/geniza/corpus/views.py b/geniza/corpus/views.py index 50b040342..e491b4f3e 100644 --- a/geniza/corpus/views.py +++ b/geniza/corpus/views.py @@ -317,7 +317,7 @@ def get_queryset(self): search_opts = form.cleaned_data if search_opts["q"]: - documents = documents.regex_search(search_opts["q"]).also("score") + documents = documents.regex_search(search_opts["q"]) # order by sort option documents = documents.order_by(self.get_solr_sort(search_opts["sort"])) From 20b652acf5a83d433e7d4915cf9d69e6d25b04f3 Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Thu, 23 May 2024 08:48:58 -0400 Subject: [PATCH 06/26] Regex search: split transcriptions on canvas --- geniza/corpus/models.py | 6 ++++++ geniza/footnotes/models.py | 7 +++++++ solr_conf/conf/managed-schema | 1 - 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/geniza/corpus/models.py b/geniza/corpus/models.py index d6b406499..a993079e3 100644 --- a/geniza/corpus/models.py +++ b/geniza/corpus/models.py @@ -1232,6 +1232,7 @@ def index_data(self): counts = defaultdict(int) # collect transcription and translation texts for indexing transcription_texts = [] + transcription_texts_regex = [] translation_texts = [] # keep track of translation language for RTL/LTR display translation_langcode = "" @@ -1246,6 +1247,10 @@ def index_data(self): content = fn.content_html_str if content: transcription_texts.append(Footnote.explicit_line_numbers(content)) + for canvas in fn.content_html_canvases: + transcription_texts_regex.append( + Footnote.explicit_line_numbers(canvas) + ) elif Footnote.DIGITAL_TRANSLATION in fn.doc_relation: content = fn.content_html_str if content: @@ -1283,6 +1288,7 @@ def index_data(self): "scholarship_t": [fn.display() for fn in footnotes], # transcription content as html "text_transcription": transcription_texts, + "transcription_regex": transcription_texts_regex, "translation_language_code_s": translation_langcode, "translation_language_direction_s": translation_langdir, # translation content as html diff --git a/geniza/footnotes/models.py b/geniza/footnotes/models.py index c08cf9117..349dc3c74 100644 --- a/geniza/footnotes/models.py +++ b/geniza/footnotes/models.py @@ -633,6 +633,13 @@ def content_html_str(self): ] ) + @cached_property + def content_html_canvases(self): + "content as a list of HTML strings, one per canvas" + content_html = self.content_html + if content_html: + return ["\n".join(canvas_annos) for canvas_annos in content_html.values()] + @staticmethod def explicit_line_numbers(html): """add explicit line numbers to passed HTML (in value attributes of ol > li)""" diff --git a/solr_conf/conf/managed-schema b/solr_conf/conf/managed-schema index f2ee0aa21..29a6d4317 100644 --- a/solr_conf/conf/managed-schema +++ b/solr_conf/conf/managed-schema @@ -353,7 +353,6 @@ - From 105badbdf7cb96b967c9f7672d772c07b4784446 Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Thu, 11 Jul 2024 13:01:30 -0400 Subject: [PATCH 07/26] Use plaintext transcriptions, not html with lists, for regex --- geniza/corpus/models.py | 7 +++---- geniza/footnotes/models.py | 12 +++++++++--- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/geniza/corpus/models.py b/geniza/corpus/models.py index f7677d152..2c8dcf9d6 100644 --- a/geniza/corpus/models.py +++ b/geniza/corpus/models.py @@ -1270,10 +1270,9 @@ def index_data(self): content = fn.content_html_str if content: transcription_texts.append(Footnote.explicit_line_numbers(content)) - for canvas in fn.content_html_canvases: - transcription_texts_regex.append( - Footnote.explicit_line_numbers(canvas) - ) + for canvas in fn.content_text_canvases: + # index plaintext only for regex + transcription_texts_regex.append(canvas) elif Footnote.DIGITAL_TRANSLATION in fn.doc_relation: content = fn.content_html_str if content: diff --git a/geniza/footnotes/models.py b/geniza/footnotes/models.py index 349dc3c74..4a21342d8 100644 --- a/geniza/footnotes/models.py +++ b/geniza/footnotes/models.py @@ -634,11 +634,17 @@ def content_html_str(self): ) @cached_property - def content_html_canvases(self): - "content as a list of HTML strings, one per canvas" + def content_text_canvases(self): + "content as a list of strings, one per canvas" content_html = self.content_html if content_html: - return ["\n".join(canvas_annos) for canvas_annos in content_html.values()] + return [ + # convert each annotation from html to plaintext + "\n".join( + [BeautifulSoup(a, features="lxml").get_text() for a in canvas_annos] + ) + for canvas_annos in content_html.values() + ] @staticmethod def explicit_line_numbers(html): From cf257b189dd50eddade9dc7a0a2a748f610ccb3b Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Wed, 17 Jul 2024 11:22:45 -0400 Subject: [PATCH 08/26] Replace all newlines with spaces in transcription index --- geniza/corpus/models.py | 1 + geniza/corpus/solr_queryset.py | 12 +++++------- geniza/footnotes/models.py | 5 ++++- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/geniza/corpus/models.py b/geniza/corpus/models.py index 2c8dcf9d6..b6354e008 100644 --- a/geniza/corpus/models.py +++ b/geniza/corpus/models.py @@ -1273,6 +1273,7 @@ def index_data(self): for canvas in fn.content_text_canvases: # index plaintext only for regex transcription_texts_regex.append(canvas) + print(canvas) elif Footnote.DIGITAL_TRANSLATION in fn.doc_relation: content = fn.content_html_str if content: diff --git a/geniza/corpus/solr_queryset.py b/geniza/corpus/solr_queryset.py index c4f1f01a5..7710346ed 100644 --- a/geniza/corpus/solr_queryset.py +++ b/geniza/corpus/solr_queryset.py @@ -282,12 +282,10 @@ def get_regex_highlight(self, text): # attempt split on first regex match split_text = re.split(pattern, text, maxsplit=1, flags=re.DOTALL) if len(split_text) > 1: - # found a match, truncate text down to just context around match. ensure snippets begin - # or end with newlines to prevent malformed
  • tags from appearing (they get mangled - # when using simple n-length substrings) - # using newline as start boundary, get <=150 characters of context before match + # found a match, truncate text down to just context around match + # using word boundary as start, get <=150 characters of context before match before = split_text[0] - start_newline_regex = re.search(r"\n(.{1,150}$)", before, flags=re.DOTALL) + start_newline_regex = re.search(r"\b(.{1,150}$)", before, flags=re.DOTALL) before = start_newline_regex.group(1) if start_newline_regex else before # add highlight to matching portion @@ -303,9 +301,9 @@ def get_regex_highlight(self, text): flags=re.MULTILINE, ) - # using newline as end boundary, get <=150 characters of context after match + # get <=150 characters of context after match, using word boundary as end after = split_text[2] - end_newline_regex = re.search(r"^(.{1,150})\n", after, flags=re.DOTALL) + end_newline_regex = re.search(r"^(.{1,150})\b", after, flags=re.DOTALL) after = end_newline_regex.group(1) if end_newline_regex else after # combine truncated context with highlighted match diff --git a/geniza/footnotes/models.py b/geniza/footnotes/models.py index 4a21342d8..5dc2de50d 100644 --- a/geniza/footnotes/models.py +++ b/geniza/footnotes/models.py @@ -641,7 +641,10 @@ def content_text_canvases(self): return [ # convert each annotation from html to plaintext "\n".join( - [BeautifulSoup(a, features="lxml").get_text() for a in canvas_annos] + [ + BeautifulSoup(a, features="lxml").get_text().replace("\n", " ") + for a in canvas_annos + ] ) for canvas_annos in content_html.values() ] From 594a3729b29caccd289f57835199dc1cb1c9d5fb Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Wed, 17 Jul 2024 11:35:14 -0400 Subject: [PATCH 09/26] rm extraneous print --- geniza/corpus/models.py | 1 - 1 file changed, 1 deletion(-) diff --git a/geniza/corpus/models.py b/geniza/corpus/models.py index b6354e008..2c8dcf9d6 100644 --- a/geniza/corpus/models.py +++ b/geniza/corpus/models.py @@ -1273,7 +1273,6 @@ def index_data(self): for canvas in fn.content_text_canvases: # index plaintext only for regex transcription_texts_regex.append(canvas) - print(canvas) elif Footnote.DIGITAL_TRANSLATION in fn.doc_relation: content = fn.content_html_str if content: From 182d6e14f4f7a5add8dea125bfff8664fafa00ed Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Wed, 31 Jul 2024 16:27:38 -0400 Subject: [PATCH 10/26] Rm uneeded handling of multiline regex --- geniza/corpus/solr_queryset.py | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/geniza/corpus/solr_queryset.py b/geniza/corpus/solr_queryset.py index 7710346ed..54e610bf5 100644 --- a/geniza/corpus/solr_queryset.py +++ b/geniza/corpus/solr_queryset.py @@ -285,26 +285,16 @@ def get_regex_highlight(self, text): # found a match, truncate text down to just context around match # using word boundary as start, get <=150 characters of context before match before = split_text[0] - start_newline_regex = re.search(r"\b(.{1,150}$)", before, flags=re.DOTALL) - before = start_newline_regex.group(1) if start_newline_regex else before + start_boundary_regex = re.search(r"\b(.{1,150}$)", before, flags=re.DOTALL) + before = start_boundary_regex.group(1) if start_boundary_regex else before # add highlight to matching portion match = re.sub(pattern, lambda m: f"{m.group(1)}", split_text[1]) - # for multiline matches, highlight contents of each encountered li/p/h3 - line_regex = ( - r"^(|

    |

    )*((?!<.+>).+)(

  • |

    |)*$" - ) - match = re.sub( - line_regex, - lambda m: f"{m.group(1) or ''}{m.group(2)}{m.group(3) or ''}", - match, - flags=re.MULTILINE, - ) # get <=150 characters of context after match, using word boundary as end after = split_text[2] - end_newline_regex = re.search(r"^(.{1,150})\b", after, flags=re.DOTALL) - after = end_newline_regex.group(1) if end_newline_regex else after + end_boundary_regex = re.search(r"^(.{1,150})\b", after, flags=re.DOTALL) + after = end_boundary_regex.group(1) if end_boundary_regex else after # combine truncated context with highlighted match return before + match + after From d5ff23de6918d4d1878145ad500743df32354310 Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Wed, 31 Jul 2024 17:31:26 -0400 Subject: [PATCH 11/26] Generalize sort/filter logic in doc search views --- geniza/corpus/views.py | 89 ++++++++++++++++++------------------------ 1 file changed, 37 insertions(+), 52 deletions(-) diff --git a/geniza/corpus/views.py b/geniza/corpus/views.py index 26ae9bc63..5b7a0a4db 100644 --- a/geniza/corpus/views.py +++ b/geniza/corpus/views.py @@ -154,6 +154,39 @@ def get_form_kwargs(self): return kwargs + def apply_filters(self, documents, search_opts): + """Helper method to apply sort and filters to a document solr queryset, + made reusable for regex search""" + # order by sort option + if search_opts["sort"]: + documents = documents.order_by(self.get_solr_sort(search_opts["sort"])) + + # filter by type if specified + if search_opts["doctype"]: + typelist = literal_eval(search_opts["doctype"]) + quoted_typelist = ['"%s"' % doctype for doctype in typelist] + documents = documents.filter(type__in=quoted_typelist, tag="type") + + # image filter + if search_opts["has_image"] == True: + documents = documents.filter(has_image=True) + + # scholarship filters + if search_opts["has_transcription"] == True: + documents = documents.filter(has_digital_edition=True) + if search_opts["has_discussion"] == True: + documents = documents.filter(has_discussion=True) + if search_opts["has_translation"] == True: + documents = documents.filter(has_digital_translation=True) + if search_opts["docdate"]: + # date range filter; returns tuple of value or None for open-ended range + start, end = search_opts["docdate"] + documents = documents.filter( + document_date_dr="[%s TO %s]" % (start or "*", end or "*") + ) + + return documents + def get_queryset(self): """Perform requested search and return solr queryset""" # limit to documents with published status (i.e., no suppressed documents); @@ -225,32 +258,8 @@ def get_queryset(self): .also("score") ) # include relevance score in results - # order by sort option - documents = documents.order_by(self.get_solr_sort(search_opts["sort"])) - - # filter by type if specified - if search_opts["doctype"]: - typelist = literal_eval(search_opts["doctype"]) - quoted_typelist = ['"%s"' % doctype for doctype in typelist] - documents = documents.filter(type__in=quoted_typelist, tag="type") - - # image filter - if search_opts["has_image"] == True: - documents = documents.filter(has_image=True) - - # scholarship filters - if search_opts["has_transcription"] == True: - documents = documents.filter(has_digital_edition=True) - if search_opts["has_discussion"] == True: - documents = documents.filter(has_discussion=True) - if search_opts["has_translation"] == True: - documents = documents.filter(has_digital_translation=True) - if search_opts["docdate"]: - # date range filter; returns tuple of value or None for open-ended range - start, end = search_opts["docdate"] - documents = documents.filter( - document_date_dr="[%s TO %s]" % (start or "*", end or "*") - ) + # sort and apply filters + documents = self.apply_filters(documents, search_opts) self.queryset = documents @@ -328,32 +337,8 @@ def get_queryset(self): if search_opts["q"]: documents = documents.regex_search(search_opts["q"]) - # order by sort option - documents = documents.order_by(self.get_solr_sort(search_opts["sort"])) - - # filter by type if specified - if search_opts["doctype"]: - typelist = literal_eval(search_opts["doctype"]) - quoted_typelist = ['"%s"' % doctype for doctype in typelist] - documents = documents.filter(type__in=quoted_typelist, tag="type") - - # image filter - if search_opts["has_image"] == True: - documents = documents.filter(has_image=True) - - # scholarship filters - if search_opts["has_transcription"] == True: - documents = documents.filter(has_digital_edition=True) - if search_opts["has_discussion"] == True: - documents = documents.filter(has_discussion=True) - if search_opts["has_translation"] == True: - documents = documents.filter(has_digital_translation=True) - if search_opts["docdate"]: - # date range filter; returns tuple of value or None for open-ended range - start, end = search_opts["docdate"] - documents = documents.filter( - document_date_dr="[%s TO %s]" % (start or "*", end or "*") - ) + # sort and apply filters + documents = self.apply_filters(documents, search_opts) self.queryset = documents From 1c8aa0749e5c477d209794a828c6981f33b7c8d0 Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Wed, 31 Jul 2024 17:32:02 -0400 Subject: [PATCH 12/26] Add unit tests for document solr queryset regex --- .../corpus/tests/test_corpus_solrqueryset.py | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/geniza/corpus/tests/test_corpus_solrqueryset.py b/geniza/corpus/tests/test_corpus_solrqueryset.py index 74d2bbe98..90bf5bab3 100644 --- a/geniza/corpus/tests/test_corpus_solrqueryset.py +++ b/geniza/corpus/tests/test_corpus_solrqueryset.py @@ -298,3 +298,70 @@ def test_get_highlighting__exact_search(self): assert dqs.get_highlighting()["doc.1"]["transcription"][0] == clean_html( "exact match" ) + + def test_get_highlighting__regex(self): + dqs = DocumentSolrQuerySet() + dqs.raw_params = {"regex_query": "test"} + # if regex_query in raw params, should overwrite any normal matches with regex matches + with patch("geniza.corpus.solr_queryset.super") as mock_super: + mock_get_highlighting = mock_super.return_value.get_highlighting + test_highlight = {"document.1": {"transcription": ["match"]}} + mock_get_highlighting.return_value = test_highlight + with patch.object(dqs, "get_results") as mock_get_results: + mock_get_results.return_value = [ + {"id": "document.1", "transcription_regex": ["a test text"]} + ] + highlighting = dqs.get_highlighting() + assert highlighting != test_highlight + assert "match" not in highlighting["document.1"]["transcription"] + assert len(highlighting["document.1"]["transcription"]) == 1 + assert "test" in highlighting["document.1"]["transcription"][0] + + def test_regex_search(self): + dqs = DocumentSolrQuerySet() + with patch.object(dqs, "search") as mocksearch: + query = "six apartments" + dqs.regex_search(query) + # should surround with wildcards in order to match entire field, + # and with slashes for Lucene regex syntax + mocksearch.assert_called_with(f"transcription_regex:/.*{query}.*/") + mocksearch.return_value.raw_query_parameters.assert_called_with( + regex_query=query, + ) + + def test_get_regex_highlight(self): + dqs = DocumentSolrQuerySet() + dqs.raw_params = {"regex_query": "אלאחרף אן למא"} + # no match -> None + assert dqs.get_regex_highlight("test") == None + # use a bit of a real example, with > 300 characters, as a test + text = """Recto:\n בש רח נקול נחן אלשהוד [אלוא]צעין כטוטנא תחת הדה אלאחרף אן למא אן כאן \ +יום אלסבת אלסאדס מן שהר אב יהפך לשמחה שנת אתקו לשטרות בעיר קליוב הסמוכה לעיר המלוכה הס[מו]כה \ +לפסטאט מצרים דעל נילוס נהרה מותבה רשותא דאדונינו גאונינו שר שלום הלוי הגאון ראש ישיבת גאון יעקב \ +יהי שמו לעולם אנא חצרנא פי אלמוצע אלדי יצלו פיה ענד מוסי ולד אלאהוב וכאן תם חאצר אהל קליוב שצ \ +//ביצלו// פחצר תם מן קאל להם אעלמו באן יצחק אלסקלי ביגתהד פי עודתה אליכם פאן כונתו פי נפסכם \ +מן מקאמה ענדכם דון """ + highlight = dqs.get_regex_highlight(text) + + # should highlight the matched portion + assert "אלאחרף אן למא" in highlight + + # should shorten context on either side of match to <=150 characters + assert len(highlight) < len(text) + before_match = highlight.split("")[0] + assert len(before_match) <= 150 + after_match = highlight.split("")[1] + assert len(after_match) <= 150 + + # should support all regex syntax, such as . wildcard and + 1 or more characters + dqs.raw_params = {"regex_query": "אלאחרף.+למא"} + highlight = dqs.get_regex_highlight(text) + assert "אלאחרף אן למא" in highlight + + # reserved characters should require escape characters for correct results + dqs.raw_params = {"regex_query": "[אלוא]צעין"} + highlight = dqs.get_regex_highlight(text) + assert highlight is None + dqs.raw_params = {"regex_query": "\[אלוא\]צעין"} + highlight = dqs.get_regex_highlight(text) + assert "[אלוא]צעין" in highlight From 289ac994da0f6057068cace321475a81b52d70fc Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Thu, 1 Aug 2024 14:17:02 -0400 Subject: [PATCH 13/26] Implement design for regex search --- geniza/corpus/forms.py | 15 ++++++ .../templates/corpus/document_list.html | 2 + geniza/corpus/tests/test_corpus_views.py | 30 +++-------- geniza/corpus/urls.py | 5 -- geniza/corpus/views.py | 49 +++--------------- sitemedia/scss/components/_searchform.scss | 51 ++++++++++++++++++- 6 files changed, 81 insertions(+), 71 deletions(-) diff --git a/geniza/corpus/forms.py b/geniza/corpus/forms.py index 11bd56d7f..21ca77f06 100644 --- a/geniza/corpus/forms.py +++ b/geniza/corpus/forms.py @@ -196,6 +196,13 @@ class DocumentSearchForm(RangeForm): # Translators: label for end year when filtering by date range _("To year") + MODE_CHOICES = [ + # Translators: label for general search mode + ("general", _("General")), + # Translators: label for regex (regular expressions) search mode + ("regex", _("RegEx")), + ] + # NOTE these are not set by default! error_css_class = "error" required_css_class = "required" @@ -237,6 +244,14 @@ class DocumentSearchForm(RangeForm): label=_("Discussion"), ) + mode = forms.ChoiceField( + # Translators: label for "search mode" (general or regex) + label=_("Search mode"), + choices=MODE_CHOICES, + required=False, + widget=forms.RadioSelect, + ) + # mapping of solr facet fields to form input solr_facet_fields = { "type": "doctype", diff --git a/geniza/corpus/templates/corpus/document_list.html b/geniza/corpus/templates/corpus/document_list.html index ccee49427..2800ae105 100644 --- a/geniza/corpus/templates/corpus/document_list.html +++ b/geniza/corpus/templates/corpus/document_list.html @@ -8,6 +8,8 @@

    {{ page_title }}

    + {{ form.mode.label }} + {% render_field form.mode data-action="change->search#update" %} {% render_field form.q data-search-target="query" data-action="input->search#autoUpdateSort change->search#update" %} {# Translators: Search submit button #} diff --git a/geniza/corpus/tests/test_corpus_views.py b/geniza/corpus/tests/test_corpus_views.py index 5c380ced9..bfa16d76e 100644 --- a/geniza/corpus/tests/test_corpus_views.py +++ b/geniza/corpus/tests/test_corpus_views.py @@ -391,50 +391,36 @@ def test_get_form_kwargs(self): # no params docsearch_view.request.GET = {} assert docsearch_view.get_form_kwargs() == { - "initial": { - "sort": "random", - }, + "initial": {"mode": "general", "sort": "random"}, "prefix": None, - "data": {"sort": "random"}, + "data": {"mode": "general", "sort": "random"}, "range_minmax": {}, } # keyword search param docsearch_view.request.GET = {"q": "contract"} assert docsearch_view.get_form_kwargs() == { - "initial": {"sort": "random"}, + "initial": {"mode": "general", "sort": "random"}, "prefix": None, - "data": { - "q": "contract", - "sort": "relevance", - }, + "data": {"mode": "general", "q": "contract", "sort": "relevance"}, "range_minmax": {}, } # sort search param docsearch_view.request.GET = {"sort": "scholarship_desc"} assert docsearch_view.get_form_kwargs() == { - "initial": { - "sort": "random", - }, + "initial": {"mode": "general", "sort": "random"}, "prefix": None, - "data": { - "sort": "scholarship_desc", - }, + "data": {"mode": "general", "sort": "scholarship_desc"}, "range_minmax": {}, } # keyword and sort search params docsearch_view.request.GET = {"q": "contract", "sort": "scholarship_desc"} assert docsearch_view.get_form_kwargs() == { - "initial": { - "sort": "random", - }, + "initial": {"mode": "general", "sort": "random"}, "prefix": None, - "data": { - "q": "contract", - "sort": "scholarship_desc", - }, + "data": {"mode": "general", "q": "contract", "sort": "scholarship_desc"}, "range_minmax": {}, } diff --git a/geniza/corpus/urls.py b/geniza/corpus/urls.py index e8f9c4dbc..81633cef9 100644 --- a/geniza/corpus/urls.py +++ b/geniza/corpus/urls.py @@ -8,11 +8,6 @@ path( "documents/", corpus_views.DocumentSearchView.as_view(), name="document-search" ), - path( - "documents-regex/", - corpus_views.DocumentRegexSearchView.as_view(), - name="document-regex-search", - ), path( "documents//", corpus_views.DocumentDetailView.as_view(), diff --git a/geniza/corpus/views.py b/geniza/corpus/views.py index a2a917250..4f6ca4074 100644 --- a/geniza/corpus/views.py +++ b/geniza/corpus/views.py @@ -82,7 +82,7 @@ class DocumentSearchView( # Translators: description of document search page, for search engines page_description = _("Search and browse Geniza documents.") paginate_by = 50 - initial = {"sort": "random"} + initial = {"sort": "random", "mode": "general"} # NOTE: does not filter on status, since changing status could modify the page solr_lastmodified_filters = {"item_type_s": "document"} applied_filter_labels = [] @@ -261,7 +261,10 @@ def get_queryset(self): else: search_opts = form.cleaned_data - if search_opts["q"]: + if search_opts["q"] and search_opts["mode"] == "regex": + documents = documents.regex_search(search_opts["q"]) + + elif search_opts["q"]: # NOTE: using requireFieldMatch so that field-specific search # terms will NOT be used for highlighting text matches # (unless they are in the appropriate field) @@ -340,8 +343,7 @@ def get_context_data(self, **kwargs): highlights = paged_result.get_highlighting() if paged_result.count() else {} facet_dict = self.queryset.get_facets() # populate choices for facet filter fields on the form - if not isinstance(facet_dict, dict): - context_data["form"].set_choices_from_facets(facet_dict.facet_fields) + context_data["form"].set_choices_from_facets(facet_dict.facet_fields) context_data.update( { "highlighting": highlights, @@ -357,45 +359,6 @@ def get_context_data(self, **kwargs): return context_data -class DocumentRegexSearchView(PermissionRequiredMixin, DocumentSearchView): - permission_required = ("corpus.change_document",) - - def get_queryset(self): - """Perform requested search and return solr queryset""" - # limit to documents with published status (i.e., no suppressed documents); - # get counts of facets, excluding type filter - documents = ( - DocumentSolrQuerySet() - .filter(status=Document.PUBLIC_LABEL) - .facet( - "has_image", - "has_digital_edition", - "has_digital_translation", - "has_discussion", - ) - .facet_field("type", exclude="type", sort="value") - ) - - form = self.get_form() - # return empty queryset if not valid - if not form.is_valid(): - documents = documents.none() - - # when form is valid, check for search term and filter queryset - else: - search_opts = form.cleaned_data - - if search_opts["q"]: - documents = documents.regex_search(search_opts["q"]) - - # sort and apply filters - documents = self.apply_filters(documents, search_opts, form) - - self.queryset = documents - - return documents - - class DocumentDetailBase(SolrLastModifiedMixin): """View mixin to handle lastmodified and redirects for documents with old PGPIDs. Overrides get request in the case of a 404, looking for any records diff --git a/sitemedia/scss/components/_searchform.scss b/sitemedia/scss/components/_searchform.scss index 0a536fbc2..5f0710795 100644 --- a/sitemedia/scss/components/_searchform.scss +++ b/sitemedia/scss/components/_searchform.scss @@ -15,7 +15,54 @@ main.search form { // search query box and button fieldset#query { display: flex; + align-items: center; margin-bottom: 1.5rem; + // mode switch (hidden on mobile) + span.fieldname { + @include typography.headline-3; + display: none; + @include breakpoints.for-tablet-landscape-up { + display: block; + white-space: nowrap; + } + } + ul#id_mode { + display: none; + @include breakpoints.for-tablet-landscape-up { + display: flex; + flex-flow: row nowrap; + background-color: var(--background-light); + border: 1px solid var(--background-gray); + border-radius: 50px; + align-items: center; + margin: 0 3.25rem 0 1.5rem; + input { + @include a11y.sr-only; + } + label { + display: flex; + flex-flow: row nowrap; + align-items: center; + padding: 0 1rem; + height: 2.5rem; + border-radius: 50px; + cursor: pointer; + border: 2px solid transparent; + transition: 0.15s border-color ease-in-out; + &:hover { + border-color: var(--disabled); + } + &:has(input:checked) { + @include typography.body-bold; + background-color: var(--on-primary); + border-color: var(--secondary); + &:hover { + border-color: var(--primary); + } + } + } + } + } // search box input[type="search"] { flex-basis: 100%; @@ -23,6 +70,8 @@ main.search form { border-radius: 5px; border-top-right-radius: 0; border-bottom-right-radius: 0; + border: 1px solid var(--background-gray); + border-right: none; height: 3rem; padding: 0 1rem; @include typography.body; @@ -48,7 +97,7 @@ main.search form { color: var(--on-secondary); @include breakpoints.for-tablet-landscape-up { height: 2.5rem; - width: 2.5rem; + min-width: 2.5rem; } // Magnifying glass icon &::after { From 828b2fbc69deaaf75294a8fc9b9fb6b325a7a30c Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Thu, 1 Aug 2024 14:52:10 -0400 Subject: [PATCH 14/26] Add unit test for regex call in get_queryset --- geniza/corpus/tests/test_corpus_views.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/geniza/corpus/tests/test_corpus_views.py b/geniza/corpus/tests/test_corpus_views.py index bfa16d76e..79dbfbc14 100644 --- a/geniza/corpus/tests/test_corpus_views.py +++ b/geniza/corpus/tests/test_corpus_views.py @@ -429,7 +429,8 @@ def test_get_queryset(self, mock_solr_queryset): with patch( "geniza.corpus.views.DocumentSolrQuerySet", new=self.mock_solr_queryset( - DocumentSolrQuerySet, extra_methods=["admin_search", "keyword_search"] + DocumentSolrQuerySet, + extra_methods=["admin_search", "keyword_search", "regex_search"], ), ) as mock_queryset_cls: docsearch_view = DocumentSearchView() @@ -521,6 +522,17 @@ def test_get_queryset(self, mock_solr_queryset): args = mock_sqs.order_by.call_args[0] assert args[0].startswith("random_") + # regex search param + mock_sqs.reset_mock() + docsearch_view.request = Mock() + docsearch_view.request.GET = {"q": "six apartments", "mode": "regex"} + docsearch_view.get_queryset() + mock_sqs = mock_queryset_cls.return_value + mock_sqs.regex_search.assert_called_with("six apartments") + mock_sqs.keyword_search.assert_not_called() + # should not highlight with parasolr + mock_sqs.regex_search.return_value.highlight.assert_not_called() + @pytest.mark.usefixtures("mock_solr_queryset") def test_get_range_stats(self, mock_solr_queryset): with patch( From 3b6be2a52783f3c259702148b08e14e6af0704db Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Thu, 1 Aug 2024 14:57:46 -0400 Subject: [PATCH 15/26] Revert unneeded helper method, improve docs for regex --- geniza/corpus/solr_queryset.py | 2 + geniza/corpus/views.py | 115 ++++++++++++++++----------------- geniza/footnotes/models.py | 3 +- 3 files changed, 58 insertions(+), 62 deletions(-) diff --git a/geniza/corpus/solr_queryset.py b/geniza/corpus/solr_queryset.py index 4049630eb..7a808778b 100644 --- a/geniza/corpus/solr_queryset.py +++ b/geniza/corpus/solr_queryset.py @@ -327,8 +327,10 @@ def get_highlighting(self): if is_regex_search: # highlight regex results manually due to solr limitation highlights = {} + # highlighting takes place *after* solr, so use get_results() for doc in self.get_results(): highlights[doc["id"]] = {"transcription": []} + # this field is split by block-level annotation/group for block in doc["transcription_regex"]: highlight_snippet = self.get_regex_highlight(block) if highlight_snippet: diff --git a/geniza/corpus/views.py b/geniza/corpus/views.py index 4f6ca4074..f5208e26e 100644 --- a/geniza/corpus/views.py +++ b/geniza/corpus/views.py @@ -155,65 +155,6 @@ def get_form_kwargs(self): return kwargs - def apply_filters(self, documents, search_opts, form): - """Helper method to apply sort and filters to a document solr queryset, - made reusable for regex search""" - # order by sort option - documents = documents.order_by(self.get_solr_sort(search_opts["sort"])) - - # filter by type if specified - if search_opts["doctype"]: - typelist = literal_eval(search_opts["doctype"]) - quoted_typelist = ['"%s"' % doctype for doctype in typelist] - documents = documents.filter(type__in=quoted_typelist, tag="type") - self.applied_filter_labels += self.get_applied_filter_labels( - form, "doctype", typelist - ) - - # image filter - if search_opts["has_image"] == True: - documents = documents.filter(has_image=True) - self.applied_filter_labels.append( - self.get_boolfield_label(form, "has_image") - ) - - # scholarship filters - if search_opts["has_transcription"] == True: - documents = documents.filter(has_digital_edition=True) - self.applied_filter_labels.append( - self.get_boolfield_label(form, "has_transcription") - ) - if search_opts["has_discussion"] == True: - documents = documents.filter(has_discussion=True) - self.applied_filter_labels.append( - self.get_boolfield_label(form, "has_discussion") - ) - if search_opts["has_translation"] == True: - documents = documents.filter(has_digital_translation=True) - self.applied_filter_labels.append( - self.get_boolfield_label(form, "has_translation") - ) - if search_opts["docdate"]: - # date range filter; returns tuple of value or None for open-ended range - start, end = search_opts["docdate"] - documents = documents.filter( - document_date_dr="[%s TO %s]" % (start or "*", end or "*") - ) - label = "%s–%s" % (start, end) - if start and not end: - label = _("After %s") % start - elif end and not start: - label = _("Before %s") % end - self.applied_filter_labels += [ - { - "field": "docdate", - "value": search_opts["docdate"], - "label": label, - } - ] - - return documents - def get_applied_filter_labels(self, form, field, filters): """return a list of objects with field/value pairs, and translated labels, one for each applied filter""" @@ -262,6 +203,7 @@ def get_queryset(self): search_opts = form.cleaned_data if search_opts["q"] and search_opts["mode"] == "regex": + # use regex search if "mode" is "regex" documents = documents.regex_search(search_opts["q"]) elif search_opts["q"]: @@ -311,8 +253,59 @@ def get_queryset(self): .also("score") ) # include relevance score in results - # sort and apply filters - documents = self.apply_filters(documents, search_opts, form) + # order by sort option + documents = documents.order_by(self.get_solr_sort(search_opts["sort"])) + + # filter by type if specified + if search_opts["doctype"]: + typelist = literal_eval(search_opts["doctype"]) + quoted_typelist = ['"%s"' % doctype for doctype in typelist] + documents = documents.filter(type__in=quoted_typelist, tag="type") + self.applied_filter_labels += self.get_applied_filter_labels( + form, "doctype", typelist + ) + + # image filter + if search_opts["has_image"] == True: + documents = documents.filter(has_image=True) + self.applied_filter_labels.append( + self.get_boolfield_label(form, "has_image") + ) + + # scholarship filters + if search_opts["has_transcription"] == True: + documents = documents.filter(has_digital_edition=True) + self.applied_filter_labels.append( + self.get_boolfield_label(form, "has_transcription") + ) + if search_opts["has_discussion"] == True: + documents = documents.filter(has_discussion=True) + self.applied_filter_labels.append( + self.get_boolfield_label(form, "has_discussion") + ) + if search_opts["has_translation"] == True: + documents = documents.filter(has_digital_translation=True) + self.applied_filter_labels.append( + self.get_boolfield_label(form, "has_translation") + ) + if search_opts["docdate"]: + # date range filter; returns tuple of value or None for open-ended range + start, end = search_opts["docdate"] + documents = documents.filter( + document_date_dr="[%s TO %s]" % (start or "*", end or "*") + ) + label = "%s–%s" % (start, end) + if start and not end: + label = _("After %s") % start + elif end and not start: + label = _("Before %s") % end + self.applied_filter_labels += [ + { + "field": "docdate", + "value": search_opts["docdate"], + "label": label, + } + ] self.queryset = documents diff --git a/geniza/footnotes/models.py b/geniza/footnotes/models.py index 5dc2de50d..27df09606 100644 --- a/geniza/footnotes/models.py +++ b/geniza/footnotes/models.py @@ -635,13 +635,14 @@ def content_html_str(self): @cached_property def content_text_canvases(self): - "content as a list of strings, one per canvas" + "content as a list of strings, one per canvas, used for regex search index" content_html = self.content_html if content_html: return [ # convert each annotation from html to plaintext "\n".join( [ + # remove newlines so that multiline annotations can be searched BeautifulSoup(a, features="lxml").get_text().replace("\n", " ") for a in canvas_annos ] From 5f33ba108813f5e1d7c97ca46459063d53273ef2 Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Thu, 1 Aug 2024 16:33:16 -0400 Subject: [PATCH 16/26] Add help text per design, plus deploy notes (#1631) --- DEPLOYNOTES.md | 5 + .../templates/corpus/document_list.html | 15 +++ .../snippets/document_search_helptext.html | 53 +++++++++ sitemedia/js/controllers/search_controller.js | 10 ++ sitemedia/scss/components/_results.scss | 5 + sitemedia/scss/components/_searchform.scss | 104 +++++++++++++++++- 6 files changed, 191 insertions(+), 1 deletion(-) create mode 100644 geniza/corpus/templates/corpus/snippets/document_search_helptext.html diff --git a/DEPLOYNOTES.md b/DEPLOYNOTES.md index b007fc9f0..e586c9ecb 100644 --- a/DEPLOYNOTES.md +++ b/DEPLOYNOTES.md @@ -1,5 +1,10 @@ # Deploy Notes +## 4.18 + +- Solr configuration has changed. Ensure Solr configset has been updated + and then reindex all content: `python manage.py index` + ## 4.17 - Solr configuration has changed. Ensure Solr configset has been updated diff --git a/geniza/corpus/templates/corpus/document_list.html b/geniza/corpus/templates/corpus/document_list.html index 2800ae105..6cabae8d5 100644 --- a/geniza/corpus/templates/corpus/document_list.html +++ b/geniza/corpus/templates/corpus/document_list.html @@ -9,6 +9,21 @@

    {{ page_title }}

    {{ form.mode.label }} + + {# Translators: heading for search mode help text #} +

    + {% translate "How to Search" %} + +

    + {% include "corpus/snippets/document_search_helptext.html" %} +
    + {% render_field form.mode data-action="change->search#update" %} {% render_field form.q data-search-target="query" data-action="input->search#autoUpdateSort change->search#update" %} diff --git a/geniza/corpus/templates/corpus/snippets/document_search_helptext.html b/geniza/corpus/templates/corpus/snippets/document_search_helptext.html new file mode 100644 index 000000000..68a98abe2 --- /dev/null +++ b/geniza/corpus/templates/corpus/snippets/document_search_helptext.html @@ -0,0 +1,53 @@ +{% load i18n wagtailcore_tags %} + +{# Translators: heading for general search mode help text #} +

    {% translate "General Search" %}

    +

    + {# Translators: general search help text #} + {% blocktranslate %} + Use keywords or phrases in any language to return matching or similar + results across all fields. Arabic script searches will return both + Arabic and Judaeo-Arabic transcription content. + {% endblocktranslate %} +

    +{# Translators: heading for regular expressions search mode help text #} +

    {% translate "Regular Expression Search" %}

    +

    + {% slugurl 'how-to-search' as howto_url %} + {# Translators: regular expressions search mode help text #} + {% blocktranslate %} + Use Hebrew or Arabic script to find precise matches in the + transcriptions. See + How to Search + page for advanced use cases. + {% endblocktranslate %} +

    + +{# Translators: heading for regular expressions search cheat sheet #} +

    {% translate "Cheat sheet:" %}

    +
      +
    • + {# Translators: regular expression tip 1 #} + {% blocktranslate %} + If you're looking for a word with one missing letter, use a + period. Two missing letters, use two periods or {2}. + Increase the number in the curly brackets to increase the number of + characters, or insert a range with a comma in between, ex. + {0,5}. + {% endblocktranslate %} +
    • +
    • + {# Translators: regular expression tip 2 #} + {% blocktranslate %} + If you don't know how many characters are missing, use + .*. + {% endblocktranslate %} +
    • +
    • + {# Translators: regular expression tip 3 #} + {% blocktranslate %} + If you know which characters you want, use square brackets to find + multiple spellings, ex. [יו] for yud or vav. + {% endblocktranslate %} +
    • +
    \ No newline at end of file diff --git a/sitemedia/js/controllers/search_controller.js b/sitemedia/js/controllers/search_controller.js index 0be630aa8..23750cec8 100644 --- a/sitemedia/js/controllers/search_controller.js +++ b/sitemedia/js/controllers/search_controller.js @@ -12,6 +12,7 @@ export default class extends Controller { "filtersButton", "doctypeFilter", "dropdownDetails", + "helpDialog", ]; static debounces = ["update"]; @@ -229,4 +230,13 @@ export default class extends Controller { e.preventDefault(); } } + + toggleHelpDialog() { + // open or close the help dialog modal + if (this.helpDialogTarget.open) { + this.helpDialogTarget.close(); + } else { + this.helpDialogTarget.showModal(); + } + } } diff --git a/sitemedia/scss/components/_results.scss b/sitemedia/scss/components/_results.scss index 11ead09fc..a1681ce03 100644 --- a/sitemedia/scss/components/_results.scss +++ b/sitemedia/scss/components/_results.scss @@ -603,6 +603,11 @@ html[dir="rtl"] .search-result { font-size: typography.$text-size-lg; } } + // relevance score if enabled + .score { + right: auto; + left: 0; + } } // Hebrew variant diff --git a/sitemedia/scss/components/_searchform.scss b/sitemedia/scss/components/_searchform.scss index 5f0710795..b60a963fd 100644 --- a/sitemedia/scss/components/_searchform.scss +++ b/sitemedia/scss/components/_searchform.scss @@ -17,7 +17,7 @@ main.search form { display: flex; align-items: center; margin-bottom: 1.5rem; - // mode switch (hidden on mobile) + // search mode switch label (hidden on mobile) span.fieldname { @include typography.headline-3; display: none; @@ -26,6 +26,92 @@ main.search form { white-space: nowrap; } } + // search mode help (hidden on mobile) + button#search-help { + display: none; + @include breakpoints.for-tablet-landscape-up { + display: flex; + cursor: pointer; + border: none; + background: transparent; + color: var(--on-background); + padding: 0; + margin-left: 0.5rem; + &::before { + @include typography.icon-button-md; + font-size: typography.$text-size-2xl; + content: "\f1e0"; // phosphor info icon + } + } + } + dialog { + background-color: var(--background); + color: var(--on-background); + border: none; + padding: 1.5rem; + box-shadow: 0px 4px 4px 0px #00000040; + h2 { + display: flex; + flex-flow: row nowrap; + align-items: center; + justify-content: space-between; + margin: 0; + span { + display: flex; + align-items: center; + gap: 1rem; + } + span::before { + @include typography.icon-button-md; + font-weight: normal; + font-size: typography.$text-size-4xl; + content: "\f1e0"; // phosphor info icon + } + button { + display: flex; + cursor: pointer; + border: none; + background: transparent; + padding: 0; + &::before { + @include typography.icon-button-md; + font-size: typography.$text-size-4xl; + content: "\f36d"; // phosphor X icon + } + } + } + a { + font-weight: 600; + } + h3 { + font-size: typography.$text-size-lg; + padding-top: 1.5rem; + margin-top: 1.5rem; + margin-bottom: 0.5rem; + border-top: 1px solid var(--background-light); + } + p, + li, + h4 { + font-size: typography.$text-size-md; + } + h4 { + margin-top: 1.5rem; + } + ul { + list-style: disc; + li { + margin-left: 1.5rem; + } + } + code { + background-color: var(--background-light); + border-radius: 3px; + font-family: courier, monospace; + padding: 0 3px; + } + } + // search mode switch buttons (hidden on mobile) ul#id_mode { display: none; @include breakpoints.for-tablet-landscape-up { @@ -60,6 +146,9 @@ main.search form { border-color: var(--primary); } } + &:has(*:focus-visible) { + outline: 2px solid var(--button-focus); + } } } } @@ -335,6 +424,8 @@ html[dir="rtl"] main.search form { border-radius: 5px; border-top-left-radius: 0; border-bottom-left-radius: 0; + border-left: none; + border-right: 1px solid var(--background-gray); } button[type="submit"] { border-radius: 5px; @@ -343,6 +434,17 @@ html[dir="rtl"] main.search form { margin-left: 0; margin-right: 0; } + button#search-help { + margin-left: 0; + margin-right: 0.5rem; + } + dialog ul li { + margin-left: 0; + margin-right: 1.5rem; + } + ul#id_mode { + margin: 0 1.5rem 0 3.25rem; + } } } From 0535f10696c0b4de099989925ca91fa2d5dad2f4 Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Mon, 26 Aug 2024 11:10:20 -0400 Subject: [PATCH 17/26] Clairfy naming of transcription_texts_plaintext --- geniza/corpus/models.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/geniza/corpus/models.py b/geniza/corpus/models.py index d1933fecd..ac7e1bdeb 100644 --- a/geniza/corpus/models.py +++ b/geniza/corpus/models.py @@ -1260,7 +1260,7 @@ def index_data(self): counts = defaultdict(int) # collect transcription and translation texts for indexing transcription_texts = [] - transcription_texts_regex = [] + transcription_texts_plaintext = [] translation_texts = [] # keep track of translation language for RTL/LTR display translation_langcode = "" @@ -1276,8 +1276,8 @@ def index_data(self): if content: transcription_texts.append(Footnote.explicit_line_numbers(content)) for canvas in fn.content_text_canvases: - # index plaintext only for regex - transcription_texts_regex.append(canvas) + # index plaintext only, per-canvas, for regex + transcription_texts_plaintext.append(canvas) elif Footnote.DIGITAL_TRANSLATION in fn.doc_relation: content = fn.content_html_str if content: @@ -1317,7 +1317,8 @@ def index_data(self): "scholarship_t": [fn.display() for fn in footnotes], # transcription content as html "text_transcription": transcription_texts, - "transcription_regex": transcription_texts_regex, + # transcription content as plaintext + "transcription_regex": transcription_texts_plaintext, "translation_language_code_s": translation_langcode, "translation_language_direction_s": translation_langdir, # translation content as html From bd6ec7f3884c4b3893727d3bfd4c8a491a82e947 Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Mon, 26 Aug 2024 13:10:38 -0400 Subject: [PATCH 18/26] Improve comments and docstrings --- geniza/corpus/solr_queryset.py | 3 ++- geniza/footnotes/models.py | 3 ++- solr_conf/conf/managed-schema | 2 +- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/geniza/corpus/solr_queryset.py b/geniza/corpus/solr_queryset.py index 7a808778b..60e4c22bd 100644 --- a/geniza/corpus/solr_queryset.py +++ b/geniza/corpus/solr_queryset.py @@ -228,13 +228,14 @@ def keyword_search(self, search_term): def regex_search(self, search_term): """Build a Lucene query for searching with regex.""" - # store original regex query + # store unmodified regex query for post-search highlighting by python original_regex = search_term # surround passed query with wildcards to allow non-anchored matches, # and slashes so that it is interpreted as regex by Lucene search_term = f"/.*{search_term}.*/" # match in the non-analyzed transcription_regex field search = self.search(f"transcription_regex:{search_term}").raw_query_parameters( + # store unmodified query in solr so it can be accessed in get_highlighting regex_query=original_regex ) return search diff --git a/geniza/footnotes/models.py b/geniza/footnotes/models.py index 27df09606..39f6300c2 100644 --- a/geniza/footnotes/models.py +++ b/geniza/footnotes/models.py @@ -635,7 +635,8 @@ def content_html_str(self): @cached_property def content_text_canvases(self): - "content as a list of strings, one per canvas, used for regex search index" + """content as a list of strings, one per canvas""" + # used for regex search indexing content_html = self.content_html if content_html: return [ diff --git a/solr_conf/conf/managed-schema b/solr_conf/conf/managed-schema index 29a6d4317..8b3334304 100644 --- a/solr_conf/conf/managed-schema +++ b/solr_conf/conf/managed-schema @@ -350,7 +350,7 @@ - + From e777acc1af188436e5cd29aa63bb9128ec2b03e9 Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Mon, 26 Aug 2024 14:03:16 -0400 Subject: [PATCH 19/26] Use dict comprehension for highlighted regex results --- geniza/corpus/solr_queryset.py | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/geniza/corpus/solr_queryset.py b/geniza/corpus/solr_queryset.py index 60e4c22bd..a229b7995 100644 --- a/geniza/corpus/solr_queryset.py +++ b/geniza/corpus/solr_queryset.py @@ -330,12 +330,19 @@ def get_highlighting(self): highlights = {} # highlighting takes place *after* solr, so use get_results() for doc in self.get_results(): - highlights[doc["id"]] = {"transcription": []} - # this field is split by block-level annotation/group - for block in doc["transcription_regex"]: - highlight_snippet = self.get_regex_highlight(block) - if highlight_snippet: - highlights[doc["id"]]["transcription"].append(highlight_snippet) + # highlight per document, keyed on id as expected in results + highlights[doc["id"]] = { + "transcription": [ + highlighted_block + # this field is split by block-level annotation/group + for highlighted_block in ( + self.get_regex_highlight(block) + for block in doc["transcription_regex"] + ) + # only include a block if it actually has highlights + if highlighted_block + ] + } is_exact_search = "hl_query" in self.raw_params for doc in highlights.keys(): From 3978c37107b99ecb8d3a154f9558bdbed97a5a58 Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Mon, 26 Aug 2024 17:05:07 -0400 Subject: [PATCH 20/26] Add validation for regex to prevent Lucene errors --- geniza/corpus/forms.py | 68 +++++++++++++++++++++++++++++++ geniza/corpus/solr_queryset.py | 4 +- geniza/corpus/tests/test_forms.py | 57 ++++++++++++++++++++++++++ 3 files changed, 128 insertions(+), 1 deletion(-) diff --git a/geniza/corpus/forms.py b/geniza/corpus/forms.py index 21ca77f06..d29a21e1c 100644 --- a/geniza/corpus/forms.py +++ b/geniza/corpus/forms.py @@ -1,3 +1,5 @@ +import re + from dal import autocomplete from django import forms from django.contrib.admin.widgets import RelatedFieldWidgetWrapper @@ -327,6 +329,72 @@ def clean(self): self.add_error( "q", _("Relevance sort is not available without a keyword search term.") ) + # additional validation for regex mode due to some queries that cause Lucene errors + mode = cleaned_data.get("mode") + if mode == "regex": + # reused text about needing an escape character + needs_escape = ( + lambda char: f"If you are searching for the character {char} in a transcription, escape it with \ by writing \{char} instead." + ) + # see error messages for explanations of each regex here + if re.search(r"((? queries + ["", " queries + ["\", "\ Date: Mon, 26 Aug 2024 17:08:54 -0400 Subject: [PATCH 21/26] Fix python escape sequences in regex tests --- geniza/corpus/tests/test_forms.py | 29 ++++++++++------------------- 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/geniza/corpus/tests/test_forms.py b/geniza/corpus/tests/test_forms.py index edfbb6c0c..d41f83eef 100644 --- a/geniza/corpus/tests/test_forms.py +++ b/geniza/corpus/tests/test_forms.py @@ -182,7 +182,7 @@ def test_clean__regex(self): # malformed <> queries ["", " queries - ["\", "\", "\\ Date: Tue, 27 Aug 2024 13:28:18 -0400 Subject: [PATCH 22/26] Use search_qs to get original regex query for highlighting --- geniza/corpus/solr_queryset.py | 18 ++++++++++-------- .../corpus/tests/test_corpus_solrqueryset.py | 13 +++++-------- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/geniza/corpus/solr_queryset.py b/geniza/corpus/solr_queryset.py index 05da85180..f7f286b6e 100644 --- a/geniza/corpus/solr_queryset.py +++ b/geniza/corpus/solr_queryset.py @@ -230,16 +230,11 @@ def regex_search(self, search_term): """Build a Lucene query for searching with regular expressions. NOTE: this function may cause Lucene errors if input is not validated beforehand. """ - # store unmodified regex query for post-search highlighting by python - original_regex = search_term # surround passed query with wildcards to allow non-anchored matches, # and slashes so that it is interpreted as regex by Lucene search_term = f"/.*{search_term}.*/" # match in the non-analyzed transcription_regex field - search = self.search(f"transcription_regex:{search_term}").raw_query_parameters( - # store unmodified query in solr so it can be accessed in get_highlighting - regex_query=original_regex - ) + search = self.search(f"transcription_regex:{search_term}") return search def related_to(self, document): @@ -298,7 +293,14 @@ def get_result_document(self, doc): def get_regex_highlight(self, text): """Helper method to manually highlight and truncate a snippet for regex matches (automatic highlight unavailable due to solr regex search limitations)""" - pattern = f"({self.raw_params['regex_query']})" + # remove solr field name and lucene-required "match all" logic to get original query + regex_query = ( + self.search_qs[0] + .replace("transcription_regex:/.*", "") + .rsplit(".*/", maxsplit=1)[0] + ) + pattern = f"({regex_query})" + print(pattern) # attempt split on first regex match split_text = re.split(pattern, text, maxsplit=1, flags=re.DOTALL) if len(split_text) > 1: @@ -326,7 +328,7 @@ def get_highlighting(self): """highlight snippets within transcription/translation html may result in invalid tags that will render strangely; clean up the html before returning""" highlights = super().get_highlighting() - is_regex_search = "regex_query" in self.raw_params + is_regex_search = any("transcription_regex" in q for q in self.search_qs) if is_regex_search: # highlight regex results manually due to solr limitation highlights = {} diff --git a/geniza/corpus/tests/test_corpus_solrqueryset.py b/geniza/corpus/tests/test_corpus_solrqueryset.py index 49a57e1ed..b5c458ff1 100644 --- a/geniza/corpus/tests/test_corpus_solrqueryset.py +++ b/geniza/corpus/tests/test_corpus_solrqueryset.py @@ -327,7 +327,7 @@ def test_get_highlighting__old_shelfmark(self): def test_get_highlighting__regex(self): dqs = DocumentSolrQuerySet() - dqs.raw_params = {"regex_query": "test"} + dqs.search_qs = ["transcription_regex:/.*test.*/"] # if regex_query in raw params, should overwrite any normal matches with regex matches with patch("geniza.corpus.solr_queryset.super") as mock_super: mock_get_highlighting = mock_super.return_value.get_highlighting @@ -351,13 +351,10 @@ def test_regex_search(self): # should surround with wildcards in order to match entire field, # and with slashes for Lucene regex syntax mocksearch.assert_called_with(f"transcription_regex:/.*{query}.*/") - mocksearch.return_value.raw_query_parameters.assert_called_with( - regex_query=query, - ) def test_get_regex_highlight(self): dqs = DocumentSolrQuerySet() - dqs.raw_params = {"regex_query": "אלאחרף אן למא"} + dqs.search_qs = ["transcription_regex:/.*אלאחרף אן למא.*/"] # no match -> None assert dqs.get_regex_highlight("test") == None # use a bit of a real example, with > 300 characters, as a test @@ -380,14 +377,14 @@ def test_get_regex_highlight(self): assert len(after_match) <= 150 # should support all regex syntax, such as . wildcard and + 1 or more characters - dqs.raw_params = {"regex_query": "אלאחרף.+למא"} + dqs.search_qs = ["transcription_regex:/.*אלאחרף.+למא.*/"] highlight = dqs.get_regex_highlight(text) assert "אלאחרף אן למא" in highlight # reserved characters should require escape characters for correct results - dqs.raw_params = {"regex_query": "[אלוא]צעין"} + dqs.search_qs = ["transcription_regex:/.*[אלוא]צעין.*/"] highlight = dqs.get_regex_highlight(text) assert highlight is None - dqs.raw_params = {"regex_query": "\[אלוא\]צעין"} + dqs.search_qs = ["transcription_regex:/.*\[אלוא\]צעין.*/"] highlight = dqs.get_regex_highlight(text) assert "[אלוא]צעין" in highlight From 7733a0643f0218c327afa4bf66dd207a89742ace Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Tue, 27 Aug 2024 16:24:10 -0400 Subject: [PATCH 23/26] Implement improved regex for highlighting Co-authored-by: Rebecca Sutton Koeser --- geniza/corpus/solr_queryset.py | 36 +++++++------------ .../corpus/tests/test_corpus_solrqueryset.py | 11 ++++-- 2 files changed, 20 insertions(+), 27 deletions(-) diff --git a/geniza/corpus/solr_queryset.py b/geniza/corpus/solr_queryset.py index f7f286b6e..6fd0f2818 100644 --- a/geniza/corpus/solr_queryset.py +++ b/geniza/corpus/solr_queryset.py @@ -299,30 +299,18 @@ def get_regex_highlight(self, text): .replace("transcription_regex:/.*", "") .rsplit(".*/", maxsplit=1)[0] ) - pattern = f"({regex_query})" - print(pattern) - # attempt split on first regex match - split_text = re.split(pattern, text, maxsplit=1, flags=re.DOTALL) - if len(split_text) > 1: - # found a match, truncate text down to just context around match - # using word boundary as start, get <=150 characters of context before match - before = split_text[0] - start_boundary_regex = re.search(r"\b(.{1,150}$)", before, flags=re.DOTALL) - before = start_boundary_regex.group(1) if start_boundary_regex else before - - # add highlight to matching portion - match = re.sub(pattern, lambda m: f"{m.group(1)}", split_text[1]) - - # get <=150 characters of context after match, using word boundary as end - after = split_text[2] - end_boundary_regex = re.search(r"^(.{1,150})\b", after, flags=re.DOTALL) - after = end_boundary_regex.group(1) if end_boundary_regex else after - - # combine truncated context with highlighted match - return before + match + after - else: - # no match = no highlight - return None + # get ~150 characters of context plus a word on either side of the matched portion + pattern = r"(\b\w+.{0,150})(%s)(.{0,150}\w+\b)" % regex_query + # find all matches in the snippet + matches = re.findall(pattern, text, flags=re.DOTALL) + # separate multiple matches by HTML line breaks and ellipsis + separator = "
    […]
    " + # surround matched portion in so it is visible in search results; join all into string + return ( + separator.join([f"{m[0]}{m[1]}{m[2]}" for m in matches if m]) + if matches + else None + ) def get_highlighting(self): """highlight snippets within transcription/translation html may result in diff --git a/geniza/corpus/tests/test_corpus_solrqueryset.py b/geniza/corpus/tests/test_corpus_solrqueryset.py index b5c458ff1..3a96fcb88 100644 --- a/geniza/corpus/tests/test_corpus_solrqueryset.py +++ b/geniza/corpus/tests/test_corpus_solrqueryset.py @@ -369,12 +369,12 @@ def test_get_regex_highlight(self): # should highlight the matched portion assert "אלאחרף אן למא" in highlight - # should shorten context on either side of match to <=150 characters + # should shorten context on either side of match to <=150 characters + 2 words assert len(highlight) < len(text) before_match = highlight.split("")[0] - assert len(before_match) <= 150 + assert len(before_match) <= 175 after_match = highlight.split("")[1] - assert len(after_match) <= 150 + assert len(after_match) <= 175 # should support all regex syntax, such as . wildcard and + 1 or more characters dqs.search_qs = ["transcription_regex:/.*אלאחרף.+למא.*/"] @@ -388,3 +388,8 @@ def test_get_regex_highlight(self): dqs.search_qs = ["transcription_regex:/.*\[אלוא\]צעין.*/"] highlight = dqs.get_regex_highlight(text) assert "[אלוא]צעין" in highlight + + # multiple matches for the query should be separated by line breaks and ellipsis + dqs.search_qs = ["transcription_regex:/.*מן.*/"] + highlight = dqs.get_regex_highlight(text) + assert "
    […]
    " in highlight From d8f3e997e6997a10374335683136e3ab5ec15ce9 Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Tue, 27 Aug 2024 17:29:00 -0400 Subject: [PATCH 24/26] Remove polynomial regex for validation, report on solr errors --- geniza/corpus/forms.py | 21 +++++---------------- geniza/corpus/tests/test_forms.py | 6 ------ geniza/corpus/views.py | 17 ++++++++++++++++- 3 files changed, 21 insertions(+), 23 deletions(-) diff --git a/geniza/corpus/forms.py b/geniza/corpus/forms.py index dcdc98843..03fac20a2 100644 --- a/geniza/corpus/forms.py +++ b/geniza/corpus/forms.py @@ -348,6 +348,7 @@ def clean(self): print(q) self.add_error( "q", + # Translators: error message for malformed curly brace in regular expression _( "Regular expression cannot contain { without a preceding character, without an integer afterwards, or without a closing }. %s" % needs_escape("{") @@ -356,6 +357,7 @@ def clean(self): if re.search(r"(^\*)|((? queries ["
    ", " queries ["\\", "\\ Date: Thu, 5 Sep 2024 14:23:49 -0400 Subject: [PATCH 25/26] Add unit testing for solr error handling --- geniza/corpus/tests/test_corpus_views.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/geniza/corpus/tests/test_corpus_views.py b/geniza/corpus/tests/test_corpus_views.py index 4202fffe0..62913f0e8 100644 --- a/geniza/corpus/tests/test_corpus_views.py +++ b/geniza/corpus/tests/test_corpus_views.py @@ -613,6 +613,19 @@ def test_get_context_data(self, mock_get_queryset, rf, mock_solr_queryset): # NOTE: test paginator isn't initialized properly from queryset count # assert context_data["paginator"].count == 22 + # simulate 500 error from solr: get_facets returns {} + mock_queryset_cls.reset_mock() + mock_qs = mock_queryset_cls.return_value + mock_qs.get_facets = Mock(return_value={}) + mock_qs.none = Mock() + # attribute error should be handled, and use queryset.none().get_facets() + mock_qs.none.return_value.get_facets.return_value.facet_fields = {} + # in regex mode, form should get an error message + assert not len(context_data["form"].errors) + docsearch_view.request = rf.get("/documents/", {"mode": "regex"}) + context_data = docsearch_view.get_context_data() + assert len(context_data["form"].errors) + def test_scholarship_sort( self, document, From d8c1da7bc46016aff3481b67033dccea08f75118 Mon Sep 17 00:00:00 2001 From: Ben Silverman Date: Thu, 5 Sep 2024 14:42:52 -0400 Subject: [PATCH 26/26] Optimize and prioritize no-image-square (LCP image) --- geniza/templates/base.html | 3 ++- .../img/ui/all/all/no-image-square-lg.png | Bin 150882 -> 64017 bytes 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/geniza/templates/base.html b/geniza/templates/base.html index b01ef761f..4fc021735 100644 --- a/geniza/templates/base.html +++ b/geniza/templates/base.html @@ -71,13 +71,14 @@ {% render_bundle_csp "main" "css" %} {% render_bundle_csp "iiif" "css" %} - {# Preload largest contentful paint image (mobile header and footer svgs) #} + {# Preload largest contentful paint image (mobile header and footer svgs, "no image" placeholder) #} + {% block extrastyle %}{% endblock extrastyle %} {% render_bundle_csp "main" "js" attrs='defer' %} diff --git a/sitemedia/img/ui/all/all/no-image-square-lg.png b/sitemedia/img/ui/all/all/no-image-square-lg.png index c4c973c15a70933d8aae543af7c0a1d7ef40d363..ae3ec633ed0aecbd06588757cd5cac2cf73f13aa 100644 GIT binary patch literal 64017 zcmV(|K+(U6P)US_N+`DEYn#NY^XMb| zU@(je9{e19gOnJK-)Azs41P11a+au(`S-$TqUW0(=F&qzT^pR^)X69v{u6|WqX7<{ z2{9iqgy4UkdCD0lSp0C(C!0_s5KPsqwFU^zpHzyC10kC5Ah<+^2LPe2$srFOh;Xo#Ds=#Nj1m`#!fjr}r=>FJ5Lf**BF9yS{ zsWOU=wd^edHf>XdxxHxyLBjXL?BP^_Nx#Ff!Qv=HVuj4DuSu4EsNSVYk;tJ z+9(;q%d8HZH`|5XFAuiT;0-|A>^yf=1VK3Tq`&+dj!R-Ja{OhmZJ|u$>hZKQeE#iuDheF8}bDH{; z6kZdfJV)0cF zVH8skURatxl0X;lAwTYlI{dlE?>`bDRIHJ7r>5{B8pRKrqxyF#z)dbh=-urqqQllKruGf6McH`GT@p*rt1B_oJsGf{>^iwc$J>1w4D; zVn8=h113=!qs_Y0v0|!#k1K8!q6V|*69RbqrofrlszmfSddu%s*V4ktC00Ol^E|G_!_fX)hFZw6s5D6xYBBNvyHVK>U1||<-qO#v1*va)Zo^DFR2dVZj=uI0bh-;xbN~; z8jZClfKXCa1B9|pd0j)}6pRrFnnB-(1>tLwax1A5S>{iZ3z(C*6fmF{q~`r zx_r3;A7S5y0j1vD*h`SHPn5ED+pctK?GV_g{x zAjHK~BDAj#JV9q{>?M;3ri&~JivJ^1U8VqGH*J%TX?IAoO}9*EIoXHuQIaZzKFWZS zw?L4$L70rR(D7klcTXo0q!W&R#CELD2{t%^Vpm2GFn$F>O0eLFY%rjWH?&KIYo2vu z>kBOv^jy;vX|vf82&;K_TxU-J;c%97G5KY0($qNv~2H86{^%Wz=HW}e2%$8sP z9Rm171y8xKPSlMl075pd3p6EEIvf)&Cs|4jBN1r6t21p0gl4U#lquX!2&;%3R-yj3 z^If7qfMc=G7ixQG_W2Qj@w?pZPp_$D>O~MvFF(tH>%a$pW4kpnG2IjTE8ih9@L^(D z85PI|17?TzfCVtp+tmJ^Q{8d`r5WjHnbC8&FV?zQbGhUaSyuBkE}CrK769RK+2yA$ zKgg%Gp0{P_mVa4x-&E`kB#-4Ua^%Ntt(dT(RP+NQQp7E7FDQbh#fO{&o%A~Z^lp0qRD=Mv^67{_3T$vJ1W)lwrf@I0m-pcq zae!N-e(-*E1;QAh=kJT489b*Cf~i9<&z%p5mxokxZR%g>JVTcJNJ3nAP~4wh@D?|CEjD?6=o8_J?n3$~zh2c8IRt@Qr==T| zQ9oSA=RlC;)MZ+DuDB7*!%T;Q@f(fQJ*FfNn(iZu0-=2K)cw$HQIXIJpOuPY`0ML7 z|LE5aZs%)yTFLP;nt2dGh*02n0t+B?aYkI14HD(o?mJRY$bJkeNFZd)hG050gt1(v z+HIy_8aQ9D_r^Fj5Jd0g=ZPodE-s#R8`cl>h^Z5wIB>Kb&!bU(}gow)o5W zg(gz*uE+1k{efO9fPiZaSz*o4w?KGAjMerd37{VohC;p`9+vfX)!Mt+l)i#LD} z3VGX>^qiJsWmnr{1rS!F+BxZYAh^?74>~IqZ~C5G&OW@D_FI8uQ4oZhUV#uMAlx;D z-82M3Q#cS@FHIHGHnnS~9f5|6kGoZ=2uWD;|X7(1b|hwmKE;n(EV~K)?)+^UN}7coT*| za54xgXdW$WssjjOD2%;2iCKq!Fu8x1f9A`-QP5W68AV%F{K8QGWhJLAU{a+7Vmli5 zrSG5!ga?%-(L4xWFTiKZKL*({Silp=-lPc2O2FW{29Cs_XQITXZ8-8080a~zoO~s< z{C|vvDJ+=LS69)4c=>Yb5gn5fZwvXH|G?7WB-QVWL_8gN>tl)5=>^+B?^yUBA4Ia{ z${_{!*A-Eu0k}TWlOYInke3`#F6o$pKK{Y~F$hXTg=8kMKnCw46sBxg{j>=?FpaIq zRcOE>>p4Da2%D7Ys-LMS3%utHz<84 zV)VGz{kQuvtCTieVnU^)k$m;?Wmaa*p3Gl#GvoUP0O8(huY5xZ`;Af<5LnJ`owbLo zu>c?F@Cx{XL<_Sn{BzCX+c3Wn3legX;j{$ZtR%3i;; z%kD3H1Mxl}pZUEnzF6swYG5XxUd>2A97IQSF~Y9BZqt9L(JKl0O9sCuDMD+ zR&Q4jq~n^Y?1^napin@m6hN5Mz<5s4AtMl=5%g|AFgY-8rE_i0@Ak@KOhYKD=LvdqNrkk#N51TiI zvb*EO$_BS-P^EQ*6!LKSFfkHm$mpb@1FX6)vs$-gTDuCQlLSE`Vse9?g#zJ%5=w0| z7LY;*o?(WZe0ev6VEb^+P7W2=J_!mK{MhT0gcrOZ#a4g86W*S_lXe>8cH+4LEE_}h zM%-182B$ZjP(f4egW3R|pIsMhp4J_>r29>&f=F5m!u8d+Qv4<*vKL>FYb2E;p;xmj z2p+liBNG4tp`bxPqC_A#PzXos04+jMV$c_Ohn)doT)AT~?j8hR3VPnk8MQxHymS&l zJ)boxWC<$>gxA1KFpKsCUw!8*fsSHy*v+gZZUOsr0N&3gHOpzLhzhSAupYz$>RPH0 zv%VnDD}7mCf*Gz4FWm;wae$26k!iOv2HS{qn*QVH>wjrF0EIG$zN_ zs5yqvF$(tKR3!)pcj+&G$q$TAbWRqS<->xkT;OR-fRF~7{c>(m?C`+^&WT|U+qoj` z!`N(C25&4F131<~K~w1Vc%O}MrA+aca6c8|eSreo@1N5_7{>5MW&Rc`}y^-|@ohrCWn|bK!#*tPa2s-*-u4jp>)Rw#YgqEPiT!A9ncn- zKbp_umxZG5$bAJnppZ}i0)gEdv7u&8H+s2T)s1c|ZGdG+&W~s32snRL+wTm5P2bN_ zE-^D<+7QfoR!5Ys&dv&=AVle>VfPMqz)jBcT1E8-fiOtwZc2J*<0e~}F`uZdU0%8> z&X;a}s3P5_!jYE^FRk3vr@9iH<`jEH5>@V6aby}E=!ZK4!ndnSq(`Y)UI}_7&Kr^- zSCj+r7t%Q(88oR<3KEP$N+l*A8id*61JtLg6oU|Kp9TkCyA%L?Wf0cfb%Hc>iXy~M zzxX7~4(~*vnT=o}#o`zF09MW`T(+x&l{yj#t3!D4G1GARQtfbQvsT+-3H`u=DMt&9 z){s(zQ2Uv5ylh-f!42|)Add2~ioJ2&eMqRH>h=u6zE5IcYHEbiVy9r$GK)GmAl2pr z0-*te&C-gJ>XP%O^j%BqHvJ28+Rz{fvEK?SZ9g=!m}zzgjN@o*A|tpaM@Lywjxe4f zCUjc@TZ-~LFE4+QCQkrZ?IV|$r4OqCLg7XGotvs1eA>sG1Tv~c)fjl4;=<7&tiT}Z zzm4n0CJ@{-h@z;j;v!4CqqGuCQ4XK$G!t|sh-inMFo37!G`Ha9_FG9#Sbc9kspWgb3nSkFS`bCNgW zWWdNm)mC!i>zrsvN%h(n&_Sd>ekKI62*gN}2E5j)ib@~=;<_>$tAOge7(c%NKw={hBx1?=nU#3jj!P3CwaH* zm!mr1XnQmQdT0Ou{9_GGc=cULYRep9#t&Hy5i*dAj&mqIAfw~Yv%r!Kb91>&EmqPs zqJz&%U4T%0B6XVC`?$sh;jg*3=m-RyD4&=xq`&N{8XkV>f;m^>>$+%SQF2j6;1VVoZB!yqLp-g_TGmt18I4vNlR>vz-7>Fo81Y7cPFvXAw z3YUHWH;`)8xDqgZXb>7f)^_BC4LM2L)^M*M`b&WET@k4}U&v%eRh%%K5~!!R^gV!Z z#sqWAIQ&)Qiwi)w(D5q?W^(X};coxg;T5Xl-awcj(i|Y5MeUcWYYHz7+=HLx;dI@e z;w7}1<>{sgx-rm$0A|qETei$}10<>oGx2p}XWO=oq~r${@-)0?Sg%&`~m<3RSGx* zbxx2op{I;sw};x-Vb|@79BtSk;)$0+{M%p)FYxQGYbacLkeEF5+tb{Z17OzY37X37 z+Y{XBW~FH&v99wutac4X=Co#mem}G`GX@+1!baPRRt-R~Mc=DLc1YbW^00z22;Wh+ z!K|Mt_h1yrSP%t_IlTy(VyN56vg>>auRQOIv?CBgKPt)p>vN)Jc|uBaP9Qi5K&T?5 zFBJgTfb$)))LD+}A*n~#I{*Y9AOwm^f)gNZG{K|_ybhug#H~O^EyQQdG0=~OzAaG}gqbSs#^7}G`7SCh~E(^fw zXRxiwJj#k-Rg;810BEtfz=QVJ!EW5bCZt;kA!)G7`8P205CAgPEy~8O{h5d8xP#nG zFnB7jAeb1BrF|jI%%N0zZ5@m@4;@v44Fmh?r9Y>E_NDKsML#Tg->|~T5dCL^7jMp( zA@YWbqm+b-fc6>$y@!Vv7;`D1qsTZGw1Pm7L&{+kW6t3c0HNM1mOyYL$dFdIaYBmO zq%gjw)O_lV%dUo7#K^TjWQuhLki}gI1iwmyZQnGU(4wB2_M(p%v=zHI-n!aripXC# zXc=7$zHmnJ_x*+^>z)>aeS4}ha)V27GA$Rd!sqqrYrwV55n(~cYA-lrBM^8Mi6sW{ zo|w?mMc$!`2?W%cK^8<(AHEMv+ZqT_PzsXDo7?5P9B0ljR9qZhE0F2nFK{ z>9EOqBN~-T*&pr?Q%V1~hl*)|>;HKM2nJLmo?JM2AQB&3;UJml8aABOw5=E_l$T6} zAs@mrKTy6a%xghe3aG0aV(VD9u=BzeDj9}p>J#T{?JeK zJqTu+#s6_dTJH5DBWbWPg~LpaV?>EO%F$+k7Zk~fI`i&WH4Y38=C()rVPn#3_O)E17;e>h z8?@pI27$l;JRW-5*=#(YE3Y8%y(P6$@&Y8t3lx;3=M251qAr}XLPCJFsBx$bY1=>n zp##DR)}V82%5)rdcT(@@d-CbmVw1l3;+wG)AZQqR{`N;d-p2x|H)(%p5Oiyas7o(~ z;P-@QYuFv`14sXvx91qbj0*?1F%N=Kt~AFUDg?Qg<#RDydg!q5#?6(Q;WeM>9ll(0 zPv)-2?Rw_Wir?&{f-7hc0zo}DQ~C>Dc(NXYf?5X3FL|r3MePQFa5SdgHosW> zLEPiWmRcBL5big&_s)Zl=1dNA6q(I^`Br3_S7Z_I%_+cxc+4A>Y(#$sp`bFXY1UEI z(KdAkDGxh6-0ysRqQ&eeSaMB~x7KpR*Ka0m>_vd2vM)p#5WdWxeXCD%t|;%e!;0I5 z7!~@X2CDzYxIpjwe1=XDrraS(G%Xm5KtQEEqMa9B>^W#Vp(D>5^;W^sp>3?(lQ(91 zIOW0IXbm-u$6IaIGIpBnb@C>R zWWyZ@;yx%?^6@`c*#8lBE>Ec(Q5a_|P0HQO6nHB;A%N=y11#me6#}@8f{q0tlxN20?M&Gs?_Hi5;08SG^K=5sZ`7%u7;>pt8=hhH}sgp>bHwaklC~ffY z074!!HOyLZ7;(H`Uz(Ezou$~F*MRJ;dF!;gTJOlQ%TY?D;K54I?Ut~8nNN{2bPWW- zGv6w9OeX;1B}F4RW;!hkhYTLyw=>76X1tDI6{czOm#q`)AXEa7Qw^^j9weTDi{O#z zJ$Y~tK|`r(aWl92L#4MncM{4qq%M!wb4_rVO_dHP|8+1?ZE(lFv4wy_wg?CVtp<>v zAZH>T=%jC}zr_#F?4P;O`-4|8hsyxR2neRz>vJSHx-O(cnjg;nFDn`uc9QqMqzhr(o26<=E4gX*t;^;M8?3SmjK} zj{5ie715SL*#DWxQyD^Re}%5}0K5v1Hj936Lae!=ifT1i6VdTI%bb1ijauH9`42yd zLcog*1dp>;l60I%pE2-nas<-PydHtzSgf=8Zb`3Aq*LR;Q49eDS1VxsBSO=SSEEIp zI8>$_8A++)G@+cj0FfM3gAKi%Ib7!J!j%Qb2NUyXqe1==L8y*OCMWrD*U6ZfZ+Z4> zk?})TeUU|n$o*E4vfpEv)6w29yFKuM>8htZOy*q0fVm^eaNox*xN1Wi2)4^U{d2q` z+`|BZjv^qsJ*9Ls1_V1MS|`n4l-@6zRL|0Vt9QJ#Yzo&t<(G3ie$;^XF8QYst%h$J z(?6KxI|N+VK>R$|*@?7(KL&yyaG9a^v{I+0m-XbpFS_8^>tR{#8+3oG{+tU7u#5HJF>buk3Joe)b6}X6sD>4 z*)-fa@P4;OnCwncc(jHi4}cZm_8`or5KGD_O96qoQ?N7;qMG@^iN!^;2~OABl?-oW zDUKXLh(4&t_SNni9d-cD{$j}nUHDyMGGU2Eaa)S#Xq`^x$+pyR{JMeEi{3kbR; zVXe3KR|4UqPjG2Z$|&~%QV(5F$UrDbCXvzLla6ykIWU%ZA`k|MtU2UvGe~Dx2Ozi< zp;}f10h}~r6=iK@x1gww>y78-9SSwK7h4pVBoYR*co63O8~z||v_9ad-DMALg%d9zS53pZo#+$&uUuh2TT>tF9Y$U%&zIDc`BvUMf=lKZYCGc@tYO|foVBhA zekam|i%Y$R$jz0YNJQ76t9Z=$^_vW#xGa)%-+&sLa100!)`mlI9`&n`#(DywMA6v% zNpaWp(&?%NKy_@hLwmOwNO1=U!N3Go|F#*c#NM^?C(pTZFrCh*w&?H!egzP+XTu+( z9Du+C+ZIsC95M@t85xzIHUx&1QjgLC?PgV`beh2ybM2g1zaUhi@h!IhIO9~ZHPrP3 zi(d*i6z!pu;3nQkt|$SoTIX1VZ58tsrM<@>;Y(;JZ8UM&b>g}z<@3g_%lu~ops081 z_~Q8$zjNhFMzLbCF=Rwo(*hF&280*bRhRvW?}C+~72QQs8ujD)u3TEFi5xf%E1(V- zT1V2X@lPg@v9~z)FpynQy%a-XO9`Tw$hybYYHM$du^2-2Z~P+h8<*^RbG$Kvy0oAq zR>e=m5|jYFzXhCK$VsaSTjk1#yl3F_{juZfv;{()DtS?b!nNq1!O^xrshp~oPY0^& z4&(ml=$m4yJ@KsS-eiTaGOCJWMLqyMW#)@27-XH+mbhi*izYnWpFp$7koLP3PIlXg z#Du}n6^YR;8rC|o+OXe=J;{%>k^)j3A<3o&H73nxzrxaG{dZ`i+M{o%#sguKQ1Lqy zOR;9IE=W^5GE$&eDAR`b`<3`dKyh{IT5qfN!&kIf1G2hHep#)8Qql?eJ+ClH~fP~uhOQjXmI)q4!;LH%{BbKIu05cM{!-qEsnZXIdV*xbq$wvhr;Xaf(d^TG!_*JK&3ytJ$-W^1j!Eop@eC18JN%eq0oCp3kWBRo%55HLSRWr<0^n! zqdxK`s-i!D(3;*A+caIr;mr^D7xI3ooot8ZT8L-9tF4wIczDv=M$8S`j|skEowU{h z;Rjcy3eVbY20Oe#J2uc`tbrPRp>x@vsA-_#Q5(NV?+2|8ygL2;D+56uV!9@r94}g-Xnn9pct6ge zKm&^22_Xj4dK$r(c(O~mkIpuu4c`iRFzA6M_|rPR!$S6!K@_buj4VZwj)=B=-!xQP zfHpmTXxC4W_#sg85QfDD?dnd{6X8`%^djBV@S+WIYuLu?d{NUy{VArHG+yVZDcYd{ z=Za`MESkzG>Gw-5#PkBC+9IzR6YsZWNzlCFA$wt*o|Ii9Vf4fsPBci$B<2Y){r>xx z)?jg|)zdJ5jlgGBg(CQ%7Ye8C#~3jM_hjw!268J@A-lw z2%1D6yv@<>3OTTWh|l$-A*~cg@TPaopx;NLH*U)}T8A=bqyU?%*(2}?G$woz7SL|D zZfi>OL=OUs`Od&*?hVv-Ql8)~cFD5V%NvX$unG#76?a74+FDvzT%Ggs(e50Wq^*1- z-r}oPKOtROox@{CZ-7bGb79OZ_<;~aumSafP|C)AegD*ZIS({9qmwq3GT!V30uE7B zBViZF;veGY<~eJ!kqjCNBn|vRbk=TN3xcC%;pln4B>Te}yK%1>S|Nhfcwl89;I{Tn zX#xR7ET@JIx*XuFzi6Y4v@6$+IM$6OQGW#pRSF21LHx-$GnJ0O!%dNIWHQ&qC52=) zoI?aZm$_`meByZ5Uz00Gt`6l3N=Mi;NXX{DG;VJiMqP~~KZTY+G=WU5X})qf9VVAy#Ge3>A#Jo# zj_7!|CTfJljSF}?n3RYg8^#{f2Om%nX~DRNgIZTHdY6G9gV53}N(594nLCaFh0^18 zm~2)Zd&hB;IEsirIt)&O_3|#~$7|Z8SZcG7A7LKh?>fDfW*D8)8Wtz9{x^XDCkWL@ zMBNeyEH;%x+x=I zGWiJ+W&;=WQCueEUe45ys`l6R04~R_4G1(av6~_0Fj8s6Q!*sl8}5zv)A5xaAFT#a zPYszj8OsyZ*A5qwQV{CPd|^{545dWDx~0TxAx6%q8UNgjvGOH6a&eE^mkjCSal3gx zUqF34GvzGngGD?$v>iuUXrnMAM`fD&jKBCS!3+3)?L})#352Kj zY>m7DO|G=%&H7je(OkNW*6*9j8kuzpgrkJurc9*w(qR-L^lds^VFQMxGCo<~Dx^1` z*OzMNArD|XmJ1_dk-Za7;z}1WWHlxoB~&&lJvYbIb3jP86KslUBusXQjpg13HXB7b ztN=5Rg+3ipU+{^p$Id3-Jk9%0uEb(ak=x#HQDNli zpTP+}*qP;aQeD$x1yOL9Ef}M0hs&`3!&)ii{H~;=MTC_bsBT(LT`6^K#zh0uYeEWx zYf0M!S?F%Hy+&5#cOY;(;q{EV^&W*U*1phNBfC1Rp+dNC2Glf$Tg?MTBx6c*9Jwz-s)eTLcS zQcqN3?jvVC1_$oOs;!Hc(Bja$1KzC7HiE8* zi7aiR{ng9qXcTo|7d(&)Aq#^km zEsFfp()UHvl*OTtE^3V3G9*_n+=XDH86=7Jm~k>R)JMU-g@+aAKJ6@nVp-Ywd4COM z^20*Q7&=#vj|V2`ll3Z4xmTR8GRMnV-y9U@_|HK(o{p9?K%g^I9SDRftTxXt@IFCz z2A}@3?uppSP+EiI&I@mH zyOS{Gs2B*J7Mas}5(p@Y97mVm3f!02#C>c{@%vd-MPf6zn7i}9| zbdLaK@+*1v81UC8Nxs~W?Y+wVr#*V}(~mnY=9-Y&IPx6uS57QL_)HG+43?D3pnt?U z_wyf&4W#i4Vg3|ez!?Q$!|&a!V2D5Tn=`u2M^bodlY$no?=O+vnLcK13AD+cWe(0b zK2Wy8&nzxs^=}4oXa_k}32MYYt5Q(N#7g%F{y+@Qzx0SLhO;;GPugy$qpgWt@S96a z%HCFLJZ7O>##y>1C88wblje(CDTAqjWcQlzaTn6uI{sn5_J2bm$Qq3Dc8;2fU(^yX zBawd)(Lc<3G6LbBtbrDsx&v7-3a$5C?OSS6U*=p4GPa5u5svc3eaYzvw}5bSx!Ab5 zgLTw6m1MT?$IgVtf3cgneTT|>QLIU3iY>}TMoKl&xc||+gwG&EnWRF1TF)o%nTFp0 zwYTJQ> z|8az$qNKGS{q_emO6)S78!Kgg(a)FsKaRsFLMh|5b@kC|96tI}w^eoSt%?sNH5>xJ zttZb31jc`C5DBAc*P#WshjghBLeKy5$ngIW(p!{Ty=D23nZ|!_Iq2DI{|-W^S+E1a zB?$*UK{K99?sF&L1V=)Nm}e8JR=qyG<5V76R-|=&eiKn}whbgaTWE&;I}_o7KgmE) zWl7a|%BalkZ!!Pk^(mHNR8HgPm^%Q5_nLrAcK(^+oO3HafZ!gx7PDQo{`!Hht7Dmc zuMEWB*j=gzob|?&@ZADm)(_j>sZ1Rg10<__?ojW)cJ^6z<=n2)h)OaYIFhT$J zC;Y(T!MZ6YE4B^cIY96frFXUvmby;n+=9LFc$ST%&R%lEp6a!Gkt6f@0nMbc_j~RQ z_7(0sv)uyqJzDlPey@g6o^ljr4!QDFN(dg<##8Cet~DPWSw4;EV#1k+oF}3^705u2 z7FSpUng3VKkV)PHO^J==YXAsz4Va7vpK@}$b6pZnH3CTM#$CxV#0Di$CHcuQXEK9$q%|OxLDt(1 z>d%GsPpn2ILjFbh>*h%fsLL~oe-svjAwh%i!*m*Lm|EUO*JsYJtixD^w8c-o8Vzl;}SpT2&*4D&JC>wP;W%QiRAREzWPFiee-f~W-KrI@cTF{7o zW0uz@I*IQ|Nkp`Rwi+nnuBP%I5OEKA>ba?_u-)2DKJ39BTA}dKE%^u$$v}|ChPiHe zE|(-uUda^B)V=iIU74jI#EXreB2AbSa6s&15lDZfB@WA(Se|6kRPMJEu&{NrI0X^C zU`yaO3fJ;+nmYA1BNTnKO@4^x0^yjN91inawSk|M-kv0CL~rT8>gYXWQuo7R_b?#5 zcVA_ZAvks&UmrOHfkv{=iBl`FGEsg6sfnor!;2K_{R^>ypgfoks6dE$)QzS)#GcHP zjn;7w_~q7;PW&>n0(fxv7ivtEiS|^W^xj`u*$51X4jUD6`;kS7{Ubd$1A$JCs09?o z=`-R(AAQaJ=GGWD%G{U1!dAv@Nfu1JUIV2zhJ~SpFudI*^lY4V%F-? z)(#lR<;@I)^*v#6)kPDKkQVM>)NWB=f0?Q2%YwoBt{c1R|900LEYyP;)T|M)TaqvN zvf3#iw6;nWA)Ux!LF-)X+P4LG3hLWjf7N)PEJ#cFVezPO(JVvDPsFTxDjN3-1jLi~ z`CKseAlOz(1Ca_->HS?0=-fzrK58m-RNJo`Gm%M{fe^xwh~z|J$I)JJrAZdJX{oIF zy;+$-wN+j>+CE_0*I>7>_ryBVl;0sI5eam(*f4;NYHI4nHe?o~mg-0jgv7SPa#Vwp z_9J!oYD3LQ0DOMEJ;p$iM_k6^;xQ=p%fX1!-JHprc5dV?HbCJ?;uh73fPC*Uh;L{O zNd*i9-S~S~J`J)VHwRKS5Y(aE@&n#d)PMs7YUg$8kunIlF|ek}adlf3@)K+$QQLE@ zEs0*Www`h`-c7cQ*^9|CQRBhZi~@p);ntPISM~tG*A37Fsiw#(FufC#W$_bv0y|Ok z+7BnmFNG1eug&BE<=9TvVGnX%Iriv!yM>D_Pb6?SaaBW0R%G$Jm96&*zweV$0lSUSEp}(VDD#b zY~ca2;u+uFxaGE?U1#Z-mvIT(@x|_W-|VmWJ{l`tEI&OA;$dUOE9(vNtaoEq11yo; zr`t<<5aNNEMTG?(9YM=J5uHN1;Zd>iJs|)P%HX{x>0wwIaP1Fpr`lszBqecFYUns1 zh#&z7Y)(%%l6y2kH3o&f-EwlXgU|$Z#Y{zgAwcjr978(b7^%o1G6I&t?J2aA@K_+= z3J_A+>xkQiXl^u5wQ(N9EIJ0?EPB?tzjT41scO=s1X#qKqB*a(bWiW&GVD}E@0{4H zJ~Q_!kg`9PfxwK(MW3YIEVjRAzPw*n`qlO83+y~dCa8TA5}Fp$zdmVSA~hXZDXI1} zoqF+Mmik|FMr~9X5GbNd5ggJUfKhhmoS__O3A$g|<|>TR0Vh7=EVg!tW?+I8)A?%~ zY9%-pBsLK0n1ePC38v>Hnp*rmTtlb8rwN4LLUpbgqWe0VM75iANgDVktKLpVoGdm-{vZu$gT{OY#P|8NE@NU);yUxxRyh(Rhj2#V3U^Z zAVdRr{PR!20uV@5Sj`i|r83)xDuUABK4Jw`)Ul~=gh#YJHxL-k*7yu-X=2d7MJ4rS zXF_5^j&iTT!`ed!LOg1M0j3W7%(QFHNN-jG;raDt*!}??Z~N(t*4nfy5ExbMu`y@w ztO##i1=WQ>nAYgPCb)~r5UxyVLivad5DBl;S6Ci}TbvmEr7{})I>6E3M$* zZCbpYR-bKiUKHxq=SrK8L{ggH;T}qBHjr`7ukQA1J5y-746SB(v41pkP+zT6zl#=6 zfDaHfgzWdJ5VHc1CDH49 zeBfQZaj({W7y4cd2%^Hn*MSu%``_QiEF_O%9M)lOP-mHqwCfCA{Y%0soov6I-@tXB zOcN|&_$mY8CfO7d@9isehs5c+lL0gN=1R^3kvT=sG0Qz#GsNEmA}+P3#p%5#X;5QH zZv?w#qbMgP z2CM}a@5Vp~p&PEYQo^yAYOf;YEzuJc1vThY>Wy1SyvFop<}RdJ%p8NIPgzKI03bhp zHxOJ6VS%{;!fn3jQc?TX4j+O!w6#XSb^*DRV|#9O zhKf?!ZfW(bCgfnqWV*<*MyR7<|4B?+p z6}piNL5;Ru;anDoY)JuoUDP-LiWBx3+IH%VO9#T%*gqJRKRg%Y9R>`pCeaq#v}cS` zbyXTYz0Geyir5~6JMDOF=MjB>U>2h>NW@FSEELTf9TpQv6MhhX3*j(TJd$pby_%5N zNsI%>mupj5HkcEZysr=t4IKzE)BeXI{;k&AFe?`K2wKNI7QVzp5QLdR#BktY7R0T4 zl@8H2;|aDmlTv>y5ZwQHqWFxFdhz{Mz?4n$LuCR$u$J_Z?T|I>xZ*oUzR(vPb!WwB zO)91-AkkffOfF?BnzS+&flz||7Tj>5CCI1jb$s#Coz2D8;pSzvTkI9*DH#Zgk-{s&D}uSQ;w|wRiTF17I|0` zj^@~Qka=>YNBc5yjl&ECP!|81XOC09!i{$}i4z7xleFpm0Ul9QcKz;m)|Dad`Y zOzeP{0SmEhGzf2}d1g6nVep=uw3nS_{@eV%x>pi*cOIH)+h7}WKh^72eYeU=L+ydT zH>V)E@=Y&C$*T#+5h^!W4btNT9P^3}Sr~S-;2_|i)M-{idyT$M_ZV*+)R*~$9D#xG zH-W%UDCgAUz3WzVpe$Q5i5CTgotWE6sgq6*FZOF?nPOi?fDqVDy28+jK7LHpthzdl zPP@54kiA7|Tlv36dd)HWW7mFMuG0k|fWms)soQMb`gQw~v;^YKM6*hB#E6P37n~M` zuX@(fVDDh3!3JYw^)y__Xd%!iG3j#Ah}0)lxjcdJgINbah`MsjA~#KSzP4`!rmp2< z*X#gn%-^D1o7||i9=j!sfhIGF$G36)a`ef9t_9_m54deEaxry(8afBm0iEBr0fHpm zg8*waTigAYuXG@2>CNcV3l!8HPx}u?71wS%8~Y{!Ke31?jeT+r;iLBpF3NbkU#2;I z6Hm~qD&6JY8Wyfd>M(Z9MFKA@P~Wh*Z*xC*RRRpMjZebr`(zfl51A!1kfG}@LdnOx=AShz|K`pRqNnlHKIoz(9@YbXZ29PktOEdEQ zrf^gYzI*-N=awZ0U1AcFQ;KdQ5pPSnzGU=bPUt#`bGv?i`3ubT!=Bh!@5fgs4TMF` zz7b)KF}KJ42%1@JOswZK{cnfL3(Zd3sIKEgbNh-y)#cSYO1`+-_Vr?Yk82Q|fmD-^ z8icO_5OaFNVEAYCr&E^})1SXP&8wEI`a$S&qqvW-NtWte6Vhb1ccahR87r^uZ~eF~(FRg7mvv6p zBt?J#5I~`fERF8^Z=)n!0OJAksqLqsuk$CqlU!{*zg8jwL^)PsNIph5Oy}P`R`k>ZO zw2{iP5)^DabbYjONf5~D6*Lq{Tjuj1>dO{{rk0t;O---Agn=En{^vCaqd)#jYjb1- z{`=t==Qe%PR%mf$2Jt>GHsrglO?6U%|#)|R&WVIbIv*6O-n#1 zFbajvJI9`RCJ>S|cH9$I;-y^Icj#iWKVfJ9d81>YMs2$Ee}! zb-N{{8fwxnUyH`T!~fhFD!inaU^C}UR1!+ki^=uTI*scJ2QsNOfw}uGmVicDuQ*6) z4gxSw=_e*f;55KX0tZ~}#}X$AO#<7SBG=l<0Zsc<4^ut!vBAf^rX-?M{rpwae_by@ z(D?B&%HF@GWm&+~Du#j3cAaTi6+ZBI_of)v5_D+>1dTMC__tG^jYm?v_5uR?WOjjt zHj4{^00Njp2b*aDr)4#C9frZ%`7Pe?jVQht$Z(tA;X)H#7F*OkJWe#9p%OPCO zdrI!lx9CS&!qHZ@?#nBA3qo>DH0~oq53|Wh%dJ%Dj;_eReAOY86&lZ_>a#1G@VHS5 zGYvw(gYbF`q=-n(z{}9_Exxr6LEYAb{Vd-%-pBu4g2tYj_FkO?a z!m9Ym9{M777^q3X(;E=dXL2l>Zs3fNI@4TS<};}rb$j6jV zJ5`o48imdOi=BnzBe_{?LV3wkm}y#yQpOn}DQBVGR>G5eD4?R9{kLHnsbolpchF z#Ip5CIr1q^Y#Jto1!c?;lDW;y1qNG}cGjeo-VC2-cpvtEecbIRgY8eWWvf8|IZc|? zzK(t|3vy3uu`&WpWw7gBg&H@;r`z6jbm3K##-8%7c%iZP@Mi1PuUUxLq7A585~8{& z?bx~q#AVE{V|>uHS$bDZV(10Hx)m*B0!hwG6hI^;czmGV(4X=p)NG!{)_RiGQU!;$ z*l8EFkPg_`CkRXD>wY)-StobunU!Dt7>be8jeP#5 zpSORcBBYJ^eDLFmJh?{69257T4eHZ6ti5!dLA~cN2k2%W0D^Ihxc5WQu&EuXy6Tcq z)Wym<^-o5nNQ;zo9FpMs2dRt5V6T?fE}ZaoMC%VZEr}$MT+a8CXs+%a#$`zt>SZ=1 z8%<_(25*l&qcvnayZVvJ%xC48cy9IT48q`j(~Xc^qBcf$;Ob)3_5E2{QbfE7V_it^ zw-r9tZv*5=`y+wy3>Bp$I5KL>-Ir+r2(g_~B3t+5M&qVbUaA*VKT>x;WJ8jmz|p=- zlWM)0)a*xWg9~YD&3zeS5(L6-E)ep0w3{Gf3mxD^r1m7ketMK9z~>G25Of$}0}y+X zMSph$?1Kc_X+%H`;K@^p45?2xdU@>QPm2@!mZldT{4<~F%8d;O4Qbt9ii|u6!>A0AbJ{>U{((QN(C~C4?P4sdu64pZV?!|%K8X1$;QWi zPe{C$*+ho~$#X&GJcb`WE0dtTa%Xw-OHkP!nyfD%aHCmum!rYXafUM%Ue7hmmUrSk zPETbfXYO2ZwET2^=eT5ZQx89STcY0%#uNbNSz0O^LQC`ZST#N%LwL42i5w0w?v@E~(ZCLrbDC?G5V^Fr4TN`)avTVp(f{n{PlUZYc;88gqNu;cXft+ZvQMd*>|ZdFpVEvq1uoI- z6US6#5v~q8oD;WcpZ6V!1Me9Syx(kmrk=V|7R3)o?Q1w%5qVB(nNvtfNi4`tLdaIp z;d)dg)?Tr{uTGn_%Rj^K9nzwji74v5Gpgf9>0=;$(Br;97;RHP5UY!Jwf)Y|U;pq+ zlUl+w&=JLMdyf`7o@aoZQh*$HeskNgi3rR=F_`A-VduxcygM3s6mWrp&*LujFvtih z1~C1k={?<(g;hPDTvHoJ`F^C9cp{CmL9^`T_Vht1`=nJDfRHY$^L9X+>PUu?R4ae$ zUWNDNipW@8G(e!bYuRRmg4f|aI1m~Vz2|fnY884-|8ndtPGbX8BJKSC>mPnr5a^CM ztUpqW4sBGlPp|!Ms8l%v2p%ayBN(7?>tFXhJt1bF-W`EB>aTfIYK_W3-Fuskh2B`L zx!&9P5qfKCQ-PO+n%nA+jn9~HQu?X+*I;e(#b$|X{c>1}foa6d@_Do^slx%)BvH{x z(cTMCXlF5^Km~v}g==gAsMWi>sI(WJl2f4$QAF0NE~Cd|nTntTm9akawhyV6A)6vT ze>9W!yIV@gfB@_F4D|MWf6!O!9+3m?@6ea4R3bQJ}Xw zj)VJLpMzPbM26~YY&0Qt1`?2N^lQJTu_oN=Qz>a_B5FU zKi-@l>lVY6<84-VfY8q@SOzeGpf+Diw4TJQTApksNPwo;5fjWtgAB%@LS;$(aEwV& zC^A73R?!kU!;id-hDFK57hucohx3SAyq!S>P&fCv+vA!^6vxfl45WI9u%s>dJ zI`&ost#DJ`2R$(k31f`hzdnEN(w7Hpurn58{dlGr&kE;c9g%ZsYBoU@SDNnzN4vl> z+pUBTfuv0LQg*F@8Z_5pf zv>;KKngnJO9~DWSlm z;KXtm-5-+tQOq!nzquby)lI=Rngw(PZl$VBjHWe#;1Nx80AO%O8Wy?c4IHR%JrxU% zl{0aOF#nn7(1%0xfu-HEm6)BkaKeiI49qH4GgzK*-$^C*7VM>b6!!$eB(-xuz9AdP zZfNT087l0yL~SXO76kJSAF&SjBH~Ny6O&Q#=hgy(6uWXn&3jwU13X<^@jR+1G}6y% z1qjj18eUzAp0ir)9|Ifd^SS?gK5fMe)y32eK#WR|thTx6aK3^s(Hj>aC^B%hCIBGbg zMA|be8+$Jd2yDS%9s2o` zys2Vf^VX0AqV+P{f9}%epGrH%6yl=?f$(dLB>dHSo*M>GOx`o|gles*xtS|EYhcUv zJrXUsFQarensxp`Dt3nj0$~z7s5pK-l3fhxRrhDuEX?ydPXt0<@v}Ey zHrYM{giZO(<|$1F%sypQ#~~7Pv(IR=2gL#tMDSQr+hy;hF`PpUjXTLMU5j%%wxdXO zQ7-OxbLa{+2+>Sdn2rk5=_Ls2m|=N$Tqdmu)w%fji|$`_o@0#eZe_A>B=KTu@#kkp z#ie*`j_4P&?Etfgn#K=fh%{L)5JI{sj@QTPMIZ2_ItgeS=X$Jh5h?zOz;iw` zM&1$6?O55kghS4`lnUi9({#2%?O&eI3(;2}iw7uebf!o2chAszd4RwocgLmCRJlI{ zOJVSOB>P~ulBa4x;9oMmlmudh_N;}Q02#UA!_Vh#_yH~v_}b|QH==%RyU1u#VT(tE z9FVC50u4!%{b(miAg4M&Pfxg9@e|1Z1&I>OO{NhsRcx>t)s31q(aBuE{0C&t07(?B2$if zUN@Fy5}{OO@fw7V(Uky$e-NANwBb9r10tD!bb`VQ$MGjMk!|Hs@VGAR=2m()>06})~ zdev8?f@sos>q&BWJNp#zJMNuK89mLxP^F~A&N2+dP|D;g?rb-t(2==staL1QzXX>V zvyjmS$bIrF($NV~w1~32;_I5Ul6nmYQ4K;c*c%9tKNbSv?d1|E*e>8ONw9sTKafSX zqQ-{QB?IYsl{G;o@0TqZ>(~tFX_aRJVeou&#(d731M~E(H3H9Z-dp2FLS;EeFx)~_ z!!UJ7LT+PF#p`(ocOm%!8`tm#k3&+u` z%ok~Udug1S4wc^pLE7+6Am}R>AvYJvlgrbY@)F#WMJ5(ahSSmxX0*X1z->>B*QX!z zWw4*le^qUryysqUh?b`5pJR2X#;hLk4uD`Qm#65%gw_^0QV^K)<(74%sNp1{hmc~! za>0h|BwF>vjzG`rTi=?)nmm#s2-c=@>q-vvFfmHxar!+F+|qx5(8%>ow+x>pZYGbz zL8hG=DRLZko^ROVYU&(;uRxSh7=IwJ>d24fDk47FNFk@b;qmh}-#WK#ku1Qb?{3TYm=KGXz!znax<^?nDe zm%GS~R@_%16arzd{=9IrCa8J7XTNVCaJX%2%a9&0tCn?>U@XzSBHJ}p$xf$D^f&d| zo~jl#2w>TaKq;($>qW%a#Ls~{$aNA3av5)c;Pzi0i4T9+Zx}QJ8HQNT(>DZQ5yqNmTWPJPIcmEaFY_ zyCYQp91Wc7;hwW^R3&Sx=emPy^%TMDoJAjp>chmIjz|^ai%4GOP^AqJ%SL?tN~>RzNnEhTmH*w?uVfdC6naOpR8cy~Mv?lH8(f=3SJ@vG<( z=`K_H1!$sN1kS$qyk21eQ5)8NWT*Wxh-o^usg8o{qsEv=5O|z{%`b zK>i{@+1tB;nXaWqm!mUCoFnSAlF+(HKme7m&APvT34c&vp(=%BN|W1M1wdxyk#DY! zBhY_J+F9V*_aO^Av$Es>2H`AuG!%=QTk6uj2oSi6$jVEsbun)mmZt-ZA`e57F>_Ed z_t$UZ0P_tV34wrZDr7fzieXS+GGTz00K)RQ2BG7Y&p!d-UBc0{;@j)>)4ZvAc7(QM zyfFD;E?6nCjB=uM82>qo75w_{{1mio19txfD_AH}oKCOtaG?rHps+utR(PD7XS36= zwrcx2R&Six$Q|@q=He-^ig}!P9NJI)c?6~>^&(ZT>>lr*h>)m6`)Oh0~L8&dvw^cvETI$|qg$Dua#Je~8A>1p+Tly8uu@;1MXCq6H zZbq4KS!W076-uDVC0vQJ?)9^YEvj8+O$M=7`v!#2YtLknIlk<2PXv=_wD3fj=2DD8 z6IxkipuWttB={BL(m!{;e;Gt?K(JMrF(4yDjR*@-NCTo+yh}Zag|nA!2a=&M*6>M| z3u{VCZ=Dq}jT=(<)F?bsfE0;CvKW zk%>~I)Fau%-Byw5tCs_@^@L03SL77itDS=TZC4X>11$)+hJ~C&R@gcvxCTPu3$Yh+ zT1fIIRuv-1fTX2vP%6&bf=hNy?n{7@n+I2}Zfcyyrl2pKjPm3B8wdcwtc2ZhToNYX z#8<09rro$fq8duNM-phwtD`y|gvJYgsGIUOz*CK964FW>q_9lZQm z1VG3DVNuo~B#{-7(`Db-xH9e_@~$c z@bmqs!2`0cwr^Z}0RkO?n@9GZTF40uSUc$`UVX14^wcS*CWJ@^TlVE9*O3-_*#F+q zxO-u(1O4%v^{R`t=V!dNj3U^|8nC*IO}u~hC6ICR6y^=+H=&8d<*mp8zdL}tQ) z4;ZBa^0ToMB59L}7?1qOngYxD76cvgldWqxDn<=*nhIO%v?CzmPjHz-U>JEJ=<*Gq zki0p$Ud*H4TZ|m+Jn?d;>>QeKK`~o%7U!GhYKXK1-ucBvk?Nne3hr{&kAM+rr&v*E zd7{~7VQo()R#nFkMzNX0#DgFNjenz;z#;;Q6FBUs{fplym1bIOjkgmUA(B71iS^bM zvggMsSylGtnAn)eEd-3{hxIE<}J?%Ks^XPdhm2b zR9C#0U6x7*jA!Ui=`>T=^f0BQq6yLNJ&U!x5ox!pc{RCNLN~Jt6f?evCG>W=K+O5o z2;k=KrCT$@+Pk|3ijQ&8F-Pg9zRbLNPP%DZKb`7Z_ppb0HMRwfC*zO^$R!RceK(m;O7k>fx{z@!J4 zc1|R<%jwQm1L$J0q;^4VT}{uXiXyVS1tBp^c-la)`JYAoB7!5e-9s9u$wc9YnKy+` zGC9tqo_1nu2!!QmH6N5S^=rpQ#5MzHXx(?FB_QmN`y+9)rXM*$IA-bnXiunMX{2BO zg@zHDgcU-_KonRWla@HgZU+X!o?bG%Ki4)P7aH#hOY>)$gn@8;CTFbZFpbQ_@pPp_ z?M|JiGfNtidtvd+_mWwdCz@+X_P{`}nSPLS%o+;9loX8^Myn()`@k}wdqlw}B_N#Z zSj0x=XBB|(RK`?N(!Io+b)L6MBb_9FsHN@9h@N*)g0qU7WsRM)0?nw94ft0ahv#TJ zAh_8-%#YFGdfEo*h&sy?1sXfkfZ)2$;FtJORhn4AjFXM38ezzDkt$^LNrbo#7K+;d z9uUfWYqzpGP@g(&m4_jHFxy~FqzJ4zk=_%3?kDtD)$}^uwsact!q=9@D+iQa%?V?U zOAvcN&ks{2T_om|CgFvE)TodpV$WdaV=!iuO%}Lh->{QARj~|%Oc`7`M)q}oRO2X( zKU;s|5i+hZ9iNpe6d@MYGjskhlJ{m9gE?i0pKTMXMmL}i2+qE6OL%kZ12MCKkdMZQ zW|1xl?9=5l)Pu$B&o*xy=XFV!A zKT=d+66BAM0Pyj*!BqLC;7X()7%wISA=+^s#>{L{dicO|4g_96d7{h)RkBr623dSu zqGpLVEIJiN?971+wwZr)fQoXkyzPM! zzH&!1EjBM;ai2jpn}EthJ*Id(qHL>L{v+vlUbnDr{>W2i&LuSM0&TLCEMDPKZ!ZDB zNa^!ns-03m`QyVcoe#JQ&91q-4H*(K+CB`s){idiF2xyE|Lg!lVfX+DLIFdAXlnMi zvSYS8nWQSD0Ro~R!Zuk~zA0Y|9xIjdc-ttYd@jwy)<)gEarq-yzCU1X^C4FlgHPA`e^#NF+% zuxNlqW0U|S37G%%#Hw9OzrXNK{s0KDgs}JM(7Jrqp`N>FxBZlkB;w=3(VSNeH%vPgKq(WA5J+p?zsvnfij#i0kt{VJSkje_swE&~ zT6Rfrt7Zd>dE5NHUwYCiYGA#DI3E%)jzc3KIl`~_xd`9QZsy#K>M>YS6e(0Ee;gDAdT~3cyBgK-z(C0yyIG?3%5fwhyt8`^fAvHf z5Z*rIcHX1JA}K6EkA5hge>ng`^h_|LQQGp2MRA3E9q0G1X@nbcfAFl7Mdngg#+9XB z7Z^xB=b~~3oq0vu3}(tMp#^S?>`y#(wIXtO!V8G81PHuwYak5>zE>u(@^PA@x;U?r zm`@dX40;SjK$pba=8_o*2|+E|1?LpuH4ttz5VRCEbuJKSjC$NXi@pUM>W_fVD9i+% zq1!JElpZIFBKo`@tpH&aC(z~+{1CmP;JHXMRt^MzINlwwOKp2!SO#o*acnS>7!ag% z9uO`{Y04HL2*dZ5U#}nwex6$m&H!9&^#SscD1O!BRd(4wv z8w25(8whZ@#yz})_=)j?zXu3AO|}FCZ58_W*qf9pv=j_4SSGBNf^|gQZD^d_6o(;o znzO4>;)2Kn)qz4?TyK(`pq-w3oLIVG$9n zGvF!S(gcY0X*$!Ln6p{Q^P6G{44jxbh@|_an5l1!w&mcW#ynJ^-Dw>~1dAg6fCDYC zA%GCcwi0ebgJ%%Cz?(PO_79ZaRCeeWIm|buu>9UD&_54Cw7^T!C{0eGx8(zz0pFfG zaudER;bJl(1{S1Rt1RC=x*pDONy!RSUqB$YW}nJ1O6F3$ur>(E00cFl6VfD}L5@uX z9Pa+Y;!8>m%jgP(%L<(~C#QXVk}rg`Xv=-mq}S& zT1!CH61!D_Mfb(P0C9c5G0K)m?=@2>6Y3;R;!EAsw z(0;{L@ZMCZ=v28sb()JL!l&<4A1N6bdnZ`B;WVM*Y+b|)8$htykqH47T-6dbt;&iz z5a(dqCAw1 zU2bOn2y9?MpD)CQdeC%<*L%!&W~vp6(%@M>a?e&qTgryQC0{C^0}sL}1OK&p@%`&t zjCxKD1}vOA7Ku#2D<)~3n{_e~I1tnpP&zQT9?}|hnk$*4!r(@-+^A4QfPK{MLZ00~ zGx$B4RgXA}n7eIH#rNl}z3HT>s|B-IM4P{^{t5veqr_C4T6!-gcK#;+}RwD^oCg#6h za|^_O7Y)^e*+WYm2G;#X*lJycKltpD#ppv@h}KS)k4S=o9!o6RB{h;isn^$^y25QE zaZL+Jmt}U%2J|Bhk6#ap8U(72KyInZLVJ>(>Vg?2!d13n%|au@)cG}z7qW;+BMEQT z`@fM0GLwXEUm#dnOBp414AEICcLw(DG$@h=O72+hophPv3ogk~z0SJc-L}NnE%mk_ zD*P#IlZx+N{p;gIcffTPKwu>aW+m&E6Z>O{;{gOX*PDF$9ipOX!2iAisGG(mFy9af z1aIX#%{EPE4Sc1hz0eAUMY_D zPEG2}rnpM)yiYo?I;sDH;+Ea?yYtQ7PF(sfQc(`RAZ>L6#BO1=RByTcdrcp{bha5=oR1c5Exy;G> zDFtG=o#S!B`Wg(H58eN56d>MU)VT_QfZ;XSPP$%S+eR9Gnn{1txcA6y-h`dx)K{RS zQr|@(@a$~wYXogvNB&XsoT1x-V7(~Br|h#qGO*e3iVG4e{|SRLBU-WK@C($~c3w$4 z6!!m_bR{l=gcKO8g>cDh>o2>80meyb8mdVfF!?-E)agp*IU65J6S9u7TgZ`%=7Mif zu!z9^Qrz}atIdo}$X4l>H8%=FXrSA^z+F?CqlX5Of^JnDk!NA+s-16kr@6ueWM}ah zFCBvi0X+U^w9rlE70uHkUgq!?My~)S#Rfu4KB^uHxF_S-rZYSUQ|qfXMHj5ONz^iM z-ZmMGT$Q@P$b%43n$UnN0Jy>{-wdXnPiIWsINM;2NCo?5FMFwydY>N5h z%k3sQP4H(#Wq!m!cyskgHL83og2w=If=is@aOJWyMX|X+Af}c7p$8FV5Q5hm9l;!- z3-IdiPN(T>)fchTbN%)Bzc`L);WlJkaZiU2hr&p=4Cr9Bx04aYPTM(AkdPVc!{20F+ zD=lV<5!2M$AWPy`AcQRl`bz>qR9=sA;C$hTKg%CBexJTD0@GRHUkE_p6je|l0nH*?j z=C#1s+EO7GGYWOq2b*aq<|8TBcRXh^`2Ov`CIRUT9gA}CC$S^TI^9+~K@?tNtEILV z?cKn`yq50_$lR;2WiX0%q2)UeL=E3lSv0&F?+>D{iMqPK?Q6St!J^9)BnnCXMEwb8 z=iSDEFeiMoxU}&7O{oiKGo2c{Ee1*fD|z*WQgY|fwV%vFuLaDO_u3J}Is*7;Qay%L zKQ|W_I*Vk1vT_mvAs0Uuag4u-UJ@_UmZ@)b*{F%KRk#Lgp`*&p)J;EWtU;UkaMikDa(g)_{wR&5Nfj*?BZ}Sko4|ya+8~71qi<; zkhZc*)3gfMsj7lR^ti~5~qE=qbclm*Dvr!}0 ziIN#p69UIlwLZdl$<`~>BH)cHhdrs?x(!tCucG}iGwzZi zdj3krWq(j`^LD7#Q7=t(ByVE}jk0vs`D`SWA3asmx~Rk47>r3eY7Q7xXh5JLe?WT% z-DP7d85=j~E7-~8i2xz<5np7)HSU@NAysc@^O#qF;4Zl|--I{e0~Svi;R9T^PGdys z2(aEET)|IaUXFhIihF2qM$^5fI8ErdLiJ8vU1AFz66;!5ic)RCm?9eWt1~}K;d`-L z2`fCOwhq`5Y{E}~aBuA~Ld|~r>kp@p>I?Gw#M$7Re}t|h*t=(r9(!q4Q8NI9l0>$p z7w=^mW9wiN;hXsLrCVT3_k-G}kH+;@IW}Y9i~fiXErT;U#Vjgy7!# z#YpVc1?2qKs~Z>#6j-V!9l?g5!n2I7p>dGLU(Lm1n#L|o1*In6@h4^m0&8}Wd*P_+ z?2F(Ltt_z}YbZ%%(Os5{_9_sB6qxFt;+??;2Ul1(Rdc`lBd6XT?Mw$u2d+CnKk7Zyg5Q@}Dy=o{!t{hGf<5NHBj$dIWVg-3u zbYG*@#k=Z2*R@Cb7*dYz&;{XT|I$gS^br zLjB&uXhuhyfLhME4BU#i{cn2}XL8QIrTE2&^0kFbs==xrq{pD2pK(DvH1+FBCwaDV@L4 zRZ4e!WMtrUAIP5X~$k(K`?ig*ER1fj_Zu z^#BFY(+K$>cz}_i$t61Cbt*;RC7`Qdng|4XU#W8v&+VA;LF(HMz8|1jVMHWw`z=-G z*qY+6#n5nseq-2eC_+-9BI0?9AjwF#=^*9YcWMB;9PL?Lwv&z&fS{Hq8*3qDQ;4+OIn_AU+`U)5Wwv#VFQ^=>X|JJI zJST0QD_f;PcvGAJ%h)snI7!)KBj062%i~S{-WM%yi>-pFyQKm1FVeQ814W;Wm(a$ zReP7x!pwwHALG7gIf5sel9L>Zn~B)MbvvN1OOb5nmUf)*9?mB*NV&D@)fEhO#riO% z4xJbaIhn!O2UNKSChncK6p}@pc{yU|L{A+S_z43~fx#f(6B>&+!ho)wK;VL;pjx4} z7=XkZPOWCtjeJWXnhy~pXrS7oKguBmSFyjYczp5BC)D~`G zGsx79XGA&9ykruA5jO^AHI@paT+#YNI-~wrvf2V+q_gU!y5QNmKG>Z;BaE=1?hX(G z0-!wIZ2QD1O4ai%Lf*AytD^y0lp}(Ygwg4f!YB&Xz+{3#dsG5OMK0=`gCkTvm`mBj zi91|Ws@)bK0A5iR8Ir(~pd2ljcf`GCbqtF+f3y;{x^aBCc^ZHbOqhq4$FMViaCM7$ zw6SQIN_xSmeWgI)Hcj0G_ZiPAcv?WDX4R+7bjJLZMajmol;f_DY=MyM1;VBq0~@3j zK#N5EnHNwq;_jaQO=V@7=nA7FBuRLnK75PA^TifNR9Kq;El z2eL#%(cn==u|G!+gfa;+au{oAR{;q4O)Ba-YEl}9qfk~2KFN(hFe(b07%1pODG>DV zAY63qsaD9GK%hHCbt`2xzmTq>t(o^Z;Bz6kaYr0eEudfnqw5e_0Z`Ed0l-*iVRr=} zs7tNxlR!{}3lx%%ZK`nr212mbUm%==j>1h<^RJO2_e%Z(T4{fc#6yg^y8A>Vfoaxv zMOQQeB3&bls&YDsCyFelA`%#>&IQvYWLgY4a;W3&15&?aVDP-R+HLh`)lj*g=d=`9!RXh$>0+H-KA=86TO!{_)$Xg!qMxZ6pwgZ`9#BG1fDo zS$+Zp6{*c3DCq{nknP5Fp~o^QI@iODPBjL*vP8>4>=-Wj37$Hnm3#r!GbxOs(l2xJ zLkwF3gj+yjaRPyOpwv6yyeImG(x?r}kv}Yo@|wO!HnoM$5*x`dta!x;;+a^cuNvhF z2#B>=!!}clu#>c~j?*2+7;||#@d2Ku8jJ9Kt#c<@BtEmf5-ZcMj5<2VEwD_uDI`|R zIw(HUwvFHc9hoSWAk$sM>d`!Q8y7`9a3m^tb6oqgh+8Afwk&@P2;y{2SauSNLUouf z0ihZhPh$`9z?tr4wZR)f$}CvnhFuCKAprzUu@)~uARGa11d&5EfhPig(tW7NfvDEb zRanK{MxI7uRjW_c4WDI)hz8XHOnsqkj0m>vZ8P`C`bf`?^W|=bco-2J5HdbU5@<6( zyk=oUVN<0BoMdhCCg_^fLVwK|0L+`$o?))-N~X6ZNm#B39Iz!YXHYa87k8A~%GcUL ziBkGO!{#LcpEZeupXE4r%M*PifywoIK|4F9m!9x zM*87CO%$~YG9XLxQvwqq^!=kqkkZf{RrSOLU$v`kW zzF>tKstqmaHbKNlZY)4lp^mi*E~QB;i?)yxadcI@oE_X8QEcBFDzE&^^=UHz4TO6= z%*7hgUfZ}pg>6BbB(vq^`QL3t6dkiO)uGVLf@mCr2chUnBuX96mC3Gql3Qm_MlUJ= z1%kk82bzL@r44Ez&m%*DtW2y$=?!M!4$Cd(8YrJMnzn?b&Q`)exY22>m0UW)M@zmQ zJLIS);gmVx+>07$Lh`}1Vjz1kt$1AxZg$Ek$FR1aE zXa=K=o8w?TQe=Uhl)z3Ht(*G}7j0(q(KN_ARZ2rgPlrh0%ekoGU|LvwmX`j=C|`kt z%gXk3C<0)0n$m%wB8{?Hu{*=g?_wYXf^SR8@_(gFC>n5Z4P!t8li*9<`R2Wz{1x6O z0E*-8xCeyOp@%8AxqrxNA(9M#&PZ7_o2E1NDq`OX2m{F~0ytPpS2E;5+s6+;HCY_X z$c*yA_eaRAh!rV|q4LDWbD5Nubu+~#scRFG><@+99TJ_At&S&Pr7{kywghHhx(_;C zuMmWC!03+Fkfm2OINuR4VKaRvYRiP8A;2Gcnih^w3ZmPBmjxQ--eP6D%Q#r#d&QY& zI{+b9I*taz9#ch02QPF32eVJ|dM2YORvVe9l*f^wmQl*l4RxfEA*3^$Ya-z2$S(EU zCRbUMMG;EgB&tNJyrmW5043y05K`em!xjz8f$W|nfKrrBlL>?c&k)Q@AEFXmHf$>9 zVh)~!fU6r{d4uS3jFt=XAW%!!7-_D!?ngg6?YNL~!7l?ZVO1A;HJq2WaI2Y$R%aUH z#L{ja1idxeI&2CQ(;a;CMQLAq@Haxg<>!(pR}qG!7Zco`#KaD!TB;$M&1pu2J~#%eA}j7RYMY$I z+<~A_6rJb7?N&5ov-;vt#gu!IFy_g7#!bKR;b}$cOZ8iw5G6O~>e7kNECHBd&~+ZBfcFb3G?~4-3mBZS=wtHw6bu=`~bw22SsqTbK`6iV+ zCM?%u#O+xcz#eHAwJ$BY9vknKP=96n?>rz*><2rDi0LffD5AnR54fK!$F)(@G zjU)h9D+hhP?a{RqHDYJp!HQ9ZIUY1&CoFbc)6C2!OA^T3d1En%G-^G23U75&<1xC4 zMn<~~`1v|C3h)2T*V%lhu^drc_{7P{ZZrY;WTzn@uM;W2(jY#vG!sDENFc~EHVCvQ zdGa#b{I~ht+dVT#ax(8(dUI?%Xjk192oK(4q$8JSovK#N#@Nhq!JLy6 z72#ddoqHd23PCxki$Mhf7CREQ1cD7XAiNQHNyjO1vElQ!ysqWsMM!Vt;Yhs$?4SS? zfWRE-@UGMZZ$0qKnwA)Ss4|txQuz~1>oo|qQiqoy-1Ryxp}?7JG@p+`7=(JrDvhNZ z**nUBO&3ar?T6C)n&0=U*lGN+h#IC(L|K^5WyO?bbjI$jz#F;>74tVoa$Ly6IGt-K zr>Q_}b8oS7RCT>F5IWgoH8GkG=FT>7@hXd3*kJ^vDHp+{ghJr5s%6oYOEhtNSmQe< z){D8)@{cB>)omeGXLu&){f=VCLxPvCmh}z+s{(4DNz^rKUIv0o#fAK&L3n>POQRWc z`eYWb2wpG9SDwe~q9|L*! z6#k+k=#WMsiJBa#VXgcLX2Pq%7>)N91)2PuFawcvledsIf$(-np8Gs7ZS5RsUGg*L zB$>;h5=b#z<~3J?KOU%CPynH@ zi}|_3)8t|1XLs>z+iA5XJ+_jdfetfI<-oqlN@!A&a*cUr5H@RFaAOqb2ZRGou;`s) z3t)k)UBbU=ZTm^2Q4=Wi#D4U`_S$~Ch~9vZ)JP&_vrNUBwM6oUtI7~KM)?eqe1u9f-BZf5~12V%R* z3fyQJD4xVmpr1{YcOxyj%Fn1R@9|npedU=%!N`mU>g+Axye(V}MA_m{jRD#R>mU%2 z1k;x00)b08ao2e<2yZoA=9@gY3YehglskG%NbJA*Bog)N>sgO{ zfMP*}SJE-3Fscs93u^??LgeQuMi69x?}cGnt@0EQirR@K)l&3gv&}s72!l$X;OrSY zx;MR2rRBYu9LiesAGzEX$Poev3?}L!jeIykWhX+3>ahwqf(a@-K|tHVEY%+z`amAF z56K2NNkrmmzHp#nZj{b%eEmoi=QQ6p_{<`^F!I5Io(?s^{Q zIkMWBlz5(bad>Er*4m;GQ*r%QvIr^|uZ-&hxK0ptEyDF?!)nmXcZu_;*zItsD$)+x zKgvTH4`u?Py<#C-CX}#;r1T}&;0B5EVH}dO@y9oMa3K(h z?r+2`4!n~EDHU~#d`sTi_tV)kU0<;G6#jN~3MoEH&>+`)McP!d=TL#LlCmDN8tg#v zI7uCXnhAuZi`y`RmV}GzFA8xxKdufzd7TtgIt+z4A-4zwv#n5sIm@8L2+&%83$I)(P;NL}R{ozDrw5ezju)&{SqPPryV0 zU$dE-XKRCSH8Kb!OLCYPo$=w)AZYgxKxp}mXalDC&D-FGGOOAQWI^l4 zUZ2!+rv-x?nzCR4^b9^_6+yV`k$c)r6vCoX8L1Zz!)`dily3P22F9Opcil;IScKZr zi4r5i&hcfvH3-+=&_H{I2tZWa?ZbKu2r33Pem=rj)m{QzNMwrnyW)7Y%7f`Bnly}} zuXGr{MkmmEgpb;#(g)Bnj+7nq(kE~{NQ?oaT2J)F`pK`6MfF&tMtM58>oHp9wxjrE z=5l)ak4aDsvgHjKwJn*2qD~|vxSOF|wS91GZ+qRbNjZZ69&N*Du7w9fee)ylY4>ia zRE_KEQP_sTDRm6nU?ULd?UJ@glCdA9x(gt%9L9)(`!+mx4|@MKMgt-Y;)kSX=!6}) zQn5FDOoK&uM&pQ@6AD)<+Da)Gb?c+Vv^zLR{P_AGVtRJU4s;A{)V#DbluTHhNA}ZJsHF?SwUw5DJsTlKn$EX zv=g~%iZ%j9da!o*b<{lTy?m*m7`~GTengc5Li$WH{zgt?1NlHMd2_&WvKt_1ow!%yta?z&3EYr zbqtbEBG~nA&IHJmCSUbs?|XfE$8r#PELFl=Q`#ipD(VIb6V`oqq|!&TkQm4W!U~Xj zyoDr}>Cj~KurPI2Rkk2s0V{;gx1A#IQS<;w{A%#CCOTa1`MP<*&TZ#}ddaxiDTU#Nlf z%T))C8X~&Sz5k+An#x0Lo`2|4K@k$#fbgXK2D;=9zFRtG*08y2oocyy?)@-d^-9~` zI@x-)bb;kC>B#MUnk%1;$kXQno`g4$42|Ec7LQ7W397Md1x7>h51sNyJ$hvr3Dh^V zUP`Jg|CZ)b+j)C=fQ;iBe(v(31wr2YaQ;aQfhSA^)J()?a?H0>1$h?VtbQ$f)9qsl zc8r(hN&OGXFCn(`+Z#HAwNT}*BTHq6{c3U?F>;uCx{gCn3jN9CDgnn*nMPH}%bOY^ zf^)6Si&hWHk6xF3)WWpJm%<>Ri5}*6h^X3sZjtsNSq{64ivt+~8`wf?qk_VgR|?3a zHKc(@{GF*9XPf?q!WTGP+`YG` z=8)Ue7jJ-()w)+B@f)m#I>5U*s`}sDiD=)p6Cq~U0yA%V1A|5hY`Pk{{>Kk%Gfrjw za|X;Nhe=;)yN94C6qc7UD4&zV^}D#CI);nk$kCQD=iLp0LTSCHt6lAP$K%=sKQUok zpE@-J13jUZL_=sMqma40V%2o|a9e*zQEGgeH3s2QGU`&|$Y@?xGD!g2*yl=^8snvd(tNstrOa^#XVKYr_FUqlDHRVAh zYK>Tf-6$^O{`q(<5K?it&F9f}1q#h4x)pVrEoy^xa!CTUfN+LHYhdnW496^Awtygk zDdj2lHcT9=hCBIO*`rnLhXwyZJLKpE9bk(&Bk@-q<&so4&tv*yEKob9q_7z~w*#w1 z0j8;w)0l0Idanowg5u=>CXXPLr|MXEua1V8UvZba_8}UZkbp%anix{Y4S4|sh)a4n z*`1|Kx)dZ?b!6S;-nMK}sFODMjI+wv55wh+SlDU0Tg9%!G3lK;&x)O-QG|hAX3G<@P;DDf#CISI{z?R4$z~)uBQ3>x6 zfUp^LHo_pVE|wkPgSs>b1JDNqs2G2v*c6kAMqI!I!7F6Ydm^k1nhq`6G1V4m?5vhJ zeXsgk)aS$Ks3Kx|$7+=`)NmVBe44xCehHs)IDUSbo1}w2#b-4svNG}1w`&JhH*NzmsW_hj>2%-y(WgXk5^rx_Q+6uZ* za8mUFFouH4AZ(l=Qq+xWC9BkDIiwqCYHgPuW!r#JhLR&ma1IK!@3YUc5~@qq;Ysn| zX%>uVEY!$$X>z#;r$;zAoEZLV?`3;qg8sv7dvMHT2?)2^+2Fi*1G&Xn5zml4%obmc zC}9W&0mf0^p6-gMIh9@Z{yIf?rCGAnsn;=}&dBd-rwruD%g8CHWfp6V*R zBj}hd&|kQE^|dRBiWtLka4pUTZ5$WdwYMtp{gDydX2*e5KY9itqgyOKHPl8;C}0k= zU}{7ipavP>sla`15Ev4!`J?xvi?t#`oQ{~Lgq-aQBPkFj*XAZdQBZCic;Z<>vT=G% zK!L%Bkh}$hZ>`8AlCUpNKwrT@rROW7RggXb1a})#Tp`U|e(OmY$%&i^HA!gaI*9g2 zj)57?7e8*&77iW$i@GL5cqLUdJc#v+Gu4Lp?<&6X*5z7az4voKKrp4xw;XCzDgvU% zC|AhRr4<~0jb{jlj}Di!`&LvzSPC01?Ghpgpr}X<3qe2pju1Jd6?|=+nOO%wY%I)f zX8QLc>x53f9c8bKh&d~DHtR7L6JBuWdvD3fITKq#d1x`f6xtj2P=}BfRD|&!kwwd0 zbaPfW*U`;IU4=-}-gbY>mla1nG$%YmX`+`iOFBiWy49cCUL>5Lxwm~2S zMh?7x1r?Qa;W$q!waQ8XA7^N%D*r4?;bGg7Y-Akw(hwk$0s>YL5bP6(yD!p<7Qm|m zZ2EQ6s{(&O1o&??^A`j{4~-zYI$BA?2i2{>yF9Iysz#`_%n zEfC+M23yITX1avUwfJ_OuXE+j#81ry_rR;U3{Ji_TDUaq3X zdK~kJ2?uHv;b!UkL}92IgFMRev(jb)!M(`>2+aOYbp_&j@W|1?P*M3I5ESl1&2<@& zugUIJv>!zvWf;qF7Ewp(MLZ_iO@5cI2hgDK@l3&{gruUEb{w`q)mEp#!2AzgD-dtf zK(r%+7Vq-Qrgac64rQYn`5X`;-3<`pO~{^QE+-SH;U=U?5z>8#r;qC4vNy7=4K@|vxUn4EVBZ%l-)rF`{X{kFH;?WBp%$K0 zc6P3>B6g_GE7d47+9O02ldnEoue{GFB>61gg4xX}OmQ(;gZQ+6?;%$-rFgwzZ`9C; zBP|k1i(>t)+16#=ts$6LZcXErKj7Y=GK1o7#@Q#OR$emM_z6UW;|vRpqS>HuIPD90 z0?5){q}K^!R%krc!eYXA8PvZ!5!SQ#?PJ?GRb(po*I{O347$bg&=uF;DQ7=@os>+f zUsBk1rGf$mlwcmXv?wePG0SV<(I0O1eE%Lsy` z|8-YLo-3YUH~$nXGTN65?5nxEeS|Ze`(hT;_@j=_8l=u4S2`!E{QyE11n}qCXakg# z=rHt|OojEvtdRSGmk3a}sFHnV`a+0MsPkySJ;F)c3InjfrXmocBcq<}3VTe>PcwYa zvKxREj${NRYL1i&o>7aq$PcU13shWPRE5@T-$M*iAP`iLObE0q5PXSiq-TtxGNBPT z&WOJT;jCza8QXTuGE<;ppDhc5DD8j%62_&i1gD;f+tF|Wh+zW)mx>{F1;Tzt*qtpQ zZgK$O`inXLCpG5YgTRxDE(s$h$IDtD%%$L2s0P=_N_`dxFfO4j5a#(C5HN%;jtPc8 zDK>RVoiPaUNuYzf>9YLRftCb7Xu3>`L2yyCkRsl?!!H4>kfa0!NR#-)hM3iYi$;H2M76e&yGqm9X6D2Eoe)A1yY*l*d&s>uR{lq2|uUmuuYm(al|2 z3cHzl{dVxR;%-%CL?W67WeZ0>RlX{8(o+hHZ38%<8|5!ZNoJ@|Ikom^xi(I+9{@q; zTLprx>Pg$X-*l7rZ4r%yL8yvRI_y+dP0?T#B19lU6`)8cX}u=$sl{nQT8X+*(hQSB zDSpK~S7y%nUH`|GR;7E=bYd#K%(Da$=ctJ_9`J^Wn8_0txewq~@Ox$v;Br$uoxuWx zBOr7gaIOZI{A%^Cwv6kmSQ4tMASe`>b}wl6!;-C&(;Y#;@Yx{B$$?c-Z7;xo(@b+P6Tbc57{jOYNmuvAGxFbQ#jY{u;! z^IBXL2=A`4E1yr=85-rY9gR{GEfNw9q~FAuuCgdI{m2ZwLoAaE833~ z&g+VM;jqDJ&(!J_aN?^cNv1F(icbLoddd`}$^vFSeZlX2Iz^A=(c5!~y!5#{-1?$s zqT93lWIfd0gWzi-@=26N;!ke$)od*ko|?JBf&~k9Bpu!JJKIA}X}T<^9Rv8j2ykcdPOZg&3_^2g(|Dy`;C7-ErR?R^5t@^XA^EO)G09~mcO z4GGO4AO)-rK#(LH_g`yK)GH8b#0&^EccN7wW4jXuIy!eMG6o^Ej&9&RXtvc9gJhYW zG<{PZwLCZK~X;czTuU_5MaU;Pp>5+ti*@Dyq z!d5xXy%-9v(m~?{&X%Hol&O{x(yrew^OhThCgEhA@h5~Z-mHh(M@~j3%O?o!M4=sA zjK-n>;j~1k1ffniQUcDaKgF^iAfg{!EmO4QxvC|gqh;RlAqXW1xtB1&y<)W5)>slE z2%}3)FRAg>NIP}Gtm@#1!CHrrDMO?@SLj!-Gf9XC)&1o?8HBY#;8uFl@;uxRX#mEYHCBL&m@$gj_%YLdK{xQgRJJj#`X4mD`m! zHeFCi>RM`AT1NbAkPdUy- z>DkDYWk!s{${_5fZEOarBg;$)3}>e=_l(;YGwJ9-ukfpZYixG^4szUvBVjP zKT;n(A3@bIYg>}h#6xH7ihe08eAvXOJ2x_s5ri`@2LK?gf)fHE1!eej&J#TNMmL~o zREIN_CZn@r?}jSUjjUFe0PCo7w(LfFR_Lndd!ebQgMD10;X9ksPMtDQjM(zA7YHLI zy&vUIPAEs!Pv=l@m3C5^6fb}~aLrrSH;BpR(Y43+iKB_6*IZm;VIy&Wtlj3?cn;3X*OrgMq1b#T}+`y3$K8&=PI$a;<-Sd66aEL zf-Y|yRx5#^apQ?^RwQD%Ab!yU(Hw1+m})l;=)|pJ0i)$k@$p5M#vpE;IT~a8V5O=D z-`)W{XE^p7&A(g)_bLiWs6q|^fy6R-RYVZBi*=PZ{4Dm-4e6FNF;2f? zjv)e{{qFj>efkwC>ra1{bABXeu2O?zPbi`gYh!I6sa5YZyYm7|)d}7cW4Zzqe<2{) zleuTJFA(Z{&m0h(Vj?5A;|~RbJnu0s-mwD{1f2m0t&I}<&_J|<;t6nQle`!y?9E*< zC0AC?QXV+c_DH~83vlE3YPlHj6FQ0F&B6ffuP$IDVX-8aHENAzDdI*-1`s0Uo3(QJ zNq?ezqiRfiz7eM;5Q-3I@r~`*-#c4xc8fu{7BgVk6N^keeo)VDTBzWc`g{+U`*j8r zWqb|YPm>1-i|vhj->B{mzLiI#p3wN2I^#;qh}k&w&z&9eHbfg33Ni|G*g;@ix)~!Q z{-+2XCijL+{cm ztL`&Tssv5*e6u5GpS8IEylbnS9?BH71cH0z;2SI%5gvN3e!1eLj+B^g?K2z#f(BwV z^mxS;08Jg?OGTemUrE;8x=8uSduRM1Paz(o;)>JQDcZ{a13Hj&>$Z1ucR*V(?)$Ul zw+KR=zMOubgQF@=$G-*Oci^h--MWGDOrbOh^;bwml0nBXN&;NKNL`Eq2$7$SJzHw> z@U@ya0f3N;ydYZ8-LdOnivp!EHFbtTYhUHa*pDLwSKa5mlJTPjnHw{XrZkjSS+@lQ zpiq6NQPipBEu4y0W@c5GtCf3LDYE3H;6@)VTOIklT(jJ#qOA0;HwT$mpDLeCp1n=Slc8_61_7r#cS7zV^Q=Ld)KdaRSEb9 z&gVd~*0`0kMd*n%HUhwM`b8mNrgU` zGmmx3zHS8v2}su5^DizO*-=f)&+7X4G=WjEwYD9)B^(8naC+SmO5QDN`MI|TmgWRn z9u;{&w0+22_s}dS?`~ge|b?Aaq(q7*60YFdQbCK;?SWu6$@pBZ#IK52orf!j!FgpRGBM^1@kH98Xw?yfl|%A{auR4jrOQOaK99 zj834renQw9W+#E88b`aeCx#^@Xj^EBp6Os7A`MJ~2~5>Ubg$Fj!P9 zgNQv;71e7DB_0d=7W^gF%UsLF^{G~BJqkk)nb>xC^)SC(Q#vlS`DYHaB~*9>i9vR- zdaVOMP6-c8Is=Ttime%g#dZ)+SP#9|luxcKe=2ck&s-^0k?4>ga&V`l@2r%cU^ys4 z;Iq=Tbz(`dOt^>yr^9`xh_o%)I6>j^mea;m$xAq1Vkj*F^6?|}r0b#kLJRMqc{m?o*xG3sVFp)dDbv&a{h8W$w2a21Z zLnY35Sm1Lt5=vv0WIvVBrPl)%2u}L=z)`3}Xw!hh?t7yW1f7UZED8~YlD<-9BsZ(1 zMr(HMrK~Cb`f^#TZxp)e_RUog%lFV{F<>Vz_(wBSH1>GdWE8HVX6w+=Ca3ESzDDTc zyJMEa^*xEz-VcNxE}cN=J^4h>9u~Fu(E_3In1+FhiKmF3ssM!Z_dJp=6bQPw2`AG) zD&tvRCk<&3Se2FpyRiX;e}jYgH#cYoU@#6oDCr>oNn?i(=gF@Q=rx|>YydxQ;C1%U z<&)U``a27uBUg#al?DOU9nN%$lPd++6AEHKj}#P@h@*Z-J^<7jOaIN6c9?yTn_2In z?-2GmLxxf7m{dvL*-E@}cBw9{MXcM6ffd{3&R~YtcYFR&PbZ(tMmP*?z-AhM2?B1j zAz<9uwv}2GZ$S8X`0B^&X&`iDagEgGF+}eIEO)MBcuUw48~TXS zjNwL}?}@p%hvsO;nfQEj9y44TL*vPAbo5b7y-Xg?P=&q?LWs`|U0Lyjw2-lT))KVP zM?#1jo#~|PO#3RXnMr`yNWrdwi%T3Y2NVuSgSeewpoupK?;1j#=I8)HSDN_MwbPh$ z1YwsD;8w{EOe@o+XdwQggUDA~Hdc~DtxI$6I=Q(6L$#&>59sy%EH?RRBHi3#%m+N> zRX-!i89~TW*EPrPM!JSEQEJzc5W3C!mk{^#94>@BgXkQ^E3$l*t!G`7#-R3m|E43> zNj6Tb<^V#4PQ3h`>@F~Tj)pnw<1Y7NgN__GRu5|Rrjg{Tp}LBL=JgTQUCv4aZ*J=j z@y^FIoY)0~e8{bfGx!gq6zG@LW<9MEUW(-9o{#*>sajklD+(^*t;=){5#INH=sYMJ zT4P{yz=@yodM^nC*nZv{sXWv@aIoz(l~^@tNZg~$Q)z7_`i@PQfXVnbk+UyPKNAph z0ix}4o}$_Himb}Rj8|S?gp$k46eu*xXcTIdT-kTb=JDJzZlhL16a?0u4-;>cjl&hk zd1b&JszLZa&CuLA)~|~RwGeU^QEh8a`EAjxrX`3-_b zL6a@BSZo;!M8~YSlq73jrv2SOX6kttrZh?%SvK-EB!(eB+bk`E0Qg=Q@HU8}^1rk- zApD+jFkUSO?)=XSN%(n}xOc=7Gbtk7&B;~s$4>}4J}BKTkI0MNU_GziB*a&NW1dxH zJ@!W-i|bmzJU78e)3tdQK{2{4H*AaZ8;DKAtj7iLwOs#-WjBG|HWmmbk*|9Of$h99 z)7|~qm;e07lj}{={{!J`0fODB3WKbgf6uE2UNZm0};?<2Q8hHC%5p8@_NG@4{?Qo#V8rCBC7BUkPD&JmVl6@W@<0Es3w=NJi z0s+gV+l@fjMRf=W;z#|jev!Yy6V#ozU9xKFD~45iDi(46UqMjRH7T0dctzykhHuXo zEa{v!`J$aj#Di(@x=|eKsZ4!eObZaq^hUmb(7i<1o;+|E1BDC8S42nrF`dxjRXS50 zLC}uA_p(3h#5$Rp0U_Wpia~IRNWzthWl9nVX$S;I z`o{r;AKyKw2*Rdsb@skJ-lv<_>*Fm547?J3Z9Co-4|{((N2QU>0~}iXRRbZ6syJDZ z`Geqq%v7?o5=Ay^7W}8Cje|gVoVR>3k9hS1_Tz?=lj=z_bHHV&O5uRu%G(A3v#=Ul zIi7LkDGcWJUgv)v971@zb0B{3{ngO_rzAuW&R&6#{v3p8AT!TDCb9rQTqr;Y70HB@ zSuC=h(^OdDlDcK4tbCYsODcGlQVhgbOMSD5gHqxjR7UsXM+8U~~-v75@#w zv3nT?H|d`#QINc|lLiBbUi%QWg8H8ny1c@oz$PNWS}sgI>ahG7dA{PJR@_Hxz*yFH zES|CuoY@ES5r`l`H2+FLK~khsSI&3?0=WsdVQ;t+!cD3!3yQ!sSQR>2dC>N45>8*k zX^|vIF&=bk9uQdR8@5IbWu20DAT-!SetEMR48nN^2yaTwrK0D)QkWd_%8G(xx=CF) zrzovUY^?90MS{E0Y2@1Vj~pRW7w|yf@b*|fA?yqaxtKc2$!bEinqZa#AgF!}xodIO zn(j)3IFT(8gXL%tHjdvS3X+7O!dizj8b1Z*!J*HfR$7?Jo9)4eLvjK_azbeQpfY3{ zPzgkwa-ObGVYB>zhA&pTcL+fg%ru<430Cm>3-@3qPj_vPV*IF>kefm(jM5&jLXAW~ zkW48+89?Yr0TP+YK%J@sI;9(S?#&6~{^6)U#zFQ`Kpc9V^^CP45SGWkY0vcA+BR&G z7wFhiKDYV4*~ikUrnb>-JY}+8zL-CdwQ65r#;;R{i zuJi)JAO-OZ2pb6ge@j6@M?R2Z9e<&mx;t_W3(_-LreE*lgLJrx4aqBuCllpS*`vXI zdVQ$?euvfkT2}niksfiPqg(8EU;)h5Av>a=1IH4b+Rjmd%hg;(XlS%DpSj2Yzqb1CBp>$) z5BnDgo0~Hg^mpZwI(QH@*SNQf*^IT8c#hsxMTtH4IQ4C8=Iy5!h~dj9&V6YwZ5>Ss zHWyenQJ|Qh90>d~B@RVTRA^`n83ZQIUa|MR64D!W@kj}5>h}uBq8emORDdSck6S35 zoaqRqe%LLM`>=)Nk5Qw_2vTV&xJ>LGS6%5v!pFZxN76!vUUXU5t%jWQ^pjzU6I=WGuK@fo&dJ2nPAf&Xa=@3fqi^1_XmEGw+@VlXD z&=m59Q867q`cz|Vg??VC!Q1XqxdTTc$2;4GXgF1tXeM5tOQlB>IfSd=N~3M&m!p-c zoG=qV&*yMw0R*OSpEq>Q5uqTG$NL881?v&ouKOA;kQm8VmQB6%BxQfx(5BU{u^ zS4HO|F@BpJX8!{*^jlb91lgGFX){%hyKhb-Ak@{ih!5;jr`^GJSV`=i)`=>q(yKvH z{tXTcrd=C56kP>^YSHa2k*3BlD%r}|3Cj?hH1Wj-6Z21j3)yG3fdi^7MzVq1z6Mx-nE~BbBMg zSy@kwfsflVEjKMUy>Mz`7lUQu)~rx`c)Ku^azHp>)^bcc^2t=0VYniBkLXJCmI6GQK^W2?WIpmw-Wg&?HBQk z!Zv=SWY2H^{pm*!`;uTSr|L;}`=SzLAk2q7@&ro&p{PS#sk0#?8T*+6ev$;NP*Wf% zH{Jq-I=6NFVZ6ai1qIyqvo8=>tLoGMgKsBqjwxMS8-!HZkT$VL3pVqFE?c{bre9%x z3wTkp0S{6A#Q*{MiXiYIht-rwyWsNG>o{{oXw4wZeIM`BnWz!6;Rqif`%KVTcH3b| zFhC>#MeL5y5N+_mndtLdvq;n??oKQvQ4*vzuF;c;(oihpdRIZMxu^6nYLRYOsES*k ztR#f08T`^TrT33&oQ%w6QofY1v}t9lu?LthM0B6Yt#ww8!SBaBGgPMP5I~r_$Y?(W z)z(}MOJPp(nI@ zhoA`vqamLLY*WmQ5;)e)!x0i@0meoGFzjGL4X3JV_G`K>p1b!Y$betP)1`l zb<{};hD?%FFmY6n#jp&pyuimB=b3v2j3#@7kZb7pUa8t0gs8u{TfzVkUIu4c?+@F1 zmb>hJ-p~gnwZ9__A#?uCKGQ`6UF9if?2PAd`=7_M?&hwL~33QJFguCk} zhK|ik8MZh6`YEy?Y4C+W~lQi?8@j*HS1heb~f>V+tU(`2s+gb0M&nSNF zl0G7bJej1ZI1bO$4@{*a1fTyYM{xOasbu5zy+IJ~lI1QCJckCMZV;{jK@?O#$av^o zZi79p=-Fa!rE@Knd~70$GGbdm(4h>0ur&x~RF20E1Y!VIQ~VRLS~vy`zXXEUxj}#& zx^@xo;WWnP7%m`y0>#532ny)yv;{wMw}x^Hq;Q=b?o~Yr&rotNkNAVjbueBkvRid!tn4giKgI2Z(YN)}p@1F9w3uZ!mW;4`oT9c8fRrAz~ouDb9F z&Ip7|<{*%CCcH7r!5O*YFs;SK&UOT0hJrH{YYA)Cy@l|Xeb7Vo#fZJpo}*?E#9ypo zxVj~H>rLA}wO8|3c$ti$z zVCZa=Zq{`1MJX8x2y+Z!s!CTvBc=QJjn9Or9R@Nqt#7|)O?LaL69NbnD3rl)wKO_q ztQ`d&`jnE7@dAOJpWE(ZYj{59L#VSfT%qV=fIelYfMA9OAT%QgZGIpU6cm)wnuUJr z;!B&orB}#Z3?%0&lKgA91#gc**88iEJm+goP=)L2Z&j9|y52tbVdWqbCI3}a(D~f{g`)hlEVq{i;486;Z+oFq z4y;p*7(swRLlwq6Yd9dGFFsr^ED9^7*?M-#%9PXHE;th;iuzz(nJ>`w32$_|ARrCb z&egfXhl&hcTE^?pXYqt`+oj@_z;O+}il8D_#OXS&Kyj7OIeKn>^ZVS&o2L>7nfRg3 z^gc_H)lq6{6A@}hB4qi39ghl;aq)?ft+$XDl=|CkwNd5HC)@;p8 zTWbrr6fA@X864Gl8FDx=JKhU~s)tMF7;ZWYjw|*c7yQha?n{NQhn+}!KIKa7<;yI(JBYjNDPe1CEByC z;+onHg@{wilUgh}9)vTeAi+_c!!#2Jrm7NSRucU&92;Ewp+RUGgpipQIW>adD~*zX zVwCmc9{{ku*Fk`=VJMdav1V5#8wR84R>&H)|0O301(P-`8E@1C%^)NWU5tjR6qa4Y z47B6oA#dh=ihM{6_^VK%tB)j+URgKAfoc0EsnKgnYr-tpoGnukCnnqngnQkNrDSXiAMGo zdprq6HqilX2i+|KaYD5?g1++i1Pp;-*@wfWo>zgj(nOn#>>N~WWRf&5^@CFzxGAhh z_g#~RY)R!-Ajo%uD~h*sP|5b|a)90$TLet=J>_WlynIjzfZ)8O^+h1HNLtO!DO zn)O!0 zA{7YCz7zAO6h0*$+#%5*D3}o>(2XZ{j4g8JV{^Q~-jgI`p1RCR%~R=G11N^bI*rGR z8L{QfcyZq#G+))+h=QOz{vdV7;NdOdICovqRLG$vg2z44m3-(%;W`%^D#wY4dWb)# zY(@|iY-I4So_4y?pJlpLSRIi^9fDi_w$i%}K)dU&ZAcc)!+emP&^elJZWj2*zERgZ zOL$}IDt@Wk&8+k;dK|janBeE&!lWw@a+J^Vpwjrc;tQ&q-fd+&hzzcgf-QsL-*wQ|T_^xy z=~Ch9EsDb@dl97nKT+*HMF>2`_g9UR+Bqil6`RK~zDGbPi^@eiC5x}%)}+DTS2+f&vX_3xXp6aTgGn^rGj~s`9W)?^4 zVk0%@ii<7aVJ4e_Uy8n=p~M@Awf0%oZ#EY5NhkvS0J>PKKNhu#ugOH zb2M=fiDAadVO46bxd5{u4tD(`so4Uqg2m)nqk~t1AdetZnYWm*96l zc~=wupI^1wW$8As3?m8+4Jv$-QxF&=>CN4_ZE4)!n88qg?y7o7<@u*YgfXp0O9RYC}+PqG^o)D27^$nhV&E!S)2!h08KA| zUFKBH_GXo+or6<`2wFpxxTk>wK`(!(IC3VHQF*L)jeFy*;un)^4#%a9<^cIE#Ju%gGRzt|o!E1P1RyEFZowV#K;S zDpo5&c9eQs>!qW(~kN`dASHu z9$~ZKEcR@f1_(VMtp_pYBX>!4?J)vmobGi9#7D-qPoJ;xc}0tBOnRaesN@#h2|(x$ zKvSt0?T?hPBAF_(4Bem9PXY%i1Sv#e3wO_6PHM5zvMHep(3canSic9Gl}7s+;z211 zwxji@*zuE;`sJUm!W21y_wNjnHz3JPq(r9f@Fdy+N%D&w?AUpr>HLJ+fDx%-F6 zS7dra)>?3&vkC5dUbXACwIcrZuTNX!gP#=@knFxd9ewQkJMIcx5Pr~C$ zZlQPp&x!@J3`}&@*zw$u1Pg+D4nM>8Kw%1m8z}%fynR8)YfEh8Ew3MK{#K}oFF4C= zD)?RB2k65tvba*H&>@m;tDh>{5c*fzI<(=}|B&S{Z)&z$D@Q29uehR<$?(BqulObW zEOg7z8FZN0DvK0Q05VV*shNUlPpcM8F*R`K84y5mw+HnLIJ|^3t6Y$k8hL==qFP11emJg zy|r=Q;gAb9DvEHX_U3$KZ4L}sTPheXoS>Smka1E@4jxTtNvC6!kX7t6ij~<>YGk%? zUSQc%DH?$w+76OHFRo?R$H+-l!uDd_Z_L`}AcG1IP=idor6xj2J%OBnmdFxdz&Zg& zW}d?yp$%OG!Cm2pzRuiB7%m1f;3D2oxM;d`?E`=YL8^j75smHFGlB3CmR?u`jy^wx zj*hT3afVmg4$(_JMYfe0z{OkOz6V+(+J8(vP)Iq1{vh7dnN#|?gI=}cyzM9`J9fTE zWm@dk2gb&=K-g`WXS)SRHCQ&s7H&lc#A-BGlT6lR*n3S}XGC|}^5KK~9l^~cT=)GDHdi)K> ziDvA}M)2t7x86&zX8#5Q{;v0D+CUV=&VRVa1s92W>Ytb@sfxJMNk?{&7Felfa_|1Q zcxrAI<(gt4eFsN%(4MdyJ_!4J9k^zbP3o#OLphFBdK>BoCW(5D5&~SE6*BQiB3lJz zj&gD^gDiCJtXA3tjfmvZDo@!z&I)E2AooiV?ZJb8eHjFdZ-56_g3r8GUVuVWZAQY0Be_ere6_T#00JZTNdv(Q0Q1pxO`tn7Ud_I3u|Z;?qbLiU(!++-GpF+SDTj zD%HCcA#jCY-rp1Ls~u5@H=*d1TkupM;3wC#ATFyEiwO(Aa<`Tzo6c{lNM)fRJke2f z#2tk%jsgLG8njiIF)#gG8yXrIDstt9$6aP>WM2RfFxx$Hm1=41qvUnyaz59#kR?z9 zAs!;_d}&>;2Y(^LhFb*pFW=lAutxcm2k2% zvm~tEg23$e99wIw6M@jNmJ|p__2d8C`&$XZbGOG+SF6P55`WOu2Mv-pSqj`6j3}?u z+hMW+0c&_`k{)>ldI3Yzp>)g^?^Phs6*^0C&fJ5`BuOL(qk@Ma=pL208sZY@C^-Nt z>%on3``=ouhaD!>g0SQVb8c$R>@kbG(fO?Hw5ve~S;xrU1Q>y!UUKE)7~9tUmVx)Q z1ZsCcf$saRHSz~nvt>I$SJ$u7nU<30J@G4QPJIb=p>Nvi2RWFxpiMwN!1pH~JG5Tk z!L9@f=(~AFV+=r8?DCC3AP|lbE$o!1hAh1mDaktzqE}3m{yP0?) z!9~TS+4}PD5@?m20|c*;-4*exX9)3dOs+H@HMLSicZ4<=!3V%u7wHC%R$ChgTto;b zKfV)rpjIMTp)ofE|N-;%@vDIMNtb zKA}Hm2S3zc!fN1Bv2b@9FbJN1gWv!aH$^^rZLhHcp}78v3KYE`eYe?T5&m8K`!~~A z#1_8iwiEd(omThjhb<;Tlqi(a3>J#QTAS5Gx)8~5w`@SbFGK~P2nJ1AZ<^)F&mS!I zv`-U#tsx*X>sMsjYVg7BVAQvcZ^#iZRiv0s_RcEkYH(1xJUK&8>5yq1xnWcl%`m5V zE>=ju=NmmpYheNk^-b?f@C%M1_ZUxy;%)Gqp5Znw z%^~KUZ@Vl;NjtU*dWzz9k_2@_)80*6D0zEJv08b+Hc{0WAJL0CViO9vu?|dmWSk72 zNyRl5xm*Q%uk4ma5FQ-6aY~OZmqD0mc*^e1VSYV z$FK6aF4Yd|%WwbvfkR_oRic=&f(+1nk74)y01!m+-G;t?GL2L(N6rCZkct*PRt;&l zI6qJ(QXnj#D6#3eBg&(4A=^WbwGG`ffKXp^C%pWhiv%)ZXn`At4QChKCa-_KoLbV*0-2@Qs-3|(^_z6aN;)+Xz z^G_Rn)Uw7d!IijgY-xWbM-dVho4aKf@;Hh|l(Y>Z5}bN0)fgwo8IsK)16lDBW;(Z_ z7`gVw4q~&pa2cA15PmU>1xO46^~|dJ3+vD@CGq`1w1Fq3dYNJTsqn zpCuZJeiMME_{`P8$tpoot7X^-BjAM|d(kBVqgj=#$Ycxg2JA9ASfMnSFV%1`#@;%t*{tBV%-+EZJY9Y2@x zy2Zu;%f6XmgC-<7-S};JyuZ?E+~Vjkj{kmcs>#@=q+;(u=l2;HM&6IlJzzoL3q%Z! zP}8>C>1$rE5Z;tgY97J~Y_I?fUzvj4^AZGH(tRw*2TC&qITXazzDy!fgbi>KNjMk< z1=Mfv{|A}x0}>rO$7P8mGSZ=6WZ?&{kabG{M~nho=|1}%IgEh7_yFNCxAqbwAozP$>p`&HiBFN=$sqf5k z7{TO7s}dT62!hrFR30!WPan^d(<9eq2PCDvN)YCN;G&a`=}C}gLEW2I(;q>u@;cLk_skiiST0A1Y?2f}6Nddyl$4uZDiAjbE z^w+Y=SEt#Sm=D)!*$!vus)9YaSB3R*^6KM)Iq^dc)a1_4SyI-57>Xa*LfTvMi4?TJ z4g&9^O{YWw5L9#w5V#yI-LN~3!Q;rw*`3rAdes5w5Al`7)I|AEG(1{w4O6r^o|qFz zmqyCNw-oS}wk0xJ^&{|5W_KXd;pV|KJd*fw16>P1W$(N1>;vgd3`BI?Eg2H?@BZJsw!%{`i`}rxGK(#T{fme*4rR( z&#CpHz8hDu9^#OKfG5swo(D!>`HG)`AgGW7m!t-8S8ensFVv~s)Wx9)|3!e+;kH3r zX?jP17u+89@|hgOJ;Uvz33^Dcl?lkwK$_TiTBK4AOeqNQ^~q1FDmC*+!_V5@(ODWy zHqdq!fXX2TXUIrc>d0qpt6V=-Z7F5(^Hv zA^FXEe zyp(>$jTZ~+=mUH9+u6k(nv*%j_aG+T9cJ`I`Z6A zu$f;MMUnjzG~*`WR52Dv1sO94;RpVpK^QdwflfHQs{>IJml0CZU4*zh^>@b%nwjt@ z-iLTxR11D_tezbd36ky4_KDm6EB7&iPz#_Kgav7(w}PPIyOf%e^c4t|)gl=eQrqjsXN8+raGSC@9X+Oyn8cQ&_oV2;Q>mxv1$mv%g#L zPi(b;`hm>o*5cK0IKbZMy~iL8r{XG-cfjBzA&<;a$UvjkBW^XPRS)Hq;k~{BG|w-i zc3T)21wa7UxK~a})!;YC3fc0l01{z!d+%7AL2?yJcn&(JoweJCK}L3qFQr2cF88lI zi+3x1B{FCp>K<83lp?W(Hi%dd06{gVs!5Kwsah9Q7*uy^*C%L|ne z79AaPQMyclo6&qp?4R_#wvR7UogN^zo!`P*>vbR9g4$)(_X;UM_dIqh;~&~ObGCRF zm`Shs&9&TP3R3%-owGJ-QC`u_R#gh>c-Q<^63oE9>Pbh7F`%9NsM7l$qaCHvP4r18 z)x;;}T7Yn?1a`W0_xeM>Fkh%W33`L?>N1QEJmrQ6DXQDSyfvyoqR7jtO$bpDx~A- zDF}|O=^&aZBXE+6P=SRd365~34bxN;PRQ@&p|zgIK+E5WMrHNuF2hA5wT9R{Kv1e` zzjZqWMC=7H)>BLZ!L{d}GMd1%czz-7zjjjb;EPJyRg*@55eOT2C|SLqqDtEQd*e8P z(45UOa%B|2N<@f?&Rrv+5V*E;Z(~W4$w_%E{U@)RP`K$)wNSFshlsm|xYR8AA+6jZ z<okieB>1rqqkMCEyC*#bcKm?-AWEWjgxxjW6zMNwe-XFk}|yJ^k@{;d|F z<4JqN;HBUTG*)L{YmMjc99Z4{xmJh#^C${eU@BhSYbo6Bl3F(*`rI!;(COZ)OfDk& zgf9dLa$V;69WHs^dhWyulOC6laLIdZWLd<;pZh##E$$*ySN|55Lw4Tn275B`0fY)WVbExp&AtZE$qDlrm@p0=)jmwuW^&?CsKB&fW;jlcDvWtB^nVN1U>61|4 zqpPZi7*m4N!3m`(4*@yY0XqY+M% z^Wkc6<#bhDyWgI)OPgXDqP1u{aQ(ny`}5iPUthAdLYsXV$Cr)HI8CpfRV}B5eV~K2 zqDc{j9oj@71PWhrK~NZ)(|z(0_SUb-tX&#}iyr(GQt=@8ixO1#(we+V9Znw7BKE&| z832L~FDP4L(zslcNzY9iHY@ibl2ACj^D@lwXm?dfz8TXz(Lw5jkLb89oK*bc_!7zt zilx_AT83Qslhbe<-2wz?FlxEBbYG#vW|zTyQO}`FbiSQ3`M19i(NUS7o=Na7b2Z$Q zJ!?fzP>l{JV9s7LO0LyOulEzR3;o2}5qpWca$;kUg%0O|d65n^{vh0*soPm-qMJ5o zHgTu+R+e@yd1m~fHZ5x8$`{Z%7&#CG+Ce8b@v1D*y(Y7!3bKzPO1=!ztt41d?+lzp zfzeUIPEE9APsggJAP^SUh}w1qw-vvDlRdvEeKRw)g6LM=oB*Q^ zv*^&cNTdRxD=2tGBh7QuXJ*O*@GE-QC~q|i?YdOONJltHQw);YQuTwv0>83OFtbY_ zETz=0C5qTPm6#>H1)oy~&T$Y&RBc*Aqwp5e$^K}3~6 z;WASN1bX~`R10N50FL7yr4*1%7(7S<^R$AVa2(D24W$QIwg*&1ir2whlf4^1w%blp z3xuQiR3Ugr*3BEfu^3dUD%i<+Th|#=$}#(_WVL2ir2JDZ`-|Hx`_?gUrCEwX#T4R6RJtE)Sv9tCr(F)I;U^vB!LK&}xAC z!gSfYCf+K?zKaq=29$u860juPvhI6I_F}@NZahpz;~s{#J8<169_ami-9f>JroLoOAr)U`?KD+Uz=-iNv0La zfz4h-U0Ls!U9yUs9|veF zYGAHYU;T1pla=8(TO@g1@hoKp0z@ATz61eD_;C*hNt(%rL!}vfp{XcWioMIYe#u%)PmbAxHN{=kqTMnfv8S*mygA}xu86o2b zzO|iwOfAOYhBBUBJ=2ujn+k=bIUa%(Y`C)1$d{og6IR@fPf+I2AZ)kYco2-AZA9U0 zefg{7*V=7o3UjTWs5jnYRloh}fMs%e0LM&4f1y=~n$?vLJ3;X&HlpEoeJG*Vds*GG zB#?$ou{7K06xf2A><)cG(CsfNREeHaL+b>dXl=rJ00bNYafE+(H9SiU#M`ioz$LPz zBDrsWx43go%_FiSIoT$h7Z7ZaDi99a_LMW%D=R_;}@uEB=mW$ocVg1uqZkOa@O& zf?R7I);aQXJ;ds+)}#i;TY%#~yl_QJZlr(G-Y?z@Zh_Qa`C_xmEYq9a)T62&hH0}x zA+@ym;d?rXKzrAgCf&$GD2d%O8;A-7Rh=tSFqK^KSA$gg{p^D>z%(jyRTJ^AniJPh z&*ctdAqVmW&K}o; z!;iJ1HAaIUlId{1CadD}MB9Df@crfBL{frKK(SC4ZxdJ~1OmeM3J_36wv5$5H%T<5OyCyZeUF$p!8@q%t;ISa)(7v)gDca9LaKjqz0D{=)&CtK9MX5V}5$O=@bVzeD^57lW&E^UqP~h?z z1&IPS2%Wxb{~Z~$c_J|08M2CfC&s`aXapq)Tf7uuTIN90)Op`msdF=+A_&g!Rv^?| z!$Hk~>@&MDmO*%5UMvVs`Icb`R*3}HHh}>UjWsTpFY1W^?Bv?pCpx#IECs{9ZxGl` zCRh7uogjmv2YLMf6p4KiEaz8Mzr&(v-Y@7HTFhv){^fK~h%c*B5k|r0u{zOwn$MEF zaO>dRiR-|^ZfF^p+iVcZ4Ag6OPOYK^*t@MVLcVV{iX?(t&~)`HkpfgxbQ@i~I;@%k0P_*5v`@%%$W_S;yA=2UP?FjLVNCrhkqO&y0jA0X zGW+?ZjJi6t8UvqjxeqZE05zNJ)=LGPfO9Z1C>=@)ofhi z5?RIl@bIfQ@gU%mDx@T(Z41dx;?+mFz|aXJqRNRg+^R^uet?RT%_3j8J1yIKZ-v0% z-0``SmOu?Qn~}KC<}{<%RRp1G(reMJH2lx)9$(``XbnO|ao|Q72fl@9(w;XnEH z`ZDV7&~XnKzROTYreAB6e>?pecOR!}(P}t$tdgBD5IC(W7%QHXTfH(cc=~Vt)aJyo zPunzA0OFOAv~{uqlea#~=@s!wB@0y`5Zn4_p30*Lnofc6 z1_RUc-Vd)*cqrr7;7A2lAmDr#M!9|v2>$F7HBSO3gT}F^mH?S2dA96_xH%=EAP01r z7O}mxx-3_nv=~XHzz#Fl0uUlOrVR+Oaza}n)#@t5KrqH6loQxSFFao%@LnMrgveTW z(|qjbr9)-D$QOyUX?sLsq5K$g1f@vpq^O#AE~r4_MVu9>1QcUcR4G9Ygo4ymx8SX6 z(tUn0FK9ub%wIh4FZyacf~CoR1w!pD=_IMWCf$^bAQ!iK4??_GDU68Ri9Rh|{1`b< z%{eKb79e1(Mt(LDhpD6p2<^KcJ4wPS95NQIa}zN&dlpHsUSxC2#-{*5xUvz7+N|nr z=J8o4#H#=SoGkBU>Cg(7q|A;Og2v-WN$4Ixft+F1bwqepcNn_aaEKcsGgEpN|ig+p89o_ zV3gFJ6AnVP9$qytemg*$xZfuc-IIkByGc&lx}xwo6|0%=WTikm3DP~$d)0KdRRYy^!yr@*@lM#C74N{4;uYmA zcJjZQ7r)sG6nLZt;r$*5Ns3&Dgq8b^nwK3Cf%I3QrK6xgP*JS7POZSe{^VLGkw2~|=yam!R4D$Cx3V7p&}5T8LG#k++Lc?E)T@bz;Fd9-M?V*6$s zT*R;XllLYvwK(&#TjHA>b?*|fuCqJm^!N6jcQFWco?rJ~0O5x#Q?3D_GX#X)hvy&c zV#6k6`C!UGglouP?Ov+>!{ zWXBtWaP{1M;!DihI^>%*AcZv-_vcgG?Fsn49%zHHlj`+?sjkw)#EFPFrO{lUSkHo@ zQ(o`-cALDRqmpEp=TrI1SBF6qkwkiopp?%xA6MK6tsd#J+VBfovHMzGApDYLBoaPz z_l7ySV}Z}Fcwpy1D}lq2j)4e->;7l`g(u~X#Arsd6Z|L*n!fd-z9=w`W zO9&Jb+ywwN<@s{v)B_RV+Lvt2wy%DH#GxHzg}B5(WJmPP!i^={z<`)*WAOyDV4oRDkgQYF!3Q8f09N zs8v#HP%XrX9*dAyK6&D#h7iLfQQGXskws6KQnhiM((j7G(=o$=7!Q6}?R?|oJ>&!p!jUN!YmM6I{3tGhA)@P$#@_m!5F@=(0igw1 zm2~+c?h#b9=OZP%0HM`~GZdI;EU}EnW?AaqGjUj`dXg`z*pqw0Wa{2mytSuj0|_2wWu38MeYb)g=&iZl??swhod6_*YYU6%FUh7kCvkGNahdfRr&) zM9ZTa)#hzHwfba^Ct`vHNV%=MzcTZx99NWK@lrP^Gl_nb6p200am+SH0dhDp;vu?u{rO z-bvsR5t(d@!$%g|6_Hgz)KTYAKf_Plk(NUBg?dOGpZSM0ICivtNy=VPTsyju z2ylKgD!m-hbsY-SxJcppR1N@P)kN=XZ({bbBR_}l-8gKzjC}wfZZy~XTmbIXp4s_@ z?8+~qjDz#{6eO4twVYdtx$C6tOAa!-{xaEsLXx<_X&AI@S0j2`Z!Gn3fVqFU`gh5HwPrq72rW+XONU@11+EIVSTa(W4GGjcj6! zk%Jh}YCpL1VVGt}zPKaLhzBe!m&08pfSRt4G_&Zz4=Z<347={O!OK1+I zTj1fiGKQngS_pT{hLW!LQl6uUbUa2IcFJtO8YsTO{je|M51jw|sPZc>&E@^s)uB7R z=p=Xh^K3S?&AF2N=j56`-$ch_f&wIm%yO7qfALY`+o!XS8iV?*Gl6EDqfLrXd9Kor zAsgf75O0?Qvw{+H$x%td56N?1M1j6eY0Nge1p`cLcgN}ZUmz$gyJpniQ7-R=Gx2gk zML{V_PqsOO{R`})&9y7)pfWm?S-UY)4G`dX?ZtpXKBE6i-&8SZYwD>+s{fv~zLP-I zSLN1Y5~VaC{8X#WrmsA7?c0~p?YF0=*?+Yhl5|`a z(2xgqR4LHWIToV%{4$4Rj-Ne^eesTfaIIQ(=*SIZChA7#CY^tuT-%od^w##5eAz*h zQB3taDr47P+F%)k`+}Zom#Ld0S055isN~6u@9dGp$T)a+$~Y=6C5tq z49>Nr69@_Qn7oHWff^5v66A$pR&*8UVpAcWkIr0p40y0&F%$4itKn#L!57SP;wN$bz84m z?GM*#6x$g?rN7hn!el?W3Dl48_0R+dO7|A+uu;{~6q$#fCVOe0kz;CFdWhA0a5c)p zS3M1>*3sj7I3GV~!{zEb4sO5>WlC&C#{HzuJE;7bJ;jw5dHG%m$Ac0hQby+lLI9wI zC6!xWfS^Ono{lQS-w<~uKWjax@x3S`qF`ohN2rI3^T4Kf^@?9o zi={eF0}TEeo4(nU%tEohUY{p-h@dMr#H@LEr%L*(x(kNDNht4P{G4?{dS1xFsHvZE z{>ucMfpSW(CW;{Z7To&JhvRpnlev4`NjTm z!`Ppe>`2z!!6!`Ka3X#heoqtEi>{(*ANP<6ch>r-#$qkK%|)Do5U;F8oF@tE1YUZu zWNtDPIZL$&f<8XTW2&LMxt6M1aH0gAt8m}iTOgxg@pm+S*HXE5U+%8KCrAR+(q?0h zhKBIbZA5uGZ9`r%2tU8vkf}-su`m#ahyqMQK=76X%`XssekqVwNkRl+auCDAAdJ_( z*9b8cJXO80nvR&k&gPo$vzR}}qEVBrmhrqNKMBKk_!qMNASSGNwoafz_f@QvkJ=yz zUXn8EeGcCGP-E7R?yM!Jt0620{|Fi4ikwj!3kqEZ0b!mR1ir<4Aj^^~{?y1?an^^; zHUXx%YMElGh0tAzIGYy02_wQFq;0B*$U+${^zRDD^89|$Le=oo(`Fu(5-0Wb=SSDKUQ(~EWHdI zwEumTu!f-+Atb@~Lt&$|5SF)p2fEdpe~91ijxbwsP*rO^-Kg;WqPK&o;B`|Hwjv12 z{bf<)EB>@#2?&3JE8~U1kMB>%5>NS|z|T;ByVCsDCVNY7>B;i4*8Cj*=e}VVArY>Y-X^i$VN-H13cs*29vNUuF@u-M?9oD-cdd8ov#7 zPX6y@RcN#$AjrOkeC8u6({TQj!+hun)fjFHgyoM{rm65=ws`xe*J}{?M`8EII+OY- zCZ&Qw9AR87)x@Ykn3vkxmKp?WBV&77=}~URck8SuG+x-1$XgQr=jcli{IkKAn`y|L zAq54t+=PGn=(nmGBe+zw({LQTflmzZ!3JTA3L*5z0cu48jG9I#7w;PYNKs z<`vY}eScX6R7N&k0nS&3Asufi|8$ze=Vt`3aQ6ED1B5rSsH9!;>u$f?7(*o|6Ss5k z_z!>o<*FIipRP^ZY2H`F>RLH)N`Tkd1?YtHXD1n`;?kQ92S0fO^k|9`3|VrEtP z)}y;3rpTB~x9nQ$1v6(QIerKe;jQMuApDHi$xFuvbV8ZE^PTE7!;ITR1pHs=a9#GR zZQtZybw>#2lcJ;qhC-3_{pbJBs4jTfLg-5b=r=n-1H9w;-I7 z*sA-ox~ex4wDa;CAaGWI3Q>#e{bfxBCFD+8*9&U|Ym0YFAjUxXsbsc9Iw=4E}w$iA5>TY>O=yaA2+hS^(ognKM& zxrC8GYL2LcqS$|BIkXk7`eH>n`Pzc=enX0d)guRgr1)M2=qZwCRcF!6O zf7INd!&aH@x>as#omEPb%>H74g(Yos{$YI2GM>jkB-Jd>@rrQBCSOJ1BkAa%rb`|TRa@uG4+u)CdKAah-cIhll#XTOp4lX2e zK?G{WhSqKCdQ>|v{@{E}Jc}IPX3A>>PybSBP5H!5x<|e^kE-2`>!=&_?Q4fWG}_SKsr{dW3gET zoQ&5&;g+FzSPf?KNUDoj&+B`_5Mtj45WJB%uJH9WyLRAK%YK5IV|B9>kd*OC-TXG+ z)s928_Ysex+$-Ye6m#+5Ft8`4o&h5LjzW0NoQt?Ux$rS+F5-?!8Ewri?QF-8$vC}P zdp(+w$z#ZkA(ocu*`jecV|@IZ)LeaK|1g38qim3>iS0p^(3%B(OU3K~VRU#92%^T^ zH?P#@xtm=aK>^}N^ff?)win-Uwt4Sg!!DpF8O$PhNq;5YE?yL~IJ{#1CpVGCUT!7F zHpD#Z!i{q279kWM<#oK{r%Jg4D@ z&cKpVo{D6YvYPy-Mwd+UlR~!Z{V+!pBMWWEAC+?mkjseG9J|#ai$OffEjAc}(dv$5O=~>L0HLvw`k>Bx&3%a6@)i(o3C-<( zP5Yar_$LeM=rl+~74Aj->sfLkL-}?~;drz`@a+fecC`)korx7=Vz`iMgRq(wy<|r* z1%&NNb<&H|-Ux3ir$$f8#v$Ym=R-hX?$&_SuYKCdlu2`zXAbBOyhZ zlp#b)K-kF^rq0u}kP$#&ox?E1?+qD+zyFu8t7&o?hM|N3X1F;Swp?+hg+Bnxl@_{t zWdkf%3Z-y`EnV&$xc17w<-KRw$_F2w*=?FOY5XipvLs9U%fs%&ml~eu+0)tn)jsKf z@M-u4P<1@aHj}lSJNZN&(j%S~Eu%7GqfFPi0FVv>p@X~}fG|5%){n^4b~Pl_ViieC zW`(M88bkF|vha>TsIny-|LCZSfg^u?Sa7>Mn3ZONU$jae*&%)c zaY}kvO8c*1%I9BdWd6E;I@>?`nj)*Ru1vOmu88IUYUoqI(8gp^>4b(;4SCVK!G`F+ z5(pGOJ{_`EJ>rA=0HKm|62pY-5((2xFEQNS?NG2P5HJjeLI3(C?|)HabvR#zoA6R2 zbuI+uiz_&C(HP2f{__pA+6t-HxjUHL3AA~JJ=DyuqKx^9LyAy7H`Ucs1Pa~Tp1*&~ zQm+Wwr@EvSd56h#0KynS{lCX9YG}X8&ey+STAEV6fU~vJ|0TBrXv`Lb2 ze!Yab-Y)Pw);HGy$rv>UX3GRGLu=6^4DYT(=n1YrSoIsc9{a$itP zlFSc^L9!$uz>HZHpa@t2HpT-&XunuXr#xTY|EURnZEoo5`Q|giNj0Ob9W^_~AmjzB z@2C+R$O*IT+3+rr(+|2@tIHq0thNB*MW|TYKc=YEEeN}HLO5cjb$gpqi$*=t{dWWb zK}<8asFj@X6AGbim_>69*WamET%x>0z8sSWhQVZKt*Fcn%?RNYUVae&AQQ=(_2tDGD+hK- z=X_8ht`*E*nM2Bvk~ z)hwIDm}tcVZ%;n05Cx$SV(hYwC#VPxnh?KIrp%Oba}O@}|jWLpls zv0<$2`%c^uI$)~) zvC``A)PN?>@VhN@%57M->f!YTQtY#U>uP>o!^(gyH(;f>CFaMro(Thl0iyhTYw(Ls5r%lo zc_@B}Zh*;u#Tum7TN6KMicMltYacWeA}H48SBO=A=Di4i_B#}pJdgV}37r@jsu(^V zvsSrVrwgUpy2G{U&dv`QRfMz3ZaPQu$a2&3FFjd=3ekv1V90Dzlx|%S1Z1&6XbRgN zp&S89g_3g7bA?F;cm0m}rTHB6RpZxyq2;G6QC&+fEb(4EX=-bkzGVmWSeXVaF|uE8 zy7j8?3y3tb6qwe|mb^?7MdJgO{;`JbuAYIdGxONK2g1_tMl~=#+;Gj7tkXB44$iRO z4*4q8J_2;Cf&~JNdq%ar&0%ZmqucGpNC0sUpf%Xa2l({!zf8@~BM@q7v*Rx{JfApf zbN3fo%HG%DGAv##W!s{YQShQtKr+e4t-B{FLP6}BL7Z5g$%Y_T0z+&cvT7XIgwpdq zq~%r4`oqe+rNxnxBH-)TGVa!eoqh!*<4K>$41Ls#pc+jMM@7=lj?{`_Jwt3DsAUik zq;F+slw$?*&V0L+Gs>Baj+$C-V=lPm@J5o3Z9<$C$2VAaFkL6B-tRk*#rvjdA%eEJ zLnVuQy0NvlPuHyP*!fu7Aje9_$m)O)=3qg8)6MqYJ3C<@n2jzw*as*T5DXE^S>J5K z5r#q?&UYOuK(?ApHgB8HQ0~m&Sz-dM0Wox!Mm2%(X%%co=p6lS>)D}83Bx?{qc{!} zD~O^$B|*SG z#{KJ6)Yv%+1rqqj-g>@~YO>8*6jG=nWCxZ<2gafEE`e~;rO@Y)irI(~6d`OppN}0s zA=2J!FtM(+Szr0aKu|^nOQ%X@C@RC2f#7NX+pd5ha_H~>mO_GreAp5r)Vw(etXB7B zyn+1B0wVZ?7=aK5QznoS#Pqg_65xszQ{eA7RV|tenmBVQE9yvYdOG4%+vuP_VP7Fx2qG0vch;(bbf!m{8H-i`ZrdT%FFR?KwdBd&^YUe_NOUp`D_Z^Hkhk6Q_H*thPH@f90k@u~>mV2--!R zZeAHNyqRjzN?su*;2n={*dh;;|Jr4Nx-9IqM%->Z5UF;yF z^K$Aq>DU#ubC*%?9R__-AVASE-^&C9MR2a$sCd~Ar!0cT6f#7GpR*`a2B8%{(t{Mc zZUqox`{M5)-2D#-zHF!mnxlKlLh)?*xDu5l2_0xUUa6wxwQ9SqS?#iKa&vE?joBmCNc=V z@?wwvaGTU|{pWE3q{_t!34-0wmg#0k=LUe2Q5K{V`hMeJ|R6_}_ z%h#zYZVP*69I5vX0-wnvle|s8JOrT-MaV4PUhI^p+~qPmY|~*dE6U{MUK9I0Z{^LW zgWOEu11P4?j$;BWG#vy2KLb1UlmdEcza3}JVgkZ&fR0lTY$g0R5S$D=5SK45r6nP} z*)*6m5!DC;=W)`^6)U&DQ1=?{Ye7#50%t;E8ulufqQ?Z<-5Qla*5_fM2)i-MQ1~+l zHWoH1!Vp1|^4ann(vznPo0vX24$#KG5fDcM8QXtk{d1*Fy$4fEAdtPcJZhS?aRJrP z^sE{;`nd!K(yb9p#LUvm*5d#zP0@b~2i?^NIb-7{XC3HI1Ysbc4S53UW8zOeAA+Fk z?|*ZHO_e=v#jl03_id-zcrmfUHsYPCdPtoj&6vRSAPlDjDHctZp82I{#CQ2fr3_IR z3w?v2au9fIASi8zgJ5!$&7LSH`1zIR9e&Cu#ef85R(D~NQ^^_{%06QGOK})A8ORMh z;S}FVahN2_Y9c>RNU1pp_TpsV=Z6CxQs}jRT82LzR*3_+%wY?n3fWWi*B|>4Pbjw< zC-^a<$|y9gb*52S=YEpq3_|CWpg&trk7{JvXAak}EZNklpvhU7*TmGKJA2{H35KbP zvI~SM2*<(C>+8p{GGojJLvQRKlCsS`a}X8~n?^iES2T1SgB}QB48pzNgz$Fmc7K*Tu!>b|hHetyiY)&&l_>7YP zf{ikBBaF0ml^}Rmx0=@)eJ3JV`gVv=zC__xD^GYX9=Ia;4~BBKsW4TmLiim#F(%QF zVwPVP3PI|VIMmRdFOeNr{#C?=IzDo3a7L9+PB?EjK{!w9?lM#YKwV%A?AgoNoI_7% zY7t9F11+R(rb>Z-vK|lpifEzj|G}dq2KoF=NL>PZ| z+QoKx{Y@sg&%b67wgrS<{xt^ysm;WMo*@qmI9E=wUmlgi-TE>)0|*#Bzl&*8WdxzX zM0QRP@nhVO+Dz;1iWqEFgg4><{k+~HgZbnN&Yg$B?PyrGB9lc^ay&eR;g_iz4(LT| zMRCC}8vuomx|a+BaX?kz3r3(Mv=&mmwa1j()i!l+GG@&s5iWh7L9llq=xs@CW zCR|8Q6Zai2Z|N2KBOS2m3p(a*(K^BvXwe38pZJy+rtmTE8wygNGnR9forAD>a}Q^w zo<#KWol^|!AdIG)8iZ{a)2B?8&6FSmuq)D;Vlj^(_~}BA2;0NMfIq(Xiz5h$hmS8U z_5bYzQ;p>--Ot}62>woW(0WiT1w!r8faWw0YXp-m=}=~l0zf` z@x*MJ=9sHYy(m>YI6?TOf&{OKSs0M3`BTu^xVa8YW?^@uqfaj5O}i0`KX;h53AUyk?tT$QpJOWHl+Si1@4S`?0-hEk&YHq= zTWw;{K*0AS2wA){1)OTWn!K*4VKR^;h{Nn=XIkqTfjn?~3&KIWDyLqWx}0>I$YS(7 zxJ4JCx5@jof#7Md8nS8_vpKzgc(R{aY`n|MqPg8u zJ(R39_0U|2BXKi`Jrg9Dtk~0alF723&;h3LPNAkX?YIbps&M;j3_P18&TxUB%9rrB zId+x$hDr=+4xH-&JK|w1k|d6(YSeu9&^&;UBN5C`_f;fK6bXWubLE5%z!pqNAjo{F zdutu`O$LsE1rJ?)H=ikL3*}Edf)GMkxKbABb)MB83W6!u+5D9A{{n(Zg*Omt9Uv$J z6+zhWRu7Br)>Jnc1ZMAvg2FGh`V9bUkS9(kSyg6EV4A5hWiT5a3+~{xzh(G{4o_l& zc$&m5&GAhL;2|~*k!I34yIjJ&ZZMx?4PXSpLr5j)fifF6-$3YP1HJ^0Y}&<0i`){} z;36c-<%H!Y$fd)|kP#-bWFK!vNVu-s?$$0I#ywJY3`L0hh^G=^iH}UK8z&(mv2$oG ztHo;&9N5+HbI+saoEak_{?vAbl&kx|GYJW?`vnFtk+uDy41hKJiuxbN5AQ1U({ll#{0D@RKq%_QoHL_v?@masbqzpMi9Y>q`yoFk2uR)L zP48mW8zv6npYXFpZY)$q5S)rfA+^@}!x?=25D3@e5O-hmTYO;75g@{NFosBk2g7Se zJ~o#+_lN%Vvt7<_@S;O{&DLPf?UGjDKDT2hD=;2CW;0OX?$$78*5gto#Bg(Mzm3Ye zUy#xb$jt3Okc4DutKI~wBsKlS;1I?i&-zu(|1*>jMB^6E7S; zIR{`h+c!1T|2K%Gs)?Q;1y2aTXI?>XKI=OIGWNA*{gI^7n+z^s6W`}R@4HLMCzm*0 zHDsE7ka;&*;Ji&f+e4l0orNFj9v<$}iyR_Pc86N&0d(J+2)is=RI(vCw6KDBef|LURArjW6bP|;2T(@<$uDI zABLS_535Lda`%{l;i1#2d#+s!`btJtl6j936@?zI;l5fiZLSksKFHtH)qGI5kQj(U zpI!;ANYy5RH>eRg{yT**Yh*sDMe6>G)rZr%f4bF+PA5C~GbcY$jtgUu?yHBr4yW6v z`+IwPE1PGhn=KA;r?kjZn%&jN{TGq@;iqT+=RG2>vuK@EPu4293cO~Q>pR1vLvFWjF@*Q)+&Jtp0v8VK#d%s{GEyudVwGBQ61$cph< z&(#F$X=56KPa-7cNP8dy(ZsCXfuh*FQjH)>xcCCOg?U2^@r*B zFcyCtL1(hOkM7?kW(E|_P!CR1Vn@%c^dlIv4&1jjh9Nyv5rlzPRa;X>d#;$|)TlK$ zFFxs5gow4tk;Rv;OIf(%2fF_mTT{%YC@H`qV0X_|{9d4~GmTbeD|ix1sfTa)$AdJx z8L2cI3WNu9G)jgf&w#QS4V4jLs93;>Tn`dcwjH*pdFyf2{dq;Rn(s#SR5;v~5;6+e}PYE!4q&GU!pCNYkM@;vmUH7|-=gK~3vPfl{M+eW}icCYG1xZ;E!t3dg(KhfS-hJq&Q(H5y2cKgE_>AK7%l zf)nuu4YYdL;UUZA<7dvvu?r8H?NCu8`_0<%Twra?Dnb4C!`<(>ekucCg?_2&WmgM) zzB^!tbMaC3ngMGLw?+2E9HVC8`TWUS{`so`^`tte>@3tF5|`y;>*n{^*72tb^37~) zO&p)N#{A-DnUm+3a)rG_C-~8n`vqw(aYj8e*s`{mR8$_v^~9A`+1(@x=U7rbM@B`s z-w=H*vIF>?)8QktcE!)l?+SkrLVr|!O<|mxB!ALPxH|2kd4#ko?>xM;#!a3Qv zqY3}^!>rxLr+TREiTLm%A01^zN)_oR2C?l6&1K;%AFMegyu?Wz2K@$KRoWRoE#a)y zo96_;{{&XplI*7sB335}7TZf-dztIo!R0O~eDPjdMNMBZrq7%Py}(4 z(>8TQ_w$0Ogx84JQWa=KK_%+AM1M5%$F? zGT$Ee4C@~rHv!pT(DU$jrW)?2F*mmBGjo-P<@sE4NFK?3fUs9OFaN{mnf@FHQIh-K z7Cl_Sg@oSGA*rJ}B&Z$TZq_%qq+yY|yXQ0{jyjM!V?n|Hv0KMsb_T2rW>(Q>4ui=L z{l5v}T%~5$L0rU_^)KT~RUA6xj#HZOdiMn$^Kj*DrMCHP#yr-*c4BsR`+ z)~{f-s*TWME9B}+IjR{&$u%&;wjktvJ=MAPRz|v*MDKq>;|2UP<*w?8`Puk+uab6x zVlDX5&Wo704-|-`(3`^>ZuoY|XijBkk1OKUE@D<7+nu{j#SSCM~A?}GBu$?oRbK2)WItr1Ij)BOaGi3FTAFsARJ19b_N5c(1e z3PKZdJ8#jC?0r6=bK*eaid#kkGIGl=PCN26vlwo$Fz|@Ps#%8_41x%ayyvGn?^!jr z?5vu6-{3Xma4=%(Lur9XFNVNc!T(=#sv45SF?lW47EID(jBV(CKasxzsash5Msl*0JzRtE-TgY%*bI*PrA9#Nn5; z#&IZOB|-)=Z)B_LeD3b+Z?ad;Ul7CVlLL`m!S8kWm1?@AC8IFPL(x!c=$8NI$eYx( z+v3WP4VK-(wFFZLwTAOd?uWT1I!70U|OMKo04jmIGUW}Qj z_F<%O^$0}FL}mBn|8jDJb|$%O?BrSNb9@|}U8IhwK}2(ju3yKL)Bs%2AtNiHnQyz~ zQhNzIQU5AwRdbwyc3`2J>l0=C-!fp4(;|*WJ*16qQ~VCyGsVc!?z}Vt`>_t^lFa<| zSEFOx;~D#V6c-}f*W$4n+bu_5M^>}LLx6v)w6pEqYmS7>y1UjhhLXgdqbeY!3mNuJ@!ZO z$r&w5;w#R@u>8h4-2e?w#Q;Yu#7S)%`KVM3?pEt~P5-+QM0{2m8SS?>&sLxv2>QD6 zYHltSKE1Ri;GPW_7-b);PSrgJ1QQEEa>%H1mP#(x$Hp3tJu^{{fTj!)mOHFP+{da@ zwPnou@G_O-t{L$G<0}jJkdf%eTkR#{1ET|A(9_mdvn5&8P@denjs?`E!b?8FntKZ3 z0OLplk+TCfk!;Y~l?7s$53p9E(|-@S()|PRdawE{eJAQ6K;r{ z$k09qK<+5?>Xa5mcaL^(D@uv$b;3He_Fe7!#X92iZQ}k;b~BGEP5aC5UN7HLBPYRg z*T2d#j?LK-psL+e_cb;?1P-Ar39H@35&H9%zNO64Ko3YSG+K;q?cWDvQ!aLVA2VC& zt99IbJ9!-WnI6b%pM`MCB(dv_=2t}rc4abWH3C$l0xF7D6rLa4Ntka9$rjAXqyM{gFPy#$aTcnE9h0{O;Wy96U;4Trg>>l)g#8S8+J*n#M#Dfq2A>B^ zNCoCVS}R?6ZH|h(Owg;`facppd-l&+abi83;dfh@5tcRK%047T=c??JiJdRq;qxS{ zaEP*i5J@qClv%Gm;T2Z7rml);USBB8p~S04;%LrLLg>%ItfIa*8M=qnEX`KU0I|qS|6-~Vq#>|J7b_M`a0{y-Vd}m$-s(_70`h%=1GkNaku<6xAPO=I)Zvd zQL^NMQhs=31;Rm8&{Iy)3Nk{`Ab6 zKHb*R^;yN*XF&C@8F%mzSA0r2Bmj><4~a{OzVpV@DgLJnT5~2E{2AhZzCw7b>h$^> zYK8Vl=l(*b+#OFCuxy9jr_$xAZD`d>eUn3P^JIitz!d%|b~;;Ur%*qtRUKu_YIr#P zZM=fbVC_x8Fhyt;VZ87B!KDB@3mO>4ZBQ#7C*wMDKVk_3Biy-98Ryilik z--2Ca_GnFHj}}=jxgz`6$%{cnSdDXbrG2%ieNqBg&x}yRtk;G)M>;9eA`1JfTzDBN z;eLhvGq$4xD936qmqUvq_rufJn3{^VaYG(7v5TNAlFeon!Tt*+ACDy@d|`RkQ-OG! z|HDL^g;QQruPC-Cew_W-LWjNQWe-cec>&c~wY(rKR+o2!yitJ}-{ef`8b-w)LAM6`zeOz-Z#;S%XddlB{7r5^cTnF@kB)0!(l`qf5ju zkR@VBmZYLJ*0EuFqxw#UR(e02+lTHpFF`f4XB@eLYeGn&L!-z;$8aCSm+<}1NdzpW zMrWpHcpCbUuPO@xZM=`Qd%4g^Q^r@4xT2Y!)``Ohb^Ye$+)J=+!J4n08i+cU^)&d& z9yq#aMzv?J(M7zLxAFd4O&7)1h9Px7Wp2fkq5_f_9XB1sF(CfAbsC6_#}7{qy?55+ z@&~A8leSbV#xE~GzbcDvkiABoFKQRpbpKj~%U<_a>44Fi?tCn(6e3}xHQ)$v6a+-j z(Gn%+arb%ULL{Fva$Ol9caCKbcP4Jh%JSOoe<{cf_%*;~=N`w2)5^O)b536bvl zTAeDo&>c5%rzGENiRPn}1K%xr^Zht_5A<7Sn8}g3tp~fx8xsr7ne~I=vh3qe!TptX zd<6sh`%Q0LzsPgzd7DOmYP;>VseKgW8W|W~`$?5r!>9QHU7(U14U-~Rs!ZZlCO%|} zxc6=}%$||A3WvS>U+d_q39tADO@~vYoeRxT$y|=lPsi`2c-om3admXeLpfpj;}bt5 z)ROeZ8YS=8-eV=CPsiRB11{^01e@jZ7&ffwDTgI%MgQk(nNme5m7)g6cVZ|V}OsW7Rm@2XdQK@h+o?iA`# zIc2pF`eDh001zvy&H1+TcBeA3CFaF6lE-IQHeFLC+)tuB`ez_=HQ??GtiI*&JT#))6R%k$10!l<1~E2@J2*aHo#)?S)`T?^ z%l-hy7w;i7Wjz8^Vw*eYOw_4ixd!~hJ^qbbw=(tKGu>^rCbx^((48RwKQ%Sfnxzm% zn~FCv&`_+&`?Tjpmjc7WPBpDxQM0&kJVYI>xx7?;SD6@0_qz4ilhfRX(k7wOS9}^e z(Op27QXrZi2g6}W?!yv{iG+$sX;IP4yoPC_4b)QOrBND|2NV{Pnp`oAy18- z?001#qMECpvjRMNCyg{dVzHDZhqNLG?`ap%kH(^W&v1?Co?-OT)VexTUXZpfO z__{Mg`gZRz<-)wt3HJFN%wmC*H1`Nq`InsbpZf6B}!m>A}}hH`{oN zk<;|6I@#7izXk>!f}VBBvo9Mu0pL0P+g&?Drlu(bVba4-yRSW+oq~S;!U7Do37MXi@Z}vJ=hR)TbG~53Z$hk$`OPv(k6xSBn9k8%)tI_p zY74dbDP(Mabs&`eMgEdI*kqEhJE^teiXOG~&(s*5@H|Ybg7;v`3m^%xewajaBy^&u z8nF0py6DZQ0{F8Y=vAF!)F>*Q!us+7`K?c21n@RU1>DtezaJU%ioXf&0_9G`zGe}7 z?inj_0oPxP1|kOU8x)oi`_=zL2P+F73%p8)ZU5@zUUXS-^qt){+b+UJyLI(sb6I-Q z4IymdH(CY@m%aWKb!=VwmkSo2Mem=TTo?xYGsZ8K9Yl?fCc-h~?mVd7T}4PAS{!=)k8G$89r$5SE$bgTOxY%$EK0($a+-k7;zww&@a!gHWF6W zLi7h}L~mFL%z5h^6cL*IXJftkQj!fLT(1qn_>%&N{>NOZ$Lh*JuAtvxH&_dJBb>y~ zWtq%)6dF+!F6`2;^JV%01T`<{;_VcSplB)t1Zp|~2yo9SdP7Zu^a%+VR|)56D!?5_mmzn2XBqIcn7p?% zToj&A{an&E_}Lk*)O0#`KNqEQaMFztR_}@}^lM=axNExjxrD##Qr5;TB02^dwPg)Xjt54gI_vrqgP9|w z(V3-J;o_7FX@M;4GTdFA(G3_*Wy~b=(U#1BEW= zto>5+VN)Hjh546?=n``t3t%;85RzQYe31`HfYFVnPYFb3b2al7qUOj{^eP=wD-gxi z^c;Knd2{T+zpYjY0naXD(HwrW$BdK>wlf-;CafBF*E(<*30Fug`141F``l5eK_LgZ zMP;r&Ni369q?Kera}K(JI!tLilX>#x*ua(%$ZDPG%GQ-sH8lc4AU}wLlM|z2jquMY zt3e+{!Iy~V6hk(xZW9wWy}$nrnNf=VLvL*t!u_rZQF3H3ym&r#)vDn2uaS%Pl4}=7 zM8@_WR{}A_qMZ@WkCpI0FDl&%*T@3QhBcZ&hcbO3m=XE@hl;`8E8#CeKaq^c*c9R+z&DBc`SUrABrYvi0WqG%=o?=0vB%tqO~yL74;Mrqzh9$ejZ zDIlW*482}CKc`|91-=!IbW!v%kfgIifL zW3Z1W30DH&Yt<@EOIt;tu=}aYlJwx}TOHyvMo%VLI1DnI^GhLB-p~A|mNykzj<a@Bs+3Zk6#!PAfLGv z58A~}x0=tynJn>1Ctn7X@Al9-Jdo7L!(rky)1CdvUzmOHLe_HGSx_#&4%QJ$$RS0P z&}%;>L)Fiwk8h7KXu4<26JBOrSs~kLW1i!xbPr?G-|I)kJILy>T5D=-|Bpx0BCSwD zX&E-zU8AnLTdhM&^3oZNAsgy@?V3kK>bd~@{;in_kAz<%JLQA&Pra4@gj16RqNH4e zc7iMAOGy}e%!i?s$yF43ol`9?65n1#L+z+mz^d1B+Vp#yXPx~JwIQ`7uiKvX(_K9Q zq+%7@BZ$Sbam;`7SrdNx2p}LL-lOK*d;>jGL+R>*bv2DwKqVy*WA%FCX)$_=RTToJaLHzo&-vZ;5K7#Z;jVZ8L@Sa?so@Xu6! zYAu*$O0Ht$sH)#!1FjPtuwBN^aoYc0wxr!r{CI1dd5`mxu*po&j}>haSL+OoUFZ`@ z305@dpW8h~MBQ_-OIA?O%$8CORG4FT5JHpqH#yTm2FSM4M#n$3fDGSe5bXHms5qi9#pO89shUHUKSDwFm z??U^$^D{q#4;Z`8pYx`QmakOAsB4ERe_#e1Y?JQuy$#An2vx;r)VNLZ7@bxr056(6 z@b2l)KvywAS}>qFoUziJ-J|kw-5LqJXJI{!(?5s0ZjYVVUTLgW})g1QiN$#^w8Dz%eOzz^GO|{a(ox7 zy0lo#T@&&^j~>r>)CmzRAu6Aj0sr`QT$gQ=T!^T4p}JP~VQCllw4&eBK$-5#>zu!} zBuqK-?#B{eNC!k4NZGgzOZ2jHkVU^Zc_Tsz9xYcnF<+zDjhXg0w(#Jc_Dd2YBD!O9 zDs7N*1zeUbK9XRv&I;M&$ zP$YXUW%BCwZ#@b$U5crrnc-R5!w7%&GFa_T8sr(_2RlIkjUq8Q&223Nfh&_%)SbYt z>F7wx5G+9<&QoW1R;%!c2`5uA)cxJ=2ldCG^OJiwcYY9BEFTVmG=@%trkkGPg|E9G zbfMR6Sh2Qt7QNe5fMWQ3X}{DC>&cIDK^$SH@K>DZT``x)zj1wf`hgIa9w|CY?#<)R zpt|G#^4%FE7B|^Kpdg5gki*XdVqf6_T8g9wxt&&-)Byg{a9S`&PE&2CF(oi;+yS?h{IO(kj*$*6&@io zy%3%mu}J?Z2(ECoPwSD9-`5xSY#l)Ao}8vWHMZ({L0~s)1#2vRjd43<=gl6^)X)zX z)QUKINmKvlwbx4(_NBpSpkM2#`qq~`=|^>UI?Q!#m&9Kz(K4Q|8>R_)v-m6Xr!>ON zBk0DK6E;+t)n=9S(R_ zyU^lDCNOmGe^$Ce+An!mLo_)*!pZ#S`}{8?qm{Gy)u=xdx#rh~ItLstzHzqc!D`Tg zEnhk-ED5bXTgfg^z3lOClY)41CVl@8In$@(l3>s`WbXZ&IWVQdIa3S08O0yY7Zd~4 zgNuqEA^Rg*hcD9SnGt1+Dr`}Hh9~lA;%n-2WBdR&pCr@Kyp^Re*EOXBfapY}lj5VD z&tL0cuDyF-+yLQEhM3iP5}F9T^4?ssA!U?>K#plkVsQ!bSuhB6BS-+1#z65DMe9x$ zC@I;|-M6r4S<9+=`ErPHPW)%lVoBk{XPNoE(?>v3K!&n8~im$a*TmQD=c%7xXU_NKD1G!`eWGDyLN4WSMe1CF% zKxjM2G0cXDPSNXc3|i^bT$syr?+>Fa?|?Pj0)#iKJn|h!0aVUgFSxW>{^oWGUtuGqd*D?Q6lKzLK~8Vlw*AafBrkKVxGt=#o@lK7~y&1HxqF=+iOAZZS z37^Z_k2Pb?Q7O4>Qt_A8t71A2dYL|P*w}X*6vwyBtzG(9K0sQ(QF)RZs>$cO@_V@XOVyo9Xnz?HSI4RW?Mo*^uYK6G@$%xA| z)3^GHL*~vr!X4e_O906fj;d%j8Xn8>GBWh~;kp@)xY+yqrx*8u@S_Ej+QjXnc<%k50TK=hi9rhI zWBaf%AETstGq~ada?D60_hMP$*Rzn0y>3M^m2#>^IdE2s?vK%X6uhj;%U1R83Lxct zZ{v?$=tI*ZfDFBe1;&H>>LeR=T~OEQVrC}bFlJu3f&gp9l;y=h%jBOj8h5qs=yLKk z&P|*IG&r|#O=O}#4)A}5k|z>|3M+F!x=A^&X=*|mBIgk#Wkug>j$ax15sBDN1-cKe zrq}6tXh$nWPpPd`wlnVZ32NeP!Bwh2Hf2SHP@}L!wU!J^rB{hmo~*^}4!7k-i!yHR zHm-05GSe)V!RO?Y9?^a&G<$;JxX}!fKz-nT|-HAM`01~O|8ohE7)qv zo(oyqdh??jq}Lzl6|%6$y{!DdcgZ`irn&&*%Gp@>Nh~-15Awc#sMCJ{GSe6a(L^xBZaO=C+m0b4!Jt{;y{vy9~oTuLahk6!`dXvT{MR4Vz@V( z-YW-``ff&*41d&5trxDj$pJIT5k_OnR%q6)pTyvfZIe^c;1E>z@z+60Zv^<8s<~Z% zKc5WCgAxcp{BUh-O2Tb%d*Y^HD9E~B+(KHvwo(za#bd*j0tLK5O9!dulKKR7Udg=< zeg#<~z&gJh19`{q^@{kmM&!B13Fk?o%q=*6h>|@EdRKQjruC&x-S+gM-iNq}P9;8SM&i zT5sa+V<~dZgT5H3tO?8zk5&sQT45<#nN$qw7ng#2(oSS0FZ5~$FHtf-YhihAO1j5C zV71ii=lr+M-dXRAr7n=~YNb?1NDq$;wMSw5kW^xLOw#^@STP2HW zI1MDvMuiM)f=nJm+TL^m-3&G5b6W*yo}aqpcNG_pZcqrquhf#3;oj8Aouy(-z#ib_ z)Kau@>xx;s8M`Iv=I>+?#!m~&`gQbOcwekFS^ z2#aCcMlQdBT@`5xPCxS4hMuPQewa7Zi?h#vNmF$s%qA=!teIS)ExtuL8G@0Jq?|-i zLK{o}1iQ(gy@tJ;2f&o`7~y!yW!D2Akq?Zp2tgG{U=k+Z>{)f1REE5bjpv-lE`t?s zPbD0y+|Cyxz!*YPj&|AF3R~oi;ZE5^U`<(HQ*o!}&bqs9x{H8uesGHH0>)TUL6beG zAZMk4Y2@a+ar$cr^i+t~{=TaZOXJXBLH`gts&G<7+V9TBxES5GQthhozQW9duEl#n z{U@T3xTl@b{S7lKQk*wLQjsT;WEREcPt=8=kdDmf*R%Ycxs~=Ob?IK*vneBuhmoj?{?IN6{W-LwjpL|12uhE$sTrYY9><&rXsO4%vdhm| z`osuJW78giH!Gy`F0ZJfUT9H-g4r%0Ul=s5*zaZqt-x9sa@FU5ZKRP)Ujfega{1UI%NNnRdZgFE+!J{EfON zkziC@`SHDkNFgufkKjU{veMOHsKzw=)X z)#jV;3iEQDsdqKVN`SHOTVIaPn9=$zq$vx&!*9(K`J(ET9E+R*Xltad$=aEqEyhx= z-YziU=ozb6k#>%J%`Ip))sx7QjNpmj>YtTYxzT4%&Ba}}1{T#0TW8taAaD^?95Ioa z#vMQ7ysVc-Fl9+6EPXSqx$Di*${HzubrHNBRL0c&8vNTi9Z*DAVI#1m?=s+;R@|31 zq06dAt~&f80P(N?MENPe75_o!Uu)zqX{=-1N-~Ntm`k#Hjf05p?fm-g|E}AXHAV^) z!llZti zRY%CLqlgh+jj5n0cUUxLxS_D+2g;>DWgGbzg|gmy_T+Dq&;jX6_*jY&$&=va3e>C# zUd=WqM%;U8_L4gBfkTh4k#%F1cql>|XwKnV%=j$3?-km6OJiHbq;?Kn;0$!xUh!F? zGzOP*I1<_k%j}GiZB2R8?-zs`<2AGkFNR_qe%#^ zyoXEJ-N@dG>iJM6yalBt?f|^n6*`!q+n74e|Y(B{MKBdvuwz>{j2W-FeKQ`z9MeStjR`6T#MjNNF;NL>04^lk(%oeLn z)X#M#3`IZK}%?Ue=odNY<64o;W`4GMpQa9hzI1zCgsZMgTg1ls`*c zes?YIMm{f0DC3sahADlBFdy;D7jf)dK_5Obe)8MqrV25WjA-ZibH0+gHOX2Kgihn6 zFdKnhmmAetn<$BFU;7{jjKp>c2QuCpUgo0qmp!;#t3egaeYhNj;B= zu(O}@Z-QEm<_!CUA7;`?(3)Fg3#g{oku6YnikW6qAj4~$DPX%KhpgN2%Tf^pEoZ8I zeM0KH>e4k7toxRQ&1r7!JCt0>O=vl185lG@)$g!P8b^~UxA<4zm_V3&70Sa`|vJzt##QQjolg{ zpZ@3-4sS!r7Cort5T5U@t-^U+x&KLgFu;}NJ+1x2_9kPEgV1=G?)>C>%Fj2sigNM= ztTTFV*au^99ptJzyqF|!1I7l@NGVY7!GnVnCXE=0mQw0y(=}T-EwC)iYZv5e(h0U> z6z~%+PK$1I*G3QH#QJrP+QMZzr$af`+`*6haZ5X)HOBw#N{JbNGFWRqI}X;Rihdt= zAtp(Nx*hmPx(9oo{LZ55u$%)Mj!pGcy!{ewxA0wzXJ&r$VbWA&i^ls?@GFgXz0EW} zjz*wi#tY{LK#;-CPr%bkPFbhy4IJd|B;m=`*%9!Zp^QPe`ke*VAOqb22rAa;m|G(( zH{0Qk`F6(ddw$)6=xo20*{`*0nDOcJ!mJ~$mFZcZ(&e%$BO`9*gn*q#OiBk9FhvDcs%~Tl@DRmY8CrX$}|)jrM%d62zVNRXSjiMG(5x zcs)sZ7py-T8YR%$e$NB`plWkbzPEL+JGT=+kqze<=oJptlx#&$IL%qX;Sbx(jq(3n zd(O@cFUo!*_*Al1g&=FJa1LJY>LH(a+n6^QpRUe#S+gNYh(89zaghe~6FT?Ix;HzW z^S|!fl(Q$~$1oRp6o1%tTh;-7cJw%qJD+8NY#;iKJwkP~$iFZyL@m>ZCN0hV{>KD@4%FP5( zd#ekaiBijP#FYp%Dk&UdTz&sYllh;>iJ5Cg9||3` zb-+xz6Rq`@MF97er(n1sK0r%y$U7SvlRBoX5hJ2qr7_pw!aF2r(Lzpkx8|IX%6E&= zSqL|vC~(!2vF=VzP6iDlF-lpwn}rCtSBR_lKtw~XD5no=_L3lDS||Kj29N(}u_WMP_YC zp)_tQ9f;_TrNH{co6ttilt;HFR@<#zCeAu8;Jib4je46||I3|BOm4fDdoFZ?zN1up z4hvr1>&6p`yiLW|hr{+$#w}cyx!laqK|-77wU4hD;bXa1Z(fsE26E2JOk_{EN?)U)8B@WAnb`yI1tblaP&2 zeMIS+{UeY^+l{Z6h|liz^7w|8EL`I>fq$qft1W3YD(y4(NzhR;x{8O8HJZ9&|3$@u z?;5{f^9u&X&6@RGTnQZNK@8S3+ce|MEn1t7ec&05I7hpHcMaVf5n17t_FooU+UbDa z@QLi=O>ZX}lm!$llS6%8g^bj4y$U-VYz2GU-jcoPb{k414t@@Nx^TX?1fr3fg_bepyXC>5!N!MbjLE1p^jDgfxbVNX&K$cJ%L$m%d;^@OPa|Z;{E^ z&AB%%5mV$oQ>G0xo+#;BM!WgGjCeYTa4k>{O%aNb+I!(UQBqkm{aMehOStDcSIqf+ zZ5BJiFQtVOU3e!zN@Ng`6Mqix6aMZ)=YUp5c`csbJT523Fe~Zbdn#O}GF>1Z1Y-Sv z&-!2FgKf@sJRGb%qq;Z-$+{lHXFtW-Xp?(x_%jZ%(nJGrE>+YR{dkH(MW z&SBWzf0IjX7OO1t)fCRL;Gw@=?DsXuKr-c}+5IBm^cvo3W4U$DYr9v)VDvrri0auu z2Y}t^naQ-4ZLB>vqC+Yb|1}SE)DU;8QQ`3)*0N6Sr3O!4dg=yR-eRUTl#Ka zSBIiF0mLX|%y09+{@9FKHX&S2ixw$WY-5`*aaXt!ZSw>3jtDo@e(n4L`AK8Lpgf4zXF`koUhG3Z~W^LPyJS zp$ON}qCu(%S%aH#6Ip23VCP9N^-ki@_i#QuSsN(o}9Q=c+JtR3Z0P z<851`?=r`1%FSu2``8+jRJFLKZe4EIYX|;3W$!O5ylFJQyZZbDtmrX67>^9Csdh1p zd^a&sSrzX022$jEd%L+s8%3xnD-`oE!GHDQskbwBHGqDCB6ge~TedJ%4hfAp zdc6Cv;H~W5jIlL(F>l~>nb@;2WQ}-R+8L5Esg)T80YVolU4D8=a^+SgV!m+KaVj3g zW2IdX7gwkDyRrGNej`c9QJUB6p0=NL8tCjz>9KQ0%F zxIjWx$Y)Ou@DNYlhc(UuufwH?(8{GHg|B%dotE6Y>M_&)Bd1AGSv6o8vfE$cGit4f zxHtA@m<(yUFR_WT9Pf7=QfG83x0$}ZpIuP=em5K9F$Q)2D>_c{`8=G^+Bg-TnHoxc zm1#0U_Ku~qN!j>QooBKef|aiie3La17Nq~QifJDFoV&rPJ|1NWh8SbHRb853)BNf_ zWam2mk9iCRX$$_;!)S~1(}&0CX9lGt)jm!RyEKg)Jk9ru?%k6D$w84IfM@v=m;BFJH<(xo#3=&n~O+2sRGQJ#F+CEL` z&UVLp^88n!Q2S@x>rsCLzjvT`4o%?7{D?>abNTn$g@iviVVVu$*ge$u!jFn6yoxz( z#+g>>RI@i*PPw>eQK0bbG=@wS^g%bfV9e6y_QgCWGK3Br3wXm7ZqlNzBuIbsI*NXq zIIz`9R!X!8$8BM1PMdnh3caX~g_8BrF-G#|gZTm`SADv4bLq6HDlZE zZ<{V#rXn*LSyv+?(-s}vCc-IY-3*6m%Md(i&vm>?r|7B4)orJo8esEJ0Q0BY z88B=h)RC>}2K-wYY@L6O+WmRrjBIQ8aU*uqKd~ELmu_vI=BMk<@i6FeCMI*%1LK}Vsc+gxspX6n;F}|K4?gYABrU9?y$@hM<#9)-x95;x@Kd?gM zo3Y7B!!A_+$Vrl~^NVXt$n5-l9&o^Zh!f&+>d6Y!qLt=6Df?t1-TIYe1^o!6{GYVn zfQ@Cf@#y+qAy2qmV%nU*=Fo@QDSfRjm(TmIpA*YSACsB#kMK0d)todshQm7?X(g+nzzT zp^aah`~+D~Y>%Cwmlv|kEm*Pb_Ca+m)0Xq@Ysvh1E^Is}<=i}t$<)Dyc*<|`N^p@j zqb+5(OqK7Mznsgy*Z#L?-u3u%Yd<&hr|oQW^ER(unY#vPV-rX3CJ2Ayz@z50hPJm3 zQ2d69)95fkIOm<~ImxJV7@Yf~C}a_MZWM@(kF)Qf{TdsS8UCD}IlXcM&2wZZK&ts$ z_tfV@DU9s4SGW@OCaT>wxtx^C_cI&h9n|ihopl2VX+XHP@zcP{_MP$#*{1Q?(qmsE z4Ve=%`_}l$UuJWkMh5}2oAY`CM9f=$w;p9VJHCu8l2^*7E^V}>|J(efja&2znXeqX zQ`WK3<{X^z{&vZ5JptUA%FbsU$@x$op5^xnY~<%zA6cBgHIePN{`kH7%nld`^Hv#U zIS;^dz;n$TD7kjBFV?X(e$Q;LQ|pP zoogxI?H%sq4`pGz+Qhp>5?h)sqc;Pqq-}z?v1`V}a>;hl4?w78Gdeb7%h9}^U=09% zIb=ls7L>AVpvuN~d;Ub5ta;u}$@k4$8rD`Wc}g9%aZTMx1J`(U9VgoK)AKTozUMRN z17L4FCk*uIhojn47Ke7`Grx>$2j-JVrwn$G_S(`|b7Ji~ZM6BAI=9u|bR_$lGM~9e zrq;m7d^E>=(g*XJ?I+OAd)Xh4Ym&k6X16oo%jchh=B+=?b~ZZA9Reoz;jKAXDj5ek ze{7K9sN_r|CW7%KAQC46-=Y+#Mc_8_@WSsuYy?1Xn?s2RS*l1y%mJIa@{NfGEI8<5 z?)hgmO$h{;khF_zGEJ7z0PS+!Cs_I?w>?JwrLUwka8s9$2Q~jEgP&!s#MTY}PDi%? z5!%2^BlzNtg`rv6@@6phBDlWBddrp&~NPf*%X3LsvZds$PKa8)JP||jN zgt84U^^pZJNNCg?aq?sNy1e%=wC6m}TjZa5u~CB1Josp@_PleZSCALO*cMUw0Z+fA0g(EqjIjB?`)TB!ceBF&1VJ_8xL+P-x#5ewzS*$ z%1p)9uIpwz(suguHl~|HegfW@i)~Mt%a|No`Tmav8#nq=GODdi0%U`~8z{~!^JXh@ z-0)d0m;NW~MTZlRy`Q9rZ_nlT7Ui74!3kuzjy4Wi=gG(!a5JY{bhqh^>vZI^ z0nuAVq205wrk(-C@RdLCgN|h|;mm+_9$?AaRyk&_tI4j($lo`o-Zo5bI*|@+qxQV# zP0H5P_I+jfkrjU@u>b9ldA>#UnRRLRJU36e>3}w~-A&FdGng5}7Q}vuY}Tg#3FK^_ zhw|0jv|s%A75$+P?_Pvmi_MteEbR=_D6oFSn%o%GnP^jPqR)9Y2ZYzl{2SK@6~$-b zP2D)YRw2i3Tq$Kd>u10f)&uiJJkMdNBGopq2)9p0%QLjmW_~@oFuGgL?cd zV@WoGcf4DMAst&9YhL}bOqot}EM^ z`uGWW`j`%3qXrgijGj>T1KUDfxvXgCp0qh5w_{=~htNs%+n{mk;OFk$hO?{QTiQdRhjk1=w!Ke769>b`ty5`ocJG{mtcQe9~JwW_Ogepmgvq zhqE-=VM5QKdo3IqW(PnJomnVGLkM8%r!3A5vA|3s3Bz=*QF zkAa^bbsy##vNZH*?y;A_JSVDrA0)k= z0NQmtr7ePPaxpJAozMI3&nc^M;?46Ved7%fZ-63sq@PgoN!A(vV|(oYCg0X-{mgcF z?v2RJlbG}vYyIsvxe<)w#hXq$F(6@-^Xb(jzhe1X!K24_PID~#62h@AAlG9@y9rf4FCM+ zKmQK(TgS=BFkb8%@o%>SBn>J7hsY1P!w-|4DDbwqEM=VrD`kwcn7X}>#^4Y6CD3d^ zL<1QRa$!Eg-(wpburp7+ zG{0Q;{Vz)<&i{SywrpbBmKZX-n$EZZ%Nw|`{*!U`@*8sy83Q6bUkwH`2(g_Sdc(0f z@}JK*BuAS$5IzDFV>d=+>hlhMKgUl;PkkIfLj5L;KhA5)5=lBTM`)zj97*OI3>L5_ zb&}B=&V2abUWM4dv2m*meCfuwK{c7^Dzy07@TR$C*;Lj>KHA$0NxAm*p|8v$p{qWxiNe z1Rq}RgV#(o`&THjA2>KUw@j>?&uIgDu>j8oVE4P<2J;-wn%U<1jCnaDRIG&@7&oJxn%I0NAO z$g&X*6&@Xd;k4)%1_$vYsALZ=utw$ag6$ zaY+Ky!)YX2_`Cyn5XeVxXN8HXx%8k1N0mV_~Q5 zej;=CkI$($8`%-Uqn#*wR+xww6`Z*vMdUW}9D~qwCMOaG&cMKvwUILnOlWpm+qsw$ zC~Z+CGN7+Rj1>`Nf-^f;B9rE10SDff!MFn~azmw^5bY27_fY6VIwS96u+ugeNdUyy z+hL`{C(Fc=UDGw@AUcxud$TQiPCYmoKs^1yrsc0E(zYF$0~*_vMhR{_r>sjh?93PM zMX{su$)D8gIZGf%T^@7#YgslTd*C3;GG^?^=y6Vr`$9$)eQ5KJENO1UY%)xMLEquW z*%tHc^!X6WD#!xfoSpDk8DQYU(ngt(NACBr>}+GK1B@L@p+2La&HD@%=s*6}`fPyX zF=U=v{=W%-TG}v)PC4y2gK>8JJh*8{{cAZoG9n$Iiokql1*VP+s4@Gevmmb!}+n9i8V#)ayrlx z6n;2Pc>2H?khc zLxNu>&G1BI;;}=12^u|)8F3R)n>TcttQ5QUiN0(E9nGRsc2<0zzLE+~gG2wkOu;i|#2)nJ}6neX`)4{2=LAnOH~#W2$@ZIQp&B0fWn;n|<+;#9Dppq%=)FTsf#;<47zqC65MnIN>L)T}AYB`{r zcEWa)=oj+`do|Z>Z(TP!Fw{0dJF0GTAN#;uB#VG<`b`f9QH&>!*M0u{`S)*cki9^E z4Vn^^cpM1soc(YH(jd$rg?{5lU3SReF*8HhFvik0*?ufHu>-t+n;$Kds22vd)CkNo zsplCSiht|~Ldh_^Q@^8}jVIEAUVgB^K%_Z2P(q?lza4;(c^2^DUySrX@V&hvat;^`(@Wh@Ozj4A?;vCV9`~}h`8ygNAQ;hY< zJvTsNl>A()lQTCm<6~a7NYP_tfRF~2I&uS}fq6P)=JgQk?brscllA!a?YF-#fN`Ar z5Qf=v&|oq%U72#vy+a;Dzkx!E7(KEMk+J+*GEnWh!5Q_NN61+NWROmqXUIlk9|#0+ z%+Andv`r9}nM${V?6d9U+jFz|gq$y9PrYpBam%;A?3n$>J@<>YS*EdH$m~HnaAaWH zyUi6ZljLS`XMij-XLCG1Q(k}=>Zd$9mG*D@;K0*BUohQKA=Q6`If%)c^BT$WZ9)|q=FkfWmJ^LHrqEjYIIuP zMhJrlXs{!6)Czh}UGhZtB=fSFcWt+RPgyqjGJb8sS~hmH=7n|`8ymAJ3#hfe!3Utw z`!-JGC=Z>WP4>+gyl0?*KDT}v%vv6#OP#@Dtlg&1^03ZOx4}AcWYcb28c3Vv&lp(d zC7{HS_}CHKu6#u~DKjhHKjJK>vwid}mw@0W`+%%?y_vG;0*+?L>1jKq+&`1LVOvQ( z&iGQ6F-+T)K@R_&@uEy-yppW*$O^lhdoptAWytbKvO}jI_$BnV^^L&6zRlV21`=&A z?ei=LXPh$-Ll+V>qRTn=9Teu07`)n#!zXRLZAzYWGCD2V^@K{NNI5!?@A&8QkSEF* zWp9GC(2Q7(r0qx%6e)O8(F}SzWIy9R!xK)Xt$%?^`2|YT-1jSy3^Fn!lDC6T88UHm zyg0=&+a&XX{OJ$r+AM2c(+Owv&2{sGv0+(={Su_0w@5qJ3+X%KLm&LAt&JpxgGebO zYiEm`Ve#_-8Q*UpDWe{bKW$NWf*4Owj1zrfj1qwGhn@p4+kED`_pc;hw8N4aym$=l z+}$5%7~q>Z;kh%q<%k9Oj{~+d<2(^~w*yFH?d2%<8-2^)Ou_J5)}CYT)7;A)_q=Ys zomgi>jf3Tt#CArBZ6jbl4>N*qj|1R>Y#!~=Z*-TkEnVND?`+q^xFR>thqfH!r6_2g z_W@W2K=7Mnz~w{ZayccJE6k7i%Rras-EWqZogGPlVV?7~VP`B7l+q5eWW3RBY+VbA z>3iCH^V4MMWh&cJ>0iwo^FAcuQFV zN}Ww0oeGp0 zU<1FY-^;2kAaDT4b6)mie8>XQe#)uY6vo>+HN?IX%Z>To0?v)#nKqC&y1HdJ{5&$q zC6j#CS)IJ*tWRb((&l|d;D{Jl zc!obyDv)_%9p5N9*Y%xRqK@V)GDG6=aHPd#-awP@c?pGn`u8B(c-tXT#$#k-g?<8v zoH=5=`F#dQc0)KI`sAeyWJGGta7NhZarS}DPGp->e;h%(@BH_A?fhrY1bt(_Pt!}thMRh5n`{95dL7^7=(p)P zlvyM)8x6!Y$K&z!u6H|S>$v;Y>cy^%{@dYtd6N18oCY*$gWU%F&?mC1=#v97J5bA> zx+sJE{R*XjB^Y993!7;j%0MLTFgAg@of&g*mUcatPaw~4+a7PCPQcgvB{BlI!;8;u zKu*asGGQKK&(OtO8sP5)eiCq|Uf~~;-YAd^CS}EbCLMI9N3y&TU2D$*{1!_GZR1WV zjvek0sE;*V(nmxvLtd+Q+sQxV$ewoW*gfe{;MPwjBjvWARyMWBzkxE3!8WeR&(?1o zWwyWZwr7+m=nnWIa9jn z?A(UsjGT}W(Fc6k=;Xc)I|i1qGQFAob~@eT=ROhH(LbCybv0nuD4qE5=$}T1Z~tzK zqr-WQSBVomCy;t zc1n5O^TM)$Z^qC-G=n|BdICnjdP-UP?&UN0KQkllYmRrmtwcTOvinJJm~#=`w(}ms zXE-}zy+USo;E@PFqp)S0PGl%={T0=G}4(SuhtcGgzH4o z`5yidlhsi>&*4Ni{qbjjQW`b?iYI*27jNJl@r^yTf-IL}%mL zxTiBfu9h8O%$b9!kAu@78{rvWUe|N>D4jq)%jaglwz&+=J>C>TPM*h^7EXJG?lLYJ zJdn8pKoBw788`BLXI#^je6<}@*JXJN#OHL_@j!q0!ymrOe#;7M)SS1U zKRM&JT$A&;k)z!Nwx5*|9a(r>lb;QUnIC5;9lbYuw$%%u@vG7KHV+X#a-km22Qq!s zX}xzwg}LdB7C}Lau&Iy!a88ZwHs_Zh2kR{Vaf~j5llNxWTw-t?Y+iKK-2fxyGZ4a; zIRh|%8N^x^9&hA_EKJCvWuF);`10}82~6Pkcu-P0DG%6|0eC_;a6lPfNAWZL1le$A z1mS*B&S@ahPc7M_;@lktt31z&M}>7%A_o*xK^knrrOrXH(^u$o_CF zd4ekR+I-s~m=8a@IYrhuyyIx`y*~grBltetY9_23pjW%Lq3xU|VQ@ z;W-_s!EqzcnV~$QxSb7QP~my*?2@U;-{7FVDr;ZYbk2RGymb_tXQ*bGB_&q?{xSc#M*G926j9L z4WzQ%5GONw?y^3foAT26=2DCQXC!4xJFtQJrW2`8UzK{@sM$wnpXk4Xk|7^gkIZiE zWLEE6EMILPV@Fv(h-Pn{OLwzfAXZo`{S?d#X)838L^*5`hjr&C=|`)t59WQRir zhw-x^yU`XwHHVN+itF&Vktg)Gvh3ABU5j|Eb57A=SV=7s9j8MbdHE0+*Uje^p%QIm zw!{wCaxjo$-29rP*Cb6nip7Z8yx!=`68&>8+ilrixnPVoqw0vtb^890U-iYIPd36J#m05WKf#=B=63)A`rno&TB?)lpD)?Mt#5WZ zZM@rjI?b`o_H4m`?PX@Q5_G(3Lox;NN^ z?@b=ecOQ7?`VCM$F8DDvVGd}>_;23oU^`X`M9nGzSa|Hv)Ac|;UP1$$rGP* zesSGFmizhr=bl?doHjUx+aV#zz)4xNvk5?c1ZZSio3lF^fTxl5MlC}52xW9+p6Oe= zm%Knv08}FQcJCI2o5&h)FC!!Olh3qu0|y(O3`_Fwu{u5XguazDc(%>kHw`GIk;~6p zwE81_yKe6lVNZn@nEh(^UL{A5H?niew%yOP9~*!k^11hU z(3b0d)n;sgj_F725Kf8+5{K+)^han5P@o2&Ha@MRr?yg8t(!MG>Ep&~bzaO>i|DY{??wAVN29ad0bzpNm9=O{eQ!Xjn^h8X=mk7^w z-lB(%Jm^m+{7G)@JN26qI3%ANA6A5{XKVWjNN~HPD*ZflZ|HWT26i?Szoh_)JWQD# zYxTOGn~c-wxbBu#&F4+lsoZhh0AqXJ24!oT{Rx!ud+D^vobp-j)`ishlir!P%$96C6RC~_;qS?o^(dL&v<+5gGx}S zos+pqGzfrQF{Blweus9OFE2`arx0UZqerE)M&rS zs?jZKZ}q1fn_N$AH`)E@*koj4qn2{}NP8Q|`>4*{G7~xGDYIs5TlRui8#zNEfn5WJ znGQbb`sVP>*LHvVOxbqb?b-38$TKBSl1g7 z^fey1j&mZ50En|Q+Lp1Ba;)0;WciG4H^+Gjp!jayPvmx!S3BKw@ZXkf-&R)xz}sB% zwX_QfrrMma9<+IvGN%47`QsCyh&l&38g;ahX5y@BMIIhvLJju*@V`1yPv^W@|gYry7{-0+&pHRuiz~z*Y)L)rD+6k zdCP`J3FaV)X=IK!<-5^NL;Tqg*NuASGe6wJAr(HV_!a@3I_q@L%`lx%+9t@RP&azw zMBVm@hjbXOzoA%Lu+nk&D zo5s8S3(qzimKmMw5BE;K#d9|8pxZg=sd>yYw{c55?`uupTL9neXR|Tr!EXQpjg7+3 z(WvvE!%XHLKYi=eLrz=^5r)zTgFvS&2g8^=aW<57bGn-$%lf_Ng7!|&T4-r>+W>NZ zYv12nWcHEBJ)Q8ad^0X5gP(P!!?%OooM-!-0Ok}ux4KV}{nL!Y&}nVbIp8-?_X$86FWcE3`P|m7>);4v99A=WuCswD+DU-ArNbMqO_t`f0a$~mTix)ql{wKC z@R-PkPT8?*{J4{Uk0W*0|DVv4?94_DjBH@H0W*_R^LD!U4gc=PiN_W+z)L=#_4qW$ zyx#z3w(qw5`yiV>cs_3c$9+l4SD&Hup@1>VwGr1jgs$1EQ-;~umifoK!%NMQQ<~UA%G%oB zCbI7%=j4${?iIs#B2R>qF-)X>0w&bAea|SMwUzY5P`+YJx91ZfC#8`}(B$V%{N$Xt z@nvIsi-5E2=G1R(PC0(}f%g2n5{-wX%v3?QNT~HQ?S$Ld^zrj0EAUZJkdzUriPI4& z2S{L?eAI8I!Ef#5yxJUHKC=P2MxL)t##xVnEOv!!?L30Co9X0RTTkX@_R#<*`_-JK zDaWJDfh|gRz_fvUXU3`1JhVXZ75kn%xvngmz7%laW5B;3ul(1g|M$;0CiWfhYg`5g zG?a+NS%i6Z>fivCEIW+wYg_*HG88N$Fxn**YR8^+HdfWQ`UW?A&dbmBk3Y6F?=8QOb722DKw^jX&d ze~q8!4AR(BHY28|k$Sd|&iK%yHlGqyZ~Z%go13A_F?Qcl_k23v20-$9M}3BXa0R{>st#(+xVQo?&dR+m*nH?*WbV0(AsqU{xP=(%(0EB(^)40yAOlHH*;nO z&%bLi&V4TAPu5aVJ0_FQ>{FOO4ur8|C3`U6Ck4j|a5%;1typYSAct z%Ii00c#?GjHJ49-^~CtPu5{>ruF>Y?nj<>_y_CnzDbF*!*2r9D8PUd`w%haO^Xu31 z5?kXb9bGHqa_Hu%uNkpr{m=$1PkPfpGg%nxxp~dszQ_o1GvFsWIr^<1O|PHSM_rqv z^m0QR!+iE+OHO0tKG;Sz-Ar55=6Tx98+iA#N$5eVCxgxmgtli}wgLaZCea}dF3X<` z$V}K)N!bk47G)u~=^INgY~JL=${Uj9JG;@hBXHd>N8l&4 z4Qr_aGpkbkPL(J3pLX%iC+pT^|`m_7cR3~n-a{mnOU?}=_9E2srvZNF05XfFli zo`&tsBkE5|(BZLQe6a(3ej5ipU&b-b!5%O@5j`g<64`E!5=Tcvo-8&<-q(O*Scx`Am4M*$WzEgcwt6>uVpwkm#GhNgw&>mZ(#AFWp2jlk zq@GM~XLRGXQul03ZgOFsI<=TT+q(hoG?J&bHu;$kx7T#;3D`+GMaQkosq6++%-`4& ze!`sJvPk{Rd1VLV*T~zFY11En|A>sT4tUIZ+wuZsvyYU`jinn{AqZ^zH$d@9;9z;T zz|ARj$~q-~(`!Eiow8qc!mj`69O8FU@U70ed)fU}U2tEhm*e0Gl(_zeqN3~&k^7MM zB&6W^&j2tulwRX_4FTHT7n+jI;dnpa1-ux~VUhNVqpZ$cKN} z0JCA!nHAdfYfeK>%>YiepFw4<((M9n*imX~(X*AsGEalFDNu_7`2Hl~*$hConGVg@ z8?xTW6K!)WTZX{ASuQPFa+$0ne`a>b`)S;cL4fN_-jk1Q(q~kYhI*5w+kFDEPSl>a zd@Y+6h4KC5AZ|v_j-ZXDodMq|V;;D->0Fa3b&Wm1Kr;`KFIgz;h3)EmCnM^OVXpg0 z2D8a9`+a&gvt~{=yZ;b8-*{`f(8`(rbiDa2eRKWpb8Fw983(@mKW&`ejIb=4ZEabG zxi*=3G70S$P)%9S5I^Uh^0JKRU+aI8`|WYhb1mG?+k8oIFyynu`MF*T)s-LsBeWrw zE?k#Us*$84(IGDpeERhJD9>jp*uhRlg8dHg>ZmEn5qLw@e%5;*c+Q8-_?h8>di*0- zPS-Kv?DQ};rc~%Qaa%g8A#!Mo6fti38mN^DnQ!BBqUOM}pAAT4xy|vOjC%IL*W6A< z?d%cpQkutM#+S6K*9Ft)o}BXrZZ=1m&cv@tC8g0oU-LbE>e~!aW=c{{zUSvRO1_wD zUgO@<>*)yc@S7Ipnl{7Uz?<7Q!QaRd8^YXSPf>G>*az?T$c$lT=T4Lne&aRE-mYa} z=1g#N!mU0>%sIDhx0}ryYG8-?%968B08Q{>dukhtt@qel=iHBGAFP)KK(^D^Wn{*i zLiw}O4Uo_-d=eCAc8YQylMQ^kPwvZ*UtjertMBst`RAX%zg1uX`_KeAiMWjNoWRcE`@)2*N8Gl5F--00+RPelJ&Ryb|+rF`<`@kpJz zWl6H$982~)vAj6*%$dtp55U#+CO@q$^Y3~vk|(~0(wQO8(F6FIe#|w~-18ChZ0?@x z1Un}HIh0uf_hXZ}%O*e6={C4#*^*7(cyvUXASc_j-T|gO$FMB~p4m@c$0zu7^b6nV zpl4npJC=o0zRZn$gAc-{GpqCNl z{4BQDAnJXI0dSDU6;uTS4H#G;-arB396}%#q9bb}FN}lVf}sBSKKK3WlI|?Lz~h#_ z+>GlfeT1+%L~7dvX!K5I06CCBuygTdv{7CLB^~08clvxXY|Vfq8g+k}MD!I$i7~SQ z_p*(%Lm4$YLdxuf0h&Qh>r;+>fn!~=HPG1jdNQu&b;tk!J`E%> zz$Tm__iZ7;#*oMNteFk+>7cw!A>11*K@aChL=^sHbcF=(g38OCq(J!3vG`*b)A+8 zd-9O2{6*$87 z$yr_Zm;M9X$x4_fqSQtNJVR|KydzuMv%StN#t{3$n2WSMHW|n3?81~G%k1&xGjoqD z0k+85S!Bv9@CLm;2#gFUeDbWx?E~Q6Bj~@jn+FTwqYMbW*P(%s3=os%nvVc5!3Vsy zr4{>^%sylWl;^!snM|7ZAHJotZwBZIAs8!E?h&x@;TcdcPT#+NmLOq-*M0@k25^7@ z=!jQ18#!Vn5@y2r-qdAfWn!mOHmITx43Zt4*Rd@(C{wt|$B}qO<0xkv69yYY=M&x< z0bUGRc-}w~qc%kPE-9V(^qVXYav538Z+_Sq(*KjwOLRQr)_$&-dTd-bz?4yq(~cPK z&4KcKoA~r6+sX;m4$(vGlz5T;C#V^J37jWvG%iFwxp#p2Jg)arQSOr6I;1 zoh4(Lx{~u_13al4wqH03&)p_3h~UJ57yGfi0gZl;Iw!E&GL?)w0Z`WC?;bm@`$v}y z5ZoST;|u|cQ>Ty@<(V_I(e`0v#v#Fh|5FcSpw{GqT}r@fXP)3MfhRn2a1i}>Mj&mr z>$C63y#Xiv9XQr&3rZzYL6lA#}Ueg^pcs;*Oa-0EsH#Tt4qFc|wyx*3j z8bH|`Jl8zeOy5dov4L62rW5x4bSy1`Gq`iMBl}`oHBOb~N$Vsa0ejYT$$S|!QJSi3~St8Z8WXgOn7;wM<4^E@gmyDb(Q|iE(leSJUg&e(^mnnMN6#fHn3|t&+AmapNb8UhikCB5D z^I#ptZW-hwr_=ri>m23WmV+7x3ACT%PhIo(yBt&+i!@9b)xqEl+Bg6lt0#~J{H3Il zSntTUDH>Rzy|#8@f%+N)xq$DR6ryG7E|bJky- zEZew6Haye7haChdQtE==1P46lx)Wfw*NTx@>aFYaW?vkepQYcHfip2)LhujS;3$|& z@L@eAAlXvL^o^(*N0ai%jDVj{9YB5rFP42Sk+~k~YD;$58q0)W4~Ie-Y??DAZU_ES zm*FeN6o3cWA=5wn4a-VfP{Q~aocJ)g%0XiPGWMwCle*#J9hghgPphKfq`g< z)sdqeE9f)V*?Dfph$R?LWUtr5AHN7{gN4j#n|`p7lL>-?b3YZ`vam7Z|0%L)&h^`0 zmlbA=$j~r3F^&*@N4FY~fhRIRP6Ou>k)tql*vo8Lr&Gvj__MD(n~{Y30;MCj(RHxk z=inb*y}i9*{=81g9J9^X*3Xj~F!Ef6C)+EsV=Y7CY#!H~NkabCV~-Qd2LR&Hsob58 zoxoWcYz{e?frl*E34OUo!_fa@h}>UJi>GjVoqG?4Joz&9n9&veaN04)koJh20AH5F=NUj{+BG~m9cGfVRRl99iEgTSbppE)P%Lu#`*R|8j{^FhSm z-Q~#N=kz=B_C6fy!;$fPMj<$_%n%@7bii4(T%u_*vs^!Y+V>@S4gtg+Nv4xa{&;QH z%Wycy=J;tZUwt$29R25%(;@F4N}0J&w8wv^;~PlI_MOtkW-#9V%^Uav6f&+{&+LH# zG|!>O4QL>1k3aIx$UC!l>0C22KwI!d#t=J~Aj7(5Ajs#8ZXI-S&2=$1hS+b0-oY2n zJRL9NVSs9zk6t1(#>W0Iv!N*?$n9l$K#s>HoxgSNwCn~b;=2P*UqcpKAa0=Z?yEk% zKqx~KgqheTZPtZxZ12^>F#i!w`@I2!2~y5P0tgi2;2)CWjR$xzIN17?Sq=oA5xo0I z_F&p2I-Pr5#|fg4^aJH?&MYS!lOFO?&zvmjbZ_#>{($-Kv@DA2ECpl0(ukdW)``Aw z8YTT^`N?Ry85RG+sK>#^g6lb6$e(h&r80!`^=q6%7;TRM<7zPI2y&YXIKgzTfMVqA zqqe=4+oIiE>osVGXLgelZFzS;AjVl8=0|hnjdG08N9%0Lq&M+ zo412PAI1C|9CgG8Mez3GQjvIZX3g^UVaW{4f=DOZ4%f3IT5 zds{p)a)Qu5CXk&qOB$YN{uNQm`_LZRvpzZ!^5pWn+Ks0)RB1d61iS&#hO!wGp!l1)^Sx?-@93zZo)j(M80L8nKrW-hv20RGHjzowR(Qh8;LXFh%U^qUkd zzn@@AKtr7wUAxXEBV>y_(0#zDBW~BhT=94~JC*WFnPLwdWMK!>{+j31$Fw_B*Ng@H z04^Cj>;P}8QJ2YJKKo`+i5)_2%&n<6`@=nC&O9?vrH!=bmYdrmqYH?#V|JgM!E}1w z_AJtf^j3;V>!W( zqyIKp09!z$zqvloc|%v8*f-_KHnim|CQoyS)NSX2(Qz8o2F&~+H%HnDP$0$!%H7Q- zM}AIuVx)Z}tTRV$w?)=1?e6DV%D$y%iOxvLJCo&11^sq?Qyyn#2gdUr>qeF#pGtjn44 zgJ*Bt#ff^pko_d0hkOPNAe{a;z)b(#Uv$$a8|LzgZBaVev{R;2aBY9(OaL~#Wg2Zq zym9*|JN+?tb7HD9;iB*$rnvP!=26 zmN`PcUbD|N&^*wiff*c=bp!NlSrMH%8v)X1Vl)srH2uTr8^~BskPF!Z>tgDt`SRF1 z!!u<-{Z9MC1A6Dz&78TRKEEpFxd0gPvrd!ee8oX=Hb@=%C-f-Ho zBq#rrfuCjPAdTM-4we~kDoD*zR3d!K`WQLBr367YG#4dpKK82_kJ@ z0cYNXN*iPokf%4sQjf{~`@Ad%c`1+f4Q$}cK9YVsp|p8qliGOMc4JFDw_2dqg6QVQ zlc%(mo_jeT-fY;~1o}}*Wq{1&wocLpH<7O$4fSTKe28mKvu4`=DF8b4(@~|f3uypM z2^`q8+>!VW#1wkN0~0F>EIm;M`gm~VpsgSja?n=0vt zuQwyWy_23$X87^MbJn5tje0T-XfR|ahEcLJ2jZmv8^wAZI{f=P&yH&FjiB34UVQ8Vq$?AaUy;GZ$CvhU?hY9Y8ishl4KR)r3 zjkq|6=A3BXV`XECGa>rKA+T)W`NEzW_LZOqM6u|WKR11X{EmI(tmb_KIZi=aY`Na`L#DY z%O+c*SL%e=AcqlU6CzH)^7Y2kT%P)-Wd`qD&gBJzWM`HDST;!XiEIQ8A=9LGV1CZ+NwXNGA$ktf9Nj_P>FA_;qH< zcEb8%5Yucx0w+5M>KO7F7UpZnuUhgS+u6V!JmpdDLw25)W6FTB^~tE|ycl2P?Tlrn z(0N7LOF+&hZT2(!We{fhyG}oE8$i}7^&Q&$Axp7CxhdU!ZPy&!CNOg_V1IdY@HaVa z_YHFGI~u)hP8p_tl!$)jJ^Nt@!7>pT*jpW*6gK?)Psfl-oPBDJ_Gy1iZl|TSPn3g} zlXye+ekOs6)7>_%wh4*lAg!861$aVhNbCeW&#e zaK1(=(|s9&H;>VmFMU@%{I#)YhBOT?%Re~>{Mqk-Zw7sv`*x=E#YWqo{fz%xPD5V5 z&dsiACoH$@o9{W8;<=QU$A3FFBIUtzj;y@|(4HH@Ats+m%unPDd2S5(6>0V#aPO{~hrc{oO_u!fAV%1M)J6BNOI9>NmX2|9s=b8H5Cw^qJ)uAMAwT0w@}E+nMHAZ?b9p zoG7C`?~(AHh2$ljGHu#GX66IO>g7rtl;^`n%?82S+{+`Ak^9tZfI4(K*v;fj)ey^e z=tuIL;Cr*9&8BUDBYgq@oDG(3&)AKe32{58vd&lo=o-Lkna>uCoT$m60mK&Mq7MfC zr=a&l%?6vc@r2$oz0@kbp_`59u%ex{X1q!#e%k!pe9W7T*Cx7Jxpf566i>Z*Y)9X-FD+cIAF^ufgZAM*%>?Z z)TOz{E_&o?`6M`O5t+xxZKi#2+s^3x`s?#o-_o|YZw3h7U*Ne&*(bJp)19GQW=S5m zvZg0sBKwG5Za}d;n?R(MNjtpRWsl<%+5jEdNgrg^0tVN!(Z&z9=QPI2Q?`HNquFuK zpErKNE~Cq*lo2V{hCFF(Ffo({2dO9xT~j|wHrK`|@H+xSc_Lopw|##C09u(_^uNh8 z9U#0sk^fCmTHQ~s+ku)kMD6j|Cg?{pIEk#Y-7E`zUDBIFyygX=hr=Tof!ydwHiONS zc|Petw;_U%vUtC{;jgy{k`i1>G_3hO6&92zFZ@|0V%X;9mfr%$hhv%R4(ot+=U1HwmM&j1)=JZ;eTxl1dcV$ zUphO{O~G23bn=v$Nju8~KH@Tetit5U%wac^S|#FfnQa2YLn^?nAMM^LYHs|uI$s3? zrYA@+d27bS554e&T{Y~)O&Gjk0j zG{BcKb+(N%nOWMLc(&vA9n?5@X!dB!%5C*;?L)r*9@OI``DH5_g~6tz7DzLi8LhD- zkf|Ds7zcT5>zUI|d*u!C&RjZXGDtB09`H?oRw~zhL$0Suv!!Kk(LvIa$?a?a&bAr- zG;FuFn-lSMf48ICCU7F)A#dh$xs=Vxcnp8+BS4S5aW6rW`|r;fAEWymFZ04PLiCfWwZ}CWIk?DjK^onSqE}CCZoZP z-*%EA{ij~rwC3#Fcb;`!F4yejCTIS5?zFU&nU&9D*Lbhj>0s}!r$Y#fiS(&-e2e@}XxGYR0lgAsH)@8r z)p2slHz06ocW6sdHl;HkC*C*yT0a^Z_p@o70H)1wZ4PDQXUK03v|i70)X6p(ea-z!Av9jIj#EERhU1B0GRSh;`}61hUGWob zJhVyb2>A(8e*zXbejBIJEt}sWwuBTveC$mxsHT0!f_OR0tsJB zl%J8LdCj)A@n|y6HzE>9J5zAm|Iz}BENeiu@s;4@R9~B?4P0*X`KJ3%=ro7;T?ae* zEr>|Fm%uFh;4D@;F4Jk=ov!pR>Lse{Y-^X9lJaKkUP6Q$%#6XCT)7ZwA(kXQwm8gA)H# zUMVwK_)jPAN1Wb?Qn0SC4cbQAY zTU*vBdCvP!3_;e_#@&6jjNv&ATSNON=g@${<^(@NTSU8++jQlrJWb6|W(1!18>QSG zc--izo%nXh0y`mi~*EkZY7;rA-YhH-wzDL~lL z;%?`ZNp!~A{WdU9J7@VfyW}!{C3w@HoS%I5J-3lr1lNBf#wVYpji+{-&CSk;yzw)t zrpz3)2KcqO%p$aOaYn~RGd}T+Xw27LcOtSB_?CXldZ5j?W|=4SWTH_nC)`H>&KBk5 zz5Jfe%Y6p`^2{dJ4W&1y#n|TL^Vm5x&;3*8ptaq~eYs?BHYbzym^K}8M0V0g+V)1p zwok-u*=RO{>9!j?dJ~Pp12IX?$E}$u@n=dDi;4&4~=Sw)?zIXu$EtJHq~5 z@FDgc*dZq~oXNf^?3Cx%1*Z(}Tth~dl;6-jS&gY{c+KBie`?HMp@#l)BD@+^LzyPa zbkOF=X)_~|1{_X~G$#+wd8hpbwr)t?d{X9QY_fk(sTp|F_KHt4jC{YnA3Su5rtGM< zwd8!ppIe{Y?q;Yh>#X}#Y9Qh!YYe)byA5vY>nYMcecyQT97v~~SxAFmmraLl;*AiT zcRrK+o?4G8n%l^MYXvRWV04sT%9HtEwr zmfrKnu>l13Z|veU%Af#@_++yj@RI=qk$_74gE*e3PlzQCA1LC@XAsKy5d*nJlH7Y0 zaJ*tuL6mt3#YNXfrG3& z+et_5dY|fL8trrhCpwJ_d_18vMjIt>)}lH<LFwpC zd;O@%tkpY|;Nrw*UUQ$helobHvgt%Oo;~L25Sr1WE(7+))5$T}S!YDUwR}x;8~fpz z95<#Ig4!?a&X$}N?9_NnX%h=f>H;uZ$2xem8Ff} zIL&xn);#4#WXqg(@qIiCWya9}G3|d|Gq3akzP!9k0sy~|bH~dd@7Xdc9^*Wd!IJ>T z!V#!La|jF0dWawQK>&2jNW>Ez#qjHkbSMp6Mym{h(^sV7sFU=K2cZ!>&GY==MxNKc zO#q%Z-69gFk+`0z!fb=@^Guu2?K@e30diz)rhohp5tK${%JOS?-%5mc>w9xD`CKE6 zJUW#>Zj?H*@sUQz*OQ)r9JfJQ5NdsLe_Q6m{~OPiTRxxdZDXHhPe3iHftv(0PXLgA zMtZ(m?^-`x_om~?yLAPFn;9nu09kLA`FhB#VZ+>auHE$KG=?VE&6>6OBht;obGACS zHRsfmlYN95i1u~Ym7o<{%o==xo*BbD!=|;{_{@l&fEH>S4k7d@;{5Y;&5FLmyg1On*+~UjxMf zp=%@29WwUV!avL0y#V2I<}<%^vF)swu9eTxQ)qXB&`p= zwmC{Nn6LbrrTJ~I@;L=fCXh%R-ZC@w1Pt9AdLw6T^E$yC8A^h;jhrPgFAkU>>bBi) zW6E>LC)fTREZUJ;-w4ifnc4L)Cb?HHvk(5CK^R1!dkZ?ahfQ|i&JhFXdfE(+S7yJQ znM$9;b>*&9m>{LoRRxBS^@2-01oWReiZq!_0SD~6STiNWu=JF;dIixDY6W}F%d ziqnNRl+{MS6Y$q~C5_3*g!gM>bDy<*8@kLUoCev#=bBHaod19P;~#&cbbcMHk^93$ zaeMTE`T%GN=#U-bMYIC{x&C}|j@FMB4W}WXUUY$p?$>VN+mYmr8c<=9o3E7ZDf&j< zUjI#FZ~}H&&yDYmlCMoaJZIrM9paYKw=?$jp_4-3}BMl(t#ufuLH`gGi<=Lp%0ORn%Z;ZGOXMnbhO!nDwf`5oMZSUAb zNfeFE@$Y*;=|`rX{MmJ~o7hFCz;WUnk)A=NvqC9PTxt@@ghPz-#Rd*qC?U%k*d412NeY()FZ>a!s`vvf-2LjFrpl zanO{T6hBUq6jmBj8^CWR-3TEY(w@4a{Z8J4G^;5Cf{#PG0RydzPCA(6Bx-p zVC>AdDRs&1q~SdAJ2Z9#PzPaCSf@QX$dlu>ac_F`FB?RMPnu`>jO z9s?Yp!NZWx5MZ-Bya6a|U;PY#p!p{UP*d;J=Og_M@Dgn0XKamqTDF}!p8)=obc$=% zKeD_~`YOhT&)7mg1EFWzZqv;(8ohzNH!cnF%>W7NA8v*=Ig`a?bVXxA{&`fjn(|F*+Ejrb8`Ll$8B< z{X>lNCKJ{@^Lh8zpQ+nm3GkXmrL~ve)0sOeN$0;&-p}YV*FH018okS9E-xb`*mE5> z0=!a(+px2+k={T+%D>GoUvoNo$k|TUnU2|GvWj^q5~jp}A>bpOj(H=~I`h|i$V~VS>xcEf$=>~DDcClLIw%XM%3t(Mei$G8hv_s&kX?(o zH$BQa-B*vNGwUq~pe_4K15?`}^WruV_-0np?Y(h$QESlXCmC(mH=$t68HgM_N2=c$ zlcF~?N}WcMD1UY`9U6U{dj<%e$c|!%K%|Z;r_ISQ3?WAwPwz8eko>MG6OBIMyg+zE zoI18esyq)ly)<=TtgUc>GO{^dl5tur$1x)=92)7yDKnGbMq?vKD%8(^uMJWb{c-=D z@*Lwde6%qiClih(%#G;`x?WXdR?Ck3Xga~v~b@=}KF2$8hq)j(e}s*P+b&`WR7wj(uI zHjp$}Fg2iH8)G2KwbTLj=^!6A{n=hpxA{uYJ>=Jnb3D>Mr#;HxXX@WTIQHFkBC|;C z8DyP$jV!W!%U-5WNt@E>r?NM}yn9?S^U%n$PjE^miE*+H0M62`G<~+?Cv#`sT3>R- zVCaq1@<}MEl!<(Ag0K-{K=M3mZ)Wts*`d=G&edyH40yi%0A&P6AIt|6#}mcRdl1Pm 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 z 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≪W`+u)jyH5Ij<)kB>)L{=F?-~3?j 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 yICP7`bfc#V|zyW+YK-L2&$3k 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 z zeG0lt9yrn~5Dt#_Xke)sx%T#`xQHxPEZA`ovcprQU_HxXoWN=_s3M?_YV9_7*@XDG z-7CdQ^%P093Y2G`AV0RMo+fr}<(Tp2=GbbdD|`koh_}pYii5{YZ~tb|<1MTVb#`fT z_%tJv2X%3}q&M>0Ey-E)-v!kmT<;VYylT~@O1qWLlo=EYf`ArUf-aGj-r5$};kk(j zzw^o&;_{mn=U@c5yv6TCtd=U3z1!FrMpO2>O98MHj`V z`et_Rst#vT#&L-dhdwSP#p7514%vR^Y(_`RoQ`Bw)h&)V@&0fdArpzP)pk1PR=zyE_Dv}+4uxS~<+}W>zji@y zTrbYHQmCB{XoQw>RI%pI8^6Axu+1~0zxXtfehN3x`>JyR`gr+aJSl+6|tz9%s=K{n}-VFMnUnp?r1QqH6%+ z>dFm7k2&9OWB$Rqx|6AKT^_tCJG4bZT22k2PapYfa!lX>GL*|P#)dF)Un>g6UNBrK zvgbGXm~c(TM1akR^o(+tDWZLOmSo*~`maHx)kfy{wZw8PA2pqvP8-X^!ISsnfvAQT z@urD(VV`ivPFhVIKUu0iLTAox+uc^~v?g5La2<+!OwLE@lZw1(a z7U|^yp^;8l71`4d@tLfC%4K}d{hj&A9@Ks41$Y2@_CJS!plPgy0)1wm3yBrJqJboOq*c_LG;CqiLWx@x1#nFn{qX%!1d-NUEYE`c|t*USm@3h9b9h#!QS<6?s4PeJ0G8b5nrB^ z+>vtt$KvHX5Lmd#XZ80fAd{E=1aR^2`who$cGPT}=U3W3J_}nHjRl_nnZ!&9?%K%J z8`ebOSU=#wHOuLz;mxIkloiEZ>e+=hY1kRjwabvjABDZ@89wZ0EEYRA26T39{S|DO%K_O#C(9 z>73nTcEuyzRhqI6wdL8amU^T?%rE0ndGJ5pgoHS438=U9wq7?1oyJSG% zCwZCp-?I(E=HSf}C=ardgGWL7`M^(q+Tv5hAF7RPyoyX*8>`K%y{?fa)35|yYRXp4 zD3iphZaQD_63C|q4{W}}Q_XriJE%x5I&sG91O33f#;FrknfL5)s7(SiUuoa&AhDvR zn2!XSr%U2hBKFb;lCHmdJM`oA^-Pj6i}4SGt2{Wrv^x3NTAMhQJ}=ch?oImlrb$Ap zPJIt4$iNNej-C3m0M5U_KgQ#Qi9>_+ZQZO}L~}wQAndAg)zqFIqgi8Tob0HN0 zIH@syVAIvHG}ruLv6%9?y)iOd*1E&D-(`v|N%*Y?8^#;u>pSuw>ry9TqzOz^gL>ae z%Un&14S=KV=A9v$dXwcvZ0jeJm7Y(T^UkIBC>4vY+cbRdhuE(-F@_>p?-_?R0-4fV z#jT27s_^iM=-zg}(DAm4)D=ir{@%^@d(4PweZu&k1xHFf_&pOZ#^rd{T2G#h5xnT)FdleNatlQ`BhVb^mlM2Puk<1<%i(;?34YJJTn8`HWwS`TJE~;7oppeI+ z|JFqL`$2ghVXt=$P@KX_UN53UFCk^CZ_XZYPTvkR%>3?eJ&q66{<^k zmAapzV8O_^GIcVEuBD{!6;JXH*1iR3UrS=ucJ8$v*<&;>xja4+b>&loIyWscxYZF` zl?H+zuXt8cKN?@Y8T}?1in`}}??`=&+zeL+vXB2FjFet;7@tUsiE@(-eTeP8i4~E% z1>Ql}z8D{lyD^q}@=^;@*gk+vzl6R_0> z7eLVK_(qb~vP@NyP0)dOD##DSo-J&qRy=EeqD}KOK=PE}8d>Yo{!Om$ta~cpbji?B z-!4?f=5a68qh7T>P|Lp56Q9`c8>d(|?%)LawR1XNeZ09Rts}o4C+nK?ExdzM!C3om ziiyS5PVuSwz+brQu=Yo@Sr%)7r0igV8_b#tJ7TXp(739zHMs74c=4$=bGC{ql6XlQs?)nwSMVr!-ex!KA3ONZ`I)Mo79Lo-Hgt z;ozLJ2|eq0W&P(~$tvq?ff3=k|3dyrUGd`B# zPluZ4{SGh?M4Op)^+WiwY`@}FI~zOJiIFeHUWhR(vILB*`g4}U-v?k0ZGDv;PM=|j z(@6DG#}{$>%8^m+M7lR!G?hayI}=3Wp&ezQ+n!Po0Po6llk^x(e{lh~#(b0vkZ9uI zX0%~p?dnOseP40^db2f**Mg))a49Q7Fm}Cp)Ir7?xfprJ$4}@BS(AT;EO=zo1`6&9 zq#>srsPy(j`4EhJd)3oK(|?i=bIk{Bqt}O7A~b_vswgcdZ;M)Bsd?X%7a&99Ckcp_ zKWe4{e)!uiU#4f78(v3S!mhPSfet&@<@mcgW?T$_x>J}}s;7AO8Wc_T+}Yx7V?awD z%8}x+$C}|~hU&rpziC)&8F zmad0Jl6vI#;U>e|zQ)E%_a5l+cQd!P8#LdS21fsy+ooJ`Nj`MB&R*|GybPqzhTfvx z(GxxCaWQTO#NVml7Gg21o=YAU!hV1DtJfW5UnE=XAU;8FpnWvbsm0n{6OdT4{mupY z@q=67c1q)c3upfJTIc+xcg!)w+vtR}HU?E3wAky8aU;j6t4{tx=zegi>)opO{*3op z(-%Db%RjO5Jj2sx9C3XFPxI4&6-01#g87TKw(6&OvIOU=xOIj`GizMO8B6ZmFE5H7 zS;l*Lq>=oPjLC7bNR(;n^P)qeV3Tko|6i$AxkP=w+(mi`UCgC3O&`97y zc4_|tH@0&)!`5w~Hrd&lk_$6^$ac^xqWRFBxHil<5rzpcG5*^~WEA=-@mwYUDz`)7 zo$&jTkif``d`E8l2-_22Nyw2)yjFx+k)S#lCzCdaX_ai078G4d|s5 zN7fwG+&jIt^?DY`<&*5bdY@`!rFzdzUu7DGnKn8laPGX86WAf$IX^O)j|_}YbM1HZ zaNBU)N%yn6z2r-WfVwOtv#MVXDjJRDz?L7eW#OIEs1rpt^8^WpKmbgvS<5w1?~HZ| zD1e0!cgG>0(qlY2wvY|^U=h?shth%%COCm_><)Qin%ghs(TYoPD8Fc-I@A?-FIqZI zSo1aTqXTH!G{L(vE;U*B-s@z?i@;Tq5F>d2*8PtV<4Gj4RPadr5vo6+ZA@1{-aIa# zE5&hZ!XCreQQiY8?e>)f)9UDAR;}S$6JMoLLd`RN^^%PS6`rO4YSZXlR0P;(IqKdf zs9$zt+6V`p%!B=|pwkpks;L)qtv{doZ>515vbIY8>?)kN~sv zI-pujCX_#o26`wQ3Md+FLX*qP*H}5M69Rz2(bwY6&+N#}%T)U1No>=9%ZT7Y`sYjH zRLiX;yQ7lY9^aMS!A*u>2KBv|a<|dA$^>8kn#^WNcM~|LfwziO%*d^yX0gSpK~EYB z+=n|wW9yehqh8;1g@L1O0=F+xtR`-^C6&IZcCo4x(zX5k#kKxwIVbis69STP%4e`7 zA^WL}3-z<-mr}&mLU+27@C_nv&`e3PD|YCCqevrl5LI19bdwEJiEtN(633gPtX%F0 z^9TMl8BJ)GQ<^VZEe?L1?uvszWZ3NwAs;}}rGKvWXH>1~f_8i5?wX>}zje-mbPh^1$kZ1k;U&}L5wO}GX=oLecK+2Jv7JlLFt@%p6=Ar(`pHkK{-9r`(Lf(Rh@3M_Z$7^7Qqh8lhe*^Z` zqZi@s9F$VJp7|CZ8EZNJcjzmbLmRf*uDXmWpd97u;)6e407&pRYK8@Mu$x%o{##V< zt{j!3vD3Z1hW@c_S1nb#Z$vz$Z^niUnMFfxAy6*S)oNY$#hrW^Qij=Z>zmx_r>b7= zCWnHACbS_`VA$_X^VRTHy40O~7dXUH9c6m&O=3XeHag&x;%S5IpbzP>%%y7ZC z^_=L))4}%y&nJSJaBH!L zyhqP0yh?z%b^Pduvad&()9Z6$seKoPQu^~s_2vQBa>^Z=TFxofd!r7?y5?9XqG0y- zZjBME;*{Nvb~#@@CjiTxmZlss{& zDal5UqTs1pCt0xLM(6XCe+z<$wc7fcYJrQF&D^3U(6g?gK-DuR_NDkVB|pyW#mN0O za!9YO*inB|^%ogeOdpv|xHfCC|`N5@OUKJ3npL*!u<6s}ndlQ_n4Q=!0P8)r0m0QChC8WuDqXLY z131&1UyjlvS}pxfnbTO#?xCVTmmyJw^c}#Q+A;?&=jJjI+<}+Mpl21 za6iz^tFOuV(YjZI$(`}rfM6ROw5w*$G8V&wdvg$dR)z*uk%J4tiM!BMj~O`TuhK$v ztC_$(uW^l@1Jj!;jY0Wg1CXJ8ZQB=-a>O1#!SJ5l>?rBr0#PT5BU*d(RZ2A!hK(3u z_~4bA8|3GDm*KI9^GPa)fF*)nty}y%YdSmeG~w#F2`bu#0f;hZz?3RB?>}NM?ES`L zW%Fn)`V1Lk$Jhh1Mex07gISJnn!)XaG50?jMhsie_THI)Uy6pBF;bJ1cZ?q)UqF7Z z<$g5il&^Nu35j}9eHL%>X@ri1uiaIB6&ocR$G%?Gh{&R0JV?HLs)AghH3DrNuG4W| zYJ^P@4Bcaf`qYcPc$_<#qf(IUyS(m)n2leGS3X*~zJ-mR*wv$3ikuTq=}L zRelGutL4B-<0i}ar_!5JoP8c7CUV<=b(|f?mSXZlKADrl9-V=r7-{(}q0$`~8iz35 zMO**$yFaxq(={TxqwgYD(@UU_?4jH23isTc==b2=EdLt!p-ijq=aE{BM0Dp5NSoS= zaEZlHcJd>yoxDmGzWBRbHTBB@4BqAwJ?%+ctthu4UtmL0guYV6@Pwt`8M4uPB45=h zrB8X$y^I2v(ENFI>Uf8ADw)(z2TO%7>Vn4R$zzRL|K*wKaOvPT*0ja6pKISf<`#8h5rwUMNKw(cC_8h{%!P8 z$88tn3z(R@3%@<#5>|O1bWc~rZFd!eMuA`33x&Dxn3#?#Y)^6xpV$Dy{9Zdjq+JuS zN@E(qBI=+5xzNt`fu%>}5|bycf)ojyl+O-#+_6x|J1}%UR}_>v=UwWIf-R;<+u?gp zZ?ASHqQmQ6ClAHiz51xcs&Uq)%m-->5hS|CYJtp1T(o{_yz(U1Qn^~ic1ME=DIQYR zcA{A4@?!9^wL2UV!aP%LVA~*h7s#Gu__oh_9HI|L@&)~MuJ8OcQDvU9xiKqe{I*%_|6Vskld#7}?J zy4xq84mF{9T=6SEfiH-7#i<7O$<@+hg{+s*wlJ>gsu_tDiCYR962mWR&;_xkmCiNiT zhWq(NA=z;4xofd!RmwJ(#(@OZ7XePrYAcTmUZ)*su@F|m#+L{Hgt^MDL3|!9O<&)&JcdM(tIMF4mqX>;#8e9(blQ^ORTxQ z^R?pBeoj1IvQ93W!9wBvYRV~dV6K2hp8GI}hkp?IA}aEO4kk~PHFdv9gLhUgAQdtL zvC`hyo$99z3#_j8dVAM(WI*emR3@E|i$Cg~kjN>!3J!RjEO?s8BT&lDGkH|N*1t}( zHJQrK<2JUNCGE+DOLDgreWmV)~`ICjUf3A(7pIF z5j{GpO0U+9co*10E)d3JjRT1GIa!`b3gR@K{wv!#Dqu>;j^l%Or`L1m2)$)^{&Xk) z6MvYErfQ#Du9@_K$2A_A8h_9ZvVAbe81IdTEGNcR@PFzaP*=X&B@f=5!S%YRdH@j8 zkd<71^`D=1A>u7ZK)-^;J#HRIMWnEuR@I~A+em#DGZo$80mVNsd>?c&y7_KXrRx4W z@ACX^2~58{$u3oKs0_!F&&wVJz9g#duCI<*y>Nz{skL!~R=jD7K`g56lQF%^@&cqC z2VGXkuz*wGU}9mRQMHVass@_vE8`}ap^4wbTlUf)OMCPd~IV0ZJXjz zZZng;AJtV-1_V)17D|e?M0+ z!WrZ(-D$wG4dFi`z0Cfu8S+=KPdFsIsh-IEJT>ZjkCbmyicM%u?rSX7u(~D^?xD5F z9iUw7$1uZle=pkJM_^vfG8YteXwtkUZr z1y&{`kH%!q%Pz(M{|3D6R;ZJONoBQ)Ee{u4!Rd!8?p@WAF8{5LdSrtHc}$2Q z^)`RQfjynMciI%F9ut4< zTlr~jq%vn@*L8FbLJ|ixzF_=OU8R123@am>&x)Jvou|itJa3P4L`E@=8DS7_Uyqg` zhlEIn6&kji@$;r@bQmq+Zt(2E49J7h~S69HxJUh z_!NKjp>GinBeii%sLYh+c}D%uu4SuNv~Bntn?1zxcHcey(AD0Mp`^n$SL4KTW9 zpTGRb!P)Nlrv_C4hA^H&SG4Slk?^_#(pOYQu=?s>&`A9mCAN_zWCEKQCqXDR)vp>F6LZx*rDH3y4&T{*4tz7&k#=W7_|kUXA03<04e~) zj)#)a{3nM_+ev8xCr3v|%^V=n6v2@D8^X^&+~5UH-oxocB&imwEXa(xy!GzD=0mU= z&j)wh=na+4(H|$~i+5#W6nNB)J`0xyc^+%mR^JBLXm9ue?stA0i=Dc=O7F9f_^sP2 zCpL4nHqQIw-6ZDODWcpEqo5sr|Fy?R9Q6~|7M)sNb)R)>UnF9x&=91t@oQVzF<}>1 zea&)v_&LVFd+Bze4_nRoh{!~Dhu^3Bb^SID12b<0*F||Ow^fr#egU#)PH1G*I-sf7&R#O(=fBQp?2Hi3(#Iw?wHy{rliaC|+XHG>wbQ2B$b;3+XX&EfTKklEfbjH0>n{`Mrr1`60HY4*?P=Vz8JTGYc6NP0dAOFy ziawsd>#+}k?k9R$5_%a|NLSJMl5W3PtS_Z{CYFD=y|GM8PomxSb(}9RYj@L2Tgusc zQ|b8xrniKvAn93XRk}V~539i8p4qnXb9u(O%AS9dK89a8ARF`OpO{2{(9?}O$W{c~ zxmS^Ff`^;$VHwnRl^UxBits~Y^3n-4Rf;pOlD(z-lk~ssGAK!g@9~c}XBz&C2CRDE zePU79#7YS$L6g&TcWDNYh6n$TD8&m>n63sU%$FBfKy2~;?Bdk-l_}=7bi!Arv7hhV z(VxeLI-*?Sk^c8?I8!1x6MoRW!TAH=y>r#klgBCu=fLdu8vR@<$A4UlOm;+Xz=mPB zs55+*eg_~e)niDZleC^_hsAI0CNGrj9Zj9nLs&)G}#%kb5O;M{jSJlWA`bl4lHhxwV$Kbsx2WP*--e ziOIkbF5eGXJvDLy5chhH9TIitY+_=H&$<@#hnl21?)IR4d8C~S7=NRd6=WR@JwXtNUpLAdCOUhZ>l& z?~fQ?py}w$(1ezGgLC~lhfMy{)5%TQt=?NaS%uSB;m3^|x7sL{4ivf33GQo_CIaLc z+sMjKWfgNZusUa{0CYk3BxtU*L4B-a3gd|N;1%k?l%M+dwp}6)VeUESrE8oy;Bk9E zy<$a@1a~R0^JLQe;TJ%L{K?+(8T1WC-=F7wsh-LFzUP|9#21EFXm?x#cFS&!&IMY0 z9l2L>T=ztbebDAe|qcH%54d*rzevkABO7K#rWMo zqP#NT_gi(nJ2n3>guvDV>=l($`d1QCxjb>50A+q9qP(ru$hw(mMFnXHcJDaczox{ zaB2%^A2nF*PVnF*loM9FO=n8|lhqXuqj)A;7$`@EB$4-i58-uUchaSXBR5|mk8`v2Arjga!)s& zEj&{H&I-+~W+u8f0aq8UZw~D56Zgd|;NJV24(wsP#pI3{Mqa)iT5e?$d}^yWmlzwM zUs!p;?GG}W{Ir+G|F6yyf_lIO-BxZU-}BVR|2WDSs)FB@{e6Wmt-h_%xI0^97!ALI z=Y)8qSyYxNCJ7%}J=j!w3vC~@en<5)T?zRfu2|_rT9c(+MNU2IGF zOx7^5JgBSJ^6A~`?W{G{4sBIM|A_!<|8Xl zS9SwnO;x=uZI2$Afu1jJ$k>|{^n8EuP?o=3S7V2DysBBp6_sU1aF}&>f-qvU(DvsJ zIhId%*j&|lZLQ&C&{UVo|8gj;9h(B;2S&xT^G*he>y@ zF|!}kw3KW|kzE@)dZ&Ao8Z@VNh|T?ENb)0`%I!VRbDc^QAKMfa8ans$LUbm!ofiz< zqaOfakN7Gom%#kj6YURTUL^2D?=uU}NT~NwE6rT~v&$Y%snZYqnHgsxumOBTLG-fz zb1@k?H6XR3^wf6Xj^RRDgYhM8IijfCzU%NSDBaYuod3^i{8GKg$hbOn{)i~Z4Tw6_ypy&uY0r#DJOnmLeeUFGT5 z8W`+LS@z2aof&6xo^<_0NI@;!y=r?ZkPyQ7NXm;vl9-1rqWJs%6w$w-<~LyZfLSmh zHH`i__;mlzf{rvZK-1Ew!_z@Mf<69OP9hf=Uzc~X=Ic| z+>ENk$hT~iPM5a{L=)S(&rs`^-(Ox4aKTD`C-zoMcEu8yyapIds9kjxf=(jS*zF&I zIZ}Dk8^&>Y$1up2`ySfGU+Rt1OT(2F38is2Nmdv0aM($G&_{4|{PB2n_*9erPI^sz z+Zf%A!$u&WM{8#RgKWIN3C2u4TFL`~)k=E`XJ{zUF6c@;#?x)e@OLBC!r2`0;wp5~ z6@|4X>y*h*{J}3|69HpF!nf31X+wv0{yb~8mC#k$0L-K!1xEQwl;({*2ILv%tvrqy zujWceT=>0t#a;8%1K?wxYd1*R_Z|+LfPD4|_If*d{wz`N9Ns}@*Ij_KJlQ#v zotQne)};Vj?Hx6}@ZHn9u-CG~pGA3N=2BMiyc0&-rl1WZ2q{RpSbYX5U> z^B6C(V$zUtF{)TzhVW>D||hU`+0m`#`eSEnJlQw z{(*7={$1dQ{1z~XtFUL%6U(l11pAjqviw<5t|yx7UiJ+pMCa~7$H?J;PJ%HtvvX(+ zCbWc@lq4km^m}((ULfI0W<5=65Te?)LSqM-kV?Fl=?wS0$Co04{}Q0R0b7%TMKGw=4{10w4-C) zrWblyyZDg2?RQ<18q+Xu%rfd(3QV^?PN`~_jmalApaE7%H@y<9zD(<|C%oyC?|W&h zCGD~24Tn@cRXBqw(K@vqm%8yVpjEnyC55KGo1&AgsC3xfw^F{?H2C667DZGZO>1te z-M7-;7Q42eC%Id$ScKI?jmeuYWvinHm-TdEVJhtuHZ+LxeUYK5XEADV(ha*`ZdZcR zkjZC&GjG7c8n&@B*b7oA>pwg7PwhY`wpHyy!~S2kjp??!l^$jRm6Z9!b=r~K7G&g} z_HGjz#b)DgI+A7sDn{*kh(LkFD53aDzsgxj3#)0!%g)0Q8?_G^>q`NIgm?T4aZX2~ zKoyfCbl=`gcxv3+VyC%sieBj+Ffi`NOQNLfRn08mx_O-Su*ergr&8W7-PmdO;tL!c zY86ez=ht6x_wtajX|7(p|0`GG<})`!=%%B#DN$*ENT=8=CkE>!2ixWw-nB%YL*txr z%x+G1{_sMS%JI3VW6U`-yIhUpWR4*XTk;V`t=OK&fNx#FAib(y%C@PSLW81NCyg;v zI$GBcU*4+?-m_^mo|nEBFYAUT{O=E%=um$%G0hUXkw910Eo>;yIovAw6pp2Mk{t zKQnV=2rut>p{!#6Wwe*eul$7Wkrb=#1x%+z!jMPv0p~f(JM{wL@N-Ord8OXv&N9$z`)DET*}NWMLV}c7(!WKW-q`JCeXKndNH+sd zoXz0LwWU8og|?mwoUNG6Br`~?LZrv5;i(W%bB&y#cz6 z#?hZ{0*m=suQ2pKP-j195@zDRlX$G~h*ZMcy9BsNuxF_W(I;cHQ3?Q=aw`c+jv^q5 z`%-k4tH8RWt@OeGGL$WHEWw4j07k(fKuei7$u>= zaN_~_b>sA&8oWZ#0sA9;eW5ilqlr^z*==4KOyEGKl(meuP+UX8>^)6pI@#Bj7+)0Z z@4rSlp12-?_eh50c}E$k-V57^TVC{es){8~pO9fYZZ4J}i;J^pp#J+hWSyPzF8_e` zXK~izg~XSJvVBo7SS3#>y+u*>Tjh$>WqKla&G)xLC!J`dq`2H%LEG*406TJx~%W@ zL>W!Xvp4kCMzOHN_RCLqa_x%xSIJt5HoXnUTnO1+fOGLSE%*ApDasqaVOKjzmcDSN zcuudJ#x0P=l)zX)_dLe3b{o|pvv^L7Pd%hYbi~Z8C!gQ`*m=+`6y&oladzBp#T8KjNWFFxa8E*?y?94935ZY(%bxXtcYe7Fjb|4%6LT5}%@;c&`NHTrh zh^6_t;zAIsyhhVY(B2Vy9*g$be?TNdM!Www;2&%ZGbevWL(eC?uh!=JL{w#@rnzU$ z4d+?cyW-XpS>48=iD8*^5%a#(u>^&y-)XZP1f5EjGJ^g<;$%*Gwd`GDCRw@P7>31Kra?T-gi`tGg!JK0)$e}PO3#yYqTEjyIWw)=mm{_x*OcLIH9K-pc^ zNNNfZhKyO{t+Twuxo@p90QR>wcaebG9cdrZpseLfz}a5_Wd8ai*{v<3Z1-6Yh1B*R zo$TZQkcCnzS6gbRoJ$lhdk6D--IOLvr7r+o>Bftb)x*PDP|Bo{4;TV?@2{shwbFgt zSytPmabciID?9Gys$cojlZTXUW+%JErWQhDZo)e*ajwbDa0NQxp{pZhjO3fHM3uT1 z4sCg_wCwgR`#g+A=7t&gFNf-T#=sCaC0d2*qJbg{myURLl#XI}r3<-HlA=LaokYC9 z@JEB%vAtvfbLlKUMC(}YRha|BZ!BA$@q*fP&wED5*cJK8-&08LtekZ`sZc&v**c|$ z`b>Ui8M0u~*q(~2JyON&5_;}$TF5*jsJl6zgoc!;?Pv!c%UhT~=pQ+n)Ni}(zgSqY zJlR=vBB635$B~hH-ZMMcXlSyg3IVtLG{3Q_9(W7N0YyBZw4x>Z;A;+k>R8MZlWE;80kSLx2pAqTEf2Jx(~RK2#J?(%9g)t3kr&9CO9 zl8`>}CIWm1$;MrNBg$`Qitg&!1m#s`^8h{GY&wPtOddUJ-)(KSQ3lui-i}s74bHQ& z+y2eD80%Q6W$^r-Z1)r(Xl8AzD#@)2cK*`mMozd&n*y)_TlY`#Z`Yf*#TPw0ic^y# z5jx$`N`#e<-g&AGKo#EC&!;)He=?qg6amC0>e>b9uDR@%@<&IkMt@otFYe##_Gf5i z{XdG%`<>1AVZ$M6)Gi+@HZ@u^h`mZFHQMU8rBt;xiM?mg8ns95h?>>fBWg!&A!co2 z#Hua!e7(<~@ErFK_i^3Vb)FxKYmlUvu^wNuYa^3g$^E4oV7{;{+TwqA{A?^SsjW~Uxe`%NtJi&-=5caPwa1FHpNA&a^=j&&xuUZ04)2X) z@9Ae1MKRCyD97b#r6pGJ`DSzZS(#RcJh^~L?4^KLHmEzy_+~9Qcoe*YT?fSOczRr^ z(d*C^W)&DFpkfTyOVrTrKf{h;FOGq}!Xf7Eaw`$`i-==5P*Hkv)&2ez$241R6H*62 z4dhcRR3At{DCVlJ>#6*exL%5lc@g@1T-27Oh^xbJwsX5Q7^^-ch?#E}Z6gwCv!zR7 zap814kV1Oxz8>(SiQ|vu)w4KK+H9cF5WV+h|15}DIBTTOkJ~Gr=HL%q+7jDPhZ-MeWEoMCs;(Kb=rl5rWZT<4VP%T!+yJ!83z+B~Eh}!fpG!Ez|b7)0e zwGg@BGb+Ke&dEiTlPhhV3|?Ymz+6eYjP_#v&yE#Du$JWvg8<%iG7T>g`5>72?;xwO zi@Brn5E5te=Zm41(=mzxRzDYB>O95)VrLB(dW5h^L?!QT-f2!#ZNvaiK`vB@-yAJ| z6J=9LxRnJ)AG!uK6ht>0|H2+S%-HwP`?u26#eC4(c49U~`rDcX+tet<1wj++I3!lK zD?P_E-de434@CSI`~Kwdq7hkCXR>YUP`baZikDQ{Yae3!eksmrZ~T^8+WGdOMuT)p z`^%XvXon@4&pzqX-T6?9c-MdMRjcY&>J}}b1&bvQ>XE8%8J@~9JpD4?ZdS#E&*vY9 zn50QnV`Jd)gC0f1VQnwH9xQ+k9qD7KJ8?HB^?N(#GTj}MW?7g24*n*x_ahdbt4Tp?{J*xN(1vv>gouG#7mh zIgVS@Q!cU$PI}qr@BRsP?STY*C8dZnPt;J9q(L|=V!LZ%n}m&i7fG|T)JwmiW=E(c z%?@(s9oV@!umc9B{N>Sce-r5833DJ`Wur9d9H;XJnb35@KnFsMr7@sb+28?(#;Fi$dHcJ z`zx0_;ZmmQH)P@&L(g&{4Fl|mlM8cRew7-+SaK&hC7)qa1J;V4Og=WH`5=-X=Ntby z7Lm`(Udbi8B*`q$YUB^e7D7^2lkGn5djtQf<6qaVPxi6H9{xA`%PfpWseL3S9>LtE z$lL3u9Imr12bq#qvv@yz{mjCaQ~h}V2_nv+c<>xswZs|kaoFb_mlzwf=U817un-+q zQ)8=2X5S4FTX43N_~%+XXJ8eUs(^7m62I(rgSBlv3^`SaKpJ+a-)3%zO!kkofNcgBl<0oH-uk$#rNPBKN-#~-OM zk2_~ikX~37p=5x@W z-_t@=tKn!8k?}P8QbDmrxGmn5_)Rm@OSZvxk~0=-+_Kt9$)S-2Wm&etqa()l5zmM& zsclVcfjRptt-g8>&{n!>97TgwjZoo7CCc^wsp&ul~R;x^Z>Y#9nKGZlzGF;*U?I4o2p1uyL-YExv+lVRn!B) zx?`u6W=PoSM3Urt&(YOFXza@8K*0WSu}%{O)WAgjp+?;z|DT;g*^@t9DYnl<0<*Osxr_!Oqo0`6xm z3i?oBP8=h!fkF~Nt7r}bm?2*>c?vkNAF69YUTZbToi4@q{791USSWD-F7`oc<<0Sk zeuwH9rH`3Xz~(Ba^wVM~nK~2?7{EEEFDAnGLiJFRySlw=Q(C_Emc>V#F5@RIRdL4I zw6kqf;N_>HYL4$~dkgnsu?dIR`3*zr=ZCOq&<`WQ2qoXs6FM5MAh)*I<3Yb1cqDG) z!xn?Zr`|Xq-6vLA`75!D^Li;XX~7L75Q|I5h@W~Yu+hlz%$<$`Qmp4B?fyn2)?;E7 z!tvDEJq}!=NJ=jEn}j}vuo(hZ0+jK={<)`mp@D=4=P#HWZOkL$OQh2LUm0!}Cu9*Z zxSce+=O$j~URfdP(UhM|l2Js)wL2X{1D3?z7d7`hVyPa4qb~1&n)|*x<0thdG@}kG6>9`Em9zzW!{XU4CmSxmOJ>aYN2n6=*!mGWRdY_gvUZUz=GBs_8aJxF zAuz0a!)hBAQL5S=0yF5JaNo5uItx4l*=letk*SSaX=kzc>}lRcmTH`Qw^rGXT$*Kl zyLUI7?<{ZFAHYx9dd1C$-%5nid zbwxh|zA$~Aev#Jb=~iC5qq>!g2(`YCd0Ub#tAZ@yW)mx`8c31n>~;BrF%wzu7Zv?ge`H;}dSl;|ePJu_;?A@t+lLV| zcrTc)mNrL5#zHYSZ+H@X7R3q*qzYEl&b>z=z_qbb$W(1gLj&vK7?A~#qNNutGtkGm z$yTJ-9B71LoN@WYe|w2U?3KaX$IhTFRILr-K%NqoF%Zzus%1ZU-P9u*@-azDL1)l5 z`1IH7-SLDz$Ja`Ai`C|7(gZI~^3i_q>40O=dXT_(*}zi}I5RpRWcTFd+gj8YDh-wqs)m{sDlx9 z$)XcddB6Epf6l`bJV|o0zd_YM+s_=UP^Z~S?I)c6Pd&(u59xF8(Kzn&tnpBwxvo0X z0&?Y9mTzZL$z@XD^90q?DxzljpCl@rf<8$9^-i-hJ`fB&-JLdc6cPhepCR?o0|@Wd zb2*N*9n1NKzCFum%v^w)l*f(=7MO$13S#qjQ==Sr@N+ih%}E)WKLq&9T5Z3E`UOST zt?k6XrSH#$y~c+AwHcr>i|GpLQ-v#5$|fLBVlSP)=}*` z=lNkOd%UxU$&#cGQV4U9NXSw^Ao2TG*g}-_M&u-R*jA|Eqc;<=ioT#A(X)LvzsDUi zK;l+KLfYy1e*RkId#w7s=ae8J&p>;{_e?Ien>NYcFvbF+Pp}sNk{oZ*Uf9)IUD=)n zjK)?qCt>}~mjB^?!2+p3QmZW;RHbB|V1$#?{^y)dj4b+3{K+gkn>q%KB&D~gG=(%SX9zZMS} z%>S=RUi{*l+WloJcPkYuZN*L!+vNP&1M_ghFwxzv7Zj~6Z=#Gu|&>WeG<%_HQ9o}^4UCiBNa>v3HWp-mb zd&ipDNDgqIp&uAD>RTe1ExdpzvETDt#_$qcR;SBo%) zkMi9w%ZR?Me^4o$h`gNc+&IV!`X?pRme?jwNXc!Ow^g)MoLzGzz(g!vM6DbDw%?Mh ze$a)u+TmB^ucRfaaCK!e)8)02`W9Xee6V2BdU0C1b*W^s@a=>- z-_PpB?qhnU#PURG4M>J_J8vKFnQ>vmJh&3?U#!ko#_|gMxb4t^G=~!w8;=qI026o)%FDgIoE8Z7~#6z?P|`wu>8kId{XrLi($|i z{y|3GL&;oEk4Alu(==-mkA7_T%R;USwkLb*<|i2i2Ly^@0QX+31*asF-U&Oi;?UrW zMHZ7*OravDDCwMpKnWj;nbdG+o_NE!wP4_|R;;lC{>yBcklxUS3if@Lxn3JWQC%AZ z9jQPX9PFif9@?qN;8mKS|H6l+_JxC>t(b$=rq$|1BDzC6k7x^LgXoKzQWzahHla1q zmmp8>6H_R>w*nFwTew6D z{m5Q7MPLsJWd(V!00xN)jn*BJd|#7!@!X1|xg6OMlafSWxq|=?%pYi?YB$($f7x6> z0GyXYeJ%5puPj0%L=gEf=RS1!(+wzH0xf0t+|uFRA;0qVntx3&X)IQ6ScP8h5K|?Q zV0HCi!^&5s{$?My8W7Buug`U@h{aeszIoe@3y!AgE6J-YlQz$}kw5~_LEx$YK_1um3w$4QP)P{x!}2eZAsz#ZLR z*$rA`sVNr_WDholyyF7QcacTHD&pj_`LjgDi6jx-rDFR(h;evH^+KuH+Wb>pSwcrwIcl^kn9@@pRD>TqQaw9B6^3v%C?ae^)Wvr5_<86eLR_#u4Mzef1M|O?; zJMk>va=DA;rXk*E`McE(2J_i^#8elgm2O%qDZaf88@TNMJrm41L09X7Qci@9m4S@5 zL?EBum_HNsOzjuu7*8N?pFbsUlIo9G(?bVPlAC=7Gr{>qyEl*+=tHnwfZ>#iOZ;mx zObk;ExmM7n)8_qcneb*l+1TCstWP`c<{qDHlY6RjUfl1T-qbR@Gj=$Awva2&_~EJI zukYS(#b}@?_{2a(LE+M_U5ZZWPsB1boQ>~^Jkl3Hj_C;j*g*|4+X5&vC!0(g$MAyB zMVM6$K95Pb3Saqf!M#yy7>=Ib9V%rI_tIt0rtZe*yq4HKm zS|Msaw}O)nwQY_RH|6<7BBRG#3f4lkcX8!d~+_n(*#@lUHjisj(r+KIn=60eNcHp zBZS`3PK4U8e44?N{~_-Qo9(Pj7Ww!!;iF=?I6|Dh)cXxEt|$n=vXiZr#r4Y#=gZo^ zzq+Nd_h67g@#`oqTxYUb!w$Osr9esLm%oK%eN0;&fptoS?f*UNS;q`OkJm#u& z(g{N^iO#A*L6evjN$MM{F?N&UW$JB28L5xM2b#8snAb$pa06MF&DQ2re-Q0%f%3NL z>v4V@t{T*OnZ~-Vq{mEhzr{|z$Yp7(8hE&4i+yK3c=oy`Y=RH#1=Ti$U-&$#pS`w! zYm_QVxqNxnauB$3z=U5wr*T;t(Df*tW>?3yZt86r+JL}-{%X@e@khO(p#HFJr60gz z{EuV&_;;H*r`ix;iV{-3hziXU8-dxMw`UO&97)~mjkyn80CZ^;$m$&Xx#w}c#Alwm z;-fvY8y$9h*w>}}wIh!JL2=~nP}2+CrVJovRh^#_-cBT7NUD^wq_DNGUte@Xa^I;~ z8I*&+LqI1RF$W&(`i5zP9{Vge#&S*H$4H&x3*t~hLQ;Gw1O+*@&P%F8I-%~a>)au; z74MTXmp0jJC&IvWE@xU*vPvP!kcK|6Pk#0;;(pI*IkUj7H_Xf);^EPQ{ zt&~tN`UL7;7y_JSDVJokkh3wQoPjoypsY2bwHbrDYTOl(q%9m>YwlKw6Agehu?T8B~x3U`IR^sMu@woIzeS;;gJb zG({si2rl`H&4`pC)b1XX=kmYi*XWikjZO=cexOxKubCXs=c~s%<=9dC0AIQUC|sbz zh`HySO(};MI2lY#CZM=WV!mm{hJbFxYR}lU)kB1W`*pM7<~0=O^X}uf^EYp_x1Pt9 z1UC^OAvpv3sgEKaT;)`!o2oil537D~RGU{v?%jSQb*7O3Aq=n#bfnaAnReTxG-o?~ z1*Cxey|2v&6Vl14eI^}BcXMald6 zIQl7>gzSqY`M=P5j8lMYMh>)b({xRazN4fvige~6FNejXr-(%Gi{r~*|NRz?V0m9m zaK{I@WBZUC*w}Zvj1Km7Fk%|(Zgln4#c@xMWpzc_`%~2|ClB4SgO=lVtx+t5R{YQk zow&v(7st@!|FxCP!X^BkOG@CJ8sPZc^&yzvJ(k+XsNys@H$u;K26ky@X+#N1>Pft3{;43)x zo%ErB7S9;>Yyr=IP+Pnk^}xP7Q74MA>fkr)y1>|WM>4tamhP%^e~Kq`#UJ?iW{{yP z9CtNER5d+{M(;F=D!x=LlU%)G{K8e^>DLtd_eCfW!)INszsxhSOYl%w@JAk24YZbR zePI|nfMU3gl#gk`mSuwbjXv;I3*Ak~@Vd6NZcv|tgb*UjRPh%3@JUO1-}bSn^|9bZRVai^SB!TlBP zja+KJO@pmuUOsuKu?KBh_!9sAo=9Ot1O*=EB zZgxgrHOt7w6gP;5AZ$M|UIQ9MK_Ky>tnbfez^rB1wNk_It?pSExOPi^c+a4mRKWly zCyHpcZp%vkt~@#^DznpjoYH4^Es5MY#alM*DnMD9m6j>yeGaen`dxFTRlvta#0E9U z?g)Rw#O^^MRy&y6v!16#pP|I3&g)cAz^d)qIxJ4Pq-MGSZ~x1->9o^1b$dFg}dRXqg1D`T99{_ki0P8uDfqoEW;yM zSb9JmMV&m|%%xCC%iwps_v38{dXG(kFp?rGI9+xdI|=PMUfKd?FJ$=&_dlPf#>$|yVIv(w|%?iF+n3=J%;b^``o)ri6Tyr)AQ`90)x_4$q@a&cD zAqMJNmt_YIy8eGdLyfLYoNIb&EiZ?Z2j9d1Gh<7XP_d$GBktLossFjmiV&(aQw^`6 zmg@>L>jHe2GHV#p@I;;d$Uw!cvMm3WrI};>X{E~88V9%Rb1EM;weV(x09%3N1Ah~8 z5bMi%MuyOH(Lzd@o-d?_g z6G|S6Ignz)b@oZ{Q8{?0m zIFFFyX7AbdAluQ#aOn8k<`uuJVA zl4GKvt)?Kc$%_%*bqH4TzK(u(7S`!PV_wi=?A3g1kI|*h;HL5jYyIX)tNG~U-h*ao z1gjg9Con_Q$Ns9`_14cMvkwAM=#yMGs+lcQN#mjHq3rvSMxH9~1>_dxP`Tq`^-$D0 zp(we&w6W@f)DanjhsvT!r*o&RM3b<^ z0=-B9J-@WE2u?L1oj=kfOM>(utRag8%_5zQM}~l@e;2hP|Fi1!&&;C8Hpo4Uk4alS z)@)tzv8f=cxX*X3dXt5yeT9^V0Ty<2Ts&D>nTQky>cPido>B z=KrFw*YpbW&Yk^mc~Q%-ODTi7I6-Pm@K0JD2*hix^#mWZ5zmrUD$DV(mguKQ+IS3f z7F1RDltX8)V0T9d<%NqX$3^7|Tju{B(b+SIJA@P)Uiay(XpK+)8?;y%#}-M6ni8zU zemk8#=Z@Q!mCv4O4#^u!cPks5^!D6{AFWkaOWWK(-`4l(<9kl2!KcCL%IOx~UBR<1 zd!hn(g%ad{b))Yj5c*avYIdNtT{e*GHZkBg4IsQiy%)<$)IZg5d0=g8Q)*~_LiEfh zc?t}PRnIr-H{+};h3Z|qyf?gatG1L!rEsru9goSUsvjssLD zX7k)J!s;or*$RE(dI**EE;o$(ySX={9TRo?#8^_H8&_ToJ0#_#0E4V0 z^w7~Xcy?F@O4#z2%%uEttylb8FOVCD2mn;+9tWmej>vSn;K2UoQ(M- zCN0N?WdYvdYlOe_VLdJe=&Q9_?qXe7v}}WwV)0(qG5z*>P!l`}qJ8{e15K9B1&T5me|Js3qDQ=pEo>EWNXM|%NN zsei2Pl~9^q3N}uM#t`3a)_ki&-r|DYZp=<^MStz550z>IU9QW29ZzNu^%GJ^cZzTA)GO}($^WSL$HeFW zzqu%Ani*FfhHaCeb}JN*6mvvsnAY~!T`i!$7}*p@ z2D(f4jggXOxnJG-Db}wVyP3|4mHcIWgLGwN4;0>)y^DpHbSEc3`XYUEixU?3Q5Lw zzf}l}dEi7nD3+o<#y;T|g*6O72vvT`Us)@D@%05?5y##lcW z2-8V$`!C;(9Y(jKjwQ}}8FvhjLh%}XwgdK-i60J6ydu|@+T**X*RsLoDeheQq^(X( zq(buamj@FRw<4$Iu@LcnxTQu>Gr16ER12Goki#MFsfiW*;X#h}Fpn^`hMlioh2}e7 zti%wH)DkTkplE0WIqhlNmda?rq{0lBv}&=JpQvc;CcGEMEJ1K3fhTXU>~eq`6-({@ zIbp;x*@N#A!CM!8gOA!?qwK&?0F7#1x}dJke}(jmYWD*YJ$rR}1*rh^we^7EysN(d z#dQ6|#Qz-5F$`GVNW7=^Rg?w4Ohq>7-T$rHjU?TA_U@Eb%aiIn=Yg>l3-KfRqS8Qa z2=*plS=tP?T6)yVz|q4CjCV0;Oh?e9KJ%kepc1x#}E%UUapT#z)RH{SNg9L~BGfX6_h)azBH0LUgi<#pJ&gp+P~KsJ7#=i7D)W z9-S3f{45SNku9o4ri|<5@${sRfB9+xj)s%(H=7URnZ+_9yR*Uu2P6-T!Dp9urJgix zX`;f0oc$`!u+_8>=9TIStZyDiSl#xd+t5w2%J06Qn^*grYTT<6T=r2mfYJ1GJz!{; zI>_2|DduRBzsxO2lQd{Mmq#EHwT)JP{_EOWx>*L7L;W&0Qhj_I=xdmG&Gy4fXLpf3=hQg_-yH*cG^q}Smt!_%?u>z5n?O{rY*q)Wh z9BwH7ub%@5Ezacv| z88M#sP|21Z%(wWV5FDRkA0EZ{n8C6zpXL<62alJ20-zY?zfbc)sBBFV>|nSM`z<*1zdq^yblegY`!Ft!-nX;w12U-MBzo zzteC5i-e3gj|usqCQr$}PsFmMqSH=e6#{!42(WP36>r7T)BUzB#Z|d^!<+!)GI;_M z{dp5LBw*%lHpm`6MbCEKFrQi&X1iTT3vZwX#>7Mh4uT=U4fh5bZ4ecJcqn{!K!j>C zZEz9FqWU~10Q{zW{Z|~(Lz2fgMBr_~YQaTb^iha2^kcu{!E-K(g5TPmRJe>xZ~tg* zPQ&a-FNV&wlP3GvL_JYL_sP8*;JilL&Jpz^26jF&vYOPM#@4l z6a|AY0oUs;&+boe%poME14sw?zdo7r70p;}8xvcoS>`-l8e&+CI^ZSzf#8N4ClZQ~ zHBV_4G=OO1Df=tqVY3gEmTsiwNHPb2@d8tb_v6xUk7=_SucZa_m)^DDCu?Vp#48ea zF$8u7Ym(<56b0+u-$4cfdR*%64qxT?Ob(M>IdiaK*sw=&-F!7E1?t@idPgQwpFM~zem<|8*?PH+)mDUDyYQWq!f-e_S4dXkW9z2}lul;jM>ymikmj5kQmhj@Mt{QLxI`j_)!w+bDz( z0PJp8y>-0d&R26bJY%~Zqvv;!ao*1N%d!rUM?SXDQ{oyp0TMF4I-jdXiFoVUvbx=G zKs;`MNv*HGzR^k92AXC6uTTCrkM_0i!o$93C5(*PV((o~grjg}2<1v*67H7LzKjHrlW;ggzepzfKU6mv zMalX`x}=_gH$7@Z75>?Lg?koq*w`~IVOs?i2RQY@>h?bTuhz1f;mC*TwM)<$88%Wb zf1h=_TIR-+<3j?$em#@yKld8|W5d1SE1oOa45RY*r%HdsRXW`_2Auv;tfZr;i$rFk zysU4eWVwRneeb)sbw$0Rxspss=IM#_%@a&mlp>CfIgEsZ&h{Hf_@<>_#0|vIa0pik zjW)0}=lZ;HAf$sW)C;Acn~Dtg_1|Z!Xnk#caX6QJXsOmD+QEd4y@4nZeB_&7dS z6hd#+;jsT_BF-pfD~DEc^-q=AqE!A(b_Hor0+*$?$7WS_o;BzNoX-B0GY`w}=`*+Z z27NxXa*SZ0jLWJkYl8oLAa#l57)fLEn`%89tq0PA+|^^pOgWP&V+6Ay*}d;%!cr%H zscDji#-r`G+QFKJb2(gv?sRpLTs)sZBW`-{8j}I-hiXG;dksFB{!z~of9b_c*PW3xm1I$gb@gYbfNbJ ziFJK`p~`(|L8s|YyPj(kwe15qixJEInsiG3xkskS&~=ezch&MXyKv<*@XQ^5?5bMg zu&TgoxOa23l-3Xq+-+zcl1xZccNG-;Ouuht>?<`hM2^m21yYrtqpii52)ZdBuia9H z)l7)xPfFg-8kqVo)jj(rso>XcS6}NEJtw75Y=*U+eLzrxM65){K>$LU`q5r-xv?3~ zrn`qMtp+Vp81B$PGX%$RsTn=xr=*%6CtSI}C`rRVMEJ9b-vF;Z%M)BR(G+8MB0xUm zgVcaIF7+Wu1poR zl;chub)-rnzW30b1R34SyUHX9alJ0YE@>RsMBxt@!>VAfvc?h z@H?seEYJDq2&50BO-Si*DVN)F^>sy}rHw?uA@jYDd(!Q2YI66)mlgG46W6a#q#J*U z_*c|!1xj<#EIz3&58*$hEfbC_2xjEbf8T!;i@j?QM{a3!(n{kShe7XdSfMrI7`&!UUO&eBkBZ)~6VPAtU`yIz61Yu&-X#WK)peaz&?KoZ6UIi;6dz>z;@Fs0Isv7&FP( zE7=z|>Wg7}`&(Ww*~gN;jJ=5=It=32(KE@UU@vIzoI*u1G@NVe2RxdxV=M*+%cmKb z&aleYge2N5S%2OY70CN09b^yxkrtP#kc8UwL>3;aVNm$|We`m;X8mX+!&P4zbHtRv;f?T>TMi#9qKU#O{AtjDle zC{o*_EJ3S+F;tyk3CW59;Y9Jy0KIFmLn8yZIuacngUJ=E*8VpfhAJj+?)*@~8Iv9- z2{1~vkH=wL`wDhgIZsN?sT^*;9lcywHV3cQgnH6WvT%KedthBm46sCx0Nfa+UCWIP z&QuKJTbpT~9;%h;TAv`haQ1DO>$|Zi_ByFd2_=*!t zuCMr;ZSz;elmTbZfi(C`$)o7Xnhb>0gg{9MQN>p0Z3EfpNAm1Pw_%|?SDwU z2jD_>#|M1cq`fqel7&QHoT+5}29yA5j7bGeVZW~svh1{oZ zS#(chj%n#e@$sA+;?*rm^-K)oJb!v#DxAJ=Y=%RLu4>GC#R1N(hoMh;ObDd}8-H&L ze{Jd?XBR!02`IxA-R+@+)}6WVXEp}C-B{b7+V^9Vk#Y|W>9lNxrxbnziHClqLv&WG zXT~G)pFNk~>8t6Ai({r2T^b)io<q<7;39t0+FD5#6v)v|U}nz8pWjynKkEVR$pxL+ z%o$uWuzac?jzX+pO21CN34PHW6?fj3P5MXR5;1L;Ci9_u>sao7MOGO82`NXx$+v$;}EZEVi5P@H<<+3!O4QB zo->nhFcBH+-~<%Op$5o9y8=C=ng3I0CHLhPhez{4t(;6;U~DUKa%FokTD(JtTp8H} z5{a@~M5j2$`%Nh06Va*16Xf!?slfLaA6kkyO#XOdV|(sR*$$<`DA4WqiS3wOpekjC z8HlMqh}821PPmtWvNe^3=WAH?N5hsr`G;BXd`&S52Xf*{zNs=OSBq_HrYI7n4s(`r z>rMrqcqn=GZiKB;86RD_6=C)SGr;bH>h-c1)a#a2a#bWUIB2`&yv2+9=G~iNwB=~m z5zjfJ0fupV#{WrKtTTn1ahJWTzym8;eZ73MAMBiFcg{=BY@_7;&#&-7+*�KK0Hv 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 Y0j+7Osq9}yY5)KL07*qoM6N<$f(#mT^Z)<=