]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Issue #15767: Use ModuleNotFoundError.
authorEric Snow <ericsnowcurrently@gmail.com>
Wed, 7 Sep 2016 23:56:15 +0000 (16:56 -0700)
committerEric Snow <ericsnowcurrently@gmail.com>
Wed, 7 Sep 2016 23:56:15 +0000 (16:56 -0700)
16 files changed:
Doc/c-api/exceptions.rst
Doc/reference/import.rst
Doc/whatsnew/3.6.rst
Include/pyerrors.h
Lib/importlib/_bootstrap.py
Lib/pydoc.py
Lib/test/test_cmd_line_script.py
Lib/test/test_import/__init__.py
Lib/test/test_importlib/import_/test_api.py
Lib/test/test_importlib/import_/test_fromlist.py
Lib/test/test_pydoc.py
Lib/test/test_site.py
Misc/NEWS
Python/errors.c
Python/import.c
Python/importlib.h

index 5644410b47ed9673863a2047b257e865abd3ac7e..25fb29c48c0838efd1de8a83d76dfdda5784332a 100644 (file)
@@ -306,6 +306,13 @@ an error value).
    :mod:`warnings` module and the :option:`-W` option in the command line
    documentation.  There is no C API for warning control.
 
+.. c:function:: PyObject* PyErr_SetImportErrorSubclass(PyObject *msg, PyObject *name, PyObject *path)
+
+   Much like :c:func:`PyErr_SetImportError` but this function allows for
+   specifying a subclass of :exc:`ImportError` to raise.
+
+   .. versionadded:: 3.4
+
 
 .. c:function:: int PyErr_WarnExplicitObject(PyObject *category, PyObject *message, PyObject *filename, int lineno, PyObject *module, PyObject *registry)
 
index fcc707bd3fbbcbd6dd9b4fd9d355600f5868f68d..5e2c1c8b0758d83183308bb823becdb8e5915d8c 100644 (file)
@@ -36,7 +36,7 @@ implement import semantics.
 
 When a module is first imported, Python searches for the module and if found,
 it creates a module object [#fnmo]_, initializing it.  If the named module
-cannot be found, an :exc:`ImportError` is raised.  Python implements various
+cannot be found, an :exc:`ModuleNotFoundError` is raised.  Python implements various
 strategies to search for the named module when the import machinery is
 invoked.  These strategies can be modified and extended by using various hooks
 described in the sections below.
@@ -167,7 +167,7 @@ arguments to the :keyword:`import` statement, or from the parameters to the
 This name will be used in various phases of the import search, and it may be
 the dotted path to a submodule, e.g. ``foo.bar.baz``.  In this case, Python
 first tries to import ``foo``, then ``foo.bar``, and finally ``foo.bar.baz``.
-If any of the intermediate imports fail, an :exc:`ImportError` is raised.
+If any of the intermediate imports fail, an :exc:`ModuleNotFoundError` is raised.
 
 
 The module cache
@@ -186,7 +186,7 @@ object.
 During import, the module name is looked up in :data:`sys.modules` and if
 present, the associated value is the module satisfying the import, and the
 process completes.  However, if the value is ``None``, then an
-:exc:`ImportError` is raised.  If the module name is missing, Python will
+:exc:`ModuleNotFoundError` is raised.  If the module name is missing, Python will
 continue searching for the module.
 
 :data:`sys.modules` is writable.  Deleting a key may not destroy the
@@ -194,7 +194,7 @@ associated module (as other modules may hold references to it),
 but it will invalidate the cache entry for the named module, causing
 Python to search anew for the named module upon its next
 import. The key can also be assigned to ``None``, forcing the next import
-of the module to result in an :exc:`ImportError`.
+of the module to result in an :exc:`ModuleNotFoundError`.
 
 Beware though, as if you keep a reference to the module object,
 invalidate its cache entry in :data:`sys.modules`, and then re-import the
@@ -288,8 +288,8 @@ the named module or not.
 If the meta path finder knows how to handle the named module, it returns a
 spec object.  If it cannot handle the named module, it returns ``None``.  If
 :data:`sys.meta_path` processing reaches the end of its list without returning
-a spec, then an :exc:`ImportError` is raised.  Any other exceptions raised
-are simply propagated up, aborting the import process.
+a spec, then a :exc:`ModuleNotFoundError` is raised.  Any other exceptions
+raised are simply propagated up, aborting the import process.
 
 The :meth:`~importlib.abc.MetaPathFinder.find_spec()` method of meta path
 finders is called with two or three arguments.  The first is the fully
@@ -298,9 +298,9 @@ The second argument is the path entries to use for the module search.  For
 top-level modules, the second argument is ``None``, but for submodules or
 subpackages, the second argument is the value of the parent package's
 ``__path__`` attribute. If the appropriate ``__path__`` attribute cannot
-be accessed, an :exc:`ImportError` is raised.  The third argument is an
-existing module object that will be the target of loading later.  The
-import system passes in a target module only during reload.
+be accessed, an :exc:`ModuleNotFoundError` is raised.  The third argument
+is an existing module object that will be the target of loading later.
+The import system passes in a target module only during reload.
 
 The meta path may be traversed multiple times for a single import request.
 For example, assuming none of the modules involved has already been cached,
@@ -887,7 +887,7 @@ import statements within that module.
 
 To selectively prevent import of some modules from a hook early on the
 meta path (rather than disabling the standard import system entirely),
-it is sufficient to raise :exc:`ImportError` directly from
+it is sufficient to raise :exc:`ModuleNoFoundError` directly from
 :meth:`~importlib.abc.MetaPathFinder.find_spec` instead of returning
 ``None``. The latter indicates that the meta path search should continue,
 while raising an exception terminates it immediately.
index ebb142c0b1046fdb0c894bc861ca81ff82433e7b..e48ed01fc214097531abb1b8b500d9b55d52cf17 100644 (file)
@@ -350,6 +350,10 @@ Some smaller changes made to the core Python language are:
   :ref:`py36-traceback` for an example).
   (Contributed by Emanuel Barry in :issue:`26823`.)
 
+* Import now raises the new exception :exc:`ModuleNotFoundError`
+  (subclass of :exc:`ImportError`) when it cannot find a module.  Code
+  that current checks for ImportError (in try-except) will still work.
+
 
 New Modules
 ===========
@@ -959,6 +963,9 @@ Changes in the Python API
 * When :meth:`importlib.abc.Loader.exec_module` is defined,
   :meth:`importlib.abc.Loader.create_module` must also be defined.
 
+* :c:func:`PyErr_SetImportError` now sets :exc:`TypeError` when its **msg**
+  argument is not set. Previously only ``NULL`` was returned.
+
 * The format of the ``co_lnotab`` attribute of code objects changed to support
   negative line number delta. By default, Python does not emit bytecode with
   negative line number delta. Functions using ``frame.f_lineno``,
index 6bc3ca77617d0255b3a67d34471060bf3370bac0..03cee3d2ba411d89fba990f02b8c996eaac91212 100644 (file)
@@ -284,6 +284,9 @@ PyAPI_FUNC(PyObject *) PyErr_SetExcFromWindowsErr(PyObject *, int);
 
 PyAPI_FUNC(PyObject *) PyErr_SetExcWithArgsKwargs(PyObject *, PyObject *,
     PyObject *);
+
+PyAPI_FUNC(PyObject *) PyErr_SetImportErrorSubclass(PyObject *, PyObject *,
+    PyObject *, PyObject *);
 PyAPI_FUNC(PyObject *) PyErr_SetImportError(PyObject *, PyObject *,
     PyObject *);
 
index 2eeafe1dfbfc15f05ce67aa173a6af9713bef029..8cd0262bbf41e225cac70afa2a5ae980f43d7c3c 100644 (file)
@@ -943,10 +943,10 @@ def _find_and_load_unlocked(name, import_):
             path = parent_module.__path__
         except AttributeError:
             msg = (_ERR_MSG + '; {!r} is not a package').format(name, parent)
-            raise ImportError(msg, name=name) from None
+            raise ModuleNotFoundError(msg, name=name) from None
     spec = _find_spec(name, path)
     if spec is None:
-        raise ImportError(_ERR_MSG.format(name), name=name)
+        raise ModuleNotFoundError(_ERR_MSG.format(name), name=name)
     else:
         module = _load_unlocked(spec)
     if parent:
@@ -982,10 +982,11 @@ def _gcd_import(name, package=None, level=0):
         _imp.release_lock()
         message = ('import of {} halted; '
                    'None in sys.modules'.format(name))
-        raise ImportError(message, name=name)
+        raise ModuleNotFoundError(message, name=name)
     _lock_unlock_module(name)
     return module
 
+
 def _handle_fromlist(module, fromlist, import_):
     """Figure out what __import__ should return.
 
@@ -1007,13 +1008,12 @@ def _handle_fromlist(module, fromlist, import_):
                 from_name = '{}.{}'.format(module.__name__, x)
                 try:
                     _call_with_frames_removed(import_, from_name)
-                except ImportError as exc:
+                except ModuleNotFoundError as exc:
                     # Backwards-compatibility dictates we ignore failed
                     # imports triggered by fromlist for modules that don't
                     # exist.
-                    if str(exc).startswith(_ERR_MSG_PREFIX):
-                        if exc.name == from_name:
-                            continue
+                    if exc.name == from_name:
+                        continue
                     raise
     return module
 
index d7a177f1a21858862f4955fc706140fef8d39355..39db3915dc2cac938153ce5fce56fb0b82d17e93 100644 (file)
@@ -350,7 +350,7 @@ def safeimport(path, forceload=0, cache={}):
         elif exc is SyntaxError:
             # A SyntaxError occurred before we could execute the module.
             raise ErrorDuringImport(value.filename, info)
-        elif exc is ImportError and value.name == path:
+        elif issubclass(exc, ImportError) and value.name == path:
             # No such module in the path.
             return None
         else:
index 6e0b6699fb532aaee461ddd4cd686f3ce50db65b..38cb2e206fc991ff07937c7085b94a7165df315f 100644 (file)
@@ -428,7 +428,7 @@ class CmdLineTest(unittest.TestCase):
             ('builtins.x', br'Error while finding module specification.*'
                 br'AttributeError'),
             ('builtins.x.y', br'Error while finding module specification.*'
-                br'ImportError.*No module named.*not a package'),
+                br'ModuleNotFoundError.*No module named.*not a package'),
             ('os.path', br'loader.*cannot handle'),
             ('importlib', br'No module named.*'
                 br'is a package and cannot be directly executed'),
index 1e33274b873f263a3cfd96fb12642bc5694ba1c9..760908efe671fe9bb84d4c4da99e0c3d1d9eeb5d 100644 (file)
@@ -69,6 +69,18 @@ class ImportTests(unittest.TestCase):
     def tearDown(self):
         unload(TESTFN)
 
+    def test_import_raises_ModuleNotFoundError(self):
+        with self.assertRaises(ModuleNotFoundError):
+            import something_that_should_not_exist_anywhere
+
+    def test_from_import_missing_module_raises_ModuleNotFoundError(self):
+        with self.assertRaises(ModuleNotFoundError):
+            from something_that_should_not_exist_anywhere import blah
+
+    def test_from_import_missing_attr_raises_ImportError(self):
+        with self.assertRaises(ImportError):
+            from importlib import something_that_should_not_exist_anywhere
+
     def test_case_sensitivity(self):
         # Brief digression to test that import is case-sensitive:  if we got
         # this far, we know for sure that "random" exists.
index 7069d9e58dca02c6892cb8bf389c5065e77ac650..a7bf2749cf56f44ea2f14748049333707b04e30e 100644 (file)
@@ -43,6 +43,10 @@ class APITest:
     """Test API-specific details for __import__ (e.g. raising the right
     exception when passing in an int for the module name)."""
 
+    def test_raises_ModuleNotFoundError(self):
+        with self.assertRaises(ModuleNotFoundError):
+            util.import_importlib('some module that does not exist')
+
     def test_name_requires_rparition(self):
         # Raise TypeError if a non-string is passed in for the module name.
         with self.assertRaises(TypeError):
index 80454655adadc279e7644966e77547d6a7b8bab9..14640032b4c22657af85f909f2ca803b62b6221e 100644 (file)
@@ -73,16 +73,16 @@ class HandlingFromlist:
                 self.assertTrue(hasattr(module, 'module'))
                 self.assertEqual(module.module.__name__, 'pkg.module')
 
-    def test_module_from_package_triggers_ImportError(self):
-        # If a submodule causes an ImportError because it tries to import
-        # a module which doesn't exist, that should let the ImportError
-        # propagate.
+    def test_module_from_package_triggers_ModuleNotFoundError(self):
+        # If a submodule causes an ModuleNotFoundError because it tries
+        # to import a module which doesn't exist, that should let the
+        # ModuleNotFoundError propagate.
         def module_code():
             import i_do_not_exist
         with util.mock_modules('pkg.__init__', 'pkg.mod',
                                module_code={'pkg.mod': module_code}) as importer:
             with util.import_state(meta_path=[importer]):
-                with self.assertRaises(ImportError) as exc:
+                with self.assertRaises(ModuleNotFoundError) as exc:
                     self.__import__('pkg', fromlist=['mod'])
                 self.assertEqual('i_do_not_exist', exc.exception.name)
 
index 527234bc6ec114d7d89008968f08a1fae78a8c7f..229fff47c9dc3fed2f13bdaab54e0899fcd220b9 100644 (file)
@@ -263,7 +263,7 @@ Use help() to get the interactive help utility.
 Use help(str) for help on the str class.'''.replace('\n', os.linesep)
 
 # output pattern for module with bad imports
-badimport_pattern = "problem in %s - ImportError: No module named %r"
+badimport_pattern = "problem in %s - ModuleNotFoundError: No module named %r"
 
 expected_dynamicattribute_pattern = """
 Help on class DA in module %s:
index f698927f37c87a88d3aaff397109adf1968088a3..0720230f24fe5363f390f2a2de76539eb71e55a5 100644 (file)
@@ -138,7 +138,7 @@ class HelperFunctionsTests(unittest.TestCase):
             re.escape(os.path.join(pth_dir, pth_fn)))
         # XXX: ditto previous XXX comment.
         self.assertRegex(err_out.getvalue(), 'Traceback')
-        self.assertRegex(err_out.getvalue(), 'ImportError')
+        self.assertRegex(err_out.getvalue(), 'ModuleNotFoundError')
 
     @unittest.skipIf(sys.platform == "win32", "Windows does not raise an "
                       "error for file paths containing null characters")
index 26922770294b2e5110a5082cfccba2b334804586..8f9dbab2fb0123a2afa13d40a38d69d4ca8a5304 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -9966,6 +9966,10 @@ C-API
   PyImport_ExecCodeModuleWithPathnames() (and thus by extension
   PyImport_ExecCodeModule() and PyImport_ExecCodeModuleEx()).
 
+- Issue #15767: Added PyErr_SetImportErrorSubclass().
+
+- PyErr_SetImportError() now sets TypeError when its msg argument is set.
+
 - Issue #9369: The types of `char*` arguments of PyObject_CallFunction() and
   PyObject_CallMethod() now changed to `const char*`.  Based on patches by
   Jörg Müller and Lars Buitinck.
index e6285e8b3b9cd3ade00c3886863c068da3776c8b..13ae6b456150cdcd13078181f5f2d70218ddd5bf 100644 (file)
@@ -697,27 +697,37 @@ PyObject *PyErr_SetFromWindowsErrWithUnicodeFilename(
 #endif /* MS_WINDOWS */
 
 PyObject *
-PyErr_SetImportError(PyObject *msg, PyObject *name, PyObject *path)
+PyErr_SetImportErrorSubclass(PyObject *exception, PyObject *msg,
+    PyObject *name, PyObject *path)
 {
+    int issubclass;
     PyObject *kwargs, *error;
 
-    if (msg == NULL) {
+    issubclass = PyObject_IsSubclass(exception, PyExc_ImportError);
+    if (issubclass < 0) {
+        return NULL;
+    }
+    else if (!issubclass) {
+        PyErr_SetString(PyExc_TypeError, "expected a subclass of ImportError");
         return NULL;
     }
 
-    kwargs = PyDict_New();
-    if (kwargs == NULL) {
+    if (msg == NULL) {
+        PyErr_SetString(PyExc_TypeError, "expected a message argument");
         return NULL;
     }
 
     if (name == NULL) {
         name = Py_None;
     }
-
     if (path == NULL) {
         path = Py_None;
     }
 
+    kwargs = PyDict_New();
+    if (kwargs == NULL) {
+        return NULL;
+    }
     if (PyDict_SetItemString(kwargs, "name", name) < 0) {
         goto done;
     }
@@ -725,7 +735,7 @@ PyErr_SetImportError(PyObject *msg, PyObject *name, PyObject *path)
         goto done;
     }
 
-    error = _PyObject_FastCallDict(PyExc_ImportError, &msg, 1, kwargs);
+    error = _PyObject_FastCallDict(exception, &msg, 1, kwargs);
     if (error != NULL) {
         PyErr_SetObject((PyObject *)Py_TYPE(error), error);
         Py_DECREF(error);
@@ -736,6 +746,12 @@ done:
     return NULL;
 }
 
+PyObject *
+PyErr_SetImportError(PyObject *msg, PyObject *name, PyObject *path)
+{
+    return PyErr_SetImportErrorSubclass(PyExc_ImportError, msg, name, path);
+}
+
 void
 _PyErr_BadInternalCall(const char *filename, int lineno)
 {
index 3bac5b8e41f7442362b3f554d4bd26ba80b03bfa..c780fe29760d641358bdfd093c815270de8fcfa8 100644 (file)
@@ -1539,7 +1539,8 @@ PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals,
         PyObject *msg = PyUnicode_FromFormat("import of %R halted; "
                                              "None in sys.modules", abs_name);
         if (msg != NULL) {
-            PyErr_SetImportError(msg, abs_name, NULL);
+            PyErr_SetImportErrorSubclass(PyExc_ModuleNotFoundError, msg,
+                    abs_name, NULL);
             Py_DECREF(msg);
         }
         mod = NULL;
index 50937476c710c16b4d8baf1a9dd54e9050d5b8e7..4ba754fd154c7c75c109144834ad278a554ba76f 100644 (file)
@@ -1516,7 +1516,8 @@ const unsigned char _Py_M__importlib[] = {
     137,0,0,0,41,12,114,118,0,0,0,114,14,0,0,0,
     114,79,0,0,0,114,58,0,0,0,114,127,0,0,0,114,
     90,0,0,0,218,8,95,69,82,82,95,77,83,71,114,38,
-    0,0,0,114,70,0,0,0,114,173,0,0,0,114,146,0,
+    0,0,0,218,19,77,111,100,117,108,101,78,111,116,70,111,
+    117,110,100,69,114,114,111,114,114,173,0,0,0,114,146,0,
     0,0,114,5,0,0,0,41,8,114,15,0,0,0,218,7,
     105,109,112,111,114,116,95,114,149,0,0,0,114,119,0,0,
     0,90,13,112,97,114,101,110,116,95,109,111,100,117,108,101,
@@ -1526,7 +1527,7 @@ const unsigned char _Py_M__importlib[] = {
     110,108,111,99,107,101,100,164,3,0,0,115,42,0,0,0,
     0,1,4,1,14,1,4,1,10,1,10,2,10,1,10,1,
     10,1,2,1,10,1,14,1,16,1,22,1,10,1,8,1,
-    22,2,8,1,4,2,10,1,22,1,114,181,0,0,0,99,
+    22,2,8,1,4,2,10,1,22,1,114,182,0,0,0,99,
     2,0,0,0,0,0,0,0,2,0,0,0,10,0,0,0,
     67,0,0,0,115,30,0,0,0,116,0,124,0,131,1,143,
     12,1,0,116,1,124,0,124,1,131,2,83,0,81,0,82,
@@ -1534,11 +1535,11 @@ const unsigned char _Py_M__importlib[] = {
     97,110,100,32,108,111,97,100,32,116,104,101,32,109,111,100,
     117,108,101,44,32,97,110,100,32,114,101,108,101,97,115,101,
     32,116,104,101,32,105,109,112,111,114,116,32,108,111,99,107,
-    46,78,41,2,114,42,0,0,0,114,181,0,0,0,41,2,
-    114,15,0,0,0,114,180,0,0,0,114,10,0,0,0,114,
+    46,78,41,2,114,42,0,0,0,114,182,0,0,0,41,2,
+    114,15,0,0,0,114,181,0,0,0,114,10,0,0,0,114,
     10,0,0,0,114,11,0,0,0,218,14,95,102,105,110,100,
     95,97,110,100,95,108,111,97,100,191,3,0,0,115,4,0,
-    0,0,0,2,10,1,114,182,0,0,0,114,19,0,0,0,
+    0,0,0,2,10,1,114,183,0,0,0,114,19,0,0,0,
     99,3,0,0,0,0,0,0,0,5,0,0,0,4,0,0,
     0,67,0,0,0,115,122,0,0,0,116,0,124,0,124,1,
     124,2,131,3,1,0,124,2,100,1,107,4,114,32,116,1,
@@ -1573,259 +1574,257 @@ const unsigned char _Py_M__importlib[] = {
     110,32,115,121,115,46,109,111,100,117,108,101,115,114,15,0,
     0,0,41,12,114,178,0,0,0,114,168,0,0,0,114,46,
     0,0,0,114,142,0,0,0,114,14,0,0,0,114,79,0,
-    0,0,114,182,0,0,0,218,11,95,103,99,100,95,105,109,
-    112,111,114,116,114,47,0,0,0,114,38,0,0,0,114,70,
+    0,0,114,183,0,0,0,218,11,95,103,99,100,95,105,109,
+    112,111,114,116,114,47,0,0,0,114,38,0,0,0,114,180,
     0,0,0,114,56,0,0,0,41,5,114,15,0,0,0,114,
     166,0,0,0,114,167,0,0,0,114,83,0,0,0,114,67,
     0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
-    0,0,114,183,0,0,0,197,3,0,0,115,28,0,0,0,
+    0,0,114,184,0,0,0,197,3,0,0,115,28,0,0,0,
     0,9,12,1,8,1,12,1,8,1,10,1,10,1,10,1,
-    8,1,8,1,4,1,6,1,14,1,8,1,114,183,0,0,
+    8,1,8,1,4,1,6,1,14,1,8,1,114,184,0,0,
     0,99,3,0,0,0,0,0,0,0,6,0,0,0,17,0,
-    0,0,67,0,0,0,115,178,0,0,0,116,0,124,0,100,
-    1,131,2,114,174,100,2,124,1,107,6,114,58,116,1,124,
+    0,0,67,0,0,0,115,164,0,0,0,116,0,124,0,100,
+    1,131,2,114,160,100,2,124,1,107,6,114,58,116,1,124,
     1,131,1,125,1,124,1,106,2,100,2,131,1,1,0,116,
     0,124,0,100,3,131,2,114,58,124,1,106,3,124,0,106,
-    4,131,1,1,0,120,114,124,1,68,0,93,106,125,3,116,
+    4,131,1,1,0,120,100,124,1,68,0,93,92,125,3,116,
     0,124,0,124,3,131,2,115,64,100,4,106,5,124,0,106,
     6,124,3,131,2,125,4,121,14,116,7,124,2,124,4,131,
-    2,1,0,87,0,113,64,4,0,116,8,107,10,114,168,1,
-    0,125,5,1,0,122,34,116,9,124,5,131,1,106,10,116,
-    11,131,1,114,150,124,5,106,12,124,4,107,2,114,150,119,
-    64,130,0,87,0,89,0,100,5,100,5,125,5,126,5,88,
-    0,113,64,88,0,113,64,87,0,124,0,83,0,41,6,122,
-    238,70,105,103,117,114,101,32,111,117,116,32,119,104,97,116,
-    32,95,95,105,109,112,111,114,116,95,95,32,115,104,111,117,
-    108,100,32,114,101,116,117,114,110,46,10,10,32,32,32,32,
-    84,104,101,32,105,109,112,111,114,116,95,32,112,97,114,97,
-    109,101,116,101,114,32,105,115,32,97,32,99,97,108,108,97,
-    98,108,101,32,119,104,105,99,104,32,116,97,107,101,115,32,
-    116,104,101,32,110,97,109,101,32,111,102,32,109,111,100,117,
-    108,101,32,116,111,10,32,32,32,32,105,109,112,111,114,116,
-    46,32,73,116,32,105,115,32,114,101,113,117,105,114,101,100,
-    32,116,111,32,100,101,99,111,117,112,108,101,32,116,104,101,
-    32,102,117,110,99,116,105,111,110,32,102,114,111,109,32,97,
-    115,115,117,109,105,110,103,32,105,109,112,111,114,116,108,105,
-    98,39,115,10,32,32,32,32,105,109,112,111,114,116,32,105,
-    109,112,108,101,109,101,110,116,97,116,105,111,110,32,105,115,
-    32,100,101,115,105,114,101,100,46,10,10,32,32,32,32,114,
-    127,0,0,0,250,1,42,218,7,95,95,97,108,108,95,95,
-    122,5,123,125,46,123,125,78,41,13,114,4,0,0,0,114,
-    126,0,0,0,218,6,114,101,109,111,118,101,218,6,101,120,
-    116,101,110,100,114,185,0,0,0,114,38,0,0,0,114,1,
-    0,0,0,114,58,0,0,0,114,70,0,0,0,114,175,0,
-    0,0,114,64,0,0,0,218,15,95,69,82,82,95,77,83,
-    71,95,80,82,69,70,73,88,114,15,0,0,0,41,6,114,
-    83,0,0,0,218,8,102,114,111,109,108,105,115,116,114,180,
-    0,0,0,218,1,120,90,9,102,114,111,109,95,110,97,109,
-    101,90,3,101,120,99,114,10,0,0,0,114,10,0,0,0,
-    114,11,0,0,0,218,16,95,104,97,110,100,108,101,95,102,
-    114,111,109,108,105,115,116,221,3,0,0,115,34,0,0,0,
-    0,10,10,1,8,1,8,1,10,1,10,1,12,1,10,1,
-    10,1,14,1,2,1,14,1,16,4,14,1,10,1,2,1,
-    24,1,114,191,0,0,0,99,1,0,0,0,0,0,0,0,
-    3,0,0,0,6,0,0,0,67,0,0,0,115,154,0,0,
-    0,124,0,106,0,100,1,131,1,125,1,124,0,106,0,100,
-    2,131,1,125,2,124,1,100,3,107,9,114,86,124,2,100,
-    3,107,9,114,80,124,1,124,2,106,1,107,3,114,80,116,
-    2,106,3,100,4,124,1,155,2,100,5,124,2,106,1,155,
-    2,100,6,157,5,116,4,100,7,100,8,144,1,131,2,1,
-    0,124,1,83,0,110,64,124,2,100,3,107,9,114,102,124,
-    2,106,1,83,0,110,48,116,2,106,3,100,9,116,4,100,
-    7,100,8,144,1,131,2,1,0,124,0,100,10,25,0,125,
-    1,100,11,124,0,107,7,114,150,124,1,106,5,100,12,131,
-    1,100,13,25,0,125,1,124,1,83,0,41,14,122,167,67,
-    97,108,99,117,108,97,116,101,32,119,104,97,116,32,95,95,
-    112,97,99,107,97,103,101,95,95,32,115,104,111,117,108,100,
-    32,98,101,46,10,10,32,32,32,32,95,95,112,97,99,107,
-    97,103,101,95,95,32,105,115,32,110,111,116,32,103,117,97,
-    114,97,110,116,101,101,100,32,116,111,32,98,101,32,100,101,
-    102,105,110,101,100,32,111,114,32,99,111,117,108,100,32,98,
-    101,32,115,101,116,32,116,111,32,78,111,110,101,10,32,32,
-    32,32,116,111,32,114,101,112,114,101,115,101,110,116,32,116,
-    104,97,116,32,105,116,115,32,112,114,111,112,101,114,32,118,
-    97,108,117,101,32,105,115,32,117,110,107,110,111,119,110,46,
-    10,10,32,32,32,32,114,130,0,0,0,114,89,0,0,0,
-    78,122,32,95,95,112,97,99,107,97,103,101,95,95,32,33,
-    61,32,95,95,115,112,101,99,95,95,46,112,97,114,101,110,
-    116,32,40,122,4,32,33,61,32,250,1,41,114,136,0,0,
-    0,233,3,0,0,0,122,89,99,97,110,39,116,32,114,101,
-    115,111,108,118,101,32,112,97,99,107,97,103,101,32,102,114,
-    111,109,32,95,95,115,112,101,99,95,95,32,111,114,32,95,
-    95,112,97,99,107,97,103,101,95,95,44,32,102,97,108,108,
-    105,110,103,32,98,97,99,107,32,111,110,32,95,95,110,97,
-    109,101,95,95,32,97,110,100,32,95,95,112,97,116,104,95,
-    95,114,1,0,0,0,114,127,0,0,0,114,117,0,0,0,
-    114,19,0,0,0,41,6,114,30,0,0,0,114,119,0,0,
-    0,114,138,0,0,0,114,139,0,0,0,114,172,0,0,0,
-    114,118,0,0,0,41,3,218,7,103,108,111,98,97,108,115,
-    114,166,0,0,0,114,82,0,0,0,114,10,0,0,0,114,
-    10,0,0,0,114,11,0,0,0,218,17,95,99,97,108,99,
-    95,95,95,112,97,99,107,97,103,101,95,95,253,3,0,0,
-    115,30,0,0,0,0,7,10,1,10,1,8,1,18,1,22,
-    2,12,1,6,1,8,1,8,2,6,2,12,1,8,1,8,
-    1,14,1,114,195,0,0,0,99,5,0,0,0,0,0,0,
-    0,9,0,0,0,5,0,0,0,67,0,0,0,115,170,0,
-    0,0,124,4,100,1,107,2,114,18,116,0,124,0,131,1,
-    125,5,110,36,124,1,100,2,107,9,114,30,124,1,110,2,
-    105,0,125,6,116,1,124,6,131,1,125,7,116,0,124,0,
-    124,7,124,4,131,3,125,5,124,3,115,154,124,4,100,1,
-    107,2,114,86,116,0,124,0,106,2,100,3,131,1,100,1,
-    25,0,131,1,83,0,113,166,124,0,115,96,124,5,83,0,
-    113,166,116,3,124,0,131,1,116,3,124,0,106,2,100,3,
-    131,1,100,1,25,0,131,1,24,0,125,8,116,4,106,5,
-    124,5,106,6,100,2,116,3,124,5,106,6,131,1,124,8,
-    24,0,133,2,25,0,25,0,83,0,110,12,116,7,124,5,
-    124,3,116,0,131,3,83,0,100,2,83,0,41,4,97,215,
-    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,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,114,19,0,0,0,78,
-    114,117,0,0,0,41,8,114,183,0,0,0,114,195,0,0,
-    0,218,9,112,97,114,116,105,116,105,111,110,114,164,0,0,
-    0,114,14,0,0,0,114,79,0,0,0,114,1,0,0,0,
-    114,191,0,0,0,41,9,114,15,0,0,0,114,194,0,0,
-    0,218,6,108,111,99,97,108,115,114,189,0,0,0,114,167,
-    0,0,0,114,83,0,0,0,90,8,103,108,111,98,97,108,
-    115,95,114,166,0,0,0,90,7,99,117,116,95,111,102,102,
-    114,10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,
-    10,95,95,105,109,112,111,114,116,95,95,24,4,0,0,115,
-    26,0,0,0,0,11,8,1,10,2,16,1,8,1,12,1,
-    4,3,8,1,20,1,4,1,6,4,26,3,32,2,114,198,
-    0,0,0,99,1,0,0,0,0,0,0,0,2,0,0,0,
-    3,0,0,0,67,0,0,0,115,38,0,0,0,116,0,106,
-    1,124,0,131,1,125,1,124,1,100,0,107,8,114,30,116,
-    2,100,1,124,0,23,0,131,1,130,1,116,3,124,1,131,
-    1,83,0,41,2,78,122,25,110,111,32,98,117,105,108,116,
-    45,105,110,32,109,111,100,117,108,101,32,110,97,109,101,100,
-    32,41,4,114,147,0,0,0,114,151,0,0,0,114,70,0,
-    0,0,114,146,0,0,0,41,2,114,15,0,0,0,114,82,
-    0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,0,
-    0,0,218,18,95,98,117,105,108,116,105,110,95,102,114,111,
-    109,95,110,97,109,101,59,4,0,0,115,8,0,0,0,0,
-    1,10,1,8,1,12,1,114,199,0,0,0,99,2,0,0,
-    0,0,0,0,0,12,0,0,0,12,0,0,0,67,0,0,
-    0,115,244,0,0,0,124,1,97,0,124,0,97,1,116,2,
-    116,1,131,1,125,2,120,86,116,1,106,3,106,4,131,0,
-    68,0,93,72,92,2,125,3,125,4,116,5,124,4,124,2,
-    131,2,114,28,124,3,116,1,106,6,107,6,114,62,116,7,
-    125,5,110,18,116,0,106,8,124,3,131,1,114,28,116,9,
-    125,5,110,2,113,28,116,10,124,4,124,5,131,2,125,6,
-    116,11,124,6,124,4,131,2,1,0,113,28,87,0,116,1,
-    106,3,116,12,25,0,125,7,120,54,100,5,68,0,93,46,
-    125,8,124,8,116,1,106,3,107,7,114,144,116,13,124,8,
-    131,1,125,9,110,10,116,1,106,3,124,8,25,0,125,9,
-    116,14,124,7,124,8,124,9,131,3,1,0,113,120,87,0,
-    121,12,116,13,100,2,131,1,125,10,87,0,110,24,4,0,
-    116,15,107,10,114,206,1,0,1,0,1,0,100,3,125,10,
-    89,0,110,2,88,0,116,14,124,7,100,2,124,10,131,3,
-    1,0,116,13,100,4,131,1,125,11,116,14,124,7,100,4,
-    124,11,131,3,1,0,100,3,83,0,41,6,122,250,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,95,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,114,138,0,0,0,114,20,0,
-    0,0,78,114,55,0,0,0,41,1,122,9,95,119,97,114,
-    110,105,110,103,115,41,16,114,46,0,0,0,114,14,0,0,
-    0,114,13,0,0,0,114,79,0,0,0,218,5,105,116,101,
-    109,115,114,174,0,0,0,114,69,0,0,0,114,147,0,0,
-    0,114,75,0,0,0,114,157,0,0,0,114,128,0,0,0,
-    114,133,0,0,0,114,1,0,0,0,114,199,0,0,0,114,
-    5,0,0,0,114,70,0,0,0,41,12,218,10,115,121,115,
-    95,109,111,100,117,108,101,218,11,95,105,109,112,95,109,111,
-    100,117,108,101,90,11,109,111,100,117,108,101,95,116,121,112,
-    101,114,15,0,0,0,114,83,0,0,0,114,93,0,0,0,
-    114,82,0,0,0,90,11,115,101,108,102,95,109,111,100,117,
-    108,101,90,12,98,117,105,108,116,105,110,95,110,97,109,101,
-    90,14,98,117,105,108,116,105,110,95,109,111,100,117,108,101,
-    90,13,116,104,114,101,97,100,95,109,111,100,117,108,101,90,
-    14,119,101,97,107,114,101,102,95,109,111,100,117,108,101,114,
-    10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,6,
-    95,115,101,116,117,112,66,4,0,0,115,50,0,0,0,0,
-    9,4,1,4,3,8,1,20,1,10,1,10,1,6,1,10,
-    1,6,2,2,1,10,1,14,3,10,1,10,1,10,1,10,
-    2,10,1,16,3,2,1,12,1,14,2,10,1,12,3,8,
-    1,114,203,0,0,0,99,2,0,0,0,0,0,0,0,3,
-    0,0,0,3,0,0,0,67,0,0,0,115,66,0,0,0,
-    116,0,124,0,124,1,131,2,1,0,116,1,106,2,106,3,
-    116,4,131,1,1,0,116,1,106,2,106,3,116,5,131,1,
-    1,0,100,1,100,2,108,6,125,2,124,2,97,7,124,2,
-    106,8,116,1,106,9,116,10,25,0,131,1,1,0,100,2,
-    83,0,41,3,122,50,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,114,19,0,0,0,78,41,11,
-    114,203,0,0,0,114,14,0,0,0,114,171,0,0,0,114,
-    109,0,0,0,114,147,0,0,0,114,157,0,0,0,218,26,
-    95,102,114,111,122,101,110,95,105,109,112,111,114,116,108,105,
-    98,95,101,120,116,101,114,110,97,108,114,115,0,0,0,218,
-    8,95,105,110,115,116,97,108,108,114,79,0,0,0,114,1,
-    0,0,0,41,3,114,201,0,0,0,114,202,0,0,0,114,
-    204,0,0,0,114,10,0,0,0,114,10,0,0,0,114,11,
-    0,0,0,114,205,0,0,0,113,4,0,0,115,12,0,0,
-    0,0,2,10,2,12,1,12,3,8,1,4,1,114,205,0,
-    0,0,41,2,78,78,41,1,78,41,2,78,114,19,0,0,
-    0,41,50,114,3,0,0,0,114,115,0,0,0,114,12,0,
-    0,0,114,16,0,0,0,114,51,0,0,0,114,29,0,0,
-    0,114,36,0,0,0,114,17,0,0,0,114,18,0,0,0,
-    114,41,0,0,0,114,42,0,0,0,114,45,0,0,0,114,
-    56,0,0,0,114,58,0,0,0,114,68,0,0,0,114,74,
-    0,0,0,114,77,0,0,0,114,84,0,0,0,114,95,0,
-    0,0,114,96,0,0,0,114,102,0,0,0,114,78,0,0,
-    0,218,6,111,98,106,101,99,116,90,9,95,80,79,80,85,
-    76,65,84,69,114,128,0,0,0,114,133,0,0,0,114,141,
-    0,0,0,114,91,0,0,0,114,80,0,0,0,114,145,0,
-    0,0,114,146,0,0,0,114,81,0,0,0,114,147,0,0,
-    0,114,157,0,0,0,114,162,0,0,0,114,168,0,0,0,
-    114,170,0,0,0,114,173,0,0,0,114,178,0,0,0,114,
-    188,0,0,0,114,179,0,0,0,114,181,0,0,0,114,182,
-    0,0,0,114,183,0,0,0,114,191,0,0,0,114,195,0,
-    0,0,114,198,0,0,0,114,199,0,0,0,114,203,0,0,
-    0,114,205,0,0,0,114,10,0,0,0,114,10,0,0,0,
-    114,10,0,0,0,114,11,0,0,0,218,8,60,109,111,100,
-    117,108,101,62,8,0,0,0,115,94,0,0,0,4,17,4,
-    2,8,8,8,7,4,2,4,3,16,4,14,68,14,21,14,
-    19,8,19,8,19,8,11,14,8,8,11,8,12,8,16,8,
-    36,14,27,14,101,16,26,6,3,10,45,14,60,8,18,8,
-    17,8,25,8,29,8,23,8,16,14,73,14,77,14,13,8,
-    9,8,9,10,47,8,20,4,1,8,2,8,27,8,6,10,
-    24,8,32,8,27,18,35,8,7,8,47,
+    2,1,0,87,0,113,64,4,0,116,8,107,10,114,154,1,
+    0,125,5,1,0,122,20,124,5,106,9,124,4,107,2,114,
+    136,119,64,130,0,87,0,89,0,100,5,100,5,125,5,126,
+    5,88,0,113,64,88,0,113,64,87,0,124,0,83,0,41,
+    6,122,238,70,105,103,117,114,101,32,111,117,116,32,119,104,
+    97,116,32,95,95,105,109,112,111,114,116,95,95,32,115,104,
+    111,117,108,100,32,114,101,116,117,114,110,46,10,10,32,32,
+    32,32,84,104,101,32,105,109,112,111,114,116,95,32,112,97,
+    114,97,109,101,116,101,114,32,105,115,32,97,32,99,97,108,
+    108,97,98,108,101,32,119,104,105,99,104,32,116,97,107,101,
+    115,32,116,104,101,32,110,97,109,101,32,111,102,32,109,111,
+    100,117,108,101,32,116,111,10,32,32,32,32,105,109,112,111,
+    114,116,46,32,73,116,32,105,115,32,114,101,113,117,105,114,
+    101,100,32,116,111,32,100,101,99,111,117,112,108,101,32,116,
+    104,101,32,102,117,110,99,116,105,111,110,32,102,114,111,109,
+    32,97,115,115,117,109,105,110,103,32,105,109,112,111,114,116,
+    108,105,98,39,115,10,32,32,32,32,105,109,112,111,114,116,
+    32,105,109,112,108,101,109,101,110,116,97,116,105,111,110,32,
+    105,115,32,100,101,115,105,114,101,100,46,10,10,32,32,32,
+    32,114,127,0,0,0,250,1,42,218,7,95,95,97,108,108,
+    95,95,122,5,123,125,46,123,125,78,41,10,114,4,0,0,
+    0,114,126,0,0,0,218,6,114,101,109,111,118,101,218,6,
+    101,120,116,101,110,100,114,186,0,0,0,114,38,0,0,0,
+    114,1,0,0,0,114,58,0,0,0,114,180,0,0,0,114,
+    15,0,0,0,41,6,114,83,0,0,0,218,8,102,114,111,
+    109,108,105,115,116,114,181,0,0,0,218,1,120,90,9,102,
+    114,111,109,95,110,97,109,101,90,3,101,120,99,114,10,0,
+    0,0,114,10,0,0,0,114,11,0,0,0,218,16,95,104,
+    97,110,100,108,101,95,102,114,111,109,108,105,115,116,222,3,
+    0,0,115,32,0,0,0,0,10,10,1,8,1,8,1,10,
+    1,10,1,12,1,10,1,10,1,14,1,2,1,14,1,16,
+    4,10,1,2,1,24,1,114,191,0,0,0,99,1,0,0,
+    0,0,0,0,0,3,0,0,0,6,0,0,0,67,0,0,
+    0,115,154,0,0,0,124,0,106,0,100,1,131,1,125,1,
+    124,0,106,0,100,2,131,1,125,2,124,1,100,3,107,9,
+    114,86,124,2,100,3,107,9,114,80,124,1,124,2,106,1,
+    107,3,114,80,116,2,106,3,100,4,124,1,155,2,100,5,
+    124,2,106,1,155,2,100,6,157,5,116,4,100,7,100,8,
+    144,1,131,2,1,0,124,1,83,0,110,64,124,2,100,3,
+    107,9,114,102,124,2,106,1,83,0,110,48,116,2,106,3,
+    100,9,116,4,100,7,100,8,144,1,131,2,1,0,124,0,
+    100,10,25,0,125,1,100,11,124,0,107,7,114,150,124,1,
+    106,5,100,12,131,1,100,13,25,0,125,1,124,1,83,0,
+    41,14,122,167,67,97,108,99,117,108,97,116,101,32,119,104,
+    97,116,32,95,95,112,97,99,107,97,103,101,95,95,32,115,
+    104,111,117,108,100,32,98,101,46,10,10,32,32,32,32,95,
+    95,112,97,99,107,97,103,101,95,95,32,105,115,32,110,111,
+    116,32,103,117,97,114,97,110,116,101,101,100,32,116,111,32,
+    98,101,32,100,101,102,105,110,101,100,32,111,114,32,99,111,
+    117,108,100,32,98,101,32,115,101,116,32,116,111,32,78,111,
+    110,101,10,32,32,32,32,116,111,32,114,101,112,114,101,115,
+    101,110,116,32,116,104,97,116,32,105,116,115,32,112,114,111,
+    112,101,114,32,118,97,108,117,101,32,105,115,32,117,110,107,
+    110,111,119,110,46,10,10,32,32,32,32,114,130,0,0,0,
+    114,89,0,0,0,78,122,32,95,95,112,97,99,107,97,103,
+    101,95,95,32,33,61,32,95,95,115,112,101,99,95,95,46,
+    112,97,114,101,110,116,32,40,122,4,32,33,61,32,250,1,
+    41,114,136,0,0,0,233,3,0,0,0,122,89,99,97,110,
+    39,116,32,114,101,115,111,108,118,101,32,112,97,99,107,97,
+    103,101,32,102,114,111,109,32,95,95,115,112,101,99,95,95,
+    32,111,114,32,95,95,112,97,99,107,97,103,101,95,95,44,
+    32,102,97,108,108,105,110,103,32,98,97,99,107,32,111,110,
+    32,95,95,110,97,109,101,95,95,32,97,110,100,32,95,95,
+    112,97,116,104,95,95,114,1,0,0,0,114,127,0,0,0,
+    114,117,0,0,0,114,19,0,0,0,41,6,114,30,0,0,
+    0,114,119,0,0,0,114,138,0,0,0,114,139,0,0,0,
+    114,172,0,0,0,114,118,0,0,0,41,3,218,7,103,108,
+    111,98,97,108,115,114,166,0,0,0,114,82,0,0,0,114,
+    10,0,0,0,114,10,0,0,0,114,11,0,0,0,218,17,
+    95,99,97,108,99,95,95,95,112,97,99,107,97,103,101,95,
+    95,253,3,0,0,115,30,0,0,0,0,7,10,1,10,1,
+    8,1,18,1,22,2,12,1,6,1,8,1,8,2,6,2,
+    12,1,8,1,8,1,14,1,114,195,0,0,0,99,5,0,
+    0,0,0,0,0,0,9,0,0,0,5,0,0,0,67,0,
+    0,0,115,170,0,0,0,124,4,100,1,107,2,114,18,116,
+    0,124,0,131,1,125,5,110,36,124,1,100,2,107,9,114,
+    30,124,1,110,2,105,0,125,6,116,1,124,6,131,1,125,
+    7,116,0,124,0,124,7,124,4,131,3,125,5,124,3,115,
+    154,124,4,100,1,107,2,114,86,116,0,124,0,106,2,100,
+    3,131,1,100,1,25,0,131,1,83,0,113,166,124,0,115,
+    96,124,5,83,0,113,166,116,3,124,0,131,1,116,3,124,
+    0,106,2,100,3,131,1,100,1,25,0,131,1,24,0,125,
+    8,116,4,106,5,124,5,106,6,100,2,116,3,124,5,106,
+    6,131,1,124,8,24,0,133,2,25,0,25,0,83,0,110,
+    12,116,7,124,5,124,3,116,0,131,3,83,0,100,2,83,
+    0,41,4,97,215,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,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,114,
+    19,0,0,0,78,114,117,0,0,0,41,8,114,184,0,0,
+    0,114,195,0,0,0,218,9,112,97,114,116,105,116,105,111,
+    110,114,164,0,0,0,114,14,0,0,0,114,79,0,0,0,
+    114,1,0,0,0,114,191,0,0,0,41,9,114,15,0,0,
+    0,114,194,0,0,0,218,6,108,111,99,97,108,115,114,189,
+    0,0,0,114,167,0,0,0,114,83,0,0,0,90,8,103,
+    108,111,98,97,108,115,95,114,166,0,0,0,90,7,99,117,
+    116,95,111,102,102,114,10,0,0,0,114,10,0,0,0,114,
+    11,0,0,0,218,10,95,95,105,109,112,111,114,116,95,95,
+    24,4,0,0,115,26,0,0,0,0,11,8,1,10,2,16,
+    1,8,1,12,1,4,3,8,1,20,1,4,1,6,4,26,
+    3,32,2,114,198,0,0,0,99,1,0,0,0,0,0,0,
+    0,2,0,0,0,3,0,0,0,67,0,0,0,115,38,0,
+    0,0,116,0,106,1,124,0,131,1,125,1,124,1,100,0,
+    107,8,114,30,116,2,100,1,124,0,23,0,131,1,130,1,
+    116,3,124,1,131,1,83,0,41,2,78,122,25,110,111,32,
+    98,117,105,108,116,45,105,110,32,109,111,100,117,108,101,32,
+    110,97,109,101,100,32,41,4,114,147,0,0,0,114,151,0,
+    0,0,114,70,0,0,0,114,146,0,0,0,41,2,114,15,
+    0,0,0,114,82,0,0,0,114,10,0,0,0,114,10,0,
+    0,0,114,11,0,0,0,218,18,95,98,117,105,108,116,105,
+    110,95,102,114,111,109,95,110,97,109,101,59,4,0,0,115,
+    8,0,0,0,0,1,10,1,8,1,12,1,114,199,0,0,
+    0,99,2,0,0,0,0,0,0,0,12,0,0,0,12,0,
+    0,0,67,0,0,0,115,244,0,0,0,124,1,97,0,124,
+    0,97,1,116,2,116,1,131,1,125,2,120,86,116,1,106,
+    3,106,4,131,0,68,0,93,72,92,2,125,3,125,4,116,
+    5,124,4,124,2,131,2,114,28,124,3,116,1,106,6,107,
+    6,114,62,116,7,125,5,110,18,116,0,106,8,124,3,131,
+    1,114,28,116,9,125,5,110,2,113,28,116,10,124,4,124,
+    5,131,2,125,6,116,11,124,6,124,4,131,2,1,0,113,
+    28,87,0,116,1,106,3,116,12,25,0,125,7,120,54,100,
+    5,68,0,93,46,125,8,124,8,116,1,106,3,107,7,114,
+    144,116,13,124,8,131,1,125,9,110,10,116,1,106,3,124,
+    8,25,0,125,9,116,14,124,7,124,8,124,9,131,3,1,
+    0,113,120,87,0,121,12,116,13,100,2,131,1,125,10,87,
+    0,110,24,4,0,116,15,107,10,114,206,1,0,1,0,1,
+    0,100,3,125,10,89,0,110,2,88,0,116,14,124,7,100,
+    2,124,10,131,3,1,0,116,13,100,4,131,1,125,11,116,
+    14,124,7,100,4,124,11,131,3,1,0,100,3,83,0,41,
+    6,122,250,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,95,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,114,138,0,
+    0,0,114,20,0,0,0,78,114,55,0,0,0,41,1,122,
+    9,95,119,97,114,110,105,110,103,115,41,16,114,46,0,0,
+    0,114,14,0,0,0,114,13,0,0,0,114,79,0,0,0,
+    218,5,105,116,101,109,115,114,174,0,0,0,114,69,0,0,
+    0,114,147,0,0,0,114,75,0,0,0,114,157,0,0,0,
+    114,128,0,0,0,114,133,0,0,0,114,1,0,0,0,114,
+    199,0,0,0,114,5,0,0,0,114,70,0,0,0,41,12,
+    218,10,115,121,115,95,109,111,100,117,108,101,218,11,95,105,
+    109,112,95,109,111,100,117,108,101,90,11,109,111,100,117,108,
+    101,95,116,121,112,101,114,15,0,0,0,114,83,0,0,0,
+    114,93,0,0,0,114,82,0,0,0,90,11,115,101,108,102,
+    95,109,111,100,117,108,101,90,12,98,117,105,108,116,105,110,
+    95,110,97,109,101,90,14,98,117,105,108,116,105,110,95,109,
+    111,100,117,108,101,90,13,116,104,114,101,97,100,95,109,111,
+    100,117,108,101,90,14,119,101,97,107,114,101,102,95,109,111,
+    100,117,108,101,114,10,0,0,0,114,10,0,0,0,114,11,
+    0,0,0,218,6,95,115,101,116,117,112,66,4,0,0,115,
+    50,0,0,0,0,9,4,1,4,3,8,1,20,1,10,1,
+    10,1,6,1,10,1,6,2,2,1,10,1,14,3,10,1,
+    10,1,10,1,10,2,10,1,16,3,2,1,12,1,14,2,
+    10,1,12,3,8,1,114,203,0,0,0,99,2,0,0,0,
+    0,0,0,0,3,0,0,0,3,0,0,0,67,0,0,0,
+    115,66,0,0,0,116,0,124,0,124,1,131,2,1,0,116,
+    1,106,2,106,3,116,4,131,1,1,0,116,1,106,2,106,
+    3,116,5,131,1,1,0,100,1,100,2,108,6,125,2,124,
+    2,97,7,124,2,106,8,116,1,106,9,116,10,25,0,131,
+    1,1,0,100,2,83,0,41,3,122,50,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,114,19,0,
+    0,0,78,41,11,114,203,0,0,0,114,14,0,0,0,114,
+    171,0,0,0,114,109,0,0,0,114,147,0,0,0,114,157,
+    0,0,0,218,26,95,102,114,111,122,101,110,95,105,109,112,
+    111,114,116,108,105,98,95,101,120,116,101,114,110,97,108,114,
+    115,0,0,0,218,8,95,105,110,115,116,97,108,108,114,79,
+    0,0,0,114,1,0,0,0,41,3,114,201,0,0,0,114,
+    202,0,0,0,114,204,0,0,0,114,10,0,0,0,114,10,
+    0,0,0,114,11,0,0,0,114,205,0,0,0,113,4,0,
+    0,115,12,0,0,0,0,2,10,2,12,1,12,3,8,1,
+    4,1,114,205,0,0,0,41,2,78,78,41,1,78,41,2,
+    78,114,19,0,0,0,41,50,114,3,0,0,0,114,115,0,
+    0,0,114,12,0,0,0,114,16,0,0,0,114,51,0,0,
+    0,114,29,0,0,0,114,36,0,0,0,114,17,0,0,0,
+    114,18,0,0,0,114,41,0,0,0,114,42,0,0,0,114,
+    45,0,0,0,114,56,0,0,0,114,58,0,0,0,114,68,
+    0,0,0,114,74,0,0,0,114,77,0,0,0,114,84,0,
+    0,0,114,95,0,0,0,114,96,0,0,0,114,102,0,0,
+    0,114,78,0,0,0,218,6,111,98,106,101,99,116,90,9,
+    95,80,79,80,85,76,65,84,69,114,128,0,0,0,114,133,
+    0,0,0,114,141,0,0,0,114,91,0,0,0,114,80,0,
+    0,0,114,145,0,0,0,114,146,0,0,0,114,81,0,0,
+    0,114,147,0,0,0,114,157,0,0,0,114,162,0,0,0,
+    114,168,0,0,0,114,170,0,0,0,114,173,0,0,0,114,
+    178,0,0,0,90,15,95,69,82,82,95,77,83,71,95,80,
+    82,69,70,73,88,114,179,0,0,0,114,182,0,0,0,114,
+    183,0,0,0,114,184,0,0,0,114,191,0,0,0,114,195,
+    0,0,0,114,198,0,0,0,114,199,0,0,0,114,203,0,
+    0,0,114,205,0,0,0,114,10,0,0,0,114,10,0,0,
+    0,114,10,0,0,0,114,11,0,0,0,218,8,60,109,111,
+    100,117,108,101,62,8,0,0,0,115,94,0,0,0,4,17,
+    4,2,8,8,8,7,4,2,4,3,16,4,14,68,14,21,
+    14,19,8,19,8,19,8,11,14,8,8,11,8,12,8,16,
+    8,36,14,27,14,101,16,26,6,3,10,45,14,60,8,18,
+    8,17,8,25,8,29,8,23,8,16,14,73,14,77,14,13,
+    8,9,8,9,10,47,8,20,4,1,8,2,8,27,8,6,
+    10,25,8,31,8,27,18,35,8,7,8,47,
 };