diff options
author | Brett Cannon <brett@python.org> | 2012-04-15 01:50:00 (GMT) |
---|---|---|
committer | Brett Cannon <brett@python.org> | 2012-04-15 01:50:00 (GMT) |
commit | 49f8d8b016b030b7501ce8dc2babe5dfc14985e9 (patch) | |
tree | 8ae9126a13aa37da0d7d53e914e5e20864cb5c47 | |
parent | 59f9c3affc68611ef871212ab17d086c33107d82 (diff) | |
download | cpython-49f8d8b016b030b7501ce8dc2babe5dfc14985e9.zip cpython-49f8d8b016b030b7501ce8dc2babe5dfc14985e9.tar.gz cpython-49f8d8b016b030b7501ce8dc2babe5dfc14985e9.tar.bz2 |
Handle importing pkg.mod by executing
__import__('mod', {'__packaging__': 'pkg', level=1) w/o properly (and
thus not segfaulting).
-rw-r--r-- | Lib/importlib/_bootstrap.py | 2 | ||||
-rw-r--r-- | Lib/importlib/test/import_/test_relative_imports.py | 9 | ||||
-rw-r--r-- | Python/import.c | 21 | ||||
-rw-r--r-- | Python/importlib.h | 497 |
4 files changed, 276 insertions, 253 deletions
diff --git a/Lib/importlib/_bootstrap.py b/Lib/importlib/_bootstrap.py index 2b5c949..ee9936f 100644 --- a/Lib/importlib/_bootstrap.py +++ b/Lib/importlib/_bootstrap.py @@ -1083,7 +1083,7 @@ def __import__(name, globals={}, locals={}, fromlist=[], level=0): return module else: cut_off = len(name) - len(name.partition('.')[0]) - return sys.modules[module.__name__[:-cut_off]] + return sys.modules[module.__name__[:len(module.__name__)-cut_off]] else: return _handle_fromlist(module, fromlist, _gcd_import) diff --git a/Lib/importlib/test/import_/test_relative_imports.py b/Lib/importlib/test/import_/test_relative_imports.py index a0f6b2d..5b4e23c 100644 --- a/Lib/importlib/test/import_/test_relative_imports.py +++ b/Lib/importlib/test/import_/test_relative_imports.py @@ -193,6 +193,15 @@ class RelativeImports(unittest.TestCase): self.assertEqual(module.__name__, '__runpy_pkg__.uncle.cousin') self.relative_import_test(create, globals_, callback) + def test_import_relative_import_no_fromlist(self): + # Import a relative module w/ no fromlist. + create = ['crash.__init__', 'crash.mod'] + globals_ = [{'__package__': 'crash', '__name__': 'crash'}] + def callback(global_): + import_util.import_('crash') + mod = import_util.import_('mod', global_, {}, [], 1) + self.assertEqual(mod.__name__, 'crash.mod') + self.relative_import_test(create, globals_, callback) def test_main(): diff --git a/Python/import.c b/Python/import.c index be83ab4..5136d98 100644 --- a/Python/import.c +++ b/Python/import.c @@ -3016,20 +3016,33 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *given_globals, Py_DECREF(partition); if (level == 0) { - final_mod = PyDict_GetItemWithError(interp->modules, front); + final_mod = PyDict_GetItem(interp->modules, front); Py_DECREF(front); - Py_XINCREF(final_mod); + if (final_mod == NULL) { + PyErr_Format(PyExc_KeyError, + "%R not in sys.modules as expected", front); + } + else { + Py_INCREF(final_mod); + } } else { Py_ssize_t cut_off = PyUnicode_GetLength(name) - PyUnicode_GetLength(front); Py_ssize_t abs_name_len = PyUnicode_GetLength(abs_name); - PyObject *to_return = PyUnicode_Substring(name, 0, + PyObject *to_return = PyUnicode_Substring(abs_name, 0, abs_name_len - cut_off); final_mod = PyDict_GetItem(interp->modules, to_return); - Py_INCREF(final_mod); Py_DECREF(to_return); + if (final_mod == NULL) { + PyErr_Format(PyExc_KeyError, + "%R not in sys.modules as expected", + to_return); + } + else { + Py_INCREF(final_mod); + } } } else { diff --git a/Python/importlib.h b/Python/importlib.h index 191c5a6..f6989ea 100644 --- a/Python/importlib.h +++ b/Python/importlib.h @@ -2826,262 +2826,263 @@ unsigned char _Py_M__importlib[] = { 0,115,12,0,0,0,0,7,15,1,12,1,10,1,12,1, 25,1,117,17,0,0,0,95,99,97,108,99,95,95,95,112, 97,99,107,97,103,101,95,95,99,5,0,0,0,0,0,0, - 0,8,0,0,0,4,0,0,0,67,0,0,0,115,192,0, + 0,8,0,0,0,5,0,0,0,67,0,0,0,115,204,0, 0,0,124,4,0,100,1,0,107,2,0,114,27,0,116,0, 0,124,0,0,131,1,0,125,5,0,110,30,0,116,1,0, 124,1,0,131,1,0,125,6,0,116,0,0,124,0,0,124, - 6,0,124,4,0,131,3,0,125,5,0,124,3,0,115,172, + 6,0,124,4,0,131,3,0,125,5,0,124,3,0,115,184, 0,124,4,0,100,1,0,107,2,0,114,99,0,116,2,0, 106,3,0,124,0,0,106,4,0,100,2,0,131,1,0,100, 1,0,25,25,83,124,0,0,115,109,0,124,5,0,83,116, 5,0,124,0,0,131,1,0,116,5,0,124,0,0,106,4, 0,100,2,0,131,1,0,100,1,0,25,131,1,0,24,125, 7,0,116,2,0,106,3,0,124,5,0,106,6,0,100,3, - 0,124,7,0,11,133,2,0,25,25,83,110,16,0,116,7, - 0,124,5,0,124,3,0,116,0,0,131,3,0,83,100,3, - 0,83,40,4,0,0,0,117,214,1,0,0,73,109,112,111, - 114,116,32,97,32,109,111,100,117,108,101,46,10,10,32,32, - 32,32,84,104,101,32,39,103,108,111,98,97,108,115,39,32, - 97,114,103,117,109,101,110,116,32,105,115,32,117,115,101,100, - 32,116,111,32,105,110,102,101,114,32,119,104,101,114,101,32, - 116,104,101,32,105,109,112,111,114,116,32,105,115,32,111,99, - 99,117,114,105,110,103,32,102,114,111,109,10,32,32,32,32, - 116,111,32,104,97,110,100,108,101,32,114,101,108,97,116,105, - 118,101,32,105,109,112,111,114,116,115,46,32,84,104,101,32, - 39,108,111,99,97,108,115,39,32,97,114,103,117,109,101,110, - 116,32,105,115,32,105,103,110,111,114,101,100,46,32,84,104, - 101,10,32,32,32,32,39,102,114,111,109,108,105,115,116,39, - 32,97,114,103,117,109,101,110,116,32,115,112,101,99,105,102, - 105,101,115,32,119,104,97,116,32,115,104,111,117,108,100,32, - 101,120,105,115,116,32,97,115,32,97,116,116,114,105,98,117, - 116,101,115,32,111,110,32,116,104,101,32,109,111,100,117,108, - 101,10,32,32,32,32,98,101,105,110,103,32,105,109,112,111, - 114,116,101,100,32,40,101,46,103,46,32,96,96,102,114,111, - 109,32,109,111,100,117,108,101,32,105,109,112,111,114,116,32, - 60,102,114,111,109,108,105,115,116,62,96,96,41,46,32,32, - 84,104,101,32,39,108,101,118,101,108,39,10,32,32,32,32, - 97,114,103,117,109,101,110,116,32,114,101,112,114,101,115,101, - 110,116,115,32,116,104,101,32,112,97,99,107,97,103,101,32, - 108,111,99,97,116,105,111,110,32,116,111,32,105,109,112,111, - 114,116,32,102,114,111,109,32,105,110,32,97,32,114,101,108, - 97,116,105,118,101,10,32,32,32,32,105,109,112,111,114,116, - 32,40,101,46,103,46,32,96,96,102,114,111,109,32,46,46, - 112,107,103,32,105,109,112,111,114,116,32,109,111,100,96,96, - 32,119,111,117,108,100,32,104,97,118,101,32,97,32,39,108, - 101,118,101,108,39,32,111,102,32,50,41,46,10,10,32,32, - 32,32,105,0,0,0,0,117,1,0,0,0,46,78,40,8, - 0,0,0,117,11,0,0,0,95,103,99,100,95,105,109,112, - 111,114,116,117,17,0,0,0,95,99,97,108,99,95,95,95, - 112,97,99,107,97,103,101,95,95,117,3,0,0,0,115,121, - 115,117,7,0,0,0,109,111,100,117,108,101,115,117,9,0, - 0,0,112,97,114,116,105,116,105,111,110,117,3,0,0,0, - 108,101,110,117,8,0,0,0,95,95,110,97,109,101,95,95, - 117,16,0,0,0,95,104,97,110,100,108,101,95,102,114,111, - 109,108,105,115,116,40,8,0,0,0,117,4,0,0,0,110, - 97,109,101,117,7,0,0,0,103,108,111,98,97,108,115,117, - 6,0,0,0,108,111,99,97,108,115,117,8,0,0,0,102, - 114,111,109,108,105,115,116,117,5,0,0,0,108,101,118,101, - 108,117,6,0,0,0,109,111,100,117,108,101,117,7,0,0, - 0,112,97,99,107,97,103,101,117,7,0,0,0,99,117,116, - 95,111,102,102,40,0,0,0,0,40,0,0,0,0,117,29, - 0,0,0,60,102,114,111,122,101,110,32,105,109,112,111,114, - 116,108,105,98,46,95,98,111,111,116,115,116,114,97,112,62, - 117,10,0,0,0,95,95,105,109,112,111,114,116,95,95,37, - 4,0,0,115,24,0,0,0,0,11,12,1,15,2,12,1, - 18,1,6,3,12,1,24,1,6,1,4,2,35,1,28,2, - 117,10,0,0,0,95,95,105,109,112,111,114,116,95,95,99, - 2,0,0,0,0,0,0,0,9,0,0,0,12,0,0,0, - 67,0,0,0,115,109,1,0,0,124,1,0,97,0,0,124, - 0,0,97,1,0,120,47,0,116,0,0,116,1,0,102,2, - 0,68,93,33,0,125,2,0,116,2,0,124,2,0,100,1, - 0,131,2,0,115,25,0,116,3,0,124,2,0,95,4,0, - 113,25,0,113,25,0,87,116,1,0,106,5,0,116,6,0, - 25,125,3,0,120,76,0,100,17,0,68,93,68,0,125,4, - 0,124,4,0,116,1,0,106,5,0,107,7,0,114,121,0, - 116,3,0,106,7,0,124,4,0,131,1,0,125,5,0,110, - 13,0,116,1,0,106,5,0,124,4,0,25,125,5,0,116, - 8,0,124,3,0,124,4,0,124,5,0,131,3,0,1,113, - 82,0,87,120,153,0,100,18,0,100,19,0,100,20,0,103, - 3,0,68,93,124,0,92,2,0,125,6,0,125,7,0,124, - 6,0,116,1,0,106,5,0,107,6,0,114,214,0,116,1, - 0,106,5,0,124,6,0,25,125,8,0,80,113,170,0,121, - 56,0,116,3,0,106,7,0,124,6,0,131,1,0,125,8, - 0,124,6,0,100,10,0,107,2,0,114,12,1,100,11,0, - 116,1,0,106,9,0,107,6,0,114,12,1,100,7,0,125, - 7,0,110,0,0,80,87,113,170,0,4,116,10,0,107,10, - 0,114,37,1,1,1,1,119,170,0,89,113,170,0,88,113, - 170,0,87,116,10,0,100,12,0,131,1,0,130,1,0,116, - 8,0,124,3,0,100,13,0,124,8,0,131,3,0,1,116, - 8,0,124,3,0,100,14,0,124,7,0,131,3,0,1,116, - 8,0,124,3,0,100,15,0,116,11,0,131,0,0,131,3, - 0,1,100,16,0,83,40,21,0,0,0,117,249,0,0,0, - 83,101,116,117,112,32,105,109,112,111,114,116,108,105,98,32, - 98,121,32,105,109,112,111,114,116,105,110,103,32,110,101,101, - 100,101,100,32,98,117,105,108,116,45,105,110,32,109,111,100, - 117,108,101,115,32,97,110,100,32,105,110,106,101,99,116,105, - 110,103,32,116,104,101,109,10,32,32,32,32,105,110,116,111, - 32,116,104,101,32,103,108,111,98,97,108,32,110,97,109,101, - 115,112,97,99,101,46,10,10,32,32,32,32,65,115,32,115, - 121,115,32,105,115,32,110,101,101,100,101,100,32,102,111,114, - 32,115,121,115,46,109,111,100,117,108,101,115,32,97,99,99, - 101,115,115,32,97,110,100,32,105,109,112,32,105,115,32,110, - 101,101,100,101,100,32,116,111,32,108,111,97,100,32,98,117, - 105,108,116,45,105,110,10,32,32,32,32,109,111,100,117,108, - 101,115,44,32,116,104,111,115,101,32,116,119,111,32,109,111, - 100,117,108,101,115,32,109,117,115,116,32,98,101,32,101,120, - 112,108,105,99,105,116,108,121,32,112,97,115,115,101,100,32, - 105,110,46,10,10,32,32,32,32,117,10,0,0,0,95,95, - 108,111,97,100,101,114,95,95,117,3,0,0,0,95,105,111, - 117,9,0,0,0,95,119,97,114,110,105,110,103,115,117,8, - 0,0,0,98,117,105,108,116,105,110,115,117,7,0,0,0, - 109,97,114,115,104,97,108,117,5,0,0,0,112,111,115,105, - 120,117,1,0,0,0,47,117,2,0,0,0,110,116,117,1, - 0,0,0,92,117,3,0,0,0,111,115,50,117,7,0,0, - 0,69,77,88,32,71,67,67,117,30,0,0,0,105,109,112, - 111,114,116,108,105,98,32,114,101,113,117,105,114,101,115,32, - 112,111,115,105,120,32,111,114,32,110,116,117,3,0,0,0, - 95,111,115,117,8,0,0,0,112,97,116,104,95,115,101,112, - 117,11,0,0,0,95,114,101,108,97,120,95,99,97,115,101, - 78,40,4,0,0,0,117,3,0,0,0,95,105,111,117,9, - 0,0,0,95,119,97,114,110,105,110,103,115,117,8,0,0, - 0,98,117,105,108,116,105,110,115,117,7,0,0,0,109,97, - 114,115,104,97,108,40,2,0,0,0,117,5,0,0,0,112, - 111,115,105,120,117,1,0,0,0,47,40,2,0,0,0,117, - 2,0,0,0,110,116,117,1,0,0,0,92,40,2,0,0, - 0,117,3,0,0,0,111,115,50,117,1,0,0,0,92,40, - 12,0,0,0,117,3,0,0,0,105,109,112,117,3,0,0, - 0,115,121,115,117,7,0,0,0,104,97,115,97,116,116,114, - 117,15,0,0,0,66,117,105,108,116,105,110,73,109,112,111, - 114,116,101,114,117,10,0,0,0,95,95,108,111,97,100,101, - 114,95,95,117,7,0,0,0,109,111,100,117,108,101,115,117, - 8,0,0,0,95,95,110,97,109,101,95,95,117,11,0,0, - 0,108,111,97,100,95,109,111,100,117,108,101,117,7,0,0, - 0,115,101,116,97,116,116,114,117,7,0,0,0,118,101,114, - 115,105,111,110,117,11,0,0,0,73,109,112,111,114,116,69, - 114,114,111,114,117,16,0,0,0,95,109,97,107,101,95,114, - 101,108,97,120,95,99,97,115,101,40,9,0,0,0,117,10, - 0,0,0,115,121,115,95,109,111,100,117,108,101,117,10,0, - 0,0,105,109,112,95,109,111,100,117,108,101,117,6,0,0, - 0,109,111,100,117,108,101,117,11,0,0,0,115,101,108,102, - 95,109,111,100,117,108,101,117,12,0,0,0,98,117,105,108, - 116,105,110,95,110,97,109,101,117,14,0,0,0,98,117,105, - 108,116,105,110,95,109,111,100,117,108,101,117,10,0,0,0, - 98,117,105,108,116,105,110,95,111,115,117,8,0,0,0,112, - 97,116,104,95,115,101,112,117,9,0,0,0,111,115,95,109, - 111,100,117,108,101,40,0,0,0,0,40,0,0,0,0,117, - 29,0,0,0,60,102,114,111,122,101,110,32,105,109,112,111, - 114,116,108,105,98,46,95,98,111,111,116,115,116,114,97,112, - 62,117,6,0,0,0,95,115,101,116,117,112,67,4,0,0, - 115,52,0,0,0,0,9,6,1,6,2,19,1,15,1,16, - 2,13,1,13,1,15,1,18,2,13,1,20,2,28,1,15, - 1,13,1,4,2,3,1,15,2,27,1,9,1,5,1,13, - 1,12,2,12,1,16,1,16,2,117,6,0,0,0,95,115, - 101,116,117,112,99,2,0,0,0,0,0,0,0,3,0,0, - 0,3,0,0,0,67,0,0,0,115,44,0,0,0,116,0, - 0,124,0,0,124,1,0,131,2,0,1,116,1,0,106,2, - 0,125,2,0,116,2,0,116,1,0,95,2,0,124,2,0, - 116,1,0,95,3,0,100,1,0,83,40,2,0,0,0,117, - 201,0,0,0,73,110,115,116,97,108,108,32,105,109,112,111, - 114,116,108,105,98,32,97,115,32,116,104,101,32,105,109,112, - 108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,105, - 109,112,111,114,116,46,10,10,32,32,32,32,73,116,32,105, - 115,32,97,115,115,117,109,101,100,32,116,104,97,116,32,105, - 109,112,32,97,110,100,32,115,121,115,32,104,97,118,101,32, - 98,101,101,110,32,105,109,112,111,114,116,101,100,32,97,110, - 100,32,105,110,106,101,99,116,101,100,32,105,110,116,111,32, - 116,104,101,10,32,32,32,32,103,108,111,98,97,108,32,110, - 97,109,101,115,112,97,99,101,32,102,111,114,32,116,104,101, - 32,109,111,100,117,108,101,32,112,114,105,111,114,32,116,111, - 32,99,97,108,108,105,110,103,32,116,104,105,115,32,102,117, - 110,99,116,105,111,110,46,10,10,32,32,32,32,78,40,4, - 0,0,0,117,6,0,0,0,95,115,101,116,117,112,117,8, - 0,0,0,98,117,105,108,116,105,110,115,117,10,0,0,0, - 95,95,105,109,112,111,114,116,95,95,117,19,0,0,0,95, - 95,111,114,105,103,105,110,97,108,95,105,109,112,111,114,116, - 95,95,40,3,0,0,0,117,10,0,0,0,115,121,115,95, - 109,111,100,117,108,101,117,10,0,0,0,105,109,112,95,109, - 111,100,117,108,101,117,11,0,0,0,111,114,105,103,95,105, - 109,112,111,114,116,40,0,0,0,0,40,0,0,0,0,117, - 29,0,0,0,60,102,114,111,122,101,110,32,105,109,112,111, - 114,116,108,105,98,46,95,98,111,111,116,115,116,114,97,112, - 62,117,8,0,0,0,95,105,110,115,116,97,108,108,112,4, - 0,0,115,8,0,0,0,0,7,13,1,9,1,9,1,117, - 8,0,0,0,95,105,110,115,116,97,108,108,78,40,3,0, - 0,0,117,3,0,0,0,119,105,110,117,6,0,0,0,99, - 121,103,119,105,110,117,6,0,0,0,100,97,114,119,105,110, - 40,55,0,0,0,117,7,0,0,0,95,95,100,111,99,95, - 95,117,26,0,0,0,67,65,83,69,95,73,78,83,69,78, - 83,73,84,73,86,69,95,80,76,65,84,70,79,82,77,83, + 0,116,5,0,124,5,0,106,6,0,131,1,0,124,7,0, + 24,133,2,0,25,25,83,110,16,0,116,7,0,124,5,0, + 124,3,0,116,0,0,131,3,0,83,100,3,0,83,40,4, + 0,0,0,117,214,1,0,0,73,109,112,111,114,116,32,97, + 32,109,111,100,117,108,101,46,10,10,32,32,32,32,84,104, + 101,32,39,103,108,111,98,97,108,115,39,32,97,114,103,117, + 109,101,110,116,32,105,115,32,117,115,101,100,32,116,111,32, + 105,110,102,101,114,32,119,104,101,114,101,32,116,104,101,32, + 105,109,112,111,114,116,32,105,115,32,111,99,99,117,114,105, + 110,103,32,102,114,111,109,10,32,32,32,32,116,111,32,104, + 97,110,100,108,101,32,114,101,108,97,116,105,118,101,32,105, + 109,112,111,114,116,115,46,32,84,104,101,32,39,108,111,99, + 97,108,115,39,32,97,114,103,117,109,101,110,116,32,105,115, + 32,105,103,110,111,114,101,100,46,32,84,104,101,10,32,32, + 32,32,39,102,114,111,109,108,105,115,116,39,32,97,114,103, + 117,109,101,110,116,32,115,112,101,99,105,102,105,101,115,32, + 119,104,97,116,32,115,104,111,117,108,100,32,101,120,105,115, + 116,32,97,115,32,97,116,116,114,105,98,117,116,101,115,32, + 111,110,32,116,104,101,32,109,111,100,117,108,101,10,32,32, + 32,32,98,101,105,110,103,32,105,109,112,111,114,116,101,100, + 32,40,101,46,103,46,32,96,96,102,114,111,109,32,109,111, + 100,117,108,101,32,105,109,112,111,114,116,32,60,102,114,111, + 109,108,105,115,116,62,96,96,41,46,32,32,84,104,101,32, + 39,108,101,118,101,108,39,10,32,32,32,32,97,114,103,117, + 109,101,110,116,32,114,101,112,114,101,115,101,110,116,115,32, + 116,104,101,32,112,97,99,107,97,103,101,32,108,111,99,97, + 116,105,111,110,32,116,111,32,105,109,112,111,114,116,32,102, + 114,111,109,32,105,110,32,97,32,114,101,108,97,116,105,118, + 101,10,32,32,32,32,105,109,112,111,114,116,32,40,101,46, + 103,46,32,96,96,102,114,111,109,32,46,46,112,107,103,32, + 105,109,112,111,114,116,32,109,111,100,96,96,32,119,111,117, + 108,100,32,104,97,118,101,32,97,32,39,108,101,118,101,108, + 39,32,111,102,32,50,41,46,10,10,32,32,32,32,105,0, + 0,0,0,117,1,0,0,0,46,78,40,8,0,0,0,117, + 11,0,0,0,95,103,99,100,95,105,109,112,111,114,116,117, + 17,0,0,0,95,99,97,108,99,95,95,95,112,97,99,107, + 97,103,101,95,95,117,3,0,0,0,115,121,115,117,7,0, + 0,0,109,111,100,117,108,101,115,117,9,0,0,0,112,97, + 114,116,105,116,105,111,110,117,3,0,0,0,108,101,110,117, + 8,0,0,0,95,95,110,97,109,101,95,95,117,16,0,0, + 0,95,104,97,110,100,108,101,95,102,114,111,109,108,105,115, + 116,40,8,0,0,0,117,4,0,0,0,110,97,109,101,117, + 7,0,0,0,103,108,111,98,97,108,115,117,6,0,0,0, + 108,111,99,97,108,115,117,8,0,0,0,102,114,111,109,108, + 105,115,116,117,5,0,0,0,108,101,118,101,108,117,6,0, + 0,0,109,111,100,117,108,101,117,7,0,0,0,112,97,99, + 107,97,103,101,117,7,0,0,0,99,117,116,95,111,102,102, + 40,0,0,0,0,40,0,0,0,0,117,29,0,0,0,60, + 102,114,111,122,101,110,32,105,109,112,111,114,116,108,105,98, + 46,95,98,111,111,116,115,116,114,97,112,62,117,10,0,0, + 0,95,95,105,109,112,111,114,116,95,95,37,4,0,0,115, + 24,0,0,0,0,11,12,1,15,2,12,1,18,1,6,3, + 12,1,24,1,6,1,4,2,35,1,40,2,117,10,0,0, + 0,95,95,105,109,112,111,114,116,95,95,99,2,0,0,0, + 0,0,0,0,9,0,0,0,12,0,0,0,67,0,0,0, + 115,109,1,0,0,124,1,0,97,0,0,124,0,0,97,1, + 0,120,47,0,116,0,0,116,1,0,102,2,0,68,93,33, + 0,125,2,0,116,2,0,124,2,0,100,1,0,131,2,0, + 115,25,0,116,3,0,124,2,0,95,4,0,113,25,0,113, + 25,0,87,116,1,0,106,5,0,116,6,0,25,125,3,0, + 120,76,0,100,17,0,68,93,68,0,125,4,0,124,4,0, + 116,1,0,106,5,0,107,7,0,114,121,0,116,3,0,106, + 7,0,124,4,0,131,1,0,125,5,0,110,13,0,116,1, + 0,106,5,0,124,4,0,25,125,5,0,116,8,0,124,3, + 0,124,4,0,124,5,0,131,3,0,1,113,82,0,87,120, + 153,0,100,18,0,100,19,0,100,20,0,103,3,0,68,93, + 124,0,92,2,0,125,6,0,125,7,0,124,6,0,116,1, + 0,106,5,0,107,6,0,114,214,0,116,1,0,106,5,0, + 124,6,0,25,125,8,0,80,113,170,0,121,56,0,116,3, + 0,106,7,0,124,6,0,131,1,0,125,8,0,124,6,0, + 100,10,0,107,2,0,114,12,1,100,11,0,116,1,0,106, + 9,0,107,6,0,114,12,1,100,7,0,125,7,0,110,0, + 0,80,87,113,170,0,4,116,10,0,107,10,0,114,37,1, + 1,1,1,119,170,0,89,113,170,0,88,113,170,0,87,116, + 10,0,100,12,0,131,1,0,130,1,0,116,8,0,124,3, + 0,100,13,0,124,8,0,131,3,0,1,116,8,0,124,3, + 0,100,14,0,124,7,0,131,3,0,1,116,8,0,124,3, + 0,100,15,0,116,11,0,131,0,0,131,3,0,1,100,16, + 0,83,40,21,0,0,0,117,249,0,0,0,83,101,116,117, + 112,32,105,109,112,111,114,116,108,105,98,32,98,121,32,105, + 109,112,111,114,116,105,110,103,32,110,101,101,100,101,100,32, + 98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,115, + 32,97,110,100,32,105,110,106,101,99,116,105,110,103,32,116, + 104,101,109,10,32,32,32,32,105,110,116,111,32,116,104,101, + 32,103,108,111,98,97,108,32,110,97,109,101,115,112,97,99, + 101,46,10,10,32,32,32,32,65,115,32,115,121,115,32,105, + 115,32,110,101,101,100,101,100,32,102,111,114,32,115,121,115, + 46,109,111,100,117,108,101,115,32,97,99,99,101,115,115,32, + 97,110,100,32,105,109,112,32,105,115,32,110,101,101,100,101, + 100,32,116,111,32,108,111,97,100,32,98,117,105,108,116,45, + 105,110,10,32,32,32,32,109,111,100,117,108,101,115,44,32, + 116,104,111,115,101,32,116,119,111,32,109,111,100,117,108,101, + 115,32,109,117,115,116,32,98,101,32,101,120,112,108,105,99, + 105,116,108,121,32,112,97,115,115,101,100,32,105,110,46,10, + 10,32,32,32,32,117,10,0,0,0,95,95,108,111,97,100, + 101,114,95,95,117,3,0,0,0,95,105,111,117,9,0,0, + 0,95,119,97,114,110,105,110,103,115,117,8,0,0,0,98, + 117,105,108,116,105,110,115,117,7,0,0,0,109,97,114,115, + 104,97,108,117,5,0,0,0,112,111,115,105,120,117,1,0, + 0,0,47,117,2,0,0,0,110,116,117,1,0,0,0,92, + 117,3,0,0,0,111,115,50,117,7,0,0,0,69,77,88, + 32,71,67,67,117,30,0,0,0,105,109,112,111,114,116,108, + 105,98,32,114,101,113,117,105,114,101,115,32,112,111,115,105, + 120,32,111,114,32,110,116,117,3,0,0,0,95,111,115,117, + 8,0,0,0,112,97,116,104,95,115,101,112,117,11,0,0, + 0,95,114,101,108,97,120,95,99,97,115,101,78,40,4,0, + 0,0,117,3,0,0,0,95,105,111,117,9,0,0,0,95, + 119,97,114,110,105,110,103,115,117,8,0,0,0,98,117,105, + 108,116,105,110,115,117,7,0,0,0,109,97,114,115,104,97, + 108,40,2,0,0,0,117,5,0,0,0,112,111,115,105,120, + 117,1,0,0,0,47,40,2,0,0,0,117,2,0,0,0, + 110,116,117,1,0,0,0,92,40,2,0,0,0,117,3,0, + 0,0,111,115,50,117,1,0,0,0,92,40,12,0,0,0, + 117,3,0,0,0,105,109,112,117,3,0,0,0,115,121,115, + 117,7,0,0,0,104,97,115,97,116,116,114,117,15,0,0, + 0,66,117,105,108,116,105,110,73,109,112,111,114,116,101,114, + 117,10,0,0,0,95,95,108,111,97,100,101,114,95,95,117, + 7,0,0,0,109,111,100,117,108,101,115,117,8,0,0,0, + 95,95,110,97,109,101,95,95,117,11,0,0,0,108,111,97, + 100,95,109,111,100,117,108,101,117,7,0,0,0,115,101,116, + 97,116,116,114,117,7,0,0,0,118,101,114,115,105,111,110, + 117,11,0,0,0,73,109,112,111,114,116,69,114,114,111,114, 117,16,0,0,0,95,109,97,107,101,95,114,101,108,97,120, - 95,99,97,115,101,117,7,0,0,0,95,119,95,108,111,110, - 103,117,7,0,0,0,95,114,95,108,111,110,103,117,10,0, - 0,0,95,112,97,116,104,95,106,111,105,110,117,12,0,0, - 0,95,112,97,116,104,95,101,120,105,115,116,115,117,18,0, - 0,0,95,112,97,116,104,95,105,115,95,109,111,100,101,95, - 116,121,112,101,117,12,0,0,0,95,112,97,116,104,95,105, - 115,102,105,108,101,117,11,0,0,0,95,112,97,116,104,95, - 105,115,100,105,114,117,17,0,0,0,95,112,97,116,104,95, - 119,105,116,104,111,117,116,95,101,120,116,117,14,0,0,0, - 95,112,97,116,104,95,97,98,115,111,108,117,116,101,117,13, - 0,0,0,95,119,114,105,116,101,95,97,116,111,109,105,99, - 117,5,0,0,0,95,119,114,97,112,117,4,0,0,0,116, - 121,112,101,117,8,0,0,0,95,95,99,111,100,101,95,95, - 117,9,0,0,0,99,111,100,101,95,116,121,112,101,117,15, - 0,0,0,118,101,114,98,111,115,101,95,109,101,115,115,97, - 103,101,117,11,0,0,0,115,101,116,95,112,97,99,107,97, - 103,101,117,10,0,0,0,115,101,116,95,108,111,97,100,101, - 114,117,17,0,0,0,109,111,100,117,108,101,95,102,111,114, - 95,108,111,97,100,101,114,117,11,0,0,0,95,99,104,101, - 99,107,95,110,97,109,101,117,17,0,0,0,95,114,101,113, - 117,105,114,101,115,95,98,117,105,108,116,105,110,117,16,0, - 0,0,95,114,101,113,117,105,114,101,115,95,102,114,111,122, - 101,110,117,12,0,0,0,95,115,117,102,102,105,120,95,108, - 105,115,116,117,15,0,0,0,66,117,105,108,116,105,110,73, - 109,112,111,114,116,101,114,117,14,0,0,0,70,114,111,122, - 101,110,73,109,112,111,114,116,101,114,117,13,0,0,0,95, - 76,111,97,100,101,114,66,97,115,105,99,115,117,12,0,0, - 0,83,111,117,114,99,101,76,111,97,100,101,114,117,11,0, - 0,0,95,70,105,108,101,76,111,97,100,101,114,117,17,0, - 0,0,95,83,111,117,114,99,101,70,105,108,101,76,111,97, - 100,101,114,117,21,0,0,0,95,83,111,117,114,99,101,108, - 101,115,115,70,105,108,101,76,111,97,100,101,114,117,20,0, - 0,0,95,69,120,116,101,110,115,105,111,110,70,105,108,101, - 76,111,97,100,101,114,117,10,0,0,0,80,97,116,104,70, - 105,110,100,101,114,117,11,0,0,0,95,70,105,108,101,70, - 105,110,100,101,114,117,20,0,0,0,95,83,111,117,114,99, - 101,70,105,110,100,101,114,68,101,116,97,105,108,115,117,24, - 0,0,0,95,83,111,117,114,99,101,108,101,115,115,70,105, - 110,100,101,114,68,101,116,97,105,108,115,117,23,0,0,0, - 95,69,120,116,101,110,115,105,111,110,70,105,110,100,101,114, - 68,101,116,97,105,108,115,117,15,0,0,0,95,102,105,108, - 101,95,112,97,116,104,95,104,111,111,107,117,18,0,0,0, - 95,68,69,70,65,85,76,84,95,80,65,84,72,95,72,79, - 79,75,117,18,0,0,0,95,68,101,102,97,117,108,116,80, - 97,116,104,70,105,110,100,101,114,117,18,0,0,0,95,73, - 109,112,111,114,116,76,111,99,107,67,111,110,116,101,120,116, - 117,13,0,0,0,95,114,101,115,111,108,118,101,95,110,97, - 109,101,117,12,0,0,0,95,102,105,110,100,95,109,111,100, - 117,108,101,117,13,0,0,0,95,115,97,110,105,116,121,95, - 99,104,101,99,107,117,19,0,0,0,95,73,77,80,76,73, - 67,73,84,95,77,69,84,65,95,80,65,84,72,117,8,0, - 0,0,95,69,82,82,95,77,83,71,117,14,0,0,0,95, - 102,105,110,100,95,97,110,100,95,108,111,97,100,117,4,0, - 0,0,78,111,110,101,117,11,0,0,0,95,103,99,100,95, - 105,109,112,111,114,116,117,16,0,0,0,95,104,97,110,100, - 108,101,95,102,114,111,109,108,105,115,116,117,17,0,0,0, - 95,99,97,108,99,95,95,95,112,97,99,107,97,103,101,95, - 95,117,10,0,0,0,95,95,105,109,112,111,114,116,95,95, - 117,6,0,0,0,95,115,101,116,117,112,117,8,0,0,0, - 95,105,110,115,116,97,108,108,40,0,0,0,0,40,0,0, - 0,0,40,0,0,0,0,117,29,0,0,0,60,102,114,111, - 122,101,110,32,105,109,112,111,114,116,108,105,98,46,95,98, - 111,111,116,115,116,114,97,112,62,117,8,0,0,0,60,109, - 111,100,117,108,101,62,8,0,0,0,115,102,0,0,0,6, - 14,6,3,12,13,12,16,12,15,12,6,12,10,12,10,12, - 6,12,7,12,9,12,13,12,21,12,8,15,4,12,8,12, - 13,12,11,12,32,12,16,12,11,12,11,12,8,19,53,19, - 47,19,77,22,114,19,22,25,38,25,24,19,45,19,68,19, - 77,19,8,19,9,19,11,12,10,6,2,22,21,19,13,12, - 9,12,15,12,17,15,2,6,2,12,41,18,25,12,23,12, - 15,24,30,12,45, + 95,99,97,115,101,40,9,0,0,0,117,10,0,0,0,115, + 121,115,95,109,111,100,117,108,101,117,10,0,0,0,105,109, + 112,95,109,111,100,117,108,101,117,6,0,0,0,109,111,100, + 117,108,101,117,11,0,0,0,115,101,108,102,95,109,111,100, + 117,108,101,117,12,0,0,0,98,117,105,108,116,105,110,95, + 110,97,109,101,117,14,0,0,0,98,117,105,108,116,105,110, + 95,109,111,100,117,108,101,117,10,0,0,0,98,117,105,108, + 116,105,110,95,111,115,117,8,0,0,0,112,97,116,104,95, + 115,101,112,117,9,0,0,0,111,115,95,109,111,100,117,108, + 101,40,0,0,0,0,40,0,0,0,0,117,29,0,0,0, + 60,102,114,111,122,101,110,32,105,109,112,111,114,116,108,105, + 98,46,95,98,111,111,116,115,116,114,97,112,62,117,6,0, + 0,0,95,115,101,116,117,112,67,4,0,0,115,52,0,0, + 0,0,9,6,1,6,2,19,1,15,1,16,2,13,1,13, + 1,15,1,18,2,13,1,20,2,28,1,15,1,13,1,4, + 2,3,1,15,2,27,1,9,1,5,1,13,1,12,2,12, + 1,16,1,16,2,117,6,0,0,0,95,115,101,116,117,112, + 99,2,0,0,0,0,0,0,0,3,0,0,0,3,0,0, + 0,67,0,0,0,115,44,0,0,0,116,0,0,124,0,0, + 124,1,0,131,2,0,1,116,1,0,106,2,0,125,2,0, + 116,2,0,116,1,0,95,2,0,124,2,0,116,1,0,95, + 3,0,100,1,0,83,40,2,0,0,0,117,201,0,0,0, + 73,110,115,116,97,108,108,32,105,109,112,111,114,116,108,105, + 98,32,97,115,32,116,104,101,32,105,109,112,108,101,109,101, + 110,116,97,116,105,111,110,32,111,102,32,105,109,112,111,114, + 116,46,10,10,32,32,32,32,73,116,32,105,115,32,97,115, + 115,117,109,101,100,32,116,104,97,116,32,105,109,112,32,97, + 110,100,32,115,121,115,32,104,97,118,101,32,98,101,101,110, + 32,105,109,112,111,114,116,101,100,32,97,110,100,32,105,110, + 106,101,99,116,101,100,32,105,110,116,111,32,116,104,101,10, + 32,32,32,32,103,108,111,98,97,108,32,110,97,109,101,115, + 112,97,99,101,32,102,111,114,32,116,104,101,32,109,111,100, + 117,108,101,32,112,114,105,111,114,32,116,111,32,99,97,108, + 108,105,110,103,32,116,104,105,115,32,102,117,110,99,116,105, + 111,110,46,10,10,32,32,32,32,78,40,4,0,0,0,117, + 6,0,0,0,95,115,101,116,117,112,117,8,0,0,0,98, + 117,105,108,116,105,110,115,117,10,0,0,0,95,95,105,109, + 112,111,114,116,95,95,117,19,0,0,0,95,95,111,114,105, + 103,105,110,97,108,95,105,109,112,111,114,116,95,95,40,3, + 0,0,0,117,10,0,0,0,115,121,115,95,109,111,100,117, + 108,101,117,10,0,0,0,105,109,112,95,109,111,100,117,108, + 101,117,11,0,0,0,111,114,105,103,95,105,109,112,111,114, + 116,40,0,0,0,0,40,0,0,0,0,117,29,0,0,0, + 60,102,114,111,122,101,110,32,105,109,112,111,114,116,108,105, + 98,46,95,98,111,111,116,115,116,114,97,112,62,117,8,0, + 0,0,95,105,110,115,116,97,108,108,112,4,0,0,115,8, + 0,0,0,0,7,13,1,9,1,9,1,117,8,0,0,0, + 95,105,110,115,116,97,108,108,78,40,3,0,0,0,117,3, + 0,0,0,119,105,110,117,6,0,0,0,99,121,103,119,105, + 110,117,6,0,0,0,100,97,114,119,105,110,40,55,0,0, + 0,117,7,0,0,0,95,95,100,111,99,95,95,117,26,0, + 0,0,67,65,83,69,95,73,78,83,69,78,83,73,84,73, + 86,69,95,80,76,65,84,70,79,82,77,83,117,16,0,0, + 0,95,109,97,107,101,95,114,101,108,97,120,95,99,97,115, + 101,117,7,0,0,0,95,119,95,108,111,110,103,117,7,0, + 0,0,95,114,95,108,111,110,103,117,10,0,0,0,95,112, + 97,116,104,95,106,111,105,110,117,12,0,0,0,95,112,97, + 116,104,95,101,120,105,115,116,115,117,18,0,0,0,95,112, + 97,116,104,95,105,115,95,109,111,100,101,95,116,121,112,101, + 117,12,0,0,0,95,112,97,116,104,95,105,115,102,105,108, + 101,117,11,0,0,0,95,112,97,116,104,95,105,115,100,105, + 114,117,17,0,0,0,95,112,97,116,104,95,119,105,116,104, + 111,117,116,95,101,120,116,117,14,0,0,0,95,112,97,116, + 104,95,97,98,115,111,108,117,116,101,117,13,0,0,0,95, + 119,114,105,116,101,95,97,116,111,109,105,99,117,5,0,0, + 0,95,119,114,97,112,117,4,0,0,0,116,121,112,101,117, + 8,0,0,0,95,95,99,111,100,101,95,95,117,9,0,0, + 0,99,111,100,101,95,116,121,112,101,117,15,0,0,0,118, + 101,114,98,111,115,101,95,109,101,115,115,97,103,101,117,11, + 0,0,0,115,101,116,95,112,97,99,107,97,103,101,117,10, + 0,0,0,115,101,116,95,108,111,97,100,101,114,117,17,0, + 0,0,109,111,100,117,108,101,95,102,111,114,95,108,111,97, + 100,101,114,117,11,0,0,0,95,99,104,101,99,107,95,110, + 97,109,101,117,17,0,0,0,95,114,101,113,117,105,114,101, + 115,95,98,117,105,108,116,105,110,117,16,0,0,0,95,114, + 101,113,117,105,114,101,115,95,102,114,111,122,101,110,117,12, + 0,0,0,95,115,117,102,102,105,120,95,108,105,115,116,117, + 15,0,0,0,66,117,105,108,116,105,110,73,109,112,111,114, + 116,101,114,117,14,0,0,0,70,114,111,122,101,110,73,109, + 112,111,114,116,101,114,117,13,0,0,0,95,76,111,97,100, + 101,114,66,97,115,105,99,115,117,12,0,0,0,83,111,117, + 114,99,101,76,111,97,100,101,114,117,11,0,0,0,95,70, + 105,108,101,76,111,97,100,101,114,117,17,0,0,0,95,83, + 111,117,114,99,101,70,105,108,101,76,111,97,100,101,114,117, + 21,0,0,0,95,83,111,117,114,99,101,108,101,115,115,70, + 105,108,101,76,111,97,100,101,114,117,20,0,0,0,95,69, + 120,116,101,110,115,105,111,110,70,105,108,101,76,111,97,100, + 101,114,117,10,0,0,0,80,97,116,104,70,105,110,100,101, + 114,117,11,0,0,0,95,70,105,108,101,70,105,110,100,101, + 114,117,20,0,0,0,95,83,111,117,114,99,101,70,105,110, + 100,101,114,68,101,116,97,105,108,115,117,24,0,0,0,95, + 83,111,117,114,99,101,108,101,115,115,70,105,110,100,101,114, + 68,101,116,97,105,108,115,117,23,0,0,0,95,69,120,116, + 101,110,115,105,111,110,70,105,110,100,101,114,68,101,116,97, + 105,108,115,117,15,0,0,0,95,102,105,108,101,95,112,97, + 116,104,95,104,111,111,107,117,18,0,0,0,95,68,69,70, + 65,85,76,84,95,80,65,84,72,95,72,79,79,75,117,18, + 0,0,0,95,68,101,102,97,117,108,116,80,97,116,104,70, + 105,110,100,101,114,117,18,0,0,0,95,73,109,112,111,114, + 116,76,111,99,107,67,111,110,116,101,120,116,117,13,0,0, + 0,95,114,101,115,111,108,118,101,95,110,97,109,101,117,12, + 0,0,0,95,102,105,110,100,95,109,111,100,117,108,101,117, + 13,0,0,0,95,115,97,110,105,116,121,95,99,104,101,99, + 107,117,19,0,0,0,95,73,77,80,76,73,67,73,84,95, + 77,69,84,65,95,80,65,84,72,117,8,0,0,0,95,69, + 82,82,95,77,83,71,117,14,0,0,0,95,102,105,110,100, + 95,97,110,100,95,108,111,97,100,117,4,0,0,0,78,111, + 110,101,117,11,0,0,0,95,103,99,100,95,105,109,112,111, + 114,116,117,16,0,0,0,95,104,97,110,100,108,101,95,102, + 114,111,109,108,105,115,116,117,17,0,0,0,95,99,97,108, + 99,95,95,95,112,97,99,107,97,103,101,95,95,117,10,0, + 0,0,95,95,105,109,112,111,114,116,95,95,117,6,0,0, + 0,95,115,101,116,117,112,117,8,0,0,0,95,105,110,115, + 116,97,108,108,40,0,0,0,0,40,0,0,0,0,40,0, + 0,0,0,117,29,0,0,0,60,102,114,111,122,101,110,32, + 105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,115, + 116,114,97,112,62,117,8,0,0,0,60,109,111,100,117,108, + 101,62,8,0,0,0,115,102,0,0,0,6,14,6,3,12, + 13,12,16,12,15,12,6,12,10,12,10,12,6,12,7,12, + 9,12,13,12,21,12,8,15,4,12,8,12,13,12,11,12, + 32,12,16,12,11,12,11,12,8,19,53,19,47,19,77,22, + 114,19,22,25,38,25,24,19,45,19,68,19,77,19,8,19, + 9,19,11,12,10,6,2,22,21,19,13,12,9,12,15,12, + 17,15,2,6,2,12,41,18,25,12,23,12,15,24,30,12, + 45, }; |