From 3edf976a6a20a05725cc0851896952fa74c87002 Mon Sep 17 00:00:00 2001
From: Dave Kuhlman <dkuhlman@davekuhlman.org>
Date: Fri, 26 Jan 2018 16:07:45 -0800
Subject: [PATCH] v.2.29.6 Fix to generation of namespace prefix in export
 methods

---
 MANIFEST.in                       |   2 +-
 README.rst                        |  18 ++++++++++++
 generateDS.html                   |   6 ++--
 generateDS.py                     |  36 ++++++++++++++---------
 generateDS.txt                    |   2 +-
 generateds_gui_notes.html         |   6 ++--
 generateds_gui_notes.txt          |   2 +-
 gui/generateds_gui.py             |   2 +-
 librarytemplate_howto.html        |   6 ++--
 librarytemplate_howto.txt         |   2 +-
 process_includes.py               |  47 ++++++++++++++++++++----------
 setup.py                          |   2 +-
 tutorial/generateds_tutorial.html |   6 ++--
 tutorial/generateds_tutorial.txt  |   2 +-
 tutorial/generateds_tutorial.zip  | Bin 48768 -> 48772 bytes
 15 files changed, 90 insertions(+), 49 deletions(-)
 mode change 100644 => 100755 process_includes.py

diff --git a/MANIFEST.in b/MANIFEST.in
index 849b168..99fe7ea 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,4 +1,4 @@
-include README LICENSE MANIFEST.in
+include README.rst LICENSE MANIFEST.in
 include setup.py
 include generateDS.py
 include generateds_config.py
diff --git a/README.rst b/README.rst
index c900431..89eef6d 100644
--- a/README.rst
+++ b/README.rst
@@ -141,6 +141,24 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 Change history
 --------------
 
+Version 2.29.6 (01/22/2017)
+
+- Fix to generation of namespace prefix in export methods.  With
+  this fix, process_includes.py collects information about which
+  xs:element and xs:complexType definitions are in which target
+  namespaces.  Then generateDS.py uses that dictionary to generate
+  export methods that produce the namespace prefix.  Thanks to Rob
+  Calvert for identifying this problem and for helping me to
+  understand it.
+
+Version 2.29.5 (01/17/2017)
+
+- Fix to prevent infinite recursion that happens when a simple type
+  is defined whose name is the same as it's restriction base type
+  except for the namespace prefix.  Thanks to Nicolas de Saint Jorre
+  for reporting this problem and for providing a schema that
+  reproduces it.
+
 Version 2.29.4 (12/14/2017)
 
 - Fix for exporting the child of an element, when that child is
diff --git a/generateDS.html b/generateDS.html
index 0184ba9..a94408a 100644
--- a/generateDS.html
+++ b/generateDS.html
@@ -220,7 +220,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.4</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.6</td>
 </tr>
 </tbody>
 </table>
@@ -229,7 +229,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">December 14, 2017</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">January 26, 2018</td>
 </tr>
 </tbody>
 </table>
@@ -3380,7 +3380,7 @@ following among others:</p>
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="generateDS.txt">View document source</a>.
-Generated on: 2017-12-14 22:46 UTC.
+Generated on: 2018-01-27 00:06 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/generateDS.py b/generateDS.py
index bfe6ae7..b29c78d 100755
--- a/generateDS.py
+++ b/generateDS.py
@@ -229,7 +229,7 @@ logging.disable(logging.INFO)
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.29.4'
+VERSION = '2.29.6'
 ##VERSION##
 
 BaseStrTypes = six.string_types
@@ -261,6 +261,7 @@ NoNameSpaceDefs = False
 CleanupNameList = [(re.compile('[-:.]'), '_')]
 
 NamespacesDict = {}
+SchemaNamespaceDict = {}
 prefixToNamespaceMap = {}
 MappingTypes = {}
 Targetnamespace = ""
@@ -2810,6 +2811,9 @@ def generateExportFn(wrt, prefix, element, namespace, nameSpacesDef):
     childCount = countChildren(element, 0)
     name = element.getName()
     base = element.getBase()
+    ns_prefix = SchemaNamespaceDict.get(name)
+    if ns_prefix is not None:
+        namespace = ns_prefix + ':'
     wrt("    def export(self, outfile, level, namespace_='%s', "
         "name_='%s', namespacedef_='%s', pretty_print=True):\n" %
         (namespace, name, nameSpacesDef))
@@ -4541,16 +4545,19 @@ def processValidatorBodyRestrictions(
         if base1 is not None:
             if ":" in base1:
                 base1 = base1.split(":")[1]
-            st1 = find_simple_type_def(tree, base1, None, None, ns, base)
-            if st1 is not None:
-                restrictions1 = st1.xpath(
-                    "./xs:restriction",
-                    namespaces=ns, n=stName, b=base)
-                if restrictions1:
-                    s2 = processValidatorBodyRestrictions(
-                        tree, '', restrictions1, st1, ns, stName,
-                        base1, patterns1)
-                    s1 += s2
+            # Check special case: simpletype that restricts xs:simpletype.
+            # Prevent infinite recursion.
+            if st.get('name') != base1:
+                st1 = find_simple_type_def(tree, base1, None, None, ns, base)
+                if st1 is not None:
+                    restrictions1 = st1.xpath(
+                        "./xs:restriction",
+                        namespaces=ns, n=stName, b=base)
+                    if restrictions1:
+                        s2 = processValidatorBodyRestrictions(
+                            tree, '', restrictions1, st1, ns, stName,
+                            base1, patterns1)
+                        s1 += s2
     return s1
 # end processValidatorBodyRestrictions
 
@@ -6847,7 +6854,8 @@ def parseAndGenerate(
     global DelayedElements, DelayedElements_subclass, \
         AlreadyGenerated, SaxDelayedElements, \
         AlreadyGenerated_subclass, UserMethodsPath, UserMethodsModule, \
-        SchemaLxmlTree, ModuleSuffix, UseSourceFileAsModuleName
+        SchemaLxmlTree, ModuleSuffix, UseSourceFileAsModuleName, \
+        SchemaNamespaceDict
     DelayedElements = set()
     DelayedElements_subclass = set()
     AlreadyGenerated = set()
@@ -6874,7 +6882,7 @@ def parseAndGenerate(
                 outfile = StringIO.StringIO()
             else:
                 outfile = io.StringIO()
-            doc = process_includes.process_include_files(
+            doc, SchemaNamespaceDict = process_includes.process_include_files(
                 infile, outfile,
                 inpath=xschemaFileName,
                 catalogpath=catalogFilename,
@@ -6911,7 +6919,7 @@ def parseAndGenerate(
                 outfile = StringIO.StringIO()
             else:
                 outfile = io.StringIO()
-            doc = process_includes.process_include_files(
+            doc, SchemaNamespaceDict = process_includes.process_include_files(
                 infile, outfile,
                 inpath=xschemaFileName,
                 catalogpath=catalogFilename,
diff --git a/generateDS.txt b/generateDS.txt
index 608888f..870ac5e 100644
--- a/generateDS.txt
+++ b/generateDS.txt
@@ -12,7 +12,7 @@ generateDS -- Generate Data Structures from XML Schema
 
 .. version
 
-:revision: 2.29.4
+:revision: 2.29.6
 
 .. version
 
diff --git a/generateds_gui_notes.html b/generateds_gui_notes.html
index 576b482..e1920d1 100644
--- a/generateds_gui_notes.html
+++ b/generateds_gui_notes.html
@@ -220,7 +220,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.4</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.6</td>
 </tr>
 </tbody>
 </table>
@@ -229,7 +229,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">December 14, 2017</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">January 26, 2018</td>
 </tr>
 </tbody>
 </table>
@@ -401,7 +401,7 @@ $ mv generateds_gui.mo locale/ru/LC_MESSAGES/
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="generateds_gui_notes.txt">View document source</a>.
-Generated on: 2017-12-14 22:46 UTC.
+Generated on: 2018-01-27 00:06 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/generateds_gui_notes.txt b/generateds_gui_notes.txt
index 59a6d69..51ed6e1 100644
--- a/generateds_gui_notes.txt
+++ b/generateds_gui_notes.txt
@@ -12,7 +12,7 @@ GenerateDS GUI Notes
 
 .. version
 
-:revision: 2.29.4
+:revision: 2.29.6
 
 .. version
 
diff --git a/gui/generateds_gui.py b/gui/generateds_gui.py
index 4e13f90..cabaf5b 100644
--- a/gui/generateds_gui.py
+++ b/gui/generateds_gui.py
@@ -41,7 +41,7 @@ from libgenerateDS.gui import generateds_gui_session
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.29.4'
+VERSION = '2.29.6'
 ##VERSION##
 
 
diff --git a/librarytemplate_howto.html b/librarytemplate_howto.html
index 0dff031..b225b20 100644
--- a/librarytemplate_howto.html
+++ b/librarytemplate_howto.html
@@ -217,7 +217,7 @@ dkuhlman (at) davekuhlman (dot) org
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.4</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.6</td>
 </tr>
 </tbody>
 </table>
@@ -226,7 +226,7 @@ dkuhlman (at) davekuhlman (dot) org
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">December 14, 2017</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">January 26, 2018</td>
 </tr>
 </tbody>
 </table>
@@ -380,7 +380,7 @@ this command for your needs.  For example, you may need to use
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="librarytemplate_howto.txt">View document source</a>.
-Generated on: 2017-12-14 22:46 UTC.
+Generated on: 2018-01-27 00:06 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/librarytemplate_howto.txt b/librarytemplate_howto.txt
index 702e571..70618b2 100644
--- a/librarytemplate_howto.txt
+++ b/librarytemplate_howto.txt
@@ -8,7 +8,7 @@ How to package a generateDS.py generated library
 
 .. version
 
-:revision: 2.29.4
+:revision: 2.29.6
 
 .. version
 
diff --git a/process_includes.py b/process_includes.py
old mode 100644
new mode 100755
index 723639a..1da1edf
--- a/process_includes.py
+++ b/process_includes.py
@@ -40,7 +40,7 @@ except ImportError:
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-VERSION = '2.29.4'
+VERSION = '2.29.6'
 ##VERSION##
 
 CatalogDict = {}
@@ -85,8 +85,8 @@ def process_include_files(
         'no_collect_includes': no_collect_includes,
         'no_redefine_groups': no_redefine_groups,
     })
-    doc = prep_schema_doc(infile, outfile, inpath, options)
-    return doc
+    doc, ns_dict = prep_schema_doc(infile, outfile, inpath, options)
+    return doc, ns_dict
 
 
 def get_all_root_file_paths(
@@ -151,7 +151,6 @@ def get_ref_info(node, params):
         baseUrl = CatalogBaseUrl
     if not url:
         url = node.get('schemaLocation')
-
     if not url:
         msg = '*** Warning: missing "schemaLocation" attribute in %s\n' % (
             params.parent_url, )
@@ -160,10 +159,8 @@ def get_ref_info(node, params):
     # Uncomment the next lines to help track down missing schemaLocation etc.
     # print '(resolve_ref) url: %s\n    parent-url: %s' % (
     #     url, params.parent_url, )
-
     if not baseUrl:
         baseUrl = params.base_url
-
     if baseUrl and not (
             url.startswith('/') or
             url.startswith('http:') or
@@ -173,15 +170,12 @@ def get_ref_info(node, params):
     else:
         locn = url
         schema_name = url
-
     return locn, schema_name
 
 
 def resolve_ref(node, params, options):
     content = None
-
     locn, schema_name = get_ref_info(node, params)
-
     if locn is not None and not (
             locn.startswith('/') or
             locn.startswith('http:') or
@@ -235,25 +229,26 @@ def resolve_ref(node, params, options):
     return content
 
 
-def collect_inserts(node, params, inserts, options):
+def collect_inserts(node, params, inserts, ns_dict, options):
     namespace = node.nsmap[node.prefix]
     roots = []
     child_iter1 = node.iterfind('{%s}include' % (namespace, ))
     child_iter2 = node.iterfind('{%s}import' % (namespace, ))
     for child in itertools.chain(child_iter1, child_iter2):
-        aux_roots = collect_inserts_aux(child, params, inserts, options)
+        aux_roots = collect_inserts_aux(
+            child, params, inserts, ns_dict, options)
         roots.extend(aux_roots)
-
     return roots
 
 
-def collect_inserts_aux(child, params, inserts, options):
+def collect_inserts_aux(child, params, inserts, ns_dict, options):
     roots = []
     save_base_url = params.base_url
     string_content = resolve_ref(child, params, options)
     if string_content is not None:
         root = etree.fromstring(string_content, base_url=params.base_url)
         roots.append(root)
+        update_ns_dict(root, ns_dict, options)
         for child1 in root:
             if not isinstance(child1, etree._Comment):
                 namespace = child1.nsmap[child1.prefix]
@@ -263,12 +258,31 @@ def collect_inserts_aux(child, params, inserts, options):
                     comment.tail = '\n'
                     inserts.append(comment)
                     inserts.append(child1)
-        insert_roots = collect_inserts(root, params, inserts, options)
+        insert_roots = collect_inserts(root, params, inserts, ns_dict, options)
         roots.extend(insert_roots)
     params.base_url = save_base_url
     return roots
 
 
+def update_ns_dict(root, ns_dict, options):
+    """Update the namespace dictionary with the target namespace prefix,
+    if there is one, for each global xs:element and xs:complexType.
+    """
+    if 'targetNamespace' in root.attrib:
+        namespace = root.get('targetNamespace')
+        defs = [nsdef for nsdef in root.nsmap.items() if nsdef[1] == namespace]
+        if defs:
+            prefix = defs[0][0]
+            # Get top level xs:complexType and xs:element elements.
+            nsmap = {'xs': 'http://www.w3.org/2001/XMLSchema'}
+            items1 = root.xpath('./xs:complexType', namespaces=nsmap)
+            items2 = root.xpath('./xs:element', namespaces=nsmap)
+            names = ([item.get('name') for item in items1] +
+                [item.get('name') for item in items2])
+            for name in names:
+                ns_dict[name] = prefix
+
+
 def get_root_file_paths(node, params, rootPaths, shallow):
     namespace = node.nsmap[node.prefix]
     child_iter1 = node.iterfind('{%s}include' % (namespace, ))
@@ -311,8 +325,9 @@ def prep_schema_doc(infile, outfile, inpath, options):
     params.parent_url = infile
     params.base_url = os.path.split(inpath)[0]
     inserts = []
+    ns_dict = {}
     if not options.no_collect_includes:
-        collect_inserts(root1, params, inserts, options)
+        collect_inserts(root1, params, inserts, ns_dict, options)
         root2 = copy.copy(root1)
         clear_includes_and_imports(root2)
         for insert_node in inserts:
@@ -328,7 +343,7 @@ def prep_schema_doc(infile, outfile, inpath, options):
         doc2.write(outfile)
     else:
         outfile.write(etree.tostring(root2).decode('utf-8'))
-    return doc2
+    return doc2, ns_dict
 
 
 def prep_schema(inpath, outpath, options):
diff --git a/setup.py b/setup.py
index 93eeec3..4ea8b3d 100644
--- a/setup.py
+++ b/setup.py
@@ -7,7 +7,7 @@ setup(name="generateDS",
 # Do not modify the following VERSION comments.
 # Used by updateversion.py.
 ##VERSION##
-    version="2.29.4",
+    version="2.29.6",
 ##VERSION##
     author="Dave Kuhlman",
     author_email="dkuhlman@davekuhlman.org",
diff --git a/tutorial/generateds_tutorial.html b/tutorial/generateds_tutorial.html
index 40a49cd..e2c7c02 100644
--- a/tutorial/generateds_tutorial.html
+++ b/tutorial/generateds_tutorial.html
@@ -219,7 +219,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.4</td>
+<tr class="field"><th class="field-name">revision:</th><td class="field-body">2.29.6</td>
 </tr>
 </tbody>
 </table>
@@ -228,7 +228,7 @@ They are used by updateversion.py. -->
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field"><th class="field-name">date:</th><td class="field-body">December 14, 2017</td>
+<tr class="field"><th class="field-name">date:</th><td class="field-body">January 26, 2018</td>
 </tr>
 </tbody>
 </table>
@@ -1210,7 +1210,7 @@ named <tt class="docutils literal">garden_api.py</tt>, you can create an instanc
 <div class="footer">
 <hr class="footer" />
 <a class="reference external" href="generateds_tutorial.txt">View document source</a>.
-Generated on: 2017-12-14 22:46 UTC.
+Generated on: 2018-01-27 00:06 UTC.
 Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
 
 </div>
diff --git a/tutorial/generateds_tutorial.txt b/tutorial/generateds_tutorial.txt
index ec4b328..d2a3484 100644
--- a/tutorial/generateds_tutorial.txt
+++ b/tutorial/generateds_tutorial.txt
@@ -11,7 +11,7 @@ generateDS -- Introduction and Tutorial
 
 .. version
 
-:revision: 2.29.4
+:revision: 2.29.6
 
 .. version
 
diff --git a/tutorial/generateds_tutorial.zip b/tutorial/generateds_tutorial.zip
index 2df8e3b9633f8cec64f6150fb17446a73cb67f39..d5e3c16766680d98568d9064d6e7d0062f1e22a4 100644
GIT binary patch
delta 12629
zcmV-bF{;jh{Q`vj0v%9G0|XQR000O8fKxh5V+F9!Tmk?94+Q`K7XTcSkhvOv2>=5x
zb8A{rx@%f>cnbgl1n2_*00ig*005m+O>5jR5WV|X%q5V8tTu#Ds3Dg&m!%05nnQc)
zYNhd7RMr?t&c=`*-x+zG4<B-fE|y0#PjB8l-Q0X;RR;_hb;jFYuwKJ9<Vbcf*--!;
zEIbUEqSL<m6#7k7)q2P+#TssZ^&`TMq4k{(9JMxLN;TMjQwYv=UV-JLmw+XXP&`z?
ztIfHuH=E<}sNN(gIj)p~TY^9tI<l@AA-4z(c~3_d4)BOENk4|V4ns~#03TW$K}Uok
zp@sbjLvLAzQ?BYqRd7%L+(*PmC)*mX)YVt@WpOOUH9X7bxg1SfDDfJ9&c4B!y@0bn
z73Ui2$LJ1iuHpN<g>$oltINylcS0%V=@M8ngHYEpmm-JEM!HPY<fF9VGFVI|x;-Y~
z5<|>w>Wo{3`|ShVIfEf#z0{L>4$}|~ikurirKL^h^7{0nWRUxmqc%+X9VfYrr{$K;
z$tUMProxnUE*Db+yWOjQ>saaC4vwueEzHpbKSwrA5b-qdtqeP`UEsW-SU~VecfH38
zFkUC-f{hDKu1+gxB6Y&(_x&9t(_*JzxT-Su6Oko&#GXIWk<dkt#Vp*|3^t=o)hDrw
z!cy>hoq}x!?GwFesMj&ES2$Bo^`5j{0*i<u7A0J=V@&2@ZE5lwVzK}vWLSoW#(Ct4
zvq4w}c6=K4MHrDR<zdg0O#&SO;FD_tBs$@`s@Aef%8c<*jtj;QR-V;M59#mhH?8th
zuB!h~O9KQH000080M39qOt@-KEJ!Z^0F=f602lxqlaRR;limUe2ZX|FT2Z=dlkNf{
ze`GthEYsuKZlcynJdNB-rql5(iKU1WfJLx?D5kytz3*ceSb!i!GR{oTGm=PR_wC#F
z{Y78Ben=B>uL=|E?A2g0IvWU;&2<!Kx330Oxd@*R#OrBr^-u49e0%fD$M<4c!iJBZ
z{^i5<TQLa7<G)_K9gpALyc0ivck}%Re*qB0O(8QAmjF>F<MI0+24b)*%lvXYUaeN6
z)x}5`x8s}t7(XDa32wG8!_wP1ipppJC)0s|WoBOWfSJ5_@q%{`aM5KV5pk6bMEwe3
zC>g<@RFzU7j8Oer#rLlUZ*^9xtPF3~xf+N$zk4+()k8T(m@mbADGQ^@SC$lGe+MO#
zsd_cIRhcSesS9uOJ3X(;I5FaEG<k9<EXtAnbYyf@%+&&LSEEdoV}@DAWum4QoO<_@
z2t#q5m4%L~Ig&%jED|>roD|FCYRt=9sK}~Zw(*enO8k4ZOj4QgA*Ng>N|bO{d&Rji
zK%HRx7Xh!tU&cW&)6rV|Pawnsf52Rd7iWJGUw^3PaU{jJz?(>YJrw_`ib!U1D82=B
z@8K^m7>YND+)#X{l6zIgbNIvnJ42(2c<~Zo&gA^=w$N1;U5c+3^bbFt>qHlqVwS*T
ze4onVHqI`^xk~YEE+dpi`~L4iApdJwsKtL1ns)D3PcELl_~u#rkkCFPf1%1{0aW4r
zqf*a9TnAtX3KAoX)LaAcf!LQK)0v{R%Zc!h+p@61V=<pi&d&D5!vKS`+nV0tO2xNJ
zAp1-w5iN;Re(FfVkaZEMg5JQAyuD!bRHfofOz<}@PU1|3OAB{`PjOc+WdD5tT~**7
zyXx{j27OeKPwc!Z@<i=*e@BEML4ZLLJphG@_S!8kml{mdZWiUj5y_)Vi(<sap;(^7
z&jtKEfuE=F^Q<L7XJ;4k*=!HIoNfT0zoc@sSZrlJEOl;q>ZGxj6%+ra0EuU3e`<Dz
zGhLQCt+zOu)SplC2Vry)M~$TZJy@P^Kz(v7R4FBayx0JFu^Z%We@R?E*?>1;c)fbF
ze7dpxY}fK<-Q~}BtPZL~0QYpVmktF{xm~~E*%lbJ0g71l`qX%Xm=h}|i2_H$`?i?e
z+NL(L1s*Bw+8X#ch>}s?BM*i<)~&QRUd2(lycCx2i$qI6JyDBto3z6_XTSJ&Ef+G0
zZ((tP*Jrz!<yGnVf2l95i(QYjX%SXSu!{Hy>=Qyr9FA!mMG3P`&Su3>$T`^fbvhIy
z^^hkr&U~x0<Akoa_;m=Y_5AMFN|$I&;Ufss)KKJwY9wqS(>PfJ8amUkd#+w~^k8JY
zY7`s5W_`&(+x$GsAACRKsrU1X=ac6b{Rn@hRLd2fu^&VWe-6xFT?&X$bc^@I<yv~;
z`;m+QZwmj0g5H-H%G7V?0HJ;ZoV`^Azg9(|iy?tn##zZ9#%ZpLQo6Spkd0rJan3JR
zvdH4B?O}mD!oPf~qPR+hu1bgkMOW^{2I3<3-h>pV@nMKq-@~AV>(=dv{?_eqqn>B|
zc1OJI%1R^qfAw`7-M6A+S+Nx(=FZmb#IUWK9bdLwsfi+*yBu=EvK+Z+ykjG4QI6=J
zwe}+vTyVv6Yl#gg6GqY@M$&Am5$x5NK7}}YY|{-4rr{4<Nz4;zAb-JgQy}d?#8I6+
zsK|t|7wd;$zQWSR`jov)+<qd$VE;T}Il<gQ&VX_ae+F^3&;zk3C~dgcaWoJ`l_+?K
zSHS~;44w5MCK;SX^gOgVhfQTDhqxzu2pH=eA(qATs$BL0oxY*W<r1=*C9aI7e&zz7
zMpO7zJO(6+3T2E3<q8d>T`T!1U=rOiTyY}HQxU;Q^#_rLParP~uB6)sze^Cbg#t4?
zR|0&Ie<~m~9SBSbTIr|<3G>pybo;Zbu|y#O^zct}y>V#;W=tHzq#L;VPJ@J%V9=v@
zu@>c0foLaSPf<Z^-VPd(qEwktaI;iv0Zv0y2GnD=7F8aBpxA|@d_4k*v5?(v`k*T$
ztR9P4B~geXzqi2fmR@n;M|jDdlG0i}@LBG`f1VZ!Qxk}lh~vQUo>Qjhqw^P|XGG*+
zCzb!PX@M->Nr!)vStX0LIDa-2=Vz1Wk5J?vjsSC=uPHj*Nrks=l{lH70v*nt2;bC<
z#LY4`!r5qw!~?XasB}gz$`vYBT#87Uc@fW)5wLuY0S@aLD4+QL`bK<+=PEPm(laD`
zf7uY7!!{}pQE4k-FlL;_WoX~D?8+YN(bkMw+}@X@a%La|o$sb-i(p6%u%mI;9XVGf
zN=>8$(-i21xGKvH5lbMdF3{;U9u904U{Fpm<eo2udtk)JHMoroOn4~;pb7_8VB^IJ
z<RF21kZF#=1|0wlTf`hjm{Sm4og$t;e}Df$nE6trvcADcAP)h(F3>`OwKjN1ynsp+
znOnH31LPnCPBus&aB*|YNL)j{ml*9`BFE}tVPK^!14xmgE<hwFl1&@cy(++i^C1|e
zpg4d>3cvwa&{R}kaLSNwpr0_+j0l0`F=aIaDgdu^&V|-w9n_J?h=dq81X3aie>z0K
zaC&4M_dHl|eTtF;c$61<4jz`4*l++&Sah#5dc^W9i>^$tb?{=S8amjBc+QcO`wVSH
zUI$C~+{TTIxB#;?we?;D-WOI@wK1wAJQJhbAebbc_NgzhqouxI`QpyV#L;9ho%}hQ
znf#^y+mF*wFRwsj4>-v3h{{4se-&c#=gvC^Pq%sAxAg|gl}H_NY-QYuwUE%+K(3Ia
zm%>%ZZ6Seym*GR2gzYdljxGk%i%tAK8HZX8nUF+DBgkYu7;;yRj<|@?DN-#>5nrmO
zumYHHt*bCazYwk<1;dNoWqRe1e=?Xp*+l*)fF>+7s?Jz-G6J9pf+i3ee_jTm9f2^>
zypZ{l>I-1D05_FI4zH(!>C;WTP<`u7qTY1G@wNmh^BjB$Im6K8Y922@sb*>^?_+E?
zFfPvq(`TEwydemp4}x$I2(e8?JV*mkWl<;)-Fan7oraB-awvWSD31EH(%UU~w`b$N
zkiy73Mh2!RYK2cyhuw3;f38P|`*h^bSOR+a=HoTLV26f)eM%q0aMX?&h%({}_FT@F
z4!swMUXKdD5pIicTfBqERf4|{(^3==5O))om1OlqeXTrBPR<6?Z+bM6cZy~w*^kO`
z@%ITCkssX&<ouAWM+#!E2wR8N@d2A^{J{Kw(<f@*GK`_<0uc?6e=mTlDODa$YUv|U
z1RkL-HZ(jZ9Q&~R3AT#~78V=?l0OIG7|V+Yorhph`mKrY$|e_#SdT6cV&{k$h9$jL
z<wze#2wsG%0>aNwh7g#QVN}Er*oRA5WLP<H=sjWddUS!%yFl~^j*tT3j2VuwaE?Xp
zNmx`Fagvbhu^^MDe~ek5uR_e8AZ7rBn2A8PSPNfik5XWCvsmnGXa?Tl`4$gK3%`KO
z&zEr$!LyJ;eXwAwxLk&*e9-fGRT%K23Iw?T3POl7sWAhm@Vrk4-db?Nf)fZ%0Jt9s
zoUq_9Y|q5x2&VSq%h6|;L5SmQO+&@!h-;5p^yA8)gat(wf9DwCBZ)(6r5707*~}+2
zA<jiWb_gV`i+>i+7l>z%eqdyRplnuPL49pR4ay}B$IuhZJtaoEV21&S#|2VXR!JG&
z%cN>Zd47f{_9)6*4~npve_RL)MKF}zx&n#Herb$Re#+n{5mfQ@uI)`LG%?TKIR=%0
z^XV1O8epB&f6mtktezGrHyp8eP0w9sWNBX~Q#OIRUQm3SC%{37Y*)It10of=x?RFw
zNGe^jKjb)At|9dTLdK<7sw7`j2_}n))^|d3GHobRw}C%o!9va<rpRR$E7JxE+4(QJ
z3NSBqFk?1nQ4H9}Gj2&x`}LCV;gx`GX(6P37tq*2e;qfk-U1HerZQU#V3!Dhg{ZNR
zy#y6<rmOPc8pjgk+oIky`<Q=+m6AFo=dpJd%}VVkPj}a{7$HjI4o)}7u2#8>N<diQ
zh_iW8MPQ72I5e`*Jhg%Q9Z0FY>OjKPfr3NpKvV`In87h+AmNvRf^He;V6oUyG!j@e
z3XUxre~G4O6dYPK5<NwuVE>|#*itkKdW%N66*xZ+vWzFoVevMX-O5g@pz~&<9w<mk
zAZ>Bnti7le+=g#~hmJE1Z@|LET;;TJ-lEF5@=44=a?ETq21$Wo7eEc#1&<a$W-f1E
z#YqA}*HabbVyFS7GYdA9glb>~nPi*S;1dgTe<e+qY4*vS;u%BL?p)_pLUINXY@t*m
zJm|TB#-#+~L&d#TUK%)lFr&RoeQ$*UC`F`ZCICHbZ3n?PxYUisb~`@D8=bHy?baCv
zM9Ol?j=LW?d@S9rpw?!WV)t4SVG#)SK;Q$vWjsb53-?}n<!f6_ujRJg*n3opn>fX4
zf0{V?{24|1^XJo{4OUe;1J2${aBZ_h1tjn?iGKsj(Zd_sgOz{tm~|>YKdgVVb}4&=
zFUDV8s~V#gIMi%G1J>DshAxI8X6fqO0xggq=I&<7m4PtAJqBJ6rga4WijS(Y8TS2E
z#BU)Af*n&rcUar7V@NaHjhRoE;clp4e@(rmk5U|DNfixna5g7DfWN*JHgdz}3ljD~
z!i89Y33U>Ma7&E(4gF~o4B%#T2-z)I*dk%TBuwJFM^1;0KOZ7tZt>{Ux1&3E%__*5
z_ynszedgL(Lhfo=6T)WC1{54ahzwm2M*;8IjohH&1bP2}<Mn7oeH)+cZOmHOC=pe;
zw$L(aCrBijtwjdz1?(_5+psp%r)=}cx$D{AAn6d`1<;q^WRn^ZdI7AHl@V|O_>%?_
zIyIl9Al~6|rHoPnAl^>Ww^MbdeH0f8BcXN8;!j3(2BnC~T!MJKGVsr$#bFVKxUa4Y
z<kRbubrLCmC%JHYrcmf{qzA5+$~&4%k#lMyV6?}|r~ntV8Z~9UQw13?>FR?$$*&_2
zc!X$36$#vdve<MsYms#}2ha0Nkh3WFabz=4*FFG;;N<+x$LmuvL{uPXQgcqd001L)
z1jE2}D-GBCEc2K?Fzy4u5kKH}qX!dtY^D3g945Jc)-Beev7$4lj2B0J!p6yUQ&CEx
z!MIjd{tk_?7JfL@ZZ0npNm2~t!Wg8%1C2doOMx_ZP2z9}trowFT!7M27FfP6RFAJT
zniT{~bu{A4W)?Ufq+oW@&L2yxkUYi?ijlt(@7e5r0U`2;u(8%OYx88nMuYHs)xhYd
z;*U6g!mh<kgU@a%qCk>3W#;x~hF?Y*4n~$(jv7n03jB=DT8+3PuxlZ6eh4x)p()Y$
zNiHcvAQe*?8H;!2O4}&N!_c+NSy5fC5*Wq9CM=|o`~!j%A5gY(AO|dv*RNk=G)tFB
zbr0rC2m^7nm(z_uKn1u~2Yy3k!EM`bKSG#)I+L4|^QniA(J0rnK_M_IS@6`{ABBCS
zZ66@8f>%2;SB9rBv^FEZXR>CxV|oTn9mxA4zNJbS5BrdxH8?{GAX9eg27NGA7Ht>{
zl&m8-|Jfb|jGoW|u;6a@nw79`1PK`OugwtTF#(Uo^A#2>&n6@L))Qezdsoryj&RL?
z*4S&NI&w^7l@O_5XBZd>AE8zS2ivur!-jsVoF*Q2dXN6kCOm5ldm;XHxo#wp+Fq}P
zzz>lKD^)kvJ7ka;YT4ib8v=Rxn!d5Y2EcEFwKt+qSY;69Nsf*%se+7=NQR;VyD<jk
z2GnlN!vgimsja|uiqlDg__<H1K=Vj{xrI_)3vM61r}dq~Egd(x-wcP#LeApOH0DPH
zWmxJlY^_TSJ$3m{^~#2>5OkpSQ0d2&wtEWNL8nC9s$_pM7WF+!C64H6Q~f5gZyrpY
z5HL~!mc37S_bJzCa6?_2*tn7f71W^WB8j#&=ZCq<OLEz$eIllDBd&3r#J8D$E~u(X
z-)5w*3!V;H!Wjt_1(YCg3Nlkocp{k$kc{2N*!pa>YlQeo+p5BCe9xQ^SYwe!V-*8E
ziMBmsv>$rWy_lEZx<Jz=n>88t7Sl%Xd}QeBcyKV}H9?ctuy7DEsDE2$j2MN=N<+{V
zvJ-B+Z8oZ0L1(YT{ddjX?w8?z|50PPwiNIKmM@S_9PHe00IVZP$`B#QP<Cv<d6oe3
zhL$HGgWBQ?3R{)u+IiUeESUwpR^k!CA>%(m>u>!nx$U~o#(^*Qaq-JmS&c7~hO?cG
zGd+sIB~D1&;T0<Ush!tpImg3;{vFP7((z?}o=c?qg9FeZa_u@`uFN2RcOBYTD#L;=
zQ?!*e)@e^u6bw$dTF}H)O>|oIm3t!X<x<NdiP(w=+GKo0dk-Eq-%n$|<Se??(qHVD
zj$4pI&<qyZ+{G!o0(&pgR@iLGpV0gp#n=J0Y+-9$Qm(<ShP|n2aKSQP{mn$)9%n&!
z!siVH^Fx4Z8-KM<ql#gF32$S@CP;O$<@WA7kcY<D_|2VlewfTWQZhu`(2^+`IqO<~
zW$6FIXit=MDTERkl~WCpUgFDW`mH|>?A7bJl0(s8Okatk#w~rwK|rg?U6=Hkhae{2
zOh9)UBcRef#}l<<0Bycw@xn^xHmK;AIjL>cAL|ygD@4(mz7MN^yB>IU;JVGTbrX47
z`wx_fm`G+Tk!Bqd{ZcC=w(jW#mH;vZp%$qNtg+bvX01HQz?DAIs;v>pFxb>}921DK
zt`6>~pw!=4R!~cG2Q)65u!K@s9Np=DlfVT$AesJ^+48$<6YFip&Mj!>3#JsCT`eaa
zG^PZOdUr=VZQ7xKP4U5w=d>NiNfTgDa?Q*REz?gM+M*TQg&#NivOq@n=*S!4V_(zU
z73WN-F}H~g4m#RWQ2*^)wdDr4h`#V0bWUoDRU|BQa1`@2QAf;}%fv?PoYFdwHsr7O
zEpkT9E9cb7W~p<J(S_EfoBOp>6K)C^iRT6<oFHrrOMcpaq*$qFJis@Y+!?ftaD#P$
zH;ZMJ&owKomEqG7MXT3#t4&SuLEr|v>=tktst8jJdB+LdG)&aJN>1zXuQ+QZmqB9{
zJWIfS(M|JRXF@F&;3aMDgxBLp(Mt@NHLeBfPP5%TYs3)U`Vm#_FsP)~XB|J{yBa5#
zBGukWBE=7XZeErk0Xco4QruRq2kaw*Rr-p)D9RNGU~J#KT-QJf(P4hD;+DBA>zQio
zW$BW7TXo~5PLQk!ax6gh&b-3!pZ{+Z&&x*UTms-XZakaWBy4uR!+w{CE<}dT>XV!2
zZ1tD#z;PJJ${ojWkiKy@V75UXT#xrkrPF%n)fnD?bqBt10237*gB;Lan{}$d4o7o8
z<(>-Ku^}gcSH+1-ETD1Wk4FaTFeu<rV{fvG^C`H0+8()cF50WC21J)xJ<Q2{c6YY)
zPd}-{a_^LYPRVRZ;7+Yi>mxfi$HTo+z3dx=#Oo(uhTQlxl@6~dw*oU+C9)W9+1*1e
zD#kW{VFeDz_)KJfhoxg%f%Aq!tsUacJJsp)_e2Z)?ineQhmvnk9Yl;bY%I`-xBb5-
z8hL(W?hcMwomnLvK%Tn)(E?j<rU}k!Nn6#!TCUXzr!v_k4po3pOIvdyK&PNp6)-px
zRu}=Q9w)?s;AG!e)<A%YJ2wA6O!}05ql}M#yQgt@d-QgUcu$7`&uj3#T{)dCvm+Z-
zi6~nEm2k`&N6F)<-`3{BUK!pI-|DrA+>LA1vrvm%LwH3+qB(?ecW_@C7QjmNp2Fp-
zyw~7F?er0K-2Sh<Ykh9xIP%~3uh>N808sECDam$tMXP9vl2u1ZDG{=ql3l1Jv82|2
z0e5-307>LS{`O42=Cx0NlrDD_R@ox=G1Jr2JJXL}_ZXhxhRW6!s3lw3TY*4jB5RBo
zv$=@Q#oXVFa#J({)IjpbncxVQVesQf(0;OXT_dOmEEa8UagS$1V?yFOWjqs*-{Kgn
zn?z^k#q4qgjvd>XbHRyI7?^@Cc$`LmXXW^m#RFU$Sv%&~jurnK@~6PNB_tS##jcol
z0_(4a>ol|FrD~0)SS`CNazm4EZjQ|gCkQ`+a;t5YmAD~Aiyyg^R#^PTV+<`}#kB3<
zIZFs@g2qmeg($2fA*c#hVu#+>au2~ZQ>Hy3Z1zFQH3uK(#$%>Gpg=DY-Q3N8owEJA
zEn)X82B48-_ss}GjRHlPA@ONO1`zi@q}adlY2!ju?br@|KY&(of68t_`@_#IfE@$;
zw+mcqWrw-U)CkvEN>Eu+X|6yYu~OBwb;mCS8siTO29+hSjdBzRjeRt#x3O2u2UHnX
zsZB*}uBHGYu-7UA_bIlZnnz%NOp2K&itNiZ+HMw5GV<(x&iD}TMbHqp$z%?y9W`jU
z>#xc6ACwVUTj5=<){4AZR22kGU>wcfo>q*ibi&(_Qxl2zH?7@}J3tclXskpVkJ|=r
zwhx&YNew_<_0!c^UqCQpx;)qqLiMA*sZi2Z`mp2<btSulw^<6cO_er(mZkDXo~h+c
z-OuR)wgErnf}Q#I!{4Ku$iK>6!;eSQxP}y=!X{u??$eM1KVH`ZJ>H8bJzsNxnEFu~
zH*nS>jIWH*hVA!G#e0YE@&eTx=*MAOB@$s@M??;!qR^$j)h_Z1ua0dpgn+<ji2f=L
z-02J+At0e*q60nq&`ZUC?8D{y*}sVu;jne`1YYE;WXZo{Wn}(ctyA<1W@LNPfaUP{
zIZz_wLYg>-#U#tu{AY9tE-fuvS4v;-C5zHHaR+XY9^`1<P<RwP0HB@8b_E8gHUt}5
znM_0B&?f3$a`h6$i6w`(z0n9M*$=-ddf_(?g<7!Sf&O3^Is$`#Ja7cYk^oO&>^mLf
zX`2<*>9$FIp_)6qf4xpQK*4o!tXLezCJ_u>8|$q}{p;)~_wf`ZB+C&dtN7>_uo247
zo<P8bZtCY<*8o)GCeBD<3+59eG9jlopkmfTbS$YI4svrK2m;|d2MZI0^rZ3GaR4b0
z&(sBH3qfuWMuVt-H=W(box4>!#6!uj@`0C6^eWczQE%?~(*WPi8Mu{TCtj9BBrxcd
zQYZo4FA>zb&<HL!QeoRUS)I0_&6|%1BjPd&7aHtVBQqx!$}Gw+Sv%y!Y&(;*-|Xq)
z^^KEk#Zwn>l8Q+$wX@}HA+pGz5mF|hOco4PEK>V=U+`0Z=wxh59K5@`BZIR`;-EY{
zG=4`O4aZ5m?9;*@4*C@(4Xy)vPKmwriSJVTY}=9TP;eDr_z<&P?FH8vDYx>hQ|0BJ
z>91*3+UqU&k%Bb*)1~76Zp{o5P>QE!ziYB(OR6hADCKNS!fSJQ5MMf6QgsQiAv7|v
zh&d4zjvt|ah^k+o1JGX_C?#79J=d9?drVa<u@POgW<nlqZv}Y^;0STLaOAH7gD8m)
zT$~IXw63`aak?l?IQNuSI<PdwznAKDm-Kf`7%ML*m8yKllo|oTuM7Frg5v`S>pBS_
zJclr?K4$i^qCw9o4FEAnS~={Kssd7fo~>XT!0#D<f(2NkNKx)I13$@JHPicMt~8Ob
zk8g#44tGKEaJ5<8nJ5<6(gCYf^Mhn=zk#YPWL2|*%u1<6{8;p;buliMb0sLlaAyz%
zIMz?SXraVn*&Bwvvv^so;TI@jv`FIKZv)Ged%qGDAe~#gKja!b5ZY^b1vXyrr-jTi
zezZ7$61s-m0T$5o@6tc|A$br3x#}W~46aP%l5T85tu=SB*U|wp>>lkuX=$J5p}hzG
z8@~+ryQ3OfRU)yQvbk{uMOGtg@+qAXL^`!p;#OJ{vEW;znG{s#rGpvordqD9&!Zwn
z)xQ9dtG|n|IoC&x3s=MmV!2vFZ}3zO^2Nn}PU2v*4pP+*=_8$2G<O-($vIuT7I1kx
z&jlB?Z1iT_%Zt%>2p^)YHZUe>*_Gi?)aKdnNstv7xL{8Sa>62Q8^?sxUdbf^1N>5M
ziRS6Ok89!~ToNT$1azBT#xwo{Gw&fb0kQ2_osd|=F9}HpkHwZ=3L({}va1}S<P_q6
zdGP!YN@8GagOWF*EGwINB(8DIZK){5nmVsux3JLFDq_`sWDZ@KlRK={P_5_kD;t)K
z@alkJhb4|n(NH+gss2==t<vh$VKp%UAP$|Si?tI+(M7%lQD|5DB9m7Njs*g(yv;(}
zu4}QI+(m&@d_&Z04+_|UIXu^<ZcW&KrOH$V83Dtkq4)!)Wkc{#DgSV66z0dXHM2dr
zmS{czxxcT9C73%m8lj0_Hs&L#3v3o@T%TCLfK!9dEQA()yGQI2oM<aV#bMO$Tl(g^
zxn-Y}bOSO|t`}sdP;r(SO@E!i0t$tr0eoqr1v|9&q-_nCJYKGH$y}fjQ{o?g5k{q#
z4#H;R#brko$LI;nUg`Y^sGE4d*J3#BI+m5Uy<5$Vdg0^n*^Ye)u?<~12xzPuFWt@G
zkIMi*nM|tvw4`5_*BgT^rNke>4sNy#ST0lcu_jCZ!^A`%jq}RI9KBK-zU?kIMLskN
z6D?K9ir>H(^-Tnp56hTyE!2&FtkkZSYMnJ%+gX*x>UUOSwQk&3mG$cPRcpc4_2yf$
zqm6$8`p&-0L>->|c>I3)l_u)P<LT+&zS2Y;{dD;L<n{6P6Xm%a+7ikd&PC`3%h~eS
z1cKu<mX~Td7NMJi<o>57h|7e4kmzqnt`KrBNLNf3B#&EWFx*xOe3<2bfnN|%O(Py_
zn_b5_GYI_07!`<@YfzoUQw;d;2w<7&UqV&`D6*ik=VkA+1=%hYwUBaEqNuCY*+pq{
z^@n*}3LuSaynKUN4+RXEGk&tk#$_q+M22eIxK&aZ{NjKYM>vW#c%A!#;3sOwDxFa^
zF3ba<8wBS~oEA*~ZaGwcQiKSqUYIT_S$6=9(2a5dE#rg76F5W8nrDd3EmhsaSrJ6m
z#8jcpx!epZ;$gH{0M-esE>m4DN;43(J7BfDRK$ytVVX5;^w80`W;iZD9Cg*RVbOXH
zH7pqyEi3<chkkjky{UJ_K9i#!PmBFK2{Kvfh__EL3vq8}XLs^{%bSx^eBN4X16n0j
zQ-ah-eV8N5AV=rRk(qepl6x0!f||q+OuS~Hviu^xgC{DQc3*ZDZWvwsKP$kqTMK<X
zv6lCvOe-{ov+Yo6?;VXCs2#jD@RmZiR+qRfRSl2nh$OUTQ=+6JT4s6op-C^+1Z*@l
z4>T>9x@6_8HIP1k>C_-(Ts>ra;#zCxZ1)*%6e)J#RrUwOT*kRi|5g%{%-g&0q_VCl
zWgTXDvaF^V&zaw-IXv?jOKUuUIBVX}(q`*<wVGYiaZR8*J!#jS?s=M%>H={k#(C*#
z7FKD6ZF3iNwZUH%`$ht1pbbgNRp70{y@mUqzR9KG{FnKEW=TK5>;BfanU}!kiIw{%
zXk5{l3(<Zw%a~DtogA=neT~wHY^a9iQ?#j6jnq|lv-5+usrOOTmih>cP8maGDgcD}
zdE_pFIcZ7zu9O02+|G$RjbB&W*<&5QvIjbvjK4OgylO=*`<C1pT9C920uTcPL2;xY
z<|NcP0K%bvcES?tRhv9oaUf$711^wg0UAJ)<1Y>+TphTz8zc`NRarJe>qNJ7+Ju2A
zwyZ&q{xDe;`9!UFlQ_L$Z&eUH3LaIjH0loCe5GS0(^VY4&2GZ*FX8U9{bx`2pMD3Y
zXzy4S8Lw}WJ-9dCi^kB9<)@b4ON*BihmOHGn1u&_Aw=+kpX2;2E8-cw3YT9-3uUhK
z)t;slXe^1A%iR<Mfu+j}rH>QVxO9sZ0_YMS7^n^~RM&qp2+9p5XE_*jOxrSFlh5c;
z2wjk;9AL5Vm*AgbvULjjWmZjwX}FSjd`X#i9y5%~9o@x!t_8rgqEPhV?J@Su6(E9`
z3ZlJ##wL#QJY&C?9t;iW+%DsfgW{Z`z45a@8&^M#QFk(SUULV%>A?M|Y2!g79~`>W
zD6GK<W8nQd=9CyjOzOm=N<KBS=^<Fvg<Xv->&CG*u2pi5xR-)6XyHx`XPcIuW(Ky1
z*F*BIEB_jKXw&O+tqbRBx#w`O3j-}CS|jd%Acqgl(@pr=$lDgyc4aU8<WW+@_G8@N
z%P3h;WejFr>4S&u9{}?y90+)>3Bm9qrd6s>e%5~+<(I`UeEj(Dx9}T>Bo!C>^<1sl
z3J?w~boc1ojUE;dNz%}1o<u}W0>F1|^6`klC6vmS(>u6S`7n&fm*b(;MhN;4*2;{3
zHOOnM?^CCrgqGiwK#&-XkEci2i5>{YJC!nL9-=~(K8Ng(u6msHkwtc<Hh<76j=7@3
zajJAO5Q&4Z7ZvA8(xXQ|C}mL@$l%s?a`Wp-b3mH}!cl67$Zyfl&VFZZLIhmuiKwe%
z)?uIm$PBI*mIx;o_$Wej@PQ@5e_>94d)l7vxuS?+^#dsT7G3xC+XV1&1^Xsi?5ZaL
zs-(U!Ad!Od1ApmH3h}r0;hiCxXM^$=fJ2+#A;f9V4ei5w6>kU`pVVtG-|(WKklgi6
zscPld3!ilCde`8Xa4LuuI5H05$G6NS_-CBQ_{sHqBM9NodXCKSvjIuNi@F1UZekQB
zvN=2#sDqF5?$v|j*ezI#SmTDO(P?E0N)R<}-vgKNi!PcBTJ&IKo^<0~2dju+9S5q&
zP5W3yd{9q$9iMFQS$S{{0<Ge<H!*dS(mWyJD%1R5Wcdv2I3KNuj?tNgQv}DR{dW^?
zv2H5srctP}2_l%GA;Y4e8gRIO&16?GuVR)OX2{GA^b8^bb+Ts5=&}!ofH48;Pt}_4
zZ5mz9uA$0Sp3cTs(enH=K0H>B4aS#wwz@9*gHNMf0^mS{M@$eJTD+irjtX2iq}d^K
zV~yB;PnJjbS$m04e-F(ofwgD%lN9Q9SW6G>SY|`F9?%rO1?Rv4JPIFw4qWM*n^UJV
zqR%i+ULVLv&67!iEN}-oMeg?Ocu=pB3w0l+rt96=@38C0E8~j@PvfyDS5J&F!^opj
zSwB?vj|~G%B3dk<pe?#`pq93-KMGe~yn8dYn5ie$AekgBw=LurV$AK=wC7S;m9s+o
z%j`hrKywMhpg^OV_1QsxuQ#Y7jU|OUutnq)_i!Z#^ouA7pc2xR*Y8AUl)ozlNp6~!
z{v%NTp9HF2g7_T4|Ex9tyQ1+3zuA&UlE2-@zouF$%I`L~GqIHWtnqEb5_(wpHUq}>
zYlKmxrcx%Ic=61j1nMXlm`;2#{cw8t>UcIi{$;A@<FK>!|KLM^5naan0(^Y_{5kl3
z;WJCp3zk;GMU-D9I}6?yrINs|rb|t3e3vZyfNm|pdBI2onNts`UvEC`?*At8ta|UG
z4H^F7Al$X|A?lJI(^LWo8O+xmqk72K*EdfA2?^+y$mkhba<dr_G@G#@_ej#K=4bx}
z|HE{RWeye!^|=jyLiZzvASeLI0Ie3dysPzfJVF*tEvwr9Eq+Zwow019ZfXdL`t&|?
z#Q+T=+n7W;iN$WCIW}fd43IO($e?PYSQrZGG)N%k7XKprSqty9ZC;UI;W5HGQWddI
zGE4f@cVwdgpwx0?AWsn4S=%WLZRr76W|~S4(CH~rS^$uLu0W!i`Q#3XQXMvr9zLO?
z_D0bN5`af^(EI3fl&5jgIYR%GVuuwOpcp%R0<lA?SsP(a^@Pup=Wd+Hp#gy5@hSY|
z1_48OO($ER=?k&iJ_5rBcJ-|G2!Ge;8h7c%#JYsUs-7WK9P1N=0<BXeOjg+TI)!ZV
z74gCf%l+SfddL3)%3vKluT?wbwr$s0nPAKd`F5x7_Sd1bT0wYo`l?bt_%%3Pr`dIp
z6eNhJTtC;sLU7>*&XV&^Pc;jzA7Ez9gY*WHjjFHA+Tl0XLDZ<qD#+K;K+MN%DIYDm
z$Cj$ad3L?tVBdC+lmfN6d}I}t#*OovI6zDTYPNcRdF|K@GoX~^NQGYQg7EXCxL!nS
zsYFzH+7WKgpk4&sG6wNWlmsKM4pN77#qw%MX@?Lt$mf(uD0)HY=mmOTCtYKcZGD*q
zNO(CnvCHoMbd;}B1l{58?w1kku(dy<t-b1C9@yHS!qzV51LB5VE*Ylrcjk<VI?$aI
zl=aYmRU0H~RjwG$MF`uJ4nU0cL5E(~E{aL5xYw)Ymm#Oy=7o>hi@c6YlmO{@e0Qg|
z@T<u`=X^{~1<2UOa;xia*18HAcTyng(|b(6&JP)1Jaw@%-g&m8el#RYP^f%A*GS&h
z@+}ss8B*hNwQy1bnR~-|#{ichNlWP#DZb%VTy|d2$YgaxeXKX}0${Q5j(x{@MT3hk
zA$<!TwXbLfO$67j3$r*o^ma*YR(e~DIQ%r7{#A*?$B!S!?~i}^WqkDR&E%gi{`<pE
zCvOhlb`XcZg_AojD*^M9XD&j2;}750oB@aJ_=f^m`v~60%(x5>DVcL>dwLV62|)P`
zR1>s|b0}y4MaZx8QH_|<uhapx;;W6iNR%z#P!q9By=keCFyg{?BY?MzuA;jPvl~WS
z#Bl^g97nrdlL^05OsayzOLaN7jGoS=@JdFy1wEk*9EFIjBZaKvZ$t@y<20!D<DJ_J
z^m$1g4*VMP>~!^pmNS64S+10B4Kmo}EV$_W9FP9tx{wqKhb>*sW`M7+TP^wODW#8c
zgy;&+80}h4eD`~p&I;Uh^>lI$9rr}JbQ?@1>hAW-$~IFfX;id2n>d@LORYmmRpDpV
zWVSu7Y}qqDP66j0QPU=WTafZi)iC<2#WJ~46TDat!m|h#EzDQ7M<j=8==vW?5fo}m
z1m7M@GP@qA{NTVo$(oKALdG=voRXA>*UUJZ5ApK6<N3I#u|r01b^*uV%9&)v2r}r^
zZV|)w2}kHHy9(J~K*%Z_bW=VH5DP)-8j!sr)IEjVlOtq5g6rXbR@kiNjEbVT;<o83
zk=(_i1T6DaT)jAe>s5LM{12E+=W@IeY<Qn-5$dye@Jxf;kdOqei6SUL?=EI;T?$<_
zHT;|{<^``R9>WmNhbI(;(c(5*BSC1|(fQGEBhiP1aoR!L@kk4+wk;*gD-x1?#3zr9
zknFB2(B2LRM}>)hcVu-Uhe#y3KHiKvapd9<(qj}KltIp^5?&!*tou}|-Ha(2fwXHH
zpjxLnDl(@0C{-shxj=Bhn<UKX`XeX@=2Wb+HF^qU7q?3T%kddjw~~$g(v*Q7(vc}p
zca<|pTr<{ej{m0;kFOVSP;YhG@n7NIiMiD=;TT{0w@x*GR!e-hywJ`~DuokZssD&8
z(uQB^dtWbyIe{7yP=NAlq%l_w@Lse2fH}vT2+-He0^TOcmecC2b;vq2#!r9TKC5*+
z@$y=;@G{DkKuIbq{pF>bs&zW0y7{(7(4qdFUM^}pvox@vLrV^otaFw3484a(1v9Bb
z!C06F`A-mkB&Iv}HZG}v%`xQYG4=<QO+mP@+(u2QW{?ow;H074PFaPx$e?~Dss*`s
zEu8$&>9B6=yf%HZ`SMQbp+6__tvOPPjxGe<U>ula!z|s0<ihVqJG-O3@4}s({he>a
z57Q(288~CF`=Q|?1*NkR|M<fTz6C^3P~#!m&6S}cNJo+902Nd!#7bEfQ`HRiLywOG
zGYMzed=3A?OFsnv0<%LhEQbkzQ#wpz1+dRtlX$r`121!Hld-xSAkKg~Ot@-KEJ!Z^
z0F=f602lxm00000009610JMRv0+Wxq7L(or1_lKH1BAkBld-xMlO(z%0Y{Tbx=I6v
zG60jGG8L1nx<CQYlkB=#10-tzlRax4lV!U=0ZNmmyIljefdG@wfgF<syC;)Lycq!r
zlViME0f&>myjlSblNr5V1I2~_lir3MlbF3g0ZfzGy<GxUm6MOT6_ZWAEe2<~00000
D$41Ly

delta 12639
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
E7nvgw%K!iX

-- 
GitLab