From 83c56b73621d2d8cf4e107d2ea1540ea592bde37 Mon Sep 17 00:00:00 2001 From: Dave Kuhlman <dkuhlman@davekuhlman.org> Date: Thu, 7 Dec 2017 15:03:26 -0800 Subject: [PATCH] V. 2.29.2 Fix for StringIO error with Python 2/3 --- README.rst | 5 +++++ generateDS.py | 7 +++++-- generateDS.txt | 2 +- generateds_gui_notes.txt | 2 +- gui/generateds_gui.py | 2 +- librarytemplate_howto.txt | 2 +- process_includes.py | 2 +- setup.py | 2 +- tests/abstract_type1_sub.py | 5 ++++- tests/annotations1_sub.py | 5 ++++- tests/anonymous_type1_sub.py | 5 ++++- tests/anysimpletype1_sub.py | 5 ++++- tests/anywildcard1_sub.py | 5 ++++- tests/attr_groups1_sub.py | 5 ++++- tests/catalogtest1_sub.py | 5 ++++- tests/cdata1_sub.py | 5 ++++- tests/check_results.rb | 2 ++ tests/cleanupname1_sub.py | 5 ++++- tests/copy_all | 2 ++ tests/defaults_cases1_sub.py | 5 ++++- tests/defaults_coverage1_sub.py | 5 ++++- tests/extensions1_sub.py | 5 ++++- tests/ipo1_sub.py | 5 ++++- tests/ipo2_sub.py | 5 ++++- tests/mapcleanname1_sub.py | 5 ++++- tests/mixedcontent1_sub.py | 5 ++++- tests/mixedcontent2_sub.py | 5 ++++- tests/nested_def1_sub.py | 5 ++++- tests/out1_sub.py | 5 ++++- tests/people_procincl1_sub.py | 5 ++++- tests/prefix_classname1_sub.py | 5 ++++- tests/recursive_simpletype1_sub.py | 5 ++++- tests/reference_simpletype1_sub.py | 5 ++++- tests/rem_dup_elems1_sub.py | 5 ++++- tests/simplecontent_restriction1_sub.py | 5 ++++- tests/simpletype_memberspecs1_sub.py | 5 ++++- tests/simpletypes_other1_sub.py | 5 ++++- tests/to_etree1_sub.py | 5 ++++- tests/validate_simpletypes1_sub.py | 5 ++++- tests/validate_simpletypes2_sub.py | 5 ++++- tutorial/generateds_tutorial.txt | 2 +- tutorial/generateds_tutorial.zip | Bin 48770 -> 48769 bytes 42 files changed, 141 insertions(+), 39 deletions(-) diff --git a/README.rst b/README.rst index cc072c4..80b1b68 100644 --- a/README.rst +++ b/README.rst @@ -141,6 +141,11 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Change history -------------- +Version 2.29.2 (12/07/2017) + +- Fix for use of StringIO in generated subclass modules. Thanks to + Rohan Dsa for alerting me on this. + Version 2.29.1 (12/07/2017) - Fix to generation of code to export child elements that have diff --git a/generateDS.py b/generateDS.py index 2e7a2ff..748f668 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.1' +VERSION = '2.29.2' ##VERSION## BaseStrTypes = six.string_types @@ -6337,7 +6337,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO %(preserve_cdata_tags)s doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() rootTag, rootClass = get_root_tag(rootNode) diff --git a/generateDS.txt b/generateDS.txt index 46bbdf0..42c1493 100644 --- a/generateDS.txt +++ b/generateDS.txt @@ -12,7 +12,7 @@ generateDS -- Generate Data Structures from XML Schema .. version -:revision: 2.29.1 +:revision: 2.29.2 .. version diff --git a/generateds_gui_notes.txt b/generateds_gui_notes.txt index 0c0919d..d4a8e61 100644 --- a/generateds_gui_notes.txt +++ b/generateds_gui_notes.txt @@ -12,7 +12,7 @@ GenerateDS GUI Notes .. version -:revision: 2.29.1 +:revision: 2.29.2 .. version diff --git a/gui/generateds_gui.py b/gui/generateds_gui.py index 6d96b4a..ff91ffd 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.1' +VERSION = '2.29.2' ##VERSION## diff --git a/librarytemplate_howto.txt b/librarytemplate_howto.txt index 6caf901..f10f55e 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.1 +:revision: 2.29.2 .. version diff --git a/process_includes.py b/process_includes.py index 734d6a0..08ee2c8 100644 --- 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.1' +VERSION = '2.29.2' ##VERSION## CatalogDict = {} diff --git a/setup.py b/setup.py index 98670f6..1eb1c68 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.1", + version="2.29.2", ##VERSION## author="Dave Kuhlman", author_email="dkuhlman@davekuhlman.org", diff --git a/tests/abstract_type1_sub.py b/tests/abstract_type1_sub.py index 3a5a98a..51ec544 100644 --- a/tests/abstract_type1_sub.py +++ b/tests/abstract_type1_sub.py @@ -131,7 +131,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/annotations1_sub.py b/tests/annotations1_sub.py index a3b9f13..fc1467f 100644 --- a/tests/annotations1_sub.py +++ b/tests/annotations1_sub.py @@ -124,7 +124,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/anonymous_type1_sub.py b/tests/anonymous_type1_sub.py index 3785a39..cc15886 100644 --- a/tests/anonymous_type1_sub.py +++ b/tests/anonymous_type1_sub.py @@ -131,7 +131,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/anysimpletype1_sub.py b/tests/anysimpletype1_sub.py index 172c678..2f6bcb3 100644 --- a/tests/anysimpletype1_sub.py +++ b/tests/anysimpletype1_sub.py @@ -117,7 +117,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/anywildcard1_sub.py b/tests/anywildcard1_sub.py index 1c7ca20..84897dd 100644 --- a/tests/anywildcard1_sub.py +++ b/tests/anywildcard1_sub.py @@ -145,7 +145,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/attr_groups1_sub.py b/tests/attr_groups1_sub.py index 1dbf964..b5627f9 100644 --- a/tests/attr_groups1_sub.py +++ b/tests/attr_groups1_sub.py @@ -110,7 +110,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/catalogtest1_sub.py b/tests/catalogtest1_sub.py index d72941c..5789ad7 100644 --- a/tests/catalogtest1_sub.py +++ b/tests/catalogtest1_sub.py @@ -104,7 +104,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/cdata1_sub.py b/tests/cdata1_sub.py index 3e89c4c..e73b9d9 100644 --- a/tests/cdata1_sub.py +++ b/tests/cdata1_sub.py @@ -118,7 +118,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/check_results.rb b/tests/check_results.rb index 38f9fbe..63ce8b7 100755 --- a/tests/check_results.rb +++ b/tests/check_results.rb @@ -73,6 +73,8 @@ $commands = [ "diff -u disable_xml_super1_sup.py disable_xml_super2_sup.py", "diff -u defaults_cases_export1_sub.py defaults_cases_export2_sub.py", "diff -u defaults_cases_export1_sup.py defaults_cases_export2_sup.py", + "diff -u mixedcontent1_sub.py mixedcontent2_sub.py", + "diff -u mixedcontent1_sup.py mixedcontent2_sup.py", ] def check diff --git a/tests/cleanupname1_sub.py b/tests/cleanupname1_sub.py index 95b7655..0bdd0ef 100644 --- a/tests/cleanupname1_sub.py +++ b/tests/cleanupname1_sub.py @@ -146,7 +146,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/copy_all b/tests/copy_all index 4c9eeb6..0ba8184 100755 --- a/tests/copy_all +++ b/tests/copy_all @@ -61,3 +61,5 @@ cp disable_xml_super2_sup.py disable_xml_super1_sup.py cp disable_xml_super2_sub.py disable_xml_super1_sub.py cp defaults_cases_export2_sub.py defaults_cases_export1_sub.py cp defaults_cases_export2_sup.py defaults_cases_export1_sup.py +cp mixedcontent2_sub.py mixedcontent1_sub.py +cp mixedcontent2_sup.py mixedcontent1_sup.py diff --git a/tests/defaults_cases1_sub.py b/tests/defaults_cases1_sub.py index 2e3a83a..af45048 100644 --- a/tests/defaults_cases1_sub.py +++ b/tests/defaults_cases1_sub.py @@ -123,7 +123,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/defaults_coverage1_sub.py b/tests/defaults_coverage1_sub.py index c1bdcc1..63093d9 100644 --- a/tests/defaults_coverage1_sub.py +++ b/tests/defaults_coverage1_sub.py @@ -124,7 +124,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/extensions1_sub.py b/tests/extensions1_sub.py index 5dd0b47..1d42391 100644 --- a/tests/extensions1_sub.py +++ b/tests/extensions1_sub.py @@ -187,7 +187,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/ipo1_sub.py b/tests/ipo1_sub.py index 3205173..f5b8efc 100644 --- a/tests/ipo1_sub.py +++ b/tests/ipo1_sub.py @@ -144,7 +144,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/ipo2_sub.py b/tests/ipo2_sub.py index 3205173..f5b8efc 100644 --- a/tests/ipo2_sub.py +++ b/tests/ipo2_sub.py @@ -144,7 +144,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/mapcleanname1_sub.py b/tests/mapcleanname1_sub.py index faf1c03..ecdbfc4 100644 --- a/tests/mapcleanname1_sub.py +++ b/tests/mapcleanname1_sub.py @@ -152,7 +152,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/mixedcontent1_sub.py b/tests/mixedcontent1_sub.py index 1302fdc..3f6d05f 100644 --- a/tests/mixedcontent1_sub.py +++ b/tests/mixedcontent1_sub.py @@ -137,7 +137,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/mixedcontent2_sub.py b/tests/mixedcontent2_sub.py index 1302fdc..3f6d05f 100644 --- a/tests/mixedcontent2_sub.py +++ b/tests/mixedcontent2_sub.py @@ -137,7 +137,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/nested_def1_sub.py b/tests/nested_def1_sub.py index 7cb1b24..ad6412a 100644 --- a/tests/nested_def1_sub.py +++ b/tests/nested_def1_sub.py @@ -137,7 +137,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/out1_sub.py b/tests/out1_sub.py index c22e9ad..8738817 100644 --- a/tests/out1_sub.py +++ b/tests/out1_sub.py @@ -187,7 +187,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/people_procincl1_sub.py b/tests/people_procincl1_sub.py index ad55ab0..4cac655 100644 --- a/tests/people_procincl1_sub.py +++ b/tests/people_procincl1_sub.py @@ -215,7 +215,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/prefix_classname1_sub.py b/tests/prefix_classname1_sub.py index f815091..2200141 100644 --- a/tests/prefix_classname1_sub.py +++ b/tests/prefix_classname1_sub.py @@ -187,7 +187,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/recursive_simpletype1_sub.py b/tests/recursive_simpletype1_sub.py index 44c0271..acbf3a3 100644 --- a/tests/recursive_simpletype1_sub.py +++ b/tests/recursive_simpletype1_sub.py @@ -110,7 +110,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/reference_simpletype1_sub.py b/tests/reference_simpletype1_sub.py index 9866ae4..51aff83 100644 --- a/tests/reference_simpletype1_sub.py +++ b/tests/reference_simpletype1_sub.py @@ -110,7 +110,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/rem_dup_elems1_sub.py b/tests/rem_dup_elems1_sub.py index 4fec8a5..a4b8c9e 100644 --- a/tests/rem_dup_elems1_sub.py +++ b/tests/rem_dup_elems1_sub.py @@ -118,7 +118,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/simplecontent_restriction1_sub.py b/tests/simplecontent_restriction1_sub.py index 0e89a79..1ff34de 100644 --- a/tests/simplecontent_restriction1_sub.py +++ b/tests/simplecontent_restriction1_sub.py @@ -124,7 +124,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/simpletype_memberspecs1_sub.py b/tests/simpletype_memberspecs1_sub.py index d0f58c0..cce3276 100644 --- a/tests/simpletype_memberspecs1_sub.py +++ b/tests/simpletype_memberspecs1_sub.py @@ -117,7 +117,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/simpletypes_other1_sub.py b/tests/simpletypes_other1_sub.py index d375821..721a1e4 100644 --- a/tests/simpletypes_other1_sub.py +++ b/tests/simpletypes_other1_sub.py @@ -117,7 +117,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/to_etree1_sub.py b/tests/to_etree1_sub.py index 34b23c3..eebd733 100644 --- a/tests/to_etree1_sub.py +++ b/tests/to_etree1_sub.py @@ -231,7 +231,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/validate_simpletypes1_sub.py b/tests/validate_simpletypes1_sub.py index a78dd6d..de1aa85 100644 --- a/tests/validate_simpletypes1_sub.py +++ b/tests/validate_simpletypes1_sub.py @@ -130,7 +130,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tests/validate_simpletypes2_sub.py b/tests/validate_simpletypes2_sub.py index a78dd6d..de1aa85 100644 --- a/tests/validate_simpletypes2_sub.py +++ b/tests/validate_simpletypes2_sub.py @@ -130,7 +130,10 @@ def parseEtree(inFilename, silence=False): def parseString(inString, silence=False): - from StringIO import StringIO + if sys.version_info.major == 2: + from StringIO import StringIO + else: + from io import BytesIO as StringIO parser = None doc = parsexml_(StringIO(inString), parser) rootNode = doc.getroot() diff --git a/tutorial/generateds_tutorial.txt b/tutorial/generateds_tutorial.txt index e3f298b..0fb9cbf 100644 --- a/tutorial/generateds_tutorial.txt +++ b/tutorial/generateds_tutorial.txt @@ -11,7 +11,7 @@ generateDS -- Introduction and Tutorial .. version -:revision: 2.29.1 +:revision: 2.29.2 .. version diff --git a/tutorial/generateds_tutorial.zip b/tutorial/generateds_tutorial.zip index 72796061feaf3b438d4142cfb29f8a3a26b7eb17..09298b890a24b88b384642a10cc2b5baa95ed2d9 100644 GIT binary patch delta 822 zcmV-61Ihe?{Q`mg0vk|E0|XQR000O8Ep~@X8p#{TTLJ(84+Q`K7n5(577s3Tcyv`% z2>=6j#VK0wyOBT@f7>t+-SsPO36KCW9T-_EAWNGiXaW?dhjyxI@?;UEcmhe;5s)9> zJIcz3h7RE(>Uj6~?%m_v-Dg&Hz<^O_y#EQS6+DC-$qptv3ZR39?T{%t?W<3r-&Iwu zhul)E;a(pRz7MVMbl|A95mTzc{+&W_sq+<BPI?Vk;t0h<e+9hSocnscKAleLU6PXH zN-4M}2$Z2C>zWaAi_nnwbaLSUM~q4OG1PS!a#8}gZE*x05r%{o_9G0vWf{)7svlLs zJ^ynb5syx`HEh)8i`p!XrMQL{`Mi{)X$vJ@!^Ky)u-9<$yW(6!{TSV$%{6?Rw{U5$ zU~_YG`#~the>`0ROJ)%2TIN#Zkl9F=iJE+pHe3da$waru1YBZ>xlNsMtMK%&g-2&F zB&?TuQqN%;qCt^!?WeS~?p$7-f0PVzpK{cONq^uZm+`dR(mDC;9LQ9dvd-mVYGAi} za~&(a+rg=IriD40;K#_O2_l{bzLjAIwhLS~6blGGf9tOIcn!wu#9Xj(!O7L>3Ytir zF#7fM2+6eA=~u3*%>7Jc2_CWMk8~t-(PJ?SH#URKC{y)W?4qy~yj`c@A%pgb-Zj+g znAj_vsi%5R+Ae`bL=lS;F4-|A^RTuwc|BPG5;82qL*qR1#MvM$13Nwq`yz};mh!M? zRd`C&TT8L_ek}DfIjf38cs>z~F1J93%)+L5cJJ_54vH41G4OF8$?!uiX~Ljr#xq{D zHoc~VCWoP`CkxgV``p%WTU9GrC1u9=UycjL4_2PlYY*wq>^H6QbFQj?v#kQewh1kE zhf5mC8^~Ledbu?McEyvixjO=^0+W%s7L(rs29pZ9KmkOPOS(z}gE9b<p)wVdt-3$~ z&6DoBSpp$zlfk?clU=(?0!M6<!Mqfcy}L*Pvw@SrycClgyh#EEgp<L%6O(zoMgfGA zz`R-l3Wk%xycCl#y-EVYhLgd(6qAs>N&!ie+r3=^Q<amExfPR7zAXl1xc~qF0LOTN A$^ZZW delta 819 zcmV-31I+w^{Q`ph0v%9G0|XQR000O8I$?)Ph#o*uTmk?94+Q`K7XTcSk+~WP2>=5R zpeb4pppifof7~z(-Tf=L1jqq7T^eMmfh=v7LldAtGqh7rC(&o2vT5ie7X$h6CFOHI zJY<L#%M|(a`1o{l^O;p0u*aYi-u{C18n%53WV1<*deFUvhny%l?W<3r-&9qtb80En zaH}5?e&p77y63310b{Je{+mK@uG0!EC%ptLafHI5e*#`@N<+Qb9FIr!CP~S0r4-x} z^pv0@>zWZ#i_nnwbaedz9x+7e$57W{pP~}LhZaZB0U<}Uupc20mSs5Qs$o<G_w>(w z1blR|t>H>teN|r;$5LFwvwWV*(X@pUui@+)oY@OF`%`hQp<xW}(54!`&s#V*E4aG6 zynZK?e`204f+drMx|X>VIb=4{Wuzt@r45(BVl=_+F#?wuVs2As+$!8}AK=az>?77o zJ!#-D<zP_c-1sRiZaSCNrynJQ+{YBOVbbq7$z?n(w{%WAIR_FIrmS<hm>SsaUR}pZ z?{;u(ooQi?M)*0hX?hV)1K-N9ne77S4TS=Ne^0s_JYInDIx-h*T<_%SxPm57CyajI z-$67jcKU^@Dsw*(S%L=~_#+(&UG!MY!i~*fGs;wb61ylY1+UjB*e1|E(wl|`9U^;$ zGxb#ON!ul`h$v!F#3eh%WFFR*CNCxnKtzURcxaqQo;VwXWnjn0yf4CtWHIGEtHM*F zTtSMp_hYG_$yrq#!t)7Wbh!mOWEM8gvwMTba!{~1je(DcK!zW3NfQP|GoJCHwdplQ zG^x*BJz21}IHb0Q>#ADIDk(F@M>(!HK3jQKFFnM+v){BzPpPW@1GB6G#I^}KVTVhI z9zaoClX<x{0uP{*u(>+|tpbyfxfYY&0tS-_x<CO%lS;Zu1B5aFlb|vcldQTx0nU@{ zx>*AvYXFm>g%gupyGjE{Yygv?g%gv!yGR4HfdG@Cg%gt+yh#BElVrSF0fm#lyjlYb xh5(bHg%gu6y-EYah5(bHg%gvHy-EQ}liIyq0#ucgkhv9;PQEP$Ww`(V000jBYbyW% -- GitLab