Commit b7ac87e4 authored by Brett Cannon's avatar Brett Cannon

Issue #15166: Re-implement imp.get_tag() using sys.implementation.

Also eliminates some C code in Python/import.c as well.

Patch by Eric Snow with verification by comparing against another
patch from Jeff Knupp.
parent 44f48052
...@@ -11,7 +11,7 @@ from _imp import (lock_held, acquire_lock, release_lock, ...@@ -11,7 +11,7 @@ from _imp import (lock_held, acquire_lock, release_lock,
init_builtin, init_frozen, is_builtin, is_frozen, init_builtin, init_frozen, is_builtin, is_frozen,
_fix_co_filename, extension_suffixes) _fix_co_filename, extension_suffixes)
# Could move out of _imp, but not worth the code # Could move out of _imp, but not worth the code
from _imp import get_magic, get_tag from _imp import get_magic
from importlib._bootstrap import new_module from importlib._bootstrap import new_module
from importlib._bootstrap import cache_from_source from importlib._bootstrap import cache_from_source
...@@ -37,6 +37,11 @@ PY_CODERESOURCE = 8 ...@@ -37,6 +37,11 @@ PY_CODERESOURCE = 8
IMP_HOOK = 9 IMP_HOOK = 9
def get_tag():
"""Return the magic tag for .pyc or .pyo files."""
return sys.implementation.cache_tag
def get_suffixes(): def get_suffixes():
warnings.warn('imp.get_suffixes() is deprecated; use the constants ' warnings.warn('imp.get_suffixes() is deprecated; use the constants '
'defined on importlib.machinery instead', 'defined on importlib.machinery instead',
......
...@@ -1452,7 +1452,7 @@ def _setup(sys_module, _imp_module): ...@@ -1452,7 +1452,7 @@ def _setup(sys_module, _imp_module):
# Constants # Constants
setattr(self_module, '_relax_case', _make_relax_case()) setattr(self_module, '_relax_case', _make_relax_case())
setattr(self_module, '_MAGIC_NUMBER', _imp_module.get_magic()) setattr(self_module, '_MAGIC_NUMBER', _imp_module.get_magic())
setattr(self_module, '_TAG', _imp.get_tag()) setattr(self_module, '_TAG', sys.implementation.cache_tag)
if builtin_os == 'nt': if builtin_os == 'nt':
SOURCE_SUFFIXES.append('.pyw') SOURCE_SUFFIXES.append('.pyw')
......
...@@ -17,6 +17,8 @@ Core and Builtins ...@@ -17,6 +17,8 @@ Core and Builtins
Library Library
------- -------
- Issue #15166: Implement imp.get_tag() using sys.implementation.cache_tag.
- Issue #15210: Catch KeyError when imprortlib.__init__ can't find - Issue #15210: Catch KeyError when imprortlib.__init__ can't find
_frozen_importlib in sys.modules, not ImportError. _frozen_importlib in sys.modules, not ImportError.
......
...@@ -112,23 +112,11 @@ typedef unsigned short mode_t; ...@@ -112,23 +112,11 @@ typedef unsigned short mode_t;
/* MAGIC must change whenever the bytecode emitted by the compiler may no /* MAGIC must change whenever the bytecode emitted by the compiler may no
longer be understood by older implementations of the eval loop (usually longer be understood by older implementations of the eval loop (usually
due to the addition of new opcodes) due to the addition of new opcodes)
TAG must change for each major Python release. The magic number will take
care of any bytecode changes that occur during development.
*/ */
#define QUOTE(arg) #arg
#define STRIFY(name) QUOTE(name)
#define MAJOR STRIFY(PY_MAJOR_VERSION)
#define MINOR STRIFY(PY_MINOR_VERSION)
#define MAGIC (3230 | ((long)'\r'<<16) | ((long)'\n'<<24)) #define MAGIC (3230 | ((long)'\r'<<16) | ((long)'\n'<<24))
#define TAG "cpython-" MAJOR MINOR;
#define CACHEDIR "__pycache__" #define CACHEDIR "__pycache__"
/* Current magic word and string tag as globals. */ /* Current magic word and string tag as globals. */
static long pyc_magic = MAGIC; static long pyc_magic = MAGIC;
static const char *pyc_tag = TAG;
#undef QUOTE
#undef STRIFY
#undef MAJOR
#undef MINOR
/* See _PyImport_FixupExtensionObject() below */ /* See _PyImport_FixupExtensionObject() below */
static PyObject *extensions = NULL; static PyObject *extensions = NULL;
...@@ -534,9 +522,22 @@ PyImport_GetMagicNumber(void) ...@@ -534,9 +522,22 @@ PyImport_GetMagicNumber(void)
const char * const char *
PyImport_GetMagicTag(void) PyImport_GetMagicTag(void)
{ {
return pyc_tag; PyObject *impl, *tag;
const char *raw_tag;
/* We could also pull it from imp or importlib. */
impl = PySys_GetObject("implementation");
if (impl == NULL)
return NULL;
tag = PyObject_GetAttrString(impl, "cache_tag");
if (tag == NULL)
return NULL;
raw_tag = PyUnicode_DATA(tag);
Py_DECREF(tag);
return raw_tag;
} }
/* Magic for extension modules (built-in as well as dynamically /* Magic for extension modules (built-in as well as dynamically
loaded). To prevent initializing an extension module more than loaded). To prevent initializing an extension module more than
once, we keep a static dictionary 'extensions' keyed by module name once, we keep a static dictionary 'extensions' keyed by module name
...@@ -1846,12 +1847,6 @@ imp_get_magic(PyObject *self, PyObject *noargs) ...@@ -1846,12 +1847,6 @@ imp_get_magic(PyObject *self, PyObject *noargs)
return imp_make_magic(pyc_magic); return imp_make_magic(pyc_magic);
} }
static PyObject *
imp_get_tag(PyObject *self, PyObject *noargs)
{
return PyUnicode_FromString(pyc_tag);
}
static PyObject * static PyObject *
imp_extension_suffixes(PyObject *self, PyObject *noargs) imp_extension_suffixes(PyObject *self, PyObject *noargs)
{ {
...@@ -2002,10 +1997,6 @@ PyDoc_STRVAR(doc_get_magic, ...@@ -2002,10 +1997,6 @@ PyDoc_STRVAR(doc_get_magic,
"get_magic() -> string\n\ "get_magic() -> string\n\
Return the magic number for .pyc or .pyo files."); Return the magic number for .pyc or .pyo files.");
PyDoc_STRVAR(doc_get_tag,
"get_tag() -> string\n\
Return the magic tag for .pyc or .pyo files.");
PyDoc_STRVAR(doc_extension_suffixes, PyDoc_STRVAR(doc_extension_suffixes,
"extension_suffixes() -> list of strings\n\ "extension_suffixes() -> list of strings\n\
Returns the list of file suffixes used to identify extension modules."); Returns the list of file suffixes used to identify extension modules.");
...@@ -2029,7 +2020,6 @@ On platforms without threads, this function does nothing."); ...@@ -2029,7 +2020,6 @@ On platforms without threads, this function does nothing.");
static PyMethodDef imp_methods[] = { static PyMethodDef imp_methods[] = {
{"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic}, {"get_magic", imp_get_magic, METH_NOARGS, doc_get_magic},
{"get_tag", imp_get_tag, METH_NOARGS, doc_get_tag},
{"extension_suffixes", imp_extension_suffixes, METH_NOARGS, {"extension_suffixes", imp_extension_suffixes, METH_NOARGS,
doc_extension_suffixes}, doc_extension_suffixes},
{"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held}, {"lock_held", imp_lock_held, METH_NOARGS, doc_lock_held},
......
...@@ -3051,8 +3051,8 @@ unsigned char _Py_M__importlib[] = { ...@@ -3051,8 +3051,8 @@ unsigned char _Py_M__importlib[] = {
99,1,0,0,0,0,0,0,0,1,0,0,0,4,0,0, 99,1,0,0,0,0,0,0,0,1,0,0,0,4,0,0,
0,19,0,0,0,115,46,0,0,0,116,0,0,124,0,0, 0,19,0,0,0,115,46,0,0,0,116,0,0,124,0,0,
131,1,0,115,33,0,116,1,0,100,1,0,100,2,0,124, 131,1,0,115,33,0,116,1,0,100,1,0,100,2,0,124,
0,0,131,1,1,130,1,0,110,0,0,136,1,0,124,0, 0,0,131,1,1,130,1,0,110,0,0,136,0,0,124,0,
0,136,0,0,140,1,0,83,40,3,0,0,0,117,45,0, 0,136,1,0,140,1,0,83,40,3,0,0,0,117,45,0,
0,0,80,97,116,104,32,104,111,111,107,32,102,111,114,32, 0,0,80,97,116,104,32,104,111,111,107,32,102,111,114,32,
105,109,112,111,114,116,108,105,98,46,109,97,99,104,105,110, 105,109,112,111,114,116,108,105,98,46,109,97,99,104,105,110,
101,114,121,46,70,105,108,101,70,105,110,100,101,114,46,117, 101,114,121,46,70,105,108,101,70,105,110,100,101,114,46,117,
...@@ -3062,8 +3062,8 @@ unsigned char _Py_M__importlib[] = { ...@@ -3062,8 +3062,8 @@ unsigned char _Py_M__importlib[] = {
117,11,0,0,0,95,112,97,116,104,95,105,115,100,105,114, 117,11,0,0,0,95,112,97,116,104,95,105,115,100,105,114,
117,11,0,0,0,73,109,112,111,114,116,69,114,114,111,114, 117,11,0,0,0,73,109,112,111,114,116,69,114,114,111,114,
40,1,0,0,0,117,4,0,0,0,112,97,116,104,40,2, 40,1,0,0,0,117,4,0,0,0,112,97,116,104,40,2,
0,0,0,117,14,0,0,0,108,111,97,100,101,114,95,100, 0,0,0,117,3,0,0,0,99,108,115,117,14,0,0,0,
101,116,97,105,108,115,117,3,0,0,0,99,108,115,40,0, 108,111,97,100,101,114,95,100,101,116,97,105,108,115,40,0,
0,0,0,117,29,0,0,0,60,102,114,111,122,101,110,32, 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, 105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,115,
116,114,97,112,62,117,24,0,0,0,112,97,116,104,95,104, 116,114,97,112,62,117,24,0,0,0,112,97,116,104,95,104,
...@@ -3077,9 +3077,9 @@ unsigned char _Py_M__importlib[] = { ...@@ -3077,9 +3077,9 @@ unsigned char _Py_M__importlib[] = {
0,0,0,108,111,97,100,101,114,95,100,101,116,97,105,108, 0,0,0,108,111,97,100,101,114,95,100,101,116,97,105,108,
115,117,24,0,0,0,112,97,116,104,95,104,111,111,107,95, 115,117,24,0,0,0,112,97,116,104,95,104,111,111,107,95,
102,111,114,95,70,105,108,101,70,105,110,100,101,114,40,0, 102,111,114,95,70,105,108,101,70,105,110,100,101,114,40,0,
0,0,0,40,2,0,0,0,117,14,0,0,0,108,111,97, 0,0,0,40,2,0,0,0,117,3,0,0,0,99,108,115,
100,101,114,95,100,101,116,97,105,108,115,117,3,0,0,0, 117,14,0,0,0,108,111,97,100,101,114,95,100,101,116,97,
99,108,115,117,29,0,0,0,60,102,114,111,122,101,110,32, 105,108,115,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, 105,109,112,111,114,116,108,105,98,46,95,98,111,111,116,115,
116,114,97,112,62,117,9,0,0,0,112,97,116,104,95,104, 116,114,97,112,62,117,9,0,0,0,112,97,116,104,95,104,
111,111,107,134,4,0,0,115,4,0,0,0,0,10,21,6, 111,111,107,134,4,0,0,115,4,0,0,0,0,10,21,6,
...@@ -3635,8 +3635,8 @@ unsigned char _Py_M__importlib[] = { ...@@ -3635,8 +3635,8 @@ unsigned char _Py_M__importlib[] = {
124,3,0,100,22,0,116,15,0,131,0,0,131,3,0,1, 124,3,0,100,22,0,116,15,0,131,0,0,131,3,0,1,
116,8,0,124,3,0,100,23,0,124,1,0,106,16,0,131, 116,8,0,124,3,0,100,23,0,124,1,0,106,16,0,131,
0,0,131,3,0,1,116,8,0,124,3,0,100,24,0,116, 0,0,131,3,0,1,116,8,0,124,3,0,100,24,0,116,
0,0,106,17,0,131,0,0,131,3,0,1,124,7,0,100, 1,0,106,17,0,106,18,0,131,3,0,1,124,7,0,100,
8,0,107,2,0,114,120,2,116,18,0,106,19,0,100,25, 8,0,107,2,0,114,120,2,116,19,0,106,20,0,100,25,
0,131,1,0,1,110,0,0,100,26,0,83,40,28,0,0, 0,131,1,0,1,110,0,0,100,26,0,83,40,28,0,0,
0,117,250,0,0,0,83,101,116,117,112,32,105,109,112,111, 0,117,250,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, 114,116,108,105,98,32,98,121,32,105,109,112,111,114,116,105,
...@@ -3687,7 +3687,7 @@ unsigned char _Py_M__importlib[] = { ...@@ -3687,7 +3687,7 @@ unsigned char _Py_M__importlib[] = {
0,0,117,3,0,0,0,95,105,111,117,9,0,0,0,95, 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, 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,116,105,110,115,117,7,0,0,0,109,97,114,115,104,97,
108,40,20,0,0,0,117,4,0,0,0,95,105,109,112,117, 108,40,21,0,0,0,117,4,0,0,0,95,105,109,112,117,
3,0,0,0,115,121,115,117,7,0,0,0,104,97,115,97, 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, 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, 109,112,111,114,116,101,114,117,10,0,0,0,95,95,108,111,
...@@ -3701,163 +3701,165 @@ unsigned char _Py_M__importlib[] = { ...@@ -3701,163 +3701,165 @@ unsigned char _Py_M__importlib[] = {
111,114,117,4,0,0,0,78,111,110,101,117,3,0,0,0, 111,114,117,4,0,0,0,78,111,110,101,117,3,0,0,0,
115,101,116,117,16,0,0,0,95,109,97,107,101,95,114,101, 115,101,116,117,16,0,0,0,95,109,97,107,101,95,114,101,
108,97,120,95,99,97,115,101,117,9,0,0,0,103,101,116, 108,97,120,95,99,97,115,101,117,9,0,0,0,103,101,116,
95,109,97,103,105,99,117,7,0,0,0,103,101,116,95,116, 95,109,97,103,105,99,117,14,0,0,0,105,109,112,108,101,
97,103,117,15,0,0,0,83,79,85,82,67,69,95,83,85, 109,101,110,116,97,116,105,111,110,117,9,0,0,0,99,97,
70,70,73,88,69,83,117,6,0,0,0,97,112,112,101,110, 99,104,101,95,116,97,103,117,15,0,0,0,83,79,85,82,
100,40,13,0,0,0,117,10,0,0,0,115,121,115,95,109, 67,69,95,83,85,70,70,73,88,69,83,117,6,0,0,0,
111,100,117,108,101,117,11,0,0,0,95,105,109,112,95,109, 97,112,112,101,110,100,40,13,0,0,0,117,10,0,0,0,
111,100,117,108,101,117,6,0,0,0,109,111,100,117,108,101, 115,121,115,95,109,111,100,117,108,101,117,11,0,0,0,95,
117,11,0,0,0,115,101,108,102,95,109,111,100,117,108,101, 105,109,112,95,109,111,100,117,108,101,117,6,0,0,0,109,
117,12,0,0,0,98,117,105,108,116,105,110,95,110,97,109, 111,100,117,108,101,117,11,0,0,0,115,101,108,102,95,109,
101,117,14,0,0,0,98,117,105,108,116,105,110,95,109,111, 111,100,117,108,101,117,12,0,0,0,98,117,105,108,116,105,
100,117,108,101,117,10,0,0,0,111,115,95,100,101,116,97, 110,95,110,97,109,101,117,14,0,0,0,98,117,105,108,116,
105,108,115,117,10,0,0,0,98,117,105,108,116,105,110,95, 105,110,95,109,111,100,117,108,101,117,10,0,0,0,111,115,
111,115,117,15,0,0,0,112,97,116,104,95,115,101,112,97, 95,100,101,116,97,105,108,115,117,10,0,0,0,98,117,105,
114,97,116,111,114,115,117,8,0,0,0,112,97,116,104,95, 108,116,105,110,95,111,115,117,15,0,0,0,112,97,116,104,
115,101,112,117,9,0,0,0,111,115,95,109,111,100,117,108, 95,115,101,112,97,114,97,116,111,114,115,117,8,0,0,0,
101,117,13,0,0,0,116,104,114,101,97,100,95,109,111,100, 112,97,116,104,95,115,101,112,117,9,0,0,0,111,115,95,
117,108,101,117,14,0,0,0,119,101,97,107,114,101,102,95, 109,111,100,117,108,101,117,13,0,0,0,116,104,114,101,97,
109,111,100,117,108,101,40,0,0,0,0,40,0,0,0,0, 100,95,109,111,100,117,108,101,117,14,0,0,0,119,101,97,
117,29,0,0,0,60,102,114,111,122,101,110,32,105,109,112, 107,114,101,102,95,109,111,100,117,108,101,40,0,0,0,0,
111,114,116,108,105,98,46,95,98,111,111,116,115,116,114,97, 40,0,0,0,0,117,29,0,0,0,60,102,114,111,122,101,
112,62,117,6,0,0,0,95,115,101,116,117,112,116,5,0, 110,32,105,109,112,111,114,116,108,105,98,46,95,98,111,111,
0,115,82,0,0,0,0,9,6,1,6,2,19,1,15,1, 116,115,116,114,97,112,62,117,6,0,0,0,95,115,101,116,
16,2,13,1,13,1,15,1,18,2,13,1,20,2,48,1, 117,112,116,5,0,0,115,82,0,0,0,0,9,6,1,6,
19,2,31,1,10,1,15,1,13,1,4,2,3,1,15,2, 2,19,1,15,1,16,2,13,1,13,1,15,1,18,2,13,
27,1,13,1,5,1,13,1,12,2,12,2,3,1,19,1, 1,20,2,48,1,19,2,31,1,10,1,15,1,13,1,4,
13,2,11,1,15,2,16,1,16,1,16,1,16,1,22,2, 2,3,1,15,2,27,1,13,1,5,1,13,1,12,2,12,
19,1,22,1,22,1,12,1,117,6,0,0,0,95,115,101, 2,3,1,19,1,13,2,11,1,15,2,16,1,16,1,16,
116,117,112,99,2,0,0,0,0,0,0,0,6,0,0,0, 1,16,1,22,2,19,1,22,1,22,1,12,1,117,6,0,
4,0,0,0,67,0,0,0,115,136,0,0,0,116,0,0, 0,0,95,115,101,116,117,112,99,2,0,0,0,0,0,0,
124,0,0,124,1,0,131,2,0,1,116,1,0,124,1,0, 0,6,0,0,0,4,0,0,0,67,0,0,0,115,136,0,
106,2,0,131,0,0,100,2,0,102,3,0,125,2,0,116, 0,0,116,0,0,124,0,0,124,1,0,131,2,0,1,116,
4,0,116,5,0,100,3,0,102,3,0,125,3,0,116,7, 1,0,124,1,0,106,2,0,131,0,0,100,2,0,102,3,
0,116,8,0,100,3,0,102,3,0,125,4,0,124,2,0, 0,125,2,0,116,4,0,116,5,0,100,3,0,102,3,0,
124,3,0,124,4,0,103,3,0,125,5,0,116,9,0,106, 125,3,0,116,7,0,116,8,0,100,3,0,102,3,0,125,
10,0,106,11,0,116,12,0,106,13,0,124,5,0,140,0, 4,0,124,2,0,124,3,0,124,4,0,103,3,0,125,5,
0,103,1,0,131,1,0,1,116,9,0,106,14,0,106,11, 0,116,9,0,106,10,0,106,11,0,116,12,0,106,13,0,
0,116,15,0,116,16,0,116,17,0,103,3,0,131,1,0, 124,5,0,140,0,0,103,1,0,131,1,0,1,116,9,0,
1,100,1,0,83,40,4,0,0,0,117,50,0,0,0,73, 106,14,0,106,11,0,116,15,0,116,16,0,116,17,0,103,
110,115,116,97,108,108,32,105,109,112,111,114,116,108,105,98, 3,0,131,1,0,1,100,1,0,83,40,4,0,0,0,117,
32,97,115,32,116,104,101,32,105,109,112,108,101,109,101,110, 50,0,0,0,73,110,115,116,97,108,108,32,105,109,112,111,
116,97,116,105,111,110,32,111,102,32,105,109,112,111,114,116, 114,116,108,105,98,32,97,115,32,116,104,101,32,105,109,112,
46,78,70,84,40,18,0,0,0,117,6,0,0,0,95,115, 108,101,109,101,110,116,97,116,105,111,110,32,111,102,32,105,
101,116,117,112,117,19,0,0,0,69,120,116,101,110,115,105, 109,112,111,114,116,46,78,70,84,40,18,0,0,0,117,6,
111,110,70,105,108,101,76,111,97,100,101,114,117,18,0,0, 0,0,0,95,115,101,116,117,112,117,19,0,0,0,69,120,
0,101,120,116,101,110,115,105,111,110,95,115,117,102,102,105, 116,101,110,115,105,111,110,70,105,108,101,76,111,97,100,101,
120,101,115,117,5,0,0,0,70,97,108,115,101,117,16,0, 114,117,18,0,0,0,101,120,116,101,110,115,105,111,110,95,
0,0,83,111,117,114,99,101,70,105,108,101,76,111,97,100, 115,117,102,102,105,120,101,115,117,5,0,0,0,70,97,108,
101,114,117,15,0,0,0,83,79,85,82,67,69,95,83,85, 115,101,117,16,0,0,0,83,111,117,114,99,101,70,105,108,
70,70,73,88,69,83,117,4,0,0,0,84,114,117,101,117, 101,76,111,97,100,101,114,117,15,0,0,0,83,79,85,82,
20,0,0,0,83,111,117,114,99,101,108,101,115,115,70,105, 67,69,95,83,85,70,70,73,88,69,83,117,4,0,0,0,
108,101,76,111,97,100,101,114,117,17,0,0,0,66,89,84, 84,114,117,101,117,20,0,0,0,83,111,117,114,99,101,108,
69,67,79,68,69,95,83,85,70,70,73,88,69,83,117,3, 101,115,115,70,105,108,101,76,111,97,100,101,114,117,17,0,
0,0,0,115,121,115,117,10,0,0,0,112,97,116,104,95, 0,0,66,89,84,69,67,79,68,69,95,83,85,70,70,73,
104,111,111,107,115,117,6,0,0,0,101,120,116,101,110,100, 88,69,83,117,3,0,0,0,115,121,115,117,10,0,0,0,
117,10,0,0,0,70,105,108,101,70,105,110,100,101,114,117, 112,97,116,104,95,104,111,111,107,115,117,6,0,0,0,101,
9,0,0,0,112,97,116,104,95,104,111,111,107,117,9,0, 120,116,101,110,100,117,10,0,0,0,70,105,108,101,70,105,
0,0,109,101,116,97,95,112,97,116,104,117,15,0,0,0, 110,100,101,114,117,9,0,0,0,112,97,116,104,95,104,111,
66,117,105,108,116,105,110,73,109,112,111,114,116,101,114,117, 111,107,117,9,0,0,0,109,101,116,97,95,112,97,116,104,
14,0,0,0,70,114,111,122,101,110,73,109,112,111,114,116, 117,15,0,0,0,66,117,105,108,116,105,110,73,109,112,111,
101,114,117,10,0,0,0,80,97,116,104,70,105,110,100,101, 114,116,101,114,117,14,0,0,0,70,114,111,122,101,110,73,
114,40,6,0,0,0,117,10,0,0,0,115,121,115,95,109, 109,112,111,114,116,101,114,117,10,0,0,0,80,97,116,104,
111,100,117,108,101,117,11,0,0,0,95,105,109,112,95,109, 70,105,110,100,101,114,40,6,0,0,0,117,10,0,0,0,
111,100,117,108,101,117,10,0,0,0,101,120,116,101,110,115, 115,121,115,95,109,111,100,117,108,101,117,11,0,0,0,95,
105,111,110,115,117,6,0,0,0,115,111,117,114,99,101,117, 105,109,112,95,109,111,100,117,108,101,117,10,0,0,0,101,
8,0,0,0,98,121,116,101,99,111,100,101,117,17,0,0, 120,116,101,110,115,105,111,110,115,117,6,0,0,0,115,111,
0,115,117,112,112,111,114,116,101,100,95,108,111,97,100,101, 117,114,99,101,117,8,0,0,0,98,121,116,101,99,111,100,
114,115,40,0,0,0,0,40,0,0,0,0,117,29,0,0, 101,117,17,0,0,0,115,117,112,112,111,114,116,101,100,95,
0,60,102,114,111,122,101,110,32,105,109,112,111,114,116,108, 108,111,97,100,101,114,115,40,0,0,0,0,40,0,0,0,
105,98,46,95,98,111,111,116,115,116,114,97,112,62,117,8, 0,117,29,0,0,0,60,102,114,111,122,101,110,32,105,109,
0,0,0,95,105,110,115,116,97,108,108,180,5,0,0,115, 112,111,114,116,108,105,98,46,95,98,111,111,116,115,116,114,
14,0,0,0,0,2,13,1,21,1,15,1,15,1,15,1, 97,112,62,117,8,0,0,0,95,105,110,115,116,97,108,108,
28,1,117,8,0,0,0,95,105,110,115,116,97,108,108,78, 180,5,0,0,115,14,0,0,0,0,2,13,1,21,1,15,
40,3,0,0,0,117,3,0,0,0,119,105,110,117,6,0, 1,15,1,15,1,28,1,117,8,0,0,0,95,105,110,115,
0,0,99,121,103,119,105,110,117,6,0,0,0,100,97,114, 116,97,108,108,78,40,3,0,0,0,117,3,0,0,0,119,
119,105,110,40,65,0,0,0,117,7,0,0,0,95,95,100, 105,110,117,6,0,0,0,99,121,103,119,105,110,117,6,0,
111,99,95,95,117,27,0,0,0,95,67,65,83,69,95,73, 0,0,100,97,114,119,105,110,40,65,0,0,0,117,7,0,
78,83,69,78,83,73,84,73,86,69,95,80,76,65,84,70, 0,0,95,95,100,111,99,95,95,117,27,0,0,0,95,67,
79,82,77,83,117,16,0,0,0,95,109,97,107,101,95,114, 65,83,69,95,73,78,83,69,78,83,73,84,73,86,69,95,
101,108,97,120,95,99,97,115,101,117,7,0,0,0,95,119, 80,76,65,84,70,79,82,77,83,117,16,0,0,0,95,109,
95,108,111,110,103,117,7,0,0,0,95,114,95,108,111,110, 97,107,101,95,114,101,108,97,120,95,99,97,115,101,117,7,
103,117,10,0,0,0,95,112,97,116,104,95,106,111,105,110, 0,0,0,95,119,95,108,111,110,103,117,7,0,0,0,95,
117,11,0,0,0,95,112,97,116,104,95,115,112,108,105,116, 114,95,108,111,110,103,117,10,0,0,0,95,112,97,116,104,
117,18,0,0,0,95,112,97,116,104,95,105,115,95,109,111, 95,106,111,105,110,117,11,0,0,0,95,112,97,116,104,95,
100,101,95,116,121,112,101,117,12,0,0,0,95,112,97,116, 115,112,108,105,116,117,18,0,0,0,95,112,97,116,104,95,
104,95,105,115,102,105,108,101,117,11,0,0,0,95,112,97, 105,115,95,109,111,100,101,95,116,121,112,101,117,12,0,0,
116,104,95,105,115,100,105,114,117,13,0,0,0,95,119,114, 0,95,112,97,116,104,95,105,115,102,105,108,101,117,11,0,
105,116,101,95,97,116,111,109,105,99,117,5,0,0,0,95, 0,0,95,112,97,116,104,95,105,115,100,105,114,117,13,0,
119,114,97,112,117,4,0,0,0,116,121,112,101,117,8,0, 0,0,95,119,114,105,116,101,95,97,116,111,109,105,99,117,
0,0,95,95,99,111,100,101,95,95,117,10,0,0,0,95, 5,0,0,0,95,119,114,97,112,117,4,0,0,0,116,121,
99,111,100,101,95,116,121,112,101,117,10,0,0,0,110,101, 112,101,117,8,0,0,0,95,95,99,111,100,101,95,95,117,
119,95,109,111,100,117,108,101,117,13,0,0,0,95,109,111, 10,0,0,0,95,99,111,100,101,95,116,121,112,101,117,10,
100,117,108,101,95,108,111,99,107,115,117,12,0,0,0,95, 0,0,0,110,101,119,95,109,111,100,117,108,101,117,13,0,
98,108,111,99,107,105,110,103,95,111,110,117,12,0,0,0, 0,0,95,109,111,100,117,108,101,95,108,111,99,107,115,117,
82,117,110,116,105,109,101,69,114,114,111,114,117,14,0,0, 12,0,0,0,95,98,108,111,99,107,105,110,103,95,111,110,
0,95,68,101,97,100,108,111,99,107,69,114,114,111,114,117, 117,12,0,0,0,82,117,110,116,105,109,101,69,114,114,111,
11,0,0,0,95,77,111,100,117,108,101,76,111,99,107,117, 114,117,14,0,0,0,95,68,101,97,100,108,111,99,107,69,
16,0,0,0,95,68,117,109,109,121,77,111,100,117,108,101, 114,114,111,114,117,11,0,0,0,95,77,111,100,117,108,101,
76,111,99,107,117,16,0,0,0,95,103,101,116,95,109,111, 76,111,99,107,117,16,0,0,0,95,68,117,109,109,121,77,
100,117,108,101,95,108,111,99,107,117,19,0,0,0,95,108, 111,100,117,108,101,76,111,99,107,117,16,0,0,0,95,103,
111,99,107,95,117,110,108,111,99,107,95,109,111,100,117,108, 101,116,95,109,111,100,117,108,101,95,108,111,99,107,117,19,
101,117,8,0,0,0,95,80,89,67,65,67,72,69,117,15, 0,0,0,95,108,111,99,107,95,117,110,108,111,99,107,95,
0,0,0,83,79,85,82,67,69,95,83,85,70,70,73,88, 109,111,100,117,108,101,117,8,0,0,0,95,80,89,67,65,
69,83,117,23,0,0,0,68,69,66,85,71,95,66,89,84, 67,72,69,117,15,0,0,0,83,79,85,82,67,69,95,83,
69,67,79,68,69,95,83,85,70,70,73,88,69,83,117,27, 85,70,70,73,88,69,83,117,23,0,0,0,68,69,66,85,
0,0,0,79,80,84,73,77,73,90,69,68,95,66,89,84, 71,95,66,89,84,69,67,79,68,69,95,83,85,70,70,73,
69,67,79,68,69,95,83,85,70,70,73,88,69,83,117,17, 88,69,83,117,27,0,0,0,79,80,84,73,77,73,90,69,
0,0,0,66,89,84,69,67,79,68,69,95,83,85,70,70, 68,95,66,89,84,69,67,79,68,69,95,83,85,70,70,73,
73,88,69,83,117,4,0,0,0,78,111,110,101,117,17,0, 88,69,83,117,17,0,0,0,66,89,84,69,67,79,68,69,
0,0,99,97,99,104,101,95,102,114,111,109,95,115,111,117, 95,83,85,70,70,73,88,69,83,117,4,0,0,0,78,111,
114,99,101,117,16,0,0,0,95,118,101,114,98,111,115,101, 110,101,117,17,0,0,0,99,97,99,104,101,95,102,114,111,
95,109,101,115,115,97,103,101,117,11,0,0,0,115,101,116, 109,95,115,111,117,114,99,101,117,16,0,0,0,95,118,101,
95,112,97,99,107,97,103,101,117,10,0,0,0,115,101,116, 114,98,111,115,101,95,109,101,115,115,97,103,101,117,11,0,
95,108,111,97,100,101,114,117,17,0,0,0,109,111,100,117, 0,0,115,101,116,95,112,97,99,107,97,103,101,117,10,0,
108,101,95,102,111,114,95,108,111,97,100,101,114,117,11,0, 0,0,115,101,116,95,108,111,97,100,101,114,117,17,0,0,
0,0,95,99,104,101,99,107,95,110,97,109,101,117,17,0, 0,109,111,100,117,108,101,95,102,111,114,95,108,111,97,100,
0,0,95,114,101,113,117,105,114,101,115,95,98,117,105,108, 101,114,117,11,0,0,0,95,99,104,101,99,107,95,110,97,
116,105,110,117,16,0,0,0,95,114,101,113,117,105,114,101, 109,101,117,17,0,0,0,95,114,101,113,117,105,114,101,115,
115,95,102,114,111,122,101,110,117,15,0,0,0,66,117,105, 95,98,117,105,108,116,105,110,117,16,0,0,0,95,114,101,
108,116,105,110,73,109,112,111,114,116,101,114,117,14,0,0, 113,117,105,114,101,115,95,102,114,111,122,101,110,117,15,0,
0,70,114,111,122,101,110,73,109,112,111,114,116,101,114,117, 0,0,66,117,105,108,116,105,110,73,109,112,111,114,116,101,
13,0,0,0,95,76,111,97,100,101,114,66,97,115,105,99, 114,117,14,0,0,0,70,114,111,122,101,110,73,109,112,111,
115,117,12,0,0,0,83,111,117,114,99,101,76,111,97,100, 114,116,101,114,117,13,0,0,0,95,76,111,97,100,101,114,
101,114,117,10,0,0,0,70,105,108,101,76,111,97,100,101, 66,97,115,105,99,115,117,12,0,0,0,83,111,117,114,99,
114,117,16,0,0,0,83,111,117,114,99,101,70,105,108,101, 101,76,111,97,100,101,114,117,10,0,0,0,70,105,108,101,
76,111,97,100,101,114,117,20,0,0,0,83,111,117,114,99, 76,111,97,100,101,114,117,16,0,0,0,83,111,117,114,99,
101,108,101,115,115,70,105,108,101,76,111,97,100,101,114,117, 101,70,105,108,101,76,111,97,100,101,114,117,20,0,0,0,
19,0,0,0,69,120,116,101,110,115,105,111,110,70,105,108, 83,111,117,114,99,101,108,101,115,115,70,105,108,101,76,111,
101,76,111,97,100,101,114,117,14,0,0,0,95,78,97,109, 97,100,101,114,117,19,0,0,0,69,120,116,101,110,115,105,
101,115,112,97,99,101,80,97,116,104,117,15,0,0,0,78, 111,110,70,105,108,101,76,111,97,100,101,114,117,14,0,0,
97,109,101,115,112,97,99,101,76,111,97,100,101,114,117,10, 0,95,78,97,109,101,115,112,97,99,101,80,97,116,104,117,
0,0,0,80,97,116,104,70,105,110,100,101,114,117,10,0, 15,0,0,0,78,97,109,101,115,112,97,99,101,76,111,97,
0,0,70,105,108,101,70,105,110,100,101,114,117,18,0,0, 100,101,114,117,10,0,0,0,80,97,116,104,70,105,110,100,
0,95,73,109,112,111,114,116,76,111,99,107,67,111,110,116, 101,114,117,10,0,0,0,70,105,108,101,70,105,110,100,101,
101,120,116,117,13,0,0,0,95,114,101,115,111,108,118,101, 114,117,18,0,0,0,95,73,109,112,111,114,116,76,111,99,
95,110,97,109,101,117,12,0,0,0,95,102,105,110,100,95, 107,67,111,110,116,101,120,116,117,13,0,0,0,95,114,101,
109,111,100,117,108,101,117,13,0,0,0,95,115,97,110,105, 115,111,108,118,101,95,110,97,109,101,117,12,0,0,0,95,
116,121,95,99,104,101,99,107,117,8,0,0,0,95,69,82, 102,105,110,100,95,109,111,100,117,108,101,117,13,0,0,0,
82,95,77,83,71,117,23,0,0,0,95,102,105,110,100,95, 95,115,97,110,105,116,121,95,99,104,101,99,107,117,8,0,
97,110,100,95,108,111,97,100,95,117,110,108,111,99,107,101, 0,0,95,69,82,82,95,77,83,71,117,23,0,0,0,95,
100,117,14,0,0,0,95,102,105,110,100,95,97,110,100,95, 102,105,110,100,95,97,110,100,95,108,111,97,100,95,117,110,
108,111,97,100,117,11,0,0,0,95,103,99,100,95,105,109, 108,111,99,107,101,100,117,14,0,0,0,95,102,105,110,100,
112,111,114,116,117,16,0,0,0,95,104,97,110,100,108,101, 95,97,110,100,95,108,111,97,100,117,11,0,0,0,95,103,
95,102,114,111,109,108,105,115,116,117,17,0,0,0,95,99, 99,100,95,105,109,112,111,114,116,117,16,0,0,0,95,104,
97,108,99,95,95,95,112,97,99,107,97,103,101,95,95,117, 97,110,100,108,101,95,102,114,111,109,108,105,115,116,117,17,
10,0,0,0,95,95,105,109,112,111,114,116,95,95,117,13, 0,0,0,95,99,97,108,99,95,95,95,112,97,99,107,97,
0,0,0,95,77,65,71,73,67,95,78,85,77,66,69,82, 103,101,95,95,117,10,0,0,0,95,95,105,109,112,111,114,
117,4,0,0,0,95,84,65,71,117,6,0,0,0,95,115, 116,95,95,117,13,0,0,0,95,77,65,71,73,67,95,78,
101,116,117,112,117,8,0,0,0,95,105,110,115,116,97,108, 85,77,66,69,82,117,4,0,0,0,95,84,65,71,117,6,
108,40,0,0,0,0,40,0,0,0,0,40,0,0,0,0, 0,0,0,95,115,101,116,117,112,117,8,0,0,0,95,105,
117,29,0,0,0,60,102,114,111,122,101,110,32,105,109,112, 110,115,116,97,108,108,40,0,0,0,0,40,0,0,0,0,
111,114,116,108,105,98,46,95,98,111,111,116,115,116,114,97, 40,0,0,0,0,117,29,0,0,0,60,102,114,111,122,101,
112,62,117,8,0,0,0,60,109,111,100,117,108,101,62,8, 110,32,105,109,112,111,114,116,108,105,98,46,95,98,111,111,
0,0,0,115,120,0,0,0,6,21,6,3,12,13,12,16, 116,115,116,114,97,112,62,117,8,0,0,0,60,109,111,100,
12,13,12,12,12,12,12,10,12,6,12,7,12,21,12,8, 117,108,101,62,8,0,0,0,115,120,0,0,0,6,21,6,
15,3,12,12,6,2,6,3,22,4,19,68,19,23,12,17, 3,12,13,12,16,12,13,12,12,12,12,12,10,12,6,12,
12,21,6,2,9,2,9,1,9,2,6,4,15,22,12,8, 7,12,21,12,8,15,3,12,12,6,2,6,3,22,4,19,
12,13,12,11,12,51,12,18,12,11,12,13,19,57,19,54, 68,19,23,12,17,12,21,6,2,9,2,9,1,9,2,6,
19,79,22,111,19,29,25,38,25,24,19,40,19,55,19,18, 4,15,22,12,8,12,13,12,11,12,51,12,18,12,11,12,
19,81,19,135,19,13,12,9,12,17,12,17,6,2,12,46, 13,19,57,19,54,19,79,22,111,19,29,25,38,25,24,19,
12,13,18,25,12,23,12,15,24,30,6,1,6,3,12,64, 40,19,55,19,18,19,81,19,135,19,13,12,9,12,17,12,
17,6,2,12,46,12,13,18,25,12,23,12,15,24,30,6,
1,6,3,12,64,
}; };
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment