diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py
--- a/Lib/importlib/_bootstrap.py
+++ b/Lib/importlib/_bootstrap.py
@@ -745,15 +745,15 @@
"""Meta path finder for sys.(path|path_hooks|path_importer_cache)."""
@classmethod
- def _path_hooks(cls, path, hooks=None):
+ def _path_hooks(cls, path):
"""Search sequence of hooks for a finder for 'path'.
If 'hooks' is false then use sys.path_hooks.
"""
- if hooks is None:
- hooks = sys.path_hooks
- for hook in hooks:
+ if not sys.path_hooks:
+ _warnings.warn('sys.path_hooks is empty', ImportWarning)
+ for hook in sys.path_hooks:
try:
return hook(path)
except ImportError:
@@ -763,14 +763,11 @@
path=path)
@classmethod
- def _path_importer_cache(cls, path, default=None):
+ def _path_importer_cache(cls, path):
"""Get the finder for the path from sys.path_importer_cache.
If the path is not in the cache, find the appropriate finder and cache
- it. If None is cached, get the default finder and cache that
- (if applicable).
-
- Because of NullImporter, some finder should be returned. The only
+ it. Because of NullImporter, some finder should be returned. The only
explicit fail case is if None is cached but the path cannot be used for
the default hook, for which ImportError is raised.
@@ -783,9 +780,11 @@
finder = cls._path_hooks(path)
sys.path_importer_cache[path] = finder
else:
- if finder is None and default:
- # Raises ImportError on failure.
- finder = default(path)
+ if finder is None:
+ msg = "'None' in sys.path_importer_cache[{!r}]".format(path)
+ _warnings.warn(msg, ImportWarning)
+ del sys.path_importer_cache[path]
+ finder = cls._path_hooks(path)
sys.path_importer_cache[path] = finder
return finder
@@ -924,29 +923,6 @@
# Import itself ###############################################################
-_DEFAULT_PATH_HOOK = None # Set in _setup()
-
-class _DefaultPathFinder(PathFinder):
-
- """Subclass of PathFinder that implements implicit semantics for
- __import__."""
-
- @classmethod
- def _path_hooks(cls, path):
- """Search sys.path_hooks as well as implicit path hooks."""
- try:
- return super()._path_hooks(path)
- except ImportError:
- implicit_hooks = [_DEFAULT_PATH_HOOK, _imp.NullImporter]
- return super()._path_hooks(path, implicit_hooks)
-
- @classmethod
- def _path_importer_cache(cls, path):
- """Use the default path hook when None is stored in
- sys.path_importer_cache."""
- return super()._path_importer_cache(path, _DEFAULT_PATH_HOOK)
-
-
class _ImportLockContext:
"""Context manager for the import lock."""
@@ -1001,7 +977,7 @@
raise ValueError("Empty module name")
-_IMPLICIT_META_PATH = [BuiltinImporter, FrozenImporter, _DefaultPathFinder]
+_IMPLICIT_META_PATH = [BuiltinImporter, FrozenImporter, PathFinder]
_ERR_MSG = 'No module named {!r}'
@@ -1196,12 +1172,6 @@
if builtin_os == 'nt':
SOURCE_SUFFIXES.append('.pyw')
- supported_loaders = [(ExtensionFileLoader, _suffix_list(3), False),
- (SourceFileLoader, _suffix_list(1), True),
- (SourcelessFileLoader, _suffix_list(2), True)]
- setattr(self_module, '_DEFAULT_PATH_HOOK',
- FileFinder.path_hook(*supported_loaders))
-
def _install(sys_module, _imp_module):
"""Install importlib as the implementation of import.
@@ -1211,6 +1181,8 @@
"""
_setup(sys_module, _imp_module)
- orig_import = builtins.__import__
- builtins.__import__ = __import__
- builtins.__original_import__ = orig_import
+ supported_loaders = [(ExtensionFileLoader, _suffix_list(3), False),
+ (SourceFileLoader, _suffix_list(1), True),
+ (SourcelessFileLoader, _suffix_list(2), True)]
+ sys.path_hooks.extend([FileFinder.path_hook(*supported_loaders),
+ _imp.NullImporter])
diff --git a/Lib/importlib/test/import_/test_fromlist.py b/Lib/importlib/test/import_/test_fromlist.py
--- a/Lib/importlib/test/import_/test_fromlist.py
+++ b/Lib/importlib/test/import_/test_fromlist.py
@@ -1,6 +1,7 @@
"""Test that the semantics relating to the 'fromlist' argument are correct."""
from .. import util
from . import util as import_util
+import imp
import unittest
class ReturnValue(unittest.TestCase):
@@ -73,7 +74,8 @@
def test_no_module_from_package(self):
# [no module]
with util.mock_modules('pkg.__init__') as importer:
- with util.import_state(meta_path=[importer]):
+ with util.import_state(meta_path=[importer],
+ path_hooks=[imp.NullImporter]):
module = import_util.import_('pkg', fromlist='non_existent')
self.assertEqual(module.__name__, 'pkg')
self.assertTrue(not hasattr(module, 'non_existent'))
diff --git a/Lib/importlib/test/import_/test_path.py b/Lib/importlib/test/import_/test_path.py
--- a/Lib/importlib/test/import_/test_path.py
+++ b/Lib/importlib/test/import_/test_path.py
@@ -9,6 +9,7 @@
from test import support
from types import MethodType
import unittest
+import warnings
class FinderTests(unittest.TestCase):
@@ -78,9 +79,16 @@
module = ''
importer = util.mock_modules(module)
with util.import_state(path=['1', '2'],
- path_importer_cache={'1': None, '2': importer}):
- loader = machinery.PathFinder.find_module(module)
- self.assertTrue(loader is importer)
+ path_importer_cache={'1': None, '2': importer},
+ path_hooks=[imp.NullImporter]):
+ with warnings.catch_warnings(record=True) as w:
+ warnings.simplefilter('always')
+ loader = machinery.PathFinder.find_module(module)
+ self.assertTrue(loader is importer)
+ self.assertEqual(len(w), 1)
+ warned = w[0]
+ self.assertTrue(issubclass(warned.category, ImportWarning))
+ self.assertIn(repr(None), str(warned.message))
def test_path_importer_cache_empty_string(self):
# The empty string should create a finder using the cwd.
@@ -94,57 +102,9 @@
self.assertIn(os.curdir, sys.path_importer_cache)
-class DefaultPathFinderTests(unittest.TestCase):
-
- """Test _bootstrap._DefaultPathFinder."""
-
- def test_implicit_hooks(self):
- # Test that the implicit path hooks are used.
- bad_path = ''
- module = ''
- assert not os.path.exists(bad_path)
- existing_path = tempfile.mkdtemp()
- try:
- with util.import_state():
- nothing = _bootstrap._DefaultPathFinder.find_module(module,
- path=[existing_path])
- self.assertTrue(nothing is None)
- self.assertTrue(existing_path in sys.path_importer_cache)
- result = isinstance(sys.path_importer_cache[existing_path],
- imp.NullImporter)
- self.assertFalse(result)
- nothing = _bootstrap._DefaultPathFinder.find_module(module,
- path=[bad_path])
- self.assertTrue(nothing is None)
- self.assertTrue(bad_path in sys.path_importer_cache)
- self.assertTrue(isinstance(sys.path_importer_cache[bad_path],
- imp.NullImporter))
- finally:
- os.rmdir(existing_path)
-
-
- def test_path_importer_cache_has_None(self):
- # Test that the default hook is used when sys.path_importer_cache
- # contains None for a path.
- module = ''
- importer = util.mock_modules(module)
- path = ''
- # XXX Not blackbox.
- original_hook = _bootstrap._DEFAULT_PATH_HOOK
- mock_hook = import_util.mock_path_hook(path, importer=importer)
- _bootstrap._DEFAULT_PATH_HOOK = mock_hook
- try:
- with util.import_state(path_importer_cache={path: None}):
- loader = _bootstrap._DefaultPathFinder.find_module(module,
- path=[path])
- self.assertTrue(loader is importer)
- finally:
- _bootstrap._DEFAULT_PATH_HOOK = original_hook
-
-
def test_main():
from test.support import run_unittest
- run_unittest(FinderTests, DefaultPathFinderTests)
+ run_unittest(FinderTests)
if __name__ == '__main__':
test_main()
diff --git a/Lib/pkgutil.py b/Lib/pkgutil.py
--- a/Lib/pkgutil.py
+++ b/Lib/pkgutil.py
@@ -379,18 +379,15 @@
for path_hook in sys.path_hooks:
try:
importer = path_hook(path_item)
+ sys.path_importer_cache.setdefault(path_item, importer)
break
except ImportError:
pass
else:
- importer = None
- sys.path_importer_cache.setdefault(path_item, importer)
-
- if importer is None:
- try:
- importer = ImpImporter(path_item)
- except ImportError:
- importer = None
+ try:
+ importer = ImpImporter(path_item)
+ except ImportError:
+ importer = None
return importer
diff --git a/Lib/runpy.py b/Lib/runpy.py
--- a/Lib/runpy.py
+++ b/Lib/runpy.py
@@ -9,6 +9,7 @@
# Written by Nick Coghlan
# to implement PEP 338 (Executing Modules as Scripts)
+import os
import sys
import imp
from pkgutil import read_code
@@ -94,7 +95,7 @@
for attr in ("get_filename", "_get_filename"):
meth = getattr(loader, attr, None)
if meth is not None:
- return meth(mod_name)
+ return os.path.abspath(meth(mod_name))
return None
# Helper to get the loader, code and filename for a module
@@ -198,10 +199,6 @@
try:
importer = cache[path_name]
except KeyError:
- # Not yet cached. Flag as using the
- # standard machinery until we finish
- # checking the hooks
- cache[path_name] = None
for hook in sys.path_hooks:
try:
importer = hook(path_name)
@@ -213,10 +210,7 @@
# NullImporter throws ImportError if the supplied path is a
# *valid* directory entry (and hence able to be handled
# by the standard import machinery)
- try:
- importer = imp.NullImporter(path_name)
- except ImportError:
- return None
+ importer = imp.NullImporter(path_name)
cache[path_name] = importer
return importer
diff --git a/Lib/test/test_cmd_line_script.py b/Lib/test/test_cmd_line_script.py
--- a/Lib/test/test_cmd_line_script.py
+++ b/Lib/test/test_cmd_line_script.py
@@ -1,5 +1,6 @@
# tests command line execution of scripts
+import importlib
import unittest
import sys
import os
@@ -49,12 +50,16 @@
"""
def _make_test_script(script_dir, script_basename, source=test_source):
- return make_script(script_dir, script_basename, source)
+ to_return = make_script(script_dir, script_basename, source)
+ importlib.invalidate_caches()
+ return to_return
def _make_test_zip_pkg(zip_dir, zip_basename, pkg_name, script_basename,
source=test_source, depth=1):
- return make_zip_pkg(zip_dir, zip_basename, pkg_name, script_basename,
- source, depth)
+ to_return = make_zip_pkg(zip_dir, zip_basename, pkg_name, script_basename,
+ source, depth)
+ importlib.invalidate_caches()
+ return to_return
# There's no easy way to pass the script directory in to get
# -m to work (avoiding that is the whole point of making
@@ -72,7 +77,9 @@
else:
path = repr(path)
source = launch_source % (path, module_name)
- return make_script(script_dir, script_basename, source)
+ to_return = make_script(script_dir, script_basename, source)
+ importlib.invalidate_caches()
+ return to_return
class CmdLineTest(unittest.TestCase):
def _check_output(self, script_name, exit_code, data,
diff --git a/Python/importlib.h b/Python/importlib.h
index 8bc0d8128cdbb869055d5c9ddfb53b6cbc17e32d..b80a203db2086cd7d9b447a510daf8b89ced9f84
GIT binary patch
literal 169644
zc%1Eh$&v)gah=ZmiaEndLPqW>nGX5@n(;1^(LicM!bF0!5qN-P`gc`C`10JtBQmQo
zAQ})cgX!+7%ve2qdA`IifAPbA`Iq1R)4%__AAj@XPrv%@kN^FLzxmw{fAzcH{{27w
z=9mBDryqa(-#`BKumAC%|LLdS{=={T=0E)N?|%5jFaP3Se)GS6{dd24Kl!(R|Er&V
z`0Ky=-CzIZU+Y8v^}qe_pMUs2fAPcnf7kVzI{)nDzvZd-A1i&D()OB{^EKDMruykM
z>BIT6((L=gM9-}BbIU)MncpeT&-C3+KM(uNLLZ+zl+wO^hMP}3rj%qf`qai>a*t^V
zhQq^1(x@Bs!JqFqqU45s@>BB56%6U3FJ~V3oPr_Av}PXp>_(n=q30C`HM^n9%x9kE
zd<3IPyyi0xe!ik%)fGy#Liv~a$)49HKc5N#TxE4&SPRc*akG`hDj!t>rIjn6)^RP|
zs;t_wB0ce1EE_#G)9~u5y$3ljJoNX&Jg~&Hmg*Z(LbD&yMx82DILBFw*>)R=II
zi-?e0WCGd!GVXAKvBg7Ltc@jT%nHk>Z{Bq%HiNwc~OtW
zzq%-WY1crB2QTV@>nYT7I7(busvIJ}qO&C@?_g>>ybLoe^5pTJ?rhQ7O!WxRuu`S!
z{L9Kbl1Oc37I7jG%h5eWysoyNjhVq^cJbuto;;zGr%UbIGk@}QPdD9-JHB`*bsyby
zi7#xlfBaK6(T(cjeZP3$i7tVyFgw49b(jyBGhgOtU5=p&%ebTgJuiB)whNnoFZDW!
z#*_ulkv~gHC+{EC>NBO-xpXzt{_5ABJ
zH!X1|?>E+6bc|G}AWbVZv(@)5YNn2uN5M_LpQUR_T+WWCGt~$;#p1m~o
z{`ES6JIt(goO2eWZ!66{SunjnL1YLe<4!a;IrOTsD->;yCt3Ou**nh
zewb#km9O*9_h$pbXIdh{W){I8?Xr=jsk6SDb~6jwOd1x=V0|eeu6SC?;$6TR4qDvf
zD$S@6pt%Vl@TjS)gTC&N0c>7)L^Gsi|23S7Nq`{)IzCnM?sOZcjDDxy(Bre7>jGmsWkzWPXs>@Tf
zmM&62kMSf=UGc42l46vrskPIGJlVR=wc{Dv&0DZ>BUw5Xk~u696EosJPml?z?wW8m
zpq@k6uI10d5mXXQ2l8TO?DZ(E8_>(9LQOx|fFCiZtzvB@)-P*Evp$O$J<17xFa4Wt
z-hA}EI&YOZf3k(k#H)1iIja0tXihl$i3d()#;RNDe+5d&P0maT`&5^mTbbuTxW-}|
zILvz$t_|fPi$su*A{TdNWH{SZRy990tJY?>YR2<7%M@o=!vmU~>dUnGpLFz|QCXTg
zCHk)XwdD!a2?N_VO*XBWlLuSjd5t-F<^4KI!_Mb~2lFT>XZ>;(5-yX1Nir>%Zg@r{QgxCnRau`sDyXJFH1NXr#NMj@
zn?Vw5EWf-z$-HyP7HY*s%7bUI(DSQn-t%mz%-K{YtIRXg8~)NPX+3Ts2lbRf+tX#6
z4=APf)?=F;N-@j$l)ssY3Qd#3P`B~anPvdDz`?8}y%`5~{-9s6r#hT4y(aUIQLva+
zjiQxXg_(=;LE4UJRx^SNVq0zW@T5WzqH8
z?$_{TRVK?4%{XgnyPg%pKI>WGO%VWNdRZNRCo_Ugr7dOjc&+5CCbO|}CsN4OAOd}W
zgpd*0+cPkNqJecR#NnPtN|
zfoR~Jg$EU_P$SA=8(_NEMwm-p=SxwIq)S6#733G@x5}*cY-gnWgPzSxmKOp36L+K5HIQn+i;XG~^5R{_Hm~|9
zbE3>_J;OC@lTFP{nP5dhI&Y~*>?Ln)!?OMc+C)Z_)FWGwQ-ukrgsUPz;4LZZoUM
zjwl^iG#S(FDbusSs{)oSu;^HB%P5(D-*C&AQG!`~$1OufX<6WqTY4N66ytkN88b;^
zc$Gc^o>@4gVI7`-B8$W`;EitNY!{xZdrsz=;rG`~51b$=gpR%C{oXJLB~AEJVQ;E|
z>VJTtv8~=|Jpj0jP~*;zWJa;zF!)bp66~xbj`U`L*OIj_eqr83)tafz>W9xDc#T&;
zF$Rj^gs&Ox&v@XN^(DpHimxi~+ydNB;Kw?(-M6dbpOw8+2jsyM*VF#eDEqcNW*rq7`MEs30_Ij$;;=)!n5srCc
zIx27|>rMRsYKLrF^F{u@GpTv5%8J3?1L{yxGs}!y!J|!<-Og|>N?bmNVap0
zQ)3j2oz3iy&U|HqHN4DgVQGJX`C3m)!>yQap2CpCyeIZ_9?Hdl$ue032evHqnu&{T
z@>7GW-hXV=5RayY9@Ov$1(S?{ya>L3$I6U~1pMp~D^u&in#PrfoZBz99P?L*-f6!`t%_ztcRqDYIIifqXdnD*s3}a5pOZ4NRxUc(V0$S
zLud8mXRDVXhIg9vy{-B&i-k;h2U|K0}ZMu&Uu+>%C>hhP&v
zJiId*s4wU~BS1>ndJO9ujVA~DajvbxrX9r7=ohpAM)rP7ClJdQJthrnW|PmR3g(p7
z0}5J(p3)^cr6-2k&?#lb;oZCB3cMu%Maiv
zLQDkrvo$lMtuoxU!yxc0>c+NZ?Hx053Au$QSolt{d`YjJxGfmI7b1|A&
zEs7m)V=+XSSC!xku!r@N4JA4&**2!b9^y2gOo51k_$7}3g^!k;&35c$B#ghewhY3!
zr!99@UmdB!u`o)hBkH+fIai(5d(LxD*oLMTaHIf1=eQ9z)=>f{qG7R?>(hEHtQkJZ
zOETHuSnz1!L=f}(>{!5wh&IL?3)WoZV@ZLGFtASOory73$4WI&ifoS$)bGv1R=2hH
z+HK^87-_e(!CyO2m+|F%Vt(GR8@tV9Z5D$|}+Iuq-x96~;nPXL$uj4vwOF3na$)1u%U!LLH{2DO3_kOm8le
zK>upBHhPqJsQ);4n7aQM8+%(pYgy-N%$6}4I`X8UflO&F8LqcQv*HMSY!KZh?pDwS_8S
z{~|pSqxOjtgI%M`GSsnQY@h4cz&!3FK3cA)8);%OTKvmzQG!?5xX`s?CQz3}!}dt_
zR^2+Y#KK|*{Ts(cFo;h7q<}QGzrp5&UpCn5B>XW{L1<7`4{1~og!Vu*JH^YR=Hxm3XJ<!xiX=rs)KRlh^Ug4V>#C2(nk&r
zsM<}eRz1Q&%2x-Z_;NI~4SRUx)r;br@378q8w4loA5NWh!;3)RvI;H-Z!r<=CMwz}
zh8FuQAFaYGZ%1MWp+p8FY1Bv782O|!_q8a)sd9U=fxebM#_kHy^o%ko?g|az;LnB0
z2rGk!i(Ryvk18%gpM!pAovMjyCvXP`y?s*e95{m257N54X0S!8V>Um{Wk;@8t3Z<>
zM1d;#$ukue31dzZOu9jl%Tpo=avyv|UsVdI{!@tj1Oyr7jr69#a}&Npy%dWOdJ!O5
zd#Qy8%0G_xFF-@BSXf0YASzos*dmofJ>||{v
z*(CHTN~621Gie7JRkG9rzss*GWU>;YB1(w*$_%*b6sa*mReJz(<~Y<{S^^bu6OE#y
zkXWQFp+RE%JW8a~d#}%u+Ij4{k%xWc$O_u~!J4+z7((@_vpiKZMc-|mS2IYPJ^%x;
zl$mp>E?9P%il-v)MA6eiN@OLAt9f+jw*iHG5>}#iYh|^LZQTWRU;?Bv62#jJO!+v>$}yg|IK
z;YuZH1t=Ee0LOlwN|utzU?A5N*_wfd!Gw-Z-Xc0KBzUn4Ij~XHFro?S*`T
zKM|`?6c>FKQMvL_&43h0tWBEMcMmtXDo3u1KB$`V>6xHr_)D=H1Jtl_>K)%~FM~*y
z$M9gFj16|H$PqZ-;tOjj-$F+iS!a^+iCDFj-R>X-WF%K`~(LMGo
zYw$HEI{*t`ak7`!H(gv$)5a(?@sycUm7v;c#?Hi4p)Fc)(_lAfj@k{2m?Yg%43%RJ
zCLuTtt`@~#9VTO{?wm+vR;XEHM|$u9DsYBfIuF0iX-kki8NY9}S8zut+z&dp1kPgQ
z%%)!_$U(}hH!FHJs5XRifC((K_mpCUDI?+ljm5eAjo;nuiow4Il@UHbhxojxZ{|aE
zh|h}}A01zzQiyY#f~SO*`M{(}MP+tw6&7XOwB5YmT|$fU@>lZ|>tP6|G|mx1SL=@H
zHp9mkFvZ|&k|LqAQY2#NtxU7U;+x!_DgY|(!K9}|G1-iuCfRAlf~u_F@LP{rdH-?Hhf)OhRomF9;T;FVAkRS`av8?e@WJ=~
zB9mmai(xg!uedU%rdchG^KVadZVyI!)hVY;#-*hC?WFe@=#JlmJ$%c-4P%VNNb4CG!DcyeOuISx9tB
zAokb>UjXP)>mp)eZ-Pm7<|i9BEL(N(-)M9)%@Y93G(EkH`X}eJ9EtovvVIBKt-
ztt6IlkSB#}5u~+&GzGSk`boOY+Fu1d-pgWn45S-F+P2A?eHO1$t;3ZUhiLe{JP`$$
zSt&4EXJzWsHRRf31Pazn*0K$nQPe@yE`n)XFpynQH9pZ==w$F&F!cmPqk=5g)<~=%
zu)xHXHwloqV;H$*Bxl%m406bvJ~Z0Yr2L}Mri+8=1j-2llc){ko-WP*V>4@&(3Q&?
zFfRj*q*S44EfG=voDa<>aQ50@L~by~$pRzll*&=x05eex|2`DrbD>I%(Xt6;3QXAC
zW-4N%QAeBJIf2nf6-Qp$cqy>CxOJ`Nz-Ha5$B!);ewceF9J&0H^l``GOFt7Y}pekEuw&Z_p}M}0SXDOnT!*Swciio!vIJ;I
zwn5`06k*YW>=^quL*uslZ4@-RzYuf66+Z1$v&A8y{0lSjsN*`oruRX|!na`)n0c2&
zVt#^xu}J?57nPh%V7#am)n~_!zDTW9PDR#4c9HZzi+*aO37=v{MZ!g;#b)aIO!--8!!gl9)P4&h{6KQ>4zbF6vd;Z5+|Hz*jF
zY)L%yW{-CqoSq=@c*yTFF&k;F9+M(sNQ*6pPQ_0BGab54JRsTZ(WrXG;)NIOvs@JL
ze3GIaN(_WfGN^|xtJ!**eLAKPAG1rM64;mfEm4|o_9YlCa0c3fcsw|i?~o_&T-?t#
zaJFS3IeU>+kGDp1fTolDvyW(`lZg{4Hm31g#YV81r;3d>|3I;+c&B6!Mv4s|qr<4-
z|GH|88vC%q;+EyLZPXgQ5vHfr7?oh1#i_{dQGS?%)0*t+qS|b(>2gyX?+~(8`p%|g
zvwC2rI9&YtrDG$`vK&eEuXMHgu59U0M(?eS40053gvat0TfCsToAD`L=>sa1|5i{T5scdZpdTV+E@>t{ZEqn7}K%vRRP
zWCu+zNk(bnMKnRc5$!+#b94ZP4a;^p$I<%o(RH1G5wp$h(ipu!9r`W{ibmghg(VC^
zS1VFY6ea6S8{zFk8hhaIwGQM6Snr0-c_*>;JngWQvVJ$4*If?fB|$ow8*;b_K*7x>
zlx{ZDkcm3SMf4uWop-9qa@0hh9R>O
z?NJeNy{}UdoI_go0r3ik;PHnTi+*^7pzqsD&!?WQ{?bjB7Q%heqwh9{Zqk&%6b!YB#aYyPK0yhB5q(#wyw(YTBri3{LzD!Gmq
z@{~TKZjN({Si)RyqK>ve_6Y?WQwReZDmC;&GK1uISNVbUCQ}t~#uy9$E1g%|<$%|)
zU{I16LuadwQ?@i_7{ukyPVKeZ^rV5n-UFWCrJXJ8%G9e_zM#SeX1Q@G6jPihuu8RY
zN*7#GiE}XMiKKSX9O9T2%OYZ5ow}(0*Ha9T3&q&F-(q~1}O((QxgX-tFX!xG43n0eELab3WR4w^lOxc||-*k(5l-XK{-Ot(ze{?|lfuMKDVMuY@p5
zZFmrv;b9iVV#2_T$-yl0c9Uct}|bykkBC{_oVCmADWGvQkp
zdTW@^bdcYV4G%Vp3_qi%=UG`B@~CRYB(2;k#z1s?ldoUFuErIwKQcf!c?)M#I`qjY
zZjzXK81r(#UKp+2hr!!aY2&47%lz?%0KGIpw{cz5)pTRjgud%BG#OxsLwmrO3~;2I
z!TU{Ji2y|I*iI-qG}$l#e=x3z8}(-g&GX)J80S-eR#4u#8f9`V@ir=)}~h%
z?n66@qJO;norsh;j2Xu9D2y4(hd&8po?Jl6AlhfO5nMgb{BmxUAcm=hB@;&_m{Ln05Kw`
zw4+aygFvHbuRCHrz!vg;s|D*>Bbc0?WrY8AzzVA$&@Qu_>>jY_vLajk00noOjR#2P
zEV7{8bRLSyYv>rfUgmFj#%Z8V{}`wqK^PLeqlQ^nG-jZpc&O8%oI1;?6X8U!YH$+}
z`dG(6uB|5K=U5`R&~C9rL`%uyRg#l0HtC_e{kI|ywGR{fq+w42C>oqF7$Pv5r$cO%
z6Lk?e4JGQV?MK0$+x7U@3!B1ib?Y;lOK%#gnSFp0J{#ya2{+VgG!s;Ix1;7X(~w
za&2$I{-1VT_hN7aTaZxHj-J}H*vh95K|(Tx?$w^E@zCR4wMXhxf(G-c+JhPo_4k?D
z({-o#sEwFPRo5}h-YPtx>%bX7g{R}S1ns205hy%X*KvSHtMFJ|N5o-Y;Xz%eJRU1N
zVpJJj2hK=e;kgg29IHC9mQy(c(i@yQ!&s^(5fn{zCw4~G+CX1XUkn3$roQ;VCV6dA#W%T)Osy2EHzI0Opzexl@+T(??y6Cfo+7fzod-_VU
z{i;IvF{K&9W^iS>NfSY3W!8KltEZ?}2?ZU)GhU`Hpn7MO!xU*n#bmQ(o_Pi~QwpTl
zDI!DMk?z8QsE!*M!M;3?x)E9LlkhdwTWs8%@#rb}sUaEkzQ5d^#;`F)lL@sLLp`g8
zb<|a4?cpkJ)ro*I?^~fztNa~n9dvYbMx^c7zlK+G0Y2XWjr)P^~UF*#3@TbLc*!l?h+%wcBe_8M+MbUXXPx^x|gWw*D!AS?z-nlAwp(fu^nxH39G`Z!S
zejZKBAf&maek`Sj7Gm1rEW=Y9StG!y8
zDz)WFA1%7y8;CreFkOC}3{_a~1?%~eWT==G&jzYFs)*AhYZJ!MiC|EU(&fLESJ+?$
z14wT!?TU%GZ4s2J?Ut+XOo6Mgtl6J(7xAmW1%+eo0=9<1?3ud^lAYijVX_nd^Ih+J
zSFU45J~+wMW}SfPB)y7nH@6uRA(xD#g3T`jMr3r~PZ*IIxLDLr`H;t~B0glJR=Ov0
zlcMDY*>50Amr2O#Ek<^M_vW*>Bhqgs6+NxPPr{o8ioBq?36hvoEpI;Uymm}d!Wj_m
zFhOPhT7;;s8=KV6M1IGI)<0pey^x&L~A|Rigli-M`SoG(FlR4nP?ml0PEGDC4n22~cda-kdDXr^Qb3WkMmI
zfj7fapBmtJcc*4`DTd|LFctNEVTZ9eJ~}neLOt|WZ3DWXJuL{5LSt=7
zNERV+cB|9|p3tA*4v45Q9~h3HqdmB_LgerlZmj^~e;#q+4oDST%_#xRb5vHF!5@D{
z-0`TLd<>An@$hzkcUZ&=SHFSX`)-RIvbB!oOkCU0+VmIXsvoI*9^I1L_IN}cRxu&B
z;i~ikS#6d^9lo*bxkuQg$m8{$RfI3Awo4mZRH;}@8(9^{Yag=N3MA}L
zM%Dn!?r?P+Tw?B$mx~pEo?l7Dv|MYRMh-4+U*l_s4lX%Z$8s|ec5qcey+luaT=|o4nbTc~>8l
zv}#_@-xRx=tk?&A&c)l`>Z@uNSsu{I@6xbScXpKtSb*R*uP2(_C`so7pP0Z+w`k^U
zQtZCw69Y;7m0OC+>m69eBQkA{Oao&|0_4|Cs?Z;%6nF0rBY+_|VjkJAlW+aT{9JH|
z&;v8_huvo-e8m%{CeoKYVPc^?^@QmQ4?ST%VeFA7?7L@p1n47hKORg6|i320wB=L?P&E#ucr&42Tt
z{hJ3(4WFZ%WIXbqJ*tqd#>=_y
zmUB*IQ;{s^_xBys*{jMfoG);qOtaDJFJ+tcAVmBi@PU9YBp-%Z6NE5irFyJN_EMu=
z#^hdxjo|6Oh7ZwnY|C3ToLv-s5j*6Jhh&bO*xmV^Fs7FiE3n~fapE(1c
zkYIV9QDE=+<@fpTYR6C`Lfr=xQp6ipYV#`?xV-gnFBH0`8U>CeiU{#KckspmF#*LL
zQd)zgDCB2lF4o%{5F=wf+*0E8iYnu(#;~CI;3y3LjR3E}CyOfwCJLVtHa2yD5#|J>
z>Xa}wR?QV^3Yzy{T~PCu%sQ5>4PJd!XJg)+JkSfgCz}=1EOYBuhU*7vY}`}e$5ZWb
z^9wE7hoQwySG`w7z^#zbp##oUF0DYK+DCN#<=ss`PZ5n6=;@askV@QmkL
z#!Ebx?}u0c+TmpZ?Rg-J2*TNv39f_F(0zJ*cXD%fp|@Zm>dmwp81{@j;I;1AFJ>^rcJ4NK|_-S
z^s^+H$~|+e;2i$FiRcT)N&Ec%i+t4O`svD1PUC@qYB$c%wTW+oDoWLexuNU2=t)Z4xuxWznt#tt1K%*=}akf#xrfm_08gF
z$;iZV)u`XgaaD$rFD`wwciz7vxwM{_C|V0;(Koar<=wOC6>voh~WDZ`i|nOz3a}*wm1SW
zT>CFx5fqN7&U-U6Bh|)w0$O)nV;KlZZFDL(UZG|hx~u@OglpT_F%KtRRX6onZeAPR
zKwZu*1J-b;JlN?3)=p
zBjG01Fr#fWE`i2eyGqBhhj#YZh`n<#+
zy_x?T6JsUGA7WWY4iG*{BkUKc~vu~T6C8up3Nq|xg5^-SdJ?rPn|-=#@`cML#yK@Zcl4qDrg>LY`%%4
z(~V2r5kBX5>^fOCfaa_&inD1Sn6u)|!l((_(eeYS=2TU)L-H*aVC;PW{TdD*Gj~0c
zqF;C>XT~VVe!U7fp`WkMS*APE=qG~%
z6|O6c|NBQ}==CdGS9|jjVAB;m?W3Dcuo>#QiI<}k?kRe?{DJ_R4xA^e6he!*7EV^XoTz_SOjf}LO
z*uEctk48Of8t>(uQ6_HEhE$&Nm)J3INlq!pPhUL2?`Mdbx
zUo`xAi-y1R(zB46UF$M|f`dt`W-j_M7{QqkdBs*Yg~W4EmyLYiR=++a#S0y(MQF})
zkOF-zjCKYvpEYn%_%f7v;s=!rk}|k9mYUHO*}!bFvPK^N#g6!cGdVI$eN=_oz37cF
zDk#gHJ;nka2GzJ~9K(RtRss3QrPJti*A~46VKq1h)sfLc3>oXl@(toGYKAhjO0-9#
zpx4}T_E2>9n(WvE1fCQT*pHz@$oqm$_h$GqhEjnZx$2{=b!_kxYzSC7uVFhmslBO2
zoOuR_H_|!1<7`sN3Vt&Z-?8TIm3Et_JctnrrK_w;=Qw-gJu(AKOqf^fqi}jQG(n;4
z>5{a7k3)L`U6R?#C&BMcDBbg_Yx4}~XmygIEUL*6ZfrUWJ+TsLp;T?xYwg!bkcPzJVE-zRs6t86Sw$l
zGXL=3M!7LTdzV;KZM$KMgsY#H$8j+~DsZZ3_aV6b!&9skGr+;LuX0rjT
zusc0sZ}RUsy~HiXiiCnq3fvzrc1@K4>2oxPb<;jM65a9diwDe6853>_2-UU51vJ;p
z`o&=N(^#l0Z|ZZGF~!sB#39^%AEIGnd9v65{i!Dp)$E-ZwebgK>%@ORw`*CX<&r&>
zzzkXV(wHs_EV&%T`&HM*MH`nlqF|afWr3SC?|0)&e0U8K~{O
z;%0fILYR?#phBn&|Dp<^c-mtX0^bBLc8<)5Gzj8xvk9*MP=ydJDIN-p;=h!cRfeWYQ(i1>_oj+uo(@i<(Y`kZz4=oNiuP>Ds|9Nlv?G&Ty(cD4+h_$fkG|S3
zUe$kmKhP5`-mo*LL)`MTmYq=x%G3JR6)ZNQ?BJ$aoE&%%92KTdbgJkX{?AD8y@k}2
z8~@xwib_C@EhJ;!$ys(+0jfG3DID>D+ZkcH?z-qv
z-#tJ^g9JRAQ$%LdKsSegO((r0!K%x2Nmf*UF6>}pg
zR3hoM0BwyZ=coe@(6vTh5~a
zmV~Ss2^&BUKhXnx%5Wk_CqxBttBg{3^sN>FDTqWe0!7)EKUVkYl}7)ztT8jCyYxyy
zMUn6ym4jKKf1&=fJhiCDCwx`yakeLR78{A8YAdS_BN)^g7VgQ;77CPbj(5lZSPTyw
zmFH?I{E81vdDBh{edxZp(7j}Gh`$mIU@(=zoX~T{P~BS->V$%d?{!pXp!cq-_|psN
zmQh$4ACNgWsMNY2*nUK~ZoTI5hw#bY_SQ?ZA)+lBse0m5&32Bu!(R~u@
zZL9>@FSz0Wr&R7mEsB&ijqwbIlxe!nqg=5EtFcvOjq?6VrOd<`ccYz4T#H>L4I%|C*^CB~lUEv*c!6mNOM7)x97vm(
zJI*>x;ivCMuWhub;vFup%x*YLKTB;Qv0^##3HSNJyqcU(oS3%M*_=Ps9BdvWH!o_f
z`oB3H8^$y1czFB^KEK%Ks0FI}&TD(&keH?=lljD@Fh_`e_mCUf64k6lrfvFcONn|&
zg)lazwOvnJn(+BBLO{Iz3voeCzioHg@35}u%r?vHi*e62gd<=S%p>Fpk*tHqa$g)_
zJ+Be(@V3s(7LyiLZ;UO?CHF6iu{Lvh{(P9V4K5AQ4U7jO$3c!e_0kzqdM!TWz8*Z@
zWnU~HpmgQR4W$<@vDEctMl0$VFt9mu3&Ru2E9a@gU*wFUm?qCET`bBfc+nV&AJ~Y>
zbgiNI*hWNMeo%*}7Y(gY{T;qWdDs?yajp~@=q=8t_DdO7Tve}yRR?&w!)edE)dy>S
zl7SW`SYxv29Js<{#^b%O{vu=H
zwoW4xM#uT8i_1e!y9rOHeZ!1hR?)k)%m(GjF&cA$6lQK*qog#Ga&58$lsvm#iRaVi
zs!Nv15CTmG61#KWZ$-M%hDz3>
z^D$Dwb_nfqkhBno)`DHtm>SM__jbGYS3U5H5h=njH@YnGrH8oIzCKMJW@o6*HHyjGh0om~2Vf-(Prtk@;>hugSaR
z$^3o(DDM$%xx
zE+|M_mq@vOwZ5db8VMROI3J|be0JML&9Q2eplN_jCNyhI&IY`;+n$C=&@x3aLhpJc
zr527tH*F|-&&2BVF%ci{M~7L=sg8;}@ECih_e>#+afjzbR~039=fwY%3&UyQ~Sgh
zmH&auGn5v0b4u^7BB88i@ekGSI#-c!-f(67T*)?xA3nO0#5m9(ZJB=_@N7v~hM|zZ
z)^Q;r&I6q<!^<)1Yxb@YW9Kt!?jqUaA_L3#b`sVLOeB7wEID{-5;A5*shd7y^bB$h
zDLT0GS*@r2KEu%UDO!(ne6$`a$x(UUor)p#RxlSO4U85{a-A1!+tOS?BY+2(s7l5c+vAiJ){o=sZ!mJB{)MiB{Dig
zaygc8(z*y57m68*5Q9L0ow%pZKg9`btrikQX?15)D8W1{z
zQUQ_=ZJY?f=WW+O87C~?pGUR0N7{vg4uA_m1j|(v
zkQOO|Nr-^|O5sse-fq&TP+T%VYv+d`M}ThtIX=ifRaNhc*{5~GAImx(&j&^^g^Sl?
zW7pEwYCB)sS37YKhV~%GlU5EPjLp{NxrHzokHG3|0|-OfzQ0XXvo8sx~1M`YPFs~`!QM%WN@m&W3T|9
zf?SCM^&GG_kf65J=s`+c^t@DpGAe>#f2!#i%)Y1YC|tt`ZrwpqV{U2@SPP)4G%j>2
zM#HVLu?hQPm>BBa8v|_w@EUsUTXK&H*6wK
z<)M@83R=-Lhc;c0GveypHCs>h(c*Dh4w;54JwcPI>Ukq=^q`V(nVe{iEnc;+<9Lum
zUiM;mm*3MET(NvYZ?YA5!kRtdeIa-8G6*ew
z6rsZ}_R*&pcrqPMuLgbUB`9fstu8wz5J6W%I4D4ZWb=ka{J(D@X8Gn`x&b
zQltSt=w85rl_lc7Vfv3jB7-Tj#Iu3%vdEEtxp9p#Ei6?d4|H$VfhX+b;oQ&0L2FU*
zHtcr5rWeId~#HUP8
zNcAhHRMpQiT-&(M-JkRK`tmK^&~kM3X*K9gH@3r**CrqwM%@IlmJb*98rZKF1X
z>Qu=`d!<8iA+3(`Wxs#5zOXoA5-xd&GA@qHJaV&6Pe;
zb|GkM1C%1|;Zc~CF3XdAGyuBBJ$A#a5dK0rcCYB0H63$BuT7|nX+R)uXIIdJMZfav
z7)4FN48L`Zp}hd?=VtF|_W@QiU&PK9${>p%pP$#54D!kNZxb70g0Ygxt0`ZD-@j0T
zwNxTV4UC;Aq0Hry$-3_JAzx#8n_%Y4EnZv{GXWk4gE?G7^v=}|MyqRH@jK)ZmI@WL
z0wRP{=QW#tq*2oeJ-Y%~86TdgeJtG62lp8ccnOl##R0vdywLf)8Ap%{<(OFKLX(VK
zX+V>yRRlJPOn`!!AR@}A_8a?Rs~nK6DM-3v4dqfkGaZVAqWrBes9$NeqNZ0P>RzBG
z%fFpmH#v^?xo!rlAlA&^HMwpM|F+pQHf<}gRGygT)c)hNt)HQrv4r_!0*@xFb{I%~
zp`*p*^GsZ=CQk{f!{OPpC*vt20O~}gBphI4hB$~_IFt?7vv&hAYs$Kvcnu&o&!OYGe
zjW~Z|>9vi$Zd{cUbV{2jAVC|0D4^DElK>Ddzh}%dzb*R+B6)crZMf}f#i>8
ziA2ftE%~%69zfgsqIjs%`3s(?#usIQD-jkj`5tiPRFdrha5bSxiXIWgu0CUi3UPKB
z*L7i=g4Vm^x?quN4!A78alRCs)?LzVeBLwj`DUUk2#BXA9BB6g80{dBjOlP
zb!$AQB?Q5s`jAw9c8b^FP(4M!{2*z3>YZBbnQD)d*uRYe=8se59nG2AyA}}MjOz4rJDc>CzT~Sc&KX#?EQ0yNUIVqsKen~6jWUNoMLPK27Q1^L8VPxbu
zpPP{|3azcj=~=cY{Aid&0gYzX&3zC3F|;xtM;{v>$|upsuETl)O!RS^_O2qRm;2sH
zd*@L`A^fJsH?H_@VcdEV)$o~hR|D9{<+%ZIg&2RQi?d+RcU!3fa!KsBx0i3T5cJ1>4
zK2VGsSCwFJv|HRMx~k3wY~*oGz0!xmUYiK;B;F?VSn(iQH_qnXff&WsU1drk>N~vY{y9H=c$4g;Mf#bmAsfmG2)vQjHD*8&{w50bu5%fldtQ^u+E*y(X
zv2y9c!afdaYxONSV9ty{$#W%MbeURyYl66Phh6~AYP>Rlq*bZFo8VCHtO1Lu-JseG
zP$!Q`i}h~?}s!br-3KE2V=nySz+!Rd5DIzA<(kERMRC@EcpRLz%gk4a_%~pUY&<|
z%~y>vI_k4~vtY=#w==EIua1ja&iolnv|Up3y<1yfCG=sH5L0613spjR2s+NOmqNDv
zv5cLU4b?^C5X!WA)g0KQ7rLZX+!8apbTz70Qf8*tSSgVWUUxU-!DxHJTer0@yrt4_
zn+A43ZHM=WW|JIN?uw}_WMZMq)8gYJ0!_$djYnQ881n#GZ?rgf
zT?V*K*z6q7tUO5REd85v94J1kJiKHnX+A}{tzd}vCFz=?inuZHwx~Qm2Y9&OW?77M
zbhtpIy-Hh=g9}#H4LwjYZx_w8B;J@=Xsu{Kdt~lZi4<8c@pT7|7~!ae8Ch;8NNbT?
zG{7Yv-Op?RqdYTK04P|A^|1FZu-8IcXfWx`RCj!pUhf~lh_7CW1DAA--ty{g$hWue
zcnd%&0#UeUOdm+1KRASN58Q}3b!+^@`lTt}(J@HwZY_Rr`6}2nG{GyfIBskjMf>xF
zKC)?u2DF=A!9=w;1b-OBeVM6Se}wXCLn39Q8xO%8h!2bsPz%0flz?J$lZD}lrnO>w
zJ;&rLBcC@D*#WtLQ;Fa#rVDAGNlN}C$_G3v3ZCG8Nov`AW+JZ|o5m4^?pWWZv6D6I
zbI46FlpM?-p`S38oX)g9q#5{Z_^`IG^)kv(NP%Vps4CXn3WcGIx}Lv<(t}zRAXVmt
zdc2wgO;N=f(!!u!|MsFv9
zTFWa^Ct#s=`IqyM1uiJ%q*45BIKd@c7?~KvQF+l>t(RO!!~D)|9oH**!gpg+9;z;!z4k5#y=#}t0VzmziidT#*h
z1vsA7erH0F^08XZmuJEHG;{C6eoV?|&J?|gEkWc
z1GCQv^9Nbv-*d2~@s1g*J}EDYBbnqR5$7?!8H(6DmE)D6UZ-W0tPOE#8jkzbF3N%I
zg6^T{MY+WPm{YjlK|HAQanM&WRd`fHE`SYV(AHiiJto7qDoFUbKmZ?;
zY8`H+*XN|VoBfPP6}-bLM06|ipYvw_57&JP#-IzyV}Lvef?M261CELS&=Asi0466>
znxF&MfCUCwN-chE0z9bCu*rHfLh#wdp0aUMm6RFLiK)|ci_QDH!O}S2J-!Gxa
zk{LrhiSgT>cHzg{36dd3SsMVH{-#BV^_XhK`@>IhPVLc)(zo1r15xRPT!(2uSKk5=
zdvb|wd2LHEzP%Q#datE6h=1oXmyfbf>{b6iS77_9Ft{-KBfNHaAO%I28rNb%;iXjd
zvXac!VlwwHVWtJG4}VPfQXPm3VDL5&*%rq3nE(%LvI@q~gi_B8u1w39xMqT7(N!|F
zeA?i>j$tXe3>jgQ=xi)Q%U%8iAYx^1TeOF?ePC0h4p3ii4YP6;R)$Vuffy_9N
z_s>g4jOI1(lPskyHjjCpPMkQCMe@&+=qQ(x>MIoN!l-ECG{?kg0ErhuRn_wG>DEzR
zyr4gk8Vm0mpY}rdc7==AazDjzJI=uh1DOblTvm9MNF%10y`dOT^)xYozvPzu)v6D+
zBCQJ@Jvyi%g&~4Sh6xQ_6PAoH;aF
z>=4`daQx1k6}^dSzaq?_&fqc$ah!o}u)*XQ+Z|jC?lq@mE(Y(|uz{&1GwKGI*s&czAdNP
z+6?0xI3fsf6yot!fNtwNe{fMwGT|W(h8ct!DnXkGwnvz$z9C%&+UDLPo&L?K67n!H
z6zwT^jNy9tg~r)dctI)&L_z2?3wGe@Y*yzqBli!o5QHT^%t9cI^N|ZAvWsPP?p+{F
zP#L{D2{Y}`+JS+Qn<=GPtl*2nA&Yl_Dz$R@04se3Gn!wFCKYS?dL=Hy!w;SuV_B=d
zPLhQ%*W`uyB`FF;1FVnj@m2I%o8+SPh=-
zKd}YqbF~(GDbQ(`mFJ*Ltm2r*!@bEY^xRa1CFu`ASa4a2!8+^a!IZ-bM06Kw3;j*5hCSPt6BHP)
zMigF7w1>#o*^9brq>Fd=GqYz|y`@c!%l
z@wt}&?)2bU?(EphrQk<}E#_Q?@5C}?W9NBm{2OlFah_vRjHAoeh8sj081v4>`x$}7
zIV9G+3)cMFUOh|bl1ic~&pQ2R!KO{0LE0W%J*3vm^s*8d$!cJ&xu6ebMi=KCL4Pd=
zhn@Jyd)Ng9o^o)JMI9^Y6E<4LCF=x9*xAS-Ksu`sbnoiP6{WcDX!X8x^ijN=Hl7-SExIKs7!(?I6aQ^%I0aY!Od6d%Wd=gwwl*6~(BlM$
zR={-HaGoue^U!PrX55TeZ3_A;R?h^r>BCdwJ4lL#EG9_hX~hkjng)rJ;lI6!U7l9X
z(S$XiSCS!6xUx*NMI?Em7XP=}KfPa>Hj`S<=@AC%NeedU_%_-+%0zK#7UFO@uu)LJGxQhX9#_0DEx$
zRyj{|Fi*u2Mjkq6v_6Oq?KyDd)lSi!3Y53!rE^Dk_?mEM#0sr%8aRT|uYEqIpe-PN8)*bXe6I?Jcz+JC5%ixIknwoP0MAPVT
z_bLL%ci&j_{f2al?iQr87KrbFp1%ZyXtgO4OV0=qu!tsVx!L;gRDQ7aw;asO)E_xv
z)E~}NeGcZ_H8cI=pEJZN9vrhQ)AXbmA4n17bFqaIR9}eq!XUgKof4>V1AtFdD+BCS
zSr)c}?Zd-sU6jw>*2?JjII5L#Dcq&>b`#-~Fh~~Qh5KmKHV{=O_^@mRu2K7P*I@1W
zuRkjfVv{%r0|@oGIg85dJ#
zgB@`qECyvZ)URfg`ULE#qa@P3GAc-qjLSBNBxh=6i3Ip<3@g&Z1f;O7kNz?f;3yjs
z?-TE;58v`6Gn1RXhSu3dWp)g6Xr_Q`oZSyVH%I-
zNmJD8=dA^YoDZ7=nSrKPFgnYAgkb?w8AUFA|EgZ#6u36&)H#b+{(7HX+6MCm-SEff
zOOF;H8tsvRgeLD2;9>De)zm9mazpJb18%8YBgr37`3_C%g^iehzjdg5n5xrKIf9FC
zrXi-da6^o{+guO;<9Zy4Z6F`rXvPWa>R&A5dFbdE+gw@0D2}gp?BI;9z4Z#uoeKkg
za{0Ij7MasUM`5O^HQ{RYNhYfDxN2{OJ=8ZKNDdoUc(E=sEn|)2)43Rh#ZBv>yJpBI
zpSWxMPzTwMbRZ}2@i0%=2Rvam0{8=-V1q@6JORd4KdofB`&E5#zohEElbip@5K$29
zLqi06d|-$eUG|PCx*4nC8?9Je-p=(DDdCO&&4At~V$S$)zCg}E#$6>m7E2A5-lfAv
z?JJcmfRiaam81Y((apK{pZye=qRsUm6S*A5M_#he#Xl~c21oWH
z5+`=&)HQcue9Mb2Sfc>J^{Ri_EOuAdXML&XmE)<%BIK7KKE4$$=kE22PO4FbpQTM$
zKXXkPUNck~v3$@(rzlh41(U;S>{1tW=$5@IVQ@+=T!-yt)IpQU;047uyn@@-nO2)H
zVgap2kuSJ%5+dmwImG^yNPMV~2fF36ZiUydZqcT&o2rJPXvnq+|AkSjatUeW+7vxo
zy{}V_ICK2I2BjYy?ro~^15eftAncxBvO(;OA3?dP5~@8xQ)t0)n!DBldp~__&}PYR
zbuXZND9Oz`14%V2xpYFmKo$P-hLqxuY(%-0GV(;J?C1%FnhQe~p=d15u_4wNMv}X0
z3%3_WajL@4}sR|!z0=tK@|0cO^$
z$w1>qhSIC@9F;$^ZJ^FR>7-E2Z9HUE&)tyOSrfEju{IN>4SF2!fOqYAV$t?04o8Jei5j3E`}pVGNxwfquT4pCKZ3HIS6y
zm8@_xugpM<*Qq)2plX2hC6+~Piox3KmFeXbaI^(jofnMy;2bH2-@Q)Ht*I=O>aFje
z+wLZ-`B_d`uR`i{vt6M#g6+7=g|MyQ4Tv8C^=!SmYi2~RdjBRbQ7m#lA*w=
z)}OUwlh!5v4PNh=$9FMhn2O@2P>A2YpjZPS*Mirc3Lr@Q;H(D6`qFHLgluk-)7%6I
zEmc33phC7uG(1VAz@0&)2Odo*_DD9@-l5#>?c1(nvAy$>@Bq&V`JEVt{$ic
z7-inbWEr377%G6RwXuVk3DKB^HXL-o`s0PtK5hTX9oQDd-Zm(5{8spFw>>%o3(v<|N@y3^5skU?84a81&6Axxro
zxwo_42dbJ#f%<(ntMRaQRL>;-6HR0{M(1XzQ;hnV<5e)XAqOB`8z@~>(^7{VDOg1|
z)tvKz~}9;Wfn;F=7o$QfHZ5AHB`(6KTzzd(PPju)#x8z*$DHsOKYSEIl%
z8}p5F?)bSiy$b49o0vDY$4wj5wN$tgSRiSgG*0K{+II!h71MR01*oT^DSk&+kiSIv
zRsFCku~|WYyT&INmF$8k4+n}OD`+iH?LyU03OqRY=5!Ofo;1teDC53(9QVM(zi6^@
z0pl{`0Fy~?cT)t~LaPA?FBvs+HE+W+g`c9>g2i*J3hZy
z>I{grD;iFe$PqCz-!W=E$E$*H
zso3lBxxNlK)9+vCh}Dgr;xm%Dw7*B`?I5_ms;?
z69So6ZS;dWcCFfLz_~F#8M*JHiIsOD&`w-->X+N_hWUZc?z`MeCiz(^1J-=
zG)vkcb{_a+KZ+^v~o>=aPRS*K_9x3M*QiNa<;Z!t#&)XQGgvv$6`nz`1=
zTQ##bTa-*^x+OAojOj>S(F&YZJ>|ca(BrsGq$PGl>e4CI#T=3a^ZE*s+d)m0y>Yn6
z?TzgiBnlcSh>dk{n;l6o;p`;F+UITFzD;>&CZL(>4A3bY4#^nA-YEk^@Waa0ul7c^
zXwei21hnYn7bmiRz-8clD3WsD3_e4>zG52t(I|AYToA
z9+xbVh(RN_Cg_WwQ?*0ly3B=v>RRqjQs@c7jk21}^$K7Kz
zz~KY+6>ujQ9q1|nW}PkFc&3UiC)7PQ?*Y;k5sEfZ#Y2ryCO_-4!OBJS-6}(}#~ZJM
z@*UDa!aG>KZOh)1d;3ypgl%6XwpBe78lYGWWoO*Mdh3MMRHL#CBjd~kcX)SDwlqyh
zwaw4|9KcRC?Rm53`92!0G2%Z6Lk7!i(zV3|I8j}5Qt>b
zr~U49?cMZZt0OvV73(KUAQLnnW~u}=&}M&o!wJjOhM^%er+Z`&G>
zhdQ_UcIftUBMo2?2b8GsQWX{4Lmd7Cdc8KfK%?eqW6SuW&AtL_8&hL$!RE&n=$szk
zO?XiyxN0s;G?oQTCAcKp77Vub7GER7?be9dO>bYC3g?;Gd@$o@x5;LfO6?gsMhC8tm
zDz!o@)AnO*44R=uAy263XN+kwFD3rX*^*=V!+W?e+W2Vc=qoE{SkO8H(xlxua~#!V
zwI}>S$GUnCI_|k5@Tjl#eVg5g#I4s-8icg|BlWB4=VqQN)Fax6R^pzSk*bjJ^2(fVvdr~WTJ%b80Y1g}HU4cY~CYI!64qq2_GbYs&ijIqK-4YvMX=tDzwyc})Jfh3-<{V)vnx`f05
zZ*C0%wE>1fEnQ0hi~v=wQ>^}U-0Na-w}@&Ogu})TMvzDZJfoHAC8mi6_Cq{7G3YjD
z4qg9`HlWJp-LRrQLVdvS78f}z67YP0v)T94Z6VfrTZN$Tc+0Trd5yL0;|5Gs$#5JWvy9(HX#u3;%>r8iaJNyt-Xm^ENx
zW`K~U_u>oT+F|$+sIOr-jQ8hCS|HJwQ29#}uTbG7O&Jf8wHdV2B0x=41AumXE%#D;
zz-n^=#OIR+p_GGOTFuy;T
zm#9@UyFw%;+8M5}#?LKE>A_9y*W^detA;f
zzGP6#qBW7k+Pn@RED0Qz)zJhJQT>GmNd-xJ16cZ@RKxcIF_hL<19y29*~!vfc``U>
zomGIELtHpU8|X0d)VS1jmoQN4>Tc6uhm2J%qgX(xFyNUTMHI?WhBY=W7Kb_x2dD*T
z!mB@o%Y{1hKrLnHbfHYi2i`tu=;oVoJ-f|HjU7@CjkoyV>@-tFdcdn8yhQbYHIcxt~1X;I|sADz8jU-RSmS42q~E
zW8kko%$9|KWH*+OwYp5|a{clt$Z1g6A&M4>kA_P-OgRV+F$Un+c;m&f)z1t>j*r<}
z+R-%Y0H}8b#>&f2qfXec?4v>k%f3WfT^o+Ha-Bb+!tzgi;`@q_cmY^fn3crI&-9zb
z$Y<-ITAnM#rsSZ6auwamrCvWD4y8>y40Td=k_?UtNdERB$DJC7*CBt(##{#(CY+JH%gZ%jWIt)FCdYU+6U1U@)tXInlEI3F>LTX@vpj*(>>8)HXxNwtEjX|*#JRn|
zGB1mwmzYyLJWu#wz62Y_si$I}Uhd)9JzRtKC9P%n^elLRCKzXz*vXdqE<2D)(!(`N
zF1BXq%0=h93@(XPUd?oHZscaq7hEL{n^5SB$q_RMCNaDDj`svv%9z<3?;Av6EhV}P
z9x!J4p{hri70;%AV
z5ZHM_E^+>xShA^FtEnC}Ot1cvbB@X@l2$C4FBBd{Umx0J8IA!<%I*nMzyeeBG_PJl
zFoZC%@CE+hdicDg1@Yn369pv5C$w!~Hk+Q9aZJM(<;2cDNH1++1JXg$Js$}M;ADMO
zQ0Opx&N|RprI6!AHi_h{Ga1co0SwTBrYb|J>LVr>&r(KLU_BFTHZ(#2pGGIuJT#cR
zO)Rb(Oy*Hrm`(N4S`C_Cw-=aJH(9dLm7y|%YW_ozm8!+9te_pBFn9gAN6K`8-P&UCgYmUJ%P?4YkeAWaw|Lc^rey~S>mH934RK$=
zK)oVeI%)Q85IR_9Zganq;tn#HO9wOvY?A$89bN${Kxo8oGQF@+Gh=0Z)MkV=B+}2v
zAJUY&VRGU~L+4AJInx@hCZwEfe{*O1rPkid0d1JQEl!;>#MvwWx4TUoV9}Tc+$0+N-ZGHyAR>@8I;hClMgp>W
zhKk53ekhCt)UXDb&c26+=ou!Ph
z7Y`ez;0}QqVL=(jVG7k9j1O&jA8IM;tHfEIwF-3!4m|7Fea=>`PfaCFq&P3(xO3I@
z>p^a=9&%jUGi>4h_gvdCY~Ao7*A5xBpdM4@K3I%$bps|!Y^bBn;p6Tk6ji!G-w%?;
zzISC$wfSN{t++6qC?zQ>lCdjFdoXXKggk_1Rrh&TN(R*vdAC#l#V?+%aLDbD5I5C*
z@Jy=W4|>DYOIp;SobbN6R9kUvne#a2*1EXNWbB+x45n&F7bdJ+z~=@`pb;+^@r11|
zqU@z6vf92uo5CJ5x%-{u#BpVQ@@6A@DQth0fQGZ&Xnd3vdW(Y0XSjq6LZJsOoeJIJ
zE}np@8vGPb;eg0wpX60{yl>uhkp4|4W=9pgzU@T|IjK&nM-rGrdkzit-*L#hVF2l=
zwpm_cW)j{8Ev!h)@D6Wtg4IY$!!ujSI+m2DC5=e#qKI~0tXnGj{#m#fy6ss?QhY??
zs&>q|-CtB6h^wndC+GZ{7?&c*GfaRc+4aZFYF0{cDZz|r0P--Iy+U=
zpvc3T=Q=Jfc{F3hx;dSlsW-J}=>_J%VenqEJi`XkS)-_+WG__;>2dE4F*Q1;8GH+A
zm+Cy`8Ua@lQ+Nr-fbH(3#l1w1DejJNrPpM}@Hx@9$rM4t=u-f287O6c
zfdYaUB_HIzPP{({#|??N0lnnxSz@h;pz$|grNvpP_nCr5ZLom?z0n~2!O%$kH_Yxt
zKm~(Qd}5~$?{|=v0~$kQu8EG|>4&y1Oda&k$=CPn!iZ1D`gY@tg9
zrJU9GD6&e4hfU6{X(a_^me7D{Az4L6$BDLs82o7ipajfmCRI61XI8w!DWp#;L-snOgAflPnk|%`#rO(VWmq7d
z3z9J@5tTqb8!s>6xxUl{OT@vnGww&Ue!jNA7+2eU=U_JUZBIx{Xs@KAC>hZrrbFJ-
zV38zy>)@WrcHqa0rnjp|}iSJOIQE_aGP
zwHFL7mmV%R%;o>?Y=f7;7`j>R{W}rH+f1*;iVdqAq78E7Mz|x)tKfRZie<*Kw2!Vx
z??!rhq$}blWDdff(5u7OBrcrg3;JK?agW3_O_&~nVdwbu&GQ>`z6oq;E}4nPWRPec
zkOa5~_=JlX4F*;RvI#Fw$Nj59?C7D!4=FDXK|E$Wg+=iI_wv=gm*>l*^6&MEOL`@De$j(r+eYmaSh46_uDxDU
z^(AcYG8-go&LGudT+t4rA9PpOpdEgYN-BGKI;yV>6w4WIFCV>Zyhg1K>tHlRt)Ub<
zQsSW0T!>=ILDxeX2Mk-4%D)-A_ziOz#?r{bBrh$ZCcUQC7L4rRs7J$=tgq3#8CfG5
zAhwN!?KBA|cWdYXRJK+Wpy0W;pFD}fyS%76_$O{Cdqu<)4tmgzF>{RHGBn5b-T2sq
zk8gHizz{=&52QduH$7WNMiS`Z*3|4pU1)wIPTq%sAb4T>qy|@Ft=B5&^GWa@2v&~oM
zF6t`4Rtgaq-9_#1kLlidlGb+8iWW_eOTOCfo>lEMCsAMhBuOZQnNay1=3i+bVkiHq
zaoFob8k&W-Y$yjtaquk1p&S=PamcK0+(pr@4=n2ziI6k&{VG$OID$d+VJ3m9skXq6M>ylx$|Rw6%KLf8(H_y9cFY`pRZoIi!KV;#r?Jwk63x0
zAFchCR+bsYlk~r5ersFA%eNLT@ur)Z7WgXOwk;<+%q8{d{mEMT+7I;&=7ujCcAY^1
zY^q){S3hDYO2_(cNiHbY+LdQ>i26hmDxYm{4)%Zl(_j4Z7eD;vk3aqGzx?#;U;V=m
ffAj0#{OYIQ{qT>!`ssiE_|t#<;otr6i(mdfUEM_^
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -229,7 +229,7 @@
Py_FatalError("Py_Initialize: can't save _imp to sys.modules");
}
- value = PyObject_CallMethod(importlib, "_setup", "OO", sysmod, impmod);
+ value = PyObject_CallMethod(importlib, "_install", "OO", sysmod, impmod);
if (value == NULL) {
PyErr_Print();
Py_FatalError("Py_Initialize: importlib install failed");